Klávesové zkratky na tomto webu - rozšířené Na obsah stránky

Konec W3C prostřednictvím psa pana Foustky?

Aneb Webylon.

Byly doby, už je to pradávno, kdy se mezi blogery vášnivě diskutovalo o takových podivnostech, jako je validita, standardy a oddělení obsahu od formy. Dnes už je dodiskutováno a titulkem „Validita je k ničemu“ nebo „Validita na hrad“ nejspíš čtenáře příliš nešokuji a leckterý webloger si jen poklepe na čelo: „To už bylo, dál. Písmeno!“.

Projekt Webylon přišel přesně o dva roky později, než měl. Tehdy mohla jeho sláva dosáhnout hvězd, dnes dosáhla jen několika zmínek (Yuhů, llook, Rony). A jsem dost skeptický k tomu, že by Chamurappi, autor Webylonu, živější diskuzi na dávno probraná témata rozpoutal. I když bych mu to přál.

Deevangelizace

Ale pryč s pesimismem. Pokud Vaše sympatie patří sdružení W3C, rozhodně si přečtěte Webylonskou kritiku. Jednak má povídání originální styl a celé je prodchnuté starověkým Babylónem, za druhé je to jeden ze vzácných zdrojů alternativních názorů. Tím nechci říci, že s autorem vždy souhlasím, ale pro utvoření zdravého názoru je třeba slyšet výpověď více stran.

Rád bych citoval ze stránky Otázky víry, kde se Chamurappi vyjadřuje k otázce validity:

Bobřík validity – oběť už „umí“ a na svých webech se tím chlubí slavnými oranžovobílými ikonkami Valid! od W3C. A protože „umí“, tak si věří. A protože si věří, tak nevěří těm, kdo v neomyslnost konsorcia nevěří. Zuřivě odmítá jakékoliv proprietální možnosti konkrétních prohlížečů. Pojem „využití možností konkrétního prohlížeče“ jí zůstal v hlavě zafixován jako symbol zla a chyba těch, kdo nevěří.

Jako programátor rozumím validitě ve smyslu korektního zápisu. Validita se však stala modlou a jejím vedlejším projevem je pak sterilita. Všimli jste si, jak jsou si dnešní „hezké weby“ navzájem podobné? Tvůrčí invenci střídá ikonka Valid.

Lék na neexistující nemoc

Webdesign dle standardů je zatím utopií. Dnes se tvoří stránky především podle průniku schopností prohlížečů a ten se občas lehce roztáhne použitím hacku. Pokud si lépe přečtete předchozí citát, uvědomíte si, že Chamurappi volá po využívání možností všech prohlížečů. Tedy nikoliv průniku, ale sjednocení.

A jde ještě dál. Nabízí nástroj, která umožní takové weby snadno psát. Webylonský lék.

Revoluční přístup? Alternativní webdesign? Nejsem si jist…

Jaký je rozdíl mezi oním průnikem a sjednocením? Pro mě osobně téměř žádný. V graficky rozvernějších webech si rád hraji s průhledností a obarvím i scrollbar, a že je to za cenu ztráty validity CSS souboru mi skutečně žíly netrhá. Ale kam jít dál? Jaké další proprietární funkce využít? Třeba napsat flashový web a k tomu HTML alternativu? Ano, takovou blbost jsem před lety udělal. Jenže za cenu dvojí práce a jedněch peněz. Never more.

Je to asi díky praxi a zkušenostem, ale dnes na omezení prohlížečů nenarážím. Otevřu pověstný „notepad“ a píši. Necítím se omezován a tím pádem ani nemám potřebu použít Webylonský lék.

Krom toho, onen lék není nic originálního: server upraví dokument podle hlavičky user-agent. Trik je sice v podání Chamurappiho vyveden do dokonalosti, jeho použití však důrazně nedoporučuji. Kdysi jsem podobnou fintu také vyzkoušel a vracel prohlížečům různé verze .css souboru (zpracováním přes PHP), ale přestalo fungovat kešování. Naprogramoval jsem tedy v PHP kešovací modul, ale ten byl jen zdrojem dalších problémů.

Dvojí Webylon

Webylon jakožto kritik W3C je mi svým netradičním postojem přinejmenším sympatický. Toto je jeho silná parketa. Bohužel, v mých očích celý projekt shazuje onen „lék“. Jak už jsem uvedl, před několika lety to mohla být bomba, dnes je to krok zpět.

Přál bych Webylonu, aby se této rozdvojenosti zbavil. Ačkoliv tuším, že „lék“ existoval dřív než filozofický obsah webu, bylo by dobré jej nechat zmizet v propadlišti dějin a věnovat se odvážným myšlenkám. Otevírat lidem oči, zbavovat je zaslepenosti a inspirovat k diskuzi. Takový projekt by se mi líbil. A chybí tu jak sůl.

clock 21. 3. 2005 pencil HTML & CSS comments Komentáře: 13


Silná konkurence pro GeSHi?

