Kirjoittaja: Piia on 19/01/2009
-Abraham Lincoln
Ja pian luovutan tämän beibin, elämäni ensimmäisen itsetehdyn ohjelman, Studio 1:n palautusmasiinaan. Vietin Ganttimaatin parissa 110 tuntia elämästäni viimeisten 3-4 viikon ajan elämästäni kokien sekä onnistumisen että epäonnistumisen tunteita. Eilen illalla hinkkasin viimeiset sekavuudet pois koodista, generoin javadoc-kommentit ja kirjoitin suurimman osan pakollisesta loppuraportistani. Koodi on nyt valmis, ei tosin täydellinen mutta toimiva kokonaisuus kuitenkin, enkä voi sille mitään että minulla on hieman haikea olo.
Ganttimaatti on nyt pieni sininen ohjelma, joka kerää projektin tiedot yhteen paikkaan, tallentaa ne tarpeen tullen tiedostoon, ja tuuttaa raportteja Exceliin. Kovin seksikäs se ei graafisesti ole, mutta varsin selkeä ja (toivoakseni) myös helppokäyttöinen.
Nyt on aika javasoturimainen olo. Eläköön ohjelmoinnin ihmeellinen maailma. Vaikka tulee vähän ikävä, olen toisaalta onnellinen että tämä projekti (ja sen myötä kurssi) on nyt ohi. Laskin, että olen tämän syksyn aikana käyttänyt ehkä noin 300 tuntia Javan koodaamiseen ja sen opetteluun. Paljon olen siinä ajassa oppinut, mutta usein muun elämän kustannuksella.
pakkauksia:4
luokkia: 25
koodirivejä: 4740
eniten koodia: 613 (Valikkorivi.java)
vähiten koodia:24 (Fontit.java)
outoja API-kirjastoja: 1
käytettyjä tunteja: n. 110
kahvia: n. 35 kuppia
Kirjoitettu paikassa koodausta, ohjelmointiprojekti, suunnittelua | Avainsana(t):: gantti, loppu, raportti | Jätä kommentti »
Kirjoittaja: Piia on 13/01/2009
Muutamia juttuja vielä pitäisi saada toimimaan:
- hulluudenpuuskassa lähdin tekemään yhteystietoja JTableen, jossa on kustomoitu TableModel ja CellEditor ja joka toimii interaktiivisesti ilman turhia (ja erillisiä) namiskuukkeleita.
- tiedoston tallennus kaataa ohjelman, jos projekti on avattu jo ennestään tallennetusta tiedostosta ja yritetään tallentaa se uudestaan täsmälleen samaan tiedostoon… Saattaa olla sellainen “nyt v*tuttaa* -virhe jos käy itselle jossain sikamaisen laajassa projektissa. Kaatumisen jälkeen tiedosto muuttuu tietekin täysin käyttökelvottomaksi. Ei hjuva.
- Perustietoraportti puuhattava, samoin yhteystiedot.
- Sitten vielä käyttöohje ja off we go!
Kuvia:

Ihan alussa ei ole mitään auki


Olen ertyisen ylpeä JSpinner-komponenteista


