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 – Maanantai

No niin, ensimmäinen luentoja täysi päivä alkaa olla valmis ja kirjailen vähän ajatuksia tähän. Yksi ajatus on että on kyllä hyvä olla täällä paikan päällä. Ensinnäkin aikaerosta johtuen on helpompaa seurata rytmissä mukana tapahtumia ja julistuksia. Aikamoista keskittymistä tarvitaankin jos haluaa pysyä jyvällä mitä kaikkea täällä tapahtuu – etenkin kun itseä kiinnostaa vähän kaikki. Toinen huomio on, että tällaiselle visuaaliselle ihmiselle kuin minä on helpompaa muistaa asiat kun ne on nähnyt kerran livenä, versus että niistä lukee vain kalvoilla. Ehkä reissu on karmean matkustuksen arvoinen…

Hiukan yli 400 sessiota – vähän kuin puolet Tieturin kurssitarjonnasta olisi niputettu yhdelle viikolle. Paljon ravaamista, onneksi valtaosa on tässä hotellissa jossa olen majoittuneena. Tänä vuonna on kulkukortissa vähän vähemmän raitoja kuin viimeksi 😉

2013-09-23 13.03.56

Brian Goetz puhui Lambdoista ja tässä aukesi itsellekin hieman uusia ajatuksia vaikka olen niiden parissa jo aikani puuhaillut. Tässä taas itselle mieleen jääneitä pointteja:

– Koodin tulisi olla luettavaa. Tämä tarkoittaa että aie selviää lukemalla koodia. Tämä vähentää virheitä.

– Tottakai on helppo retostella nyt surkealla aiemmalla Java-koodilla, kun parempi vaihtoehto löytyy. Aiempi koodi on läpäissyt tarkistuksen aikanaan, nyt Java on ollut viimeisiä saarekkeita joissa ei vielä Lambdoja ole. Java 8:sta alkaen tulee olemaan. Lambdoilla monet kivuliaat, etenkin kokoelmien ja tapahtumankäsittelijöiden käyttöön liittyvät asiat näyttävät hurjasti paljon yksinkertaisemmilta ja luettavilta.

– Yllättäen suorituskyvyssä ei ole tullut takkiin: stream() operaatioita ei ajeta peräkkäin vaan yhdistettynä, ja parStream() operaatiot vieläpä fork&join tapaan rinnakkain. Nykypäivän raudalla jo tästä on suunnattomia hyötyjä – tulevaisuuden 64-ytimisellä raudalla astronomisia hyötyjä.Java 7 Fork&Joinia tarvitsee koodata itse käsin yhä harvemmin.

– Haluttiin edelleen pitää yhteensopivuudesta kiinni: siksi ei uusia funktiotyyppejä tai syntaksimuutoksia (sanottavammin) – vanhat rajapinnat ovat maagisesti yhteensopivia Lambdojen kanssa: funktiorajapinta on rajapinta jossa on yksi funktio, siinä kaikki