Pokud jste se někdy zajímali o zvýrazňování syntaxe u publikovaných zdrojových kódů, nejspíš jste narazili na knihovnu GeSHi. Tento počin dvacetiletého Novozélanďana Nigela McNie si získal velkou oblibu a také jsem jej použil pro zvýrazňování kódu v Texy a zde na La Trine.

Jak je z tohoto příkladů patrné, GeSHi má velké problémy s kódováním UTF-8 (bohužel, autorův nativní jazyk je angličtina). Někdy vyhodí zcela nevalidní UTF řetězec, což představuje smrt pro striktní XML parser. GeSHi také není žádný rychlík, což by mi zas tak nevadilo – kešuji, kudy chodím.

Narazil jsem ale na jiný zvýrazňovač FSHL, jehož autor je „soused“ Slovák Juraj ‚hvge‘ Ďurech. Už na první pohled je patrné, že FSHL toho umí opravdu hodně. Všimněte si, jak ladně přechází mezi ‚podzimním‘ PHP do ‚jarního‘ HTML a ‚zimního‘ CSS. Barevné ladění je velmi příjemné. I když o to tady nejde.

A rychlost? Podle prvních měření je FSHL cca 10× rychlejší než GeSHi. Zbývá jen zjistit, jak je to s podporou UTF. A pak FSHL nasadím.

Aktualizováno: FSHL jsem už nasadil. Podpora UTF-8 se zdá být ok, jen je třeba nahradit volání htmlEntities(...) za htmlEntities(..., ENT_COMPAT, 'UTF-8').

clock 18. 3. 2005 pencil PHP comments Komentáře: 3


Regulární korektura Intervalu.cz

Regulární výrazy jsou vynálezem amerického matematika Stephena Kleene a troufám si tvrdit, že jsou starší než většina čtenářů La Trine. Pro nezasvěcené působí jako tajemné formule s magickou silou. Zdrojů, ze kterých se dají vědomosti o výrazech získat, je dost. Od vyčerpávající nápovědy v PHP, přes články až po knihy.

Člověk omámený kouzlem regulárních výrazů často propadne jejich nadužívání. Proto je škoda, že neexistují i tituly jako „Deset případů, kde se regexp absolutně nehodí“ nebo „Zpověď programátora: Už týden jsem nepoužil regulární výraz“ :-)

Nebudu zde vysvětlovat principy regulárních výrazů – všechny zájemce bych rád odkázal na seriál Miroslava Pecky, který právě vychází na Intervalu. Protože jsme v něm narazil na určitou nesrovnalost, připojuji tuto svou korekturu.

Kde se vloudila chyba?

V části věnované subvýrazům a zpětným referencím autor uvádí, že zpětné reference se zapisují ve tvaru \\n, kde n je číslo subvýrazu. K tomu mám vážnou námitku: zapisují se ve tvaru \n.

Svá slova potvrzuji tímto příkladem. Jasně demonstruje, že při užití \2 \1 vše funguje dle očekávání, zatímco \\2 \\1 ke zdárnému cíli nevede. Tedy rozdíl v jednom lomítku je skutečně zásadní.

Poznámka: V regulárních výrazech nesmírně záleží na každém znaku, včetně mezer, a tudíž není možné tolerovat jakoukoliv nejasnost. Hledání chyb ve výrazech je mravenčí práce a může vést až k nervovým kolapsům včetně nepříjemného regurgitačního uvolnění organismu.

Něco tu nehraje

Co je zajímavé, příklady uvedené v článku Miroslava Pecky skutečně fungují, i s oním dvojitým lomítkem. Jak je to možné? Je to díky určité shodě okolností.

Každý programátor PHP by měl perfektně ovládat zápis řetězců. PHP k tomuto účelu nabízí hned tři způsoby, nejčastěji se používají tyto dva: uvození řetězce do jednoduchých a dvojitých uvozovek. Důležité je vědět, že takto zapsaný řetězec ještě PHP určitým způsobem transformuje do finální podoby.

V těchto transformacích hrají důležitou roli právě zpětná lomítka. Pohledem na příslušné místo v dokumentaci PHP zjistíte, že zápis "\50" podléhá transformaci (viz escapování) a PHP jej nahradí za znak s kódem 50 v osmičkové soustavě, což je mimochodem levá závorka. Naopak při použití jednoduchých uvozovek k transformaci nedojde:

echo "\50";   // vypíše (
echo "\\50";  // vypíše \50
echo '\50';   // vypíše \50

Z příkladu je vidět, že nechtěné transformaci se lze vyhnout zdvojením zpětného lomítka nebo (lépe) nahrazením dvojitých uvozovek za jednoduché.

A tím se dostáváme zpět ke kritizovaným zpětným referencím. Protože autor používá ve všech příkladech řetězce s dvojitými uvozovkami, musí zpětná lomítka zdvojovat. Tedy zdvojení si vynucuje vlastnost PHP, která s regulárními výrazy absolutně nesouvisí. Kdyby použil uvozovky jednoduché, zdvojovat lomítko není třeba (avšak nevadí to). Ve všech dalších případech (syntax heredoc, načítání z databáze nebo souborů, mnou uvedený příklad) už vadit bude a příklady přestanou fungovat.

