pondělí 29. prosince 2003

Nyní příchod tygra - Java[tm] 2 SDK, Standard Edition 1.5.0 Alpha

Sun opravdu nelhal když tvrdil, že toužebně očekávaná Java 1.5 bude do konce roku 2003 dostupná alespoň v alfa verzi. Early Access - Java[tm] 2 SDK, Standard Edition 1.5.0 Alpha a můžeme začít s tygrem.

Další komentáře

Javadoc zdarma

Pokud jste si někdy stáhnuli SDK Javy ze stránek Sunu, tak jste byli více méně vystaveni před nutnost stáhnout si i javadoc tj. dokumentaci k základnímu API Javy. Ostatně není se čemu divit, komprimována dokumentace verze 1.4.1_02 zabírá celých 33 MB. Velikost celého balíku(SDK+dokumentace) by narostla někam k 80 MB, což určitě není málo.

Michaela Nascimento Santose zřejmě nelimitovala přenosová rychlost, ale nedostupnost dokumentace a tak si poradil naprosto logicky. Dokumentace k API se vytváří ze zdrojových souborů, kde se píše javadoc k API. Součástí SDK jsou samozřejmě i zdrojové kódy a tak Michael Nascimento Santos vytvořil jednoduchý antovský skript, který z nich dokumentaci za pomoci standardních javovských nástrojů vytvoří. Vše publikoval ve spotu Building javadoc from J2SDK source code

Cache a webové aplikace

Dříve nebo později je většina webových aplikací postavena před problém cachování objektů. V podstatě existují dvě cesty, ta první zrádnější, cache si vytvoříme sami a ta druhá, použijeme dostupné cache frameworky. Pokud se chcete vydat první cestou pak začněte specifikací Object Caching Service for Java. V případě, že hledáte existující framework, který by jste nasadili pak můžete začít článkem Srini Penchikala Object Caching in a Web Portal Application Using JCS.

pondělí 22. prosince 2003

Projekt Apache Logging Services

Pod křídly Apache Software Foundation byl představen návrh na vytvoření Apache Logging Services. Cílem tohoto projektu bude vytvořit jednotné, platformově a jazykově nezávislé logovací prostředí vycházející z projektů Log4Perl, Log4Net, Log4Cxx (c++), Log4CPlus, Log4PHP a Log4plsql. Osobou, která bude celý projekt zaštiťovat není nikdo jiný než Ceki Gülcü(vyjádření k projektu) autor, v javovské komunitě tolik populárního systému, Log4j.

Struts, komentovaný příklad

Struts, komentovaný příklad I - základ aplikace je první článek ze série začátečník začátečníkům z rukou Petra Pinkase. Článek je čistě prakticky orientovaný, žádná teorie prostě ukázka jednoduché webové aplikace včetně nasazení(deploying) aplikace v rámci servletového kontejneru.

pátek 19. prosince 2003

Flex a web appliaction framework

Nad technologií Flex firmy Macromedia, jsem se rozplýval již mnohokrát. Flex může přinést řešení, které bude co do vývojové platformy, prohlížeče a klientského zařízení absolutně přenositelné. K úspěchu Flexe určitě přispěje i všudypřítomné rozšíření Flash playeru na klientech.

Otázkou pro mě osobně byl způsob, jak spojit stávající řešení webových aplikací s technologií FLex. Výhodou Flexe je to, že nenarušuje nijak stávající model webových aplikací a tvoří vrstvu, která se, zjednodušeně řečeno, zasune na úroveň view na straně serveru.

Propojení s frameworky Struts nebo OpenSymphony může být realizováno několika způsob.

Jak je vidět Flex bude nabízet velice slušnou paletu kooperace se stávajícími frameworky. O použití Struts v kombinaci s Flexem se rozepsal Christophe Coenraets v článku Providing a Flex Front End to Your Struts Applications.

Jedinou vadou na kráse, je oficiální vypuštění technologie Flex do světa. Na oficiálních stránkách Macromedia se mluví o první polovině roku 2004. Nyní je Flex dostupný pouze pár vyvoleným v beta programu, což naštvalo asi nejen mě. Vyjádření k beta programu najdeme ve Weblogu Macromedie Flex Beta Process.

čtvrtek 18. prosince 2003

Návrhový vzor MVC

Návrhový vzor MVC se nejčastěji spojuje s aplikací na infrastrukturu serlvetu. MVC byl a je původně určen k snížení složitosti uživatelského rozhraní u rozsáhlých a komplexních informačních systémů.

Správná aplikace návrhového vzoru MVC by měla u daného systému splňovat pět základních kritérií

  • Jednoduší změna chování
  • Možnost rozdělení do modulárních subsystémů
  • Transparentní chování subsystémů
  • Modulárnost subsystému(plug&play)
  • Schopnost dále se rozrůstat

N. Alex Rupp řeší v článku Beyond MVC: A New Look at the Servlet Infrastructure aplikaci MVC na servletovou infrastrukturu a upozrňuje na její nekorektní použití na příkladu tolik populárním frameworku Struts.

Článek se dotýká historických okolností vzniku návrhového vzoru MVC a specifikuje požadavky, které musí splňovat korektní implementace. N. Alex Rupp nezůstal pouze u teorie a prezentuje představu o správném použití MVC v prostředí webové vrstvy.

středa 17. prosince 2003

Porovnání bezpečtnosti platformy Java a .NET II

Denis Piliptchouk se v článku Java vs. .NET Security, Part 2 ze série o porovnání bezpečtnostních aspektů platforem Java a .NET, pustil do tématu podpory kryptografického "náčiní", jejich konfigurace a použití.

související odkazy

pondělí 15. prosince 2003

Robocode - naučte se Java na výukové hře

Robocode je výuková hra z dílen IBM simulující bitvu robotů, která pomáhá při prozkoumávání jazyku Java. Dalo říci by se říci, že se jedná IDE, která Vám zároveň umožní tvořit a spravovat vlastní roboty, které budete vypouštět do tankových bitev v tomto prostředí. Nebojte se, hra je určená pro začátečníky a tak stačí oddědit vlastního robota a hurá do bitvy. Podrobněji se rozepsal Martin Švihla na root.cz v článku Robocode - Java hrou. Už se těším na večer až otestuji prvního bota.

neděle 14. prosince 2003

Konference XML 2003

Pohled na XML 2003 konferenci, která se koná v Philadelphii, přináší Michael Champion. První den se nesl ve znamení XML metadat, které by se měly stát součástí všech budoucích XML dat.

XML metadata ve spojení s technologiemi(XPath..), které máme v rukou dnes, by mohly tvořit základ pro budoucí výměnu informací. Samozřejmě nejen pro výměnu, která bude jen špičkou ledovce, ale i agregaci, vyhledávání a další strojové zpracování. Pro mě osobně jsou tyto indicie příznakem, že se dnešní web bude kousek po kousku posouvat k sémantickému webu.

Články na víkend

Nepravidelná rubrika přinášející tipy na články a počtení o víkendu, je tento týden spíše ohlédnutím za zajímavými články.

čtvrtek 11. prosince 2003

Programujeme LEGO stavebince

Takřka pokaždé když se synovcem mé přítelkyně stavíme(tedy já stavím a dávám mu rady) z LEGO stavebnice , mám nutkání zatlačit slzu v oku při vzpomínce na báječná dětská dobrodružství, která jsem zažil se stavebnicí LEGO. Prakticky mě stačilo někam posadit, šoupnout LEGO a byl klid.

Dnes už se snad ani LEGU nedá říkat stavebnice, spíše se jedná o celé systémy. Opravdu mě překvapila informace, že LEGO systémy Robotics RIS (Robotics Invention System 2.0™) lze propojit z PC, nainstalovat patřičný software a stvořená monstra ovládat programově.

Ba co více, RIS obsahuje vlastní grafický programovací jazyk RCX Code. Robotics Invention System 2.0™ - Stručný návod napsal na a vlastních stránkách věnovaných stavebnicím LEGO publikoval Robert Seifert. Škoda ceny stavebnice jenž se pohybuje kolem 200$ a pravděpodobnými problémy s distribucí po ČR, ale lákadlo je to jako hrom.

Bug patrol aneb hledáme a odstraňujeme chyby systematicky

Chyby jsou součástí všeho co děláme, chyby v aplikacích jenž vyvíjíme jsou nedílnou součástí vývojového procesu. Postupy usnadňující odhalení chyb jsou všeobecně známé, jedná se například unit testing apod. Na druhou stranu jsou ještě procesy, které nám pomáhají chybám předcházet. Do této kategorie lze zařadit nástroje, které analyzují napsaný kód a hledají ty části, které by nám mohly způsobit vznik chyby.

Článek Joe Walkera Bug patrol - Automate your software improvement process je o chybách a nástrojích, které umožňují analyzovat kód a předcházet chybám hned v jejich prvopočátku. Mnoho z těchto nástrojů může být integrováno přímo do vývojového prostředí a může být zapojeno přímo při kompilaci. Tímto způsobem využívám PMD plug-in ve vývojovém prostředí Eclipse. Navíc většina nástrojů lze spouštět jako úlohy pro Ant, což umožňuje testovat kompletní kód v určitých fázích vývoje.

pondělí 8. prosince 2003

Pár linků

Evoluce webových aplikací ve znamení RIA(Rich Internet Appliactions)

Mnoho současných webových aplikací, naráží se stále vzrůstajícími požadavky na hranice technologie, kterou poskytují jejich klienti v podobě internetových prohlížečů.

Srozumitelným jazykem těchto klientů se stal jazyk HTML, který se hodí zejména k popisu obecných informací a pro složitější popis v případě složitějších UI jsou jeho možnosti velice omezené. Na tomto faktu nic nemění ani spousta dalších podpůrných technologií jako DOM, ECMAScript, CSS a tak dále.

Další problémy přináší interakce mezi uživatelem a webovou aplikací, kde každá změna stavu přináší neustálé znovunačítání celých stránek. Připočteme li k tomuto i nutnost ošetření dalších stavů jako jsou například tlačítka back, forward, reload atd., kdy musí být zákonitě vyvinuto úsilí pro držení trvalých informací formou session managementu nebo otrockého přeposílaní stavovývh dat z jedné strany na druhou.

Řešení těchto problémů leží ve vícevrstvé architektuře na bedrech klienta, lépe řečeno v případě webových aplikací na internetovém prohlížeči. Právě rozšíření internetového prohlížeče o chytrou prezentační vrstvu(Rich Client Presentation Tier) umožňje řešit mnoho z těchto problémů. Právě tato vrstva umožní přerod z ošklivého káčátka v uživatelsky použitelnou a komfortní aplikaci.

Chytrá prezentační vrstva by měla nabízet logiku pro zobrazení obsahu a dále by měla umožnit komunikovat ostatním částem aplikace nezávisle na sobě se serverem. Tento mechanismus založený na asynchronním zasílání zpráv je důležitý pro autonomní chování jednotlivých částí aplikace. Dále můžeme připočíst událostně řízený model, který umožňuje oproštění se od nutnosti generovat specifické HTML pro každou odpověď.

