Softwarové Nástroje

Click through errors to IntelliJ Idea editor with Remote Call plugin

connect Every improvement of your development process that is performed on daily basis is worth considering and implementing. Even little things can save days in budgets if you multiply them by the count of team members and the number of operation occurrences in the year. How do you look up for classes or JSP/FreeMarker/whatever templates when you run at error in them during development or testing? In development mode you might have your logging output open in IntelliJ Idea and click through exception stacktraces if any happens to be printed there. But there are cases when it's not possible - for example errors in templates won't navigate you to the source template, logs in test / preprod environment can't be easily consumed by your IDE etc.

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:

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

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

Jabber Shell

Nápad použít jabber jako příkazovou řádku k živému systému nás napadl asi před dvěma lety. Přestože se nám naše idea zdála velmi originální, jak se později zjistilo, nebyli jsme sami, koho podobná věc napadla. Existuje například implementace použití SSH přes Jabber protokol (JabSh) a možná by bylo možné při detailnějším hledání najít další.

Co nás vůbec motivovalo o nějaké takové věci vůbec přemýšlet?

Předně jsme vývojáři, kterým je příkazová řádka často bližší než sebelepší klikátka. Navíc klikátka umí milion věcí, které běžně nepotřebujeme - nám stačí jen pár základních úloh, které ovšem chceme provést velmi rychle a odkudkoliv. Ve firmě máme zprovozněný interní Jabber server (Openfire Jabber Server) integrovaný s naším LDAP (s odpovídající politikou hesel), který je provozován přes SSL protokol a tudíž splňuje všechny bezpečnostní požadavky definované naším TA oddělením pro přístup zvenčí. Svůj jabber účet má každý zaměstnanec Forresta, a mají ho také všichni po ruce (jeden klik nebo klávesová zkratka obvykle stačí) a to nejen ve firmě, ale i z domova. Klientů pro jabber protokoly je nepřeberné množství pro všechny platformy, a to i dokonce pro platformy mobilní (Android, iPhone, Symbian). XMPP má řadu použitelných knihoven v Javě - konkrétně autoři Openfire Jabber Serveru dodávají i velmi kvalitní klientskou knihovnu Smack, kterou jsme si pro naše účely vybrali. Všechno tedy hrálo do karet nápadu použít jabber protokol jako bránu k našim interním systémům.

How to add your own dictionary to IntelliJ Idea Spellchecker

Spellchecking provided by IntelliJ Idea is very handy for those who are not confident in written English (such as me for example ;-) ).

But for non-English speaking developers it's common to use (at least) two languages simultaneously - English for writing Javadoc, method and variable names and their native language (Czech, Polish ...) for strings in UI layer. Setuping Ideas' spellchecker to validate string in multiple languages is more than handy. This article will guide you through setuping your native dictionary.

IntelliJ Idea X - na co se můžeme těšit?

Ode dneška (1. listopadu 2010) bude pro zakoupené licence IntelliJ Idey 9 k dispozici upgrade na verzi 10 zdarma. Stejně tak pokud nyní upgradujete své starší verze Idey (6, 7, 8) na devítku, dostanete upgrade na 10 také zadarmo. To značí jedinou věc - vývoj IntelliJ Idea X se blíží ke svému konci a během měsíce nebo dvou bychom se mohli dočkat finální verze. A v této verzi nás čekají skutečně zajímavé libůstky.

7 tipů pro práci v Debug režimu v IntelliJ Idea

Před lety jsem psal článek o debugování aplikací v Javě. K mému překvapení jsem se totiž setkal s programátory, kteří v Javě k debugování kódu používali System.out(...) místo debug režimu. Po letech otvírám stejné téma z jiného pohledu. Jak efektivně používáme nástroje debug režimu, které nám naše IDE nabízí? Je totiž plno situací, kdy se můžeme s debugováním dost nadřít, nebo ... vědět co a jak v daném okamžiku nastavit tak, abychom se k výslednému pochopení problému dostali zkratkou. IntelliJ Idea těchto nástrojů nabízí celou řadu a v tomto článku bych rád rozebral několik z nich, které sám rád používám.

