Azure-selain, projektipäiväkirja

Perjantaina 19.12.2003

Sairastuminen kesken viime viikon (koeviikko) viivästytti huomattavasti ohjelmointiprojektini aloittamista. Kuumetta, kurkku- ja pääkipua ynnä muuta tautia kestikin tähän saakka. Tuona aikana tein projektin eteen vain muutamien tuntien edestä kunnon työtä, luoden selaimen käyttiksen erittäin karkean rungon että voisin alkaa kokeilla HTML:n lataamista näkyville.

Javan Swingin luokista JEditorPane ja JTextPane luodut oliot ottavat todellakin vastaan URL-osoiteolion, josta ne sitten osaavat HTMLEditorKit:n pohjalta tehdä "kuvan" HTML-sivusta. Käyttämäni monimutkainen Mandrake Linuxin kotisivu ei näkynyt kylläkään oikein, vaan asettelussa oli ongelmia eikä ihan kaikkia osia ollut näkyvissä lainkaan. No, tuki onkin API:n mukaan jäänyt HTML 3.2:n tienoille.

Näin aikaansaatu kuva sivusta vaikuttaa täysin passiiviselta eikä ole käyttökelpoinen. Torstai (ensimmäinen varsinainen työpäiväni) meni siinä, kun yritin tehdä selkoa parin open source -javaselaimen monimutkaiseen lähdekoodiin toiveenani oppia, miten sivu todella voidaan kuvata niin, että esim. linkkejä voidaan käyttää. En osannut ottaa niistä kylliksi selkoa. Ajankäyttöni stressasi minua paljon, ja siirsin lähtöni kotiin tästä perjantaista huomiseksi lauantaille. Joudun aloittamaan kuitenkin melkein tyhjästä joulun jälkeen... Tulenkin takaisin Espooseen jo ennen uutta vuotta. :(

Tämän hetken toivoni on, että liittämällä JEditorPanen tai JTextPanen (päädyn kai käyttämään jälkimmäistä) muodostamaan StyledTextDocumentiin DocumentListenerin saan linkit toimimaan. Tuo kuuntelija kuuntelee muutoksia dokumenttiin, mutta saattaa kelvata myös siihen. Muuten en todellakaan tiedä kuinka linkin keskellä muuta tekstiä saisi vastaanottamaan komentoja... Mietin jopa linkkien tekemistä buttoneiksi parsetettaessa. Tai voisin vain luoda kuvan kuten aiemmin ja sivuun tökerön buttonlistan linkeistä. Nämä eivät kuitenkaan ole kovin hienoja ratkaisuja. Jos ajattelee ihan perusparsettamista, saisi JAXP:lla varmaan pian tekstiä ruutuun ainakin luettavan näköisenä, jos ei oikein aseteltuna. Graafisen käyttöliittymän tekstiselain, joka osaa leikkiä tekstin ulkonäön kanssa ja ehkä näyttää kuvat jossain päin sivua? Ush. Vasta oikea muotoilu tekisi siitä jotenkin järkevän.

Jos saisin tavan hötömöllösivut toimimaan valmiin muotoilun ja dokumenttikuuntelijan pohjalta, voisin omistautua kirjoittamaan sopivaa editorikittiä, kai. Siinäkin olisi jo kylliksi hommaa...

Aloituksen viivästyttyä näinkin pahasti, ja kun varsinaista koodia on todella vähän (reilut sata riviä), on mieli tässä vaiheessa todella matala ja tuskastuttaa koko vaikea aihe. No, mikäli projektini todella saa slaagin koodaan jonkin surkean pelin viimeisten päivien aikana. ^_^ Olen miettinyt tiedon hakemista URL-osoitteesta, ja haluan varmaan tehdä yhden säikeen joka hakee sen ennen käsittelyä. Käyttöliittymän komentoja kuuntelevaa säiettä ei saa häiritä liikaa, ettei missään vaiheessa ole napit toimimattomissa. Sikäli kun moniakaan toimintoja tulee olemaan.

Öh. Ei kai tässä vaiheessa ole muuta ylöspantavaa. Todella heikko aloitus, mutta ehkä - ihan vaan ehkä - kompensoin sitä kauhealla ahkeruuspuuskalla myöhemmin. Ne linkit, niiden tekeminen taitaa olla se todellinen haaste. Tekstin asettelustakin voi luopua ja tehdä sen vaan jotenkin lukukelpoisesti, mutta eikö nettisivu ole mitä on juuri linkkien takia? Vaikka sitten pitäisi mennä erilliseen listaan linkeistä. Kun nyt mietin, niin miten ihmeessä todellisissa tekstipohjaisissa selaimissa tehdään?

Perjantaina 2.1.2004

Joulu tuli ja meni. Palasin kotosalle ennen uutta vuotta, ja olen tällä viikolla sitten oppinut paljon. Linkkien tekeminen onnistui ihan jees, kun lopulta tajusin miten ne on tarkoitus tehdä. Miten tuo olikin jäänyt huomaamatta... Azure-selaimessani on nyt kolme luokkaa, jotka kaikki liittyvät käyttöliittymään. Ne toimivat omina kuuntelijoinaan ja tulevaisuudessa toivottavasti myös säikeinä.

Nettisivua voi vaihtaa linkin kautta tai kirjoittamalla URLin osoitepalkkiin. Koneella olevia sivuja avaa helpoimmin valikon kautta, sopiva URL käy tietysti myös. Sivujen näyttäminen on vielä valmiin HTML-tuen varassa. Uuden sivun osoite päivittyy näkyville, sivun lataaminen uudelleen onnistuu. JEditorPane ei halunnut tehdä tuota viimeksi mainittua. Muutenkin joudun työssäni käyttämään paljon monimutkaisia valmiita luokkia, joiden toiminnan ymmärtämistä varten pinnistelen ohjelmoinnin ohessa. Siihen meneekin oikeastaan enemmän aikaa kuin koodin tuottamiseen.

Seuraavaksi laitan säikeitä kuntoon ja sitten olen valmis käymään XHTML-editorisetin tekoon. Projektissani on kyllä liikaa mukana uuden opettelua... No, toivottavasti jälkeenpäin on oppinut olo.

Sunnuntaina 4.1.2004

Stressi päällä. Projektin deadline on ihan kulman takana, koodia on vain vajaat kolmesataa (tiivistä, enimmäkseen kommentoimatonta) riviä, ja säikeet kävivät hankaliksi.

Luokkien tilanne: Asettelu on aika selkeä vaihdettuani pääluokan Azuren kuuntelijaksi kaikille komponenteille. Kaksi muuta luokkaa, PageBrowser ja AddressBar, toteuttavat Runnable-rajapinnan juoksuttaen omia säikeitään. Ensin mainittu sivun lataamista (ja silti käyttöliittymän toimivuuden säilyttämistä) varten, jälkimmäinen jotta käyttäjä näkisi latausta tapahtuvan. Valitettavasti molemmat haluavat sotkeutua päivittämään ohjelman Swing-käyttiksen ulkoasua tapahtumasäikeen kanssa, mille kurtistellaan nykyään vähän kulmia. Pelkkä päivityspyyntöjen jättäminen tapahtumasäikeelle toi kuitenkin kokeiluna todella huonoja tuloksia, käyttöliittymän interaktiivisuus uutta sivua ladattaessa ei ainakaan parantunut. Ohjelman ulkoasussa olisi paljonkin hiomista, toivottavasti sille jää aikaa.

Mainitsinhan jo stressin? Se johtuu siitä, että vilkaisin projektin loppuraportin kysymyksiä ja aiempien vuosien raportteja, enkä osaa mainita omasta työstäni ainuttakaan algoritmia tai tietorakennetta! Okei, tiesin että tämä on eri juttu kuin vaikka jonkin pelin tekeminen, mutta juuri nyt pelottaa että koko viritys nähdään liian helppona tai jotain. Algoritmeja ja tietorakenteita aiheuttavia lisäominaisuuksia tuskin ehdin toteuttamaan.

Luin aihe-ehdotukseni ja projektisuunnitelmani uudestaan äsken. Kas, olinkin jo kiinnittänyt huomiota algoritmien ja tietorakenteiden puutteeseen. Hyvä huomio, niitä ei ollut L1- ja Y1-kurssien aihe-ehdotuksissakaan. Huojentaa mieltäni... Mikäli vielä XHTML-editorkitin ja ulkoasun korjailun lisäksi ehdin, saa sivuhistoria olla tärkein toteutettava lisäominaisuus. Tallentamalla sivut johonkin sydeemiin syntyy väistämättä tietorakenne. (Oooh...)

Olen Azurella surffaillessa saanut aikaan muutaman kerran ArrayIndexOutOfBounds- ja NullPointer-poikkeuksia, jotka tapahtuvat jossain syvällä APIn syövereissä (javax.swing.text.html.jotain molemmissa tapauksissa) ja jättävät todella pitkän jäljen seurattavaksi. Tuossa jäljessä ei ole mukana minun luokkiani, eli virhe Java 4.2:ssa.. Err. HTML-tuki. Stop-komennon tekeminen ei nykyisellään ole mahdollista setPage-metodin käytön takia. Se on aika iso harmi.

Palataan stressiin. HTMLEditorKit-luokkaan ja kavereihin tutustuttuani tajuan, että vaikka vielä tuo luokka sisäluokkineen olisi voinut olla uudeelleenkirjoitettavissa, nojaa se kuitenkin HTMLDocument-luokkaan (jolla on myös kavereita) joka puolestaan nojaa HTML-luokkaan, ja kyllä, kavereineen. Ei onnaa. Ei mitään mahdollisuutta tehdä noita kaikkia uusiksi Minun pitää palata joskus projektisuunnitelmani aikoihin tehtyihin kokeisiin XML-parsetuksesta. Missä se XHTMLParser-luokka olikaan...

Tiistaina 6.1.2004

Huomattavan rauhallinen olo viime kirjoitukseen nähden. Kävin eilen kokeilemassa Azurea koulun koneilla Paniikissa, kun sen nyt pienellä vaivalla saa (vielä?) toimimaan siellä vanhalla Javalla. Näytti todella huonolta Linuxissa, lähinnä valitun fontin takia. No, varasin tietysti demon paikaksi olkkarin että pääsen uudelle Java-versiolle. Ja Windowsissa tiedän miltä tämä näyttää. Harmi etten voinut kehittää tätä Linuxissa, mutta tuo Mandrake tuli asennettua omalle koneelle vasta äsken enkä ole tullut vielä laittaneeksi siihen Javaa.

Niin, rauhoittumisesta. Se tulee siitä, kun tietää 90 prosentin varmuudella, ettei vaan voi enää huonolle jutulle - sille kun ei saa itse määriteltyä sivujen koodin muotoilua - mitään ennen deadlinea. Parempi olo tuli myös sivuhistorian tekemisestä ja käyttiksen ulkoasun sekä toimivuuden kaikenlaisesta viilaamisesta tänään. Anni löysi hyvän sinisen sävyn.

Jos nyt olisi aikaa, tekisin ihan oman parserin josta yksinkertaisimmat nettisivujen elementit (tekstin kappaleet, kuvat, linkit) heitettäisiin Swing-palikoina näytölle. Nykyistä huonompaa muotoilua kaiken monimutkaisemman poisjättämisestä kyllä tulisi, mutta olisipa ainakin selkeää jos ei korrektia. Tosin tuossa lähestymistavassa ei ole koskaan potentiaalia kaikkien tagien tukemiseen, tai en ainakaan usko. Todella monimutkainen se koko HTML-häsmäkkä APissa. Se olisi sentään itse muotoiltu.

Huomenna työn palautus, taidan käyttää aikani kirjoittaakseni JavaDocit jo nyt kun aikani on loppuviikosta tiukalla. Demo jo torstaina, niin on sekin alta. Omasta työstä on selaimena vähän köyhä fiilis, tosin projektin arvostelussa puhuttiin lähinnä koodin ja olioajattelun meriiteistä, jotka minulla on aiempien töiden perusteella ihan kondiksessa.