Henkilökohtainen harjoitustyö on pakollinen osa opintojakson suorittamista. Harjoitustyön toteuttaminen etenee osana harjoituksia, mutta opiskelijalta myös itsenäistä työskentelyä harjoitustilaisuuksien ulkopuolella. Harjoitustyön lopputuloksena syntyy yksittäiset perus- ja lisäominaisuudet ja niihin liittyvän tiiviin dokumentaation yhteen kokoava koodiportfolio (ks. koodiportfolion sivupohja). Täsmennys 28. helmikuuta 2008: Poikkeuksena ovat harjoitustyönsä Djangolla tai Ruby on Railsilla tekevät opiskelijat, jotka raportoivat ominaisuuksien toteutuksesta opintojakson blogissa eivätkä siis koosta erillistä portfoliota.

Harjoitustyön minimivaatimuksena on verkkopalvelu, jonka sisältöä on mahdollista lisätä, muokata, poistaa ja listata Web-käyttöliittymän avulla. Harjoitustyön toteuttamisesta jaetaan kahdenlaisia pisteitä. Perusominaisuuksista jaettavat pisteet lasketaan suoraan opiskelijan keräämään kokonaispistemäärään. Lisäominaisuuksista jaettavilla pisteillä korvataan tentin heikoin tehtävä siinä tapauksessa, että tämä on opiskelijan kannalta suotuisaa. Erikoistapauksena lisäpisteillä voi myös korvata peruspisteet. Tämä mahdollistaa pisteiden keräämisen viimeisen harjoitusviikon aikana siten, että opintojakson suorittaminen on mahdollista “etäopiskeluna” ilman viikottaista läsnäoloa TTY:llä. Jokaisen työn on toteutettava vähintään seuraavat ominaisuudet:

  • sisäänkirjautuminen,
  • uloskirjautuminen (”Kiitos ja tervetuloa uudestaan”),
  • listaus sisällöstä,
  • uuden sisältöartikkelin lisääminen ja
  • sisältöartikkelin tietojen muokkaaminen.

Harjoitustyön pohjana saa hyödyntää aikaisemmin esimerkiksi harrastusprojektina toteutettua sovellusta siinä tapauksessa, että sitä ei aikaisemmin ole miltään osin käytetty osana mitään opintosuoritusta. Vanhan työn käyttäminen ei kuitenkin anna erivapauksia pisteiden jakamisen perusteisiin: ominaisuuden on tässäkin tapauksessa vastattava täysin annettua kuvausta.

Huomaathan, että harjoitustyön tuloksena ei välttämättä tarvitse syntyä tuotantokelpoista verkkopalvelua vaan erilaisten ominaisuuksien kehittelyä ja esittelemistä tukeva prototyyppi. Tuotantokelpoisen verkkopalvelun toteuttaminen prototyypin pohjalta onnistuu esimerkiksi hypermedian erikoistyön puitteissa.

Osallistujien tunnusten toiminta taataan toukokuun 2008 loppuun saakka, joten harjoitustyöhön liittyvistä tiedostoista on syytä ottaa tarvittavat varmuuskopiot. Harjoitustyön säännöllinen varmuuskopiointi esimerkiksi TTY:n opiskelijapalvelimille on muutenkin erittäin kannustettavaa. Tietokannan varmuuskopiointi (tallentaminen tiedostoon) onnistuu phpMyAdmin-työvälineellä. Harjoitustöistä ei lähetetä sähköistä palautetta. Halukkaille järjestetään mahdollisuus sanallisen palautteen saamiseen työstä. Palautetilaisuuksien ilmoittautumislistat julkaistaan kevään kuluessa.

Esimerkkejä aiheista

Opiskelija saa valita harjoitustyönsä aiheen vapaasti, luonnollisesti hyvän maun puitteissa: Esimerkkejä aiheista:

Kirja/DVD/CD/LP-yhteisö Palvelu, jossa yhteisön jäsenet voivat julkaista oman kirja-, DVD-, CD-, LP- tai YMS-kokoelmansa tiedot yhteisön muiden jäsenten saataville. Kokoelman sisältöartikkeleita voidaan lisätä ja poistaa ja niiden tietoja voidaan muokata. Sisältöartikkeleihin liitetään mukaan metatietoa (tekijä, tyylilaji, julkaisuvuosi, …), jota voidaan käyttää apuna erilaisten listausten ja näkymien tuottamisessa tai assosiatiivisten linkkien muodostamisessa. Metatietoja voidaan käyttää myös esimerkiksi yksinkertaisen suosittelijajärjestelmän toteuttamiseen. Ideoita voi etsiä vaikkapa tutusta last.fm-palvelusta.

Verkostoitumispalvelu Verkostoituminen muuttui Webin kuumimmaksi ilmiöksi Facebookin suosion myötä. Muita esimerkkejä verkostojen rakentamiseen tarkoitetuista palveluista ovat muun muassa LinkedIn ja Googlen orkut.com. Vaikka Facebookin kanssa lieneekin turha kilpailla, käy yksinkertaisen verkostoitumispalvelun toteuttaminen hyvästä harjoituksesta.

Koostepalvelu (mashup) Olennaisen osan nykyaikasta Webpalvelutarjontaa muodostavat erilaiset koostepalvelut (mashup), jotka koostavat, yhdistelevät, jalostavat ja rikastavat eri lähteistä kerättyä tietoa. Keskeisessä roolissa koostepalvelujen toteuttamisessa ovat verkkopalvelujen tarjoamat rajapinnat (Web API), joiden tuella tietoja voidaan ohjelmallisesti siirtää verkkopalvelujen välillä. Erityisesti erilaiset paikkatiedon ja karttojen yhdistelmät (vrt. google maps mashup - Google-haku) ovat tällä hetkellä kehityksen aallonharjalla kiitävien Web-soveltajien kiinnostuksen kohteena.

Edellä mainittuja aiheita voi vapaasti muokata siten, että ne sopivat paremmin tekijän omiin tarpeisiin. Erityisen suositeltavaa on keksiä jokin ehdotettuja parempi aihe. Olisiko esimerkiksi O’Reillyn Web 2.0 -artikkelista tai Hintikan opuksesta Web 2.0 — johdatus internetin uusiin liiketoimintamahdollisuuksiin (pdf-muodossa) kaivettavissa inspiraatiota?

Toteutusteknologiat

Harjoitustyö voidaan toteuttaa seuraavilla vaihtoehtoisilla teknologioilla:

PHP ja MySQL Harjoitustyö julkaistaan hmopetus.ee.tut.fi-koneelle ja pisteet kerätään normaaliin tapaan harjoituksissa. Toteutustyön tukena saa vapaasti käyttää CakePHP-sovelluskehystä ja muita avoimen lähdekoodin ohjelmistokomponentteja.

Django/Ruby On Rails Harjoitustyö suoritetaan itsenäisesti siten, että opiskelija asentaa kehitysympäristön omalle koneelleen ja raportoi harjoitustyön etenemisestä blogissa.

Nostamalla vaihtoehtoisia toteutusteknologioita esiin halutaan sekä herättää keskustelua Web-sovellusten toteutusteknologioiden valinnasta että tarjota Hypermedian ohjelmointia suorittavilla PHP-konkareille uusia haasteita myös harjoitustyön osalta.

Perusominaisuudet

Perusominaisuudet ovat verkkopalvelun ydintoimintoja. Kunkin perustoiminnon toteuttamisesta myönnetään yksi piste. Perusominaisuuksista jaettavat pisteet sisältyvät opintojakson kokonaispistemäärään (ks. Suorittaminen). Perusominaisuuksien kuvaukset seuraavat.

