Kotlin ja JavaFX – ihanaa!

Aloin kesäloman ratoksi perehtymään hiukan Kotlin ohjelmointikieleen – kirjailin siitä jo ensivaikutelmia aiempaan blogiini. Koska en näillä näkymin pääse hetikohta käyttelemään Kotlinia työprojekteissa, päätin harrastella sillä jotain muuta ominpäin.

JavaFX on entuudestaan suuri rakkaus – harmillisen vähän käytettyä tekniikkaa sekin, mutta toimivaa. Ajattelin yhdistellä näitä ja katsoa mitä siitä syntyy, voi olla että peli vielä jossain vaiheessa. Peliohjelmointi ei ole oma vahva lajini – mutta huonommankin pelin koodailusta tulee opittua paljon. 😉

No niin, joka tapauksessa, kaikki alkaa hello worldistä. Eli miltä näyttää Kotlinilla tehty pääohjelma joka käynnistää JavaFX ikkunan?

import javafx.application.Application
import javafx.scene.Scene
import javafx.scene.layout.Pane
import javafx.stage.Stage

class Test : Application() {

  override fun start(stage: Stage) {
    var pane = Pane()
    var scene = Scene(pane, 200.0, 200.0)
    stage.scene = scene
    stage.show()
  }

  companion object {
    @JvmStatic
    fun main(args: Array<String>) {
      launch(Test::class.java)
    }
  }

}

Mitä juuri tapahtui? 😉 Kotlinissa on tosiaan vähän yksinkertaistettu syntaksi Javaan verrattuna. Kuten kuvasta näkyy, muutama modifieri puuttuu, tyyppejä ei tarvitse toistaa, vaan ne päätellään fiksusti tarvittaessa. Funktiot määritetään fun avainsanalla. Ehkä kiintoisin osa tässä on Scalasta tuttu Companion Object. Static avainsanaa kun ei Kotlinissa ole, Companion Object on luokan ’automaattinen instanssi’. Tämän lisäksi tietysti ilmeistä, että Kotlinista käsin voi käyttää kaikkia Java kirjastoja, mukaanlukien Java 8 sisältämä JavaFX.

Miten tuon sitten voi kääntää, paketoida, ajaa? Mavenin voi opettaa prosessoimaan Kotlinia. Oma pom.xml sisältää seuraavia osia:

<dependencies>
  <dependency>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-stdlib</artifactId>
    <version>${kotlin.version}</version>
  </dependency>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>${junit.version}</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-test-junit</artifactId>
    <version>${kotlin.version}</version>
    <scope>test</scope>
  </dependency>
</dependencies>

Ylempänä on tietysti määritetty property-muuttujat kotlin.version ja junit.version (1.0.3 ja 4.12 tällä hetkellä). Kotlin käännöksiä varten tarvitaan tietysti kotlin-stdlib riippuvuus. Ilman etukäteen kirjoitettuja yksikkötestejä ei voi ihminen elää, joten siksi junit riippuvuus. Ja lopuksi vielä kotlin-test-junit riippuvuus tuomaan vähän lisämukavuutta liitokseen. Seuraavaksi veivataan build prosessi käsittelemään kotlin-koodit src/main/kotlin, ja src/test/kotlin kansioiden alta:

<build>
  <sourceDirectory>${project.basedir}/src/main/kotlin</sourceDirectory>
  <testSourceDirectory>${project.basedir}/src/test/kotlin</testSourceDirectory>

  <plugins>
    <plugin>
    <artifactId>kotlin-maven-plugin</artifactId>
    <groupId>org.jetbrains.kotlin</groupId>
    <version>${kotlin.version}</version>
    <configuration/>
      <executions>
        <execution>
          <id>compile</id>
          <phase>compile</phase>
          <goals>
            <goal>compile</goal>
          </goals>
       </execution>
       <execution>
         <id>test-compile</id>
         <phase>test-compile</phase>
         <goals>
           <goal>test-compile</goal>
         </goals>
       </execution>
     </executions>
    </plugin>
  </plugins>
</build>

Jep, ja näin Maven kääntää Kotlin-koodit pluginin avulla bytecodeksi, tavanomaiseen paikkaan, normaaleissa Maven vaiheissa. Lopuksi säädetään vähän paketointia.

