Exkurz do templatovacích enginů v Javě

Templatovací jazyky v Javě mají poměrně dlouhou minulost. První a zřejmě nejznámnější jsou JSP, které jsou součástí javy. Jsou nejstarší z rodiny templatovacích jazyků a přestože jsou masivně používány dodnes, mnoho lidí k nim má své výhrady:

  • psaní JSP je obtížné pro ne-java programátory - přestože původní myšlenkou bylo, aby JSP psali odborníci na web (tedy "webdevelopeři") tato myšlenka zcela jistě minula realitu; praxe je taková, že JSP píší z různých důvodu opět Java developři, jejichž je jednak nedostatek a jednak jejich zaměření je spíš na aplikační kód než na validitu a použitelnost HTML výstupu
  • JSP stránky nejsou použitelné, díky životnímu cyklu JSP (JSP -> .java -> .class), mimo servletový kontejner - to znamená, že teprve servletový kontejner po nadeployování web aplikce JSP převede na implementace Servletů a přeloží je do binární podoby. Dopady tohoto mechanismu jsou poměrně jasné
    • JSP stránky mají své pevné umístění - hledají se vždy na filesystemu v adresáři web aplikace; nelze je umístit na classpath (a učinit je tak součástí přenositelných knihoven), nelze je načítat z jiného zdroje - např. databáze (a umožnit tak vznik nových stránek za běhu na systémech, kde nemáme přístup na filesystém), nelze definovat jakoukoliv složitější logiku načítání stránek krom dodání Erorr 404 stránky (např. custom logika ve smyslu neexistuje-li primární šablona, použij záložní, neexistuje-li ani ta, zobraz chybu)
    • JSP stránky není možné jednoduše testovat - jejich výstup získáme teprve až dotazem na servletový kontejner
    • JSP nelze použít pro skládání jiného výstupu než do web browseru - např. pro skládání těl emailů musíme volit jiný templatovací engine
    • debugování JSP nebylo poměrně dlouho možné a ani dnes to není zcela samozřejmá a jednoduchá věc (co se setupu týče)
    • chybové hlášky JSP stránek jsou při určitém (často standardním) nastavení kontejnerů nečitelné (vztahují se k vygenerovaným servletům a nikoliv k původní template) - změna tohoto nastavení typicky vyžaduje stop/start kontejneru
  • JSP stránky díky možnosti psaní scriptletů vybízejí k míchání aplikační logiky do prezentační vrstvy - s tím se myslím setkal každý z nás a leckdo se k tomu někdy i uchýlil
  • v případech některých kontejnerů je při změně JSP a požadavku na její opětovné vyrenderování znatelná časová prodleva - kompilace JSP vyžaduje nějaký čas (možná se jedná jen o zlomky vteřiny, maximálně vteřiny, ale při ladění nějakých drobnostní na stránce se jakákoliv prodleva počítá)

Reakcí na zmíněné nevýhody byl vznik interpretovaných templatovacích jazyků. V tomto příspěvku bych se chtěl podívat na zoubek dvěma nejznámnějším - Apache Velocity a FreeMarkeru.

Vášniví uživatelé

Nedávno jsem poslouchal záznam z přednášky, kterou měla Kathy Sierra na konferenci OOPSLA v roce 2007. Kathy Sierru pravděpodobně budete znát podle její práce - je
spoluautorkou řady knih o Javě ze série Head First
. Myslím, že mezi Javisty nechodí mnoho těch, kteří by o Head First nikdy neslyšeli a mnoho z nás se podle nich připravovalo na rozličné certifikace. To co je na sérii Head First výjimečné je přístup k prezentaci informací - jistě mi dáte za pravdu, když řeknu, že tato forma je, byť zpočátku vypadá tak trochu dětinsky, velmi přitažlivá a velmi dobře se z ní učí.

DesktopOK - ikonky pod kontrolou

Tento problém je starý jako Windows samy. Při jakékoliv změně rozlišení obrazovky a někdy i jen tak z legrace, Windowsy sesypou ikonky na ploše. Neexistuje žádná systémem podporovaná funkce, která by si uměla pozice ikonek zapamatovat a následně obnovit. S příchodem nadupaných notebooků s vysokým rozlišením, které tu a tam napojíte na projektor nebo klasické LCD s nižším rozlišením tedy pravideně přicházíte o rozložení ikonek. Někomu to nevadí, ale já potřebuju mít svých 20 ikonek na ploše na správných místech.

Podcast: Záznam z přednášky Automatické testování v praxi

