Pondělí, duben 24, 2006

Souboj tlusté a tenké aplikace

Pokud dnes vývojář nebo architekt navrhuje novou software aplikaci, musí se rozhodnout, zda bude naprogramována jako tenká (web) nebo tlustá aplikace. Pokusím se shrnout několik vlastností těchto aplikací:

Rozdíl mezi tlustou a tenkou aplikací

Tlustý a tenký klientV tomto článku budu tenkými aplikacemi nazývat takové, které běží na serveru a k uživateli se přenáší pouze uživatelské rozhraní přes protokol HTTP v popisném jazyku (X)HTML. V některých případech se část logiky též přesouvá na web prohlížeč a to pomocí programovacího jazyku JavaScript. Tlusté (GUI) aplikace oproti tomu běží na přímo na počítači klienta.

Nutnost instalace

Zde vítězí web aplikace. Stačí mít na počítači nainstalován kvalitní web prohlížeč a aplikace běží. Nedovedu si dnes představit osobní počítač na kterém by web prohlížeč nainstalován nebyl. Sice to většinou asi nebude ten nejlepší prohlížeč, ale svou úlohu zvládne. Instalovat se nemusí nic.

Tlustý klient se naopak instalovat musí a to většinou přímo na pracovní stanici. Sice dnes existuji technologie jako je ClickOnce nebo WebStart, které instalaci na klienta velmi usnadňují, ale přesto je tato instalace zapotřebí. Minimálně to činní problém u málo výkonných počítačů nebo u počítačů, kde uživatel nemá právo aplikace na pracovní stanici nainstalovat. Také u velkých firemních sítí je snadnější aplikaci spouštět v rámci webového prohlížeče, protože firemní správci jsou většinou velmi přetíženi a to bez ohledu na množství nutné práce.

Bezpečnost dat

Toto je mnohem složitější problém a nelze jednoznačně určit vítěze. Záleží hodně na typu aplikace. Pokud jde o firemní aplikaci, data by měla být na serveru a také většinou jsou u všech typů aplikací, tedy i u tlustých klientů. V případě individuální aplikace, například email klienta, je situace ještě složitější. Emailové zprávy jsou v téměř vždy odesílány nezašifrované a správce webového serveru si může číst kohokoli emaily. To, že v současné době zažívají free emailové web servery takový rozmach znamená, že to buď uživatelům nevadí, nebo si nebezpečí vůbec neuvědomují. Často jde o zprávy velmi intimní a to jak osobně, tak obchodně. Tedy u v tomto příkladu (soukromý emailový klient) bych z tohoto hlediska jednoznačně preferoval tlustého klienta.

U otázky zavlečení různého zadních vrátek, spyware, virů a podobných škůdců do počítače je na tom web aplikace o něco málo lépe. Na server ji instalují zkušení správci, kteří jsou schopni tato nebezpečí řešit a bránit se proti nim. Infikování serveru je ovšem mnohem větší průšvih, než infikování pár pracovních stanic.

Spolehlivost

Spolehlivější je samozřejmě lepší, pokud aplikace běží jako webová pouze na serveru. Platí to ale pouze v případě, kdy je možno se na aplikaci kdykoliv napojit. Pokud aplikace běží v rámci veřejného internetu a uživatel má občas potíže s jeho dostupností, například u vytáčeného připojení, není aplikace na serveru výhodou, ale naopak. U nasazení webových aplikací je výhodou i snadnější zálohování dat.

Spolehlivost z hlediska kvality programového kódu si nedovoluji jednoznačně posoudit. Lépe je na tom asi tlustá aplikace, webové aplikace se totiž dnes programují pomocí Ajaxu (Asynchronous JavaScript and XML), kterému chci věnovat samostatný článek a ten se obtížně ladí a udržuje. Dnes se ale již objevují první vývojářská prostředí a kvalitní frameworky, která snadněji dovolují programovat web/Ajax aplikace.

Ovladatelnost a vzhled

Zde si dovolím říci, že tlustá aplikace jednoznačně vítězí. Sice dnes existují velmi kvalitní knihovny (například UI komponenty Telerik pro ASP.NET), které umožní webovým aplikacím se tlustým velmi přiblížit, ale pořád to zdaleka není ono. Navíc některé aplikace se za stavu současných technologií dají jako tenké web aplikace naprogramovat velmi těžko. Např. programovací nástroje, celkově multimédia, graficky náročné hry apod.