Samozřejmě jsem nastínil jenom zlomek o funkci chytré prezentační vrstvy. Stejně jako se postupem času vyvinula do dnešní podoby střední vrstva se všemi návrhovými vzory řešícími její problémy, tak se již začala a dále bude vyvíjet chytrá prezentační vrstva.

Webové aplikace dosáhli obrovského boomu především diky internetovým prohlížečům, jenž byly masivně rozšířeny. V případě chytrých aplikací předpokládám, že se bude jednat o trend, který nastartovala firma Macromedia v případě technologie Macromedia Flex představující onu chytrou prezentační vrstvu.

Více informací nabízí článek z rubriky Macromedia Flex Article Extending Design Patterns into RIA, který vřele doporučuji k prostudování.

neděle 7. prosince 2003

Porovnání bezpečtnosti platformy Java a .NET

Článků a pojednání na téma Java vs. .NET bylo sepsáno více než dost. Z mého pohledu se článek Denise Piliptchouka Java vs. NET security, Part 1 porovnávající bezpečnostní rysy těchto architektur řadí mezi ty objektivnější. Autor se zaměřuje na porovnání následujících bezpečnostních aspektů nabízených oběma platformami

  • Možnosti konfigurace bezp. oprávnění
  • Verifikace kódu
  • Možnost aplikační isolace
  • Bezpečtnostní možnosti jazyku

Ač je Java mnohem starší, bezpečnost pro ní byla vždy jednou s priorit a proto není divu, že s podstatně mladším .NETem drží krok a v mnoha případech nabízí dokonce lepší řešení.

pátek 5. prosince 2003

Články na víkend

Něco málo tipů na články pro lenošení o víkendu

XAML???

Zajímavý názor k XAML a renderovacímu jádru Avalon vyjad?uje Tomáš Kouba ve spotu Avalon. Souhlasím, že v diskusi pod ?lánkem Akta X 0311 a ur?it? i v ?lánku samotném se objevilo n?kolik "výst?el? do tmy", i já jsem se nechal unést v p?ísp?vku XAML - XUL od Microsoftu

Velice p?kný ?lánek, který ukazuje základní rozdíly mezi Mozillou coby aplika?ní platformou a Longhornem s XAML popisuje Nigel McFarlane v ?lánku Longhorn and Mozilla: Birds of a Feather (tip na ?lánke poskytl Martin Hassman - czilla.cz).

Bez zajímavosti by ur?it? nem?la z?stat aktivita spole?nosti Macromedia(Flash), která stojí za další platformou Macromedia Flex, která je ur?ena k vývoji chytrých(rich) klient?.

středa 3. prosince 2003

Znakové sady

Úvod do problematiky kolem znakových sad u webových stránek a aplikací přináší Petr Bříza v článku Znakové sady v praxi. Kromě obecných informací o kódování znaků a znakových sadách vyvrací a mýtus o "nestandardním" kódování windows-1250.

Osobně bych již preferoval kódování Unicode například ve formě UTF-8, které poskytuje dostatečnou podporu exotických znaků a zároveň je hojně rozšířené. V případě multi jazykových stránek nebo aplikací bych s použitím UTF-8 neváhal ani minutu.

V článku mi trochu chyběla zmínka o tom, že výstupní kódování lze měnit na výstupu web serveru například formou předsunutého filtru. Takovéto řešení spolu s nastavením patřičné hlavičky obsahující informaci o novém kódovaní dokumentu je sice méně obvyklé, ale úspěšně se používá.

Velká encyklopedie Javy

Na serveru java.net se nalézá encyklopedie Javy Javapedia. V Javepedii můžete nalézt informace o všem co souvisí s Javou. Encyklopedii je poměrně mladá, ale plno informací zde můžeme najít již nyní a zároveň se neustále rozrůstá o další témata.

Javepedia je tématicky členěná(Technology, Products, Practice ...) a jednotlivé pojmy jsou nejen osvětleny, ale zároveň jsou uvedeny odkazy na zdroje, které jdou v tématu do hloubky. Jak jsem se zmínil na začátku Javepedia se neustále rozrůstá a stejně tak jako komunita, která ji pomáhá budovat.

pondělí 1. prosince 2003

XAML - XUL od Microsoftu

Úplně původně jsem chtěl upozornit na další Akta X 0311 Petra Cimpricha, který pravidelně informuje o novinkách z oblasti specifikací konsorcia W3C a především o novinkách v XML. To jsem ovšem netušil jakou zprávu tam najdu.

Mimo jiné se dočteme o novém formátu XAML z rukou Microsoftu, který je určen k tvorbě uživatelského rozhraní aplikací a webu. Na XAMLu bude postaven i Avalon což je součást Longhornu. Což o to, kdyby byl XAML určen pouze pro interní potřeby Microsoftu a jeho operačních systému. Ve vizích Microsoftu tvoří XAML jednotný formát pro tvorbu uživatelského rozhraní úplně všeho, aplikacemi počínaje a webem konče.

Rovnou zapomeňte na XHTML a HTML jako na budoucnost webu, v představách Microsoftu to je XAML. XAML bude samozřejmě dokonalejší a bude umožňovat tvorbu sofistikovaných UI. XAML bude proprietárním formátem Microsoftu se všemi důsledky a bude umožňovat takové hrůznosti jako například zápis programového kódu společně s elementy, které budou popisovat prezentační vlastnosti a layout.

Jazyk podobný XAMLu tu přitom je již několik let, jmenuje se XUL a používá jej Mozilla. XUL je postaven na XHTML,DOM a CSS. Ne nadarmo se XAMLu přezdívá Microsoft XUL. Až nyní jsem pochopil proč Microsoft opustil linii stand alone prohlížečce a chystá se Internet Explorer více napojit na operační systém. Tím důvodem je samozřejmě XAML a framework Avalonu, který bude nový prohlížeč využívat.

Co říci závěrem? Ohlédněme se do historie v ní je plno paralel.

Související komentáře

Grid Computing - další velká bublina nebo přínos?

O Grid Computingu jsem se zmiňoval v rámci ohlédnutí za Sun Tech Days v Praze a přednášce Srikanth Raju. Celkem zajímavý názor na Grid Computing má Michael Nascimento Santos, který jej publikoval ve svém blogu spot Why is everyone talking about grid computing? And what are you doing about it?.

čtvrtek 27. listopadu 2003

Články na víkend

Něco málo tipů na články

Za tajemstvím Class Loaderu

Když jsem se tu pře pár dny rozpovídal o Singletonu, který vznikal dvakrát a za viníka jsem označil různé Class Loadery, sklidil jsem mezi kolegy z práce spíše odmítavé reakce v duchu ..možná to řeší, ale tím to není. Docela mě ty odpovědi zklamali neboť jsem byl na sebe dost pyšný, že jsem na to přišel sám a byl jsem přesvědčen že mám pravdu. Na druhou stranu jsem nedokázal úplně přesně toto chování vysvětlit.

Asi o týden později se řešil v konferenci na java.cz problém deploymentu souborů v rámci J2EE aplikačního serveru a při té příležitosti jsem se zeptal na to jak se věci mají. Martin Kuba(makub) mi vysvětlil, že třída je jedinečně určena jejím kvalifikovaným názvem(package+jméno) a Class Loaderem, který ji nahrál. Byl jsem tedy rád, že jsem měl pravdu a dál jsme se tomu nevěnoval.

Dnes jsem narazil na serveru ONJava.com na opravdu velice povedený článek Andrease Schaefera Inside Class Loaders, který mi ujasnil takřka vše kolem problematiky Class Loaderu v Jave. Článek vřele doporučuji a snad jen dodám, že se jedná o první díl a v dalším pokračování na nás čekají Class Loadery v kontextu J2EE aplikačních serverů a AOP.

JBoss vs ASF - roztržka pokračuje, na řadě je Jetty

Informace o tom, že HTTP server a servletový kontejner Jetty již nebude integrován jako webová vrstva J2EE serveru JBOss, proběhla v konferenci Jettyho již před řádnou dobou. Po sérii slovních přestřelek mezi JBoss Group a ASF a odstranění práva pro commitování do CVS několika elitním vývojářům situace utichla. Jedním z inkriminovaných vývojářů byl i Greg Wilkins otec a hlavní vývojář Jettyho.

Situace dospěla tak daleko, že Greg Wilkins byl požádán JBOss Group, aby odstranil ikonky JBosse ze stránek projektu Jetty. Celá situace byla ještě mnohem absurdnější více blog Grega Wilkinse JBoss™: Open Source Closed Project.

Pro objektivnější pohled ještě dva komentáře Pavla Kolesnikova v Jabloku ohledně roztržky mezi JBoss a ASF

Chyby,chyby,chyby...

Včera jsem si všiml odkazu na zajímavé stránky - popisují hned několik nepatchnutých chyb Internet Exploreru od verze 5 až po aktuální 6-tku. Jakožto rodilého evilHomoSapiens mě napadlo hnedle několik aplikací těchto chyb. Ano - ode dneška není pro mě problém dívat se "komu chci" do počítače. Pracuji ve firmě, kde je IE 5.0 standardem = všichni používají stejnou verzi toho samého prohlížeče (doufám, že nevyzrazuji nějaké firemní tajemství... :) a tudíž pro mě není problém začít škodit (dokážete si představit co by uměl takový worm, který využívá nejen otlaku, ale i toho exploreru pro šíření sebe sama?).

Jen nadhodím situaci, která je reálná - udělám si nějakou škodivou stránku, co se bude tvářit jako "moje Homepage" a pošlu tam pár lidí. Na stránce budu využívat dvou chyb - první je uložení souboru na lokálním disku a druhou je spuštění kódu. Dnes už není problém sehnat software typu keyloger, který se umí zabalit do exe a "potichu" se nainstalovat pouhým spuštěním. O trojských koních ani nemluvě...

Dost už teorie - tady je link na zmiňovanou stránku - enjoy.

pondělí 24. listopadu 2003

Portál veřejné správy - SQL injection pro začátečníky a mírně pokročilé

Portál veřejné správy prošel již mnoha komentáři proto mě zaujal článek Vybrané aspekty implementační fáze Státní informační politiky Aloise Vitáska(původní odkaz jAblok.cZ 24.11.2003 Jedna starší injekce SQL). Pod tímto nevinným článkem naleznete popis, jak šlo jednoduchou úpravou URL dosáhnout modifiace SQL dotazu na straně serveru. Snad jen dodám, fantazii se meze nekladou což dokázal autor článku.

Co na tom že byla chyba briskně opravena, za 3.5 milionu korun ze státní kasičky bych čekal mnohem lepší zabezpečení. Nic na tom nemění ani vyjádření tvůrců ...komponenta pro kontrolu vstupních parametrů obsahovala logickou chybu. Nevím sice co si mam představit pod pojmem logická chyba, ale bezpečnostní díra tohoto typu mi pořádně smrdí. Jsem zvědav jaká další velikonoční vajíčka nám portál přinese....

Prezentace balíku Mozillu

