Můžu v názvu svého programu nebo služby použít slovo
„Nette“? Otázka, která v poslední době padá docela často, dokonce si
zasloužila oprášit blogísek ;)
Chcete krátkou nebo dlouhou odpověď? Krátká odpověď: bohužel
ne. A teď ta obšírnější.
Velice mě těší, že kolem Nette vznikají nové projekty, ať už jde
o CMS, wiki, fóra nebo dokonce hostingy. Celý ekosystém. Nette inspiruje
programátory, baví je programovat a tvořit. To je prostě paráda!
Když někdo vytvoří open-source fórum a nazve ho NetteForum, je to
v podstatě pocta pro framework. Programátor s ním byl nejspíš velmi
spokojen, jinak by si ho do názvu nedával. Jenže je tu i druhá
strana mince.
Nette Framework je u nás známý a těší se výborné reputaci. Taky se
snažíme s komunitou vše pro to dělat. Když se pak objeví projekt
NetteNěco, spousta lidí se bude domnívat, že jde o oficiální
projekt „od tvůrců Nette Framework“. Ale půjde o omyl a to přece není
příjemné pro nikoho – ani pro uživatele, ani skutečného autora a ani
pro framework. Budou hledat podporu na stránkách frameworku, psát e-maily,
atd. Budou také očekávat stejnou kvalitu, a pokud je zklame, může to házet
špatné světlo i na framework.
Příklad? Nette Framework si buduje image nejbezpečnějšího
frameworku. A teď si představte, že vznikne dejme tomu hosting
pojmenovaný NetteHosting a ten jednoho sychravého dne hacknou. Zmínka
o útoku se objeví na technických serverech a čtenář si řekne: „ejhle,
s tou bezpečností Nette to asi nebude tak žhavé.“ Přitom framework
s tím nemá naprosto nic společného.
Samozřejmě bych byl rád, kdyby hypotetický NetteHosting a
NetteForum byly ty nejlepší služby a držel bych jim palce, ovšem
držení palců je to jediné, co mohu dělat. Když s nimi nemám nic
společného a žádným způsobem nemohu ovlivnit jejich kvalitu, nechci
přijmout ani odpovědnost. Tedy slovo „Nette“ v názvu.
Programátorovi fóra bych stejně spíš poradil: hele, programuješ to pro
lidi, které beztak žádné frameworky nezajímají. Snažit se do názvu
nějak zapasovat „Nette“ je úplně zbytečné, spíš vymysli pěkný
název, co se bude líbit tvým uživatelům, a ať se jim dobře pamatuje. Že
jsi nadšen z Nette Framework raději napiš na své stránky, dej si tam ikonku, obleč si tričko
s logem Nette, ale nepojmenovávej tak své děti 
Mam novinu jak cyp! Tak 11.11. v 11.11 hodin (by si to zapamatovaly
i babky z Ludgeřovic) zfarame na 3 hodiny na Bani (Vysoke škole pro štajgery). Esli nas nezavali,
řeknu vam o vyvoji webových aplikací v PHP a Nette Framework. Bude to tu v baraku RV101.
Zfarat možu fšeci, kere zajima vyvoj webovych aplikaci, ať už
dělaji jakesik programovaci jazyky nebo maji framework co o něm neslyšela
ani svačinařka z NHKG. Jo! A je to zadara!
Řekneme a ukažem si:
- jake je fajne používat frameworky
- základy Nette Framework co je to AJAX, DRY, KISS, MVC
- ukážu, jak s využitím Nette Frameworku vývoj aplikací zjednodušit,
urychlit a eliminovat bezpečnostní rizika
- zkusíme si něco naprogramovat
Jako esli bude aj ohňostroj jak na odpustu v Kravařu to nevim, ale aji tak
to bude fajne, takže dovalte na faračku! (Je to taky na xichtbuku).
Na WebExpu jsem měl přednášku nazvanou RIA jednoduše –
JavaScript + AJAX + PHP + Nette Framework. Pokusil jsem se ukázat, jak snadno
lze psát AJAXové aplikace za použití Nette
Framework a jQuery. Během přednášky
vznikl jednoduchý příklad, který vám nyní dávám ke stažení.
Protože přednáška byla zaměřená na začátečníky a posluchače,
kteří Nette Framework zatím neznají, začal jsem na zelené louce stažením
frameworku z webu a poté psal celý kód naživo. Doufal jsem, že divák
spíš odpustí různá zaškobrtnutí, která k živému programování
patří, než abych z rukávu vycopy&pastoval předpřipravené kusy kódu
a posluchače připravil o niť. Ale sebekriticky přiznávám, že nervozita
zapracovala a těch zaškobrtnutí mělo být mnohem méně 
Video z přednášky zatím není k dispozici, ale mělo by se objevit
na StreamHostingu.
V některých rodinách panuje zvyk před odjezdem na dovolenou celý byt
vygruntovat. Proč? To kdyby se k nim vloupal zloděj, aby si nepomyslel něco
špatného. Do stejného pytle patří kodéři puntičkářsky dbající na
vzhled HTML kódu jejich stránek. To aby se jejich kód snáze vykrádal, aby
je lepič na Webtrhu nepomluvil.
Sám jsem děsný perfekcionista. Takže mě žralo, že hezky
naformátovaná PHP šablona:
<?php
$items = array('user', 'see', 'too');
?>
<ul>
<?php foreach ($items as $item): ?>
<li><?php echo htmlSpecialChars($item) ?>
<?php endforeach ?>
</ul>
generuje ošklivý HTML kód:
<ul>
<li>user <li>see <li>too</ul>
Jak už asi víte, v Nette Framework lze ekvivalentní šablonu zapsat
pomocí přehlednějšího Curly
Brackets filtru:
<ul>
{foreach $items as $item}
<li>{$item}
{/foreach}
</ul>
Filtr má v sobě zabudovanou kosmetickou drobnost – podle určité
heuristiky se snaží učinit perfekcionistické duši za dost. A vygeneruje
tento výstup:
<ul>
<li>user
<li>see
<li>too
</ul>
Já vím, pro mnohé z vás je to detail, ale pro nás chronické
puntičkáře zásadní feature ;)
p.s. jsou situace, kdy jde o velmi praktickou vlastnost, pokud třeba
generujete plain text nebo Texy kód, kde na formátování a správném
odřádkování hodně záleží
p.s.s. tahle feature má nulový vliv na rychlost generování
stránky
Co chvíli je hlášena bezpečnostní díra na dalším
významném webu (Alza, Mapy.cz, BontonLand). Nebo je díry
zneužito. Zkuste si vyhledat slova XSS
zranitelnost a pochopíte, proč je Cross Site Scripting (XSS) dnes jednou
z nejrozšířenějších a nejnebezpečnějších děr.
Záležitost nepříjemná pro provozovatele webů a snad ještě víc pro
dodavatele. Může poškodit jméno, může dojít na pokuty, žaloby,
nebo jen pokazí vztah s klientem. Jak se proti XSS bránit? Tzv. escapováním řetězců. Bohužel
naprostá většina odborníků v tom plave. (Nechci být netaktní a někoho
se dotknout, snad jen řeknu, že z „československých IT celebrit“ znám
asi jen jednoho člověka, který se ve věci do hloubky vyzná.) Tudíž
i články o této problematice na známých webech jsou, řekněme,
nepřesné.
Navíc ono escapování se obvykle provádí v šabloně, padá tak na bedra
kodéra. Tedy nejkritičtější místo vyžadující vysokou erudici řeší
člověk nepovolaný. Jak taková věc může dopadnout? To přece víme –
viz první odstavec.
Spasí vás Nette Framework
Rád bych vám představil jednu killer feature šablonovacího systému
Latte v Nette Framework. Vlastnost tak
zásadní, že sama o sobě je důvodem framework zvolit. Nebo klidně z něj
použít jen šablony.
- čím jste větší firma, tím je pro vás vlastnost důležitější
- žádný konkurenční framework ji dodnes nemá 1)
Nette Framework v šablonách escapuje automaticky. Jeho vlastnost
Context-aware escaping rozezná, ve které části dokumentu se
nacházíte a podle toho zvolí správné escapování.
Teď zabrousím do techničtější roviny. Jak to funguje, nejlépe uvidíte
na příkladu. Mějme proměnnou $var
a tuto šablonu:
<p onclick="alert({$var})">{$var}</p>
<script>
document.title = {$var};
</script>
Zápis {$var}
znamená vypsání proměnné. Jenže každé
vypsání je nutné ještě explicitně ošetřit, dokonce na každém místě
jinak. Kodér musí (například ve Smarty) připsat příslušné
modifikátory, nesmí se přitom splést a hlavně nic opomenout.
V Nette Framework není potřeba nic ošetřovat. Vše se udělá
automaticky, správně a důsledně!
Pokud dosadíme do proměnné $var = 'Šířka 1/2"'
, framework
vygeneruje HTML kód:
<p onclick="alert("Šířka 1\/2\"")">Šířka 1/2"</p>
<script>
document.title = "Šířka 1\/2\"";
</script>
Samozřejmě je myšleno i na situaci, když je potřeba vypsat proměnnou
bez ošetření, například proto, že obsahuje text článku včetně HTML
značek. V takovém případě se použije zápis
{$var|noescape}
.
Konec technické odbočky. Díky Latte najednou platí, že
- podoba šablony zůstala jednoduchá
- vy se nemusíte bát, že kodér někde něco opomene
- a zároveň v něm nepotřebujete mít top odborníka na
escapování ;)
- práce jde mnohem snáze
Další informace o chytrých šablonách Latte najdete v dokumentaci.
1) asi půl roku po Nette přišel s podobnou vlastností Google
pro svoji knihovnu v C++, žádný framework v PHP, Ruby nebo Pythonu nic
podobného, pokud vím, dosud nemá
Potěším všechny začátečníky, kteří se chtějí seznámit s Nette Frameworkem. Odedneška je to mnohem
snazší. Máme pro vás totiž profesionální screencast. Tedy
výukové video, kde sledujete obrazovku počítače a posloucháte lektora,
který vás naučí prvním krokům s frameworkem. Jde o první počin
z plánované série screencastů.
Přeji vám dobrý obraz a ostrý zvuk!
Ze zákulisí
Málokdo si umí představit, že za těmi 10 minutami videa se skrývají
dlouhé desítky hodin práce a výzkumu. Snoubí se tu totiž celá řada
disciplín, po pedagogické stránce je potřeba vést diváka od jednoduchého
ke složitému a nesklouznout mimo trasu, po vizuální stránce je potřeba
zaujmout, po technické stránce musíte správně zvolit a nastavit video kodek
nebo vyčistit zvuk. Musím proto moc poděkovat Tomáši Vítkovi, že vytrval točit
klikou a screencast dotáhl až do současné podoby. Věci, které zbývá
doladit, už lze považovat za technické detaily.
A ještě zbývá přidat intro
;)
Verdikt odborné poroty: Nette Framework je 2. nejlepší
software roku 2009!
Nette Framework existuje ve světě open source teprve rok. Loni jej znalo
jen pár zainteresovaných lidí. Je proto úžasné, jakého umístění se mu
na COS
2009 dostalo. Vážím si toho a porotcům i hlasujícím velmi
děkuji!
(Mimochodem, víte na jakém frameworku dnes běží server Root.cz? Ano,
přesně na tom!)
Umístění je jistě motivací pro celou komunitu. Je přece fajn se
podílet na jednom z nej… projektů. A zároveň skýtá výzvu příští
rok výsledek ještě překonat ;) Pokusíme se o to, máme totiž velkou
spoustu nápadů a plánů, jak samotný framework i jeho web vylepšit.
Rozhodně se máte na co těšit!
A hlavně jak je psát rychle a bez bezpečnostních děr?
Máte kliku! Ještě před pár lety bych vám odpověděl, že se musíte
nejprve několik roků vzdělávat a nakonec stejně přijmout fakt, že vaše
práce nebude dvakrát efektivní. Dnes, s příchodem frameworků, se situace
naštěstí mění. Konečně je možné napsat v PHP kvalitní webovou
aplikaci v krátkém čase a bez bezpečnostních děr.
Proto v zahraničí vývojářské firmy ve velkém přecházejí na
frameworky. Pokusím se shrnout jejich důvody.
Proč firmy přecházejí na
frameworky?
- ušetří nepředstavitelné peníze za vývoj
vlastních řešení
- využívají osvědčenou technologii, odladěnou komunitou
- z toho vyplývá minimalizace bezpečnostních rizik (ty mohou
poškodit reputaci i klienty)
- zásadním způsobem zefektivní vývoj
- čímž výrazně roste jejich konkurenceschopnost a ziskovost
- a pozor – nemusejí zaměstnance školit na svůj proprietární
systém!
Nejen, že nemusejí školit zaměstnance, oni také mohou rovnou hledat
programátory se znalostí určitého frameworku. Tím se dostáváme k první
odpovědi na otázku:
Proč se programátoři učí
frameworky?
- protože podstatně zvýší svou hodnotu na trhu práce
- mají větší uspokojení z programování
- neboť dokážou rychle přetavit myšlenku do kvalitní webové
aplikace
- a stávají se součástí komunity zdatnějších
programátorů
A tady se kruh uzavírá. Zdatnější programátoři totiž nepůjdou
pracovat do firmy, která se drží „zpátečnických“ postupů. Půjdou
tam, kde používají frameworky, kde hledají programátory už s jejich
znalostí.
Nástup frameworků odděluje zrno od plev a ještě více rozevírá nůžky
mezi jedničkami a nulami
v oboru.
Jaký zvolit framework?
Je báječné, že se dnes dá vybírat hned z několika výborných
frameworků, které jsou navíc šířeny zcela zdarma. Každý z nich má
jiné přednosti a jiné zápory. Čistě pragmaticky, vzhledem k výše
řečenému, omezím výběr na PHP frameworky, mezi kterými se firmy
nejčastěji rozhodují, jejichž znalost je na trhu práce nejvíce
poptávaná. A to je Zend Framework a
Nette Framework. 1)
Ať už zvolíte kterýkoliv, neuděláte chybu. Vůbec nejlepší je naučit
se frameworky oba. A jelikož o Zend Frameworku toho bylo napsáno už velmi
mnoho, pokusím se vyjmenovat, v čem je Nette Framework lepší.
Proč si zvolit Nette
Framework?
- mnohem strmější křivka učení 2)
- obsahuje bezkonkurenční ladící
nástroje
- a bezkonkurenční zabezpečení proti bezpečnostním dírám
- exceluje ve
výkonu 3)
- má nejaktivnější komunitu v ČR
- můžete absolvovat školení
- vyzrálý a čistý objektový návrh využívající
interfaces 4)
- výborně rozděluje práci mezi HTML kodéra a programátora
- podporuje nejnovější technologie (např. jmenné prostory)
- lze jej výhodně doplňovat se Zend Frameworkem
Zvolte Nette Framework a zařaďte se tak po bok nejvýznamnějších
společností, jako je Mladá fronta, Centrum Holdings, Internet Info (vydavatel Lupa.cz, Root.cz), Vltava-Labe-Press, Slevomat.cz, ČSFD, Bandzone.cz, T-Mobile, GE Money a dalších.
Přečtěte si reference.
Jak se naučit Nette Framework?
Asi nejsnazší cestou je začít českou
dokumentací. Budete si moci napsat svou první aplikaci a objevit výhody
Nette Frameworku. Jakmile narazíte na nejasnost, je vám k dispozici české diskusní fórum. Zkuste tam
schválně nahlédnout a uvidíte, že s tvrzením o nejaktivnější
komunitě v ČR jsem ani v nejmenším nepřeháněl.
Jsem si vědom toho, že zejména v komerční sféře představuje výuka
samostudiem neefektivní cestu a může se firmě prodražit. Řešením jsou
školení, konkrétně dvoudenní kurz Vývoj
webových aplikací v Nette Framework. Kromě veřejného školení
(aktuální termíny najdete zde na webu v pravém sloupci) lze uspořádat
i školení ve vaší firmě. Přečtěte si ohlasy.
Co se naučíte na školení?
Naučíte se efektivitě. Vývoj webových aplikací naráží v každé
firmě na úskalí, která jsou jako podle kopíráku. Školení vám ukáže,
jak tyto úskalí zdolávat nebo jak se jim vyhnout. Naučí vás techniky, jak
psát aplikace bez chyb a jak je ladit. Naučí vás, jak eliminovat řadu
bezpečnostních děr. Cílem přitom bude čistý a účelný návrh aplikace
s důrazem na budoucí rozšiřitelnost. Předmětem školení není jen
framework, ale vývoj webové aplikace. Framework slouží jako
nástroj.
Každý absolvent školení obdrží certifikát.
Programy pro studenty
Mezi studenty se Nette Framework těší velké popularitě. Je příjemným
zjištěním, že v dnešní době si studenti uvědomují hodnotu svého
know-how a projevují značný zájem o zmíněné školení. Odměnou je jim
až 50% sleva.
…a po práci zábava!
Přátelé webových frameworků a zejména Nette Frameworku pořádají
pravidelná neformální setkání každou poslední sobotu v měsíci, pod
názvem (překvapivě) Poslední
sobota. Místem setkání je střídavě Praha a Brno. Na programu jsou
prezentace nových nápadů a řešení, no a samozřejmě neformální pokec
u piva. Vstup na akci je zdarma.
Disclaimer: autor tohoto článku se (hrdě) podílí na vývoji Nette
Framework
1) dle průzkumu serveru Zdrojak.cz je Nette Framework nejoblíbenější a nejpoužívanější
framework a server Jobs.cz poptává nejčastěji Nette programátory
2) dle vyjádření jednoho z největších odborníků na PHP
frameworky Jiřího Knesla
3) výsledek nezávislého
měření na serveru Root.cz
4) dle
slov jednoho z největších světových odborníků na PHP Jakuba Vrány:
„…na co jsem se v Nette podíval a co by většina programátorů
napsala špatně, to bylo správně, vzorově“
Poslouchaj, Roubíček, vědí, že mě dneska inspirovali?
Pokud máte určité povědomí o MVC, tak víte, že každý požadavek je
předán ke zpracování nějakému páru controller & action.
V terminologii Nette se říká presenter & view. Nette jde
v této filosofii o krůček dál a uvnitř aplikace (tj. v kódu nebo
šablonách) se neodkazuje pomocí URL, ale přímo oním párem presenter
& view. Tato zdánlivá drobnost má v praxi naprosto zásadní dopad:
jakmile to jednou vyzkoušíte, nebudete chápat, že jste kdy mohli psát
aplikace jinak.
Stejný princip odkazování zvolil i Microsoft pro svou MVC implementaci
pod ASP.NET.
Součástí každé webové aplikace je pak předpis pravidel, jak libovolné
URL převést na presenter & view a obráceně. Jde o jakousi
obdobu pravidel mod_rewrite
, o kterých dokumentace zcela bez
okolků říká:
mod_rewrite is voodoo. Damned cool voodoo, but still voodoo.
Trefné! Routování je prostě magie. Ačkoliv mám s Nette Frameworkem
poměrně bohaté zkušenosti, routování je oblast, ve které se toho mám
ještě dost co učit. Užitečným pomocníkem mi ode dneška bude Routing
Debugger.
Jeho nasazení je velice jednoduché. Stáhněte si Nette Framework, Routing Debugger (je
ve složce Tools) a spusťte ukázkovou aplikaci
examples/CD-collection
. Nyní stačí do souboru
bootstrap.php
za definici routovacích pravidel přidat
následující příkaz:
require 'RoutingDebugger.php';
RoutingDebugger::enable();
Nyní všechny požadavky bude zpracovávat routovací debugger. Ten zobrazí
stránku, kde oznámí, na který presenter & pohled aktuální URL vede,
jaké se mu předají parametry a také zobrazí tabulku s přehledem všech
definovaných cest včetně příznaků, jestli pasují i na
aktuální URL:
Všimněte si, že tabulka je vyvedena v krásných barvách, teplých
i studených, protože Nette Framework je určen pro teplé i studené
vývojáře. V tom je právě jeho síla.
Rád bych vás pozval na prosincové termíny školení Nette Framework. Školení
se uskuteční nejen v pracovních dnech, ale i o víkendu, nejen v Praze,
ale i v Brně (vypsáno s otevřeným
termínem). Pokud se chcete naučit vyvíjet efektivně webové aplikace,
získat konkurenční výhodu nebo zvednout svou cenu na trhu práce, jste
vítáni.
Ing. Václav Stoupa,
pořadatel WebExpo 2008
Školení PHP od Davida Grudla mě naučilo nejen jak v Nette Frameworku
programovat webové aplikace, ale poodhalilo a vyjasnilo i mnoho vlastností
PHP 5, o kterých jsem dosud nevěděl, ač jsem v PHP již nějaký ten rok
programoval. Skvělý objektový návrh Nette vás při psaní aplikace
automaticky vede k používání programátorských „best practices“.
Framework vám rozhodně nehází klacky pod nohy svojí složitostí ani vás
nesvazuje omezeními. Právě naopak, cestu vývoje před vámi úhledně
zametá a šikovnými knihovnami vám pomáhá se po ní pohybovat rychleji a
bezpečněji.
Roman Sklenář
Školení stálo za to. I když v Nette už nějakou chvilku dělám,
ujasnil jsem si pár věcí, které mi zatím nebyly úplně jasné, nebyly
řešené na fóru ani v dokumentaci nebo nejdou tak snadno vyčíst z kódu,
nebo jsem prostě jen využíval pětinu jejich možností.
Tomáš Witek
Dověděl jsem se hodně nových věcí a hlavně jsem si vyjasnil všechny
nejasnosti. Měl jsem připraveno plno otázek, ale jak David postupně
pokračoval ve výkladu, tak mi nakonec snad žádná otazka nezbyla. Ve finále
nám David ukázal, jak děla aplikaci v Nette přímo on. Zeptal se nás co
bychom si udělali za aplikaci, takže to neměl pripravené. Byl to docela
mazec, jen škoda, že jsme neměli více času.
Matej Kravjar
S väčšinou vecí, ktoré sa na školení preberali, som sa pri skúmaní
Nette stretol, ale práve školenie tomu dalo nadhľad a vyplnilo medzery a
nejasné miesta, a naviac ukázalo možnosti o ktorých som ani netušil.
Tomáš Vítek
Okolo Nette se pohybuju v podstatě od jeho zveřejnění – ohlášení,
ale až po školení jsem se dokopal k tomu si v něm napsat celou aplikaci a
až školení mi ukázalo ty drobnosti, které Nette obsahuje a kvůli kterým
je to tak úžasný nástroj pro vývoj aplikací. Ty drobnosti sice jsou
v dokumentaci, ale člověk je snadno přehlédne, když je tam o nich jen
třeba věta, dvě. Když jsem si pak v Nette psal první větší aplikaci a
využíval jsem u toho všechny drobnosti, o kterých jsem se na školení
dozvěděl, vážně mě to strašně bavilo. PHP je hloupý pseudoobjektový
jazyk, ale s Nette na něj nemá ani C#. :) A komu by to nestačilo, dostane
krásný diplom, ehm… pardon… certifikát.