Ergonomie je další podkapitolou v této oblasti, kde tlusté aplikace vítězí. Jedinou webovou aplikaci, kterou viděl a šla ovládat, alespoň částečně klávesnicí, je Gmail. U tlustých aplikací se Microsoftu podařilo nasadit určitý vzhled a způsob ovládání a ten většina producentů software akceptuje a dodržuje. Zkušený uživatel, který zasedne k neznámé aplikaci nemá s naučením její ergonomie většinou žádné velké problémy. U webových aplikací to tak není. Každá se ovládá úplně jinak a často mám pocit, že návrháři soutěží v tom, jak uživateli položit co nejobtížnější kviz - jak to ovládat?

Programování

Zde se vrátím k problémům s Ajaxem. Aby se dala webová aplikace lépe ovládat, je nutné využít technologii Ajax. Zde potom bohužel nastane několik významných problémů, které velmi znepříjemní programování a aplikace a její testování. Každý, kdo programoval takovou aplikaci, ví přesně o čem píši. Proto je většinou programování web aplikací náročnější a složitější.

Multiplatformnost

Možnost nasadit aplikaci na více platforem má více rozměrů. Za prvé je nutné určit jaké je cílové zařízení. Může jít o osobní počítač, chytrý mobilní telefon, elektronický diář apod. V nejobvyklejším případě jde o osobní počítač. Zde je potom otázkou vlastní operační systém. Pokud jde o pracovní stanice, není těch operačních systémů zase tolik: MS Windows, GNU/Linux a Mac OS X. Ostatní operační systémy nejsou významné. Ve všech výše uvedených případech je vítězem tenká web aplikace. Problémy samozřejmě nastávají u malých zařízení, jako jsou mobilní telefony, kde displej nemá dostatečnou velikost, ale v ostatních případech je vše jasné. Pro všechny jenom trochu důležité platformy je k dispozici minimálně jeden webový prohlížeč, který dostatečně ctí standardy a umožňuje ovládat a zobrazovat příslušnou web aplikaci.

U tlustých aplikací je v současné době sice také několik přenositelných možností (Java, WxWidgets, Qt, REALBasic, XUL, ...), ale tyto nástroj mají problémy a multiplatformní vývoj je mnohem složitější a nákladnější než vývoj pro jeden operační systém.

Náklady (vývoj, stanice a celkové)

Náklady na vývoj jsou díky problémů s Ajaxem vyšší u web aplikací, ale v ostatních parametrech tento druh aplikací vede. V naprosté většině případů, především tehdy, kdy se aplikace kupuje a nevytváří vlastními silami, jsou levnější web aplikace. Pracovní stanice stačí i ty nejjednodušší s minimálními HW nároky a náklady na správu a upgrade jsou také mnohem menší - téměř vše stačí obsluhovat pouze na serveru.

Microsoft

V čem je Microsoft problém? V tom, že pokud chcete psát tlustou aplikaci, budete ji pravděpodobně psát pro některý z operačních systémů této velké firmy. Pro některé vývojáře je právě to problém. Nejde tolik o technickou, jako spíše psychologickou záležitost, ale to její význam nijak nezmenšuje. Řešení tohoto problému hledejte v podkapitole Závěr.

Ostatní problémy u web aplikací

Webové tenké aplikace mají několik dalších menších problémů:

  • Vzhledem k tomu, že se téměř veškeré výpočty a práce s daty odehrává na serveru, je toto zařízení často přetíženo. Naopak často velmi výkonné počítače v roli pracovních stanic zahálejí a jejich potenciál není využit.
  • Přenášet větší množství dat na pomalejších linkách, na kterých je mnoho uživatelů nuceno pracovat, je náročné a práci velmi zdržuje. Představme si například tabulku z tabulkového procesoru, která je součást projektu. Pokud je projekt řízen pomocí webové aplikace, je nutné tento soubor neustále přenášet sem a tam mezi stanicemi přes web rozhraní, což je problém nejen pro vývojáře, ale i pro samotné uživatele. Zde je výhodné použít například přenosový protokol WebDav, který je kvalitně implementován do všech důležitých desktopových operačních systémů.
  • Nepřímá interakce aplikace s uživatelem: například email klient - kdy přijde nový email, není pro tlustou aplikaci žádný problém zobrazit nové okno, které na tuto novou událost upozorní. V případě webové aplikace to je velmi složité, až nemožné.
Výhody jednotlivých řešení
Tlustá aplikace Tenká (web) aplikace
  • Lepší bezpečnost u domácích a SOHO nasazení.
  • Funkční i bez intranetu/Internetu.
  • Snadnější a levnější programování i ladění.
  • Lepší ovládání i vzhled aplikace.
  • Lepší bezpečnost u intranetových nasazení.
  • Nemusí se instalovat, spravuje se pouze na serveru.
  • Spolehlivější a snadněji zálohovatelné.
  • Multiplatformní klient.

