18th Dub 2008

Proč si nepsat vlastní framework

php

aneb PHP repository

Psát si vlastní framework je pro programátora vždy přínosné. Naučí se tím jediněčně pracovat s použitým programovacím jazykem. Ale pak přijde doba, kdy je třeba se zastavit, situaci zhodnotit a… ve většině případů přestat. Ten čas se blíží když si váš šéf stěžuje, že neodpovídáte na maily zatímco s nepřítomným pohledem do monitoru bušíte něco do klávesnice a zakázky se přitom nehýbou. Když vás vaše přítelkyně už měsíc nepotkala v posteli, protože vždy usla než jste se odebrali na lože. Nebo pokud cestou na základku nepoznáváte ani svoje spolužáky ze třídy.

Bolístka vašeho stejně tak jako mého frameworku

Všimněte si, že jsem na začátku článku použil slovo „psát“ ne „napsat.“ Váš framework totiž zůstane nejspíše navždy nedopsaný. Nikdy se vám nepodaří dostat ho do takového stavu a preciznosti, do jaké byste si představovali. To nelze. Jste na to sami a nemáte na to dostatek času někdy holt ani vědomostí nebo osvícených nápadů.

Váš framework bude mít tyto neduhy:

  • bude stále rozpracovaný, jeho koncepce nebude ustálená,
  • nebude dokumentovaný (budete rádi, když se donutíte k phpdoc komentářům),
  • nebude s ním umět pracovat nikdo jiný, pokud ho to sami nenaučíte,
  • bude obsahovat bugy, o kterých nevíte,
  • pokud ho budete nasazovat na projekty, které po vás někdo převezme, nebude vás zřejmě onen člověk míti rád, protože se bude muset učit pracovat s nástrojem, který mu jinde k ničemu nebude,
  • nikdy se svým fraeworkem nebudete spokojeni. Vždy uvidíte, že mu něco chybí a že by se to mělo vyřešit lépe,
  • to by asi tak stačilo.

Samozřejmě namítnete, že framework budete mít postaven na míru a bude vám nejlépe vyhovovat. Na jednu stranu to je možná pravda, na druhou iluze. Tak jak ho budete používat na projektech, budete muset framework upravovat, zobecňovat, zahrnovat další možnosti, až se dostanete k něčemu, co bude zdálky schopnostmi připomínat velké světové frameworky. Pod kapotou však nejspíše bude řachtat ne příliš vyladěný motor ze šedesátých let. Pak budete mít chuť framework celý přepsat. Znovu a pořádně. Na což ale nejspíše nebudete mít čas.

Proto jsem příznivcem toho, se po vyzkoušení psaní vlastního frameworku a nasazení ho na pár webů, naučit nějaký framework, který používá více lidí. Pokud zrovna neumí to, co potřebuji, tak se s tím momentálně smířit, rozšířit si ho pro sebe nebo – nejodvážnější řešení – do koncepce frameworku proniknout a poskytnout ono řešení pro všechny.

Už se skoro dostáváme k podtitulu našeho článku za slovíčko aneb.

Předtím se ale zmiňme o motivaci, která k PHP repository vedla.

Výjímka potvrzující pravidlo?

Mluvím tu o frameworcích, říkám, že se nevyplatí prosazovat „one man framework“ a přitom víte, že podporuji aktivitu Davida Grudla s jeho frameworkem Nette. Dávám mu prostor na konferencích a mluvím pěkně o Nette kde se dá :-)

Není to jen proto, že David je dobrý šoumen a správný chlapík, který na přednášky přitáhne lidi. Ale je to hlavně proto, že bych byl rád, kdyby se z Nette „one man show“ stal framework podporovaný php komunitou ke prospěchu autora, Nette i komunity zároveň. I když David tvrdí, že komunity neexistují, že se angažují vždy jednotlivci (co to bylo tedy v té hospodě, když nás chtěli vyhodit, že jsme moc velká komunita ;-) ?

Já vidím v Nette určitou šanci na spojení síly českých PHP programátorů. Tak kvalitně a pečlivě napsaný program jako je Nette se jen tak nevidí nejen u nás ale i ve světě. Je navržen pomocí rozhraní. Můžete si tedy reimplementovat většinu tříd, aniž byste rozhodili koncepci frameworku. Umí nějaký framework routovat i podle domén a subdomén? Dokáže si udržet stav komponent v url? Který framework zapouzdřuje práci s url tak, že se může aplikace přepnout z seo url na stará a obráceně bezeztráty funkčnosti pouhým nastavením? Začal nějaký framework podporovat namespaces ještě dříve, než jsou v samotném php? ;-)

