JavaOne 2013 loppuraportti – executive summary (RasPI, IoT, Lambdas)

Jälleen oli työntäyteinen viikko San Franciscossa – yllättävänä bonuksena aurinkokin pilkisteli hieman. Konferenssi oli Javaa työkseen käyttäville suunnattu – paikalla oli Java kehittäjiä/koodaajia runsain mitoin, mutta samoin myös testaajia, projektinvetäjiä, konsultteja, ylläpitäjiä, ja jonkun verran myös business-puolen ihmisiä. Aurinkoa tuli nähtyä vaikka erityisen lämmintä ei ollutkaan, pääosin kuitenkin aika kului pimeissä konferenssihuoneissa. Yli 20 000 osallistijaa – yli  400 esitystä viikon ajalle jaettuna – valintoja oli tehtävä. Sykettä ja suoranaista innostusta oli taas ilmassa. Wired raportoi Javan renessanssista – tai uudesta tulemisesta. Twitter toteaa miten Java on heille ainoa mahdollinen alusta (Hylättyään Rubyn aikoja sitten Javan hyväksi).

2013-09-22 22.14.05

Ja tähän se yhteenvedon yhteenveto: Uudet versiot Java SE 8 ja Java EE 7 ovat tärkeitä ja merkittäviä päivityksiä. Java alustana elää ja voi vahvasti. Se on siirtynyt entistäkin enemmän avoimen lähdekoodin maailmaan. Jo pitkään hypetetty pilvi on saapunut, se on jo täällä. Se tarjoaa uusia mahdollisuuksia ja Java on nihiin valmis. Nykypäivän ja tulevaisuuden älykkäät päätelaitteet mukaanlukien mobiililaitteet, mutta myös autot ja älykodit kytketään serveripäähän, tyypillisesti HTML5+JavaScript tekniikoin – mutta tilanteen mukaan millä vain. Vuoden 2014 trendejä ovat em ohella Lambdat ja Websocketit, sekä HTML5 ja Javascript. Niitä voivat käyttää jo nyt Glassfish palvelimien käyttäjät (Kuten Tieturi), mutta ensi vuonna myös muilla palvelimilla homma hoituu. Ja aina voi vuokrata pilven päältä viipaleen tilaa itselleen. Lambdat ovat Java-kielen tasolla huomattavasti suurempi muutos kuin esim. Generics aikoinaan.

Yksi piiloteema on myös alustan yhdenmukaistuminen: Java ME 8 + Java SE 8 yhdistyminen lähemmäs toisiaan, jatkuu versiossa 9 toivon mukaan Project Jigsawn kera.  Jatkossa on tarkoitus synkronoida myös SE ja EE julkaisuja enemmän samaan tahtiin. Erittäin mielenkiintoinen huomio taas siitä mitä ei ole: Yhden yhtä Java ME demoa puhelimessa en nähnyt, eli alusta on karkaamassa jo kansoitetusta puhelin ja tablet alustasta (niitä hoidetaan HTML5+Javascript mallilla tai sitten vain natiivikoodauksella ja RESTful web serviceilä) – kohden todellisia sulautettuja järjestelmiä: Kulunhallintaa, kapasiteetin hallintaa, käytön hallintaa, kunnon hallintaa.

Mitä uutta Javasta?

Varsinaiset uutuudet olivat tietysti Javan uudet ja tulevat versiot. Tärkein niistä oli Java EE 7 palvelinstandardi, joka julkaistiin jo viime kesänä ja alkaa nyt valumaan pikkuhiljaa Java-serveriympäristöihin. Toinen tärkeä uutuus on ensi vuonna alkupuolella julkaistava Java SE 8, joka pistää käytännössä kaiken Javan uusiksi – hyvällä tavalla. Vanha Java-koodi tulee toimimaan, kuten aina ennenkin, edelleen ilman muutoksia. Mutta kaikki tulevat rajapinnat tulevat rakentumaan niin vahvasti Java 8 Lambda expression malleihin – ja olemassaoleviakin on jo Java 8 osalta päivitety rajusti – että koodaajilla on edessään suuri osaamisen päivitys. Väittäisin että suurempi kuin Java versiossa 5 aikanaan.

2013-09-25 11.59.55

Rivien välissä oli myös muuta tarinaa trendeistä luettavissa. Näytteilleasettajien puolella oli hurjasti pilvipalveluita tarjolla niille jotka haluavat ja uskaltavat ulkoistaa infransa vuokrattavaksi. Pilvipohjaista kehitysympäristöä, testausympäristöä, entistä helpompaa pilvipohjaista ajoympäristöä sovelluksille, jne. Pilvi on tullut ja on jo osa elämää ja rutiinia. Yhtenä haasteena paikan päällä koodasin CloudFoundry pilveen Spring Tool Suitella tehdyn Spring web-sovelluksen jossa integroin JavaOne tweettejä twitteristä – helppoa kuin heinänteko. Codenvy tarjosi kehitysympäristöä pilveen – jossa voi vuokrata kapasiteetin. Sauce Labs tarjosi testausta pilvessä, web ja mobiilisovelluksille, mahdollisuus testata automatisoidusti yli 150 selain/käyttöjärjestelmäkombinaatiolla.  New Relic tarjoaa edelleenkin ulkoistettua serverin monitorointia pilvessä.

Internet of Things – robottien maihinnousu