Závěr

Závěr zdaleka není jednoznačný. Každý si musí udělat svůj názor sám. Samozřejmě velmi záleží na typu rozhodované aplikace. Dovolím si přednést několik vlastních bodů.

  1. V případě, že je aplikace malá a je důležité v prvé řadě uživatele neodradit, například instalací, od jejího užívání, doporučuji web aplikaci. Příklad: on-line obchod.
  2. Pokud je aplikace UI složitá a některé její aspekty jdou naprogramovat pomocí web technologií těžko, zvolím tlustou aplikaci.
  3. Pokud nenávidím Microsoft, navštívím psychologa. Microsoft není ďábel, jde pouze o komerční společnost, která se snaží maximalizovat svůj zisk.
  4. Pokud zkušený uživatel pracuje s aplikací denně, bude preferovat tlustou aplikaci. Pokud jde o nezkušeného uživatele nebo bude pracovat s aplikací výjimečně, bude preferovat web aplikaci.
  5. Naprostá většina uživatelů si nechce na svůj počítač nic nového instalovat.
  6. Web aplikace jsou také módní záležitostí. Zkuste prosím spočítat, kolik minut za dnešní den jste pracoval(a) na nějaké web aplikaci a naopak na nějaké tlusté aplikaci. Na druhé straně, pokud čtete tento spot a dočetl(a) jste ho až sem, tak nejste typickým uživatelem počítače. Typický uživatel počítače si není schopen na něj sám nic nainstalovat, ale obsluhovat web aplikaci většinou zvládne.
  7. Širokopásmový internet není samozřejmostí téměř nikde na světě.

Úterý, duben 18, 2006

Proč se Microsoftu nedaří porazit Javu?

Jak jsem již psal ve spotu TIOBE: Java 6x populárnější než .NET a ve spotu  Java skutečně poráží .NET?, tak je Java stále mnohem populárnější než technologie .NET a navíc rozdíl se stále zvyšuje. Podle TIOBE je rozdíl dokonce 6x. Jak je to možné? .NET má přece na své straně výrobce zdaleka nejpopulárnějšího desktopového operačního systému, firmu Microsoft. Ta je schopna bez problémů na každý počítač pomocí instalace nových operačních systémů nebo pomocí aktualizací .NET framework nainstalovat. Javu si každý musí stáhnout a nainstalovat sám. .NET je pro Microsoft operační systémy optimalizován - Java je stále zhruba podle mých testů o 10% pomalejší.

Důvod je podle mého takový: dnešní programování už zdaleka není o programování tlustých GUI aplikací, ale především o programování aplikací webových. Pokud by i nadále všichni programovali a požadovali tlusté aplikace, pak by Microsoft žádné vážné problémy neměl. Java na desktopech prohrává a v budoucnosti, kam dohlédnu, žádné změny na obzoru nejsou. Proč tomu tak je zde rozebírat nebudu, již jsem se tomu věnoval a možná se k tomu vrátím, ale není to dnes na programu dne.

Porážka .NET?

U webových aplikací je to o něčem jiném. Instalují a zpravují je většinou profesionálové, nebo alespoň poučení laici. Běží na výkonných serverech a na těch Microsoft nemá zdaleka tak jistou pozici jako na pracovních stanicích. Proč si vybírají Javu?

Falešné argumenty, které mají váhu

  1. Java je lepší programovací jazyk. To není pravda. Java je hlavnímu programovacímu jazyku platformy .NET, C# velmi podobná. Přechod vlastního jazyka je pro programátora otázkou několika hodin a C# má navíc některé drobné zajímavé prvky, které Java postrádá. V každém případě jde o jazyky velmi podobné.
  2. MS Windows server nechci protože je drahý. To snad ani tolik ne. Web Edition MS Windows server 2003 zase tak závratné peníze nestojí. Drahý je MS SQL server, to je pravda a u .NET je velmi silně preferován, ale lze se bez něj obejít a je možno nasadit SQL server jiný. Co se týká ceny, tak navíc hlavní zdaleka není pořizovací cena software. Hlavní jsou tzv. náklady na vlastnictví. Zde existuje mnoho studií, které za mnoho peněz a úsilí ukazují přesvědčivé výsledky, které si navzájem odporují a jsou v přímé závislosti na tom, kdo studie prováděl nebo zaplatil. V každém případě cena je v tomto případě velmi složitý argument.
  3. Nechci MS Windows server, protože se hůře vzdáleně spravuje. Microsoft na tomto poli udělal obrovský kus práce, ale základ, tj. příkazová řádka je na Linuxu/Unixu stále nepřekonatelná. Na druhé straně při dnešní rychlosti připojení k internetu není nezbytné příkazovou řádku používat, tedy nevýhoda pro Microsoft skutečně existuje, ale je velmi malá.
  4. Nechci MS Windows protože to není spolehlivý operační systém. To je téměř nemožné doložit a podle mého to není pravda. Je pravda, že technologie MS Windows vyžaduje poměrně časté restarty, ale to asi není to nejdůležitější. Spolehlivost všech vyspělých operačních systémů je minimálně velmi srovnatelná.