Kirjoitettu paikassa koodausta, ohjelmointiprojekti, suunnittelua | Avainsana(t):: jakarta poi, jtable, layout, säätäminen, tallennus, talous, tehtävät, yhteystiedot | Jätä kommentti »
Kirjoittaja: Piia on 11/01/2009
Tähän projektiin kurssin järjestäjien puolesta annettu ohjeellinen aika-arvio tuli tänään täyteen.
Ohjelma toimii, joitakin fiitsöjä vielä tehtävänä:
- yhteystiedot + JTable mmm…
- käyttöohje (valikkorivi + toiminta)
- yhteystietojen, perustietojen ja tehtävien raportointi exceliin. Taloustiedot toimii jo!
- erotuksen laskeminen (budjetti-toteuma): edellyttää String-olioiden parsimista
- layout perustietopaneelissa: pientä viilausta.
Muutoin se alkaa olla siinä. Huhhuh.
Kirjoitettu paikassa koodausta, ohjelmointiprojekti, suunnittelua | Avainsana(t):: excel, grafiikka, jtable, layout, ohje, talous, tehtävät, toimii!, yhteystiedot | Jätä kommentti »
Kirjoittaja: Piia on 10/01/2009
Perjantaina lähdin Paniikkiin kurssin projektineuvontaan tavoitteenani saada seuraavat asiat toimimaan:
- tehtävä-olion liittäminen projektiin ja tehtävien lisääminen käyttöliittymässä olevaan listaan
- listan päivitys aina kun lisätään/poistetaan tehtävä
- listasta valitun tehtävän tietojen näyttäminen viereisessä paneelissa
Assarin armollisella avustuksella ja neljän tunnin tiukan pähkäilyn tuloksena nämä kaikki asiat toimivat, ainakin jotenkuten. Ainoa bugi, mitä en saanut korjattua oli se, että jostain syystä nyt viereinen paneeli päivittyy vasta, kun sitä klikataan. Tänään lauantaina aion korjata tämän ongelman.
Miehenpuolikas suostui ohjelman koekäyttäjäksi ja antoikin arvokkaita vinkkejä:
- Olin aiemmin aikonut integroida tehtävien ja talousasioiden tiedot niin, että taloustiedot liitettäisiin aina tehtäviin. Mieheni huomautti kuitenkin, että monet kuluerät voivat hyvinkin poiketa tehtävistä asioista, ja monesti kuluja ei projektien puitteissa edes arvioida aivan tehtävätasolla. Samaten voi olla olemassa monia eri tehtäviä, joihin ei liity kustannuksia, mutta jotka on kuitenkin muistettava. Niinpä olen päättänyt toteuttaa taloustietojen käsittelyn samaan tapaan kuin tehtävienkin, eli JListilla jossa on ArrayListiin tuutatut tiedot CustomListModelilla tehtynä. Kivaa!
- Ohjetta myös kaipailtiin. Sellainen on tosin jo suunnitteilla, ainakin lopuksi kun ohjelma on niin valmis että siitä voi jotain paikkansapitävää jo kirjoittaakin.
- Raportteja on tulossa nyt kolme: projektin perustiedot, tehtävälista päivämäärineen ja vastuuhenkilöineen, sekä taloustilanne kuluerittäin (arvio, toteuma, erotus).
lauantain ohjelma on siis se, että debuggaan tehtävän päivityksen ja rakentelen talousvälilehden toimintakuntoon. Lisäksi on tarkoitus korjata graafisten elementtien sijoittelua, jotta lopputulos olisi loogisempi. Nyt osa tekstikentät ovat vähän missä sattuu, vaikka ne toimivatkin niin kuin pitää.
Lisäksi on tarkoitus generoida ensimmäinen excel-raportti. olen jo päättänyt luokkarakenteen osalta, että ExcelRaportoija.java toimii yläluokkana, jossa generoidaan excel-tiedosto ja siihen rivit ja sarakkeet sekä otsikkorivin sisältö (projektin nimi ja generointipäivämäärä kaikissa raporteissa tulee samalla tavalla). Alaluokat toteuttavat sitten kukin tämän pohjalta omanlaisensa raportit (esim. PerustietoExcelRaportoija.java tuottaa perustietoraportin jne).
Kohti ääretöntä ja sen yli!
Kirjoitettu paikassa koodausta, ohjelmointiprojekti, suunnittelua | Avainsana(t):: koekäyttö, raportointi, talous, tehtävät, toimii! | Jätä kommentti »
Kirjoittaja: Piia on 08/01/2009
Loppiainen tuli ja meni Apachen POI -kirjaston käyttöönotossa ja kokeilussa. Tuskailin tuntitolkulla uuden kirjaston ottamisessa käyttöön, vaikka luulin sen olevan varsin helppo homma, vaan ei. Kun seurasin mielestäni oikean näköisiä linkkejä ja tallensin mielestäni ne zipit koneelleni, joista oikeiden tiedostojen olisi pitänyt löytyä ja lisäsin ne Eclipsen build pathiin, niin aina vaan testiluokkani näytti kuitenkin punaista. Siis miksi helvetissä ei toimi? Kävin uudestaan varmistamassa, että paketti on viimeisin versio. Oli. Latasin uudestaan ja asensin uudestaan. Vieläkään ei Excel-tiedoston luominen vörki. Poista. Epätoivoista kuukkelointia ja harhailua netin eri foorumeilla. Miten niin muka helppo homma ottaa tuo API käyttöön? Kokeilen toista mirros-sivustoa, lataan tiedoston, siirrän oikeaan kansioon, asennan. Ei. Perkele. Lisää foorumiseikkailuja. Eclipse huutaa punaista. Kello käy; miten luulen muka saavani jotain raportteja generoitua kun en saa edes yhtä pakettia käyttöön? Koko projekti alkaa silmissäni valua viemäriin.
Sitten: jollain foorumilla sanotaan, että tiedostolla poi-3.2-FINAL.jar toimii. Siis mitä? Mulla on ihan eri tiedostot! Siis voinyjjuma… Google taas käyttöön, oikeannäköinen tiedosto löytyy lopulta Maven Repositorysta. Poistan vanhat .jar-tiedostot build pathista. Tallennan uuden tiedoston projektikansioon. Add to build path… ja toimii!
Kello jo neljä illalla. Puolen päivän äheltämisen jälkeen olin jo niin totaalisen kypsä koko projektiin, etten saanut juurikaan muuta koko päivänä aikaiseksi. Sen verran kokeilin, että sain excel-tiedoston generoitua ja tallennettua. Se toimi.
Kirjoitettu paikassa ohjelmointiprojekti | Avainsana(t):: build path, eclipse, jakarta poi, säätäminen, turhautuminen | Jätä kommentti »
Kirjoittaja: Piia on 06/01/2009
Päädyin ainakin alustavasti Käyttämään Apachen Jakarta POI HSSF usermodel -kirjastoa Excel-raportoinnin toteuttamiseen. Tähän sisältyy kaikkea kivaa, mutta onneksi Eclipseen on jo näköjään valmiiksi integroituna Ant, ettei sitä tarvitse erikseen asentaa. Toisaalta Forrestista on ainoastaan tarjolla kehitysvaiheen plugin, jonka toimintaa ei taata. Mutta katsotaan.
Kirjoitettu paikassa Uncategorized | Avainsana(t):: ant, api, excel, forrest, plugin | Jätä kommentti »
Kirjoittaja: Piia on 05/01/2009
Tänään olin kiltisti Paniikissa jo kahdeksalta aamulla, aseistettuna villasukilla, kynsikkäillä (niille, jotka eivät ole saaneet iloa tutusua ko. luokkaan: siellä on aina liian kylmä), isolla pussilla mandariineja sekä palkintosuklaapatukalla (josta saa palan aina kun jokin osio toimii. Ei, tämä ei ole enää se sama patukka kuin ihan alussa.
)
klo 16.30
Päivä koodailu takana ja jotain tuloksiakin:
Tehtävälista toimii melko lailla customlistmodelilla tehtynä. Olioita sisältävän ArrayListin tunkeminen JListiin olikin kohtuullisen työn takana. Tehtävien lisääminen onnistuu lennosta. Saan listassa aktiivisena olevan tehtävän tiedot tuotua viereiseen paneeliin. Lista näyttää tehtävistä nimet, tehtävän saa luotua antamalla nimen ja painamalla tallenna. Upeaa.
poistaminen sitävastoin ei vielä jostain mystisestä syystä johtuen toimi. Luulen, että kyse on käyttämästäni tietomallista. Asiaan täytyy paneutua myöhemmin lisää. Huomenna lisää ominaisuuksia tehtava-olioille ja tietoja näkyviin.
Sitten. Tietopaneelit päivitetään erillisillä piirra()-metodeilla, jotka poistavat vanhat paneelit ja luovat uudet tilalle vastaamaan muuttuneita tietoja. Mutta jos paneeli, jossa JList sijaitsee, piirretään aina uusiksi, kun jokin muuttuu, ei valinta pysy aktiivisena (koska se JList vaihtuu myös uuteen). Ilmeisesti refaktorointia edessä, ja onhan se ah niin mukavaa!
Ikkunan sulkeminen täytyy tehdä siten, että tehdään ensin mahdollisten avoinna olevien, tallentamattomien tietojen tallennuskysely. Toteutettaneen WindowListenerin WindowClosing-metodilla tai jollain sellaisella, kuka näitä kaikkia muistaa tai tietää.
Jakarta POI vs. JExcel on myös huomisena teemanamme tutustumismielessä.
Lisäksi yhteytietojen hallinta: joko samalla tavalla kuin tehtävien ollessa kyseessä (eli projektille liitetyt omassa listassaan, josta voi valita yhden, jonka tiedot sitten näytetään viereisessä paneelissa), tai esim. JTablella. Viimeisessä java-harjoituksessa sen tekeminen ei ollut kivaa, mutta tähän tarkoitukseen se saattaisi ehkä sopia.
Lisäksi ajankohtien hallinta mietityttää: mielessäni siinsi joku päheä kalenterikomponentti, josta voisi klikata haluamiansa päivämääriä kuten esim. lentoyhtiöiden nettisivuilla. Alustavan tutkimuksen perusteella kuitenkin vaikuttaa siltä, että tällaista komponenttia ei löydy valmiina APIsta vaan korkeintaan kolmansien osapuolien koodaamina (jotkut maksullisia :O). Eli tähänkin asiaan kaivataan jolu ratkaisu, joka osin riippuu myös siitä, minkä APIn valitsen excel-raportoinnin toteuttamiseen.
Huomenna on loppiainen. Hiljentykäämme kaikkivaltiaan Java-Apin ääreen rukoilemaan nöyrimmin valaistumista.
Kirjoitettu paikassa koodausta, ohjelmointiprojekti, suunnittelua | Avainsana(t):: excel, jakarta poi, jlist, paniikki, swing | Jätä kommentti »
Kirjoittaja: Piia on 05/01/2009
Tänäänkin oli motivaatio jotenkin kummasti kadoksissa. Käsi ylös kaikki, joiden mielestä syyslukukauden jatkuminen pitkälle tammikuuhun on luonnotonta?
Sunnuntailaiskuus iski pieneen koodariin enkä oikein tahtonut saada mitään hyödyllistä aikaiseksi. Loin hieman lisää graafista sisältöä paneeleihin ja pohdin pitkään JComboBoxin käyttöä tehtävälistan näyttämisessä – loin jopa uuden luokan ListModelin luomista varten. Ratkaisu ei vaan ollut kovin toimiva, joten roskiin vaan. Takaisin siis JListin ihmettelyn pariin, ei auta.
Asiaa ei auta koukkuntuminen Armor Gamesin Sonny 2 -peliin, jota en linkitä tänne ihan siksi että muut välttäisivät saman. Addiktiohakuiset googlatkoon.
Huomenna, 5.1. on Paniikkipäivä. Odotukset työmäärän ja saavutusten suhten ovat korkealla, varsinkin kun kumulatiivinen saldo ajankäytössä on tällä hetkellä 17h miinuksella.
Kirjoitettu paikassa ohjelmointiprojekti, yleistä javailua | Avainsana(t):: combobox, ei osaa, grafiikka, ihmettely, jlist, pöh | 1 kommentti »
Kirjoittaja: Piia on 03/01/2009
Rakas päiväkirja,
eilen koodasin ahkerasti koko päivän Paniikissa (iso tietokoneluokka Otaniemessä T-talon alakerrassa, jossa voi lähes kellonajasta riippumatta törmätä estottomasti perspiroiviin, koodia epätoivoisesti vääntäviin tietotekniikan tai informaatioverkostojen opiskelijoihin) ja sainkin jonkinasteista edistystä aikaiseksi. Ensimmäinen puoli tuntia meni siihen, että etsin koodausmotivaatiota surffailemalla satunnaisesti netissä (ei löytynyt), ja seuraavat pari tuntia siihen, että korjasin edellisenä iltana pikaistuksissani tekemiäni virheitä.
Muistisääntö 1: ÄLÄ KOODAA ILMAN SUUNNITELMAA. Et voi vain istua alas koodaaman nopeasti paria juttua. Et vaan osaa, koodi menee rikki ja tulee paha mieli.
Muistisääntö 2: Suunnittele. Oikeasti. Katso myös kohta 1.
Muistisääntö 3: Perustoiminnallisuus ensin – hienot kilkkeet myöhemmin. On toki kiva puuhastella helppojen ja kivojen asioiden parissa ja unohtaa, ettei logiikka vielä ihan toimi, mutta siitä seuraa vain nolla todistukseen.
Ohjelman peruslogiikkaa tuli muokattua pienen pähkäilyn jälkeen niin, että proejktitietoa sisältävät paneelit piirretään joka kerta uudelleen, kun uusi projekti avataan. Loogista? Kyllä. Itsestäänselvää? Varmasti kaikille muille paitsi alkuun minulle itselleni. Alussa luodaan vain tyhjät paneelit, koska haluan, että ohjelma aukeaa ilman mitään auki olevia kenttiä. Projekti ladataan vasta, kun käyttäjä joko avaa uuden projektin tai avaa jo aiemmin tallennetun. Tätä varten täytyi vaihtaa paneelien luontipaikkaa siten, että niillä on erillise piirra()-metodit, jotka luovat sisällön aktiivisen projektin perusteella ja kutsuvat lopuksi metodia repaint().
Toinen päivän haaste oli saada projektin tallennus tiedostoon ja tiedostosta lukeminen toimimaan, sekä tietenkin tietojen tuominen näkyviin itse käyttöliittymään. Serialisointi aiheutti aika paljon ihmetystä, koska periaate on yksinkertainen ja sen olisi pitänyt olla suht helpo toteuttaa. Vaan ei. Jostain syystä en saanut tiedoston tallentamista nimellä toimimaan tämän vuoksi: java.io.NotSerializableException: javax.swing.plaf.metal.MetalFileChooserUI. Ilmeisesti tiedoston nimen antaminen save as -dialogissa ja sen lähettäminen parametrina tallennusmetodille aiheutti sen, että serialisointi ei toiminut. Niinpä ainoaksi vaihtoehdoksi ainakin toistaiseksi jäi tallennuksen toteuttaminen riisuttuna versiona, eli projektin mukaan nimettyyn tiedostoon suoraan. Aion vielä perehtyä asiaan tarkemmin, jos aikaa jää, mutta toistaiseksi näin että pääsen eteenpäin.
3.1. eli tänään on tavoitteena 8 tunnin työpanos, mikä vaikuttaa varsin epätodennäköiseltä ottaen huomioon, että heräsin vasta klo 11, kello on nyt 14 ja motivaatio taas vähän…hukassa. Aion kuitenkin tsempata ja saada edes jotain aikaan. Tavoitteita:
- JExcelin APIn lukeminen ja raportoinnin suunnittelu (ja eka raportti testimielessä)
- tietokenttien lisääminen ja niiden tietojen käsittely
Kirjoitettu paikassa koodausta, ohjelmointiprojekti, suunnittelua | Avainsana(t):: excel, jexcel, raportointi, serializable, suunnittelun puute, tallennus, toiminnallisuus | Jätä kommentti »
Kirjoittaja: Piia on 01/01/2009
Tänään kolme tuntia turhaa työtä. Taisi mennä vain koodi huonompaan suuntaan kun väsyneenä ja ilman kunnollista etukäteissuunnittelua lähti koodia rukkaamaan.
(Edit: ensin kannattaa suunnitella mitä tekee eikä vaan “koodata äkkiä paria juttua”. Se ei vaan toimi, tulee paha mieli ja seuraavan päivänä käytät aikaasi siihen, että saat edellisenä iltana tekemäsi virheet korjattua.
Lisäksi koodia on refaktoroitava, sillä uuden projektin avaaminen ei ehkä sittenkään juuri nyt toimi aivan optimaalisesti: avattaessa Ganttimaatti se luo uuden projektipaneelin ja kaikki muutkin paneelit, koska ilmeisesti kaikki grafiikka on luotava Evetn Dispatching Threadista. Niinpä kaikki tarpeelliset komponentit on samalla luotava. Outous tulee tässä: jos Gantissa on jo alussa auki kenttiä, joinin tietoa voi syöttää, miksi projektille annetaan nimi ja Projektin konstruktoria kutsutaan vasta sitten, kun käyttäjä valitsee ensimmäistä kertaa valikosta “Uusi”? Aivan, siinä ei ole mitään järkeä.
Vaihtoehto 1: kysytään alussa, halutaanko avata uusi vai jo tallennettu projekti.
Vaihtoehto 2: luodaan uusi tyhjä projekti Mikkisoft-tyyliin.
Kirjoitettu paikassa koodausta | Avainsana(t):: ei osaa, pöh, suunnittelun puute, vänkä | Jätä kommentti »