<plugin>
  <artifactId>maven-assembly-plugin</artifactId>
  <configuration>
    <archive>
      <manifest>
        <mainClass>game.Pong</mainClass>
      </manifest>
    </archive>
    <descriptorRefs>
      <descriptorRef>jar-with-dependencies</descriptorRef>
    </descriptorRefs>
  </configuration>
  <executions>
    <execution>
      <id>make-assembly</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
    </execution>
  </executions>
</plugin>

Eli, tämä Maven Assembly plugin tekee lopputuotoksesta mega-jar paketin, jossa on kaikki tarvittava. Oman maun mukaan voi tehdä fiksumman käyttäen manifest riippuvuuksia, tai Java 9 moduuleita, mutta tässä kohtaa tämä on ihan bueno, ja helpottaa levitystä ja testausta.

Vein koodia vähän pidemmällekin, otin käyttöön game loopin, animaatiota, piirtoa, mutta puidaa niitä toisella kertaa. Pistin koodit Git repositoryyn, josta löytyy välivaiheita. Nykyinen koodi ei tee vielä paljoa, mutta on hauska tutkimuspöytä sille mitä JavaFX on nykymuodossaan, ja miten Kotlin helpottaa koodin kirjoittelua.

Linkki Gittiin: https://github.com/crystoll/kotlinfx

 

 

Mainokset

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

Java vs HTML 5 vs Flash

Olen pannut huvittuneisuudella merkille miten maailmalla kirjoitetaan artikkeleita Javan tuhosta. Alustalla on tietoturvahaavoittuvuuksia, se suositellaan siis poistettavan. Näin ollen Javan aika on ohi ja se vuotaa rahaa Oraclelta. Tässä lauseessahan on niin paljon väärin ettei tiedä mistä aloittaa. Javan pääkäyttöhän ei ole työasemissa vaan servereissä, jonne mm. IBM, Oracle ja RedHat ovat tehneet ja tulevat tekemään rahallisia panostuksia, ja joissa Java-pohjaiset web serverit ovat tyypillisimpiä alustoja web-sovelluksille, etenkin yrityspuolella. Ja jossa noilla mainituilla haavottuvuuksilla ei ole (juuri) mitään merkitystä. Java siis elää tai kuolee sen mukaan miten hyvin se suoriutuu palvelinohjelmoinnissa vastaan muita teknologioita, ja miten hyvin sitä puolta tuetaan ja kehitetään. Jos tänä päivänä java se tapettaisiin kokonaan, merkitys Javan kannalta ei olisi suuren suuri. Javan merkitys on servereissä, ei työasemissa. Tosin työasemissakin sekä mobiililaitteissa on Javaa asenneltuna miljardeja yksi

Väite: Pitäisikö sitten Java työasemista poistaa? Sehän on täynnä tietoturva-aukkoja ja joka kuukausi eletään pelossa löytyykö uusi. Lisäksi, kuka enää tekee rich client ohjelmointia, kun kaiken voi tehdä HTML5:lla? Adobekin luopuu flashistä. Java on ihan tarpeeton tekele?

Vai onko? Katsotaanpa tarkemmin näitä argumentteja:

Voiko kaiken todella tehdä HTML5:lla? Kenties voi. Perinteisesti rikasta käyttöliittymää lähdettiin tekemään Javalla tai Flashillä siksi että perinteinen HTML pohjainen web-sovellus on staattinen ja jäykkä, se reagoi vain napinpainallukseen ja pystyy ainoastaan näyttämään web sivuja ja ottamaan syötettä, ei esim. minkäänlaista pääsyä työaseman/mobiililaitteen rautaan kuten älykortinlukijoihin, (web) kameraan, paikkatietopalveluihin, yhteystietoihin, kalenteriin, värinärajapintaan, kiihtyvyysanturiin, kallistusanturiin, verkkokorttiin, äänikorttiin, piirtämiseen, videon soittoon, matalan tason tehokkaisiin grafiikkarajapintoihin, jne. JavaScript laajensi palettia antamalla mm. rikkautta tapahtumankäsittelyyn. AJAX lisäsi vielä lisää rikkautta kun dataa voi hakea dynaamisesti verkon yli ja sillä päivittää sivua ilman että täytyy edes navigoida. Ja HTML 5 lisää vielä lisää kuten Canvas piirtoalusta, ääni ja videorajapintoja, paikallinen tietovarasto. Sillä voi soitella videota ja ääntä, ja tehdä kaunista käyttöliittymää.

