TDT4110: Informasjonsteknologi grunnkurs
Teori
Hardware
Datamaskinen
Datamaskinen består (i enkleste fall) av
Hovedkort | Motherboard - moderkort, det kortet som forbinder alle komponenter i datamaskinen sammen. |
Mikroprosessor | Sørger for beregninger |
Minne (RAM) | Korttidsminne - primærlager |
Hard disk | Langtidsminne - sekundærlager |
Minne (RAM)
Har følgende egenskaper:
- Diskrete plasseringer som består av 1 byte
- Adresser
- Verdier
- Endelig kapasitet
- Random access
Mikroprosessoren
En mikroprosessor består av
Control Unit | Fysiske implementasjonen av Fetch/Execute sykel, se under. Henter kort sagt instruksjoner fra minnet, og gjennomfører resten av operasjonene i Fetch/Execute-sykelen |
Arithmetic/Logic Unit (ALU) | Gjennomfører matematikken og logikken |
Program Counter (PC) | Holder adressen til neste instruksjon i Fetch/Execute Cycle (se under) |
Klokke (Clock) | Klokken som sier hvor ofte instruksjoner kan startes. |
Fetch/Execute Cycle
Det er en femstegs sykel:
Instruction Fetch (IF) | Flytter instruksjon fra adressen gitt av PC fra memory unit til control unit |
Instruction Decode (ID) | ALU settes opp for å gjennomføre instruksjonen. |
Data Fetch (DF) | Henter data |
Instruction Execute (IE) | Utfører instruksjoner |
Result Return (RR) | Returnerer resultat til adressen gitt i ID-steget. |
Programvare fra datamaskinens perspektiv
Datamaskinen forstår ikke språk som Python direkte. Den kompilerer (transformerer) til et språk som kalles Assembly. Assembly er et maskinspråk som mennesker også kan lese. Dette kompileres videre til binærkode slik at mikroprosessoren faktisk kan kjøre det.
Python er et eksempel på høynivå programmeringsspråk. Vi skriver gjerne programvare i høynivå programmeringsspråk, fordi det sparer oss for masse tid ettersom det er enklere å jobbe med enn lavnivå språk (som Assembly).
Operativsystemer (OS)
Før os kan lastes, kjøres Basic Input Output System (bios) som klargjør systemet til innlasting av os. Uten programvare kan en datamaskin gjøre svært lite, derfor har man operativsystemer. Et operativsystem er en form for grunnleggende programvare som fordeler ressurser til de programmene man kjører.
Eksempler på operativsystemer er Microsoft Windows, UNIX og ulike varianter av UNIX som f.eks. Linux og Mac OS X.
Digital representasjon
Bits og bytes
Bit | En bit er et tall, 0 eller 1. 0 representerer false, 1 true. En streng av bits utgjør et tall i binærtallsystemet. |
Byte | En gruppe av 8 bits. |
PandA
Presence and Absence - logikken er enten sann eller usann. Grunnlaget for digital representasjon.
Tekst
ASCII står for American Standard Code for Information Interchange, og det er et tegnsett, altså en standard for utveksling av tekst mellom datamaskiner. ASCII bruker 7 bit-koder, og har dermed 128 mulige tegn. Dette inkluderer blant annet store og små bokstaver. 1 byte er nok til å lagre et ASCII-tegn.
Det finnes flere andre standarder for tekst, men de er ikke så viktige (i dette faget).
Tall
Datamaskiner lagrer som kjent alt binært, så vi trenger en måte for å lagre andre tall også. En byte er nok til å lagre et heltall <256
IEEE-standarder:
Singe-precision Floating-Point Representtation (32 bit) | Sign bit + 8 exponent bits + 23 fractional bits |
Double-Precision Floating-Point Representation (64 bit) | Sign bit + 11 exponent bits + 52 fractional bits |
Første biten angir om det er en positiv eller negativ verdi. To's kompliment vil si det negative heltallet med største absoluttverdi (2^-31) er det minste bit mønsteret. Det negative heltallet med minste absolutt-verdi (-1) er det største bit mønsteret. Floating point er tall som skrives på scientific notation og så bare flyttes tallet til en får et heltall hvor og hvor mye en skal opphøye 10 i.
JavaScript bruker bare Double-Precision og har kun en talltype for både flyttall og helverdier. Dette er ganske uvanlig, men det forklarer hvorfor .9 med 16 9-tall etter kommaet vises eksakt, men at det rundes av til 1 med 17 9-tall bak kommaet.
Digitalisere multimedia
Bilde
Farger kan representeres med RGB, som står for Red Green Blue. RGB er en måte å representere farger ved bit strenger. Hver farge (Red Green Blue) får 8 bits. Jo høyere tall, og mer intens blir den respektive fargen.
Lyd
For å digitalisere lyd må vi ha datapunkter for lydbølgen. For å få dette må vi måle i jevnlige intervaller. Vi kaller det å sample. Antallet samples per sekund kalles sample rate. Høyere rate, jo mer nøyaktig gjengivelse får vi.
Nyquist-regelen sier at vi bør ha en sample rate som er minst det dobbelte av hva mennesker kan høre. Mennesker kan høre ca 20 000 Hz, dermed blir det 40 000 Hz vi bør sample med. Av ulike tekniske årsaker bruker man gjerne 44 100 Hz i stedet. Et sample med lyd tar ca 16 bit i mono (dvs. per sekund tar det 16 bit * 44 100 * 2 ).
ADC er en Analog-to-digital converter og tar en kontinuerlig bølge og sampler den i jevnlige intervaller. Returnerer et binært tall for hvert sample.
DAC er en digital-to-analog converter og lager en elektrisk bølge ved interpolasjon mellom de digitale verdiene. En høyttaler konverterer de elektriske signalene til lyd.
Algoritmer
En algoritme er ordnete sett med entydige, utførbare steg som definerer en terminerende prosess. Algoritmer kan, som programkode, representeres ved pseudokode. Pseudokode er programkode skrevet på en uformell måte, altså ikke i et spesifikt programmeringsspråk, men gjerne et vanlig språk som engelsk eller norsk.
Polya
1)Forstå problemet 2) Utvikle en plan for å løse problemet 3) Utføre planen 4) Evaluere løsningen og hvor nøyaktig den er, samt potensialet dens for å løse andre problemer
Løkker
Løkker er en måte å få datamaskinen til å gjøre en bestemt ting flere ganger. En for-løkke gjør den samme tingen et bestemt antall ganger, mens en while-løkke vil gjøre den samme tingen inntil en gitt forutsetning ikke er tilfredsstilt lenger. Pre-test løkke sjekker kondisjon og utfører instruksjon. Posttest utfører instruksjon minst en gang, før den sjekker kondisjon.
Rekursivitet
Rekursjon er når en metode kaller seg selv, rett og slett. En rekursiv metode har en "base case" som sjekker om dataene som kommer inn har en viss verdi, og returnerer en viss verdi når dette er tilfellet. Som eksempel på dette kan man kikke på binærsøkalgoritmen over.
Kjøretider
Når vi skal sammenligne algoritmer, ser vi på hvor raske de er med store mengder data. For å vise dette bruker vi gjerne Big-O notasjon. Hvis en algoritme har en kjøretid O(n), er n antallet inndata. F.eks. hvis den sorterer en liste med tall, er n antall tall. O(n) sier da at når n er veldig stor (vi har veldig mange tall), vil algoritmen maksimalt måtte "sjekke" alle tallene en gang.
Andre notasjoner som kan brukes er Theta (
Søkealgoritmer
Sekvensielt søk
Går gjennom liste til den finner det den leter etter. Ganske ok hvis det du skal ha ligger langt fremme, men rævva ellers. Kjøretid: O(n)
Binærsøk
Starter på midten. Hvis match, returnerer den funnet. Hvis ikke, går den til midten av den øvre eller nedre delen av lista, avhengig av om elementet var høyere eller mindre enn midten av hele lista. Deler lista slik inntil den finner det den skal ha tak i.
Finner ting ganske greit. Worst case og average kjøretid O(logn) Regnetips: log(lengepådatasett)/log(2) (hvis du bruker 10-er logaritmen) gir hvor mange ganger den må kjøre.
Sortering
Insertion sort
Man sorterer de to første elementene i lista, og setter element for element inn i denne sorterte delen. O(n² ) sammenligninger i gjennomsnitt og i worst case.
Nettverk
Ord og uttrykk
Pakke/packet | En delmengde data av bestemt lengde som skal overføres over nettet |
Routing | Å sende en pakke videre mot målet sitt |
Router | En dedikert datamaskin som binder nettverk og utfører oppgaven routing |
ISP | Internet Service Provider, selskaper som Telenor. |
WAN | Wide Area Networks, større nettverk eid av eks. en ISP |
LAN | Local Area Network - Lokalt nettverk, eks. hjemme hos deg selv. |
VPN | Virtual Private Network. Et privat nettverk over Internett, som gjør at man kan tilby eksterne brukere interne privilegier (eks. en med hjemmekontor kan bruke et selskaps interne tjenester. |
QoS | Quality of service. |
IP, TCP og protokoller
En protokoll definerer en mengde regler for kommunikasjon mellom enheter.
Internet Protocol (IP) sørger for at datamaskiner har adresser (32-bit lange), slik at datagram/pakker kan sendes mellom dem. Det er disse adressene som brukes til routing.
Transmission Control Protocol (TCP) opererer sammen med IP, og sørger for feilsjekking og sikker overføring. Har all dataene kommet frem? Trengs noe sendes på nytt? Dette er blant tingene TCP ordner.
Personvern
- Authentication
- Verifisere identiteten til en person.
- Privacy/personvern
- Å beholde data konfidensiell.
- Spoofing
- En gir seg ut for å være noen en ikke er.
- Phishing
- Forsøker å få tak i sensitiv informasjon ved å utgi seg for å være til å stole på.
Internett er ikke sikkert. For å sikre beskjeder kan man bruke kryptering. Bak dette ligger det matematikk. Dette garanterer likevel ikke sikkerhet, men det gjør dagens nettverk mye sikrere.
Kryptering
For å sikre at kun riktig person kan dekryptere en melding (eller en pakke med data for den saks skyld), benytter man nøkler. Man har en nøkkel for å kryptere, og en for å dekryptere. Nøkkel for å kryptere kalles en public key (offentlig nøkkel), og den man bruker til å dekryptere kalles en private key (privat nøkkel). Dersom person A vil sende en privat melding til person B, kan A få den offentlige nøkkelen til B. A krypterer en melding. Da er det bare B som kan dekryptere den, for det er bare B som har den tilhørende private nøkkelen til den offentlige A brukte for å kryptere. Skal krypteringen gjelde i et større system, kan en enhet gjøre den offentlige nøkkel tilgjengelig for alle de andre enhetene.
Sikkerhet på WLAN
WPA (Wi-Fi Protected Access) | Kryptering av trådløs kommunikasjon. Det er i stor grad WPA2 som i dag benyttes |
WEP (Wired Equivalent Privacy) | Kryptering av trådløs kommunikasjon (ikke lenger sett på som sikker) |
SSID | Navnet på et trådløst nettverk. Man kan konfigurere nettverket slik at bare enheter som kjenner SSID kan koble seg på |
Brannmurer og beskyttelse
En brannmur kan ligge mellom en datamaskin og Internett, eller et helt nettverk og Internett. En administrator konfigurer den med en rekke begrensninger. Brannmuren sjekker innkommende pakker mot begrensningene, og avviser innhold som ikke er tillatt.
En brannmur kan også begrense utgående trafikk. En bruker får ikke nødvendigvis hente ned hva som helst av innhold. Dette gjør at brannmuren også beskytter mot ting som trojanske hester.
Vanlige privatpersoner kan la den trådløse ruteren eller en NAT-boks være brannmur. Man kan også installere programvare som kan fungere som brannmur.
Selskaper kan også bruke et IDS (Intrusion Detection System) til å overvåke trafikk, og sørge for at uregelmessig trafikk undersøkes.
Et DDOS (Distributed Denial of Service)-angrep går ut på at noen sender enormt mange pakker mot en side. Disse kan være vanskelige å ordne opp i, eller unngå, selv med et IDS.
Programvareutvikling
Egenskaper ved programvare
Maintainability / vedlikeholdbarhet | Programvare burde skrives slik at man kan videreutvikle det for å møte brukerens behov (som selvsagt stadig endrer seg). |
Dependability and security | Systemet skal ikke kunne medføre fysisk eller økonomisk skade. Brukere skal ikke ha tilgang til ting de ikke skal ha tilgang til osv. |
Effciency | Systemet skal ikke kaste bort ressurser som minne og prosessorsykler. |
Acceptability | Brukeren som skal bruke systemet, må kunne akspetere det og være villig til å bruke det. |
Prosessaktiviteter
- Programvare-spesifikasjon
- Innhente data fra potensielle brukere/markeder, og bygg en kravspesifikasjon. Hvilke funksjoner skal systemet ha?
- Programvaredesign og implementasjon
- Planlegg systemet ut fra kravene, og skriv kode.
- Validering
- Gjennomfør ulike typer testing for å se at systemet møter kravene.
- Evolusjon
- Videreutvikling.
Programvareutviklingsmodeller
Vannfallsmodellen | Alt planlegges, så utvikles alt, så testes alt. |
Inkrementell utvikling | Starter med en implementasjon, og utvikler den inkrementelt for å møte kravspesifikasjonen. |
Gjenbruksorientert utvikling | Tar i bruk ferdigskrevne komponenter, eller COTS (Commerical off the shelf systems) man setter sammen. Gjenbruk brukes ellers implisitt på mange prosjekter, f.eks. ved at utviklere slår opp kodeeksempler eller bruker ferdigskrevne biblioteker. |
Python
Lurer du på noe? Prøv Google. Sjekk for innebygde metoder osv., sjekk dokumentasjonen.
Variabler
Definer en variabel ved å skrive navnet på den, et likhetstegn og verdien.
variabel = verdi
I Python kan du legge en streng til en variabel du har et tall i fra før av, men dersom du for eksempel skal skrive ut en streng til konsoll, og du vil ha med et tall, må du konvertere til riktig datatype. Dette gjøres ved å kalle en konverteringsfunksjon med variabelen som argument, eks. dersom du har at a = 2
og den skal til konsoll sammen med en streng, må du bruke str(a)
. Da blir det print("Verdien til a er " + str(a))
som skriver 2 til konsoll.
Lister
En liste er rett og slett en liste. Det er nullindeksert, altså er første element nummer 0, ikke nummer 1. Du kan ikke endre verdier på indekser som ikke eksisterer, eksempelvis dersom du har en tom liste, kan du ikke forsøke å hente ut verdien liste[0].
liste = [] # Tom liste
annenListe = [1,2,3] # Liste med elementer
print(annenListe[0]) # Gir 1, første element i annenListe
Dictionaries
En assosiativ liste, dvs. du kan navngi elementer med strenger, eventuelt la den ha en annen indeksering enn nullindeksiering.
dict = {}
dict["hei"] = "hallo"
print(dict["hei"]) # gir hallo
Merk at dersom du looper over en dictionary med for x in dictionary:
-syntaksen, så vil x være nøkkelen, ikke verdien.
Fjerne et element?
del dict[key]
Sets
Et set er en mengde, altså en uordnet samling verdier hvor ingen elementer ligger to ganger. Du kan gjøre matematiske operasjoner på mengdene.
aSet = {1, 2, 3}
anotherSet = {1, 2, 2, 3}
aSet == anotherSet # Returnerer true, fordi 2 vil ikke ligge to ganger i anotherSet
Så når er dette kjekt å ha? Kanskje du har en liste med elementer, og vil fjerne de som ligger flere ganger?
L = [1, 2, 2, 3]
L = set(L) # Fjerner ekstra elementer
L = list(L) # Tilbake til en liste
If-statements
Syntaks
if condition:
# Gjør dette hvis condition er sann
elif other_condition:
#gjør noe helt annet
else: # condition er ikke sann
# Gjør noe annet
Løkker
For-løkke
Syntaks:
for i in range(x, y):
# Do stuff
Her vil vi gjøre "Do stuff" antallet ganger fra x til y. Er x 0, og y 10, vil vi gjøre det 10 ganger. i vil være hvilken "gang" den runden som kjører er. Den andre gangen her, vil i være 1 for eksempel (startet fra 0).
Man kan slenge på et tall z bak y i range-metoden. Tallet z vil være hvor stort hopp det skal være for hver iterasjon. Har man ikke med tallet z, vil hoppet være 1.
While-løkke
Syntaks
while condition:
# Gjør ting til condition blir false.
Husk at noe i while-løkka må kunne gjøre condition false, hvis ikke vil løkka aldri kunne bli ferdig.
continue- og break-statement
break
vil bryte ut av løkka. continue
vil hoppe til neste iterasjon av løkka.
Funksjoner
Syntaks
def funksjonsnavn(parametere):
# Do stuff
return
return-statement
return
terminerer kjøringen av funksjonen. Dersom du skriver return 2
vil funksjonen returnere tallet 2. Dvs.:
def aMethod():
return 2
a = aMethod()
print(a) # Vil vise 2
En funksjon i Python trenger ikke nødvendigvis returnere noe.
Filbehandling
with open('filnavn.txt','parameter') as file:
#skriv koden din her. Ved bruk av denne trenges ikke fil.close da du bare rykker ut av indenten
De mest nyttige åpne-parameterene er som følger:
Parameter | Hva den gjør |
a | Åpner for appending, setter markøren på slutten av filen |
r | Åpner for lesing, setter markøren på begynnelsen |
w | Åpner for skriving. Vil overskrive filen, eller opprette en ny hvis den ikke finnes |
r+ | Åpner for lesing, lar deg så skrive til slutten av filen |
wb | Åpner for skriving binært |
rb | Åpner for lesing binært |
Pickle
Pickle brukes for å pickle data og skrive den binært.
import pickle
with open('filnavn.txt','wb') as file: #wb åpne for skriving binært
db={'somekey':'33'} #oppretter en dictionary
pickle.dump(db,file) #dumper dictionarien, syntax er pickle.dump(variabelnavn,filvariabel)
with open('filnavn.txt','rb') as file: #rb åpner for lesing binært
db=pickle.load(filnavn) #importerer binærtdata til db variabelen