Na dovolené se mi podařilo vyšetřit čas na sestříhání záznamu z přednášky Automatické testování v praxi, která se konala dne 21.4.2008 na Univerzitě Hradec Králové. Na přednášce se sešlo přes 30 posluchačů převážně z řad studentů univerzity. Přesto že jsem původně anoncoval, že se pokusím zabrousit i do pokročilejších témat, jako jsou testovací patterny a antipatterny, nástroje apod. musel jsem svůj záměr přehodnotit. V takovém případě bych se s přednášením dostal na dobré tři hodiny, přičemž na přednášku bylo vyhrazeno pouze minut devadesát. Přednáška se tedy zaměřuje na základy testování a bude pro Vás nejzajímavější tehdy, pokud s testováním teprve začínáte. S Tomášem Kozlem (garant za UHK) jsme se tedy předběžně dohodli na "pokračovací" přednášce na podzim tohoto roku, kde bychom se soustředili pouze na tato pokročilejší témata. Pokud tedy vše půjde dobře, dočká se tento "podcast" druhé části za několik málo měsíců.

PermGenSpace problem? No problem!

Tento článek vyšel na našem firemním intranetu. Jelikož je jeho obsah velmi přínosný ve své jednoduchosti a agregace poznatků z řady roztříštěných zdrojů po internetu, požádal jsem autora Michala France o svolení k jeho zveřejnění. Jak to dopadlo, můžete vytušit už sami. Výsledkem je že se s Vámi mohu podělit o zkušenosti s (vy)řešením problémů OutOfMemory v oblasti PermGenSpace při redeploy našich aplikací v aplikačních kontejnerech. Před aplikací těchto znalostí jsme vcelku pravidelně po dvou "redeployích" restartovali celý server, protože docházela PermGenSpace. V současném stavu aplikační server žije i po několika desítkách redeployů.

Blog v pavučině - zajímavůstky o JavaScriptu

V odkazech na sledované blogy se mi objevil Blog v pavučině, který píše můj kolega z web designerského oddělení Forrestu. Blog je zaměřen na JavaScript a webdesign, což je oblast, kterou možná jako Javisti orientovaní na web nemáme úplně rádi, ale je pro naši práci nezbytně potřeba (i když s nástupem jQuery se můj pohled na JavaScript radikálně změnil :-) ). Vypíchnu jen pár jeho článků a názor si udělejte sami:

Přeji příjemné čtení.

Pozvánka na přednášku na Univerzitě Hradec králové - Automatické testování v praxi

Rád bych vás touto cestou pozval na přednášku, kterou pořádá Univerzita Hradec Králové ve spolupráci s naší firmou při příležitosti vyhlášení vítězů soutěže Best Programmer. Na zmíněné přednášce budu rozebírat zkušenosti s automatickým testováním při vývoji web aplikací. Přednáška bude zaměřena především na vývojáře s malou zkušeností s automatickými testy, ale rád bych se dostal i k pokročilejším tématům jako jsou:

Plakát

  • Základy a obecný úvod do TDD
  • Rozdíly mezi 3.x a 4.x řadou jUnitu
  • Pozitivní a negativní dopady na proces vývoje
  • Techniky testování (patterns, antipatterns, code smell)
    • Business layer
    • Data layer
    • User interface layer
    • řešení problémových oblastí (SMTP, java.util.Date)
  • Nástroje
    • IntelliJ Idea, NetBeans
    • TeamCity
    • Reporting
    • Ant, Maven

Kde: Univerzita Hradec Králové - Fakulta informatiky a managementu

Místnost: B9
Kdy: 21. dubna 2008, od 10:00 do 11:30

Garant: Tomáš Kozel (UHK)
Přednášející: Jan Novotný (FG Forrest)

Jak nainstalovat MySQL server na Windows Vista

Nedávno jsme celá firma obnovili notebookový park a přešli na Windows Vista. Při zprovozňování infrastruktury jsem narazil na problém s instalací MySQL server verze 5.1. Instalace serveru jako taková proběhla bez potíží, když se ale měl nastartovat konfigurační průvodce pro zprovoznění serveru k ničemu nedošlo. V event logu windows jem narazil pouze na tuto hlášku:

Activation context generation failed for "C:\Program Files\MySQL\MySQL Server 5.1\bin\MySQLInstanceConfig.exe".Error in manifest or policy file "C:\Program Files\MySQL\MySQL Server 5.1\bin\MySQLInstanceConfig.exe" on line 6. The value "asAdministrator" of attribute "level" in element "urn:schemas-microsoft-com:asm.v1^requestedPrivileges" is invalid.

Jak bylo na školení NetBeans Platform

English translation

Tímto příspěvkem bych chtěl poděkovat pánům ze Sun Microsystems za uspořádání tohoto školení. Přestože mým oborem jsou výhradně server side aplikace, rád jsem si rozšířil obzory v oblasti desktopu. Z tohoto důvodu se z mé strany pravděpodobně nedočkají významné kontribuce, a proto se snažím jim námahu vrátit alespoň touto reklamou na jejich edukační program.

