Võrgurakendused I 2017
Ainekood: ITV0110 |
Sisukord
- 1 NB! See on 2017 aasta arhiiv, mitte hetkel kehtiv materjalide kogu!
- 2 Lõpptulemused
- 3 Uurimistöös osalemine!
- 4 Kontrolltöö ja kursuse lõpetamine
- 5 NB! Praktikumides hindamine ainult sinu grupi ajal
- 6 Videoloengud
- 7 Aeg, koht, tulemus
- 8 Kursuse eesmärk
- 9 Praktilised tööd
- 10 Vajalikud tööriistad
- 11 Tehnoloogiateemad ja materjale lugemiseks
- 11.1 HTML põhioskused
- 11.2 CSSi põhioskused
- 11.3 Javascripti põhioskused
- 11.4 Veebirakenduse optimeerimine mobiilile
- 11.5 Cgi töötlemine eri keeltes (C, python, bash, java, ...)
- 11.6 Python ja näiteid kasutamisest serverirakendustes
- 11.7 Ajax ehk serveriga andmevahetus otse javascriptist
- 11.8 Serverirakendused PHP-s, näited
- 11.9 SQL
- 11.10 SQL serverirakendustes
- 11.11 Sessioonid, cookied, sisselogimine, autentimine, web storage
- 11.12 node.js sissejuhatus
- 11.13 Veebiserveri ehitusest ja konfigureerimisest
NB! See on 2017 aasta arhiiv, mitte hetkel kehtiv materjalide kogu!
Lõpptulemused
Siin tulemuste kolmas versioon (paar tudengit andsid teada, et kontrolltööde tulemustes oli segadus tudengikoodi/nime/eelmise aasta tulemustega). Teistel muutusi ei ole.
Kogu 2017 võrgurakenduste kursuse tulemused siin. Formaat: tudengikood, initsiaalid, viis praksi, kontrolltöö, hinne. Tühik või kriips tähendab mitteilmumist. Siintoodud tulemused veel õis-s ei ole.
Kui sul on mingid tulemused selgelt puudu või valesti, siis palun anna asjaoludest võimalikult täpselt teada (a la mitmenda praksi tulemustest jutt, millal umbes esitasid, kellele) emailitsi tanel.tammet@ttu.ee.
Pane tähele, et kontrolltöö loetakse sooritatuks, kui said vähemalt 20 punkti. Kursuse edukaks lõpetamiseks peab sul olema tehtud esimesed neli praktikumi ja kontrolltöö ning praktikumid+kontrolltöö saadud kokku vähemalt 50 punkti.
Uurimistöös osalemine!
Palun kõigil tudengitele teha läbi http://sightsmap.com/survey uuring, kus tuleb võrrelda etteantud piirkonnavalikuid kaardil. Hinnake palun vähemalt 40 paari. Hindamise eest saab kursuse punktiarvestusse ühe punkti!
Kui avate viidatud lehe, sisestage Your name kasti lihtsalt oma täisnimi, pange Affiliation kasti TTU ja vajutage "Ready". Kuvatud piirkondades on enamasti mingid rohkem või vähem huvipakkuvad asjad/kohad/vaated, mida võiks turistina tahta möödaminnes pildistada või lihtsalt uudistada. Kui esmapilgul jääb ebaselgeks, mis piirkonnas on, siis tasub kaardil zoomida välja või sisse või panna peale satellite view.
Uuring on osa doktorand Piit Järve tööst piirkondade kaardistamise ja soovitamise teemadel crowdsourcingu ja andmekaeve abil, ning uuringu mõtteks on võrrelda erinevate huvipiirkonna-moodustamise algoritmide headust inimese vaatenurgast. Tulemused lähevad tema artikli osaks, kus ta ehitab ja analüüsib erinevaid piirkonna-moodustamise algoritme.
Kontrolltöö ja kursuse lõpetamine
Kursuses on peale praktikumide ka üks kohustuslik kontrolltöö, mis toimub viimaste loengute ajal/kohas ja annab maksimaalselt 40 punkti. Edukaks sooritamiseks pead kontrolltöös saama vähemalt 20 punkti ja kogu kursuse eest (praktikumid+kontrolltöö) vähemalt 50 punkti.
Kontrolltöö jaoks on sul valida kaks võimalikku päeva (kell endiselt 10:00 ja ruum U06A-201), vali üks neist:
- neljapäev 14 detsember
- neljapäev 21 detsember: võta kaasa ja esita mõni pildiga dokument
Peale viimast praktikumipäeva 22. detsembril on kursus lõppenud: ülesandeid enam ei vaadata ja rohkem kontrolltöösid ei tehta.
NB! Praktikumides hindamine ainult sinu grupi ajal
Juhime kõigi praktikumijuhendajate poolt tähelepanu, et praktikumitöö arvestamine ja hindamine toimub ainult sinu grupi ajal! Muude gruppide aegadel võetakse töid vastu ainult juhul, kui ei ole kedagi õigest grupist, kes sooviks tööd esitada / konsulteerida, st reeglina mitte arvestuse viimasel nädalal.
Videoloengud
Senised loengud peaksid olema vaadatavad sellelt lingilt.
NB! Ei ole mingit garantiid, et loengud jäävad üles mitmeks kuuks või et kõik loengud võrku ilmuvad.
Aeg, koht, tulemus
Loeng igal neljapäeval kell 10:00-11:30 ruumides U06A-201, U06A-229. Loengud on peamiselt pühendatud praktikumide seletamisele ja aeglasele, selgitustega osalisele ette-programmeerimisele. Teisisõnu, loengute mõte on aidata praktikume teha.
Praktikumid toimuvad eri gruppidele viiel erineval ajal. Praktikumijuhendaid on mitu. Esimesel nädalal on juhendajaks Martin Verrev, järgmistel tuleb praktikumijuhendajaid juurde.
NB! Praktikumide eesmärgiks on teha ise ülesande kallal tööd, küsida juhendajalt probleemide korral abi ja esitada valmis või osaliselt valmis töid juhendajale. Praktikumides enamasti ei esitata üldist infot/materjale/näiteid kõigile vaatamiseks: selleks on loeng.
- teisipäeval kell 08:00 ruumis ICT-401 IAPB32, IAPB33
- teisipäeval kell 14:00 ruumis ICT-404 IAPB34, IAPB35
- teisipäeval kell 16:00 ruumis ICT-121 ABB31, IABB32, IABB33
- kolmapäeval kell 16:00 ruumis ICT-404 IAPB36
- neljapäeval kell 08:00 ruumis ICT-122 IABB34, IAPB31
Kursus lõpeb hindelise arvestusega. Hinne sõltub kursuse jooksul tehtud praktikumide tulemustest (60%) pluss kursuse lõpus toimuva kontrolltöö tulemustest (40%).
Kursuse eesmärk
Veebirakenduste põhimõtted ja nende kirjutamise oskus nii brauseri kui serveri poolel. Konkreetsemalt:
- Brauseri põhitehntoloogiad: html-i, CSS-i ja javascripti baasoskused.
- Serveripoolse rakenduse kirjutamise põhimõtted,
- cgi protokoll ja erinevate keelte (sh python, php, javascript, C) kasutamise ülevaade serverirakendustes
- Pythoni ja php kasutamise esmased oskused.
- node.js kasutamise sissejuhatus
- Lihtsamad SQLi kasutamise oskused.
Kursusel eeldatakse elementaarsete programmeerimisoskuste olemasolu: nende puudumisel ei ole võimalik kursust läbida.
Julgustuseks loe seda väikest juttu
NB! Selle kursuse eesmärgiks ei ole keeruliste frameworkide, transpilerite ja pakkimisvahendite jms tehnokeskkonna õppimine: kõik need vajavad alustehnoloogiate kasutamise oskust, millele kursus ongi pühendatud.
Senised loengud peaksid olema vaadatavad sellelt lingilt.
NB! Ei ole mingit garantiid, et loengud jäävad üles mitmeks kuuks või et kõik loengud võrku ilmuvad.
Praktilised tööd
Kursusel on neli kohustuslikku praktilist ẗööd ja üks vabatahtlik praktiline töö. Iga töö annab 0-12 punkti. Hilinenud tööd annavad poole punktidest. Töid võib (ja on soovitav) esitada enne tähtaega.
NB!
- Kui sinu praktikum on õigeaegselt arvestatud, siis saad esitada täiendusi kuni kaks nädalat peale tähtaega, ilma pooli punkte kaotamata.
- Kui sinu praktikum ei ole õigeaegselt arvestatud, siis on sul esitamiseks aega veel kolm nädalat peale tähtaega (välja arvatud neljas ja viies praks), aga selliselt hilinenud praks annab ainult pooled punktid.
- Üle kolme nädala hilinenud praks annab edukal arvestamisel ainult üheainsa punkti.
- Oma tööd saad arvestuseks esitada ainult oma rühma praksi ajal. Kui sa ei ole üheski rühmas, siis on aeg vaba. Lihtsalt nõu ja abi saad küsida ka teistel aegadel.
Kõik tööd tuleb esitada ise TTÜ arvutiklassis: emailiga saadetud töid ei vaadata. Kasutada võib nii klassi arvuteid kui oma arvutit, brauser ja operatsioonisüsteem on vabalt valitavad. Tööde presenteerimiseks tuleb kasutada ülikooli serverit dijkstra: kõiki prakse vaatavad õppejõud ainult sealt serverist. Kindlasti loe dijkstra serveri kasutamise õpetust.
Kursuse edukaks läbimiseks peavad kõik kohustuslikud praktilised tööd - neli esimest - olema tehtud.
Lehtede kujundamise ja stiili osas lähtu sellest juhendist.
Ülesanded:
1. ülesanne: HTML ja server
Detailid: Prax 1: html põhioskused.
Tähtaeg 18-22 septembri nädal, vastavalt sinu praktikumirühmale.
2. ülesanne: minesweeper ehk javascript ja css
Ülesandeks on realiseerida tugevalt lihtsustatud minesweeperi kloon javascriptis, vastavalt järgmistele nõuetele:
Tähtaeg 9-13 oktoobri nädal, vastavalt sinu praktikumirühmale..
3. ülesanne: minesweeperi mälu ehk serverirakendus pythoni cgi-na
Ülesandeks on realiseerida serveris minesweeperi tulemuste ja poolikute mängude salvestamine ja nende kuvamine veebis.
Tähtaeg 6-10 novembri nädal, vastavalt sinu praktikumirühmale.
4. ülesanne: mini-reddit ehk andmebaasiga serverirakendus
Ülesandeks on ehitada mini-reddit (vaata saiti ja wikipediat ja sarnast hacker newsi) kasutades selleks PHP-d ja MySQL-i.
Prax 4: andmebaasiga serverirakendus php-s.
Tähtaeg 4-8 detsembri nädal, vastavalt sinu praktikumirühmale.
5. ülesanne: kivi-paber-käärid ehk node.js
See ülesanne ei ole arvestuse saamiseks kohustuslik, kuid annab ikkagi kuni 15 punkti, ehk tegemata jätmine annab kokku vastavalt vähem.
Ülesanne on ehitada võimalikult lihtsalt kahe inimese kivi-paber-käärid mäng node.js abil.
Prax 5: serverirakendus node.js abil.
Tähtaeg 11-15 detsembri nädal, vastavalt sinu praktikumirühmale.
Vajalikud tööriistad
Oma arvutiga töö tegemiseks peab seal olema vähemalt
- Programmeerimiseks sobiv tekstiredaktor (väldi IDE-sid!) soovitavalt siit loetelust: Notepad++, brackets, atom, vs code, sublime text, scite
- Mozilla Firefox ja Google Chrome
- Windowsil putty või mõni sarnane sisselogimis-proge (Linuxil piisab ssh käsust). Hea erivariant Puttyst on kitty, mis laseb kasutajatunnuse ja parooli meelde jätta, et ei peaks igakord uuesti sisestama.
- Windowsil winscp (vaata konfimisest!) või mõni sarnane failide-üleslaadimis-proge (linuxil ja macil piisab scp käsust)
Tehnoloogiateemad ja materjale lugemiseks
Allpool on toodud olulisemad ja valik täiendavaid materjale põhilistele tehnoloogiateemadele kursuses.
HTML põhioskused
Loe ja proovi läbi (st vaja põhimõtted selgeks õppida):
- w3schools html tutorial põhiblokk kunide vormide allpeatükini.
Vanemates tutorialites toodud markup on reeglina endiselt pädev, v.a. xhtml ja päised: sina kasuta html5 standardit (päises <!DOCTYPE html>) ja ignoreeri xml teemat html-s.
Lisaks olulist:
- html entities osa1 ja osa2 ja utf-8 ja charseti seadmine
Keerulisemat:
- ametlik w3c standard
- !DOCTYPE prefix ja html vanade versioonide kuvamine
CSSi põhioskused
Lugeda ja proovida läbi (st vaja põhimõtted selgeks õppida):
- w3schools'i css tutorial: põhiosa kuni CSS3 blokini (sealt alates ei ole tingimata esialgu vaja), huvi korral loe edasi. Järgmised on eriti olulised osad:
- Väga kasulik abimaterjal on w3schoolsi css reference
Abiks on tutvuda heade tutorialidega järgmistel teemadel:
- centering div
- inline block
- floats
- listikasutus ja sealtsamast listikasutuse tutorialid
- css shadow
- css gradiendid
Häid praktilisi soovitusi kujundusest css-ga:
- css nupud ja nupukataloog ja nuputegija1 ja nuputegija2
- rounded corners, shadow, gradient fill jne
- puhtast tüpograafia-kujundusest
Vingeid graafilisi canvas+webgl asju:
Javascripti põhioskused
Seejärel loe läbi ja proovi järgi selles järjekorras:
- Wikipedia javascripti üldartikkel: ülevaade, ajalugu jne. Loe algust, kogu juttu pole tingimata vaja. Keelt siit ei õpi!
- W3schools javascripti sissejuhatus: Lisaks põhi-tutorialile alguses on kriitiline JS HTML DOM blokk allpool: kuidas tegelikult htmlist tükke kätte saada ja neid muuta.
- Wikipedia Javascripti keele kiirõpetus: loe ja proovi paralleelselt w3schools-ga. Siit saab mõned asjad selgemaks kui ainult w3schoolsist.
NB! Selle tulemusena on sul baasettekujutus javascripti keelest, aga mitte reaalsest kasutusest (seda vaatame järgmises loengus).
Javascripti kasutamine brauseris: alustuseks on hea vaadata põhjalikku näidete loetelu
- html dom objektid: põhiasjad
- form validation: klassikaline rakendus
- brauseriobjektid: vahel kah kasulikud
ja tingimata lugeda sinna juurde teegijuhendeid:
Javascripti ja css-i teegid: uurime veidi kõige populaarsemaid universaalseid teeke
- jquery javascripti teek dom-ga manipuleerimiseks ja ajaxiks
- underscore funktsionaalsed pisivahendid
- bootstrap css + javascript, widgetid jne
- react facebooki kapitaalne teek / pool-framework keerukamate kasutajaliideste tegemiseks
Vaata Google toredaid demosid.
Veebirakenduse optimeerimine mobiilile
Täiendavalt spetsiifilisematest teemadest:
- css-i valik mobiilile ja sama teema selgitusteta
- navigeerimine ja menüüd
- iOS nüansid
- optimeeri sujuvust: video
- huvitav mobiili-hübriid-veebirakenduste teek
Cgi töötlemine eri keeltes (C, python, bash, java, ...)
Kõigepealt loe ja proovi tingimata ise läbi teha: pythoni cgi-d dijkstra serveris: kiire sissejuhatus
Seejärel vaata hulka näiteid, mille täpsem seletus antakse loengus.
Tutvu linuxi shelli elementaarsete käskudega siit alustades ja selle lühiõpetusega jätkates. Iga käsu juures on abiks man, näiteks man ls. Huvi korral googelda lisaks.
Seejärel loe neid materjale CGI protokollist ja CGI programmidest serveris:
ning siis vaata lisaks loengus tehtud/proovitud lihtsaid cgi programminäiteid eri keeltes.
Cgi jaoks on olemas ka nö rfc-standard, mille lugemine on aga pisut vaevarikas (nagu enamikel standarditel) ja üldjuhul on praktilisem lugeda hoopis ülaltoodud õpetusi ja vaadata näiteid.
Python ja näiteid kasutamisest serverirakendustes
- Loe tutoriali algust (keerulised andmestruktuurid, moodulite ja klasside värgi võid esialgu lugemata jätta)
- Hea tutorial cgi programmide kohta pythonis
- Lisaks cgi teegi õpetust.
Hea mõte on paralleelselt teha lahti Pythoni interpretaator ja katsetada kõrvale asju otse Pythoni käsureal. Kui su masinas Pythonit pole, siis installeeri! Kasulikke asju lisaks:
Ajax ehk serveriga andmevahetus otse javascriptist
- Loe seotud tehnoloogiatest: wikipedia ajax, wikipedia xmlhttprequest, wikipedia json
- Vaata xmlhttprequest ja jsonile rakendatud eval näited
- Vaata uuemat ja lihtsamat varianti Ajaxi callist: fetch
Lisaks võib abi olla:
NB:
- Vanade IE-de erivariante ei ole mingit mõtet kasutada.
- Ajaxiga avatud urlilt võib tulla mis iganes tekst (ei pea olema xml).
Serverirakendused PHP-s, näited
- Väikese ajaloolise ülevaate leiad wikipeediast
- Põhiõpetus on php oma saidil: loe sealt kõigepealt sissejuhatavat tutoriali
- W3school-si php tutorial on samuti päris OK.
- Vaata lihtsaid php ja mysql näiteid loengust.
SQL
Loe selles järjekorras:
SQL serverirakendustes
- Vorgurakendused 1 SQL naited loengust: alusta siit
- Vaata veel kombineeritult lihtsaid php ja mysql näiteid loengust.
Harilikud tutorialid ja tähelepanekud:
- mysql PHP-s: veebitutorial
- SQL injection vt ka seda ja seda ja seda
- w3schools PHP tutorial all vasakul Mysql blokk
Sessioonid, cookied, sisselogimine, autentimine, web storage
Mõned lingid:
- basic authentication wikipedias, apache manuaalis ja basic authentication näited
- cookie wikipedias, php cookie handling w3schools-st ja php manuaalist
- php sessioonihandling w3schools ja siit php mahukas sessiooni-manuaal ja siit eraldi tutorial
- väike ok sessioonihalduse tutorial
- autentimise näide php sessiooniga
- Web storage: HTML5 parem ja lihtne alternatiiv cookiedele. Vaata kindlasti ka muid HTML5 data-salvestus-mehhanisme, HTML5 application cache ja seda detailsemat täiendavat juttu.
node.js sissejuhatus
node.js on süsteem serverirakenduste kirjutamiseks javascriptis. Ta on ehitatud chrome javascripti mootori peale ja lisab sinna hulgem kasulikke teeke, veebiserveri jne.
Vaata:
- node.js ise
- node.js wikipedias
Dijkstras on node olemas programmina nodejs ja ta on väga vana versioon. npm on samuti olemas ja ei vaja ruuduõigusi.
Aga, hea mõte on kõigepealt installeerida omaenda arvutisse node.js ja alustada katsetamist:
- w3schools-i erilihtne tutorial
- ka hea sissejuhatav tutorial
- tutorialspointi veidi põhjalikum tutorial
- järgmine ok tutorial
- hulk eri tutoriale mis vajavad installeerimist
Veebiserveri ehitusest ja konfigureerimisest
Kõigepealt tutvu või tuleta meelde http protokolli põhimõtteid:
Veebiserverist paremaks arusaamiseks tasub veidi eksperimenteerida pisikese veebiserveriga.
Enimkasutatav veebiserver Apache:
Apache konfigureerimisest: