Dojmy z konference RedHat DevConf 2013

Stejně jako minulý rok, vydali jsme se i letos s několika kolegy na brněnský DevConf. Pokud budete číst dál, dozvíte se, co mě zaujalo, co je nového v Javě, co mě překvapilo a čemu se chci raději obloukem vyhnout.

devConfLogo

Začíná to už být tradice: poslední únorový víkend se počasí zblázní, napadne tolik sněhu jako předtím dohromady za celou zimu, Waze může ze všech hlášení o nehodách zešílet a z cesty do Brna se stává malé dobrodružství.

JBoss Forge

forgeLogo

První odpolední prezentace vypadá na první pohled úžasně, při hlubším zamyšlení to ovšem člověku nedá a začne v duchu pochybovat. O čem je řeč: pan Aers předvádí technologii JBoss Forge, jakési rychlé programování pomocí jednoduchých příkazů z konzole. Pro nastavení persistence nebo vytvoření JPA entity do nově vytvořeného projektu stačí dvě nebo tři slova napsaná na konzoli.

Jenže… Kdybych se JBoss Forge rozhodl používat, věděl bych, co mám psát? Opravdu by mě napadlo ta dvě nebo tři slova použít? Pan Aers se tváří, že ovládání je intuitivní, já mám trochu jiný dojem. Je to vytváření jakéhosi metajazyka nad JEE: pokud znáte slovíčka, asi to půjde rychle. Pokud je neznáte, budete se je muset naučit a ve výsledku nejspíš žádný čas neušetříte.

Integrace

apacheCamelLogo

Sobotní odpoledne se v posluchárně D2 točí kolem jediného tématu: integrace. Red Hat se chce pochlubit svými integračními nástroji jako Fuse Fabric, účastí na frameworku Apache Camel a všemi podpůrnými prostředky jako klikacím vývojovým prostředím Tooling. Nutno říci, že zaslouženě. Sám Apache Camel vypadá hodně zajímavě a pro nás to platí dvojnásob. Jako společnost se totiž zabýváme integrací a správou uživatelských účtů.

Zmíněné technologie by samy o sobě vystačili na několik článků a já se jimi tady víc zabývat nechci. Až si o nich jednoho dne zjistím víc, nejspíš jim samostatný článek věnuji.

Ceylon

ceylonLogo

Programovací jazyk Java je bezpečný, čitelný, omezující programátora a kvůli tomu všemu i hodně upovídaný. Ceylon je odpovědí těch, kteří Javě přehnanou opatrnost vyčítají.

Příkladem budiž vícenásobná dědičnost. V Javě si musíte vystačit s více interfacy, skutečnou vícenásobnou dědičnost vám kompilátor nedovolí. V Ceylonu to kupodivu jde: na prezentaci jsme se dozvěděli, že existuje nějaký složitý algoritmus, který vícenásobnou dědičnost řeší.

Mějmě A, které dědí od B a od C, a předpokládejme, že C ještě dědí od D. Pokud D a B implementují tutéž metodu, použije se při zavolání z A metoda implementovaná v B. Proč? Je to v grafu dědičnosti blíž. Taky vám to připadá dost nebezpečné?

To není všechno. Ceylon umožňuje složené typy:

String | Integer a;
Shape & Renderable b;€

znamená, že do a uložíte řetězec nebo číslo, zatímco b implementuje oba uvedené interfacy. Opravdu je tohle nutné? Opravdu je to k něčemu dobré? Pokud máte nějaké argumenty, napište mi je, já jsem vůči Ceylonu hodně skeptický.

Paralelismus deterministicky

Naproti tomu během příspěvku pana Pecha o paralelním zpracování div nezačnu tleskat už v půli. Pro mne jednoznačně nejsilnější zážitek z celého víkendu a sám o sobě důvod vážit cestu z Prahy do Brna. Z loňska jsem si totiž odvezl dojem, že je mezi českými a zahraničními mluvčími obrovský rozdíl, co se prezentačních dovedností týče. Ostatně, ten dojem jsem měl ještě několik minut po skončení prezentace. Teprve pak mě  kolega upozornil, že nám tentokrát perfektní angličtinou a mimořádně poutavě přednášel Čech.

Když chcete řešit nějakou úlohu paralelně, nutně narazíte na problémy synchronizace, na ochranu proměnných proti současnému přístupu z více vláken a na správu vláken samotných. Program sám navíc přestává být deterministický, vlákna se dostávají ke slovu v náhodném pořadí a náhodný může být i výsledek.

Uvažte ale následující kód:

int a = hash(value1);
int b = hash(value2);
int c = a + b;

Předpokládejme, že funkce hash je časově náročná. Počítáme ji dvakrát po sobě, na pořadí prvních dvou řádků nezávisí. Pro paralelní zpracování ideální. Kam směřuje Java v podobných situacích? Pan Pech nám představil následující myšlenku: co kdyby se do proměnné a v okamžiku zavolání funkce hash uložil „slib, že dostanu int„, funkce hash se začala počítat asynchronně a pokračovalo se dalším řádkem? Na druhém řádku bych i do proměnné b uložil „slib, že dostanu int“ a opět počítal hash asynchronně. Teprve na třetím řádku totiž potřebuji hodnoty a a b skutečně znát! Proto se teprve na třetím řádku hlavní vlákno zastaví a počká, až se do proměnných hodnoty dopočítají.

Struktura, kterou jsem nazýval „slibem, že dostanu int“ se v závislosti na programovacím jazyce nazývá Future nebo Promise a nejspíš se v programování brzy stane samozřejmostí. Geniální.

Závěr

Nakonec krátký výčet postřehů:

  • Chlebíčky byly ještě lepší než loni.
  • Logická soutěž se letos nekonala :-(
  • Budu se těšit na každou další prezentaci D. Pala nebo V. Pecha
  • V Brně prodávají asi největší hotdogy v Evropě (40 cm?)
  • V časopise OpenSource, který ležel k rozebrání na stolech, o nás byl článek na titulní straně :-)!

devconf

Kdybyste se se mnou chtěli podělit o své vlastní zkušenosti, napište na vojtech.matocha@bcvsolutions.eu!