5. harjoituskerta | sisäänkirjautuminen / käyttäjäntunnistus : Käyttäjältä kysytään käyttäjätunnus ja salasana. Mikäli vastaavat tiedot löytyvät tietokannasta, käyttäjän tiedot lisätään istuntoon ja käyttäjä ohjataan palvelun pääsivulle. Tunnukset ja salasanat saa tässä vaiheessa luoda suoraan tietokantaan. Salasana on oltava tietokannassa salatussa muodossa. Tarkempi kuvaus toiminnallisuudesta on esitetty harjoituksen 3 tehtävänannossa.

7. harjoituskerta | rekisteröityminen : Käyttäjältä kysytään nimi, yhteystiedot, käyttäjätunnus ja salasana. Syöte tarkastetaan ja virheistä ilmoitetaan käyttäjälle samassa näkymässä, johon virheellinen syöte alunperin annettiin. Pakollisia tietoja ovat ainakin nimi, käyttäjätunnus ja salasana. Käyttäjätunnuksen on oltava yksikäsitteinen. Lisäksi kysytään jokin sellainen tieto, jonka muodon tarkastamiseen käytetään säännöllisiä lausekkeita. Tällainen tieto voi olla esimerkiksi sähköpostiosoite, kotisivu tai puhelinnumero. Tarkempi kuvaus toiminnallisuudesta on esitetty harjoituksen 6 tehtävänannossa.

9. harjoituskerta | kieliversiointi : Verkkopalvelun yleisten käyttöliittymätekstien erottaminen siten, että palvelusta voidaan tehdä uusia kieliversioita kääntämällä kielitiedosto ja että kieliversion vaihtamiseen voidaan toteuttaa suoraan sovelluksen käyttöliittymästä käytettävä toiminto (”Suomeksi/In English”). Esimerkkitoteutuksen tekeminen vähintään yhteen sovelluksen käyttöliittymistä. Tarkempi kuvaus toiminnallisuudesta on esitetty harjoituksen 8 tehtävänannossa.

10. harjoituskerta | hakutoiminto : Yksinkertaisen sanahaun tai metatietojen perusteella järjestettävän taulukkomuotoisen listauksen toteuttaminen. Sanahaku voidaan toteuttaa suoraan tietokannan avulla (SQL-kielen LIKE-avainsana). Listaus on voitava järjestää kunkin metatiedon mukaan sekä nousevaan (ascending) että laskevaan (descending) järjestykseen. Lisäys 5. toukokuuta: hakutoiminnon voi esitellä myös 11. harjoituskerralla.

11. harjoituskerta | virheilmoitukset, viestit ja opasteet : Esimerkkitoteutus käyttäjän syötteen kattavasta tarkastamisesta ja kuvaavien virheilmoitusten näyttämisestä virhetilanteissa järjestelmällisesti sovelluksen yksittäisessä toimintokokonaisuudessa (esimerkiksi rekisteröityminen). Viestit onnistuneista muutoksista sovelluksen tilassa (esimerkiksi “Levyn tiedot lisätty”).

11. harjoituskerta | validi HTML ja CSS : Sovelluksen toteuttaminen siten, että HTML-merkkaus ja CSS-tyylit ovat valideja verkkopalvelun näkymissä. Jokainen toteutettava näkymä menee siis läpi W3C:n validaattoreista, ks. HTML-validaattori ja CSS-validaattori.

Lisäominaisuudet

Lisäominaisuudet ovat edistyneempiä ominaisuuksia, joita jokaisesta verkkopalvelusta ei välttämättä löydy. Lisäominaisuuksista kerätyt pisteet vastaavat perinteisiä bonus- tai porkkanapisteitä: ne korvaavat huonosti menneen tenttitehtävän mikäli tämä on opiskelijan kannalta edullista. Lisäominaisuuksista voi kerätä korkeintaan kuusi (6) pistettä. Huomaa, että ominaisuuksista on jaossa joko yksi tai kaksi pistettä.

Pisteet kaikista lisäominaisuuksista jaetaan viimeisen harjoitusviikon aikana eli viikolla 19 (7. ja 8. toukokuuta).

Lisäominaisuuksien kuvaukset seuraavat:

Facebook-integraatio (2 pistettä) Facebook-palvelun suosio perustunee suurelta osin mitä erilaisimpiin sovelluksiin, joita käyttäjät voivat ottaa käyttöönsä ja tyrkyttää toisilleen. Facebook tarjoaa kehittäjille joukon rajapintoja ja opasmateriaalia uuden sovelluksen toteuttamisen tueksi.

Folksonomioihin perustuva taggaaminen (2 pistettä) Nimihirviö viittaa tyypilliseen Web 2.0 -palvelujen piirteeseen, joka mahdollistaa käyttäjien vapaasti määrittelemien avainsanojen liittämisen palvelun tietosisältöön. Merkinnät näkyvät kaikille palvelun käyttäjille ja niitä käytetään esimerkiksi tietosisällön listaamiseen. Esimerkiksi Last.fm ja del.icio.us soveltavat tageja monipuolisesti. Pisteiden kerääminen edellyttää myös suosittujen avainsanojen suosittelumekanismin toteuttamista (”Popular tags for this artist”, “recommended tags”).

Edistynyt hakumekanismi (2 pistettä) Näkymäpohjaisen haun toteuttaminen vähintään kolmen sisältöartikkeleista kerättävän metatiedon (esimerkiksi esittäjä, tyylilaji ja julkaisuvuosi) perusteella. Näkymäpohjaisen haun idea käydään läpi myöhemmin luennoilla. Esimerkkiä toiminnallisuudesta voi katsoa vaikkapa MuseoSuomesta (hiit.fi). Vaihtoehtoisesti dynaamisen tagipilven toteuttaminen.

Uutispalvelu (2 pistettä) Verkkopalvelussa tapahtuvien muutosten tietojen julkaiseminen RSS-virtana vapaavalintaisessa muodossa. RSS-virrassa voidaan esimerkiksi julkaista viisi viimeisintä palveluun lisättyä levyä. Mallia RSS-virrasta voi ottaa esimerkiksi tämän sivuston RSS-uutisvirroista. Hyvä johdanto erilaisiin RSS-muotoihin: What is RSS? (Mark Pilgrim).

Mukautuvuus (2 pistettä) Vähintään kahden rinnakkaisen version toteuttaminen verkkopalvelusta siten, että sitä voidaan käyttää työaseman lisäksi esimerkiksi matkapuhelimen, kämmenlaitteen tai vaikkapa digi-tv -päätelaitteen XHTML-selaimella. Huomaa, että pelkkä CSS-tyylitiedoston vaihtaminen ei riitä pisteiden saamiseen. Räätälöityjen versioiden on erottava toisistaan myös HTML-merkkauksen osalta. XHTML Basic (w3.org) on hyvä lähtökohta vaihtoehtoisille laitteille tarkoitettujen versioiden toteuttamiseen, digi-tv tosin tukee ainakin teoriassa erityistä DVB-HTML -kieltä (mhp.org).

AJAX-käyttöliittymä (2 pistettä) AJAX-teknologian soveltaminen verkkopalvelun käyttöliittymän toteutuksessa. AJAX-toteutus voi liittyä esimerkiksi käyttöliittymän dynaamiseen päivittämiseen tai käyttäjän syötteen välittämiseen palvelimelle tarkastettavaksi ja virheellisestä syötteestä ilmoittamiseen. Myös tagimekanismit (ks. tageja käsittelevä artikkeli Wikipediassa) ovat pääsääntöisesti AJAX-perustaisia.

Web-ohjelmointirajapinnan (Web API) soveltaminen (2 pistettä) Vapaavalintaisen verkkopalvelun (vaikkapa del.icio.us tai Google Maps) ohjelmointirajapintaa hyödyntävän ominaisuuden toteuttaminen.

