phpFashion

Na navigaci | Klávesové zkratky

Rubrika Nette




Co se chystá v Nette?

Co přinesou příští verze Nette Frameworku a jaký je plán pro další vývoj?

Nette je tvořeno řadou knihoven, z nichž některé patří mezi světovou špičku: Latte je nejbezpečnější šablonovací systém, Tracy je mnohými považován za nejpřívětivější debugovací nástroj, Dependency Injection Container patří mezi ty nejpohodlněji použitelné. Spousta konceptů vznikla šťastnou rukou a fungují v prakticky nezměněné podobě už 10 let, například formuláře nebo komponentový systém presenterů.

Nicméně ve všech oblastech je hodně příležitostí co vylepšovat a inovovat. A nápadů je spousta.

…pokračování


Nette lišta dává tipy na zajímavé články, videa, události

Web Nette prochází redesignem a první vlaštovkou je zbrusu nová horní lišta.

Na ní podobně jako ve vysílání ČT 24 nebo CNN běží tipy na zajímavé články, knihovny, videa, události atd. Díky ní by vám nemělo uniknout nic zajímavého, co se kolem Nette děje.

Pošlete tipy na články, doplňky, videa!

Jakmile administrátoři tip schválí, objeví se na všech webech Nette.

Napsali jste článek, natočili video? Šup tam s ním. Budete mít reklamu na všech webech Nette.


Jak správně updatovat Nette

Potřebujete aktualizovat projekt běžící na Nette 2.0 na nejnovější verzi? Tady je pár tipů, jak na to.

Stoupejte po jednotlivých verzích

Tj. nejprve aktualizujte na Nette 2.1, poté 2.2, a tak dále. Důvod je ten, že pokud se v Nette nějaká vlastnost změní nebo odstraní, děje se tak v postupných krocích trvajících i několik let. Nejprve je vlastnost jako deprecated jen označena v kódu (silently deprecated), v další velké verzi emituje hlášku E_USER_DEPRECATED, ale funkčnost je zachována, a teprve ve třetí verzi je odstraněna.

Nette se snaží, aby ony hlášky byly maximálně srozumitelné a návodné (např. Syntax {!$var} is deprecated, use {$var|noescape} on line 123), abyste mohli zastaralé věci snadno nahradit.

Pokud byste přeskočili několik verzí, mohli byste přijít o tuto důležitou fázi.

Začínejte bez E_USER_DEPRECATED

Před nasazováním nové verze je vhodné nejprve vypnout hlášení chyb E_USER_DEPRECATED:

$configurator->enableDebugger();
error_reporting(~E_USER_DEPRECATED); // všimněte si ~

Nyní můžete vyzkoušet, zda vše funguje jak má, bez upozorňování na zapovězené věci. Pokud vše funguje, hlášky zase povolte a upravte podle nich kód.

Čtěte dokumentaci

Všechny migrační návody najdete v dokumentaci. Pokud byste ve firmě potřebovali s aktualizací pomoci, jsem vám k dispozici.


Nette 2.4: už je za rohem!

Za pár týdnů vyjde nová verze Nette 2.4, nejnabušenější Nette všech dob. Postupně budu přidávat články, kde se dozvíte o všech novinkách, ale ještě předtím…

…by bylo skvělé, kdybyste otestovali, jestli pod ním běží vaše aplikace. Na všech svých webech už mám testovací 2.4 nasazenou a pochopitelně jsem přitom odhalil řadu chybiček, které bylo potřeba opravit. Tak prosím ověřte, jak jsou na tom vaše weby, než vyjde stable.

Verze 2.4 by měla být na 99 % kompatibilní s verzí 2.3. Zároveň upozorňuje, pokud používáte konstrukce, se kterými se už nepočítá do Nette 3.0. Může se stát, že něco z toho je pro vás důležité a chtěli byste funkčnost zachovat. Stačí o tom dát vědět. Ale samozřejmě co nejdříve.

Podrobné vysvětlení všech případů, kdy Nette generuje upozornění, a několika nekompatibilit mezi 2.3 a 2.4 najdete v tomto vláknu na fóru. A velmi stručný přehled novinek můžete zkouknout ve videu z poslední Poslední soboty.


