Přejít k navigační liště

Zdroják » PHP » David Grudl: Marketing Nette dělají spokojení uživatelé

David Grudl: Marketing Nette dělají spokojení uživatelé

Články PHP, Rozhovory

Dnešního zpovídaného určitě není potřeba čtenářům Zdrojáku dlouho představovat – David Grudl, autor několika známých open source knihoven, propagátor „správného stylu“ programování v PHP a výrazná postava české webařské scény v nejbližších dnech představí novou verzi frameworku Nette

Nálepky:

Na úvod – co vlastně děláš, jak se máš? Kromě toho, že připravuješ Nette Framework, děláš školení, tvoříš weby, …

Počkej, ty jsi říkal rozhovor – to mám odpovídat já! Řekls zhruba všechno co dělám.

Dobrá. Takže, blíží se ti vydání Nette…

Mně se Nette, člověče, blíží už roky!

Teď už ale víme, že to má být v pátek. Co je v Nette 2 nového?

S Nette dvojkou dělám už dlouho, když se mě někdo zeptá, co je tam nového, tak odpovídám: Moment, já se musím podívat na tu starší verzi, abych věděl… Vážně, novinek je tolik, že nevím, kde bych začal. Ale neboj, při příležitosti vydání dvojky připravím pro Zdroják přehled.

Takže slovy klasika: Ty vlastně Nette 2 už několik let máš, schováváš si ho sobecky sám pro sebe a komunitě ho nedáš!

Ne, komunita ho má a staví na něm své weby, ačkoli to je zatím alfa. U Nette neznamená „alfa verze“ že to je nefunkční, ale že některé věci se ještě mohou změnit, a pravděpodobně i změní.

Vývoj Nette jde evolučně, nikoliv revolučně, rozvíjejí se věci, co se ukázaly, že jsou fajn, a přidávají se nové. Vyspěly šablony, máme nové debugovací nástroje, databázovou vrstvu, taky řadu drobných vychytávek, které usnadňují používání. Mám takovou zkušenost, že když člověk něco vymyslí, tak trvá asi půl roku, než se ukáže, jestli to byl krok správným směrem. Proto se i vývoj táhne.

Je Nette těžké na naučení?

Já si při vývoji dávám pozor na jedno: kolem Nette vyrůstají programátoři, získávají určité návyky a díky kontaktu s ostatními se zlepšují a zdokonalují. Věci, které je původně přitáhly, je po čase už nezajímají, protože jsou pro ně samozřejmost, a začínají se na framework dívat jinýma očima, na vyšší úrovni, přemýšlejí, co by se tam dalo změnit. Třeba teď je aktuální téma nejzdatnějších programátorů z komunity Dependency Injection. To je věc, která by je před pár lety naprosto nezajímala, protože třeba nebyli na dnešní úrovni. No a já se snažím o to, aby Nette nešlo jen s touhle elitou, ale aby bylo stále chytlavé i pro nováčky.

Právě Dependency Injection je dobrý příklad přístupu k novinkám: já tam nechávám začátečníkovi i jednu statickou třídu, protože použití statických tříd a singletonů je pro začátečníka „myšlenkově“ mnohem jednodušší než DI. Ačkoli programátor, co se DI naučil a pochopil, byť teprve před měsícem, už říká: Já jsem to pochopil, vždyť je to jednoduché, tak proč tam je ten zastaralý způsob? On je tam jen jako alternativa, aby se začátečník mohl snadno „dostat do Nette“.

Používáš PHP dlouho a intenzivně. Co se ti na něm nelíbí?

Já ti odpovím asi takhle: Na PHP mi vadí dvě věci, které se vzájemně ruší. Zaprvé mi vadí, že se ten jazyk absolutně nevyvíjí. A druhá věc, která mi vadí, je, že když už se vyvíjí, tak směrem, který se mi nelíbí.

Proč tedy u PHP vlastně zůstáváš?

Na to zase odpovím slovy z tvého článku: PHP je „dostatečně dobré“. Dnes nevidím jazyk, na který by se firmě tvořící weby nějak zásadně vyplatilo přejít. Firmu zajímá, jak je těžké sehnat dobrého programátora a kolik bude stát. Sehnat dobrého programátora není snadné v žádném jazyce, ale v PHP je to asi nejsnazší. Spolu s dalšími věcmi kolem, od omílané dostupnosti hostingů po získávání lidí, jsi s PHP v poměrně dobré situaci. Ještě jsem neviděl na jiných platformách a v jiných jazycích něco, co by tuhle výhodu dokázalo zásadním způsobem vyvážit.

Jinými slovy: Není nástroj, ve kterém bys standardní web mohl vyvinout s polovičním počtem programátorohodin, což by ti vyvážilo fakt, že je na trhu polovina nebo třetina dostupných a dražších programátorů. Připadá mi, a navíc se mi to i potvrzuje v rozhovorech s lidmi, co shánějí programátory a udržují tým atd., že když to nakonec přepočítají na finance – kolik kdo bere, kolik potřebuje lidí, jak složitý projekt dělá – tak vychází PHP naprosto nejlíp. Přitom ten jazyk je „dostatečně dobrý“ – good enough. Pochopitelně jsou zadání, kde určité jazyky nemají konkurenci, a tady by trvat na PHP bylo naopak neekonomické.

Kdysi jsme se bavili o tom, že se ti líbí C#, nešel bys třeba tam?

Já nemám nic proti Microsoftu, ale ten ekosystém okolo mi nevyhovuje. Víš, jak jsme se dlouho dívali s podivem na IIS, jak složitě se nahrazovaly věci jako mod_rewrite z Apache. Nebo zobrazování záznamů po stránkách, to se i v nejnovějších MS databázích řeší krkolomně. A právě kvůli tomu všemu C#, což je jinak jazyk, který se podle mne vyvíjí úplně nejvíc, nepoužívám, jen zpovzdálí sleduju. Navíc na ASP.NET se objevil zajímavý framework pozdě, to už jsem měl hotový vlastní framework postavený na PHP, se kterým jsem… no, já to takhle nemůžu říct. Já jsem s ním vlastně neustále nespokojen…

To je asi problém každého autora…

To je otázka, člověče. Já si třeba myslím, že dokud to tak je, je to dobře! Ale jednou se to třeba zlomí, začnu být spokojen, a v tu chvíli předám žezlo někomu jinému.

Jak se vlastně předává open source projekt? Už víš, co se stane ve chvíli, až tě přestane vývoj Nette bavit? Máš vymyšlené předání nástupci…?

Já myslím, že to je něco podobného, jako když jedna diktatura přebírá moc od druhé diktatury. Takže někdo přijede se šalinou, srazí mě, sebere mi přístupové údaje na GitHub a řekne: „Teď jsem tady vládce já!“ Nebo se vyhlásí revoluce, udělá se fork, nazve se to trošku jinak…

David Grudl (vpravo) s Jakubem Vránou, spoluautorem Nette Database

Proč bych si měl vybrat Nette? V čem se liší od ostatních frameworků, zaběhaných a celosvětově používaných?

Jednoznačně určitým stylem práce, „Nette Way“. Já jsem nad tím přemýšlel asi před rokem, když jsme o tom diskutovali s lidmi, a ti mi říkali: Hele, musíš formulovat nějakou „vizi frameworku“. To mi připomnělo takové ty weby korporací, kde je povinná stránka „Naše vize“…

… nebo „Naše mise“…

… nebo „Naše mise“, a tam se dalo deset vět vygenerovaných nějakým generátorem korporátních frází, které neříkaly vůbec nic, ale musely obsahovat slova jako „dynamický“, „strategie“ a tak dále. Tak jsem si říkal: Proč bych měl tohle vytvářet? To nepotřebuju! A pak mi to došlo. Trvalo mi to hrozně dlouho a přišel jsem na to díky školení Nette; taky mi pomohlo, když jsem se zúčastnil školení jiného nejmenovaného frameworku, kde školil přímo autor. Tehdy jsem si uvědomil, v čem se liší přístup Nette.

V čem se liší?

To byl takový AHA! moment. My jsme na školení toho frameworku měli udělat určitý krok, a bylo vidět, že se tam lidi ztrácejí v adresářích, sem tam jim vyskočilo nějaké chybové hlášení, které bylo sice věcně správné, ale moc nepomohlo. Autor musel chodit kolem lidí a všem jim říkal, co tam udělali špatně a opravoval je. A já si uvědomil, že když mně se taková věc stane při mém školení, tak začnu okamžitě přemýšlet, jak té chybě předejít, jak zařídit, aby uživatelé nebyli zmatení…

Tedy že to je tvoje hloupost, ne jejich.

Je to vždycky moje hloupost! Jednoznačně. Pokud tutéž chybu udělá třeba polovina lidí, tak kdo je tady blbej? A pokud je to chyba, které nejsem schopen předejít, tak aspoň formuluju text výjimky tak, aby to bylo návodné. Dokonce v případě jedné výjimky jsme asi půl roku řešili text zprávy, aby lidem došlo, co udělali špatně – a tohle je podle mého ten zásadní rys Nette: Je stavěné tak, aby bylo co nejpoužitelnější a nejvstřícnější.

Vůbec jsem přesvědčen o tom, že pokud vývojář svůj framework sám aktivně nepoužívá a neškolí, nemůže se nikdy dobrat perfektního výsledku.

Proč vzniklo Nette, proč jsi nevzal Zend / Symfony / cokoli a neupravil ho podle svých představ? Proč vlastně vymýšlíš kolo?

Jednak Nette jsem potřeboval už v roce 2004, kdy jsem ho začal vyvíjet, a to ani Zend, Symfony nebo Rails nebyly. Ale i dnes mi občas někdo říká: Proboha, proč vymýšlíš další šablonovací jazyk, když máme milion šablonovacích jazyků? Já na to odpovídám: A jak s ním vyřešíš to či ono? Když pak vidím, jak je to jinde složité, mám hned motivaci pokračovat ve vymýšlení dál. Když mi na školení řekne člověk: Já jsem kodér, přišel jsem se spíš jen podívat, ale šablonovací jazyk Latte o kilometr předběhl to, co znám. Proč to nepropaguješ víc? tak jsem spokojen, protože vidím, že ta práce je dobrá. Plus to, že pak i jejich práce je dobrá, že se v tom, co dělají, snadno vyznají atd.

Tos mě trochu navedl… Čtu různé zahraniční magazíny, a tam jsou třeba články typu „Deset nových zajímavých PHP frameworků“, a teď tam jsou vyjmenované různé obskurní záležitosti, o kterých ví pravděpodobně jen autor a jeho kamarádi – proč tam není Nette?

Důvody jsou dva. Za prvé: Nette nemá anglickou dokumentaci, což je problém, který, jak věřím, velice rychle napravíme; anglická dokumentace by měla vyjít brzy po vydání české, už máme pomocníky, co slíbili, že to přeloží – a já jim chci tady moc poděkovat, protože to jsou prostě věci, které člověk sám udělat nemůže. No a v okamžiku, kdy bude dokumentace, se dá napřít síla na prosazení frameworku v zahraničí.

Počkej, počkej, říkáš: „dá se“ – uděláš to? Sebereš se a pojedeš přednášet o Nette na zahraniční konference?

No to je právě to. Budu hrozně rád, když se najde člověk, který mi s tím bude chtít pomoct, takový Nette evangelista. V ČR už jsou kluci, kteří jezdí po školách a přednáší o Nette. Teď bude potřeba přednášet i v angličtině. Což je pro mne otázka… no… budu to muset zvládnout, jednoho krásného dne se postavit před publikum…

David Grudl přednáší – jak jinak než o Nette

Asi by bylo nejlepší teď razantně nastoupit a do konce roku udělat alespoň tři přednášky na zahraničních konferencích…

No, to by bylo pro začátek ideální. Jak ale prosadit framework ve světě, to mě na vysoké škole neučili. To tě nenaučí, nikdo s tím u nás nemá běžně zkušenost a lidi, kteří takovéhle zkušenosti mají, tak to zase nejsou lidé, se kterými by ses mohl běžně potkat. Ti už dneska jsou někde úplně jinde.

Na druhou stranu – marketing Nette byl od začátku na české poměry poměrně výrazný. Jestli si dobře pamatuju, tak okolo něho byl obrovský hype skoro rok před tím, než vůbec vyšla první verze.

Jo, to bylo až neuvěřitelné. Když jsem četl, jak lidi píšou, že se jim vyplatí počkat na Nette, až vyjde, protože Nette je nejlepší, bylo to až zábavné. Na druhou stranu to na člověka kladlo nároky…

Věřím. Ty jsi vlastně mohl nastavená očekávání jen zklamat…

Tak. Ale vážně – tenhle způsob uvedení, takový pozvolný, kdy jsem pouštěl malé ukázky předem, se nakonec asi vyplatil.

Mě na tom zaujalo, že ty vlastně, jako jeden z mála open source vývojářů v ČR, děláš svým věcem i marketing. To nebývá pravidlem, častěji programátoři něco udělají a pak čekají, až si toho svět všimne… Jak ses k tomu vůbec dostal, jak tě napadlo svoje výtvory takhle „tlačit“?

Já měl vždycky takový příklad toho, jak to nedělat, u tebe – takový ten přístup „až si svět všimne Bloguje“… Ale ne, vážně: To je souhra obrovských náhod, dalo by se to označit úslovím „štěstí přeje připraveným“. Není v tom žádný kalkul, jestli si někdo myslí, že jsem si v roce 2004 založil blog, který mi získal návštěvnost, abych o pět let později tuhle návštěvnost využil k propagaci Nette, tak – ne, žádný takový plán v tom nebyl. Byla to spíš náhoda, byl jsem v pravý čas na pravém místě, a hlavně jsem měl okolo sebe lidi, kteří tomu pomohli.

Když jsme mluvili o dokumentaci – napadlo tě někdy napsat knížku? Nějaké to „Vyvíjíme v Nette“… Nebo že by sis ji od někoho nechal napsat?

No, náznaky stran tohoto jsem už zahlédl v mailech… Co se mě týče – dva kamarádi na podobnou nabídku přikývli, a jejich zkušenosti jsou pro mne dostatečným mementem, abych na takové nabídky nikdy nepřikyvoval. Samozřejmě byl bych rád, kdyby knihu o Nette někdo napsal, pomohl bych mu s tím, dal bych mu materiály, udělal bych korektury, ale sám to psát nechci. Člověk nestihne všechno.

Když o tom mluvíš – jak vlastně děláš na Nette? Jsi tam ten diktátor, co všechny commity schvaluje a celé to sám pevnou rukou řídí, nebo tam máte nějakou volnost?

