SKRIFTLIGE HJEMMEOPGAVER KOMMUNIKATION OG IT
|
|
- Karen Berg
- 8 år siden
- Visninger:
Transkript
1 SKRIFTLIGE HJEMMEOPGAVER KOMMUNIKATION OG IT Afleveringsdato D. 10 januar 2013 Eksamen Grundlæggende datalogi Fagelementkode Eksaminandens fulde navn Studienummer Eksaminator Ken Friis Larsen Normalsider (SKAL oplyses) 18 Antal typeenheder (SKAL oplyses) Eksamensform (kryds af med mus) Individuel prøve Gruppeprøve X Deltagere i gruppe (navne og studienumre)
2 DATALOGI EKSAMENSOPGAVE 2013 SAMLET ANSLAG: Dato: d. 10. januar 2013 Københavns Universitet Amager 1
3 Indhold 1. Forord og indledning Baggrund og problemstilling Sammensatte ansigter Web- applikation for Olives R Us Fokuspunkter Problemanalyse Sammensatte billeder Web- applikation for Olives R Us Brugervejledning og afprøvning Brugervejledning til sammensatte ansigter Brugervejledning til Web- applikation: Teknisk beskrivelse af programmet Sammensatte ansigter Finde billeder Kopiere pixels fra source til target Random choice Textstring Web applikation Oprettelse af en web- applikation Form action, method get Databaser Querys og For loops Modulo Ideer til forbedring Sammensatte billede Web- applikationen Opgavefordeling Konklusion Konklusion for sammensatte billeder
4 9.1.1 Tilbagevendende problemer Konklusion for Web- applikationen Tilbagevendende problemer Samlet konklusion for opgaven Koden Koden for sammensatte billeder Koden for Web- applikation Bilag Opgave 2 - Sammensatte billeder: Bilag 1: Bilag 2: Bilag 3: Bilag 4: Bilag 5: Opgave 4 - Webapplication for Olives R us Bilag 1- Screenshot af hovedsiden Bilag 2 Screenshot af en olies specifikke side Bilag 3 Screenshot af anmeldelser Bilag 4 Screenshot af den adminstrative Bilag 5 Screenshot af databaserne Litteraturliste
5 1. Forord og indledning Følgende eksamensopgave er skrevet i faget Grundlæggende datalogi, på bachelor- uddannelsen Kommunikation og It. Rapporten er udarbejdet af: XXX XXX Opgaven er skrevet i perioden fra d. 3. januar 2013 til d. 10. januar 2013 og er skrevet i et samarbejde mellem ovenstående parter. Det vil fremgå hvem der har været hovedansvarlig for de forskellige dele i rapporten og i koden. I rapporten besvares to delopgaver, hvor den ene opgave er et program skrevet i Jes, Python, som kan returnere et billede af et ansigt, der er sammensat af ansigtsdele fra ni forskellige billeder. Anden delopgave er en hjemmeside skrevet i HTML, der bl.a. kan vise beskrivelser af forskellige olivenolier og give brugeren mulighed for at anmelde de forskellige olier. 2. Baggrund og problemstilling I denne opgave har vi valgt at besvare følgende delopgaver: Opgave 2. Sammensatte ansigter Opgave 4. Web-applikation for Olives R Us 2.1 Sammensatte ansigter Denne delopgave består i at sammensætte et ansigt af ansigtsdele fra ni forskellige billeder. Disse ni billeder er alle portrætter af Turing Award-prisvindere. Opgaven er så at skrive et program i Jes, Python, som kan returnere et billede, hvor der er valgt tilfældigt imellem de ni prisvinderes ansigtsdele. Alle ansigtsdele skal være synlige, og mindst et af disse billeder skal være en kvindelig Turing-Award vinder. 2.2 Web- applikation for Olives R Us Denne delopgave består i at lave en web- applikation for firmaet Olives R Us, da direktøren gerne vil starte et online community for olivenolie. Web- applikationen skal indeholde en hovedside hvor brugeren skal kunne se en oversigt over de forskellige typer olivenolier. Derfra skal brugeren kunne klikke sig videre til en side for hver olivenolie, hvor den 4
6 specifikke olivenolie beskrives. Yderligere skal der være mulighed for at brugeren kan give en anmeldelse og stjerner af den valgte olie. På hovedsiden skal det så fremgå hvor mange anmeldelser der er for hver olivenolie, samt at man skal kunne se det gennemsnitlige antal stjerner. Til sidst skal der laves en administrativ side, hvor det skal være muligt at tilføje og slette olier. Denne side skal fungere som en hemmelig side, så det kun er firmaet selv der har adgang til denne, hvilket vil sige, at der ikke er knapper der fører hen til den. 3. Fokuspunkter I løsningen af denne opgave, bestræber vi os på at lave en velfungerende kode, der kan køre fejlfrit og uden fejlmeddelelser. Derudover vil vi prøve at mindske brugen af unødvendig kode, så det udelukkende er det der bliver brugt, der kommer med i den endelige kode, dvs. det mest relevante for besvarelsen af denne opgave. Samtidig prøver vi at gøre koden så logisk som muligt, ved at strukturere den således at koden bliver skrevet i forholdsvis kronologisk rækkefølge. Vi vil følge en bestemt struktur i begge opgaver, for at skabe orden og overblik. 4. Problemanalyse I dette afsnit vil vi beskrive hvordan de to programmer kan laves så de løser opgaverne. Vi vil komme ind på hvilke tanker vi har haft omkring programmerne, samt beskrive hvad der virkede, hvad der ikke gjorde og diskutere om andre løsninger kunne være en mulighed Sammensatte billeder Vi startede med at diskutere hvilke tidligere koder vi havde lært, som kunne bruges til netop denne opgave. Vi fandt frem til at vores obligatoriske opgave 2, kunne bruges som udgangspunkt til at løse denne opgave med at sammensætte ansigter. På baggrund af den løste obligatoriske opgave 2, kunne vi se, at det var en nødvendighed at finde de bestemte pixels, vi ville have kopieret. Forskellen fra den obligatoriske opgave og denne her opgave, består i at vi i denne opgave skal have kopieret bestemte dele af flere ansigter, hen på et valgt canvas. I den obligatoriske opgave derimod, gik det ud på at skalere et bestemt billede ned til en vis størrelse. Det er dog stadig den samme kode, vi bruger til at løse begge disse opgaver. 5
7 Den første del af opgaven, bestod i at finde de forskellige pixels der skal kopieres hen på vores canvas. Et billede har to dimensioner, højde og vidde, altså vertikal og horisontal. Når man skal finde pixels snakker man derfor om matrix. Hver pixel kender dens farve og dens plads på et bestemt billede. For at finde frem til disse koordinater til pixel, som vi skal bruge for at finde ud af hvilken del af billedet der skal skæres ud af vores ni forskellige billleder, skal vi finde ud af hvor det skal placeres på canvas et, og her har vi brugt denne funktion: def findcord(): f=pickafile() picture=makepicture(f) explore(picture) På denne måde finder vi vores koordinater, eller vores matrix, som vi skal bruge, da vi skal vide hvor vi vil have programmet til at skære vores bestemte dele ud. Eftersom vi skal have programmet til at skære bestemte dele ud af et billede, bruger vi en kode fra grundbogen 1. Dette program vælger nemlig bestemte pixels og kopierer det over på et canvas, som er det vi gerne vil foretage os. Derfor bruger vi denne kode, til at skære en bestemt del ud af vores kilde som i dette tilfælde er et billede af en Turing Award prisvinder, og sætter det så på det canvas vi har valgt. Ideen med denne kode var, at vi ville køre den samme kode gentagne gange, for hver ansigtsdel, og indsætte det på vores canvas, således at hvert valgte billede ville komme ind på det samme canvas. Vi fandt frem til denne metode, ved igen at kigge i grundbogen 2, hvor man skal lave en collage. Ved at lave en collage, bliver det nemlig muligt at samle alle billeder på det samme canvas. Problemet med begge af disse koder var, at den skulle køres 81 gange, da vi skulle finde ni forskellige ansigtsdele, på ni forskellige personer, samt den præcise placering for hver del på vores canvas. Denne kode er stadig mulig, men problemet kommer, når man skal få programmet til at vælge tilfældigt mellem alle billederne og alle de ni dele på de forskellige billeder. Det kan aldrig blive helt tilfældigt, da man selv bliver nødt til at gå ind 1 Guzdial., M.,J, & Ericson, B. (2012) Introduction to Computing and Programming in Python, Third edition, Pearson, side 110, program Guzdial., M.,J, & Ericson, B. (2012) Introduction to Computing and Programming in Python, Third edition, Pearson, Side 119, program 29 6
8 og klikke på hvilke billeder man vil have den skal vælge, og derfor kan programmet ikke køres automatisk. Den næste ide vi fik, var at lave en liste med alle ansigtsdelene. Vi startede med at kalde vores variabler efter de forskellige ansigtsdele, så vi havde ni forskellige lister. Disse ni lister indeholder tre nye lister, med personerne der var brugt til ansigtsdelen og deres koordinater. Vi startede med tre billeder af hver ansigtsdel, men har derefter udvidet det til at vælge tilfældigt mellem alle ni billeder og deres ni ansigtsdele. Nedenstående kan i se et udpluk af vores ni lister. lefteye = [[barb, 77, 79, 102], [char, 63, 70, 100, 100],[edwa, 58, 51, 101, 74]] righteye = [[fern, 126, 70, 151, 88],[john, 131, 75, 158, 96],[kris, 121, 66, 150, 81]] Ideen var nu, at vi ville have listerne ind i vores oprindelige kode, og derfor blev vi nødt til at dele vores lister op i separate lister, i stedet for at lave en liste der indeholder tre lister. Vores variabler blev derved også ændret, da vi ikke skulle have en variabel for hver ansigtsdel, men i stedet en for hver person. Derfor ændrede vi variablerne til navne af de ni forskellige personer vi har valgt. Disse ni nye lister, skal indsættes ni gange i koden, da de hører til hver deres ansigtsdel. Listerne kommer derfor til at se således ud: #left eye list barbara = [barb,77, 79, 102, 90, "barbara"] charles = [char, 63, 70, 100, 100, "charles"] edward = [edwa, 58, 51, 101, 74, "edward"] fernando = [fern, 75, 70, 102, 88, "fernando"] johncocke = [john, 70, 69, 102, 88, "johncocke"] kristen = [kris, 59, 67, 92, 89, "kristen"] marvin = [marv, 64, 69, 94, 88, "marvin"] thompson = [thom, 59, 62, 90, 84, "thompson"] william = [will, 69, 69, 109, 93, "william"] 7
9 Den anden ting man skulle gøre, var at skalere ansigtsdelene så de så proportionelle ud på canvas et. Måden man gør dette på, er ved brug af den samme kode som vi har skrevet om ovenstående. Det eneste man ændrer, er at indsætte et tal, som f.eks. kan være 2, hvis man ønsker at gøre ansigtsdelen halv størrelse. Ved at indsætte tallet 2, skipper vi hver anden pixel. Dette medfører at vi kun får halvdelen af vidden og bredden i det endelige billede. Fordi vi gerne vil skippe hver anden pixel i sourcey samt sourcex når den kører igennem loopet, skriver vi +2. Dette skalerer billedet til den ønskede størrelse. I vores kode, hvor vi har indsat lister, er det svært at gøre det på denne måde, da det ikke er alle billederne der skal skaleres på samme måde. Hvis vi havde brugt løsningen med createcollage, kunne vi sagtens have skaleret hvert billede så det sad proportionelt på canvas, men da vores endelige kode vælger tilfældigt mellem vores billeder, har det ikke været muligt for os at skalere vores billeder til den rette størrelse. 4.2 Web- applikation for Olives R Us Før vi startede på at løse opgaven, diskuterede vi i fællesskab hvordan vi overordnet ville gribe problemstillingerne an, så de kunne blive løst bedst muligt. Vi kom hurtigt frem til at vi skulle benytte den obligatoriske opgave 5 som referencepunkt, da netop denne gik ud på, at man skulle lave en web- applikation for et firma. Det var derfor oplagt at tage udgangspunkt i strukturen for den HTML- web- applikation, fordi denne benytter mange af de elementer, som vi også skulle bruge. Som basis for at lave en web- applikation, ville vi bruge programmerne Text- wrangler/notepad++ og Google app engine launcher. Selve koden skrives som HTML i Text- wrangler/notepad++ og gemmes som en py- fil. Udover det skal man oprette en yaml- fil, som er den der skaber selve web- applikationen. Disse to filer skal ligge i samme mappe og importeres så samlet i Google app engine launcher, som gør at web- applikationen åbnes i en browser. Vores plan var så at lave fem handler- functions, som svarer til hver URL vi skulle kunne vise. Disse handler- functions er altså defineret som mainpage, greekngood, spicynhot, virginngarlic, samt adminpage og fungerer alle sammen som et request. I første omgang skulle der ikke ske så meget på mainpage, andet end at vi skulle skabe nogle knapper til hver slags olie, der kunne føre videre til hver olies specifkke URL. Vi var dog også nødt til at lave en 8
10 routing table under alle vores handlers, som sørger for at forbinde URL erne med deres handler- functions. Samtidig importerer vi webapp2 over alle vores handlers. I de næste tre handler- functions ville vi lave en beskrivelse af olierne, samt tilføje en tekst- boks til brugerens navn, og en tekst- boks til brugerens anmeldelse. Informationerne fra disse tekstbokse ville vi så bruge til at besvare opgaven om at liste alle anmeldelserne nederst på oliernes sider. Dette ville vi gøre ved at sende informationerne til en database, (som i selve koden svarer til de classes vi vil lave) hvor alle navne og anmeldelser lagres. Der laves en database til hver URL for olierne, så anmeldelserne for hver olie lagres adskilt. Navne og anmeldelser er vores variabler, som vi ville trække ind i databasen vha. Google app engine launcher, som importeres ovenover vores handlers. Efterfølgende ville vi trække informationerne ned på hver URL via en query, som trækker alle variablerne ind fra de forskellige classes. Alle de data som hentes ned, sætter vi ind i en tabel, så der skabes et overblik over anmeldelserne. For at kunne liste anmeldelserne under hinanden, var vores idé at køre et for loop, som sørger for at lave en ny række i tabellen, så der på ny vil kunne trækkes data ned fra databasen, hver gang der tilføjes en anmeldelse i web- applikationen. Under tabellen ville vi så tilføje antallet af anmeldelser, og vores idé til det var at køre endnu et for loop. Dette ville vi gøre ved igen at hente data fra databasen via en query og sætte hele queryen til at være 0. Det som loopet så skal gøre, er at tilføje 1 hver gang queryen køres gennem loopet. Det tal der regnes frem til, trækkes så ind under tabellen vha. af modulo og vi ville på den måde finde frem til antallet af anmeldelser. Dette tal skulle så igen trækkes ud på forsiden. Vores første idé til dette var bare at kopiere query, for loop og modulo ind på vores mainpage, men dette kunne ikke lade sig gøre. Vi fandt så frem til, at vi var nødt til at sætte de tre querys og de tre for loops øverst i URL en, og selve modulo- strengen ind i vores webapp2.response. (Response fungerer som en helper- function som konstruerer selve HTML en ud fra den givne body og title, som laves i vores handler- function) På den måde fik vi antallet af anmeldelser ud på vores mainpage, så de ligger under knapperne for hver specifik olie. Vores idé til at opbygge funktionerne der kunne slette og tilføje olier på vores adminpage var at sende informationerne om nye olier til endnu en database, så vi lavede igen en class. Derefter ville vi så hente dataen ned på vores mainpage for at sætte en evt. ny olie ind under 9
11 de eksisterende olier. Til dette var vores idé at følge et eksempel fra undervisningen om at lave en Phonebook, hvor man netop kan tilføje og slette telefonnumre. Dette er dog blevet ved idéen, da vi ikke kunne få hentet vores data fra databasen ned til forsiden. Af samme årsag kan vi derfor heller ikke slette vores olier, da de slettes via databasens key. 5. Brugervejledning og afprøvning I dette afsnit vil vi formulere hvordan man som bruger navigerer rundt i de to programmer, så de kommer til at køre efter hensigten. 5.1 Brugervejledning til sammensatte ansigter For at kunne køre dette program for sammensatte ansigter, skal man have installeret Jes, Python. Derudover kræver det, at de billeder man har valgt at bruge, har den rigtige sti. Derfor er det vigtigt når du bruger getmediapath( billede.jpg ), at du skriver de præcise navne på billederne, ellers kan den ikke finde det korrekte billede. Det kræver derfor også, at når andre skal køre programmet på deres egen computer, så skal de oprette en setmediapath( billede.jpg ), for at oprette deres egen sti til billedet, samt huske at kalde billedet det korrekte navn. Når det er på plads, er det så muligt at køre programmet, ved at indtaste kodens def i vores command area. 5.2 Brugervejledning til Web- applikation: For at køre web- applikationen, skal man som bruger have installeret både Google app engine launcher og Python 2.7. I Google app engine Launcher skal man så klikke på Add existing application, hvor man derfra henter den mappe som py- fil og yaml- fil er gemt i. Derefter klikker man på Run og Browse og på den måde åbnes der et vindue i browseren med web- applikationen. På hovedsiden har du mulighed for at komme videre ind på sider om en af olierne, ved at klikke på de forskellige knapper, samt se hvor mange anmeldelser der er givet til hver olie. Når du klikker dig videre har du mulighed for at læse en beskrivelse af den valgte olie. Brugeren har yderlige mulighed for at tilføje en anmeldelse af olien, ved at skrive sit navn i første hvide boks, og derefter tilføje anmeldelsen i det andet tekstfelt. Længere nede på siden kan man give olien stjerner fra 1-5 ved at klikke i de tilsvarende check- bokse og derefter 10
12 tilføje sin anmeldelse ved at klikke på Add. Efterfølgende har brugeren mulighed for at læse andre brugeres anmeldelser og se det samlede antal af anmeldelser. Den sidste side man kan komme ind på, er en administrativ side, hvor det kun er de ansatte ved Olives R Us, der skal kunne bruge den. Denne side kommer man hen til ved at skrive /admin oppe i adressefeltet og på denne side skal man kunne tilføje og slette olier, hvor ændringerne så kan ses på hovedsiden. Udover det kan man klikke på et link for at komme tilbage til hovedsiden. Ovenstående er blot en beskrivelse af hvad der burde ske, når man som bruger navigerer rundt i web- applikationen, men når man afprøver den i virkeligheden, er der en lille del der ikke fungerer efter hensigten. Alle muligheder man har som almen bruger, fungerer som de skal, men på den administrative side kører web- applikationen ikke helt efter hensigten. Der kan skrives et navn og en beskrivelse på en ny olie, og der er knapper der skal kunne tilføje og slette olier, men det gør de bare ikke. Knapperne har altså ingen virkning ift. at kunne slette og tilføje nye olier, så en afprøvning viser at web- applikationen ikke kører fuldstændig efter hensigten. 6. Teknisk beskrivelse af programmet I dette afsnit vil vi give en teknisk beskrivelse af programmerne og komme ind på hvilke datastrukturer vi bruger til at skabe forskellige dele af programmet. 6.1 Sammensatte ansigter Finde billeder Som opgavebeskrivelsen lød, skulle man vælge ni billeder af Turing- Award vinderne på hjemmesiden. For at vores færdige billede skulle se bedst mulig ud, prøvede vi at vælge ni billeder, hvor personerne sad med samme vinkel og var zoomet ligemeget ind. For at importere disse valgte billeder har vi brugt denne kode: canvas= makepicture(getmediapath("canvas.jpg")). Denne kode finder stien til det valgte billede getmediapath( voresbillede.jpg ). Denne har vi brugt til vores canvas, samt til vores andre ni billeder, så derfor har vi ti forskellige inputs i vores kode. 11
13 Kopiere pixels fra source til target Den kode vi har taget udgangspunkt i, er som beskrevet ovenstående koden til at lave en collage. Ved at ændre sourcex og sourcey til targetx og targety, sætter vi vores koordinater på vores canvas, og derved hvor ansigtsdelen skal placeres. Derfor skal vi også ændre for targetx in range, til for sourcex in range, og det samme ved targety, som skal ændres til sourcey. Dette har vi gjort, da det er fra vores source, altså vores ni forskellige billeder, at programmet skal kopiere pixels og indsætte det på vores target s koordinater. Det er inde i for- loopet for sourcey, at vi får selve pixel fra vores source, og derefter sætter den samme pixel på vores canvas til den samme farve. Her er der et eksempel med venstre øje - det kommer til at se sådan ud: targetx = 64 #vores canvas x koordinat for sourcex in range(name[1], name[3]): targety = 61 #vores canvas y koordinat for sourcey in range(name[2], name[4]): color = getcolor(getpixel(name[0], sourcex, sourcey)) setcolor(getpixel(canvas, targetx, targety), color) targety = targety + 1 targetx = targetx + 1 Linje 1: Her har vi fundet X koordinaten på det venstre øje på vores canvas. Linje 2: Ved at skrive name[1], name[3], kører loopet fra første x koordinat til andet x koordinat. Linje 3: Her har vi fundet vores Y koordinat på det venstre øje på canvas Linje 4: Name[2], name[4] er vores Y- koordinater hentet fra vores liste som vi har ovenover. Linje 5: Ved at skrive name[0], henter den navnet som er det første element i listen. Her tager programmet også den valgte pixel og kopierer den. Linje 6: Selve kopieringen af pixels sker her, da det sætter det kopierede pixel på vores target. Linje 7 + 8: Se nedenstående forklaring. 12
14 source target Det er her hvor selve flytningen af pixels sker, da det skal gå fra den ene pixel til den næste pixel. Altså hvis vi starter med at kopiere fra koordinat 0,0 og den er gået gennem loopet, rykker vi en plads videre til næste pixel i rækken, derfor skriver vi +1. Den næste pixel vi kopierer har derfor koordinaterne 0,1. Dette skal både gøres ved Y aksen, som vi ser i linje 7 og derefter i X aksen som vi ser i linje 8. Ved at skrive +1, sætter vi den til at kopiere hver enkelt pixel da vi ikke har valgt at skalere billederne. Denne del af koden sætter vi til at køre ni gange, da programmet skal vælge ni forskellige ansigtsdele på de ni forskellige mennesker. Det er også her at vores lister kommer i brug, da vi indsætter dem som variabler, som vi har kaldt name. Ovenover koden har vi nemlig vores lister med koordinaterne til den tilsvarende ansigtsdel. Opbygningen af vores kode bliver derfor således: først har vi vores liste med f.eks. venstre øje, og derefter kommer koden til venstre øje. I denne kode, har vi sat koordinaterne fra det venstre øje til vores target, og derefter skal den vælge frit mellem vores liste, og derved finde den tilfældige source den vil bruge til at skabe det færdige billede. Så det eneste vi ændrer i denne del af koden, er koordinaterne, så de stemmer overens med koordinaterne til de ansigtsdele; venstre øje, højre øje, venstre øjenbryn, højre øjenbryn, venstre øre, højre øre, næse, mund og hår Random choice For at få programmet til automatisk at vælge tilfældige billeder, har vi taget udgangspunkt i print random.choice(nouns), som står beskrevet i grundbogen 3. Den grundlæggende proces i denne funktion, går ud på at strukturen bliver udfyldt med tilfældige valg. Man skal selv ind og definere hvad vi vil have programmet til at vælge tilfældigt imellem. I program 97 i bogen gælder det om at lave en tilfældig sætning bestående af et tilfældigt navneord og et tilfældigt udsagnsord. Spørgsmålet var bare, hvordan vi fik programmet til at vælge tilfældigt mellem 3 Guzdial., M.,J, & Ericson, B. (2012) Introduction to Computing and Programming in Python, Third edition, Pearson, side 288, program 97 13
15 vores billeder og ikke tekst, som er tilfældet i grundbogen. Vi har derfor prøvet at lave en funktion der indeholder en liste med alle ni personer, og det har vi gjort ved at lave en ny liste som vi kalder namelist. Ved at lave sådan en liste bliver de ovenstående lister samlet i én liste. Dette skal vi gøre, da vi efter den samlede liste, skriver name = choice(namelist), og det er denne funktion der gør det muligt for programmet at vælge en af de lister vi har indsat ved hjælp af from random import choice. Disse to delkoder indsætter vi efter hver vores liste med de forskellige ansigtsdele, dvs. at vi indsætter dem ni gange. For overhovedet at gøre det muligt for programmet at vælge tilfældigt mellem vores lister, har vi øverst i vores kode, skrevet from random import choice. Ved at skrive dette øverst, sætter vi programmet til at vælge tilfældigt i den liste som vi har kaldt namelist. Derved kommer den funktion som vi har skrevet ovenstående, name = choice(namelist), i brug, da det er her selve udvælgelsen mellem de forskellige billeder finder sted. På denne måde er det muligt at vælge tilfældigt mellem billeder, som vi ville have den til at gøre. namelist henviser til vores ovenstående liste, hvor vi har defineret de ni personer og deres koordinater Textstring Den sidste del af opgaven består i at få en tekststreng frem, der indeholder navnene på de personer der er blevet brugt til at skabe vores færdige billede. Vi har sat en funktion ind øverst i vores kode, der hedder def who(name). Denne funktion indeholder en liste med vores variabler, og en liste namelist med de fulde navne til hver af de Turing- Award prisvindere. Vi indsætter who(name[5]) efter hver vores liste for vores forskellige ansigtsdele. Denne funktion vælger name[5] i vores lister, dvs. plads nr. 6 i listen, da man altid starter med 0. Det eneste problem ved denne funktion er, at stien til vores canvas også bliver printet til sidst. def who(name): lst = ['barbara', 'edward', 'charles', 'fernando', 'johncocke', 'kristen', 'marvin', 'thompson', 'william'] namelst = ['Barbara Liskov', 'Edward A. Feigenbaum', 'Charles P. Thacker', 'Fernando J. Corbato', 'John Cocke', 'Kristen Nygaard', 'Marvin Minsky', 'Kenneth Lane Thompson', 'William Morton Kahan'] count = -1 for i in lst: same = i == name 14
16 count = count + 1 if same is True: fullname = namelst[count] print fullname Denne funktion bliver også kørt ni gange for at finde navnet på hver person der optræder på det færdige billede. Vi har lavet et loop som kører indtil det finder den rigtige variabel, som den skal finde i den liste vi har kaldt lst = []. Derfor har vi skrevet: if same is True, fordi den skal blive ved med at køre igennem loopet indtil den finder den variabel der stemmer overens med et navn i vores liste. Når den har fundet det navn, som er rigtigt, stopper loopet med at køre, og printer derefter det fullname, som vi har defineret i en anden liste som vi kalder: namelst=[], som indeholder alle ni personers fulde navne. For at slutte koden og for at returnere vores canvas, slutter vi af med at skrive: Show(canvas) Return (canvas) På denne måde får vi programmet til at vise vores færdige billede med hver af de ni elementer som er tilfældigt udvalgt, samt at få printet tekststrengen med navnene ned i vores output. 6.2 Web applikation Oprettelse af en web- applikation For at oprette en webapplikation, er der nogle helt grundlæggende elementer der skal skrives ind. Først har vi importeret webapp2 helt øverst, samt importeret databasen via Google app engine launcher, da vi i vores overvejelser med web- applikationen, ved at vi kommer til at benytte databaser. Derefter har vi defineret alle vores handler- functions, vi har sørget for at de requests der stilles i dem bliver besvaret med et response fra webapp2 og vi har nederst i koden oprettet en WSGIApplication, som skaber selve web- applikationen ved at forbinde URL er med handlers. Disse elementer ser således ud: def mainpage(req): reply=webapp2.response("""<!doctype html> <html lang="en"><body> 15
17 </body></html> """) return reply app = webapp2.wsgiapplication([('/', mainpage)], debug=true) Som tidligere nævnt, arbejder vores py- fil sammen med en yaml- fil, hvilket også er et grundlæggende element for, at vi kan åbne web- applikationen i en browser. Når alt dette er på plads, er det muligt at køre web- applikationen, og vi kan så begynde at besvare problemstillingerne til denne opgave Form action, method get På hovedsiden har vi placeret nogle knapper der fører videre til oliernes specifikke side. Dette kan lade sig gøre fordi man sætter knappen til at udføre en action, videre til en anden URL. Denne form for datastruktur ser således ud: <form action="greekngood" method="get"> <input type="submit" value="greek'n'good" /> </form> Det ses nu hvordan knappen, altså submit, med værdien Greek n Good, har fået en action, nemlig at føre brugeren videre til næste side, med URL en greekngood Databaser Databaser bruger man til at lagre data, som fx når en bruger giver en anmeldelse og nogle stjerner til en specifik olie. Når dataen er lagret, er det muligt at hente informationerne ned på web- applikationen igen. I vores tilfælde skal dette bruges som en måde til at få alle brugernes anmeldelser og antal stjerner ned på de forskellige oliers sider. Måden man bruger databaser på, er ved at oprette en class. Classes definerer de variabler der skal trækkes fra vores handlers og hen i databasen. Nedenfor ses et eksempel på en class: class GreekNGood(db.Model): date = db.datetimeproperty(auto_now_add=true) 16
18 name = db.stringproperty() review = db.stringproperty() stars = db.stringproperty() De variabler der ses i classen, er altså de data som vi samler sammen fra vores handlers. Måden hvorpå disse variabler bliver forbundet med den data brugeren taster ind i web- applikationen, sker i den datastruktur som ses nedenfor: def greekngood(req): name = req.params.get('name') review = req.params.get('review') stars = req.params.get('stars') gg = GreekNGood(name=name,review=review, stars=stars) gg.put() Der sker det, at der sendes et request til et brugerbestemt parameter, nemlig name. name hentes så ved at sige get og vi kan så definere dette til name. Når alle parametre er blevet defineret, sætter vi name fra handleren til at stemme overens med name fra classen. Dette ser man i linjen gg, hvor gg sættes lig med classen, som tager brugernes data som input. Til sidst sørger gg.put for at sende dataen til databasen Querys og For loops Databasen har nu modtaget den data vi har sendt til den, hvilket kan ses i bilag 5. Næste del af opbygningen af web- applikationen er nu at få den lagrede data trukket tilbage på URL en, så brugeren har mulighed for at se andre brugeres anmeldelser. Dette gør man vha. en query, som ses nedenfor. Yderligere kan man se hvordan man trækker dataen ind i en tabel: greeklist = db.gqlquery("select * FROM GreekNGood") reply.write("<tr>") reply.write("date") reply.write("name") 17
19 reply.write("review") reply.write("stars") reply.write("</tr>") for entry in greeklist: reply.write("<tr>") reply.write(entry.date) reply.write(entry.name) reply.write(entry.review) reply.write(entry.stars) reply.write("</tr>") reply.write("""</table> Selve queryen er altså den der henter data fra databasen, hvilket foregår på den måde, at man giver queryen et navn, som i dette tilfælde er greeklist. Det der står i parantesen, betyder at der vælges alle variabler fra classen. Vi har nu hentet de data vi vil have tilbage i URL en og dem placerer vi så i en tabel, der laves som det er vist ovenfor. Det vi vil vise med dette stykke kode er hvordan tabellen hele tiden opdateres, når der tilføjes en ny anmeldelse. Dette sker gennem et for loop, som gør, at det samme sker igen og igen. Vi får altså funktionen til at udføre en kommando for en specifik sekvens, og hver gang vi beder den om det, sker der en gentagelse, som i dette tilfælde gør, at der hentes oplysninger gennem greeklist, altså vores query. 18
20 6.2.5 Modulo Anmeldelserne er nu listet på oliernes URL er, så næste skridt er at få beregnet det samlede antal af anmeldelser. Vi skal igen bruge vores query til at hente oplysningerne ned fra databasen. Først giver vi den et nyt navn og derefter sætter vi queryen til at være 0. Vi bruger igen et for loop til at gentage vores kommando, som er at lægge 1 til det samlede antal anmeldelser hver gang der kommer nye data i databasen. Så hver gang kommandoen bliver kørt gennem loopet, og henter en ny anmeldelse via queryen, lægges der 1 til det samlede antal. Dette ses nedenfor: total1 = db.gqlquery("select * FROM GreekNGood") total1=0 for entry in greeklist: total1 = total1 + 1 reply.write("all reviews: %i" % total1) reply.write For så at få tallet frem skal vi bruge modulo inde i vores reply.write. Modulo bruger vi til at trække en streng ind i URL en som henviser til det regnestykke vi har fået loopet til at lave. Det vil sige at % total1 svarer til resultatet af regnestykket, som så trækkes ind i den tekst vi vil vise i URL en. Grunden til vi har skrevet %i, er fordi i et står for integer, hvilket gør at den del af strengen behandles som et tal i stedet for tekst. Antallet af anmeldelser ligger nu under listen af anmeldelser, så for at trække det tal ud på hovedsiden, som opgaven lyder på, kopieres ovenstående stykke af koden blot ind i hovedsidens handler. Som det fremgår af problemanalysen blev vi dog opmærksomme på, at det ikke er ligegyldigt hvor de forskellige dele placeres i handleren. I vores web- applikation er der selvfølgelig også andre tekniske elementer, men dem vi har valgt at fremhæve her, er de specifikke datastrukturer som gør at vi har kunnet besvare de stillede problemstillinger. 19
21 7. Ideer til forbedring 7.1. Sammensatte billede En af delopgaverne i denne opgave, var at et tilfældigt billede der blev valgt, skulle komme fra en kvindelig Turing- Award vinder. Vores idé til hvordan dette kunne løses, kunne være noget med at lave en if funktion. Denne funktion skulle så sættes til at hvis der vælges en ansigtsdel af Barbara, så det altså er True, så kan resten af billederne køres random, men hvis ikke hun vælges, så det altså er False, så skal man køre programmet igen, indtil if en bliver True. Da vi ikke kunne få det til at lykkedes, valgte vi at ligge fokus at programmet kunne køre fejlfrit. 7.2 Web- applikationen En af delopgaverne i web- applikationen var at lave stjerner, så brugerne kunne bedømme olierne. Disse stjerner skulle vises som billeder og ikke tekst. I vores web- applikation fungerer stjernerne som tekst, da vi ikke kunne få andet til at virke. Vores idé til hvordan delopgaven kunne være løst, ville være noget med at lave stjernerne i en CSS- fil, da den type fil kan bruges til at skabe designet på en web- applikation. Derfor havde vi en idé om at det ville være vejen frem, men da vi ikke føler os sikre på at arbejde med CSS, blev dette kun ved idéen. Udover det skulle der også have været et gennemsnit af hvor mange stjerner hver olie har fået på hovedsiden. Vores idé til at beregne dette er at give vores stjerner en værdi, så ** svarer til tallet 2. Derfra ville man så skulle beregne gennemsnittet i et for loop, så den hele tiden opdaterer gennemsnittet når der gives en ny bedømmelse på oliernes side. Når det regnestykke så er lavet, ville vi trække resultatet ind på forsiden via en query, på samme måde som vi har gjort det med antallet af anmeldelser. Vi har desværre ikke kunne få det til at virke, så det er kun blevet ved idéen. Rent designmæssigt er der rigtig meget der kunne have været lavet langt mere hensigtsmæssigt. Det er fx svært at læse teksten pga. det baggrundsbillede vi har valgt, men da der ikke var nogle problemstillinger ift. designet, prioriterede vi vores tid på selve koden. 20
22 8. Opgavefordeling Fordelingen af denne eksamensopgave er opdelt på følgende måde: XXX (samlet anslag = 15200): Programmet til opgave 2 Punkt 4.1 Problemanalyse Punkt 5.1 Brugervejledning og afprøvning Punkt 6.1 Teknisk beskrivelse af programmet Punkt Ideer til forbedring Punkt Koden til opgave 2 XXX (samlet anslag = 14848): Programmet til opgave 4 Punkt 4.2 Problemanalyse Punkt 5.2 Brugervejledning og afprøvning Punkt 6.2 Teknisk beskrivelse af programmet Punkt Ideer til forbedring Punkt Koden til opgave 2 Fælles (samlet anslag = 9633): Punkt 1 forord og indledning Punkt 2 Baggrund og problemstillinger Punkt 3 Fokuspunkter Punkt 8 - Opgavefordeling Punkt 9 Konklusion Punkt 12 Litteraturliste Den fælles del for denne eksamensopgave må ikke overstige 50%, hvilket vil sige at vi hver især skal bidrage med mindst 25%. Vi har dog valgt, at vi hver især har haft det overordnede ansvar for hvert vores program, så dette er forklaringen på ovenstående opgavefordeling. Dog er begge programmer blevet startet op i fællesskab vha. diskussion om problemstillingerne og senere har vi så videreudviklet programmerne hver for sig. 21
23 9. Konklusion 9.1.Konklusion for sammensatte billeder Efter vi har fået vores program til køre, kan vi konkludere at det næsten kører som det skal. Vi har ved hjælp af vores lister, fået programmet til at vælge tilfældigt mellem alle vores billeder. Billedet der kommer frem indeholder tilfældigt valgte dele af de ni billeder vi har valgt, som ligger oven på det valgte canvas. Et generelt problem ved vores program, er at det færdige billede ikke er perfekt, da det ikke er alle personers øre der er vist, samt det er ikke alles øjenbryn man kan se. Derfor kan det være svært at se hver eneste ansigtsdel på det færdige canvas. En anden faktor for at vores færdige billede ikke bliver perfekt, er at vi ikke har skaleret vores billeder. Opgavebeskrivelsen lød at det færdige billede skulle være i det korrekte format 219px 207px, og derfor har vi valgt at vores canvas skal være et billede inde fra hjemmesiden med Turing- Award vindere, da vi ved at alle de billeder er dette format Tilbagevendende problemer Det vi havde problemer med, var at få en tekststreng frem sammen med billedet, der beskriver hvilke personer der er blevet brugt til hvert billede. Dette kunne nemt gøres, hvis vi havde brugt den første ide vi havde med at lave en funktion for hver person og denne persons ansigtsdeles placering på vores canvas. Dette ville have resulteret i mange funktioner, hvor man under hver funktion ville kunne have skrevet f.eks.: message = barb, og i bunden skrive print message. Dette kan ikke lade sig gøre på vores måde, da vi har sat den til at vælge tilfældigt mellem vores lister. Derfor blev vi nødt til at lave en anden funktion, der opfyldte dette krav. Denne funktion giver os de fulde navne af de tilfældig valgte personer som output, men vi ville gerne have lavet det sådan så der stod præcis hvilken ansigtsdel der var taget fra hvilken person. I opgavebeskrivelsen stod der at mindst et billede der bliver tilfældigt valgt, skal komme fra en kvindelig Turing- Award prisvinder. Vi har valgt vores kvindelige prisvinder til at være Barbara Liskov, og vi har valgt at tage alle ni af hendes ansigtsdele. I og med at vores er tilfældigt valgt mellem en liste, er det ikke sikkert at det er en af Barbara s ansigtsdele der kommer med hver gang, da den sagtens kan vælge flere af de samme dele fra den samme person. Derved har vi ikke opfyldt det krav. 22
24 9.2 Konklusion for Web- applikationen Efter at vores web- applikation er lavet færdig, kan vi konkludere at den stort set fungerer efter hensigten. Vi har fået lavet vores fem handler functions med hver deres URL, som hver især opfylder de fleste krav fra opgaveformuleringen. Dog er der visse krav der ikke er opfyldt, og disse er beskrevet i punktet om idéer til forbedringer. I hver af vores handlers benytter vi forskellige datastrukturer, som bl.a. sørger for at sende data til databaser, disse data kan så igen trækkes ned på URL erne via en query og vha. en tredje type datastruktur giver vi også brugeren mulighed for at se det samlede antal anmeldelser. Vi har i web- applikationen prøvet at skabe en vis logik ift. alle vores variabler, så det er muligt at finde en sammenhæng mellem dem og vi har så vidt muligt ryddet op i vores kode, så vores web- applikation ikke indeholder for meget overflødig kode og den på den måde fremstår overskuelig og velovervejet. Samlet set kører web- applikationen næsten fejlfrit, dog er der et tilbagevendende problem, som beskrives senere Tilbagevendende problemer I web- applikationen er der et problem når man henter informationer ned fra databasen til en liste. Meningen er, at brugeren skal tilføje sit navn, sin anmeldelse og afgive stjerner, som sendes til databasen og hives tilbage i en liste på samme side via en query. Alt dette sker også, men hver gang man klikker sig ind på en specifik olies URL, tilføjes der med det samme en anmeldelse til listen, dog uden information. Vi har en idé om, at grunden til at det sker, er fordi hele siden er sat til at udføre en form action for hele den pågældende URL helt tilbage i klikket fra hovedsiden. Derfor trækker man allerede informationer fra databasen ned i listen når man træder ind på siderne om olierne. Selvom vi har prøvet at ændre i hvilken URL der skal ske en form action på, så får vi stadig anmeldelser i listerne med dataen None for hver variabel. 9.3 Samlet konklusion for opgaven Hvis man tager udgangspunkt i vores fokuspunkter, kan vi nu konkludere at begge vores programmer kører stort set fejlfrit, da der ikke kommer nogle fejlmeddelelser op. Dog har begge koder visse mangler. Vores andet fokuspunkt gik ud på at gøre koderne enkle og overskuelige og dette synes vi, at vi har opfyldt. Der er ikke nogen overflødig kode som 23
25 forstyrrer strukturen, og de er bygget op med kommentarer løbende, så man forstår hvilken hensigt vi har haft med de forskellige elementer. 10. Koden 10.1 Koden for sammensatte billeder from random import choice def who(name): lst = ['barbara', 'edward', 'charles', 'fernando', 'johncocke', 'kristen', 'marvin', 'thompson', 'william'] namelst = ['Barbara Liskov', 'Edward A. Feigenbaum', 'Charles P. Thacker', 'Fernando J. Corbato', 'John Cocke', 'Kristen Nygaard', 'Marvin Minsky', 'Kenneth Lane Thompson', 'William Morton Kahan'] count = -1 for i in lst: same = i == name count = count + 1 if same is True: fullname = namelst[count] print fullname def copyitem(): canvas = makepicture(getmediapath("canvas.jpg")) barb = makepicture(getmediapath("barbara.jpg")) char = makepicture(getmediapath("charles.jpg")) edwa = makepicture(getmediapath("edward.jpg")) fern = makepicture(getmediapath("fernando.jpg")) john = makepicture(getmediapath("john.jpg")) kris = makepicture(getmediapath("kristen.jpg")) marv = makepicture(getmediapath("marvin.jpg")) thom = makepicture(getmediapath("thompson.jpg")) will = makepicture(getmediapath("william.jpg")) #left eye list barbara = [barb,77, 79, 102, 90, "barbara"] charles = [char, 63, 70, 100, 100, "charles"] edward = [edwa, 58, 51, 101, 74, "edward"] fernando = [fern, 75, 70, 102, 88, "fernando"] johncocke = [john, 70, 69, 102, 88, "johncocke"] kristen = [kris, 59, 67, 92, 89, "kristen"] marvin = [marv, 64, 69, 94, 88, "marvin"] thompson = [thom, 59, 62, 90, 84, "thompson"] william = [will, 69, 69, 109, 93, "william"] namelist = [barbara, charles, edward, fernando, johncocke, kristen, marvin, thompson, william] name = choice(namelist) who(name[5]) # name5 henviser til vores liste. name5 har vi sat som en string. 24
26 #Left eye targetx = 64 for sourcex in range(name[1], name[3]): targety = 61 for sourcey in range(name[2], name[4]): color = getcolor(getpixel(name[0], sourcex, sourcey)) setcolor(getpixel(canvas, targetx, targety), color) targety = targety + 1 targetx = targetx + 1 #right eye list fernando = [fern, 126, 70, 151, 88, "fernando"] johncocke = [john, 131, 75, 158, 96, "johncocke"] kristen = [kris, 121, 66, 150, 81, "kristen"] marvin = [marv, 120, 70, 150, 88, "marvin"] thompson = [thom, 117, 63, 148, 85, "thompson"] william = [will, 140, 78, 174, 106, "william"] barbara = [barb, 123, 75, 151, 91, "barbara"] charles = [char, 118, 70, 144, 88, "charles"] edward = [edwa, 132, 51, 163, 72, "edward"] namelist = [fernando, johncocke, kristen, marvin, thompson, william, barbara, charles, edward] name = choice(namelist) who(name[5]) #right eye targetx = 108 for sourcex in range(name[1], name[3]): targety = 63 for sourcey in range(name[2], name [4]): color = getcolor(getpixel(name[0], sourcex, sourcey)) setcolor(getpixel(canvas, targetx, targety), color) targety = targety + 1 targetx = targetx + 1 #left eyebrow list marvin = [marv, 61, 69, 93, 75, "marvin"] thompson = [thom, 67, 54, 88, 69, "thompson"] william = [will, 71, 59, 106, 76, "william"] barbara = [barb, 69, 70, 103, 80, "barbara"] charles = [char, 65, 64, 96, 75, "charles"] edward = [edwa, 56, 40, 100, 56, "edward"] fernando = [fern, 68, 62, 101, 74, "fernando"] johncocke = [john, 64, 62, 103, 79, "johncocke"] kristen = [kris, 51, 60, 89, 74, "kristen"] namelist = [marvin, thompson, william, barbara, charles, edward, fernando, johncocke, kristen] name = choice(namelist) who(name[5]) #left eyebrow targetx = 58 for sourcex in range(name[1], name[3]): 25
27 targety = 55 for sourcey in range(name[2], name [4]): color = getcolor(getpixel(name[0], sourcex, sourcey)) setcolor(getpixel(canvas, targetx, targety), color) targety = targety + 1 targetx = targetx + 1 #right eyebrow list barbara = [barb, 120, 67, 151, 82, "barbara"] charles = [char, 114, 60, 149, 70, "charles"] edward = [edwa, 127, 33, 166, 52, "edward"] fernando = [fern, 121, 59, 155, 71, "fernando"] johncocke = [john, 128, 64, 161, 83, "johncocke"] kristen = [kris, 115, 54, 152, 64, "kristen"] marvin = [marv, 117, 56, 156, 72, "marvin"] thompson = [thom, 114, 55, 159, 67, "thompson"] william = [will, 140, 72, 177, 88, "william"] namelist = [barbara, charles, edward, fernando, johncocke, kristen, marvin, thompson, william] name = choice(namelist) who(name[5]) #right eyebrow targetx = 104 for sourcex in range(name[1], name[3]): targety = 53 for sourcey in range(name[2], name [4]): color = getcolor(getpixel(name[0], sourcex, sourcey)) setcolor(getpixel(canvas, targetx, targety), color) targety = targety + 1 targetx = targetx + 1 #left ear list fernando = [fern, 31, 62, 60, 116, "fernando"] johncocke= [john, 19, 59, 51, 116, "johncocke"] kristen = [kris, 22, 80, 50, 135, "kristen"] marvin = [marv, 32, 70, 58, 120, "marvin"] thompson = [thom, 23, 84, 46, 116, "thompson"] william = [will, 15, 83, 41, 135, "william"] barbara = [barb, 46, 80, 67, 118, "barbara"] charles = [char, 32, 77, 57, 130, "charles"] edward = [edwa, 24, 56, 54, 115, "edward"] namelist = [fernando, johncocke, kristen, marvin, thompson, william, barbara, charles, edward] name = choice(namelist) who(name[5]) #left ear targetx = 42 for sourcex in range(name[1], name[3]): targety = 62 for sourcey in range(name[2], name [4]): color = getcolor(getpixel(name[0], sourcex, sourcey)) 26
28 setcolor(getpixel(canvas, targetx, targety), color) targety = targety + 1 targetx = targetx + 1 #Right ear list marvin = [marv, 172, 66, 195, 119, "marvin"] thompson = [thom, 164, 78, 182, 119, "thompson"] edward = [edwa, 181, 52, 204, 107, "edward"] william = [will, 188, 96, 197, 144, "william"] barbara = [barb, 164, 76, 175, 113, "barbara"] charles = [char, 161, 70, 180, 124, "charles"] fernando = [fern, 167, 61, 184, 114, "fernando"] johncocke = [john, 170, 70, 186, 122, "johncocke"] kristen = [kris, 171, 58, 198, 121, "kristen"] namelist = [marvin, thompson, edward, william, barbara, charles, fernando, johncocke, kristen] name = choice(namelist) who(name[5]) #right ear targetx = 145 for sourcex in range(name[1], name[3]): targety = 48 for sourcey in range(name[2], name [4]): color = getcolor(getpixel(name[0], sourcex, sourcey)) setcolor(getpixel(canvas, targetx, targety), color) targety = targety + 1 targetx = targetx + 1 #nose list fernando = [fern, 101, 84, 132, 118, "fernando"] johncocke = [john, 99, 91, 136, 130, "johncocke"] kristen = [kris, 90, 86, 128, 122, "kristen"] marvin = [marv, 90, 85, 126, 122, "marvin"] thompson = [thom, 88, 77, 121, 114, "thompson"] william = [will, 100, 92, 141, 140, "william"] barbara = [barb, 95, 88, 129, 123, "barbara"] charles = [char, 94, 86, 126, 115, "charles"] edward = [edwa, 96, 70, 139, 108, "edward"] namelist = [fernando, johncocke, kristen, marvin, thompson, william, barbara, charles, edward] name = choice(namelist) who(name[5]) #Nose targetx = 84 for sourcex in range(name[1], name[3]): targety = 74 for sourcey in range(name[2], name [4]): color = getcolor(getpixel(name[0], sourcex, sourcey)) setcolor(getpixel(canvas, targetx, targety), color) targety = targety + 1 targetx = targetx
29 #Mouth list marvin = [marv, 79, 130, 135, 148, "marvin"] thompson = [thom, 74, 118, 127, 140, "thompson"] william = [will, 83, 136, 143, 167, "william"] barbara = [barb, 90, 129, 138, 147, "barbara"] charles = [char, 87, 124, 138, 142, "charles"] edward = [edwa, 86, 123, 149, 142, "edward"] fernando = [fern, 88, 127, 137, 145, "fernando"] johncocke = [john, 82, 128, 134, 146, "johncocke"] kristen = [kris, 85, 135, 132, 150, "kristen"] namelist = [marvin, thompson, william, barbara, charles, edward, fernando, johncocke, kristen] name = choice(namelist) who(name[5]) #mouth targetx = 79 for sourcex in range(name[1], name[3]): targety = 113 for sourcey in range(name[2], name [4]): color = getcolor(getpixel(name[0], sourcex, sourcey)) setcolor(getpixel(canvas, targetx, targety), color) targety = targety + 1 targetx = targetx + 1 #hair list barbara = [barb, 0, 0, 218, 34, "barbara"] charles = [char, 0, 0, 218, 34, "charles"] edward = [edwa, 0, 0, 218, 34, "edward"] fernando = [fern, 0, 0, 218, 34, "fernando"] johncocke = [john, 0, 0, 218, 34, "johncocke"] kristen = [kris, 0, 0, 218, 34, "kristen"] marvin = [marv, 0, 0, 218, 34, "marvin"] thompson = [thom, 0, 0, 218, 34, "thompson"] william = [will, 0, 0, 218, 34, "william"] namelist = [barbara, charles, edward, fernando, johncocke, kristen, marvin, thompson, william] name = choice(namelist) who(name[5]) #hair targetx = 1 for sourcex in range(name[1], name[3]): targety = 1 for sourcey in range(name[2], name [4]): color = getcolor(getpixel(name[0], sourcex, sourcey)) setcolor(getpixel(canvas, targetx, targety), color) targety = targety + 1 targetx = targetx + 1 show(canvas) return canvas 28
30 10.2 Koden for Web- applikation PY- filen import webapp2 from google.appengine.ext import db class GreekNGood(db.Model): date = db.datetimeproperty(auto_now_add=true) name = db.stringproperty() review = db.stringproperty() stars = db.stringproperty() class SpicyNHot(db.Model): date = db.datetimeproperty(auto_now_add=true) name = db.stringproperty() review = db.stringproperty() stars = db.stringproperty() class VirginNGarlic(db.Model): date = db.datetimeproperty(auto_now_add=true) name = db.stringproperty() review = db.stringproperty() stars = db.stringproperty() class NewOil(db.Model): name = db.stringproperty() description = db.stringproperty() def mainpage(req): greeklist = db.gqlquery("select * FROM GreekNGood") spicylist = db.gqlquery("select * FROM SpicyNHot") virginlist = db.gqlquery("select * FROM VirginNGarlic") total1=0 for entry in greeklist: total1 = total1 + 1 total2=0 for entry in spicylist: total2 = total2 + 1 total3=0 for entry in virginlist: total3 = total3 + 1 reply=webapp2.response("""<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>olives'r'us</title> </head> <body leftmargin="200"> <table background="
SKRIFTLIGE HJEMMEOPGAVER KOMMUNIKATION OG IT
SKRIFTLIGE HJEMMEOPGAVER KOMMUNIKATION OG IT Afleveringsdato Torsdag d 10/1 2013 Eksamen Grundlæggende datalogi, vinter 2012/2013 Fagelementkode 47810002-01 Eksaminandens fulde navn XXX KU- mail XXX Eksaminator
Læs mereSKRIFTLIGE HJEMMEOPGAVER KOMMUNIKATION OG IT
SKRIFTLIGE HJEMMEOPGAVER KOMMUNIKATION OG IT Afleveringsdato Torsdag d 10/1 2013 Eksamen Grundlæggende datalogi, vinter 2012/2013 Fagelementkode 47810002-01 Eksaminandens fulde navn KU- mail tcv634@alumni.ku.dk
Læs mereI denne manual kan du finde en hurtig introduktion til hvordan du:
VORES NORDSJÆLLAND HURTIGT I GANG MANUAL 01: Bruger HVAD INDEHOLDER DENNE MANUAL? I denne manual kan du finde en hurtig introduktion til hvordan du: 1. Finder Vores Nordsjælland hjemmesiden 2. Opretter
Læs mereVejledning til opbygning af hjemmesider
Side 1 af 9 Vejledning til opbygning af hjemmesider Hvis du er inde på din klubs hjemmeside, fx på forsiden, kan du nu gå i gang med at redigere. For at få redigeringsværktøjet frem, skal du klikke på
Læs mereVejledning KPK Online Prøverum
Vejledning KPK Online Prøverum INDHOLD Introduktion side 2 Funktionsliste side 2 Få adgang til systemet side 3 Opload dine billeder side 4 Sådan bruges systemet side 5 Gem dine eksempler side 7 Side 1/7
Læs mereMANUAL. Siteloom CMS
MANUAL Siteloom CMS www.hjerteforeningen.dk/cms Brugernavn: Password: 3. september, 2012 BASIS FUNKTIONER 1. Kalender... 4 1.a. Opret... 5 1.b. Rediger eller slet... 8 2. Sider... 10 2.a Opret side...
Læs mereLav din egen forside i webtrees
Lav din egen forside i webtrees Du behøver ikke at kunne kode eller gøre noget advanceret for at designe din helt egen forside i webtrees. Alt du skal gøre er bare at gøre brug af den indbygget editor.
Læs mereGem dine dokumenter i BON s Content Management System (CMS)
24. august 2007 Gem dine dokumenter i BON s Content Management System (CMS) INDHOLDSFORTEGNELSE 1. Indledning... 2 2. Se indholdet i dit Content Management System... 3 3. Tilgå dokumenterne i My Content
Læs mereBRUGER KURSUS RAMBØLL HJEMMESIDE
Til Forsyningsvirksomheder i Danmark Dokumenttype Brugervejledning Rambøll Hjemmeside Full Responsive Dato Oktober 2017 BRUGER KURSUS RAMBØLL HJEMMESIDE BRUGER KURSUS RAMBØLL HJEMMESIDE Revision 01 Dato
Læs mereKlasse 1.4 Michael Jokil 03-05-2010
HTX I ROSKILDE Afsluttende opgave Kommunikation og IT Klasse 1.4 Michael Jokil 03-05-2010 Indholdsfortegnelse Indledning... 3 Formål... 3 Planlægning... 4 Kommunikationsplan... 4 Kanylemodellen... 4 Teknisk
Læs mereLav en hjemme side der kan sælge fly billetter til en stor i Europa.
EKSAMENS OPGAVE Lav en hjemme side der kan sælge fly billetter til en stor i Europa. Det første jeg startede ud med var at brainstorme hvad det var jeg skulle bruge i min side da jeg nu ved hvad den skal
Læs mereDokumentering af umbraco artikeleksport:
Dokumentering af umbraco artikeleksport: Lav en artikel side 2-3. Installationsguide side 3-5. Opsættelse af databasen og web.config side 5-8. Umbraco: templates side 8. Umbraco: borger.dk tab side 8.
Læs mereVejledning PROPHIX 11. Driftsbudgettering ved åbning af templates (Kun til Avanceret-brugere)
PROPHIX 11 Systemansvarlige Michael Siglev Økonomiafdelingen 9940 3959 msi@adm.aau.dk Daniel Nygaard Ricken Økonomiafdelingen 9940 9785 dnr@adm.aau.dk Vejledning (Kun til Avanceret-brugere) Opdateret:
Læs mereOvervågningskamera. ~Af Svend, Valdemar og Frederik~
Lavet af Svend, Valdemar og Frederik 2.3 HTX - Roskilde Overvågningskamera ~Af Svend, Valdemar og Frederik~ I dette forløb har vi arbejdet med overvågningskameraer. Det handlede om at lære, hvordan et
Læs mereAndreas Lauge V. Hansen klasse 3.3t Roskilde HTX
IT -Eksamen Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX [Vælg en dato] Indhold Indledning... 2 Teori... 3 Hvorfor dette design... 4 Produktet... 4 Test og afprøvning... 9 Konklusion... 10 Indledning
Læs mereMANUAL. Siteloom CMS
MANUAL Siteloom CMS www.hjerteforeningen.dk/cms Brugernavn: Password: 3. oktober, 2013 BASIS FUNKTIONER 1. Kalender... 4 1.a. Opret... 5 1.b. Rediger eller slet... 9 2. Sider...12 2.a. Opret side...13
Læs mereSådan opretter du en elektronisk aflevering
Sådan arbejder du med opgaver i Gradebook/karakterbog Denne vejledning indeholder en detaljeret beskrivelse af hvordan du bruger gradebook/karakterbogen når du vil arbejde med opgaver og give karakterer
Læs mereMANUAL. Siteloom CMS
MANUAL Siteloom CMS www.hjerteforeningen.dk/cms Brugernavn: Password: 13. marts, 2014 BASIS FUNKTIONER 1. Kalender... 4 1.a. Opret... 5 1.b. Rediger eller slet... 9 2. Sider...12 2.a. Opret side...13 2.b.
Læs merePHP Crash course. Databaser
PHP Crash course Databaser PHP Intro PHP er et server scripting sprog der kan bruges til at lave aktivt indhold på hjemme sider. Der er to betingelser som skal opfyldes for at serveren fortolker PHP koden.
Læs mereVisualiseringsprogram
Visualiseringsprogram Programmering C - eksamensopgave Rami Kaddoura og Martin Schmidt Klasse: 3.4 Vejleder: Karl Bjarnason Roskilde Tekniske Gymnasium Udleveringsdato: 02-03-2012 Afleveringsdato: 11-05-12
Læs mereJSP, Tomcat. Tutorial lavet af Jákup W. Hansen TSU semester 10.october 2007
JSP, Tomcat Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 10.october 2007 Hvad er JSP(Java Server Pages): Det er en teknik som er bygget ovenover Servlets teknikken, men fidusen er at det skal
Læs mereNaja Schlüter Roskilde Tekniske Gymnasium 26/ Interessentanalyse
Interessentanalyse Jeg fik til opgave at skulle lave en ny studieweb som er min egen personlige side. Min studieweb skal bruges til lidt information og så vil jeg løbende igennem de to år jeg har igen
Læs mereManual til WordPress CMS
Manual til WordPress CMS 1. Log ind på din Wordpress-side For at arbejde på din hjemmeside skal du først logge ind på administrationsdelen. Muligvis har du et direkte link på siden. Ellers er adressen
Læs mereVejledning til Photofiltre nr.189 Side 1 Sætte forskellige billeder sammen til collage
Side 1 Her i denne vejledning er brugt i alt 6 billeder. De er tilpasset i fotoprogrammet så der er 3 stk. på 300 x 300 pixels Og 3 stk. på 700 x 300 pixels Du kan downloade de 6 foto der er brugt som
Læs mereWeb sider. Introduktion: Har du nogensinde spekuleret over, hvordan det verdesomspændende internet virker og hvordan man snakker med det?
Introduktion: Har du nogensinde spekuleret over, hvordan det verdesomspændende internet virker og hvordan man snakker med det? I dag skal du lære at lave hjemmesider, så du også kan bidrage til at opbygge
Læs mereIndsæt og opret et billede på én gang
Indsæt og opret et billede på én gang Du kan nu oprette og indsætte billeder på forside og tekst-sider og felter i én arbejdsgang altså uden at først oprette dem i Mediearkivet. Billeder kan indsættes
Læs mereIndholdsfortegnelse Opret engelsk version af hjemmesiden... 2
Indholdsfortegnelse Opret engelsk version af hjemmesiden... 2 Indledning:... 2 Metode 1 en samling af sider, med kun en engelsk version:... 3 Metode 2 Eksisterende sider med både en dansk og en engelsk
Læs mereHTML5 fortsat: Underside, links og tekstelementer på din hjemmeside
Webdesign og webkommunikation, formiddagshold (hold 1), IT Universitetet, forår 2012. Øvelse 2, individuel øvelse HTML5 fortsat: Underside, links og tekstelementer på din hjemmeside 1. Lidt om hvad du
Læs mereDET NYE ARKIVALIERONLINE
Hurtige tips & tricks til DET NYE ARKIVALIERONLINE - især om folketællinger Hvorfor nyt Arkivalieronline (AO)? Vi har været nødt til at sætte den nye arkivalieronline i drift nu. Grunden er, at systemerne
Læs mereVejledning for LOF s afdelingshjemmeside - redigeret i Umbraco
Vejledning for LOF s afdelingshjemmeside - redigeret i Umbraco Adresse: http://dinafdeling.lof.dk/ Rediger hjemmeside i Umbraco: http://dinafdeling.lof.dk/umbraco/ HUSK ingen www i adressen, skriv blot
Læs merebedreweb.dk - Bolette Obbekær 2012 SÅDAN LÆGGER DU WORDPRESS PÅ DIT WEBHOTEL
SÅDAN LÆGGER DU WORDPRESS PÅ DIT WEBHOTEL TRIN 1: WORDPRESS MAPPEN WordPress er et gratis program, der bruges til at lave hjemmesider og blogs. Du skal downloade WordPress og bagefter lægge det på dit
Læs merePHP Snippets. De små korte. Skrevet af Daniel Pedersen
PHP Snippets De små korte Skrevet af Daniel Pedersen Indhold PHP Snippets De små korte er en samling af små og praktiske kode eksempler med kort forklaring, som med formål at kunne benyttes til opsalgsværk
Læs mereTlf. +45 7027 1699 Fax + 45 7027 1899
Firmaordninger I firmaoversigten kan du holde styr på dit kundekartotek samt disses bookinger. Der kan desuden oprettes andre firmaer end dit eget. Herved kan der udbydes særlige ydelser på med egne arbejdstider.
Læs merefå en ny og bedre hjemmeside på få minutter Quick guide Del denne quick guide med alle som har glæde af en ny og bedre hjemmeside
få en ny og bedre hjemmeside på få minutter Quick guide Del denne quick guide med alle som har glæde af en ny og bedre hjemmeside 1 Alle har ret og råd til en professionel hjemmeside på få minutter GoMinisite
Læs mereIndledning. På de følgende sider vises, primært i tegneserieform, lidt om mulighederne i PC-AXIS for Windows.
Indledning PC-AXIS for Windows er et talbehandlingsprogram, der kan håndtere store mængder statistisk materiale. PC-AXIS giver mulighed for at arbejde videre med det statistiske materiale i egne programmer
Læs mereTegneserien - Kom godt i gang. Mikro Værkstedet A/S
Tegneserien - Kom godt i gang Mikro Værkstedet A/S Tegneserien - Kom godt i gang Mikro Værkstedet A/S Revision 1.14, 15. maj 2007 Indholdsfortegnelse 1. Forord... 1 2. Kom godt i gang... 3 2.1. Opstart
Læs mereLæringsprogram. Christian Hjortshøj, Bjarke Sørensen og Asger Hansen Vejleder: Karl G Bjarnason Fag: Programmering Klasse 3.4
Læringsprogram Christian Hjortshøj, Bjarke Sørensen og Asger Hansen Vejleder: Karl G Bjarnason Fag: Programmering Klasse 3.4 R o s k i l d e T e k n i s k e G y m n a s i u m Indholdsfortegnelse FORMÅL...
Læs mereVejledning hvidbjergvinduet-designer.dk
Vejledning hvidbjergvinduet-designer.dk INDHOLD Introduktion side 2 Funktionsliste side 3 Få adgang til systemet side 5 Opload dine billeder side 6 Sådan bruges systemet side 9 Gem dine eksempler side
Læs mereHold kontakten med dit netværk!
Hold kontakten med dit netværk! - Outlook er dit netværksprogram Outlook er mere end blot et mailprogram Du kan bruge Outlook til meget mere end blot at sende og modtage mails med. Eksempelvis, så er Outlook
Læs mereKom godt i gang med I-bogen
Kom godt i gang med I-bogen At åbne bogen Det allerførste, du skal gøre, for at kunne arbejde med i-bogen, er at aktivere den. Det gøres ved at oprette en konto på systime.dk og derefter aktivere bogen
Læs mereRedaktørvejledning for www.bredstrup-pjedsted.dk Skriv en artikel
Arbejdsgang - Skriv artiklens tekst - Gør billeder klar - Log-in på hjemmesiden - Opret ny artikel - Vælg kategori - Skriv overskrift - Indsæt tekst - Tilføj billeder - Gennemgå artiklens indstillinger
Læs mereKapitel 4 Løkker i C#
Kapitel 4 Løkker i C# Løkker en vigtig del af alle programmeringssprog, og C# er ikke andeles. En løkke er en måde at udføre en del af koden gentagne gange. Ideen er at du fortsætter med at udføre en opgave
Læs mereSider, indlæg og projekter
Sider, indlæg og projekter I Divi-temaet er der tre forskellige måder at lægge artikler op på sitet; Sider, indlæg og projekter. På Villybruun.dk bruges Sider til alle artikler. Man kan oprette eller redigere
Læs mereBrugervejledning til FOKUSpartnere
Indholdsfortegnelse LOGIN 3 GENERELT 3 BRUGERVEJLEDNING 4 VIRKSOMHEDSPROFIL 4 1) Virksomhedsnavn 6 2) Beskrivelse af virksomheden 6 3) Generel information 6 4) Yderligere information 6 5) Kontaktpersoner
Læs mereVejledning til Socialstyrelsens nye supportsystem
Vejledning til Socialstyrelsens nye supportsystem Indhold Aktivering af bruger... 2 Sådan logger du på Supportsystemet... 3 Sådan opretter du en sag i supportsystemet... 4 Oversigt over igangværende samt
Læs mereVejledning Huslejebudgettering
PROPHIX 11 Systemansvarlige Daniel Nygaard Ricken Økonomiafdelingen 9940 9785 dnr@adm.aau.dk Michael Siglev Økonomiafdelingen 9940 3959 msi@adm.aau.dk Vejledning Opdateret: September 2016 Version: 1 1.
Læs mereUpload af billeder til hjemmesiden m.m.
Upload af billeder til hjemmesiden m.m. Fremgangsmåde VVS-inst.dk Upload af billeder m.m., Side 1 Så går vi i gang Åben Firefox browseren Gå ind på denne adresse, for at komme til hjemmeside programmet.
Læs mereQbrick s krav til video filtyper
Indhold Qbrick s krav til video filtyper... 1 Krav til ordningen/området... 1 Qbrick s krav til video leverandør... 1 Video og billede størrelser i WCM:... 1 Upload en video... 2 Trin 1: Mediefiler...
Læs mereSådan indlægges nyheder på DSqF s hjemmeside trin for trin
Sådan indlægges nyheder på DSqF s hjemmeside trin for trin Systemkrav For at kunne bruge Composite kræves: Windows 95 eller nyere (bemærk - kun Windows kan bruges) Browseren Internet Explorer 6.0 eller
Læs mereJysk Online Medie ApS - Vestergade 32, 8600 Silkeborg - Tlf.:
Brugervejledning til hjemmeside Kristian Kalajdzic Denne vejledning har til formål at hjælpe dig til at tilgå, vedligeholde og benytte din hjemmeside. Vejledningen henvender sig til hjemmesider bygget
Læs mereFable Kom godt i gang
Fable Kom godt i gang Opdateret: 26-03-2018 Indholdsfortegnelse 1. Først skal du installere programmet på din computer 3 2. Når programmet er installeret er du klar til at pakke robotten ud 4 3. Nu er
Læs mereSIDEN PÅ WORDPRESS.COM
WordPress WordPress er et fantastisk program til blog og til hjemmesider, hvor du gerne vil kunne rette via din browser. WordPress er meget udbredt og det er derfor nemt at finde fora, templates og hjælp
Læs mereIndledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.
Indledning...2 Variabler...13 Eksempel: 1...13 Eksempel 2:...13 Eksempel 3:...15 Eksempel 4:...16 Metoder...17 Metode (intet ind og intet ud)...17 Metode (tekst ind)...18 Metode (tekst ind og tekst ud)...19
Læs mereBrugermanual PoP3 og Outlook Office 2003 Webmail www.321mail.dk. Udarbejdet af IT-afdelingen 2005
Brugermanual PoP3 og Outlook Office 2003 Webmail www.321mail.dk Udarbejdet af IT-afdelingen 2005 Indholdsfortegnelse 1. INDLEDNING... 4 2. OUTLOOK 2003... 4 3. BRUGERVEJLEDNING I BRUGEN AF WEB MAIL...
Læs mereQuick guide Dynamicweb 9. Kom godt i gang med brugen af redigeringsværktøjet bag vores hjemmesideløsning CMS-systemet Dynamicweb
Quick guide Dynamicweb 9 Kom godt i gang med brugen af redigeringsværktøjet bag vores hjemmesideløsning CMS-systemet Dynamicweb Indholdsfortegnelse Sådan logger du på... 3 Opbygning... 4 Beskrivelse af
Læs mereVejledning: AMUUDBUD.DK
Vejledning: AMUUDBUD.DK Henvendt til uddannelsesinstitutioner Websiden amuudbud.dk bruges af uddannelsesinstitutioner til at ansøge om godkendelse til at udbyde AMU. Du skal have modtaget en e-mail med
Læs mereDANSK SKOLEDATA APS. Tlf. 86 44 80 99 E-mail DSD@skoledata.dk DSA-Ventelisten
Indholdsfortegnelse Overordnet beskrivelse af programmets funktioner... 2 Log på... 2 Manuel oprettelse af elev.... 3 Optagelse af elever... 3 1 Gruppering og sortering af elever... 3 2 Udvælg aspiranter...
Læs mereBrugervejledning til www.sundhedspaedagogik.net
Brugervejledning til www.sundhedspaedagogik.net Af Inger Hindhede Kjær (28.02.2013) Indholdsfortegnelse 1 Introduktion til platformen... 2 2 Login processen... 3 2.1 Login på siden... 3 2.2 Sådan logger
Læs mereE-MAIL WINDOWS LIVE MAIL
E-MAIL WINDOWS LIVE MAIL Erik Thorsager, Esbjerg. 3. udgave: Live Mail Side 1 Windows Live Mail Hvordan skriver og sender jeg en e-mail? Det engelske ord mail betyder post. E står for elektronisk. E-mail
Læs mereDu kan først gemme artiklen, når du har udfyldt de obligatoriske felter, som er markeret med *.
Opret en Artikel Multisite + kk.dk: Artikel Version: 1 Artiklen er en primær indholdstype, som bruges til indhold med lang holdbarhed. Altså indhold som ikke skal skiftes ud særligt ofte. Artiklen bruges
Læs mereDokumentation af programmering i Python 2.75
Dokumentation af programmering i Python 2.75 Af: Alexander Bergendorff Jeg vil i dette dokument, dokumentere det arbejde jeg har lavet i løbet opstarts forløbet i Programmering C. Jeg vil forsøge, så vidt
Læs mereVi anbefaler, at du lader boksen med træffetider blive liggende på din afdelingsforside. Hvad der ellers skal være af indhold er op til jer.
1 Tips! På din forside har du mange muligheder for at tilføje forskellige komponenter, så du kan tilpasse siden til din afdeling eller organisations egne behov. Det er dog ikke alle komponenter, der kan
Læs mereManual i frontend-redigering af kredssider og brug af kalender
Manual i frontend-redigering af kredssider og brug af kalender Frontend redigering af kredssider og brug af kalender Logge ind og lave simpel redigering... Side 2-3 Opret ny side... Side 4 Læg billede
Læs mereManual til Wordpress. 1. Log ind på din Wordpress-side. Indhold:
Manual til Wordpress Sådan opdaterer du din hjemmeside i Wordpress: Dette er en manual til de mest grundlæggende ting, så du selv kan redigere indholdet eller tilføje nyt på din hjemmeside. Guiden er skrevet
Læs mereWISEflow Guide til deltagere
WISEflow Guide til deltagere Version 2.8.0 1 Indhold Deltager: Sådan kommer du i gang... 3 Opsætning af profil... 3 Flow-oversigt... 6 Flow-typer... 7 Flowets tilstand... 7 Hvordan afleverer jeg min besvarelse?...
Læs mereIT vejledning i MUS for medarbejdere
IT vejledning i MUS for medarbejdere Indhold 1 Indledning... 2 2 MUS processen... 2 3 AUHRA pålogning og startside... 2 4 Medarbejder modtager invitation til MUS... 5 5 Medarbejderens forberedelse til
Læs mereE-MAIL MICROSOFT OUTLOOK 2010
E-MAIL MICROSOFT OUTLOOK 2010 Erik Thorsager, Esbjerg. 3. udgave: Outlook Side 1 Microsoft Outlook 2010 Hvordan skriver og sender jeg en e-mail? Det engelske ord mail betyder post. E står for elektronisk.
Læs mereIndholdsfortegnelse. EasyIQ IDM 5.4 Brugermanual
Indholdsfortegnelse Indledning... 2 Forsiden... 2 Dine genveje... 3 Nyheder... 3 EasyIQ og EasyIQ Quick Funktioner... 3 Administration... 8 Licens... 8 Nyheder... 9 Eksterne links... 11 Log... 12 Password...
Læs mereManual til at redigere på stafetforlivet.dk for holddeltagere
Manual til at redigere på stafetforlivet.dk for holddeltagere Indhold Sådan tilmelder du dig et hold... 2 Sådan logger du ind på hjemmesiden... 4 Har du glemt dit kodeord?... 5 Sådan ser du oplysninger
Læs mereBrugervejledning til Djurspakken
Brugervejledning til Djurspakken Indtast www.djurspakken.dk i din WEB browser Login ved at klikke på login i øverst højre hjørne Indtast det tilsendte brugernavn og password husk at vælge domæne djurspakken.dk
Læs mereDenne vejledning tager dig igennem forskellige aspekter ved at lave et CV i Pure. Klik på teksten neden for for at hoppe direkte til et afsnit.
Akademisk CV i Pure Denne vejledning tager dig igennem forskellige aspekter ved at lave et CV i Pure. Klik på teksten neden for for at hoppe direkte til et afsnit. Hvad bruges CV er i Pure til? Find CV-funktionen,
Læs mereKom godt i gang med Fable-robotten
Kom godt i gang med Fable-robotten 1. Først skal du installere programmet på din computer. Gå ind på shaperobotics.com og under support vælger du download: Her vælger du, under PC App om du kører Windows
Læs mereE-MAIL G-MAIL (GOOGLE)
E-MAIL G-MAIL (GOOGLE) Erik Thorsager, Esbjerg. 3. udgave: G-mail Side 1 G-mail E-mail: Det engelske ord mail betyder post. E står for elektronisk. E-mail betyder altså elektronisk post. Elektronisk post
Læs mereMultisite + kk.dk: Nyhed Version: 1
Opret en Nyhed Multisite + kk.dk: Nyhed Version: 1 Nyhed er en primær indholdstype, som bruges til indhold, der er aktuelt i en tidsbegrænset periode, og har nyhedsværdi som fx pressemeddelelser. Det er
Læs mereOktober Dokumentpakker
Oktober 2017 Dokumentpakker Dokumentpakkerne er et værktøj til at udskrive dynamiske breve, som har en standardtekst i brevet, og hvor der automatisk sættes blandt andet patientens navn, adresse og aftaletid
Læs merePBX Online Brugervejledning www.pbxonline.dk
PBX Online Brugervejledning www.pbxonline.dk Indledning PBX Online er dit personlige omstillingsanlæg som ikke kræver noget fysisk udstyr installeret i dit firma. Du styrer det hele via din web browser.
Læs mereLog ind. Opret fortælling. Skriv tekst. Upload billeder. Indsæt billeder. Indsæt links. Indsæt citat. Indsæt grå boks
Indhold Log ind Opret fortælling Skriv tekst Upload billeder Indsæt billeder Indsæt links Indsæt citat Indsæt grå boks Indsæt youtube video Indsæt google map via iframe Opret og indsæt galleri Opret og
Læs mereGuide til Umbraco CMS
web Guide til Umbraco CMS Indhold Indledning 3 Kompatible browsere 3 Log ind i Umbraco 4 Content-delen 5 Indholdstræet 5 Tilføjelse af en side/sektion 7 Sortering af indhold 12 Galleri 14 Mediebibliotek
Læs mereRationel VinduesDesigner TM Brugervejledning
Rationel VinduesDesigner TM Brugervejledning indhold: introduktion Side 2 Funktionsliste Side 3 Få adgang til systemet Side 4 opload dine billeder Side 5 Sådan bruges systemet Side 6 Gem dine eksempler
Læs mereMichael Jokil 11-05-2012
HTX, RTG Det skrå kast Informationsteknologi B Michael Jokil 11-05-2012 Indholdsfortegnelse Indledning... 3 Teori... 3 Kravspecifikationer... 4 Design... 4 Funktionalitet... 4 Brugerflade... 4 Implementering...
Læs mereRapport. Udarbejdet af: Mayianne Nøks Pedersen. Skole login: knmape68. E-mail: mypedersen@gmail.com
Rapport Udarbejdet af: Mayianne Nøks Pedersen Skole login: knmape68 E-mail: mypedersen@gmail.com URL til brugerundersøgelsen: http://web328.webkn.dk/hjemmeside/image/laering/sem2brugerundersogelse/brugerundersogelse/
Læs mereDu kan først gemme fanebladene, når du har udfyldt de obligatoriske felter, som er markeret med *.
Beskrivelse Faneblade er en sekundær indholdstype, der bruges til at oprette vejledninger til brugerne. Vejledningen er opbygges ved en række faneblade, som brugeren efter eget ønske kan klikke sig ind
Læs mereManual til Dynamicweb Februar 2010
Manual til Dynamicweb Februar 2010 Login... 2 Skabeloner og formater... 3 Filarkivet... 4 Lav en PDF... 5 Opret en ny side... 7 Navngiv siden... 9 Aktiver siden... 9 Sorter sider... 9 Flyt siden... 11
Læs mereVELKOMMEN 3. KOM GODT I GANG 4 Log ind 5 Kontrolpanel 6 Tilpas profil 7 Tilknyt hold 8 Tilknyt fag 9
VEJLEDNING 1.0 Indhold VELKOMMEN 3 KOM GODT I GANG 4 Log ind 5 Kontrolpanel 6 Tilpas profil 7 Tilknyt hold 8 Tilknyt fag 9 SÅDAN OPRETTER DU EN QUIZ 10 Quiz info 11 Tilføj spørgsmål 12 Tilføj formel til
Læs mere1 Forside. Side 1 af 15
Side 1 af 15 1 Forside Fra forsiden af Byg & Miljø, er der flere 'indgange' til både mere viden og muligheder for at ansøge. BEMÆRK - På forsiden af Byg & Miljø kan du blive mødt af forskellige fejlmeddelelser,
Læs mereIntroduktion til brugen af Blackboards Content System
Introduktion til brugen af Blackboards Content System My Content -fanen Blackboards Content System er at opfatte som et online diskdrev, hvor du kan gemme alt dit materiale. Du tilgår det via My Content
Læs mereFable Kom godt i gang
Fable Kom godt i gang Vers. 1.3.1 Opdateret: 29-08-2018 Indholdsfortegnelse 1. Installer programmet 3 2. Pak robotten ud 5 3. I gang med at programmere 6 4. Programmér Fable til at køre fra 90 til -90
Læs mereMS Visual Studio Basic 2010. En kort vejledning
Du kan hente programmet gratis her: MS Visual Studio Basic 2010 Express http://www.microsoft.com/visualstudio/eng/downloads#d-2010-express Tryk på Install Now og følg vejledningen. Indholdsfortegnelse
Læs mereVejledning for LOF s afdelingshjemmeside
Vejledning for LOF s afdelingshjemmeside - redigeret i Umbraco Marts 2012 Adresse: http://dinafdeling.lof.dk/ Rediger hjemmeside i Umbraco: http://dinafdeling.lof.dk/umbraco/ Mobilside: Der er lavet en
Læs mereBRUGERVEJLEDNING TIL SYSTEMET LBF STAMDATA
BRUGERVEJLEDNING TIL SYSTEMET LBF STAMDATA FOR ALMENE BOLIGER Indledning... 1 Overblik... 1 Brug af søgefunktionaliteten... 3 A - Gruppering af data... 3 B - Søgning... 4 C - Begrænsning på organisationstyper...
Læs mereProjekt - Valgfrit Tema
Projekt - Valgfrit Tema Søren Witek & Christoffer Thor Paulsen 2012 Projektet Valgfrit Tema var et projekt hvor vi nærmest fik frie tøjler til at arbejde med hvad vi ville. Så vi satte os for at arbejde
Læs merePHP kode til hjemmeside menu.
PHP kode til hjemmeside menu. Home Hovedmenu 1 Hovedmenu 2 Hovedmenu 3 Hovedmenu 4 Undermenu 1 Breadcrumb Her vises indholdet af den valgte side Undermenu 2 Undermenu 3 Undermenu 4 Evt. en mulighed for
Læs mereEn liste, hvor der kun kan angives et svar. En dropdown menu, hvori kun et svar kan vælges
Huskeseddel til uv-evaluering 1. Sådan oprettes en undersøgelse Klik på ikonet Surveys og dernæst det grønne plus Ny undersøgelse. Navngiv din undersøgelse og vælg under Basic options, om der skal være
Læs mereAnnemette Søgaard Hansen/www.dinwebvejleder.dk
Google Docs Regneark Indholdsfortegnelse Værktøjer... Side 3 Menuer... Side 6 Opgave... Side 13 Få adgang til filerne fra din computer... Side 19 Vejledende løsning... Side 20 GoogleDocs Regneark 2 Google
Læs mereIntegration med Microsoft SharePoint
Integration med Microsoft SharePoint Kom godt i gang med opsætning af integrationen Integration med SharePoint Kom godt fra start I TimeLog Project er der mulighed for at integrere til Microsoft SharePoint,
Læs mereIde med Diff. Mål. Tidsplan. 1.uge: 2.uge:
Side 1 af 5 Ide med Diff. Min ide med differenertierings modulet er at lave et program som kan vise 3d objekter, og få lavede en konverter som kan konventer 3ds filer over til noget som flash kan bruge.
Læs mereProcesbeskrivelse - Webprogrammering
Procesbeskrivelse - Webprogrammering Indholdsfortegnelse Forudsætninger... 1 Konceptet... 2 Hjemmesiden... 2 Server-side... 3 Filstrukturen... 3 Databasehåndtering og serverforbindelse... 4 Client-side...
Læs mereTYPO3 TRIN FOR TRIN 3
TYPO3 TRIN FOR TRIN 3 De indledende øvelser er fuldstændig de samme som i TYPO3 TRIN FOR TRIN 1 side 1-2. Du åbner altså din browser, skriver ale.dk/typo3 i Adressefeltet, og klikker på ordet Side i menuen
Læs mere