Jsem na nervy z dokumentace

Kaven
Člen | 35
+
-17
-

Musím si ulevit. Jsem jediný koho šíleně točí to budovatelské nadšení kterého je dokumentace plná? Nemůže si autor aspoň v dokumentaci odpustit hlášky jako „jednoduché, že?“, „Za chvíli nebude věřit že jste kdy mohli programovat jinak“ a podobně ? Když se snažím najít nějaké informace, tak je nenajdu, ale místo nich dostanu plnou dávku takové samochvály. Leze to nervy. Nette ve skutečnosti není špatné, resp nebylo by, kdyby mělo bohatší dokumentaci; a hlavně takovou, která SKUTEČNĚ DOKUMENTUJE, místo aby se v jednom kuse chválila.

Mimochodem, na slovo „továrnička“ už jsem dostal alergii. Koho to napadlo vnášet zdrobněliny do technického textu? Jak to, že nemůžu mluvit o technických záležitostech a nepřipadat si přitom jako potrhlý sluníčkář?

matopeto
Člen | 395
+
+5
-

ja si naopak myslim ze je to fajn. Lahsie sa to cita ako cisty technicky text a treba si uvedomit ze je to pisane aj pre uplnych zaciatocnikov, ktory z programovanim maju malo skusenosti. Ak chce niekto technicky text, nech si pozrie phpdoc :)

CZechBoY
Člen | 3608
+
+17
-

Tak vzdycky muzes poslat pull request a pridat svou spetkou :-)
https://github.com/nette/docs

Editoval CZechBoY (19. 6. 2017 9:33)

Kaven
Člen | 35
+
+5
-

matopeto: Prakticky jsem si to ověřil jako začátečník v nette ale s celkem bohatými programátorskými zkušenostmi odjinud. Během půl hodiny narazím na věci které mi nejsou jasné. V dokumentaci místo odpovědí najdu popis jak je všechno skvělé a úžasné. Když se to stane potřetí, tak už to fakt vadí. Opravdu se lépe čte tutoriál který vypadá spíš jako reklama? Nebylo by místo toho obracení se na čtenáře s reklamními poznámkami spíš lepší vysvětlovat? Proč to je dělané jak je, jaké to má výhody a nevýhody atd … když už to teda nemá zabřednout do technických detailů.

CZechBoY: No bohužel já na nette nejsem žádný expert, takže já dokumentaci fakt psát nemůžu. Chtěl jsem ho používat, dokonce i budu muset, ale zdaleka se v něm neorientuju tak abych mohl psát manuály.

Pavel Kravčík
Člen | 1180
+
+3
-

Dokumentace Příručka je jednoduché představení základní funkčnosti. Částečně to musí být také PR. Představ si to jako výstřih slečny se kterou jdeš poprvé na rande. Abys pokračoval dál, mělo by Ti dát příslib. :)

Editoval Pavel Kravčík (19. 6. 2017 11:30)

Kaven
Člen | 35
+
+6
-

Pavel Kravčík napsal(a):

Dokumentace je jednoduché představení základní funkčnosti. Částečně to musí být také PR. Představ si to jako výstřih slečny se kterou jdeš poprvé na rande. Abys pokračoval dál, mělo by Ti dát příslib. :)

No promiň, to teda není. Dokumentace je popis funkčnosti, a u frameworku je smyslem vysvětlit jak to pracuje a jak to mám používat. Když čtu dokumentaci, tak to znamená že na mně už PR zabralo, a že ten framework chci opravdu používat.

Nette dokumentaci fakticky nemá, resp. jsou to spíš tutoriály. Nic proti tomu, tutoriály jsou taky důležité, ale ani tam už PR nemá co dělat. Tutoriály popisují jak řešit nějakou modelovou situaci s pomocí frameworku, aby se člověk snáz zorientoval na konkrétních případech. Když čtu tutoriál, tak už taky nepotřebuju chytlavé slogany, protože to znamená že už jsem se chytil a začal se o to zajímat víc.

Osobně můžu říct že nedostatečná dokumentace u frameworku je naprosto zásadní chyba, ALE Nette to dělá ještě horší tím, že dokumentaci prokládá samochválou. Takže jasně vidím, že v dokumentaci to, co potřebuju vědět, prostě není, ale MÍSTO TOHO je tam napsáno že nette je skvělé.

Pavel Kravčík
Člen | 1180
+
+1
-

Co si pamatuji Symfony bylo to tam obdobně. Vše bylo simple, beautiful and must have any serious app. Po projetí quickstartu a tutorialu bys měl být schopný jako zkušenější programátor v pohodě použít API, pokud Tě to zajímá do detailu.

Nette je skvělé. A co přesně potřebuješ, co tam není?

Pavel Janda
Člen | 977
+
0
-

S autorem vlákna se v nestotožňuji, co se týče hlavního tématu vlákna, ale:

@PavelKravčík To nemyslíš vážně.. Dokumentace je od toho, aby dokumentovala pokud možno celé api. Od představení základní funkčnosti je např quick start.

chemix
Nette Core | 1296
+
+1
-

@Kaven muzes dat tri priklady? Mam ted kolem sebe dva zacatecniky, tak bych to s nima prosel. Diky

Pavel Kravčík
Člen | 1180
+
0
-

@PavelJanda: Máš pravdu, že bych tomu neměl říkat dokumentace, opravil jsem na příručka. :)

Kaven
Člen | 35
+
0
-

Chemix: Tak zrovna teďka – potřebuju získat raw data z POST. Z dřívějška už mám představu že budu potřebovat nějaký objekt httpRequest. Pogoogloval jsem a našel tohle: https://doc.nette.org/cs/http/request . Je někde napsáno že se z toho dají dostat raw data? Myslím že ne, a přitom v kódu vidím nějakou funkci getRawBody(). Funguje? Nefunguje? Není náhodou jen interní? Nemám páru, musím to vyzkoušet. A nebýt toho že jsem se díval do zdrojáku, tak o ní ani nevím.

Dále na té stránce je napsáno, že request se má získat z DI kontejneru takto: $httpRequest = $container->getByType(‚Nette\Http\Request‘); . Princip DI jsem si nastudoval z odkazované stránky, dokonce jsem ho už používal (už s nette kratší dobu pracuju), ale nikdy jsem nikde neviděl žádné $container->getByType(). Odkazovaná stránka mluví něco o setterech a getterech, automatické vyplňování parametrů v konstruktoru, injectech … ale co je to $container->getByType() ? Nemám nejmenší tušení.

David Grudl
Nette Core | 8111
+
+11
-

Ad budovatelské nadšení: je to nutnost. Nechci to teď vysvětlovat, už jsem to dělal vícekrát, je to prostě tak.

Ad samochvála: ta by tam být neměla, nicméně je třeba jí odlišit od budovatelského nadšení.

Ad chybějící informace: pokud nebudeš konkrétní, není moc šance, že by se tam ta informace objevila. (Ale i když konkrétní budeš, nic není zaručeno, je to komunitní projekt se všemi výhodami a problémy.) Ty „novější“ věci jako DI jsou bohužel dost mimo.

Ad továrnička: no to je fakt dementíčko, hned to změním. (Ale Laděnku, hlavičky, patičky a hvězdičky ponechme :-)

matopeto
Člen | 395
+
+1
-

Kaven napsal(a):

Chemix: Tak zrovna teďka – potřebuju získat raw data z POST. Z dřívějška už mám představu že budu potřebovat nějaký objekt httpRequest. Pogoogloval jsem a našel tohle: https://doc.nette.org/cs/http/request . Je někde napsáno že se z toho dají dostat raw data? Myslím že ne, a přitom v kódu vidím nějakou funkci getRawBody(). Funguje? Nefunguje? Není náhodou jen interní? Nemám páru, musím to vyzkoušet. A nebýt toho že jsem se díval do zdrojáku, tak o ní ani nevím.

Pokrocilejsi programator sa pozrie do zdrojakov, alebo aspon do generovanej dokuentacie, tam je to vidno, ci je interny alebo nie je https://api.nette.org/…est.php.html#… a co to vlastne robi.

Editoval matopeto (19. 6. 2017 12:37)

Kaven
Člen | 35
+
+1
-

matopeto napsal(a):
Pokrocilejsi programator sa pozrie do zdrojakov, alebo aspon do generovanej dokuentacie, tam je to vidno, ci je interny alebo nie je https://api.nette.org/…est.php.html#… a co to vlastne robi.

No, a už jste slyšeli že nette má „steep learning curve?“. Tak to je právě kvůli tomu, že abyste našli odpověď na kdejakou kravinu, tak se musíte vrtat ve zdrojáku. Zaprvé to není pro každého (fakt chcete mít nette jen pro „pokročilejší programátory“?) a za druhé i když já pokročilejší jsem, tak jsem pořád zvyklý hledat popis produktu v manuálu. Když mi řekneš „koukni se do zdrojáku“, tak je to jako kdybys mi při prodeji auta řekl „a když nebude fungovat posilovač řízení, tak koukni do motoru, tam jasně uvidíš jak to udělaný, a bude ti to jasný“.

Když přemýšlím o frameworku, tak ho chci především používat, nikoli na něm participovat. Samozřejmě je celá komunita která na tom participovat chce, a to jí rozhodně neberu. Komunita dokumentaci nepotřebuje, protože se zdrojákama běžně pracuje. Ale znamená to že když já chci framework jen použít, tak jsem mimo a nemám se ani snažit?

Martk
Člen | 652
+
0
-

@Kaven RawBody určitě není, interní metody se označují buďto @internal (public) nebo protected, private.

