Odhalení: Yuhůů je kouzelník!

11.10.2004 23:40

MerlinTo si takhle jdu udělat kolečko po oblíbených webech abych zjistil, co je kde nového. Už poměrně unaven věčnou diskusí o HTML vs XHTML si v klidu otevřu Yuhůův weblog a hle, co se nestane.

Z ničeho nic se v system tray (tam jak jsou ve Windows hodiny, den a někdy i datum) objeví takový ten kouzelník z Windows (možná ho znáte z prvního spuštění úžasného webového WYSIWYG editoru, který se jmenuje MS Word). Ten kouzelník se oficiálně jmenuje Merlin. Lehce zmateně koukám, a kouzelník povídá…

“ťukat na sklo, počet: 2″
“Vysvětlení bude. Bez obav Vy nebát se."
“Vy máte stáhli jste sobě Internet Explorer 7 verzi testovací ještě beta. Nové! Děkujeme pro automaticky stáhlo."
“Internet Explorer obsahuje velmi více zabezpečení než dříve. To už předtím bylo dokonalý, je to ještě více dobrý nyní."

… a tak dále plno dalších zajímavých informací.

Po vyslechnutí celého projevu mi poněkud začalo vrtat hlavou, kde se Merlin vzal, tak z ničeho nic. Raději jsem rychle vypnul prohlížeč. Po ověření, že Windows Downgrade žádné nové chyby do systému nezanesl jsem se zalekl možné virové infekce. Také bez úspěchu, žádný vir Merlin neexistuje, a tak mě napadá, že mi někdo hacknul počítač. Prověřil jsem svůj Icewall - mlčí, nic se neděje. Ani žádné podezřelé programy neběží. Tato možnost již taky není pravděpodobná.

Vracím se na Yuhůův weblog, chci si konečně přečíst článek a co se nestalo - Merlin se znovu ukázal. Tentokráte již zcela mlčel a nešlo z něj dostat ani slovíčko … ani velmi intenzivní klikání nepomohlo. V ten moment mi přišlo divné, že se ukázal pouze na YB (Yuhůův weBlog). Napadlo mě prozkoumat zdrojový kód a hledat výskyt javascriptů. Narazil jsem na divně vyhlížející iframe, který měřil statistiku javascriptu a iframe, navíc pouze pro IE. Tato divná kombinace mě donutila podívat se na zdrojový kód iframu. V jeho kódu jsem až napodruhé nalezl velice šikovně ukrytý záškodnický skript, který ovládal kouzelníka Merlina. Tento skript využívá dokonalého zabezpečení majoritního prohlížeče (však víte jakého), který je opravdu bez chyb a stojí za to ho používat.

Pokud se chcete podívat na Merlina osobně, použijte prohlížeč (víte jaký) a otevřete si tuto stránku na YB. Yuhůů se v podobě kouzelníka již těší na návštěvu u vás, ve vašem počítači!


Pod čarou: Doufejme, že naše oblíbené IE vymře co nejrychleji a začnou se trošku více používat alternativní prohlížeče jako Mozilla (Firefox) či Opera. Kampaně podobné té, co udělal Yuhů by jistě mohly pomoci.


Seznam oficiálně spustil svůj herní server

02.10.2004 15:56

Ve čtvrtek portál Seznam.cz oficiálně spustil svůj herní server (katalog her) Hrej.cz. Server je nyní ve stádiu beta verze, ale zjevně je již ve velice dobré kondici, protože neoficiálně byl již spuštěn cca před 2 měsíci. V té době se ještě dolaďoval design a tvořil obsah (alfa verze?), viz článek o Hrej.cz, který napsal Tomáš Hoboď na svém weblogu.

Sem tam si pro odpočinek zahraji nějakou tu hru, tudíž musím navštěvovat herní servery (bonusweb.cz, games.tiscali.cz, doupě.cz a další), abych zjistil co je nového a jaká hra je dobrá.