Server Czilla si dal záležet a připravil prezentaci balíku Mozilla a dění kolem něj. Slidová prezentace Mozilla - vše v jednom mapuje historii Mozilly, její výhody, použití, podporované standardy a mnoho dalších informací. Pokud se chystáte někomu Mozillu představit nebo potřebujete vodítko k povídání o tomto projektu pak jsou tyto slidy ideálním řešením.

V sítích Cocoonu

Po pěkném intru publikačního prostředí Cocoon, kterým mě navnadil Pavel Sýkora(viz. Dagblog 05.11.2003 Cocoon na webové aplikace) jsem začal s Cocoonem koketovat sám. Bohužel to bylo pouze letmé seznámení, ale i za tu chvilku, kterou jsem mu věnoval na mě udělal Cocoon dojem. Velice se mi zamlouvala možnost integrovaní portálu s Cocoonem a jeho možnostmi pro generování různých výstupních formátů v závislosti na klientském přístupním zařízení(prohlížeč, PDA, mobil ..).

Minulý týden vyšel druhý díl seriálu Cocoon v příkladech Pavla Sýkory Cocoon v příkladech (2): Instalace a první aplikace, který velice usnadňuje rozběhnutí a první příklad v Cocoonu. Další pohled na možnosti Cocoonu nabízí Tony Culshaw v článku Enterprise Application Integration using Apache Cocoon 2.1. Navnaděn včerejšími experimenty budu Cocoon rozhodně zkoumat dál.

středa 19. listopadu 2003

Jak bylo na Sun Tech Days v Praze

Velký cirkus ve mě vyvol rozporuplné pocity, ale nepředbíhejme a pojďme pěkně po akcích jenž jsem absolvoval.

Sun Keynote
Letmý pohled do budoucnost vizemi Sunu podaný šoumenem Reggiem Hutchersonem, kterému zdatně sekundoval Simon Ritter. Hlavni myšlenkou bylo propojeni všech věcí, které si umíte představit. V představách Sunu tak bude mít absolutně každá věc svojí IP adresu, podle které bude jednoznačně identifikovatelná. Vaše brýle budou mít IP adresu, co kdybyste je náhodou někde zapomněli. Vaše bíle spodky budou mít IP adresu, aby mohla pračka před zapnutím vyhodnotit jestli jste je náhodou omylem nesmíchali s barevným prádlem. Vše bude samozřejmě řízeno softwarem napsaným v Jave.
Building Effective Applications Using Java 2 Platform, Standard Edition 1.4 (J2SE 1.4) and Preparing for J2SE 1.5
Simon Ritter představil to nejdůležitější z Javy 1.4, tedy rozšíření I/O API převážně se zaměřením na Buffery, Channels a dále mluvil o projektu Java Web Start umožňujícím jednoduchou instalaci a upgrade java aplikací přes internet. Dalším tématem byla Java 1.5, ale kromě všude omýlaného(generics, boxing, metadat, static import) jsem se nic nedozvěděl.
Solve Your Development and Deployment Headaches using Sun Systems
Docela zajímavá přednáška neboť jsem na ni vstupoval jako čistý list papíru. Srikanth Raju mě nejdříve navnadil povídáním o javové platformě nad Linuxem, která mimo jiné obsahovala prohlížeč Mozilla, Star Office, Sun ONE Studio a další. Následoval povídaní o Solarisu a pak asi nejzajímavější část přednášky o Grid conceptu.
Grid concept bych charakterizoval jako zastřešení hardwaru, softwaru a dalších prostředku do jednoho rámce(Grid Engine), který umožňuje dokonalé využití těchto zdrojů například se jedná o výpočetní výkon, znalosti, informace. Jednotlivé Gridy lze dále skládat do sebe a spojovat je do větších celků. S Gridem se pak pracuje na základě úloh, což si představuji tak, že máme například výpočetně náročný úkon, který přes standardní rozhraní Gridu formuluji úlohu, která je zpracována.
Programming Puzzles
Malý quiz nad "špeky" s Javy s trochou skryté reklamy na jinak skvělou knihu Effective Java Joshuy Blocha. Kousky programovacího kódu, měly odhalit jak dobře znáte Javu. Kromě toho že jsem seděl skoro až úplně vzadu a kód jsem takřka nemohl vůbec přečíst, mě nenadchla ani Dr. Doris Chen, které jsem dobře nerozuměl.
Security and Identity Solutions Using Java Technology
Velice pěkně podaná přednáška Sang Shinem převážně na téma zabezpezení webových služeb. Vše se točilo kolem zabezpečení vlastních zpráv nikoliv jejich přenosu(SSL), řeč přišla na SAML, XML Enc, XML Sig.
Developing Wireless Applications using MIDP2.0, WMA and MMA
Srikanth Raju toho napovídal v poslední přednášce věnované bezdrátovým aplikacím v kontextu J2ME opravdu dost. Tato přednáška byla časově nejdelší a nabízela i ukázky midletu na Srikanthove mobilním telefonu, za zajímavost stála i ukázka Wireless Toolkitu 2.0, nastavení bezp. oprávnění a podepsání aplikačního archívu(jar souboru). Celkem to bylo jedno z toho nejlepšího co jsem na konferenci slyšel.

Jak jsem zmínil na začátku, Sun Tech Day ve mě vyvolal rozporuplné pocity. Organizace celé akce byla na velmi vysoké úrovni, nadruhou stranu mě zklamala strohost některých přednášek. Pokud se nemýlím tak celá akce je vždy koncipována jako dvoudenní, právě proto byly přednášky jaksi hodně ořezané opravdu na to nejdůležitější. Asi nejmarkantnější to bylo na Building Effective Applications Using Java 2 Platform, Standard Edition 1.4 (J2SE 1.4) and Preparing for J2SE 1.5, kde jsem se takřka nic nového nedozvěděl.

Většina speakeru mluvila velice srozumitelně a především Sang Shin mě velice překvapil, naopak zklamáním byla Dr. Doris Chen, která ne asi úplně svou vinnou nepřesvědčila. Mezi další zajímavost patříla hojná účast našich sousedu z Polska, Slovenska, ale i odjinud.

Sun Tech Days se konal v Praze již podruhé a i přes rozporuplné pocity ve mě klady z této akce převážily a doufám, že se velký cirkus v Praze ještě ukáže.

Související odkazy

CZilla vyhlašuje soutěž o nejlepší slogan k propagaci Mozilly

Používáte Mozillu a chete pomoci k její propagaci? Máte jedinečnou možnost přiložit ruku k dílu a pomoci projektu Mozilla.

CZilla vyhlašuje soutěž o nejlepší slogan určený k propagaci Mozilly, Mozilla Firebird či Mozilla Thunderbird. Nejlepší nápady budou použity na tvorbu propagačních banerů. (První banery již máme.) Pokud vymyslíte ať již vtipný, zajímavý či působivý slogan, pošlete nám jej. Své nápady posítejte na adresu hassman (zavináč) czilla.cz do konce tohoto týdne (do neděle). Všem přispěvatelům předem děkujeme.

pondělí 17. listopadu 2003

Editoriál

... a pak, že nerostou. Další blog o Jave má nesvědomí Pavel Kolesnikov a jeho jAbLoK.cZ vypadá opravdu dobře a není pouze o Jave. Na jablok.cz jsem narazil opravdu náhodou a to je škoda. Pokud máte zajímavý blog nejen o Jave nebo programování napište mi.

Zítra 18.11.2003 se bude v Kongresovém centru konat Sun Tech Day. Pokud čirou náhodou nejdete pak Dagblog přinese to nejzajímavější co jsem se dozvěděl. Pokud máte chuť a chcete li si se mnou popovídat oslovte mě(identifikační foto), třeba během poledního pauzírování.

Design patterns na příkladech z reálného života

Studium návrhových vzorů(Design Patterns) bylo a je složitou úlohou na představivost čtenáře. Některé vzory jsem musel a pravděpodobně nejen já, přečítat vícekrát abych si vše dokázal poskládat do výsledné mozaiky.

Michael Duell se v článku Non-Software Examples of Software Design Patterns (původní odkaz objects.cz) zaměřil na návrhové vzory prezentované na příkladech z reálného života. Vysvětlení Builderu na stravování v restauraci rychlého občerstvení nebo návrhového vzoru Facade na operátorce zákaznického centra prostě nemá chybu. Článek vřele doporučuji neboť se jedná o velice dobrý doplněk ke studiu návrhových vzorů.

neděle 16. listopadu 2003

Uživatelské rozhraní webových aplikací

Přečtení článku User Interface Design for Web Applications Jean Tillman (Sova v síti 14.11.2003 Webové aplikace se navrhují jinak) ve mě vyvolalo smíšené pocity. Dozvíme se sice o rozdílech mezi uživatelským rozhraním webových aplikací oproti návrhu klasických na obsahu založených stránek, ale pohled je to značně letmý a z mnoha body lze polemizovat. Má zkušenost s návrhem uživatelského rozhraní nemůže sice vycházet z případových studií či jiných exaktních měření, ale může Vám nabídnout pohled a názory, které jsem získal v kontrastu s názory prezentovanými článkem.

Page titles je místo, které má obrovský potenciál z hlediska doplňujících informací, které jsou kontinuální přes celou práci s aplikací např. období, ve kterém uživatel pracuje. Většinou se nejedná o informace, které by byly nezbytně nutné, ale uživatel by o nich měl mít přehled v každou chvíli práce s aplikací. I původní účel titulku stránky se naplňuje a každá stránka nebo chcete li formulář má unikátní číslo a popisku, podle které je možné stránku identifikovat např. v případě chyby.

Hypertext vs. linear tasks v případě velice jednoduchých webových aplikací lze možná mluvit o lineárnosti úloh, ovšem ve většině případů se jedná spíše o krátké lineární úseky a proto se používá kombinace "formulářové" a hypertextové navigace.

Scrolling většina uživatelů nese velice nelibě jakoukoliv nutnost rolovat v horizontálním(vůbec) a vertikálním směru. Samozřejmě záleží na struktuře formuláře, ale datová část, ke které se vztahuje ostatní logika tvořená navigací a výkonnými prvky(ovládací tlačítka), by měla být celá viditelná bez nutnosti rolování. Pokud to z různých důvodů není realizovatelné např. proměnná délka datové části(množství záznamů) pak vyplatí poskytnout mechanismus stránkování nebo zopakování výkonných prvků pod datovou složkou.

Cross-browser considerations je velice ošemetné téma a rozhodně bych se neodvážil tvrdit, že návrháři a kodéři mají pod kontrolou prostředí, na kterém poběží webové aplikace. Platí zde a to bych rád zdůraznil to samé jako v případě klasického internetu. Snažit se v maximální možné míře držet standardů a proprietárním technologiím se snažit vyhnout. Jako dobrý se osvědčil způsob minimálních požadavků na prohlížeč. Stačí si například stanovit, že se v případě klientského skriptování budeme držet ECMAScriptu 3.0. pak je v podstatě jedno jestli má klient IE 5.0, 5.5, 6.0 nebo Mozillu 1.0.

Browser buttons tedy navigační tlačítka prohlížeče jsou noční můrou spíše pro serverové progrmátory. Použítím vhodné kombinace tlačítek další - předchozí lze uvést aplikaci řekněme do nekonzistentního stavu způsobujícího chyby. Spíše se ovšem jedná o ošetření na straně serveru, kdy jde například technikou posílání počítadla tyto stavit částečně omezit.

