Skip to main content

Posts

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...

Instacode

Tästä lähtien koodipätkät pelkästään kuvina! http://instacode.linology.info/38678

ykj2wgs84

Viljelysuunnitteluprojektissa olennaisena osana ovat luonnollisesti pellot. Suomalaiset maanviljelijät saavat omat peltotietonsa koordinaatteineen maaseutuviraston GISistä. Teimme oman parsijan, joka parsii koordinaatit ja peltojen nimet mavin viljelijäpalvelusta. Koordinaatit ovat palvelussa YKJ tasokoordinaatistossa ja ne täytyy muuttaa karttapalveluja ja mobiiliosan GPS träkkeriä varten WGS84 koordinaateiksi. Tein muunnosoperaatiota varten melko mielenkiintoisen metodin public double[] ykj2wgs84(double E, double N) { double f = 1.0D / 297.0; double el = f / (2 - f); double a = 6378388.0; double A1 = (a / (1 + el)) * (1 + (Math.pow(el, 2) / 4) + (Math.pow(el, 4) / 64)); double E0 = 3500000.0; double lambda_0 = 27 * (Math.PI / 180); double k_0 = 1.0D; double eps = N / (A1 * k_0); double n = (E - E0) / (A1 * k_0); double h1 = ((((1.0D / 2.0) * el) - ((2.0 / 3.0) * Math.pow(el, 2))) + ((37.0 / 96.0) * Math .pow(el, 3))) - ((1.0D / 360.0) * Math....

Koodausrutiini

Olen osana maatalouden viljelysuunnitteluun liittyvässä projektissa, jossa on kaksi muuta tekijää, jotka ovat opiskelukavereitani. Projekti on lähtenyt liikkeelle syksyllä 2011 ja on sitä myöden edennyt enemmän tai vähemmän tasaisesti. Haasteena on rakentaa helppokäyttöinen ohjelmisto ei tekniselle käyttäjäkunnalle. Lisäksi viljelysuunnitteluun liittyvä lainsäädäntö on suhteellisen monimutkaista. Olen vastannut projektin ominaisuuksien valinnoista ja niiden priorisoinnista, mikä on myös johtanut siihen että olen koodannut ylivoimaisesti eniten ominaisuuksia. Epätasainen työnjako on tuttua opiskelijaprojekteissa ja miksei myös muissa projekteissa. Opiskeluvaiheessa tämä ei itseäni ainakaan haittaa: oma ammattitaitoni kasvaa lähes riskittömässä ympäristössä. Palkkaa tosin ei saa. Kokemattiomien koodaajien kesken on hankalaa löytää itseluottamusta projektin eteenpäin viemiseen. On vaikeaa saada rohkeutta tai kannustaa muita tekemään. Varsinkin jos kohde ei ole tuttu ja taskit...

Digilasku osa 5

Digilaskussa siirretään suurin osa usein tarvittava tietokannassa oleva data ohjelman muistiin. Vaatimella tämä onnistuu helposti, kunhan ymmärtää miten instanssit ja istunnot toimivat. Tavoitteena on siis hakea data aina kerran ja vain siihen liittyvään istuntoon. Vaatimessa on oma metodinsa, jolla saa nykyisen instanssin sovelluksesta, mutta se osoittautui ongelmalliseksi. Ratkaisuna käytimme ThreadLocal patternia, josta kirjoitettu lisää mm. täällä https://vaadin.com/wiki/-/wiki/Main/ThreadLocal%20Pattern Käytännössä, kun ohjelmainstanssi luodaan, se tallennetaan staattiseen muuttujaan, joka on sidottuna ainoastaan nykyiseen instanssiin (säikeeseen). private static ThreadLocal<DigilaskuApplication> instance = new ThreadLocal<DigilaskuApplication>(); Jos halutaan käsitellä jotain instanssiin liittyviä tietoja, siihen päästään käsiksi helposti mistä tahansa ohjelmaa Instanssiin liittyvän tiedon haku DigilaskuApplication. getInstance ()....

Digilasku osa 4

Digilasku on tehty täysin asiakkaan toiveiden mukaiseksi. Saimme asiakkaalta listan halutuista ominaisuuksista jotka priorisoimme. Lähdimme implementoimaan järjestelmää hyvin lyhyen (varmaankin noin kahden tunnin) suunnittelun jälkeen. Tarkoituksena oli scrum-tyyliin demota järjestelmää usein ja hakea siten lopullista muotoa. Homma ei aivan haluamallamme tavalla sujunut. Kesälomien takia pääsimme näyttämään järjestelmää vain muutaman kerran kolmen kuukauden aikana. Tämä vaikutti järjestelmään varmasti paljon. Käyttäjäpalautteen puutteen takia jouduimme arvailemaan toteutuksessa jonkin verran. Jotkut arvauksista osui oikeaan, toiset väärään. Käyttäjäkokemusten puuttuessa, teimme järjestelmän sisään oman osion, jossa käyttäjä voi kertoa parannusehdotuksista ja bugeista käytön ohessa. Tästä on ollut huomattavaa hyötyä, sillä olemme saaneet tätä kautta merkittävän osan bugiraporteista ja parannusehdotuksista. Asiakkaan mukaan kynnys yhteydenottoon on merkittävästi pienempi, ...