Celkový dojem z dvoudenního školení je veskrze pozitivní - pokud bylo záměrem dostat do nás základní principy a procesy, které jsou pro další studium platformy třeba, myslím, že se dílo podařilo (alespoň v mém případě :-) ). Čeho si cením asi nejvíce, je možnost vyslechnout tyto informace přímo od autorů a mít možnost se vyptat na detaily přímo jich. Z čehož vyplývá závěr, že školení z tohoto hlediska může být přínosem i pro člověka z desktop oboru nebo přímo NetBeans kontributora. Jedním z příjemných překvapení bylo, že, obdobně jako Roumen si na nic nehraje, ani nikdo z jiných vývojářů nedával najevo nějaký odstup nebo dokonce nadřazenost, přestože by ze své pozice mohli. Přátelské pokecání u oběda řadím také mezi jedny z pozitivních bodů oněch dvou dnů.

Spring AOP - Pozor na AspectJExpressionPointcut!

Tento týden jsem řešil problém s nedostatkem paměti při spouštění testů jednoho projektu. Pro běh testů nestačilo výchozích 64MB paměti Javy na heapu, což mi připadlo v porovnání s velikostí projektu podezřelé. Začal jsem profilovat a jelikož mne výsledky poněkud překvapily, chci se s Vámi o ně v tomto článku podělit.

Hned na úvod řeknu, že jádrem problému byla třída AspectJExpressionPointcut. Tato třída je ve Spring dokumentaci zmiňována hned několikrát, velmi jednoduše se používá a ze všech dostupných materiálů jsem dospěl k názoru, že se jedná o doporučovaný a běžně používaný standard.

Acegi Captcha způsob integrace a možnosti použití

V tomto příspěvku se nechci věnovat popisu zprovoznění jCaptchy v bezpečnostní frameworku Acegi Security, jelikož toto je velmi dobře popsáno již v existujícím článku na MoroSystems weblogu. Spíš se chci zaobírat způsobem, jakým se k integraci do Acegi frameworku autoři postavili. Tento způsob mi přijde totiž přinejmenším neobvyklý. Zachovává sice zavedené principy Acegi, ale ten neodpovídá mým (ale řekl bych vcelku přirozeným) představám o tom, jak by měla captcha ve web strákách fungovat.

Ještě pořád se držíte JDK, když je po ruce Joda Time?

Po delší době jsem měl zase čas podívat se na zoubek v mém TODO listu. Tentokrát jsem si vzal na paškál poměrně malou knihovnu s názvem Joda Time. Cílem této knihovny je reimplementace Java API pro práci s datumy a časem. Každý z nás, kdo pracuje s Javou nějaký ten čas, se tu a tam potýká s tímto těžkopádným API. Joda Time přinesl poměrně hodně nových myšlenek a stal se základem pro JSR 310, které by mělo být součástí nové Javy 7. Často na toto téma naráží i pánové z Java Posse. Co je tedy na knihovně tak úžasného? Čtěte dál ...

Running AJAX with jQuery in Stripes Framework

Though most of articles at this blog are written in my native language - Czech, this one will be different. I have chosen an English to address wider community of Stripes developers - I think there would'nt be enough readers in our beautiful small country. So, please, excuse possible errors and mistakes in the article, I will try my best :-) .

Common introduction to AJAX in Stripes

Stripes framework offers basic but sufficient support for AJAX that is covered with article at official web site. Article recommends using commonly known PrototypeJS AJAX client side library. On the server side, request is processed by Stripes themselves by standard population and execution as any other http request (that means that data from client to server are sent as a standard URL encoded parameters). What you get is correctly populated and validated action bean - and until now you haven't even recognize, that request is made by JavaScript on the client side not even you have to care of it. You can access session, exchange cookies and so on.

Podcast: Jak se žije českému vývojáři v Dublinu?

Po necelých třech letech v Irsku se zpět do Čech vrací můj kamarád Pavel Jetenský a tak jsem se chopil příležitosti a vyzpovídal jsem ho z jeho zážitků. Z našeho rozhovoru vznikl podcast, ve kterém se dozvíte něco málo o přestěhování se do Irska, hledání práce tam, cestování, technologiích, kontraktování a tak podobně.

Pokud vás budou zajímat podrobnosti o některých věcech, které se v podcastu probírají, napište dotazy do diskuse pod příspěvkem. Pavel bude na vznesené dotazy odpovídat a z vaších dotazů a jeho odpovědí tak budou mít něco i ti ostatní. Pokud byste měli zájem o soukromý kontakt na Pavla, pište mu na adresu kontraktyjetensky.net.

Retrotranslator - hladce z Javy 1.5 do 1.4

