Отворен програмист ли си ?

Хората в нашия занаят аз ги деля на два типа – едните са истинските „програмисти“ (или по-широкото понятие „разработчици“), и хора, които просто това работят (да ги наречем „невдъхновени служители“). Предполагам, че не само в нашата професия е така, но все пак аз като стереотипен инжинер трудно виждам отвъд моето си блато. Нали е излишно да казвам, че нашия занаят е по-особен, защото нещата се развиват много бързо, и трябвада се учи постоянно. Много малко от нещата, които са били актуални преди десет години, са актуални сега (разбира се, говоря нещата с практическа насоченост, теоретичните истини са „вечни“). Поне половината неща от преди две години са актуални сега. Което означава, че и ние трябва да се развиваме със променящата се среда, за да сме актуални на пазара, и на ситуацията в която се намираме. Ето затова и питам, ти отворен програмист ли си ?

Изумявам се колко мързеливи, или неправилно мотивирани може да са хората, или просто защо са част от сивата маса на „невдъхновените“ служители, които просто го работят това, и малко ги интересува какво става навън, и как се развива света около тях. Да започнем с по-меките примери и въпроси, и постепенно ще преминем към по-фрапиращите. Фокусът ми ще падне главно върху уеб разработчиците, с което се извинявам на всички други, които се вписват под термина „програмист“, които също заслужават внимание, но пък аз нямам толкова опит там.

За начало, колко от вас са решили да експериментират с друг тип платформа за работа ? Примерно да сте решили да скочите от PHP на Ruby, или от Perl на Python. Ако не решите да експериментирате, как ще разберете дали няма по-добър начин за правене на нещата ? Или ако не по-добър, то поне по-различен … защото понякога решаването на проблема лежи в опита който имате натрупан алтернативно, и радикалния поглед от друга гледна точка почти винаги помага.

А опитвали ли сте актуалните и обсъждани в момента решения ? Примерно опитвали ли сте rapid development с CakePHP или CodeIgniter ? Разглеждали ли сте популярни решения като например Symfony, което Yahoo ползва за сайтове като Yahoo Bookmarks и от скоро Delicious? Или сравнително новия проект Zend Framework, в който Zend вкарват толкова много усилия, и се опитват да наложат като „платформата“ за разработване на уеб приложения ? Ами по принцип интересували ли сте се за огромното количество „рамки“ (абе „frameworks“ … имаше купешка дума за това на български, но не се сещам сега), които са в момента, които са събрали някакво популярност до една или друга степен – примерно Akelos и SolarPHP, или обещаващ, но позабравен проект като WACT ? Всичките са токова различни, и решават различни проблеми по толково различни начини, всеки с плюсовете и минусите си, че непременно ще съберете огромен арсенал за торбата с хитростите, дори и да не използвате дадения framework като основна среда за работа по проектите си.

Разглеждали ли сте популярни готови решения с отворен код ? Аз супер си изумявам някой в нашата професия, ако не е чувал за WordPress. Просто трябва да си се крил две-три години по пещерите, за да не знаеш за едно толково популярно решение. Ами другите ? Примерно Joomla, Drupal, Typo3 … дори phpbb или oscommerce ? На някои от тези проекти кодът им не става за гледане, но пък има добри иде за това как да се справиш с някои проблеми, не само програмно, но и като интерфейс, интеграция и т.н.

Ами освен готови решения с отворен код, ползвали ли сте и библиотеки с отворен код ? Друго нещо което ме изумява, е когато никой не е чувал за неща като domPdf, Smarty, Snoopy, MagpieRSS, SimplePie, или SwiftMail и phpMail, или дори по-инертното PEAR хранилище… и вместо това се правят на Колумб като пишат грозни и бавни дилетански глупости. Ако ги питаш защо ти си ги писал тези неща, като ги има готови, с отворен код, и най-важното – с поддръжка, обикновенно отговорят „ами за да е по-сигурно“ или „ами за да ми е по-лесно, като го знам как работи“. Добре, че не правят автомобили, че ще си изгубят една петилетка да откриват колелото. Сега се сещам, че някои отговарят „ами моето е по-бързо“, въпреки че съм 99% сигурен, че едва ли са пробвали да сравнят бързодействието с някои от готовите библиотеки. За да си продуктивен, трябва да ползваш стабилен код, и нещата да вървят гладко. Библиотеките с отворен код са супер заради това, че отговорността за поддържането не лежи върху вас, и вие няма да губите време да се занимавате с някаква библиотека, а ще може да се съсредоточите върху проекта над който работите. А, да, и да знаете, PHPClasses е за аматьори … кажете ми, че ползвате някой клас от там и гледайте как ще се пръсна от смях. Ако сте някой начинаещ новобранец може да хвърлите някое око там , но най-много да прихванете някой лош навик от там, така че най-добре въобще прескочете този сайт.

