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.
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').
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.
Texy! tak a je to venku!
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ů:
- deToxy! neoficiálně: zpětný konvertor (z HTML do Texy!)
- proč se WYSIWYG pro web nehodí
- a malá exkurze pod pokličku převaděčů
- zdrojový kód tohoto článku
Klonování, PHP4 a jeden hack
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…
novější články
