Status: Päivitetty vuodelle 2017.

Ilmoita epäjohdonmukaisuuksista Jukalle.

Harjoitustyö on pakollinen osa Ohjelmallisen sisällönhallinnan suorittamista. Näin siksi, että sisällön käsittelyn automatisoinnin ja verkkopalveluiden toiminnallisuuksien kehittäminen edellyttää välttämättä käytännön harjoittelua.

Harjoitustyön lopputuloksena syntyy koodiportfolio, joka kokoaa yhteen harjoitustyöhön toteutetut toiminnot ja niiden tiiviin dokumentaation.

Keväällä 2017 voit käyttää harjoitustyön tekemiseen seuraavia vaihtoehtoisia teknologioita:

Käyttötarkoitukseen soveltuvan toteutusteknologian valinta on keskeinen osa onnistunutta Web-kehitysprojektia. Tästä syystä on hyödyllistä tutustua eri teknologioihin - vahvuuksineen ja heikkouksineen.

Halutessasi voit tehdä harjoitustyön myös räätälöitävällä sisällönhallintajärjestelmällä, esimerkiksi tiettyyn käyttötarkoitukseen muokatulla WordPressillä.

Ohjelmallisen sisällönhallinnan harjoitustyössä keskitytään järjestelmien toiminnallisuuksiin ja automatisoinnissa tarvittaviin prosesseihin. Tämä tarkoittaa käytännössä esimerkiksi yhteisöllisten toimintojen kehittämistä, sovelluksen keräämän datan esittämistä visualisoiden tai muuta (palvelun käyttäjän näkökulmasta) "luovaa" toimintaa. Teknisen arkkitehtuurin laadukas toteutus on siis nyt toissijainen tavoite.

Harjoitustyön minimivaatimuksena on toteuttaa verkkopalvelu, jonka sisältöä on mahdollista lisätä, muokata, poistaa ja listata Web-käyttöliittymän tuella. Jokaisen harjoitustyön on toteutettava vähintään seuraavat ominaisuudet:

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 annettua kuvausta.

Huomaathan, että harjoitustyön tuloksena ei välttämättä tarvitse syntyä tuotantokelpoista verkkopalvelua; erilaisten ominaisuuksien kehittelyä ja esittelemistä tukeva prototyyppi riittää oikein hyvin.

Harjoitustyön tekeminen alkaa kehitysympäristön perustamisella ja valinnalla. Voit joko asentaa itsellesi LAMP-ympäristön tai perustaa ympäristön valitsemaasi Web-hotelliin. Heroku on erityisen kiinnostava vaihtoehto ja palvelimen tuunaamisesta kiinnostunut voi ottaa käyttöön vaikkapa Amazon AWS:n - nyt tavoitteena on kuitenkin edetä suoraviivaisesti kehittämään varsinaista sovellusta.

Esimerkkejä aiheista

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

Esimerkkejä aiheista:

Toteuta maailman paras opinto-opas, joka esittää opinto-oppaan tiedot opiskelijalle hyödyllisellä tavalla. Minkälaisia vuorovaikutteisia ominaisuuksia opinto-oppaassa voisi olla? Miten opinto-oppaan tietoja voi visualisoida? Onko opinto-oppaasta mahdollista tehdä yhteisöllinen?

Koostepalvelu (mashup) Olennaisen osan nykyaikasta Web-palvelutarjontaa 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ä. Erilaiset paikkatiedon ja kartan yhdistelmät ovat yleisimmin toteutettuja koostepalveluita, mutta esimerkiksi D3.js-kirjaston ja avoimen datan yhdistelmällä saa aikaan paljon muutakin.

Uuden ajan reittiopas Esimerkiksi TKL tarjoaa jo käyttäjälle varsin käteviä palveluita bussiaikataulujen selvittämiseen, mutta parannettavaakin on. Palvelut eivät aina osaa auttaa käyttäjää lähimmän pysäkin valinnassa: parhaassa tapauksessa käyttäjä voisi etsiä sopivan bussin valitsemalla esim. "Kotiin". Aikaisemmin kuljettujen reittien muistaminen ja niiden ehdottaminen auttaisivat myös käyttäjää minimoimaan palvelun kanssa käytetyn ajan. Mitä muita toimintoja palvelu voisi toteuttaa?

Edellä mainittuja aiheita voi vapaasti muokata siten, että ne sopivat paremmin tekijän omiin tarpeisiin. Erityisen suositeltavaa on keksiä jokin ehdotettuja parempi aihe. Inspiraatiota voit kerätä vaikkapa tutustumalla Demolassa tarjolla oleviin projektiaiheisiin, Apps4Finland-kilpailutöihin tai programmableweb.com-sivuston koostepalveluesimerkkeihin.

