Ujukoma arvude eistamisel kaks põhiosa. eksponent ja mantiss ja mis nende mõte on.
Kuidas negatiivset arvu esitatakse.
Mis on tüüpilised täisarvu suurused, millega tüüpiline protsessor korraga hakkama saab.
Päis – ip pakett, mille sees on tcp pakett.c
Eksamil 10 küsimust. Kirjalikud vastused (ei ole valikvastused). 1/10 on
lugemisküsimus.
11. ja 12. nädala küsimused kõige kehvemini tavaliselt eksamil vastatud.
Nädal
Loeng 1
Loeng 2
1
ok
ok
2
ok
ok
3
ok
ok
4
ok
ok
5
30.09. ok
01.10. ok
6
07.10.
08.10.
7
14.10.
15.10.
8
21.10.
22.10.
9
28.10.
29.10.
10
04.11. Rekursioon
05.11. Helmes
11
11.11.
12.11. Kääramees
12
18.11. Masinõpe
19.11.
13
25.11.
26.11.
14
02.12. Priit Järv.
03.12.
15
09.12. Konsult.
10.12. E-valimised
16
16.12.
17.12.
1. nädal. Sissejuhatus: arvuti ja info, ajaloo algus ... 1940
Eksamiks: pead teadma suuruse-numbreid ja mida nad tähendavad: bitt, bait, kilobait,
megabait jne; oskad selgitada, kuidas tähti kodeeritakse, mis on algoritm ja mis
programm. Ajaloost: Kreeka loogikud, induktsioon, deduktsioon, süllogismid,
lausearvutus (pead mh oskama tõeväärtustabelit koostada), Pascal, Leibniz, perfokaardid,
kangasteljed, Babbage, Hollerith, colossus ja saksa krüptomasinad, Turing, Shannon,
Zuse, esimesed programmeeritavad arvutid.
Bitt - 1 binary digit
Bait – 8 bitti, 8 binaararvu.
Kilobait – 1024 baiti
Megabait - 1,048,576 bytes, 1024 kilobaiti
Mälu ehitatakse kahe astme suurustena. Siis nt 1024 on lähim kase aste 1000-le.
Tähtede kodeerimine – igale tähele on vastavusse pandud mõni number.
Kokkuleppeline. Nt ASCII kokkulepe – tabel, kuidas mingile numbrile paned vastavusse
mingi tähe. Püüab kodeerida kirjutusmasinat.
ASCII decimalid 0-127 (128 karakterit,
mahub 7 biti sisse).
UNICODE (extended ascii) – 4 baiti (4x8=32 bitti). Esimesed 128
on samad mis asciis. Ülejäänud on muud tähed. UTF8 on viis Unicode lühemalt käsitleda
(Unicode kompaktsema esitamise viis). 1,112,064 code points.
Algoritm - on täpne samm sammuline, kuid mitte tingimata, formaalne juhend millegi
tegemiseks. Toiduretsept. Juhend ruutvõrrandi lahendamiseks. Algoritmiline probleem
probleem, mille lahenduse saab kirja panna täidetavate juhendite loeteluna.
Programm - on formaalses, üheselt mõistetavas keeles kirja pandud algoritm. Arvutid
suudavad täita ainult programme. Posu mingeid käske.
Kreeka loogikud. Loogika on teadus mõtlemise alustest. Loogika uurib mõtlemise
paratamatuid aspekte ehk seda, mis üldse teeb mõtlemisest mõtlemise ehk õige mõtlemise
ehk seda, mida ja kuidas üldse mõelda saab. Loogikud Parmenides, Zenon Eleast
(promos paradokse, et asjad on keerulisemad kui nad paistavad (nt liikumist ei ole
olemas, Achilleuse kilpkonna paradoks jne)), Sokrates, Platon, Aristoteles. Kõrgaeg
kompaktne periood 5 saj – 350 e.m.a.
Fundamentaalsed mõtlemismeetodid:
Induktsioon – Õpid. Matemaatiline induktsioon (teistmoodi).
Deduktsioon - järeldad midagi. On mingid reeglid.
Süllogismid – Aristoteles leiutas. Väiksed reeglid. Iga x on y, mõni z on x. Järeldus mõni
z on y.
See on süllogism – väitlus, kus etteantud väidetest on väitlus, kus mingitest
etteantud väidetest (eeldustest) järeldub paratamatult uus väide. Aristotelese puhul alati
kaks kategoorilist eeldust, üks kategooriline järeldus.
Lausearvutus (pead mh oskama tõeväärtustabelit koostada) – seda oskab teha küll.
Alused 1847-1854. George Boole ja de Morgan. Matemaatilise algebra ideede
kasutamine loogika jaoks.
Pascal – kristlik filosoof (1640) esimene aritmeetiline masin, mis ainult liitis ja lahutas.
Isa oli maksuametnik ja nende kaudu müüs neid.
Leibniz (1646-1716), filosoof. Leibnizi arvuti, mis liitis, lahutas, korrutas ja jagas.
Perfokaardid – 1800
, Jacquard mõtles välja. Tema eesmärk oli teha automatiseeritud
kangasteljed. Perfokaaridga saab sama masinaga toota erinevaid tekstiile ja mustreid jne.
Perfolint mõeldi telegraafi automatiseerimiseks. Üks kaart on üks rida teksti (nt 8 rida
ühe baidina).
Babbage – 1822. Difference engine, jäi pooleli. Mõtles välja päriselt esimene
mehhaanilise programmeeritava arvuti. Väga suur ja ülikeeruline.
Herman Hollerith: 1890 : perfokaartidega masin USA rahvaloenduse andmete
töötlemiseks. Sellest firmast kasvas välja IBM.
Colossus ja saksa krüptomasinad – Saksa sõjavägi alates 1920 krüpteeris teksti.
Enigma krüpteeris (Lorenz jt ka).
Poola tuumik tegeles nende dekrüpteerimisega. Hiljem läks Inglismaale üle, Turing liitus
ka.
Colossus oli dekrüptimise masina nimi (1943 Londonis saksa allveelaevade salakirja
dekodeerimiseks).
Turing - Alan Turingi idee, milline võiks olla lihtne universaalne arvuti: suudaks
arvutada/järeldada kõike!!
Turingi tees: kõike, mida üldse saab mingi masinaga
arvutada/järeldada, saab ka Turingi masinaga arvutada. Teoreetiline masin, mida
tegelikult ei teinud. Lihtsa programmeeritava mehhaanilise arvuti tegemise õpetus
sisuliselt. Kõik programmeeritavad arvutid on võimelised tegema seda mida teisedki
programmeeritavad arvutid. Vahe on kiiruses.
Shannon - MIT, 1938 , Shannon i magistritöö sidus: Boole algebra. Elektrilülitid ja
skeemid. Bitid ja info kodeerimine. Info otsimise algoritmid. Mõtles välja info
kodeerimise teooria (kuidas info bittidesse pakkida efektiivselt).
Konrad Zuse – Z1. (1936). Oli oma proge keel. 1941 päris esimene mehhaaniline
programmeeritav arvuti, Turing Complete 1998. Täitsa ise tegi. Programmeeritavate
arvutite pioneer Saksamaalt. By 1967, the Zuse KG had built a total of 251 computers.
Due to financial problems, the company was then sold to Siemens.
Esimesed programmeeritavad arvutid.
2. nädal: Keskajalugu 1940-1960 ja e-riik.
Eksamiks: transistor, Samuel, Shockley semiconductor, Fortran, Fairchild, Sage, Texas
instruments, integraalskeem, cobol, lisp, pdp-1, system 360, moore's law, intel, amd,
Engelbart, Unix, esimene mikroprotsessor. E-riigist: mis on x-tee.
Transistor – leiutati 1947. Nendest arvutid on tehtud ja peaaegu kogu elektroonika on
tehtud. Leiutati Bell Telephone Laboratories firmas, telefoni monopol. Shockley, Brattain
ja Bardeen said Nobeli selle eest.
Samuel – 1952, mõtlemisarvutimängude esiisa. IBM. Tema mäng püüdis ka õppida.
Shockley semiconductor – 1955. Püüdis teha kommertsiaalset transistorit. Ettevõte
kõrbes. Sellest pundist inseneridest tekkis
Intel ja AMD mõlemad.
Fortran – 1957. Formula translator. Esimene kõrgtaseme keel. IBMis välja töötatud.
Võimaldas loopide abil teha korduvaid tegevusi. Insenerülesannete lahendamiseks
mõeldud. Selge nišš füüsikutel jms.
Fairchild Semiconductors – 1957. Shockleyst 8 inseneri tegid. Pooldus hiljem.
SAGE – 1958. Interneti esiisa. Semi-Automatic Ground Environment. Suur võrgustik
tuumasõja valveks. Esimene suur arvutite suhtlemise võrgustik.
Texas Instruments – 1954. Juhtiv arvutitükkide tootja. Kommertsiaalsed silikoon-
transistorid. 1958
Kilby tegi seal integraalskeemi. Samal ajal Robert Noyce tegi selle
Fairchildis.
Integraalskeem – vt eelmist :) 1960 Fairchild tegi esimese kommertsiaalse
integraalskeemi.
COBOL – 1960. Teine kõrgkeel. Common Business Oriented Language. Mereväes
logistika ja laomajanduse jaoks. Seda juhtis Grace Hopper (admiral). Ajaloolisel põhjusel
USA suurtes pankades, kindlustusettevõtetes jne. Ei visata kergelt ära. Aga antiikne keel.
LISP – 1954. John McCarthy loodud tehisintellekti jaoks sobiv programmeerimiskeel.
Teise fookusega kui Cobol. Kultuskeel. Tohutult mõjutanud paljusid keeli (Python,
JavaScript). LOGO oli lihtsam Lisp lastele. Seymour Papert mõtles välja.
pdp-1 – 1960 Digital Equipment Corporationi tehtud arvuti, mida ülikoolidele müüdi.
Kommertsiaalselt õnnetu asi. Toodeti 50 tk ja sellele tehti esimene videomäng Space
War! PDP-8 oli esimene päriselt edukas. 5x odavam kui IBMi mainframe’id.
System 360 – 1964. IBMi süsteem. Perekond mainframe’e, kus saab teha kokkusobivad
seadmed. Et arvutile sobib ketas ja printer jne. Varem sellist ei olnud ja pidi eraldi
progema hakkama. Sellele tegid ka op.süsteemi OS360.
Moore's law – 1965. Moore oli Inteli president pikalt (Fairchildi asutaja). Prognoos või
tähelepanek tulevikuks. Ühe integraalskeemi peal olevate komponentide (transistoride)
arv kasvab umbes 2x 1.5 aasta jooksul. Pannakse tihedamalt või skeem läheb suuremaks.
Ei räägi kiirusest!
Intel - 1968. Moore ja Noyce teevad Inteli
AMD – 1969 loodi paralleelselt Inteliga. Fairchildist inimesed tegid mõlemad.
Engelbart – 1963 Stanfordis. Mõtles välja hiire. 1968 mõtles välja kaasaegse välimusega
Wordi analoogi, kontorikomplekti. Ei läinud reaalsesse kasutusse kunagi aga demo on
kuulus (kõigi demode ema).
Unix – 1969 tehti. Esimene OP süsteem, mis on siiani kasutusel. Tegid DECil, AT&T
Bell Labis. Unixist arenes Linux ja Apple OSid.
Esimene mikroprotsessor – 1970. Intel tegi esimese 4004 mikroprotsessori kalkulaatoris
kasutamiseks.
4. loeng e-riigist: mis on x-tee.
Esimene rakendamine 2001. Esimene piiriülene teenus
2009. 75 miljonit päringut iga kuu. Tehniline ja organisatsiooniline keskkond, mis
võimaldab turvalist ja tõestusväärtust tagavat internetipõhist andmevahetust riigiasutuste
vahel ja erasektoriga. Teabe vahetamiseks kirjeldab üks X-tee liige jagatavad andmed
ning kõik teised liikmed saavad kokkuleppe alusel seda infot kasutada. Kuna X-teega
liitunud süsteeme on palju, saavad X-tee liikmed oma äriprotsesside tõhustamiseks
kasutada teiste liikmete teenuseid ja andmeid. X-teel on mitmekülgne turvalahendus:
autentimine, mitmetasemeline autoriseerimine, kõrgetasemeline logide töötlemise
süsteem, krüpteeritud ja allkirjastatud andmeliiklus.
3. nädal: Keskajalugu 1970 ... 1990 ja küberkaitse.
Eksamiks: esimene mikroprotsessor, sql, arpanet, atari, cp/m, winchester, altair, alto, unix
ja C, microsofti algus, apple algus, 1977 koduarvutid, visicalc, apple II, symbolics, ibm
pc, sun, oracle, macintosh, apple ja microsofti tooteliinid. Küberkaitse termineid:
turvateater, malware, cookie, phishing, social engineering.
esimene mikroprotsessor
SQL – 1970. IBMis. Andmebaasikeel. Honeywell Information Systems.
Kommertstootena 1976.
ARPANET – 1971. Interneti sünd. Katse võrguprotokolli jaoks.
Atari – 1972. Esimesed suurema levikuga arvutimängud. Nolan Bushnell. 1977 sai
sellest koduarvuti firma. Esimene kolmest edukast. Warner ostab 26 miljoniga ära.
CP/M – 1973. 10ks aastaks kõige suurem OP süsteem koduarvutite jaoks. Gary Kildall.
Sellest võinuks saada midagi nagu Windows vms.
Winchester – 1973. Hard disk unit. IBMi tehtud.
Altair – 1974. MITS, pisike ühemehefirma teeb esimese väikearvuti. Müüb miljoni eest
seda. Gates ja Allen hakkasid Altairi jaoks softi tegema ja sellest sai alguse Microsoft.
Said sellest inspiratsiooni, et teha mikroarvutit.
Project Alto – 1972. Xeroxi mõte teha väikest kontoriarvutit. Mõjutas Maci ja
Microsofti, kes käisid seda vaatamas. Xerox ise ei suutnud mõelda, kas müüma hakata
või mitte. Tohutult mõjus masin, kuulus arvuti, mida kunagi õieti müüma ei hakatud.
UNIX ja C – 1969 AT&T Bell Labsis Kenneth
Thompson ja Dennis
Ritchie tegid.
Thompson mõtles UTF8 välja ühe õhtuga, mõtles välja ka keele B. Richie tegid sellest
keele C, et oleks UNIXit kergem kirjutada.
C – 1970ndate esimeses pooles. autorid on (Thompson ja) Ritchie ja Kerninghan.
Peaaegu kõik baasasjade softid on Cs kirjutatud. Laseb progejal kõik ise teha.
Microsofti algus – 1969. Gates ja Allen tegid testtöid ja kutsusid end Lakeside
Programming Group. Hiljem tegid Traf-o-Data. Micro-Softi toode oli BASIC unixi jaoks.
Apple algus – 1975. Wozniak insener. Jobs müügimees.
1977 koduarvutid – Esimesed massiliselt edukad koduarvutid. Commodore PET
(personal electonic transactor). Apple II. TRS-80 (Tandy Radio Shack) - prognoosisid
3000 aastas müüki aga müüsid kuuga 10 tuhat.
Visicalc – esimene spreadsheet 1979. Algselt Apple II jaoks. Daniel Bricklin ja Robert
Frankston tegid. Aga hiljem tuli Lotus, mis tegi kogu kontoritarkvara paremini.
Apple II – 1976 alustab Wozniak tööd selle kallal. 1977 saab valmis. Üks esimestest
populaarsematest koduarvutitest. 1983 tehti miljonis arvuti.
Symbolics – 1980. Created special hardware for running LISP programs (mostly AI)
efficiently.The whole system written in LISP. Väga kallid arvutid.
IBM PC 5150 – 1981 hakkab tegema koduarvutit. Muutus väga suureks asjaks ja suretas
kõik teised koduarvutid välja. Microsoft oli peamine tarkvara pakkuja neile (ostsid MS-
DOSi Seattle Computer Productsist), kuna IBM polnud ise väikestele arvutitele varem
teinud.
Sun Microsystem – 1976 Bill Joy asutab. Sun Microsystems is founded. "SUN"
originally stood for Stanford University Network. Motto “Network is the computer”. First
workstation introduced. It includes TCP/IP, now known as the Internet protocol suite
(NOT invented by Sun).
Oracle ostab ära. Teeb Java keele.
Oracle – 1983 Relational Software Inc. changed its name to Oracle Corporation.
Macintosh – 1984. Lisa (1983-1986) odavam versioon. the first successful mouse-driven
computer with a graphic user interface, with a single $1.5 million commercial during the
1984 Super Bowl.
Apple ja Microsofti tooteliinid -
Küberkaitse termineid 17.09.2019:
Turvateater – lae alla tarkvara ja sinu arvuti on turvaline. Tehakse tegevusi, mis loovad
ettekujutuse turvalisusest (nt lennujaamas turvakontroll), mis tegelikult pole turvalisust.
Hea küberturbe loeng on, kus on Alice ja Bob.
DDoS on distributed denial of service.
Malware - any software intentionally designed to cause damage to a computer, server,
client, or computer network (by contrast, software that causes unintentional harm due to
some deficiency is typically described as a software bug).
Cookie -
Phishing - the fraudulent attempt to obtain sensitive information such as usernames,
passwords and credit card details by disguising oneself as a trustworthy entity in an
electronic communication.
Social engineering - the psychological manipulation of people into performing actions or
divulging confidential information.
4. nädal: Lähiajalugu 1990-... ja e-riik edasi: ohud, analoogid.
23.09.2019.
Eksamiks: Python, html ja http, internet eestis, linux, netscape, usenet, php, päevalehed
eestis, palm pilot, google, deep blue, wikipedia, x-tee.
Python – 1989. Guido van Rossum. Suur kogemus progekeelte alal. Kogu aeg kasvanud.
Python 3 tuli 2008 ja ei olnud backward compatible.
HTML ja http – 1990. brauser sündis ka. Internet oli juba ammu olemas (e-mail, AOL
veebi moodi asjaga, jne). Tim Berners-Lee tegi füüsikute jaoks mugava
publitseerimistööriista ja tuli HTML. Kirjutas ise väikse serveri ja brauseri, mida oleks
lihtne kasutada. TBL browser jooksis NeXTi (Jobsi startup, unixi põhine kõva lauaarvuti)
peal.
Internet eestis – 1990. e-post ja USENET. Ühendus Küberneetika Instituudi ja soome
UNIXi kasutajate seltsi vahel. Päris TCP/IP 1992. üle satelliidi esmalt Tallinn-
Stockholm-Tartu. Teine liin oli kaabliga Helsingis. Elasid välisrahastusest ja olid
mõeldud akadeemiliseks tegevuseks.
Linux – 1991 tegi Linus Torvalds Helsinki ülikooli tudengina op.süsteemi. Kasutas
Minixit ja Gnud. 1194. Linux 1.0. 2004. Ubuntu, mis on kõige suurem Linuxi distro.
Netscape –
1994 NCSA www-meeskonnast sündis
Netscape Navigator (esimene suur
brauser). $4 miljonit James Clarki investeering. 1995. läks börsile. IE oli kehvem. Raha
teenimise võimalust ei tekkinud. Müüsid maha AOLile. Tegid koodi vabavaraks ja sellest
sai Mozilla ja Firefox.
Usenet – 1984 (vist, sest Netscape ajaks oli see juba 10 aastat olemas olnud).
ülemaailmne uudisgruppide süsteem. Nagu Reddit. 1994. Netscape message on USENET.
Olid moderaatorid. Sai levitada massiliselt infot.
php – 1994., samal ajal koos mysqliga (mida tegid Michael Widenius ja David Axmark).
Progekeel veebilehtede tegemiseks. Pole inimeste lemmik. MySQLi branch on MariaDB.
Päevalehed Eestis – 1995. Eesti esimene päevaleht internetis. EPL zzz.ee serveris. Iga
ajastu oma stiilis.
Palm pilot – 1996. väga edukas esimene pihuarvuti. Algselt US Roboticsi oma.
Google – 1997. Larry Page ja Sergey Brin Stanfordis tegid raamatukogule süsteemi.
Mõtlesid, et hea oleks kasutada sellist asja nagu page rank. 1998 Sun co-founder andis
100,000. 1999 sain 25 miljonit Sequoia Capitalilt ja Kleiner Perkins.
Deep blue – 1997. IBMi poolt tehtud paralleelarvuti spetsiaalselt male jaoks. Ametlik
matš. Täna iga normaalne laptop on suurema arvutusvõimsusega kui Deep Blue.
Wikipedia – 2001 loodud, progetud phps.
X-tee – 2001. Infovahetus riigiregistrite süsteemide ja andmebaaside vahel. Cybernetica
AS, Assert/Fujitsu ja Küberneetika Instituut hakkasid ehitama.
5. nädal: Programmeerimise alused, masinalähedane
programmeerimine ja andmetüübid
Eksamiks: turingi masin, relee, mälutüübid. Lihtsad andmetüübid (täisarvude, ujukoma-
arvude, tähtede esitamine), stringid, massiivid, puud.
Turingi masin – ei ole reaalne asi. Turingi masina mälu on lint, mida loeb/kirjutab eraldi
pea. Programm on eraldi tabelis ridadena, mis kõik on kujul. Loeb andmed lindilt
(magnetlint hea). Väike mälu, mis ei ole lindil ja jätab meelde seisundit. Ei ole von
neumanni tüüpi, sest mälu ja programm on eraldi.
Relee – mootoriga lüliti. Vedru hoiab lahti. Magnet tõmbab kinni (kui magnetile voolu
anda). Transistorid teevad sama asja. Saab kasutada näiteks lausearvutuse
realiseerimiseks.
Mälutüübid – Mälu on aeglane ja ei lähe eriti ruttu kiiremaks. 10 nanosekundit. Mälu ei
ole tehtud transistoridest vaid on tehtud kondensaatoritest Arvuti põhimälu DRAM on
ehitatud väikestest kondensaatoritest: iga kondensaator hoiab ühte bitti. Tema juhtimiseks
on kasutusel veel üks transistor.
Kondensaatoritega mälu ei osata väga kiireks teha.
Kondensaatoritega mälu on odav.
Protsessori registrid (eriti kiired mäluosad)
ja cache mälu (abimälu põhimälu ja
registrite vahel) on ehitatud transistoridest (SRAM): 4 või 6 transistori ühe biti kohta. See
on kiire tehnoloogia. Samas on see kallis. Arvuti kiirust mõjutab cache suurus.
SSD (flash mälu, mälupulgad) on samuti transistoridest, aga aeglane ja odav.
RAM on 250x aeglasem kui register. 100x aeglasem kui L1 cache.
01. oktoober
Andmete esitamine on puhtalt oma teha.
Lihtsad andmetüübid – täisarv, ujukoma-arv, sümbol ehk täht. Millest protsessor aru
saab.
Keerukamate jaoks (list, string) kasutame teegi funktsioone, mis keegi on juba valmis
progenud. Kasutavad oma süntaksit.
Täisarvude (A la 34, 4545, 0, 92829292) – põhiasjad, millega protsessor tegutseda
oskab. Mälust lugeda, mällu kirjutada, teha tehteid…Protsessor oskab kasutada 4 ja 8
baidiseid täisarve. Cache mälust loetakse alati korraga vähemalt 8.
Negatiivsed täisarvud – esimene bitt määrab, kas arv on negatiivne või mitte.
Ujukoma-arvude – Kasutatakse 8 baiti. Teine variant on 4 baiti. Suuruse näitaja on
eksponent, numbritega osa on
mantissa ja üks
bit on negatiivse-postiivse jaoks ka.
Mantissa osa on suurem. IEEE standard, et kõik protsessorid üht moodi kodeeriks. Arvud,
mis kümnendsüsteemis esitad, ei pruugi kahendsüsteemis välja tullagi sest on piirangud.
Tähtede esitamine – ühe tähe kodeerimiseks 1 bait (C), Java kasutab 2 baiti. Pythonis
muidu ühebaidised aga täpitähed näiteks 2 baidised. On mitu erinevat teksitüüpi (UTF8
või binary tekst).
Stringid - Tekst on lihtsalt jada baite mälus järjest pluss pikkuse määrang. Lihtsamal
juhul (ascii ja iso 8859 1 kodeeringud) on üks täht üks bait. Keerukamal juhul (utf8) on
ascii tähed üks bait, teised rohkem. Java stringides on üks täht kaks baiti.
Pikkuse määrangut tehakse kahel eri viisil:
C stringid lõpevad baidiga 0.
Pythoni, Java, Javascripti jne stringide osaks on eraldi
pikkuse number.
Java stingidel on pikkuse number ja veel lisainfot (lukustamise piirkond, klassi info).
Massiivid ja puud on komplekstüüp.
Massiivid - Massiiv on jada ühetüübilisi väärtusi: tähti, täisarve, ujukoma arve, teisi
massiive vms. Tüüpiline juhtum on lihtsalt jada täisarve mälus. Näide kahebaidiste
arvude massiivist mälus:
Alumine on aadress ja ülemine on tegelik aadress.
C-keeles massiivil ei ole pikkuse numbrit. Hoiad ise eraldi muutujas nt. C keeles ei
sisalda massiiv mingit pikkuse-numbrit. Programmeerija peab ise teadma või eraldi
salvestama, et kui suur mõni tema tehtud massiiv on. Java ning Javascripti ja Go
massiivid sisaldavad lisaks andmetele ka massiivi pikkuse numbrit.
Kahemõõtmeline massiiv on näiteks tabel.
Olgu meil vahelduseks
stringide massiiv: ta sisaldab eri stringide alguspunktide
mäluaadresse . Stringid ise ei pea olema lähestikku
Pythonis stringil on kaasas pikkus ja mäluaadress (pointer).
Puud – puul ei ole progekeeles täpset tähendust. Näitepuud koosnes iga element
väärtusest ja kahest mäluaadressist. Progemises piisab kahendpuudest peaaegu alati.
Kui sa Pythonis kirjutad A = [1, 5, 2, 4] siis tehakse sulle massiiv mäluaadressidest:
pointeritest karbistatud objektidele. Pythonis ja Javascriptis ei ole üldse tüüpe, kõik
muutujad sisaldavad pointereid.
6. nädal: Programmeerimiskeeled ja suurte infosüsteemide
andmearhitektuur. 7. oktoober
Eksamiks: kompileerimine, interpreteerimine, parsimine, jit, vahekood,
programmeerimiskeeled vs kirjelduskeeled, json, html, sql, keelte äratundmine
(assembler, fortran, cobol, lisp, C, modula/pascal, python).
Programmeerimiskeeled ja assembler on inimese jaoks. Masin nendest midagi aru ei saa.
Kõik progekeeled peale assembleri on kõrgkeeled. C ja Fortran on masinalähedased.
Kompileerimine - kompilaator teeb neist assemblerikeelsed ajutised failid. Kompilaator
teeb assemblerfailidest masinkood+sümbolinfo failid. Kompileerimisel on palju faase.
Analüüs, koodi genereerimine, optimeerimine. Lõpptulemus on target code.
Kompileerimine: masinkoodis programm nimega kompilaator teisendab keeles X
programmi masinkoodfailiks Y. Seejärel täidetakse saadud masinkoodis programm Y.
Näited: C, Fortran, Go. Kompileerimine võib võtta aega. Siis võib kasutada
interpreteerimist.
Kompilaator kompileerib X faili vahekoodiks Y, seejärel interpreteeritakse vahekoodi Y
(Python, Java).
interpreteerimine - masinkoodis programm nimega interpretaator loeb sisse X keeles
faili, teisendab ta nö pseudo-assembleriks / vahekoodiks ja asub seda vahekoodi varianti
rida-realt täitma. Programmi interpreteerimine on ca 10-200 korda aeglasem, kui
kompileeritud koodi täitmine.
Näited: Python, PHP, Perl, vanemad Javascripti mootorid jne.
parsimine -
jit - Interpretaator interpreteerib vahekoodi Y, kuid kompileerib töö ajal osa Y-st
masinkoodiks, mida seejärel täidab (Java, C#, Firefoxi Javascript) nn
just-in-time
compilation ehk JIT. Hoiab Javat kiirena.
vahekood - Vahe kood on asembleri sarnane kood, mis lubab programmil kiiremini
töötada
programmeerimiskeeled vs kirjelduskeeled - HTML on kujunduskeel, selles
programme ei saa teha.
json - kirjelduskeel. Iga keerulisem andmestruktuur on hea esitada kohe jsonina.
Tekstiline kuju, mida on hea parsida. javascript object notation.
HTML - kujunduskeel, mida brause interpreteerib. JavaScript on progekeel, millega
saad muuta nt HTMLi datat. Kujundusemärgenditest koosnev.
SQL - päringukeel (aga oli slaididel kirjelduskeelte slaidil). Andmebaasist data
pärimiseks.
CSV-s kujundusasju pole (erinevalt Excelist) ja tänu sellele on seda hea programmiga
sisse lugeda.
keelte äratundmine
assembler -
fortran -
cobol -
lisp -
C -
Modula/pascal -
Python -
C. Loogeliste sulgude ja seminkoolini järgi
tunneb ära. Annab tulemuseks trükib välja
täisarvu 55. Teeb 10 liitmist 0-9…
Assembler. Näeb midagi sellist välja.
json
html
sql
Fortran. Summeerib arve 0 - n
Cobol. Summeerib arve 0 kuni n. Nagu
inglise keel. Progejatel ei meeldi pikad
tekstid.
LISP. Summeerib arve 0 – n
Kõik lispi proged on data ja proge samal ajal.
Saab teha hästi lihtsat proge. Listi süntaks on
ainuke ja sellepärast hästi palju sulgusid.
C. Summeerib arve 0 kuni n
Python. Summeerib arve 0 - n
Pascal. Tsükkel lõppeb END. Koolonid ja
sulud.
Mis on data warehouse - andmehoidla (data warehouse) on eri liiki andmebaas. dDta
warehouse (DW or DWH), also known as an enterprise data warehouse (EDW), is a
system used for reporting and data analysis, and is considered a core component of
business intelligence. DWs are central repositories of integrated data from one or more
disparate sources. They store current and historical data in one single place that are used
for creating analytical reports for workers throughout the enterprise.
Python - on eriline, sest sellel on taanded, mis on süntaksi osad. Ilma tüübita keel.
7. nädal: Operatsioonisüsteemid ja tekstitöötlus. 14. ja 15. okt.
Eksamiks: opsüsteemi roll, mis on distro, mis on Linux, mis on mac OS X, Android,
protsessid, multitasking, paralleeltöö, wait/run, mis on interrupt, mis on virtuaalmälu.
Tekstitöötlus: lihttekst, WYSIWYG, kooditabel, ascii, unicode, utf-8, mis on latex,
markdown.
opsüsteemi roll - OS ehitab programmide jaoks simuleeritud virtuaalmaailma.
Opsüsteemi põhieesmärgid: Pakkuda programmeerijale valmistehtud standardtükke.
Võimaldada kasutajal arvutis ühtemoodi ja harjumuspäraselt tegutseda, sõltumatult
sellest, mis programmid tal arvutis on. Arvutit saaks programmeerida ka ilma
opsüsteemita. Sel juhul: Oleks iga programmi tegemine palju raskem, kasutajate jaoks
näeks eri programmid väga eri moodi välja. Kui opsüsteemi ei oleks, peaks iga programm
paljusid asju ise teha oskama (leida mälu, proge avada, kinni panna, võrguga suhelda,
kettalt lugeda, kirjutada jne)! Hetkel 4. põlvkonna OSid.
mis on distro – tuum (nt Linuxi tuum) + draiverid + kasutajaliidese osad + tohutult softi
paketeeritud kokku installeerimistarkvaraga. Neid on meeletutes kogustes. Neid
ehitatakse olemasolevate distrote peale ja muudetakse midagi ära. Olulisemad nt Debian,
RedHat, Ubuntu jne.
mis on Linux – Unixi tasuta versioon, mis jookseb paljudel protsessoritel (Intel, ARM
jne paljud väikesed eksootilised protsessorid). Üks osa on Linuxi tuum, mis on suhteliselt
väike.
mis on mac OS X – Apple desktop operatsioonisüsteem, mille mikrotuumaks (kernel
base) on Mach (CMU). Nüüd töötab Intelil. Palju rõhku on sellele pandud, kuidas aknaid
teha (GUI).
Android – Linuxi distro (tinglikult) telefonide jaoks. Androidi tuuma sees on SQLite.
protsessid – proge, mis on käima pandud. Vaja mälupiirkonda, kus ta töötab ja seisundit
(state – registrid, pointer jne). Ühed protsessid võivad potentsiaalselt käivitada teisi
protsesse. Opsüsteem kaitseb üht protsessi teise eest.
multitasking -
paralleeltöö – ühel tuumal üks protsess korraga. Protsesside hulk on piiratud.
Paralleeltööd on illusioon. Igale tööle antakse natuke aega järgemööda (vist juhuslikus
järjekorras).
wait/run – protsessidel on olekudiagramm. Nt kui ootab inimese sisendit (väline tegevus
nt võrgust lugemine, kettalt lugemine), siis ta paneb protsessi blocked olekusse. Kui
tingimus on jälle täidetud, siis läheb jälle edasi.
Mis on interrupt - The interrupt handler must save the machine state, do some
processing, then call the process scheduler and dispatcher. See on hetk, kus protsess
pannakse seisma. OS salvestab maha registrite seisu, et oskaks seda uuesti käivitada.
OPsüsteem on regulaarselt valmis kuulama, kas keegi tahab talle midagi öelda.
Mis on virtuaalmälu - Virtuaalmälu: OS mapib reaalse mälu „näilikuks“. 1. Kui mälu
saab otsas, siis swapib osa mälu, mida aktiivselt ei kasutada, kettale. Või läheb mälu
asemel lihtsalt osa otse kettale. 2. Füüsilises mälus tükid ei tule järjest vaid luuakse
ettekujutus, et tulevad järjest.
Mälupüramiid
Tekstitöötlus:
Lihttekst – plain text, kogu info tekstina, võib sisaldada kujundusmärgendeid. HTML,
Markdown, LaTeX, PostScript (loevad printerid). Rõhk sisul, mitte vormil. Tulemus
jõuab kiiresti. Ebamugav lugeda, tulemust pole näha, nõuab süntaksi tundmist, rohkem
kirjutamist.
WYSIWYG – what you see is what you get. Lõplik vormindus redigeerimisel kohe näha.
Mugavam lugeda, vorm domineerib sisu üle.
Kooditabel – teksti kodeering. Ascii (7 bit) tabel, esimesed 127 märki. 0 on null. Kõik
inglise tähestiku märgid ja osad sümbolid, millele on vastavuseks number. Kui tekst
kodeeritakse ühega ja dekodeeritakse teise tabeliga. Koodutabel määrab kuidas faili
näidatakse. Kaasajal räägitakse UTF8st. Unicode (1-4B). Kui ei taha vaeva näha, siis
kasuta seda.
Ascii -
Unicode -
Utf-8 -
Mis on LaTeX – TeX Donald Knuth 1978. Tekstilao (paiknemine, jaotumine ridadeks-
veergudeks, joondamine jne) kirjeldamise märgendikeel. Mõte on lihtne ja ilus
küljendamine sõltumata arvutisüsteemist. LaTeX on TeXi edasiarendus struktuuri ja sisu
haldamise makrodega, mis hõlbustaks TeXi kasutamist. Kasutatakse akadeemiliste ja
tehniliste dokumentide tegemiseks (hea valemeid teha).
Markdown – märgistuskeel teksti vormindamiseks (John Gruber 2004, juhendite,
kommentaarid jms lühikeste tekstide loomiseks). Puudub ühtne standard ning algselt
puudu osad vajalikud elemendid. Erinevad dialektid erinevates keskkondades. Erinevalt
TeXist lihtne lugeda ka vormindamata kujul ja veebikeskkondades levinud. Arvutis saab
kasutada markdown editori.
8. nädal: Tarkvara arhitektuur ja tabelarvutus 21.10.
Eksamiks: mis on teek ja mis raamistik, nende näited, arusaamine põhilistest
litsentsitüüpidest (vabavaralised (gpl vs mit ja bsd) ja mitte-vabavaralised), gpl-i
põhipoindid. Tabelarvutuse kohta küsimusi ei tule.
Fowler on arendusmetoodika guru. Arhitektuur on udune mõiste, mis peaks kirjeldama,
mis on tähtis. Peab saama kergesti muuta ja täiendada (sageli teiste poolt).
Tarkvara/rakendus on sotsiaalne konstruktsioon, mille osaks on ka inimesed, kes seda
kasutavad ja arendavad. Tarkvara juures on oluline teha kõike teha võimalikult lihtsalt
(kasutada olemasolevaid tükke, vältida fancy asju, planeerida nii et saaks edasi
arendada kergelt).
Keerukuse surve.
Näiliselt lihtsad asjad ei ole tavaliselt lihtsad. Law of leaky abstractions. Abstraktsioonid
tilguvad läbi. Kui teed mingi asja peale, mida sa ei tunne, siis võid sattuda keerukuse
peale.
No Silver bullet – uued tehnoloogiad tarkvaras nt OOP ei tee tarkvara arendust
drastiliselt keerulisemaks. on läinud efektiivsemaks aga järsku hüpet ei ole olnud. Fancy
meetod ei tee tarkvara tegemist palju keerulisemaks. Teise keele kasutamine ei tee
lihtsamaks. Keerukas ei ole andmestruktuur või tsüklid vms vaid see ülesanne mida sa
lahendad. Maleprogramm on keeruline sõltumata keelest.
mis on teek – library. Väikesed jupid, mis teevad mingid konkreetset asja. Konkreetseid,
piiratud funktsioone realiseerivad väikesed komponendid ja nende komplektid . Mõned
komplektid on hiigelsuured. Funktsioonide näiteid: Trükkimine, faili kirjutamine,
võrguühenduse avamine.
mis raamistik – framework. Keegi tegi juba proge, mis on laiemalt kasutatavat sorti.
Pooltooteline asi, kus suured tükid on ära tehtud. Saad ise täiendada ja ära visata.
Edasiarendamiseks ja ümbertegemiseks mõeldud terviklikud näite rakendused, levinud
eeskätt tüüpiliste “ andmebaasi kesksete veebirakenduste jaoks. Igast hästi läbimõeldud
rakendusest võib saada selline näiterakendus. Lihtsa asja jaoks raamistiku kasutamine
pole hea. Populaarseid raamistikke: Java Spring, Ruby on Rails, JavaScript Angular,
Python Django.
nende näited –
Litsents on lihtsalt ühepoolne võta või jäta “ leping, et kuidas tarkvara tohib kasutada.
Kommertslitsentsid on väga mitmekesised: igaüks kirjutab endale sobiva. Vabavara on
vahel dual licenced: valid, kas kasutad piirangutega vabavarana või teistsuguste
piirangutega kommertslitsentsiga. Vabavaralitsentside hulgas on mitmed rohkem/vähem
vabad kategooriad.
Vabavara (filosoofiline mõiste) on erimoodi olemas. Vaba on nagu „free speech“ (võib
modifitseerida, levitada, kasutada) pigem kui „tasuta õlu“. Sageli on olemas piirangud.
Vabavara ei pea olema tasuta. Seda võib müüa ka (aga ei pruugi osta, sest saab ka tasuta).
Võib mis iganes eesmärgil käima panna, peab olema lähtekood (open source kaasas aga
sourcega kood ei ole tingimata vabavara). Alati, kui sellest tükist tekib mingi jura, siis
mina pole süüdi.
Arusaamine põhilistest litsentsitüüpidest -
Vabavaralised (gpl vs mit ja bsd) – GPL tüüpiliselt „õigus kasutada ja arendada“ aga kui
teed, siis litsents kandub edasi (ei tohi öelda, et sinu tehtud).
MIT ja BSD on on väga lihtsad litsentsid. Teha mida iganes aga mitte ennast panna
autoriks. Võib kasutada ka kommertsiks. BSD samasugune aga mingite lisatingimustega.
Mitte-vabavaralised -
GPL-i põhipoindid – see konkreetne tarkvara vabaks kaustamiseks aga kui midagi teed,
siis see teine tarkvara peab kasutama sama litsentsi (nt kui paned oma tarkvara sisse).
Kleepuv litsents, et maksimaalselt leviks. Võite kasutada küll aga ei saa kasutada oma
litsentsi pärast seda. Keegi ei saa legaalselt ära pätsata. Algne autor saab anda
kommertslitsentsi, kui keegi soovib müüa. Piirab kasutamist enamvähem mõistlikult ära.
LGPL lubab kasutada ka teegina.
9. nädal: Võrgurakendused ja interneti funktsioneerimine. 28. ja
29. okt.
Eksamiks: mis on http, https, html, css, javascript, ajax, json, xml (näiteks ära tunda, kas
see on json või XML), kuidas üldjoontes töötab klassikaline veebirakendus ja kuidas
single-page app (koodinäiteid / nende detaile ei küsita).
Arvutivõrgud: mac aadress, ip aadress, port, ethernet, ip, tcp, udp, kapseldamine (mis
mille sees). Päiste detailide kohta ei küsita.
Mis on http – HTTP on omaette protokoll TCP peal , mida kasutatakse veebilehtede ,
piltide , tekstifailide , zip failide , jsoni jne jne saatmiseks veebiserveri ja brauseri vahel.
http protokolliga päring üle TCP/IP serveri porti. http protokolliga vastus üle TCP/IP
kliendi porti (mis port, selle ütleb klient TCP sees). URL on koht kataloogipuus.
HTTP vastus on: päis – tühi rida – sisu.
HTTPS – HTTP krüptovariant. HTTPS päring on krüpteeritud variant http päringust:
päring ise ja vastus krüpteeritakse võtmega, mis automaatselt genereeritakse (brauseri
poolt) iga ühenduse jaoks. Algul toimub võtmevahetus.
HTML – kujunduskeel mitte programmeerimiskeel. Veebilehed on lihtsad tekstid, millele
server paneb ette http päise.
CSS – kujunduskeel HTMLi kujundamiseks. CSS is a language that describes the style of
an HTML document. CSS describes how HTML elements should be displayed.
JavaScript – täiesti normaalne progekeel. Pannakse HTMLi sisse. Ilma tüüpideta keel
aga süntaks on C moodi.
Ajax – Asynchronous JavaScript + XML. Update a web page without reloading the page.
Request data from a server - after the page has loaded. Receive data from a server - after
the page has loaded. Send data to a server - in the background. Mõte selles, et saad
brauseris javascriptiga avada serveri urli ja siis brauseris saadud teksti või andmetega
(tüüpiliselt javascripti formaadis ehk jsonis) edasi tegutseda.
Masintöödeldav andmete esitamine:
JSON ja XML - puhtalt andmeesituskeeled. Mingit
proge teha ei saa.
Eelmisel kümnendil muutus XML väga populaarseks andme esituskeeleks. Seejärel
muutus populaarseks JSON kui hulga lihtsam andme esituskeel: lihtsalt javascripti
andmesüntaks, väga sarnane pythoni süntaksile. Praegu kasutatakse mõlemat, aga JSON
on palju populaarsem. Laiatarbe süsteemid a la Google pakuvad enamasti JSONis andme
esitust.
json –
xml (näiteks ära tunda - kas see on json või XML) –
kuidas üldjoontes töötab klassikaline veebirakendus ja kuidas single-page app
(koodinäiteid / nende detaile ei küsita).
Üheleherakendus on veebirakendus või veebisait, mis suhtlusel kasutajaga kirjutab
käesoleva veebilehe dünaamiliselt üle, selle asemel et serverist tervet uut lehte alla
laadida. See tähendab, et rakendus jookseb täielikult klientarvuti veebilehitsejas, luues
sujuvama kasutajakogemuse ilma katkestusteta eri lehtede vahel. Niimoodi jääb mulje, et
rakendus töötab nagu töölauaprogramm, kuna kogu informatsioon laetakse alla esimese
korraga või dünaamiliselt vastuseks kasutaja tegevustele ning lisatakse vajaduste kohaselt
lehele. Selline veebileht ei lae ennast kasutussessiooni jooksul kordagi uuesti ega suuna
kontrolli edasi uuele lehele, kuigi eri tööriistadega, näiteks HTML5 History API, võib
tekkida mulje, et laetakse uusi lehti juurde või navigeeritakse teistele lehtedele.
Üheleherakendust kasutades toimub tihtipeale taustal dünaamiline suhtlus veebiserveriga.
Seda tüüpi rakenduse loomiseks kasutatakse tavaliselt HTMLi, JavaScripti ja CSSi.
Arvutivõrgud:
Internet on kohtvõrkude sidumise süsteem. Arvutid on kohtvõrgud. Igal arvutil on oma
unikaalne nimi ehk aadress Ethernetis. MAC aadress. 48 bitine (6 baiti).
mac aadress - Igal arvutil on oma unikaalne nimi ehk aadress Ethernetis. MAC aadress.
48 bitine (6 baiti). Et saaks vahet teha seadmetel. Igale seadmele pannakse võrgukaarti
tootja poolt. Igal tootjal oma vahemik. Seda saab muuta.
Kui arvuti Y saadab arvutile X teksti, siis ta saadab selle alguses traatipidi KÕIGILE
arvutitele võrgus, aga teksti juures on öeldud, et AINULT X (MAC aadress!) peab seda
kuulama. Teised ignoreerivad. Seetõttu saab krüpteerimata sidet ka pealt kuulata.
Checksum kontrollib, kas vigu polnud.
IP aadress – Internet seob kohtvõrke, kohtvõrgus reeglina Ethernet (sh wifi). Eri
kohtvõrkude sidumiseks antakse igale masinale unikaalne nn IP aadress: tüüpiliselt neli
baiti (193.40.254.28). Kuhu IP aadressile saatsid ja kust sa saatsid on pandud Data sisse.
IP aadress ja muu vajalik info on etherneti paketi sisu üks osa.
Ameerika serverist veebilehe saamiseks meie ruuter saadab suuremasse telco ruuterisse,
kes vaatab, kuhu edasi saata.
Teksti küljes on alati IP aadress. Iga võrgus olev masin suunab saadud teksti õiges
suunas. Routing table ütleb, vaadates IP aadressi.
Aadress: iga saadetava tekstijupiga
pannakse kaasa selle masina aadress, kuhu tekst saata tuleb.
Paketid: harilikku ümbrikku aga ei mahu terve entsoklüpeedia kümme köidet! Mida
teha? Paneme eraldi köited eri ümbrikutesse ja saadame kümme ümbrikku. Iga paketi
alguses IP aadress.
port – port on see, mis ütleb OSile, et mis programmile tuleb data anda. Pordid on
mõeldud OSile. Mingid proged tavaliselt on mingi pordi küljes. Masinas elab korraga
palju programme ja igaüks tahab saada/saata oma pakette. Millisele programmile
konkreetne pakett saata? Programmidele antakse kasutamiseks nummerdatud TCP või
UDP port (need ei ole füüsilised pistikud!) Ühenduse määravad: IP aadressid, pordid,
protokoll.
ethernet – IP pakett etherneti paki sees.
IP sees on TCP või UDP – üks kahest tõesti on IP paketis, kus on protokolli koht.
IP – kõige olulisem protokoll internetis üldse. IP protokoll on kokkulepe, et kuidas infot
saata ja sellest aru saada tuleb. IP protokoll lubab saata ainult suhteliselt väikeseid
sõnumeid (64 kB aga reaalsuses vähem). Iga sõnumi ette pannakse lisainfo (päis ehk
header), mis ütleb, et: kuhu saata (IP), kust tuli (ip) ja hulga lisainfot veel.
IP paketis on
sees protokoll, mis progega (TCP või UDP) edasi tuleks töödelda. IPv4 peaaegu alati
kasutatakse seda. IPv6 võib panna väga pika aadressi.
IPv4 - neli täisarvu 0-255 193.40.254.28
IPv6 - 2001:0db8:85a3:0000:0000:8a2e:0370:7334
MAC (Etherneti aadress) - 01:23:45:67:89:ab
TCP (Transmission Control Protocol) – IPst järgmise taseme protokoll. Usaldatav. TCP
(transfer control protocol). Toimub kontroll. Tekitab simuleeritud näilise ühenduse.
UDP - UDP (user datagram protocol). Ei kontrollita, kas info jõudis pärale. Paneb pordid
kaasa ja kontrollsumma kaasa. Kasutatakse mängudes, kuna TCP kontroll võib tekitada
teadmata pikkusega viivitusi. Live jaoks ei ole TCP väga hea.
Kapseldamine (mis mille sees) – rakendus (ssh shell, twitter vms), ratransport, IP,
Ethernet ja edasi.
10. nädal: Rekursioon, funktsionaal- ja loogiline progemine,
reaalsed projektid 4. ja 5. nov.
Eksamiks: rekursiooni äratundmine, baasjuht ja rekursiivne juht, rekursiooni
ekvivalentsus tsükliga, arusaamine funktsionaalse keele näitejuppidest loengus: mida
mingi näitekood teeb / mis on rehkendamise tulemus. Mis on lambda-arvutus. Prologi
näide tuleb ära tunda (et on Prolog). Arendusprojektide kohta küsimusi ei tule.
rekursiooni äratundmine – iga kord rekursiivse tegevuse tegemisel võiks asi minna
lihtsamaks. vahetulemused pannakse mällu. Rekursioonil peab olema mingi baascase, kus
ta peatub. Kõike, mida saab rekursiooniga, saab teha ka ilma rekursioonita (tsüklitega ja
vastupidi).
def fact(x):
return fact(x)
3*2*1
Sabarekursioonil on rekursioon ongi viimane tegevus, mis tehakse. Funktsioonis on
sabarekursioon siis, kui selle sama funktsiooni väljakutse on viimane tegevus.
Mitte-sabarekursiivses tegevuses on vaja vahetulemused kuidagi meelde jätta. Pannakse
stacki ja tullakse mööda stacki tagurpidi tagasi.
Baasjuht ja rekursiivne juht -
Rekursiooni ekvivalentsus tsükliga – kõike mida saab teha tsükliga, saab teha ka
rekursiivselt.
Funktsionaalne programmeerimine (funktsioonide kasutamine). Funktsioonile võib anda
argumendiks teisi funktsioone ja funktsiooni arvutamise resultaadiks võib samuti olla
funktsioon. Enamik kaasaegseid programmeerimiskeeli on funktsionaalne
programmeerimise meetoditest mõjutatud.
Arusaamine funktsionaalse keele näitejuppidest loengus:
Mida mingi näitekood teeb / mis on rehkendamise tulemus -
Mis on lambda-arvutus - Lambda-arvutuse keel on Alonzo Churchi poolt 1930. aastatel
leiutatud lihtne ja universaalne meetod funktsioonide kirjapanekuks. Asendamise meetod
Lambda-arvutuse teooria tegeleb arvutatavuse ja arvutatavate funktsioonide uurimisega,
kasutades selleks lambda-arvutuse keelt kui universaalset programmeerimiskeelt.
Churchi tees väidab, et iga algoritmi saab lambda-arvutuse keeles kirja panna. On
võimalik näidata, et lambda-arvutus, nagu ka Prolog, C ja Basic on üks paljudest
universaalsetest programmeerimiskeeltest. Konkreetselt on lambda-arvutuse keel ja
teooria funktsionaalsete programmeerimiskeelte aluseks.
Prologi näide tuleb ära tunda (et on Prolog) - esimene -- ja siiani kasutusel -- loogilise
programmeerimise keel. Prolog-ile lisaks on välja töötatud mitmeid uuemaid loogilise
programmeerimise keeli ja süsteeme.
11. nädal: Algoritmid: lahenduvus ja keerukus. 11.11 ja 12.11
Eksam: lahenduvus teoreetilises ja tavamõttes, mis on lahenduvad ülesanded. Positiivsete
täisarvude, positiivsete/negatiivsete ja murdarvude võimsuse võrdlemine ja tõestamine.
Reaalarvude suurem võimsus kui täisarvude võimsus (Cantori teoreem): tõestuse idee.
Mis on peatumisprobleem, selle lahendamatuse tõestuse idee. Keerukusest: mis on
algoritmide keerukus ja mis on O-notatsioon. Mis on sorteerimise parim keerukus
halvimal juhul.
Lahenduvus (uurimisvaldkonnana algoritmiteooria või rekursiooniteooria) teoreetilises
ja tavamõttes - lahenduvus ehk kas üldse ülesannet lahendada saab? Kui kaua läheb aega,
kuni peatub. Selgub, et iga täpselt formuleeritud probleemi (matemaatika- ja
programmeerimisprobleemid) jaoks ei leidugi lahendavat algoritmi! Vähe sellest:
kui
võtta “juhuslik” probleem, siis tõenäosus, et lahendav algoritm leidub, on lõpmatult
väike!
„Tavamõttes“ tüüpilised põhjused, miks me ei saa tavaprobleeme lahendada – ei ole
piisavalt infot ja juhuslikkus segab. Näiteks, kuidas saada kiiresti väga palju raha.
Matemaatika- ja programmeerimisprobleemide juures eeldame lahenduvuse
valdkonnas üldjuhul, et:
Infot on piisavalt: meil on olemas kõik vajalikud aksioomid /
programm / täpne ülesanne, näiteks ja
juhuslikkust ei ole.
Mis on
lahenduvad ülesanded -
Positiivsete täisarvude - positiivsete/negatiivsete ja murdarvude võimsuse võrdlemine ja
tõestamine.
Reaalarvude suurem võimsus kui täisarvude võimsus (
Cantori teoreem): tõestuse idee.
Reaalarvude hulga lõpmatus on suurem kui positiivsete täisarvude lõpmatus.
Cantori
teoreem ütleb üldisemalt, et mingi hulga H kõigi alamhulkade hulk on suurema
võimsusega kui see hulk H.
Kaks hulka on sama võimsad, kui neil on võimalik leida 1:1 vastavus. Positiivsed ja
negat. täisavud on 1:1 vastavusse võimalik viia.
Murdarvud vs pos täisarvud on ka 1:1
vastavuses (see on lahendatud lõpmatu tabeli kujul diagonaali läbiva sik-sakiga).
Reaalarvude korral ei ole enam 1:1 vastavust – püüame teha aga ei saa. Isegi 0 ja 1
vahel ei saa teha. Ei saa teha tabelit, kus oleks kõik reaalarvud.
Mis on peatumisprobleem - selle lahendamatuse tõestuse idee. Ehk näide
mittelahenduvusest. Osad programmid peatuvad, osad mitte. Kas õnnestub kirjutada
programm ja kontrollida programmi abil, kas programm jääb seisma. Kui programm
muudkui edasi käib, siis ei tea, kas jääb. Lihtsatel juhtudel saab (näed tingimuse ära).
Cool näide: 3n+1 ülesanne. Collatz. Mitte keegi ei tea, kas see jääb alati peatuma. Hetkel
tundub, et jääb alati. Keegi lihtsalt ei ole osanud seda tõestada.
Lahendajat ei saagi
kirjutada. Tekib vastuolu.
Kontiinumhüpotees. Kas täisarvude lõpmatuse ja reaalarvude lõpmatuse vahepeal on
veel lõpmatusi, ehk hulki, mis oleks võimsamad täisarvude omast ja vähem võimsad
reaalarvude omast?
Keerukusest:
Mis on algoritmide keerukus - kui ruttu ülesannet lahendada saab. Missuguse
funktsionaalse sõltuvusega sõltub sisendi suurusest tema täitmise aeg (põhioperatsioonide
tegemise aeg). Põhioperatsioon tehe, sisend on admete hulk. Algoritmi keerukus on
põhioperatsiooni(de) arvu sõltuvusfunktsioon K(n) sisendi(te) suurusest n. Keerukust
saab analüüsida algoritmi pealt ilma programmeerimata ja aega mõõtmata.
Mis on O-notatsioon - annab keerukusklassi – millise proportsiooniga suureneb
arvutusaeg sõltuvalt sisendi suuruse muutusest. Ütleb ära põhilise funktsiooni, mis
keerukuse ära määrab. O-notatsioonis esitatakse keerukusfunktsiooni määrav komponent.
Selles päris kindel pole: Mis on sorteerimise
parim keerukus halvimal juhul – O(n2).
Ruutkeerukus. Quicksorti juures halvima juhu keerukus.
12. nädal: Tehisintellekt ja andmeteadus.
Eksamiks: mis on tugev ja mis nõrk AI, mis on turingi test ja mis on eliza. Mis on
otsimeetodites minimax ja alpha-beta (tehnilisi detaile ja näiteid ei tule). Mis on
masinõpe. Mis on IBM Watson ja Wolfram Alpha. Võib tulla küsimus, et kas mingit sorti
ülesannet praegused tehisintellektisüsteemid suudavad ok/väga hästi/väga halvasti
lahendada. Andmeanalüüsi kohta küsimusi ei tule.
Mis on tugev AI – ehk lai AI - if a machine approaches or supersedes human
intelligence, if it can do typically human tasks, if it can apply a wide range of background
knowledge and has some degree of self-consciousness. Lai AI on nagu päris
tehisintellekt, mis oleks nagu inimene. Inimesest palju kõvem. Kitsas on see, mis
tegelikult on. Oskab rääkida, saab küsimustest aru, oskab nõusid pesta, autot juhtida jne.
Mis nõrk AI - the use of software to study or accomplish specific problem solving or
reasoning tasks that do not encompass (or in some cases, are completely outside of) the
full range of human cognitive abilities. Probleemilahenduse algoritme, mis ei sisalda
enamust inimmõistuse võimekust. See mis tegelikult on. Mängib malet, tunneb pilte vms.
Teeb üht asja, milleks on progetud või õpetatud.
Tehisintellekt: Tehisintellekt on arvutisüsteemi võime jäljendada loomulikku intellekti ja
täita funktsioone, mida seostatakse inimmõistusega, näiteks võimega arutleda ja õppida.
Masinõpe on tehisintellekti üks valdkondi. Masinõpe kirjeldab algoritme, mis on
võimelised õppima.
Mis on Turingi test – katse, kas vestleval programmil on tegelikult mõistus. Kui
katsetajad ei suuda ära arvata (st ära-arvamise sagedus on 50% ja 50% eksitakse), siis on
jutlev masin päriselt intelligentne. Tegelikkuses ei suuda praegu keegi teha programmi,
mis suudaks Turingi testi edukalt läbi teha: sellest ollakse väga kaugel.
Mis on Joseph Weizenbaumi Eliza - Vestlev pseudointelligentne psühhoanalüütik. Eliza
on lihtne programm, mille sees on suur hulk “standardlauseid” ja “standardsõnu”. Kui
Elizale anda lause, milles on sõna tema “standardsõnade” loetelus, siis Eliza valib mõne
“standardvastuse” ja paneb sinna sisse osi talle antud tekstist. Jääb mulje, et Eliza haakub
vestlejaga. Eliza poolt antud laused on samuti harilikud inimkeelsed laused (sest need on
programmeerija talle andmebaasi pannud”.
Mis on otsimeetodites minimax ja alpha-beta (tehnilisi detaile ja näiteid ei tule).
Mõtlemismängudes.
Minimax on analüüsipuu lõpp-positsioonide hinnangute puus ülestõstmine. Vaheldumisi
minimeerid ja maksimeerid käigu headust.
Alpha-beta - meetod otsingupuust mittevajalike harude kõrvalejätmiseks.
Mis on masinõpe – Masinõpe on tehisintellekti üks valdkondi. Masinõpe kirjeldab
algoritme, mis on võimelised õppima. Õppimine tähendab reeglite loomist etteantud
näidetest. Õppimiseks on vaja meeletu kogus näiteid (ebareaalne).
Wikipedia masinõppe definitsioon: Arvutiprogramm õpib kogemusest E ülesannete
klassi T ja tulemuste mõõdu P suhtes, kui selle tulemuslikkus klassi T ülesannetes, nii
nagu mõõdetud P kaudu, paraneb kogemusega E. Õppija põhiline eesmärk on teha
üldistusi eelneva kogemustehulga põhjal. Programmi jaoks tulnud treeningandmed on
suvalise tõenäosusjaotusega, kuid programm peab nende andmete põhjal eraldama
informatsiooni, mis võimaldaks programmil luua kasulikke vastuseid ja teha üldiseid
järeldusi.
Mis on IBM Watson – 2010. Watson is a question-answering computer system capable
of answering questions posed in natural language, developed in IBM.
Wolfram Alpha - is a computational knowledge engine or answer engine developed by
Wolfram Alpha LLC, a subsidiary of Wolfram Research.
Võib tulla küsimus - et kas mingit sorti ülesannet praegused tehisintellektisüsteemid
suudavad ok/väga hästi/väga halvasti lahendada.
13. nädal: Arendusprotsess, IT äri ja P2P võrgud, ledger, bitcoin
Eksamiks: Arendusprotsessi kohta loengumaterjalidest küsimusi ei tule. Küll aga on
küsimused allpool kohustuslike artiklite kohta. P2P teemadel: peamised P2P liigid,
milleks on / mida optimeerib Bittorrent, darkneti / TORi põhiideed, mis ja milleks on
Bittorrentis kaevandamine / proof of work.
P2P teemadel: peamised P2P liigid - Kliendid/kasutajate programmid suhtlevad omavahel
otse, ilma keskse serveri vahenduseta. Näiteks saadad oma läpparist otse teisele
inimesele.
Liigid on:
•
Struktureeritud ja struktureerimata. Keskse süsteemiga asi on hea aga keskne
punkt on kriitline (politsei võib kinni panna). Keskne server on nõrk koht: selle
mahavõtmine paralüseerib võrgu. Struktureerimata on gnutella nt, mis pärib
lihtsalt kõikidelt aga probleemiks hästi palju päringuid (otsingud koormavad kogu
võrgu üle) ja pead teadma, kus on mõni masin, millel veel gnutella käib.
•
Supernodes (Kazaa, Skype) – mingi hulk kliente, et vähendada päringute arvu. Ei
ole otseselt serverid vaid iga programm ise võib hakata supernodeks mingile
hulgale klientidele.
•
Struktureeritud P2P – igal masinal on natuke infot selle kohta, mis kellelgi on. Iga
masin oskab suunata õigemasse kohta, mitte ei küsi kõigilt. Ei ole supernode ega
server.
Milleks on / mida optimeerib BitTorrent - Jagatud faili tükid levivad ja neid saab ka
teistelt tõmmata. Fookus ei ole info leidmisel vaid optimeerida suure faili jagamist (film,
OS). Et kõik masinad ei hakkaks ühelt tõmbama vaid tõmbaks igaühelt natuke (ei
koormaks masinat ega ühendust üle). Otsimehhanism on sellest täiesti lahus
(pealisehitus).
Deep web - üldmõiste lehtede kohta, mida avalikud otsimootorid ei leia, kuna - näiteks –
parooli all.
Dark web - veebilehed, mis on teadlikult varjatud ja anonümiseeritud, et
oleks raske tuvastada, mis serveris asuvad, kes seal käivad jne.
Darkneti / TORi põhiideed – anonüümsed ühendused (Proxy). Proxy: kuskil võrgus on
teine masin, mille kaudu sina ühendud. Sealt võid sa ühenduda järgmisse masinasse,
tekitades proxyde ahela mööda maailma. Ahelat on üldjuhul võimalik jälgida, kuid mida
pikem ja veidramates kohtades proxyd, seda raskem.
Darknet: proxyde idee on viidud
äärmusse P2P tehnoloogia abil, eesmärgiga varjata, kust liiklus tuleb. TOR on enim
levinud krüpteeritud proxyde ahel. Iga masin krüptib ära ja pärast krüptib lahti. Sellest
moodustub selline krüptitud kihtide sibul.
Mis ja milleks on Bitcoinis kaevandamine / proof of work - Et erinevaid blockchaini
harusid tekiks harva ja kogu süsteemi saaks hoida süngis. Preemiaraha tuleb sellest, et ta
võib ise endale eikuskilt ülekande teha. Bitcoinis on palju tehnoloogiaid kokku pandud.
Iga ülekanne saadetakse kõigile. Kõigil on kõigi kõik kanded olemas. Seda on raske
süngis hoida. Kogutakse kokku blokkideks. Ja välditakse seda, et kõik peaks kontrollima
kõiki kandeid
. Krüptohash takistab tabeli tagantjärgi võltsimist. Uues tekstis on eelmise
teksti hash (hash+uus -> hash) sees.
Ülesanne: mõni osaleja peaks vahel kontrollima, kas saadetud ülekanded on korrektsed.
Kontrollitud hulk uusi ülekandeid tuleks siis digiallkirjastada ja lisada blockchaini.Aga
miks peaks keegi oma arvuti panema seda tegema? Aga kui paljud teevad seda
paralleelselt, tekib palju erinevaid blockchaini harusid, mis pole süngis.
Panevad oma arvuti plokke kontrollima, et saada preemiat.
Anname igale kontrollijale
väikese auhinnaraha. Teeme kontrollimise kunstlikult raskeks, et õnnestunud kontrolle
oleks harva (bitcoinis keskmiselt ca kord 10 min jooksul).
14. nädal: Masinõpe ja projektide arendus
Eksamiks:
https://course.elementsofai.com/ee/4/1
Peamised masinõppe liigid -
Juhendatud õpe: meile antakse mingi sisend, näiteks liiklusmärgiga foto, ja meie
ülesanne on ennustada õige väljund või tähis, näiteks missugune liiklusmärk on pildil
(kiiruspiirang, stoppmärk jne). Lihtsaimatel juhtudel on vastused kahendvalik kujul (neid
nimetatakse binaarse klassifikatsiooni ülesanneteks). Inimesed õpetavad masinaid näiteks
pilte ära tundma, pangatehinguid ära tundma.
Mis puutub masinõppesse, siis keskendume eelkõige juhendatud õppele ja eriti
klassifitseerimisülesannetele. Klassifitseerimises vaatleme mingit sisendit, nagu näiteks
fotot liiklusmärgist, ja püüame tuletada selle „klassi“, näiteks liiklusmärgi tüübi
(kiiruspiirang 80 km/h, ülekäigurada, stoppmärk jne). Klassifitseerimisülesannete
näideteks on veel Twitteri libakontode identifitseerimine (sisendiks on jälgijate nimekiri
ja mil määral nad seda kontot jälgivad ning klassiks on kas libakonto või päris konto) ja
käsitsi kirjutatud numbrite tuvastamine (sisendiks on pilt, klassiks 0,...,9).
Juhendamata õpe: puuduvad tähised ja õiged väljundid. Ülesandeks on leida andmete
struktuur: näiteks sarnaste objektide grupeerimine, et moodustada klastrid, või andmete
taandamine väikesele arvule olulistele mõõtmetele. Ka andmete visualiseerimist võib
pidada juhendamata õppeks.
Konkreetne näide on toidupoeketid, mis koguvad andmeid oma klientide
ostlemiskäitumise kohta (selleks teil ongi kõik need kliendikaardid). Et oma kliente
paremini mõista, võib pood need andmed visualiseerida, kasutades graafikut, milles iga
klienti tähistab punkt ning samu tooteid ostvad kliendid paigutatakse üksteisele lähemale
kui kliendid, kes ostavad erinevaid tooteid.
Stiimulõpe: tavaliselt kasutusel sellistes olukordades, kus AI agent, näiteks isejuhtiv
auto, peab tegutsema mingis keskkonnas, kus tagasiside heade ja halbade valikute kohta
saadakse viivitusega. Stiimulõpet kasutatakse ka mängudes, milles tulemus otsustatakse
alles mängu lõpus. Robotit peab õpetama kõndima.
Need kategooriad on mingil määral kattuvad ja hägused. Seega on mingit teatud meetodit
vahel raske ühte kategooriasse liigitada. Näiteks, nagu nimigi vihjab, on niinimetatud
osaliselt juhendatud õpe osaliselt juhendatud ja osaliselt juhendamata.
15. nädal: Konsultatsioon ja e-valimised. 09.12 ja 10.12.
Eksamiks: mida peab hääletamissüsteem tagama, miks on i-hääletamine keerulisem, kui
internetipangandus, mis on topeltümbriku süsteem ja kuidas see põhijoontes on Eesti i-
hääletusel implementeeritud, mis on i-hääletamisel hääle töötlemise põhisammud (ehk,
mida on protsessi käigus vaja teha).
E-hääletamiseks nimetatakse maailmas tüüpiliselt hääletamismasina kasutamist.
Interneti teel hääletamine (i-hääletamine) riiklikel valimistel on maailmas väga
haruldane.
Mida peab hääletamissüsteem tagama ?
•
Hääled loetakse õieti kokku
•
Hääled on anonüümsed
•
Ainult hääletamisõiguslikud saavad hääletada, ei saa hääletada topelt, ei saa
hääletamist delegeerida
•
Hääletajaid ei diskrimineerita
•
… ja hea oleks häälte ostmist takistada jms ...
Miks on i-hääletamine keerulisem kui internetipangandus?
Internetipanga toimingud ei ole anonüümsed: kõik identifitseeritakse, logitakse ja
vajadusel saab minna kohtusse.
E-hääled on anonüümsed: ei ole võimalik tuvastada,kes kuidas hääletas.
Mis on topeltümbriku süsteem ja kuidas see põhijoontes on Eesti i-hääletusel
implementeeritud
Sinu hääl on sisemises ümbrikus: seal ei ole sinu nime
Sinu nimi on välisel ümbrikul. Välimise ümbriku järgi sind registreeritakse hääletajaks,
võetakse välja sisemine ümbrik ja pannakse valimisurni.
Meie e-valimiste süsteem on algusest peale modelleeritud nimelt posti teel hääletamise
elektroonilise variandina. Sellest analoogiast ka elektroonilise topeltümbriku kasutamine.
Mis on i-hääletamisel hääle töötlemise põhisammud (ehk mida on protsessi käigus
vaja teha)
Kontrollida, et ta saaks hääletada (oleks nimekirjas).
Juhuarv genereerida.
Panna ajatempel, kontrollida sertifikaadid.
Hääle liikumine süsteemis:
Ümbrikul on peal ajamärgend ja kehtivuskinnitus.
E-hääle töötlemise etapid
Ajamärgendid – millal hääled tulid jne.
Kõik kommentaarid