Blog, Trixi

Geecon 2014

Java 8

Pred pár týždňami som mal príležitosť zúčastniť sa konferencie v Krakowe. Odznelo tam mnoho zaujímavých informácií a o pár z nich by som sa chcel podeliť. Kedže táto konferencia bola primárne venovaná Jave a nie tak dávno, bola vydaná nová verzia Java 8, je vcelku samozrejmé že niekoľko prednášok sa venovalo práve tejto udalosti a tomu čo nám nová Java prináša.

Medzi najzásadnejšie novinky určite patria lambda výrazy a Stream API. Lambda výrazy umožňujú zjednodušiť a zprehľadniť kód, tým že dávajú programátorovi nástroj ako nahradiť použitie annonymných tried napríklad pri filtrovaní zoznamov. Spolu so Stream API potom dokážu ľahko a prehľadne manipulovať s Collection.

list
    .stream()
    .filter(
        p -> p.toFilter() == true)
    .map(p -> p.getValue())
    .forEach(value -> System.out.println(value));

Tento jednoduchý príklad ukazuje ako sa dá zpracovať pole pomocov nových možností. Zatiaľ čo Stream API sa stará o prechod cez všetky prvky poľa, jeho filtrovanie, lambda výrazy udávajú čo sa má diať na úrovni prvkov, či už ide o získavanie hodnôt, určenie ppodmienok filtra, alebo spúšťanie metód nad prvkami poľa. Takto z kodu zmizne doteraz potrebny cyklus ktorý by iteroval cez prvky poľa. Navyše Stream API ponúka ešte jednu veľmi zaujímavú možnosť. Je ňou paralelné zpracovanie. Miesto volania metódy stream(), postačuje zavolať metódu parallel(), a Java sa postará aby spracovanie prebiehalo prvkov prebiehalo nezávysle a súbežne.

Problém môže nastať pokiaľ ide o náročné výpočty, kedže nie je možné obmedziť využitie jadier procesora, môže dôjsť k spomaleniu všetkých súbežnych programov, čo je v niektorých prípadoch nežiadúce.

Javascript

Okrem Javy na prednáškach odznelo aj zopár zaujímavých informácií o JavaScripte. Pre mňa jednou z najväčších nevýhod JavaScriptu je neprehľadnosť. Fakt že neexistuje spôsob ako oddeliť jednotlivé časti kódu od seba, tak ako to poznáme z Javy a iných jazykov, kde je modularita na vysokej úrovni, je dosť nepríjemný.
Našťastie existuje zopár riešení. Medzi ne patrí AMD pre JavaScript použitý na prehliadači a CommonJS pre použitie na servri.

AMD – Asynchronous Module Definition je návrh, ktorý umožňuje asynchrónne načítanie modulov a závyslostí. V súčasnosti ho využívajú projekty ako Firebug alebo jQuery.

2 kľúčové metódy sú define, pre vytváranie a definovanie modulov, a require, pre načítanie závislostí.

define(
module_id /*optional*/,
[dependencies] /*optional*/,
definition function /*function for instantiating the module or object*/
);

require(['module1'], function ( module1 ) {
module1.doSomething();
});

Metóda require sa používa priamo v kóde v momente kedy je potrebný prístup k modulu.

CommonJS – Zatiaľ čo AMD definuje moduly pomocou metódy define, v prípade CommonJS, sú moduly kusmi kódu, ktoré definujú prístupné časti pomocou objektu exports

function myFunction(){..}

exports.myFunction = myFunction;

Týmto definujeme že myFunction je prístupná pomocou volania

var myFunction= require(‘./module’).myFunction

CommonJS API mimo iné definuje služby ako system, a io, preto je vhodnejší skôr pre použitie na servri, kedže tie na klientskej strane nemajú veľké opodstatnenie. Preto ak sa modul nepoužíva na servri tak je preferované použiť AMD.

Pár postrehov z ďalších prednášok
Ako som spomínal CommonJS je vhodnejší pre použitie na servri, jedným zo servrov určených pre JavaScript je node.js, ktorému bola venovaná jedna z prednášok. Ide o server ktorý je postavený na JavaScriptovom engine použitom v prehliadači Chrome od Googla. I keď JavaScript v niektorých situáciách ponúka určité výhody oproti Jave. Pokiaľ ide o zložitejšie výpočty Java stále vedie. Nie som presvedčený že výhody ktoré node.js môže ponúknuť, postačia na opodstatnenie jeho nasadenia pred štandardnejším a menej špecifickým Javovským servrom.

HTML5 – Tu boli spomenuté nové elementy ako napríklad <audio> a <video>. Ako je ale dobrým zvykom prehliadačov, opäť sa nedohodli. A tak každý prehliadač má podporu pre iné video súbory. Naštastie element <video> umožňuje definovať niekoľko zdrojov, a prehliadač si potom môže vybrať jeho obľúbený.

JavaFX everywhere – Táto prednáška hovorila o zaujímavom projekte. Ide o kompilátor ktorý je schopný skompilovať projekt v JavaFX ako pre rôzne embeded zariadenia ako raspberry pi, cez mobilné telefóny s Androidom, až po iPhony (v tomto prípade dochádza k prevodu kódu z Javy na C). Väčšina prednášky bola venovaná porovnaniu výkonu jednoduchej grafickej aplikácie na rôznych zariadeniach. Samozrejme najhoršie výsledky boli dosiahnuté na zariadeniach od Appleu, ktoré nemajú podporu Javy. No aj tu boli výsledky viac ako zaujímave.

Nakoniec nemôžem nespomenúť prezentáciu NAO robota od firmy Aldebaran. Aj keď sa prezentácia nezaobišla bez niekoľkých technických problémov, keď sa robot nesprával podľa predstáv prednášajúcich. Bolo celkom zaujímavé vidieť čoho všetkého je schopný. Tanec by mohol ešte trošku doladiť, ale celkom mu to ide (https://www.dropbox.com/s/65kspyqbi04jnt9/VID_20140513_200759.mp4).

Posted in programming


Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>