Harjoitustyöpisteet ja arvosana

Harjoitustyöstä voi kerätä pisteitä yhteensä 18 kappaletta. Harjoitustyöstä kerättävät pisteet vaikuttavat arvosanaan avausluennolla esitetyn taulukon mukaisesti.

Neljä vaihetta:

  1. Kehitysympäristön perustaminen: LAMP käyntiin omalle koneelle tai esimerkiksi Herokun käyttöönotto. Katso tarkempi ohje. Palautus perjantaihin 17. maaliskuuta kello 17 mennessä. (3 pistettä)
  2. Esimerkkisovellus valitsemallasi teknologialla: Lisää-näytä-päivitä-poista (CRUD) -toiminnot sekä tuki kirjautumiseen ja rekisteröitymiseen tai jokin vaihtoehtoinen tapa käyttäjäkohtaisen tilan ylläpitämiseen. Palautus perjantaihin 31. maaliskuuta kello 17 mennessä. (3 pistettä)
  3. Datarajapinnan käyttö: Lue dataa oman sovelluksesi käyttöön tarkoituksenmukaisen lähteestä. Voit joko ottaa käyttöön soveltuvan API:n (ks. vaikkapa API:Suomi) tai vaihtoehtoisesti toteuttaa staattiselle datasetille (esimerkiksi data.tampere.fi) APIn jonka avulla sovelluksesi voi käyttää dataa JSON- tai XML-muodossa. Palautus perjantaihin 14. huhtikuuta kello 17 mennessä. (3 pistettä)
  4. Visualisointi: sovelluksen keräämän tai datarajapinnasta luetun datan ei-triviaali visualisointi (siis jotain muuta kuin perinteistä toimistografiikkaa tai joukko kartalle heitettyjä tietoja). Käytännössä esimerkiksi suurin osa D3.js-kirjastolla toteuteista visualisoinneista voidaan luokitella ei-triviaaliksi. Toteutukseksi käy myös yksinkertaisista visualisoinneista muodostettu kojelauta (dashboard). Palautus perjantaihin 5. toukokuuta kello 17 mennessä. (3 pistettä)

Voit tuplata edelliset pisteet valmistelemalla Koodiklinikalle demon toteutuksestasi. Ota yhteyttä Jukkaan jos olet kiinnostunut mahdollisuudesta.

Lisäksi pisteitä voi kerätä seuraavista toteutuksista - palautus perjantaihin 5. toukokuuta kello 17 mennessä:

