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Ä

Advertisements

One thought on “Liikettä, Lambdaa ja JavaFX:ää

  1. Päivitysilmoitus: 2020-luvun käyttöliittymät | Tieturi blogi

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s