Osmý rok Myšlenek Otce Fura

eighth  birthday Osmý rok mého blogování nebyl ve směru psaní moc plodný, jak se dalo poznat z počtu publikovaných článků - podařilo se mi dokončit pouhé tři. Omezit psaní bylo to z mé strany vědomé rozhodnutí a měl jsem pro to hned několik důvodů. Přiznávám, že jedním z nich bylo i jisté vyschnutí inspirace, ale především jsem svoji energii chtěl věnovat prostě něčemu jinému. Dal jsem si dva hlavní úkoly - zorganizovat ne-konferenci jOpenSpace v lepší kvalitě a bohatším programem, než tomu bylo v roce 2013 a druhým velkým úkolem byl rozjezd služby MonkeyTracker, se kterou jsme si s kolegy už od roku 2013 hráli a experimentovali.

Recreate MySQL views without definer, one-liner solution (Linux)

MySQLRather cryptic headline describes a pain many of us have to go through when restoring MySQL database backup from different machine. If you have ever done this on database with DB views - you'd probably run at this problem too.

Source of the problem is that MySQL dump exports CREATE VIEW DLL with DEFINER attribute and there is no way how to instruct it to exclude this attribute (as far as I know). When you take such export and import it for example on developer machine you'd probably not have the same user or user with same privileges on this machine. Each and every select to the views with invalid definer fails with error - for example:

MongoDb online kurzy

education_mongodb Systematické vzdělávání je pro programátory holou nutností a naše doba nám k tomu dává výjimečné příležitosti. Když jsem s programováním začínal, byl jsem rád, když mi otec sehnal od známého z PVT nějakou vysloužilou knížku o programování v Basicu - a to byl můj jediný zdroj informací. Knížka byla v angličtině a plno věcí jsem tehdy ani nepochopil. Informací bylo pomálu a řada z nich byla už tenkrát zastaralá (mluvím o roce 93). Před příchodem Internetu bylo sdílení informací a možnost vzdělávání se v IT zkrátka velmi omezené a složité.

Ohlédnutí za jOpenSpace 2013

main_thumb

Je to už nějakou dobu, kdy skončila tato výjimečná událost. Slíbil jsem sepsat reportáž a také Vás všechny poprosit o pomoc se stříháním audio záznamů. Jenže se toho na podzim nakupilo nějak moc - firemní hackathon, DevFest, moje přednáška na CZJUGu, dvě děti a několik souběžně běžících projektů v práci jsou moje výmluvy proč jsem to ještě neudělal :)

Dobrovolníci pro střih audia, přeskočte sem (díky předem).

Letošní jOpenSpace byl pro mě vyjímečný především tím, že jsem se (aniž bych o to usiloval) stal spoluorganizátorem celé akce. Iniciátorem byl Lukáš Hasík z AVASTu, který zajistil našeho nejvýznamnějšího sponzora (děkujeme firmě AVAST) a dal všemu ten nejdůležitější prvotní impuls (další organizace se Lukáš účastnil seč mohl, ale vydání nové verze antiviru si vyžaduje své a moc času nazbyt neměl). Původní myšlenkou bylo, že organizaci celé akce uděláme "crowdsourcově" ve více lidech, ale nakonec se tento postup neukázal moc funkčním a bylo potřeba, aby to někdo vzal víc za pačesy - no a mě došly nervy prvnímu :)

Otevřena registrace na ne-konferenci jOpenSpace 2013

small_506378526Po roční přestávce je letos opět organizována "ne-konference" jOpenSpace. Registrace jsou otevřeny všem, kteří mají zájem setkat se zajímavými lidmi z oboru a strávit s nimi víkend diskusí nad vývojářskými tématy. Termín je stanoven na 2. a 3. listopadu 2013 a bude se odehrávat v srdci Žďárských vrchů. Účast přislíbili mj. Roman Dagi Pichlík a Lukáš Křečan ze společnosti GoodData, Petr Ferschmann ze společnosti FlexiBee, Lukáš Hasík z Avastu, Jiří Filemon Fabián z Vendavo CZ a další známé osobnosti z dev komunity.

Stripes Framework on WebSphere 8.x application server fails with FileNotFoundException

stripes_framework

If you are struggling with running Stripes framework based application on IBM WebSphere application server 8.x I may help you. You probably end up with getting HTTP 403 error pages on every request. If you persuade your app server to give you some reasonable logging data (which is not easy in the world of Java application servers :/ ) you probably see FileNotFoundException logged during the request.

Here comes the explanation and a solution for you ...

Zbystřete své smysly technickými doplňky

