JavaOne 2016 häämöttää

Viikko vielä aikaa JavaOne seminaariin – viikon päästä paikallista aikaa sunnuntaina olen paikan päällä San Franciscossa, pää pyörällä jetlagista ja sessioista, absorboimassa kaiken tiedon ja vaikutelmat mitä saatavilla on. Pitäisi olla mielenkiintoinen viikko tulossa.

Yli neljästäsadasta sessiosta on jotakuinkin mahdotonta valita edes suurin osa mikä kiinnostaa. Itse priorisoin Java 9 asioita, Docker ja Microservices asioita, ja sitten hiukan Java EE 8 puolta myös. Voisin löydä vetoa että sitä valaistaan muutenkin keynoteissa. Ohjelman ulkopuolella on myös muutama kiinnostava yhteisötapaaminen ja keskustelu luvassa, ja tietenkin yritän bongata mahdollisimman paljon suomalaisia Javastajia.

 

 

Nyt olisi tarkoitus bloggailla paikan päältä päivittäin jotain pientä, vaikutelmia ja highlighteja. Blogaus tapahtuu tällä kertaa englanniksi, Solitan dev-blogin puolella, eli sitä kannattaa pitää silmällä. Sitä kannattaa muutenkin pitää toki silmällä – raudankovaa settiä tulossa usealta muultakin kirjoittajalta taas lähiaikoina:

http://dev.solita.fi/

 

Mainokset

Java One 2015 käynnissä – tynnyritiukkaa Javaa 20 vuoden ajalta

Jokavuotinen Java-kehittäjien ykköstapahtuma pärähti juuri käyntiin San Franciscon suunnilla. Tänä vuonna en ole itse paikan päällä mukana, mutta seuraan mielenkiinnolla uutisia. Ennalta voi arvata jo standardipuolella pääfokuksena olevan tuleva Java 9, Java EE 8, sekä Jigsaw. Mutta mielenkiintoisinta on se, mitä ei voi ennalta arvata. Kyseessä on kuitenkin vuoden ykkösseminaari kaikille maailman Java-kehittäjille – ja heitähän riittää. Hyvä huomata että seuraavat mietinnät ovat ihan puhtaasti vaikutelmia omasta vinkkelistä ja pöhinästä mitä seminaarin ympärillä on tänne asti aistittavissa.

Java täyttää 20 vuotta – ja tämä JavaOne on yhdeksästoista mitä on järjestetty sitten vuoden 1995 kun tämä uusi tuntematon ohjelmointikieli tunki markkinoille ja Appletit olivat se killer app. Viskimitalla tämä 20-vuotias laajalle levinnyt ja maailmaa muuttanut ohjelmointikieli on nyt ’cask strength’ 😉

Hauskaa on se, miten Javan avoimuus puree tässä vähän itseään jalkaan. Open source projekteissa on vaikeata jemmata tai piilotella uusia piirteitä ja julkistuksia – joten niistä puhutaan jo ennen tapahtumaa. Siinä mielessä Java 9 /Jigsaw tavarat ovat aika ilmeisiä ja vähän hype-inflaatiotakin kokeneita.

Kokemuksesta tiedän, että painopistettä on myös teknologioilla jotka itsestä tuntuvat jo muinaisilta – kuten Java 8 ja Java EE 7. Niitä on tullut itse hyödynnettyä tuottavassa softatehtailussa jo vuosien ajan – kun taas monet muut tekevät niihin vasta siirtymää. Isojen valmistajien sovelluspalvelimissa eritoten ei ole aina mahdollistakaan saada tuoreinta versiota, saati sitten päivitellä sitä. Itse taas kun pyörin Spring Boot+Glassfish+JBOSS ympyröissä enimmäkseen, voi nautiskella aika aikaisinkin uusien versioiden eduista. Mutta tuolla seminaarissa siis monessa paikkaa vielä käsitellään vasta siirtymää näihin, mikä on hyvä. Kaikki ajallaan, ja aihe on kiinnostava, monelle myös uusi.

Tuolta löytyy ihan mielenkiintoista dzone tutkimustietoa mm. Java EE 7 käyttöönotoista, samoin kuin esim. Spring Frameworkin osalta: https://blogs.oracle.com/theaquarium/entry/developers_affirm_strong_support_for

Eipä silti, en itsekään ole tuotantoympäristöön tuikkailemassa Java 9:ää. Mutta omaan tyyliin on aina kuulunut perehtyä tulevaan mahdollisimman ajoissa. Yksi Spring Boot alustan kiva piire on, että sinne voi ottaa helpommin yksittäisten rajapintojen ja kirjastojen uusimpia versioita, kunhan vain pystyy elämään potentiaalisten konfliktitilanteiden kanssa. 🙂

Seminaarissa on aina kosolti piiloteemoja, eli jotain yksityiskohtia siitä mitä Javalla tehdään. Näyttää siltä että micro/nano/picoservicet ovat yksi päivän kuumia aiheita. Eikä ihme. Lupaavaa tavaraa, joka monella taholla on vielä lastenkengissään, ja vielä useammassa paikkaa täysin mahdoton ajatus. Adam Bien on aina ollut ajan hermolla, ja piti täälläkin esityksen ”Building Nanoservices with Java EE and Java 8” joka veti jo ennakkoon salin täyteen.

Oracle julkaisi oman Java SE pilvipalvelunsa, joka on myös microservice-yhteensopiva: https://cloud.oracle.com/javase. Siellä voi ajella esim. Tomcat tai Spring Boot sovelluksia modernin kaavan mukaan – ilman raskaita full Java EE stack-sovelluspalvelimia (tai no voihan sellaisenkin varmaan tuonne rakentaa jos ehdottomasti haluaa 😉

Kannattaa jatkossakin pitää silmällä Project Valhallaa – hautomoa radikaalimmille Java kielen/virtuaalikoneen tason muutoksille. Se ei ole varsinaisesti mikään uusi juttu mutta muodostanee pohjan Java 9, 10 ja 11 versioille: http://openjdk.java.net/projects/valhalla/. Hyvä kuitenkin muistaa että hautomossa on ideoita joista osa kypsyy, mutta osa putoaa kylmästi pois.

IoT on yksi piiloteemoja, mikä ei ole suuri yllätys. Javan juurethan ovat syvällä tässä: Network IS the computer. Varmastikin yksi Java 9 modulaarisuuden vaikuttimia on juuri mikrolaitteiden älykkyys, kyky ajaa Javaa muuallakin kuin työasemissa, palvelimissa tai vaikka puhelimissa.

Mutta siinä omia ensivaikutelmia täältä etäältä mitattuna. Tuolta voi kurkata avaus-keynotet, ja show on vasta käynnistymässä…

https://www.oracle.com/javaone/on-demand/index.html#javaonekeynotes

JavaOne 2014 käynnissä

Jep, JavaOne 2014 on taas käynnissä San Franciscossa. En ole tänä vuonna itse paikan päällä, mutta aika on merkattuna kalenteriin ja seuraan mielenkiinnolla etänä.

Missä mennään tällä hetkellä on Java 8 SE käyttöönotto Lambdoineen kaikkineen, ja ME 8 on myös julkaistu, ja EE 8 työn alla seuraavaksi. Olen blogaillut aiemmin jo Javan seuraavista askelista, Java SE 9 tulee ehkä viimein näyttämään mitä Project Jigsaw – Javan modulaarisuusjärjestelmä tarkoittaa. Se ei ole lopulta erityisen seksikäs aihe, mutta se on tärkeä. Javasta on vuosien saatossa tullut aikamoinen bloat, turvoke 😉 Ajatus modulaarisemmasta Javasta on hyvä skaalatessa pienempään päin, ja Mavenin suosio näyttää että moduulien avulla skaalaus ylöspäin on myös tärkeää. Jos viimein saadaan Javaan tukea myös moduulien versioiden huomioimiseen ihan ydintasolla, paketista tulee aika kova. Brian Goetz valitettavasti komennettiin alas lavalta kesken Java 10 mallailun 😉

Jigsaw projektissa on hyvä huomata kaksi vaihetta. Vaihe 1 on purkaa Javan hurja ristiinviittaus-spaghetti pakettien välillä ja saada Javan parikymmentämegaisesta ytimestä aidosti modulaarisempi. Tätähän aloitettiin jo joskus Java 6u10 aikoihin nimellä kernel. Toinen askel on sitten alkaa käyttämään tätä moduulijärjestelmää omien ohjelmistojen kehitykseen yhtälailla, Mavenin tapaan. Tarkoituksena ei näillä näkymin ole kuitenkaan korvata Maveniä repository-puolella, lähinnä moduulien riippuvuuksien julistuksessa. Riippuvuudethan sitten voivat olla paikallisia tai verkon yli noudettavia.

Vaikka on mukava tarkkailla mitä tulevaisuus tuo mukanaan, Java 9 on vielä aika kaukaista. Tämä vuosi 2014 on edelleen Java version 8 ramp-up aikaa: Lambdoissa, rajapintojen oletusmetodeissa, ja kokoelmakirjastojen uusissa stream-piirteissä on sulateltavaa runsaasti ja harva niitä vielä arjessa käyttää. Sertifiointi Java 8:lle on tätä kirjoittaessa vasta beta-tasossa, ja sekin mielenkiintoisella tavalla uusittu.

Tuolla tech keynote joka on klassisesti ollut kiinnostava avaus koko tapahtumalle:

http://medianetwork.oracle.com/video/player/3811045975001

Goetz saa kyytiä kohdassa 34:27 alkaen 😉

Liikettä, Lambdaa ja JavaFX:ää

Ei kai sitä oikea propellihattu olisi jos ei joskus kokeilisi epävakailla beta-versioilla koodata. Niinpä löysin itseni tilanteesta johon kuului:

-LeapMotion kontrolleri joka mahdollistaa ohjauksen ilmaan tehtävillä eleillä kosketuksen sijasta. Jep, kuten Minority Reportissa 😉

– Java 8 early access versio

– Netbeans 7.4

– JavaFX 8 Developer Preview

Miksi juuri tämä setti? No mehukkaat 3D rajapinnat tulevat vasta JavaFX 8 versiossa joka ei ole vielä valmis. Tällä hetkellä paras alusta kokeilla sitä on Java 8. Jossa sattuu tulemaan myös maukkaat Lambda Expressionit mukana. Netbeans 7.4 tukee jo Java 8 versiota. Kuten myös erinomaisesti HTML5+JavaScript koodausta.

LeapMotion kontrolleri

Joka tapauksessa, LeapMotion kytkeminen tapahtuu USB väylän kautta, ja Java alkaa juttelemaan sen kanssa kun sovellukseen liitetään leapmotion.jar kirjasto, sekä käyttöjärjestelmäkohtaisia dll:iä pari. Tämän jälkeen rajapinta antaa mukavasti tietoa siitä mitä mokkula havainnoi n. metrin pallossa ympärillään. Sen verran tarkkaa on että esim. sormien lukumäärä voidaan lukea, erilaiset eleet ja tietysti käsien ja sormien koordinaatit kolmiulotteisessa avaruudessa.

JavaFX 8 käyttöönotto vaati hieman enemmän vaivaa, mutta selvimmin homma toimi tosiaan asentamalla Java 8 early access, jossa nuo JavaFX 8 kirjastot tulevat suoraan mukana, kytkemällä se Netbeansiin, ja valitsemalla Maven arkkityypiksi zenjava javafx maven plugineineen kaikkineen. Samaan Maven pom:iin tietysti riippuvuudet LeapMotion Java kirjastoihin (piti asentaa paikalliseen repositoryyn koska maven centralista ei vielä löydy). Ja lopulta vielä Netbeans run-parametreja muokaten sen verran että Leapmotion .dll tiedostot tulevat mukaan.

LeapFX8a

Mutta nyt toimii. Ajattelin kirjoitella yksittäisen prototyypin ensin selvittääkseni mihin laite pystyy ja mitä tietoa sieltä irtoaa. Pistin kolmiulotteiseen avaruuteen Tieturi-logolla varustetun kuulan. Kytkin sen LeapMotion kontrollerin koordinaatistoon käyttäen JavaFX Property Binding metodia. Tässä yhteydessä Java 8 Lambdat olivat maukkaita: JavaFX:ssähän ei mm. saa koskea UI:hin edes property bindingin kautta ilman että operaatio ajetaan osana UI säiettä. Muuten tulee poikkeus. Tässä esimerkkisnippet Lambdoista ja Leapmotion rajapinnasta:

if (!frame.hands().isEmpty()) {
    Hand hand = frame.hands().get(0);
    Vector vPos = hand.palmPosition();
    Platform.runLater(() -> {
        positionX.set(v.getX());
        positionY.set(v.getY());
        positionZ.set(v.getZ());
        rotateValue.set(hand.direction().yaw());
    });
}


Yep, ja positionX, Y ja Z ovat siis JavaFX Bound Property arvoja, joten kun muutan niitä, kuulan ko koordinaatit muuttuvat automaattisesti sen mukaan. Jouduin harrastamaan pientä aivojen rassausta koska Java koordinaatisto alkaa vasemmasta ylänurkasta xy-suunnassa kun taas leapmotion normaalisti vasemmasta alanurkasta. Miten hoidetaan tämä bound propertyillä? Näin:

sphere.translateYProperty().bind(positionY.negate().add(SCREEN_SIZE_Y));

Ja tietysti sama z-koordinaatille, x meni onneksi ihan suoraan. Nyt kuula liikkuu kolmiulotteisessa avaruudessa kun käteni, loittonee, tulee lähemmäs, menee ylös, alas, vasemmalle, oikealle, viistoon, etc. Tottakai pakkaan voi lisätä muitakin asioita kuten ranteen kiertoa, sormien lukumäärää, nopeutta akselilla, jne. Mitä iloa on sitten animoida tekstuurimäpättyä kuulaa 3d-avaruudessa?

Itselleni suurtakin, hauska projekti vaihteeksi kaiken yritys-transaktio-ejb-vakavuuden välillä. Mutta seuraava steppi on kytkeä tuota käyttöön oikeiden sovellusten käyttöiittymiin. Ja kun lempiaiheenani on viime aikoina ollut Business Intelligence, reaaliaikametriikka raportoinnin sijaan, Big Data ja Fast Data, ja oikea ja luotettava tieto liiketoiminnan käyttöön, arvaahan sen mitä siitä syntyy… 😉

Tämä on taas yksi niitä asioita joissa video kertoo enemmän kuin kuva.


KÄYTTÄJÄT ANSAITSEVAT PAREMPIA JA INTUITIIVISEMPIA KÄYTTÖLIITTYMIÄ

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