Itselleni yllättävä painotus oli Internet of Things – IOT ihan kaikkialla. Konferenssissa esiteltiin Raspberry Pi- tuttavallisemmin RasPi – pohjaisia robotteja, tabletteja, kotiautomaatiota, klustereita, autojen toiminnan etälukua langattomasti, Raspberry Pi esiintyi niin monesti esityksissä että oli pakko ostaa tuliaisiksi itsellekin sellainen – maksaahan yksikkö vain 30 dollaria ja sillä voi sentään ajaa Linuxia ja Javaa! 😉 Tosin omana mielipiteenä on, että mielenkiintoinen sulautettujen yksiköiden suunta on käytetyt matkapuhelimet – pari kolme generaatiota vanha Android on äärimmäisen hyvin ohjelmoitavissa ja niitä saa tyyliin ilmaiseksi kun jaksaa vain kärrätä pois, etenkin käytettynä. Tässäpä olisi business idea: Rakenna klusteroitu supertietokone käytetyistä Android laitteista ja myy sieltä pilvikapasiteettia käyttäjille. Tai tee niistä kodintekniikan keskuksia.

Java embedded-haasteessa joku rakensi sydänmonitorin jossa oli mukana Java, RasPI, sekä Google Glass 😉

Shakinpeluurobotti

Tuotteistettunakin löytyy jo E-Health alusta, joka rakentuu RasPI tai Arduino alustojen päälle, ja mittaa mm. pulssia, hapen määrää veressä, hengitystä, ruumiinlämpöä, EKG:tä, verensokeria, hikoilua, verenpainetta, potilaan asentoa, ja lihaksiston kuntoa – ja lähettää tiedot reaaliajassa analysoitavaksi.

Piiloviesti tämän alla valkeni vasta muutaman esityksen katsottuani: yhteistä IoT esityksille oli vahva Java EE 7 serveri pinnan alla, jossa on tila ja logiikka. Java EE 7 tarjoaa entistäkin helpomman tavan rakennella sovelluksen sydänlogiikka – ja niitä voi viskata pilveen ellei halua omaa serveriä ostaa. Toinen mielenkiintoinen teema oli EE 7 uusi websocket mallin käyttö: Se muuttaa ohjelmoinnin siitä että asiakkaat hakevat aktiivisesti sisältöä sellaiseksi että lukuisat erilaiset asiakasohjelmat vastaanottavat tapahtumia ja sanomia kun serverillä tapahtuu jotain. Näin pystyvät esim. ipad, laptop, ja robotti keskustelemaan sulavasti keskenään. Ideana on että IoT on (mikro- ja muiden) laitteiden pilvi jotka tuottavat sekä Big Dataa että Fast Dataa. Keskellä olevan Java EE 7 serverin rooli on yhdistää, prosessoida ja suodattaa datamääriä. Kyseessä on eräänlainen väylä-ajattelu, vähän eri näkökulmasta.

Hazelcast Lego-Pi cluster

IoT on myös nykyisellään puhdasta villiä länttä. Innovointi on vahvaa, ja se tarkoittaa että tietoturvaa ei yleensä ole juuri ollenkaan. Jo nyt on kertomuksia miten hakkerit ovat murtautuneet auton viihdejärjestelmän kautta sisään ja onnistuneet ohjaamaan pyöriä – tai miten hotellin valonohjaus on otettu haltuun tökkäämällä pistorasiaan oma kontrollimoduuli – tai miten Android puhelimella on hakkeroitu lentokoneen järjestelmiä. Tietoturva on osa-alue joka nousee aina vain tärkeämmäksi jatkossa, koska IoT laitteiden tietoturvahaavoittuvuuksissa voi olla seurauksena loukkaantumisia tai jopa hengen menetyksiä – toisin kuin ennen vanhaan jos joku virus päätti pistää koneen levyasemat tasaiseksi.

Ihmisiä valuu luentosaliin

Eurotech demonstroi myös IoT ajattelua toteuttamalla JavaOne kävijämäärien laskureita luentosaleihin ja auloihin. Uutta oli se että ne ovat langattomia laskureita, kytkettynä Oraclen pilveen ja antavat reaaliaikatietoa siitä miten paljon missäkin on ihmisiä. Näitä on toteutettu mm. wc-tilojen puhdistusaikataulutukseen, bussien kapasiteetinohjaukseen, taksijonojen optimointiin, jne.

Entä akronyymit? Mikä on kuumaa ja mikä kylmää?

Tässä vielä teknisempää trendilistaa. Mielestäni nousussa ovat:

Java EE 7, etenkin EJB 3.2 ja Websocket sekä CDI ihan kaikkialla.

– Netbeans – jopa Gosling kyykytti Eclipseä ja kehui netbeansiä. Se on mainettaan paljon parempi kapistus ja 7.4 versiosta alkaen myös HTML5 + JavaScript ovat saaneet ainutlaatuisen hyvän tuen. Tukee tottakai kaikkea mitä Java EE 7 voi antaa.

Glassfish. No, nopea, kevyt, maksuton serveri. On se kova. Ei niin ettei myös JBOSS olisi. Ei pidä unohtaa myöskään TomEE palvelinta tai Jettyä. Yhä enemmän tehdään joka tapauksessa open sourcella.

HTML5, JavaScript – mahdollistavat sen että varsinaista serveripään web sovelluskehystä ei aina tarvita. Tässä saa olla hieman tarkkana tietoturvan kanssa mutta valmiita kirjastoratkaisuja löytyy kuten Vaadin, Project Avatar, ja mikä hyvänsä javascript kirjasto.

– GPU kiihdytys, eli grafiikkapiirien käyttäminen laskemiseen. Se on jo ennestään kova juttu tietoturvamaailmasta, mutta nyt myös tietokanta ja sovelluspalvelinmaailmassa hyödynnetään – case IBM ja Oracle.

– Tietoturva. No joo, sen pitäisi aina olla nousussa. Lisätään monimuotoisemmat ympäristöt ja EU:sta päin tulevat lainsäädännölliset paineet niin ehkä tähänkin aletaan budjetoimaan enemmän.

