Category: Technology

Posted on in Technology

Olen seurannut 3D-tulostamisen kehitystä sivusilmällä jo aika pitkään. Kuitenkin vasta tänä syksynä meille ilmestyi töihin MakerBot Replicator 2X, jolla on ollut mahdollisuus ottaa vähän käytännön tuntumaa aiheeseen.

Ihan ensin meillä kokeiltiin tulostaa suhteellisen yksinkertaisia malleja, jotka on valmiiksi optimoitu MakerBotin tulostimille. Tämä on helppoa, sillä Thingiverse on niitä pullollaan ja tulostin täytyy vain kalibroida suunnilleen kohdalleen.

Sitten kokeilin onneani hieman monimutkaisemmalla tulosteella (kuvan piraattilaiva). Tätä mallia ei ollut optimoitu ainakaan MakerBotin tulostimille, eikä sitä pystynyt tulostamaan lainkaan ilman tukia. Tuet ovat noita maasta kasvavia rihmastoja, jotka pitävät puomeja ja mastoja pystyssä. Valitettavasti tukia tulostuu oletusasetuksilla niin paljon, että niiden irti repiminen rikkoo samalla laivan. Mastot kun ovat 3D-mallissa hyvin ohuet ja heiveröiset.

Laivaa useaan kertaan eri asetuksilla tulostellessa aloin hiljalleen oivaltaa, mikä 3D-harrastajia kiehtoo tässä hommassa. Kyse ei ole niinkään siitä, mitä lopullisilla tulostetuilla muovinpalasilla voi tehdä, vaan haasteesta ja ongelmien ratkaisemisesta. 3D-tulostaminen on vähän kuin leipomista: taikinan pitää olla oikeanlainen, uunin oikeassa lämpötilassa ja pellin oikealla tasolla. Muuttujia on vaan enemmän ja niitä voi hienosäätää tarkemmin. Yhden 3D-mallin täydelliset tulostusasetukset ovat erilaiset kuin toisen.

Haasteiden ratkaisemisessa ja luovuudessa pääsee ihan uuteen ulottuvuuteen sitten, kun alkaa suunnitella uusia tulostettavaksi kelpaavia 3D-malleja. Itse kokeilin vain pikaisesti konvertoida JPEG-kuvan STL-malliksi Shapewaysin 2D-3D-muuntimella. Sekin oli yllättävän haastavaa, kun piti miettiä kuvan eri osien paksuuksia ja tulostuvuutta ja tehdä koevedoksia.

Olen ehtinyt tulostella vasta muutaman yksinkertaisen kappaleen, mutta tajuan jo 3D-tulostamisen viehätyksen. Se on harrastus, joka palkitsee, kun uusi haastava tuloste onnistuu. Tulostetut muovihäkkyrät ovat vain symbolisia palkintoja onnistumisesta.

Posted on in Technology

Oculus Rift Developer Kittini saapui vihdoin ja pääsin kokeilemaan Minecraftin VR-versiota eli Minecriftiä. Ilokseni huomasin, että se tukee Minecraft 1.6.2:ta helposti asennettavalla installerilla, joka toimii myös OS X:ssä. Kannattaa kokeilla, sillä Minecraft tukee nykyään useita eri profiileja ja samalla asennuksella voi helposti pelata myös ihan perinteisessä tilassa.

Yleistuntuma Oculus Riftistä on, että se on ihan ensimmäinen minimaalinen VR-toteutus, jolla voi oikeasti tehdä jotain. Kuten laitetta kokeilleet tietävät, resoluutio on suhteellisen kehno ja kuva näyttää suttuiselta. Mutta se seuraa reaaliajassa pään liikkeitä ja kolmiulotteisessa maailmassa tuntee tosiaan olevansa sisällä.

Olen viime aikoina opiskellut hiukan myös Unitya ja seuraavaksi pitäisi alkaa kokeilla sen integroimista Oculus Riftiin. Valitettavasti integraatio vaatii maksullisen Unity Pron, koska Riftin edellyttämät laajennukset eivät toimi ilmaisversiossa. Oculus Riftin tilauksen mukana tulee onneksi 4 kuukautta voimassa oleva Unity Pro Trial -lisenssi. Se löytyy Order Managerista kun tilaus on toimitettu.

Unitystä voisin vielä todeta, että olen ollut todella positiivisesti yllättynyt sen käytön helppouteen ja koko järjestelmän toimivuuteen muutenkin. On ihan erilaista kehittää pelejä, kun koodaamisen sijaan voi vain vedellä 3D-objekteja suoraan näytölle sekä muokata niiden sijainteja ja animaatioita visuaalisesti. Objektien ja pelilogiikan skriptaaminenkin on sujuvaa C#:llä ja Unityn omalla objektimallilla. Skriptausta tarvitsee tehdä vain juuri sen verran kuin pelin logiikka sitä edellyttää. Skriptit voi mukavasti hajauttaa ja liittää loogisesti osaksi niitä 3D-peliobjekteja, joiden toimintaa ne ohjailevat.

Paljon parantamistakin Unityssä toki olisi. Ensimmäisenä rupesi ärsyttämään C#:n javamainen tapa edellyttää tyyppien ja luokkien nimien toistuvaa kirjoittamista joka paikkaan. Monon staattinen tyypitys tekee muutenkin kehityksestä vähän nahkeaa Pythonin vapauteen ja laajennettavuuteen tottuneelle, mutta oletettavasti se kai sitten tehostaa skriptien ajoa reaaliajassa. Toisekseen Unityn omaa objektihierarkiaa ei voi laajentaa perimällä, joten peliobjekteihin ei voi lisätä uusia ominaisuuksia. Sen sijaan täytyy rakentaa oma rinnakkainen objektimalli pelin tilaa yläpitämään ja yhdistää objektit sitten esimerkiksi Dictionary-hauilla toisiinsa.

Oculus Riftiä voi ohjelmoida myös natiivilla SDK:lla, jolla voi kehittää OS X-, Windows- tai Linux-pelejä perinteiseen tapaan C++:lla koodaten. Mutta oma tuntumani kyllä on, että on paljon tehokkaampaa ja tuottavampaa lähteä liikkeelle Unityllä, ellei projekti vaadi jotain todella spesiaalia ja ole natiivikehityksen aiheuttaman moninkertaisen vaivan arvoinen.

Posted on in Technology

Tämä AppleInsiderin kirjoitus sai pohtimaan mobiilikäyttöjärjestelmien tulevaisuutta. Kiinnostavin kysymys on minun mielestäni se, mitä tapahtuu kännyköiden ja tablettien "natiivikäyttöjärjestelmille" siinä vaiheessa, kun kaiken voi oikeasti tehdä yhtä hyvin webbiselaimessakin.

Itse näen tulevaisuuden suurin piirtein näin:

1. Firefox OS toimii edelläkävijänä webbipohjaisissa mobiilikäyttöjärjestelmissä mutta on hieman aikaansa edellä. Sen kaikki sovellukset kehitetään JavaScriptillä ja HTML:llä. Sertifioidut (tai käyttäjän hyväksymät) sovellukset saavat täyden pääsyn puhelimen API-rajapintoihin.

2. Chrome OS on ensimmäinen valtavirtaa edustava webbikäyttöjärjestelmä, joka tulee laajalti käyttöön puhelimiin ja tableteihin. Googlella on jo nyt Chrome Web Store, joka on tarkoitettu web-pohjaisten sovellusten jakeluun. Kun Chrome OS -puhelimet tulevat, niiden selaimessa on kaikki mahdolliset audio-, 3D- ja muut rajapinnat pelaamista ja sovelluskehitystä varten. Sertifiointiprosessilla rajataan sitä, mihin kaikkeen sovellukset pääsevät käsiksi.

3. Apple kehittää pikaisesti omaan App Storeensa laajennuksen web-sovelluksille huomattuaan Chrome OS:n menestyksen. iPhone- ja iPad-sovelluksia voi kehittää JavaScriptillä ja myydä ilman turhia wrappereita. Apple avaa vihdoinkin kaikki API-rajapinnat sertifioiduille web-sovelluksille, mukaanlukien WebGL ja Web Audio, sekä poistaa erilaiset keinotekoiset muisti- ja nopeusrajoitukset JavaScript-sovelluksilta.

4. Androidille taas kukaan ei kehitä tällaista modernien web-sovellusten alustaa, koska Googlen mielenkiinto on Chrome OS:ssä, joten Android kuolee ajan mittaan pois Java-rajapintoineen. Vastaavasti iOS-sovelluskehityksessä nykyisin käytettävä Objective-C alkaa kuihtua pois, koska JavaScript-ohjelmoijia on niin paljon enemmän ja kehitys on helpompaa.

5. Saavutetaan lopullinen konvergenssi, jossa kaikki kolme nykyisin erillään olevaa osa-aluetta (palvelimet, selainsovellukset ja natiivisovellukset) yhdistyvät. Niitä kaikkia ohjelmoidaan JavaScriptillä (tai CoffeeScriptillä). Sovelluskomponentteja ja tietorakenteita voidaan jakaa ennenkuulumattoman jouhevasti, kun täsmälleen sama koodi toimii joka paikassa. Javan alkuperäinen, pitämätön lupaus lunastetaan yllättäen JavaScriptillä ja HTML5:llä.

(6. Microsoft ei tajua koko juttua vaan yrittää jatkaa oman suljetun SDK:n ja proprietaaristen JavaScript-rajapintojensa tarjoamista. Kukaan ei edelleenkään osta Lumioita Suomen ulkopuolella, eikä niihin viitsitä kehittää sovelluksia, koska ne ovat hieman epäyhteensopivia kaikkien muiden puhelinten kanssa. IE 20 sisältää lopulta WebGL:n, mutta se on buginen eikä mikään peli toimi siinä, ellei peliä erikseen viritetä MS-yhteensopivaksi.)

Posted on in Technology

Jos Google Glass kiinnostaa muttei vielä omista älylaseja, niin Glass-käyttöliittymän voi asentaa myös Android-puhelimeen. Itse kokeilin sitä Nexus 4:llä (Android 4.2.2) ja suurimmaksi osaksi Glass toimi ihan hyvin. Tässä lyhyt asennusohje.

Varsinainen Glass-käyttöjärjestelmä löytyy Android Policen blogista. Jutussa olevat linkit viittaavat Glassin XE4- ja XE5-versioihin, joista tarvitsee vain toisen. RAR-paketti sisältää kasan apk-tiedostoja, jotka asentuvat Androidiin sellaisenaan. Itse asensin vain Glass*-alkuiset tiedostot, sillä ilmeisesti muut apk-paketit menevät päällekkäin puhelimen käyttöjärjestelmän esiasennettujen osien kanssa eikä niitä tarvita.

Osa Glassin apk-paketeista on hiukan epäyhteensopivia puhelinten kanssa, mutta onneksi niihin löytyy korjaus Xenologerin GitHub-projektista. Sielä on neljä apk-pakettia (Home, Camera, Maps, Setup), joita on hieman paikkailtu paremmin yhteensopiviksi. Nämä paketit voi siis asentaa vastaavien XE5-RAR-versioiden sijaan. Maps tuntuisikin toimivan ainakin periaatteessa ja Setupilla saa liitettyä Glass-asennuksensa Googlen MyGlass-hallinnointiin. Valitettavasti kamera ei kuitenkaan toimi kunnolla. Sillä otetut kuvat eivät ilmesty Timelineen eikä niitä voi myöskään jakaa Google+:aan tai Facebookiin.

Glassin käyttöliittymä toimii pääasiassa puheohjauksella, mutta navigointiin tarvitsee myös nuolinäppäimiä sekä Enter- ja Escape-nappeja, joilla simuloidaan tap-gestureita. Koska puhelimen virtuaalinäppäimistö ei ole käytettävissä, täytyy niitä varten käyttää joko erillistä Bluetooth-näppäimistöä tai WiFi-siltaa, joka siirtää tietokoneen näppäilyt Android-puhelimeen. Jälkimmäinen löytyy ilmaisena sovelluksena Playsta.

Posted on in Technology, Apple

OS X:n sisäänrakennettu Mail on mainio sähköpostiohjelma, mutta siinä on pienet vikansa. Näistä häiritsevin on se, että lähtevien rich text -muotoisten sähköpostien leipätekstistä puuttuu oletuksena font-määre. Tämän seurauksena käy usein niin, että esimerkiksi Outlook näyttää viestien sisällön Times Roman -fontilla mutta allekirjoituksen Helveticalla. Asiaan löytyy korjaus pienen Mail-laajennuksen avulla.

UniversalMailer on Mail-sovelluksen laajennus, joka korjaa lähetettävät viestit automaattisesti järkevään muotoon. Projektin README-tiedostosta näkee, mitä kaikkea se tekee. Itse käänsin tämän laajennuksen Xcodella ja kopioin sitten UniversalMailer.mailbundle -tiedoston ~/Library/Mail/Bundles -kansioon. Toimiessaan laajennus lisää Mail-sovelluksen asetuksiin oheisen kuvan mukaisen lisävalinnan.

Laajennuksen asentamisen jälkeen kannattaa tarkastaa nämä asetukset:

  • UniversalMailer-laajennuksen asetusten oletusfontti: Helvetica 12
  • Mail-sovelluksen Fonts & Colors -asetuksista "Message font": Helvetica 12
  • Mail-sovelluksen Signatures -asetuksista "Always match by default message font (Helvetica 12)": [x]

Kun asetukset ovat kohdallaan, viestien pitäisi lähteä ulos kauniina.

Update 23.4.2013

Jos mailbundle ei ota latautuakseen, niin seuraava asetus Terminalista ajettuna auttaa:

defaults write com.apple.mail EnableBundles -bool YES

