Good news for WordPress fans! WordPress has its own TV.
Check out WordPress.TV.
Do you want to join some WordPress events around the world? Then check out WordCamp.org Central.
Good news for WordPress fans! WordPress has its own TV.
Check out WordPress.TV.
Do you want to join some WordPress events around the world? Then check out WordCamp.org Central.
Switching between different languages during development of server-client application is daunting task.
Jan Volf wrote Pexeso framework. Pexeso is component based, event driven PHP View-Controller framework similar to Adobe Flex framework.
Developer can reuse patterns and Flex style of writing code even when coding in PHP.
You can find this project at SourceForge: pexeso-php.sourceforge.net
PHP aplikácii, pluginov, rozšírení a iných skriptov, sa nám dnes po svete potuluje viac než dosť. Autor dostane nápad, napíše kód a hurá. Pekne mu funguje na jeho notebooku s 1 GB RAM a php.ini memory limitom zdvihnutým na 128 MB.
Milý autor si ani nevšimne, ako mu aplikácia rastie, kysne a žerie drahocenné kilobajty pamäte. Problém nastane, keď sa jeho Otesánok vyberie do sveta. Najskôr ho autor veľmi jemne a decentne zavestí na nejaký webhosting.
Lenže tu nastane problém. Server má povolených len 25 MB na skript. Otesánok dostane bolesti brucha a odmieta spustiť čokoľvek. Ešte horší prípad však nastane, keď sa takýchto Otesánkov zíde viac. Systémový administrátor rozverne povolil 128 MB RAM a Otesánkovia chrochtajú blahom. Vždy sa jeden zobudí, vygeneruje stránku a ide spať.
Lenže tu nastane druhý problém. Do serveru sa oprú roboti. Google, Yahoo, Microsoft a im podobná robotická zberba. Treba predsa zvyšovať SEO. Neštastníci. Oni zobudia všetkých Otesánkov naraz. Začne vojna o zdroje. Apache nestíha Otesánkov upratovať na swap. Zo swapu sa mu neustále vracajú a dožadujú sa ďalšej a ďalšej pamäte. Hrôza, des, zmar a load average 78.
Veď je to tak jednoduché zístiť, koľko vaša aplikácia spotrebuje pamäte:
echo memory_get_usage() . "\n";
Dokonca PHP prináša so sebou sledovanie celého priebehu vykonávania skriptu a môžete si vypísať, aké bolo maximum v spotrebe bajtov počas behu skriptu:
echo memory_get_peak_usage() . "\n";
Jednoduché, účinné. Monitorujte stav pamäte a nenechajte, aby sa vaša aplikácia zmenila na Otesánka.
Dokumentácia memory_get_usage, memory_get_peak_usage
Keď Guido začal dávať dohromady nový jazyk Python, mal už za sebou skúsenosti z návrhu jazyka ABC. Najdôležitejšim kritériom pre vývoj tohoto jazyka bola čitateľnosť. Guido potreboval jazyk, ktorý by bol jednoducho pochopiteľný aj pre bežných ľudí. O Pythone prehlasujú autority, že je to multi-paradigmový programovací jazyk a majú veru pravdu.
Python je objektový. V čase keď Python začínal, objektové programovanie už malo za sebou nejaký ten rok, ale stále bolo odsúvané na okraj záujmu. Dôkazom toho sú napríklad jazyky ako Perl a PHP, ktoré odsunuli objektovosť naneskôr a potom ju pracne doháňali. V Pythone je proste všetko objekt a hotovo.
Python obsahuje prvky funkcionálneho programovania. Môj osobný pocit z funkcionálneho programovania je, že vlastne myslíte naruby. Človek musí úplne prevrátiť myslenie, pokiaľ sa chce dostať z procedurálnej paradigmy na funkcionálnu. A oplatí sa to. Získate kratší, účinnejší a čitateľnejší kód. Je síce pravda, že čitateľ musí trochu rozumieť princípom funkcionálneho programovania, ale aj bežný používateľ počítača viacmenej pochopí význam. Dobrá lambda abstrakcia môže výrazne skrátiť kód.
Python umožňuje použiť Aspektovo orientované programovanie – AOP. Pokiaľ vám táto téma nie je ešte známa, odporúčam si vypočuť diel podcastu z Software Engineering Radio – Úvod do AOP. Podstatnou vlastnosťou AOP je lepšia modularizácia kódu, čo má za dôsledok lepšiu znovupoužíteľnosť kódu.
Python umožňuje lietať.
A kde teda začať? Určite treba navštíviť stránky venované Pythonu. A pre začiatočníkov rozhodne odporúčam nainštalovať si IPython shell, ktorý vám môže ušetriť množstvo času. Pre priaznivcov Eclipse odporúčam PyDev s nádherným debuggerom. Pre nepriaznivcov Eclipse odporúčam prostredie Eric, ale mali by ste zvážiť, či sa náhodou nestanete radšej priaznivcami Eclipse
Nezabudnite si po spustení Python shellu zadať príkaz: import this
V dobách, keď sa rozdeľovali sféry vplyvu medzi web technológiami, prišlo PHP s niečím, čo ostatným technológia zobralo vietor z plachiet. Viete, čo to bolo? Nie, nebol to dobrý návrh jazyka a dátových štruktúr. Nebola to ani obsesia v dolároch. A nebolo to ani množstvo modulov, ktoré umožňovali všetko od generovania obrázkov, až po generovanie zisku. To s čím PHP prerazilo, bola jednoduchosť nasadenia a rýchlosť. Tu dostali CGI aplikácie postavené na Perle, Pythone, Bashi a Haskelli poriadne na frak. Stačí si porovnať energetickú náročnosť Zope/Plone portálov, ktoré zožerú server so zdrojom aj so sieťovým káblom, verzus PHP portály.
Pythonieri sa bez boja nevzdávali a tak začali vymýšľať riešenie. CGI. Nie, nie. To nebola správna cesta. Overhead bol skutočne veľký. FastCGI? Trošku rýchlejšia voľba. Aj Trabant môžete vytuniť. Ale pokiaľ nepoužiteje prístup Pána Tragáčika a nevymeníte motor z Trabantu za dvanásť valec, tak máte stále Trabant. Mod_python bol už krok trošku správnejším smerom. Zrýchlenie bolo zhruba 10 násobné. PHP však rýchlostné limity zvyšovalo ďalej. Tu sa niekto z Pythonierov zhrozil. “Chlapi! Baby! Veď mi sme postavili parnú lokomitívu. Musíme vymeniť paradigmu.” Tak sa po mnohých rokoch objavil nový koncept WSGI.
Tentokrát sa podaril husársky kúsok. Nie len zvýšiť rýchlosť, ale dostať sa tam, kam sa PHP ešte nedostalo. Okrem rýchlosti sa totiž objavila nová požiadavka webových obláčikov: škálovateľnosť.
Je WSGI až taký zázrak. Áno je. A dokonca o trošku väčší.
WSGI je skratka od Web Server Gateway Interface. WSGI definuje rozhranie, pomocou ktorého napojíte vašu aplikáciu na web server. To, čo WSGI prináša je unifikácia pripojenia rôznych web frameworkov. Toto zároveň umožňuje podstatne lepšiu optimalizáciu rýchlosti. A ako bonus dostane vývojár škálovateľnosť. Vynikajúcim príkladom je Google App Engine.
Hurá, zahodím PHP a idem na Python. Hou, hou, zadrž! Škálovateľnosť nie je zadarmo. Python je objektový jazyk a tak sa je k nemu potrebné aj správať. Prechod vyžaduje trochu učenia a skúmania. Niektoré z konceptov sa v PHP vôbec nevyskytujú. Niektoré sú naopak pre PHP vývojárov používajúcich dobrý framework veľmi známe.
Tu pripájam video z Google Tech Talks venované popisu WSGI.
Kde Python aplikácie hostovať? Napríklad mi môžete napísať a nejaký ten serverový výkon sa pre vás určite nájde. Alebo si môžete objednať za pár bubáčikov virtuálny server od Web4U. Alebo ísť rovno na Google App Engine a vaša aplikácia bude v obláčkoch cestovať medzi kontinentami a hostingovými centrami.
Eclipse je výborné IDE, ktoré môže ušetriť veľa času. Napríklad v prípade, že pracujete súčasne na projektoch vo viacerých jazykoch ako Java, Python, Perl, či nebodaj PHP. S konfiguráciou Eclipse a PDT pluginom som dlho nemal úspech. Vždy došlo k nejakej neočakávanej chybe. Problémy boli rôzne, nedostupný server, halušky v Eclipse. Ale to už bolo dávno. Tak som sa pustil do zisťovania, či sa v tomto smere niečo nezmenilo. Milé deti, zmenilo a k lepšiemu.
Lokálne ladenie PHP aplikácie v Eclipse je brnkačka, nepotrebujete ani nainštalovaného Apache, či inú web potvoru. Postup je jednoduchý, ale zradný. Ak šliapnete mimo vyznačenej cesty, hrozí vám prepad do bažiny, kde vás zožerie nejaká chyba.
A hurá debuggovať. Eclipse – New – PHP Project – zadať Project name – Finish. Pozor! Ak dáte Next namiesto Finish, je možné, že skončíte s chybovým hlásením duplicated entry. Pravdepodobne chyba vo workflow.
Vytvorte si nový PHP súbor, napríklad pozdrav.php:
<?php
echo “Ahoj Georgik!”;
?>
Dvojkliknite na pásik panelu vľavo na riadku 2, čím nastavíte break point.

