FAQ Hjemmeeksamen

Denne siden besvarer ofte stilte spørsmål relatert til hjemmeeksamen i IN2140 i våren 2023

Q1: Hvor finner jeg oppgaven og hvordan leverer jeg den?

Du kan laste oppgavene ned fra Inspera og du levere besvarelsen i Inspera. Selve oppgavene samt testdata, og etter hvert muligens noen filer som retter feil i prekoden finnes du på github.

Q2: Administrative ting

Q2.1: Jeg kan ikke finne hjemmeeksamen i Inspera. Hva skal jeg gjøre?

Hvis du enten (a) har bestått oblig 1 eller (b) ha bestått obligene 1 og 2 i tidligere semestere, skal du ha rett til å ta hjemmeeksamen i år. I tilfelle (a) er feilen antakeligvis vår feil. Send epost til Jie med henvisning til gruppen din i Devilry (hvem har du levert sammen med etc.). I tilfelle (b) ligger feilen et annet steds. Send epost til studieinfo@ifi.uio.no, som vil prøve å rette opp feilen.

Du kan sette i gang med oppgaven fra Github, men ikke vent med å sende melding. Det tar tid å fikse dette.

Q2.2: Hvis jeg står i hjemmeeksamen men ikke teorieksamen, kan jeg bruke delresultatet i 2024?

Nei. Hjemmeeksamen og teorieksamen må bestås i samme semester.

Q2.3: Jeg kan se hjemmeeksamen til tross for styrk i oblig 2. Kan jeg levere besvarelsen?

Ja, men du kan ikke gå opp til teorieksamen, så innsatsen er bortkastet.

Q3: Uklarheter

Q3.1: Må jeg implementere XMLtoRecord og BinaryToRecord?

Nei, men det er anbefalt. Det er en viktig oppgave å finne ut om data lest fra en socket utgjør en ufullstendig Record, en hel Record, eller til og med mer enn en helt Record. Det er anbefalt å lage egne funksjoner som løser denne oppgaven.

Q3.2: Må jeg fylle hvert felt i struct Records ved innlesing?

Nei. Det er viktig for oppgaven at noen informasjonsdeler ikke er inkludert i hverken XML- er binær format: dette er viktig i ekte protokoller for spare båndbredde og prosesseringtid.

Hvis man mottar en Record fra nettet som mangler (for eksempel) group-informasjon, bør men bruke "has_group=false;". Verdien av variablen "group" forblir udefinert. Hvis man mottar en Record som inkluderer group-informasjon, skal man sette "has_group=true;" og "group" skal settes til verdien.

Q3.3: Kan jeg forandre parametre og returverdier til funksjonene i connection.[ch]?

Nei, vi vil evaluere implementasjonene med antakelsen at disse forblir uendret. Men dere kan lage egne funksjoner enten i proxy.c eller i ny filer som dere legger til.

Q3.4: Kan min proxy finne ut hvilken type klient det er som kobler seg til?

Delvis.

Både binSender, xmlSender og anyReceiver sender to bytes rett etter at TCP-forbindelsen til proxy er opprettet. Den første byten er X eller B for type data de sender eller mottar. Den andre byten er en bokstav (A-Z) som indikerer identitet og som brukes for å velge filnavn.

De informerer ikke om de er sendere eller mottakere, så proxyen burde ikke antar hverken de ene eller det andre. Det skyldes at den opprinnelige idéen for oppgaven var at hver prosess skulle både sende og motta. Ideen ble forkastet for å redusere omfang av oppgaven.

Q3.5: Kan jeg anta at alle klienter har ulike IDer?

Ja. Du trenger ikke å håndtere situasjonen da flere sendere og mottakere senden den samme byteverdien for å identifisere seg.

Q3.6: Hva gjør proxyen hvis mottakeren av en melding ikke finnes?

Proxyen forkaster meldinger hvis mottaker ikke er koblet på med kjent ID og type. Pass på at det ikke oppstår memory leaks.

Meldinger uten gyldig "dest"-felt skal proxyen også forkaste.

Q3.7: Kan min proxy mellomlagre data på disk?

Oppgaveteksten forbyr det ikke eksplisitt, dessverre. Oppgaven impliserer at proxyen skal videresende meldinger med en gang. Det er ikke hensikten med oppgaven at proxyen skal vente med konvertering og videresending.

Q3.8: Er det greit hvis rekkefølgen av Records i mottakeren er annerledes enn i expected-filen?

Dette er problematisk. Den mest sannsynlige grunnen for dette er at du ikke håndterer alle klienter samtidig, men at du venter på at en klient blir ferdig før du aksepterer den neste forbindelsen. En proxy med hendelsesløkke burde tillate flere samtidige forbindelser.

Q3.9: Hvordan kan jeg test mottak av flere Records i sammen leseoperasjon, eller mottak av en ufullstendig Record?

Vi utvidet testdata med testene 9, 10 og 11.

Test 9 sender både XML og binærdata med sleep-tid 0 mellom Records.

Test 10 og 11 utvider situasjonen med en garanti for at minst en Record er fordelt på flere leseoperasjoner på login.ifi.uio.no: da er senderen erstattet med programmet "nc" (netcat), som bare sender bytes så raskt som mulig. Test 10 sender XML, test 11 sender binær data.

 

Publisert 2. mai 2023 12:18 - Sist endret 12. mai 2023 20:50