fizzbuzz.py

Ето как бих решил FizzBuzz проблема, в оригиналния му вариант, където дори принтираме, вместо да връщаме речник:

for n in range(1, 101):
    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

Просто, нали? Но да мотивирам това решение:

Continue reading

Софтуерни метафори

Наскоро започна твърде често да ми се налага да обяснявам процеса на разработка на „нетехнически лица“. И тъй като е бая сложно да говориш за рефакторинг, редизайн и итерации на хора, които просто мигат на тези думички, си припомних мъдростта на Стив МакКонъл. В 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

Caps Lock

Един от най-тъжните клавиши на клавиатурата е Caps Lock-а. Неговата функция отдавна е забравена и се ползва твърде, твърде рядко. Дори по-използваният Scroll lock (отвъд Windows, де) постепенно изчезва от клавиатурата – слят с други бутони или изместен някъде, където няма да се пречка. Но едно голямо, широко пластмасово парче седи под лявото ви кутре и само му се ядосвате, като го натиснете без да искате. Ето ви идея – сменяйте между кирилица и латиница с него!

Continue reading

Unit тестове #2: Какво да тестваме?

По мои наблюдения, когато хората за първи път се сблъскват с тестовете, нямат голяма идея какво да правят. Или се опитват да покрият абсолютно всеки ред код, прахосвайки много време за ненужни неща, или пък пишат твърде малко тестове и пропускат цялата идея. Както казах по-рано, на мен ми отне месец-два докато разбера защо наистина пиша тестове и доста повече, докато усвоя повече тънкости. Ето ви сбито списъче с неща, които се убедих от първа ръка.

Continue reading

Välkommen till Stockholm

Disclaimer: По принцип нямам голямо желание да ви заливам с разни мой си работи, но след тежкия ден имам нуждата да драсна няколко реда. Ако не ви се четат тегобите ми по чужбина, моля игнорирайте този пост 😀

Днес пристигнах в Стоклохм. На „business trip“ съм, с цел интеграцията на един search engine. Беше бая убийствен ден и дори не знам откъде да започна, затова ще го давам хронологично. Излюпих се едвам виждащ в 5:40 AM, стегнах си багажа, целунах сладката девойка до мен за довиждане и слязох да си взема таксито. Три минути по-късно се усетих, че съм си забравил плейъра. Сливи ли имах в устата, та не му казах да се върне да го взема и аз не знам, ама деня явно започваше лошо. Подраних, изчаках да дойде шефа и се качихме се на голямата бяла птица (след като му изхвърлиха дездоранта, тия гадове от митницата). Continue reading

Unit тестове #1

Може би това, което най-често ми се налага да обяснявам на приятели/колеги е какво представляват unit тестовете и защо за бога си усложняваме живота като ги пишем. Наистина, когато за първи път започнах да работя и големия лош TL ми каза да пиша „тестове за кода на проекта“, бая се оцъклих. Дълго време гледах тъпо JUnit апито и се чудих какво по дяволите се иска от мен да направя с него и по какъв начин това ще помогне на проекта. Но както казват, мъдростта идва с времето – след месец-два не просто му бях хванал цаката, но вече въобще не мога да си представя разработката на сериозно приложение от екип, без да се пишат тестове. И понеже това ми е любима тема, ще се опитам да драсна едно „цикълче“ от статийки, които да разясняват идеята – или поне как аз я разбирам.

Continue reading

Beryl

Преди време застанах очи в очи с класическия проблем, с който човек се сблъсква след като цяла седмица изчиства нещата в bugzilla-та – яко ме мързеше да работя. Докато си цъках безцелно в интернет, видях сайт със странното име gentoo xeffects. Така за първи път разбрах за Beryl. Това чудо представлява window decorator за X-Window, който много хубаво се възползва от възможностите на видео картатата. Накратко, за леко по-високата температура под дясната ми ръка (където ми е видеокартата) получавам фешън 3D ефекти на десктопа си. Първоначало го качих само за да видя що за чудо е – не вярвах нещо въртящия се куб, многото анимации и разнообразните графични ефекти да създават удобна среда за работа. Оказа се, че греша – въпреки ранната версия (0.1.4) и бъговете тук-таме, след два дена нямах никакво желание да се върна обратно на класическия Gnome/Metacity. Continue reading

Функционално програмиране

Ако сте посещавали лекции във ФМИ, несъмнено знаете че съществуват и по-екзотични начини за писане на код от Java и C#. Един от тях е функционалното програмиране. Характерно за него са „функции от по-висок ред“ – такива чиито аргументи или връщани стойности също са функции. Един от първите и най-известни езици за функционално програмиране е LISP. Той предлага някои много елегантни решения на доста проблеми, но едва ли ще се сблъскате с него в днешни дни, освен ако не учите във ФМИ или не пишете макроси за emacs. Въпреки, че едва ли някой пише цели приложения на LISP в днешни дни, някои от идеите на функционалното програмирне са съвсем приложими в „модерните“ езици… Continue reading