Jasně, diktátor. Můj přístup je… hm, hele, dám ti příklad: Na fóru někdo napíše nějaký návrh, a ostatní tam píšou „+1“ a tak. Já jim na to odpovídám: Ale tady žádná demokracie nefunguje! Pokud to chceš prosadit, tak dej jasný argument, můžeme o tom diskutovat a když mě ubiješ argumenty, tak máš pravdu – ať tě všichni „plusujou“ nebo „mínusujou“, to je jedno. Takže nejsem ani tak diktátor, co by určoval, co v Nette má být, ale vyžaduju prosazování opodstatněných vě­cí.

Když někdo přijde s požadavkem na featuru, tak musí dát „use case“, kde ji potřebuje. V Nette totiž zásadně nepřipouštím featury typu „dneska mě napadlo, co bychom tam mohli přidat“, protože mám vyzkoušené, že tohle nefunguje. Zajímavé featury jsou ty „teď dělám projekt, a tam by bylo skvělé mít tohle, naimplementované takto, aby se to dobře používalo a šlo by to použít i jinde“.

Necítíš se tak trošku jako zajatec svého vlastního díla?

Ne, mě to totiž baví. Je to asi jediná věc, která mě na vývoji server-side částí dnes baví – psaní Nette. A když tě něco baví, tak se necítíš jako zajatec.

Tak jinak: Neděsí tě to množství lidí, co čekají na to, až něco uděláš?

Spíš mám dojem, že celý vývoj probíhá ve skupince několika lidí. To máš jako na blogu – máš blog a tam ti komentuje skupinka iks lidí, co se víceméně nemění, a ty máš pocit, že se to odehrává mezi vámi. Pak jen trošku nechápeš, proč je u článku 5000 PV, když se přeci bavíte v pěti lidech.

Co tvoje další projekty? Dibi, Texy! – zůstaly udržované, neboj jsi je dal k ledu?

Texy! je věc, která vznikala v určité době, řešila konkrétní úkol – a funguje. Sice jsou nějaké požadavky na změny, ale vzhledem k tomu, kde všude to je nasazené, by například změna chování syntaxe představovala obrovský problém.

A Dibi? To je vlastně součást Nette, ne?

Není. Já do Nette udělal novou databázovou vrstvu… Oni mi sice kluci potom říkali, že už jednu databázovou vrstvu mám, a já si uvědomil, že vlastně jo. Nová vrstva je takový experiment. Všichni si na Dibi pochvalovali, jak se tam skvěle píšou SQL dotazy pomocí modifikátorů, a já si říkal: Možná je čas na databázovou vrstvu, ještě jednodušší, která už ani ty modifikátory mít nebude. A výsledkem je Nette Database.

Co ty a frontendové věci – HTML5, CSS3, JS API a další. Zajímáš se i o tyhle novinky, nebo jsi zažraný do server-side?

Snažím se sledovat jak frameworky, tak jiné technologie, nakonec Nette byl průkopníkem v AJAXu, dnes je v HTML5. Ale dívám se na novinky z pragmatického pohledu. Třeba HTML5 jsem vítal s nadšením, protože jsem měl proti XHTML velké výhrady – to byl jazyk, který nedokázal popsat ani HTML stránku a musel si vypomáhat berličkami. Například takový atribut class, který už je vlastně serializací dat bez podpory v DOM. Nebo absence logických atributů, polofunkční syntaxe pro komentáře a tak dále.

Co mi chybělo nejvíc, a z čeho mám při přechodu na HTML5 velkou radost, to jsou datové atributy. Nette 2 generuje kód v HTML5 a data atributy používá – tím pádem je to zpětně kompatibilní s čímkoli, s výjimkou XHTML1. Ačkoli, dalo by se to možná řešit rozšířením DTD… Datové atributy společně s jQuery výrazně zjednodušují AJAX, což je klíčová technologie; framework je dneska už napůl serverová, napůl frontendová věc.

Zároveň jsem ale pragmatik – třeba nový návrh formulářů v HTML5 je značně nedotažený a nechci stavět na něčem, co se mění pod rukama.

Pod vlivem Rails a Djanga se i do PHP šíří generátory kódu, co ti ty části, které píšeš pořád dokola, vygenerují za tebe. Chystáš něco takového do Nette?

Nette se bez generátorů obejde, protože kombinuje komponentový a MVC přístup. Takže to, co se píše pořád dokola, a co ti ty generátory generují, si můžeš vytvořit jako komponentu. Mně nepřipadá jako správné dělat generátor, protože si říkám, že v okamžiku, kdy potřebuju generovat spoustu podobného kódu, tak na to asi nejdu úplně dobře. Mám ale v plánu do Nette dát komponentu pro administraci. Stáhneš si Nette, vytvoříš projekt, a budeš mít připravenou administraci. Nechci jít cestou generování kódu, ale cestou komponenty, která tohle vyřeší.

Když se dívám do diskusí, tak si říkám – proč má PHP tak špatnou pověst mezi programátory? Že je to „jazyk pro bastliče“ a „lepiče skriptů“…

Dobří programátoři jsou všude, na jazyku zas tolik nezáleží. PHP se snadno naučíš, je tu obrovské množství programátorů, co na fórech poradí, i začátečníkům. A do začátečníků se dobře strefuje: Tohle v jiných jazycích nemáme, tam to jsou samí odborníci, co se nejdřív pět let učili teorii programování.

Otázka zní: A je to dobře? Vždyť žádný učený z nebe nespadl! Ono se to dá otočit a říct taky: Lidé kolem toho a onoho jazyka neumí pracovat se začátečníky, nemají jim co nabídnout! Je těžké klást začátečnické otázky, když si připadáš jako outsider a jako nevítaný vetřelec.

Navíc si vezmi, že ne každý programuje proto, že chce být profesionál – mnohé to jen baví a chtějí si udělat radost. Cuketka začal psát blog o jídle ne proto, že by chtěl být kuchař s pěti michelinskými hvězdami; byl to doktor a jídlo ho bavilo. Proč mu to vyčítat? Věřím tomu, že spousta odborníků mu to vyčítat bude, ale to není argument.

Chceš něco čtenářům vzkázat? Představ si ty komentáře, co pod rozhovorem budou, nadechni se a…

Ne, nějak apriori záporný postoj fakt nemám. Lidé fungují velice pozitivně. Oni ti pomáhají, oni ti dělají vlastně tu nejlepší reklamu, když jsou spokojení. Co si budeme povídat – marketing Nette není založený na tom, že já bych přesvědčoval ostatní; dělají to právě ti druzí.

Lepší větu na závěr jsi ani říct nemohl! Takže ti přeju, ať se daří tobě i Nette a doufám, že se konečně po dvou letech dočkáme pokračování seriálu o Nette na Zdrojáku.

Foto: archiv Zdrojáku,

autoři: Ivana Dvorská, Internet Info; Dušan Šimonovič

Komentáře

Subscribe
Upozornit na
guest
206 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
Radek N.

Jednou si snad najdu čas a Nette se naučím :). Docela mě překvapilo, že Nette sahá až do roku 2004. V té době jsem teprve zjišťoval co je HTML a byl jsem moc dobrý kamarád s Frontpagem :).

Petr

Jo, jo, taky už jsem zkouknul pár kusů kódu Nette, bohužel časově bych to nezvládl, škoda :-(

Rubysta

Na Nette 2 se opravdu těším. Možná mě to přinutí k návratu zpátky k PHP :-) Jinak místo generátoru administrace jsou komponenty – super řešení ;-) Jinak myslím, že Nette kniha by se tu dost ujala.

Srigi

Som velmi rad, ze sa David zmienil o skoleni, ktore absolvoval u Fabiena. Vlasten som jeho nazor na toto skolenie este nikde nevidel. A musim napisat, ze aj tento drobny naznak mi staci aby som si medzi PHP frameworkami vybral sampiona.

Ja zelam Davidovi vela uspechov pri naplnovani hlavneho ciela pre rok 2011 – dostat Nette do sveta. Verim, ze sa to podari a velmi sa tesim na „AHA moment“ na weboch ako je Nettuts+ a pod.

fanboy

Výběr frameworku by mělo být pragmatické rozhodnutí a ne fanboy názor. Stačí se podívat na témata dvou posledních PHP konferencí http://www.phpday.it/sessions/2011 a http://www.phpconference.nl/schedule/. Zatímco minulý rok bylo tématem Fabiena DI (a díky tomu se nejpokročilejší programátoři v Nette začali o DI zajímat), letos to je ESI (bude to tématem pro Nette na příští rok?).

A hlavně, pro PHP 5.3+ začínají vznikat úzce specializované knihovny kódu, které se stávají standardy pro řešení daných problémů:

  • Behat (BDD),
  • Imagine (práce s obrázky),
  • Assetic (práce s css a js),
  • Monolog (logování),
  • Doctrine2 (ORM, ODM, OXM, …),

Zajímavou otázkou je, který PHP framework má pro všechny tyto nástroje připraveny moduly? Odpověď lze nalézt na http://symfony2bundles.org/bundle – zatím tam však chybí LatteBundle a NetteBundle ;).

Michal

Ty knihovny, ktere jsi vyjmenoval jsou vsechny z komunity kolem sf, tak kde jinde by asi na to mely byt moduly? :-)
Rekl bych ze jsi popsal podmnozinu PHP – sf, ne PHP jako takove.

Ale souhlasim z jednou veci, ze je treba si vybrat FW podle hodne kriterii a jedny z tech nejdulezitejsich je u me podpora komunity (cim vetsi tim lepsi), co nejkratsi a nejprijemnejsi cesta od zadani ke spusteni a stabilita.
Kvuli vsem temhle atributum a hlavne kvuli te komunite se soustredim na sf taky, protoze neni nic horsiho nez kdyz mam problem, ktery zadam do google a nic nenajdu.

Bohuzel nemam dost casu na to, abych se venoval dalsim FWs a budoval si fond znalosti diky kterym bych dokazal zvolit na kazdej projekt to idealni, zatim mi musi stacit jeden.

Jiří Kuneš

Jenže jiné jazyky mají takových knihoven mnohem víc. Velká část z nich je kvality, jakou jsem v PHP málokdy viděl. Viz http://ruby-toolbox.com/

PHP je tu s námi dost dlouho a nic jako „ruby gems“ stále nemá. Přitom tu byl pokus PEAR, který místo aby programátoři vylepšovali, tak ho nikdo neměl rád. Možná je to proto, že gems jsou většinou hostované na GitHubu :)

Nový jazyk přináší novou kulturu, čerstvou krev a nové nápady. Proč se nesvézt na nové vlně?

David Grudl

DI, kešování, práce s obrázky, CSS, JS, ORM, logování – to jsou v PHP témata minimálně posledních pěti let. A po celou dobu vznikají (a umírají) specializované knihovny, které se „stávají standardy“. Take it easy :-)

fanboy

V PHP je to s těmi standardy trochu problém. Vždy se najde spousta programátorů, co vynalézá vlastní standardy (tím netvrdím, že je problém vždy na jejich straně). Nicméně za standardy v PHP se dají považovat:

Autoloading – PSR0,
Formátování – PEAR CS, Zend CS,
Kontrola správnosti formátování – CodeSniffer,
Unit testy – PHPUnit,
Statická analýza kódu – PDepend,
ORM – Doctrine1 -> Doctrine2,

Ono znát jen nějaký framework nestačí. K programování patří testování, kontrola kvality kódu apod. Proto se Nette se svými originálními formátovacími pravidly, originálními testy, originálním zacházením s jmennými prostory a dalšími originálními věcmi, stává naprostou originalitou v celém vývojovém cyklu :)

No a jestli se stanou knihovny vyvíjené komunitou kolem Symfony2 standardy, pak jenom dobře. Možná i díky tomu bude mít PHP svoje egg nebo gem balíčky https://github.com/naderman/composer.

David Grudl

Originální formátovací pravidla? Originální zacházením se jmennými prostory? To by mě zajímalo, můžeš uvést konkrétní příklady? Začínám totiž mít pocit, že jsi přišel jen plácat z vody a kázat Symfony ;-)

fanboy

Standardní formátovací pravidla jsou PEAR. Tato formátovací pravidla jsou používaná množstvím knihoven (PHPUnit, Zend Framework, Behat, Doctrine, Symfony2, …). Tím se stávají tato formátovací pravidla standardem, protože jsou přijata množstvím rozdílných projektů. Nette nerespektuje například používání 4 mezer pro odsazení.

Standardní práce s jmennými prostory je PSR0. To znamená, že jmenné prostory odpovídají adresářové struktuře. Tuto konvenci používá Zend Framework, Doctrine, Behat, Lithium, Assetic, …. Opět se na tomto postupu shodují velké PHP knihovny, takže se PSR0 stává standardem. Nette nerespektuje.

Pro unit testování se používá standardně PHPUnit. Používá ho Doctrine, pDepend, Twig, …. Opět se na něm shodlo mnoho PHP projektů, a tak se tento postup stává standardem. (Nette používá nějaký vlastní systém pro testování).

Nerozumím Vaší reakci o kázání Symfony. PHP není náboženstvím, ale programovacím jazykem. Jednotlivé knihovny se mohou používat zároveň a dokonce je to velmi prospěšné. Toto neustálé vyhrocování mezi Nette x Symfony2 je asi u mnoha lidí oblíbené (něco jako NotORM x Doctrine2 u další skupiny lidí). Já jsem jen uvedl, že celý vývojový proces je sestaven na spolupráci různých PHP knihoven (mnohdy i knihoven z jiných programovacíh jazyků – např. Sass) a je velmi dobré, pokud dodržují určité navržené standardy. Pro programátora je pak jednoduší se v nich orientovat.

David Grudl

Hason, že? ;-)

Pokud nazýváš používání tabulátorů místo mezer „originálními formátovacími pravidly“, pokud tvrdíš, že Nette nerespektuje PSR0, což není pravda (byť by vůbec respektovat nemuselo, má k tomu nástroje, které se u jiných frameworků teprve pomaličku rodí), tak myslím, že už není potřeba pokračovat v diskusi.

Snad jen dodám, že z komentářů je zjevné, že ono „neustálé vyhrocování mezi Symfony a Nette“ je oblíbené jen u tebe. Ty oblibuješ uniformitu, já zase pestrý svět s možností volby.

Cechjos

Ad PSR0 — co třídy ve složce common a výjimky? O.o

David Grudl