Mitä sitten uupuu? No pari asiaa. HTML 5 ei pärjää suorituskyvyssä lähempänä käyttöjärjestelmää ajetulle koodille, eli kun halutaan ottaa koneesta kaikki irti, se jää jälkeen. HTML5 pääsee vain niihin resursseihin käsiksi jotka on siihen avattu, eli aina kun joku uusi vimpain keksitään työasemiin tai mobiililaitteisiin, HTML5 sovellukset ovat jälkijunassa sen soveltamisessa. Samoin tietysti Java, mutta vähemmän kuin HTML. Esim. JavaFX teknologian suorituskyky on täysin eri planeetalta ja visuaalista ilmaisukykyä riittää eri sarjassa.

Pahimmat niitit tulevat kuitenkin tässä: HTML5 ei ole vielä edes valmis, se on tällä hetkellä vaporwarea kunnes toisin todistetaan. Sen spesifikaatiokaan ei ole valmis, se _ehkä_ tulee 2014. Selainvalmistajat _ehkä_ toteuttavat sen. Siihen mennessä _ehkä_ maailma ei ole muuttunut yhtään. Muistan myös 90-luvun suuret selainsodat, kun Dynamic HTML ja JavaScript olivat uusi ja kuuma juttu, ja valmistajat kilpailivat siitä kuka tekee hienoimmat toteutukset ja tulkitsee standardeja nerokkaimmin ja mahdollisimman epästandardein tavoin. 2014 web sivustot tulevat räjähtämään käsiin ellei ihmiskunta ja eritoten selainvalmistajat ja kehittäjät ole jotenkin viisastuneet siitä. Todennäköisesti joudutaan taas tekemään eri versiot sivustoista eri selainversioille, tätä on jo nyt näkyvissä vaikka speksi ei ole edes valmis.

Entäpä sitten tietoturvaongelmat? Javassahan on niitä, haavoittuvuuksia, jotka pitää paikata tai niitä hyödynnetään. Samoin on Windowsissa. Linuxissa. JavaScriptissä. Ja niin myös Ajaxissa ja eritoten HTML 5:ssa. Jos haluaa alustan jossa ei ole tietoturvaongelmia niin se onnistuu kunhan alustassa ei voi tehdä mitään. Mitä enemmän alustalla voi tehdä sitä rajummin siellä on potentiaalia tietoturva-aukoille, ja aukotonta järjestelmää ei olekaan. Miten nopeasti tulevat HTML5 aukot paikataan ja kenen toimesta?

No, siinä pohdittavaa. HTML5 on mielestäni mielettömän kaunis ja lupaava teknologia, mutta se ei ole mullistava eikä sovelluskehityksen pelastaja eikä missään nimessä ongelmaton. Siinä tulee olemaan tietoturvaongelmia ja vakavia sellaisia kun sen käyttö lisääntyy, samalla kun sen ominaisuudet muuttuvat paremmiksi. Suuren vallan mukana tulee suuri vastuu.

Monet artikkelit ja mielipiteet julistavat sokeasti HTML5:den uutta tulemista ja kaikkien rikkaiden käyttöliittymäteknologioiden kuten Flash, Applet, JavaFX kuolemaa, ja tämä on ehkä yksipuolinen näkemys. En halua myöskään väittää että JavaFX jyräisi HTML5:sen, tuskinpa vain. Hyvä jos sille tilaa riittää markkinoilla. Mutta HTML5 ei ole Suuri Pelastaja joka mullistaa kaiken. Se on yksi teknologia muiden joukossa, ja omaa samoja ongelmia kuin muutkin. Suorituskyky, pääsy uusiin rautaratkaisuihin ja rajapintoihin client päässä, todellinen siirrettävyys eri alustoilla kuten eri selaimet, käyttöjärjestelmät, ja eri valmistajien mobiililaitteet, sekä tietoturva, ovat kaikki haasteita, jotka tulee ratkaista. Yhtäkaikki ei ole huono juttu että 2015 vuonna työkalupakissa on useita hyviä uusia mahdollisuuksia.