Tento příklad (getByType) je užití bez frameworku, jen s některými knihovnami. Je pravda, že se tam míchá užití s celým frameworkem a na druhou stranu jen s jednou knihovnou (skoro všude a není to moc dobré, někde to chápu, jinde ne, asi by to bylo potřeba rozdělit). Možná proto hodně začátečníku používá šahání na context, když je to tak uvedeno ve frameworku.

Editoval Martk (19. 6. 2017 12:54)

David Grudl
Nette Core | 8111
+
+1
-

Jinak ohledně POST dat https://doc.nette.org/cs/http/request

$post = $httpRequest->getPost(); // vrací pole všech parametrů z POST

matopeto
Člen | 395
+
0
-

@Kaven nejde o to pozerat do zdrojakov ale ako dokumentaciu vyuzivat i PHPdoc, co je k jednotlivym metodam.

Kaven
Člen | 35
+
+2
-

Jenomže já od Pohody dostanu v těle requestu XML, nikoli parametr=obsah&parametr2=obsah2 atd. Tak či onak, někdo se zjevně při programování objektu rozhodl, že by měl dát k dispozici raw obsah dotazu, a udělal na to metodu getRawData(). Takže to asi není taková blbost chtít obsah nezchroustaný, programátor objektu Http\Request si to myslel taky. Shodli jsme se na tom, že to skutečně nemá být ani interní ani privátní metoda, ale metoda určená k public používání. Takže proč o tom dokumentace mlčí?

Ono to vypadá že bazíruju na jedné malé metodě, ale na takovéhle věci v nette narážím pořád.

matopeto
Člen | 395
+
0
-

Shodli jsme se na tom, že to skutečně nemá být ani interní ani privátní metoda, ale metoda určená k public používání. Takže proč o tom dokumentace mlčí?

Vsak je to public metoda (nie je private ani internal) preto je priamo k pouzivaniu. Keby to nebolo k pouzivaniu nebolo by to public. Dokonca ma i spravny komentar Returns raw content of HTTP request body. Nevidim v tom ziaden problem :)

David Grudl
Nette Core | 8111
+
0
-

Můžete prosím někdo doplnit do dokumentace getRawBody()?

Tady:

Kaven
Člen | 35
+
+1
-

>

Vsak je to public metoda (nie je private ani internal) preto je priamo k pouzivaniu. Keby to nebolo k pouzivaniu nebolo by to public. Dokonca ma i spravny komentar Returns raw content of HTTP request body. Nevidim v tom ziaden problem :)

Problém je právě v tom, že to najdu až ve zdrojáku. Vygoogloval jsem stránku s popisem httpRequest, tam je vypsáno co všechno ten objekt umí, a není tam nic o tom že by uměl vrátit raw data. Z toho logicky usoudím že to neumí a začnu hledat něco jiného. Musíš už předem tušit nějaký podraz, aby ses pro jistotu podíval i do těch zdrojáků, kde se to dozvíš.

Víš co … nemusíš mi vysvětlovat že jsem vlastně v pohodě protože jsem si to vlastně našel. Až vám příště bude vrtat hlavou proč má nette pověst složitého frameworku se kterým se musí lidi dlouho učit, tak tahle nedostatečná dokumentace je právě jedním z důvodů. Co člověk chce, to v ní nenajde, a nebo až po delším pátrání. Když vám to vrtat nebude a jste spokojeni se stávajícím stavem, berte to tak, že jsem si jen prostě ulevil od vzteku a nemusíte se tím znepokojovat.

matopeto
Člen | 395
+
+1
-

Programovanie je i o tom, ze vies kde co mas hladat (normalna dokumentacia, generovana dokumentacia, github, Stack Overflow a spol), je to skill, ktory k tomu patri a bez toho sa nezaobides.

BTW do zdrojakov lozit nemusis, rozumnejsie IDE pri napovedani metod v objekte zobrazuju i zadanu dokumentaciu.

Martk
Člen | 652
+
+7
-

@Kaven Nadávat umí bohužel každý, ale pomoct téměř nikdo. Nyní víš co je metoda getRawBody, ale stejně nepošleš pr, i když to v té dokumentaci chybí. Neber to moc osobně, protože to platí pro mě, tebe a ostatní (čest výjimkám). Tady máš vysvětlení, proč tolik informací v dokumentaci chybí, je založena hlavně na komunitě.

Pavel Janda
Člen | 977
+
0
-

@Kaven Souhlas s @Martk. Vsadím se, že jsi zabil víc času psaním komentářům do tohoto vlákna, než bys vložil do vytvoření PR do docu. Proč je tomu tak? :)

Kaven
Člen | 35
+
+1
-

Martk: Tak jestli neděláte nette jen pro komunitu, ale i pro někoho, kdo to chce opravdu používat, tak to je asi normální ne? Já opravdu nemám zájem se starat o opensource project, nemám na to čas a dělám jiné věci. Můžeš říct že jsem svině a akorát kritizuju. Jenže ja mám zájem Nette POUŽÍVAT, takže jsem asi takový člověk pro kterého to děláte, ne? Kdybychom takoví nebyli nikdo, tak nette chcípne. Nebo je nette určeno je „od komunity pro komunitu“?