Ano, složka common je taková roztomilá výjimka, aby existovala proti Nette nějaká munice :-)

Michal

.. ze se do toho vkladam, nektere standardy by me opravdu chybely, konkretne PHPUnitu je skoda minimalne z jednoducheho duvodu.
Ve vsech IDE ktera stoji za to maji primou podporu, coz v mnohem zrychluje praci a hlavne to setri mysl programatora pred prepinanim (UI testu je integrovano do UI IDE).
Obecne vzato ma framework z meho pohledu jednu velikou vyhodu v tom, ze uci programatory jednotnosti a krati dobu potrebnou na zvykani si pri migraci projektu. FW by z techto duvodu urcite mel i nutit lidi k jasne danym konvencim.

To jsou me nazory, nikdo dalsi je nemusi respektovat, myslim ze to podstatne prijde pro Nette az s vykouknutim za hranice kde bude postaveno do souboje s ostatnimi obecne pouzivanymi FWs.

David Grudl

Ale ty přece netestuješ framework, takže by ti mělo být v podstatě jedno, co se používá k jeho testování. Nebo jsem něco přehlédl? Na testování používám o něco jednodušší nástroj, který se od PHPUnit liší v tom, že kód není zapsán ve třídách – velmi jednoduše se mi potom kód krokuje v IDE. Přepsat do PHPUnit by se dal kdykoliv, snadno, automatizovaně, ale zkomplikovalo by mi to práci.

Jakým způsobem ty třeba krokuješ v IDE testy?

Vebloud
David Grudl

Díky, ale tohle je spíš popis debugování obecně. Mně se zdá zdlouhavé/složité se v dobrat až na příslušnou řádku v testu. Prostě test je jen třída a nevím, od kterého souboru mám začít krokovat, abych dospěl k cíli.

Michal

Ja testy nekrokuju, ja si jimi akorat kryju co napisu.
Kdykoli se potrebuju presvedcit ze je vsechno ok, spustim testy. Kdyz jsou dobre napsane, tak vim, ze mi staci zelena linka nakonci a nemusim sahnout na prohlizec.
(Samozrejme za predpokladu ze pisu i Behaviour testy).
Ja uz se bez toho neobejdu, jsem zaprve linej testovat neco rucne a zadruhe uz mi to milionkrat vytrhlo ze zadku takovou trisku na kterou bych rucne neprisel, takze by se v klidu dostala na produkci, kde by se samozrejme projevila v nejmin vhodnou dobu.

David Grudl

A co když test selže? Jak potom krokuješ?

Michal

Jestli myslis co delam kdyz mi nejakej z testu zcervena, tak to je jednoduchy.
V zakladu spoustim testy souhrne jako asi kazdej (co testovaci trida to radek na cli), pokud se neco podela, spoustim konkretni tridu (BDD scenar) co se podelala a tam vidim kterej assert nesedi.

To je preci standardni postup, nevim co myslis krokovanim, ale prijde mi ze to o cem mluvis resim debugem.

Jan Tichý

Pokud potřebuješ krokovat testy, není to spíš známka špatně napsaných a strukturovaných testů? V jakém případě Ti nestačí standardní PHPUnit informace, který konkrétní assert ve kterém konkrétním testu se kterými konkrétními hodnotami selhal?

David Grudl

I ty Brute? ;-)

Je mi líto, že se programátorské řemeslo za posledních 30 let přesunulo z plnohodnotných IDE do primitivních poznámkových bloků (obzvláště na platformě Mac), ale jsem holt stará generace, co plnohodnotné IDE používá, kód krokuje a nevidí v tom známku špatně napsaného a strukturovaného kódu, ale známku vyšší úrovně práce. A je fuk, jestli jde o aplikaci, testy nebo cron skripty.

Oldis

Dokud sem delal v c++, pouzival sem samozrejme krovonani pri debugovani, ostatne byl to jedinej zpusob jak zjistit co se zrovna deje spatne, a vetsina chyb vychazela vetsinou z neosetrenych ukazatelu. Po tom co sem se zacal zivit s php, kde sem zacinal v notepadu(nekolik dni), pak v pspadu(cca tyden), dreamweaveru (nekolik mesicu), az sem skoncil u eclipse, ktera mi zrovna sedi nejvic, sem si na krokovani odvykl, zacal sem hojne pouzivat var_dump a vetsina chybovejch hlasek nebo vyjimek me vetsinou navede, k mistu kde je problem. jinak na krokovani nevidim nic spatneho, ale kdyz si vzpomenu jak to probihalo v c++, kolik casu sem stravil krokovanim, tak mi to nijak nechybi.

Borek Bernard

Krokování dá i odpověď na otázku, proč selhal. Krokovat není potřeba vždy, ale občas se to hodí.

Oldis

unit testy se hodi predevsim na to, ze se nechaji testovat krajni hodnoty a chovani jednotky pri nesmyslnych vstupech, cili pokryti vsech pripadu co mohou nastat, krokovani ma smysl v okamziku, kdy sem se ne zcela jasne nekde upsal, a nevim co se deje a tedy to potrebuji zjistit, v c++ se mi to stavalo pomerne casto a jak sem rekl vesmes slo o praci s ukazateli, coz se v php jen tak nestava.

MW

V PHP jsou možné dva přístupy ladění – nastrkat na všechna možná a nemožná místa var_dump a ještě trefit, v kterých proměnných by mohl být nesmysl a refreshovat jako o závod, když jsem na nějaký výpis zapomněl.

Anebo nainstalovat debugger, krokovat si to řádek po řádku a průběžně koukat do všech proměnných, které mě během toho napadnou.

Pokud to aspoň trochu jde, tak volím postup číslo 2.

David Grudl

+1

:-)

Michal

Jeste je tu jina moznost.
Napsat si v testech co od aplikace ocekavam a postupne to natirat na zeleno.
Ze si mezitim potrebuju prohlizet obsah promennych je jasna vec.

Nedokazu uverit kam az se uhnulo od me poznamky na adresu chybejici podpory PHPUnit v Nette.
delejte si co chcete, tahle diskuze me jen utvrdila v tom, ze Nette neni nic pro me.

David Grudl

Jde o chybějící _podporu_ nebo o to, že autor PHPUnit _nepoužívá_?

Pokud to první, jsem připraven o tom diskutovat a rád podporu doplním. Jen potřebuju vědět, jak by měla konkrétně vypadat (nejlépe asi začít na fóru.) Pokud jde o to druhé, pak to patří to do stejné skupiny „cotipotom“, jako nářek jednoho komentátora, že Nette není vyvíjené na Linuxu.

Michal

Nevim co kdo pouziva a je mi to uprimne jedno, ale jsem uz nejakou dobu zvyklej (skoda ze jsem na to neprisel driv) na TDD.
Je dobre ze na PHP vznikaji podobny obecne respektovany baliky jako treba na ruby, protoze to vede k velke podpore od autoru, kvalitni dokumentaci, jednodussi praci a v neposledni rade v podpore u ostatnich nastroju.
Pokud jde o vyber mezi malym treba i lepsim neznamym nastrojem a konkurencnim obecne znamym standardem volim vzdy velkej obecne podporovanej, hlavne kvuli podpore krizem krazem vsude mozne a veliky pravdepodobnosti provazani jeho funkcnosti s dalsimi nastroji jinde.
=====
Co napisu budu psat o v0.9, ve ktere jsem resil jeden projekt a musim rict ze to byl navrat do dob obnovovani prohlizece a pokusu dostat stranku do vsech moznych i nemoznych situaci jak zapricinit chybu a to nebylo prijemny.
v2 jsem zatim nevidel, ale z rozhovoru vim, ze nektere veci o kterych budu [sat uz jsou resene jinak, tak to ber s rezervou.
=====

1) Na to aby se do Nette dalo zakomponovat testovani, bylo by treba umoznit Nette kompletne spravovat databazi. Testy potrebuji sva vlastni data, takze by se z toho podle meho nazoru muselo zase delat symfony a pridat nejake ORM, ktere si tu datazi bude samo resetovat alepson pro testovaci prostredi (sorry, ja chapu ze te to s tim sf sere, ale tyhle veci tam maji fakt vymysleny docela dobre)
2) Pokud ma byt podpora unit testingu uzsi, bylo by potreba pridat nenavidene generatory kodu, ktere by spolu s modelem generovaly na prani testy i presentery a sablony. Web development je repetetivni cinnost a je treba vyclenit lidsky faktor i frustraci s opakujicich se cinnosti a tech je dost- generator, generator, generator.
3) Zaintegrovat behaviour test nastroj (dneska asi pripada v uvahu jen Behat) – kdo nezna, muze mrknout na BDD treba tady http://railscasts.com/episodes/155-beginning-with-cucumber, nebo tady http://scotland-on-rails.s3.amazonaws.com/1A06_JosephWilk-SOR.mp4 princip je vsude stejnej, na ruby, i v php, rails pouze automatizujou nektery procedury v ramci integrace testu do projektu..

Neber to jako utok na Nette, ja vlastne obdivuju ze se tomu tak venujes, chapu ze abych o to mel zajem, muselo by se to menit v neco co to byt asi nema, ale nechtel jsem tvuj konstruktivni prispevek nechat bez odpovedi.
Kazdopadne si myslim, ze minimalne to BDD by se tam integrovat urcite melo.

Tharos

Tohle nechápu. Já osobně používám přístup TDD v Nette (sice jen pár měsíců, ale tak pár webových aplikací už jsem tímto způsobem k velké spokojenosti napsal) a nenarazil jsem na žádný problém.

Mluvíme vůbec o tom samém? http://en.wikipedia.org/wiki/Test-driven_development

Co brání použití této metodiky v Nette? V čem je problém resetovat databázi v setUp() do nějakého výchozího stavu ($dibiConnection->loadFile(‚vycho­zistav.sql‘))? O automatické generování testů, jejich spouštění a kompletní správu se mi stará IDE.

Landy

Ja teda nevím jak v Nette, ale obecně si myslím, že unit testování je něco trošku jiného. Například pokud vyloženě netestuješ DB vrstvu tak si přece přístup do DB simuluješ nějakou in memory kolekcí dat a né že si děláš nějaký setup a teardown dat v db :)

Tharos

V jednotkových testech testuješ vždy jednu funkcionalitu (typicky jednu metodu nějaké třídy) a pro veškeré závislosti, které testovaný kus kódu má, se vytváří stub/mock objekty. To proto, aby se v daném jednotkovém testu neřešila chyba, kterou mají eventuálně jiné části aplikace a kterou v daném unit testu záměrně nechceš řešit.

Nicméně je běžná praxe, že se knihovny 3. stran (tj. třeba i databázové vrstva) nemockují, protože pak by 95% kódu testu mohlo být věnováno vytváření stub/mock objektů. To by bylo těžce kontraproduktiv­ní… No a pak je zbytečné vytvářet ještě kolekce dat někde bokem, když lze pracovat normálně s databází naplněnou testovacími daty.

Landy

Tak s tímto názorem sem se tedy za celou dobu studia unit testování nikde nesetkal. Všude se hojně doporučuje mít vše napsané proti rozhraní a né si tam dávat DB už jen z důvodu rychlosti spouštění testů. Testování proti DB si dokážu představit v nějakých integračních testech ale rozhodně ne v unit testech.

Tharos

Tak tady máš pár názorů od jiných autorů: http://osherove.com/blog/2004/12/10/i-changed-my-mind-mock-objects-are-wrong-for-database-unit-t.html, http://www.xaprb.com/blog/2008/08/19/how-to-unit-test-code-that-interacts-with-a-database/ … A další viz Google (tyto jsem našel během pár vteřin hledání).

Pro mě osobně je mockování databázové vrstvy, které důvěřuji a která má své vlastní testy od jejích autorů, naprosto zbytečný overhead a ztráta času. Navíc tím roste objem kódu samotných testů a zvyšuje se pravděpodobnost vzniku chyby v samotných testech.

Tím ale nikomu nechci brát jeho styl a přesvědčení. ;)

Tharos

Ještě bych doplnil, že k přímé práci se skutečnou databází v unit testech (testující kód, který s databází pracuje) navádí i PHPUnit samotný a je na vyprázdnění databáze a její uvedení do výchozího stavu přímo vybaven. Viz manuál: http://www.phpunit.de/manual/3.5/en/database.html

landy

samozřejmě pokud budu chtít testovat nějaké volání funkce která má v popisu práce zapsat data do db tak jí nějakou db budu muset poskytnout. Já se k tomu ale snažím přistupoat tak že aplikace s DB komunikuje přes nějaké moje IRepository které si pak pro účely testování namockuju nebo udělám fake atd. Já osobně si s tím hraju v asp mvc takže tam je to pak jendoduché a takové repository už má jen odkaz na Entity fw který samozřejmě netestuju protože to je kód třetí strany.

Tharos

Jasně, ale ty to máš zjednodušené o to, že nějaký databázový mapper, který ve výsledku jako jediný komunikuje přímo s databázovým serverem, je už kód třetí strany. :) Teď mi svitlo, že v podstatě mluvíme o tom samém. Ty jednotkově testuješ nějakou část aplikace a mockuješ IRepository, já jednotkově testuji i to repository (protože je to například můj kód) a v něm používám DBAL, které ale už netestuji (kód třetí strany). Ty máš v ASP.NET MVC podporu pro snadné mockování Repository, což je super, zatímco já v PHPUnitu mockování použité DBAL nijak usnadněné nemám. A jelikož by to bylo pracné, tak prostě DBAL důvěřuji a používám jen nástroje pro správu obsahu a struktury testovací databáze.

Landy

Sem rád,že jsme se schodli :) ja vlastně původně reagoval na někoho jiného. A pokud bych se měl vrátit k té podpoře unit testování v Nette (s nette jsem pořádně nepracoval a proto jen domýšlím) která snad byla jako prapůvod tohohle vlákna, tak možná měl autor na mysli testovatelnost controlleru a podobných míst které přímo komunikují s mvc systémem fw. Vím z vlastní zkušenosti, že například v zendu to byl taky docela problém až oni nakonec sami napsali nějakou podporu pro testování controlleru. Ale jak říkám nemám přímou zkušenost a pod tohle jde v Nette naprosto bez problémů tak se klidně smažu :)

Tharos

U Nette se presentery jako celek testují v podstatě pouze akceptačními testy (vlastní zkušenosti + to, co jsem viděl jinde). Bohužel presenter má takových závislostí, že namockování všeho by byla opravdu neskutečná práce a pravděpodobnost nasekání chyb v samotných testech by hraničila s jistotou. Tady by možná opravdu šlo situaci vylepšit, ale přijde mi, že když se poctivě napíší jednotkové a integrační testy a to celé se doplní akceptačními testy celých presenterů, je to tak robustní pokrytí aplikace testy, že se mohou unit testy presenterů oželet.

Nevím, jestli je nějaký PHP MVC framework v tomhle nějak výrazně dál. Co jsem slyšel, tak v Zendu je to stejná bída… Dělat opravdový unit test nějakého controlleru je stejný porod (ale mýlím-li se, opravte mě někdo). Samozřejmě je mi jasné, že jsou platformy, které jsou v tomhle dál (namátkou .NET, Java).

fanboy

Po prohlédnutí aktuálního kódu Nette není PSR0 dodržováno ;) PHPUnit != Symfony, Doctrine != Symfony, Zend Framework != Symfony. Všechno mimo Nette není Symfony :)

paranoiq

PSR0 je k ničemu. programátorovi to zápis ani čtení kódu nijak nezjednodušuje. v debatě o nových jmenných prostorech v Nette jsem byl proti tomu, aby se jmenné prostory komplikovaly až na úroveň adresářové struktury

úloha adresářů a úloha jmenných prostorů se totiž dost zásadně liší. to první řeší katalogizaci souborů s kódem a slouží především autorovi (autorům) frameworku. to druhé má řešit lepší čitelnost kódu a jednoznačnost názvů a slouží především uživatelům frameworku

(argument davem neuznávám. to že se na něčem shodne sebevětší valná hromada ještě neznamená, že je to správné, natož pak nejlepší řesení)

Tharos

To, že Nette jde svou vlastní cestou, je ale spíše jeho výhoda, nemyslíš? Konkurence je dnes už tak velká, že je důležité odlišovat se, dělat věci jinak.

A je na programátorech, pro co se rozhodnou. U Nette nadvláda Davida nad zbytkem komunity možná až bije do očí, ale já osobně jsem za to rád, protože si nemyslím, že by ryze demokraticky vznikl lepší framework. Naopak je teď hezky konzistentní.

Komu vyhovuje více demokratický vývoj, nechť prostě používá jiný framework, kde výrazně přispívá více autorů.

David Grudl

Bravo, vyhrál jsi!

> Výběr frameworku by mělo být pragmatické rozhodnutí a ne fanboy názor.

Dáme si naše oblíbené téma? Když jsi tuhle na diskusním fóru Nette odrazoval, proč vyvíjíme vlastní šablonovací systém, když je tu Twig, chtěl jsem po tobě vědět, jak se v Twigu vyřeší tento jednoduchý a zcela běžný úkol:

– vypisuju nebufferované data z databáze (tj. neznám dopředu počet položek) jako elementy <li>
– každý lichý bude mít class=“lichy“
– poslední bude mít třídu class=“posledni“ (tedy class=“posledni lichy“, bude-li poslední zároveň lichý)
– protože jsme puntičkáři, nechceme v kódu žádné <li class=“ „> apod, že jo
– a samozřejmě veškerý výstup musí být escapovaný

V Latte tohle zapíšu následovně:

<ul>
{foreach $data as $item}
      <li n:class=“lichy => $iterator->odd, posledni => $iterator->last“>{$item}</li>
{/foreach}
</ul>

případně stručněji: (ze zkušenosti, nováček se tuto konzistentní syntax naučí během cca 20min)

<ul n:inner-foreach=“$data as $item“>
      <li n:class=“lichy => $iterator->odd, posledni => $iterator->last“>{$item}</li>
</ul>

Prosím, napiš tady ekvivalentní zápis v Twigu. A necháme čtenáře posoudit.

(ano, předpokládám, že to buď nepůjde, nebo to bude extrémně složité, nepřehledné a nečitelné, nicméně skutečnost, že Twig ve zdrojácích používá místo tabulátorů mezery, to jistě zcela vyváží! Jsi na tahu, pragmatiku)

Honza Marek

To má zase jinou syntaxi než znám… místo šipeček pro n:class používám otazníky.

Jo a rozhodl jsem se trochu procvičit se v Twigu, tak jsem napsal makro, které umí vlastně to samé jako n:class.

{# použití #}

{# import makra, snad by to stačilo jednou v nějakém layoutu #}
{% from 'JmNecoBundle::macros.html.twig' import class_attr %}

{% set dataZDatabaze = ['prvni', 'druhy', 'treti', 'ctvrty', 'paty'] %}

<ul>
{% for item in dataZDatabaze %}
    <li{{ class_attr({'lichy': loop.index is odd, 'posledni': loop.last}) }}>{{ item }}</li>
{% endfor %}
</ul>

{# soubor macros.html.twig #}
{% macro class_attr(classes) %}
{% set writeTag = true in classes %}
{% set needSpace = false %}
{% if writeTag %} class="{% for class, enabled in classes %}{% if enabled %}{% if needSpace %} {% endif %}{% set needSpace = true %}{{ class }}{% endif %}{% endfor %}"{% endif %}
{% endmacro %}

{# což je trochu nepřehledné, kvůli tomu, aby nikde nestrašily mezery #}

{# tak to z didaktických důvodů odsadím ;) #}
{% macro class_attr(classes) %}
    {% set writeTag = true in classes %}
    {% set needSpace = false %}

    {% if writeTag %}
        class="
        {% for class, enabled in classes %}
            {% if enabled %}
                {% if needSpace %} {% endif %}
                {% set needSpace = true %}
                {{ class }}
            {% endif %}
        {% endfor %}
        "
    {% endif %}
{% endmacro %} 
Honza Marek

Barevně to vypadá líp: https://gist.github.com/993747

Xificurk

Takovýho psaní kvůli takové prkotině…

David Grudl

Asi víš, kterým směrem mířím… řeší loop.last i první bod zadání, tj. že neznáme počet položek, které ze zdroje dat vypadnou?

Honza Marek

Hm, tohoto bodu jsem si nevšiml. A aby fungoval loop.last, tak prý má být to iterované array nebo Countable.

Martin Hasoň

Tak jsem si ráno přečetl tuto diskusi a narazil na to, že mě David Grudl hledá a nakonec i prosí o radu (vytahování staré epizody o šablonách). A jak tento příběh vznikl ilustruje záznam z diskuse:

PetrP, Honza Marek:
Nezaváděl bych další magickou wtf syntaxi.

David Grudl (DG):
Zkuste si projít všechny šablonovací systémy na http://en.wikipedia.org/wiki/Template_engine_%28web%29 – to je bída, tam těžko hledat nějakou inspiraci. Ale jakmile jste leaderem, tak prostě vymýšlíte nová řešení.

Martin Hasoň (MH):
Příspěvek je smazán DG, ale byl v tomto duchu: Označit všechny šablonovací systémy za bídné je dost velká odvaha. Navíc je komické, že samozvaný leader není ani v tom seznamu uveden.

Následovala sprška potup od čestné gardy DG :), ale nakonec pár lidí došlo, k závěru, že například šablonovací systém Twig není vůbec špatně napsaný. DG poté ujely nervy, napsal srdceryvný píspěvek a polovinu diskuze smazal.

No a jak by se řešil požadovaný příklad ve Twigu? Tak předně si musím být vědom, jaká je filosofie používaného nástroje. Nelze vyžadovat po Twigu, aby se choval jako Latte, stejně jako nelze po Doctrine vyžadovat chování vlastní NotORM. Protože každá knihovna dává důraz na něco jiného.

<ul>
{% for item in data %}
    <li class="{{[loop.odd ? 'lichy' : 'sudy', loop.last ? 'posledni' : '' ]|join(' ')}}">{{item}}</li>
{% endfor %}
</ul>

No a pokud by někdo opravdu chtěl chování, které má přesně Latte, stačí zaregistrovat do Twigu novou funkci (přes makro bych to nedělal).

PS. Ačkoliv to DG tuším nepřiznal, tak se nakonec od jiných šablonovacíh systémů inspiroval (to je na tom ještě více komičtější – samozvaný leader přejímá věci z ‚bídných‘ systémů :)) Inspirace spočívala například v implementaci [] pro zadávání pole.

David Grudl

Děkuji moc za kód, jeho srozumitelnost má velkou vypovídací hodnotu.

Že jsem takový puntičkář, bude splněn i bod č. 1 zadání, tj. že bude fungovat loop.last i tehdy, když počet položek ve zdroji dat nelze spočítat? Tedy s jakýmkoliv výpisem z databáze přes PDO? A bod č. 4, tj. že v kódu nebudou vznikat ošklivé <li class=““>?

Honza

Dobrý den vespolek,
že jsem tak smělý, docela pěkná soutěž, šlo by takových příkladů umístit někde vícero? Včetně reakcí, a třeba i v různých programovacch jazycích, to by mě docela zajímalo…

Segeda

A to já se zase na administraci v projektu těším. (Jestli bude něco jako v Djangu nebo jako Adminer)

Jiří Kuneš

David to vystihl. Nette je Good Enough. Kdo chce ovšem být na špičce, tomu to nemůže stačit.

Srigi

David odpovedal, ze PHP je good enought. O Nette to tam netvrdi.

Filip Procházka

Tady si zase někdo přečetl 3 věty a šel psát komentář…

Petr

Rozhodne PHP kodovani je daleko zadanejsi nez – PRAVY PROGRAMATORI.

Petr Janda, @petrjanda (at) twitter

PHP je pro spoustu lidi vubec prvni jazyk s kterym zacnou pracovat, takze je jasne, ze na internetu je k videni spousta spatneho kodu. Zaroven jak bylo receno, v kazdem jazyce se da psat dobre/spatne, stejne jako v PHP.

Jak jsou na tom soucasne PHP frameworky jako Nette s testovanim? Je mozne u nich videt podobne jednoduchou praci s testy jako napriklad u Rails? Bylo by super, kdyby se prave vsichni tito novi a mladi programatori naucili spravnym navykum a testovali svuj kod. Rekl bych ze celemu PHP ekosystemu by to velmi prospelo.

Jiří Knesl

Ahoj Petře. Pro PHP existuje docela dost nástrojů, port Cucumber (jmenuje se Behat), port RSpec (PHPSpec, ale ten se mi moc nelíbí), na TDD je PHPUnit, který je docela dobrý, existuje spojení do Capybary, na WebKitServer, na Selenia je tam taky adaptér.

Michal Augustýn

Díky Davide – už jsem si začínal myslet, že jsem jediný, komu přijde bezhlavé generování kódu jako hnus :-)

Mahrew

+1

Souhlas.

fanboy

Ovšem promyšlené generování kódu je už jiný level. V JavaScriptu na to už přišli.

ondrej

„Zároveň jsem ale pragmatik – třeba nový návrh formulářů v HTML5 je značně nedotažený a nechci stavět na něčem, co se mění pod rukama.“

toto ma pobavilo ;-)))
presne to isté sa dá povedať o nette, stále sa mení „pod rukama“ a preto je viac-menej nevhodné na ňom stavať niečo seriózne.

Tharos

Tak to je asi logický, že se vývojová verze mění pod rukama, že ano. :) Jestli chceš verzi Nette, která se nebude měnit pod rukama, použij stabilní release.

Filip Procházka

Což je samozřejmě problém vzhledem k současnému verzování. Ovšem není problém si stáhnout konkrétní verzi a postavit na ní systém.

Doufejme, všechny problémy, týkající se stavění na dev budou zítra smeteny ze stolu :)

Petr Praus

„Pod vlivem Rails a Djanga se i do PHP šíří generátory kódu, co ti ty části, které píšeš pořád dokola, vygenerují za tebe.“

Nevím jak v případě Rails, ale v Djangu jsem žádný generátor kódu opravdu nenašel ;-) Jediné co by se dalo považovat za generátor kódu je django-admin startapp, ale to v podstatě vytvoří jeden adresář a v něm tři prázdné soubory. Admin rozhraní Djanga žádný kód negeneruje, ale používá introspekci, která je v Pythonu obecně hodně silná a v Djangu se používá v místech kde by se jinak generátor kódu pravděpodobně použil.

Pepa

V rails generátory jsou. A není na tom <b>samozřejmě</b> vůbec nic špatnýho. Generátor je dobrý sluha ale špatný pán, jako skoro všechny nástroje.

V Rails jsou napsaný dostatečně dobře aby začátečníkům pomohly rychle dojít k něčemu funkčnímu (což má obrovskou motivační hodnotu), pokročilým pomáhají ušetřit práci, když pochopí různý možnosti co jim nabízejí.

Hezký přehled generátorů je tady http://railscasts.com/episodes/216-generators-in-rails-3

Ajax

jako samouk jsem dal nette dva mesice a proste jsem to nedal. Za 2 mesice bych ten web mel hotovy bez FW a takhle nemam nic. Mozna je chyba ve me, ale ja to proste nedal. :( Dle meho anzoru by chtelo udelat stop feature stav a soustredit se na dokumentaci (+ debug) aspon rok…

Jiří Kuneš

A co takhle zkusit nějaký jiný framework? Anebo rovnou i jiný jazyk? :)

Anebo můžeš čekat na bájnou verzi 2.0 stejně jako jiní čekali na bájnou verzi 1.0

Tharos

S těmi verzemi budeš údajně už zítra „odargumentován“ :).

verajo

Nette 2.0 je preci alias pro bajnou verzi 1.0. Nevim proc se tak neoznacila. Asi proto, ze se vyviji uz 7 let. :-) Kazdopadne oznaceni verze je vzdycky na autorovi a kazdy k tomu pristupuje jinak. (Me se treba libi pristup Ubuntu).

Pepa

tak zkus rails, případně django. dokumentace tolik že nevíš co dřív :-) začít můžeš třeba tady http://guides.rubyonrails.cz/

Sebastian

Prostě jsou věci, které chtějí čas u nette je to stejný, ale jak v něm napíšeš nějaký projekt.. Pak zkusíš další, ale s tím, že ses poučil ze svých chyb a pak si řekneš, že bylo by fajn si rozšířit obzory a začneš se koukat i jinde, věř mi, že pak nastane tolik „aha efektů“, že budeš jen žasnout…. :)

FAk

asi tak nějak, já ted zkoušim ASP.NET MVC 3 a mam tam takovýho aha, že bych to nejrači 100x za den otočil k Nette. Bohužel na MVC3 musím postavit diplomku, zatím je to celkem peklo.

ax

Nějakej příklad konkrétně? Zrovna si taky s asp.net mvc 3 hraju, a s nette mi přijde i dost podobnej. A nějaké extra problémy nezaznamenávám.