Toimivat kirjanmerkit (1 piste) Verkkopalvelun toteuttaminen siten, että käyttäjät voivat tehdä näkymiin kirjanmerkkejä tai lähettää näkymien osoitteita toisilleen myös sisäänkirjautumista vaativiin osioihin. Sisäänkirjautuminen on toteutettava siten, että palvelu pyytää tarvittaessa käyttäjää kirjautumaan sisään ja sisäänkirjautumisen onnistuessa ohjaa käyttäjän suoraan oikeaan näkymään. Kokeile esimerkiksi valita linkki TTY:n Päivän pakit -palveluun. 1

Parametrittomat URI-tunnisteet (1 piste) Verkkopalvelun URI-tunnisteiden toteuttaminen ilman pyynnön parametreja. Esimerkiksi osoite http://www.levylaari.fi/levy.php?id=absurdistan&artist=laikaandthecosmonauts voidaan esittää ilman parametreja muodossa http://www.levylaari.fi/musiikki/laikaandthecosmonauts/absurdistan. Ominaisuuden toteuttamiseen tarvittava Apachen mod_rewrite-moduuli on asennettu hmopetus-koneelle.

Raportointi Django- ja Ruby on Rails -töissä

Harjoitustyön toteuttaminen on mahdollista PHP/MySQL-yhdistelmän sijaan joko Django- tai Ruby on Rails -sovelluskehyksellä. Opiskelijat keräävät pisteet perus- ja lisäominaisuuksista raportoimalla seikkailustaan blogissa: koodiportfolion kerääminen ei ole siis tarpeen.

Yksittäiseen ominaisuuteen liittyvän blogiviestin tulee sisältää seuraavat pääkohdat:

  1. tiivis kuvaus toteutuksesta,
  2. muutamia otteita toteutuksesta (ohjelmakoodista, asetustiedostoista, …) ja
  3. listaus vähintään kolmesta asiasta, jotka olivat valitulla teknologialla joko helpompia tai vaikeampia vastaavaan PHP-toteutukseen verrattuna.

Kuvauksen mukainen viesti on toimitettava blogiin viimeistään perjantaina kello 18 sillä viikolla, joilloin harjoituksissa jaetaan pisteet kyseisestä ominaisuudesta. Aiheeksi määritellään joko RubyOnRails tai Django.

Edellä kuvattujen blogiviestien tuottaminen vaatii väistämättä enemmän työtä kuin harjoituksiin osallistuminen ja tiiviin portfolion koostaminen. Tästä syystä kunkin ominaisuuden esittelystä jaetaan 1,5-kertaiset pisteet. Näin perusominaisuuksia on toteutettava 4 kappaletta ja lisäominaisuuksia 2-3 kappaletta. Muilta osin Django/Rails-harjoitustyöt tehdään yleisen harjoitustyöohjeen mukaan.

Ohjeet blogitunnuksen luomiseen löytyvät viestistä Tunnus blogiin (5. maaliskuuta 2008).

Loppuraportti

Harjoitustyön palautus tapahtuu lähettämällä oheisen mallin mukainen tiedote osoitteeseen jaakko.t.salonen@tut.fi. Lähetä viesti otsikolla #HM-OHJ: työ valmis perjantaihin 16. toukokuuta kello 17 mennessä.

Nimi: James Station
Opiskelijanumero: 123456
Sähköposti: jstat@trolleywatch.org

Harjoitustyöni aihe: Verkkopalvelu raitiovaunubongareille

Harjoitustyö löytyy kokonaisuudessaan oheisesta zip-paketista (hmohj2008-123456.zip).

Palautettavan zip-paketin (hmohj2008-opiskelijanumero.zip) tulee sisältää koodiportfolio (portfolio.html), johon on linkitetty olennaiset koodi- ja asetustiedostot (ks. koodiportfolion sivupohja). Huomaa, että sovelluksen ei tarvitse toimia sellaisenaan. Riittää, että paketin sisältöön voi perehtyä suoraviivaisesti purkamalla paketin ja avaamalla portfolio.html-tiedoston.

Djangolla ja Ruby on Railsilla työnsä tekevät palauttavat zip-paketoidun kokoelman palvelun toteuttavia koodi- ja asetustiedostoja (ilman koodiportfoliota).