Máte jistotu, že do session ukládáte pouze serializovatelné objekty?

Jestli ano, tak by mne velmi zajímalo, jak to děláte. My jsme totiž ještě donedávna žádnou jistotu neměli - vše záleželo na poctivosti a důslednosti programátorů. Jenže v Javě není tahle záležitost vůbec jednoduchá a tak vám může díky nějaké referenci hluboko ve stromu objektů uniknout, že to, co ukládáte do session, má vazbu na objekt, který serializovatelný není. Výsledkem je ztráta session při restartech aplikačního serveru nebo zamezení možnosti session replikovat mezi nody clusteru.

Ruční aktualizace firmware Asus Transformer Infinity Pad

Docela mě překvapilo, že ani měsíc od vydání aktualizace Jelly Bean pro Asus Infinity Pad se mi nenabídla aktualizace systémem sama. Při ručním zkontrolování aktualizací v nastavení systému se mi tvrdošíjně vracelo, že "nové aktualizace pro váš systém neexistují". Kecy ... někde byla nějaká chybka, která znemožňovala OTA, přestože ty už byly dávno dostupné. Sedl jsem k internetu a po docela dlouhé době jsem přišel na postup, jak tablet zaktualizovat manuálně. Abych vám ušetřil tuhle práci, zachytil jsem postup v tomto článku.

Jak jsem organizoval Forrestí hackathon

Nápad zorganizovat firemní hackathon ve mně zrál nějakou dobu. Několika podobných akcí jsem se účastnil v minulém roce, takže jsem měl hrubou představu o tom, jak podobná akce probíhá. Navíc se nám ve Forrestu už nějakou dobu v issue trackeru hromadí plno nápadů, které kvůli vytížení na projektech nemáme kdy zrealizovat ... a přitom jsou to takové cool věci :). Nakonec jsem se rozhoupal a pustil do organizace. Jen jsem si nebyl jistý, zda jsou kolegové podobní blázni jako já a půjdou do toho.

Úvaha nad horizontálním škálováním databází a těžkostmi s tím spojenými

Škálování databází je velké téma a já rozhodně nejsem takový odborník, abych tady rozebíral kdovíjaké detaily. Zcela jistě znáte termíny jako je sharding, o kterém psal Dagi už před 5 lety, popřípadě znáte termín partitioning, který nám nabízejí některé DB stroje "zadarmo" a jiné "za peníze". Alternativním způsobem horizontálního škálování je škálování pomocí sady replik pro čtení, o kterém lze uvažovat v případě, že máte aplikaci, které řádově méně zapisuje do databáze než z ní čte. Konkrétně se jedná o to, že máte několik databázových strojů v režimu MASTER-SLAVE(S), který se často nasazuje už jen z důvodu hot-backupu (tj. v případě výpadku master databáze je možné velmi rychle z repliky učinit nový master a pokračovat v běhu aplikace).

Commons File Upload contains a severe memory leak

Do you use Commons File Upload library in your application? Do you use DiskFileItemFactory for storing big files to a temporary disk storage? Do you use FileCleaningTracker to get rid of unused temporary files as it is recommended in documentation?

If so you probably have a memory leak in your application you don't know about.

Stored files are meant to be cleared when there is no reference to the FileItem instance created by this library. Or at least this is stated in the documentation:

Nástroje pro vývoj web aplikací ve Forrestu

Pod ladícím nástrojem si většina Java vývojářů představí Java debugger. O něm však v tomto článku řeč nebude. Chtěl bych vám tu představit náš přístup k doprovodným nástrojům pro tvorbu webové vrstvy a podívat se kolem sebe, jestli jsme v tomto ohledu originální či nikoliv.

Nápad vytvořit specifické nástroje se znalostí interních mechanismů použitého frameworku je již poměrně starý. V českém PHP frameworku Nette vznikla tzv. Laděnka někdy na začátku roku 2008 (vycházím ze zmínky na blogu Davida Grudla).

Springockito - výroba mocků snadno a rychle

