Archív July, 2007

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…)

Ochrana emailových adres před SpamBoty

Thursday, July 19th, 2007

Nedávno na jednom připomínkovacím sezení mě zákazník překvapil přáním, že bych chtěl chránit své emailové adresy uvedené v kontaktech jako <a href=”mailto:blabla@blabla.cz”/> proti zneužití spamboty. Jedná se o poměrně jednoduché přání, se kterým jsem se ale ve své praxi setkal poprvé. Obvykle, většina z nás akceptuje toto riziko výměnou za to, že naši zákazníci jednoduše kliknou na odkaz a otevře se jim rovnou jejich mailový klient s předvyplněnou adresou. Ihned nás napadlo vyměnit mailto linky za emaily vepsané např. do obrázku, ale to bychom přišli o tu výhodu jednoduchého otevření mailového klienta s adresou. Nicméně jednání jsme ukončili s vědomím, že si klient bude muset vybrat jedno nebo druhé. Nakonec mi to ale stejně nedalo a zkusil jsem pana gůgla …

(more…)

Jednoduché asynchronní zpracování událostí ve Springu

Thursday, July 5th, 2007

Spring framework má “od přírody” k dispozici implementaci Observer patternu. To není nic jiného než mechanismus “listenerů” tak, jak jej známe například ze Swingu. Základní a defaultní implementace je velmi jednoduchá, kdekoliv v managovaných beanách můžete přes tzv. Publisher (což je typicky aplikační kontext, kterým je daná beana vytvořena) vyslat informaci o události. Tuto událost pak může zpracovat jakákoliv třída implementující ApplicationListener rozhraní, a která je správně zaregistrovaná do fronty listenerů. Registrace se provádí velmi jednoduše – pouze deklarací beany v context.xml. AbstractApplicationContext (předchůdce všech specifických implementací aplikačního kontextu) při své inicializaci všechny beany implementující zmíněné rozhraní zaregistruje.

Výchozí implementace distribuce / zpracování eventů je velmi jednoduchá a také postačuje ve valné většině případů. Jedná se o synchronní zpracování vyslaných událostí. Tzn. okamžitě, jakmile přes Publisher zveřejníte událost, jsou notifikování všichni zaregistrovaní listeneři, kteří událost opět okamžitě ve stejném Threadu zpracují – a operace pokračuje dál, až všichni se svou činností skončí. Někdy se ovšem hodí, když se mohou vybrané události zpracovat asynchronně – nezávisle na threadu, který událost vyvolal.

Situace, kdy bychom mohli chtít oddělit zpracování událostí do jiného threadu, jsou mají společné tyto základní vlastnosti:

  • nejsou blokující pro poskytnutí odezvy uživateli (tzn. operace je pouze vedlejším produktem operace, kterou uživatel vykonal)
  • náklady na její zpracování jsou větší než nepatrné – tzn. zpracováním události v jiném vlákně urychlíme odezvu uživateli
  • o případné selhání této operace nemusí být uživatel nutně informován

Otázka zní, jak tohoto docílit …

(more…)

Podcast: Basics of Unit Testing with Spring

Sunday, July 1st, 2007

This presentation was prepared formerly for internal purposes of Norkom Technologies in Ireland by my old friend Pavel Jetenský. We appreciate that authorities of this company allowed us to make the presentation public so you can benefit from it as well. I also thank Pavel for preparing this presentation and for providing support to me with finalizing material to be published.

The training shows how to jUnit test J2EE application based on Spring and Hibernate. New unit test is created from scratch in Eclipse IDE, testing simple function for getting data from database. DB is created only in memory, using HSQL db. Training is targeted for developers with little or no experience with automated testing.

Music used: Utopia Banished – Night of the Black Wywern, Forshadowing the Endless Quest (http://magnatune.com) published under Creative Commons License

Flash presentation Flash presentation (recommended variant) [44:15] 46 MB

MP3 Podcast Podcast [48:42] 11,7 MB

Creative Commons - Some Rights Reserved

Presentation slides Presentation slides

Podcast Licence: Creative Commons