sobota 2. srpna 2003

Výpadky Dagblogu

Včera 1.8.2003 se objevily drobnější výpdaky Dagblogu, které mimo jiné způsobovaly zobrazeni historických stránek na úvodní stánce. Tato nepříjemnost byla způsobena výpadky funkčnosti publikačního systému Dagblogu resp. funkčnosti Bloggeru. Dnes už se podařilo publikovat úvodní stranu korektně.

pátek 1. srpna 2003

Intel podporuje Javu

Intel se rozhodl vstoupit do vývojářského konsorcia Eclipse jako podporující člen. To je samo o sobě dobrou zprávou. Obzvláště uvážíme li jeho mnohaletou podporu Microsoftu a jeho vývojových platforem, v podstatě můžeme říci, že Intel otevřeně podporuje Javu.

Intel se tak postavil po bok firem jako je IBM a Sun Microsystems. Není snadné říci co tímto krokem Intel sleduje, ale těžko se můžeme domývat, že jedinou pohnutkou je podpora Javy a komunity kolem.

Dle mého skromného názoru se jedná o krok, který směřuje k "infiltraci" trhu s přenosnými(PDA,handhlady,mobilní telefony) zařízeními, kde se Java lépe řečeno MicroJava solidně prosazuje. Více informací přináší server internetnews.com Intel Joins Eclipse Consortium odkaz via. Rudánek

Servlet specifikace 2.4 podrobněji

Připravovaná Servlet specifikace 2.4 (viz. Dagblog 10.4.2003) pomalu spěje k finalnímu doporučení. Marek Branický se podrobně zaměřil na popis připravovaných změn v článku Preview špecifikácie Java Servlet 2.4 . Článek jen doplním o informaci, že HTTP server a servletový kontejner Jetty počal pro verzi 5.0 vývoj podpory této specifikace.

čtvrtek 31. července 2003

Základní znalosti v objektových technologiích

Ilja Kraval na serveru Objects.cz publikuje úvahu na téma Jaké znalosti byste v objektových technologiích v žádném případě neměli opominout? Mimo jiné bych si dovolil vyzvednout důležitou otázku rozdělení pracovníků v projektu na skupinu

  • analytik
  • designér
  • programátor
  • vedoucí projektu

a jejich základní znalosti v bodech

  • 1: Velmi dobré zvládnutí objektově orientovaného přístupu a objektového myšlení
  • 2: Objektové modelování a UML
  • 3: Základní principy postupů tvorby systémů v objektově orientovaném prostředí
  • 4: Design Patterns (návrhové vzory) v OOP

Nezapomíname?

Hynek Hanke navázal na svoji zdařilou sérii článku o svoboddném software(Free Software) a seriál Hacky a hackeři. pokud se vám pojmy jako Open Source a Free software míchají dohromady a nevíte přesně o co se jedná pak seriály vřele doporučuji. Hynek Hanke je opravdů vytříbený vypravěč.

V článku Nezapomínáme? přináší zamyšlení nad podstatou svobodného software a hlavně šíření jeho myšlenky dál. Té myšlenky, která postupem času zapadá v závějích prachu. Dovolím si malý citát z článku...

Troufnu si říci, že dnes již ani většina uživatelů svobodného software netuší o jeho podstatě a o staré hackerské kultuře, natož pak ostatní lidé. Uživatelé GNU/Linuxu v něm vidí pouze technicky vyspělejší systém nebo jim bližší technickou filosofii, nikoliv už nějaké poselství -- o svobodě, o sdílení informací, o otevřenosti a spolupráci. Je právem každého uživatele se od těchto cílů z nějakého důvodu odvrátit, např. jistá skupina začala záměrně používat termín ,,Open Source'', aby se těmto otázkám vyhnula, ale je škoda, když se o nich lidé ani nedozvědí, aby měli možnost je akceptovat, nebo zavrhnout.

úterý 29. července 2003

pondělí 28. července 2003

"Hackujeme" getElementById korektně!

Ne a ne a ne, chystám se vykřičet a omílat dokola. Občas se stane, že někdo vymyslí zlepšní(hack), které nám poskytné jednoduší život. Mezi ty nejznámější patří tzv. Tantek Celikuv CSS "hack" sloužící k nastavení šířky elementu(nebudu dále rozebírat) a "hack"(autor nenalezen), který slouží k "implementaci" metody document.getElementById(String idname) přes document.all v prohlížečích, kde není implementována např. Internet Explorer 4.01.

