čtvrtek 21. prosince 2006

PHP vs JSP

Vím, že po internetu existuje spoustu srovnání programovacích jazyků. Já se ani nechci tak moc pouštět do srovnání jako osvětlit některé věci, které mi lezou v poslední době dost krkem.

Zejména se jedná o lži, které hlásají pubertální mladící, kteří si přečetli jeden článek, naprogramovali 100 řádků kódu a provádějí srovnání různých řešení mezi sebou. Často házejí špínu na věci, které neznají ani koncepčně, natož z pohledu vývojáře.

Když jsem začal s programováním, začal jsem na PHP, které se mi zdálo jako nejlepší volba. PHP bylo populární, rychle se rozvíjející jazyk, perspektivní, jednoduchý a dalo se najít spoustu tutoriálů po internetu.

Na začátku jsem byl vlastnostmi tohoto jazyka naprosto uchvácen a směle jsem prohlašoval, že je to geniální dílo :)

Dnes jsem již o mnoho skeptičtější a směle prohlašuji: PHP je bordel, který jsem se raději neměl učit. Důvodů, proč si něco takového myslím je několik a já proberu jen ty nejpalčivější:

  • každá nová verze je často nekompatibilní se starými skripty

  • dodnes neexistuje namespaces a to co jsem viděl v připravované verzi PHP6 mě nijak nenadchlo

  • OOP model je na příšerné urovni a programátor musí dodržovat spousty pravidel, aby se nenechal unést nesmyslnostmi jazyka

  • neexistuje schopný framework pro data (ORM, DAO)

  • php už od základu míchá aplikační a prezentační logiku dohromady

  • funkce v php nedokáží vracet výjimky, jen ty, které si sám napíši

  • znovupoužitelnost vlastních tříd je dost problematické, už z důvodu konceptu celého PHP



Mohl bych takto pokračovat dál a dál, ale to není záměrem mého příspěvku. Spíše než to, chci říci, že PHP nemá cenu tlačit někam, kam nepatří. A nyní bych ho už netlačil asi ani na web.

Našel jsem na: www.jakpsatweb.cz diskuzi o jsp-servletech. Názory o tom, že Java je framework nebo, že jsp je lepší šablonovač mě vážně pobavili. Nejsem žádný expert na jsp-servlety, spíše s nimi začínám, ale tohle už je moc :(

Srovnávat skripovací jazyk PHP s platformou jako je Java, je asi jako srovnávat cukroví s plechem na pečení (přece jen jsou vánoce :)).

Existují mýty o tom, že v JSP nelze napsat, to co v PHP. Je to omyl. Ba co více, je to neznalost konceptu JSP a PHP. JSP už od samého začátku (nepočítaje první verzi) vyzchází z patternu MVC (model-view-controller), který zaručuje oddělení aplikační od prezentační logiky. Navíc řešení webové aplikace v jave umožňuje více možností, jak danou aplikaci programovat (např. JSF).

Nebudu zde zabíhat do detailů, protože nejsem na Javu žádný znalec a primárně v ní "zatím" nevyvíjím, ale co vím jistě, je, že mi java umožňuje programovat nejen webové aplikace. Umožňuje mi použít JPA, umožňuje mi použít skutečně kvalitní IDE ve formě NetBeans či Eclipse. apod. apod.

Dalším mýtem bývá, že se Java nehodí na malé webové aplikace typu e-shop apod. Já v tomto stále nevidím problém. Ale vezmu to z druhé strany. Budu psát v PHP OOP kód. Budu se snažit využívat controllery a budu používat oddělení aplikační logiky od prezentační + použiji vlastní vrstvu na data ve formě jakéhosi paskvilu ORM s DAO. Než toto připravím, pokud nemám připravené vlastní skripty, zabere mi to spoustu času. PHP mi samozřejmě umožňuje danou aplikaci napsat procedurálním způsobem, který bude mixovat všechny vrstvy do sebe. Super, mám vše během chvilky, ale přestanu zvedat telefony ve chvíli, kdy po mě zákazník bude chtít další úpravy a další vylepšení. Raději tedy vše udělám podle MVC a budu dodržovat základní patterny, abych se vyhnul námaze při dalších úpravách. V podstatě to samé mohu udělat pomocí JSP-servletů aniž bych musel pracně dodělávat či mapovat "pofidérní" frameworky na dané vrstvy aplikace. Jak dlouho mi daná aplikace bude trvat v JSP, pokud použiji stávající frameworky, které jsou pro to přímo určené? Jak dlouho mi bude trvat sestavit aplikaci z vlastních tříd, které jsem použil minule?

Jediný důvod, proč se JSP nehodí na malé webové aplikace je ten, že neexistuje tak masivní podpora hostingů jako u PHP. To je nejzásadnější důvod, proč vlastně je JSP hozené pod PHP v oblasti vývoje web. aplikací po internetu. Lidé, kteří tvrdí, že se něco na něco nehodí by měli předem znát daný jazyk, aby mohli toto tvrdit. Já tyto výkřiky slyším pouze od lidí, kteří neumí OOP či neumí JSP.