Lähdelinkkejä ja lisäluettavaa:

Facebook liian aikaisessa HTML5:sen kanssa:
http://css.dzone.com/articles/facebook%E2%80%99s-html5-mistake

HTML5 suorituskykyä voidaan kiihdyttää:
http://www.html5rocks.com/en/mobile/nativedebate/

Green is good 😉
http://en.wikipedia.org/wiki/Comparison_of_layout_engines_(HTML5)

Java vs HTML5 Canvas:
http://www.zynaps.com/site/experiments/mandelbrot.html

Do you want to install Java?

Hahaha, tämä ei ole mikään varsinainen artikkeli mutta testailin JavaFX asennuksia kurssia varten ja koneeseen piti asentaa uusin JRE, asennusohjelma poksautti hauskan dialogin näkyviin…

This version of Java is not distributed by Sun (d’oh!)

Only continue if you want to trust the publisher

Hmmmmmmmmmmmmmmm….. 😉

Jep, ja vuoden ensimmäinen posti, hauskaa alkavaa vuotta vain kaikille, saa nähdä mitä kaikkea tuo tullessaan!

JavaFX kurssi on valmis ja ensi toteutus ensi viikolla. Hauskoja harjoituksia tuli tehtyä! 😉

 

JavaFX 2.0

No niin, blogiin ei ole tullut kirjoituksia hetkeen, piti sairastaa kausiflunssa manalasta, ja työkiireet ovat vieneet muut ajat. Mitään erityistä kirjoittamisen arvoista ei ole myöskään tutkaan ilmestynyt hetkeen. Ajattelin kirjailla kuitenkin taas vähän ajatuksiani ettei täysin unohdu tämä blogi.

Yksi työkiireistä on JavaFX 2.0 ohjelmointikurssin teko, se alkaakin olla valmis ja toteutuu jo ensi vuoden tammikuusta alkaen varmasti – ensimmäiset ovat jo ilmoittautuneet mukaan. JavaFX ei varmaan ole kaikille – serveripään web sovelluksia tekeville mielenkiinto on korkeintaan mietoa, mutta kaikille joita rikas käyttöliittymäelämys työasemassa kiinnostaa, ja kaikille joille Swing on tuttu, tässä voi olla jotain uutta.

http://www.tieturi.fi/haku.html?q=javafx

 

Rikas käyttöliittymä on aina oma juttunsa. Se mahdollistaa asioita jotka webissä ovat mahdottomia tai ainakin hankalia. Se antaa suorituskykymielessä kyvyn käyttää työaseman resursseja paremmin hyödyksi. Mutta se vaatii sen virtuaalikone-asennuksen myös, plus lisäkirjastot. Ja tämäpä onkin se kynnyskysymys sille miten JavaFX 2 tulee tai ei tule leviämään. Asennus tulee olla helppo ja vaivaton ja suorastaan idioottivarma.

Olen tainnut kirjailla jo aiemmin Java 6 virityksistä jotka auttavat tässä. JavaScript deployment toolkit joka osaa tarkistaa onko sopiva Java ja asentaa sen tarvittaessa. Modulaarinen Java jossa voidaan asentaa ensin kernel ja sitten lisäosia – saadaan nopeasti jo jotain käyntiin. Java Quickstarter joka esilämmittää virtuaalikoneen jo koneen käynnistyessä. Java 7 ei lisännyt mitään yhtä dramaattista, toki Java 8 jigsaw tulee viemään modulaarisuutta pidemmälle ja toivon että sensijaan että ladataan 15megan JVM + JavaFX kirjastot, jigsawn myötä voi valita osat joita ladataan ja ehkä asennuspaketti saataisiin viiteen megaan tai alle. Hienosäätöähän tämä on mutta kun kyse on siitä, miten pitkään käyttäjä katsoo harmaata ruutua tai ’ladataan javaa’-tekstiä, pienetkin erot ratkaisevat.

