wiki:harjoitustyöt/voterage
Last modified 2 years ago Last modified on 2015-07-09 16:46:04

Harjoitustyöehdotus Web-sovellukset kurssia varten.

HVSC on kokoelma C64 SID-piirille luotuja ohjelmallisesti toistettavia musiikkikappaleita. Kokoelmaan on tarjolla erilaisia natiiveja selaus- ja toistinsovelluksia, mutta nyt olis ideana tehdä uudenlainen.

Käyttöliittymässä on tarkoitus käsitellä HVSC kappaleita joukkoina, jotka käyttäjä voi lajitella omiin soittolistoihinsa tai joihin käyttäjä voi määrittää musiikkityylimäärityksiä yms. relevanttia tietoa.


Palvelin Redhat Linux, Fedora Virtuaalipalvelin Apache Python Django

Tietokanta Postgres/Sqlite3 HVSC-kokoelma jossain muodossa tai linkin takaa. Sidinfo(Cadaver/CovertBitops?) tai oma toteutus.

WebGui? HTML CSS Javascript Bootstrap.js, mahdollisesti muita. Tiny'R'sid(Juergen Wothke) tai itsetehty resid-fp C to javascript käännös. (web-audio-api) Tuki web-audiolle on Firefox/Chrome? selaimilla.(Toimii ainakin Windows/Android? alustoilla)


Toimintalogiikka: Tietokantaan koostetaan aluksi HVSC kokoelman kutakin .sid tiedostoa koskevat metatiedot. Tämän jälkeen luodaan group-käsite taulu, toisin sanoen nested-sets tyyppinen puu-malli. Kustakin uniikista metatiedosta luodaan puun noodi. Alkutilanteessa ryhmittely tehdään HVSC-tiedostojärjestelmän hakemistorakenteen mukaisesti, jolloin puu on kuin hakemisto. Kukin noodi voi kuulua jonkin toisen noodin lapseksi. Näin esimerkiksi voidaan lajitella .sid kappaleet tekijän, ryhmän, tekijänoikeuksien omistajan, tyypin jne. mukaisesti ilman, että metatietotaulua laajennetaan. Jos halutaan luoda esimerkiksi uusi musiikkilaji Tango, riittää luoda yksi Tango noodi, jolle sitten luodaan viitteet sellaisiin ilmentymiin, jotka joukkoon kuuluvat. Tällä tavalla käyttäjät voivat teoriassa luoda omia joukkojaan.

Käyttöliittymän logiikka: Käyttäjä voi selata tietoja, mutta vain kirjautunut käyttäjä voi niitä muuttaa.

Käyttäjälle esitetään aluksi pääjoukkoa kuvaava nappula, sitä klikkaamalla käyttäjälle palautetaan sellaiset joukot, jotka ovat pääjoukon välittömiä lapsijoukkoja. Käyttäjä voi valita jonkin lapsijoukosta, jolloin siihen välittömästi kuuluvat joukokt palautetaan. Näin navigoidaan, kunnes päädytään valitsemaan itse kappale. esim. (c64music) click c64music (demos)(games)(musicians) click musicians (0-9)(A)(B)... click (A) (Anvil)(AMJ) click (AMJ) (Buzzer.sid) click Buzzer.sid -> suorittaa määritellyn toiminnon kappaleelle. Esim. toistaa sen, siirtää soittolistaan. Voidaan liittää erilaisia gestureita eri toimintoja varten jne.

Edellä kuvatulla tavalla navigoiden käyttäjä voi joko valita kappaleita toistettavaksi, lisättäväksi soittolistaan, arvostella kappaleen tai määritellä genren kappaleelle. Navigoinnissa on ajateltu ensisijassa mobiililaitteita.

Responsiivisyys toteutetaan käytännössä tutkimalla HTTP requestin metatiedoista selaavan laitteen/sovelluksen tiedot ja palauttamalla sille sopiva sisältö. Tähän on sellaisia valmiita javascript kirjastoja, kuten bootstrap,responsive.js, jotka tarjoavat HTML komponenteille valmiit ulkoasumallit, jotka muokkaantuvat päätelaitteen mukaisesti. Yksinkertaisinta on käyttää niitä HTML/CSS:n jatkeena ja täydentää siltä osin kuin niistä puhti loppuu tai mikäli jokin toimintalogiikka edellyttää välttämättä lisäkoodia.

Seuraavan kerran loggautuessaan sisään näkee käyttäjä kokoelman pääjoukon lisäksi omat kokoelmansa/soittolistansa.

Aikatauluarvio:

Aikaa voidaan katsoa käytetyksi jo palvelimen peruskonfigurointiin WSGI-sovelluksia varten ja Django-frameworkin opiskeluun, sekä webbisaitin peruspalikoiden, kuten registering/login-käyttäjähallinnan tekoon n. 40 h.

Projekti alkaa nyt 9.7.2015, tarkoitus on tehdä viikottain n.2-3 pv verran ja koko touhu pitäs olla valmista 31.9.2015 mennessä muun touhun ohessa.

Tietokannan/group-mallin luonti ja tietokannan populointiskriptien teko, migraatioscriptien teko. 24h

Käyttöliittymälogiikan, ulkoasun ja ryhmien navigointilogiikan rakentaminen Djangon view/form/model/template käyttäen. 40h+

Responsiivisuus ja testaus, pyydetään harrastajia testaamaan ja antamaan palautetta. 40h+

Valmiin toistimen pulttaus, ei vie kauan. 16h

(Oman toistimen C-koodista javascriptiksi sovittaminen, vie 8h+ selvittää onko tehtävissä esim. emsdk LLVM:n avulla.)


Työllä tavoitellaan arvosanaa 5