Laskussa ovat:

– JavaServer Faces JSF – murheellista sanoa, mutta vaikka JSF on standardi se ei ole ainoa vaihtoehto käyttöliittymiin. Se on edelleen aivan mainio kohtuukokoisille yrityssovelluksille missä projektin kustannustehokkuus on kaiken a ja o ja pitää saada nopeasti hyvää jälkeä aikaan. Mutta IoT maailmassa vaihtoehdot ovat tärkeitä. Niitä voi olla vaikkapa juuri open sourcattu Project Avatar, joka sisältää mm. Node.js tekniikasta päivitetyn JVM version.

Todettakoon kuitenkin että JSF 2.2 on myös aika hieno, sieltä löytyy mm. HTML5 leiskapohjamalli – ei ole siis pakko käyttää jsf tagejä. Sieltä löytyy JSF Flow malli jolla voi määritellä miten sivuilla liikutaan. Sieltä löytyy entistä enemmän mahdollisuuksia tilattomuuteen jos niin haluaa.

Kaupalliset serverit ja kehitysvälineet. Tästä voi olla montaa mieltä – mutta jos katsoo meidänkin asiakaskuntaamme niin yhä harvemmalla on satojentuhansien lisenssillä varustettua serverisoftaa tai tuhansien eurojen lisenssillä varustettua kehitysympäristöä Javan tekemiseen. Toki rahalla saa – sekä Oracle että IBM julkistivat mahtavia parannuksia serverituotteisiinsa joissa teemana on että kytkintä kääntämällä saa lisää vääntöä, tai operaatio voidaan tehostaa 48 kertaa nopeammaksi.

