StárNette a TloustNette?
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řeci 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 ![]()
Heuréka: example.l na localhost
Mám ve zvyku vyvíjet a spouštět webové aplikace na doménách
s příponou .l, takže třeba vývojová verze
http://nettephp.com mi běží na http://nettephp.l.
Což znamená přidat do souboru hosts řádek pro každou
subdoménu, např.:
nettephp.l 127.0.0.1 www.nettephp.l 127.0.0.1 forum.nettephp.l 127.0.0.1
To je přinejmenším otravné. Kéž by hosts podporoval zápis
pomocí wildcards, stačilo by napsat
*.l 127.0.0.1
a měl bych vystaráno. Jenže tohle nefunguje. Hledal jsem proto jiné řešení. K velkému překvapení, internet se návody nejen že nehemží, nenašel jsem vůbec nic.
Bylo zřejmé, že budu potřebovat najít lokální DNS server, který toto
umožní. Narazil jsem na Simple DNS
Plus. Po instalaci je potřeba jej manuálně aktivovat, tj. říci
síťovému připojení, že má používat DNS server na adrese
127.0.0.1. Poté přímo v aplikaci v Tools / Options / Plug-Ins vytvořit
instanci pluginu Regular Expressions a určit, že maska \.l$ se
bude mapovat na adresu 127.0.0.1.
Funguje to výborně, jen cena $79 mi nepřipadá odpovídající, využívám-li okrajové vlastnosti jinak našlapaného programu.
Další možností je instalace multiplatformního opensource DNS serveru BIND. Stáhl jsem si distribuci pro
Windows a nainstaloval do výchozího adresáře. Ovšem zapomeňte na nějaké
klikací prostředí, BIND zná jen příkazovou řádku a textové
konfigurační soubory. Pro mě španělská vesnice. Naštěstí mě pohled do
dokumentace neodradil rovnou a
podařilo se mi vytvořit konfigurační soubory. Ty se nacházejí
v podadresáři etc, v mém případě je to
c:\Windows\System32\dns\etc\. Na vašem počítači může být
cesta odlišná.
Soubor etc\named.conf
options {
directory "C:\Windows\System32\dns\etc"; // změňte pokud používáte jinou cestu.
};
zone "localhost" {
type master;
file "localhost";
};
zone "l" {
type master;
file "localhost";
};
zone "0.0.127.in-addr.arpa" {
type master;
file "localhost.rev";
};
Sourbor etc\localhost (využívající wildcard DNS
record)
$TTL 86400
@ IN SOA @ root (
2005022501 ; serial
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS @
IN A 127.0.0.1
*.l. IN A 127.0.0.1
a nakonec soubor etc\localhost.rev
$TTL 86400
@ IN SOA localhost. root.localhost. (
2005022501 ; serial
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS localhost.
1 IN PTR localhost.
Poté stačí na síťovém připojení aktivovat DNS server na adrese 127.0.0.1 (viz postup výše) a spustit službu ISC BIND. Světe div se, ono to funguje!
C:\>ping nettephp.l Příkaz PING na nettephp.l [127.0.0.1] - 32 bajtů dat: Odpověď od 127.0.0.1: bajty=32 čas < 1ms TTL=128
Apel na hostéry: chceme PHP 5.3!

Drazí provozovatelé hostingů, už je to tady. Před bezmála půl rokem vyšlo PHP 5.3.0. Přirozený nástupce řady 5.2 bez zpětně nekompatibilních změn. Víme, že jste s nasazením čekali, než se objeví následující setinková verze. Dnes se tak stalo, PHP 5.3.1 je venku.
Trojková řada přináší velké množství vylepšení, na které my, krásní a bohatí programátoři, toužebně čekáme. Neotálejte proto více a novou verzi PHP nám dopřejte. Když budete chtít, stihnete ji nasadit ještě dnes v noci! Stejně v televizi nedávají nic zajímavého. Děkujeme!
(tipy na hostingy, které už novou verzi mají, můžete posílat do komentářů)
NETTE!!! OSTRAVA!!!
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.
Fajne logo jak od Najbrtu
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).
Čistý Programátorský Experiment
Dovolte mi malý experiment. Týká se všech programátorů, které baví návrh aplikací a OOP. Zadám vám velmi jednoduchý úkol, který má mnoho možných řešení. A spíš než konkrétní kód mě zajímá způsob uvažování. Budu rád, když se zapojí programátoři používající různé jazyky. Proto také zadání zapíši v pseudokódu.
Mějme třídu WebPage, které zadáme URL a ona načte stránku
a vrátí jeji obsah, hlavičky a dokonce i náhled v podobě obrázku.
Příklad použití:
page = new WebPage
page.url = 'http://phpfashion.com'
echo page.url
echo page.body
echo page.headers
echo page.thumbnail
Chápejme url, body, headers a
thumbnail jako vlastnosti (properties, accessors) třídy
WebPage. Je asi zřejmé z logiky věci a principu zapouzdření,
že zatímco url umožňuje zápis i čtení, ostatní vlastnosti
lze pouze číst.
Protože funkčnost třídy WebPage je výkonnostně i časově
náročná, je vhodné jednou získaná data ukládat do databáze. Jak to ale
implementovat? Sice nejsnadnější by bylo rovnou upravit kód třídy
WebPage, jenže takový postup je špinavý. Proč by třída s jednou
srozumitelnou funkcionalitou měla navíc ještě komunikovat s databází?
Pověříme tím tedy třídu WebPageStorage. Ta nám bude, mimo
jiné, schopna dodat objekt WebPage rovnou z databáze:
page = WebPageStorage.load('http://phpfashion.com')
echo page.url
echo page.body
echo page.headers
echo page.thumbnail
Otázka zní: jak to naprogramovat?
Zopakuji, že se pídíme po nejčistším řešení. Jak docílit toho, aby
metoda load mohla vytvořit objekt a nastavit mu read-only
vlastnosti body, headers a thumbnail na
hodnoty načtené z databáze? Vytvořením setterů nebo zpřístupněním
vnitřních proměnných by se porušil princip zapouzdření. Navrhli byste
redesign třídy WebPage? Jaký? Navrhli byste redesign
WebPageStorage? A co když úkol zkomplikujeme tím, že
thumbnail se z databáze načte až při vyžádání?
Věřím tomu, že pro řadu čtenářů je zadání naprosto triviální. Přesto se zkuste zamyslet nad nejčistším řešením a vysvětlete jej v komentářích. Klidně obšírně. Díky!