Горното се отнася и до JavaScript библиотеките, въпреки че не съм срещал някой да си пише собствен набор от функции .. по-скоро се правят някакви „клани-недоклани“ решения с копиран код от DynamicDrive или AjaxDaddy, който е написан супер късогледо, и всякаква промяна по него е изключително изтезание. Сега поне изборът е голям – за всеки стил на работа ще се намери библиотека: Prototype, MooTools, MochiKit, Dojo, YUI и невероятното jQuery.

Сега, на финала, искам да обърна внимание на хората които са замръзнали на ниво 2000-2002 година. Този тип програмисти ползват процедурен код, защото това е първия начин на който са се научили да работят, и нали се върши някаква работа – няма нужда да се сменя. Пишат обектно-ориентиран код на ниво кръжок по информатика за 3 клас. Доскоро супер закостеняло са ползвали PHP4, защото не са се сетили да видят колко предимства им предоставя PHP5. Става и по-зле … например не се ползва нищо за контрол на версиите, ами всичко се трупа на една споделена машина, в която в отделни папки се записват следващите версии ;) После като се счупи нещо върви търси от коя версия нататък е изплувала грешката, и кой я е направил. Става и още по-зле … например всички работят отдалечено на една машина, „сървъра“, където ако един от всичките прецака файл, необходим в просеца на зареждане на страница, всички други „маймуни на клона“ духат супата и чакат, докато възникналия проблем се отстрани. На колко от вас им стана ясно къде е проблема, и как се решава той чрез решения за контрол на версиите?

И сега най-голямата тъпащина … още има хора, които работят като супер безотговорно омазват едно от най-елементарните правила, които се учат още от началото и които трябва да се спазват просто оповавайки се на здравия разум (дори преди да сте разбрали какво е MVC). Това е разделянето на представянето от логиката. Нали сте наясно, че външния вид на сайтовете се променя по-често от кода, който задвижва цялото приложение … тогава защо смесвате двете ? Първоначално може да ви е по-лесно, но това съпер скоро спира да работи в момента когато трябва да промените нещо, или да го използвате на повече от едно място.

Който се засрамил, засрамил… да не хващам пак парализа на показалеца, и да го размахвам поучително. Хващайте се да четете, и да експериментирате, вместо да вегетирате на работното си място, и да го карате като сив „леминг“.

Обама срещу МакКейн, LAMP срещу Microsoft и .net …

Ето нещо любопитно (което прочетох преди малко тук) – противопоставянето на предстоящите избори за президент на САЩ се проектира на много нива! Републиканецът Джон МакКейн залака на по-консервативното решение, като неговият сайт johnmccain.com се поддържа от Майкрософстката технология .net, докато кандидатът на републиканците Барак Обама за своя сайт barackobama.com е заложел на PHP и отворения код.

Колко бавна е in_array() ?

Понякога като се ползват готовите функции на PHP се влиза в заблуждение за скоростта им на действие. Поне за себе си признавам, че е така. Днес видях този пост и ми стана наистина интересно при какви количествени натрупвания ще настърят качествени изменения:

fbOpen – Facebook платформата

В началото на седмицата излезе платформата за приложения на Facebook пусната под отворен лицензfbOpen (може да си я изтеглите от тук). След като миналата година видяхме що за гарги представлява кода на home страницата, сега ми стана любопитно до видя какъв код са пуснали. Отново видях същите бози.

