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.
Š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.
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.
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).
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á :) ).
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Tímto článkem udělám malou výjimku a zkusím Vás všechny oslovit s nabídkou práce u nás ve Forrestu. Je to zvláštní, ale už nějakou dobu sháníme Javistu a nedaří se nám sehnat nikoho s kým bychom si padli do noty. Říkal jsem si, jestli to není tím, že ploché inzeráty Vás moc neosloví - respektive práci v mladém a perspektivním týmu s možností osobního rozvoje s platem odpovídajícím Vašim schopnostem nabízí každý druhý.
Dnešní příspěvek bude velmi krátký. Je dost pravděpodobné, že podobné řešení už dávno máte ve svých tetovacích utilitkách, ale mě tato kombinace napadla relativně nedávno a jsem nadšený z toho, o jak elegantní řešení se pro testy jedná.
V některých testech potřebuji vytvořit část Spring aplikačního kontextu, jehož některé beany mají závislost na nějaké další beaně, kterou je pro mne obtížné do testu zahrnout. Buď z důvodu, že její samotné vytvoření s vyžaduje další komplexní infrastrukturu okolo ní nebo třeba proto, že její zařazení do testovacího kontextu způsobuje při běhu testu vedlejší efekty (např.