Tuossapa esimerkkiä lisää, Java 7 versio (tai Java 1.2 versio yhtä hyvin 😉  – huomaa miten koodi tuplautuu, rikkoen DRY periaatetta:

Collections.sort(people, new Comparator<Person>() {
    public int compare(Person x, Person y) {
        return x.getLastName().compareTo(y.getLastName());
    }
});

// Ja tässä Java 8 versio Lambdoilla:

people.sort(comparing(Person::getLastName));

Adam Bien piti mielenkiintoisen esityksen aiheella Java EE Demystified. Huone oli tupasen täyteen pakattu ja seisomapaikatkin käytössä. Eturivistä pari Spring-fanaatikkoa yritti kovasti keskeyttää alkupäästä esitystä mutta lopulta se pääsi rullaamaan. Täytyy sanoa että Adamin ajatukset tehokkuudesta ja Enterprise sovelluksista ovat niin pitkälti samoja kuin omasta suustani tulevat että tästedes voin todeta jos joku haluaa kuulla meikäläisen mielipiteitä: Ostakaa Adam Bienin kirja. Siinä on jo ajatukset valmiiksi purettuna helppoon muotoon. 😉 Pari huomiota jota jäi mieleen itselle:

– Transaktioita tarvitaan. Ilman niitä käy huonosti.

– Transaktioiden tekeminen on erittäin helppoa Java EE alustalla, ja niiden ’overhead’ eli ylimääräinen kuormitus mitätön. Samoin EJB:n.

– Jos ei käytä EJB:tä päätyy rakentamaan vain EJB:n uudestaan – yleensä huonommin lopputuloksin – koska EJB:n mukanaan tuomia hyötyjä useimmiten tarvitsee. Jos kehittäjä sovelluslogiikan sijaan päätyy kodaamaan uudestaan sovelluspalvelinta, se on yleensä hukkaanheitettyä energiaa.

– Jos tekee normaalia yrityssovellusta sadoille käyttäjille, JSF on paras framework nopeaan sulavaan kehitykseen. Jos haluaa täyden kontrollin käyttöliittymästä, kannattaa miettiä HTML5 Single Page App tyyliä – ja käyttää Java EE:tä serverillä. Jos haluaa tehdä uuden Twitterin/Facebookin/Youtuben, kannattaa heittää kaikki arkkitehtuurit ja olettamukset roskiin.

– Jos tekee kohtuulliselle määrälle käyttäjiä tilallisuudesta voi olla jopa hyötyä. Jos tehdään sadoille miljoonille, taas kerran valmisratkaisut saa heittää roskakoriin. TIlattomuus ei ole koskaan väärin, mutta se johtaa käytännössä raskaaseen tietokannan käyttöön.

– Olisi naurettavaa olla käyttämättä Java EE alustaa, ja käyttää jotain muuta/koodata omaa. Noin niinkuin useimmissa tapauksissa 😉 Tämä tarkoittaa ja sisältää ilman muuta pyhän kolminaisuuden EJB, JPA, ja CDI, ja kaiken tietysti sen ympärillä.

Tuosta löytyy pari Adam Bienin kirjaa joita voin suositella kirjahyllyä koristamaan – pirteän värisiäkin vielä ovat! 😉

http://press.adam-bien.com/

Lopuksi, jäin vielä miettimään eilistä Keynote päivää. Yhtä tärkeää kuin mitä sanottiin oli mitä ei sanottu. Mielenkiintoista oli, että tilaisuudessa ei pahemmin messuttu Oraclen kaupallisesta tarjonnasta, ei tuputettu tuotteita. Siellä ei edes paljoakaan puhuttu servereistä koska ne ovat tuoreita ja valmiina EE 7:n muodossa. Hyvin mielenkiintoinen fokus IoT aiheeseen, joka vastaa omia ajatuksiani jo pitkältä ajalta. Raspberry PI laitteita on kaikkialla – Hazelcast nimisen lafkan väki oli rakentanut hulluuttaan PI laitteista ja legopalikoista klusterin, jolla esitteli hajautustekniikoitaan pienemmässä skaalassa.

Hazelcast Lego-Pi cluster

Messuilla näin myös IoT teemaan liittyen kotiautomaatiota, robottihain, ja legoista kootun R2D2-robotin. IoT ja sulautettujen maihinnousu siis lienee tämän vuoden teema. Sikäli mielenkiintoista että Suomen päässä tuntuu näkyvän kaikki tämä ohuesti.

2013-09-23 09.40.24

2013-09-23 14.20.59

Kuten joku bloggasikin jo: Who needs chess-playing robots? Vaikuttaisi kuitenkin siltä että Java-pohjaisia ratkaisuja on häkellyttävässä määrin liikkeellä jo nyt kaikkialla muualla kuin vain serverissä. Hyvä myös huomata hinta. Arduino Pi-mikrotietokoneen hinta on n. 30 dollaria, ja sellainen ohjasi esim. tätä robottia, samoin siitä oli rakennettu DukeTab tablettitietokone. Aikanaan olin jo innostunut SunSpot laitteista ja ne olivat aika alkeellista ja suhteessa kallista teknologiaa tähän verrattuna. Hyllystä löytyy kuitenkin SunSpot 😉

Robotti pelailee shakkia

Ja jeei Vaadin-kavereille! Piipahdin heidänkin standillaan ja edelleen tuo iloa ja ylpeyttä nähdä suomalaisilla firmoilla standeja tämän kaliiberin kehittäjätapahtumassa toisella puolen maapalloa.

Tuossa linkki artikkeliin jossa pohdittiin Java-robotin hintaa ja hyötyjä:

https://weblogs.java.net/blog/editor/archive/2013/09/23/javaone-2013-impressions-1-so-who-needs-chess-playing-robot-anyway

Tässä pari mehukasta tuotelinkkiä muutenkin näyttelyjen puolelta:

https://vaadin.com/

http://www.jfrog.com/ (Artifactory ja Bintray, Mavenin käyttäjille)

https://saucelabs.com/ (Testaus pilvipalveluna, tästä bloggasin aiemmin)

http://www.cloudfoundry.com/ (Pilvipalvelualusta)

http://newrelic.com (Oma suosikkini ja käytössäkin, sovelluksen reaaliaikaista suorituskyky ja terveystilamonitorointia, monitorointi ulkoistettuna pilvipalveluna, mahtavan visuaalinen! Nyt näemmä myös mobiilisoftalle…)

http://www.jinfonet.com/ (Joku kysyi joskus raportointisoftista. Tää on nätti 😉

Koodausta testausta ja emulointia pilvessä – Codenvy ja ManyMo

Tänään tuli JavaOne seminaarissa pohdiskeltua pilvipohjaisia kehitysympäristöjä. Idea on kuten pilvessä yleensäkin: Ei tarvitse itse investoida infrastruktuuriin vaan vuokraa sen palveluna. Ideasta tulee houkutteleva kun on aikansa taistellut työasemien vaihtelevien kehitysympäristö-asennusten kanssa. Idea muuttuu vieläkin houkuttelevammaksi kun tajuaa, että koodauksen ohella hommaan liittyy myös testaus-ympäristöjen pystytys ja huolto, samoin Continuous Integration-tyyppiset automatisoinnit, lähdekoodin hallintaratkaisut, jne. Miksi ostaa/ladata ja viritellä kaikki elementit, jos voi vuokrata valmiina ja monistaa tarpeen mukaan?

Codenvy IDE pilvessä

Muutama negatiivinen huomio tulee mieleen. Voi olla se kaunis päivä kun pilvi on maissa, ja mikään ei toimi. Yritin aamulla koodata pienen hetken Codenvy-IDE:llä uusia oppimiani jippoja. Sisäänkirjautuessa kävi näin:

Kuva

Twiittasin asiasta huvittuneena, ja tilanne korjautui pikapikaa, selityksen kera. Valmistautuessa JavaOneen viime hetken päivitykset olivat hetkeksi vieneet systeemin alas ja juuri niillä hetkillä osuin itse linjoille. Kuitenkin.. kyseessä on riskin ulkoistaminen. Siitä seuraa uudet kysymykset: toimiiko verkkoinfra? Toimiiko palvelu itse?

Toinen pulma mitä tulee mieleen on palvelun tuki teknologioille mitä haluaa käytellä. Jos haluaa testata Java 8 early access versiota on parasta varautua vielä pystyttämään ympäristö itse old school-tapaan.

Codenvy projektityyppejä

Kuitenkin, ajatus IDE ympäristön vuokrauksesta pilvestä on kutkuttava, on siinä hyvääkin..

– Mainitsin jo mahdollisuuden vuokrata kapasiteettia tarpeen mukaan, ylös tai alaspäin skaalaten. Sopii kahdelle kehittäjälle, sopii kahdellesadalle.

– Koska käännökset ja testit ja emulaattorit ajetaan pilvessä, työasemalta ei vaadita juurikaan resursseja. Käyttö tapahtuu esim. Codenvyssä selaimen kautta. Tämä taas mahdolistaa oman lempipuuhani: Koodauksen esim. tabletin kautta (Ylempi kuvaruutukaappaus on Nexus 7 ruudulta). Varustukset muuttuvat reippaasti keveämmäksi. Voisin koodata jopa kännykälläni, siihenhän voi tuitata esim. bluetooth näppiksen ja hdmi:llä vain kiinni isompaan näyttöön tai videotykkiin. Tai google glasses heijastamaan suoraan silmämunaan. (Seminaarissa on tullut bongattua useita Google Glasses käyttäjiä joiden katse suuntautuu taivaisiin)

– Esim. Codenvyssä potkaistaan testaukseen käyntiin uusi virtualisoitu web-palvelin, eli kun sanot palvelinsovellukselle run, se käynnistyy ja antaa tilapäisen linkin tilapäiseen testipalvelimeen. Itselleni uusi jippo oli mobiililaitteiden emulointi toisen palvelun kautta: Tein tunnukset ManyMo palveluun ja sain sieltä Security Tokenin jonka asensin Codenvyyn- näin voin tehdä Android projekteja, koodata niitä Nexus 7:llani Codenvyssä, ja kun on aika testata, potkaista emulaattorin myös pilvipalveluna käyntiin, ja jatkaa testailua selaimessa. Pretty neat! (Tosin Android softaa ei kannata liikaa emulaattorissa testata, kunnon rauta on aina parempi idea – mutta sopii tuo esim. käyttöliittymän hahmotteluun). Paras hyöty on kyky testata softaa nopeasti lukuisilla eri emulaattoreilla eri kokoisilla ruuduilla ja Android versioilla.

ManyMo emulaattori pilvessä

ManyMo emulaatio käynnissä

How many mo’ ? 😉

Manymo emulaation vaihtoehtoja

Utopistista? Suomessakin tämä on jo käytössä useammassakin yrityksessä.  Katsoessa tuotteita läpi löytyi myös mahdollisuus vuokrata testiympäristö pilven reunalta. Siellä pystyi ajelemaan Selenium testejä nipuittain taas kerran investoimatta infraan itse. Päivittelen tähän tuotteen nimen jahka ehdin muistiinpanojani käymään läpi, ollut aika hektistä kun luentoja on aamusta ilmaan ja tauot vähissä.

Tällaisia mietintöjä tänään. Lisää tulossa tämän päivän aiheista jahka ehdin!

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