Home page v případě webových aplikací se jedná o rozcestník vlastní aplikace. V případě více aplikací pak domovská stránka slouží k výběru aplikace, prohlížení nápovědy, přihlášení, registrace případně jiného úkonu nadaplikačního charakteru.

sobota 15. listopadu 2003

Singleton a problém ClassLoaderu

Používáte návrhový vzor Singleton a používáte jej v Jave? Pro ty méně znalé osvětlím, že Singleton je takový objekt, který má v celé aplikaci pouze jedinou instanci. Používá se tam kde chceme, zaručit jediněčnost objektu například v implementaci Cache.

Pěkných pár dní jsem pracoval na implementaci XML konfigurace aplikačního serveru,k tomuto účelu jsem využil projekt Jakarta Apache jehož součástí je komponenta Commons Digester hojně využívaná v projektech pod Jakartou.Digester slouží pro namapování XML na javovské objekty.

Digester umožňuje nastavit objekt, který je volán(událostní model SAXu) při zpracování dokumentu. Tímto mechanismem jsem vždy získal jméno aktuálně zpracovávaného elementu a toto jméno jsem dále využíval v jiném objektu, který pracoval z obsahem elementu. Měl jsem tedy dva objekty jeden, který vždy zpracoval obsah elementu a jeden, který byl pověšen na zpracování dokumentu. Objekt, který zpracovával obsahy elementu vždy potřeboval znát jméno aktuálně zpracovávaného elementu, aby mohl jeho obsah korektně uložit(jméno elementu tvořilo klíč v mapě). Právě objekt, který čmuchal jména elementů byl Singletonem.

Tento model fungoval dobře v kontextu našeho aplikačního serveru, ovšem pokud jsem zkoušel přenést aplikace do jiného servletového kontejneru nastala potíž. Najednou nebyl objekt jediněčný, ale vznikaly instance dvě a to mělo za následek chybnou funkčnost. Přitom Singleton byl thread-safe, metoda vracející instanci byla synchronizovaná.

 
 	public class RuleWatcher{
		private static RuleWatcher watcher = null;
		
		private RuleWatcher(){
			// soukromý konstruktor
		}
		
		public static synchronized Rulewatcher getInstance(){
			if(watcher == null){
				watcher = new RuleWatcher();
			}
			return watcher;		
		}		
		.
		.
		.atd.
		.
	}   

 

Tento kód je v pořádku, přesto nemusí zaručit očekávanou funkčnost. Na otázku proč odpovím ClassLoader. Jak Digester tak většina servletových kontejnerů používa vlastní ClassLoader, pokud tedy vznikne instance RuleWatcher v kontextu ClassLoaderu aplikačního serveru a posléze je vytvořen objekt v kontextu jiného ClassLoaderu(v našem případě Digester) a volána metoda getInstance() je podmínka true neboť třídní instance watcher je alokována v jiném kontextu a proto vznikne další instance.

Nálsedující zjištění mi trvalo přibližně den, oprava už nebyla složitá. Naštěstí komponenta či spíše objekt Digester umožňuje nastavení ClassLoaderu proto stačila jediná řádka, která nastavila původní ClassLoader a bylo po problémech.

 
   ClassLoader c = Thread.currentThread().getContextClassLoader();
   digester.setClassLoader(c);
 

čtvrtek 13. listopadu 2003

Tunelujeme přes HTTP proxy

Trocha plků na začátek určitě nikoho nezabije - tak tedy: po skončení civilky na Pedagogické fakultě, která byla připojena optikou téměř až k mé 10/100Mbit síťovce, jsem se vrátil do nejmenované firmy. Jako závislý na Internetu jsem překousl tu skutečnost, že ve firmě mám pouze omezený přístup na Internet a to přes protokol HTTP a to pouze na některé servery/porty. Respektive - máme zde dvě http proxy - první je s autentifikací a hlídá se zde data/čas. Druhá je pro všechny volná, ale jsou zde pouze vybrané servery (domény) na které je možno přistupovat. Seznam serverů se dá měnit, ale je omezen cca na 100 domén. Situace mizerná pro člověka zvyklého na irc/icq/ssh... Jal jsem se tedy tunelovat spojení směrem ven. Jako správný tunelář jsem nechal na free proxy přidat jednu doménu, na které má kamarád počítač (a ten je samozřejmně bez omezení připojen k Internetu). Idea byla asi taková: tunelovat přes HTTP požadavky až k počítači připojenému k Internetu a zpět. Data mezi mým počítačem v intranetu putují přes protokol HTTP na "volný" proxy server a dále v nezměněné podobě k počítači v Internetu, který je dále zpracuje a něco udělá... A tím se dostáváme do fáze realizace.

Výborným pomocníkem mi byl program napsaný v Jave jménem "Socks via http", který funguje tak, že u klienta (počítač v intranetu) je vytvořena socks proxy, data se tunelují přes http k serveru (počítač v Internetu se serverovou částí tohoto programu) a zpět. Samozřejmně, že jsem zkoušel i jiné programy, ale osvědčil se pouze výše uvedený (vyplinulo to z restrikcí http proxy, která měla defaultně nastaven port 80 a jiný neakceptovala - při manuálním zadání portu 80 do url mi byl vrácen kód 403 - takže většina programů na této chybě vyhořela). Kamarád nahodil serverovou část (vůbec nebyl vesel z toho, že kvůli prográmku cca 30KB velkému musí tahat i JRE) na vyšším portu a tuneloval moje požadavky pomocí iptables z portu 80 - takže jeho web server běžel pro zbytek světa stále jako by se nic nestalo. Tak tedy začal jsem tunelovat - program zahlásil "checking version - OK" a já byl v suchu :). První co jsem vyzkoušel bylo IRC - všechno běhalo nádherně rychle. Rozběhal jsem si ICQ, web (takže mě už netrápilo žádné omezování) a dokonce i SSH. To byl asi muj nejšťastnější den ve firmě...

Tady příběh končí a koho nudil, tak ani nemusí číst dál - následují jen špatné zprávy :].

A teď ta špatná zpráva - asi po týdnu surfování si admin proxy serveru všiml, že na jeden "server" je nezvykle moc requestů a tak se rozhodl konat - dnes je moje ip v blacklistu a na tunelování můžu na nějakou dobu zapomenout. Nejsem žádné ořezávátko, takže změnit ip není problém, ale to situaci nevyřeší. Situaci by vyřešil hack dané proxy :), ale AIX není mým oblíbencem... surfuji tedy přes proxy (další javovský program - jde pouze o forward portu na jinou ip/port), která je na jiném počítači (ten není v blacklistu :) ) a tudíž jsem v "suchu". Ještě mě napadlo sniffnout hesla uživatelů, kteří se hlási na proxy s autentizací - věřte mi - funguje to, ale dřív nebo později se to proflákne...

Smutné na tom všem je, že jsme společnost s "moc moc" zaměstnanci a jsou zde restrikce u něčeho tak svobodného jako je Internet. Dnes jsem se bavil s adminem z i.cz - řekl, že u nich je Internet pro všechny neomezený. No vida.. někde to jde a jinde zase....

středa 12. listopadu 2003

DocBook - dokumentace v hrsti

Pokud jste někdy vytvářeli jakýkoliv typ dokumentu nebo se na to chystáte, tak pravděpodobně v průběhu narazíte čí jste spíše již narazili na některý z následujících problémů.

Potřeba srozumitelného(otevřeného) formátu
Dokument byl vytvořen v editoru, který produkoval soubor v proprietárnim formátu.
Nezávislost či spíše snadná změna výstupu
Dokument byl vytvořen pro určitý typ média(elektronické publikování), ale Vy jej potřebujete šířit i jinou cestou(tištěná podoba,hlasový výstup atd.) .
Snadná práce s dokumentem
Dokument byl vytvořen a Vy ho potřebujete dále upravovat, sdílet, rozšiřovat

Výše uvedené problémy souvisí s jakýmkoliv druhem dokumentu který si umíte představit, lhostejno jestli se jedná o článek pro místní noviny, vědeckou publikaci, knihu, dokumentaci k hardwaru nebo softwaru či uživatelskou příručku. Všechny výše uvedené problémy mají něco společného, jsou důsledkem míchání toho co dokument vyjadřuje s tím jak to má být prezentováno.

V důsledku potřebujeme jazyk nepopisující prezentaci informace, ale její význam a strukturu. Právě pro strukturování informací se dobře hodí jazyk XML. Nyní už stačí pouze definovat značky popisující danou strukturu a to je právě úkol DocBooku.

DocBook je ve své podstatě pouze DTD, které určuje strukturu XML dokumentu. DocBook tak má tak stejný význam jako XHTML. Jak XHTML tak DocBook vyjadřuje pouze jaký element a kde můžete použít. Pokud píšeme dokument v DocBooku, tak produkujeme XML data popsaná jazykem DocBook.

Na jedné straně výhody XML a na druhé dobrá sémantika(rozuměj vyjadřovací schopnost) dělají z DocBooku jednu z nejpoužívanějších aplikací SGML/XML(Podle J.Koska dokonce druhou za jazykem HTML). O DocBooku se již dále budeme bavit pouze jako o systému neboť XML a DTD je pouze jádro, na které se nabalily a nabalují nástroje umožňující jeho zpracování.

DocBook nabízí úžasnou vlastnost, kterou bych charakterizoval jako jednou naspat a mnoha způsoby prezentovat. Pokud v DocBooku napíšeme článek o Matějovi z Horní dolní, můžeme jej velice snadno přetransformovat na HTML pro web a také do RTF pro redakci místního novinového plátku využívající nelegální kopii kancelářského balíku. Stejně tak můžeme napsat knihu, kterou předáme tiskaři v PostScriptu a její elektronickou podobu umístíme ve formátu PDF na FTP server.

Z historie do současnosti

DocBook spatřil světlo světa v roce 1991 a u jeho zrodu stála firma HaL Computers a nakladatelství O’Reilly. V průběhu let se hojně využíval ve velkých firmách jako Hewlett-Packard, SCO, Fujitsu atd. V roce 1999 přešel DocBook pod křídla sdružení OASIS a neustále se vyvíjí.

Původně byl DocBook vyžíván k tvorbě dokumentace k systému Unix, v současnosti byl použit například pro dokumentaci k Linuxu, PHP, FreeBSD a používá se ve firmách jako Sun nebo ve zmíněném nakladatelství O’Reilly.Dnešní možnosti DocBooku ovšem daleko přesahují původní účel dokumentace, bez problémů můžeme napsat článek, knihu či jiný typ dokumentu. DocBook také nabízí možnosti generování rejstříků a jiných vlastností, které jsou pro daný typ dokumentu obvyklé.

Výstupní formáty DocBooku

Právě výstupní formáty jsou jedním z toho nejcennějšího co může DocBook nabídnout. Mezi ty nejznámější patří

  • Web - HTML, XHTML
  • Tisk - Rtf, Pdf, PostScript, LaTex
  • Nápověda - HTMLHelp, JavaHelp

Výstupních formátu je samozřejmě více a podpora dalších se rozšiřuje. K tolika rozličným formátům pomáhá XSL transformace produkující přímo daný formát(HTML,XHTML) nebo transformace do XSL-FO objektu, které jsou patřičným FO procesorem zpracovány na daný formát. Třetí možností je použití DSSL stylů, které jsou již trochu zastaralejší.

Valná většina nástrojů, které budete pro generování příslušného formátu potřebovat je šířena pod licencemi, které umožňují jejich svobodné používání i pro komerční účely. Konfigurace těchto nástrojů a jejich použití je i s DocBookem popsáno ve volně dostupné elektronické knize DocBook:The Definitive Guide.

Další informace jsou k nalezení na oficiálních stránkách DocBooku a hlavně na domovských stránkách Jiřího Koska, který se na DocBooku intenzivně podílí a můžeme u něj najít i neocenitelnou příručku k DocBooku trochu skromě nazvanou DocBook - Stručný úvod do tvorby a zpracování dokumentů, kde se dozvíté mnohem více. Jiří Kosek dokonce připravil i instalační balíček DocBooku pro Windows.

Nevýhoda DocBooku nastane v případě vytváření XML. Pro začátek se budete muset naučit základním pravidlům XML a osvojit si několik základních strukturálních značek. V případě jedince chápajícího, alespoň zlomek toho co nabízí DocBook to neni problém. Vysvětlete ovšem sekretářce, že zápisy z porad nebude psát tak jak je doposud zvyklá ve WYSIWYG textovém editoru typu Word, ale že se bude pohybovat ve světě špičatých závorek. Samozřejmě existují i WYSIWYG editory produkující DocBook XML ovšem jejich cena je vysoká.

Aktualizováno 14.11.2003 v 12:30

Zdenek Bohdanecky Jr. mě upozornil na editor AUTHENTIC 2004 firmy Altova, který by měl DocBook také podporovat. Na stránkách editoru jsem našel zajímavou informaci cituji "authentic™ 2004 is offered under a free software licensing model. (Yes, completely free).".

Aktualizováno 13.11.2003 v 7:20

Tak i použitelný editor s integrovaným DocBookem a dokonce i s českým rozhraním je k dispozici, jak mi napsal Jiří Kosek

