Это забавно, у меня просто была потребность в этом на днях, и я не мог найти реализацию стоящей использования..., таким образом, я записал свое собственное:
import functools
class EnumValue(object):
def __init__(self,name,value,type):
self.__value=value
self.__name=name
self.Type=type
def __str__(self):
return self.__name
def __repr__(self):#2.6 only... so change to what ever you need...
return '{cls}({0!r},{1!r},{2})'.format(self.__name,self.__value,self.Type.__name__,cls=type(self).__name__)
def __hash__(self):
return hash(self.__value)
def __nonzero__(self):
return bool(self.__value)
def __cmp__(self,other):
if isinstance(other,EnumValue):
return cmp(self.__value,other.__value)
else:
return cmp(self.__value,other)#hopefully their the same type... but who cares?
def __or__(self,other):
if other is None:
return self
elif type(self) is not type(other):
raise TypeError()
return EnumValue('{0.Name} | {1.Name}'.format(self,other),self.Value|other.Value,self.Type)
def __and__(self,other):
if other is None:
return self
elif type(self) is not type(other):
raise TypeError()
return EnumValue('{0.Name} & {1.Name}'.format(self,other),self.Value&other.Value,self.Type)
def __contains__(self,other):
if self.Value==other.Value:
return True
return bool(self&other)
def __invert__(self):
enumerables=self.Type.__enumerables__
return functools.reduce(EnumValue.__or__,(enum for enum in enumerables.itervalues() if enum not in self))
@property
def Name(self):
return self.__name
@property
def Value(self):
return self.__value
class EnumMeta(type):
@staticmethod
def __addToReverseLookup(rev,value,newKeys,nextIter,force=True):
if value in rev:
forced,items=rev.get(value,(force,()) )
if forced and force: #value was forced, so just append
rev[value]=(True,items+newKeys)
elif not forced:#move it to a new spot
next=nextIter.next()
EnumMeta.__addToReverseLookup(rev,next,items,nextIter,False)
rev[value]=(force,newKeys)
else: #not forcing this value
next = nextIter.next()
EnumMeta.__addToReverseLookup(rev,next,newKeys,nextIter,False)
rev[value]=(force,newKeys)
else:#set it and forget it
rev[value]=(force,newKeys)
return value
def __init__(cls,name,bases,atts):
classVars=vars(cls)
enums = classVars.get('__enumerables__',None)
nextIter = getattr(cls,'__nextitr__',itertools.count)()
reverseLookup={}
values={}
if enums is not None:
#build reverse lookup
for item in enums:
if isinstance(item,(tuple,list)):
items=list(item)
value=items.pop()
EnumMeta.__addToReverseLookup(reverseLookup,value,tuple(map(str,items)),nextIter)
else:
value=nextIter.next()
value=EnumMeta.__addToReverseLookup(reverseLookup,value,(str(item),),nextIter,False)#add it to the reverse lookup, but don't force it to that value
#build values and clean up reverse lookup
for value,fkeys in reverseLookup.iteritems():
f,keys=fkeys
for key in keys:
enum=EnumValue(key,value,cls)
setattr(cls,key,enum)
values[key]=enum
reverseLookup[value]=tuple(val for val in values.itervalues() if val.Value == value)
setattr(cls,'__reverseLookup__',reverseLookup)
setattr(cls,'__enumerables__',values)
setattr(cls,'_Max',max([key for key in reverseLookup] or [0]))
return super(EnumMeta,cls).__init__(name,bases,atts)
def __iter__(cls):
for enum in cls.__enumerables__.itervalues():
yield enum
def GetEnumByName(cls,name):
return cls.__enumerables__.get(name,None)
def GetEnumByValue(cls,value):
return cls.__reverseLookup__.get(value,(None,))[0]
class Enum(object):
__metaclass__=EnumMeta
__enumerables__=None
class FlagEnum(Enum):
@staticmethod
def __nextitr__():
yield 0
for val in itertools.count():
yield 2**val
def enum(name,*args):
return EnumMeta(name,(Enum,),dict(__enumerables__=args))
Как хотите, это сделало то, что мне был нужен он, чтобы сделать:)
Использование это как:
class Air(FlagEnum):
__enumerables__=('None','Oxygen','Nitrogen','Hydrogen')
class Mammals(Enum):
__enumerables__=('Bat','Whale',('Dog','Puppy',1),'Cat')
Bool = enum('Bool','Yes',('No',0))
1000 долларов, кажется, достаточно, чтобы купить Visual Помогите 5-7 членам команды за два месяца. Это только для команд Visual Studio.
Если ваши команды работают с Windows Vista, сделайте предзаказ на Windows 7 и дайте им облегчение, что они наконец-то стали бесплатными.
Разделите деньги на книжный бюджет для каждого члена команды и отправьте их на этот вопрос для получения идей. В частности, если они хотят использовать AddAll для поиска выгодных сделок, это поможет хоть немного пополнить библиотеки.
Установите высокопроизводительный SSD и 4 ГБ ОЗУ на каждую машину. На те 500 долларов, которые у вас останутся, достаньте всем как минимум 2 20-дюймовых плоских экрана.
Я бы взял эти деньги и создал больше стимулов для ваших программистов. Если у них есть какой-то бонус за достижение определенного уровня измеримых улучшений в каком-то аспекте вашего бизнеса, то это может их уникальным образом мотивировать.
Я бы посмотрел Axure, http://www.axure.com/ , я еще не пробовал бесплатно скачать, но скоро буду, и инструмент для создания прототипов, через который даже один человек может пройти и разработать требования с заказчиком, вероятно, очень поможет вам, и я знаю, что лицензия стоит около 500 долларов. Правильный дизайн, соответствующий потребностям клиента, вероятно, принесет вам максимальную отдачу от вложенных средств.
Несколько цветов и увлажнитель воздуха, и ручка, если я просто не нарушил бюджет.
You should buy a foosball table for the team. Nothing builds team morale better than letting them have fun once in a while. And let them play a game or two in business hours each day. It is very refreshing for both mind & body!
We have a table where I work and it is a pretty good reason for staying at the company. The team has much fun (and would you believe it, but we even won the town championship!).
PS - Put the table in a room where it does not disturb too much if possible.
As everyone else has noted $1000 isn't going to do a lot in terms of better software. So I'd concentrate of the morale of my developers.
Pizza, Mt. Dew and a nice Espresso machine.
EDIT
Actually I did think of something $1000 would buy. Some testing systems running some kind of VM software. The hardware would probably be around $250 a pop, and you can find CRTs for free. Since no one is going to be using them for prolonged periods this should be fine. Back when I was using Ardence Smart Clients each license went for $125 per system so you could probably get 3 testing systems with $1000.
This really depends on your team.
Depending on the size of the team, $1000 isn't much. Developer tools go a long way - ie: things like Resharper can do wonders to increase productivity, and are inexpensive.
That being said, if your culture supports it, $1000 can be a very effective motivator as a bonus.... I'd argue that it can bring more results per dollar than any other single thing, if handled property. This is a tricky thing to manage, though, so it really depends on your team.
Да ладно тебе ... этого еще никто не сказал?
Без сомнения, получите копию FogBugz для своей группы.
$1000 isn't a lot (eg. to spend on training or something similar). So i would invest it in the tooling and hardware.
Some Various and inexpensive software that I personally use:
I would definitely go and ask the team this question though, chances are they know the tools or hardware that they need that will make their jobs easier. After all, they will be the ones using whatever is purchased.
Второй ЖК-монитор с диагональю 20 дюймов для каждого человека или, если это уже так, стулья получше.
Если у группы еще нет доски в каждой рабочей области, как частной, так и общей, измените это.
Раз в неделю приглашайте команду на обед в ресторан средней ценовой категории (не в пиццерию). Когда кончатся 1000 долларов (продолжительность зависит от вашего региона), сражайтесь за больше денег.
Дело в том, что моральный дух имеет огромное влияние на скорость развития. Знание людей, на которых вы работаете / которые заботятся о вас как о личности, а не просто о ресурсе, означает, что вы одинаково заботитесь о них и о том, что вы для них делаете. Мотивация выполнять хорошую работу в хорошем темпе может обеспечить такую же скорость / скорость / что угодно, как и лучшие инструменты (и вы не можете позволить себе лучшие коммерческие инструменты за 1000 долларов)
. Стоит проконсультироваться с командой, чтобы узнать, что они предпочитаю, если у вас есть пара вариантов. Если вы можете приглашать их на обед каждую неделю или дважды на бейсбольный матч, спросите их, что они думают. Игра в бейсбол может показаться вам чрезвычайно увлекательной, если вы любите бейсбол, но она может оказаться самой скучной вещью в мире для половины команды. (говорит по опыту на этом)
Я бы получил команду:
В этом порядке (если нет явной нехватки памяти, то сначала).
Вы можете купить дюжину или больше книг на это. Все ли в команде прочитали Прагматичный программист ?
За тысячу долларов лучшее, что вы могли бы сделать, это вложить средства в перевод ваших разработчиков на систему с двумя мониторами. Для руководства это звучит глупо, но даже если вы заметите увеличение производительности на 1%, это довольно высокая норма прибыли на зарплату разработчика.
Конечно, интересно то, что исследования показали, что эта цифра на самом деле ближе к 20-30%!
http://lifehacker.com/software/dual-monitor/dual-monitors-increase-productivity- 168488.php
Лично у меня в домашнем офисе есть 3 монитора (26-дюймовый Samsung 1680x1050, который я использую для чтения газет, 30-дюймовый 2560x1600 Dell, который я использую для кода, и 42-дюймовый HDTV с разрешением 1920x1080, который я использую браузер, чтобы не мешать работе или использовать при просмотре презентаций. Полностью заполнив свое периферийное зрение, я не не отвлекаться почти так же легко. У меня всегда есть все, что мне нужно, под рукой, и я могу перекрестно ссылаться и сравнивать разные источники, не теряя места и не перетаскивая окна в сторону, чтобы увидеть.
В офисе я использую гораздо менее яркую компоновку с двумя мониторами, но это по-прежнему чистая победа над простыми взглядами на дисплей ноутбука.
Помните, что основная, самая медленная и самая дорогостоящая проблема программного обеспечения не имеет ничего общего с инструментами или производительностью - это осознание того, что вы строите правильную вещь. Все остальное проще, чем это.
Что касается увеличения скорости, вы должны знать, что есть препятствия, что они такое, и как вы можете их устранить, и можно ли потратить 1000 долларов на это? Если нет никаких препятствий, почему вы думаете, что команда может увеличить скорость?
Множество вещей, которые почти ничего не стоят, могут улучшить окружающую среду: сокращение бессмысленных требований к соблюдению, удаление телефонов, улучшение участия заинтересованных сторон и т. Д. лучшие практики описаны в литературе: PeopleWare, Mythical Man-Month, Code Complete, Writing Solid Code, и т. д.
1000 долларов не уйдут далеко, но они запустят библиотеку, так что я думаю, что книги - ваш лучший выбор. Я бы позволил разработчикам решать, как пополнить библиотеку. Я бы также дал каждому разработчику отмеченную часть полки, где можно хранить личные любимые книги, как в книжном магазине, где люди рекомендуют свои любимые книги. Также существует возможность подписки на Safari или членства в ACM или IEEE с цифровыми книжными полками.
Если у вас достаточно разработчиков, устройте добровольное соревнование по программированию на выходных, чтобы решить проблему подходящего размера, имеющую отношение к вашему бизнесу. 1 тыс. Долларов (или все, что останется после оплаты пиццы и т. Д.) Достается победителям (или, возможно, получат 1-е, 2-е, 3-е места). Если для этого вы сгруппируете людей в команды, вы (будем надеяться) укрепите корпоративный дух.
«Так что я бы сосредоточился на моральном духе моих разработчиков».
Я тоже - сколько стоят тазеры?
Для гибких команд вам могут быть интересны инструменты управления проектами, ориентированные на гибкую разработку. Судя по тому, что я слышал (не использовал их сам), и Mingle, и Scrum'd довольно хороши. Если вас это не интересует, ReSharper - незаменимый инструмент для .NET-разработчика. Вы также можете подумать о настройке какой-то системы непрерывной интеграции.
I'd spend the $1000 on a banner that says "$1000 is not a significant amount of money in software development!" Licensing pretty much any tools you'd want or need is going to be more than that, and while you can buy a low-end computer that way, if your teams need hardware that badly, you're already starving them to death.
It MIGHT be enough for a book budget for a short while for a small team. MIGHT.
Кофеварка хорошего качества, которую можно бесплатно использовать.
Пригласите каждую команду разработчиков на выпить в пятницу и используйте $ 1000 для покупки раундов. Это в значительной степени укрепит ваше лидерство и боевой дух команды.
Я бы определенно вложил деньги в большой монитор, красивые кресла и наушники ...
Сообщите своей команде, что они могут выдать 25 долларов (подарочная карта) кому угодно в любое время за выполнение исключительной работы. Это может быть для того, чтобы дать вам 30-минутный обзор кода, помочь вам исправить неприятную ошибку или выполнить рабочее задание за время выше среднего. С 1000 долларов этого хватит на 40 наград. В среднем около 0,5–1,0 награды на человека в неделю.
Время / дата / причина должны быть записаны одной стороной, чтобы снизить риск злоупотреблений. У меня было это на моей последней работе, и я не знал о каких-либо проблемах.
Некоторые люди могут подумать, что использование бонуса - плохой способ поднять моральный дух, но 25 долларов на самом деле не так уж много, так что это скорее признание вещь. Когда награды исходят от коллег, а не от менеджеров, это обычно оказывает большее влияние на получателя. Я считаю важным, чтобы люди не остались в стороне, даже самые новые сотрудники, поэтому для разных рабочих должна быть разная шкала.
Я бы попробовал это в течение нескольких недель, если есть проблемы, то внесу поправки или попробую что-нибудь другое.