Matopeto: hádat se nebudu, můžu jen zopakovat že u produktu (zvlášť takového jako je framework) čekáš že všechny informace najdeš v dokumentaci. U Nette místo toho do půl hodiny narazíš na něco, co prostě nechápeš, a nikde na to není odpověď. Jo, PHPdoc dokumentace někdy může stačit, ale tak bohatá na popisy zase není, a nakonec stejně skončíš u luštění zdrojáků. Souhlasím že tohle není případ mého getRawBody(), ale stalo se mi to několikrát předtím.

Vezmi si wordpress – ten dokáže být z mnoha důvodů skutečně peklem, ale dokumentaci má perfektní. Všechny funkce vyjmenované, popsané, dokumentace dobře organizovaná, většinu věcí, které mi nebyly jasné, jsem tam našel popsané. Nebo třeba microsoftí dokumentace k .NET, ta je taky fajn. Jo, z velké části jsou to dokumentace automaticky generované z kódu. Ale každá třída je obecně popsaná co dělá, každá metoda, každý parametr. A je to popsané relativně obsáhle, takže i když ses v daném prostředí ještě úplně nezorientoval, tak to stejně pochopíš. A dívat se do zdrojáku .NET tě nikdo nenutí.

Kaven
Člen | 35
+
+4
-

Petr Janda: Jistě. Nikdy jsem v žádném opensourcu nebyl a netuším jak se „vytváří PR do docu“. Místo toho jsem popsal problém, protože to udělat umím. Pokud to považuješ za hnidopišství, nemusím v tom dále pokračovat.

David Grudl
Nette Core | 8111
+
+5
-

To se fakt nenajde nikdo, kdo by to do té dokumentace přidal? (smutný smajlík + spojovací znak nulové délky + smajlík LOL)

jannek19
Člen | 47
+
+5
-

@Kaven ono ani tak nevadí, že „netušíš, jak se ‚vytváří PR do docu‘“, spíš vadí, že místo toho, abys ses podělil o konkrétní věci, které jsou podle tebe v dokumentaci problematické, aby je mohl někdo napravit, tak tu nadáváš na velmi subjektivní malichernosti, jako jsou zdrobněliny v dokumentaci a „budovatelské nadšení“ :)

Protože pochop, že pokročilejšímu programátorovi nějakou getRawBody() napoví IDE, nebo se k ní rychleji proklikne v projektu, než aby otevíral browser/tab + (google) + dokumentaci. Takže pokročilejší programátor, který by byl teoreticky schopen dokumentaci doplnit vůbec netuší, že to v ní chybí :)

Nejlepší by bylo, když při problému napíšeš na forum, nebo založíš issue v repozitáři pro dokumentaci, nic víc.


BTW „Vezmi si wordpress …“ – ono je to hodně subjektivní – tobě třeba dokumentace Wordpressu/.NET/čehokoli přijde v pohodě, mě přijde úplně na houby, protože v ní nejsou informace, které potřebuji, takže stejně studuju zdroják/StackOverflow. Ještě jsem nenarazil na knihovnu/framework/produkt, který by měl naprosto dokonalou dokumentaci – vždycky v ní něco chybí.

newPOPE
Člen | 648
+
0
-

Nebudem sice konstruktivny ale cudujem sa, ze tymto „týpkom“ vobec aj niekto odpisuje.

@Kaven podla toho co popisujes v prvom poste sa sustredis na uplne ine veci v DOC ako by sa sustredit mal. Tak ako v skole na prednaske: 50% veci je o nicom a to podstatne si proste musis dat dokopy sam…

Kaven
Člen | 35
+
+11
-

newPOPE: „týmto týpkom“ … jejej … že bych byl jediný, kdo kdy slyšel, že začínat s nette je těžké? Že bych byl jediný, kdo má od začátku problémy v poměrně triviálních věcech, které nejsou nikde popsané, a nebo jo, ale nedá se to najít? Ještě jste neslyšeli nic o tom že dokumentace Nette by měla být lepší? Jinak dosud teda nevím jestli je Nette opravdu určeno jen pro svoji komunitu (pak bych to nechal být a neprudil), a nebo jestli se nette skutečně má používat i tak nějak zvnějšku – jenom používat aniž by ho člověk pomáhal dotvářet.