Ukončím to malým srovnáním: kolik znáte programátorů, kteří přešli z OOP zpět na procedurální programování? Kolik znáte lidí, kteří přešli z Javy na PHP?

Nakonec jen malá ukázka pro PHPčkáře. Za jak dlouho byste byli schopni udělat toto, co Roman Štrobl v NetBeans?

pondělí 11. prosince 2006

HTML Framework 3 - Textarea

Posledním formulářovým políčkem, kterým se chci zabývat je textarea.

Využití tohoto prvku je dobré při uložení delšího textového řetězce s omezenou či neomezenou délkou. Existují i tzv. textarea wysiwyg editory, což je upravená textarea pomocí javascriptu, umožňující psát HTML kód pomocí vizuálních prvků. Je to dost specifická oblast, kterou se ale zabývat nechci. Spíše mi šlo o to, vytvořit si vlastní textareu, která bude míti možnost kontrolu maximálního počtu znaků na klientovi.

Stejně jako v předchozích případech, jsem si vytvořil v adresáří /lib/HTML/Form soubor Textarea.php a soubor Textarea.js. Již podle názvu je jasné, co dané soubory budou obsahovat.

Nebudu zde uvádět ukázku třídy HTML_Form_Textarea, ale nabídnu je rovnou ke stažení: HTML_Form_Textarea (php, js)

Samotné použití je opět velice jednoduché:

$textarea = new HTML_Form_Textarea("textove_pole", $_POST["textove_pole"]);
echo $textarea->getTextArea();


Pokud bych nechtěl použít js kód, nebo změnit jinou vlastnost, není to samozřejmě problém:

// zmeni maximalni pocet znaku
$textarea->setMaxPocetZnaku(500);
echo $textarea->getTextArea();

// vypne js omezeni
$textarea->setPosuvnik(false);


Šťouralové by samozřejmě namítli, že chybí ošetření vloženého textu. Například pomocí htmlspecialchars. Já jsem toto omezení zde vynechal. Záleží totž na tom, jak textareu chci využít, zda povolím některé HTML tagy, či nikoli. A toto by měla míti na starost vlastní definice v Model vrstvě (MVC).

Nyní oblast formulářových prvků opustím a budu se více zabývat tabulkami a způsobu, jakým jsem definoval jejich použití, společně s dalšími vlastnostmi, jako je export do XLS souborů, apod.

HTML_Form_Textarea (php, js)

pátek 8. prosince 2006

Vývojové prostředí pro webové aplikace (IDE)

Nejenom talent a zkušennosti jsou potřeba pro úspěšný vývoj aplikací. Další vlastností je vývojové prostředí IDE.
V dnešní době je možné nalézt spoustu jednoduchých editorů, které jsou schopny zvýrazňování syntaxe popřípadě další zajímavé vlastnosti.

Nejprve udělám malé srovnání nejznámějších editorů a poté si vyberu svého favorita :)

JEdit
Jeden z dobrých editorů je jEdit. Po potřeby úprav jednoduchých skriptíků ideální řešení. Mezi jeho hlavní přednosti jistě patří to, že je multiplatformní. jEdit je napsán v Javě. I přesto je velice rychlý a obsahuje možnost doinstalovat spousty pluginů.

PSPad
Velice populární editor, od českého vývojáře. Mezi jeho hlavní přednosti patří rychlost a jednoduchost. Velkou nevýhodou je, že dokáže pracovat pouze pod Windows. Ano linux verze se nekoná. Je vhodný spíše pro začátečníky a drobné úpravy.

SciTE
Na počátku jednoduchý editor, který ale vyniká svou rychlostí a konfigurovatelností. Je možné ho používat i pod linuxem. Po dobré konfiguraci zvládne i složitější úkony. O dalších informacích se můžete dozvědět např. u Jakuba Vrány.

Vim
Legendární editor textů linuxových nadšenců. Mezi jeho nesporné výhody patří extrémní rychlost a konfigurovatelnost. Velkou nevýhodou ovšem je to, že koncept Vimu je naprosto odlišný od ostatních editorů. Po prvním setkání vězte, že budete dlouho hledat, jak editor vypnout. :)

ZEND Studio
Skutečné IDE pro vývoj webových aplikací. Pokud to s PHP myslí někdo skutečně vážně, jistě výběrem tohoto IDE neprohloupí. Mezi jeho nevýhody patří to, že není zdarma a také, že je primárně určen pouze pro PHP.

Eclipse PHP IDE
Další skutečné IDE pro vývoj aplikací. Mezi jeho přednosti patří to, že je multiplaformní, dokáže se po instalaci patřičných pluginů, chovat jako vývojové prostředí téměř pro cokoli. Mezi jeho nevýhody patří snad jen to, že má náročnější požadavky na hardware a na začátku složitější konfiguraci. Existuje i placená verze ve formě MyEclipse, která obsahuje již nakonfigurovanou sestavu s další podporou.

