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ä 2018 voit käyttää harjoitustyön tekemiseen seuraavia vaihtoehtoisia teknologioita:

Mikäli olet aloitteleva Web-kehittäjä, suosittelemme Django-kehystä. Jos taas olet suorittanut Web-ohjelmoinnin tai olet muuten jo ehtinyt kerryttämään devausosaamistasi, kannustamme valitsemaan itsellesi uuden teknologian.

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

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.

Minimivaatimukset

Keväällä 2018 harjoitustöissä painotetaan datakeskeisten palvelujen kehittämistä. Ota lähtökohdaksi jokin olemassa oleva data, ota se käyttöön omassa palvelussasi ja rakenna dataa edelleen jalostava toiminnallisuus. Esimerkkejä datan lähteistä ovat avoimen datan kokoelmat Tampereella ja Helsingissä, Spotify, Twitter - ja Tampere3! Kattavia datalähdelistauksia löydät muun muassa ProgrammableWeb- ja apinf.io-palveluista.

Harjoitustyön minimivaatimuksena on toteuttaa verkkopalvelu, joka näyttää dataa käyttäjälle vuorovaikutteisella tavalla. Lisäksi käyttäjällä on mahdollisuus rekisteröityä ja kirjautua palveluun. Löydät lisätietoa tämänkaltaisista datatuotteista esimerkiksi Tuomas Kaittolan diplomityöstä Web-teknologioilla toteutetun datatuotteen arkkitehtuuri.

Jos kuitenkin haluat toteuttaa Web-palvelun ilman erillistä datalähdettä, minimivaatimukset täyttää palvelu jonka sisältöä on mahdollista lisätä, muokata, poistaa ja listata Web-käyttöliittymän tuella. Toteuta tällöin seuraavat ominaisuudet:

Harjoitustyön pohjana on mahdollista 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.

Harjoitustyön tekeminen alkaa kehitysympäristön perustamisella ja valinnalla. Voit joko asentaa itsellesi vaikkapa Django-ympäristön tai perustaa ympäristön valitsemallesi alustalle. 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:

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.

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?

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 suorittamisohjeen mukaisesti

Neljä vaihetta:

  1. Kehitysympäristön perustaminen: Django käyntiin omalle koneelle tai esimerkiksi Herokun käyttöönotto. Katso tarkempi ohje. Palautus perjantaihin 23. helmikuuta kello 17 mennessä. (3 pistettä)
  2. Esimerkkipalvelu valitsemallasi teknologialla: Tuki kirjautumiseen ja rekisteröitymiseen tai jokin vaihtoehtoinen tapa käyttäjäkohtaisen tilan ylläpitämiseen sekä esimerkkidatan näyttäminen tai lisää-näytä-päivitä-poista (CRUD) -toiminnot. Palautus perjantaihin 16. maaliskuuta kello 17 mennessä. (3 pistettä)
  3. Datarajapinnan käyttö: Lue dataa oman sovelluksesi käyttöön tarkoituksenmukaisen lähteestä. Integroi data elimelliseksi osaksi palvelusi tietosisältöä. Voit joko ottaa käyttöön soveltuvan API:n (ks. vaikkapa API:Suomi) tai vaihtoehtoisesti lukea palvelun käyttöön staattisen datan (esimerkiksi data.tampere.fi). Palautus perjantaihin 6. huhtikuuta kello 17 mennessä. (3 pistettä)
  4. Visualisointi: sovelluksen keräämän tai datarajapinnasta luetun datan ei-triviaali visualisointi (siis jotain muuta kuin yksittäinen toimistografiikkaelementti 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, esimerkiksi Highchartsilla toteutetuista visualisoinneista muodostettu kojelauta (dashboard). Palautus perjantaihin 20. huhtikuuta kello 17 mennessä. (3 pistettä)

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

Edellä kuvatut neljä kokonaisuutta voit toteuttaa omalla koneellasi pyörivässä paikallisessa kehitysympäristössä. Mikäli haluat kerätä lisää pisteitä seuraavia kokonaisuuksia toteuttamalla, sinun on ensin julkaistava palvelusi Webiin. Palautus perjantaihin 5. toukokuuta kello 17 mennessä:

SPA-toteutus (3 pistettä): Palvelusi toimii Single Page Application -periaatteella. Toteutus perustuu esimerkiksi Vue.js, React tai AngularJS-kirjastoon.

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, tarjoaa palvelusi sisältöä Facebook-chatissa tai välittää hyödyllisiä päivityksiä Slack-kanavalle. 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. Esimerksi toteuttamasi kojelauta tai kotonasi tietoa tarjoileva näyttötaulu päivittyvät automaattisesti.

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

AJAX-toteutus (1 piste): 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ä (1 piste): 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ä. </p>

Kertakirjautuminen (1 pistettä): 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ää piste 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.

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.

WebGL ja 3D (2 pistettä): Toteuta sovellukseesi WebGL-rajapintaa hyödyntävä ominaisuus, esimerkiksi [Three.js-kirjastoa](https://threejs.org/examples/) hyödyntävä 3D-toiminnallisuus.

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 Slackissä 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 Slackissä. Halutessasi voit kirjoittaa kuvauksen esimerkiksi dillinger.io-palvelulla ja liittää sen Slackiin-viestiin PDF-muodossa. Mikäli mahdollista, voit julkaista koko kuvauksen sellaisenaan Slack-kanavalle.

Kuvauksen mukainen viesti on toimitettava Slackiin viimeistään perjantaina kello 17 mennessä sillä viikolla, joilloin kyseisestä ominaisuudesta jaetaan pisteet: kirjoita viesti ominaisuuteen liittyvälle kanavalle ja lisää siihen sopivat hashtagit: #django, #nodejs, #react, #vue, #angularjs, #rubyonrails, #codeigniter, #lavarel, #flask, #firebase, #pylons, #turbogears ja/tai #dotnet.

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 11. 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 (ohsiha2018-234567.zip).

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

Palautettavan zip-paketin (ohsiha2018-opiskelijanumero.zip) tulee sisältää hakemisto nimeltä ohsiha2018-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ä.