Talpa

Me se vzdy na Nette libila jedna hlavni vec, pokora… david si nehraje na vseznalka a jeho pristup, kdyz 50% lidi tape, tak jsem „blbej“ ja vystihuje vsechno. V soucasnosti mam respekt ze 3 programatoru, ktere jsem poznal osobne. David je jednim z nich. Diky Davide, Nette pouzivam a jsem pritom lemra lina, tak jsem se tam nasel, protoze parabola uceni je tam strasne prikra, zadne vopruzy s nestandardnim pojmenovanim a chovanim, proste je to inovatorske a zaroven to dodrzuje zazite programatorske techniky. Co si proboha vic prat?

Jiří Kuneš

LOL! David si nehraje na všeználka? Dovolte abych se zasmál.

To s tím „lidi to nechápu – blbej jsem já“ je jen póza. Doporučuji raději osobní setkání :)

Internet má jednu zvláštnost – i fotka roztaženého zadku si najde svoje fanoušky. A jak David správně říká, i kdyby mělo něco milion plus jedniček, tak to o kvalitě neříká vůbec nic!

Filip Procházka

A tvá zkušenost vyplývá z čeho? Znám Davida osobně a vím moc dobře, že když máš co říct, tak tě vyslechne a rád ti dá za pravdu, pokud ho přesvědčíš argumenty. Když nemáš pravdu vyvede tě z omylu. Co bývá občas problém tak upoutat jeho pozornost, ale kdyby po mě něco konstantně požadovalo několik stovek lidí, také bych jich hodně přehlédl.

Ale proč ti to vlastně píšu, když už první slovo „LOL“ smrdí haterem a trollem, takže další příspěvek bude nejspíš plný urážek a v takovém případě si vyhrazuji právo na něj nereagovat :)

plistiak

Mám tú česť, že som sa s Dávidom stretol osobne. Na školení Nette aj súkromne. Dovolím si povedať, že po niekoľko hodinovom rozhovore som schopný získať o človeku celkom pravdivý obraz. Dávid má iste zlé vlastnosti, tak ako každý z nás, ale nadutosť, nadradenosť, povýšenectvo a pod. k ním nepatria. Rád si dá poradiť a príjme aj kritiku.
Pravdupovediac obdivujem ho ani nie preto, že by bol geniálny programátor (vlastne ani on nemá rád ak to niekto o ňom hovorí), ale práve pre to, že napriek častému nepochopeniu a neoprávnenej kritike má stále chuť tvoriť Nette pre ľudí. A ešte k tomu zadarmo.

talpa

Znam ho osobne, nijak zvlast dobre tedy ne, ale 2x jsem ho videl na sobote.

Rozhodne i v konferencich a vsude ma silnou auru, prave protoze ma dost casto pravdu a svou pravdou si pak stoji. Kdyz ji nema prizna to, to je podstatne. Jestli tobe Jirko nesedne jako clovek, to mi je i celkem ukradeny. Mam podobne tvrdy buldoci styl a vim ze u vetsiny lidi to je pak problem.

Rozhodne je to rovnej clovek co je zaroven i soudnej. To se mi na nem libi

Hmmm

Ja som tiez ostal prekvapeny ked som si precital, ze David je pokorny… Lebo ani Jakub a ani David na mna neposobia dojmom pokornych ludi. A to ich poznam iba z fora a z diskusii… Ci uz ide o Nette alebo o Adminer, ani jeden na mna neposobi dojmom normalneho cloveka, ale skor som z nich mal pocit, ze sa hraju na polobohov.

Vojtěch Dobeš

Propána, rozhovor s vývojářem a v diskusi se řeší, jestli onen vývojař je nebo není pokorná povaha… kromě vyzdvižení nechutnosti podobných debat vůbec (1. příspěvek tohoto vlákna je OK :) ) mohu uvést, že jsem se zúčastnil dvoudenního školení Nette přímo s Davidem a byla to výborná zkušenost (žádné „tak vás naučím to moje božské Nette“ – tak si alespoň onen nepokorný přístup já představuju). A fóra… je možné třeba z Nette fóra dát nějaký odkaz s příkladem? Já mám dojem, že David s komunitou řeší tuny jednotlivostí, ze kterých se framework skládá, a to s velkou trpělivostí – já kdybych si piplal nějaký nástroj takhle pečlivě, asi bych podobnou trpělivost neměl. A to je podle mě pokora.

talpa

Vojto, to je presne o cem jsem psal. Oni furt resi neco uplne jineho, na co ja s prominutim dlabu. Takze kdyz rikam, ze David ma v sobe POKORU tak to myslim vazne. Nestoji na kravine jen kvuli tomu ze ji napsal sam. Jestli se panum nelibi jak s nimi jedna, to uz je uplne na jinou diskuzi a na uplne jiny platek:)

wikipedista

Scénář u diskuzí, které se nějak dotýkají Davida Grudla, je téměř stále stejný. Je to takový podivuhodný fenomén. Obdivovatel nejprve přiřadí Davidovi nějakou cnost. To samo sebou musí vyvolat polemiku. A když se ozvou hlasy, které řeknou, že s tím zbožštěním to není zas až tak košer, tak se do debaty přidají známé osobnosti, aby tyto hlasy umravnili (viz případ největšího pašíka na internetu).

Můj pohled na věc. Doceněnou vlastnost Davida Grudla by bylo vhodnější nazvat slovem ochota. Kritické hlasy na zmíněnou pokoru mají právo zaznít, protože pokora je velmi vysoce ceněnou ctností. Umravňování pouze kritických hlasů je neférové. Ne každá glorifikace je vždy nezávadná a ne každá kritika vždy špatná.

wikipedista

Ano, takové věty jsou problém. Odborně by se jim mohlo říkat známkovací věty. Známkování osoby na základě jejího projevu, lze považovat za komunikační chybu. Ale to neznamená, že se nemůže člověk k těmto projevův vyjádřit. Pro doplnění uvedu ukázky korektnějších reakcí:

„Věty, které napsal X.Y, neobsahují žádný náznak pokory.“ – bavíme se o větách, ne o člověku.

„Vtip na Twitteru o Aničce, který napsal David Grudl byl nechutný a stejně trapný, jako celá mediální masáž kolem unesení.“ – opět hodnotíme projev, ale ne člověka.

keff

Jeste trochu lepsit komunikacni schopnosti, a z ‚vtip byl‘ bude ‚vtip mi prisel‘:)

Me vtip pobavil, takze zjevne trapny a nechutny neni, to by se na tom museli shodnout uplne vsichni.

wikipedista

Omyl!

Správná komunikace nikomu nenařizuje, aby byl relativista. Správná komunikace je taková, která respektuje člověka, ale nemusí respektovat každý blábol. Když někdo například řekne, že vražda není zločin, tak reakce nemůže být, že podle mého názoru je vražda zločin. Ale musí být vražda je zločin. A proč není tato věta správná? Protože lidská společnost je řízena zákony. Ať už vládní legisativou a nebo tzv. přirozeným zákonem. A to je ten nástroj, který dovoluje zaujmout jasná stanoviska k problémům, a na který se odvolává při argumentaci. Zákony nestanovuje většina. Zákony dává ten, kdo má moc. Zákony se udělují, zákony se nevolí. Tak jako dítě si nevolí zákony, ale dostává je od rodičů.

David Grudl

Tak to se můžu přidat do debaty!

Ale vážně. Znám ve svém okolí, mezi stejně mladými lidmi, jen minimum těch, které bych označil za pokorné. Vzácná vlastnost, která nejspíš přichází až s životní zkušeností. Že ji nemám, mě řadí mezi většinu. Možná i pokora je jistým opakem mladické dravosti a na rovinu, to druhé se mi nyní hodí víc.

Že s tím „lidi to nechápu – blbej jsem já“ jsem jen posér? Budiž, vyvrátit to nelze, pro mě je cenné, že se z každého školení vracím se dvěma A4 poznámek, co udělat ve frameworku lépe :-)

Když tu už zaznělo jméno Jakuba Vrány – to je jeden z nejskromnějších/nej­nenáročnějších lidí co znám. Jenže v českých reáliích, kde skromnost = nemluvím o svých úspěších, vytváří u řady lidí právě opačný dojem. Proto soudím, že mu Amerika sedne.

wikipedista

Pár myšlenek:

Opakem pokory je pýcha, ne dravost. Opakem dravosti je tuším rozvážnost.

Když lidé nechápou nějakou věc, tak je dobré tu věc opravit. Vykonavateli opravy se však nepřisuzuje cnost pokora. Nelze personifikovat opravu. To by pak každý učitel byl pokorný.

Skromnost != nemluvím o svých úspěších. Tato nerovnost platí všude, ale ne všude platí, že jakýkoliv způsob prezentace úspěchů je skromný.

Články o NotORM od Jakuba Vrány na mě vůbec nepůsobily skromně. Celá jejich myšlenka sledovala nit – způsob zacházení s daty v NotORM je ten nejlepší a způsob práce s daty pomocí Doctrine je úplně mimo. To není skromnost. To nadzvedne ze židle každého.

A jak lze skromně prezentovat své úspěchy? Například větou: „Síla NotORM je v jeho práci s daty na úrovni tabulek. Při tomto pohledu na zpracování dat dosahuje NotORM daleko větší efektivity než Doctrine, která se však na tento druh práce s daty nespecializuje.“ – je tam zmíněn úspěch a přitom je to řečeno skromně.

David Grudl

> Články o NotORM od Jakuba Vrány na mě vůbec nepůsobily skromně.

To je polemika s kým prosím?

talpa

Vysvetli jim prosim te Davide, ze te nehodlam hodnotit jako cloveka (na to te fakt neznam a je to asi na nejakou filosofickou a psychologickou debatu na kterou nejsem ani fundovany :)))).

To kdyz mluvim o pokore mluvim o tvem pristupu ke kodu a obecne k frameworku. Pokud tuhle pokoru nikdo nevidi, tak je bridil. Samozrejme jsem zapomnel na pokoru ostatnich programatoru co Nette delaji, za to se omlouvam.

Ale i tak si myslim a trvam na tom ze programator ma byt pokorny:) a to nemyslim ve vztahu k lidem, jak uz jsem rekl, ale ke vztahu ciste ke kodu. Pac kdyz neni pokora, vznika desnej paskvil:)

Chapete to uz vsichni?:)

Jiří Kosek

Sice je pravda, že Jakub to srovnání s Doctrine možná až zbytečně moc hrotil, ale proč by měl při srovnávání svého produktu s konkurencí psát zcela neutrálně jak nějaký článek do encyklopedie (že by profesionální deformace dle nicku)? Podobná porovnání, zvlášť pokud je dělá přímo jedna ze zainteresovaných stran, nikdy nejsou objektivní a nikdo soudný to od nich ani nečeká.

Tip pro redakci — nešlo by si koupit placený přístup je Zdrojáku, kde by nebyly vidět diskuse? Reklamy se dají odfiltrovat snadno, ale filtrovat diskuse by mnohdy bylo přínosnější. ;-)

wikipedista

Prezentace výsledků by měl být vždy úkon objektivní (do jisté míry neutrální). Že se od prezentace výsledků neočekává objektivita, ale jakýsi kus teatrálního sebeprosazení, pak automaticky nemůže být tato prezentace skromná. Použití slova soudnost, k označení akceptace ne zcela objektivní prezentace výsledků, je nepřípustné (je to stejně absurdní, jako výrok, že nikdo soudný nemůže očekávat, že se dodrží smlouva). O to víc zarážející je, že takovou základní věc, jakou je objektivita prezentace výsledků, svým výrokem podkopává člověk, který přednáší na VŠE.

Krom toho věta, kterou jsem napsal v předchozím příspěvku, jako ukázku skromné prezentace úspěchu, může někomu přpadat neutrální. Tento pocit vzniká tím, že se nesnaží vyvolávat emoce. Je to jasné. Pokud má totiž posluchač být o něčem informován, tak se musí posílit jeho rozum a ne potlačovat rozum, na úkor emocí.

FAk

Radši si přečtěte tady dole „jak má sedět správná podprsenka“ a „co dělat, když vaše přítelkyně zapáchá“ a přestaňte tu mlít s*** mimo obsah článku, včetně mě..

Jakub Vrána

Na „obhajobu“ Jirky Koska uvedu, že články jsou zařazeny v rubrice Subjektivně (i když by to podle mě nebylo potřeba).

Jan Tichý

Na obhajobu Arthura Denta pod jehož článkem o pokorném Davidu Grudlovi v diskuzi Jakub Vrána obhajuje Jirku Koska obhajujícího Jakuba Vránu, bych rád uvedl, že ten fotbal přece nedělá pro sebe…

Hmmm

Pretoze ak je promo clanok pisany subjektivne a konkurencii nedava moznost na ferove porovnanie, tak to je z neho citit a z promo clanku je antipromo.

Jakub Vrána

Konkurence měla možnost se k článku vyjádřit ještě před jeho vydáním: Doctrine Lead Developer explains my WTFs, part 2. Odkaz na toto vyjádření byl i tady na Zdrojáku.

Když je v článku uvedeno 13 konkrétních bodů, které se autorovi nelíbí, tak rozumný čtenář udělá to, že si u každého z těch 13 bodů řekne, jestli je pro něj důležitý nebo ne a na základě toho se rozhodne.

Žádná objektivita v takovém případě ani neexistuje. Protože i když bych napsal: „knihovna X je špatná, protože s ní musíte napsat spoustu zbytečného kódu, je šíleně pomalá a poškozuje vaše data“, tak to pořád pro někoho nemusí nic znamenat, protože pro něj osobně je důležitější, že knihovna používá čtyři mezery místo tabulátorů.

Jakub Vrána

Nejspíš jde o článek Doctrine 2 a NotORM – videotutoriál a jeho pokračování. Bylo by možné odcitovat nějakou neskromnou pasáž?

I když jednu knihovnu pochválím a druhou zkritizuji (na základě dlouhého seznamu konkrétních argumentů), tak to podle mě ještě pořád není nic neskromného. Já nikde neříkám „podívejte, jak jsem to pěkně udělal“, říkám prostě jen „tahle knihovna to má tak a tak a na tom je užitečné to a to“. Že jsem autorem knihovny je v této argumentaci zcela nepodstatné.

Pepa

Vyznění celýho čtvýho článku a seriálu je „podívejte jak je Doctrine strašně blbě udělaná knihovna (a jak je ta moje úžasná)“. Je to cítit z každé věty a z celkové struktury těch článků.

