Skip to main content

Posts

Akka + Vaadin osa 2

Ohjelmisto on jaettu useaan OSGi bundleen. Bundlet ovat karkeasti jaettavissa viiteen kategoriaan. Näkymätyyppiset bundlet ovat itsenäisiä osia käyttöliittymää. Taustajärjestelmäbundlet toimivat fasadina taustajärjestelmille, joihin otetaan yhteyttä esimerkiksi  SOAPilla. Jaetut bundlet tarjoavat yhteistä koodia jota käytetään useissa eri bundleissa. Core-bundlet sisältävät perustoiminnallisuutta kuten Vaadin UI:n, aktorisysteemin ja navigoinnin. Domain-bundlet sisältävät sen bisneslogiikan jota käyttöliittymä tarvitsee. Presenterit lähettävät viestejä muille OSGi bundleille, jotka ottavat yhteyttä mm. SOAPilla taustajärjestelmiin. Tämä fasadina toimiva middle-layer voi pyöriä sekä samassa että eri OSGi containerissa. Ajatuksena on että näkymät lähettävät pelkästään Akka-viestejä tietämättä, mikä bundle hoitaa nämä eteenpäin. SOAP taustapalveluihin otetaan yhteyttä Akka-Camelilla. Käytössä on pieni klusteri Producereita ja Consumereita. Akka-viestit saapuvat klusteriin, jo...

AngularJS

Sain tehtäväksi tehdä käyttöliittymän tabletille. Valitsimme toteutukseksi AngularJS kirjaston. Se on saanut ristiriitaisen arvion, ainakin mikäli lukee keskustelupalstoja.[1] Tilastojen mukaan sen käyttö on kuitenkin lisääntynyt tasaisesti. [2] Vaikka olin tehnyt pienempiä kokeiluja Angularilla jo ennenkin, ensimmäisenä lähdin etsimään hyvää guideline miten Angularilla tehdään hyvää koodia. Yksi suositumpia guidelineja on John Papan, josta löytyy jopa oma kurssi Pluralsightista. Päätin ottaa sen käyttöön. Huomioitavaa siinä on mm. controllerAs tyylin käyttäminen sekä kaiken ylimääräisen (mm. taustapalvelukutsujen) siirtäminen pois controllereista. Käytin myös jonkin verran directivejä. Directiveillä voi tehdä DOM puusta helpommin luettavaa semanttisessa mielessä. Huomioita piti kiinnittää siihen, että nämä toimivat kontekstista riippumatta jos käyttää useita templateja. AngularJS sanotaan myös verrattain hitaaksi johtuen clienttipuolen HTML templatejen parsimisesta ja digest s...

Akka + Vaadin osa 1

Viestin välitykseen perustuva design patternia voi hyödyntää mutkikkaissa ohjelmistoissa erottamaan tiukkoja riippuvuuksia ohjelman eri osien välillä. Oma kokemukseni tästä on Vaadin käyttöliittymä, jonka bisneslogiikast vastaa Akka. Akka hoitaa yhteydet taustajärjestelmän palveluihin, navigoinnin sekä käyttäjäsession. Käyttöliittymässä noudatetaan MVP patternia. Presenterit ovat Akka-aktoreita. Presenterit voivat lähettää viestejä taustajärjestelmäyhteyksiä hoitaville aktoreille, toisille presentereille sekä luonnollisesti vastaanottaa notifikaatioita jotka voivat olla broadcastattuja. Presenterit siis ajetaan eri säikeessä missä "käyttöliittymäsäie" pyörii. Koodaajan ei tarvitse välittää rinnakkaisuudesta muutoin kuin interaktoissa käyttöliittymän kanssa. Presenteriaktorit ovat nimettyjä tietyn säännön mukaan, jotta nämä voivat lähettää helposti viestejä muille presentereille. Tämä mahdollistaa verrattain helpon kommunikoinnin eri käyttöliittymän käyttäjien välillä. Mi...

2014