Řada z vás si určitě řekne, co to ten Fura vytahuje za prehistorická témata. V době, kdy se už živě diskutuje o tom, co bude v Javě 1.7, rozebírá přechod z verze 1.4 na verzi 1.5. Možná vás to překvapí, ale v našem prostředí (server web aplikace), provozujeme ještě řadu instalací na verzi 1.4 a možnosti upgradu v nedohlednu. Proto je pro nás stále aktuální udržovat / vytvářet sdílené knihovny i pro 1.4 verzi Javy. Hledali jsme a zkoušeli tedy nějakou co nejméně bolestivou cestu, jak využít možností vyšších verzí se zachováním zpětné přenositelnosti. A naším (mým :-) ) favoritem se stal Retrotranslator. Více o jeho použití se dočtete v tomto článku.

První rok Myšlenek Otce Fura

Je to neuvěřitelné, ale je to právě rok od prvního příspěvku s názvem Z ilegality do legality na tomto blogu. V tomto příspěvku, bych se s vámi chtěl podělit o pár zkušeností a pár čísel z pozadí tohoto blogu a také vám poděkovat za váš zájem o něj.

Počet příspěvků: 32 = 1 příspěvek každé 2 týdny
Počet unikátních návštěvníků: 1739 (listopad 2007)
Počet odběratelů RSS: +/- 125
Počet přečtených příspěvků: 3093 (listopad 2007) - max. 3815 (září 2007)

Musím přiznat, že základem návštěvnosti bylo od začátku blogu publikování upoutávek na portále Java.cz. U markantní části návštěvníků je referrer právě tento portál. Druhou výraznou událostí byl CZ Podcast #8, kde kluci zmínili některé z mých příspěvků a v podstatě mi z měsíce na měsíc zdvojnásobili návštěvnost blogu. Tímto jim moc děkuji - jen mě mrzí, že se k hudbě z pevnosti Boyard dostali dřív než já.

Google collections - ušetřete si práci s kolekcemi

Nedávno mě při poslechu JavaPosse zaujala zmínka o Google Collections. Jedná se o knihovnu doplňující funkcionalitu třídy Collections ze standardní Javy. Knihovna obsahuje řadu utility tříd, které zpříjemňují život s generikami v kolekcích, vytváření kolekcí v kolekcích a další manipulaci dat v kolekcích. Jelikož mě knihovna zaujala hned na první pohled, rozhodl jsem se podívat se jí na zoubek a podělit se s vámi o své zkušenosti.

Zkrácení zápisu pro vytvoření nových kolekcí s generikami

Jedná se možná o drobnost, ale natolik častou, že i drobné vylepšení přinese celkové zpřehlednění zápisu a zrychlení práce. V klasickém Java 1.5 kódu při vytváření generické kolekce typicky píšete např.:

Co tvoří produktivní prostředí?

Nedávno jsem se zamýšlel, co v mém případě činilo rozdíl mezi tím, kdy mě bavilo co jsem dělal a tím, kdy jsem pouze docházel do "práce". Co dělá člověka kreativním a co naopak pasivním. Uvědomil jsem si, že je v mém nejlepším zájmu přičinit se o to, aby v práci vzniklo kreativní prostředí, protože jenom tak budu mít pocit, že práce, kterou dělám má smysl. K tomu, aby bylo možné tento stav ovlivňovat, je však nutné rozlišit faktory, které na něj působí a na jejich základě zjistit, zda s těmito faktory dokážeme ze své pozice hnout, nebo nikoliv.

Jak se dělá byznys

Poměrně pravidelně dojíždím z Pardubic do Hradce Králové dopravou a docela často používám server http://jizdnirady.idnes.cz/JRCis.asp na vyhledávání spojů. Nemohl jsem si nevšimnout, že nedávno tento server přešel pod správu společnosti MAFRA, a.s.. Všimnul jsem si a musím tedy kroutit hlavou.

Celý portál je kompletně zahlcený reklamou na další web projekty této společnosti a to velmi nevkusně a nepříjemě. V záplavě blikajících obrázků a linků kamsi, člověk jen obtížně nachází to, kvůli čemu na portál přišel - vyhledávací formulář.

Maven2, release plugin a přístup do CVS přes SSH s privátním klíčem

Před tím, než jsem mohl ozkoušet maven-release-plugin, na který jsem si stěžoval v článku Co bych rád slyšel v září na CZJUG, musel jsem rozchodit přístup do našeho CVS skrze SSH s přihlašováním pomocí privátního klíče. Po zkušenostech můžu říct, že to byla práce nelehká a musím potvrdit negativní ohlasy ostatních, že v některých případech dokumentace k Mavenu (respektive k jeho konkrétním pluginům) je opravdu nedostatečná. Oříšek jsem nakonec rozlousknul díky zdrojákům a oddebugování.