July 14, 2008

Какъв съм ?

Ето нещо което не съм очаквал да чуя:

“Ти си прекалено уеб 2.0, и не си достатъчно ентърпрайз 2.0″

Просто формулировката ме разбива отвсякъде. Къде ми е шапката?

June 13, 2008

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

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

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

За начало, колко от вас са решили да експериментират с друг тип платформа за работа ? Примерно да сте решили да скочите от 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). Това е разделянето на представянето от логиката. Нали сте наясно, че външния вид на сайтовете се променя по-често от кода, който задвижва цялото приложение … тогава защо смесвате двете ? Първоначално може да ви е по-лесно, но това съпер скоро спира да работи в момента когато трябва да промените нещо, или да го използвате на повече от едно място.

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

June 6, 2008

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

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

June 5, 2008

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

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

June 4, 2008

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

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

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

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

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

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

May 16, 2008

Zend Framework 1.5.2

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

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

May 5, 2008

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 може да видите ето тук, а официалното съобщение за новата версия ето тук.

April 10, 2008

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

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

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

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

April 6, 2008

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’…

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

April 1, 2008

WordPress 2.5

Това е новина, която приемам със смесени чувства … супер е , че най-накрая излезе новата версия. За разлика от WordPress 2.3 няма големи промени в структурата на базата данни, или в начина по който работят карантиите вътре. Разликите са основно във административния панел, който изглежда по коренно различен начин (като при смяната от 1.* към 2.*), а и има нови функции. Докато новата версия беше все още release candidate трябваше да намеря време и да си оправя плъгините да са съвместими, но все няямаше време. Сега вече е наложително, защото версията вече излезе официално ;) Така, че надявам се разбирате смесените ми чувства - много работа ме чака тази събота и неделя…

March 27, 2008

Zend Framework 1.5.1

Много скоро след излизането на Zend Framework 1.5 вече има нова “микро” версия 1.5.1, в която са оправени над 30 проблема.

Интересно подобрение е добавянето на init() метод към Zend_Form, чиято роля, точно както в Zend_Controller_Action, е да послужи като удобство при инстанцирането на обекта от __construct(), като по този начин ви предложи по-лесен начин за инициализирането на вашия код.

March 20, 2008

Zend Framework 1.5

Само няколко дена след като писах за последния Release Candidate, вече излезе и официалната версия на Zend Framework 1.5. Естествено аз си мотах няколко дена докато се сетя да напиша за това, и вече май не е новина - май всички са го видели. Както и да е — малко коментари: не знам за да оправдаят големия скок във версиите, от Zend не само са подобрили и развили Zend Framework, но и всичко около него! Сайтът изглежда reboot-нат, има добавен официален quickstart (вместо новобранците да обикалят блоговете за полу-неофициални tutorial-и), има добавени подкасти и скрийнкасти, документацията е подобрена (на пръв поглед) с форма за търсене. Всичко изглежда супер ;)

Допълнителна информация може да прочетете тук, а новата версия може да изтеглите от тук.

March 16, 2008

Zend Framework 1.5RC3

Третият release candidate на Zend Framework версия 1.5 е вече излязъл и го има за изтегляне. Това издание е още по-изгладено от предишното, и е доста по-стабилно.

Официално тази версия още не е готова за production release, но излизането и дава възможност още от сега да се провери какво е променено от стария 1.0 клон, и на какво трябва да се обърне внимание, когато се мигрира към 1.5.  За късмет, за да стане всичко по-лесно, в документацията има вече има добавена глава с много полезна информация  точно за  мигрирането от 1.0.* към 1.5.0, и това е нещо,  което задължително трябва се прочете.

February 28, 2008

Zend Framework 1.0.4 + Zend Framework 1.5 RC 1

Вчера е излязла Zend Framework 1.0.4, която ще е последната версия за 1.0 клона на проекта, и която включва над 100 оправени бъга. Въпреки че всички усилия са насочени към работата върху новия 1.5 клон, версията 1.0.4 е пусната за всички които използват Zend Framework в работещи приложения и сайтове. В тази ситуация е изключително важно да продължат да работят с едно по-стабилно издание на Zend Framework, преди да е готова стабилна версия на 1.5 клона.

След като вече заговорихме за 1.5 клона, ето и другата новена от вчера - излезе Zend Framework 1.5 Release Candidate 1. Това идва след няколко месеца работа по този клон, след като беше решено да се започне нов клон на проекта, където разработчиците ще имат по-голяма свобода да правят радикални промени и подобрения. Като резултат тази версия наистина съдържа много нови възможности, подобрения и оправени бъгове, и е “една голяма крачка” напред след 1.0 клона на проекта.

Повече информация може да намерите тук:

February 22, 2008

Какъв му е проблема на Mullenweg с PHP5 ?

Сериозно, голям фен съм на WordPress и на работата, която Automattic вършат, но коментарите за това, че PHP5 не струва, вече вземат да ми омръзват. Повече за интервюто може да прочетете тук.

February 17, 2008