Uskon että JavaFX 2.0 tulee olemaan menestys, koska se pohjautuu tällä kertaa Java kieleen ja sillä on vain annettavaa, mitään uutta kieltä tai tapaa ei tarvi opetella, vaan kyse on vain rajapinnoista. Uusia moduuleita tulee mukaan kuten charting, animaatiot, efektit, käytännössä ilmaiseksi. Se ei varmasti tule pyyhkäisemään tieltään web ohjelmointimalleja kuten JSF frameworkit tai Vaadin, mutta Suomessa on tehty Rich Client sovelluksia ennenkin ja tullaan tekemään – kaikki ei ole edelleenkään webissä, ja tulevaisuuden sovelluksissa tulee tyypillisesti olemaan jokatapauksessa kyse palvelinpään RESTful web serviceistä joita kutsutaan milloin mistäkin clientista.

Nyt kun vielä JavaFX pelaisi iPad:issä.. Tiedän että sitä demottiin iPadissä jo viime JavaOne seminaarissa, mutta ei se vielä oikeasti ole saatavilla. Ja miksi, ah miksi, se ei toimi jo Androidissa… No, retorinen kysymys, vastaus tähän lienee eräs oikeusjupakka jota vieläkin puidaan.. 😉 Mutta näiden suhteen on paljon odotettavaa, ja ellei JavaFX luikertele tableteihin ja kännyköihin, sen maailmanvalloitus tulee jäämään pahasti rajoittuneeksi.

JavaOne 2011 Loppuraportti (Koodaajan yhteenveto)

No niin, JavaOne 2011 San Franciscossa on ohi. Viikko tiivistä toimintaa on siis takana ja on aika katsoa mitä jäi käteen. Tässä avaukseksi musavideo jolla ensimmäisen tech keynoten ensimmäiset puheet avattiin: Java 4 Life 😉

http://www.youtube.com/watch?v=b-Cr0EWwaTk&feature=player_embedded

Miinusta tapahtumasta saa antaa hieman. Viime vuonna valiteltiin kovasti epäkohtia jotka pääosin liittyvät siihen että JavaOne on toisen luokan sidekick show verrattuna Open Worldiin – alkaen sen hajautuksesta eri hotelleihin. Näiden suhteen ei ole tapahtunut mitään muutosta, pikemmin huonompaan suuntaan menty. Samoin uskomatonta miten wifi yhteyttä ei saada vakaaksi, eikä langallisiakaan yhteyksiä ole tarjolla.

Hintaan minkä osallistuminen maksaa jokainen osallistuja voisi saada oman tukiaseman käyttöönsä 😉 Kun yrittää testata oppimiaan asioita ja kirjoittaa blogia oli pakko turvautua hotellihuoneen langalliseen yhteyteen aika ajoin, se on taas pois yhteisöllisyydestä ja verkostoitumisesta. Tästä myös pitkä miinus. Miinusta myös keynote osioiden pitkistä javaan liittymättömistä diamond partner puheenvuorolässytyksistä. Ne taitavat tosin olla seminaareissa pakollinen riesa, mutta ainakin allekirjoittaneen osalta seminaareissa itse pyrimme välttämään moisia. Onnistutaanko siinä aina, en tiedä. Ehkä tämän kaliiberin seminaareissa on vain pakko sietää jonkun verran poliittisesti jaettuja mainospuheita. Mutta onko ne pakko sijoittaa keynoten alkuun? Osallistujat näyttivät oppivan tämän aika nopeasti ja viimeisiin keynoteihin alkoi valumaan ihmisiä paikalle puoli tuntia tai tunnin myöhässä.

