Devaajan maccikone tikkiin

Olen pitkien Linux ja Windows kausien jälkeen päätynyt tekemään työhommat Macbook Pro:lla, joka on ollut positiivinen kokemus. Siinä kivasti yhdistyy helppo käytettävyys, ja toisaalta Linux-mainen johdonmukaisuus. Jos joku ei toimi, korjaus on sama kaikilla, ja komentorivi on lähellä ja hyvä.

Pari kertaa on nyt työkone tullut asenneltua. Teen töissä tyypillisesti arkkitehtuurisuunnittelua, prototypointia, ja sekä Java backend koodia että Angular/React/Node JavaScript hommeleita, muutamalla eri kannalla riippuen projektista. Ensimmäisellä kertaa kun Mac oli uusi kokemus, kaikki meni käsityönä ja puolet asioista ihan päin prinkkalaa. Mutta kirjoitin kaiken muistiin, ja toisella kertaa päätinkin sitten automatisoida hommat.

Mac devaajan ihania kavereita ovat Homebrew, NVM, ja JENV. Näistä jälkimmäisistä olenkin kirjoitellut pari artikkelia aiemmin, mutta mainittakoon että laitoin dev-koneeni homebrew scriptit yleiseen jakoon Gittiin. Pohja-asennuksina on meidän IT:ltä tuleva OSX Macbook Pro, Yosemite tai Il Capitano, jossa on perus antivirukset ja officet ja emailit jo viritettynä kuntoon. Hyvä idea asentaa myös perus osx patchit ja java fixit. Sen päälle asennan Homebrew:n, ja sitten ajan tämän scriptin:

https://github.com/crystoll/osxinstall

Ja kuten scriptiä lukemalla käy ilmi, aika paljon kamaa on koneessa sen jälkeen. Yksi kollega vinkkasi vieläkin elegantimman scriptin, niinikään Githubissa, jossa on aikalailla samaa kamaa, mutta toteutus Ansiblella, jolla voi paikata vielä aukkoja joita esim. Homebrewn jäljiltä jää:

https://github.com/hoxu/osx-dev-playbook

Lopputulos kuitenkin: Pistät scriptin jylläämään, otat ison kupin kahvia, tabletista tai kännykästä yoububeen kunnon kissavideokanavan, ja kun kahvi on juotu tai kylmää, työkone on kunnossa. Kivasti säästää aikaa ja energiaa ja takaa että lähtökohdat ovat aina samat. Jos on muutama sata devaajaa talossa, parin htp:n säästö per napa muutaman vuoden välein on ihan kiva. Ja itse tykkään että asiat menee aina samalla tapaa, eikä tarvi uudelleen muistaa mitä kaikkea on syytä tehdä. Toki vähän huoltoa kaivataan, ja tuota ansible scriptiäkin voisi vähän pilkkoa rooleihin, modulaarisuus antaisi mahdollisuuden viritellä vielä paremmin. Joku voisi kaivata jotain kivaa rasti ruutuun käyttöliittymääkin, mutta minä en 😉

Automate everything! *ryystää kahvia^*

 

 

Internet of Messed-Up Things

Kirjailin taannoin kokeiluista mitä tein GoPiGo botilla. Viikonloppuna tuli firman bileissä filosofoitua taas kerran kaikenlaisista älyhärveleistä, niistä jotka lentävät, ja niistä jotka huristavat maata myöden. Vaikka dronet ovat juuri nyt pop, perinteiset maata pitkin mönkivät botit ovat helpompia (ja halvempia) kokeiluun ja opiskeluun.

2015-07-05 17.27.22

Minä tekäisin aikanaan nodejs:llä karun komentoliittymän gopigo-softan ja raspberry pi-ympäristön päälle. Siinä on websocket serverikomponentti, joka ottaa yksinkertaisia käskyjä vastaan ja välittää ne servoille ja moottoreille – ja vastavuoroisesti antaa takaisin mittatietoa. Sitten siinä on ugly as hell-tyyppinen poc-käyttöliittymä, joka on koodattu html-sivun sisään. Nodejs serveri käynnistää molemmat, ja kun tähän ottaa yhteyttä esim. kännykällä, hupi voi alkaa. Tosiaan toistaiseksi botin suurin saavutus on kiusata perheen koiraa ja vierailevia kissoja.

2015-07-01 22.21.13

Ajattelin kuitenkin avata tämän vähäisen näperryksen jos joku on myös kiinnostunut vastaavista. Valitsin noden pohjaksi juuri nopean ja joustavan kokeilun vuoksi. index.js tiedosto käynnistää yhteyden gopigo kerrokseen, ja potkaisee käyntiin pienen websocket sekä web serverin porttiin 3000, ja lataa index.html sivun. Se on verkkainen mutta riittävän nopea, jos haluaa turboahtaa lisää voi käytellä pi v2 myllyjä. Itselläni sattui juuri olemaan ylimääräinen 1st gen Pi tähän kokeiluun, kakkosgeneraatiolla on ylväämpiä tehtäviä 😉

