1. nädal
• 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.
Algoritm – täpne samm-sammuline, kuid mitte tingimata formaalne juhend millegi
tegemiseks.
Nt toiduretsept, juhend ruutvõrrandi lahendamiseks.
Programm – formaalses, üheselt mõistetavas keeles kirja pandud algoritm. Arvutid
suudavad täita ainult programme.
Bitt – info mõõtmise ühik, tuleb mõistest binary digit – nö kahendarv kahe võimaliku
väärtusega 0 ja 1. Saab näidata kahte võimalikku olekut.
Nibble - 4 bitti.
Bait – arvutites kasutatav infoühik, mis sisaldab 8 järjestatud bitti, kõige levinum infohulga
mõõtühik. Tähistatakse B.
Kilobait, megabait, gigabait, terabait, petabait(inimmälu hulk), eksabait, zettabait,
jottabait. Kõik on eelnevast 2
10 korda suuremad. St 1 MB = 1024 kB. Sest see on lähim kahe
aste tuhandele. Võib teatud kontekstis olla ka 1000 korda suurem, st 1 MB = 1000 kB
Arvuti RAM üldiselt 4,8,16,32 GB, mobiil 4 GB. Ülejäänud SSD tüüpi mälu.
Tähtede ja sümbolite kodeerimine – Peavad olema tõlgitud kahendsüsteemi arvudeks.
Olemas erinevad koodisüsteemid:
•
ASCII (American Standard Code for Information Interchange) – Iga sümboli
kodeerimiseks on 1 bait, tabelis on 2
8=256 erinevat sümbolit. – Algses versioonis
(1963) oli 7 bitti, st 127 sümbolit – Laiendatud tabeli osa võib olla erinev.
•
EBCDIC (Extended Binary Coded Decimal Interchange Code)- IBM võttis
kasutusele.
•
UNICODE, UTF-8, UTF-16 (laiendatud ASCII, tutvustati 1993, alates 2008 kõige
levinum kodeering veebis)
Kasutab 8 bitist koodiühikut, mida konkreetse märgi jaoks võib olla kasutuses 1 kuni
4. 8 bitti annab kokku ühe baidi ja baitide kaupa on mõistlik arveldada. Esimesed 127
tähemärki on samad, mis ASCIIs, nende puhul kasutatakse ühte kaheksabitist
koodiühikut. Järgneva 1920 märgi puhul kasutatakse kahte kaheksabitist koodiühikut
(kreeka, kirillitsa, heebrea, araabia, kopti ja armeenia tähed). Kolme kaheksabitist
koodiühikut kasutatakse nt hiina, koera ja jaapani kirjamärkide puhul. Nelja
koodiühikut on vaja ülejäänud Unicode tabelis olevate märkide jaoks, mille hulgas on
nt matemaatilised sümbolid ja piktogrammid.
Kuna kahendsüsteemis läheksid arvud kiirelt pikaks, on tabelites kasutatud kümnend-
ja kuueteistkümnendsüsteemis arve.
Unicode-i kirjapanekuks on kasutusel mitmesuguseid kaardistusi, tuntud kui UTF (Unicode
Transformation Format). Nende seas on UTF-32, UTF-16, UTF-8 ja UTF-7, kusjuures
numbrid näitavad, kui mitu bitti on minimaalselt tarvis ühe tähemärgi kirjapanekuks. UTF-32
puhul kasutatakse iga sümboli jaoks 32 bitti ehk 4 baiti, ülejäänute puhul on sümboli
kirjapanekuks vajalike baitide arv erinev.
Loogika olemus – klassikalisest kreekakeelsest sõnast logos, algtähendusega sõna ehk mida
räägitakse. Loogika on teadus mõtlemise alustest.
Kreeka loogikud:
Permenides (5 saj e.m.a) – kasutas pikki loogilisi põhjendusi
Zenon Eleast (5 saj e.m.a.) – apooriad/paradoksid
Sofistid: Sokrates (470-399 e.m.a), Platon (428 – 347 e.m.a.)
ARISTOTELES: Väidete struktuur kui iseseisev uurimisobjekt.
Aristotelese „kategoorilised väited“:
Iga b on a
Mitte ükski b pole a
Mõni b on a
Mõni b ei ole a
Induktsioon on
filosoofias arutlemise viis, mille puhul sellest, et ühtedel
asjadel on
teatav
omadus, järeldatakse, et see omadus on ka mõnel teisel asjal või isegi kõikidel
samalaadsetel asjadel, või sellest, et mingitel asjadel on mingi omadus, järeldatakse, et see
omadus on neil ka
tulevikus.
Deduktsioon on
arutlemise viis, mis tagab, et
tõestest eeldustest saadakse tõesed
järeldused.
Süllogism 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.
Näiteid süllogismidest:
1. Eeldus: iga koer on imetaja.
2. Eeldus: mõned neljajalgsed on koerad.
Järeldus: mõned neljajalgsed on imetajad..
Tuletuse struktuuri võib seega esitada muutujate x, y, z abil ning tuletus on õige sõltumata
fraasidest, millega neid muutujaid asendada.
1. Eeldus: Iga x on y.
2. Eeldus: Mõni z on x.
Järeldus: Mõni z on y.
Schickard 1625
Blaise Pascal (esimesed mehhaanilised kalkulaatorid)
1640: aritmeetiline masin: ainult liitis
ja lahutas (Ehitas ca 50 tükki).
Gottfried Wilhelm
Leibniz (Saksa filosoof 1646-1716). Leibnizi arvuti (
1671) liitis, lahutas,
korrutas, jagas. Leibniz lõi Boole’ga sarnaneva loogikasüsteemi, mis vajus unustusse.
Leibniz püüdis luua universaalset sümbolkeelt (lingua characteristica universalis) ja seda
keelt kasutava nn “arutlemise aritmeetika” (calculus rationator)
Perfokaart on nelinurkne kartongist kaart, mis kannab digitaalset informatsiooni sõltuvalt
avade olemasolust või puudumisest teatud kohtades. Programme hoiti perfokaartidel.
Praeguseks on perfokaart aegunud andmekandja, kuid perfokaardid olid laialdaselt kasutusel
nii 19. sajandil kangastelgede juhtimiseks kui ka 20. sajandil mehaaniliste
muusikainstrumentide kontrollimiseks ning arvutusmasinates sisend-, väljund- ja
salvestuskandjana. Esimesed digitaalsed arvutid kasutasid perfokaarte peamise meediumina
programmide ja andmete sisestamiseks. ca
1800 Jacquard mõtles välja programmeeritavad
kangasteljed , mis kasutas perfokaarte mustrite tegemiseks. Info talletus perfokaartidele.
Sealt edasi tuli idee kasutada neid arvutites.
19. sajand hakati mõtlema programmeeritava arvuti peale. Charles
Babbage (1822)
oli kõige
kuulsam, kes üritas teha programmeeritavat arvutit, kuid ei saanud
hakkama(diferentsiaalvõrrandite lahendamine). Esimene programmeerija oli Ada Lovelace,
tema nimest on ka tulnud proge keel Ada.
LAUSEARVUTUS
George Boole, de Morgan
Loogikatehted on funktsioonid tõeväärtustel T ja V. T = Tõde ja V = Vale
Enimkasutatud tehted on & (ja e. konjunktsioon), V (või e. disjunktsioon), - (ei e. eitus), =>
(järeldus e. implikatsioon), == (samasus e. ekvivalents)
1890 ehitas (tegi oma firma) Herman
Hollerith perfokaartidega masina USA rahvaloenduse
andmete töötlemiseks. Tema firmast tekkis IBM.
Turing mõtles 1937 välja
Turingi masina (masin (idee), mis peaks suutma kõike lahendada,
tegelikult polnud võimalik kõike arvutada)
Claude
Shannon mõtles välja info kodeerimise tehnoloogia (kuidas saada arvud bittideks 0
ja 1). MIT, 1938, Shannon’i magistritöö sidus: Boole algebra, Elektrilülitid ja -skeemid, Bitid
ja info kodeerimine, Info otsimise algoritmid.
Zuse tegi esimese programmeeritava arvuti, Z2 oli täiesti programmeeritav, Z1 polnud.
Konrad Zuse. Programmeeritavate arvutite pioneer saksamaalt.
1936-38: Z1: puhtmehaaniline
1938: Z2: rehkendus releedega.
1941: Z3 perfolindiga, universaalselt programmeeritav.
1944-50: Z4: kommertsiaalne digitaalarvuti Zürichi tehnikaülikoolile: Releedega rehkendus
Mehaaniline mälu.
1950-1967: Z5 ... Z64
By 1967, the Zuse KG had built a total of 251 computers. Due to financial problems, the
company was then sold to Siemens.
Saksa krüptomasinad : mehaanilised, krüpteerisid tekste 2 MS ajal
Enigma: alates 1920 aastatest.
Lorenz SZ 40 and SZ 42
Geheimfernschreiber: Saksa lennu- ja merevägi
Colossus: Londonis 1943: saksa allveelaevade salakirja dekodeerimiseks 1800 elektronlampi
Ideoloogia ja matemaatika: olulises osas Alan Turing
2. nädal
• 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 xtee.
TRANSISTOR – 1947. a kolm meest Bell Telephone Laboratories’ : William Shockley, Walter
Brattain ja John Bardeen, leiutasid transistori, said hiljem ka Nobeli preemia selle eest, transistori
tööpõhimõte on analoogiline raadiolambile: elekter tahab vahekihist (metallisulamitest, kus
vaakumit/õhku pole) läbi minna, tuleb kas pinge peale panna (käivitab läbimineku) või vastupidi-
ei pane pinget peale/blokeerib, on palju eri variante transistore – üldine põhimõte on peaaegu alati
sama(kolm juhet, millest üks juhib, kas elekter saab kihtidest läbi või mitte), peale leiutamist neid
veel laialdaselt ei toodetud, tehti parandusi ja läks aega
SAMUEL – 1952. a kirjutas Arthur Samuel IBM jaoks AI kabeprogrammi(the first AI programm
to run in the U.S)
SHOCKLEY SEMICONDUCTOR – 1955. a asutas William Shockley Shockley
Semiconductori Palo Altos (need kes töötasid Shockley Semiconductoris moodustasid hiljem
Inteli ja AMD)
FORTRAN – 1957. a tehti esimene kõrgtasemeline programmeerimiskeel Fortran, eestkätt töötati
see välja IBM-is, inseneride ülesannete lahendamise lihtsustamine(simulatsioonid nt)
FAIRCHILD – 1957. a kaheksa inseneri lahkusid Shockley Semiconductorist(Julius Blank,
Victor Grinich, Jean Hoerni, Eugene Kleiner, Jay Last, Gordon Moore, Robert Noyce, and Sheldon
Roberts.) ja moodustasid uue firma - Fairchild Semiconductors, 1961. a laseb Fairchild
Semiconductors välja esimese laiatarbe integraalskeemi
SAGE ehk Semi-Automatic Ground Environment – 1958. a loodud Interneti esiisa, USA
sõjavägi tegi suure võrgustiku(SAGE) nö tuumasõja valveks (et radaritega võimalikult varakult
näha vastase rakette ja osutada võimalikult vara vastupanu), radarid olid põimitud kokku ja
ühendatud lennukite süsteemidega, olid ka suured kontrollsüsteemid/keskused
TEXAS INSTRUMENTS – 1954. a andis Texas Instruments teada, et hakkab
(esimesena)kaubanduslikult tootma silikoonist transistoreid. Oli pikemat aega üks juhtivaid
arvutitükkide tootjaid, palju tehti ka transistore (hetkel tootavad nišitooteid pigem), 1976. a toovad
turule esimese 16-bitise mikroprotsessori
INTEGRAALSKEEM – 1958. a loodud, loojaks loetakse Jack Kilbyt (sai hiljem ka Nobeli
preemia), esimesel integraalskeemil oli peal 5 komponenti ja see oli peenem kui hambaork,
integraalskeem on mikrokiip, räniplaadile loodud elektronsüsteem
COBOL – 1960. a mõeldi välja USA mereväes logistika, raamatupidamise ja laomajanduse
jaoks(USA pankades ja kindlustusfirmades suure tõenäosusega kasutatakse veel Coboli
programme, hoiavad seda keskkonda üleval, kuna raskem oleks kõike otsast alustada ja
ümberkirjutada)
LISP – 1960. a John McCarthy väljamõeldud keel, mis sobis pigem AI laadseteks
ülesanneteks(mitte ainult, aga sinnapoole), mõeldi välja lambda-arvutuste mikrokeele põhimõtete
peal, paljud keeled on Lispist mõjutatud(nt Python, JavaScript)
PDP–1 – 1960. a Digital Equipment Corporation (DEC) hakkas tegema PDP arvuteid, MIT-s
kirjutati sellele videomäng Space Wars (väidetavalt esimene), esimesed PDP arvutid ei müünud
väga hästi, aga mingi hetk hakkas hästi müüma (umbes alates PDP-8-st, hulga odavamad kui IBM
mainframed, siis polnud ikka veel integraalskeeme seal sees), integraalskeeme veel tööstuslikult
ei toodetud, kuigi need juba eksisteerisid, seega arvuti koosnes trükiplaatidest mille peal olid
näiteks transistorid, kondekad ja takistid(eraldi), it is famous for being the computer most
important in the creation of hacker culture at MIT, BBN and elsewhere
SYSTEM 360 – 1964. a System/360 on mainframe(ehk suurarvuti - ulatuslike võimaluste ja
ressurssidega arvuti, mis tavaliselt asub arvutuskeskuses.), kuni selle ajani arvutid omavahel ei
suhelnud, ei saanud ühele arvutile panna nt teise arvuti kettaid, loodud IBM-i poolt, kokkusobivate
arvuti täiendusseadmete ’’perekond“, siiamaani alles (nišitoode)
MOORE’I SEADUS – 1965. a tegelikult on Moore’i seadus tähelepanek/prognoos, ühe
integraalskeemi peal olevate komponentide(transistoride, takistite) arv kasvab umbes 2 korda
pooleteise aasta jooksul
INTEL – 1968. a Robert Noyce ja Gordon Moore lahkusid Fairchildist ja asutasid Intel
Corporationi (nemad on kõige kuulsamad asutajad, oli ka teisi), 1970 intel 4004 CPU (single chip
computer)
ENGELBART – 1963. a Douglas Endelbarti saab arvutihiire patendi, 1968. a töötas välja
kaasaegse näoga, lihtsakoelise süsteemi(klaviatuur, keypad?, hiir, windows?). Süsteem oli nagu
Wordi analoog/kontori komplekti(tabelarvutust see süsteem ei teinud), reaalsesse kasutusse ei
läinud kunagi, demo on väga kuulus.
XTEE – 2001. a infovahetus riigiregistrite vahel, e-riigi andmete hoidmise ja vahetamise süsteem
3. nädal
• 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.
UNIX JA C– umbes 1969. a (töötasid tegelikult UNIX-it välja mitu aastat) AT&T Bell
Laboratories programmeerijad Kenneth Thompson ja Dennis Ritchie töötasid DEC-i PDP
arvutil(odavamat sorti suured arvutid) välja UNIX operatsioonisüsteemi(esimene op-süsteem, mis
on siiamaani kasutusel), UNIX-ist arenes hiljem palju harusid(nt Linux, mille pealisehitus on
Android, macOS, OS X, iOS). Kenneth Thompson mõtles välja keele B, mis baseerus varasematel
keeltel, Dennis Ritchie koos Kernighaniga tegi keele C (ALGOL –> BCPL -> B -> C), et oleks
kergem UNIX-it kirjutada, C keel on oluline, kuna peaaegu kõik arvuti baasasjad on C keeles (op
süsteemid (Windows, Linux, Apple, BSD põhised), suuremad infrastruktuurid, tekstiredaktorid,
andmebaasid, veebiserverid jne), selles keeles on lihtne teha vigu ja neid üles leida on raske,
masinalähedane ja kiire keel
AMD – 1969. a tekkis AMD ehk Advanced Micro Devices paralleelselt Inteliga, samadest
inimestest, kes olid koos ära tulnud Shockley Semiconductorist ja asutanud Fairchild
Semiconductorsi, ühed lõid Inteli ja teised lõid AMD
ESIMENE MIKROPROTSESSOR – 1970. a tegi Intel esimese mikroprotsessori 4004,
mikroprotsessor ise koosnes ainult ~2000-st transistorist ja töötas väga aeglaselt-108 kHz, seda
mikroprotsessorit kommertsiaalselt väga ei toodetud, aga Intel hakkas selle põhjal arendama
uuemaid ja paremaid mikroprotsessoreid, mida loodetavasti saaks ka müüa
SQL – IBM-is prooviti leiutada uut andmebaasikeelt ja tekkis System R, mis aja jooksul kujunes
sujuvalt SQL-iks, SQL on ühtlasi ka tänapäeval peamine andmebaasikeel ja on olnud seda päris
pikalt. Esimese SQL andmebaasi töötas välja Honeywell(1976. a), hiljem muutus põhitootjaks
Oracle
ARPANET – 1971. a katsesüsteem uue võrguprotokolli jaoks (kuidas arvutid omavahel suhelda
võiks). Pandi katsetamiseks üles väike võrk, kus olid näiteks USA ülikoolid jms asutused,
DARPA(varasemalt ARPA) nimeline asutus finantseeris seda katsesüsteemi(USA sõjaväe asutus,
nägi selles potentsiaali sõjaväe jaoks), ARPANET-ist hakkas välja arenema kaasaegne Internet,
1972. a Ray Tomlinson tegi muudatusi email programmile ARPANETIS ja võttis kasutusele @
märgi emailides
CP/M – 1973. a Gary Kildall kirjutab primitiivsele Intel 8008 protsessorile lihtsakoelise op
süsteemi CP/M, mis muutus vähemalt 10 aastaks mikroarvutite kõige levinumaks op süsteemiks,
1974. a töötab välja CP/M op süsteemi Intel 8080-l põhinevatele süsteemidele
WINCHESTER – 1973. a IBM-i välja töötatud odav kõvakettaüksus , maht 70 MB
ALTAIR – et päästa enda firmat MITS, hakkab firma omanik Ed Roberts ehitama väikearvutit,
mis baseerub Inteli uuel mikroprotsessoril 8080 ja 1974. a saab MITS valmis enda esimese Altair
8800 mikroarvuti, Popular Electronics ajakiri avaldab artikli sellest arvutist(hind ligikaudu
~500$), 1975. a MITS toob turule enda esimese üldsusele kättesaadava Altair arvuti hinnaga 375$,
Altair oli esimene edukalt müünud arvutikomplekt, 1978. a lõpetatakse Altair tootmine,
koduarvutid olid palju edukamad
ALTO – 1972. a Xerox tahab hakata tegema väikest kontoriarvutit, mis oleks väiksem kui PDP ja
IBM(Project ALTO algus), 1973. a Esimene Alto tööjaama arvuti prototüüp lülitatakse Xeroxis
sisse, selle ekraanipilt on Sesame Street tegelane Cookie Monster, 1974. a Xerox Alto arvutile
tehakse
programm
Bravo,
mis
on
esimene
korralikult
töötav
tekstiredaktor
personaalarvutile(WYSIWYG programm) ja samal aastal lastakse välja Xerox Alto
arvuti(kommertsedu ei tulnud, suureks eeskujuks)
MICROSOFTI ALGUS – 1974. a
Bill Gates ja Paul Allen said inspiratsiooni tõsiselt tegeleda
tarkvaraga MITS mikroarvutitelt Altair 8800, kui Paul Allen nägi Popular Electronics ajakirjas
artiklit Altair arvutist, hakkasid sellele softi kirjutama, samal aastal said inspiratsiooni ka Xerox
Alto arvutist, 1975. a kirjutasid BASIC-u interpretaatori varasel Intelil, litsentseerisid selle MITS-
ile, 1975. a teevad oma firma Micro-Soft, nende toode on BASIC interpretaator MITS-i arvuti
jaoks, 1978. a teeb COBOL-i(progekeel)
APPLE ALGUS – 1974. a said inspiratsiooni Xerox Alto arvutist(mõjutas Macintoshi väga palju),
Steve Wozniak oli insener ja Steve Jobs oli pigem visionäär ja väga edukas müügimees, Jobs saab
Wozniakiga kokku klubi hobitegevuse käigus ja nad panevad kokku arvuti Apple I(ilma korpuseta,
et saaks ise kokku panna arvuti), ei olnud väga edukas(prooviks tehtud)
1977 KODUARVUTID – esimesed massiliselt edukad koduarvutid: Chuck Peddle- Commodore
PET(6502 protsessor), Jobs ja Wozniak - Apple II(6502 protsessor), Tandy Ranio Shack – TRS-
80(Z80)
VISICALC – 1979. a tegid Daniel Bricklin ja Robert Frankston VisiCalci, esimese
spreadsheeti(nagu Excel), kõigepealt oli see Apple II jaoks(Apple hakkas väga hästi siis müüma)
APPLE II – 1976. a hakkab Steve Wozniak töötama välja Apple II, 1977. a sai valmis, töötas
6502 protsessoriga
SYMBOLICS – 1980. a loodud, spetsiaalne riistvara LISP-i programmide edukaks
jooksutamiseks(põhiliselt AI)
IBM PC – 1981. a IBM tegi IBM 5150 PC, ehitasid kiiresti valmis ja tegemine maksis palju,
kasutas Intelit, suretas sujuvalt kõik teised koduarvutid välja, enamik tänapäeva arvuteid on
sarnase ehitusega (va Apple)
SUN – 1982. a asutatud (Sun Microsystems), tegeles peamiselt võrgundusega, leiutasid Network
File Systemi (NFS), Oracle ostis nad ära 2010. a
ORACLE – SQL andmebaasid
MACINTOSH – 1978. a Apple teeb algul masina Lisa, töötas hästi aga oli väga kallis, hiljem
tegid ümber ja tegid odavamaks ning sellest kasvas välja Macintosh(1984), mis oli esimene edukas
hiire ja GUIga PC
APPLE JA MICROSOFT TOOTELIINID – Basic, C (1975-), MS-DOS (1981-2004), Win 1-
3 (1985-1996), Office (1983-)
Küberkaitse terminid:
TURVATEATER - illusoorne turve
MALWARE – tarkvara, mis loodud kahju tegemiseks
COOKIE – vähene info, mida veebilehed hoiavad sinu arvutis
PHISHING – andmepüük, interneripettus (valed e-kirjad ja chatid)
SOCIAL ENGINEERING – inimeste manipuleerimine konfidentsiaalse info saamiseks
4. nädal
• Eksamiks: Python, html ja http, internet eestis, linux, netscape, usenet, php, päevalehed
eestis, palm pilot, google, deep blue, wikipedia, x-tee.
PYTHON – 1989. a hakkas Guido van Rossum tegelema Pythoni implementeerimisega, Python
2.0 lasti välja 2000. a ja Python 3.0 lasti välja 2008. a
HTML JA HTTP – 1990. a Tim Berners-Lee lõi HTML-i(Hyper Text Markup Language)
füüsikute omavaheliseks väga lihtsaks suhtluseks, HTML-i abil sai internet laieneda World Wide
Web-iks, kasutades spetsifikatsioone, nagu näiteks URL(ühtne ressursi lokaator) ja HTTP
(hüperteksti edastusprotokoll), tekkis võimalus luua veebilehti
INTERNET EESTIS – (1990. a Tampere tehnikaülikoolist laenuks saadud modemi abil panid
Küberneetika instituudi teadurid käima regulaarse ühenduse oma instituudi ja Soome UNIX-i
kasutajate seltsi masina vahel. Küberneetika Instituudi arvuti helistas iga poole tunni tagant Soome
arvutisse ja saatis edasi ning võttis vastu vahepeal saabunud e-teated (põhiliselt e-posti). Ca 400
rubla eest kuus said Eesti-poolsed kliendid ennast oma modemi abil Küberneetika Instituudi arvuti
külge haakida ning samuti e-posti saata. Küberneetika instituudi e-posti aadressi lõpus oli .su, ehk
NSVL
) Päris internet Eestis: 1992. a Lippmaa organiseerimisel rajas KBFI kaks kallist satelliidi-
otseliini TCP/IP(päris interneti) jaoks: Tallinn(KBFI)-Stockholm(KTH) ja Tartu(Biokeskus)-
Stockholm. Ants Wõrk Küberneetika Instituudist organiseeris internetivälisühenduse kaablitpidi
Helsingisse. KBFI satelliidiühendus sai valmis kuu aega enne Küberneetika Instituudi
kaabliühendust: Tõelise Interneti käimapaneku juures 1992. aasta märtsis viibisid paar rootslast ja
eesti poolelt Andres Bauman, Jaak Lippmaa ning Toomas Kadarpik. Kuivõrd KBFI uus interneti-
ots sai valmis enne Küberneetika Instituudi oma, hankisid nemad Eestile Soviet Unioni .su-st
erineva interneti aadressi .ee ja hakkasid Eesti-sisest internetti administreerima.
LINUX – 1991. a Linus Torvalds Helsingi Ülikoolis hakkas Linuxit hobina arendama, Linux on
Minix-inspired kernel for Gnu, 1994. a kui Linux 1.0 välja tuli, olid Linux ja BSD sama
populaarsed, edaspidi Linux-i populaarsus kasvas ja BSD langes
NETSCAPE – 1994. a esimene suur netibrauser, 1998. a Netscape müüs end AOL-ile maha ja
tegid enda brauseri vabavaraks -> Mozilla brauseri projekt (läks palju aastaid enne kui see projekt
suutis levinud brauseri tekitada -> Firefox)
USENET – 1994. a postituste/artiklite jagamise võrk, sai massiliselt infot levitada
PHP – 1994. a progekeel, mis on peamiselt mõeldud veebilehtede tegemiseks, on olnud mingitel
aegadel suurim veebilehtede tegemise progekeel, nt kogu Wikipedia on PHP-s kirjutatud
PÄEVALEHED EESTIS – 5.okt 1995. a Eestis esimene päevaleht internetis
PALM PILOT – 1996. a esimene edukas pihuarvuti, U.S. Roboticsi tehtud
GOOGLE – 1995. a Stanfordi ülikoolis oli projekt, mille käigus taheti teha raamatukogu süsteem
paremaks, Larry Page ja Sergey Brin mõtlesid seda süsteemi teha põhimõttega base rank
DEEP BLUE – 1997. a IBM poolt tehtud paralleelarvuti Deep Blue võitis male maailmameistrit
(esimene kord kui AI võitis maailmameistrit)
WIKIPEDIA – 2001. a loodud online entsüklopeedia
5. nädal
• Eksamiks: turingi masin, relee, mälutüübid. Lihtsad andmetüübid (täisarvude, ujukoma-
arvude, tähtede esitamine), stringid, massiivid, puud.
TURINGI MASIN – Turingi masina mälu on lint, mida loeb/kirjutab eraldi pea. Programm on
eraldi tabelis ridadena, mis on kujul:
RELEE – mootoriga lüliti, kui panna vool sisse, siis magnet tõmbab lüliti kinni ja vool läheb läbi,
kui voolu sees pole siis vedru hoiab lülitit lahti(saab teha ka vastupidi, et vedru hoiab kinni ja
magnet tõmbab lahti)
MÄLUTÜÜBID :
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 ja cache mälu on ehitatud transistoridest (SRAM): 4 või 6 transistori ühe biti
kohta.
• See on kiire tehnoloogia.
• Samas on see kallis.
• Protsessoril on mitu tuuma: igaüks on sõltumatu omaette töötav protsessor.
• Üks tuum püüab (ja tihti suudab) täita hulka käske paralleelselt.
• If-lausete puhul püüab protsessor paralleelselt ette täita ühte.haru, mida ta peab
tõenäolisemaks.
• Cache salvestab erinevaid hiljuti kasutatud põhimälu juppe kiires SRAM mälus.
• Põhimure on minimeerida põhimälu poole pöördumisi.
SSD (flash mälu, mälupulgad) on samuti transistoridest, aga aeglane ja odav.
LIHTSAD ANDMETÜÜBID (täisarvude, ujukoma-arvude, tähtede esitamine) :
Protsessor toetab otse ainult lihtandmetüüpe: täisarve ja ujukomaarve. Tõeväärtused ja tähed on
täisarvu erivariandid. Mäluaadress ehk pointer on samuti lihtsalt täisarv.
Kompleksandmetüüpide
mugavaks
ehitamiseks
ja
kasutamiseks
on
enamuses
programmeerimiskeeltes hulga
• Spetsiaalseid teegifunktsioone.
• Spetsiaalset süntaksit
• Aga protsessori jaoks nad ei ole „asjad“ mida protsessor otse toetaks.
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 (utf-8) on ascii tähed üks
bait, teised rohkem.
MASSIIVID – Massiiv on jada ühetüübilisi väärtusi: tähti, täisarve, ujukoma-arve, teisi massiive
vms. Massiiv on hulk kõrvuti sama tüüpi või sama suurusega objekte (täisarvud, ujukoma-arvud
alammassiivid vms). List üldiselt tähendab, et objektid ei pea olema sama tüüpi/sama suured ja
nad võivad sisaldada kuitahes sügavaid alamliste.
PUUD – Arvutiteaduses on puu laialt levinud abstraktne andmetüüp, mis simuleerib hierarhilist
puustruktuuri põhiväärtuse ja alamväärtustega(’’vanem ja lapsed“), mis on ühendatud sõlmede
kogumina.
6. nädal
• Eksamiks: kompileerimine, interpreteerimine, parsimine, jit, vahekood,
programmeerimiskeeled vs kirjelduskeeled, json, html, sql, keelte äratundmine (assembler,
fortran, cobol, lisp, C, modula/pascal, python). Mis on data warehouse.
Kompileerimine - tõlgib kõrgtaseme keelest masinkoodi (või mingisse nn. vahekoodi, näit. Java
baitkoodi)
- Kompilaator teeb neist assemblerikeelsed ajutised failid / võtab “source code”i ja
tõlgendab selle masinale arusaadavaks koodiks.
Masinkoodis programm nimega kompilaator teisendab keeles X programmi
masinkoodfailiks Y. Seejärel täidetakse saadud masinkoodis programm Y.
Näited: C, Fortran, Go.
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.
Näited: Python, PHP, Perl, vanemad Javascripti mootorid jne.
Funfact: Programmi interpreteerimine on ca 10-200 korda aeglasem, kui kompileeritud
koodi täitmine.
Põhimõtteliselt saaks igas keeles kirjutatud programme nii interpreteeritult täita kui
kompileerida. Praktikas eelistatakse vahel interpreteerimist, vahel kompileerimist.
Interpreteerimisel on ka kompromissvariandid:
1) Kompilaator kompileerib X faili vahekoodiks Y, seejärel interpreteeritakse
vahekoodi Y (Python, Java).
2) 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.
3) Chrome V8 Javascript kompileerib algul kogu programmi masinkoodiks kiire
kompilaatoriga, seejärel kompileerib töö käigus selgunud kriitilised kohad
aeglasema optimeeriva kompilaatoriga, mis annab kiiremini töötava tulemuse.
Parsimine – ehitab mällu süntaksipuu, mida siis edasi töödeldakse
Jit – osa interpreteeritud vahekoodist kompileeritakse töö käigus
Näiteks Java, C sharp
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.
Vahekood – interpreteerimise tulemusel tekkiv kood, mida masin saab täita
Programmeerimiskeeled vs kirjelduskeeled
Programmeerimiskeeled: Fortran, C, Java, C#, Python, Javascript
Programmeerimise keeled on inimeste jaoks, arvuti ei saa sellest aru ning vajab
masinkoodi.
Kirjelduskeeled (mitte programmeerimiseks): HTML, SQL, JSON
SQL – päringukeel, database queries
HTML – kujunduskeel, text layout
JSON – data representation tekstilisel kujul, nt
Keelte äratundmine:
http://lambda.ee/w/images/e/e6/Itsissejuhatus7.pdf
Pythoni näide oli ka.
Data warehouse – andmepank?
7. nädal
• 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 - Pakkuda programmeerijale valmistehtud standardtükke, võimaldada kasutajal
arvutis ühtemoodi ja harjumuspäraselt tegutseda, sõltumatult sellest, mis programmid tal arvutis
on.
Mida opsüsteem nt teeb:
oskab kettalt programme lugeda, neid käima panna ja seisma panna,
oskab anda programmidele parasjagu aega ja mälu,
oskab programme vajadusel korraks peatada ja taaskäivitada,
oskab kettale faile ja katalooge kirjutada ja sealt neid lugeda,
oskab välisseadmetega (printer, monitor jne) ja võrguga suhelda,
oskab intelligentselt mälu ja cachega tegeleda, suhelda graafikakaardiga
NB: Kui opsüsteemi ei oleks, peaks iga programm kõiki neid asju ise teha oskama
Linux – opsüsteem, vabavaraline ja tasuta versioon UNIXist
- Mobiilid (Android)
- Serverid (70% servereid)
- Pisiseadmed (domineeriv)
- Tava-arvutid (2%)
Distro – Linux distribution ehk distro on tarkvarakogumik, mis põhineb Linuxi
operatsioonisüsteemil; N: Ubuntu
Taust: Kuna Linux koosneb suurest hulgast tarkvarakomponentidest, on kasutajal neid kõiki
ükshaaval raske installida. Distributsioonide autorid muudavad selle ettevõtmise lihtsamaks,
levitades kompaktselt suurt hulka tarkvara, mida Linuxi kasutaja võiks tahta kasutada.
Mac OS X – Apple’i opsüsteem, mis põhineb Darwinil.
Android – opsüsteem, tasuta versioon/laiendus Linuxist, mida arendab Google ja Open Handset
Alliance
Protsessid – OS jälgib kõiki arvutis toimuvad protsesse (töös olev programm) ja peab nende üle
arvet protsessitabelis (nt mis programm kasutab kui palju mälu)
Multitasking – arvuti suudab mitut programmi korraga töös hoida
Paralleeltöö – OS jooksutab igat programmi vahedega, et see saaks käia, ja siis jääb programm
ootama oma järgmist korda
Wait/run – protsessi olek, et kas protsessor saab seda tööle panna või mitte
Interrupt – protsess pannakse seisma (pärast seda salvestatakse machine state, protsessitakse ja
siis kutsutakse process scheduler ja dispatcher, et protsess uuesti käima panna)
Virtuaalmälu – OS mapib reaalse mälu „näilikuks“, virtuaalmälu kombineerib aktiivse
muutmälu ja mitteaktiivse mälu kettal, et saavutada laiem kogumälu maht
Tekstitöötlus:
Lihttekst – kogu info ainult tekstina, võib sisaldada kujundusmärgendeid, lõppvarianti
kuvab mõni teine rakendus või seade, N: HTML
WYSIWYG (What you see is what you get) – teksti protsessor, suunatud teksti
kujundamisele, lõplik vormindus kuvatakse otse redigeerimistarkvaras
Kooditabel – määrab, kuidas tuleb faili salvestatud sümbolit ekraanil näidata
Ascii – ehk American Standard Code for Information Interchange on 128-tähemärgiline
keelemärkide tabel, 7-bitine
Unicode - rahvusvaheline standard arvutites kirjasüsteemide kodeerimiseks, unicodes
antakse igale märgile oma koodipunkt, mis on unikaalne
utf-8 – Unicode’i 8-bitine kooditabeli formaat
Latex – tekstilao kirjeldamise märgendikeel, de facto standard ülikoolidel;
- TeX keele laiendus erinevate makrodega (kasutuses akadeemiliste ja tehniliste
dokumentidega, mata, statistika, keemia, füüsika, arvutiteadus)
Markdown - Märgituskeel (markup language) teksti vormindamiseks (juhendite,
lühikeste dokumentide loomiseks, veebisisu (foorumipostitused, kommentaarid)
kujundamiseks)
8. nädal
• Eksamiks: kohustuslik lugemine siin all, 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.
Teegid – Konkreetseid, piiratud funktsioone realiseerivad väikesed komponendid ja nende
komplektid
N: Trükkimine, faili kirjutamine, võrguühenduse avamine
Raamistik - Edasiarendamiseks ja ümbertegemiseks mõeldud terviklikud näiterakendused,
levinud eeskätt „tüüpiliste“ andmebaasi-kesksete veebirakenduste jaoks.
N: Ruby on Rails, Python Django, Java Spring
Litsentsi tüübid:
Litsents - ühepoolne „võta-või-jäta“ leping, et kuidas tarkvara tohib kasutada.
- kommertslitsents - väga mitmekesised: igaüks kirjutab endale sobiva.
- vabavara – programmi saab jooksutada, näha source codei, jagada koopiaid ja jagada
enda modifitsseritud versiooni koopiaid; vaba as in free speech, mitte vaba as in free
food
- dual-licensed - valid, kas kasutad piirangutega vabavarana või teistsuguste piirangutega
kommertslitsentsiga.
GPLi põhipoindid – General Public License
- Kui tarkvaral on GPL litsents (tarkvara saab arendada ning laiendada) ja keegi näiteks
laiendab antud tarkvara, siis laiendatud tarkvara läheb automaatselt GPLi alla (piirav
litsents, n-ö kleepub järgmistele)
- Arendaja saab näiteks GPLga anda tarkvara välja, kuid kui keegi tahab seda kasutada
ilma GPL-ita, siis peab ta ostma arendajalt selle tüki kasutamiseks kommertslitsentsi
Taustaks: GPL kaitseb arendajat ning samas julgustab open source arendust, näiteks Linux
kernel on GPLi all
9. nädal
• Eksamiks: mis on http, https, html, css, javascript, ajax, json, 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.
Http – protokoll teabe edastamiseks arvutivõrkudes, on andmete edastamise aluseks veebis.
Https – krüpteeritud variant http päringust: päring ise ja vastus krüpteeritakse võtmega, mis
automaatselt genereeritakse iga ühenduse jaoks.
Html – Teksti paigutamise / lehe kujundamise keel
Css – Täpset teksti paigutust ja kujundust võimaldav keel HTML täienduseks
Javascript – Brauseri programmeerimiskeel: javascripti programmid töötavad otse brauseris:
muudavad htmli, css-i, võtavad ühendust serveriga jne
Ajax – kogum omavahel seotud veebiarenduse tehnikaid, mida kasutatakse rakenduse kliendi
poolel interaktiivsete veebirakenduste loomisel (ing. k. Asynchronous JavaScript And XML)
Json – Andmete esitamise formaat tekstina (Javascripti programmeerimiskeele „native“
andmestruktuur, väga lihtne ja mugav kasutada, kaasajal brauserirakendustes eelistatum kui
XML.) (ei ole programmeerimiskeel)
Xml – Struktureeritud teksti esitamise formaat, XML standard ütleb, kuidas teksti struktuuri
märgistada; Saab kasutada andmete esitamiseks tekstina; Lihtne, aga veidi kohmakas kasutada
(ei ole programmeerimiskeel)
Klassikaline veebirakendus - server ehitab html teksti (server saadab brauserile html teksti,
kasutaja täidab vormid/vajutab nuppe, brauser saadab sisestatud parameetrid serverile ja server
arvutab parameetrite järgi uue html lehe)
Single-page app:
- server ehitab datat: json teksti
- javascript brauseris muudab/ehitab html teksti otse brauseri kõhus
Tldr: lehte kirjutatakse dünaamiliselt ümber, seega on ühendamist serveriga vähem ja
laadimisajad väiksemad
Arvutivõrgud:
Mac aadress – Etherneti aadress masinal, unikaalne kohtvõrgu piires, sõltub
võrguliidesest. Näiteks on MAC-aadress arvuti võrgukaardil ja ruuteri võrgupesadel
Ip aadress – kohtvõrkude sidumiseks antakse igale masinale unikaalne nn IP aadress:
tüüpiliselt neli baiti
Port – programmispetsiifiline aadress (port ütleb OSile, mis programmi kätte tuleks
füüsiliselt data anda)
Ethernet – on internet kohtvõrgus (sh wifi)
Ip (internetiprotokoll) – reeglistik, mida järgitakse andmepakettide saatmisel internetis
kasutatavate võrguseadmete vahel
Tcp (transfer control protocol) – põhiprotokoll, mis kasutab IP-d. Toimub kontroll, kas
info jõudis pärale -> kindlam, aeglane
Udp (user datagram protocol) – põhiprotokoll, mis kasutab IP-d. Ei kontrollita, kas info
jõudis pärale -> kiirem, osad võivad kaduda
Kapseldamine (mis mille sees) - saadetud informatsioon on kihtides (siht, transport,
data)
10.
nädal
• 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.
Puhtas funktsionaalses keeles – Haskell, Hope, Miranda, FP – ei ole programmeerijal
peale funktsioonide definieerimise ja sisseehitatud baasfunktsioonide (artimeetika,
loendid jms) mingeid lisavahendeid. Kõik kõrvalefektid on keelatud. Puhas
funktsionaalne keel ei luba muutujale väärtusi omistada. Ainus efekt, mis funktsiooni
rakendamine argumentidele annab, on resultaadi leidmine.
Kombineeritud funktsionaalsed keeled – MI, Lisp, Scheme – kombineerivad puhaste
funktsionaalsete keelte mehhanisme imperatiivsete mehhanismidega.
Rekursiooni äratundmine – funktsioon kutsub iseennast välja. On defineeritav iseenda
kaudu (ei anna mingit infot).
Rekursiooni baasjuht - rekursiooni enam välja ei kutsuta (tingimus, millal rekursioon
lõpeb)
Rekursiivne juht - rekursioon kutsutakse välja, iga välja kutse on lihtsam (kas asi läheb
lihtsamaks, ise vaja välja mõelda)
Rekursiooni ekvivalentsus tsükliga - kõike mida saab progeda while ja for tsükli abil,
saab progeda rekursiooniga ja vastupidi
lambda-arvutus - Lambda-arvutuse keel on Alonzo Churchi poolt 1930. aastatel
leiutatud lihtne ja universaalne meetod funktsioonide kirjapanekuks. Churchi tees: mida
saad mõnes keeles progeda, saad lambda arvutusese keeles kirja panna. Asendusmeetod.
Prolog on esimene loogilise programmeerimise keel. Põhiidee on nõuda otsitava
lahenduse kirjeldamist esimest järku predikaatarvutuse keeles, kusjuures Prolog-i
süsteem sisaldab teatud tüüpi automaatset teoreemitõestajat, mis on võimeline lahendust
automaatselt otsima ja tuletama. Siiski pole Prolog automaatse teoreemitõestamise
süsteem.
__________________________________________________________________
11.
nädal
• 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 tavamõttes:
Tüüpilised põhjused, miks me ei saa tavaprobleeme lahendada:
• Ei ole piisavalt infot : kui teaks, kus on mõni peidetud aare, kaevaks kohe üles.
Kui teaks, mis firma ülesostmine homme välja kuulutatakse, ostaks selle aktsiaid.
• Juhuslikkus segab: Teel aaret välja kaevama minnes võin kraavi sõita. Kasiinos
panustades ei tea, mis nr ruletis tuleb. Kas aktsia lähiajal tõuseb või langeb, sõltub
tihti hullult paljudest juhuslikest teguritest.
Lahenduvus matemaatika mõttes (teoreetilises mõttes):
Lahendatavad ülesanded:
• Infot on piisavalt: meil on olemas kõik vajalikud aksioomid/programm/täpne
ülesanne, nt: Maleseis ja käigureeglid, täisarvude massiivi sorteerituse kriteerium,
programmi sisend ja seismajäämise tuvastamise kriteerium
• Juhuslikkust ei ole: Malemäng käib täpselt reeglite järgi, sorteerimisel ei toimu
juhuslikke muutusi massiivis, programm ei tee juhuslikke tegevusi.
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.
Intuitiivne seletus lahendamatusele:
Saab näidata, et erinevaid probleeme on lõpmatult rohkem, kui erinevaid algoritme. Kuna
probleeme on lõpmatult rohkem kui algoritme, siis iga probleemi jaoks lihtsalt ei jätku
lahendavat algoritmi.
Probleeme ei saa olla rohkem kui täisarve (st on sama palju või vähem):
Iga Pythoni programm on string (aga iga string ei ole Pythoni programm). Iga string
koosneb järjestikustest baitidest, iga bait vahemikus 0-255. Iga string vastab ühele
täisarvule. St Pythoni programme ei saa olla rohkem kui täisarve.
Probleeme on sama palju kui reaalarve:
Reaalarv on arv, kus koma järel võib olla kuitahes palju komakohti. Kahendsüsteemis
reaalarvul on iga number kas 0 või 1.“yes“ või „no“ lahendus: Iga kahendsüsteemis
reaalarv alla ühe vastab ühele probleemile, seega võib neid olla lõpmatult.
Positiivsete+negatiivsete täisarvude hulk (N) on kaks korda suurem kui positiivsete
täisarvude hulk (Z) ????
Hulgad on sama võimsad: Kui saad panna üksühesesse vastavusse. Igale A elemendile
vastab täpselt üks B element ja vastupidi.
Võtad suurema hulga ja hakkad kirjutama üle ühe (0, 1, -1, 2, -2 jne). Sinna alla kirjutad
positiivsed täisarvud sinna alla (0, 1, 2 ...).
Kuna nii saab N ja Z vastavusse seada, siis on nad sama suured (sama võimsad).
Murdarvud:
Kas reaalarvude lõpmatus on suurem kui täisarvude lõpmatus?
Koostame kõigi 0 ja 1 vahel paiknevate reaalarvude tabeli. Ja konstrueerime diagonaali
järgi uue diagonaali. Konstrueeritud arv ei saa olla tabelis. Kuna seda arvu tabelis pole,
siis ei saa olla täisarvude ja reaalarvude vahel üks ühest vastavust. Seega reaalarvude
lõpmatus on suurem kui täisarvude lõpmatus.
Kontiinumhüpotees- Kas täisarvude ja reaalarvude vahel on veel lõpmatusi. Ei saa
öelda, kas hüpotees on õige või vale.
Cantori teoreem: reaalarvude hulk on suurem (võimsam) kui positiivsete täisarvude
hulk.
Hulgad on sama võimsad: Kui saad panna üksühesesse vastavusse. Igale A elemendile
vastab täpselt üks B element ja vastupidi.
Kõigi alamhulkade hulk on suurem kui hulk ise. Reaalarvude alamhulkade hulk on
suurem kui reaalarvude hulk.
Peatumisprobleem, selle lahendamatuse idee:
Kontrollime, kas etteantud programm jääb seisma.
Kui while ega rekursiooni pole, siis peatub. While korral interpretaator käima, lihtsamate
korral saame teada, raskemate puhul ei tea, kas peatubki.
3n + 1 Collatz conjecture:
Alati on peatunud, aga kuna arve on lõpmatult palju, siis ei saa kindel olla, et pole olemas
olukorda, kus ta ei peatuks. Saaks tõestada matemaatiliselt, aga keegi pole osanud.
Haltanswerer ei ole võimalik kirjutada, või kui saaks, siis oleks maailm
vastuoluline. (Pythoni Nasty(Nasty) näide).
Keerukus on funktsioon f, mis seab andmete mahule n vastavusse algoritmi sammude
arvu (ajaline keerukus) või kasutatava mälu mahu (mahuline keerukus)
• Algoritmi keerukus on põhioperatsiooni(de) arvu sõltuvusfunktsioon K(n)
sisendi(te) suurusest n. Põhioperatsioon on midagi, mis on riistvaras tehtav
piiratud arvu sammudega – aritmeetika tehe, võrdlus, omistus – rida
programmikoodis, mis ei sisalda tsüklit ega funktsiooni
• Sisendi suurus võib olla defineeritud erinevalt – Sisendandmete maht (massiivi,
listi, andmebaasi suurus) – Sisendparameetri väärtus – Sisendparameetri suurus
(bittide/baitide arv)
Mis on o-notatsioon?
Keerukuse hindamiseks. Annab keerukusklassi – millise proportsiooniga suureneb
arvutusaeg sõltuvalt sisendi suuruse muutusest
Nt 1/2 (n-1)*n O(n**2)
Sorteerimise parim keerukus halvimal juhul:
Maksimaalne suhteline aeg, mis võib algoritmil minna
O(n
2)
12.
nädal
• 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.
Tugev ehk lai AI: Oskab rääkida, saab küsimustest aru, oskab teha neid asju, mida
inimene.
Samal tasemel või parem kui inimene, pole veel tehtud.
Nõrk ehk kitsas AI: tarkvara, mis lahendab konkreetseid inimese jaoks raskeid
ülesandeid. Lahendab valemeid, mängib videomänge, tuvastab pilte.
Hästi: kabe, kuldvillak, pildituvastus, fikseeritud reeglitega mängud, süsteemid
(lihtsamad)
OK: male, pokker
Halvasti: chatbox
Miks AI areng aeglane?
Inimene ei teadvusta oma ajutegevust. Igapäevased toimingud paistavad lihtsad, kuid
nõuavad ülikeerukaid ajuprotsesse (nt trepist üles minek, ukse avamine), samas roboti
jaoks lihtsam kõrgemate matemaatiliste tehete tegemine, mille puhul ühene algoritm
lahendusele.
Turingi test: Mõistata, kas chat-ekraani taga on inimene või programm. Kui katsetajad ei
suuda ära arvata(st arvamise sagedus on 50% ja 50% eksitakse), siis on jutlev masin
päriselt intelligentne. Sisulist Turingi testi läbivat chatboxi pole tehtud, lihtsa vestlusega
saab hakkama.
Eliza: 1966 Joseph Weizenbaum at M.I.T.
Inimesega vestlev chatbox. 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)
Kui sa küsid midagi keerulist, siis ütleb „uuri wikipediast“, „ma räägin sulle parem ühe
nalja“ või mõne muu kõrvale juhtiva lause.
Tänapäeval nt Siri.
Minimax-protseduurid püüavad minimeerida käigust tuleneda võivat maksimaalset
kahju. Algoritmi idee on genereerida jooksvast positsioonist lähtudes võimalike järglaste
hulk kuni puu lehtedeni (terminaalsete tippudeni), nendele positsioonidele rakendada
kasulikkusfunktsiooni ja, liikudes puus tase-haaval kõrgemale tagasi lähtepositsiooni,
arvutada selle hinnang. Siin me eeldame, et kasulikkusfunktsioon omistab suured
väärtused headele positsioonidele, nii et meie eesmärk on maksimeerida järgmise
positsiooni hinnangut. Igas tipus, kus meie oleme käigul, püüame teha parima käigu, s.t
liikuda tippu, mille väärtus on võimalikult suur. Seevastu kui käigul on vastane, siis tema
püüab valida sellise käigu, mis on parim tema jaoks, kuid halvim meie jaoks, s.t.
võimalikult väikese hinnangufunktsiooni väärtuse. Seetõttu nimetataksegi mängijaid
minimeerijaks ja maksimeerijaks ning meetodit minimax-meetodiks.
Minimax (otsing mängupuust)- vaheldumisi maksimeerid ja minimeerid seisu. Masin
teeb enda jaoks parima käigu, inimene teeb masin jaoks halvima käigu.
Alpha-beta pruning
Standardsele minimax mängupuule rakendades tagastab see sama käigu, mille tagastaks
minimaxi algoritm, aga kärbib välja harud, mis lõplikku otsust kuidagi ei mõjuta.
Alfa-beeta kärpimist on võimalik rakendada mistahes sügavusega puudele ning sageli on
lehtede asemel võimalik kärpida terveid alampuid. Algoritmi üldine põhimõte on
järgmine: Võtame vaatluse alla mängupuu tipu n. Kui mängijal on võimalik teha parem
valik mistahes tipule n eelnevas tipus, siis tipuni n tegelikus mängus ei jõutagi. Seega, kui
oleme tipu n kohta piisavalt infot kogunud (läbi vaadates osad tema järglastest), et sellele
otsusele jõuda, võime n’i mängupuust kärpida. Alfa-beeta kärpimine on oma nime saanud
kahelt parameetrilt, mis seavad piirid puuharudes esinevatele väärtustele.
Alpha–beta pruning – käikude arvu vähendamine, mis alati leiab optimaalse võimaluse,
ilma et seis läheks kehvemaks.
Masinõppimine on teadusvaldkond, mille eesmärk on välja töötada empiiriliste andmete
põhjal otsuseid ja ennustusi tegevaid algoritme
Õppimise koolkonnad Statistika, Neurovõrgud
IBM Watson on tehisintellekt, mis on võimeline vastama inimkeeles esitatud
küsimustele. Nimetatud IBM juhi Watsoni järgi.
IBM Watson - 2011 võidab Jeopardy mälumängu
Wolfram Alpha – otsingusüsteem, mis arvutab vastused küsimustele ise välja
sisseehitatud andmete põhjal, mitte ei otsi neid suurtest andmebaasidest, nagu teeb
Google ja teised tänapäevased otsingumootorid.
Sobib kasutamiseks teadlastele, üliõpilastele, ekspertidele, tavatoimingute jaoks liialt
keerulised vastused.
13.
nädal
• 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 – PEER TO PEER – OTSE SAATMINE ARVUTIST ARVUTISSE:
Liigid:
Napster- esimene muusika jagamise süsteem (MP3 failid). Paned programmi käima, annad teada,
mis failid sul on ja nimekiri failidest saadetakse keskserverisse. Kui keegi otsib, siis serverist saab
teada, kelle käest ta saab vastavaid faile ja saab IP järgi neid teisest arvutist tõmbama hakata.
Tehniline probleem, väline programmi info küsimist takistab firewall, selleks vaja võimelda, et infot
kätte saada. Kuna Napster toetas piraatlust, siis pandi keskserver kinni. Seepärast järgnevates
lahendustes üritati leida süsteem, mis keskserverit ei kasuta.
Gnutella- keskset serverit pole. Paned programmi käima ja saadad neile arvutitele küsimuse (faili
kohta), kelle kohta sa tead, et kas neil on see programm, nemad saadavad omakorda edasi
(laviinitaoline süsteem) tõmbamine toimub otse. Mure, kuidas sa tead, mis masinates veel Gnutella
töötab (lahendused: paned listi kaasa, teed veebilehe, kus on nimekiri, iga kord kui päring tehakse,
salvestab info kus päring tuli. Palju masinaid ja päringud läbivad kõik sõlmed läbi ning liikluse hulk
läbi interneti on nii suur, et interneti ühendused ei pea vastu
Kazaa/Skype- need kes tegid Skype, tegid enne Kazaa. Ajutised kesksed serverid e supernoded
(arvuti), millega on arvutid ühendatud. Kesksed alto serverid saadavad laviinina infot, aga neid ei
ole nii palju. Mobiilidega probleem supernode-ks tegemisega (mobiilid polnud nii võimsad). Kui
MS ära ostis, siis MS tegi ümber ja tegi fix servereid pilve (supernoded)
Structured Model DHT- keskset serverit pole. Gnutella tüüpi laiali saatmine. Igal masinal on infot
teiste maisna kohta ehk iga masin sisaldab andmebaasi osa. Kui masin ei tea kus fail on, siis ta ei
saada küsimust laiali, vaid oskab öelda masina, kes on lähemal vajaliku infole (mitte
geograafiliselt).
Bittorrent- fookus ei ole info leidmisel. ÜL on optimeerida suure faili jagamist. Nt pannakse kinni
vahepeal ja suurte failide tõmbamine raske. Tõmmatakse tükkide kaupa ja hakkavad randomiga
laiali jagama, see aitab lahendada probleemi, et kui keegi arvuti nt kinni paneb. Alguses pole sul
tükke, aga saad randomiga neid ja allalaadimine muutub kiiremaks (kui sina ei anna tükke, siis sulle
ka ei anta). Kuidas saadakse teada, kellel tükid on? Serverid hoiavad infot, kellel mis tükid on.
Torrentid jagatakse laiali kasutajate vahel (info kellel mis tükid on) käib paralleelselt. Kasutatakse-
suurte softide saatmiseks, filmide tõmbamiseks.
Darknet- lehel käimine proxyde kaudu: proxyde idee on viidud äärmusesse (krüpteeritud ka veel),
eesmärk varjata, kust liiklus tuleb
TOR- Analoog Freenetile: krüpteeritud P2P ühendused, garanteerimaks, et ei ole võimalik tuvastada
ühenduse osapooli. USA sõjavägi rahastab suures osas.
Bitcoin:
Bitcoin kaevandamine/ proof of work- tuleb kontrollida, kas ülekanded on korrektsed (kas raha oli
nii palju üldse kontol, kui tehti ülekanne). Posu kontrolle (1MB) üks blokk ja tekib ahel. Et inimesed
tahaks kontrollida, makstakse preemiat. (kontrollimine on tehtud kunstlikult raskeks) Kasutatakse
ainult seda haru, kus rohkem ülekandeid ja väiksemad kaovad ära.
Kuidas raskeks tehtud: tekst + jura ja hash peab algama nullidega, ehk siis peab nonce-t muutma, kuni
saad nullidega algava hash-i. Koodi läbiproovimine võtab ~10min. Alles siis saad ülekandeid
kinnitada. Kui keegi scammib, siis suure tõenäosusega teised ei kinnita ja jääb oma harusse üksi.
Tänapäeval üksi kaevandamine juba raske (liiga suur investeering elektritarbimise ja seadmete näol),
tehakse boole.
14.
nädal
• Eksamiks: peamised masinõppe liigid, mille jaoks nad sobivad (näited ja lühiselgitus).
Supervised learning – antakse ette piisavalt palju näiteid (pildid, dokumendid) ja
õiged vastused, mille läbi masin õpib tuvastama. (nt profiilis tehtud pildist
eestvaate genereerimine, maksupettused, milline loom on pildil jne). Neural
Network
Reinforcement learning – stiimulõpe – nt robot teeb mitmeid kordi sama
liigutust (kõndima õppimine), kukub korduvalt, aga salvestab need andmed,
millal ei kukkunud ja seeläbi parendab oma tegevust. Q Learning
Unsupervised learning – pole näiteid, hulk andmeid (nt loomapilte, inimene
peaks kõik läbi käima) andmete sees on seosed ja masin suudab eristada ja
lahterdada andmeid ja aru saada. Topic Model LDA
15.
nädal
• 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).
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.
Hääletamissüsteem peab tagama:
• Hääled loetakse õigesti kokku
• Hääled on anonüümsed
• Ainult hääletamisõiguslikud saavad hääletada, ei saa hääletada topelt, ei saa
hääletamisõigust delegeerida
• Hääletajaid ei diskrimineerita
Hea oleks häälte ostmist takistada
Topeltümbriku süsteem – sinu hääl on sisemises ümbrikus: seal ei ole sinu nime. Sinu nimi on
välimisel ümbrikul. Välimise ümbriku järgi sind registreeritakse hääletajaks, võetakse välja
sisemine ümbrik ja pannakse valimisurni.
Topeltümbriku kasutamine i-hääletamisel – Hääl läheb topeltümbrikuna süsteemi, välimine
ümbrik on digiallkirjastatud. Hoitakse süsteemis, sest terve e-valimise perioodi võib korduvalt
valida → eelnev hääl tühistatakse. E-hääletamise lõppemisel oodatakse ära ka jaoskondades
valimise lõpp, kui inimene käis jaoskonnas uuesti valimas, siis e-hääl kustutatakse. Ülejäänud
hääled võetakse välimistest ümbrikest välja ja pannakse krüpteeritult e-urni. Dekrüpteerimise
võti on erinevad inimeste käes, kes peavad häälte lugemiseks kokku tulema.
!!! E-häält tohib üle hääletada terve eelvalimiste perioodi. E-hääle saab muuta valimispäeval
jaoskonnas paberil valides.
!!! Enne häälte kokkulugemist tuleb teada, kas inimene on osalenud valimispäeval. St enne seda
ei saa e-urni moodustada, hääli hoitakse topeltümbrikuna.
E-valimiste turvariskid:
Risk jaoskondades valimisel hajutatud – korruptsiooniga saab mõjutada vaid väikest osa
tulemusest, seega tsentraliseeritus on e-valimiste suurim risk.
Võimalus riski vähendada: mitu süsteemi paralleelselt, erinevad tarkvarad, administraatorid.
Kõik kommentaarid