HTML 5 NotificationsNevím jak vám, ale nám se při vývoji často stává, že vývojáři některé věci přehlíží a to se nám negativně odráží na produktivitě a kvalitě výstupu. Člověk je tvor omylný, ale inteligentní a proto se snaží se vybavit takovými nástroji, které jeho nedokonalosti dokáží vyvážit. Na posledním hackathonu kolega Michal Kolesnáč přišel s nápadem a prototypem rozšíření našeho existujícího doplňku pro Google Chrome, které pomocí HTML 5 notifikací upozorní vývojáře na potenciální problémy na prohlížené web stránce. Minulý týden jsme řešení dotáhli do konce a myslím, že stojí za to, abych se s Vámi o tento nápad podělil.
Na úvod se podívejte, jak nám výsledné řešení pomáhá v praxi:
[youtube=https://www.youtube.com/watch?v=dluseSIN3tU]

Princip fungování

Princip je relativně obecný a je určitě přenositelný i do vašeho vývojového ekosystému. O vývoji rozšíření pro Chrome toho už bylo napsáno i v češtině docela dost a proto zde nepůjdu do úplných podrobností.
Celý princip je zachycen na následujícím sequence diagramu (btw. vytvořený v http://www.ckwnc.com/ ... což je krásná služba pro generování sequence diagramů - jen nedoplňuje popisky k aktorům):
Sekvenční diagram komunikace
Jednoduše řečeno - každý požadavek na webovou aplikaci prochází servletovým filtrem, který při každém požadavku vygeneruje unikátní token a zapíše do hlaviček odpovědi cookie obsahující URL, na kterém bude v budoucnu odpovídat na požadavky pro zobrazení zpráv spojených s tímto requestem. Po ukončení zpracování HTTP požadavku filtr zanalyzuje aktuální stav aplikace a případně zapíše zprávy pro vývojáře ohledně věcí, kterým by měl věnovat pozornost.
Chrome plugin monitoruje změny cookies a pokud narazí na změnu v cookie se sledovaným názvem, vybere z ní URL, vytvoří XmlHttpRequest a AJAXem se dotáže serveru na seznam zpráv k zobrazení. Požadavek zachytí opět náš servletový filtr, podle unikátního tokenu si ze session vytáhne dříve vygenerovaný seznam zpráv. Nakonec vytvoří JSON zprávu s odpovědí, která obsahuje buď prázdné pole, nebo seznam notifikací s dodatečnými informacemi (např. důležitostí sdělení). JSON je pluginem rozparsován a uživateli jsou prezentovány zprávy jako HTML 5 notifikace. Je důležité si uvědomit, že najednou mohou být zobrazeny pouze 3 notifikace (omezení prohlížeče) a proto je potřeba ty zprávy koncipovat spíše jako odkazy někam dál. V našem případě otvírám po kliknutí na notifikaci RamJet Inspektor, kde je k nalezení už konkrétní rozpad problému.
Cílem rozhodně není zahltit vývojáře informacemi - notifikace mají zobrazovat jen informace o důležitých problémech, které vyžadují pozornost a je riziko, že by je vývojář mohl přehlížet. Naopak pokud by je chtěl přehlížet, tak by mu měly notifikace jeho ignoranci alespoň znepříjemnit :).
V našem případě aktuálně monitorujeme tyto problémy:
  • pomalá odezva stránky (více jak 1 vteřina na vrácení kompletního výstupu)
  • pomalé SQL dotazy při zpracování požadavku (více jak 200ms na zpracování SQL příkazu)
  • duplicitní SQL dotazy (špatné použití cachování)
  • chyby při zpracování stránky (jak při akci, tak i v rámci renderingu) - obvykle by měly být vidět samy od sebe, ale někdy se skryjí ve <script> blocích nebo na stránce chybí komponenta pro výpis chybových hlášení
  • chyby při aplikaci změn v konfiguraci (refresh Spring kontextů selhal) - jelikož se jede z poslední známé funkční konfigurace, vývojář často problém s reloadem nepostřehne a marně pátrá proč se aplikace nechová tak, jak by podle poslední konfigurace měla
  • (zvažujeme) použití deprekovaných komponent a funkcí
  • (plánujeme) zobrazení informace o nelokalizovaných textových popiscích na stránce

A také tyto významné informace v životním cyklu aplikace:

Ubuntu 13.04 and IntelliJ Idea shortcut binding

I had a conversation about IntelliJ Idea shortcut bindings conflicting with default shortcuts of Ubuntu/Unity OS. Well, it's a real problem, your muscle memory can be a tough beast. You can re-lean a shortcut or two but it's hard to change your habits completely after years of coding in IntelliJ Idea. And I want to concentrate on different things than to learn again shortcuts I am used to use. Because I am developer my IDE is more important for me than the OS and that means that shortcuts of the OS must go away or be changed. There is no other way possible.

Tak Forresti taky přešli na Git, paní Millerová

Ve Forrestu jsme jako verzovací systém používali po velmi dlouhou dobu prastaré CVS. Respektive v době, kdy se s tím ve firmě začínalo (pamětníků už je jen hrstka) to zase až taky zastaralý systém nebyl (mluvíme o roku 2000). Dlouhou dobu jsme zvažovali náhradu za nějaké modernější VCS, ale nikdo se toho nechtěl osobně ujmout a byla tady celá řada překážek, se kterými bychom se museli kvůli přechodu vypořádat. Kromě infrastruktury (háčky do issue trackeru, build a install skripty, zálohování atd.) jsme měli obavu i o to, jak by přechod zvládly ty desítky vývojářů, kteří CVS používají - kritické místo se nám zdál tým webmasterů starající se o drobné úpravy na existujících projektech (v řádu desítek úprav denně). Prostě jsme hledali výmluvy, protože se nám do migrace nechtělo - zvlášť, když jsme neměli uvnitř firmy nikoho, kdo by nějaké nové VCS evangelizoval.

GeeCON - Krakow 2013

Forrestí výprava opět vyrazila do Polska na Java konferenci GeeCON a nebyl bych to já, kdybych vám nepřinesl detailní reportáž o věcech, které mne tam zaujaly. Letos byl můj výlet sponzorován brněnskou firmou YSoft, která byla platinovým sponzorem celé konference a které bych chtěl prostřednictvím tohoto článku také poděkovat. Na společnou výpravu se s námi vydal i Tomáš Záluský z písecké společnosti Intelis a spolu s ním bychom pro vás měli připravit i krátkou rekapitulaci konference na pražském CZJUG.

Spring profiles a použití v testech

Po 3 letech dělám větší refaktoring na našem direct mailingovém modulu a jako první jsem se rozhodl povýšit verze knihoven a zrefaktorovat JUnit testy, které jsou tam ještě psané ve stylu JDK 1.4.

V souvislosti s tím jsem samozřejmě přepracoval formu testů z dědičné hierarchie na anotace, které byly představeny poprvé ve Spring 3.X (pokud se nepletu). A tu jsem zjistil, že mám drobný problém - v původní verzi mého kódu jsem využíval dynamické kompozice Springového kontextu k tomu, abych stejné integrační testy pustil proti různým implementacím úložišť dat (paměť, MySQL databáze, Oracle databáze ...). V aktuální verzi Springu se ale v anotaci @ContextConfiguration uvádí statický výčet konfiguračních XML a to situaci komplikuje.

DevFest Pardubice 2013

Tento víkend se v Pardubicích konal historicky první "pardubický" Google DevFest a bylo by hříchem nevydat se na tak zajímavou akci zvlášť, když probíhá jen pár stovek metrů od mého domu. Na programu byli přitom samí zajímaví řečníci - Michal Špaček, Daniel Steigerwald, Pavel Lahoda, googleři Danut Echanoiu a Margarita Manterola a další.

Pokud vás zajímá, jak vše vypadalo okem diváka, připravil jsem pro vás tuto reportáž.

OAuth 2 (Danut Echanoiu)

První přednáška Danuta Echanoiu byla na již trošku ohrané téma OAuth autentizačního a autorizačního protokolu. Ačkoliv jsem již byl asi na dvou přednáškách o OAuth - tato mi přišla mimořádně dobrá a to především kvůli tomu, že veškeré technikálie byly vysvětleny velmi jednoduše a lidsky.

K čemu je nám užitečný komponentový web framework?

Nedávno jsem jedním svým twítem vyvolal menší diskusi ohledně toho, co nám dovoluje komponentový framework oproti tomu, čeho bychom byli schopni dosáhnout s jednoduchým MVC rámcem. Bohužel twitter mi nedává takovou možnost vyjádřit se a tak jsem chtěl důvody a výhody, které vidím v komponentách na frontendu, popsat trošku obšírněji v tomto článku.

Komponentový model na webové vrstvě přináší oproti MVC se "standardním" šablonovým systémem možnost elegantní znovupoužitelnosti částí, které se znovu použít dají. Pro mě jako vyznavače DRY je toto jedna z VELKÝCH výhod. Namítnete, že znovupoužitelnosti se přeci dá dosáhnout i v běžném šablonovacím systému - co třeba JSP tagy nebo Freemarkerová makra? Touhle cestou jsem si prošel a výsledek byl vždycky kostrbatý - obvykle se vám podaří znovupoužít buď vykreslovací šablonu nebo aplikační logiku, ale nikdy ne rozumně obojí.

Pro Geeky se PowerPoint nehodí!

Nastala chvíle odbourat další zlozvyk minulosti. Rozhodl jsem se, že na prezentace už PowerPoint a jemu podobné aplikace nepoužiji. Přemýšlel jsem o tom už nějakou dobu a na poslední Google Group v Pardubicích mě Martin Görner nadchl svou prezentací, která byla postavená nad HTML 5 šablonou původně určenou jako základ prezentací na Google IO 2012. Google IO šablona samozřejmě není v tomto směru nijak unikátní - podobných šablon a "frameworků" existuje na webu celá spousta (určitě musím zmínit ještě velmi pěkně navržený ekosystém Deck.js).

Nastartování samospádu

Tento článek bude krapet filozofického ražení a nese zvláštní ale snad výstižný název, jak se pokusím vysvětlit dále. Nelehko se popisuje, co myslím tím výrazem „spád“ –  v češtině bych mohl použít i podobně zabarvená slova jako třeba bzukot, mravenčení nebo vzruch, z cizích jazyků bych si vypůjčil výrazy jako je trakce nebo momentum. Určitě pochopíte, co mám na mysli, když poukážu na živé a prosperující komunity, které známe z našeho okolí. Spádem myslím stav, kdy se okolo vás děje pořád něco nového, něco co vás obohacuje, nabíjí vás energií a vnitřně vás nutí se do víru také přidat.

Šestý rok Myšlenek dne otce Fura

Nejsem první, kdo v tuto dobu píše článek bilancující loňský rok. Velmi zajímavé osobní zpovědi najdete na Dagblogu i na Javičce - každý braný z jiného úhlu pohledu. Ani já se letos nevyhnu bilancování a opět vás budu trápit nějakými čísly, která jsou možná zajímavá hlavně pro mě. Dagi psal, že on už nehledá motivaci v číslech odrážejících čtenost článků na blogu, ale mě to ještě pořád drží :)

