Java ja projekti Valhalla

No niin, Java on kärsinyt iät ja ajat siitä että kiitos taaksepäin yhteensopivuuden, sen ydintoimintoja ei ole voitu muutella. Tästä syytä mm. Generics piirteet ovat vähän kuin päälleliimattua laastaria, osa toimii mahtavasti, osa todella surkeasti. Mutta JDK 1.0 koodi vuodelta 1995 jauhaa edelleen Java 8:ssa. (Jatkossa muuten versiointi menossa pois JDK 1.9u80_4 tyylisestä sotkusta, pelataan taas täysin versioin eli seuraava Java ei ole JDK 1.9 vaan JDK 9)

Nyt Oracle on pistänyt aluilleen Project Valhallan – ideana on kokeilla rajumpia muutoksia jotka voivat lipua johonkin tuleviin Java versioihin tai sitten ei – ja joissa ei taata kielen syntaksin tai virtuaalikonetason toimivuuden pysymistä ennallaan. JDK 9 tuskin saa tästä maistiaisia, mutta saa nähdä mitä tulevaisuus tuokaan mukanaan. Java kuitenkin täyttää ensi vuonna pyöreitä: 20 vuotta vanha syntaksihirviö. Siitä on todella tullut uusi Cobol.

No mitä olisi luvassa? Alkuun esim. primitiivein tyypitettyjä listoja ja muitakin generic tyyppejä, tyyliin: List<int> – luvassa myös aikanaan jo Java 7:aan mietittyjä Value Type rakenteita, jotka olisivat vähän kuin käyttäjän määrittelemiä primitiivejä – funktioilla 😉

Suoraan sanoen jos lähdetään ravistelemaan perustuksia, oma toivelista olisi tässä:

– Heitetään viimeinkin hiiteen ne vanhat deprekoituneet kirjastot joita kenekään ei pitäisi käyttää. Miten olisi jos Date ja Calendar katoaisivat tyystin uuden JodaTime-pohjaisen ratkaisun tieltä. Etenkin Date. Jospa voitaisiin huitaista hiiteen Vector ja Hashtable. Ja AWT-luokat. Yhdenmukaistetaan collections-luokat ja karsitaan pois kaikki deprekoitunut moska noin niinkuin yleensäkin.

– Olisiko poikaa tuoda vähän rakkautta xml ja json syntaksille natiivina, sisäänrakennettuna tyyppinä a la Scala?

– Perintähierarkiat generics tyypeille järkevämmiksi? Tuolta löytyy huomioita mikä on vikana nykysysteemissä: http://www.angelikalanger.com/GenericsFAQ/FAQSections/ProgrammingIdioms.html

– Primitiivit lopulta hiiteen – oikeasti. Antaa kääntäjän optimoida sisäisesti, mutta miksi pitää olla muita tyyppejä kuin olio?

– Tupleja kehiin – tämä on aika iisi korjaus

– Merkkijonovakioille helpompaa syntaksia myös a la scala – kuka rakastaa \”\”\”\” eskapointeja? 😉

– Actorit

No niin, noista voisi aloitella. Onneksi osa on korjattavissa 3rd party kirjastoilla, mutta enemmänkin alustan tiukentaminen alkaisi olla paikallaan 20-vuotisjuhlan kunniaksi, ja miksei Java versio 10:tä kohden suunnattaessa. Version 9 osalta näyttäisi jo toivo olevan menetetty. 😉

Lähde: http://www.infoq.com/news/2014/07/Project-Valhalla

Angular Protractor ja Drag&Drop testaus

No niin, mitäpä ei moderni tablettikäyttöliittymä olisi ilman drag&drop kikkailua. Ajankohtaiseksi tuli miettiä miten sellaista voisi testata, automatisoidusti.

Onnekkaasti protractorista löytyi tähän suoraan rahkeet, jotka jopa toimivat:

// Grab two panels
var panels = element.all(by.repeater(’panel in panelsInGrid’));
var panel1 = panels.get(0);
var panel2 = panels.get(1);