Документирането на кода е под всякаква критика. Не са забравили да сложат голям блок в началото на файловете за да напомнят под какъв лиценз е пуснат този проект, и това е може би нещото, което най-близо се доближава до добре написана документация в кода. Документацията не е фетиш на педантичните, а е нещо наистина полезно и удобно. Един такъв голям по размерите си проект ще е необходимо да се обслужва от добре написана документация, защото алтернативата е винаги когато ти потрябва нещо да се ровиш из кода. Документиран код в „индийски стил“ с коляма купчина коментари а ла „// whatever“ преди всяка функция е напълно безполезен, защото все още ни знам някой документатор да го парсва, а и де има, ще е голямо чудо на техниката заради косматия формат на инфирмацията (ако изобщо може да се говори за формат). Горе-долу същите критики може да се отправят и към WordPress, само че там се работи много усърдно върху документацията както вътре в кода, така и ресурсите които се предоставят на разработчиците. Да се надяваме, че от Facebook ще поработят за да поизгладят кода си.

За краткото време което разглеждах PHP файловете от проекта не можах да намеря и един клас или обект, и може да си представите какъв кошмар ще е един такъв голям проект като набор от разхвърляни функции. Отново, същата критика може да се отправи и към WordPress, но в по-малка степен, защото там проектът е замислен като такъв, който да работи и с двете версии на PHP (PHP4 и PHP5), докато за един „сървърен“ проект като fbOpen ограниченята, налагани от съобразяването с реалноста на споделения хостинг отпада, и те могат да работят с по-новите и по-добри версии, които предлагат много повече възможности, представени от новия PHP5 (нов, нов, през есента ще стане на 5 години май).

На едно място прочетох, че стила на писане във fbOpen (а и в изплютия файл от Facebook миналата година) е заради подобрения на изпълненето, и по-добро използване на ресурсите. На мен ми изглежда като тъпо оправдание за немърливо написан код, и още по мърляшка поддръжка.

За финал остава само разочарованието, че клиентите не виждат „боклука“ с който работят. Те виждат интерфейса, копчетата, възможностите които предлага сайта (и платформата). Май се оказва, че качеството на кода не е от значение. Нали ?

Zend Framework 1.5.2

Ето че стана време за следващата „микро“ версия 1.5.2 на Zend Framework, в която са оправени над 50 проблема.

Днес малко се разминаха нещата, и първо излизи прес рилийза, а няколко часа по-късно беше обновена и страницата за изтегляне на новага версия. Може би проблема се дължи на забавяне на репликирането на информацията при load-balancing-а на сайта, но това вече не е важно – който иска вече може да си изтегли новата версия.

PHP 5.2.6

Излезе следващата версия на PHP, от PHP 5.2 клона – PHP 5.2.6! Знам, че всички чакат официалното излизане на първата 5.3 версия, но е добре да се види, че се отделя внимание и на основния (за момента) клон. Сигурно това е и причината за многото време между предната версия 5.2.5 и новата 5.2.6 – важното е обаче, че е излязла, и че определено си струва чакането. Погледнете само колко бъга са оправени – повече от 120 :) В тази вирсия са отработени и няколко варианта, при които PHP забива, което са били открити благодарение на увеличаващия се брой unit test-ове – официално, сега около 55.7% от кода се изследва с unit-testing.

Пълния Change Log може да видите ето тук, а официалното съобщение за новата версия ето тук.

Основи на PHP сигурността

Напоследък все повече ми се набива в очите проблема със сигурността в уеб приложенията. Богомил също привлече внимание върху тази тематика, и породеният интерес и висока оценка се дължи на все по-голямата актуалност на този проблем (разбира се, заслуга сигурно има и умението на Богомил да изнася весели презентации). Не знам колко пъти съм повтарял, че подобни неща трябва да са обект на изучаване в университетите, за да подготвят добре висшите специалисти за неща, с които ще се сблъскат на практика в бъдещатата си реализация. Сигурно още повече пъти съм повтарял, колко безполезно по принцип е нашето висше образование, и как по никакав начин не подготвя кадри и специалисти за бизнеса, ами някакви скопени специалисти, които в голямата си част не са способни за нищо друго, освен ниско-квалифицирана работа (ако успеят да работят в сферата за която са учили е постижение). Както и да е, да не храчим така или иначе уродливите ни висши институти, ами да се опитаме да подобрим нещата, като сами обърнем внимание на важните неща.

