Web-sovellusohjelmointi

582346
4
Software Systems
Intermediate studies
Year Semester Date Period Language In charge
2012 spring 16.01-20.02. 3-3 Finnish Arto Vihavainen

Lectures

Time Room Lecturer Date
Mon 10-12 CK112 Arto Vihavainen 16.01.2012-20.02.2012

General

Kurssin palautteen vastapalaute, kiitoksia huikeasta kurssista!

https://docs.google.com/document/d/1afKe4xhcgRhU6xYtCYzLnY8idqlqGERPpKBM5gOLL64/view

---

Kurssikuvaus:

Kurssilla tutustutaan nykyaikaisten, skaalautuvien ja virheenkestävien web-sovellusten toteuttamiseen, testaamiseen ja julkaisemiseen.

Kurssin pääohjelmointikieli on Java: käytämme esimerkeissä Spring-sovelluskehystä. Teemaan liittyviä buzzwordeja: N-TIER, SOA, Messaging Queues, REST, ORM, NOSQL, MVC, OWASP, IAAS, PAAS, SAAS ja HTTP.

Kurssi ei ole johdatuskurssi selainohjelmointiin ja käyttöliittymäsuunnitteluun; kurssilla ei opetella HTML:ää tai CSS:ää.

Kysymyksiä ja vastauksia, vastauksia ja komentoja myös ilman kysymyksiä.

* Viikon 3 olutvarastossa tulee olla sekä normaali esineiden listaus GET-kyselyllä että esineiden lisäys POST-toiminnolla. JSON-Olutvarastossa näiden lisäksi myös xxx.json-osoitteita kuuntelevat palvelut, joihin voi lähettää JSON-dataa, ja joista voi ladata JSON-dataa. Muista lisätä consumes-otsake ja @RequestBody-annotaatio JSON-dataa vastaanottavalle kontrolleriluokan metodille.
* Tehtävässä 4 tulee tehdä "normaali" Java-sovellus. Palvelinprosessi ei tulosta mitään käyttäjälle.
* telnet-kyselyjä tehdessä kysely päättyy kahteen tyhjään riviin.
* Tee Chat ja Awesome-tehtävät tarkasti. Tehtäviä palautettaessa tarkistaja navigoi sivuilla tekstin perusteella. Esimerkiksi Chatissa "kirjaudu ulos"-linkin tulee olla kirjoitettu pienellä. Kirjaudu ulos linkin tulee olla normaali linkki.
* Lähettäessäsi Chat-tehtävää, anna osoite Chat-palvelun "pääsivulle", eli sivulle josta sinut ohjataan kirjautumissivulle.
* Tuleehan täällä muutakin kuin servlettejä? -- Joo. Eka viikko toimi kertauksena, jossa käytiin läpi HTTP:tä, client-server -ideologiaa, request-response -paradigmaa ja yleistä web-kehitykstä. Kurssin sisältö rakentuu kurssin edetessä, mutta kurssin buzzword-listassa on kurssin pääteemat.

Ajankohtaista -- vanhentunut

* Maanantaina 27.2. on pajaneuvontaa klo 12-13, 14-18. 