Ostatní argumenty

  1. Java skutečně běží na všech možných operačních systémech včetně Linuxu a mainframů IBM. Navíc .NET není jenom navázán na operační systémy MS Windows, ale ASP.NET aplikace jsou také silně navázány na IIS a ten je zase svázán s vlastním operačním systémem. Na první pohled je to jedno, ale pouze do doby, než si uvědomíte, že v případě, kdy potřebujete provést upgrade na vyšší verzi IIS, musíte též provést upgrade vlastního operačního systému.
  2. Pro .NET je pouze jedno kvalitní vývojové prostředí: MS Visual Studio. To je pravda a i když je výborné, možná ze všech nejlepší, tak množství skvělých vývojových prostředí pro Javu je veliké a navíc je většina z nich zdarma.
  3. Programuji v Javě, protože je nejrozšířenější, dostávám za to nejvíc peněz a když přijdu o práci, tak si snadno najdu novou. To je silný argument, sice je trochu v kruhu, ale je pravdivý.
  4. Nemám rád Microsoft. To je asi nejsilnější argument. Patří to trochu k módě, věku a Microsoft sám proti tomu toho moc neudělal - spíše naopak.
  5. Nevyhovuje mi filozofie/technologie/licenční politika MS Windows. Pokud je tomu skutečně tak, tak je to důvod MS Windows nepoužívat. Nikdy není dobré pro vlastní duševní pohodu dělat na něčem, co mi vadí.
  6. Java je budoucnost. Microsoft se zítra rozhodne, že technologii .NET dále podporovat nebude, protože má novou převratnou technologii .XXX a co já se svými pracně nabytými znalostmi?! Javu dnes nedělá jenom Sun, ale například i IBM a Oracle. Pokud by Sun z Javy vycouval, tak IBM si určitě může dovolit Javu mnoho let podporovat. Zde by měl z čistě pragmatických důvodů Microsoft co nejvíce podporovat projekt Mono (Open Source implementace .NET), ale to podle mého nikdy neudělá.
  7. Java je k dispozici téměř na každém mobilním telefonu. Když umím Javu, mohu programovat i pod mobilní telefony.
  8. Programovat web aplikace v Javě se naučilo mnohem více lidí, protože tady byla první. Proto je v Javě více aplikací a programátorů. Microsoft přišel jako druhý a nedaří se mu rozdíl dohnat.

Pondělí, duben 10, 2006

Java Studio Creator 2

Java Studio Creator je vývojový nástroj (IDE) pro vizuální tvorbu webových aplikací a vývoj portletů. Je založena na NetBeans 4.1 a je především určeno pro tvorbu JSF (Java Server Faces) komponent a vytváření JSR-168 portletů. Důraz při vývoji byl kladen na snadný přístup k databázím, zjednodušení životního cyklu zpracování událostí JSF - nyní pouze čtyři metody.

Java Studio Creator 2

Podporované databáze jsou:

  • Oracle (8iR3, 9iR2, and 10gR1);
  • Microsoft SQL Server 2000 SP3;
  • Sybase ASE 12.5; IBM DB2 V8.1;
  • MySQL database server 4.1 and 5.0 with JDBC driver My SQL Connector/J version 3.1.11.

Java Studio Creator 2 generuje WAR soubory, které lze umístit na servery:

  • Sun Java System Application Server 8.1 UR2 PE (bundled);
  • Sun Java System Application Server 7.1 SE/EE;
  • Sun Java Web Server 6.1;
  • Apache Tomcat 5.x;
  • BEA WebLogic Server 8.1;
  • BEA WebLogic Server 7;
  • IBM WebSphere 5;
  • Sun Portal Server 6.3.1.

Požadavky a instalace