David se cizelováním frameworku (již sedmkrát úplně přepsaného) propracoval k velmi čistému návrhu. Ze všech frameworků českých programátorů, co jsem viděl, mi Nette přijde nejdál. A to dokonce i v možnosti uchytit se za hranicemi naší malé zemičky. Představte si, nebylo by to úžasné, kdyby třeba takový New York Times začal používat Davidův, náš, krásný, moravský framework? ;-D

Protože jak se říká, v jednotě je síla, jeho větší rozšíření je možné jedině, pokud ho budou lidi používat a zároveň do něj i sami chytře přispívat. Už nyní mě napadá několik návrhů, co by Nette slušelo a s čím by komunita mohla pomoci:

  • Až David připraví tutoriály a dokumentaci; přeložit je do angličtiny.
  • Nette by slušelo nějaké pěkné schopné malé ORM postavené třeba na dibi.
  • S ORM by se mohly provázat formuláře, tak aby se daly instancovat přímo z modelů.
  • Modely by měly obsahovat validační pravidla (například pomocí anotací v komentářích).
  • Z modelů generovat přímo tabulky (lehká distribuce miniaplikací, které si sami vytvoří tabulky např. skriptem z přikazové řádky).
  • ORM + modely + formuláře ⇒ generovaná administrace.
  • Dále třeba adaptér pro konfiguraci pomocí yaml souborů.
  • Překladové třídy.
  • Další filtry do template.
  • Další controly.
  • Užitečné komponenty.
  • Napojení validátorů u formulářů na klientské straně na jquery nebo jinou javascriptovou knihovnu.
  • atd. určitě přijdete na spoustu věcí, které byste v libovolném frameworku sami chtěli mít.

Zakopaná veverka

Tu se dostáváme k jádru pudla. Vzklíčila ve mně myšlenka, že toto vše by chtělo nějaké centrální úložiště s mírně komunitním hávem. Nyní funguje Nette fórum. Jeho RSS je možné odebírat: http://forum.nettephp.com/feed.php

Nicméně postovat kód přímo do fóra a pak ho tam případně upravovat není příliš sexy. Hlavně pokud jde o více než jeden soubor, bylo by to problematické.

Proč tedy neudělat rovnou zvláštní repozitář v svn pro tyto věci, který je na to přímo určen. Když jsme to probírali v Pardubicích po php konferenci v debatě s žirafkou, tak navrhla neomezovat to jen na Nette ale udělat to obecně pro PHP. Proč ne.

Nechtěl bych vytvářet nějaký repositář jako PEAR nebo phpclasses. Představoval bych si to tak, že uživatel se může zaregistrovat a pak má právo založit si jeden až N projektů. Projekt jest adresář v svn např. Nette/, který může obsahovat podadresáře. Například Nette/components/, Nette/controls/ apod. Do takového podadresáře už pak může dát přístup lidem, kteří budou mít také registraci a o přístup ho požádají. Pak mohou commitovat svůj kód do těchto adresářů.

Repository mohou sloužit jak pro obsáhlé projekty tak pro jedno- dvouřádkové kusy kódu.

Pak by měl existovat webový frontend, který umožní procházet adresáře projektu a v konkrétních podadresářích pak zobrazovat jednotlivé balíčky. Stránku adresáře s balíčkem bych si představoval tak, že zde bude na začátku slovní popis funkčnosti a instalace balíčku přidaný autorem. Dále link na stažení ze svn, případně ke stažení zabalených souborů. Pod tím pak sbalená/rozbalená stromová struktura adresářů s jednotlivými soubory zobrazenými jako syntakticky obarvený zdroják v divu s nějakou maximální výškou např. 400 px a případně scrollovátkem. Tak by mohl na jedné html stránce být vidět naráz celý obsah balíčku. A pod tím vším komunitní komentáře. „Hele máš tam v souboru load.php na řádce 25 bug, oprav si to.“

Trochu podobně jako je to na http://djangosnippets.org, kde ale není svn, ani není možné zobrazit kód z více souborů.

Netušil jsem, že to bude tak dlouhý článek. Snad je z něj koncept PHP repository patrný. Zdá se vám to jako dobrý nápad? Nebo jako jaký nápad se vám to zdá? :-)

Komunita wanted

Pokud může někdo nabídnout nějakou pomoc (hosting tuším žirafka má) s návrhem a vývojem aplikace (proč ne rovnou na Nette, že :-), tak pište mě stv(hroch)sez­nam.cz, žirafce cokoliv(kroko­dyl)zirafka.cz nebo nám všem třem i s Davidem :-)