Seuraavien asioiden status ei mielestäni ole nousussa tai laskussa, niitä käytetään kun ne sopivat: JavaFX, RESTful web services, Spring Framework (jos seminaarin luennoitsijoilta kysytään, se on kuitenkin kirjastoraskasta legacymoskaa josta pitäisi pääästä eroon ja siirtyä uuteen kauniiseen Java EE 7 aikaan 😉

Miten päivitetään taidot vuoden 2014 tasoon?

Eli meidän asiakkaillemme koulutusterveisiä: Kannattaa tarkistaa että koodaajilla on modernit Java versiot hallussa – tällä hetkellä Javan uudet piirteet versiosta 5.0 versioon 7.0 – ja pian myös 8.0. Kannattaa myös tarkistaa että Java EE 7 taso ja paletti on hallussa – EJB, CDI ja JPA niistä tärkeimpinä. Ehdottoman tärkeää on tarkistaa että suunnittelijat tietävät missä mennään – Java EE 7 ja Spring Frameworkin uusimpiin versioihin tutustuminen ei ole huono idea.

Jos kaipaa parempia tuotteita sovelluksen seurantaan, niitä olisi tarjolla maailmalla, eikä edes maksa paljoa. Javan ei tarvitse olla musta laatikko. Samoin jos pilvi kiinnostaa, niin ei ole mitään syytä miksi sinne ei voisi mennä vaikka heti. Vaihtoehdot kuten Jelastic, Google App Engine, CloudFoundry, Oracle Public Cloud – ovat valmiina Java EE sovelluksille samantien. Voi myös miettiä onko sovelluskehitysympäristö tai testausympäristö pilvessä jotain mikä voisi kiinnostaa – itseäni kiinnostaa, koska skaalautuvuus ja käyttöönoton vaivattomuus on tällaisessa omaa luokkaansa. Ja voi koodata vaikka Nexus 7 tabletilla seminaariluentoja katsellessaan.. :p

Niin, vuosi 2014 tulee nopeammin kuin voi arvatakaan, osaamisen päivittämistä on jo korkea aika suunnitella. Edelleenkin koulutuksissa käy ilmi että kaikki koodaajaresurssit eivät ole täysin tuttuja Java 5 uusien piirteiden kanssa – ja nyt puhutaan kuitenkin Java versioista 7 ja 8, ja uudet piirteet ovat kaikkialla rajapinnoissa käytössä. Edelleen kuulee myyttejä jotka perustuvat vanhaan J2EE maailmaan: monimutkaisuus ja suorituskyky sekä ORM tekniikoiden uskottavuus. Ei kannata tehdä olettamuksia ellei ole toteuttanut projektia Java EE 7:llä  -se on hauskaa, helppoa ja varsin uskottavaa.

Vanhoilla teknologioilla projektien tekeminen on kuin lähtisi ajelemaan maanteille T-mallin fordilla: Voihan sitä huvikseen tehdä ellei ole erityistä kiirettä.

Täältä niitä koulutuksia löytyy jos tarvetta ilmenee:

http://www.tieturi.fi/java

Ja tuossa Wired artikkeli samasta seminaarista:

http://www.wired.com/wiredenterprise/2013/09/the-second-coming-of-java/all/

JavaOne 2013 – Torstai

Oracle järjesti seminaarin kunniaksi taas kerran iltatapahtuman Treasure Islandissa. Lavalla oli Maroon 5 ja Black Keys, ja juhlistettiin samalla Oraclen tiimin voittoa Americas Cup-purjehduskisassa. Kun muutama kymmentä tuhatta ihmistä pakkautuu pieneen tilaan saa varautua jonottamaan ihan kaikkialle. Jouduin itse irtautumaan myös inhottavan ajoissa koska torstainakin oli ohjelmaa heti aamusta.

Oracle Appreciation Event, Treasure Island

Pistetäänpä vielä sananen Project Avatarista. Se on niin tuore juttu että kyse ei ole yhteisön standardointityöstä tai Java-tyylisistä akronyymirajapinnoista vaan ihan innovointi-open source alustasta. Selkeästi haetaan tällä näkemystä siitä mitä pitäisi olla Single page app malli Javassa. Sen voi standardoida kun se on valmis. Nyt se on vain yksi monista lisäkirjastoista joita Javan päälle saa.

Project Avatar julkistettiin jo 2011 JavaOne konferenssissa, mutta paljon sen enempää siitä ei ole kuulunut ennen kuin tällä viikolla, kun se avattiin avoimen lähdekoodin projektiksi. Se rakentuu vahvasti Java EE 7 piirteiden varaan (kuten Websocket) – joten aiempia EE versioita käyttämään joutuvien ei kannata Avatarista vielä haaveilla. Idea on vähän kuin GWT:ssä – eli Java-koodista generoitua javascriptiä. Lisäksi projektissa on yhteinen malli server ja client pään tekemiseen.

Community Keynote oli kuten arvata saattaa enemmän tuote-esittelyä ja parteripuheenvuoroja. Homma muuttui kiintoisammaksi kun lavalle asteli Aditya Gupta, Arun Guptan 10-vuotias poika – joka demosi Minecraft-koodausta Eclipsellä ja pisti sikoja lentämään ja räjähtelemään. Tämä liittyi laajempaan aiheeseen tulevien sukupolvien kouluttamisesta. Jos 10-vuotiaskin oppii koodaamaan Javaa, kääntämään lähdekoodit bytecodesta, ja tulemaan toimeen Eclipsen kanssa, homma ei voi olla kovin vaikeaa :p Mutta toden puhuakseni itse törmäsin muutama vuosi taaksepäin problematiikkaan miten 15-vuotias saadaan oppimaan Javaa – asiakas pisti poikansa kurssille saamaan etulyöntiasemaa yliopistoon mennessä, ja kävi ilmi että perinteiset business esimerkit kuten asiakasrekisteri tai pankki eivät oikein väräytä. Hoksasin ottaa mukaan jotain visuaalista, siirryttiin väreihin, muotoihin, spriteihin, säikeisiin, synkronointiin, ja johan alkoi homma luistamaan. Lapsia koulutettaessa visuaalisuus on hyvästä ja tärkeintä on löytää motivaatio – kaikki muu seuraa lähes itsestään sen perässä. Hetki – samahan pätee aikuisiinkin 😉

James Gosling tuli lavalle esittelemään omia projektejaan Liquid Robotics yrityksessä. He valmistavat meressä liikkuvia autonomisia tutkimuslaitteita, Glidereita, joita voi ohjata ja käskyttää etäältä – mutta joissa on myös Java-logiikkaa ohjaamassa, esim. estämässä törmäyksiä ja hoitamassa navigoinnin tulkkausta liikkuvassa vedessä. Robotin autonominen törmäyksen esto-ohjema on itse asiassa niin pätevä, että kerran kun venemiehistö oli yrittänyt poimia robottia kyytiin pitkään tuloksetta, he huomasivat sen johtuvan siitä että törmäyksenesto oli jäänyt vahingossa päälle – ja Goslingilla oli hauskaa 😉

Demojumalat eivät olleet suosiollisia, verkkoyhteyksien kanssa oli ongelmaa, mutta Gliderista saatiin mereltä live videokuvaa, ja sitä käskytettiin niin scriptillä webistä kuin graafisemmilla ohjelmilla. JavaFX clientin suorituskyky oli huimaava, zoomatessa sisään ja ulos ei ollut havaittavissa mitään viiveitä. Aiemmin NASA:n edustajat kävivät myös lavalla esittelemässä aiemmin mainitsemaani satelliittien hallinta ja visualisointi-ohjelmistoa joka on niinikään JavaFX pohjainen.

Muuten oli taas aikaa katsella muistiinpanoja jo käydyistä asioista. Vaikka Android puheevuoroja ei juuri ollutkaan, jotain mielenkiintoista jäi haaviin. Esitys jossa puhuttiin Mobile Google Web Toolkitistä, eli GWT jolla kehitetään suoraan mobiiliin siirtyviä Cross-platform sovelluksia. Sotketaan soppaan vielä Phonegap, tarjoamaan rajapinnat puhelimen palveluihin (geolokaatio, kamera, kiihtyvyysanturi, kompassi,yhteystiedot ja puhelinluettelo,levyjärjestelmä,nfc), ja tässä olisi jälleen uusi HTML5+JavaScript mobiililaite-kehitysympäristö.. https://code.google.com/p/mgwt/ – ja tällä yhdistelmällä siis päräyttää sovellukset niin iPadiin, iPhoneen, kuin Androidiinkin.

Juuri ennen lähtöä kentälle ehdin vielä osallistua kuulemaan ajatuksia siitä mitä Java EE 8 tuo tullessaan. selkeästi vielä aikaista ennustella tarkemmin, mutta fokuksena näyttäisi olevan standardointi ja helponnukset, ei uuden innovointi. Aikanaan hehkutetut pilvipiirteet jäävät vielä toistaiseksikin vähälle; Javahan on jo pilveen valmis.

Väsyttava reissu, nyt lennän loppuun asti paluumatkan, ja vetäydyn kammiooni mietiskelemään hetkeksi, sitten on loppuraportin aika.

JavaOne 2013 – keskiviikko

JavaOne seminaari ja keskiviikkoon asti ollaan päästy. Hauskasti aina meno vähän tasoittuu kun homma etenee, osa lähtee pois jo aikaisemmin, ja muutenkin tuntuu että jäljelle jääneet ovat enemmän keskittyneet sisältöön. Sitä heijastaen luvassa on enemmän keskittyneitä luentoja yleisten linjausten sijasta.

2013-09-25 09.49.19

Aamuksi buukkaamani luento Lambda Expression aiheesta oli napakymppi: Luennoija Venkat Subramamiam on täsmällisten tietojensa ohella erinomainen ja hauska luennoija. Esitys muistutti puolittain hyvää standup-showta, mutta koska kerrotut anekdootit ja metaforat liittyivät tiiviisti aiheeseen, ne ylläpitivät vain parempaa keskittymistä ja parempaa asioiden muistamista. Mahtavia lainauksia olisi riittänyt pilvin pimein aiheista. Mutta tässä tiivistelmää:

– Ohjelmoijan kannattaa opiskella useita kieliä, niin montaa kuin mahdollista. Ei vaihtaakseen vanhaa uuteen trendien mukaan, vaan koodatakseen vanhaa paremmin. Ei kannata siis odotella Java 8 versiota, vaan mars oppimaan Scalaa ja Groovya siis! 😉

– Imperatiivinen koodi ja ’mutable state’ eli muuttuva tila ovat äärimmäisen bugiherkkiä. Kun olioihin vaikutetaan ulkopuolelta koodi keskittyy tekemään kaikkea mikromanageroinnin tasolla. Se on kuin yrittäisi ulkoiluttaa vastahakoista koiraa ja joutuisi siirtämään sen jalkoja yksi kerrallaan jotta se liikkuisi. Koodin luettavuus kärsii koska koodi tekee kaikkea muuta kuin varsinaista ongelmanratkaisua. Ongelmat löytyvät testauksen kautta.

– Funktionalinen koodi kuten Scalassa ja tulevassa Java 8 versiossa on ytimekkäämpää, mutta ennen muuta luettavampaa ja ymmärrettävämpää. Edelliseen esimerkkiin liittyen se on kuin heittäisi koiralle pallon. Koira liikkuu itsestään pallon perään, se tietää mitä tehdä ja miten jalat liikkuvat parhaiten.  Funktionaalisessa mallissa on mahdollista optimoida suoritusta, ja vaihdella algoritmeja tilanteen mukaan.

– Joka johtaakin rinnakkaiseen suoritukseen. Venkat näytti demon jossa ensin haettiin Amazon web serviceistä osaketietoja ja etsittiin kalleinta alle 500 dollarin osaketta imperatiivisella logiikalla: Koodirivejä n. 25 ja suoritusaika n. 75 sekuntia. Sitten tehtiin sama homma funktionaalisesti. Koodirivejä 1 (no viitisen vaihetta mutta vain yksi puolipiste 😉 – suoritusaika n. puolet, koska asiat tehtiin lazy evaluation – tyyliin fiksusti. Lopuksi muutettiin yksi kohta: parStream(), ja saatiin rinnakkainen suoritus fiksusti automatisoiden, toimintavarmasti. Aikaa kului n. 10 sekuntia. Pääpointti on, että funktionaalista suoritusta voi optimoida, olio tietää aina itse parhaiten miten toimia (tai sen tulisi).

– Rinnakkainen käsittely on toteutettu Java 7:stä tutulla Fork&Join kehyksellä jota ei enää tarvitse koodata matalalla tasolla itse – jos haluaa ajaa kokoelmien kanssa operaatioita rinnakkain – ja kukapa haluaisi?

Lambdat tarkassa syynissä

Koodiesimerkki Venkat Subramamilta: Hae kallein alle 500 dollarin osake (käyttäen apuluokkaa joka tekee web service kutsut ja vertailut):

public static void findStockImperative(List<String> symbols) {
 List<StockInfo> stockPrices = new ArrayList<>();

 for(String ticker : symbols) {
 stockPrices.add(StockUtil.getPrice(ticker));
 }
List<StockInfo> stocksLessThan500 = new ArrayList<>();
 for(StockInfo stockInfo : stockPrices) {
 if(StockUtil.isPriceLessThan(500).test(stockInfo))
 stocksLessThan500.add(stockInfo);
 }

 StockInfo highPriced = new StockInfo("", 0.0);
 for(StockInfo stockInfo : stocksLessThan500) {
 highPriced = StockUtil.pickHigh(highPriced, stockInfo);
 }

 System.out.println(highPriced);

 }

Toinen koodiesimerkki: Sama funktionaalisesti Java SE 8 piirteillä (mapreduce):

public static void findStockDeclarative(Stream<String> tickers) {
 StockInfo highPriced = 
     tickers
         .map(StockUtil::getPrice)
         .filter(StockUtil.isPriceLessThan(500))
         .reduce(new StockInfo("", 0.0), StockUtil::pickHigh);
 System.out.println(highPriced);
 }

Ja näin päästiin suoritusajassa 70 sekunnista 10 sekunnin paikkeille. Mahtava luennoija tämä kaveri joka tapauksessa, voin lämpimästi suositella kuuntelemista jos tilaisuus tulee. Tässä muutama lainaus (eivät ole sanantarkkoja eivätkä tee oikeutta originaaleille mutta jakamisen arvoisia niille jotka eivät esitystä kuulleet):

– Mitä tarkoittaa rinnakkainen ohjelmointi Javassa? Se tarkoittaa että koodaaja koodaa samaan aikaan kaameaa möykkykoodia ja samalla päivittää CV:tään kuntoon…

– Miltä tuntuu koodata imperatiivisesti muuttuvalla tilalla? Siitä tulee likainen olo, on inhottavaa mennä työpäivän jälkeen kotiin.

– Imperatiivinen kokoelmaluokkien ohjelmointi on suunnittelumalli – nimeltään Self-inflicted wound

– Java koodaajat eivät koskaan kirjoita typerää koodia – he koodaavat kehitysympäristöjä jotka kirjoittavat typerää koodia.

– Muuttuva tila on NIIIIN 1900-lukua!

– Lazy lausutaan efficient!

Luonnollisesti, disclaimer perään: Rinnakkaisuus ja etenkin helppo ja toimintavarma sellainen on joskus mahtavan hieno ratkaisu. Toisinaan taas ei, se ei ole maaginen hopealuoti joka aina ja joka paikassa olisi oikea ratkaisu. Samoin funktionaalinen ohjelmointi, se ei ole joka paikassa aina oikea tapa toimia, vaikka usein on. Järjenkäyttö on sallittua, imperatiiviselle ja peräkkäiselle ohjelmoinnille on edelleen paikkansa. Nyt on vain vaihtoehtoja. Sekä Scalassa että Javassa on vahvasti yksi jalka oliomaailmassa, yksi jalka funktionaalisessa. Ne antavat ohjelmoijille mahtavan työkalupakin.

Muutenkin tämän otin lambda-päivän kannalta, esitykset ja labrat joihin osallistuin käsittelevät asiaa pintaa syvemmältä eri kanteilta. Osallistuin Hands-On-Lab työpajaan jossa ratkaistiin valmiita yksikkötestirunkoja Lambdoilla – käyttäen Java 8 esiversiota ja Netbeansiä jotka ovat vielä uudempia kuin tämän hetken developer preview 😉 Teknisistä ongelmista selvittyä pistettiin Lambdoille vauhtia, ja tehtiin uskomattomia asioita kokoelmila. Siinä missä itse Lambdat ovat selkeää ja peräti esteettistä koodia, täytyy sanoa että Java 8 Collection rajapinnat alkavat näyttää diabolisilta. Se on kuin kännissä koodattua Scalaa! Se siitä selkeälukuisuudesta. Silti, tehokkuusmielessä tapahtuu uskomattomia asioita, ja kun pääsee jyvälle miten asiat toimivat, Collections stream() api on aika rautaa. Vastaava koodi imperatiivisella ohjelmoinnilla voisi edelleen näyttää pahalta.

JavaOne 2013 – Tiistai

Tiistai oli vähemmän innostava päivä kuin maanantai. Osa syytä menee itselle – olin buukannut kaikenlaista teknistä yksityiskohtaa. Luennoijat eivät myös olleet erityisen inspiroivia, vaan lukivat suoraan kalvoja ja aivan liian pieniä koodiesimerkkejä monotonisella äänellä – joskus on hyvä nähdä huonoja esimerkkejä miettiäkseen itse miten parantaa 😉

Jotain jäi jokatapauksessa haaviin. JSF 2.2 on pistetty aikalailla uusiksi. Siellä on kiinnostavia piirteitä mm. JSF Flow, joka on muotoiltu esim. Spring Web Flow/Oracle ADF flow mukaan. Se on periaatteessa laajennus navigaatioon, jossa sensijaan että käyttäjä voi pomppia sovelluksessa mihin haluaa, otetaan tarkemmin haltuun reitit ja vaihtoehdot. JSF Flowssa on selkeä alku ja lopputila, ja vakioelementit välissä. Yksi elementeistä on näyttää näkymä, mutta yhtälailla voi olla ehdollista navigointia, logiikan arvoja. Flow voi sisältää myös subflow-elementtejä. Periaatteessa flow on kuin Javan funktio – sillä voi olla parametreja ja paluuarvoja. Tämä on ollut itsellä suht selkeä puoli jo jonkin aikaa, mutta käytännön kokemus on vielä ohutta.

Lisäksi JSF:stä löytyy nyt ’contract’ malli jossa voidaan resurssikansioon paketoida kuvien ja scriptien ohella nyt myös template ratkaisuja joissa on ajettavaa koodia. Demossa näytettiin miten contract-valikoimasta voi valita vaihtoehtoja helposti esim. url parametrilla. Tämä mahdollistaisi esim. käyttöliittymän vaihdettavuuden skinnin-tekniikan tapaan, tai mobiili ja työasemakäyttöliittymät rinnakkaisissa template-kansioissa.

Last but not least: HTML5 pohjainen template malli on aika miellyttävä, joskin siihenkin näyttäisi omia sudenkuoppiaan liittyvän. Tämä haasta Wicketin mukavasti – ja toisin kuin Wicketissä JSF:ssähän ei ole tarpeen toistaa käyttöliittymäelementtien rakennetta koodin puolelle vaan riittää että templatessa on ne merkattu – niihin pääsee käsiksi automaattisesti koodista.

2013-09-24 09.02.00

Project Avatar oli uteliaan tutustumisen arvoinen. Äärimmäisen puuduttavasta esityksestä huolimatta kyseessä on juuri open sourceksi avattu hanke jossa on kaikenlaista apua HTML5+JavaScript asiakasohjelmien tekoon. Yksi elementti on Avatar.js kirjasto, joka on periaatteessa Node.js muunnettuna JVM-kelpoiseen muotoon. Java virtuaalikoneen päällä ajettuna saadaan nauttia monista virtuaalikoneen piirteistä joista vähäisin ei ole koodin optimointi ajon aikana dynaamisesti. Kirjastosta löytyy muutakin, ilmeisesti single page app voisi saada tukea tältä suunnalta jos JSF ei kiinnosta. Tämä ei kuitenkaan ole vielä osa Java EE arkkitehtuuria, vaan valinnainen lisäprojekti, aika tuore myöskin. Mutta kiinnostava. Penteleellisen vaikea löytää Googlella kun kaikki linkit vievät sinisiin metsäolentoihin.  Tässä linkki oikeaan proggikseen: https://avatar.java.net/

stack

Nashorn on tietysti uusin ja kaunein kiillotettu JavaScript ajomoottori joka korvaa aiemman Rhinon.

JPA 2.1 on päällisin puolin aika pieni päivitys, mutta kun siitä tunti puhuttiin päästiin syvemmälle porautumaan. Itselleni mielenkiintoinen lisä olivat Object Graph piirteet, käytännössä idea on vanha (projektio, kenttäryhmä) mutta JPA tuki on uusi juttu.  JPA 2.0 versioon asti JPA hakee kolmessa moodissa tavaraa: lazy, eager, tai fetch join – ja haettaessa kannasta tauluja haetaan aina kaikki. Nyt JPA 2.1 Object Graph antaa mahdollisuuden määrittää itse mitä tauluista milloinkin halutaan. Näin muuttuu helpommaksi räätälöidä hakuja jotka välillä hakevat vain muutaman kentän. Huom! id ja versiokentät haetaan aina, niitä ei saa edes pois päältä. Kaikki muu on valinnaista.

Mielenkiintoista oli myös JPA 2.1 tuki Stored Procedure-hauille. Itse pidän näppini visusti erossa moisista epästandardeista hirvityksistä – mutta monessa legacy järjestelmässä niitä löytyy, ja ne pitäisi saada kytketyksi uuteen hienoon kiiltävään Java-systeemiin. Nyt se onnistuu, suoraan JPA:n kautta. Parametreja liikkuu tarvittaessa sisään ja ulos, tai koko ResultSetin voi palautella arvona. Kiintoisaa. Mutta ei kyllä kovin esteettistä eikä selkeää.

Entity Graph

Jahas, ei kun kohden keskiviikkoa. Luvassa pitäisi olla kiinnostavampia luentoja. Tänäänkin olisi ollut mutta nuo peruskaura-apit nyt vain on hyvä tuntea läpikotaisin, ja täällä pääsee vähän myös kuulemaan perusteluita sille miksi ne ovat mitä ovat (JSF työryhmässä oli alunperin Swing guru, siksi tilallisuus on siellä niin kova juttu 😉

No niin, illalla olisi ollut RedHatin sponsoroimat JBOSS bileet luvassa – mutta tein brutaalin päätöksen ja menin sensijaan koodaamaan. Luvassa oli nimittäin Java EE 7 hands on lab. Joskin suuri osa on jo tuttua, on siellä uusiakin osia itselleni, esim. JSF Flow käytännössä, ja eräajorajapintojen EE standardit. Jos jotain olen oppinut koulutellessa, niin koodaamaan nopeasti ja pistämään vajanaiset ohjeet ja ympäristöt kuntoon tarvittaessa paineen alla ja nopeasti :p Labrojen puutteellisista ohjeista huolimatta paukutin ratkaisut paikalleen siihen tahtiin että kun muut vielä tekivät ensi harjoitusta, itsellä oli jo neljä kasassa. Hoksasin jossain vaiheessa että nopeimmalle ratkojalle oli tarjolla krääsää, joten Arun Gupta tuli kiikuttamaan hienon mustan Java-pipon palkaksi nopeimmasta tehdävän ratkaisusta. Harmi ettei niitä voinut napata useampia kerralla :p Varsin mielenkiintoisia harjoitteita, ja aika lupaava alusta tuo EE 7. Eräajoautomatiikka on itselle vielä vierasta kenttää mutta ihmeen nopeasti CVS tiedostot paukkuivat EE serverillä. Ja pipollekin on käyttöä iltaisin ja aamuisin, kun aurinkoa ei näy kylmä valtaa ihan yhtä nopeasti kuin kotikamarallakin 😉

JavaOne 2013 – Sunnuntai

No niin, löydän itseni jälleen kerran San Franciscosta. Kaupunki alkaa tulla jo tutuksi – tietää mistä löytyy mitäkin, ja perille löytää ilman Google Mapsiäkin. San Francisco on aika ennallaan – yksi asia vain muuttunut viime kerrasta. Täällä on aina ajateltu ympäristöystävällisesti – mutta uusi ilmiö on Priusten maahannousu. Arviolta noin kolmannes takseistakin oli mallia Toyota Prius – hyvästi vanhat jenkkiraudat, tervetuloa Japanilainen tehokkuus.

Oracle Openworld ja JavaOne taas yhdistettynä

Jotkut asiat eivät muutu kuitenkaan – näemmä edelleen langattoman verkkoyhteyden tarjoaminen muutamalle kymmenelle tuhannelle ihmisille on ylitsepääsemätön haaste, vuodesta toiseen. Keynote-puheen aikana kaikki langattomat verkot kaatuivat pariksi tunniksi, se reaaliaikaisista päivityksistä. Ehkä vielä joskus.. 😉

Tämä päivä meni vielä jetlagisissä tunnelmissa, aivot eivät ole täysin radallaan vielä, ja muutenkin väsymys vaivaa. Tänään oli silti helpohko päivä – JavaOne Keynote sekä käyttäjäryhmien pienempiä aiheita. Tässä päävaikutelmat päivästä:

Pääteemana näyttää olevan ihan sama aihe mistä itse olen tauhkannut jo jonkin aikaa innoissani: Internet of Things. Ajatuksena on periaatteessa se että tietotekniikka levitäytyy yhä laajemmille alueille. Ei vain työasemat ja mobiililaitteet, se jako kahteen on vanhentunutta. Tabletit näyttivät tietä, mutta olemme jo matkalla jossa kaikki on älykästä, ja kaikki on yhteydessä. Ajatellaan esimerkiksi kahvinkeittimiä, autoja, uuneja, ja JavaOne tapauksessa tuoleja. Keynote esityksessä mainittiin Raspberry Pi laite monia monia kertoja, ja se on teemana myös monessa teknisessä esityksessä sekä kilpailussa täällä. Joku oli rakentanut sellaisesta tee-se-itse-tabletinkin, nimellä Duke Tab ;).

Jos kaikki on ohjelmoitavissa ja yhteyksissä, voidaan mennä kahteen suuntaan. Laitteet voivat olla keskenään yhteyksissä, tai ne voivat olla yhteyksissä serverin kautta. Keynote esityksissä Java EE 7 näytti kyntensä. Lyhyesti summaten: Java EE 7 kicks ass! Jo aiemmat editiot ovat ottaneet helppouden huomioon, mutta EE 7 uudet piirteet kuten Websocket, JSON API, HTML5, ja entistäkin parempi CDI tuki yhdistettynä tarjoavat mahtavan pohjan serverilogiikan rakentamiselle.

Yksi demoista koski myös shakkipeliä. Shakkipeli oli toteutettu serverille Java EE 7:llä, ja siihen otettiin yhteyttä HTML5 mobiili-clienteilla, joista yksi oli iPad. Siihen otettiin yhteyttä myös kannettavalla tietokoneella, itse rakennetulla JavaFX:ää pyörittävällä tabletilla, sekä Raspberry Pi-robotilla joka siirteli shakkinappuloille samat siirrot aidolla shakkipöydällä mitä tehtiin millä hyvänsä muulla clientilla. Kaikki pyörittivät Javaa. Kaikki olivat yhteyksissä toisiinsa. Robotti muutti juuri Java Demogrounds-alueelle jossa se majailee lopun seminaaria.

2013-09-22 15.03.48

Embedded image permalink

Java SE 8 monottaa myös takamuksia! Ensi vuonna julkaistava Java SE 8 perusversio sisältää huimasti mehukkaita piirteitä, mutta varmasti merkittävin niistä on Lambda Expression. Ennestään oli tuttua miten se lyhentää kovasti koodin määrää Java-ratkaisuissa lähes kaikkialla, eritoten kokoelmien kanssa. Uusina oivalluksina tuli että se saa myös koodin olemaan luettavampaa; Katselmoitaessa/koodatessa/muutettaessa huomio keskittyy siihen mitä koodi todella tekee eikä kaikkeen mitä on pakko tehdä jotta sen saa toimimaan. Mielenkiintoinen lisäpiirre oli myös Java 8 Micro Editionin henkiinherätys ja linjaaminen yhdessä SE 8:n kanssa. Molemmat ovat tällä hetkellä täysin ominaisuuksin Developer Preview versioina ladattavissa ja kokeiltavissa. Jahka tämä rullaa viralliseen versioon asti ensi vuonna, ja etenee käyttöönottoon, sillä tulee olemaan laajoja positiivisia vaikutuksia koodiin. Brian Goetz totesi esityksessään:  ”code should look like the problem statement you are trying to solve”

Normaali Java (7) versio

2013-09-23 00.05.49

 

Ja yllättäen myös Netbeans editori on aikalailla kova juttu. Netbeans 7.4 demossa näkyi miten hyvä tuki siinä on web teknologioiden kuten HTML5+JavaScript koodaukseen, kehittämiseen, debuggaukseen ja ennenkaikkea yhdessä Java koodin kera. Lisäbonuksena on kyky ajaa ja testata koodia esim. kytketyssä iPadissä sensijaan että testaa koneella. No, tämä on vasta beta-tasolla, ja esityksessä demoefektin myötä tietysti netbeans kaatui 😉

Project Avatar julkaistiin open sourceksi, osoitteessa https://avatar.java.net/

stack

Project Avatar on JavaScript palvelukerros joka helpottaa dynaamisten JavaScript+HTML5 sovellusten tekemistä – riippumatta siitä onko käytössä REST vai WebSocket. Project Avatar tarjoaa JSF tekniikalle standardi-vaihtoehdon joka perustuu Thin Server Architecture:iin (TSA) – eli thin server, extremely rich client. Tätähän moni tekee jo nykyäänkin – JavaScript sovelluksia RESTful palveluiden päälle – nyt olisi vain luvassa apua siihen.

Huomenna alkaa sitten varsinainen myllytys. Olen buukannut runsaasti esityksiä Lambda Expressioneistä, virtuaalikoneen optimoinnista, Java EE 7:stä, Scalasta, jne. Kuten aiemmista kerroista olen oppinut, Twitter on hyvä pitää auki. Siellä on sykettä, näkemyksiä, ja mielipiteitä. Itse jäin miettimään että Oracle tuntuu tänä vuonna kulkevan samoja polkuja Javan kanssa mitä Google on kulkenut jo pitkään. Onko sieltä suunnalta löydettävissä jotain uutta mehukasta? En tiedä, mutta sitä odotellessa tuoreet versiot Java SE 8 ja Java EE 7 viihdyttävät ihan noissa tavanomaisissakin ympäristöissä. Java ME 8 ja JavaFX 8… ehkä…

Taas kerran tuli näkemystä myös tulevaisuuteen muutamaksi vuodeksi: Java SE 9 ja Java EE 8.

Java SE 9 - vähän tärähtänyt kuva ;)2013-09-22 22.52.32

Päivä päättyi Taylor Streetin verkostoitumismestan avaukseen juhlien muodossa. Itsellä ei väsymys antanut periksi jäädä kauaksi aikaa katselemaan, mutta jo puolessa tunnissa tuli nähtyä sen verran uskomaton määrä katu-uskottavia devaajapartoja että luvassa lienee mielenkiintoisia keskusteluja tulevina päivinä. 😉

2013-09-22 19.20.03

http://www.oracle.com/technetwork/java/index.html