Java Studio Creator 2 vývojové prostředí od firmy Sun, stálo původně 90$. Dnes ho lze stáhnout zadarmo, ale je nutné se zaregistrovat do SDN (Sun Developer Network). Registrace je zdarma a není v ní žádný problém. Stáhl jsem soubor pro MS Windows creator-2-windows-ml.exe, který měl velikost 254,23 MB. K dispozici jsou též instalační soubory pro Solaris Sparc/x86, Linux a Mac. Je také možno stáhnout doplňky třetích stran o velikosti 1.05 MB.

Pro MS Windows jsou uvedeny tyto hardware požadavky: CPU Pentium 4 o rychlosti 1 GHz; RAM 1 GB; prostor na disku 650 MB a operační systém 2000 SP4, XP SP2, 20003. Je též vyžadován Internet Explorer 5.5/6. Pro ostatní operační systému jsou požadavky obdobné. Instalace probíhá v angličtině a na mém počítači trvala zhruba 20 minut. Součástí instalace Sun Java System Application Server Platform Edition 8.1_02 (build b06-fcs), který se nainstaluje implicitně na administrativní port 24848, Admin User Name: admin a heslo je adminadmin. Aplikace celkově na disku zabrala 580 MB.

Lehké seznámení

Po instalaci jsem byl trochu zmaten a zbytečně z webu Sunu stáhl jednu vzorovou aplikaci pro testování. Zbytečné je to proto, že vzorové aplikace jsou součástí instalace, ale je nutné je použít tak, že nutno na jejich základě vytvořit projekt. Určitě se to někde píše, ale po manuálu sahám pouze v případě nejvyšší nouze.

Po instalaci se jsem nechal spustit IDE a aplikační server a provedl update všech modulů. Update Center stáhl cca 3,5 MB dat a provedl automatickou aktualizaci. IDE v rámci aktualizace vyžaduje restart, který lze odložit.

Vzorové aplikace jsou velmi pěkné jak z hlediska kódu tak i vzhledu. Je vidět, že se v tomto Sun poučil a chápe co je zapotřebí pro masový úspěch. Editory jsou svižné a hodně pomáhají při vkládání kódu. Design mód JSP stránek je skutečně funkční a generuje. Není sice až tak velký problém pomocí CSS stylů ho naprosto zmást, ale zatím je to to nejlepší co jsem v Javě viděl. Našel bych i jiné chybičky, ale v každém případě jde o kvalitní nástroj.

Závěr

Java Studio Creator 2 je zásadní upgrade proti verzi 1 ve všech směrech. Obsahuje lepší komponenty, rychlejší UI, mnoho nových rysů a nástrojů včetně EJB. Obsažené Ajax komponenty jsou jedním z největších lákadel. Každý kdo vytváří dynamické stránky na webu a trochu zná Javu, by si tento nástroj měl vyzkoušet. Pokud je cílem psát webovou aplikaci, která má být z hlediska běhu na serveru multiplatformní, je Java Studio Creator 2 velmi dobrou volbou.

Pondělí, duben 03, 2006

Java skutečně poráží .NET?

Dnes bych chtěl navázat na svůj článek  TIOBE: Java 6x populárnější než .NET, kde jsem komentoval aktuální výsledky TIOBE index populárnosti programovacích jazyků. Dostal jsem mnoho emailů, z nichž některé snižovali význam nebo kritizovali vlastní TIOBE index. Hledal jsem tedy další zdroj, který by TIOBE výsledky potvrdil nebo vyvrátil. Podařilo se mi najít stránky Davida N. Weltona (autor programovacího jazyku Hecl) Programming Language Popularity, která se této problematice též věnuje. Navíc používá více zdrojů pro výsledky než TIOBE index.

Programming Language Popularity - normalized

Graf který vidíte zobrazuje jednotlivé programovací jazyky v pořadí podle několika kritérií:

  • cena za kliknutí na reklamu s příslušným klíčovým slovem;
  • počet nalezených stránek v Google;
  • počet pracovních míst v Craiglist jobs (USA);
  • počet projektů u Freshmeat.

Diagram nám ukazuje proč jsou nebo by měly být některé programovací jazyky populární. Zda je jazyk podpořený reklamou. Jak často je užívaný pro Open Source projekty, kde si pravděpodobně účastníci vybrali programovací jazyk podle toho, jak to sami cítí, že to opravdu nejlepší volba, spíše než kde je to diktováno komerční potřebou nebo managementem. Samozřejmě výsledky zobrazené v diagramu nejsou v žádném případě přesné a měly by být brány s rezervou. Je ovšem otázkou, zda lze získat výsledky přesnější.