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

 

 

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/

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/

JavaOne 2011 San Francisco – 4/4

No niin, viimeistä päivää viedään. Aaamu pärähti käyntiin Community Keynotella jossa oli jo rennompi tunnelma. Oracle oli hauskasti myynyt jokaiselle kolmesta diamond partneristaan puolesta tunnista tuntiin keynote aikaa heti alusta. Kun Java ihmiset tämän huomasivat, alkoivat he tahallisesti myöhästymään keynoteseista, eli porukkaa valui sisään verkkaiseen tahtiin. Osasyy saattoi tänään olla myös eilisen appreciation event. Hassua kyllä moni alkoi jo tekemään lähtöä kotiin, vaikka tämä viimeisin päivä on aina omasta mielestä rento opiskelupäivä kun maratoni alkaa olla lopuillaan.

Keynoten jälkeen piipahdin kokeilemassa vielä toisen kerran JavaFX:ää labrassa. Täytyy sanoa että en ole vaikuttunut näistä hands on lab systeemien järjestelyistä. Puhujat mumisevat, ääni ei kuulu vaan peittyy hurinan alle, ohjeet ovat vanhoja, huonoja, ristiriitaisia, ja ympäristöissä asennusvirheitä ratkottavana. Ja ne jenkkinäppikset, joissa on aina napsuttimet väärissä paikoissa.. Hidastaa muutenkin koodausta. Sitten kun labrat ovat suurinpiirtein copy-paste harjoitustehtäviä, on kyseenalaista mitä jää käteen. No itselle ainakin ne labra pdf:t, näkee ainakin mitä niissä on yritetty tehdä, josko sitten rauhallisemmalla ajalla olisi aikaa itse koettaa.

Siltikin – aika vaikuttavia nuo JavaFX Charting-kontrollit, erilaiset barchart ja piechart kontrollit ja sensellaiset. Aika äkkiä niillä leipoo kaikenlaisia reaaliaika-metriikkanäkymiä pienellä vaivalla.

Sitten lisää sessioita. Java plug-inista oli mielenkiintoista tarinointia, sehän nousee jälleen JavaFX:n myötä kiinnostavammaksi kun appleteilla voi jopa tehdä jotain. Oli vinkkejä mm. suorituskyvystä, digitaalisista allekirjoituksista, debuggauksesta, ja tietoa tulevien versioiden uusista piirteistä. Osa parannuksista on lähes ilmaisia – sen kun asentaa JRE 7 tai 8 ja jo toimii paremmin.

JavaFX producer-consumer workflowsta oli myös asiaa, jälleen kerran yritetään saada aikaan malli jossa olisi erikseen designer ja developer, designer tekee kauniit näytöt ja developer koodaa niiden toiminnallisuuden. Mielenkiinnolla jään odottamaan että pääsen käsiksi Scene Builderiin – sitä odottaessa kaikki on käsin koodausta. Onneksi CSS3 tyylisivujen tuki on kerrassaan mahtavaa.

On aika kietaista reissu kasaan, edessä enää viimeinen it’s a wrap tapahtuma, sitten verkot katoavat alta, ja Java One passilla ei ole enää mitään merkitystä. Viikko on ollut kuten tavallista synapseja paukuttava, ja kestää hetken sulatella tätä intensiivipakettia. Koneelle alkaa olemaan pudonnut pdf tiedostot ja parleys.com esityksiä, niissäkin riittää lueksittavaa esim. lentokoneessa – harmi että parleysiin ei ole ipad clienttia. Android clientti löytyy 😉

Palataan asiaan vielä loppyhteenvetojen merkeissä, mutta välitön fiilis oli että tänä vuonna oli taas energiaa, joku vertasi twitter kanavalla tätä sovelluskehittäjien Woodstockiin. Ihan niin pitkälle en menisi, mutta paljon uutta tuli, suunta on hyvä, ja omasta mielestä on hienoa että pitkästä aikaa alustalla on roadmappia raotettu vuosiksi eteenpäin. Sikäli mikäli nyt mitään voi tänä päivänä ylipäätään suunnitella.

 

JavaOne 2011 San Francisco – 3/4

Kolmas päivä JavaOne seminaaria ei lähtenytkään käyntiin keynotella vaan nyt keskitytään tiukkaan asiaan. Tänään teemoja omassa kalenterissani olivat mm. G1 roskankeruun tuunaaminen, JavaFX sovellusten automatisoitu yksikkötestaus, Kinect, sekä JAX-RS uusin versio.

