Skip to main content

Posts

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, ...
Tutkin diplomityössäni älypuhelinten hyödyntämistä maatalouskäytössä. Tutkimukseen liittyy GPS träkkäysohjelma, jota olen ollut kehittämässä jo lähes vuoden. Ohjelman tarkoitus on automatisoida maatalouteen liittyvän tyokirjanpidon muodostamista Ohjelman on pystyttävä seuraavaan maanviljelijän liikkeitä koko vuorokauden. Ohjelman virrankulutus on pidettävä sellaisena, ettei se kuluta koko akkua loppuun ainakaan kymmeneen tuntiin. GPS palvelu on siis pystyttävä katkaisemaan väliajoin eikä muu puhelimen käyttö saa katkaista träkkäystä. Android-implementaatiossani GPS kuuntelusta vastaa oma Androidin Service. Servicet sinänsä eivät ole erityisen soveltuvia tähän käyttöön, koska ne ajetaan samassa säikeessä muun ohjelman (käyttöliittymä) kanssa ja myös Servicen säie lopetetaan, jos laite menee näppäinlukkoon tai on käyttämättä jonkin aikaa. Ongelma ei poistu, vaikka Servicessä luotaisiin uusia säikeitä. Ratkaisuna käytin WakeLockia, joka mahdollistaa näytön sammumisen ja ...

Digilasku osa 3

Digilaskussa on jo nyt yli kaksikymmentä erilaista lomaketta. Syötekenttiä on noin 200. Yksi digilaskun onnistuneimpia osioita on näiden hallinta: syötekenttien validointi on pysynyt kohtuullisen hyvin kasassa. Jokainen lomake on omassa luokassaan, joka perii Vaatimen Form-luokan. Laskujen, lähetteiden ja tarjousten formit perivät vielä tätä ennen abstraktin luokan, joka määrittelee näille yhteiset ominaisuudet. Lähes kaikki formit käyttävät suoraan Vaatimen datamallia, eli Java Beanit tai POJOT asetetaan suoraan formeihin. Datan tallennus onnistuu siis helposti ilman manuaalisia parsimisia, sillä formista tulee suoraan ulos ehjä objekti tietokantaan tallennettavaksi. Formin syötekentissä käytetään useita erilaisia validaattoreita, jotka ovat myös omissa luokissaan. Syötekenttiä on yleistetty aina kun mahdollista, jotta vältytään perusvalidointien turhalta toistolta syötekentän luomisessa. Vaatimen vahvuuksia on ehdottomasti monipuolinen syötekenttien validointi. Päädyi...