jannek19: No tak já nevím, ono je těžké ukazovat konkrétní věci, protože každá jednotlivá konkrétní věc je v podstatě triviální maličkost. Jako třeba to getRawData(). Osobně bych koncipoval dokumentaci jinak. Podle mně by byla dobrá dokumentace takováto:

  1. Musí ji především napsat člověk, který má sice zkušenosti ale není insider. Takový, který si pořád ještě pamatuje jak to ze začátku vůbec nechápal. Samotný prográtor co žije „uvnitř“ má ve většině případů problém chápat co na tom lidem zvenčí není jasné.
  2. Měla by být napsaná v angličtině. Přinese vám to větší zájem než čeština, a dokumentace vygenerovaná z kódu (ta, která to má celé vysvětlit a na kterou jste mně několikrát odkázali) stejně anglicky už je.
  3. Měla by se vyvarovat všeho toho obracení ke čtenáři typu „není to skvělé?“. Budiž, ať to zůstane v tutoriálech, ale dokumentace se nemá vychvalovat. Dokumentace má vysvětlovat a popisovat. A když chce vysvětlit že třeba DI je lepší než singleton, tak by to měla dělat způsobem „podle nás je singleton špatný v tom a tom, a proto ho nahrazujeme DI protože to řeší takhle a takhle“. Zdůvodňovat proč jste se designově rozhodli zrovna pro toto, a ne pro to co má konkurence. A klidně i přiznat že v tom a tom je horší, ale považujeme to za snesitelný ústupek, protože nám to přinese tohle a tohle.
  4. Měla by být strukturovaná. Na začátku stránka s popisem co nette je a není, a co je na něm dobré. Následně odkazy na podkapitoly k jednotlivým velkým tématům – routování, DI, MVC, šablony, pomocné knihovny atd. Každá kapitola nějdřív obecnou stránku k tématu, a zase podkapitoly které vysvětlí jednotlivé aspekty dané problematiky a tak dále. A vysvětlovat to budou „jak pro blbý“, protože ten, co to bude číst, patrně ještě všechny ostatní části nette zmáklé nemá. Ty nejnižší podkapitoly budou už nejkonkrétnější, s příkladama, a s odkazama na třídy které s tím mají co společného. Tyhle odkazy už povedou na phpDOC dokumentaci generovanou z kódu.
  5. phpDOCová dokumentace se bude zobrazovat vždycky pro nejaktuálnější verzi nette, s malý vybírátkem někde nahoře, které mi to umožní případně změnit. Vizuálně bude taková, aby seděla do zbytku dokumentace a nevypadala jako úplně odtržený projekt. Bude muset být mnohem obsáhlejší – nepočítat s tím, že čtenář už všechno ostatní dokonale chápe, ale vysvětlovat. I kdyby to vypadalo triviálně. Každá třída by měla mít obsáhlejší popis vysvětlující k čemu slouží a jak má fungovat. Každá funkce dtto. Každý parametr by měl mít řečeno co znamená, a celkově co ta funkce vrací. Pokud vysvětlování bude až moc redundantní, může u toho být odkaz na jinou stránku dokumentace – jak do popisu principů, tak do dokumentace konkrétních tříd/metod. Ale jistá redundance je přeci jen lepší, i když je to otrava psát. U každé metody by měl být aspoň jeden příklad použití, který nebude naprosto brutálně vytržený z kontextu. Každá metoda by měla mít odkazy na jiné metody co s ní nějak souvisí. Pokud nějaká třída obsahuje složitější nastavení, nebo nějaký princip který nemusí být úplně jasný, tak tomu věnovat samostatnou stránku a popsat to bokem.
  6. Po pravdě řečeno ani mně by to nebavilo psát. Ale je to přesně to, co dává dobrou a použitelnou dokumentaci, ve které člověk najde co potřebuje.
matopeto
Člen | 395
+
+3
-

@Kaven pekne spisane, uplne so vsetkym suhlasim, tak ma presne dokumentacia vyzerat, v komunitnych projektoch je to ale tazsie na udrzanie a vobec napisanie, nesedi tu plateny programator/pisac dokuentacie 8 hodin denne 5 dni v tyzdni…, ale mozes k tomu prispiet aj ty

Mozes sa chopit hned bodu 1.

Musí ji především napsat člověk, který má sice zkušenosti ale není insider. Takový, který si pořád ještě pamatuje jak to ze začátku vůbec nechápal. Samotný prográtor co žije „uvnitř“ má ve většině případů problém chápat co na tom lidem zvenčí není jasné.

a dokumentaciu doplnit :) (este si pamatas ako si to nechapal, ale pochopil si to, tak sa mozes s ostatnymi o svoje vedomosti podelit)

Editoval matopeto (19. 6. 2017 16:44)

Kaven
Člen | 35
+
+1
-

A ještě bych zapomněl, i když to už není tak úplně dokumentace

  1. Dodat ukázky řešení běžných problémů spojených s vyvíjením webů a webových aplikací. Například mi přišlo že v tutoriálech se až moc často vysvětluje na příkladu statického webu, který má texty namaštěné v šabloně a pro každou jednotlivou stránku jiný presenter. Chápu důvod (neotravovat s věcmi, které se toho konkrétní netýkají), nicméně to vede k tomu, že když chci poprvé programovat web tak jak se weby dělají, tak se nemám čeho chytit. Stránky s obsahy v databázi (editovatelné z nějakého adminu), url stránek definované taky v databázi a ne natvrdo v routerFactory, práva definovaná v databázi (a ne namaštěná v kódu v permission) atd.

