Itv0120 2017
Ainekood: ITV0120 |
Sisukord
- 1 NB! See on 2017 aasta materjalide arhiiv, mitte hetkel kehtiv!
- 2 Praktikumide ja eksamite tulemused
- 3 Eksam
- 4 Aeg, koht
- 5 Praktilised tööd ja tähtajad
- 6 Loengukava
- 7 Lisamaterjalid
NB! See on 2017 aasta materjalide arhiiv, mitte hetkel kehtiv!
Praktikumide ja eksamite tulemused
Siin nüüd teise eksami järgsed tulemused:
Lõpptulemused kolme eksami järel nähtavad siin formaadis: tudengikood, eesnime esitäht, punkte esimese praksi eest, punkte teise praksi eest, punkte esimese eksami eest, punkte teise eksami eest, punkte kolmanda eksami eest, punkte kokku, hinne
Eksam
Eksamiajad on järgmistel aegadel, kõik ruumis U02-102
- 28.05.2018 esmasp, kell 14:00
- 31.05.2018 neljap, kell 12:00
- 07.06.2018 neljap, kell 16:00
Sa võid tulla kohale kahel eri ajal (aga mitte kolmel).
Aega on kuni kolm tundi, tüüpiliselt peaks piisama ca pooleteisest tunnist.
Eksamile registreeruma ei pea, välja arvatud tudengid, kes ei ole deklareerinud ainet sel semestril, vaid teevad uuesti mõnel varasemal aastal deklareeritud ainet (eeldusel, et deklaratsioon kehtib).
eksamiteemade ja küsimuste kohta loe siit
Hindamine: praktikumid annavad kokku 50% kogupunktidest ning eksam teise 50%. Kursuse edukaks sooritamiseks on sul vaja:
- saada arvestatud mõlemid praktikumid
- teha eksam tasemel vähemalt 1/3 eksami kogupunktidest.
- saada praktikumid+eksam kokku vähemalt 50 punkti.
NB! Eksamile võtta kaasa pildiga dokument.
Aeg, koht
Semester: kevad
Tulemus: eksam
Hindamise meetod: praktikumide tulemused (pool) pluss eksam (teine pool)
Loeng: neljapäeval 10:00-11:30 ruumis U05-103
Praktikum: reedel kell 10:00-11:30 ruumides ICT 121 ja ICT 122
Praktilised tööd ja tähtajad
Kokku on töid 2. Kumbki praktikum täismahus tehtuna annab 25 punkti, sellele võivad lisanduda ekstrapunktid. Puudulikult tehtud töö punktiarv jääb alla 25 punkti. Hilinenud kodutöö eest saab pooled muidu saadaolevad punktid.
- 1 praks on P2P rakendus: kas distributed ledgeri komponent või anonümiseeriv võrk. Tähtaeg 23 märts. Grupitöö 1-3 inimest.
- 2 praks: kas terve distributed ledger või autentimis-veebirakendus. Tähtaeg 11. mai. Grupitöö 1-3 inimest.
Loengukava
Kursus jaguneb laias laastus viieks teemaks:
- Protokollid ja P2P (neil teemadel - pluss veidi andme-apidest- esimene praks),
- Distributed ledger ehk bitcoini alustehnoloogia
- Paralleelrehkendused
- Veebirakenduste raamistikud e frameworkid
- Andme-apid, autentimine, pilvekeskkonnad, andmete hajutamine ja hajutatud andmete koondamine.
Päris hea õpiku saad tasuta alla laadida siit. Meie kursuse sisu on sellest õpikust küllalt erinev, samas on ka ühisosi.
Üldist materjali ja kursusi mujalt:
- http://en.wikipedia.org/wiki/Distributed_computing
- http://dcg.ethz.ch/lectures/podc_allstars/index.html
- http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-824-distributed-computer-systems-engineering-spring-2006/index.htm
- http://www.stanford.edu/class/cs244b/
Protokollid ja P2P
Protokollid
- Http ja json: võrgurakenduste protokollid 1
- Xml põhised protokollid, REST ja binaarsed protokollid
- xml protokollid xml-rpc, soap ja seotud tehnoloogiad: võrgurakenduste protokollid 2
- Probleemidest: veebiteenuste võlu ja valu ja s stands for simple
- REST, binary protokollid, XMPP: võrgurakenduste protokollid 3
- Gaffer on games: UDP vs TCP ja selle jätk
- Veidi seotud asi ad hoc networks vt ka Defendeci ja Jürgo Predeni patent
P2P sissejuhatus
P2P DHT (distributed hash tables) ja bittorrent
- ülevaade wikipedias
- Chord:
- Põhimaterjal - kas Chordi põhimõtted või vanem versioon, loe kuni Ivy osani Täiendavalt võib vaadata seda presentatsiooni visualiseeritud algoritmidega (ppt presentatsioonirezhiimis!)
- Lisaks tasuks veidi uurida artikleid wikipedia sissekande lõpus (external links)
- Kademlia:
- Põhimaterjal presentatsioon autoritelt
- Täiendavalt autorite artikkel
- Bittorrent:
- bittorrenti protokoll ja ülevaade
- täiendavalt wikipediast
- TOR:
- TOR wikipedias
Distributed ledger, ajatemplid ja bitcoin
Soovitav on lugeda neid materjale algusest: põhiasjad on esimestes, ning mida kaugemale edasi, seda detailsemad/spetsiifilisemad materjalid tulevad.
Kriitiline taust järgneva mõistmiseks
- https://en.wikipedia.org/wiki/Cryptographic_hash_function : ühtlaselt jaotuv hash, nii et kui püüad leida stringi S, et hash(S)=teadaolev_hash, siis parim viis S leidmiseks on lihtsalt random S-de katsetamine. Bitcoin kasutab SHA2 hash algoritmi varianti, mis annab tulemuseks 256 bitise (ehk 32 baiti) väärtuse.
- https://en.wikipedia.org/wiki/Merkle_tree : kirjete sidumine hashide puuna (veidi keerukam/efektiivsem, kui lihtne hashiahel). Mis on hashiahel: kui tahad siduda kirjeid K1, K2, K3, siis salvestad [K1,hash(K1)], [K2,hash(K2+eelmise hash (ehk hash(K1)))], [K3,hash(K3+eelmise hash(ehk hash(K2+hash(K1))))], jne, kus hashi-osa node N jaoks on üldiselt hash(KN+(KN-1 hashi-osa)) ehk hash(KN+hash(KN-1+hash(KN-2+hash(KN-3+...) ...)
- https://en.wikipedia.org/wiki/Proof-of-work_system : arvuti sundimine mõttetut tööd tegema, et raskendada spammimist. Levinud meetod on nõuda, et hashi alguses oleks N nulli (mida suurem N, seda raskem leida). Selleks tuleb sul hash(S) asemel katsetada läbi palju hash(S+nonce) arvutusi, kus nonce on random string, kuni juhtumisi saad N nulliga algava hashi.
- https://en.wikipedia.org/wiki/Blockchain : lihtsalt ülevaade kogu teemast
- Eelmiste asjade demo: vajuta üleval "Hash", "Block", "Blockchain" linkidele ja proovi igal lehel ise datat muuta ja "Mine" nupule vajutada. "Mine" teeb proof-of-worki ehk otsib random stringi (nonce) mille lisamisel datale saame mitme nulliga algava hashi.
Kasulik taust laiema pildi jaoks
- Konsensus hajutatud süsteemides: hea presentatsioon põhjalikumaks arusaamiseks (siin on klassikaline Bütsantsi kindralite probleemi artikkel, mis on suht keeruline)
- Põhjalikum konsensuse-artiklite-selgituste kogu
- RIA tellitud ja küberi koostatud eestikeelsest uuringust lugeda alates lk 15 ptk "Plokiahelad"
Best intro for reading
- https://bitsonblocks.net/2015/09/01/a-gentle-introduction-to-bitcoin/
- https://bitsonblocks.net/2015/09/09/a-gentle-introduction-to-blockchain-technology/
- https://bitsonblocks.net/2015/09/21/a-gentle-introduction-to-bitcoin-mining/
Põhjalik õpik
- Lae alla hea tasuta õpik
- Kui eelmine link mingil põhjusel ei tööta, mine õpiku lehele (sealt leiad ka videoloengud) ja otsi sealt alapealkiri "Free pre-publication draft" mille all on link "... for download here".
Python examples with detailed explanations
It is enough to go through one or two of these:
- One example http://ecomunsing.com/build-your-own-blockchain
- Another example
- An even more detailed example
- https://bigishdata.com/2017/10/17/write-your-own-blockchain-part-1-creating-storing-syncing-displaying-mining-and-proving-work/
- https://bigishdata.com/2017/10/27/build-your-own-blockchain-part-2-syncing-chains-from-different-nodes/
- https://bigishdata.com/2017/11/02/build-your-own-blockchain-part-3-writing-nodes-that-mine/
- https://bigishdata.com/2017/11/21/how-to-build-your-own-blockchain-part-4-2-ethereum-proof-of-work-difficulty-explained/
- And then some:
More details and tutorials
Have a look at the actual bitcoin data, latest blocks and transactions:
How does the P2P stuff work, i.e finding nodes:
- https://bitcoin.stackexchange.com/questions/3536/how-do-bitcoin-clients-find-each-other
- https://en.bitcoin.it/wiki/Satoshi_Client_Node_Discovery
Real hardcore documentation:
- https://bitcoin.org/en/developer-guide#p2p-network
- https://en.bitcoin.it/wiki/Protocol_documentation
Just a big collection of materials and examples: https://github.com/openblockchains/awesome-blockchains
Some additional OK tutorials:
- The Blockchain Explained to Web Developers, Part 1: The Theory. https://marmelab.com/blog/2016/04/28/blockchain-for-web-developers-the-theory.html
- The Blockchain Explained to Web Developers, Part 2: In Practice https://marmelab.com/blog/2016/05/20/blockchain-for-web-developers-in-practice.html
- https://medium.com/blockchain-review/how-does-the-blockchain-work-for-dummies-explained-simply-9f94d386e093
- Ever wonder how Bitcoin (and other cryptocurrencies) actually work? https://youtu.be/bBC-nXj3Ng4
- https://medium.com/@annamcabee/learning-about-block-chain-with-python-8b2178cf1fca
- https://crypto.stanford.edu/cs251/
Paralleelrehkendused
Esimene osa
Näited:
- Java näide loengust
- Thread, Queue ja Lock Pythonis
- C: alguses oli fork(), hea pthreads tutorial.
Loengunäide: TCP (HTTP) socket server
Kuidas TCP server elementaarsel tasemel töötab (Java tutorialid): Socket serveri sissejuhatus, threadidega server.
Skaleeruvus praktikas: Causality of Scalability, Designing for Scalability.
Lukustamine, andmebaasid jms
- Paralleelsus andmebaasides: slaidid.
Lisaks võib lugeda:
- Konspekt, käsitleb teemat oluliselt põhjalikumalt kui loeng/slaidid
- Introduction to Transactions (slaidid)
- Sünkroniseerimisprimitiivid: slaidid
Mittekohustuslik lisalugemine:
- Konspekt pikemalt ja põhjalikumalt loengus läbitud teemadest.
- T.Tammeti slaidid
Paralleliseerimise automatiseerimine ja klastrid
- Mapreduce framework
- Mapreduce katsetused Azure platvormil
- Mapreduce klassikaline põhiartikkel
- memcached
- memcached ülevaade
Andme-apid, autentimine, pilveteenused, andmete koondamine jms
Erinevad API-stiilid
- rest wikipedias ja rest tutorial (vt linke all!)
- odata.org: microsoft/oasis recommendations for rest style
- api design book download or api design book (must register)
- Graphql start and graphql vs rest and similar take on rest vs graphql and wrap rest in graphql
Suured avalikud andme-apid
- API-de kogu uurimiseks
- list of open apis from wikipedia
- google api explorer
- Andme-apide näiteid
- facebook api limitations/shutdowns in 2018
X-tee, RIHA ja riigi IT-infrastruktuur
- Ahto Kalja detailne ülevaade X-tee projektist aastast 2004
- X-road official page
- X-road security server manual (detailed)
- X-tee from the Finnish perspective and the X-tee/Json gateway and a nice REST api example from Finland
- newest X-road message protocol and corresponding metainfo protocol
- Example: X-road oriented Soap call tool for Python
- RIHA ja jutud RIHA kohta
Autentimine
- facebook, google, pangalink.
- Autentimise märkmed: facebook ja google
- veebiserveri seadistamine id-kaardi jaoks ja abistavad koodijupid
- taustaks id-kaardi kasutusstsenaariumid
Autentimise märkmed: mobiil-ID
Pilvekeskkonnad
Suured:
Pilveteenuse tarkvara:
Näide: Azure
Google appengine, database api, google bigtable and file system stack
http://cloud.google.com/appengine/ AppEngine on nüüd osa Google Cloud platvormist
Hajutatud failisüsteemide märkmed loengust
Lisamaterjalid
Hajutatud andmekogude integreerimine
- Postgres replication intro
- Postgres clustering and replication
- Postgres high availability
- Integrating distributed sem web data
- Oracle information integration