Na tento poklad narazil kolega Jakub Liška, když si sám chtěl napsat něco podobného. Pokud používáte pro automatické testy podporu Springu a na vytváření mocků Mockito, máte řadu možností jak vytvářet mock objekty. Jednu z nich, která se mi zdála poměrně jednoduchá jsem popisoval v dřívějším článku Jak se zbavit nepříjemných závislostí v testech, nicméně tento přístup dotáhl Jakub Janczak o kus dál (jo na světě jsou milóny lidí chytřejších jak já :) ).

How do YOU test access control of your application?

Many of complex applications put on top of their complexity access control logic for securing data and to limit access to certain functions. No matter if you have fully configurable ACL settings based on rights or role based access you'd probably want to test this part of application too. In order to have proper test coverage you should make it easy for you and your colleagues to test this. I have no doubts that if you ever needed to test this you already have some kind of such test support, but this article describes what kind of it I've created for myself. It might be interesting for you to compare it with your solution or inspire you to create one if you haven't done it already.

Reportáž z GeeCON 2012

GeeCON si již vydobyl své místo na slunci mezi evropskými konferencemi a není třeba ho příliš představovat. Osobně jsem s kvalitou přednášek vždy velmi spokojený a proto jsme s kolegy vyrazili na GeeCON letos již potřetí. Organizátorská práce byla jako vždy skvěle odvedená - cateringem počínaje a luxusními prostory v multikině konče. Člověk si musí jen trošku povzdechnout, když si vzpomene na tvrdé židle v přednáškových místnostech a catering univerzity v případě největší české konference WebExpo. Nicméně, člověk nejezdí na konference kvůli sedačkám a jídlu, ale kvůli kvalitnímu obsahu a tak se dá i v případě WebExpa leccos překousnout. Majorita účastníků byla samozřejmě z Polska, ale okolo bylo slyšet i dost češtiny a moravštiny, což mi vážně udělalo radost. Na GeeCONu letos přednášeli i dva češi - Pavel Lahoda o problémech při vývoji na Androidu a Honza Kotek o JDBM (rozepíšu se dále). Pokud vás zajímá, jak vypadal celý GeeCON mýma očima, čtěte dál ...

Skryté pastičky v Tomcatu aneb zpětná kompatibilita se všude nenosí

Nespoléhejte se na to, že, tak jako Java samotná, budou i základní knihovny a nástroje respektovat důležitost zpětné kompatibility. Například v případě Tomcatu se nám už několikrát stalo, že při upgradu na verzi, kde se mění pouze číslo patche, se kompletně rozpadla funkčnost aplikace. Poprvé to bylo myslím, když v patchi vyupgradovali na novější specku JSP a teď nám zase přihodili bombičku v podobě změny obsahu httpServletRequest.getPathInfo(), která nově vrací i tzv. path parametry.

Partyzánskou stezkou

 Termín "partyzánština" znáte určitě taky. Je to přístup, kdy u věcí, které považujete za správné nebo prospěšné do budoucna, nečekáte na nějaké schválení "shora" nebo na to až získáte konsenzus okolí, ale prostě sednete a zkusíte je zrealizovat. Nevím jaké zkušenosti s tím máte vy, ale mě se takto podařilo docílit poměrně podstatných změn ve způsobu práce mojí i mého okolí. Myslím si, že partizánština z vás může udělat spokojenější vývojáře v úspěšnějších firmách.

Combining custom annotations for securing methods with Spring Security

Spring security is really powerful library in its current version and I like it much. You can secure your application on method level several years now (this feature was introduced by Spring Security 2 in 4/2008) but we've upgraded from old Acegi Security only recently. When using method access control in larger scale I started to think about security rules encapsulation into standalone annotation definitions. It's something you can live without but in my opinion it could help readibility and maintainability of the code. Let's present some options we have now ...

Json Java parsers / generators microbenchmark

A month ago I had an incident in production that was caused, as I found out later, by poor performance of used JSON parser library. I've optimalized the code and managed to solve it but decided to look for another library with better performance characteristics. I searched for some existing benchmarks and found two of them - one is for JSON manipulation on Android and the second one is thorough serialization test focused on different use-cases than I had. So I decided to write my own microbenchmark copying the use-case I had in the production.

Ad ACTA - moje komunikace s p. Zahradilem