Rychlost, přehlednost

Co se mě osobně na Hrej.cz líbí nejvíce je jeho rychlost a přehlednost. Design je kompletně dělaný (jak jinak, že ?:)) pomocí kaskádových stylů s maximálně optimalizovaným HTML kódem a bez zbytečných mini obrázků. Stačí se podívat na konkurenci, kde musím čekat několik sekund, abych vůbec něco viděl a to nemluvím o recenzi, jejíž otevření na horším připojení zabere tolik času, že bohatě postačí na připravení výborné kávy. Určitě je také velké plus, že server je nyní prakticky bez reklam (kromě jedné v horní části stránky), to se ale zřejmě časem změní, ostatně z něčeho se server zaplatit musí.

Informace o hře jsou velmi netradičně rozděleny do několika sekcí - záložek, ve kterých si přečtete základní informace o hře a její hodnocení, prohlédnete screenshoty, stáhnete si video nebo demoverzi, češtinu do hry nebo se v diskusním fóru zapojíte do debatování.

Design serveru

Jako u konkurence je design serveru v tmavých barvách. Chápu, že obrázky na tmavém pozadí vypadají pěkně, ale zase se mi na něm o poznání hůře čte text a musím si ho myší označovat. Mě osobně tmavé barvy příliš nevyhovují, protože většina webů a aplikací se kterými běžně pracuji má světlé nebo bílé pozadí, a poté otevření “černého" serveru je docela výrazná rána :) Nicméně proti gustu žádný dišputát (miliónová to věta ;) ). Možná by nebylo od věci využít sílu kaskádových stylů a doplnit “featuru", která by umožňovala vybrat si jiné (světlé) barevné schéma webu. Mohla by to být třešnička na dortu, která by pomohla server lépe odlišit od “šedé" konkurence.


Zkratkové klávesy ve webové aplikaci snadno a rychle

18.09.2004 14:41

Na webu již několikrát proběhla diskuse o používání accesskey, někomu accesskey nevadí a používá je, někomu vadí a zaklíná je. Já si osobně myslím, že mohou být poměrně užitečné. Tento spot ovšem není o accesskey, nýbrž o zkratkových klávesách pomocí javascriptu, které jsou využitelné především u webových aplikací, nebo ještě lépe v administračních rozhraních.

O co jde

Jak jsem již zmínil, zkratkové klávesy lze vytvořit snadno pomocí accesskey, nicméně accesskey má značná omezení - jako zkratky se dají použít pouze znaky nebo číslice a nelze navázat na libovolný prvek HTML. Když se ovšem podíváme na možnosti javascriptu, tak zjistíme, že existuje událost OnKeyDown (pro IE, jinak OnKeyPress v Gecko), pomocí které se velice snadno dá zjistit, jakou klávesu uživatel stiskl. A odtud je již velice blízko k vytvoření užitečných zkratek často používaných funkcí např. v rozsáhlém redakčním systému nebo administračním rozhraní.

Např. pomocí této události lze velice snadno realizovat odeslání formuláře stisknutím kláves CTRL+S, aniž by záleželo kde má uživatel momentálně focus (ve stránce, v inputu nebo třeba v textarea), aby mohl stisknout ENTER a klasicky formulář odeslat. Stejně tak lze aktivovat skripty ve stránce, provádět přesměrování či cokoliv vás napadne.

Příklad použití

Podívejte se na jednoduchý příklad. Zastávám názor, že jasný a jednoduchý příklad použití a zpracování události OnKeyDown (okomentovaný ve zdrojovém kódu) řekne více než tisíc slov.


Efektivní rollover (hover) na řádku tabulky

05.08.2004 15:27