Nahrazení má takovouto formu document.getElementById = document.all;. Zdá se Vám něco divného? Největší problém nastává v rozdílném chování obou metod na specifickém případě, jako je vrácení prvku s duplicitní hodnotou atributu id. Podle specifikace DOM by tato metoda měla vracet v případě, že se nachází v dokumentu více elementů se stejným atributem id hodnotu null nebo první prvek z této kolekce(tak se chová většina prohlížečů).

Naopak document.all se chová jinak. V případě, že atribut id je jedinečný vrací opravdu jeden objekt, ovšem v případě duplicity vrací pole a to už je problém.

Očekáváme li někde ve skriptu objekt a pracujeme s ním tak a vzápětí dostaneme pole(specifický objekt Array) musíme se připravit na chybu a v horším případě na nefunkčnost skriptu . Samozřejmě tento případ se týká těch kdo nepíší stránky validní.

Opravdu korektní náhrada, není nijak těžká

document.getElementById = new Function("idname","kp=document.all(idname);if (kp==null) return null;if (kp.length)return document.all(idname)[0];return document.all(idname);");

V podstatě stačí přidat test jestli document.all vrátilo pole nebo objekt a v případě pole vrátit jeho první člen. Možná se ten problém nejeví akutní a možná opravdu není podstatný, ale pouhé přiřazení není korektním řešením.

Správná detekce prohlížeče

Martin Kopta má určitě pravdu když tvrdí, že kolekce document.all jednoznačně neidentifikuje prohlížeče z rodiny Internet Explorer.

Jedná se v podstatě o problém kdy potřebujete zjistit, na straně klienta, verzi jeho prohlížeče a například se rozhodnout jakou část kódu použijete. Nezřídka se stává, že prohlížeč nepodporuje nebo špatně implementuje standardní metody DOM nebo jiné technologie a je třeba využít jeho vlastní specifické řešení.

Mezi nejobvyklejší detekce prohlížeče z rodiny Internet Explorer patří test na kolekci document.all. Povětšinou v následujícím provedení

 
   if(!document.all){
     //standardni vetev kódu
   }else{
     //proprietární využití pro IE
   }
 

Právě zmíněná konstrukce nám ovšem do větvě pro Iinternet Explorer pošle např. i prohlížeč Opera, který na document.all vrací Object a tudíž se může dostat části, která může způsobit chybu.

Z výše uvedeného vyplívá, že se vyplatí testovat opravdu na specifické(proprietární) vlastnosti dané implementace JavaScriptu resp. JScriptu nebo technologie. Zmíněná Opera by se měla bezpečně detekovat na voláníwindow.opera. Internet Explorer 4.01 lze detekovat na window.print u vyšších verzí Interent Exploreru bych naopak doporučoval použití specifické implementace událostí (objekt Event). Více k tomuto tématu přináší Eddie Traversa v článku Object Detection in the New Browser Age

Otázkou zůstává, jak se postavit k detekci novějších verzi, které mohou proprietární technologie opustit? Avšak to se například z důvodů zpětné kompatibility nedá očekávat. Problém bych řešil vždy na konkrétním případu, vždyť chyba nebo odlišnost se vždycky najde....

Keep JavaScript Simple, asi jak kde a jak kdy

Provozujme JavaScript jednoduše nebo spíše zapomeňte na objektové konstrukce, zapomeňte na přídavné knihovny a pište jednoduše, tak radí Peter Paul Koch v článku Keep JavaScript Simple(via.Sova v síti Proč ne javascritpové knihovny).

Krásně se to čte má to, ale jedno nepostradatelné ale. Zakopaný pes, je v pohledu na danou problematiku. Pokud se díváme na "web" z aplikačního pohledu pak knihovny, objekty a další pokročilejší programátorské techniky opodstatnění určitě mají. Zvyšují nejen flexibilitu kódu, ale i jeho znuvupoužitelnost sdílení a úpravu. Samozřejmě vždy záleží na konkrétní implementaci daného problému.

Řekneme li A musíme říci Ba to mi trochu v článku chybí.