Existuje samozřejmě nepřeberné množství editorů a IDE pro tvorbu webových aplikací, které lze na internetu dohledat. Mým hlavním záměrem bylo sepsat (z mého pohledu) nejpoužívanější nástroje pro psaní aplikací.

Po několikaletém programování ve SciTE jsem začal hledat něco, co by mi umožnilo editor povýšit na komplexní IDE se spoustou možností. Po testech s jEditem apod. jsem nakonec skončil s Eclipse. Mohu říci, že jsem po několikadenním testování a zkoušení dostal do ruky špičkový nástroj, který je navíc zdarma.

Eclipse je primárně tvořen pro vývoj Java aplikací. Navíc samotné IDE je psané v Jave, což umožňuje jeho použití na více OS. Samotný projekt Eclipse je dotován firmami jako je IBM, Red Hat či SuSE. Obsahuje extrémní množství pluginů jak pro samotné programování, tak i modelování databáze či v UML. Počet podporovaných jazyků lze najít na oficiálních stránkach, společně s pluginy pro jejich spuštění.

Osobně využívám plugin od ZENDu PHP IDE společně se WEB Tools (i z důvodu závislostí), dále plugin QuantumDB pro prohlížení databáze (používám na Oracle a MySQL) a SQL editor. V Eclipse jako platformě se meze nekladou. Je možné nad Eclipse vytvořit jak vlastní projekt, tak použít nějaký již napsaný.

O tom, co všechno Eclipse obsahuje a je možné v něm použít by vydalo na nejednu knihu. Já se zaměřím na podporu PHP přímo od ZENDu, HTML, CSS, JS a MySQL. Na závěr jen malá ukázka toho, co si vlastně pod IDE představuji.

Příště se budu zabývat prvním spuštěním Eclipse (pod Windows i Linuxem) a instalací pluginů.

čtvrtek 7. prosince 2006

Nová verze openSUSE 10.2

Tak nám již vyšla nová verze openSUSE 10.2, stahovat je možné zde.

Doufám, že se nové verzi povede lépe, než předchozí 10.1, kde po uvedení obsahovala závažnou chybu v ZMD pro update.

HTML Framework 2 - Input

Dalším formulářovým políčkem, které chci probírat je input. Možností, jak jej využít je mnoho, stačí se podívat třeba sem.

Opakovaného psaní, stejně definovaného políčka, se opět vyhneme pomocí definování vlastní třídy na tento formulářový prvek. Složitější oproti select-option je zejména v tom, že má mnohem více možností (text, submit, password, checkbox, ...).

V adresáři /lib/HTML/Form jsem si vytvořil soubor Input.php, zde uvádím jeho část:
class HTML_Form_Input
{

/***************************** ATRIBUTY TRIDY *****************************/

/** typ inputu podle ktereho se odviji jeho vlastnosti */
private $type;

/** nazev inputu */
private $name;

/** hodnota inputu value u checkox moznost checked */
private $request;

/** velikost inputu */
private $size;

/** maximalni pocet znaku inputu */
private $maxlength;

/** policko bude sede, nepujde menit */
private $disabled;

/** obsah pole nepujde menit */
private $readOnly;

/** zarovnani jako u obrazku */
private $align;

/** nastaveni class z CSS */
private $classCss;

/** stylovani tlacitka pomoci CSS */
private $style;

/** JS kod inputu */
private $javaScript;

/****************************** METODY TRIDY ******************************/

/**
* konstruktor tridy pro vytvoreni inputu
*
* @param String $name nazev inputu
* @param String $request vkladana hodnota value nebo checked
* @param int $size nepovinny parametr velikost policka
* @param int $maxlength nepovinny parametr maximalni pocet znaku
*
*/
public function __construct($name, $request, $size = null, $maxlength = null)
{
$this->name = $name;
$this->request = $request;
$this->size = $size;
$this->maxlength = $maxlength;

$this->type = "text";

$this->disabled = false;
$this->readOnly = false;

}
}


Kompletní třída ke stažení: HTML_Form_Input

Použití je velmi snadné a opět elegantnější, než psaní HTML kódu:

$test = new HTML_Form_Input("test", $_POST["test"]);
$test->getInput(); // vypise HTML kod input, defaltne typ text


Předefinovat na jiný typ je opět otázka chviličky:

$test->setTypeInput("checkbox"); // tlacitko bude checkox
$test->getInput();

$test->setTypeInput("password"); // tlacitko bude password
$test->getInput();


Možností je opravdu hodně a nemá cenu je zde všechny vypisovat. Opět je otázka, co všechno vývojář potřebuje. Nespornou výhodou, definování těchto malých oblastí, je i fakt, že jsou kdykoli rozšířitelné o vlastnosti, které jsem opomněl definovat při prvním návrhu.

Přístě se podívám na poslední, zajímavý formulářový prvek: textarea a na jeho omezení počtu znaků pomocí javascriptu.

Třída HTML_Form_Input