Narazil jsem třeba na to, že vím, že admin by měl mít možnost přidávat si stránky dle sebe a definovat jim svoje url kvůli seo (a třeba i určovat jakým presenterem by se měly zobrazit), ale Nette tutoriály mě pořád krmí statickými routami a nechtějí ukázat jak doporučují aby se tohle dělalo. Jo, někde v tutoriálech náznaky jsou, ale přišlo mně to dost skryté, a málo okatě řečené „když chcete mít dynamické url, tak by se to v nette mělo dělat takto: příklad“. To samé s definicí rolí a práv třeba – zase je ukázáno jen jak to namastit staticky přímo do kódu. A určitě je toho víc.

Kaven
Člen | 35
+
0
-

matopeto: To já chápu, ale to bohužel musí ošéfovat nějaký projektový manažer, nebo nevím. Fakt nevím jak to udělat aby opensource projekt vydělávat a mohl si dokumentátora zaplatit; a nebo sehnal lidi, kteří to napíšou zadarmo. Asi to nějak jde, nevím. Každopádně to nic nemění na tom že stávající dokumentace se toho nedrží a tudíž dobrá není.

matopeto
Člen | 395
+
+2
-
  1. Dodat ukázky řešení běžných problémů spojených s vyvíjením webů a webových aplikací. Například mi přišlo že v tutoriálech se až moc často vysvětluje na příkladu statického webu, který má texty namaštěné v šabloně a pro každou jednotlivou stránku jiný presenter. Chápu důvod (neotravovat s věcmi, které se toho konkrétní netýkají), nicméně to vede k tomu, že když chci poprvé programovat web tak jak se weby dělají, tak se nemám čeho chytit. Stránky s obsahy v databázi (editovatelné z nějakého adminu), url stránek definované taky v databázi a ne natvrdo v routerFactory, práva definovaná v databázi (a ne namaštěná v kódu v permission) atd.

Neexistuju bezne problemy, alebo respektive je ich problem definovat, co je pre jedneho bezne pre ineho uplne nie, tazko by sa dalo vybrat, inac by si mohol pisat taku „dokumentaciu“ donekonecna. Kazde zadanie/projekt je iny.

Pre toto nie je miesto v dokumentacii. Ma to byt tutorialoch, pripadne stackoverflow. Ak na nieco niekto pride vacsinou napise o tom tutorial na svoj blog/nette stranky, zodpovedat SO otazku… kdekolvek.

Kaven
Člen | 35
+
+5
-

matopeto: ale existují. Firemní prezentační weby, vlastně skoro všechny prezentační weby, vyžadují interně jedno a totéž. Souhlasím že se to dá dělat různě, ale nějaké běžné postupy jsou, a nette by mělo dát najevo jak je doporučené to v něm dělat. Ve wordpressu tohle dostanete „out of the box“. Nette je obecnější, jasně, dává každému svobodu aby si to udělal jak chce, ale to s sebou nese cenu – MUSÍ si to udělat jak chce. I když vlastně pořádně ještě neví jak to v tom nette namastit aby to bylo „dobře“, a i když ten web potřebuje mít pozítří a nemá čas to zdlouhavě zkoumat. Sada ukázek a doporučení by mu ukázala cestu.

Nette takto ukazuje cestu ke statickým webům se statickými url a jednomu presenteru presenteru na každou fyzickou stránku. A pak se tady po fóru profíci děsně diví jak si svůj web kdekdo příšerně nabastlí. No není divu, když mu nikdo neukáže doporučenou cestu jak NEbastlit.

filsedla
Člen | 101
+
0
-

Podle mě je to o penězích.

CZechBoY
Člen | 3608
+
0
-

@Kaven ukazky zdrojaku jsou na https://pla.nette.org

Kaven
Člen | 35
+
0
-

filsedla: to věřím, ale nic s tím nenadělám. To je problém na nějakého manažera.

CZechBoY: No vidíš, to je lepší. Proč jsou tyhle věci rozfrcané po spoustě různých webů? Ne že by to bylo dokonalé (jsou tam odkazy na už zastaralé věci, určitě tam není všechno co bych tu a tam potřeboval), ale aspoň něco. Ani si nevzpomínám že bych se na tohle někdy dogooglil; možná tam nejsou ty věci co jsem potřeboval.

Nicméně ani tohle mi neporadí jak udělat prezentační web, kde si bude administrátor moct přidávat stránky z nějaké administrace, a měnit jim url aby to mohl udělat podle SEO poradců. A aby měl třeba na výběr tři typy stránek (v kódu tři různé presentery), a mohl si v té administraci vybírat kterým presenterem se má ta nově vytvořená stránka zobrazit a na jakém má být url. Tohle je věc, kterou jsem během posledních pěti let potřeboval prakticky v každém webu. A v nette s nettovými routery to neumím udělat.

