Archív kategorie 'Java'

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

Wednesday, April 2nd, 2008

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)

Vzhledem k tomu, že přednáška je především určena studentům UHK a tudíž bude již část místnosti obsazená studenty, rád bych vás požádal, abyste mi, pokud plánujete na přednášku přijít, napsali jen krátce počet osob na můj email ‘novotnaci[zavináč]gmail.com’.

Přednášku bych rád zaznamenal a zveřejnil na blogu jako podcast. Nicméně plánuji i živá dema, která ve formě audia nebudou příliš srozumitelná. Navíc jsem doposud nesehnal rozumnější nahrávací zařízení než je můj Ericson, takže výsledná kvalita může být poměrně špatná. Slyšet přednášku na živo je prostě jistota.

Update k 9.5.2008 : Na blogu byl zveřejněn audio záznam z této přednášky.

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

Friday, February 29th, 2008

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.

Princip práce s captchou v Acegi je podobný principu standardního přihlašování. Acegi při přístupu na “chráněné url” kontroluje ověření uživatele v SecurityContextu a pokud uživatel není ověřen, přesměruje tok aplikace na přihlašovací formulář nebo v případě captchy na formulář obsahující obrázek a textové pole pro vepsání rozpoznané captchy. Pokud řešíme přihlašování, je tento způsob přirozený - v případě captchy však očekávám, že captcha bude rovnou součástí formuláře, který je “hlídán”. Tak ale integrace jCaptchy v Acegi ve svém základu nefunguje.

Pokud Vám tento způsob připadne taky trochu podivný a zajímá Vás, jak si s tím poradit, čtěte dál.

(more…)

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

Wednesday, February 13th, 2008

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 …

(more…)

Running AJAX with jQuery in Stripes Framework

Friday, January 25th, 2008
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.

(more…)

Retrotranslator - hladce z Javy 1.5 do 1.4

Wednesday, January 9th, 2008

Ř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.

(more…)

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

Sunday, December 9th, 2007

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.

(more…)

Seriál: Modulární systémy ve Spring Frameworku

Saturday, September 8th, 2007

Ve chvíli, kdy začnete používat při vývoji masivněji Spring Framework a začnete vytvářet znovupoužitelné knihovny postavené nad tímto frameworkem, začnete řešit jak z těchto knihoven co nejlépe složit výslednou aplikaci. První myšlenky povedou pravděpodobně těmito cestami:

  1. konfigurační soubory jednotlivých knihoven sloučit v jednom velkém aplikačním kontextu
  2. držet jednotlivé knihovny odděleně - nechat jim jejich vlastní aplikační kontexty a k těmto kontextům se dostávat programovým způsobem

Obě cesty však mají svá úskalí.

(more…)

Život s OC4J

Thursday, August 30th, 2007

Pokud mi někdo řekne, že moje aplikace má běžet v aplikačním serveru OC4J naskočí mi husí kůže. Tento reflex se mi už dostal do podvědomí kvůli řadě bezesných nocí řešením řady chyb ukrytých v kódu, ke kterým člověk nemá zdrojové kódy. Nedá se ovšem nic dělat, náš zákazník, náš pán. Opět jsem se tedy musel ponořit do zakalených vod bažiny OC4J.

Pozn.: Tento příspěvek byl psán ve velké depresi. Kdo nemáte rádi pesimistické články před víkendem, radši ani nepokračujte ;-) .

(more…)

Jak na rychlé integrační testy ve Springu

Saturday, August 4th, 2007

Integrační testy spočívají v testování konkrétní kódu spolu s okolními částmi, se kterými spolupracuje. Cílem je snaha otestovat kód ve stavu, který se blíží reálnému nasazení. Obvykle takto testujeme datovou vrstvu aplikace (jelikož tam klasické jednotkové testy ztrácejí smysl - chceme přeci otestovat správné dotazování databáze, tudíž databázi k testu potřebujeme) a v řadě případů se nám nevyplatí mockovat ani na úrovni business vrstvy. Dokonce i Rod Johnson ve své prezentaci (kterou byl inspirován tento článek) zdůrazňuje důležitost integračních testů.

Hlavní problém integračních testů, u kterých máte ve spodu relační databázi je rychlost. Každý test spoléhá na nějaká data v DB - ty mohou být (a jsou) ostatními testy poškozena a proto je nedílnou částí všech testů setUp / tearDown operace, která se o tuto přípravu a uklizení stará. Jelikož jsou programátoři cháska líná a nechtějí se zabývat přípravou pouze minimální potřebné sady pro každý test, obvykle si vytvoří nějakého předka, který obsahuje setUp a tearDown, pro všechny testy najednou. Tím pádem se vždycky inicializuje kompletní sada dat a to si bere významné množství času. Odhadoval bych, že 80% času testů se stráví v této přípravě dat a pouze 20% času běží skutečné testy.

(more…)

Download binárního souboru přes HTTPS a Internet Explorer

Thursday, July 26th, 2007

Jsou chyby malé, velké, závažné i triviální, úsměvné, spletité i velmi hloupé. Z celého pokolení chyb je tahle velmi, velmi stará a také dost hloupá. A vypadá to, že z úcty k jejímu věku, ji nechá M$ už pokojně dožít spolu s chatrčí zvanou Internet Explorer.

Na chybu narazíte tehdy, když coby Java programátor napíšete servlet, který vrací binární data přes protokol HTTPS (např. vygenerovaný MS Excel jako já, nebo třeba PDF atd.). Aniž byste to explicitně nastavili do HttpResponse, bude vrácená odpověď (pravděpodobně) obsahovat v hlavičce tyto údaje:

O to se vám postará váš web server (v mém případě Tomcat i Apache zároveň). Internet Explorer se však k vrácené binární odpovědi s těmito hlavičkami obrátí zády a lakonicky vás informuje: “Aplikace Internet Explorer nemůže otevřít tento server v síti Internet. Požadovaný server není k dispozici nebo jej nelze najít. Akci zopakujte později.”

Tato chybka je dle některých zdrojů v Exploreru už od verze 4.0 (byť záznam v knowledge base Microsoftu tvrdí, je reportovaná až u IE 6.0 SP1) a přetrvává až do současné verze 7.0, což jsem si měl bohužel možnost vyzkoušet na vlastní kůži.

(more…)