A môžeme s chuťou debuggovat. Pravý klik v editovacom okne – Debug as – PHP script. Eclipse sa prepne do PHP Debug perspektívy a zastaví sa na break pointe. Ovládanie debuggera som už popisoval
.
Takto nastavený Eclipse môžete použiť na lokálne ladenie. Nezabudnite používať vhodný framework na písanie PHP aplikácii. Skupina zubných lekárov odporúča framework Nette.
Ano, je to tu! Vyšla nová proprietárna verzia PHP. Prvé veľké enterprise nasadenie spravili České Dráhy. Tu je príklad nasadenia novej verzie PHP v praxi.
Narazil som na drobný problém pri odosielaní mailov z PHP. A síce, že maily s diakritikou chodili označené ako corrupted a nie veľmi čitateľné. Povedal, som si, že na odosielanie skúsim použiť triedy z Pear. Tu som narazil na prvý problém, že include Pear súborov, bol zablokovaný safe módom. Riešenie bolo jednoduché, stačilo pridať správne premenné do konfigurácie Apacha. Finta bola v tom, že adresár, kde sa nachádajú Pear kódy musí byť zároveň v open_basedir aj v safe_mode_include.
php_admin_value open_basedir /home/georgik/www:/usr/local/share/pear php_admin_value safe_mode_include_dir /usr/local/share/pear
Pear síce nevyrišiel problém s odosielaním UTF-8 mailov, ale minimálne použitie tried v PHP prospieva k udržateľnosti kódu. To podstatné boli hlavičky, ktoré bolo nutné do e-mailu pridať.
Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit
No a celý kód vyzerá nasledovne.
/** * Send UTF-8 formated e-mail using PHP Pear Mail classes. * * @param recipient E-mail address where you want to deliver e-mail. * @param subject Subject of e-mail. * @param text UTF-8 content of e-mail. */ function sendEmail($recipient, $subject, $text) { include('Mail.php'); include('Mail/mime.php'); $mail = Mail::factory("mail"); $headers = array( 'From' => "priklad-z-blogu@asinus.cz", 'Subject' => $subject, 'Content-Type' => 'text/plain; charset=UTF-8; format=flowed', 'Content-Transfer-Encoding' => '8bit', ); $mime = new Mail_mime("\n"); $mime->setTXTBody($text); $body = $mime->get( array ('head_charset' => 'UTF-8', 'head_encoding' => 'quoted-printable', 'text_charset' => 'UTF-8', 'html_charset' => 'UTF-8')); $mail->send($recipient, $headers, $body); } sendEmail('objednavky@asinus.org', 'Objednavka', 'Dobrý deň. Rád by som si u Vás objednal hosting a žinčicu. S pozdravom Janko Paľko z Malužinej');
| M | T | W | T | F | S | S |
|---|---|---|---|---|---|---|
| « Jan | ||||||
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | ||||