Po pravdě řečeno během těch pěti let jsem s nette začal několikrát, a vždycky zase brzy skončil, protože jsem dospěl k názoru že mi to za to nestojí. Že můj vlastní framework je sice primitivní, ale zato se v něm vyznám; narozdíl od nette, kde co chvíli nevím co se po mně vlastně chce, a naprogramování jednoduché featury vyžaduje několik hodin vztekání se, protože nechápu jak to mám vlastně udělat. Teď mně práce donutila se s nette přeci jen trochu sžít, takže vím že to není špatný framework. Ale velice dobře to skrývá.

Tomáš Votruba
Moderator | 1114
+
+5
-

@Kaven Nechci se zapojovat do diskuse (četl jsem jen pár prvních příspěvků), jen ti chci poděkovat, že jsi toto téma ze svého pohledu cílovky otevřel. 36 příspěvků za 12 hodin naznačuje, že je to dost nosné téma.

Díky.

Editoval Tomáš Votruba (19. 6. 2017 21:15)

filsedla
Člen | 101
+
+1
-

@Kaven Chápu, co píšeš, ale teď mě napadá, proč myslíš, že takové informace budou popsané na nette webu?

Co popisuješ, už spadá do poměrně specifického know-how. Ne všichni třeba vědí, jak to udělat, nebo neexistuje jednotný postup, nebo je to něco, nad čím by se i člověk znalý nette musel nejdřív zamyslet, a i když už to třeba někdo dělal, nemá důvod popisovat řešení na webu.

Kaven
Člen | 35
+
0
-

filsedla: No, vidíš, tak mně nikdy nenapadlo že by toto vyžadovalo specifické know-how. Dělal jsem desítky webů, od malých po poměrně velké (nebo spíš středně velké), nešlo o nijak specifické zakázky (typické byly právě prezentační weby firem) a VŠECHNY tohle vyžadovaly. Možná s jednou nebo dvěma výjimkami. Jestli je v nette složité toto udělat, tak to je framework určený spíš k házení klacků pod nohy, a pro mně naprosto nepoužitelný. Jestliže to složité není (což věřím), tak proč to dokumentace nikde nepopisuje? Místo toho věnuje velkou péči ukázkám statických webů, které tvořily právě tu jednu nebo dvě výjimky. Po pravdě řečeno, k tvoření statického webu supervychytaný framework opravdu nepotřebuju.

Takže – čekal bych, že routování v nette bude popsáno tak, že takovou naprosto základní funkčnost dám dohromady bez velkých problémů na základě čtení dokumentace. Jenže není. Nebo bude třeba součástí nějakého ukázkového sandboxového aplikačního základu. Není.

CZechBoY
Člen | 3608
+
0
-

[jedno z možných řešení] Vybrat jednu ze tří variant by mělo být poměrně jednoduché. Uděláš si 3 komponenty implementující nějakej interface. Potom nějakou továrničku, která vrátí vytvořenou komponentu přesně podle toho typu. Každá ta komponenta bude mít svoji šablonu a bude s ní umět pracovat.

Jednoduchý, na to ani nepotřebuješ znát Nette – maximálně tak jak zaregistrovat továrničku do DIC a jak ji získat zase zpět v presenteru obstarávajícím výpis stránky.

Případně ještě odkaz na pla.nette https://doc.nette.org/…tion/factory

Editoval CZechBoY (19. 6. 2017 22:26)

Myiyk
Člen | 321
+
+1
-

Pro maximální produktivitu by bylo ideální, kdyby existovalo nějaké CMS nad Nette.
Nette není CMS, a v tom vidím kámen úrazu, protože stejně každý to CMS potřebuje.

filsedla
Člen | 101
+
0
-

Zajímavé. Možná má nette jiný způsob práce se základními pojmy jako presenter.

admin by měl mít možnost … určovat jakým presenterem by se měly zobrazit

Nějak mi do nette světa nesedí, aby admin v aplikaci vybíral presenter. Nebo i aby presenter byl uložený v databázi (to sice jde, ale přináší problémy např. přejmenování presenteru).

Aby bylo jasno, jiný presenter znamená, že chceš, aby ta stránka vypadala a chovala se jinak? Můžeš to konkretizovat?

filsedla
Člen | 101
+
+1
-

Myiyk napsal(a):

Pro maximální produktivitu by bylo ideální, kdyby existovalo nějaké CMS nad Nette.
Nette není CMS, a v tom vidím kámen úrazu, protože stejně každý to CMS potřebuje.

Ano, a dodal bych, že existuje právě spousta projektů na nette, které nejsou CMS. (=Admin si nenemůže přidávat libovolné stránky do nějakého stromu, nastavovat jakého typu budou apod.)