Nette Pro: úplně bez obalu

Blíží se spuštění Nette Pro. Chemix sepsal, o co jde, a já dokončuji web, kde bude vysvětleno, co to přinese. Protože jsem zaznamenal i nějaké obavy, rád bych je rozptýlil a zkusím proto Nette Pro popsat zcela bez obalu.

Například Martin Zlámal se ptal: „chci o frameworku přednášet na školách. Baví mě to – a hodně. Mění se tím pro mě něco? Můžu to vůbec dělat?“ a v tu chvíli jsem si uvědomil, že Nette Pro obestírá jakýsi závoj neporozumění. Takže postupně:

Co je cílem všeho toho snažení? No je jím přesně to, po čem všichni voláme:

  • chceme nové verze plné novinek
  • chceme perfektní release management
  • chceme, aby se řešily hlášené issues nebo pull requesty
  • chceme lepší dokumentaci reflektující novinky
  • chceme stabilitu a minimum BC breaků
  • chceme blog o tom, co se chystá
  • chceme vylepšit web a fórum
  • chceme tutoriály, příklady, videa, podcasty, tipy, triky, řešení
  • chceme ten obsah i v angličtině, protože
  • chceme, aby se o Nette psalo v zahraničí, aby se o něm přednášelo
  • chceme, aby Nette hodně dlouho fungovalo, protože na něm děláme weby

Některé cíle jsou idealistické, jiné velmi hmatatelné, podstatné je, že všechny vám určitě rezonují. Martinova ochota přednášet o Nette na školách do toho pochopitelně zapadá.

Co je důvodem vzniku Nette Pro? Bez obalu: získat peníze na uskutečnění toho všeho.

A proč jsou potřeba peníze? Protože potřebujeme zaplatit lidi.

A proč potřebujeme zaplatit lidi? Protože nemáme dobrovolníky.

Jako že jich je málo? Současná komunita nestačí?

Na rovinu: na Nette pracují vlastně 3 lidé:

  • Milo, který vymýšlí, vyvíjí, opravuje, dokumentuje a píše na blog o Nette Testeru, taktéž spravuje hosting pro nette.org. Dělá to jako dobrovolník ve volném čase mimo zaměstnání a výchovu malého dítěte.
  • Chemix, který organizuje a moderuje Poslední soboty, zajišťuje sponzory, prostory, přednášející. Dělá to jako dobrovolník, jinak působí jako kreativec na volné noze. Neumí anglickou gramatiku tak, aby si troufl vydávat články.
  • já, David, který vymýšlí, vyvíjí, opravuje a releasuje Tracy, Latte a vlastně celé Nette, taky dibi a Texy, psal dokumentaci, udržuje web nette.org a fórum. Dělá to jako dobrovolník v podstatě už veškerý svůj čas. Neumí anglickou gramatiku tak, aby si troufl vydávat články.

A řekl bych, že nás všechny to baví. Jenže to neškáluje :-)

A taky bych řekl, že nás dost nebaví, když (zejména ti velmi dobře obeznámení se situací a možnostmi) nás hejtujou, že vysoká očekávání neplníme.

Z téhle trojky už víc vymáčknout nepůjde a dnes už víme, že na příliv nových sil nelze spoléhat. Zkoušeli jsme leccos včetně hazardérství, ale nic nezabralo. Místo čekání, jestli se někdo chopí třeba vylepšování dokumentace, je lepší si prostě copywritera najít a normálně mu těch několik měsíců práce zaplatit.

Samozřejmě nechci připravit o kredit kluky, kteří věnují čas fóru, což je fakt důležitá činnost.

Jen jsme narazili na hranici toho, co lze na čistě dobrovolné bázi uskutečnit. A hledáme způsob, jak jí překonat. Potřebujeme angažovat i „nedobrovolníky“.

Proč se tito lidé nezaplatí z příjmů Nette? Bez obalu: Nette generuje příjem v řádu tisícikorun měsíčně.

