Tilakonetta voi käyttää reaktiivisen ohjelmistojärjestelmän mallintamiseen ja toteutukseen tilanteessa, jossa täytyy sekä reagoida reaalimaailmasta tuleviin tapahtumiin että saada vastineeksi aikaan muutoksia maailmassa. Esimerkkinä käytän valvontajärjestelmää suljetulle tilalle.

Tilakoneella tarkoitetaan systeemiä, joka koostuu tiloista ja niiden välisistä tilasiirtymistä. Tilasiirtymiä aiheuttavat yleensä jotkin ulkoa tulevat syötteet, ja ne voivat tuottaa ulospäin näkyviä tuloksia.

Yksinkertaisimmillaan tilakone lukee jonoa symboleita, suorittaa tilasiirtymiä syötteiden mukaisesti ja joko hyväksyy tai hylkää tietyt syötejonot tai tuottaa siirtymien tuloksena jonon tulosarvoja. Lue lisää

Kvanttitietokone on mielestäni konseptina erityisen mielenkiintoinen. Kuitenkin mielestäni liian moni ihminen ei ymmärrä siitä muuta kuin sen mystisyyden, joten kunnianhimoinen kun olen, aion tässä tekstissä yrittää selittää sinulle lukija, mitä tämä fysiikan muotisana oikeasti tarkoittaa! Joten otetaanpa loikka tuntemattomaan, seuraa vain minua.

Joitain kuukausia sitten maailmalla levisi kulovalkean tavoin video, jossa Kanadan pääministeri Justin Trudeau vastaa toimittajan heittoon kvanttitietokoneista. Vaikka pääministerin selitys onkin jokseenkin puutteellinen, antaa se silti jotain kuvaa siitä, mikä erottaa normaalin tietokoneen kvanttitietokoneesta. Lue lisää

Aiemmassa blogikirjoituksessani käsittelin responsiivisen käyttöliittymäsuunnittelun perusteita. Tällä kertaa tutustutaan tarkistuslistan avulla muutamiin mielenkiintoisiin responsiivisuuden haasteisiin.

Uuden web-projektin käynnistyessä ulkoasun suunnittelu tulee yleensä käsiteltäväksi hyvin alkuvaiheessa prosessia. Kaikissa tapauksissa projektin kokonaiskuva ei ole vielä erityisen hyvin selvillä, joten monesti joudutaan varautumaan erilaisiin tilanteisiin, jotka saattavat realisoitua tai jäädä toiveiksi. Ulkoasun kannalta eräs tärkeä alkuvaiheen valinta on se, lähdetäänkö eri laitteita varten tekemään eri versioita sivustosta vai käytetäänkö responsiivista suunnittelua, jonka myötä ulkoasu mukautuu laitteelle sopivaksi. Lue lisää

Tämä teksti on jatkoa aikaisemmin julkaistulle tekstille, joten kannattaa lukea se ensin.

Edellisessä osassa puhuttiin erilaisista hyödyistä, kun käytetään suunnittelumalleja dokumentoinnin apuna. Tässä osassa näytetään, kuinka projektin käytännöistä saadaan luotua suunnittelumalleja. Kannattaa huomioida, että vaikka projektit ja tilanteet ovat erilaisia, suunnittelumallien pitäisi olla yleiskäyttöisiä, kestäviä ja käytettävissä myös oman projektin ulkopuolella – helposti muuttuvat yksittäistapausten yksityiskohdat voi dokumentoida muuten.

Suunnittelumallien on tarkoitus kuvata olemassa olevia käytäntöjä, jolloin niihin ei kannata laittaa osioita, joita ei ole oikeasti käytössä tai itse kokeiltu. Lue lisää

JavaRx_reactive_future_blog

Koska RxJava on nyt teoriassa täysin hallussa, on aika kokeilla sitä käytännössä. Graafinen käyttöliittymä tarjoaa hyvän leikkikentän käytännön tekemiseen. Tähän tarkoitukseen sopii hyvin JavaFX, jossa on muihin vaihtoehtoihin verrattuna parempi tuki asynkroniselle ohjelmoinnille. JavaFX on Javan uusin (ja jo kolmas AWT:n ja Swingin jälkeen) työpöytäkäyttöliittymäkirjasto. JavaFX:n ja RxJavan yhteenliittämiseen on myös olemassa valmis kirjasto, mielikuvituksellisesti nimetty RxJavaFX, mutta tässä esimerkissä käytetään vain RxJavaa ja JavaFX:ää, jotta pääsemme tekemään itse enemmän. Lue lisää

Nyt kun blogiin on saatu jo hyvä määrä teknistä asiatekstiä, niin on hyvä välissä laittaa propellihatut pyörimään. Tässä tekstissä tutustutaan pintapuolisesti interaktiosuunnitteluun eli pyritään perehtymään ohjelmistojen ja loppukäyttäjän väliseen interaktioon, sen parantamiseen ja prosessiin. Vaikka käyttöliittymäsuunnittelu ja graafinen suunnittelu ovat osittain samalla tontilla interaktiosuunnittelun kanssa, en keskity niihin vaan taustalla olevan käyttäjän tavoitteisiin, oletuksiin ja käyttäytymiseen ohjelmiston kanssa. Tätä kutsutaan tavoitepohjaiseksi suunnitteluksi. Lue lisää

Kun ilmenee tarve tehdä muutoksia toimivaan koodiin esimerkiksi suorituskyvyn tai refaktoroinnin merkeissä, usein ensimmäinen ajatus on hypätä suoraan muokkaamaan olemassa olevaa koodia. Tavoite on suorituskykyisemmän tai helpommin ylläpidettävän koodin lisäksi luonnollisesti säilyttää toimivuus. Usein toimivuuden toteaminen on kirjoitettujen testien ja mahdollisesti käyttäjätestauksen varassa. Testikattavuus on harvoin täydellinen ja refaktorointia vailla oleva koodi voi olla lähtökohtaisesti huonosti testattu. Mitä kriittisempi ominaisuus, sitä tärkeämpää on varmistaa, että uudistettu toteutus antaa toiminnallisuudeltaan samat tulokset kuin alkuperäinen. Lue lisää

SLN-file_toolbox_Bitwise_blog

TL;DR

Tools for SLN file helpottaa Visual Studion solution-tiedostojen mergeämistä. git_config_slntools säätää gitin asetukset niin, että sitä voi käyttää git difftool– ja git mergetool -komentojen kanssa.

Itse asia

Oletko sinäkin kyllästynyt ratkaisutiedostojen yhdistämiseen (merging solution files)? Pomppivatko projektien kansiohierarkiaan liittyvät rivit ympäri tiedostoa, samaten koontiversiomääritykset (build configurations), ja onko perinteisellä yhdistämistyökalulla käytännössä mahdotonta selvittää, mitä tiedostolle on oikeastaan tapahtunut? Tuloksena on vain vahinkoa koontiversiomäärityksille tai projekteja, jotka pomppivat takaisin vanhaan ratkaisukansioonsa tai ratkaisun päätasolle. Lue lisää

User-interface-ScalaFx

Vaikka IT-alalla on siirrytty paljon web-käyttöliittymiin ja -järjestelmiin, on työpöytäsovelluksilla vielä paikkansa. Käyttöliittymien kehittämiseksi on muutamia varteenotettavia alustoja, muun muassa WPF ja Qt. JVM-puolella avuksi löytyvät Swing, SWT ja JavaFx. Halusin selvittää, löytyisikö minun mieluisimmalle kielelleni, Scalalle, riittävän hyvää vaihtoehtoa.

ScalaFx on DSL-wrapperi JavaFx:lle Scalalla. JavaFx on varsin valmis alusta, ja ScalaFx:ääkin on kehitetty vuodesta 2011. Kokeillakseni alustaa valitsin perinteistä ToDo-applikaatiota monimutkaisemman ohjelman, jotta joutuisin oikeasti perehtymään kirjaston ominaisuuksiin. Lue lisää

Marmorikuulat-marble-glass

Reaktiivisista laajennuksista on Javassa useampia kirjastototeutuksia. Reactive Streams sisältää rajapinnat, jotka on tarkoitettu erilaisten reaktiivisten kirjastojen yhteistoimintaan. ReactFX on reaktiivisten laajennusten toteutus JavaFX-käyttöliittymäkirjastolle. Ehkä merkittävin on kuitenkin Netflixiltä lähtöisin oleva RxJava, joka perustuu Microsoftin alkuperäiseen Rx.NET-kirjastoon. RxJava on myös se kirjasto, mihin tämä kirjoitus keskittyy. Tässä esitellään RxJavan ohjelmointirajapintaa ja sen peruskäyttöä. Esimerkkinä käytetään JavaBean-määrittelyn mukaisen luokan sovittamista Rx:ään. Lue lisää