Ok, siinä ne huonot puolet. Hyviäkin löytyy onneksi, itse asian tiimoilta. Yleinen reaktio tapahtumaan blogeissa on ollut positiivinen, joku vertaili tätä jopa Woodstockiin. Julkistukset ovat olleet upeita, ajoin jopa odottamattomia, ja taas olisi Java alustan roadmappiä näkyvissä vuosiksi eteenpäin. Jo käytössä oleva Java 7, tulevat Java versiot 8 ja 9, enterprise Java 7 ja 8, ja tietysti paljon esillä ollut JavaFX ovat olleet esillä aiemminkin mutta nyt suunnitelmat ja käytäntö realisoituivat. Kiintoisaa oli myös katsoa mitkä sessiot vetivät väkeä. Pilvipalvelut, soa ja RESTful servicet eivät olleet suuri yllätys. Tänä vuonna näytti kuitenkin olevan poikkeuksellisen paljon suorituskyvyn tuunauksen ja rikkaseen käyttöliittymään liittyvää sisältöä. Rinnakkaisuus fork&join muodossa ja actor ja thread muodossa kiinnostivat myös. Osa huoneista oli täpösen täynnä ja mukaan ei mahtunutkaan.

Mitäpä sitten tulevaisuus tuo Java SE alustalle?

Kesällä julkaistu Java 7 versio hiipii hiljalleen ympäristöihin. Se tuo mukanaan ohjelmoijan kannalta varsin kivoja uudistuksia, jotka auttavat tekemään ratkaisut helpommin ja turvallisemmin. Tieturi teki niistä jo kesällä koulutuksen, Java 7 Uudet Piirteet – jota on jo asiakkaille koulutettukin. Jos vanhat merkit pitävät paikkansa, ensimmäiset opiskelijat ovat taloja jotka käyttävät paljon open sourcea ja ketteryyttä – ja suurempia ja vanhempia järjestelmiä omaavat talot siirtyvät sitten parin vuoden kuluessa toisena piikkinä. Sen verran hyvää on versiossa 7 että miksipä ei siihen siirtyisi heti tilaisuuden tullen. Kyseessä on kuitenkin evoluutio, ei revoluutio tässä versiossa. Kielen muutokset project coin muodossa ovat nimenomaan koodaajille mukavia ja työtä tehostavia, Fork&Join framework auttaa eräajoissa ja muussa prosessori-intensiivisessä rinnakkaistekemisessä.

Java versio 6 menee end-of-life tilaan 2012 loppuun mennessä. Jos ajaa Javaa vielä vanhemmilla alustoilla – hyi miten tuhmaa! 😉 No, rahallahan saa tukea vanhempiinkin alustoihin mutta ilman rahaa ei päivityksiä eikä varsinkaan turvapaikkauksia tipu.

Hiljalleen voi sitten suunnata tutkaimet jo kohti tulevaa Java 8 päivitystä – se julkaistaan nyt sitten 2013 kesällä, eikä 2012 kuten alunperin kaavailtiin. Syynä mm. mahdollisuus sertifioitua versioon ja stabilisoida vähän alustaa, mikä on mielestäni ihan hyvä. Versio 8 tulee nyt sitten olemaan se revolution. LambdaJ ja Jigsaw ovat jo yksinään riittävän kova juttu – ja tuohon päälle kun lisää vielä uudistetun Date&Time APIn ja uudistetun JavaScript moottorin, on luvassa kaikkea kivaa. Kivalla tarkoitan tietysti ohjelmoijille motivoivaa hauskaa uutta opiskeltavaa, projekteille vähemmän koodirivejä, enemmän mahdollisuuksia ratkoa ongelmia taas helposti ja luotettavasti. Ja tuo modulaarisuus on projekteille todella kova. Maveniä jo käyttäneet tietävät mitä tarkoitan, mutta eiköhän tässä Maven heviusereillekin ole jotain uutta ja arvokasta 😉