Основи на PHP сигурносттаЕдна отлична книга за сигурността в уеб приложениеята е Основи на PHP сигурността (Essential PHP Security) на Крис Шифлет. Видовете атаки са систематизирани, обърнато е внимание на добрите практики за справянето с потенциални проблеми със сигурността. Доброто представяне на проблемиете, които може да възникнат, ще ви подготви правилно да прецените най-големите опасности за проектите по които работите. Едно отлично място, откъдето може да намерите книгата е ProfiBooks.com: аз направих так, и съм много доволен, пазаруването онлайн е много удобно, особено когато имате истински професионалисти като ProfiBooks.

В допълнение може да преслушате доклада на Крис Шифлет от ZendCon 2007 на тема „Security 2.0„, който беше публикуван на The ZendCon Sessions.

PHP кошмари…

Ето нещо много забавно (защото не се е случило на мен, иначе щеше да е трагично):

…Here’s an example in a ’signin-3.php’ file (yes, there’s ’signin-2.php’ which represents an earlier version, etc.).

<select name=”state” style=”width:70px” >
<option value=”">Select</option>
<?
if($ss==”AA”)
{?>
<option value=”AA” selected>AA</option>
<option value=”AA”>AA</option>
<option value=”AB”>AB</option>

<option value=”WY”>WY</option>
<option value=”YT”>YT</option>
<? }
?>
<?
if($ss==”AE”)
{?>
<option value=”AA” >AA</option>
<option value=”AE” selected>AE</option>
<option value=”AK”>AK</option>

and on it continues for another 3500+ lines of crap code. This had to have been done by hand (well probably copy/paste) cause I can’t imagine someone being sharp enough to write a generator script for this boilerplate code not also being able to say ‘ why don’t I just run the generator code on the page itself’…

Вие знаете ли за подобни истории ?

Версия 0.2.8 на плъгина за добавяне на Svejo.net бутони се бори с проблем на IE…

Тази версия на плъгина е посветена на справянето на един бъг, предизвикан от Internet Explorer. Мразеният от всички нас браузър не се справя с кодирането на кирилски текст когато той е поставен като HTTP параметър. Грешно кодираният URL не се разчита правилно от уеб сървъра на Svejo.net, и като резултат вместо бутона се отпечатва съобщение за грешка. Решението за този проблем беше намерено преди повече от месец, и вече съм изпратил решението (който е да се ползва encodeURI() за всички GET параметри) и инструкции на момчетата от Svejo.net, които за съжаление са ужасно заети с обемен ъпгрейд на сайта си. Заради честите запитвания за решение на този проблем реших да предложа временно решение, което позволява да изберете кой JavaScript файл за бутони да използвате – оригиналния от Svejo.net (който предизвиква проблема в Internet Explorer), или специално написан от мен, който се справя с този досаден бъг. Сигурен съм, че в края на течащият в момента ъпгрейд, момчетата от Svejo.net ще оправят и този проблем, след което ще премахна току що добавената възможност.

Благодаря на Иван Желев, който ми писа за този бъг, и помогна за да се ориентирам къде е проблема (а и за търпението, защото този проблем беше „рапортуван“ на 7 януари 2008).  Новата версия може да изтеглите от тук:

а повече за проекта може да прочетете тук:

Ако и вие сте забелязали проблеми, помогнете да направим плъгина по.добър, и не се притеснявайте да ги докладвате ;) Както виждате, работа за отстраняването на бъговете, макар и късно ;) Скоро очаквайте следващата версия, която ще се възползва от новия външен вид на административния панел на WordPress 2.5

Версия 0.2.7 на плъгина за добавяне на Svejo.net бутони

Готова е следващата версия, която оправя грешка, която чупи валидацията на кода на страницата при показване на бутоните, тъй като substr() не отрязва добре UTF8 стрингове. Благодаря на Кирил Владимиров, който докладва за проблема. Новата версия може да изтеглите от тук:

а повече за проекта може да прочетете тук:

Ако и вие сте забелязали проблеми, не се притеснявайте да ги докладвате ;) Докладвай рано, доклавай често ;)