Screenshot 2015-09-11 19.27.32

Jeah, ux suunnittelua mahdollisesti voisi vielä viedä pidemmälle. Kokeile kännykässä niin huomaat sen 😉

No niin, pidemmittä puheitta: https://github.com/crystoll/gopigo

NodeJS 4.0 on ulkona

Vain nopea päivitys itseä kiinnostavasta asiasta tähän väliin: NodeJS 4.0 julkaistiin tänään. Jos joku ihmettelee rajua hyppyä versionumerosta 0.12.7 tähän uuteen – kyseessä on historiallinen mergetys jossa nodejs ja iojs yhtyvät, siksi raju pomppu.

Suositusta myös sen käytöstä: Ellet jo ennestään käytä nvm versiomanageria node versioiden ajoon, hanki se! OS X:ssä esim. brew install nvm tuottaa tuloksen – jahka säädät vielä vähän lisää ohjeiden mukaan. nvm:llä voit asennella iloisesti vanhaa ja uutta rinta rinnan ja vaihtaa nopeasti kokeillaksesi. Olisin yllättynyt jos 4.0 sujahtaisi ongelmitta vanhan tilalle joka paikkaan.

Linkkivinkkejä:

https://nodejs.org/en/

https://medium.com/node-js-javascript/4-0-is-the-new-1-0-386597a3436d

http://apmblog.dynatrace.com/2015/09/05/all-you-need-to-know-about-node-js-4-0/

https://github.com/creationix/nvm

IoT: Go home PI, you’re drunk!

Internet of Things on kiehtonut omaa mieltä jo pitkään ennen kuin termi edes keksittiin: Se on pääosin se asia joka nykypäivän communicator/mobile device kategorian laitteissa ja älypuettavissakin kiehtoo. Älykkäiden verkottuneiden laitteiden mahdollisuudet ja uhat. Nyt tuli sitten aika pistää äly pyörille.

2015-07-05 17.27.22

Nykypäivänä on helpompaa kuin koskaan näperrellä ja prototypoida näiden parissa: Raspberry Pi tietokoneet ovat halpoja ja niihin saa kiinnitettyä oikeastaan mitä vain mielikuvitus loihtii. Olen itse rakennellut niihin aiemmin kokeilumielessä full stack raskasta Java EE ratkaisua, milloin MySQL kannan, milloin MongoDB:n kera ohjaamaan kodin automaatiota. Tuli kokeiltua sekin miten Glassfish sovelluspalvelin pyörähtää käyntiin: Ihan hienosti, jopa ihan ykkösgeneraation Raspissa.

Tällä kertaa halusin kokeilla jotain uutta. Muutama vuosi takaperin JavaOne seminaarissa osallistuin autokilpailuun jossa koodailtiin autoihin algoritmia jolla ne ajaisivat lujaa mutta pysyisivät radalla. Siitä jäi ajatus itämään. Hiljattain tutkin Lego Mindstorm EVO paketteja, mutta ne tuntuivat rajoittuneilta, ja kalliilta kokeiluun nähden. Niihinkin löytyy toki nykyään BrickPi-laajennus jolla voi laittaa Raspberryn käskemään EVO kontrollereita ja sensoreita. Mutta itselleni haaviin jäi GoPiGo-alusta. Moottorit, pieni kontrolleri joka kytkeytyy suoraan Pin kylkeen, virtapaketti joka toimii pattereilla ja irrottaa laitteen virtapiuhan tyranniasta. Go, Pi, Go, feel the wind in your electronic hairs! 😉

2015-07-05 17.27.05

Eli tilaukseen napsahti, ja ei kun testailemaan. GoPiGo web sitelta sai latailla valmiin imagen joka pohjautui jo tuttuun Raspbianiin, ja toimi ihan ok, kunhan viritin sen langattomaan kotiverkkoon ja kävin läpi alustusrutiinit. Sieltä löyty esimerkkejä mm. Pythonilla, Javalla, ja testailin niiden avulla että olin koonnut kaiken oikein ja piuhat olivat paikallaan. Mutta kuten sanottua, tällä kertaa oli tarkoitus tehdä jotain uutta.

Joten päädyin viritykseen, jossa ytimen muodostaa node.js palvelin. Viritin sen automaattikäynnistymään Raspin myötä. Automaattikäynnistys tapahtuu ihan init.d scripteillä, ja apuna käyttelin forever + nodemon yhdistelmää, jotta prosessi päivittää itsensä kun koodeja päivitetään, ja myös jos se sattuisi kaatumaan.

