Преди известно време Бачийски ми даде един линк към едно доста забавно комиксче – xkcd. Не блести с някакъв стил на рисуване (тъй де, stick figures), нито човека ъпдейтва твърде редовно, но някои броеве са просто гениални. Както ще видите, това е „един комикс за роматника, сарказъм, математика и език“. Много броеве са с леко програмистска тематика или пък доста „сладки“. А може би най-представителния е този. Много се кефя, че има уеб комикс с математическа/програмистска тематика, особено такъв с толкова добри попадения.
Monthly Archives: март 2007
Днес…
…се събудих с желанието някой ден да стана QA. Ще работя на Ruby или Python, ще разработвам микроезик, с който да се пишат удобно тестови сценарии, ще правя приложения които цъкат вместо мен по разните бутони в уеб сайта и ще имам огромни проекти с тестове, които ще пускам постянно. Въобще рай, в който ще се занимавам с любимото си нещо – автоматизирано тестване и то на по-високо ниво. Свят без клиенти, които нямат идея какво искат, свят без мъгляви и неясни спецификации, свят в който промените по заданието не ми съсипват няколко дена работа, свят в който никой няма да ме кара да му пиша CSS за да „преместя това три пиксела надясно“ или да „намаля шрифта два пункта“, свят в който ще натривам носовете на програмистите със собствените им грешки и свят в който няма да правя чудеса от храброст, за да догонвам невъзможни крайни срокове. Въобще, свят мечта.
Две минути по-късно ми мина.
Seattle Night
Вчера беше поредното издание на Seattle Night. На това събитие фенове на грънджа се събират да се радват на това как различни български музиканти свирят любимата им музика. Провежда се два пъти в годината и този път бе в клуб „Алкохол“.
Имаше доста народ, но не беше твърде голям гърч. Атмосферата си я биваше – мрачно, претъпкано, миришеше яко на цигари и тук таме някой бе запалил трева. Човек трябваше да си проправя път със старание, след тълпи от пропаднало изглеждащи хора (myself included). Малкия Туборг беше 2.40, а за другия алкохол нямах сили да проверявам.
Свиреха Der Huns, Awake, Скреч и още едни типове, чието име не запомних. Не се интересувам от българските музиканти – знаех ги като имена, но не ги бях слушал. Много ме накефиха Der Huns и Awake. Oсобено първите – пееха страхотен Soundgarden (и Rooster на Alice in Chains). Нещата се развихриха най-много точно преди да излязат Скреч – ставаше безумно пого, а аз се бях озовал точно пред сцената и върху гърба ми скачаха мнозина потни тела. Ники (човека който ме открехна на тая музика) бая си изпати от цялото това подскачане – дори ми заби един зъб в носа, но за щастие и неговите зъби и моя нос останаха цели. Имаше и двама младежа, които също много се раздаваха, но после се включи охраната и престана да е интересно.
Завършека беше страхотен. Awake изпяха Would?, I Don’t Know Anything, Breed, Animal, You Know You’re Right, Sex Type Thing, Plush и Once. Култово просто. Накрая съвсем бях останал без глас – не че съм особено гласовит, макар и някои от вас знаят за скрития ми потенциал на death metal вокал – и едвам успях да събера сили да се раздам изляцо на последното парче (едно от любимите ми). След цялото това нещо бях уморен, потен, със заглъхнали уши и почти неспособен да говоря. Дори на следващия ден ме боли здраво гърлото и имам температура (явно съм хванал някой грипец от цялото занятие). И все пак, бяха едни от най-добре похарчените 6 лв през живота ми.
Себичен питон
Метакласовете в Python са много яко нещо. Макар все още да не ми се е наложило да напиша дори един такъв за работата си, са много полезен източник на забавления. Сега ще ви покажа как с малко остроумие може да дефинирате класове по следния интересен начин:
__metaclass__ = selfless
def __init__(name, age):
self.name = name
self.age = age
def __repr__():
return "Person(%s, %d)" % (repr(self.name), self.age)
def sayHi():
print "Hello, I’m %s and I’m %d years old" % (self.name, self.age)
def rename(newName):
self.name = newName
Интересното? Въобще не ви се налага да пишете self пред имената на методите.
Динамичен питон
След като много хора от курса проявиха интерес колко точно динамичен е Python, реших да съставя малко примерче как „динамично“ (т.е. по време на изпълнение) може да си конструираме изцяло нов клас. Наслаждавайте се!
Ръсел
Множестовото от всички естествени числа е безкрайно. Множеството от всички отворени интервали между 0 и 1 е множество от множества (защото всеки интервал е множество). Множеството от всички множества е множество, което очевидно съдържа себе си. Тогава може да си говорим за:
Q: множеството от всички множества, които нe съдържат себе си
Отговорете ми, моля ви, Q съдържа ли себе си или не?
fizzbuzz.py
Ето как бих решил FizzBuzz проблема, в оригиналния му вариант, където дори принтираме, вместо да връщаме речник:
if n % 3 == 0 and n % 5 == 0:
print ‘FizzBuzz’
elif n % 3 == 0:
print ‘Fizz’
elif n % 5 == 0:
print ‘Buzz’
else:
print n
Просто, нали? Но да мотивирам това решение:
Софтуерни метафори
Наскоро започна твърде често да ми се налага да обяснявам процеса на разработка на „нетехнически лица“. И тъй като е бая сложно да говориш за рефакторинг, редизайн и итерации на хора, които просто мигат на тези думички, си припомних мъдростта на Стив МакКонъл. В Code Complete имаше цяла глава, посветена на метафори за софтуерното разработване – бе го сравнил с писане на жудожествен текст, градинарство, игра и прочее. Безспорно най-доброто сравнение беше с изграждането на някаква постройка. Наистина, „сградостроенето“ е доста сходно до това което ние правим като програмисти. И на двете места си говорим за „архитектура“ и „инженери“, планирането е адски важно и има огромна разлика между строенето на лятна кухня и небостъргач… Continue reading
Корпоративни врътки
По-рано споменах, че стана някаква странна врътка с клиентите ни. Сега ще ви я разкажа. Едва ли ще оцените иронията, тъй като не сте на топа на екшъна, но все пак:
От известно време насам работим за клиент A. Отивах на командировката с ясното съзнание, че ще интегрираме един search engine за тях. Наскоро те бяха купени от голямата компания B, която притежава много сходни на тях фирми. Докато се въртяха през цикъла престават/продължават/престават/продължават да работят с нас, нашето CEO ловко докопа няколко други клиента. Един от тях беше фирмата D – те щяха да правят конкурентен продукт на A, и въпреки че не сме работили над същата услуга за A (в единия случай правихме сайта, докато в другия системата), те не трябваше да разбират за този наш клиент. По-точно, човека M, който ни беше technical manager-а от страната на A не биваше да научава.
Хубаво де, ама след като компанията B са купили A, те са решили да изнесат съвсем целия горен мениджмънт на А (човекът M включително) и да го сменят с друг. И като включим двамата програмиста, които се изнесоха от A същия месец, в тази фирма вече не познавах почти никой. И не просто фирмата въобще не беше същата – очакваше се да хванем още един клиент в същия бизнес, който също им е конкурент поне донякъде. И не стига, че нещата станаха бая заплетени, ами като се върнах разбрах, че човека M вече работи за D, сиреч вече е отговорник на проекта, за който шефовете казаха да не му казваме.
Луда работа…
Python @ FMI
От известно време не съм писал – разходката до Стокхолм бе бая тегава, особено след изпуснатия полет и преспиването във Варшава. А като се върнах бях залят от задачи, една от които бе курса по Python във ФМИ. И тъй като днес е „юбилейната“ четвърта лекция (сиреч две седмици), викам да драсна няколко реда по въпроса. Continue reading