V poslední době pozoruji takový zajímavý trend. Když vytvářím nějaký web, který má tabulkový výpis dat, tak zpravidla od grafika dostanu návrh, ve kterém je krásně namalovaná tabulka s ukázkou rollover efektu na řádku. Nemám nic proti tomuto efektu (spíše “feature"), je to IMHO velice užitečná věc a uživatel se v případě delšího řádku neztratí, ale chtěl bych se spíše zajímat o tu technickou, realizační, část.

CSS a JavaScript

Jednoduché řešení je v nových prohlížečích, které podporují CSS vlastnost :hover na jakýkoliv prvek. Toto řešení ovšem v současné době je téměř nepoužitelné. Proto se musím odklonit k javascriptu a DOM, který dokáže poměrně spolehlivě pomoci. Zkoušel jsem několik řešení a sledoval, jak jednotlivé řešení zatěžuje CPU. Jen pro informaci - měření bylo čistě subjektivní, bez použití jakýchkoliv speciálních nástrojů nebo utilit a testoval jsem vždy jen IE (pokud nejste jeho fanda, tak máte smůlu, ale zatím ho má pořád většina běžných uživatelů).

Příklady

Všechny příklady mají stejný základ. Chci měnit podbarvení tabulky nezávisle na barvě, kterou řádek měl předtím. Pokud by tabulky byla “zebrovaná", znamenalo by to samozřejmě jisté komplikace kódu, ale velký problém to není. Dále by bylo ideální řešení, které by umožňovalo barvu hover efektu měnit z externího stylového předpisu. Data pro ukázkovou tabulku jsem získal z webu Yuhůa.

Řešení 1

Snad téměř nejkratší řešení co se týče velikosti skriptu, používá barvu ze stylového předpisu a řádku při onmouseover přiřadí třídu “aktivni".

<script type="text/javascript">
function highlight_row(obj,w) {
    if (w == 1) obj.className = 'aktivni';
    else obj.className = '';
}
</script>
# řádek v tabulce: #
<tr onmouseover="highlight_row(this,1);"  onmouseout="highlight_row(this,0);">

Použití na ukázkové stránce (příklad 1). Technicky ideální řešení, ale při testu se ihned ukáže, že už při pomalejším pohybu kurzorem nad tabulkou je vytížení CPU na 100%.

Řešení 2

U toho řešení jsem zkusil jít zcela jinou cestou. Další možnost je měnit pozadí pomocí vlastnosti background-color na buňce v tabulce. Když jsem zkoušel měnit pozadí na řádku (tr) přes javascript, tak to prohlížeč tvrdošíjně odmítal, na rozdíl od buňky (td).

<script type="text/javascript">
function highlight_row(obj,w,color){
    var tds = obj.getElementsByTagName('td');
    for(i=0;i < tds.length;i++) {
        if (w == 1) {
            tds[i].style.backgroundColor = color;
        } else tds[i].style.backgroundColor = "";
    }
}
</script>
# řádek v tabulce: #
<tr onmouseover="highlight_row(this, 1, '#CCFFCC');" 
    onmouseout="highlight_row(this, 0, '#CCFFCC');">

Ukázková stránka (příklad 2). Z ukázkového skriptu je zřejmé, že je nutné barvu definovat v HTML, což není úplně to, co by jsem chtěl. Co se týče CPU, tak tento příklad je na tom velmi dobře a potřebuje k provozu cca 20-30% CPU.

Řešení 3

Vycházel jsem z příkladu 2. Cílem bylo získat barvu pro řádek tabulky z CSS. Díky funkcím getComputedStyle (Gecko) a currentStyle (IE) se mi podařilo získat potřebnou barvu ze stylového předpisu a aplikovat jí na řádek v tabulce. To si ovšem vyžádalo pomocný prvek ve stránce, který má nadefinovanou barvu, kterou si javascriptem přečtu.

<script type="text/javascript">
var hover_color = null;
function highlight_row(obj,w){
    if (hover_color == null) hover_color = getStyle('hover', "color");
    var tds = obj.getElementsByTagName('td');
    for(i=0;i < tds.length;i++) {
        if (w == 1) {
            tds[i].style.backgroundColor = hover_color;
        } else tds[i].style.backgroundColor = "";
    }
}   
function getStyle(el, style) {
    if(!document.getElementById) return;
    el = document.getElementById(el);
    var value = el.style[style];
    if(!value) {
        if(document.defaultView)
            value = document.defaultView.>
            >getComputedStyle(el, "").getPropertyValue(style);
        else if(el.currentStyle)
            value = el.currentStyle[style];
        return value;
    }

}
</script>
# řádek v tabulce: #
<tr onmouseover="highlight_row(this, 1);" onmouseout="highlight_row(this, 0);">
# pomocný prvek #
<span id="hover"></span>

Vše je dobře vidět na příkladu 3. Rychlost je téměř stejná jako u příkladu 2 a navíc máme barvu z CSS. Dle mého názoru zatím nejpřijatelnější řešení. Sice sebou nese nutnost definovat barvu v nějakém prvku ve stránce, nicméně nemusíme vůbec sahat do HTML pro případ změny barev. Co se týká podpory v prohlížečích, tam kde se neujme javascript, lze použít klasickou vlastnost :hover v CSS.

Doplněno 6.8.2004:


Příklad 4

Honza Dvořák mi emailem poslal výborný tip díky kterému jsem udělal další řešení, viz. příklad 4. Na tomto řešení je perfektní, že nemusíte vypisovat inline volání javascriptových funkcní na každém řádku, ale funkce zavěsíte pomocí jednoduchého JavaScriptu automaticky na všechny řádky tabulky. Navíc zavěšování proběhne pouze v IE.

<script type="text/javascript">
var hover_color = null;
function highlight_row(obj,w){
    if (hover_color == null) hover_color = getStyle('hover', "backgroundColor");
    var tds = obj.getElementsByTagName('td');
    for(i=0;i < tds.length;i++) {
        if (w == 1) {
            tds[i].style.backgroundColor = hover_color;
        } else tds[i].style.backgroundColor = "";
    }
}
function getStyle(el, style) {
    el = document.getElementById(el);
    var value = el.style[style];
    if(!value) value = el.currentStyle[style];
    return value;
}
function hover_init() {
    if (document.all && document.getElementById && !window.opera) {
        table = document.getElementById('htabulka');
        trs = table.getElementsByTagName('tr');
        for(var i = 0; i < trs.length; i++){
            trs[i].onmouseover = function(){ highlight_row(this,1); }
            trs[i].onmouseout = function(){ highlight_row(this,0); }
        }
    }
}
window.onload = hover_init;
</script>
# řádek tabulky #
<tr>

Vzhledem k tomu, že řešení vychází z příkladu 3, je vytížení CPU minimální. Co se týče ostatních prohlížečů, je to již kompletní a funkční řešení. Již se těším, až budu moci tento způsob použít na nějakém webu.


Vzduch v kódu (HTML a CSS)

05.08.2004 10:15

Honza Hučín na Yuhůově webu před několika dny publikoval článek “Vzduch v kódu".

V tomto zajímavém článku popisuje kompresní nástroje, pomocí kterých je možné "zkomprimovat" HTML kód odstraněním přebytečných mezer a řádků. V některých případech lze tak ušetřit několik procent z velikosti stránky. Z vlastních zkušeností vím, že je nejlepší takovou "kompresi" (lépe řečeno optimalizaci) provádět pomocí šablonovacích systémů, ale když nemáme podobný nástroj k dispozici, tak existuje plno softwaru, který kód dokáže odlehčit, viz. Honzův článek.

Ovšem ještě bych chtěl doplnit, že komprimovat se nemusí pouze HTML kód, ale i CSS. Před časem jsem publikoval článek o CSS komprimátoru, který si můžete hned stáhnout a začít styly komprimovat, pokud to již neděláte :)

Pozn.: Jak jsem se dnes koukal, CSS komprimátor již běžně používají portály Centrum a Seznam.