Class Casting в PHP

Аз също съм се чудил, защо PHP все още няма такава възможност, при която да може да cast-неш един обект в друг. Ето едно интересно решение:

/**
 * Cast an object to another class, keeping
 * the properties, but changing the methods
 *
 * @param string $class  Class name
 * @param object $object
 * @return object
 */
function casttoclass($class, $object)
{
 return unserialize(preg_replace(
     '/^O:d+:"[^"]++"/',
     'O:' . strlen($class) . ':"' . $class . '"',
     serialize($object)
   ));
}

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

February 15, 2008

Обхождане на директории - модерният начин!

Много интересен пост прочетох преди малко, и чесно казано до сега не си бях давал сметка, че ако се наложи да обходя някоя категория, винати ползвам по-традиционен модел (точно като рекурсия или стек):

$files = new RecursiveIteratorIterator(
       new RecursiveDirectoryIterator('.')
       );
foreach($files as $file) {
       // Do your stuff here, $file is
       // in fact an SplFileInfo object
       }

PS. Жалко, че е неприложимо в WordPress, който се пише така, че да може да се хоства не само на PHP5, но и на PHP4.

February 9, 2008

Elephpant

Elephpant

January 29, 2008

Zend Framework 1.5 Preview Release

Почти полуофициално бе обявено пускането на 1.5 Preview Release версията на Zend Framework.

Ето кратък списък на новите неща:

  • Нов Zend_Form компонент с поддръжка на AJAX за елементите на формата
  • Нови action helpers и view helpers за по-лесна работа с AJAX заявки или заявки и отговори с различен формат
  • Infocard, OpenID, и LDAP адаптери за автентичност
  • Поддръжка на сложно Lucene търсене, включително fuzzy, date-range, и wildcard заявки
  • Поддръжка на Lucene 2.1 индексен файлов формат
  • Нови възможности за по-разширено конструиране и рендиране на изгледи
  • Нов Zend_Layout компонент за работа с двустъпково рендиране на изгледи (“…ето това чукане чаках!”)
  • UTF-8 поддръжка за PDF документи
  • Поддръжка на нови web services като Technorati, SlideShare, и Remember the Milk

Допълнително, много от вече съществуващите компоненти са подобрени. Много повече неща може да разберете за тази версия, и всичките нови възможноти които предлага, ако се я изтеглите.

December 26, 2007

Е не го разбирам …

Не разбирам защо толкова често се случва - за дадена библиотека или модул се създава собствен синтаксис, който да се използва при подаването на параметри или аргументи. Къде е смисъла в това ? Нали после пак този “псевдо синтаксис” ще бъде обработен и раздробен от PHP за да се получат някакви данни, които PHP може да използва… тогава защо да го мъчим и да губим време, като му подаваме данни, които трябва да “сдъвче” за да се получи нещо които може да се ползва.

Първи пример:

Default Route в Zend Framework - за декларирането му се подават няколко ангумента, между които стрингове от вида на ":page/:action/:id/*" за пътеката, масив с default стойности, и масив със правила за валидация на намерените параметри в пътеката. Какво става след това - пътеката се чупи на “парчета” (или параметри), като за всеки параветър му се назначават правила за валидация и стойност по подразбиране (ако има такива). Много по-лесно е този масив от “парчета” който се получава накрая да бъде използван като аргумент. Така ще се спести всичкото цепене и анализиране, понеже данните се подават в “сдъвкан” вид. Като резултат рутерът ще работи по-бързо (когато се полза default rule), а това според мен е много важно понеже като част от Front Controller-а този код се изпълнява за всяко зареждане на страница, което като краен резултат ще доведе до по-бълза работа на приложението.

Втори пример:

Ето този пост от блога на Крис Шифлит (Chris Shiflett):

в който Нейт Айбъл (Nate Abele) говори за интересна концепция за защита на сесиите. Идеята е наистина добра и необичайна, и признавам че много ми хареса. Обаче … изпълненито определено провокира въпроси. От какъв зор ми е да пиша нов език или синтаксис с който да описвам правилата за валидация на сесиите ? Това само ще забави всичко! Откровенно казано не виждам смисъл от това да се подава като аргумент 'User-Agent', която стойност да се трансформира после до 'HTTP_USER_AGENT' (про това не използвайки директно функциите на PHP, ами използвайки user-land дефинирани функции, които са още по-бавни). Ами декларацията за ограниченията по време ? Къде е ползата от аргумент като ‘+30 minutes’ ?? Не може ли просто да се подаде периода в секунди ? Защо трябва да хабим време да анализираме стринга за да извадим от него отново някаква числова стойност която да сравняваме с текущото време ?

Трети пример:

Кроновете в един от проектите в които работя. Няма да соча с пръсти на кого е великата идея периодите за изпълнение на кроновете да се подава като “(almost) human readable” текст. За безполезноста на подобно начинание вече говорих в предния пример.

Сигурно има още примери. Аз определено не виждам смисъл в подобни … “извращения” ;)

Напред