De 10 JavaScript eksamensspørgsmål I det nedenstående præsenteres de 10 JavaScript spørgsmål der sammen med relevante dele af kursets pensum vil udgøre udgangspunktet for den del af den mundtlige eksamen i digitalt materiale og interaktive artefakter der vedrører kursets introduktion til struktureret programmering i JavaScript samt design og implementering af mindre mikroprocessor-kontrollerede digitale/analoge elektriske kredsløb (se i øvrigt kursusbasen for detaljerede læringsmål). Det forventes at den studerende efter simpel lodtrækning blandt de 10 spørgsmål er forberedt på at besvare et af disse spørgsmål samt indgå i en mere generel diskussion af emneområderne som de er blevet præsenteret/diskuteret på kurset igennem pensum, forelæsninger og øvelser. Der er til den mundtlige eksamen afsat 10 minutter til dette. Side 1 af 14
1. Design og implementer JavaScript kode der kan indgå i en tyverialarm applikation. Forestil dig at du har en Tessel med en passende sensor monteret på cyklen. Alarmen skal give besked på din telefon, når din cykel flyttes. Hvilken sensor vil du bruge? Hvordan skal kredsløbet der forbinder Tessel og sensoren være? Alarm applikationen skal endvidere laves i en version, hvor 5 af dine venners mobiltelefoner også modtager beskeden (Brug PubNub til kommunikation fra Tessel til telefonen). Forbered dig på at præsentere/diskutere den overordnede struktur af din kode samt de anvendte kontrol- og datastrukturer. Side 2 af 14
2. Design og implementer JavaScript kode der kan indgå i en applikation der kan spille Yatzy med 5 terninger. Efter hvert kast, skal de terninger, der viser 6 øjne lægges til side og de resterende terninger kastes indtil Yatzy opnås. Yatzy er opnået når alle 5 terninger viser 6 øjne. Applikationen skal vise en statistik over hvor mange terningekast, der skal til for at opnå Yatzy. For at etablere et bedre statistisk grundlag, skal der opnås Yatzy 500 gange før det gennemsnitlige antal anvendte kast beregnes. Hvordan vil du følge og vise processen mens applikationen gennemfører de 500 Yatzy spil? (Vise statistik løbende måske? Eller på anden måde vise at processen er i gang?) Forbered dig på at præsentere/diskutere den overordnede struktur af din kode samt de anvendte kontrol- og datastrukturer. Side 3 af 14
3. Design og implementer JavaScript kode og kredsløb, der kan indgå i en bils baksensor med en Tessel og en ultralydssensor (afstandssensor), samt 3 LEDs som output. Vis afstanden opdelt i 3 intervallen hhv. langt fra, tæt på, meget tæt på. Hvert interval vises med lys i LEDerne. Hvordan er kredsløbet mellem ultralydssensor, Tessel og LEDs? Forbered dig på at diskutere forskellen mellem analog og digital input og output. Forbered dig på at præsentere/diskutere den overordnede struktur af din kode samt de anvendte kontrol- og datastrukturer. Side 4 af 14
4. Design og implementer JavaScript kode der kan indgå i en applikation der gemmer de 20 mest almindelige efternavne i en passende datastruktur. Navnene kan du hente fra Danmarks Statistik: http://www.dst.dk/da/statistik/emner/befolkning-og-valg/navne/navne-i-hele-befolknin gen Applikation skal kunne udskrive navnene i alfabetisk sorteret rækkefølge. Efterfølgende skal det længste navn (navnet med flest bogstaver) udskrives. Hvis der er flere kandidater til det længste navn, skal disse navne skrives ud i alfabetisk rækkefølge. Forbered dig på at præsentere/diskutere den overordnede struktur af din kode samt de anvendte kontrol- og datastrukturer. Side 5 af 14
5. Forbered dig på at præsentere/diskutere nedenstående JavaScript kode. Tag udgangspunkt i de med blåt fremhævede linier i koden når du forklarer hvad koden gør. Vis også det elektriske kredsløb der tænkes brugt i forbindelse med brug af koden. (OBS! Koden fortsætter på næste side) var mytessel = require( "tessel" ); var EventEmitter = require( 'events' ).EventEmitter; var util = require( 'util' ); util.inherits(ultrasoundsensor, EventEmitter ); /* Inherit methods from the standard js EVentEmitter object and hence, make them part of our object. We want to emit events */ function UltraSoundSensor(anPin, samplerate, minimumdistance) var self = this ; var dist = 4097; // A value we know cannot be from a real measurement var intervalid; function gomeasure() anpin.analogread(dothesensing); function dothesensing (error,number) dist = Math.round(4095*number); if (dist < minimumdistance) self.emit( 'tooclose',dist); // name and emit event // methods to help start and stop the timers controlling the samlping process this.start = function () console.log( 'starting sensor' ); intervalid = setinterval(gomeasure,samplerate); ; this.stop = function () clearinterval(intervalid); console.log( 'sensor stopped' ); ; Side 6 af 14
module.exports = UltraSoundSensor; /* make our object avaible as module that can we can 'require' from somewhere outside this module */ Og når vi vil bruge et UltraSoundSensor objekt: var mytessel = require( "tessel" ); ultrasoundsensor = require( "./UltraSoundSensorObject.js" ); var myanaloginputpin = mytessel. port.b.pin[2]; myultrasoundsensor = new ultrasoundsensor (myanaloginputpin,100,200); function handletoocloseevent (d) console.log(d + " taking Care Of too close event" ); myultrasoundsensor.on( 'tooclose', handletoocloseevent ); myultrasoundsensor.start(); Side 7 af 14
6. Vis eksempler i JavaScript på anvendelsen af hhv. repetition, selektion og sekvens som kontrolstrukturer i designet og konstruktionen af JavaScript applikationer. Anvend eventuelt et af de andre 9 spørgsmål som inspiration og til konkretisering af diskussionen af de tre i øvrigt generiske kontrolstrukturer. Anvendelsen af lokale variable som del af kontrolstrukturer? Hvad hvis der skal vælges (selekteres) mellem mere end to muligheder? Diskuter de forskellige slags repetitioner ( for, while ) vi har til rådighed og hvordan vi vælger imellem dem når vi står med en konkret programmeringsopgave? Side 8 af 14
7. Analyser projektet Light Kinetics af Studio Espadaysantacruz. https://player.vimeo.com/video/90523113 Design og implementer JavaScript kode og det elektriske kredsløb, der kan prototype projektet med en Tessel og 7 LEDs. Hvilken sensor vil du anvende? Hvordan undgår du at lyset flimrer og sikrer du flydende overgange mellem LEDs? Hvordan undgår du at en LED springes over, hvis brugeren bevæger vippen hurtigt? Forbered dig på at præsentere/diskutere den overordnede struktur af din kode samt de anvendte kontrol- og datastrukturer. Side 9 af 14
8. Forbered dig på at præsentere/diskutere nedenstående JavaScript kode. Tag udgangspunkt i de med blåt fremhævede linier i koden når du forklarer hvad koden gør. Vis også det elektriske kredsløb der tænkes brugt i forbindelse med brug af koden. (OBS! Koden fortsætter på næste side) var mytessel = require( "tessel" ); var PubNub = require( "pubnub" ); var mprefs = require( "./pubnubprefs" ); var beskednummer = 0; var minpubnub = new PubNub () ( publishkey : mprefs. minepubnubkeys. publishkey, subscribekey : mprefs. minepubnubkeys. subscribekey ); minpubnub.subscribe( channels : [mprefs. minchannel ]; ); function sendbesked (BeskedObj) minpubnub.publish( channel : mprefs. minchannel, message : BeskedObj ) function lavogsendbesked () var mbesked = new mprefs.minbesked( "Switch Opened!", beskednummer++); sendbesked (mbesked); var myinputpin = mytessel. port.b.pin[2]; function readmypin (P) P. read ( dosomething ); ; var oldnumber = true ; // 1 as true, 0 as false function dosomething (error, number) Side 10 af 14
console.log(number); if ((number!= oldnumber) && (number== true )) lavogsendbesked (); oldnumber = number; // number = 1 true swtich opent setinterval( readmypin,500,myinputpin); Side 11 af 14
9. Forbered dig på at præsentere/diskutere nedenstående JavaScript kode. Tag udgangspunkt i de med blåt fremhævede linier i koden når du forklarer hvad koden gør. Koden omfatter en HTML og to JS filer. (OBS koden fortsætter på næste side) HTML <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>title</title> </head> <body> <script src="https://cdn.pubnub.com/sdk/javascript/pubnub.4.4.3.js"></script> <script src="minepubnubprefs.js"></script> <span id ="datafield"></span> <script src="tesselpubnubreceivermonitor.js"></script> </body> </html> Java Script (1) var datadisplay = document.getelementbyid( "datafield" ); var minpubnub = new PubNub ( subscribekey : minepubnubkeys. subscribekey, restore : true ); minpubnub.addlistener ( message : hentogvisminbesked ); minpubnub.subscribe ( channels : [ minchannel ], restore : true ); function hentogvisminbesked (mobj) datadisplay. innerhtml = "Data modtaget: " + mobj. message. data ; Side 12 af 14
Java Script (2) const myuuid = PubNub.generateUUID(); const minepubnubkeys = publishkey : "pub-xxxxxxx", subscribekey : "sub-xxxxxxx" ; const minchannel = "BDMA17" ; function minbesked (beskedtxt,beskednummer) this. text = beskedtxt; this. nummer = beskednummer; this. uuid = myuuid ; Side 13 af 14
10. Design en augmenteret kontorstol. Montér en smartphone på en kontorstol og anvend denne telefon til at detekterer/registrerer stolens bevægelser. Bevægelserne skal vises som farveskift på en web-side. Opgaven løses naturligt i 2 dele: 1) Design og implementer den JavaScript kode der gør det muligt at detekterer/registrerer stolens bevægelser ved hjælp af telefonen og 2) Design og implementer den HTML-kode der med udgangspunkt i data fra telefonen kontrollerer og viser baggrundsfarven på en web-side. Web-siden vises i en browser (eksempelvis i Chrome på en laptop ). Baggrundsfarven i HTML-dokumentet er som udgangspunkt sort når stolen står stille, og ændrer sig når stolen bevæges. Forklar hvilken sensor du benytter i telefonen og hvordan du tilgår data fra denne. Brug PubNub til kommunikation mellem stolens påmonterede telefon og den computer der viser HTML siden. Forbered dig på at præsentere/diskutere den overordnede struktur af din kode samt de anvendte kontrol- og datastrukturer. Side 14 af 14