Takže souhlasím s kolegou, chybí mi tam trošku skromnosti, pokory a respektu vůči práci jiných, jak u Tebe, tak částečně i u Davida. Přesně to, co pak tvrdě kritizujete a potíráte v jakékoliv diskusi.

Jakub Vrána

„Vyznění“ nebo „působení“ – to je subjektivní dojem čtenáře. Já jsem žádal o konkrétní citaci. Když už tady wikipedista uvedl příklad skromné věty, tak bych chtěl vidět příklad nějaké neskromné, kterou jsem v těch článcích použil.

A vědět to chci samozřejmě proto, abych si na to příště dal pozor.

Pepa

„…některým informacím se mi nechtělo uvěřit“,
celá ta pasáž „Co se mi na Doctrine 2 nelíbí“,
„i když se knihovna tváří jako vysokoúrovňová a tudíž by měla být robustní, tak skutečné chování je přesně opačné“,
„Za ještě horší ale považuji to…“,
atd.

Obecně se mi nelíbí to schéma, že nejdřív shodíš něčí projekt vypíchnutím jeho chyb a pomlčením o většině benefitů, a následně si přihřeješ polívčičku s vlastním projektem. Nejde o to, čí projekt je „lepší“ ale o ten styl komunikace. Já vím že se to blbě posuzuje a je to subjektivní, ale tohle už mi přišlo hodně za hranou.

Filip Procházka

Obecně se mi nelíbí, že se někomu nelíbí, že si dělá self-promo.

Proč by se Jakub, nebo David nemohli vychloubat? Mají přece čím. Až napíšeš knihovnu, kterou budou používat stovky a tisíce uživatelů, taky budeš psát na zdroják články o tom, jak jsi lepší než tohle a tamto. Skromnost není na místě. A věcnost Jakubovi nikdy nechyběla, argumentů má vždycky dost.

Já třeba Doctrine2 používám a jsem rád, že Jakub na ty nedostatky upozornil.

Pepa

Ale ať si dělá selfpromo vrchem spodem, to je naprosto v pořádku. Ale bez toho prvního kroku naházet špínu na něco jinýho a na tom se přiživit.

Hmmm

Nejde len o komentare a prispevky.

Dost hovoria aj samotne clanky, ale v tomto pripade skor o Jakubovi. Pamatam si na jeho propagacny clanok o Adminerovi, kde velmi arogantnym (ba dokonca mozno az klamlivym sposobom) zhadzoval pod zem phpMyAdmin. Neviem ci sa rovno nesnazil tym clankom vsetkych jeho uzivatelov previest k Adminerovi. Len tak na okraj, Adminera som si potom aj sam vyskusal, rovno tyzden som s nim pracoval. A po tom tyzdni som sa vratil spat k phpMyAdminovi. Klamliva reklama, z mojho pohladu.

Alebo velmi usmevne bolo ako minule testoval rychlost frameworkov a Nette skoncilo ako uplne posledne. Samozrejme okamzite padla vina na nieco ine, pretoze „Nette ma povest jedneho z najrychlejsich frameworkov“, takze urcite nie je chyba tam.

A milo vyznieva aj David, ktory sa teraz nevie prestat na twitteri smiat z tejto diskusie ked tvrdi, ze odisli Symfonisti (Nette je spatne, bo misto mezer pouziva tabulatory (myslim, ze pointa tej diskusie bola niekde uplne inde, pozn. moja)) a prisli psychologovia.

Takze cim maju tito pani zniet na internete skromne? :)

Jakub Vrána

Jde pravděpodobně o článek phpMyAdmin VS Adminer. Opět bych prosil o citaci nějaké arogance nebo dokonce lži.

Podotýkám, že mě v následné diskusi čtenáři upozornili na existenci jedné funkce, jejíž absenci jsem phpMyAdminu vyčetl, protože je tak dovedně schovaná, že jsem ji prostě neobjevil. Za tuto chybu jsem se v diskusi omluvil.

Co se návratu k phpMyAdminu týče, tak by mě opravdu zajímaly důvody. V populaci je pár procent velmi konzervativních lidi (nebo takových, kteří se nejsou schopni naučit nové věci), potom taky pár procent masochistů. Někdo je taky placen za čas nehledě na odvedenou práci, takže jim vyhovují pomalé nástroje nebo takové, které vyžadují napsání spousty zbytečného kódu. Pokud do žádné z těchto skupin nepatříte a k návratu vás přiměly nějaké konkrétní důvody, tak bych je opravdu rád slyšel, protože by to mohl být námět na vylepšení Admineru.

Pepa

tak tenhle komentář je dokonalou ukázkou té arogance:

phpMyAdmin je
– pro velmi konzervativní
– pro neschopné učit se
– pro masochisty
– velmi pomalý
– blbě napsaný

Jakub Vrána

Chápu, že psaný text je někdy těžké pochopit, ale nic takového z mého příspěvku neplyne. Velmi konzervativní lidé nebo neschopní učení mají obecný problém přejít ze zažitého na nové. Když by se nejprve naučili Adminer, tak by se jim také na cokoliv jiného přecházelo obtížně. Skupina masochistů by mě zajímala, když by používala Adminer – pokud používají něco jiného, tak mě to nezajímá. Velmi pomalý phpMyAdmin skutečně je – někomu to ale může vyhovovat třeba proto, že snadno pozná, že se něco děje (nebo je placen za čas strávený u počítače).

Hlavní pointa mého příspěvku je ale jinde. Všechny tyto skupiny nepochybně phpMyAdmin používají (stejně jako možná používají i Adminer). Napsal jsem, že pokud Hmmm do jedné z těchto skupin patří, tak mě to dále nezajímá. Zajímalo by mě to v případě, že by do žádné z těchto skupin nepatřil.

Pepa

A zase. To že začínáš útokem „chápu, že psaný text je někdy těžké pochopit…“ Možná jsi vynikající programátor (nedokážu posoudit, protože tvou práci neznám), ale bohužel tak trošku sociopat.

Spidy

phpMyAdmin je – pro neschopné učit se
Já jsem se naopak naučil používat Adminer mnohem rychleji než phpMyAdmin :o)

Hmmm

Po precitani posledneho odstavca nemam vobec zaujem ozrejmovat nejake dovody mojho navratu k phpMyAdminu. Uz len z toho dovodu, ze taketo definovanie populacie je samoucelne a zavana obrovskou davkou bohorovnosti.

Ale predsa, v skratke, mne phpMyAdmin vyhovuje podstatne viac nez Adminer uz len kvoli tomu, ze v nom viem urobit vsetko co potrebujem par kliknutiami a mam v nom jasny prehlad o tom co potrebujem. A vobec nie je pomaly, na to neviem ako ste prisli. A okrem toho je nasadzovany u zakaznikov. O komplikaciu menej.

Ale jedno klamstvo z clanku nadovsetko:
„phpMyAdmin používá pro zobrazení stránek rámy a samostatná okna. To uživateli znemožňuje ukládat si jednotlivé stránky do oblíbených položek a otvírat je do samostatných panelů“
Ste normalny? Pracovali ste vobec niekedy v phpMyAdminovi? Otvorit si tabulku v novom paneli alebo okne sa da uplne jednoducho.

„Adminer používá příkaz INSERT s klauzulí ON DUPLICATE KEY UPDATE, která jako jediná provede import správně.“
Skutocne? Povedal kto? Jakub Vrana? :)

„phpMyAdmin dovoluje vytvořit pohled z libovolného SQL příkazu (pohled se ale potom automaticky nezobrazí v seznamu tabulek)“
Dalsie klamstvo.

„Adminer dovoluje tabulku třídit podle více sloupců (např. nejdřív podle data a potom podle času), phpMyAdmin obdobnou funkci nabízí jen komplexním databázovým dotazem.“
Zase klamstvo… phpMyAdmin ma na to rozhranie.

„Při vytvoření tabulky v phpMyAdminu je nutné předem stanovit počet sloupců. Pokud si teprve při jejím zadávání uvědomíme, že potřebujeme ještě nějaké sloupce navíc, je nutné odeslat formulář. „
To je snad logicke, nie? Ked vytvaram databazu a v nej tabulky, tam ma jasnu predstavu ako to ma vyzerat. Ci snad ideme vychovavat programatorov k prasacinam? Vy si hovorite vyvojar?

A dalej sa mi uz ani nepokracujem, nechce sa mi dalej stracat cas…

Filip Procházka

Proč se pod svůj lživý příspěvek alespoň nepodepíšeš? Neumíš si stát za svým názorem? Ale je pravda, že kdybych obhajoval vlastní hloupost, taky bych se asi nepodepsal…

Myslím si, že by nebylo od věci, kdyby se to tu trochu pročistilo od příspěvků, které nesouvisí s tématem. Přece jenom phpMyAdmin, Doctrine ani Jakubova povaha s představením Nette2 moc společného nemají.

Jakub Vrána

Věta „viem urobit vsetko co potrebujem par kliknutiami a mam v nom jasny prehlad o tom co potrebujem“ mi úplně stačí. Jde podle mě o jasný projev konzervativního uživatele – na tom samozřejmě není nic špatného, já jsem třeba u desktopových aplikací také velmi konzervativní.

Jak se v Admineru uloží libovolná stránka do záložek? Pomocí běžného příkazu prohlížeče. Když se pokusím totéž udělat v phpMyAdminu, uloží se jen stránka s definicí rámů. Musím to udělat složitěji – najít ikonu na spodku každé stránky (vědět o její existenci) a do záložek si uložit tu.

Jak otevřu okno do nového panelu v Admineru? Běžným příkazem prohlížeče (např. prostředním tlačítkem myši). Když se pokusím totéž udělat v phpMyAdminu, dostanu stránku bez navigace. Když ji chci s navigací, musím to opět udělat složitěji – buď stránku otevřít normálně a potom použít malou ikonu (čímž přijdu o původní obsah okna) nebo stránku otevřít do nového panelu a použít malou ikonu (která odkaz otevře do nového okna, takže mi zbude jeden panel navíc). Ať tak či tak, stránka se musí načíst dvakrát.

V diskusi jsem se přiznal, že jsem o existenci malé ikony nevěděl, takže jsem to v článku nezohlednil a omluvil jsem se za to. Arogantní reakce by podle mě vypadala jinak. Nicméně i když bych o tom věděl, tak bych tyto dvě funkce stejně v článku uvedl, protože se v phpMyAdminu dělají podstatně krkolomněji.

phpMyAdmin pro import nabízí:

  • INSERT – skončí chybou při existenci řádku
  • UPDATE – nevloží nové řádky
  • REPLACE – může smazat víc řádků než kolik jich vloží

Klauzule ON DUPLICATE KEY UPDATE skutečně jako jediná udělá to, co je ve většině případů potřeba – vloží nové řádky a aktualizuje stávající.

Vytvoření pohledu nezpůsobí obnovení rámu se seznamem tabulek. Tuto chybu obsahuje i aktuální verze (phpMyAdmin 3.4.1). Opravdu by bylo lepší se neohánět pojmy jako lež před tím, než si člověk zjistí fakta.

Třídění – to rozhraní se jmenuje „Dotaz“, je k dispozici na úrovní databáze a je poměrně komplexní. Takže jeho pojmenování „komplexní databázový dotaz“ je myslím zcela na místě.

Počet sloupců – Adminer se dá použít i pro návrh databáze, kdy při stanovování toho, jaké tabulka bude mít sloupce, tyto sloupce rovnou vytvářím. phpMyAdmin se k tomuto účelu dá použít jen velmi krkolomně – návrh je lepší mít dopředu (nakreslený třeba tužkou na papír nebo v nějakém specializovaném návrháři), kdy je počet sloupců už dopředu znám.

Mrzí mě, že jsem se nedozvěděl o jediném racionálním argumentu, proč používat phpMyAdmin.

Hmmm

Vy ste zrejme skutocne nikdy naozaj pracovne nepouzivali phpMyAdmina. Inak by ste vedeli, ze to co ste vypisali NIE JE nevyhoda alebo zdrzanie pri praci. Je to len Vas alibizmus.

Btw, snad si nemyslite, ze niekomu nahovorite, ze ste SKUTOCNE hladali dovod preco pouzivat phpMyAdmin. Kazdemu sudnemu cloveku je uz dopredu jasne, ze VY nikdy ziaden racionalny dovod na to neuznate. Nikdy.

Jakub Vrána

phpMyAdmin jsem pracovně i nepracovně používal několik let. A právě nespokojenost s ním na mnoha různých úrovních (uživatelské rozhraní, funkční výbava, výkonnost, bezpečnost) mě vedla k vytvoření Admineru.

Nevím přesně, který ze zde popsaných neduhů nepovažujete za nevýhodu, ale pro mě osobně všechno z toho byly mimořádně otravné věci. A připomínám, že jde jen o zlomek toho, s čím jsem nebyl spokojen.

Důvody pro používání phpMyAdminu hledám neustále. Nicméně pokud by to pro mě osobně (nebo pro dostatečně přesvědčivé uživatele) byly užitečné věci, tak se nad nimi zamyslím a jejich pokud možno vylepšenou variantu zapracuji do Admineru.

Pro mě je skutečně velmi užitečné vědět, co se uživatelům v phpMyAdminu dělá lépe nebo co jim vadí na Admineru. Ale od vás se to bohužel asi nedozvím.

Hmmm

To celkom urcite nie.

Jakub Vrána

Ještě k té rychlosti – to se dá prostě změřit. Nebo si prostě jen chvíli klikejte v obou nástrojích – je to patrné na první pohled. Ten rozdíl je subjektivně ještě mnohem patrnější než uváděných 28 % a 56 %. U aktuálních verzí bude rozdíl podle mě ještě větší. U dlouhotrvajících operací je rozdíl řádový – zatímco Adminer základní data zobrazí hned a pomalá data stahuje asynchronně, tak phpMyAdmin na všechno čeká (navíc pokud bych si chtěl phpMyAdmin zároveň otevřít v jiném panelu, tak ten musí na dokončení pomalé operace také počkat).

gawan

> Mrzí mě, že jsem se nedozvěděl o jediném racionálním argumentu, proč používat phpMyAdmin.