Tudíž potřebujeme ty příjmy zvýšit. Mnohanásobně. Což vůbec není sranda. Ano, Nette je zřejmě nejpopulárnějším webových frameworkem u nás, běží na něm řada nesmírně výdělečných projektů, jenže z toho automaticky neplyne příjem pro Nette. Firmy jsou nemilosrdné, a pokud jim nenabídnete nějakou přidanou hodnotu, korunu nepustí.

A tou přidanou hodnotou (především) pro firmy má být právě Nette Pro.

Svým způsobem přidanou hodnotou je i to, že chceme dělat Nette pro fesionálně.

Samo o sobě to však nestačí. Vyrazili jsme proto do firem a ptali se jich, bez obalu, jak si můžeme být prospěšní. „My potřebujeme peníze, protože bez nich by Nette jen přešlapovalo na místě. Co vám můžeme za ně nabídnout?“ Někdo se chtěl zviditelnit. Někdo chtěl vyřešit issues. Někdo jen chtěl, aby se Nette dál vyvíjelo. Tak jsme myšlenky přetavili do balíčků.

Ony balíčky jsou tedy tím, o čem lidé prohlásili: „jo, tohle dovedu u nás ve firmě prosadit.“

Nebo řekli: „jo, tohle by se nám fakt hodilo.“ Ať už programátorům, nebo třeba HR či marketingu, protože to pomůže zviditelnit firmu nebo najít zaměstnance.

Takže dobrovolníci už nejsou potřeba? Jsou! Setsakramentsky moc!

V Nette bylo a bude téměř vše tvořeno dobrovolníky. Nette Pro je jen záplata jejich chronického/ochromujícího nedostatku.

Doufám, že když se peníze z Nette Pro použijí na vylepšení webu, dokumentace, tutoriálů, že ten tvůrčí kvas povzbudí komunitu k aktivitě. Potřebujeme Martiny, kteří budou jezdit po školách. Potřebujeme autory tutoriálů a doplňků, kteří si tímto způsobem udělají jméno. Potřebujeme nadšence, co o Nette budou psát články do zahraničních magazínů, aby se přitáhla i světová komunita. Nette Pro zaplatí překladatele. Ale práci dobrovolníků nenahradí.

A kdy se to spustí? Během pár dní.


Jak se opouští PHP 5.3

PHP 5.3 je stále nejpoužívanější verzí PHP. Nicméně jde o verzi nepodporovanou, nevycházejí už ani záplaty na závažné bezpečnostní díry. Podle trendů se zdá, že verze 5.4 by ji mohla vystřídat po prázdninách. Ironií je, že v ten moment i jí skončí podpora.

Jisté je, že v době vydání další verze Nette bude PHP 5.3 dávno passé, tudíž jsem v masteru změnil minimální požadovanou verzi z PHP 5.3.1 na PHP 5.4.4.

Právě tohle setinkové číslo jsem zvolil s ohledem na Debian 7.0 Wheezy.

Opuštění větve 5.3 znamenalo řadu spíš kosmetických změn (DI, Tracy), odstranění drobného počtu workaroundů (magic quotes u Http, Reflection, Utils) a výjimečně i užití nových tříd (Finder nebo Component-Model). Což potvrzuje, že verze PHP 5.3 byla skutečně hodně dobrá.

PHP 5.4 zároveň skýtá nové možnosti, první implementovanou byla žádaná serializace objektu DateTime do JSON. Dále se nabízí možnost nahradit Nette\Object za trait atd.

Na co jsem se ale hodně těšil byla normální syntax pro zápis polí pomocí [] namísto šíleného array(). A také možnost používat v šablonách <?= místo dlouhého <?php echo.

S jejich nasazením v masteru jsem ale váhal, protože by to udělalo z cherry-pickování do starších větví peklo. Nicméně verze Nette 2.1 a od května i 2.2 jsou ve stádiu, kdy se opravují jen závažné chyby, které se v Nette objevují jen zřídkakdy, a v aktuální verzi 2.3 se nové komity objevují jen svátečně, tudíž jsem si řekl, že netřeba to odkládat a všechny repozitáře převedl na hezčí syntax.