// Drag&drop to new location
browser.actions().dragAndDrop(
panel1,
panel3
).perform();

Ja sillä siisti. Toimii (paremmin kuin) junan vessa. Joskus on tarve absoluuttisille koordinaateille:

browser.actions().dragAndDrop(
panel1DragHandleEast,
{x: 200, y: 200}
).perform();

Jep, sekin onnistuu. Onkohan jotain mitä Protractorilla ei voi automatisoida.. 😉

Android: Jack&Jill went up the hill

No niin, tämä ei ole niinkään artikkeli vaan vain heads-up mielenkiintoisesta kehityksestä. Mitään omaperäistä tässä jutussa ei ole, kunhan vain kulmien kohottelua ja omaa spekulointia.

Oracle-Google oikeudellisten kädenvääntöjen jyllätessä olen odotellutkin milloin Google hankkiutuu eroon Java-painolastista. Java valittiin alunperin kieleksi koska siitä satiin välittömästi laaja kehittäjäyhteisö käyttöön (kymmenisen miljoonaa plus miljoonat joille kieli on tutunoloinen toisen kielen pohjalta). Oraclen haasteiden johdosta kieli ei varmasti ole enää yhtä houkutteleva. Ei ole näkyvissä vielä mitään muutosta ohjelmointikieleen itseensä, mutta Googlella riittää varmasti muskelia sitä veivata jos niin haluavat.

Kuitenkin, nyt on siis poistumassa kehityskulusta vaihe jossa käytetään javac kääntäjää, ja dex kääntäjää.

Tilalle tulee Jack&Jill

Nyt kun ajonaikanakin on käytössä Dalvik ART, oikeastaan ainoa jäänne Javasta on lähdekoodin .java muoto, ehkä sekin muuttuu .jack tiedostoiksi jossain vaiheessa 😉

Kuvien ja tarinan lähde: http://www.androidpolice.com/2014/11/30/jack-and-jill-are-googles-new-compilers-for-android-app-developers/

npm ja node asennuspulmia ja ratkaisuja

Käytettäessä Angular+npm+bower projektia, npm on aiheuttanut oman osansa asennusongelmia. Originaali ongelma oli, että jostain syystä windows 2012r2 koneissa näyttää olevan jotain verkkotason ongelmia kytkeytyä luotettavasti registry.npmjs.org serveriin – tätä näyttää olevan liikkeellä eu-alueella muutenkin. Joka tapauksessa, se tekee keskusrekisteristä käyttökelvottoman (jos sattuu olemaan niin huono tuuri että joutuu buildaamaan windows serverillä).

Aikanaan yksi workaround oli käytellä eu-serveriä, registry.npmjs.eu, mutta valitettavasti siellä oli vuorostaan replikointipulmia, tiedot eivät olleet ajan tasalla, ja nyt ylläpitäjä pisti lapun luukulle. Ei huvittanut enää.

Onneksi löytyi nodejitsu serverit, joihin verkko tuntuu toimivan, ja jotka replikoivat luotettavasti – myös windows servereistä. Toistaiseksi niillä mennään. Aikanaan käytin parin ongelmallisen moduulin asennukseen Shrinkwrap ekstraparametria – moduulit olivat grunt-dependo ja json-proxy. Näissä kun jostain syystä oli ristiinriippuvuuksia registry.npmjs.org rekisteriin jotka saivat buildin epäonnistumaan, mutta asentuivat kiltisti shrinkwrapilla jostain syystä. Nyt näyttäisi että noitakaan ei enää kaivata.

Näin uskoisin että tarinan opetus on: Jos ei ole pakko buildata windows servereillä, älä buildaa. Ja jos buildaat kuitenkin, niin voit shoppailla hieman rekistereitä. Valinnanvaraa on onneksi. Ja taisin aiemminkin kirjoitella, että on ehdottoman hyvä idea myös pystyttää oma replikoiva rekisteri proxyksi – samalla pääsee tutustumaan MongoDB:n sielunelämään 😉