Posted on in Technology, Node.js

Homebrew päivittyi hiljattain Node.js:n 0.10-versioon, mikä aiheuttaa ongelmia joidenkin moduulien kanssa. Vanhan version voi palauttaa käsipelillä checkaamalla ulos tietyn version node.rb-tiedostosta, mutta tähän on parempikin tapa Tap-toiminnallisuutta käyttäen.

Tiivistettynä uusimman 0.8-version saa pysyvästi käyttöön näin:

brew tap homebrew/versions
brew uninstall node
brew install node08

Tämän jälkeen voi taas huoletta ajaa brew update && brew upgrade, eikä Node enää päivity 0.10:een. Se kuitenkin pysyy uusimmassa 0.8:ssa.

Posted on in Technology, Node.js

Tässä pieni katsaus työkaluihin Node.js-sovellusten ajamiseen tuotantoympäristöissä. Olen kerännyt tähän muutaman relevantin moduulin tuotantoympäristöihin liittyen ja käyn läpi lyhyesti, mitä ne tekevät.

ModuuliKuvaus
Supervisor Supervisor on työkalu yksittäisen Node.js-palvelimen automaattiseen uudelleenkäynnistelyyn. Se käynnistää prosessin uudelleen, jos prosessi kuolee tai jos sen lähdekoodi päivittyy levyllä. Sopii siis myös kehityskäytön aikana siihen, ettei palvelinta tarvitse käynnistää käsin uudelleen koko ajan.
Always Always tekee suunnilleen saman kuin Supervisor. Tällä projektilla on kuitenkin vähemmän aktiviteettia GitHubissa kuin Supervisorilla.
Cluster Cluster on Node.js:n sisäänrakennettu moduuli, jonka avulla voi hyödyntää useampaa CPU-ydintä. Master-prosessi käynnistää palvelimesta useita rinnakkaisia worker-prosesseja, jotka voivat kuunnella esimerkiksi samaa TCP-porttia. Worker-prosessit voivat myös kommunikoida master-prosessin kanssa ja keskenään.
Upstart Upstart on Ubuntun sisäänrakennettu palvelinprosessien hallintajärjestelmä. Se käynnistää bootin yhteydessä kaikki palvelimet, joilla on konfiguraatio /etc/init-hakemistossa. Lisäksi se käynnistää kaatuneen palvelimen automaattisesti uudelleen (respawn).
Forever Forever hallinnoi palvelinprosesseja samaan tapaan kuin Upstart. Palvelimia käynnistetään ja pysäytetään komentamalla forever start, forever stop, forever list, jne. Omasta mielestäni Foreverille ei ole tarvetta, kun Upstart on jo käytössä.
Foreman Foreman helpottaa sellaisten web-sovellusten käynnistämistä, jotka koostuvat useasta erilaisesta rinnakkaisesta palvelimesta. Procfile-tiedosto määrittelee, mitkä kaikki palvelinprosessit käynnistetään kerralla yhdellä "foreman start" -komennolla. Tämä helpottaa sovelluksen ajamista kehitysympäristössä yhdessä terminaalissa. Lisäksi Foreman integroituu Upstartiin niin, että Procfile voidaan konvertoida palvelimella Upstartin conf-tiedostoksi. Foreman on Ruby-gem ja alkujaan Rails-sovellusten ajamiseen suunniteltu.
Node Foreman Node Foreman on Node.js:lle tehty versio Foremanista. Se toimii pitkälti samalla tavalla kuin alkuperäinen Ruby-versiokin, mutta ei edellytä Rubyn ja Foreman-gemin asentamista. Lisäksi se tukee joitakin Node.js:n lisäominaisuuksia, kuten package.json-konfiguraatiota ilman erillistä Procfileä.

Mitä näistä itse käyttäisin

Paras yhdistelmä näyttäisi olevan Supervisor + Cluster + Node Foreman + Upstart:

  • Supervisor huolehtii kehityksen aikana siitä, että palvelin käynnistyy uudelleen lähdekoodia muokatessa.
  • Cluster hyödyntää tuotannossa useampaa CPU-ydintä.
  • Node Foreman käynnistää tarvittaessa useita erilaisia palvelinprosesseja rinnakkain ja generoi Upstart-konfiguraatiot automaattisesti Procfileistä.
  • Upstart pyörittää palvelimia Ubuntun käyttöjärjestelmätasolla ja käynnistää ne bootissa. Lisäksi respawn käynnistää tarvittaessa prosessit uudelleen siltä varalta, että Supervisor kaatuisi.

Jos jollain on kokemuksia tästä mallista tai paremmista ratkaisuista, niin olisi mielenkiintoista kuulla kommenteissa.