Folksonomioihin perustuva taggaaminen (3 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 delicious.com soveltavat tageja monipuolisesti. Pisteiden kerääminen edellyttää myös suosittujen avainsanojen suosittelumekanismin toteuttamista (”Popular tags for this artist”, “recommended tags”).

AJAX-käyttöliittymä (3 pistettä): AJAX-teknologian soveltaminen verkkopalvelun käyttöliittymän toteutuksessa (sekä asynkroninen tiedonsiirto että käyttöliittymän dynaaminen mukauttaminen). 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 tagien lisäysmekanismit (ks. tageja käsittelevä artikkeli Wikipediassa) ovat pääsääntöisesti AJAX-perustaisia.

HTML5-pohjainen käyttöliittymä (3 pistettä): Ota verkkopalvelussasi käyttöön vähintään kaksi seuraavista HTML5-kielen esittelemistä tai siihen keskeisesti liittyvistä uusista ominaisuuksista: Canvas, Web Storage, Web Workers, Web Socket ja uudet lomakeominaisuudet. Ideoita ominaisuuksista voit poimia esimerkiksi HTML5-esityksestä.

Kertakirjautuminen (3 pistettä): OpenID-teknologia antaa käyttäjille mahdollisuuden uudelleenkäyttää käyttäjätunnuksiaan palvelusta toiseen. OpenID Attribute Exchange ja teknologian muut laajennukset mahdollistavat myös profiilitietojen välittämisen palvelujen välillä. Myös yksittäiset palveluntarjoajat tarjoavat usein OAuth-protokollaan perustuvia keinoja kertakirjautumisen toteuttamiseen, ks. esimerkiksi Facebook for Websites: Authentication, Authentication and Authorization for Google APIs ja Twitter: Authentication & Authorization. Kerää pisteet toteuttamalla tuki vähintään yhdelle mainituista kirjautumismenetelmistä.

Sovelluskehittäjän rajapinta (3 pistettä): Mahdollista sovelluksesi keräämän tietosisällön hyödyntäminen ja/tai muokkaaminen muille kehittäjille toteuttamalla sovellukseesi Web API eli sovelluskehittäjärajapinta

Älypuhelinnäkymä sovellukseen (3 pistettä): Toteuta yksinkertainen älypuhelinsovellus sovelluksesi keräämien tietojen näyttämiseen/käyttämiseen tai muokkaamiseen.

Koodit ja dokumentaatio GitHubiin (2 pistettä): Käytä GitHub-palvelua koodin versionhallintaan. Lisäpiste: jaa koodi avoimella lisenssillä. Toinen lisäpiste: kontribuoi olemassa olevaan projektiin.

Käytön analytiikka (3 pistettä): Ota käyttöön analytiikkaratkaisu, joka mahdollistaa käyttäjien toiminnan seuraamisen suppiloanalyysiperiaatteen mukaisesti, vrt. Funnel Analysis.

Botti (3 pistettä): Toteuta botti, joka esimerkiksi tervehtii sivulle saapuvaa käyttäjää ja kysyy miten häntä voisi palvella. Katso myös Develop an API Chatbot.

Reaaliaikainen käyttöliittymä (3 pistettä): Näytä järjestelmän tietosisällössä tapahtuvat muutokset käyttäjälle reaaliajassa.

Erityisen hyödyllisiksi osoittautuvat opiskelijoiden toteuttamat ohjeet palkitaan porkkanapistein. Tarjolla on yhteensä 6 pistettä, jotka lisätään kaikkien muiden kerättyjen pisteiden päälle.

Harjoitustyön raportointi

Harjoitustyöpisteet kerätään julkaisemalla toteutuskerran Yammerissa tiivis kuvaus toteuttamastasi toiminnosta.

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

  1. tiivis kuvaus toteutuksesta,
  2. muutamia otteita toteutuksesta (ohjelmakoodista, asetustiedostoista, ...),
  3. listaus (siis lista linkkejä) ohjeista tai esimerkiksi verkkolähteistä jotka olivat erityisesti hyödyksi tehtävää tehdessä ja
  4. listaus vähintään kolmesta asiasta, jotka olivat valitulla teknologialla joko erityisen helppoja tai vastaavasti hankaloittivat työtäsi merkittävästi.

Kun viesti on valmis, julkaise se Yammerissa. Halutessasi voit kirjoittaa kuvauksen esimerkiksi dillinger.io-palvelulla ja liittää sen Yammer-viestiin PDF-muodossa. Yammer ei nimittäin välttämättä sovellu erityisen hyvin tilapäivitystä pidempien tekstien tai varsinkaan koodiotteiden julkaisemiseen.

Kuvauksen mukainen viesti on toimitettava Piiriin viimeistään perjantaina kello 17 mennessä sillä viikolla, joilloin kyseisestä ominaisuudesta jaetaan pisteet: kirjoita viesti, laita siihen tagi codeigniter2017, lavarel2017, flask2017, django2017, firebase2017, pylons2017, turbogears2017, bfg2017, rubyonrails2017, nodejs2017 tai dotnet2017.

Loppuraportti

Harjoitustyön palautus tapahtuu lähettämällä oheisen mallin mukainen tiedote osoitteeseen jukka.huhtamaki@tut.fi. Lähetä viesti otsikolla #OHSIHA: työ valmis perjantaihin 12. toukokuuta kello 17 mennessä.

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

Harjoitustyöni aihe: Verkkopalvelu raitiovaunubongareille

Harjoitustyö löytyy kokonaisuudessaan oheisesta zip-paketista (ohsiha2017-234567.zip).

Korvaan tenttisuorituksen luentopäiväkirjalla. Osoite luentopäiväkirjaani: http://blog.fi/jamesstation/ohsiha2017

Palautettavan zip-paketin (ohsiha2017-opiskelijanumero.zip) tulee sisältää hakemisto nimeltä ohsiha2017-234567 (korvaa lukusarja 234567 omalla opiskelijanumerollasi), jonka sisältä löytyvät työhösi liittyvät koodi- ja asetustiedostot. Huomaa, että sovelluksen ei tarvitse toimia sellaisenaan. Riittää, että paketin sisältöön voi perehtyä suoraviivaisesti paketin purkamalla.

Merkitse lisäksi harjoitustyön eri ominaisuuksien raportoiduista toteutuksista ja vierailuluennoille osallistumisesta keräämäsi pisteet Google-laskentataulukkoon (ei edellytä sisäänkirjautumista). Merkitse pisteet ainoastaan siinä tapauksessa, että olet julkaissut kuvauksen määräaikaan mennessä.