JavaFX on musta hevonen. 2007 SUN yli-hypetti sen ensimmäistä versiota joka oli jo aikanaan kiinnostava, mutta itseäkin arvelutti haluavatko java koodaajat tai muut opiskella uutta kieltä tähän tarkoitukseen. Onneksi nyt ei enää tarvitse. JavaFX 2.0 GA on julkaistu, heti saatavilla ja käytettävillä, ja Netbeansissä tuettuna. Sitä koodataan ihan perus Javalla, ei tarvitse oppia uusia kieliä, vain uudet rajapinnat. Ja se kytkeytyy toki sulavasti kaikkiin Java kirjastoihin kuten JAXB, JAX-RS, JPA,  ja tietysti Swing. Demot mitä näytettiin alkoivat olemaan tänä vuonna käytännönläheisempiä.. Mm. näyttäviä BI työkaluja. Satelliittien ohjaukseen käytettiin jo tuotannossa JavaFX:ää. Yksi wow efektin aikaansaanut demo oli se jossa JavaFX ajettiin IPad laitteessa iOS:n päällä. Ja tietysti julkistettiin myös että JavaFX menee open sourceksi ja tullaan jakelemaan osana Java SE alustaa. Myös siis iOS:lle ja Linuxille. Itse osallistuin hauskaan workshoppiin jossa tehtiin Oracle Coherence hajautetun Grid-cachen päälle hallintanäyttö (dashboard) JavaFX:llä – vanhan Swing pohjaisen tilalle. Ja oli muuten nopeata hommaa!

Mielenkiintoinen ilmoitus oli myös että Swing on nyt viimein tiensä päässä: Se ei tule saamaan enää uusia päivityksiä. Buh-bye Swing..

Java EE 7 alustaa analysoin jo aikalailla kolmospäivän blogissani, mutta tosiaan multi-tenancy tuki tarkoittaa kykyä ajaa koodiaan eri pilvissä, vuokrapilvessä tai omassa private cloudissa sen mukaan missä on milloinkin tarve. Saataisiin viimein siirrettävyyttä pilvipalveluihin joka vapauttaisi vendor lock-inistä jonkin verran ja tekisi pilveen investoinnin vähemmän riskaapeliksi – jos homma ei toimi pilvessä pystytetään sitten se oma privaattipilvi konehuoneeseen. Katsotaan meneekö se näin tulevaisuudessa – kiintoisaa nähdä syleilevätkö pilvipalveluiden tarjoajat standardia vai haluavatko pitää kiinni lock-inistä. Azuressa tuskin tulemme tukea näkemään 😉 Tuon äärimmäisen siirrettävyyden ohella tietysti EE 7:ssä on kosolti suoraan koodaajan elämään vaikuttavia elementtejä kuten uudet versiot mm. EJB, JSF, JPA, JAX-WS ja JAX-RS spesifikaatioista, ja kaikissa näistä oli tuloillaan hyvinkin mielenkiintoisia piirteitä.

Tuotteita tuli katseltua myös runsaasti – tuotteita löytyi mm. kehitysympäristön vuokraamiseen ja ajamiseen pilvessä (Cloudbees), Java sovellusten asentamiseen palvelimeen ilman buutteja (JRebel), ja sovellusten reaaliaikaiseen profilointiin ja monitorointiin virhetilojen varalta (New Relic). Suomessa on usein kaivattu ratkaisuja näihin – onpa meikäläistä tilattu joskus konsulttina jäljittämään virhettä järjestelmästä jossa kuvaus oli: Jollakin käyttäjällä joskus softa kaatuu. 🙂 Tarkemmilla seurantavälineillä pääsee paremmin ja ennen kaikkea nopeammin kiinni siihen mistä kiikastaa. Missä on muistivuoto, pullonkaula, tai nullpointerexception?

Kaiken kaikkiaan on erittäin positiivista että Java alustalla on roadmap – on suunnitelmia jopa versioon 12 asti, kun nykyisellään totutellaan vasta versioon 7. Yhteisön vire on myös positiivinen, ja energinen, ja se taas tapaa siirtymään innovaatioiksi ja ratkaisuiksi – jos haluaa saada jotain aikaan siihen pitää ensin uskoa. Enterprise puoli on menossa järkevään suuntaan ja seurailee myös uusimpia trendejä. Ja monessa sessiossa puhuttiin käytännön tuunauksista ja viilauksista sinänsä j0 kovin toimiviin nykyrajapintoihin nähden. Tästä ponnistetaan taas vahvasti käyntiin.

Huom! Kaikki keynotet ovat katseltavana julkisesti osoitteessa http://www.oracle.com/javaone/live/on-demand/index.html

Tässä vielä linkkivinkkinä erinomainen blogi JavaOne päivityksistä päivä päivältä ja esitys esitykseltä amerikaksi: http://marxsoftware.blogspot.com/