otrlejší sekretářka by možná zvládla následující editor: XMLmind (http://www.xmlmind.com/xmleditor/) Editor se nainstaluje rovnou i s DTD a XSL styly pro DocBook, takže stačí v menu vybrat New -> DocBook Document a začít psát. Rozhraní editoru je dokonce počeštěné.

úterý 11. listopadu 2003

Co je co - Open Source, Free software, GPL, LGPGL..?

Na problematiku vztahu Free Software a Open source jsem již několikrát narážel, ale až dnes se mi do rukou dostal starší článek Milana Zamazala (zamazal.org) s trochu krkolomným názvem Free software, Open Source, FSF, OSI, RMS, ESR, GPL, LGPL... Zmatek?. Autor vysvětluje základní rozdíl mezi Free Software a Open source, dotýká se otázek licencí(GPL, LGPL, BSD) a naráží na problematiku spolupráce svobodného a proprietárního softwaru. Pokud v těchto termínech plavete nebo Vám nejsou úplně jasné pak je článek dobrým místem pro začátek.

Související články:

pondělí 10. listopadu 2003

Java Tiger v hledáčku

Pokud jste ještě nic neslyšeli o připravované Jave 1.5 s kódovým označeným Tiger, pak je čas to napravit. Článku a komentářů se objevilo opravdu hodně. Ten nejnovější má na svědomí Petr Sickboy Hejl pod názvem Novinky v Javě aneb Tygří spáry .

Nemá cenu si zastírat, že změny jsou minimální ba naopak, evidentně se přesouvá část práce na kompilátor(generické typy, boxing), který nedělá na rozdíl od programátorů chyby a to je posun jedině k lepšímu. Java dále přebírá některá specifika C#(metadata) a C++(výčtové typy), uvidíme jak tyto "cizí" vlastnosti přijme komunita.

Související články:

pátek 7. listopadu 2003

Co týden dal

Tento týden se v Dagblogu vyskytla neobvyklá koncentrace odkazů směřujících na české servery root.cz a interval.cz. Jsem tomu rad, tento týden přinesly tyto servery opravdu plno velice kvalitních informací a staly se, doufám nejen pro mě, dobrým zdrojem k zamyšlení.

Pokud jste se zaregistrovali na Sun Tech Day v Praze, pak Vám určitě dorazil potvrzovací email. Neplánujete li návštěvu této akce pak vězte, že Dagblog bude u toho a o všem Vás bude informovat.

Další články

Zpovědnice: Ján Varga - bývalý vývojář Netscapu a současný vývojář Mozilly nechává nakouknout pod pokličku vývoje těchto prohlížečů v rozhovoru pro root.cz

Tvořme společně tak se nazývá spot IVTlogu, který nekousává téma licencí, pod kterými šířit obsah weblogu. Licenci Creative Commons, kterou Josef Petrák zmiňuje údajně využívá plno zahraničních weblogů.

Nedokážu posoudit smysl zavádění takovýchto licencí a zajímalo by mě jak je to v případě, že nemám svůj weblog žadnou licencí chráněný, ostatně proč bych to také dělal. Pokud nepoužiji jinou licenci, jaký zákon se k tomuto vztahuje, autorský?

Dagblog vydávám především proto abych sdílel myšlenky, vyjadřoval názory a cítil se svobodný. Kdybych tedy uvažoval o nějaké licenci, musela by to být licence naprosto svobodná, tak aby tento weblog sloužil především Vám čtenářům a nikoho neomezoval v dalším využívání všeho co Dagblog prezentuje.

OOP v JavaScriptu

Dlouhé čekání skončilo, konečně se v objevil pořádný český článek pojednávající o OOP v JavaScriptu. Na svědomí ho má Michal Kusýn a článek se opravdu povedl. Dozvíme se z ně jak vytvářet a používat objekty a je nastíněna i prototypová dědičnost.

Autor sice označil tento typ dědičnosti spíše za simulaci, s čímž úplně nesouhlasím neboť se jedná o plně regulérní implementaci dědičnosti. Nad rámec článku dodávám informaci, že do připravované specifikace ECMASriptu 4 je zakomponována podstatná část věnovaná objektům.

středa 5. listopadu 2003

Cocoon na webové aplikace

Když jsem pročítal článek Cocoon v příkladech Pavla Sýkory, vyvolávalo to ve mě jemné chvění. Cocoon patří do rodiny projektu Apache Jakarta a jedná se o běhové prostředí nebo chcete li framework pro tvorbu a nasazení webových aplikací. Článek nastiňuje architekturu Cocoonu a princip nasazení webových aplikací v kontextu tohoto prostředí.

Pokud si nedokážete představit implementaci návrhového vzoru MVC pak Vám Cocoon a jeho popis pomůže. Osobně se mi líbí řešení na základě roury, kterou prolézá požadavek.

V diskusi pod článkem je nastíněna otázka rychlosti v narážce na XSL transformaci, která je systémově i časově náročná. Z vlastní zkušenosti mohu potvrdit, že XSL transformace dokáže opravdu server řádně zahltit. Naštěstí Cocoon nabízí právě možnost konfigurovatelnosti a tak můžeme v případě XSL transformeru sáhnout po vlastním řešení(cachování) nebo použít například technologii Transletu.

Právě Translety(XSL šablony převedené na předpřipravené javovské struktury) jsou řešením, které se mi z výkonnostních důvodů osvědčilo a mohu ho doporučit z vlastní praxe. V případě Cocoonu bych se výkonnostních problému nebál právě diky přímé podpoře Transletu.

Ještě dodávám malou perličku, XSL transformaci lze provádět i hardwarově. Hardwarový XSL transformer je výkonově o tři generace dále než současné softwarové XSL transformery. Osobně jsem žádný netestoval, nicméně reference, které se donesly byly velice zajímavé a časy transformací propastné. Cena nebyla malá a přesahovala $50000,-. V případě potřeby by se tak dalo sáhnout i k tomuto řešení.

Poznáváme UML

Přední český konsultant a autor věnující se objektově orientovanému návrhu aplikací Ilja Kraval(objects.cz), kdysi v jednom ze svých článků přirovnal neznalost UML u softwarových vývojářů k analfabetismu.

Pokud je Vám pojem UML cizí, pak jistě uvítáte první ze serie článků k tomuto tématu v podání Reného Steina. Návrh aplikací v jazyce UML nás jemně uvede do prostředí jazyku UML.

úterý 4. listopadu 2003

Jakarta Struts v akci

K článkům Pavla Kolesnikova Java na web serveru nejen pro starší a pokročilé a Jakarta Struts - akce a formuláře se vratim pokažde kdy plánuji, že proniknu do Jakarta Struts. Jakarta Struts jsou volně řečeno implementaci návrhového vzoru MVC, který řeší oddělení aplikační logiky(Model) od prezentační logiky(View), tedy toho co tvoří GUI aplikace. Články jsou to již poněkud starší, ale jako výchozí startovní bod jsou prefektní.

pondělí 3. listopadu 2003

Internacionalizace v rámci servletu

Marek Branickýse v dalším díle seriálu servletech dotýká problematiky internacionalizace aplikací. V článku Java Servlets - i18n nastiňuje základní možnosti, poskytované standardním API Javy(java.util.ResourceBundle a java.util.Locale ). Pokud hledáte možnosti internacionalizace pak by mohl být tento článek dobrým vstupním bodem.

pátek 31. října 2003

Automatická konverze datových typů v JavaScriptu

K tomuto příspěvku mě vede jeden rozhovor, kdy jsem radil kolegovi ohledně určité konstrukce v JavaScriptu. Přesně už si samozřejmě nevzpomínám, ale kód byl podobný následujícímu

 
    function acme(id){
    	foo = document.getElementById(id); 
	if(!foo){
		.
		.	
	}
	.
	.
    }
    
 

V podstatě se jednalo o vyhodnocení foo v případě, že volání metody getElementById(id) vrátí null. Ve výše uvedeném případě se hodnota null vyhodnotí jako false.

Kolegovi jsem tedy řekl, že v případě, že element s daným id nebude prostě se provede kód v if konstrukci. Bohužel jsem jaksi nedokázal dostatečně kvalifikovaně odpovědět na to proč se null přetypuje na false.

Vysvětlení tohoto chování musíme začít u netypovosti či dynamické typovosti JavaScriptu. V JavaScriptu nemusíme předem určovat jakého datového typu bude proměnná. Datový typ přichází na řadu teprve v kontextu provádění, kde je proměnná přetypována na požadovaný typ. V našem případě se vyhodnocuje logická hodnota proto se dynamicky null přetypuje na false.

Automatickou konverzi datových typů, popisuje následující tabulka (David Flanagen: JavaScript The Definitive Guide, Fourth Edition ISBN 80-7226-626-8), podle které se provádí přetypování z jednoho typu na druhý.

Hodnota Řetězec Číslo Logická hodnota Objekt
nedefinovaná hodnota "undefined" NaN false chyba
null "null" 0 false chyba
neprázdný řetězec beze změny číselná hodnota řetězce nebo NaN true objekt String
prázdný řetězec beze změny 0 false objekt String
0 "0" beze změny false objekt Number
NaN "NaN" beze změny false objekt Number
nekonečno "Infinity" beze změny true objekt Number
záporné nekonečno "- Infinity" beze změny true objekt Number
jakékoliv jiné číslo řetězcová hodnota čísla beze změny true objekt Number
true "true" 1 beze změny objekt Boolean
false "false" 0 beze změny objekt Boolean
objekt výsledek volání metody toString() výsledek volání metody valueOf nebo toString() nebo hodnotu NaN true beze změny

čtvrtek 30. října 2003

Kdo a proč nechápe OpenSource?

Na serveru root.cz vyšel překlad, dle mého skromného mínění, více než diskutabilního článku Jak nám všem ubližuje microsoftí nepochopení Open Source. Názor Roberta X. Cringelyho je tendenční a úměra pouze proti operačnímu systému Linux, jako zastánci Open Source, je nedostatečná.

Open Source má ze své podstaty ekonomický podtext, nejviditelnějším příkladem je právě Linux. Microsoft samozřejmě velice dobře chápe Open Source a trnem v oku mu neni až tak Linux jako spíše podstata Open Source, představovaná transparentnosti daných řešení. Doporučuji pročíst diskusi k článku, některé názory jsou opravdu zajímavé.

Co týden dal aneb krátké zprávy

Máme tu novou verzi rozšířeného vývojového prostředí pro Javu, firma Borland představila JBuilder X. Nálsedník JBuilderu 9 se chlubí opět další integrací tentokrát v podobě Struts. Více informací o novém dárečku Tisková zpráva:Java Borland JBuilder X .

Tomáš Tichý informuje živě z Proffesional Developers Conference (PDC 2003). Na stránkách serveru interval.cz se můžeme přečíst jeho postřehy.

středa 29. října 2003

Byte kod pod lupou

Soubor s příponou class, který generuje překladač(javac) není jen změt náhodných bytu. Jedná se o soubor, jehož struktura je striktně popsána. Právě jeho optimalizace může zvýšit výkon. Nástroj Byte Code Engineering Library (BCEL) toho dokáže opravdu dost. Vikram Goyal se v článku Analyze Your Classes nezabývá pouze tímto nástrojem, ale probírá celou problematiku.

čtvrtek 23. října 2003

Návrat chytrých klientů a soumrak "HTML aplikací"?

Tomáš Kouba mě ve spotu Pokles HTML aplikací? přivedl na zkoumání, co to znamená tzv. chytrý klient(Rich Client) a na takové malé zamyšlení, ale po pořádku. V spotu můžeme nalézt tabulku, která vyjadřuje procentuelní podíl různých klientů distribuovaných řešení v roce 2002 a předpoklad pro rok 2005. Tabulku jsem z původního spotu Tomáše Kouby zkopíroval.

Typ klienta 2002 2005
1st Generation Rich Client 24% 6%
Stand-Alone Rich Client 7% 30%
Browser Rich Client 5% 18%
HTML 64% 46%

V samotném spotu, stejně jako ve výše uvedené tabulce, narazíte na termín chytrý klient(Rich Client). Chytrý klient je takový typ aplikace, který nabízí komfort klasických desktopových aplikací s využitím rozšířených standardů webu potažmo internetu. Právě komfort, i když bych spíše volil slovo použitelnost, hraje klíčovou roli. Proč právě komfort? Uživatelé chtějí programy s takovým grafickým rozhraním a takovými možnostmi, které jim nabízí jejich operační systém případně aplikace, které na něm používají. Počínaje standardním grafickým rozhraním, drag&drop operacemi, kvalitním tiskovým výstupem, stavovou konzistenci(přechody mezi stránkami ve Web aplikacích) a konče uživatelskou personalizací. Proč používat web aplikace s HTML výstupem, které jsou ve velké většině na prohlížeči závislé? Dodejme ne nepodstatné, pokud mají alespoň částečně splňovat některá výše uvedená kritéria.

Web aplikace tak jak je známe dnes, již narážejí a mnohdy jsou za hranicí HTTP,HTML,DHTML a dalších vlastností, které prohlížeče nabízejí. Právě proto je tu myšlenka chytrých klientů-programů, které jsou platformově nezávislé a poskytující vyšší funkčnost s pohodlnějším komfortem než dnešní a v podstatě jakékoliv internetové prohlížeče s běžně dostupnými technologiemi.

Právě nástup těchto chytrých klientů(Stand-Alone Rich Clients) bude v roce 2005 na úrovni 30% ze všech používaných typů klientů. Je více než pravděpodobné, že základní technologické platformy budou tvořit Java a .NET. Některé indicie shodné s touto tezí poodhaluje John Yu v článku Rich clients emerge as alternatives for Web applications. Stejně tak se projeví nárůst podílu Browser Rich Clients. Tito chytří klienti budou zřejmě postaveny na rozšířených technologiích, které jsou nebo se budou moci stát součástí prohlížeče případně v něm budou integrovány. Největší šance mají technologie, které jsou již masivně používány dnes například Flash, XUL(Mozilla), ActiveX, Java Applet ...

Řeknemeli A řekněmě i B. Jakých web aplikací se výše uvedené dotkne? Bude se jednat o běžné B2C(Business to Customer) nebo složité B2B(Business to Business)? Samozřejmě vše začne a začalo u těch složitějších aplikací a pomalu se bude přesouvat k těm běžně rozšířeným jako je například internet banking. Tento trend se pravděpodobně vyhne tzv. webovým rozhraním jaké používají neplacené služby typu emailu.

Z výše uvedeného si dovoluji soudit, že ryzí HTML aplikace byly, jsou a budou. V budoucnu se ovšem projeví profilace těchto aplikací pouze na určité typy úloh.

Singleton a problém Double-check lockingu

Pokud jste již někdy používali návrhový vzor Singleton ve vícevláknovém prostředí, tak jste zřejmě narazili na problém jedinečnosti Singletonu resp. synchronizaci metody, která vrací jeho instanci. Synchronizovat celou metodu vracející instanci, se nevyplatí z hlediska vzájemného zdržování jednotlivých vláken.

V některých materiálech se proto uvádí technika tzv. double-check lockingu (dvojité kontroly s uzamčením), která vypadá následovně

 
  .
  .
  . 
  public static Singleton getInstance() {
    if(singleton == null) {
      synchronized(Singleton.class) {
        if(singleton == null) {
          singleton = new Singleton();
        }
      }
    }
    return singleton;
  }
 

Tato technika je založena na tom, že se synchronizuje pouze vytvoření instance Singletonu to pouze v případě, že je Singleton neinicializován(singleton == null) v synchronizovaném bloku.

Tento kód je teoreticky dobrý ovšem prakticky je nepoužitelný! Na vině je pamětový model Javy, který umožňuje tzv. Out-of-order zápis. V podstatě se jedná o to, že reference na objekt nemusí být rovná null(je již alokována paměť na haldě s ukazatelem na zásobníku) a objekt ještě není zinicializován(je volán jeho konstruktor). Out-of-order zapís je zavlečen JIT kompilátorem.

Řešení se nabízí více a každé má své pro a proti. Například v použití statické třídní proměnné nebo proměnné typu volatile, u které nesmí JIT kompilátor provést Out-of-order. Více o tomto problému Peter Haggar v článku Double-checked locking and the Singleton pattern a tým odborníků David Bacon, Joshua Bloch, Jeff Bogda, Cliff Click, Paul Haahr, Doug Lea, Tom May, Jan-Willem Maessen, John D. Mitchell, Kelvin Nilsen, Bill Pugh, Emin Gun Sirer v článku The "Double-Checked Locking is Broken" Declaration

pondělí 20. října 2003

Java vs. C#

Tomáš Kouba se pustil do testování rychlosti Javy. Spot či spíše článek Porovnání rychlosti Javy na MS Windows a Linuxu a srovnání s C# a C ukazuje porovnání těchto technologií jak z hlediska vývojové platformy(Java,C#,C), tak v případě Javy, porovnání výkonu na operačních systémech Windows a Linux. Pokud mohu soudit, tak se jasně ukázalo, že C# a celá platforma .NET vychází architekturou z Javy a její neduhy dotahuje k dokonalosti. Na druhou stranu je třeba brát zřetel na fakt, že Virtuální stroj pro C# je tvořen samotným Microsoftem a proto je harmonie s operačním systémem takřka dokonalá. Otázkou zůstává jakou rychlost by C# vykazoval na portaci v linxuvém prostředí.

Hledisko rychlosti prezentované výsledky testů nemusí mít takovou váhu v řešeních, pro které je Java a C# určen. Nepředpokládm možnost, že by se v Jave někdy v budoucnu psali ovladače. Nesporná výhoda totiž leží v přenositelném byte kodu. Větší váha je dnes kladena na efektivitu vývoje a v neposlední řadě na kvalitě dalších aspektů jako je flexibilita a rozšiřitelnost těchto platforem.

pátek 17. října 2003

Mýtus rozšiřitelnosti PHP

Když jsem si včera nesl domu článek The PHP Scalability Myth, abych jej v klidu pročetl tak mě nenapadlo, že bude zapadat do kontextu dalšího včerejšího spotu Vlastnosti dobré střední vrstvy. Jack Herrington se snaží vyvrátit mýty, které jsou šířeny o této skriptovací platformě. Právě spojitost mezi jeho výkladem nad logickým a fyzickým rozvržením třívrstvé architektury uvozuje tyto dva články do jednoho kontextu.

Na konci článku je zajímavá zmínka o JSR 223, jehož cílem je umožnit integrovat skriptovací jazyky jako prezentační vrstvu, tzv. front-end, do serverových aplikací v Jave. Jenom dodám, že JSR je součástí Java Community Process, který slouží pro další rozšiřování platformy Java.

Vlastnosti dobré střední vrstvy

Ruku v ruce s vývojem počítačů šel vývoj architektury systémů, které na nich běžely. Od decentralizovaného zpracování, kdy byla většina výpočetního výkonu prováděna klientem, se koloběh vrací k centralizovanému zpracování a přesunutí jak časově tak i výkonnostně náročnějších operací zpět na server.

S tímto přesunem je spojen přechod na takzvanou vícevrstvou architekturu, která je tvořena třemi základními vrstvami: prezentační, aplikační a datovou. Pomineme li vrstvy prezentační a datovou, které se též nazývají front-end a back-end, pak srdcem této architektury je vrstva aplikační též nazývaná střední vrstva. V této vrstvě je realizována tzv. business logika, která řídí dílčí procesy daného systému.

Mezi softwarové řešení střední vrstvy tzv. middleware patří například J2EE, PHP, .NET a další. Satya Komatinemi se zaměřuje na vlastnosti dobré architektury prezentující střední vrstvu v článku Qualities of a Good Middle-Tier Architecture. Výše uvedená softwarová řešení nabízejí technologie pro řešení business(aplikační) logiky, právě kvalita těchto technologií může být přímou úměrou ku kvalitě vrstvy jako takové. Stanovení jednotlivých kritérií úspěšnosti a porovnání nabízených řešení, staví článek na vysokou úroveň.

středa 15. října 2003

Pozor na výjimky

Paul Philion se v článku Beware the dangers of generic Exceptions zabývá problematikou výjimek v Jave. Java má v systému výjimek(Exception) velice silný a propracovaný mechanismus, který umožňuje ošetřit chyby vznikající za běhu programu.

Korektní využití tohoto systému, tak aby se výjimky či spíše dohledávání vzniklých chyb nebo jejich ošetření nestalo noční můrou, vyžaduje určité programovací návyky a techniky. Mezi tyto návyky patří například práce s generickými výjimkami. Článek je velice dobrou osvětou a vřele ho doporučuji prostudovat.

K tématu výjimek (Dagblog 19.03.2003 - Vyjímky v jave prakticky)

úterý 14. října 2003

Kauza softwarových patentů pokračuje

Už to vypadalo, že evropští politici budou následovat své zaoceánské kolegy a s úsměvem ve tváři odhlasují tzv. softwarové patenty. Naštěstí po vlně protestů, které měly formu nejen v podobě podpisových akcí, ale i živého protestu před Evropským parlamentem v Bruselu, se zdá, že je toto nebezpečí zažehnáno. O současném stavu informuje root.cz EP hlasoval pro skutečná omezení patentovatelnosti.

pátek 10. října 2003

PHP 4.0 a OOP

Pokud používáte populární skriptovací jazyk PHP verze 4.0 a chystáte se začít programovat objektově, pak článek Na co si dát pozor při práci s objekty v PHP Miroslava Holého může být dobrým vstupním bodem. Zůstává otázkou jestli se vůbec vyplatí, s prachbídnou podporou implementace OOP v této verzi PHP, začínat. Dle mého skromného názoru nikoliv, dovedu si totiž představit, že programátor neznalý OOP bude pouze zmaten. Proto bych spíše doporučoval vyčkat na PHP 5.0, kde podpora OOP vypadá již mnohem zajímavěji.

středa 8. října 2003

Velký cirkus v Praze, Sun Tech Day

Dne 18.listopadu 2003 se v Kongresovém Centru Praha uskuteční vývojářská konference Sun Tech Day. Témata jsou velice zajímavá

  • J2SE[TM] and Desktop Computing (Swing/JFC, Java[TM] Web Start, etc.)
  • Web Services (Standards and Java[TM] Technology APIs)
  • Web Tier Technologies (Servlets, Java[TM] Server Pages, etc.)
  • Web Application Frameworks (MVC, JSF, Struts, etc.)
  • Sun ONE Products (Sun ONE[TM] App. Server, Portal Server, etc.)
  • Platforms (Solaris[TM] Operating System, Linux, Solaris x86, etc.)
  • Tools (Sun[TM]ONE Studio, RAVE, etc.)
  • Security (JSSE, JAAS, Enterprise security, etc.)
  • System Design Techniques (Performance, Scalability, etc.)
  • Emerging Technologies (Grid, N1[TM] Technology, Java Card[TM] Technology,etc.)
  • Emerging Distributed Computing (Jini[TM] Network Technology, JavaSpaces[TM],Project Jxta, etc.)
  • Technology Comparison (J2EE[TM] vs. .NET, J2ME[TM] vs. BREW, etc.)
  • Java[TM] Programming for Starters (Java[TM] for VB Developers, etc.)
  • Technical Case Studies

Registrace je samozřejmě zdarma, více informaci a samotnou registraci najdete oficiálních stránkách a agendě dne. Dle mého skromného názoru se jedná o dobrou příležitost pro další prohloubení znalostí a rozšíření obzoru.

úterý 7. října 2003

Sémantický web

Taky slýcháte o Sémantickém webu a nemáte představu o tom co vlastně znamená? Sémantický web je o informacích, o informacích, kterým rozumí nejen člověk, ale především počítače či chcete li programy, které umějí informace zpracovat, vyhodnotit a chápat jejich obsah. Článek Sémantický web v kostce Patricka Thibodeau na serveru scienceworld.cz poskytuje velice pěkný úvod k tématu a alespoň u mě evokuje pohled kamsi do budoucnosti. Zkusme se zamyslet jak takový web bude opravdu vypadat a jak daleká je tato budoucnost....

(Přidáno: 07.10.2003 11:05) Martin Hassman z serveru czilla.cz mě upozornil na rozšíření Mozilly. Cituji přímo (omluvte chybějící diakritiku):

cirou nahodou jsem prave precetl soucasne vas prispevek o semantickem webu a Neiluv prispevek o jeho novem rozsireni pro Mozillu Topicalla , coz jest "an client application for the Semantic Web".

Jen poznamenam, ze Neil je autorem XulPlanet , takze jeho rozsireni muze byt do budoucna slibne, ackoliv projekt prave zacal a je ted ve stadiu very-pre release.

Open Source není o svobodě

Co znamená termín Open Source? Dokážete odpovědět na tuto prostou otázku? Termín Open Source je velice volný a skoro by se dalo říci, že si jej může každý vykládat po svém. Tento termín představuje pouze pravidla podle, kterých lze ten či onen software šířen pod určitou konkrétní licencí považovat za Open Source. Pokud bychom si představili Open Source jako přihrádku, pak by do ní patřily pouze licence splňující její pravidla. Právě jedním z těchto pravidel je právo na zdrojový kód viz. Open Source I: Co je to "Open Source software"

Jinými slovy Open Source vůbec neznamená svobodu používaní tohoto programu, Open Source je pouze ekonomický pohled na Free Software. Klíčem k pochopení celé problematiky kolem Open Source je licence. Nezáleží jestli o sobě program prohlašuje, že se jedná o Open Source vždy je směrodatná licence pod kterou je šířen. Komentáře k licencím můžeme najít stránkách projektu GNU. Světlo do problematiky vnáší Richard Stallman v článku Proč je termín "Free Software" lepší než "Open Source" v překladu Petra Přidala.

pondělí 6. října 2003

Co nevíte o platformě Java

Daniel Michalik v článku Co možná (ne)víte o Javě představuje základní rysy jazyku Java. Nebojte se nejedna se o úvod do OOP, ale o shrnutí základních rysů této úspěšné platformy.

V článku je nastíněna zpráva paměti pomocí SNO alias Garbage Collectoru. Jenom bych autora doplnil, ze technika počítaní referencí je opravdu zastaralá. Používá se technika kdy jsou aktivní objekty vyhledávány podle odkazů ze zásobníku(stack) na haldu(heap). Samotný úklid je pak realizován adaptivním schématem. Adaptivním proto, že se použije mod zastavit a kopírovat nebo označit a zamést.

V článku jsou velice pěkně probrány kompilátory, které platformově nezávislý byte code přeloží do kódu nativního pro danou platformu. Jako obvykle je zde zmíněna problematika tvorby GUI v Jave.

(Přidáno 08.10.2003) Tomáš Kouba Java na AbcLinuxu a testy rychlosti Javy

pátek 3. října 2003

AWStats šém k log souborům web serveru

Zkoumáte občas logy? Pokud čtete tento spot, tak pravděpodobně ano. Logy takřka na jakékoliv aplikační úrovni, jsou klíčem k řešení mnoha problémů. Bez nástrojů, které jim vdechnou život, by byly logy pouze nezáživnou kupou dat.

Posledních šest dní jsem strávil přípravou, sběrem a vyhodnocováním aplikačních logů. Neocenitelnou pomůckou se mi stal analyzátor logu AWStats. Osobně jsem jej použil na log produkovaný serverem IIS, ale zde jeho možnosti nekončí. Poradí si z logy Apache, logy ve formátu NCSA a mnoha a mnoha dalšími.

Jedná se v podstatě o perlové skripty, které s těmito logy doslova kouzlí. Mezi opravdu základní vlastnosti, které mohou být prezentováný např. jako HTML stránka(Ukázkový výstup na logu domovských stránek projektu), patří statistky návštěvnosti(hodiny,dny,měsíce, roky) , informace o počtu shlédnutých stránek, přenesených datech, klientských agentech(UA), HTTP stavových kódech, statistikách o přístupu z výhledávačů,průměrných dobách strávených na stránkách a mnoho dalších informací, které se mohou při vyhodnocování hodit.

Služby jako navrcholu.cz či toplist.cz nabízejí jen slabý odvar toho co prezentuje AWStats. Navíc AWStats můžete provozovat jako CGI aplikaci, takže statistiky prohlížíte přímo z browseru. Snad ještě dodám snadnou instalaci a lokalizaci do češtiny a jako třešínku přidávám, že program je tzv. svobodný software (free software) a je šířen pod licencí GNU.

Pokud hledáte analyzér logu, mohu AWStats vřele doporučit. Pro uživatele IIS bych dodal, že se mi také osvědčil Log Parser 2.0 nabízený přímo firmou Microsoft, který umožňuje pro získávání dat z logu využít jazyk SQL.

Binární reprezentace XML?

Rozpolcené pocity, ve mě, vyvolává diskuse o binárním kódování informací obsažených v dokumentech XML, která proběhla na konci září v kalifornské Santa Clare pod patronátem W3C. O tom, že se nejednalo o lecjaký picnic svědčí i účast zástupců firem Oracle, IBM, Sun, Microsoft atd.(via.30.09.2003 root.cz Akta X 0309)

Položme si otázku co by mohlo binární kódování XML přinést? V kontextu výše uvedených firem zřejmě hodně. XML data jsou dnes implementována na všech možných úrovních informačních systému. XML se stalo standardem pro webové služby, standardem pro konfiguraci aplikací a systémů, standardem pro ukládání dat a v neposlední řadě standardem pro výměnu zpráv. Nesdílím názor, že XML je marketingový výstřelek, má své opodstatnění.

Dokáži si představit složité systémy, které produkují obrovské množství XML dat sloužících k dalším účelům těchto systému. V tomto případě je nářek nad chybějícím standardem binárního kódování oprávněný. Ovšem pak se ptám, je tedy třeba držet tyto data v XML? Možná ano, možná ne. Odpověď není tak jednoduchá a měla by se posuzovat vždy v daném kontextu. Stejně tak by se měla posuzovat i otázka potřeby binárního kódování XML dat.

Pokud pozměním v původní otázce slovo mohlo na mělo, tak z hlediska přenositelnosti jednoznačný standard, který by umožnil vlastní odstínění XML od jeho binární podoby či podob. Pak by se lidově vlk nažral a koza zůstala celá.

čtvrtek 2. října 2003

Swing versus SWT

Tomáš Kouba se pouští do srovnání java technologií pro tvorbu GUI a porovnává technologii Swing oproti technologii SWT. Autor sice vyjmenuje výhody SWT ovšem na konec se přiklání k používání technologie Swing. S tímto závěrem bych mohl polemizovat, jedinou výhodou Swingu spatřuji v integraci do Java 2. Co se týka rychlosti, a visuálního vzhledu jednoznačne pro mě vítězí SWT. Má tu podstatnou výhodu, že komponenty vypadaji opravdu tak jako komponenty operačního systému a především nevznikají různé grafické anomálie(problikávání apod.) jako v případě Swing.

Nevýhoda SWT je zřejmá, potřebuje nativní knihovny daného operačního systému. To se mi zdá jako lepší volba, než se snažit udělat něco universálního. GUI je tak specifická záležitost, že jsem schopen tolerovat platformové závislosti za cenu vyšší rychlosti a vzhledu, platforma Eclipse je toho dokladem. Co se týká GUI návrhářu, osobně jsem viděl pro Swing pouze jediný použitelný a to jako součast vývojového prostředí JBuilder. Ostatně i pro SWT existuje obdoba v podobě V4All pluginu pro Eclipse.

pátek 26. září 2003

Princip náhrady NOT EXISTS outer joinem aneb proč se někdy nepíše (+)

Na uvedený trik jsme narazili na ORACLE8 u jednoho dotazu s NOT EXISTS, který trval neúměrně dlouho, ale po nahrazení outer joinem došlo k mnohonásobnému zrychlení. Protože jsme nejdřív zpochybňovali, zda je toto řešení správně, namodeloval jsem příklad, na kterém ukážeme, že to jde:

Mějme tabulku TZW, kde jsou pracovníci a jejich bydliště, a tabulku TZS, kde jsou pro pracovníka uvedeny jeho funkce či dovednosti:

create table TZW(name varchar2(25), home varchar2(25) );
create table TZS(name varchar2(25), skill varchar2(25));
insert into TZW values ('Tom','TomHouse' );
insert into TZW values ('Jiri','JiriHouse' );
insert into TZW values ('Ruda','RudaHouse' );
insert into TZS values ('Tom','NEW');
insert into TZS values ('Jiri','PROGRAMMER');

Chceme vypsat všechny, kteří nejsou noví (skill není NEW). Úlohu řeší dotaz:

SQL> ed
Zapsáno file afiedt.buf
  1  select TZW.name, home from TZW -- DOTAZ 1
  2* where not exists (select 1 from TZS where TZW.name = TZS.name and TZS.skill = 'NEW')
SQL> /

NAME                      HOME
------------------------- -------------------------
Jiri                      JiriHouse
Ruda                      RudaHouse

Stejnou úlohu (za předpokladu, že sloupec TZS.name nemůže být NULL) ale řeší i dotaz

SQL> ed
Zapsáno file afiedt.buf
  1  select TZW.name, home from TZW, TZS -- DOTAZ 2
  2* where TZW.name = TZS.name(+) and TZS.skill(+) = 'NEW' and TZS.name is NULL
SQL> /

NAME                      HOME
------------------------- -------------------------
Jiri                      JiriHouse
Ruda                      RudaHouse

Tato konstrukce vypadá neobvykle v tom, že u outerjoinovaných tabulek se zpravidla píšou plusítka ke všem sloupcům. Proč není u sloupce TZS.name ve třetí podmínce plusítko? Když ho tam dáme,...

SQL> ed
Zapsáno file afiedt.buf
  1  select TZW.name, home from TZW, TZS -- DOTAZ 3
  2* where TZW.name = TZS.name(+) and TZS.skill(+) = 'NEW' and TZS.name(+) is NULL
SQL> /

NAME                      HOME
------------------------- -------------------------
Jiri                      JiriHouse
Ruda                      RudaHouse
Tom                       TomHouse

...tak to vrací všechny hodnoty! :-( Podívejme se na problém podrobněji.

Teorie

Ačkoli se SQL příkazy zapisují jako SELECT - FROM - WHERE, pro přijatelnou představu o tom, jak dotaz pracuje, existuje jednoduchá pomůcka: číst SQL select v pořadí FROM - WHERE - SELECT. Tato pomůcka se mi osvědčí vždy, když potřebuji pochopit smysl nějakého dotazu. Vychází z relační algebry, na které je jazyk SQL postaven. Proto nejprve pár slov k relační algebře. Pro příklady použijme okřídlené ukázky z manuálů ORACLE, kde je mj. tabulka zaměstnanců EMP a tabulka pracovišť DEPT.

Relační algebra je model, v němž sloupce nazýváme atributy a tabulka o n sloupcích je představována relací, tedy podmnožinou kartézského součinu množin všech možných hodnot jednotlivých atributů. Množině všech možných hodnot atributu říkáme doména atributu, takže relace je podmnožina kartézského součinu domén. Relace je tedy množina uspořádaných n-tic. Poznámka: Je omylem si myslet, že relační databáze je proto, že mohou být relace mezi tabulkami, např. 1:N. Relační databáze je relační, i když obsahuje jedinou tabulku!

Např. doména atributu, který je v databázi modelován sloupcem EMPNO typu NUMBER(4), je množina všech čtyřciferných a kratších čísel. Tabulce EMP odpovídá relace EMP. Jednotlivé n-tice relace představují řádky tabulky.

Zaměřme se nyní na tři nejdůležitější operace relační algebry, kterými je vnitřní spojení, selekce a projekce.

Vnitřní spojení
je kartézský součin dvou relací, z něhož se vyberou ty n-tice, které splňují spojovací podmínku. Spojovací podmínka je od toho, aby se k sobě dostala smysluplná data. Tak vznikne nová relace, jejíž počet atributů je roven součtu počtu atributů uvažovaných relací.
Selekce
znamená vybrání těch prvků relace, které splňují určitou podmínku. V relační algebře se zapíše pomocí kulatých závorek. Např. vybrání všech zaměstnanců zaměstnaných od 1.1.2000 se zapíše jako EMP(hiredate>1.1.2000).

Možná vás napadne, že vnitřní spojení je vlastně kartézský součin s následnou selekcí. Ano, je to tak. Je však důležité - obzvlášť pro pozdější pochopení outer joinů - si všimnout, že u selekce podle spojovací podmínky a "obyčejné" selekce se pokaždé jedná o jiný důvod, proč se selekce dělá. Selekce podle spojovací podmínky vyjadřují omezení, která je nutné zachovat kvůli smysluplnosti datového modelu, zatímco ostatní selekce vyjadřují omezení, která vyplývají až z logiky uživatelské aplikace. Kdybychom například neprovedli selekci při spojení relací EMP a DEPT, dostaneme kartézský součin, kde bude uveden každý zaměstnanec s každým pracovištěm, což ve většině případů budou nesmyslné údaje v jednom prvku relace. Když neprovedeme na relaci EMP selekci EMP(hiredate>1.1.2000), zůstane relace EMP. Sice to nebude to, co požadoval např. filtr v aplikaci, ale prvky relace budou stále odpovídat reálným objektům, v tomto případě zaměstnancům.

Zde se dostávám k tomu, proč tu uvádím syntaxi zápisu v relační algebře, když to je jazyk pouze teoretický. Vystihuje totiž odlišnost mezi uvedenými dvěma druhy spojení. V relační algebře vypadá zápis pro přirozené spojení relací EMP a DEPT takto: EMP*DEPT. Spojovací podmínka se neuvádí, protože se chápe jako samozřejmost. (Jiné než implicitní spojovací podmínky nejspíš taky jde specifikovat, ale syntaxí relační algebry se tu nechci tak do hloubky zabývat.) Takže v relační algebře vyjádříme lépe to, co chceme a nesnižujeme čitelnost dotazu samozřejmostmi.
Projekce
znamená vytvoření nové relace z původní vybráním určitých atributů z každé n-tice v relaci. Nová relace má tedy stejný počet prvků, ale prvky relace jsou m-tice, kde 0<m<=n.

Po uvedení těchto operací vám nejspíš dojde souvislost mezi relační algebrou a SQL. Spojení se provádí ve FROM, selekce ve WHERE a projekce v SELECT (ano, ze začátku to mate, že? ale brzy si zvyknete :-) Můžeme se spolehnout, že systém vrátí stejná data, jako kdyby nejprve spojil všechny tabulky, pak provedl selekci a nakonec projekci (taková implementace by byla k smíchu, ale pro představu chování navenek je vhodná). SQL samozřejmě umí o něco víc, než relační algebra, ale pro pochopení outer joinů nám tento model stačí. Přechodem od relační algebry k SQL jsme se totiž připravili o rozlišování podmínek pro selekci na výše uvedené dva typy. V SQL (zvláště ORACLE) totiž všechno namastíme do WHERE.

Outer joiny

Zmíněný rozdíl začne být znatelný, když začneme používat vnější spojení (outer joiny). Vysvětlíme to na levém spojení. Levé vnější spojení dvou relací R1, R2 je spojení, kde se pro každý prvek relace R1

  1. vyberou prvky relace R2, které splňují spojovací podmínku (vnitřní spojení)
  2. pokud žádný takový prvek neexistuje, bude aktuální prvek relace R1 přesto přítomen ve výsledné relaci a atributy z relace R2 budou doplněny hodnotami NULL

Zápis vnějšího spojení např. v MSSQL odpovídá teoretickému základu mnohem více než v ORACLE: pomocí LEFT OUTER JOIN ON se specifikuje spojovací podmínka už v klausuli FROM a nezhoršuje se tak čitelnost klausule WHERE, která pak slouží jen pro aplikační podmínky. Bohužel na ORACLE se zapisují všechny podmínky do klausule WHERE. Podmínky s (+) za názvem sloupce jsou spojovací podmínky pro vnější spojení, zatímco podmínky bez (+) jsou podmínky aplikace (nebo i spojovací podmínky pro vnitřní spojení).

Jak tedy fungují dotazy uvedené v úvodu?

Spojovací podmínka v dotazu 2 je TZW.name = TZS.name(+) and TZS.skill(+) = 'NEW'. Proto spojením tabulek vznikne

(Tom,TomHouse,Tom,NEW)
(Jiri,JiriHouse,NULL,NULL)
(Ruda,RudaHouse,NULL,NULL)

Pak se aplikuje selekce na podmínku TZS.name is NULL, projekce a vznikne správný výsledek

(Jiri,JiriHouse)
(Ruda,RudaHouse)

Slovně vyjádřeno: jestliže nechceme dát do výsledku osoby, které splňují určitou podmínku, připojíme jinou tabulku podle této podmínky. Pak ponecháme jen ty řádky, v nichž za nás outer join dosadil NULL, protože víme, že dosadil NULL tehdy a jen tehdy, když daná podmínka nebyla splněna.

Naproti tomu spojovací podmínka v dotazu 3 je TZW.name = TZS.name(+) and TZS.skill(+) = 'NEW' and TZS.name(+) is NULL. Proto spojením tabulek vznikne

(Tom,TomHouse,NULL,NULL)
(Jiri,JiriHouse,NULL,NULL)
(Ruda,RudaHouse,NULL,NULL)

Pro prvek (Tom,TomHouse) tabulky TZW se nenajde odpovídající záznam v tabulce TZS, protože žádný záznam v tabulce TZS nesplňuje třetí podmínku. Kromě spojovací podmínky už žádná další podmínka není, takže po aplikaci projekce vznikne nechtěný výsledek

(Tom,TomHouse)
(Jiri,JiriHouse)
(Ruda,RudaHouse)

Odkazy

jeden dotaz na http://www.google.com
něco k teorii [PDF]