Závěr: Doporučuji regulární výrazy zapisovat opatrně a nejlépe s použitím jednoduchých uvozovek.

clock 22. 2. 2005 pencil PHP comments Komentáře: 9


Texy! tak a je to venku!

Texy is sexy Texy! už žije a má se čile k světu!

Když jsem si pročítal Vaše e-maily a ohlasy týkající se Texy!, uvědomil jsem si, že se zrodil zajímavý fenomén. Texy! se stal symbolem, Godotem, na kterého spousta lidí čeká. Mnohdy netrpělivě. Některé weby s Texy! počítají jako cestou budoucího vývoje, jiné jej dokonce už nasadily. Četl jsem názor, že Texy! odstartuje revoluci v oblasti CMS a nahradí WYSIWYG editory. A naopak jiný chlapík se ptá, zda bude mít Texy! i WYSIWYG? „Cekam na to jako na smrt!“ zaznělo v komentářích.

Vzhledem k tomu, že o Texy! byl donedávna publikován jen jeden jediný článek a nikdo jej neviděl, je to výborné skóre :-)

Texy! už je sexy

Takže odedneška je Texy! oficiálně venku. Zatím v betaverzi, je třeba vychytat chybičky, doladit syntax. Proto budu rád, když jej podrobíte náročným zkouškám. V betaverzi je i samotný web. Chci vylepšit texty, stránku Syntax rozdělit na více menších a možná i přidat fórum.

O výběru licence jsem už dříve informoval, nakonec jsem zvolil duální model – GPL + komerční licence. Takže jej můžete zdarma používat pro svou potřebu (budu rád za link) a můžete jej zahrnout do svých GPL aplikací. A pokud jej chcete implementovat ve svém komerčním CMS, kontaktujte mě a domluvíme si podmínky zvláštní licence.

A abych nezapomněl: najde se někdo s výbornou znalostí angličtiny (případně jiného jazyka), který by mi za cenu zveřejnění jména s odkazem a z toho plynoucí věčné slávy pomohl s překladem? Díky :-)

Sponzor hostingu

Zároveň bych tímto rád poděkoval Českému hostingu, který hosting sponzoruje. Jejich služby se mi velmi líbí, klientskou sekci mají vyřešenou doslova příkladně. Vše navíc za výbornou jednou cenu. (tohle nepíšu, protože bych musel, ale protože to JE můj názor – služby mi nabídli zcela nezištně)

A ještě pár odkazů:

clock 8. 2. 2005 pencil Texy! comments Komentáře: 17


Klonování, PHP4 a jeden hack

PHP 4  → 5 Kvůli převaze hostingů podporujících PHP jen do verze 4, programuji zatím stále v této překonané verzi. A je to občas utrpení, cpát všude & a přitom vědět, že v PHP 5 už nemusím.

Nicméně programovat v PHP 4 se dá s vědomím dopředné kompatibility, už jsem o tom jednou psal. Dnes jsem však narazil na zajímavý oříšek.

Potřeboval jsem naklonovat objekt, říkejme mu třeba $dolly. PHP4 má tendenci klonovat jakýkoliv objekt, který mu přijde pod ruku. Tedy stačí napsat $klon = $dolly a je hotovo. Protože však klonování není přesně to, co programátor v naprosté většině případů očekává (a navíc je to v Evropské unii zakázané), je třeba v přiřazení použít symbol reference: $klon = & $dolly. PHP5 tuto nutnost eliminuje a zápis $reference = $dolly vytvoří automaticky referenci. Ale to už určitě dávno víte.

Kompatibilní klonování

Dobrá, a co když skutečně chci v PHP5 $dolly naklonovat? K tomuto účelu slouží zcela nová konstrukce:

$klon = clone $dolly;

Bohužel, PHP4 si na tomto zápisu vyláme zuby, ohlásí Parse error a odporoučí se do věčných lovišť. A teď babo raď, jak napsat kód, který by fungoval v obou verzích?

První myšlenka byla příkaz do zdrojového kódu vložit jako řetězec (vyhnout se parseru) a pak jej spustit přes eval(). Ale nakonec mě napadlo, že přece zápis $dolly a ($dolly) je ekvivalentní. Ozávorkováním nic nezkazím. Takže v PHP5 lze klidně napsat také:

$klon = clone ($dolly);

A co na to PHP4? Ve své dětinské naivitě myslí, že tímto zápisem volám funkci clone(). Takže parse error je zažehnán a stačí jen deklarovat funkci clone(). Samozřejmě jen pro PHP verze 4:

if (PHP_VERSION < 5) eval('
    function clone($obj)
    {
        return $obj;
    }
');

That's all folks…

clock 25. 1. 2005 pencil PHP comments Komentáře: 8


phpFashion © 2004, 2012 David Grudlo webu

Pokud není uvedeno jinak, podléhá obsah těchto stránek licenci Creative Commons BY-NC-ND Creative Commons License BY-NC-ND

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