SKRIFTLIGE HJEMMEOPGAVER KOMMUNIKATION OG IT

Størrelse: px
Starte visningen fra side:

Download "SKRIFTLIGE HJEMMEOPGAVER KOMMUNIKATION OG IT"

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 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 mere

SKRIFTLIGE HJEMMEOPGAVER KOMMUNIKATION OG IT

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 KU- mail tcv634@alumni.ku.dk

Læs mere

I denne manual kan du finde en hurtig introduktion til hvordan du:

I 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 mere

Vejledning til opbygning af hjemmesider

Vejledning 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 mere

Vejledning KPK Online Prøverum

Vejledning 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 mere

MANUAL. Siteloom CMS

MANUAL. 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 mere

Lav din egen forside i webtrees

Lav 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 mere

Gem dine dokumenter i BON s Content Management System (CMS)

Gem 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 mere

BRUGER KURSUS RAMBØLL HJEMMESIDE

BRUGER 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 mere

Klasse 1.4 Michael Jokil 03-05-2010

Klasse 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 mere

Lav en hjemme side der kan sælge fly billetter til en stor i Europa.

Lav 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 mere

Dokumentering af umbraco artikeleksport:

Dokumentering 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 mere

Vejledning PROPHIX 11. Driftsbudgettering ved åbning af templates (Kun til Avanceret-brugere)

Vejledning 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 mere

Overvågningskamera. ~Af Svend, Valdemar og Frederik~

Overvå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 mere

Andreas Lauge V. Hansen klasse 3.3t Roskilde HTX

Andreas 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 mere

MANUAL. Siteloom CMS

MANUAL. 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 mere

Sådan opretter du en elektronisk aflevering

Så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 mere

MANUAL. Siteloom CMS

MANUAL. 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 mere

PHP Crash course. Databaser

PHP 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 mere

Visualiseringsprogram

Visualiseringsprogram 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 mere

JSP, Tomcat. Tutorial lavet af Jákup W. Hansen TSU semester 10.october 2007

JSP, 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 mere

Naja Schlüter Roskilde Tekniske Gymnasium 26/ Interessentanalyse

Naja 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 mere

Manual til WordPress CMS

Manual 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 mere

Vejledning til Photofiltre nr.189 Side 1 Sætte forskellige billeder sammen til collage

Vejledning 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 mere

Web sider. Introduktion: Har du nogensinde spekuleret over, hvordan det verdesomspændende internet virker og hvordan man snakker med det?

Web 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 mere

Indsæt og opret et billede på én gang

Indsæ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 mere

Indholdsfortegnelse Opret engelsk version af hjemmesiden... 2

Indholdsfortegnelse 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 mere

HTML5 fortsat: Underside, links og tekstelementer på din hjemmeside

HTML5 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 mere

DET NYE ARKIVALIERONLINE

DET 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 mere

Vejledning for LOF s afdelingshjemmeside - redigeret i Umbraco

Vejledning 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 mere

bedreweb.dk - Bolette Obbekær 2012 SÅDAN LÆGGER DU WORDPRESS PÅ DIT WEBHOTEL

bedreweb.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 mere

PHP Snippets. De små korte. Skrevet af Daniel Pedersen

PHP 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 mere

Tlf. +45 7027 1699 Fax + 45 7027 1899

Tlf. +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 mere

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

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 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 mere

Indledning. På de følgende sider vises, primært i tegneserieform, lidt om mulighederne i PC-AXIS for Windows.

Indledning. 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 mere

Tegneserien - 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 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 mere

Læ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 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 mere

Vejledning hvidbjergvinduet-designer.dk

Vejledning 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 mere

Hold kontakten med dit netværk!

Hold 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 mere

Kom godt i gang med I-bogen

Kom 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 mere

Redaktørvejledning for www.bredstrup-pjedsted.dk Skriv en artikel

Redaktø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 mere

Kapitel 4 Løkker i C#

Kapitel 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 mere

Sider, indlæg og projekter

Sider, 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 mere

Brugervejledning til FOKUSpartnere

Brugervejledning 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 mere

Vejledning til Socialstyrelsens nye supportsystem

Vejledning 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 mere

Vejledning Huslejebudgettering

Vejledning 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 mere