9 Responses to “Proč si nepsat vlastní framework”

  1. Milan Svoboda Says:

    Ještě by to chtělo i nějakej ten Bugtracking, aby lidé, kteří si neumí chybu opravit to mohli nahlásit problém.
    Takovej Track má i nějakou podporu SVN, ale je pokud jsem si dobře všiml v Pythonu.

  2. David Grudl Says:

    Vašku, napsal jsi to naprosto přesně, ty první odstavce jsi prostě musel odkoukat z mého života. Nebo ti to popsala přítelkyně? :-))

    Nebudu se moc podrobně rozepisovat, dnes totiž chci spustit web na http://www.nettephp.com a napíšu reakci rovnou tam.

    [1] Veřejný bugtracking je otázka. Spíš souhlasím s názorem http://martincohen.info/…e-info-2008/#c56, že v tuto chvíli je lepší nechat „bugy“ prodiskutovat ve fóru.

  3. Dundee Says:

    No…tak jo :) Za ten 3/4 rok se ti přece jen podařilo (s velkým přispěním Davida) mě přesvědčit, že snažit se psát vlastní fw je jen ztráta času. Takže doména core-php.com je volná :) Jestli tam chceš dát tu repository, není problém.

    Co se týče dalšího vývoje Nette: Několik tvých prvních připomínek mi naprosto mluví z duše. Přesně tohle by se mi také líbilo. Něco podobného (malinké orm s možností generovat databázové tabulky a administrační formuláře) už jsem dělal, takže se pak rád zapojím…

  4. longin Says:

    Vašku, napsal jsi to naprosto přesně, ty první odstavce jsi prostě musel odkoukat z mého života. Nebo ti to popsala přítelkyně?
    > myslim, ze tyhle radky zna kazdej kdo si nekdy psal vlastni framework :-)

  5. v6ak Says:

    „myslim, ze tyhle radky zna kazdej kdo si nekdy psal vlastni framework :-)
    :-D Z něčím jako frameworkem jsem začal pomalu ale jistě chvilku poté, co jsem začal s PHP. Teda spíš koncepci. Ale tehdy jsem celkově neměl čas.
    Teď uvažuju o nějakém cizím frameworku, ale asi si udělám svoji formulářovou knihovnu. NForm i Zend_Form se mi nelíbí asi tak jako moje stávající knihovna.

  6. Dr.Diesel Says:

    2 VS: Tobe snad dgx neco plati za propagaci neee :-D Zalezi co si predstavit pod pojmem FW. Psat si vlastni Zend je blbost, ale neco lehkyho, co bude rychly a proste usnadnovat praci, proc ne. Ono Nette se muze zacit taky „postupne nabalovat“, jak jsi sam u vlastniho fw uvedl ;-)
    Sezeni u kompla vecne X hodin me zacina stvat cim dal vic, ale spis to vyresi pracovni postup mimo cistou vyvojarinu nez uceni se ruznych FW, na kterych te bude to ci ono stvat.
    A „upravovani“ jinych FW k obrazu svemu?… Aby to nedopadlo hur nez si psat svuj… To jen trocha pesimismu do vseobecne pozitivne naladeneho clanku, snad neurazim ;-)

  7. A. Says:

    V PHP jsem lepil hrozně dlouho, pak jsem si koupil knžku o Ruby on Rails a propadl jsem konceptu MVC a ActiveRecord. Hrozně mi pomáhají i helpery pro generování html kódu a scaffolding, něco podobného by se hodilo do ZF. Bohužel ne každému se chce zajišťovat server s RoR, takže jsem musel zůstat u PHP a cítil jsem potřebu napsat si něco podobného. ZF mi tehdy připadal jako neskutečný kolos a jeho DB model mi nevyhovoval. Napsal jsem si tedy vlastní „rychlejší a menší“ FW, použil ho na dvou projektech a vrátil jsem se zpátky k Zendu, protože v mém dost věcí chybělo a neměl jsem čas na psaní nového.
    Ovšem hlad po serveru s RoR nebo jakémsi „PHP on Rails“ je stále :-)

  8. angel333 Says:

    [7] S RoR se, řekl bych, svítá na lepší časy. Můj hostér (/reklama:giga­server/) ho už začal podporovat, bez jakýhokoliv příplatku, prostě normální hosting – nic extra. Ještě jsem to sice nezkoušel, ale jak bude skulinka času, jdu určitě do toho…

  9. Iron_Storm Says:

    ja jsem pro, nette vypadalo sympaticky hned od prvnich koncepci z la trine.. nebojte se to poradne rozjet :)

Leave a Reply

grupa LGBT