Ak môžem. Osobne používam Adminer a prešiel som na neho z PMA okamžite bez najmenších problémov a PMA už nemám ani nainštalovaný. Ale predsa len PMA má jednu dôležitú vlastnosť, ktorú v Admineri nie je. Problém je, že keď mám DB s viac ako 100 tabuľkami a pracujem s tabuľkami z druhej polovice, napr: „user_*“ potom vždy, keď sa chcem presunúť na dolné tabuľky, musí si to „odkolečkovať“ mišou. Keďže PMA pracovalo s FRAMEmami, tak zoznam tabuliek vždy zostal na tom mieste kde som to potreboval. V admineri, keď pracujem s viacerými tabuľkami v dolnej časti, je to otravné stále sa presúvať dole.

Neviem, či existuje nejaký spôsob ako by sa to dalo vyriešiť, keďže Adminer nepoužíva framy. Možno cez ajax alebo css by to nejako šlo.

V každom prípade Adminer mi prináša toľko výhod, že toto nie je pre mňa až také podstatné, aby som sa vrátil v PMA. Píšem to len pre Jakuba ako tip na vylepšenie.

Inak zúčastnil som sa asi troch školení s Jakubom a môžem povedať, že okrem toho, že som sa veľa naučil, za tie tri dni som nespozoroval ani najmenší náznak povýšenectva alebo píchy alebo o čo to tu píšete.

Vždy som si myslel, že programátori sú ľudia, ktorí dokážu logicky, čisto myslieť, ale teraz vidím, že som sa asi mýlil. Keď niekto používa vecné argumenty, ktoré sa tu niektorím diskutujúcim nepáčia, hneď sa im do myslenia primiešajú pocity a city a začínajú sa správať ako ženy.

Jakub Vrána

Díky za tip. Nedávno jsem na základě podnětu uživatele připravil plugin tables-filter, který dokáže filtrovat seznam tabulek v navigaci. Tento filtr sice nepřežije obnovení stránky, to by ale v moderních prohlížečích (Firefox 4, Chrome) nemuselo vadit, protože se většina operací vyřizuje AJAXem.

Pak by se to taky dalo vyřešit uživatelským stylem: #tables { max-height: 30em; overflow: auto; } (uložit do souboru adminer.css). To bude fungovat za stejných podmínek.

Ondřej Mirtes

Vy nechápete potřebu konkurence. Osočujete tu Jakuba, že vytvořil nový nástroj pro správu databáze, který se poučil z chyb a nedostatků phpMyAdmina a dává uživatelům možnost volby – zůstat u phpMyAdmina, se kterým umí pracovat, i když se tam některé úkony dělají krkolomněji a něco neumí vůbec, anebo vyzkoušet Adminera, který je zabalený v jednom souboru a má promyšlenější uživatelské rozhraní.

Moje zkušenost je taková, že když posadíte dlouholetého uživatele phpMyAdmina k Admineru, je nadšený z té jednoduchosti a přívětivosti.

Více nástrojů trhu jen prospěje a nikdo vás nenutí používat něco nového a lepšího.

Hmmm

Prosim? Kde ho osocujem z toho, ze vytvoril novy nastroj na spravu databaz? Kde?

Prosim skopirovat prislusny odstavec alebo vetu.

Jakub Vrána

Ještě k té „nepomalosti“ – mně rozdíl 143 % přijde docela zásadní.

Hmmm

http://zdrojak.root.cz/clanky/david-grudl-marketing-nette-delaji-spokojeni-uzivatele/nazory/17481/

Celkom pekny prispevok do tejto diskusie. Clovek tomu moze verit, ale aj nemusi.
Ale ja tomu aj verim, pretoze podobne situacie som uz zazil.

David Grudl

Věř tomu, je to přesně jak píše. Martin Hasoň chodí provokovat na Nette fórum a vysmívat se nám, že jsme hloupí. Chtěl jsem tedy po něm kód, jak stejné zadání vyřeší v jím prosazovaném systému Twig, ale ukázkou nikoho nepřesvědčil, nehledě na to, že zadání splnil jen z 50 %. Stejně jako v tebou odkazovaném příspěvku. Přesto dál rušil, ponižoval, lhal, tak jsem jej smazal. Což dělám velmi zřídka. Ale co si počít, když někdo takto cíleně nabourává vlákno, kde se řešila poměrně důležitá věc?

Timy _

Martin, Martin, … Není to náhodou ten Martin? :-)

Martin Hasoň

Provokoval, vysmíval, rušil, ponižoval, lhal a ještě splnil zadání Davida Grudla jen z 50%!

Jsem rád, že David Grudl konečně napsal text, který celou debatu o jeho zmíněné pokoře vysvětluje a navíc ukazuje pravou podstatu jeho osobnosti. Uvedená tvrzení o mé osobě jsou prachsprosté pomluvy.

David Grudl

Přesně tak.

Velmi rád bych se bavil věcně, „ukázal si kódy“, dal jsem tu proto zadání triviálního úkolu pro šablonovací systém a ukázal jeho řešení v Latte. Ty jsi ho vyřešil z 50 %, budu rád, když řešení dotáhneš do konce. Ale protože to nejspíš nejde a protože je očividné, jak krkolomné řešení v Twigu je, tak se alespoň oháníš slovy jako „samozvaný leader“, „ujely mu nervy“, „vykrádá jiné systémy“.

Přitom si myslím, že nejsi hlupák, o to víc mě zaráží, že za žádných okolností nepřijmeš fakt, že v tomhle je Latte prostě lepší. A pokud ho snad přijmeš, jak vysvětlíš své počínání na fóru Nette, kde mě odrazuješ od vývoje, zesměšňuješ atd? To je nějaký komplex?

Martin Hasoň

Pane Grudle, nevím, zda mám výrok „Přesně tak“ chápat jako omluvu za Vámi napsané pomluvy, ale berme to, že ano. Nad větou „přitom si myslím, že nejsi hlupák“ se raději nebudu moc pozastavovat. Musím brát na zřetel, že to, na co upozorňoval uživatel wikipedista, není mnoha lidem zřejmé.

Předně Vás nikdo záměrně nezesměšňuje a neodrazuje od vývoje, ale pouze se pozastavuje nad Vašimi výroky.

Za leadera jste se označil sám, tudiž jste samozvaný leader. Váš výrok:

Zkuste si projít všechny šablonovací systémy na http://en.wikipedia.org/wiki/Template_engine_%28web%29 – to je bída, tam těžko hledat nějakou inspiraci. Ale jakmile jste leaderem, tak prostě vymýšlíte nová řešení.

To, že Vás debata o šablonovacích systémech vykolejila svědčil příspěvek na Nette fóru, který jste však smazal.

O vykrádání kódu jsem nikdy nehovořil. Psal jsem o možnosti využívat i jiné knihovny a nepsat vše znovu. Pověstné znovuvynalézání kola.

Samozřejmě, že Latte má přichystánu speciální metodu n:class, kterou Twig nemá. Nikdy jsem netvrdil opak. Ale to neznamená, že je Latte lepší nebo, že je Twig horší (‚bídný‘). V té době Latte nemělo například zkrácený zápis pro pole []. Ve smazané diskuzi došlo několik lidí k názoru, že je Twig lépe napsán a já jen dodal, že je to i díky tomu, že je kopií šablonovacího systému Jinja, který je napsaný v pythonu.

Řešení nemusím dotahovat do konce, protože prostě těch zbývajících 50% nepotřebuji. Na fóru nikoho nepřesvědčuji, to snad ani v těch ~10-ti informačních příspěvcích, co tam jsou ode mne, ani nejde.

David Grudl

Omlouvám se, že se dostávám k odpovědi tak pozdě, ale v žádném případě se nejednalo o omluvu, chraň bůh! Překvapilo mě, že tě takový výklad vůbec napadl, proto raději postuluji, že pokud neuvedu výslovně „omlouvám se“ (viz tento komentář), nejde o omluvu.

Jinak se vcelku shodneme. Šablonovací systémy na zmíněné stránce jsou, pokud jde o inovativnost, vesměs nic moc, třeba v porovnání s Latte.

verajo

V uvodu se priznam, ze nejsem nejaky Latte master, ale zalibila by se mi moznost psat neco jako tohle:

{foreachelse $a as $item}
{$item}
{else}
"empty"
{/foreachelse}

misto :

{if $a}
{foreach $a as $item}
{$item}
{/foreach}
{else}
"empty"
{/if}

Jestli neco takoveho uz v Latte je, tak dekuju za upozorneni. Anebo jestli Vam to prijde jako nesmysl, tak jsem zvedavy na nejaky argument.
Martin

v6ak

O podobné syntaxi se již diskutovalo a bylo to zavrženo jako příliš WTF, pokud se nemýlím. Ale je pravda, že tato syntaxe by mohla být lepší. Původní návrh vypadal, tuším, zhruba takto:

{foreach $a as $item}
{$item}
{/foreach}
{else}
"empty"
{/else}
Petrr

Co treba nastavit vychozi $a = array();
a v sablone pak:

{foreach $a as $item}
{$item}
{/foreach}
{if !$a}
"empty"
{/if}

David Grudl

Lze použít {if !$iterations}

verajo


{if !iterations}

To je docela fér (resp. elegantní). Tesim se na tu dokumentaci :-).
Diky

paranoiq

pokud jde o zadání – byla hledána taková syntaxe, která by splnila každodenní požadavky webového kodéra a zároveň byla dostatečně jednoduchá. tomu prostě twig nevyhověl

pokud jde o pokoru – pokud by jste si všiml nadpisu vlákna či dokonce fóra, jednalo se o vývoj Nette a jeho šablonovacího systému. pokorný člověk nenarušuje debaty o věcech které nepoužívá a nechce používat a nenutí ostatním za každou cenu své nevyhovující řešení

dané vlákno jsem před smazáním také četl a mohu potvrdit, že o pomluvy nejde. ostatně smazáním vašeho asciartu ve twigu diskuze k újmě nedošla

Martin Hasoň

Milý paranoiq,
chtěl jsem Vám nejprve oponovat a ukázat jiný pohled na věc. Ale tímto krokem bych bohužel nejspíš porušil Názorový kodex, protože bych mohl být nařčen z toho, že jsem nesnášenlivý vůči Vašemu náboženství. Respektuji Vaši víru, ale naprosto nesouhlasím s jejími projevy – pomluvy mé osoby.

martin

hehe, takto nejak si predstavujem prispevok cloveka, ktoremu dojdu argumenty…

lolak

Nette nepouzivam cele, ale za formulare jsem Davidovi neskutecne vdecny.

„Frameworku“ :-) jsem si za ta leta pro svoji potrebu par napsal, ale na „otravne“ formulare jsem nikdy nemel cas ani chut ;-) Od te doby nevyuzivam (a nepotrebuji) na generovani a validaci fromularu nic jineho. Takze diky!

TrSek

ale sklamal ma ako clovek. Myslim ten jeho nechutny vtip o Anicke na Twitteri.

Filip Procházka

Nechceš jít radši založit nějakou stránku kde ho budeš pomlouvat? Tohle do diskuze o frameworku moc nepatří, nebo se pletu?

Dragonn

Davidovy tweety nečtu, ale jestli jde o Aničku, kterou půl roku omýlali na Nově, tak tu jsem taky neměl rád. Při zmínkách o ní jsem byl ochoten začít přepínat televizi, protože mě na tom mrzelo a štvalo to, že podobných případů byla spousta ale nikdo o tom nikde nepromluvil více jak jednou nebo dvakrát, ale když jde o peníze, tak klidně 6x denně 7 dní v týdnu…

DM

Davidův vtip byl sice dost černej, ale byl to jen vtip, na rozdíl od myšlenkového průjmu, který se strhl v následující debatě. David by určitě tímto způsobem nešel kondolovat Aniččiným rodičům.
A Anička není ta která by mohla za to, že nás média neustále masírovala tím, co se stalo. Je vcelku nepodstatné, jak moc se o tom mluví nebo nemluví, prostě to je natolik hrozný, že si to většina lidí neumí představit. Tak by se k tomu neměli raději vůbec vyjadřovat, pokud nechtějí projevit lítost.

blizz

ja by som sa prihováral za viac takých vtipov :D

blizz

TrSek nedostatok zmyslu pre humor je prejavom nízkej inteligencie, podľa mňa ten vtip je dobrý. btw najlepšia reklama je negatívna reklama takže tým že sa na niekom pohoršuješ, mu vpodtate robíš reklamu. a okrem toho david si môže na svojom twiteri písať čo chce keď sa ti nepáči tak to nečítaj.

Jaromír

Díky za Nette. Jsem opravdu rád, že jsem Nette objevil – vyřešilo se tím mnoho potíží, které jsem do té doby s PHP zakoušel.

Důležité se mi zdá to, že nemusíte být profesionál, který dělá na zakázku 5 projektů měsíčně. Díky relativní jednoduchosti a pochopitelnosti vám může pomoct i v případě, že potřebujete napsat jen sem tam něco malého (nebo i velkého, ale sem tam).

A nemusíte vlastně být ani příliš dobrý programátor. Nette stojí mezi vámi a všemi těmi složitými objektovými úžasnostmi. Mnoho věcí vám pohlídá, vzájemnou závislost souborů (require) neřešíte, na to jak bude vypadat URI nemyslíte, šablony používáte jaksi samosebou, chyby celkem blbovzdorně vypíše, atd… Ne, neříkejte, že to znamená, že Nette je pro bastliče, co jenom upravují hotové příklady. To by znamenalo, že o tom nic nevíte. Znamená to, že je prostě pro každého: jak pro megamindy, kteří vědí co je to Dependency Injection, tak pro ty co se sice stydí, že to nechápou, ale potřebují napsat aplikaci. Pro ty druhé, je to navíc šance mnoho se naučit a možná i získat dobré návyky.

Překážkou je snad jen relativní nedostatek aktuální dokumentace. Mnoho návodů a rad už neplatí a někdy je těžké dopátrat se co a kdy se změnilo. Každý bohužel nemůže průběžně sledovat vývoj. Ale i tak to stojí za to.

LeMongoine

Tak Nette 2.0 si začíná budovat svou pověst. Posunutí slibovaného termínu bety (z důvodu, že je David líný) mu vážně neprospěje – akorát se tím nasralo hodně lidí.

Jiří Kuneš

Ideální by bylo, kdyby se pan Grudl naštval tak důkladně, že by skromně z celého projektu vycouval. Jenže to se nestane. Ten pán svými obstrukcemi a sliby jen napíná komunitu, aby upevnil svou slávu a moc.

Pěkně na kolena a proste Boha! Třeba použije svůj kýbl pokory a něco vám snese. Když budete hezky prosit.

David Grudl

Prezentace a slavnostní upload dnes v 15:30 na Poslední sobotě http://srazy.info/posledni-sobota/1139. Tak přijďte mi tam zanadávat osobě.