(Rebasování větví byl docela oříšek, rozepsal jsem se o tom včera. Takový převod tabulátorů na mezery by musel být hotové peklo.)

Nástroj Code Checker nyní kontroluje, aby se v repozitářích používala výhradně nová syntax a nedocházelo k míchání obou zápisů polí.

Přechod na PHP 5.5 by přinesl taky jednu byť drobnou syntaktickou změnu: konstantu ::class. A mohly by se použít nové funkce v Nette\Utils\Image a případně Nette\Security\Password, typ DateTime by se v typehintech nahradil za DateTimeInterface.

Přechod na PHP 5.6 by přinesl zejména nahrazení většiny func_get_args() & call_user_func_array() za trojtečky (včetně operátoru (expand) v Latte). V pár případech by se dalo využít i konstant obsahujících pole.

A přechod na PHP 7 by byla revoluce.


Framework je přežitek

Způsob, jak se vyvíjejí aplikace v PHP, se v posledních 5 letech dramaticky proměnil. Nejprve jsme opouštěli čisté PHP a učili se používat frameworky, později přišel Composer a s ním instalace knihoven z příkazové řádky a nyní nastává konec frameworků, jak je známe.

Monolitické frameworky se postupně rozpadají do samostatných (decoupled) komponent. A to přináší řadu výhod. Zatímco dříve bylo použití jen jedné části frameworku obtížné až nemožné, dnes si prostě nainstalujete jeho komponentu. Vývojový cyklus jednotlivých komponent může mít různé tempo. Mají vlastní repozitáře, issue trackery, mohou mít vlastní vývojářské týmy.

Komponenty můžete aktualizovat na nové verze průběžně, bez čekání, než vyjde další verze celého frameworku. Nebo naopak se můžete rozhodnout určitou komponentu neaktualizovat, třeba kvůli BC breaku.

Význam slova framework se tak posouvá, o verzích už takřka nelze hovořit. Místo frameworku XYZ ve verzi 2.3.1 používáte sadu komponent v různých verzích, které spolu fungují.

Rozdělení frameworku na komponenty je dost složité. Nette to trvalo 2 roky a hotovo bylo loni. Naprostou nutností bylo prosazení se Composeru a také důsledné používání dependency injection. Nette dnes tvoří přes 20 samostatných repozitářů a v tom původním zbyla jen jediná třída.

Všechny významné frameworky, jako Symfony, Zend, Laravel nebo CakePHP, jsou rozčleněné do komponent, byť k dotažení chybí ještě jeden krok: rozdělení do samostatných repozitářů (namísto náhražky v podobě Git subtree split). Zend slibuje, že s tím přijde ve verzi 2.5, uvidíme, co Symfony.

Komponování Nette

Dlouhým úvodem jsem se vás snažil přivést na myšlenku, že dívat se na Nette jako na framework v nějaké konkrétní verzi je překonané. Že šikovnější je k němu přistupovat jako k sadě komponent.

Tj. namísto uvádění závislosti na nette/nette uvádět závislosti na konkrétních komponentách. Tak to nyní dělá i Sandbox. Jako základ budoucí aplikace může posloužit i Nette Web Project, což je úplně minimalistická obdoba Sandboxu. Stáhněte jej pomocí

composer create-project nette/web-project

a vyhoďte z composer.json komponenty, které nepotřebujete. Zrychlíte tak operace Composeru.

Rychleji se k vám dostanou i bugfixy. Po opravení chyby lze hned u příslušné komponenty tagnout novou verzi, zatímco cyklus uvolňování verzí celého frameworku je mnohem pomalejší.

Pokud tvoříte doplňky pro Nette, tak vůbec neváhejte a hned nahraďte závislost na nette/nette výčtem skutečně požadovaných komponent.

Samozřejmě i nadále budou vycházet nové verze frameworku jako doposud, bude fungovat require nette/nette a pro verzi 2.3 budou vycházet i distribuce v archivech ZIP. Ale jejich význam bude pomalu upadat.


phpFashion © 2004, 2020 David Grudl | o blogu

Ukázky zdrojových kódů smíte používat s uvedením autora a URL tohoto webu bez dalších omezení.