Musím přiznat, že i mě se v poslední době hledá čas na psaní příspěvků na blog čím dál hůře. Děti rostou a vyžadují víc a víc pozornosti, projekty ve Forrestu jsou čím dál náročnější a okolo mě je pořád tolik věcí, které bych si chtěl vyzkoušet a experimentovat s nimi. Jenže na to všechno potřebuje člověk klid, čas a soustředěnost a toho, zdá se mi, mám pořád méně a méně.

IntelliJ Idea 12 za pár korun při výročí konce světa

Dnes je možné využít výjimečné slevy, které zveřejnili JetBrains při výročí konce světa. Po následujících 24 hodin je možné pořídit plnou licenci IntelliJ Idea 12 a všech ostatních jejich produktů se slevou 75%. Slevy se vztahují pouze na personální licence, které jsou nepřenositelné a mohou si je koupit pouze jednotlivci (nicméně je možné je využít i ke komerčním účelům).

Po přepočtu na české peníze můžete pořídit:

  • IntelliJ Idea 12 za 1200,- Kč
  • PhpStorm za 590,- Kč
  • WebStorm za 310,- Kč
  • RubyMine za 440,- Kč
  • PyCharm za 480,- Kč
  • AppCode za 590,- Kč
  • ReSharper za 960,-Kč
  • dotTrace za 1800,- Kč
  • dotCover za 590,- Kč