Honza

Davide bylo by fajn alespon nekdy dodrzet planovane terminy, kdyz uz to slibujes. Mame sobotu a Nette 2.0 beta neni na strankach uvedeno.
Je to uz po nekolikate:( Si vzpominam, jak uz nekdy na podzim se slibovalo, ze nova verze bude do tri mesicu. Pak nekolikrat sliby v radu tydnu s beta verzi, nebo dokumentaci.
No a ted oficialni termin padl, byt o den, ale stejne :-) A 1.6. ma byt dokumentace. No nevim:-) Byl by to asi prvni termin, co jste za posledni 3/4 roku dodrzeli:-) Skoda :-(

Michal

Ty muzes akorat tak drzet hubu a krok. Kolik si toho do Nette napsal ze si tohle dovolujes? Bud rad ze ti neco zadara vyda.
A jeste za jednu vec bud rad. Ze to nevydava vcas nedodelany.

Hmmm

Nette nie je zas tak majstrovske dielo aby si si taketo nieco mohol pre zmenu dovolovat ty.

Pokial sa povie termin, ma sa dodrzat. Pokial sa nevie kedy to bude hotove, tak sa nema davat termin ziaden. Zaujimave, ze napriklad taky Notch s tym problem nema. Ten povie termin vydania novej verzie az vtedy ked uz vie naisto, ze to stihne vydat. Pritom Notch ako Jakuba, tak aj Davida s ich Nette a Adminerom svojim pocinom strci hravo do vrecka.

David Grudl

Checht ;) Doporučuji omýt přirození vlažnou vodou a trávit pátky jinak, než refreshováním http://nette.org, dyk to není žádné majstrovské dílo, že si radši nestáhneš něco od Notche ;)

Hmmm

:) Aspon, ze mas ego vysoko.

Jakub Vrána

Bylo by prosím možné uvést odkaz? Bohužel vůbec nevím, co to Notch je a hledání notch ani notch php k ničemu příhodnému nevede.

David Grudl

Sem myslel, že to je ten týpek z bejvoč.

Ondřej Mirtes

První odkaz v Googlu mě navedl sem: http://notch.tumblr.com/

Ale taky jsem ho neznal :) Minecraft je na mě příliš intelektuální a nepochopitelná hra.

Hmmm

Uvadzam to ako priklad, pretoze aj napriek tomu, ze Minecraft je nepochybne na naprogramovanie podstatne zlozitejsi a casovo narocnejsi projekt nez nejaky framework pre php, tak si jeho autor dokaze velmi pekne planovat terminy vydania a navyse ich aj dodrziavat. :)

Magneto

Je evidentní, že ty sám jsi neudělal ani hru v Javě, ani framework, ale máš naprosto jasno v tom, jak je co složité a jak se mají ostatní chovat.

Hmmm

:D :D

Filip Procházka

Don’t feed the trolls…

Oldis

Dovolim si nesouhlasit, uz jen koncepci jde o odlisne programy, takze tezko srovnavat narocnost.

blizz

si múdry ako rádio

:)

velmi produktivna debata :)

marcela

Vážení pánové, velice mě udivuje kolik máte času si tady navzájem v diskusi předhazovat, kdo je lepší. Sama jsem před časem Nette zkoušela, ale zřejmě jsem k němu intelektuálně nedospěla a zase jsem jej opustila (tak z 90% to bylo zaviněno dokumentací a rychlým až překotným vývojem, ale nevylučuji ani moji neschopnost). Podle mě máte každý svojí pravdy trochu. Přeji Nette hodně úspěchů a snad se mu podaří prorazit i mimo čechy a slovensko.

Smokie

No dokumentacia je uz znamy a najvacsi problem Nette.

Preto som pre externych zamestnancov radsej napisal vlastny Nette manual, pretoze by trvalo tyzdne, ktore nemame, kym by sa naucili urobit co treba podla povodnej dokumentacie.

A tento problem sa netyka len toho, ze je roztriestena medzi verziami 0.9 a 2.0. Ale plno veci je bud vysvetlenych zle alebo nedostatocne. Je pekne vidiet kusok kodu, ktory mam vlozit niekam, ale co z toho ked nikde nikto nenapisal kam ho mam vlozit. Preco sa to mam dovtipit sam? Preco si to mam hladat na fore? Od toho dokumentacia predsa nie je. To radsej idem niekam kde ma dokumentacia povedie za rucicku. Ak uz nic ine, setri to moj cas.

Jakub Vrána

Bylo by možné to zveřejnit? Myslím, že by to řada lidí ocenila.

Smokie

Je to interna firemna dokumentacia, takze nie. Su tam aj rozne nase vychytavky a urychlovatka, ktore nemame zaujem zverejnovat. Nie preto, ze by boli neviem ako uzasne a neprekonatelne, ale jednoducho su nase a chceme aby nasimi aj zostali.

Ale mozno staci najst nejakeho naseho byvaleho nastvaneho zamestnanca a ziskat to od neho ;)

Jakub Vrána

Tak tomu říkám komunitní přístup!

Michal

Jo tak to je pecka :-D. Pouzivat neci framework ktery potrebuje podporu krizem krazem jak prase drbani a naferovku vyklopit ze co si do nej dodelam nikomu nedam :-D

Čelo

No a? Je klidně možné, že dotyčné nové zaměstnance firma posílá k Davidovi na školení. Komunitní přístup je uživateli Nette nějak vyžadován? Podle mne jde o svobodnou volbu každého jedince či firmy. Tím nepopírám a samozřejmě si uvědomuji výhody komunitního přístupu i pro dotyčného přispěvatele.

Smokie

Nemal som to spominat, moja chyba. Chcel som tym len zvyraznit potrebu vylepsenia dokumentacie.

Smokie

Neviem o tom, ze by som sa niekde pri pouzivani Nette zaviazal ku komunitnemu pristupu a k tomu, ze vsetko co si urobim budem povinne zdielat s komunitou. Ukaz mi kde som nieco take odsuhlasil a v tom momente prestavam Nette pouzivat (aj tak uz pomaly migrujeme na CodeIgniter).

Prezije ten kto ma konkurecne vyhody. Pokial mi moj manual dava aspon aku taku vyhodu, tak nevidim dovod to uvolnovat a davat k tomu pristup komunite a konkurencii. Komunita mi nepomoze ak pojde moja firma ku dnu, ci ano? Nemyslim, pretoze vsetci clenovia komunity okolo Nette su si navzajom konkurentmi.

Moj prispevok komunite je ten, ze ta upozornujem na to, ze dokumentacia je problem, nie je jednoznacna a niekedy tazko pochopitelna. :)

Michal

Mrkni na tuhle knizku http://www.melvil.cz/kniha-restart

gawan

no myslím, že s týmto tvojim prístupom tvoja firma už dlho neprežije;-)

Mal by si poradiť Davidovi, aby si nette nechal len pre seba, lebo takto si len buduje vlastnú konkurenciu. Mal by si doma krásne vylepšovať svoje nette nikomu o tom nehovoriť a byť jednička na trhu.

Smokie

Myslim, ze si nepochopil :) Alebo nechces pochopit.

Smokie

Ale neviem preco sa tu niektori snazia rozputat flame alebo co.

Upozornil som na chybu, urobil som to co je „mojou povinnostou“ v ramci komunity. A tam sa to konci.

David tiez vypustil Nette kvoli tomu aby z toho mohol neskor tazit a dnes aj tazi (nie ze nie). Ak by nechcel, tak nerobi skolenia, rozhovory a marketing.
Ak vypustim svoju dokumentaciu, tak z toho tazit nebudem, nic mi to neprinesie. Mozno prave naopak. Preto to neurobim.

A takto rozmysla kazdy jeden clovek tu. Nemyslim, ze mi ma niekto co vycitat. :)

Tymto pomyslne uzatvaram toto vlakno, pretoze jeho ucel bol uplne iny. Ako som uz pisal vyssie, moja poznamka o vlastnej dokumentacii mala za ucel iba podciarknut nutnost poriadnej dokumentacie pre Nette. Ze to bohuzial niekto pochopil uplne opacne a zacal to brat za uplne opacny koniec, tak to ma mrzi, ale s tym ja uz nic neurobim.

Jakub Vrána

A čí „povinnost“ je tu dokumentaci napsat a zveřejnit?

Když používám nějaký open-source projekt a napíšu k němu dokumentaci, tak považuji za samozřejmé, že ji dám zpátky k dispozici. A to i přesto, že mě k tomu žádná licence ani nic podobného nenutí.

A řada lidí i firem už pochopila, že tímto přístupem mohou vytěžit strašně moc. Počínaje tím, že jim někdo tu dokumentaci vylepší, a konče tím, že se k nim budou hlásit schopní programátoři do zaměstnání.

Rozhodně vám tím ale nic nevyčítám a respektuji vaše rozhodnutí. Jen mi tento přístup „střežím si své tajemství a tím získám výhodu“ přijde jak z minulého století, protože ve výsledku podle mě funguje mnohem hůř (i když třeba oblíbenost nebo vůbec známost firmy u schopných programátorů se měří poměrně špatně).

Čelo

Osobně s vámi a uvedenými důvody souhlasím, ale za samozřejmé to nepovažuji.

Smokie

Napisat a zverejnit dokumentaciu je povinnost autora, to je myslim bez debaty, nie? Pokial chce aby sa jeho projekt uchytil medzi ludmi a zacal pouzivat.

Mozte uviest niektorych takychto ludi alebo firmy? Neviem si velmi predstavit ako by mohol tento krok pomoct k tomu, ze sa do firmy budu hlasit schopni programatori, ked ta firemna dokumentacia aj tak splynie s povodnou autorovou, resp. z nej bude autor cerpat. Uvedie niekde nejaky odkaz na firmu? A co ak sa rozhodne to neskor dat prec pretoze podla jeho mienky uz dokumentaciu upravil svojim dielom natolko, ze z tej predoslej firemnej nic necerpa, pricom to nemusi byt vobec pravda? Ako sa tento pripad osetri? Zmluvne asi velmi nie. Potom to bude ako pomahat firme? Iba na zaklade JPP?

Neviem, neviem…

Jakub Vrána

Příkladem takové firmy je třeba Facebook a řada jeho aktivit na poli open-source, např. HBase.

Smokie

Dobre, viem ako to myslite.

paranoiq

autor rozhodně není povinen napsat a zveřejnit dokumentaci. to je bez debaty. (z jakého závazku by taková povinnost vyplývala?)

Smokie

Druha veta prispevku na ktory si reagoval:

„Pokial chce aby sa jeho projekt uchytil medzi ludmi a zacal pouzivat.“

To je myslim bez debaty.

David Grudl

Jen pár poznámek: žádný závazek vůči Nette pochopitelně nemáš. Jen, jelikož je současná dokumentace dílem dobrovolných nadšenců, je poněkud netaktní jejich dílo zkritizovat a současně odepřít opravu. Právě proto, že její nedobrý stav je vlastně výsledkem takových přístupů. Situace kdy je lepší mlčet.

K tomu těžení z Nette: na rozhovorech nevydělávám, ty diskuse naopak vyžadují silné nervy,, marketing mě peníze stojí a školit bych mohl jakýkoliv jiný framework a bylo by to snadnější.

Smokie

Koniec koncov ani to nie je nutne. Staci dat dohromady dokumentaciu na stranke Nette, nie? :)

frosty22

Takových lidí více a všichni skončíme leda u .NET / Microsoft .. samozřejmě „vykrádat“ opensource komunitu má své výhody a neváže člověka ke zpětné vazbě, ať žije Moliére

Landy

Co je zas tohle za blud? to povídal včera na obědě Pepa z 9.A?

Čelo

Co je to za hippieblábol?

jason argonut

thrall/trol?

Smokie

Ze ja som tu vobec nieco pisal…

LeMongoine

A budování pověsti Nette 2.0 opět pokračuje – dokumentace není v termínu :)

maryo

Ale vzdyt udelat si do do Twigu funkci pripadne plugin neni zadnej problem… Tim nechci schazovat Latte, naopak, ty filtry mi prijdou jako vybornej napad… Vic konkurencnich systemu znamena vic napadu… Ja osobne si vybral Dwoo(kdybych jel na Nette tak nepremyslim o tom co si vybrat).

V tom Dwoo by se to pak dalo zapsat treba nasledovne, v Twigu by to vypadalo dost podobne.

<li{class array($iterator->odd=>’lichy‘,$­iterator->last=>’posled­ni‘)}>

maryo

Vlastne ty podminky nemuzou byt jako klice :). Tak spis nejak takhle.

<li {attr „class“ array(‚lichy’=>$­.iterator->odd,’posledni’=>$­.iterator->last)}>

David Grudl

Shodou náhod takřka stejná syntax fungovala v Latte před několika lety, od té doby došlo k velkému pokroku.

maryo

Ajo, ted to vidim i v dokumentaci :)… Ale prave to Dwoo a Twig rekl bych prave stavi na tom ze se tam daji jednoduse psat ty pluginy, funkce a tak, jakoze se da k tomu {attr} tagu „priradit“ classa ktera vraci uz zkompilovanej/nez­kompilovanej kod podle potreby… Bidny mi neprijdou… Zase jsem to moc nestudoval ale, takze je dost mozny ze v Latte to jde taky a jeste ma vychytavky navic… Urcite by nebylo od veci to nekdy vypustit zvlast, vyzkousel bych to (pokud uz neni)…

Ondřej Škvařil

Davide, teď to neber jako osobní útok (nebo tak něco). Ale s neustálým nedodržováním termínů ve světě Nette moc nepochodí.

andrejk

Mozno starnem, mozno je to niecim inym ale z mojich pokusov s Nette mam podobny dojem ako mal srboisvert z RoR na stackoverflow:

Beware, the rails world is a massively frustrating mess of outdated and inconsistent documentation and examples. –srboisvert at http://stackoverflow.com/questions/55574/learning-ruby-on-rails/62846#62846

Fanda

Uf, komentáře jsem dočetl jen do půlky. :-)

Rád jsem se do tohohle rozhovoru začetl. Díky. David je mi sympatický.

Zatím jsem toho s Nette moc nevymyslel, ale věřím těm, co tvrdí, že se vynaložené úsilí vyplatí. :-)

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.

Pocta C64

Za prvopočátek své programátorské kariéry vděčím počítači Commodore 64. Tehdy jsem genialitu návrhu nemohl docenit. Dnes dokážu lehce nahlédnout pod pokličku. Chtěl bych se o to s vámi podělit a vzdát mu hold.