Hienoa uutta opittua JavaScriptin perusteet, erityisesti AngularJS. Mukana kahdessa pienessä projektissa, joissa käytettiin AngularJS:ää. Kimono API, jopa niin paljon että pidin esityksen työpaikallani! OSGI, oppiminen jatkuu. Toimii hienosti Vaadinin ja Pushin (http) kanssa. SCSS. SCSS:llä on ytimekkäämpi ja monipuolisempi syntaksi. Laaja projekti voidaan jakaa semanttisesti useampaan eri tiedostoon. Clean code, 5 riviä per metodi. Vältä kommentteja! Metodin nimen pitää olla sellainen että kommentteja ei tarvita.  Design patternien tärkeys, kun koodin määrä kasvaa. Tärkeää että kaikki koodaajat hyväksyvät valitut patternit ja käyttävät niitä yhdenmukaisesti. Myös uudet kehittäjät täytyy perehdyttää miten patternia käytetään. Töiden tekeminen käyttöliittymäsuunnitelijan kanssa. Käyttöliittymäsuunnittelussakin pätee sääntö "älä keksi pyörää uudelleen". Käyttöliittymässä pitää olla tuttuja elementtejä. Tämä ei kuitenkaan tarkoita, että kaikki pitää uudelleen kie...

Android Bluetoothsocket

Bluetoothyhteyden muodostaminen koitui projektin haastavimmaksi osuudeksi. Eri Android-versiot ja puhelimet toimivat eri tavoin kun muodostetaan laiteyhteyttä. Lisäksi käytettävä Bluetoothrauta ja Android eivät tykkää toisistaan ( http://stackoverflow.com/questions/9052460/with-just-one-particular-bluetooth-spp-module-createrfcommsockettoservicerecor ). Ratkaisuna ongelmaan ohjelmassa käyttäjä voi valita mitä yhdistystapaa käytetään. Jos laiteyhteyksiä ei saa muodostettua, käyttäjä voi vaihtaa yhdistystapaa. Keräsin kaikki löytämäni bluetoothyhdistystavat, joilla jokaiseen testipuhelimeen löytyi oikeat asetukset. /** * Luo socketin laitteeseen. Huom! yhdistämisessä paljon eroja eri * laitteiden välillä. Katso API-levelit ja android versioiden vastaavuudet * Androidin nettisivuilta. * * Yhdistystapaa voi muuttaa asetuksista. Oletuksena on neljä erilaista tapaa. Kts. * @param device * * @throws IOException */ private BluetoothSocket createBluetoothSocket(Blue...

Android ja Bluetooth

Android-ohjelma, jota teen töissä toimii kaukosäätimenä erilaisille moottorinohjaimille. Kaukosäädin toimii bluetoothilla. Androidin SDK:n mukana tulee hyvä esimerkkiprojekti bluetoothin käyttämisestä, jonka pohjalta on helppo aloittaa. Androidiin bluetooth muistuttaa mitä tahansa verkkosockettia jolla on sisääntulo ja ulostulostreamit, joihin voi kirjoittaa samanaikaisesti. Bluetooth toimikin testipuhelimellani (2.1) suhteellisen pienen työn jälkeen moitteettomasti. Viime viikolla testasin laitteilla, joissa oli Androidin versiot 2.3 ja 4.0.1 ja näissä ei ollut toivoakaan saada yhteyttä testilankkuun. Ongelmat johtuivat vielä eri syistä molemmissa laitteissa. Pahinta oli että toimimattomuus oli satunnaista, joten en ollut täysin varma onko vika testilankussa vai puhelimessa. Löysin muutaman Androidin ratkaisemattoman bugiraportin, joissa viitattiin käsittelemiini ongelmiin. Ratkaisuksi annettiin muutamia väliaikaisia korjauskikkoja, mutta nämäkään eivät auttaneet tapauksessa...

LoanMoaner

Työskentelen tällä hetkellä Android kehittäjänä ja applikaatio, jota olen tekemässä, alkaa olla kohta valmis. Viimeistelen ohjelman layouttia ja mieleeni palasi unohtumattomat kokemukset LoanMoaner Meego-ohjelmasta. Osallistuimme opiskelukaverini kanssa Cybercomin järjestämään koodauskilpailuun, jossa tarkoituksen oli käyttää Qt:tä joko kännykkä tai työpöytäohjeman tekemisessä. Käytimme QML:ää käyttöliittymän tekemisessä ja C++ tietokantajutuissa ja Googlen kalenterisynkkauksessa. Samoin kuten nyt Androidissa, kumpikaan ei ollut käyttänyt käyttöjärjestelmää missään laitteessa ja N9 oli vasta muutaman kuukauden vanha. Emme oikeastaan etukäteen tienneen millaista käyttökokemusta laitteelle haetaan. Itse Meegosta ei ollut muutenkaan paljon tietoa ja silloin pidimme vielä itsestään selvänä että myös uusia Meego puhelimia on tulossa mahdollisesti eri resoluutioilla. Käyttöliittymän tekeminen on helppoa QML:llä. QML layoutin muodostus muistuttaa Androidin ja WP:n XML määrittely...