Palvelin initialisoi GoPiGo osan, ja kiinnittää pari tapahtumankuuntelijaa, mm. varoittamaan jos virta käy vähiin pattereissa. Ja lataa html-sivun jonka kautta raspia voi ohjailla. Tuossa vähän maistiaista miltä sen pään koodi näyttää:

socket.on('status', function(msg){
  $('#messages').append($('<li>').text(msg));
});
$('#forward').click(function() {
  socket.emit('command','move forward');
});
$('#backward').click(function() {
  socket.emit('command','move backward');
});

Halusin rivakkuutta ohjaukseen joten websocketeilla mennään. Tarkemmin, socket.io nykyisellä inkarnaatiolla. Käyttöliittymä on tässä kohtaa karu – pelkkää html:ää ja jquerya. Vähän kutkuttaisi päästää Aurelia irti tässä kohtaa. Käytännössä siis websocket kanavalla liikkuu kahteen suuntaan tavaraa: status viestit menevät ’status’ kanavalle, ja näytetään ’client’ päässä. Komennot lähetetään ’commands’ kanavalle, ja voivat olla esim. mene eteenpäin, pysähdy, käänny, laita ledejä päälle, jne.

Ja sehän toimii. Hienosti. Jopa ihan Android kännykästä käsin. Sillä oli kiva kiusata kissoja ja koiraa 😉

2015-07-05 17.33.55

2015-07-01 22.21.13

Mitähän hittoa tällä sitten tekee? No ei yhtikäs mitään. Mutta mielenkiintoinen harjoite taas keveiden pikku älylaitteiden maailmassa, nodejs tuntuisi olevan mukavan keveä ratkaisu tämäntapaiseen hommaan, ja Raspberry Pi tuntuu Noden kanssa tarjoavan kaikki tarpeelliset palaset että prosessin saa pyörimään luotettavasti ja itsenäisesti.

Seuraavia askelia:

– pistä UI päähän jotain fiksumpaa ja helpompaa kehitysframeworkia, esim. Aurelia.

– Kiinnitä pakkaan sensoreita, esim. mikroaaltotutka, kamera, servoja.

– Opeta robotille Asimovin kolme periaatetta ettei käy kuin Volkswagenin tehtailla

– Laita laite tuomaan kylmä olut kun se aistii sille tarpeen.

– Ja ampumaan raketteja devaajan päähän joka taas /&%/&% rikkoi sen buildin! Tässä voidaan vähän joustaa Asimov-periaatteiden kanssa.

http://www.dexterindustries.com/GoPiGo/projects/python-examples-for-the-raspberry-pi/raspberry-pi-controlled-office-cannon/

Raspberry Pi 2 kotiutui

Posti toi mukanaan paketin, jossa oli uudentuoksuinen Raspberry Pi 2 kapistus. Sille löytyykin heti käyttöä, mutta maltoin napsia pari kuvaa ja jaan vähän ensivaikutalmia tässä. Pahoittelen kuvien Nexus 6-laatua, liikkeellä on paljon laadukkaampaakin kuvitusta 😉

Raspberry Pi 2

Kuten on toitotettua, laite on aiempaa moninkerroin tehokkaampi, 900MHz quad core prosessorilla varustettu, ja kuitenkin alkuperäisen hintainen. Muitakin muutoksia löytyy rautapuolelta.

USB portteja on nyt kahden sijasta hubitettu neljä, ja muistikorttikin on pienentynyt MicroSD-kokoon.

USB Portit

Muistikortit

Komposiittivideo löytyy nykyään audioportista. Muuten tutun kaltainen kapistus. Jaahas, ei sitten muuta kuin käyttistä kortille.

Nyt on valinnanvaraa taas hiukan enemmän. Itse olen tykästynyt ennestään Raspbianiin jossa tulee Oraclen Javaa heti mukana hard floatilla. Mutta tarjolla myös mm. Snappy Ubuntu Corea, Pidoraa, Noobsia, Risc OS:ia, ja tietenkin se Windows 10.

Mutta mennään Raspbianilla vielä toistaiseksi, pari projektia mielessä sen päälle. Ja sinne plutkahti perus-käyttöönoton päälle vanha tuttu Java 8 (kuuluu nykyään distroon, ei vaadi sen enempää), ja uutena tulokkaana node.js, npm, sekä mongodb. Hassua kyllä nämä viimeisimmät vaativat erityisvimpautuksia raspbianiin – mutta eivät toki kovin ihmeellisiä. Tahkosin toimivat komennot scripteinä talteen – postailen ne ehkä vastaisuudessa tännekin. Tässä on vähän varaa valita haluaako kääntää itse vai käyttää muiden tekemiä 3rd party paketteja. Mongon kääntäminen ja asennus vei viimeksi tunteja (siinä muuten hyvä benchmarkki uudelle) joten tuikkasin 3rd party paketeista kaiken kehiin.

Tästä kuuluu ehkä vähän lisää joku toinen kerta 😉