Upload af billeder til hjemmesiden m.m.

Upload 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 mere

Qbrick s krav til video filtyper

Qbrick 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 mere

Sådan indlægges nyheder på DSqF s hjemmeside trin for trin

Så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 mere

Jysk Online Medie ApS - Vestergade 32, 8600 Silkeborg - Tlf.:

Jysk 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 mere

Fable Kom godt i gang

Fable 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 mere

SIDEN PÅ WORDPRESS.COM

SIDEN 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 mere

Indledning. 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. 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 mere

Brugermanual 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 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 mere

Quick 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 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 mere

Vejledning: AMUUDBUD.DK

Vejledning: 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 mere

DANSK SKOLEDATA APS. Tlf. 86 44 80 99 E-mail DSD@skoledata.dk DSA-Ventelisten

DANSK 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 mere

Brugervejledning til www.sundhedspaedagogik.net

Brugervejledning 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 mere

E-MAIL WINDOWS LIVE MAIL

E-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 mere

Du kan først gemme artiklen, når du har udfyldt de obligatoriske felter, som er markeret med *.

Du 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 mere

Dokumentation af programmering i Python 2.75

Dokumentation 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 mere

Vi 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.

Vi 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 mere

Manual i frontend-redigering af kredssider og brug af kalender

Manual 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 mere

Manual til Wordpress. 1. Log ind på din Wordpress-side. Indhold:

Manual 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 mere

WISEflow Guide til deltagere

WISEflow 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 mere

IT vejledning i MUS for medarbejdere

IT 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 mere

E-MAIL MICROSOFT OUTLOOK 2010

E-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 mere

Indholdsfortegnelse. EasyIQ IDM 5.4 Brugermanual

Indholdsfortegnelse. 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 mere

Manual til at redigere på stafetforlivet.dk for holddeltagere

Manual 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 mere

Brugervejledning til Djurspakken

Brugervejledning 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 mere

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.

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. 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 mere

Kom godt i gang med Fable-robotten

Kom 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 mere

E-MAIL G-MAIL (GOOGLE)

E-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 mere

Multisite + kk.dk: Nyhed Version: 1

Multisite + 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 mere

Oktober Dokumentpakker

Oktober 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 mere

PBX Online Brugervejledning www.pbxonline.dk

PBX 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 mere

Log ind. Opret fortælling. Skriv tekst. Upload billeder. Indsæt billeder. Indsæt links. Indsæt citat. Indsæt grå boks

Log 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 mere

Guide til Umbraco CMS

Guide 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 mere

Rationel VinduesDesigner TM Brugervejledning

Rationel 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 mere

Michael Jokil 11-05-2012

Michael 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 mere

Rapport. 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 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 mere

Du kan først gemme fanebladene, når du har udfyldt de obligatoriske felter, som er markeret med *.

Du 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 mere

Manual til Dynamicweb Februar 2010

Manual 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 mere

VELKOMMEN 3. KOM GODT I GANG 4 Log ind 5 Kontrolpanel 6 Tilpas profil 7 Tilknyt hold 8 Tilknyt fag 9

VELKOMMEN 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 mere

1 Forside. Side 1 af 15

1 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 mere

Introduktion til brugen af Blackboards Content System

Introduktion 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 mere

Fable Kom godt i gang

Fable 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 mere

MS Visual Studio Basic 2010. En kort vejledning

MS 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 mere

Vejledning for LOF s afdelingshjemmeside

Vejledning 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 mere

BRUGERVEJLEDNING TIL SYSTEMET LBF STAMDATA

BRUGERVEJLEDNING 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 mere

Projekt - Valgfrit Tema

Projekt - 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 mere

PHP kode til hjemmeside menu.

PHP 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 mere

En liste, hvor der kun kan angives et svar. En dropdown menu, hvori kun et svar kan vælges

En 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 mere

Annemette Søgaard Hansen/www.dinwebvejleder.dk

Annemette 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 mere

Integration med Microsoft SharePoint

Integration 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 mere

Ide med Diff. Mål. Tidsplan. 1.uge: 2.uge:

Ide 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 mere

Procesbeskrivelse - Webprogrammering

Procesbeskrivelse - 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 mere

TYPO3 TRIN FOR TRIN 3

TYPO3 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