* Viimeinen luento 20.2: Vierailijana Jani Kirmanen Silverskin Oy:stä (http://silverskin.com). Aiheena tietoturva ja OWASP top ten. Luennolla puhutaan myös koekäytänteistä ja omien sovellusten turvaamisesta.

* Viikon 3 deadline siirretty maanantaille 6.2. Viikon 3 dedis siis ma 6.2. klo 23:59.
* Jatkossa perjantaisin ohjaussessio klo 14:15. Ohjaus pajassa BK107.
* Perjantaina 20.1. pidetään ylimääräinen ohjaussessio klo 14:15. Ohjaus pajassa BK107.
* Tehtävää 13.8 päivitetty, tehtävänannossa aiemmin ollut void tarkistaKirjautuminen mahdollisti useamman vastauksen yhteen pyyntöön. Tämä luo mm. virheen "Cannot forward after response has been committed."
---
* Viikon 2 tehtävissä käytössä ollut pom.xml on päivitetty. Jotkut Tomcat-asennukset eivät löytäneet JSTL:n versiota 1.1.2 -- käytössä nyt versio 1.2. 
* Viikko 2: Riippuen käyttämästäsi palvelimesta, on mahdollista että sivulle index.jsp ei ohjauduta automaattisesti. Tällöin sinun tulee kirjoittaa sivu index.jsp käsin palvelimen osoitteen perään. NetBeansilla voit myös määritellä aloitusosoitteen valitsemalla projektin oikealla hiirennäppäimellä, valitsemalla Properties -> Run -> ja asettamalla kentän Relative URL -arvoksi /index.jsp.
* Viikko 2: Vaikka NetBeans herjaa lähdekoodieditorissa JSP:n ja JSTL:n yhteistyöstä, ohjelma voi silti toimia.
* Viikko 2: Kaikkia Spring-projekteja ei kannata tehdä alusta lähtien uusiksi. Voit kopioida vanhan projektin uuden pohjaksi NetBeansin copy-toiminnallisuudella.
* Perjantaina 27.1. pidetään ylimääräinen ohjaussessio klo 14:15. Ohjaus pajassa BK107.
 

Esitietovaatimukset

  • XML:n luku- ja kirjoitustaito: et mene paniikkiin kun luet sivun http://maven.apache.org/guides/introduction/introduction-to-the-pom.html -- ja lukemalla sivun uudelleen alat hiljalleen ymmärtämään pom-dokumentin rakennetta.
  • Omatoiminen tiedon hakeminen ja omaksuminen. Ymmärrät sivulla http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html olevan dokumentin tai osaat ongelmatilanteissa hakea lisätietoa tai -apua omatoimisesti.
  • Tietokoneen käytön perusteet. Pystyt lataamaan ja asentamaan Mavenin (http://maven.apache.org/) omalle koneellesi.
  • Ohjelmoinnin jatkokurssi ja ohjelmistojen mallintaminen: osaat rakentaa useammista olioista koostuvia ohjelmia sekä ymmärrät ja osaat visualisoida niiden välistä kommunikointia, ymmärrät ja ainakin pyrit soveltamaan oliosuunnittelun periaatteita: single responsibility principle: oliolla tulisi olla selkeä vastuu, program to interfaces not to concrete implementations: älä sido itseäsi konkreettisiin toteutuksiin vaan rajapintoihin, separation of concerns jne). Ohjelmointiympäristöt ovat sinulle myös tuttuja ja olet jo kirjoittanut yksikkötestejä. Olet soveltanut käsiteanalyysiä luokkaehdokkaiden keräämiseen ja piirtänyt luokkakaavioita. 
  • Tietokantojen perusteet: olet kirjoittanut SQL:ää, suunnitellut tietokannan rakenteen ja ymmärrät käsitteet tietokanta, tietokantakysely ja transaktio. Seuraavan tikape-laskuharjoituksen tekeminen ei tuota sinulle ongelmaa: http://www.cs.helsinki.fi/u/avihavai/edutainment/2011/tikape/lh5.html. Ymmärrät (tai ymmärrät luettuasi) käsitteet ACID ja BASE.
  • Kypsyys muiden kirjoittaman koodin lukemiseen ja kolmannen osapuolen tarjoamien komponenttien käyttämiseen. Seuraavan (jo hieman vanhentuneen) ohjeen lukeminen ja mukana tekeminen ei tuota sinulle ongelmia: http://www.cs.helsinki.fi/u/avihavai/edutainment/2011/tsoha/ohje/
  • Tietokantasovellus-kurssin suorittamisesta on huomattavasti hyötyä, mutta se ei ole pakollinen.
  • Komentotulkin käyttämisen perusteet. Luovit lähes sujuvasti komentotulkissa (terminal) ja et tarvitse tarkempia ohjeita seuraavaan askelsarjaan:  "mene komentotulkkia käyttäen omaan kotikansioosi, luo uusi kansio nimeltä "Projekti", mene juuri luotuun kansioon, kopioi osoitteessa http://www.cs.helsinki.fi/u/avihavai/pom.xml oleva tiedosto kansioosi ja suorita komento "mvn clean"". 
  • Pystyt lukemaan ylläolevan tekstin, ymmärrät sen, etkä välitä mahdollisista kirjoitusvirheistä.

 

Completing the course

Kurssi on neljän opintopisteen opintokokonaisuus. Yksi opintopiste vastaa noin 27 tunnin työpanosta. Jos teet noin 100h töitä kurssin eteen, sinulla ei pitäisi olla huolta kurssin läpäisemisestä.

Kurssilla on viikoittain 2 tuntia luentoja. Pääpaino kurssilla on harjoitustehtävillä, joiden tekoon tarjotaan ohjausta. Kurssin harjoitukset alkavat jo ensimmäisellä viikolla.

Harjoitusajat

Ohjattuja harjoitustunteja järjestetään

  • Ma 12-14
  • Ti 16-18
  • Ke 10-12
  • To 16-18
  • Pe 14-16

Harjoitukset järjestetään luokassa BK107. Harjoitukset ovat ohjaustapahtumia, missä tehtävien tekoon ja ympäristön käyttöön saa vinkkejä ja tukea.

IRC

Kurssilla on (epävirallinen) IRC-kanava IRCNetissä: #konkari

Koe

Kurssin koe järjestetään henkilökohtaisena tai pienryhmissä tapahtuvana näyttökokeena, jossa osallistuja osoittaa osaamisensa kuulustelijoille. Näyttökokeessa keskustellaan ei-ennalta sovituista kurssiin liittyvistä teemoista, joiden hallitsemista ja ymmärtämistä edellytetään osallistujalta.  Luentoaktiivisuudesta on hyötyä näyttökokeessa.

Harjoitukset

Kurssilla on tietty määrä viikoittaisia harjoituksia, joiden tekeminen edellytetään kurssin läpäisemiseen. Läpipääsyyn vaaditaan vähintään 50% viikottaisista tehtävistä -- siis vähintään 50% joka viikko --, arvosana 5 on mahdollista saada kun tekee viikoittain vähintään 90% tehtävistä. Jos olet sairaana ja tarvitset lisäaikaa -- tai vastoin yleisiä suosituksia lähdet matkalle kesken kurssin -- , ota ajoissa yhteyttä osoitteeseen avihavai@cs.helsinki.fi tai ircissä (nimim. avihavai).

Harjoitusten on tarkoitus olla haastavia ja tuoda eteen uusia asioita. Jos et koe saavasi tarpeeksi haastetta tai haluaisit tehdä enemmän, ota myös tällöin yhteyttä!

Arvosana

Kurssin arvosana määräytyy näyttökokeen ja tehtyjen harjoitusten perusteella.

Näyttökokeessa kuulustelijat voivat korottaa harjoitusten määräämää arvosanapohjaa yhdellä, pitää arvosanan samana, tai laskea arvosanapohjan määräämää arvosanaa rajattomasti. Arvosanapohja määräytyy viikoittain tehtyjen tehtävien prosentuaalisesta keskiarvosta (min 50% -> 1, min 60% -> 2, ... min 90% -> 5) -- Huomioi että jokaiselta viikolta tulee olla vähintään 50% tehtävistä tehtynä. Myöhässä palautetuista tehtävistä saa korkeintaan 0.75 pistettä per tehtäväpiste -- jos lisäajasta ei ole sovittu erikseen kurssin vastuuhenkilön kanssa. Myöhässä palautetut tehtävät on merkattu tarkistuslistaan normaaleina tehtävinä, pistevähennys tehdään lopullisen arvostelun kanssa.

Erilliskokeet

Kurssista ei järjestetä erilliskokeita.

Literature and material

Aihealueeseen ei ole olemassa yhtä hyvää oppikirjaa, mutta seuraaviin tutustumisesta on hyötyä:

  • Patterns of Enterprise Application Architecture
  • Real World Java EE Patterns
  • Agile Web Development with Rails
  • Service-Oriented design with Ruby and Rails
  • Clean Code

Kurssilla tarjottavalla materiaalilla (luennot, harjoitukset, kurssisivu) sekä aktiivisella omatoimisella tiedon etsimisellä pärjää kurssilla hyvin, eli kirjoja ei kurssia varten tarvitse hankkia.

Kurssimateriaali ja tehtävät löytyvät osoitteesta

http://www.cs.helsinki.fi/group/java/k12-wad/materiaali.html

Tehtävät -- HUOM! Lue osio Arvostelu

* Ensimmäisellä viikolla tulee tehdä kaikki tehtävät (1-17), jotka ovat lähinnä kertausta jo tutuista aihealueista. Tehtäviä 1-13 ei tarkasteta erikseen. Palauta tehtävät 14 ja 15 tehtävän 16 ohjeiden mukaan. Tehtäviä palautettaessa (teht. 16) kannattaa tarkistaa että on seurannut ohjeita tarkasti -- palvelu herjaa jos palautuksessasi on virheitä. Kirjaa lopuksi viikon aikana käyttämäsi tunnit tehtävän 17 ohjeita seuraten. Ensimmäisen viikon tehtävien DEADLINE on sunnuntaina 22.1. klo 23:59.

* Toiselle viikolle on tehtävät 18-28, deadline sunnuntaina 29.1. klo 23:59. Tehtävät, joissa ei ole erillistä palautusmahdollisuutta, oletetaan tehdyksi jos myöhemmät tehtävät on tehty. 

* Kolmannelle viikolle tehtävät 29-36, deadline sunnuntaina 5.2. klo 23:59.

* Neljännelle viikolle tehtävät 37-46, deadline sunnuntaina 12.2. klo 23:59.

* Viidennelle viikolle tehtävät 47-54, deadline sunnuntaina 19.2. klo 23:59.

* Kuudennelle viikolle tehtävät 55-62, deadline ennen omaa näyttökoetta.