Muutin suunnitelmia viime hetkellä:
 Generational garbage collection tuning osoittautui koskevan IBM virtuaalikonetta ainoastaan, ja sitäpaitsi perusvinkkejä joita olen itse opettanut jo vuosia Tehokas Java kurssilla. menin varasijalla olleeseen esitykseen joka oli dynaamisten scriptikielten turpaanvetokisa. Toisin sanoen JRuby, Groovy, Scala ja Clojure kielten asiantuntijat ottivat toisistaan – tai ainakin toistensa kielistä – mittaa. Yleisö valitsi voittajat demojen ja trash talkin perusteella. Vaikka Ruby sai suosiota ja sen polustaja käytti referenssinä 10 miljardin projektia, yleisö äänesti Scala sekä Groovy kielet jaetulle voittajasijalle. Hännänhuipuksi jäi odotettavasti Clojure. Kaikki näistä kielistähän ovat mielenkiintoisia,mutta kaikkea ei voi osata jokainen yhtäaikaa. Tieturikin on panostanut näissä Scalaan toistaiseksi, tosin Groovy ja Grails alkavat jo ylittää uutiskynnystä niinsanoakseni. Ja itse pidän myös Jruby ja Ruby On Rails tyylistä.Tämä on muuten kirjoitettu ipadillä, ykkösversiolla. Sen näppis on häkellyttävän hyvä nopeaan kymmensormijärjestelmään tottuneelle. Testasin rinnan Motorola Xoom näppistä, ja se on jostain kumman syystä käsittämättömän hisas ja kankea. Ja miksi shift näppäintä on pakko painaa ensin ja erikseen kun applessa sen voi painaa totutusti pohjaan ja kirjoittaa monta isoa kirjainta samalla kertaa? Haluan androideihin paremman näppiksen! Pari kirjoitusvirhettä sallittakoon, iPadin touchpad näppis on vain _melkein_ yhtä hyvä kuin aito näppis 😉

No niin, seuraava tuleva versio Java ee7:stahan tulee olemaan kiintoisaa. Siitä puhutaan jo nyt tulevaisuuden PaaS standardina. Se ei kuitenkaan ole kaikki mitä on tuloillaan, tässä pari makupalaa:

– EJB 3.2 tulee sisältämään uudistuksia jotka pääosin liittyvät tuohon multi-tenancy piirteeseen, eli ajoon eri ympäristöissä, pilvessä tai ei, ja tietysti lisää annotaatioita, parempi yhteensopivuus muiden EE perheen tekniikoiden kanssa, jne.  Ehkä kiinnostavin ja mullistavin piirre olisivat uudet QoS annotaatiot sekä Cache API.

– JSF 2.2 tuunaa muutamaa pikkuasiaa. Esim nykymallissa monet EE annotaatiot toiivat lähinnä managed beaneissä, tulevassa versiossa myös validatoreissa, konverttereissa, custom komponenteissa, jne. Lisäksi luvassa paljon hienosäätöä, lisää voi lukea esim. http://jdevelopment.nl/jsf-22/

JPA 2.1 tulee tukemaan stored procedureja paremmin, tukee ON osaa joineissa antaen siis valita millä perusteella joinit tapahtuvat.. Lisäksi ’fetch groups’ ja ’fetch plans’ auttavat optimoimaan mitä dataa milloinkin haetaan, jos ei kaikkea halutakaan kerralla.

Lisäksi ahmin lisää JavaFX asiaa koska Tieturin tarjonnassa on nyt siitä uutta koulutusta tuoreeltaan ja täytyy tietää pintaa syvemmältä aiheesta. mm. layout management oli kiinnostava aihe – jälleen eroja ja parannuksia Swingiin verrattuna. Oracle muuten viestii selvästi että Swingiin ei enää panna paukkuja, se kuihtuu pois. Kiintoisaa mm. miten JavaFX:ssä max ja preferredsize toimivat, ja miten ruudulta voi kätkeä osia tilapäisesti rikkomatta käyttöliittymää. Luennon esitti Oraclen Amy Fowler, joka on myös innokkaasti tweettaillut ja blogannut viikosta.

Kiintoisa luento oli myös Physics in JavaFX, jossa käytiin läpi fysiikkamallinnusta esim. Angry Birds tyyppisissä peleissä. Fysiikan laithan koskevat kaikkia muita paitsi Chuck Norrisia.

Joka tapauksessa, luennon aiheena oli fysiikkamoottorin kytkeminen JavaFX esitysmuotoon, ja PhysicsFX moottorin julkistus joka helpottaa asiaa. Hauska havainnollinen esimerkki hyödyistä oli mp3 soitin joka havainnollistaa soitettavat biisit palloina joita tippuu suppilosta. Mitä hyötyä on siitä että applikaatio näyttää hauskalta ja sitä on mukava katsella? No olisiko meillä jo riittävän paljon niitä kivuliaasti käytettäviä työajanhallintasoftia joissa tarvitaan insinöörikoulutus ja 20 napinpainallusta per operaatio... 😉

 

Jaahas, ja lisää huomenissa. Torstai on seminaarin viimeinen päivä ja viimeinen tilaisuus imeä tietoa, verkostoitua, haalia demoja, esitteitä, visioita, ja vaikutteita joten voi olla että tänään täytyy Oracle Appreciation Event ottaa kevyen kaavan mukaan 😉