Teamcity & CVS & Maven: release on server

If you use Maven 2 and Teamcity integration server, you might want to perform releases on server. Although it's not so complicated, some things must fit one into another and you might spend a lot of time till you find out how to configure pom.xml and build configuration. For those of you, who need to setup it, this article could come quite handy.

Let's assume that you have maven release process setuped up for your localhost. If you do not, you can look at following articles, to get it running (this is the most difficult part, that I want to avoid analyzing in this post):

DesktopOK - ikonky pod kontrolou

Tento problém je starý jako Windows samy. Při jakékoliv změně rozlišení obrazovky a někdy i jen tak z legrace, Windowsy sesypou ikonky na ploše. Neexistuje žádná systémem podporovaná funkce, která by si uměla pozice ikonek zapamatovat a následně obnovit. S příchodem nadupaných notebooků s vysokým rozlišením, které tu a tam napojíte na projektor nebo klasické LCD s nižším rozlišením tedy pravideně přicházíte o rozložení ikonek. Někomu to nevadí, ale já potřebuju mít svých 20 ikonek na ploše na správných místech.

Jak nainstalovat MySQL server na Windows Vista

Nedávno jsme celá firma obnovili notebookový park a přešli na Windows Vista. Při zprovozňování infrastruktury jsem narazil na problém s instalací MySQL server verze 5.1. Instalace serveru jako taková proběhla bez potíží, když se ale měl nastartovat konfigurační průvodce pro zprovoznění serveru k ničemu nedošlo. V event logu windows jem narazil pouze na tuto hlášku:

Activation context generation failed for "C:\Program Files\MySQL\MySQL Server 5.1\bin\MySQLInstanceConfig.exe".Error in manifest or policy file "C:\Program Files\MySQL\MySQL Server 5.1\bin\MySQLInstanceConfig.exe" on line 6. The value "asAdministrator" of attribute "level" in element "urn:schemas-microsoft-com:asm.v1^requestedPrivileges" is invalid.

Retrotranslator - hladce z Javy 1.5 do 1.4

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

Porovnání Maven 2 pluginů pro IntelliJ Idea

Integrace build systému do IDE je věc pro mne nepostradatelná. Není ovšem integrace jako integrace. Pokud používáte Maven 2 a IntelliJ Idea jako my zjistíte, že pluginů je řada, ale velmi rozdílné kvality a velmi rozdílné aktuálnosti.

Navíc osobně si velmi cením možnosti buildovat projekt přímo z IDE - toto buildování je totiž řádově rychlejší než kterýkoli ant / maven build, jelikož IDE ví přesně, které třídy se změnily a zda je třeba překompilovat závislé třídy a když, tak jaké. Ant a Maven při vší své dokonalosti dokáží rozeznat a překompilovat jen třídy se změněným timestamp, ale závislé třídy nezkompilují. Dále mi to umožňuje jednoduše používat HOT replace funkcionalitu, pouštět testy přímo z IDE atd. Důvodů je prostě řada. Proto jsem chtěl, aby mi plugin pomohl zůstat ve svém IDE, ale pro správu dependencí a produkčních buildů využít daleko lepších možností Maven 2. Chvíli to trvalo, ale našel jsem.

Z ilegality do legality

Ačkoliv chci tento blog orientovat na Javu a věci s ní spojené, první článek bude z jiného soudku. Naše generace, která začínala na osmibitech a ti šťastnější na prvních PC/AT byla zvyklá brát všechny aplikace bez rozdílu. Jednak se software v Čechách skoro ani nedal nikde koupit a jednak jsme v té době coby studenti neměli tolik peněz, abychom si nákup SW mohli dovolit (kdo dostával měsíčně 200,- Kč kapesné, z kterého si kupoval měsíční jízdenku na vlak, ví o čem mluvím). Z nutnosti se časem stal zvyk a nyní i když už se software dá nakoupit poměrně jednoduše, i když už každý z nás vydělává a i když je všude plno software zdarma, stále třebas používáme aplikace nelegálně jen proto, že jsme na ně zvyklí.