Sisältö:
Ohjelman kuvaus
Teknisen toteutuksen kuvaus
Projektityöskentelyn kuvaus
Tehtyäni aihe-ehdotuksen XHTML-selaimesta olen edelleen etsinyt opettavaa tietoa ja tutoriaaleja HTML:n ja XML:n käsittelemisestä Java-kielessä. Molemmat ovat vaikeita löytää. Valitsemani aihe on osoittautunut työlääksi, kurottaahan se Y1- ja L1-kurssien aihelistoilla nähtyä ehdotusta HTML-katselimesta huomattavasti pidemmälle.
Täten olen miettinyt tapoja rajata työtaakkaani, että saan ainakin jotain valmiiksi joululoman aikana. Yritän tehdä mahdolliset rajaukset selväksi tässä projektisuunnitelmassa. Käytäntö saa opettaa kokemattomalle, mikä oikeastaan on toteutettavissa annetun ajan ja opittujen taitojen puitteissa.
Kuten kirjoitin aihe-ehdotukseen, haluan ohjelmoida XHTML-kielellä kirjoitettuja nettisivuja näyttävän selaimen. Toiminnallisuus esim. HTML:n kanssa ei ole olennaista. Selaimet ovat itse kunkin käytössä päivittäin, joten tätä lukeva tietää varmasti minkälaiseen sovellukseen viittaan. XHTML-kieltä valottaakseni lainaan aihe-ehdotustani:
"Nykyään on olemassa XML tietosisällön kuvailua varten ja HTML sisällön näyttämistä ja asettelemista varten. XML vaatii tarkkaa merkintätapaa ja sääntöjen noudattamista. HTML-koodia on vähän kaikenlaista ja -tasoista, ja tietokoneiden nettiselaimet näkevät paljon vaivaa pyrkiessään näyttämään kaiken hyvännäköisessä tai edes luettavassa ulkoasussa. Kännyköiden, kämmentietokoneiden ja muiden kannettavien pienlaitteiden selaimilla ei välttämättä ole tähän tehoja tai varaa käyttää virtaa mihinkään tarpeettomaan. Yhdistämällä HTML:n ja XML:n vahvuudet saadaan merkintäkieli, jolle on käyttöä nyt ja tulevaisuudessa: XHTML.
XHTML vaatii tarkkaa, standardoitua koodausta. Tagien on oltava oikein sisällytettyjä, pienillä kirjaimilla (kuten XML:ssä), ja ne täytyy sulkea. Dokumenttien täytyy olla selkeästi muotoiltuja. XHTML:llä tehtyjä sivuja kykenevät lukemaan kaikki XML:ää ymmärtävät laitteet, ja kunnes muun maailman selainkanta päivittyy, voidaan sillä kirjoitettavista sivuista tehdä myös vanhempien sovellusten kanssa toimivia."
Tällä hetkellä kaikenlaista XML-kieltä ymmärtävän sovelluksen tekeminen tuntuu kaukaiselta haaveelta. Yrittäessäni opetella edes aiheen perusteita olen törmännyt väistämättä huomattavasti enemmän serveripuolen ohjelmistojen laatimisesta tietäville tarkoitettuihin artikkeleihin. XHTML:ää voi kuitenkin toivoakseni myös käsitellä kuin HTML-kieltä, vaikkei ratkaisu siten olekaan yhtä joustava.
Saatuani aikaiseksi toimivan peruskäyttöliittymän selaimelleni (menu, työkalunäppäimet, selausikkuna) aion pyrkiä ymmärtämään XHTML-sivuja. Tekstin (ja linkkien) näytölle muovaaminen on ensimmäinen päämääräni, sitten voin miettiä kuvien mukaan tuomista ja sivujen asettelua, missä odotan kohtaavani todelliset vaikeudet. En usko, että minun kannattaa miettiä objektien (esim. appletit) näyttämistä, skriptien suorittamista tms. tämän projektin puitteissa. Selailun tuomista tekstiselain-tasoa pidemmälle (kuvat ja asettelu, vaikka jälkimmäinen on kyllä joissain tekstiselaimissa hyvinkin tehokasta) hankaloittaa edelleen se, että CSS-tyylitiedostoja voi odottaa käytettävän usein XHTML:n yhteydessä. No, niiden kimppuun käymistä pitää harkita sitten kun tietää miten aikaa ja vaivaa on siihen asti kulunut.
Mikäli haluamieni ominaisuuksien toteuttaminen osoittautuu liian vaikeaksi, minulla on pari vaihtoehtoa. Voin tyytyä tekemään tekstiselaimen, jossa siinäkin olisi vielä todennäköisesti paljon kaikenlaista tehtävää. Tai voin jättää sivujen muotoilun erään puutteellisesti HTML:n versiota 3.2 ymmärtävän Swingin käyttöliittymäkomponentin harteille. Vaikka XHTML-sivujen näyttäminen täysin oikein vaatiikin todellisuudessa HTML 4.01:tä tukevan selaimen, riittäisi tämä näyttämään sivuja paljon paremmin kuin oma tekstiselainratkaisu. Varsinkin jälkimmäisessä tapauksessa työn painopiste siirtyisi siten sovelluksen muihin ominaisuuksiin, jotka muuten ovat toissijaisia.
Selaimeen ei ole kovin vaikeata keksiä toteutettavia toimintoja. Sivuhistoria, sivujen tallentaminen, tulostus, kirjanmerkit, hakuominaisuudet, kaikenlainen käyttöliittymän muokkaaminen halutun näköiseksi, lähdekoodin näyttäminen editoitavaksi, hiirieleet... On hyvä miettiä, mikä on käyttöliittymäohjelmointia ja mikä ei. Ainakin viisi ensiksi mainitsemaani vaativat toivottavasti jotain muutakin. Näistä jotkut ovat varmasti erittäin toteutuskelpoisia.
Yleisesti ohjelmien arkkitehtuurissa on usein varsinaisen työn tekevä osa ja edellisen käyttäjälle mallintava osa (käyttöliittymä). Selaimessa tärkeintä on sivujen koodin tulkitseminen että tiedetään miten ne tulee näyttää käyttöliittymän välityksellä käyttäjälle. Sivun "kääntäminen" on siis tehtävä, josta näkyvät ulospäin vain tulokset.
Ohjelma toteutetaan Java-kielellä ja todennäköisesti enimmäkseen kotikoneella XEmacs:lla tai NetBeans IDE:llä. Projekti tulee todennäköisesti käyttämään varsin uusia Java APIn luokkia, joten sen kehitys koululla ei välttämättä ole edes mahdollista. (T-talon koneisiin ei ole asennettu uusimpia Java-versioita, päivitykset kai tehdään tarvepohjalta.) Tammikuussa täytyy esittelykoneella olla tuore Java-versio. Selaimen käyttöliittymä tulee käyttämään ainakin kahta säiettä voidakseen ottaa vastaan komentoja myös ladatessaan uutta sivua. Toteutuksen suurin haaste on saada selain ymmärtämään XHTML:ää ja muotoilemaan sivut oikein nähtäville. Tämän tekeminen XML-näkökulmasta tuntuu lähes mahdottomalta projektin puitteissa. HTML-tyylisessä toteutuksessa se vaatinee joidenkin (ainakin yhden?) laajojen valmiiden Java-luokkien uudelleenkirjoittamisen haluttuun muotoon. Eräiden Swing-komponenttien käyttöä koskeva tutoriaali mainitsee tämän yksinkertaisen kuuloisesti: "To support a custom text format, implement an editor kit that can read, write, and edit text of that format." Muita ohjeita tämän tekemiseen ei sitten oikeastaan olekaan löytynyt. Mainitsin vaihtoehtoisia etenemissuuntia projektille ohjelman kuvauksessa.
Ohjelman luokkarakennetta kuvaavaa UML-kaaviota en vielä kykene XHTML:n käsittelyn osalta laatimaan. Käyttöliittymän rakennekaavion suunnittelen tekeväni sen jälkeen, kun tämänhetkisen ohjelmointitehtävä viitosen (Graafinen käyttöliittymä) palaute on saatu ja tiedän miten paljon haluan käyttää esim. sisäluokkia. Myös esseetehtävä viisi (Säikeet Java-kielessä) tukee hyvin projektini suunnittelua.
Kiinnitin aihetta valitessani huomiota siihen, mitä asioita käymme kurssilla viimeisenä läpi, koska halusin käyttää oletettavasti kehittyneimpiä opettelemiamme asioita. Yksi tärkeä ohjelmoinnin osa-alue ei valitettavasti pääse selaimessa aivan tyydyttävästi esille. Toivoisin projektini vaativan hiukan enemmän tietorakenteiden ja algoritmien miettimistä. Jo aiemmin mainitsemassani, pohjustavassa Y1/L1-kurssin aihe-ehdotuksessakaan ei kuitenkaan mainittu niistä mitään sen kummempaa. Jää nähtäväksi josko saan jostain hyviä ideoita. Onneksi noita on saanut tehdä jo aika kivasti kurssin ohjelmointitehtävissä.
Mainitsen vielä lopuksi, että etsiessäni lähteitä tämänkaltaisista ohjelmointitöistä olen löytänyt kaksi Javalla toteutettua Open Source -selainta. Ensimmäinen on Armond Avanesin XBrowser. Toinen on TKK:n Tietoliikenneohjelmistojen ja multimedian laboratorion X-smiles. Vaivaa nähden voin todennäköisesti oppia näistä paljonkin. En aio käyttää suoraan kopioitua koodia, varsinkaan edes ymmärtämättä miksi se tekee mitä tekee. Ja vaikka valmiiden luokkien käyttö on ehdottomasti yksi olio-ohjelmoinnin suurimpia hyötyjä, on tässä kai syytä suhtautua siihenkin varauksella.
Aikataulustani: Tänään on 30.11.2003. Syysluentokausi päättyy 5.12. ja viimeinen tenttini on matematiikan 3. välikoe 11.12. Ennen tuota tenttiä en aloita varsinaista koodausta, vaikka varmasti etsinkin tietoa aiheesta ja opiskelen tietysti javaa edellä mainitsemieni kurssin tehtävien muodossa. Aloitan työn 12.12 ja teen sitä viikon ajan (19.12. saakka) noin kuusi tuntia päivässä (yht. 42 h). Päivittäinen työmäärä voi olla paljonkin suurempi, mutta tuo keskiarvo olkoon vähimmäisvaatimukseni. 19. päivä lähden viettämään joulua perheeni luo, missä minulla tuskin on mahdollisuutta tehdä mitään projektin eteen. Aion palata Espooseen ja projektin pariin juuri uuden vuoden edellä, esim. 29.12. Edellä mainittuun työtahtiin saan vielä kasaan noin 54 h ennen kuin on aika palauttaa projektityö. Jos pystyn tekemään työtä ainakin tämän aikataulun vaatimuksien mukaan, ehdin hyvin saada kasaan ohjeelliset 80 työtuntia. Se on sitten toinen juttu, missä vaiheessa juuri tämä kyseinen työ on 80 tunnin kohdalla. Odotan käyttäväni enemmän aikaa kuin olen tässä suunnitellut.
Ohjelmasta laaditaan JavaDoc-kommentit, joista muodostetaan API-dokumentaatio. Harkitsen myös projektipäiväkirjan pitämistä, jotta etenemistä ja todellisia ongelmakohtia olisi jälkeenpäin helpompi analysoida.