Více informací se dozvíte na speciální stránce ... akce platí jen pro 20. prosinec 2012

Bonusy do každé rodiny

O radosti z releasů jsem tady na blogu psal už dříve a teď budu psát znovu, ale z jiného úhlu pohledu. Téměř po roce od začátku analytických prací jde do produkce jeden z mých největších dosavadních projektů - Ok Bonus portál pro slovenskou společnost DOXX. Podstatou projektu je poskytnout technické řešení maloobchodům a jednotlivcům pro tvorbu věrnostních (bonusových) programů, které si dokáží ušít samy sobě na míru.

Řešení je složeno z několika částí: desktopové aplikace postavené nad NetBeans RCP - tzv. terminálu, který bude provozován vedle pokladního systému a bude umožňovat zápis informací o nákupech a také čerpání odměn. Nákupy a bonusy se evidují na libovolnou NFC kartu, kterých v současné době po světě běhá více než dost (samozřejmě bude možné získat u provozovatelů systému i brandované Ok Bonus NFC karty). Druhou část představuje tzv. "platební brána", která zpracovává transakce ze všech desktopových klientů a spravuje zákaznické účty. Třetí část je potom webový portál Ok Bonus, který představuje prostředníka mezi zákazníky, obchodníky a platební branou. Na portále jsou k dispozici výpisy z účtů (tj. evidence nákupů, přidělování bonusů atd.), pro obchodníky potom rozhraní pro tvorbu bonusových programů, správu autorizovaných karet a terminálů, statistiky, e-shop a vyúčtování.

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.