jannek19
Člen | 47
+
0
-

@Kaven nezlob se na mě, ale k tomu co popisuješ najdeš všechny potřebné informace v dokumentaci – protože pokud z dokumentace víš, jak udělat statickou routu, statické ACL, statickou komponentu/presenter/formulář/cokoli, tak přece není problém to udělat dynamické na základě dat z databáze. Fantazii se meze nekladou ;)

Kaven
Člen | 35
+
0
-

CZechBoY: Tak jednak pokud tohle je doporučené nette řešení, čekal bych že to z dokumentace bude víc jasné. To byl hlavní důvod proč jsem sem psal, a teď pomalu sklouzáváme do offtopicu, protože začínáme řešit technické věci.

Nicméně – tohle řešení napadlo i mně. V celém webu bude právě jeden presenter, a právě jedna routa která všechno nasměruje na něj. Presenter si někde ve startup() natáhne z databáze odpovídající data, podle nich se rozhodne jak to vlastně celé zobrazí , vytvoří příslušné komponenty, natáhne šablony atd. Nicméně jsem měl neodbytný pocit že tím framework obcházím. Je tohle řešení best practice? Prakticky nevyužívám systém routování (nemám co routovat, všechno jde na ten jeden presenter), prakticky nevyužívám MVC (presenter je akorát jeden, a všechnu logiku si řeší on, a nebo je nacpaná v komponentách). Jinými slovy slušnou část toho, co nette nabízí a doporučuje, vůbec nepoužívám a dělám si to po svém. Po svém si to ale můžu dělat i bez nette, žejo.

filsedla: vybírání presenteru. Na webu je obvykle několik TYPŮ stránek. Jedno je běžná obsahová stránka s textem, další je třeba rozcestník na další podpoložky z menu (plus trocha doprovodného textu), další je galerie (plus trocha textu), další je text s kontaktním formulářem dole. Připadá mi velmi intuitivní aby každý takový typ byl samostatným presenterem, protože každý se svými daty z databáze nakládá jinak. Zobrazuje je jinou šablonou, ale ta šablona potřebuje i jinak připravená data, nebo jiná data atd.

No a když si administrátor někde v adminu založí novou stránku, tak si chce vybrat který z těch typů to má být.

Kaven
Člen | 35
+
+1
-

jannek19 napsal(a):

@Kaven nezlob se na mě, ale k tomu co popisuješ najdeš všechny potřebné informace v dokumentaci – protože pokud z dokumentace víš, jak udělat statickou routu, statické ACL, statickou komponentu/presenter/formulář/cokoli, tak přece není problém to udělat dynamické na základě dat z databáze. Fantazii se meze nekladou ;)

No tak mi řekni jak udělám routu, která dostane url, najde si odpovídající presenter v databázi, a podle něj to nasměruje. A udělá to tak, že když budu chtít generovat odkaz, tak nebudu muset pokaždé kvůli každému sestavení url sahat do databáze a zjišťovat jaký presenter je tomu přiřazený.

U ACL je to jasnější, ale opět výše zmíněná výtka – programátor si to MUSÍ vymyslet a naprogramovat sám, i když dynamické ACL je mnohem běžnější a statické se využije málokde. Fantazii se meze nekladou, ale současně fantazie se VYŽADUJE. A když popustím uzdu své fantasii, tak mi pak nette profík vytkne, že jsem to udělal blbě, protože jsem se nedržel best practice.

kolsi
Člen | 131
+
0
-

matopeto napsal(a):

Shodli jsme se na tom, že to skutečně nemá být ani interní ani privátní metoda, ale metoda určená k public používání. Takže proč o tom dokumentace mlčí?

Vsak je to public metoda (nie je private ani internal) preto je priamo k pouzivaniu. Keby to nebolo k pouzivaniu nebolo by to public.

Mno, dovolil bych si k tomuto malou poznámku. Když jsme začínali s Nette, tak jsme hojně používali metody getReferenc(ed/ing)Table právě proto, že byly public a nikde nebyla zmínka o tom, že by byly privátní/interní. Při pokusu o přechod na Nette 2.1 najednou používání těchto funkcí přestalo fungovat. Nikde ani zmínka o změně, v dokumentaci nikde. Při položení dotazu do fóra jsem se mimo jiné dozvěděl, že se nemám divit, když používam interní metody.

filsedla
Člen | 101
+
0
-

@Kaven Nemusíš zneužívat Route, můžeš si implementovat vlastní router.

Potíž ale i potom bude v tom, že v nette presenter znamená jednu stránku. Třeba odkazy se dělají na presenter, ne „na stránku“. Nette nemá žádný objekt, který by znamenal „Stránka“ a ke kterému by se dal dynamicky připojit presenter podle typu stránky.

Takže bych spíš řekl, že to není dokumentované, protože to s použitím základních tříd v nette dokonce vůbec nejde.