Prozatím mám spíš takové zkušenosti, že petice a protesty nefungují. Nicméně je to jediný nástroj, který nám demokratické zřízení dává (když nepočítám volby jednou za 4 roky). Proto jsem se rozhodl napsat našemu poslanci v EU a osobně jej požádat, aby hájil práva našich občanů a vydal nesouhlasné stanovisko se současným zněním dohody ACTA. Pochybuji, že to něco změní, ale minimálně mi pan poslanec odepsal.

Korespondenci zveřejňuji proto, že jsem o to byl požádán. Zkuste věnovat chvilku a napsat p. Zahradilovi také ....

Pátý rok Myšlenek Otce Fura

Tradice jsou tu od toho, aby se dodržovaly. Navíc já sám si chci trochu zrevidovat, jak se situace v blogosféře vyvíjí. Mám totiž trochu pocit, že aktivita bloggerů maličko uvadá a je nahrazena krátkými tweety, příspěvky na G+ nebo Facebooku.

Tak trochu to pociťuji i sám na sobě - rok od roku je na mém blogu o pár článků méně a stejně tak i většinu článků z RSS čteček jen letmo prolétnu (pokud není téma pro mě zrovna aktuální nebo není článek psaný česky).

Dlouho jsem zvažoval, jestli má smysl zakládat si vlastní blog. Jaký to má smysl, jestli to vlastně není jen taková móda a zda-li budu vůbec schopný něco nového sdělovat. Jelikož právě koukáte na tenhle blog, dá se jednoduchou úvahou odvodit, k jakému závěru jsem nakonec došel :-) .

Myslím, že nastal čas, kdy už mohu nejen spotřebovávat a hledat informace, ale že mohu také ostatním v přiměřené míře pomoc vracet. Je zvláštní kolik toho lidé dělají zadarmo. Až se to zdá v dnešním komerčním světě k nevíře, jsou lidé, a není jich málo, kteří svůj volný čas věnují pomoci druhým. Prostě cítím dluh k těmto lidem, a svým blogem chci tento dluh narovnávat. Držte mi palce, snad se mi bude dařit …

Ten kdo rutině ke své práci nebo i jen doma používá počítač jistě narazil na problematiku autorských práv. Obvykle v tom smyslu, že většina programů, které bychom rádi používali něco stojí a některé nestojí zrovna málo. Řada z nás si s tím neláme hlavu a poohlédne se po nějakém cracku, či danou aplikaci rovnou stáhne z nějaké té P2P sítě. Je to sice velmi jednoduché, ale bohužel to není legální.

V tomto článku bych rád sesumíroval mé poznámky k instalaci Ubuntu na mém pracovním stroji. Plno z instalačních postupů jsem dostal do vínku od mých kolegů, za což jsem jim nesmírně vděčný. V závěru článku uvádím seznam aplikací, které jsem prozatím vytipoval jako zástup mých oblíbených Windows nástrojů, na které jsem byl po celá léta zvyklý. Přechod bolel méně než jsem čekal – ve většině oblastí jsem našel plnohodnotné (a někde i lepší) alternativy pro Linux.

This (self) v generikách

Tohle byl pro mě nějakou dobu oříšek, než jsem narazil na pár článků s překvapivým - ne dokonalým, ale přeci jen nějakým řešením.

Problém je jednoduchý, chtěl bych aby bylo možné v nějaké abstraktní třídě definovat cosi jako:


/** poznámka: toto je nesmysl, ale vyjadřuje
moji snahu o vyjádření vazeb **/
abstract class AbstractClass<T is this> {
   T getMe();
}

Což jsem potřeboval z důvodu získání reference na AOP proxy obalující moji třídu - v níže uvedených odkazech podobná potřeba vznikla při implementaci builder patternu.

CodeRetreat Praha 2011

Organizátoři byli večer skutečně znaveníNikdy, nikdy nepodlehněte své lenosti. Všichni známe předvánoční čas plný akcí a večírků a uznávám, že včera jsem velmi zvažoval, jestli chci na CodeRetreat vlastně jet a zmizet o desíti z jiné akce s přáteli úplně střízlivý. Přiznávám svou slabost a stydím se, že jsem vůbec kdy zapochyboval. CodeRetreat byl jednou z mých letošních nejlepších akcí a musím říct, že naboural žebříček nejhodnotnějších akcí vůbec. Přičemž i příčka jOpenSpace se zachvěla ve svých základech.