2012PrgC34

From rtgkomArkiv
Jump to: navigation, search

Contents

Aflevering af eksamensprojekter i Programmering C og Informationsteknologi B, 2013-05-10, Gkb[edit]

Her kommer præcisering af forskellige praktiske forhold i forbindelse med aflevering af eksamensprojekterne i InfB og PrgC. Da mange elever har valgt at gennemføre eksamensprojekterne i disse fag som et fælles projekt, så beskrives kravene til afleveringen i begge fag her, -og samme information er kopieret til wiki'artiklerne for både PrgC og InfB for begge hold (3.4 og 3.36).

Afleveringsfristen er fredag d. 10. maj kl. 16:00, og det er ønskeligt at den digitale del af afleveringen gennemføres inden den frist. Den fysiske del af afleveringen kan overstås i løbet af mandagen d. 13. maj, hvor jeg bliver i MediaLab fra kl. ca. 10:00 til ca. 17:00 for at tage i mod rapporter og assistere dem som evt. har haft problemer med den digitale aflevering.

Hvis der opstår spørgsmål som ikke besvares i denne tekst, eller hvis der er uklarheder i teksten, så kan jeg kontaktes på min email, gkb@rts.dk. Se også projektoplægget for PrgC: http://rtgkom.dk/~gkb/prg/2012-2013/2013PrgC-Oplaeg-til-eksamensprojekt.pdf og projektoplægget for InfB: http://rtgkom.dk/wiki/BRW-AfsluttendeProjekt-2013

Rapport og journal og produkt[edit]

  • For begge fag gælder at dokumentation og produkt skal afleveres på elevens StudieWeb i mappen infb_prgc_eksamensprojekt som er oprettet specielt til dette formål.
  • Dokumentationen, rapport for InfB og journal for PrgC, skal også afleveres på papir. Tre (3) eksemplar i BEGGE fag. Husk også at fremstille fysiske eksemplar af rapport og CD for alle gruppemedlemmerne.
  • Produktet, skal så vidt muligt, vedlægges rapport/journal på en CD skive.
  • Fysiske produkter, såsom opstillinger med microkontrollere eller anden elektronik, samt produkter som er installeret på særlige computere, skal afleveres til opbevaring i MediaLab indtil eksamen.
  • I tilfælde af webbaserede client-server produkter, så skal produkterne helst være installeret på rtgkom.dk, og kunne afprøves der.
  • Hvis produktet er udviklet på en ekstern webserver og/eller hvis det gør brug af funktionalitet som vi ikke har på vores webserver, så behøver produktet ikke flyttes til rtgkom.dk. Henvis til serveren i dokumentationen.
  • Bemærk at i begge tilfælde (ekstern server eller rtgkom.dk), så skal alle data og scripts som behøves til at installere produktet, samt en vejledning om fremgangsmåden, vedlægges rapporten, -typisk som bilag i rapporten/journalen og/eller filer som uploades til afleveringsmappen eller som filer på CD'en.

Bemærk at der hverken i InfB eller PrgC forventes at censor afprøver produktet, og derfor er det vigtigt at dokumentere både produktets forskellige prototyper og den endelige udformning/funktion/udseende i rapporten/journalen. Skærmbilleder med korte kommentarer er velegnet til denne type dokumentation. Hvis der er mange skærmbilleder, altså f.eks. hvis produktet har mange funktioner som kun kan dokumenteres hver i sit skærmbilled, så læg gerne billederne og kommentarerne i et bilag.

Aflevering i Informationsteknologi B, den korte oversigt[edit]

  • Digital aflevering af produkt og rapport til afleveringsmappen som er oprettet til formålet på dit StudieWeb, infb_prgc_eksamensprojekt.
  • 1 eksemplar af rapporten med CD til skolens arkiv (tjener også som en backup, og kan senere gå til biblioteket)
  • 1 eksemplar af rapporten med CD til vejleder
  • 1 eksemplar af rapporten uden CD til censor (bemærk at censor altså ikke kan afprøve produktet, og at han/hun heller ikke har nogen skyldighed (eller tid) til at gøre det, selv om der i rapporten evt. er en link til en version som kan afprøves.)
  • Evt. fysisk opstilling eller computere.

Aflevering i Programmering C, den korte oversigt[edit]

  • Digital aflevering af produkt og journal til afleveringsmappen som er oprettet til formålet på dit StudieWeb, infb_prgc_eksamensprojekt.
  • 1 eksemplar af journalen med CD til skolens arkiv (tjener også som en backup, og kan senere gå til biblioteket)
  • 1 eksemplar af journalen med CD til vejleder
  • 1 eksemplar af journalen uden CD til censor (bemærk at censor altså ikke kan afprøve produktet, og at han/hun heller ikke har nogen skyldighed (eller tid) til at gøre det, selv om der i journalen evt. er en link til en version som kan afprøves.)
  • Evt. fysisk opstilling eller computere.

Indpakning/Indbindning[edit]

  • Brug helst de tynde plastikmapper, såkaldte tilbudsmapper. Brug gerne samme farve til alle jeres rapporter.
  • CD skiver skal lægges i en eller anden form for lomme som kan placeres bagerst i mappen. Det er godt hvis denne lomme kan lukkes således at CD'en ikke falder ud hvis rapporten af en eller anden grund vender toppen ned mod gulvet.

Antal sider[edit]

I PrgC er der i bekendtgørelsesbilaget fastsat en øvre grænse på 10 sider for journalen, og 20 sider for rapporten i InfB. Hvis I føler at I nærmer jer eller overskrider denne grænse for meget, så udnyt at flytte noget af indholdet til bilag.

Journal og rapport, hvorfor?[edit]

Når eksamensprojekterne i PrgC og InfB gennemføres som et samlet projekt, så kan det virke omstændigt at fremstille en journal til aflevering i PrgC og en rapport i InfB, men det er nødvendigt fordi der eksamineres i begge fag og der er ikke nogen garanti for at det bliver den samme censor i begge tilfælde.

Hvis du har lavet et samlet eksamensprojekt i begge fag, så kan journalen for PrgC let fremstilles ved at reducere eller fjærne afsnit i rapporten for InfB. Afsnit med følgende indhold kan evt. reduceres: Indledende analyser, overvejelser om målgruppe og kommunikation og i vis udstrækning overvejelser om design. Teoriafsnit kan fjærnes eller reduceres kraftigt og erstattes med henvisninge til kilder. Men reducer ikke beskrivelsen af implementeringen!

Eksamen[edit]

Et par dage inden den eventuelle mundtlige prøve holdes der en såkaldt spørgetime, hvor de elever som skal op til eksamen skal komme og kontrollere at deres produkter er installeret korrekt og kan afprøves fra eksamenscomputeren, altså den maskine som er tilkoblet projektoren i eksamenslokalet. Fysiske produkter køres på plads i eksamenslokalet og gøres klar til demonstration. Der bliver også mulighed for at stille afklarende spørgsmål om eksamen, og der gives gode råd om opbygning af præsentationen.

File I/O med Visual Basic 2010, 2013-05-06, Gkb[edit]

Her er et eksempel på hvordan indeholdet i en TextBox med flere linjer kan lagres i en tekstfil og indlæses igen.

    Private Sub LavEnDatafil_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LavEnDatafil.Click
        Dim MinLinje As String
        REM Se her: http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k(MICROSOFT.VISUALBASIC.FILESYSTEM.FILEOPEN)&rd=true
        TextBox4.Text = TextBox1.Text
        FileOpen(1, TextBox1.Text, OpenMode.Output)
        For Each MinLinje In TextBox2.Lines
            PrintLine(1, MinLinje)
        Next MinLinje
        FileClose(1)
    End Sub

    Private Sub LaesFraDatafilen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles LaesFraDatafilen.Click
        Dim MinLinje As String
        FileOpen(1, TextBox1.Text, OpenMode.Input)
        Do While Not EOF(1) 'Se her http://msdn.microsoft.com/en-us/library/7ct2yy4s(v=vs.71).aspx
            MinLinje = LineInput(1)
            TextBox3.Text += MinLinje + Environment.NewLine
        Loop
        FileClose(1)
        ' Dette virker også: TextBox3.Text = System.IO.File.ReadAllText(TextBox4.Text, System.Text.Encoding.Default)
    End Sub

Eksamensprojekt: Blender og Python, 2013-04-13, Gkb[edit]

Hvis I, f.eks. Martin og Christian, vil bruge Python til at "styre" Blender, så er følgende afsnint i manualen for Blender evt. et godt sted at starte udforskningen af mulighederne: http://wiki.blender.org/index.php/Doc:2.6/Manual/Extensions/Python. Prøv at følge vejledningerne i afsnittet Getting Started - Wiki tutorials.

Eksamensprojekt: Arbejdet fortsætter, 2013-04-11, Gkb[edit]

Parsing af XML filer og hvordan man henter data fra en webserver[edit]

# -*- coding: cp1252 -*-
#Inspirert og baseret på
#http://docs.python.org/2.7/library/xml.etree.elementtree.html#elementtree-xpath
#Karl Bjarnason 11. april 2013

import xml.etree.ElementTree as ET
tree = ET.parse('country_data.xml')
root = tree.getroot()
print root.tag
print root.attrib

for element in root:
    print element.attrib

for element in root:
    #print element.attrib
    for e in element:
        print e.tag, ":", e.text

for year in root.iter('year'):
    print year.text


#Vis kun resultater som opfylder et eller andet bestemt kriterium.
print 
for year in root.iter('year'):
    if year.text =="2008":
        print year.text


#Og vi kan søge efter en delstræng i teksten.
print
delstraeng="11"
for year in root.iter('year'):
    if delstraeng in year.text:
        print year.text

#Og hvordan kan man så evt. få fat i xml data fra en webserver?
#Se http://docs.python.org/3/howto/urllib2.html for Python 3 og
#og http://docs.python.org/2.7/howto/urllib2.html for Python 2.7
import urllib2
response = urllib2.urlopen("http://python.org")
html=response.read()
print html #Dette kunne vel lige så godt være noget rss feed på i XML format.

Eksamensprojekt: Arbejdsgrupper og projektinformation, Resurseplanlægning, 2013-03-19, Gkb[edit]

Arbejdsgrupper og projektinformation[edit]

Registrer jeres arbejdsgrupper i følgende tabel. Der er oprettet en mappe i jeres html-mappe med navnet infb_prgc_eksamensprojekt. Brug denne mappe til at aflevere projektbeskrivelsen. I kan også bruge den til alle andre filer, spike solutions, prototyper, billeder osv. som har med jeres eksamensprojekt at gøre. Disk quota er sat til 250 MB for alle indtil videre. Hvis der er behov for mere plads, så sig til.

Eksamensprojket - Arbejdsgrupper og projektinformation
Gruppenr. Dit/jeres navn/navne Titel Undertitel Kort beskrivelse af ideen Produkt/-er Værktøjer Projektbeskrivelse Rapport i InfB, link til ~/infb_prgc_eksamensprojekt/ Journal i PrgC, link til ~/infb_prgc_eksamensprojekt/
99 Karl Bjarnason Not To School Today Et system til understøttelse af hjæmmelæring Systemet skal gøre det muligt i en lektion at samarbejde over afstand, således at deltagerene ikke behøver være i klasselokalet. Specielt lyd, men også billede, evt. video, af tavlen og projektorlærredet, samt oversigtsbillede fra klasselokalet skal præsenteres i en webbrowser hvor brugerne kan vælge hvilket billed de vil se. Client-Server webprodukt PHP, MySQL, tre webkameraer, en mikrofon, Python http://rtgkom.dk/~gkb/infb_prgc_eksamensprojekt/ http://rtgkom.dk/~gkb/infb_prgc_eksamensprojekt/ http://rtgkom.dk/~gkb/infb_prgc_eksamensprojekt/
1 Christian Hjortshøj & Jonas Henk Jensen RSS - Læser Kort beskrivelse af ideen Produkt/-er Værktøjer http://rtgkom.dk/~christianph10/infb_prgc_eksamensprojekt/ Rapport i InfB Journal i PrgC
2 Jørn Dehn og Rasmus Hemmingsen CMS Undertitel Kort beskrivelse af ideen Produkt/-er Værktøjer http://www.rtgkom.dk/~joerndm10/infb_prgc_eksamensprojekt/ Rapport i InfB Journal i PrgC
3 Asger Lund Hansen & Bjarke Birkelund Sørensen IT & Programmering Online Varehus Kort beskrivelse af ideen Produkt/-er

http://rtgkom.dk/~bjarkebs10/infb_prgc_eksamensprojekt/Aflevering/Produkt/

Værktøjer http://rtgkom.dk/~bjarkebs10/infb_prgc_eksamensprojekt/ Rapport i InfB

http://rtgkom.dk/~bjarkebs10/infb_prgc_eksamensprojekt/Aflevering/infb_Rapport/

Journal i PrgC

http://rtgkom.dk/~bjarkebs10/infb_prgc_eksamensprojekt/Aflevering/prgc_rapport/

4 Michael Christiansen IT & Programmering Tøj webshop Kort beskrivelse af ideen Hjemmeside/webshop http://www.rtgkom.dk/~michaelc10/eksamen/forside.html Aptana studio 3, Gimp 2 http://www.rtgkom.dk/~michaelc10/infb_prgc_eksamensprojekt/ Rapport i InfB

http://www.rtgkom.dk/~michaelc10/infb_prgc_eksamensprojekt/Aflevering/InfB_Rapport/

Journal i PrgC

http://www.rtgkom.dk/~michaelc10/infb_prgc_eksamensprojekt/Aflevering/PrgC_Rapport/

5 Dit/jeres navn/navne Titel Undertitel Kort beskrivelse af ideen Produkt/-er Værktøjer Projektbeskrivelse Rapport i InfB Journal i PrgC
6 Dit/jeres navn/navne Titel Undertitel Kort beskrivelse af ideen Produkt/-er Værktøjer Projektbeskrivelse Rapport i InfB Journal i PrgC
7 Dit/jeres navn/navne Titel Undertitel Kort beskrivelse af ideen Produkt/-er Værktøjer Projektbeskrivelse Rapport i InfB Journal i PrgC
8 Dit/jeres navn/navne Titel Undertitel Kort beskrivelse af ideen Produkt/-er Værktøjer Projektbeskrivelse Rapport i InfB Journal i PrgC
9 Dit/jeres navn/navne Titel Undertitel Kort beskrivelse af ideen Produkt/-er Værktøjer Projektbeskrivelse Rapport i InfB Journal i PrgC
10 Dit/jeres navn/navne Titel Undertitel Kort beskrivelse af ideen Produkt/-er Værktøjer Projektbeskrivelse Rapport i InfB Journal i PrgC
11 Dit/jeres navn/navne Titel Undertitel Kort beskrivelse af ideen Produkt/-er Værktøjer Projektbeskrivelse Rapport i InfB Journal i PrgC
12 Dit/jeres navn/navne Titel Undertitel Kort beskrivelse af ideen Produkt/-er Værktøjer Projektbeskrivelse Rapport i InfB Journal i PrgC
13 Dit/jeres navn/navne Titel Undertitel Kort beskrivelse af ideen Produkt/-er Værktøjer Projektbeskrivelse Rapport i InfB Journal i PrgC

Resurseplanlægning med Planner og Ganttproject[edit]

Med hensyn til registrering, altså synliggørelse, af planlægningsarbejdet, både mht. klassisk tidsplanlægning og så den lidt mere præcise og tekniske tilgang som jeg kalder for resurseplanlægning, så kan det være en god ide at bruge et specielt planlægningsværktøj som f.eks. programmet Planner, https://live.gnome.org/Planner. Det laver gantt-kortet automatisk når I har defineret resurser og tasks (aktiviteter) og man kan exportere det som HTML og skærmbilleder kan så laves og bruges i rapporten. Planner fås til Windows, Linux og kan vistnok tvinges til at køre på Mac.

Programmet er ikke helt stabilt, og vi har lagt mærke til at den nyeste version til Windows, planner-0.14.6.exe, crasher når man saver, så her er en direkte link til en lidt ældre version som virker ok på Windows XP, se her : http://sourceforge.net/projects/winplanner/?source=dlp

Et andet program, også med GPL licens, er Ganttproject, se her: http://www.ganttproject.biz/

Problemformulering og diverse spikes, 2013-03-12, Gkb[edit]

Nu skal problemformuleringen formuleres[edit]

Vi har haft lidt tid til overordnede tanker om vores projektide og de fleste har lavet en eller flere spike solutions til reducere usikkerheden, og nu er tiden moden til helt præcist at formulere hvilket problem vi ønsker at forsøge at løse med vores projekt. Vi husker så at afgrænse den del af problemet som vi faktisk vil førsøge at implementere i vores projekt.

Diverse Spike Solutions[edit]

Der er mange spændende kærneproblemer som dukker op nu når vi skal vælge emne og værktøjer til eksamensprojekterne. Her er nogle eksempler:

  • File I/O. Det er ofte vigtigt at kunne lagre nogle data i en fil og læse dem ind sener. Når der skal laves programmer som har en praktisk funktion, som f.eks. telefonbøg, frimærkesamling, CD/DVD arkiv osv., så mælder sig yderligere et behov om at lagre data som findes i en af programmets datastrukturer i en fil og senere at kunne indlæse disse data ind i en datastruktur af samme type.

Ofte er en plain textfil at foretrække til at lagre data, da vi så let kan undersøg hvad der faktisk står i filen. Andre gange kan et binært filformat være at foretrække eller evt. ligefrem nødvendigt.

Et ofte anvendt alternativ i webbaserede client-server applikationer er at bruge en SQL database, som f.eks. MySQL, til at lagre dataene. De lagres selvfølgelig også i en fil, men nu under kontrol af DataBase Management Syststemet, DBMS, f.eks. MySQL, og nu kan vi bruge de API funktioner som f.eks. PHP byder på til at lagre eller slette en record i databasen.

De fleste udviklingsværktøjer, f.eks. Python og Lazarus IDE, byder på mulighed for bruge SQL databaser over netværket, eller helt enkelt at etablere en lokal SQL database. Det er således muligt at lave programmer i Visual Basic, Python og Object Pascal (f.eks. med Lazarus IDE) som bruger SQL databaser til at lagre sine data. I mange tilfælde er det dog både lettere og mere praktisk at bruge helt almindelige tekstfiler.

Eksamensprojekt, 2013-02-26, Gkb[edit]

Du kan selv vælge tema for dit projekt, men projektbeskrivelsen skal godkendes af skolen. Du kan arbejde på tværs af fagene, eller du kan vælge at afprøve og demonstrere et princip eller nogen teori indenfor programmering og systemudvikling. En god tilgang kan være at lave et produkt som andre kan lære af, eller udnytte til noget nyttigt. Vi har f.eks. mange ideer som vi ønsker udviklet til MediaLab. Se To-Do sektionen i Drift-artiklen på http://rtgkom.dk.

Du kan arbejde sammen med en ekstern rekvirent, men det skal godkendes af skolen og der skal laves en skriftlig aftale med rekvirenten.

Planlægning af arbejdet, -hvordan?, 2013-01-17, Gkb[edit]

Der er selvfølgelig flere måder man kan angribe den opgave at planlægge arbejdet med at lave produktet. Man kan for eksempel bare kaste sig direkte ud i at programmere, afprøve ideer, kode lidt mere osv. Men man kan også anlægge en mere systematisk fremgangsmåde, f.eks. så kan man se på vores systemudviklingmetode og begynde på den Indledende aktivitet og arbejde med de to delaktiviteter som vi har defineret for den, og så den næste aktivitet osv.

Et alternativ for de lidt mere utålmodige kan være at fokusere i dag på følgende aspekter ved projektet.

Idé, problem, målgruppe, ønsket effekt hos modtageren/målgruppen osv.[edit]

asdf

Identificering af kerneproblemer[edit]

Hvis vi vælger at lave et program (f.eks. med Lazarus IDE) som bruger et andet program (f.eks. POV-Ray) til at rendere billedet, så skal vi som minimum kunne løse følgende kerneproblemer for at kunne lave vores program færdigt. Ordningen i hvilken vi løser disse er ikke nødvendigvis vigtig. 1. Starte en ekstern application fra vores program. 2. Få den eksterne applikation til at indlæse en tekstfil med vores 3D model (.POV filen) og rendere 2D billedet. 3. Hente 2D billedet ind i den grafiske brugerflade på vores program. 4. Tillade ændring via GUI'en på vores program af 3D modellen, f.eks. via indtastning af længde, bredde eller højde for en boks. 5. Ændring af disse værdier i tekstfilen. Der kommer sikkert flere kerneproblemer for dagen når vi begynder at arbejde med løsningen af disse, men her kan vi altså starte!

Valg af værktøj[edit]

asdf, Lazarus og POV-Ray, Python (GTK), ...

3D modellering og rendering af 2D billed, 2013-01-08, Gkb[edit]

I sidste modul aftalte vi at temaet for næste projekt skal være 3D modellering og rendering af et 2D billed af denne model. Dette kan omsættes på forskellige måder og ved hjælp af forskellige tekniker og værktøjer, og den konkrete tilgang kan også tilpasses den enkelte elevs forudsætninger.

Det er ikke noget krav at den matematiske model skal defineres vha. GUI, men 2D billedet skal renderes som grafik og præsenteres i en GUI.

Bemærk at der ikke er noget krav om brug af en bestemt projektion, f.eks. perspektivprojektion eller isometrisk (ortografisk) projektion, ved tegning af 2D billedet af 3D modellen. Det betyder f.eks. at vi kan nøjes med at lave isometriske projektioner på xy-planet, xz-planet og/eller yz-planet.

Bemærk også at vi selvfølgelig også selv kan programmere funktionaliten som behøves til at tegne en perspektivprojektion af vores model, eller så kan vi bruge et externt program som f.eks. POV-Ray til at rendere 2D billedet, og så kan vi selvfølgelig let bruge alle de projektioner som POV-Ray's kamera kan bruge, -vistnok ti forskellige.

Her er nogle eksempler på hvordan vi evt. kan lave programmer med afsæt i temaet:

  • Uden hjælp af et eksternt rendering program. Definere en boks vha. x-, y- og z-koordinaterne for hjørnepunkterne, og så tegne streger mellem hjørnepunkterne direkte på den grafiske form. F.eks. kan 2D billedet vise en isometrisk (ortografisk) projektion af boksen på et eller flere af de primære planer i koordinatsystemet.
  • Ved hjælp af et eksternt rendering program (som f.eks. POV-Ray). Lave GUI til indtastning/definition af modellen, lagre den som en POV-fil, starte POV-Ray og så inportere det resulterende 2D billed i GUI'en.

Værktøjer som f.eks. kan bruges:

  • Python og Tkinter
  • Python og Visual
  • Python og Turtle
  • Lazarus
  • Lazarus og POV-Ray
  • NetLoog (Javabaseret implementering af programmeringssproget Logo, let at exportere som Java applet og publisere på nettet)

Man kan selvfølgelig også bruge mange andre værktøjer som f.eks. Visual Basic, Visual C#, Delphi, ...

Vedrørende kryptering med Python, installering af ezPyCrypto og PyCrypto, 2012-12-17, Gkb[edit]

I forbindelse med at lave programmer til kryptering og dekrypteringa i Python er der flere moduler som kan bruges. PyCrypto er et modul som ofte tilstrækkeligt, men der er lavet moduler, f.eks. ezPyCrypto, som gør det lidt lettere, og de bruger så ofte PyCrypto. Disse to moduler følger ikke med i standard distributionerne af Python, og på grund af begrænsninger på export af kompilerede kryptografiske programmer fra USA, så kan det være svært at finde binære versioner af f.eks. PyCrypto, og derfor de følgende to links:

Læringsprogram: Imagemap med Lazarus, Skabelon for resurseplan med Planner, 2012-11-16, Gkb[edit]

Arbejdet med implementering af første prototype fortsatte. Grupperne bruger forskellige udviklingsmiljøer og værktøjer, f.eks. Visual Basic, Lazarus IDE og GTK. Stemningen var fokuseret og mulighederne i de store og måske til tider lidt komplicerede værktøjer blev aktivt udforsket. Der blev udviklet hurtige spike-solutions til mange forskellige problemer. Som eksempel kan nævnes

  • design af logiken for en regnemaskine i (indtastning af tal og operationer, samt udførelse af regneoperationerne, visning af resultatet og klargørelse for næst udregning). (Visual Basic)
  • skrivning af en eventhandler for udførelse af en bestemt regenoperation ved ændring af et tal i et inputfelt. (Visual Basic)
  • konvertering af teksten i et inputfelt til et tal som kan bruges i udregninge. (Visual Basic)
  • placering af knapper, evt. gennemsigtige, eller Image widgets over et billed således at et museklik på dem aktiverer visning af en bestemt forklaring eller information, f.eks. i en label. (Lazarus IDE)

Imagemap med Lazarus[edit]

Jeg demonstrerede en måde (Spike Solution) at bruge Image og Picture widgets i Lazarus IDE således at man opnår en effekt som ligner image maps i HTML/Java Script. Princippet er at bruge en Picture widget til selve billedet, f.eks. et billed af anatomiske detaljer ved menneskekroppen, og så at lægge Image widgets ovenpå det og skrive eventhandlere for klik på disse. Her er et skærmbilled som viser en tekstmæssigt lidt udbygget version af den Spike Solution som jeg præsenterede i klassen.

http://rtgkom.dk/~gkb/billeder/lazarus_image_map_spike_solution_full_screen_dump_640x512.png http://rtgkom.dk/~gkb/billeder/lazarus_image_map_spike_solution_ui_246x420_72dpi.png

Princippet er altså at man ...

xxx kode xxx

Skabelon for resurseplan med Planner[edit]

Her er en link til en skabelon for resurseplan http://www.rtgkom.dk/~gkb/komit/2011-2012/resurseplan_skabelon_for_gkb_v01.planner til brug i Planner. Skabelonen tager udgangspunkt i vores systemudviklingsmetode. Skabelonen er ikke helt færdig, men kan måske bruges som afsæt til egen arbejd i Planner.

Konvertering af tekst i inputfelter til talværdier i Visual Basic[edit]

Når vi skal bruge indtastede talværdier i udregninge så skal de lige først konverteres til talværdier. Til det bruges normalt Val() funktionen. Til konvertering den anden vej, altså fra tal til string bruges ofte Str() funktionen.

Dim ValResult As Double
ValResult = Val("2457")    ' ValResult is set to 2457.

Læringsprogram: struktur for projektrapporten, resurseplanlægning, krav til dokumentation af mindre programmer, 2012-11-15, Gkb[edit]

Vi fortsatte arbejdet med at afklare krav (vha. user stories), formulere testprocedure til dem, designe implementeringen af dem og implementere dem i de forskellige udviklingsmiljøer og programmeringssprog som grupperne har valgt at arbejde med.

Struktur for projektrapporten[edit]

Vi satte lidt fokus på projektrapportens struktur. Jeg henviste til MediaLabs systemudviklingsmetode, http://www.rtgkom.dk/wiki/MediaLab:_Systemudviklingsmetode, som et tilstrækkeligt metodiskt grundlag for projektarbejdet. Specielt skal vi forsøge at gøre den itterative udvikling af gerne to (2) prototyper synlig i rapporten.

Vi så på nogle gamle eksamensrapporter i InfB og PrgC, og så henviste jeg iøvrigt til vores skabeloner for projektbeskrivelse og rapport for yderligere inspiration, se her: http://www.rtgkom.dk/wiki/Guide:Projektbeskrivelse_og_rapport

Resurseplanlægning[edit]

Vi diskuterede registrering, altså synliggørelse, af planlægningsarbejdet, både mht. klassisk tidsplanlægning og så den lidt mere præcise og tekniske tilgang som jeg kalder for resurseplanlægning. Brug gerne programmet Planner, https://live.gnome.org/Planner, til arbejdet. Det laver gantt-kortet automatisk når I har defineret resurser og tasks (aktiviteter) og man kan både exprotere det som grafik og HTML.

Krav til dokumentation af mindre programmer[edit]

Når vi skal dokumenter udvikling af programmer, så kan vi bruge følgende liste over krav til dokumentationen som inspiration. For nogle programmer vil det være mindre meningsfuldt at bruge alle punkterne i listen, og for andre programmer vil der måske behøves tiltag som ikke nævnes i listen. Brug den som inspiration, vælg selv de punkter som du synes relevante for dit program:

  1. User stories, en eller flere, som beskriver brugernes forventninger til programmet. Her er nogle eksempler.
  2. Kerneproblemet (evt. flere problemer). Beskrivelse i prosa, på Dansk!, af kærneproblemet, altså det eller de problemer som du skal løse for at komme i gang med programmeringen af den første prototype. (Dette krav er inspireret af "Bottom Up" tilgangen til programmering.)
  3. Beskrivelse af brugerfladen for programmet (tekst UI, eller GUI). Tegn en eller flere skitser!
  4. Use Case diagram, som visualiserer hvem skal bruge programmet og til hvad det skal bruges. Her kan f.eks. ArgoUML eller Dia bruges. Sparxsystems har en beskrivelse af opbygningen i de forskellige UML-diagrammer.
  5. Klassediagram, som viser de vigtigste klasser i programmet. Her kan f.eks. ArgoUML eller Dia bruges.
  6. Input. En beskrivelse af input (inddata) til programmet. Hvilke data, deres datatype og mening for brugeren.
  7. Operationer på inddata, altså en beskrivelse af de operationer som programmet skal udføre på inddata.
  8. Output. Beskrivelse af output (uddata) fra programmet. Hvilke data, deres datatype og mening for brugeren.
  9. Flowchart (rutediagram) som viser programmets logiske opbygning/struktur. (Flowcharting, flowchart, brug gerne programmet Dia og for Dia til Windows se her.
  10. Kildekoden for det færdige program, formateret med en non-proportional font, altså med et skriftsnit hvor alle bogstaver er lige brede. Det bevirker at indrykninger i kildekoden ikke forvanskes. Prøv også at bruge ikke større bogstaver end 12 punkter, evt. kun 10 punkter hvis der er mange lange linier i kildekoden som ellers ville deles på to linier (wrap to the next line).
  11. Skærmbilleder som viser/dokumenterer hvordan det færdige program bruges/virker. Husk at i Windows så kan det det valgte, eller aktive vindue, kopieres til klippebordet (clipboard) med tastkombinationen Alt+PrtScr. Det kan være praktisk for at undgå at skulle paste skærmbilledet ind i et billedredigeringsprogram alene for manuelt at klippe vinduet ud fra hele skærmbilledet.
  12. Et skærmbilled, eller flere, som viser udviklingsmiljøet, kildekoden, Python shell'en og evt. debuggeren i funktion med en kort kommentar/forklaring.
  13. Diskussion/beskrivelse af de sætninge (statements) og evt. funktioner i Python som du har brugt i dit program.
  14. Diskussion/beskrivelse af de eksterne funktionsbiblioteker (Python moduler) du evt. har brugt i dit program.

Læringsprogram, arbejdsgrupper, 2012-11-05, Gkb[edit]

Tre eller fire pr gruppe.

  • Gruppe nr 1:
    • Kort projekttitel (max 18 tegn):PolyLearner
    • Lang projekttitel (max 100 tegn):
    • Mads Skjøttgaard Ynddal, madssy10
    • Michael Simonsen Christiansen, michaelc10
    • Mads Funder Poulsen, madsfp10
  • Gruppe nr 2:
    • Kort projekttitel (max 18 tegn): MathOlympics
    • Lang projekttitel (max 100 tegn):
    • Asger Anders Lund Hansen, asgeralh10
    • Bjarke Birkelund Sørensen, bjarkebs10
    • Christian Pihlkjær Hjortshøj, christianph10
  • Gruppe nr 3:
    • Kort projekttitel (max 18 tegn): GeoTrix
    • Lang projekttitel (max 100 tegn):
    • Morten Brodthagen, mortenb10
    • Simon Stendys, simonrs10
    • Birk Kylensø, birkk12
  • Gruppe nr 4: Projektets titel
    • Kort projekttitel (max 18 tegn):anatomi quizen
    • Lang projekttitel (max 100 tegn):anatomi quiz til folkeskolen
    • Rasmus Hemmingsen, rasmusbh10
    • Jørn Møller, joerndm10
    • Jonas Henk, jonasdhj10
  • Gruppe nr 5: Projektets titel
    • Kort projekttitel (max 18 tegn):
    • Lang projekttitel (max 100 tegn):
    • Navn1, userid1
    • Navn2, userid2
    • Navn3, userid3
  • Gruppe nr 6: Projektets titel
    • Kort projekttitel (max 18 tegn):
    • Lang projekttitel (max 100 tegn):
    • Navn1, userid1
    • Navn2, userid2
    • Navn3, userid3

Læringsprogram, 2012-11-05, Gkb[edit]

  • I projektet udarbejdes et læringsprogram til brug i et af undervisningsfagene på HTX. Programmet skal automatisere en fremgangsmåde som ellers kan være tidskrævende.
  • Programmet og arbejdet med projektet planlægges, gennemføres og dokumenteres i en rapport som afleveres på elevernes StudieWebs. Produktet og alle prototyper afleveres også der.
  • RTG-MediaLabs systemudviklingsmetode skal bruges i projektet.
  • Gruppearbejde, tre eller evt. fire elever i hver gruppe.
  • Vi skal prøve at anvende nogle af reglerne (rules) fra Extreme Programmering i arbejdet, se her http://www.extremeprogramming.org/rules.html
  • I kan selv vælge hvilket udviklingsmiljø I vil anvende. Det skal bare være lovligt og uden omkostninge.
  • Prøv at passe på ikke at slå et stort brød op. Definer problemet tydeligt, og skriv nogle brugerhistorier (user stories) straks.
  • Et nærmere oplæg kommer snart her: asdf

Hvordan vises/åbnes en ny form i Object Pascal (Lazarus IDE)?, 2012-10-30, Gkb[edit]

Hvordan kan man i en grafisk applikation lavet med Lazarus IDE vise "ny" form ved f.eks. klik på en knap? Prøv følgende omtrentlige fremgangsmåde:

  1. Lav et nyt projekt for en grafisk application med en form og gem projektet i en ny mappe med et beskrivende navn, f.eks. "FormShowForm". Brug ellers default navne for alle filer.
  2. Lav en form med en knap med som eksekverer "Form2.Show;" ved klik med musen.
  3. Brug File - New Form til at tilføje en ny form til applikationen.
  4. Gem formen i projektmappen. Der laves to filer. En med Pascal kildekoden og en får default navnet unit2.pas og en med definitionen af formen og den får default navnet unit2.lfm.
  5. Tilføj Unit2 i listen af units som importeres i "uses" sektionen i kildekoden for Unit1.
  6. Gem evt. Unit1 og Unit2 og kør. Hvis du er heldig, så åbnes Form2 når du klikker på knappen på Form1.

http://rtgkom.dk/~gkb/billeder/lazarus_vise_ny_form_640x512.png

GUI's med IDE's, en øvelse, 2012-10-11, Gkb 15:02, 22 October 2012 (CEST)[edit]

I denne øvelse skal vi teste nogle forskellige integrerede udviklingssystemer. (Integrated Development Environment, IDE). Vi gør det ved at lave et Hello World program med grafisk brugerflade (Graphical User Interface, GUI) med to forskellige IDE's . Du kan selv vælge hvilke IDE's du vil afprøve, men her er nogle forslag:

  • Lazarus IDE, et cross platform udviklingsmiljø for programmering med Object Pascal. Lazarus IDE er en klon af det nu snart i årtier populære udviklingsmiljø Delphi som oprindelig blev lavet af firmaet Borland og nu lever videre hos firmaet Embarcadero.
  • Gambas, ligner lidt Visual Basic, findes vistnok kun til Linux systemer. NB at Gambas er installeret under Ubuntu på vores maskiner i MediaLab.
  • Visual Python IDE & Visual Tkinter, et lille og ustabilt, men interessant system til at bygge brugerflader vha. Tkinter og Python. Let at installere for Windows, sværere (umuligt?) for Linux/Mac.
  • Netbeans, et meget udbredt og populært IDE til programmering i Java, oprindelig fra Sun Microsystems som jo lavede Java i sin tid, nu købt af Oracle.
  • Eric Python IDE, et tilsyneladende for os meget interessant crossplatform udvikligsmiljø til programmering i Python vha. QT API'en. Skal gerne afprøves. Svært at installere på Windows og Mac, men let vha. apt-get på Ubuntu. Brug gerne vores maskiner i MediaLab, spild ikke pt. tid på at forsøge installation på Windows og Mac. Man skal selv kompilere og konfigurere nogle eller evt. flere af delsystemerne som behøves.
  • QT Creator, før QT Designer. Dette er et professionelt dual licensing cross platform udviklingsmiljø til programmering i C++, oprindelig lavet af firmaet Trolltech i Norge, nu købt af Nokia.
  • Delphi
  • Visual Basic
  • Visual C#
  • Visual C++
  • ...tilføj selv IDE's...

Hvorfor Hello World!?[edit]

Formålet med at lave et Hello World program er dobbelt:

  • Demonstrere at man kan installere og konfigurere systemet således at det kan bruges til udviklingsarbejde.
  • Demonstrere at man kan skrive et program i det pågældende programmeringssprog som kan kompileres eller fortolkes (opfylder de syntaxkrav som stilles af compileren eller interpreteren) samt at programmet kan startes og eksekveres (afvikles) uden runtime-fejl.

Vi har så vores eget specielle formål med denne øvelse, nemlig at teste og forstå hvad et IDE er.

Krav til programmerne[edit]

Programmerne skal som minimum opfylde følgende krav:

  • Teksten Hello World! skal ses som en tydelig overskrift i brugerfladen.
  • Der ska være et inputfelt og en kommandoknap og en label.
  • Når man trykker på knappen, så skal indholdet i inputfeltet flyttes over i labelen.

Arbejdsform, dokumentering og aflevering[edit]

Induviduelt arbejde! Upload et skærmbilled eller to til dit StudieWeb for hvert IDE, samt et kort referat (minimum ca. 100 ord) af hvordan du lavede dine Hello World programmer. Det kan være en god ide at skrive om hvad var let, interessant eller svært. Brug fagsprogets begreber i dit referat. Du kan for eksempel beskrive hvordan du lavede eventhandleren for klik på knappen.

Om webdesignet[edit]

  • Lav en mappe med navnet programmering_c.
  • Lav en mappe med navnet gui_s_med_ide_s.
  • Lav din HTML præsentation i filen gui_s_med_ide_s.html (index.html er egentlig en god ide, men risikoen er ikke ubetydelig at du/vi så vil overskrive vores primære index.html som jo som bekendt definerer selveste hjemmesiden for vores StudieWeb, -så derfor!)
  • Pas på med ikke at indlægge et screendump i fuld tyngde (filstørrelse) ind i din HTML. Reducer størrelsen i pixels og evt. også komprimer de billeder som loades i begyndelsen, og lav så gerne en link til det ukomprimerede billed i fuld størrelse. Det kan brugeren så bestemme at klikke på og vente på, hvis han eller hun virkelig er interesseret i detaljerne. Gør evt. selve det lille billed til en hyperlink til det store billed.
  • Tilføj en link til programmering_c.html fra menuen på jeres homepage, dvs. fra index.html eller index.php. I programmering_c.html laver du så en link til gui_s_med_ide_s.html og de andre øvelser og projekter i faget Programmering C.

Ekstra[edit]

Hvis du har mere tid, så kan du fundere over følgende spørgsmål:

  • Var der nogen problemer med variabler eller datatyper?
  • Hvordan kunne programmerne evt. udbygges til at addere to tal som indtastes i to inputfelter?

Du kan eksperimenter og skrive om dine erfaringer.

Fremstilling af prototyper, 2012-10-01, Gkb[edit]

I dag skal I lave den første prototype, altså et program som opfylder et eller flere af kravene til produktet i projektet. I prototypen skal I brug erfaringer fra en eller flere af de "spike solutions" som I har før lavet i forbindelse med kerneproblemerne. Hvis I allerede har lavet den første prototype, så prøv at afprøve den og planlægge hvilken funktionalitet skal med i den anden prototype.

Se gerne denne artikel om vores systemudviklingsmetode, http://rtgkom.dk/wiki/MediaLab:_Systemudviklingsmetode. Denne metode kan I bruge til at strukturere både det praktiske arbejde med fremstilling af prototyper og dokumentationen af arbejdet. Metoden kan også bruges til at strukturere en evt. mundtlig præsentation af projektarbejdet. Se gerne også denne artikel om projektbeskrivelse og rapportstruktur, som er tilpasset denne systemudviklingsmetode, http://rtgkom.dk/wiki/Guide:Projektbeskrivelse_og_rapport. Brug den til inspiration og hjælp ved opbygning af rapporten.

Referat[edit]

Systemudviklingsmetode og skabeloner for projektbeskrivelse og rapport[edit]

Vi havde et kort plenummøde i begyndelsen af modulet hvor vores, altså RTG-MediaLab's, systemudviklingsmetode blev præsenteret vha. de ovenfor stående links. Vi diskuterede kort de centrale aktiviteter med vægt på begreberne krav, test, iteration, prototype, design og implementering. Skabelonerne for projektbeskrivelse og rapport blev kort præsenteret. Specielt det aspekt ved rapportstrukturen at det iterative arbejde med fremstilling af indtil flere prototyper gøres helt synligt i rapporten. Bemærk at disse skabeloner er lavet som vejledning, -det er ikke et krav at de skal anvendes, hverken nu i dette eller senere projekter. Det samme kan siges om systemudviklingsmetoden, -hvis I foretrækker at bruge en anden metode til at strukturere jeres arbejde, dokumentation og evt. præsentation, så er det ok.

Efter det arbejdede grupperne med fremstilling af prototyper. Undervejs diskuterede vi i nogle af grupperne hvordan man bruger variabler og funktioner i POV-Ray, og derfor blev følgende hurtige eksempel lavet på baggrund af information i hjælpesystemet i POV-Ray og vist på projektoren i slutningen af modulet. Eksemplet viser hvordan man kan anvende variabler, løkker og funktioner i POV-Ray.

Funktioner i POV-Ray[edit]

Her er et hurtigt eksempel på hvordan man kan anvende en funktion i POV-Ray. Bemærk at det ikke behøves for at løse opgaven, I kan indtaste i forvejen beregnede kordinater, men det vil nok gøre det lettere at rendere billeder i varierende kvalitet (varierende antal punkter). Brug hjælpesystemet i POV-Ray, søg på function og while. Her er det resulterende billed.
http://rtgkom.dk/~gkb/billeder/povray_funktioner_variabler_og_while.png

// perspective (default) camera
camera {
  location  <10.0, 10.0, -10.0>
  look_at   <0.0, 0.0,  0.0>
//  right     x*image_width/image_height
}

// An area light (creates soft shadows)
// WARNING: This special light can significantly slow down rendering times!
light_source {
  0*x                 // light's position (translated below)
  color rgb 1.0       // light's color
//  area_light
//  <8, 0, 0> <0, 0, 8> // lights spread out across this distance (x * z)
//  4, 4                // total number of lights in grid (4x*4z = 16 lights)
//  adaptive 0          // 0,1,2,3...
//  jitter              // adds random softening of light
//  circular            // make the shape of the light circular
//  orient              // orient light
  translate <40, 80, -40>   // <x y z> position of light
}   

cylinder{<-100,0,0>,<+100,0,0>, 0.05 pigment{color <1,0,0>}} //x-aksen
cylinder{<0,-100,0>,<0,+100,0>, 0.05 pigment{color <0,1,0>}} //x-aksen
cylinder{<0,0,-100>,<0,0,+100>, 0.05 pigment{color <0,0,1>}} //x-aksen

//#declare factorial = function(C) { prod(i, 1, C, i) }
//#declare A = factorial(5);

#declare f1 = function(xx) { 2*xx }
//#declare f1 = function(xx) { xx * xx }
#declare A = f1(1);  


#declare Count=0;
#while (Count < 5)
  sphere {
    <A, 0, 0> // center of sphere <X Y Z>
    1         // radius of sphere
    pigment {color green 1}        
  }
  #declare Count=Count+1;
  #declare A=f1(Count);
#end


//#declare Count=0;
//#while (Count < 5)
//  object { MyObject translate x*3*Count }
//  #declare Count=Count+1;
//#end

Eksperimenter med spike solutions, 2012-09-27, Gkb[edit]

Her er nogle kilder som kan evt. være gode til inspiration ved arbejdet med at lave spike solutions til kerneproblemerne som I har identificeret i gruppen:

Kurve med vpython, Integrated Development Environments og Basic setup for 3D design with Visual, 2012-09-17, Gkb[edit]

Vi fortsate arbejdet med projektet Rumlige figurer.

Kurve med vpython[edit]

Vi startede med en kort demonstration på projektoren af hvordan man kan "tegne streger" med curve-objektet i Visual. Efter det var der gruppearbejde, hvor grupperne skulle fortsætte med at identificere kerneproblemer og forsøge at løse dem med et af de tre værktøjer (Python i Blender, Python og Visual eller POV-Ray).

Integrated Development Environments[edit]

I forbindelse med en diskussion af præsentation af vores 3D model i en grafisk brugerflade (Graphical User Interface, GUI), viste jeg kort hvordan man kan lave et 'Hello World' program med grafisk brugerflade (kun en knap og et inputfelt, hvor tryk på knappen ændrede teksten i inputfeltet) med henholdsvis Gambas og Lazarus IDE. Gambas er en klone af Visual Basic og Lazarus IDE er en klone af Delphi, men både Visual Basic og Delphi er kendte og gode og ikke frie værktøjer.

Både Gambas og Lazarus IDE er eksempler på såkaldte integrerede udviklingsmiljøer (Integrated Development Environment, IDE), og vi kan bruge dem til at lave programmer som kan bruges til at styre rendering af 2D billeder af vores 3D model. F.eks. således at man angiver radius på et objekt ved at indtaste en talværdi i et inputfelt i den grafiske brugerflade, GUI, og trykker på en knap. Derved kan et 'event handler' startes som 'sender' talværdien til f.eks. POV-Ray eller Python som så renderer et nyt 2D billed af vores 3D model og afleverer det til vores GUI program, som så kan vise det til brugeren.

Basic setup for 3D design with Visual[edit]

I forbindelse med gruppernes arbejde med implementering af spike solutions i med Visual, så blev det klart at det er lidt svært at orientere sig i det grafiske billed som Visual viser. Dette er egentlig et godt eksemple på et kerneproblem, -vi kan ikke bruge Visual hvis vi ikke løser dette problem. En løsning kan evt. være at lave tre cylindre, med længden 1, og placere dem som enhedsvektorerne på henholdsvis x-aksen, y-aksen og z-aksen. Ved at farve dem henholdsvis røde, grønne og blå, så kan vi let se hvordan koordinatsystemet er orienteret i billedet. Denne ide er delvis implementeret i scriptet som jeg påbegyndte på projektoren og som følger her. Tilføj selv flere nyttige detaljer. <source lang="python">

  1. Basic setup for 3D design with Visual
  2. Karl Bjarnason, 2012-09-17

import visual x_unit_vector = visual.cylinder(pos=(0,0,0), axis=(1,0,0), radius=.1, color=(1,0,0)) y_unit_vector = visual.cylinder(pos=(0,0,0), axis=(0,1,0), radius=.1, color=(0,1,0)) z_unit_vector = visual.cylinder(pos=(0,0,0), axis=(0,0,1), radius=.1, color=(0,0,1)) </source>

Projektstart: Rumlige figurer, 2012-09-13, Gkb[edit]

Vi starter nu arbejdet med projektet Rumlige figurer, hvor fagene matematik og programmering samarbejder om at lave udregninge og visualisering af et matematiskt objekt som I designer. Vi tyvstartede lidt i tirsdags når vi kiggede hurtigt på hvordan man kan lave lidt 3D modellering og rendering af 2D billeder vha. systemerne Blender, Python med modulet Visual og POV-Ray.

Følg følgende fremgangsmåde:

  1. Lav arbejdsgrupperne og registrer jeres gruppe her i holdets wiki-artikel.
  2. Diskuter, og definer et eller flere kerneproblemer. (Et kerneproblem er et del-problem som I kan identificere at I bliver nødt til at løse for at kunne løse hele opgaven. Bemærk at løsning af et af kerneproblemerne ofte afslørere et nyt kerneproblem!)
  3. Vælg et værktøj til at eksperimentere med, f.eks. Blender, POV-Ray eller Visual Python.
  4. Spike Solution. Begynde at eksperimentere med implementering af en prototype (Spike Solution, http://www.extremeprogramming.org/rules/spike.html) som løser nogen af kerneproblemerne.
  5. Dokumenter kort i gruppens wiki-artikel. (Ikke oprettet endnu, men kommer snart! ...er nu på plads, se nedenfor.)

Arbejdsgrupper[edit]

Gruppenr: Navn1, Navn2, Navn3, ...

POV-Ray, Python og modulet Visual og Blender med Python, 2012-09-11, Gkb[edit]

Afprøv de tre værktøjer som beskrevet nedenfor, og lav et lille notat på dit StudieWeb om oplevelsen.

POV-Ray[edit]

Dovnload og installer og afprøv lidt POV-Ray fra http://www.povray.org/.

  • Brows deres Hall Of Fame, http://hof.povray.org/
  • Lav en ny fil og brug Insert - Scene templates - Basic scene til at indsætte koden for en scene.
  • Gem filen med navnet basic_scene.pov.
  • Render filen med Alt+G eller ved at trykke på Run-knappen.
  • Prøv forskellige størrelser for det renderede billed.
  • Prøv at flytte kuglen.
  • Prøv at flytte kameraet.
  • Prøv at tilføje en boks (box) til scenen.
  • Prøv noget andet...

Nogle kommentarer, tilføjet efter modulet[edit]

Klassen renderede en kugle og en boks blive i flere forskellige opløsninger (resolutions). Det var standard scriptet Basic scene som vi brugte som udgangspunkt for vores udforskning af mulighederne i POV-Ray.

Her er nogle skærmbilleder, vel at mærke lavet efter modulets afslutning, hvor jeg har forsøgt at rekonstruere lidt situationen. Jeg fjernede en del af koden, for at gøre det lidt mere tydeligt hvad virkelig behøves til at definere en scene. Og så lavede vi en hurtig animation, altså vi renderede 100 billeder og lavede dem om til en video vha. Smacker og Bink fra http://radgametools.com (gratis og godt, men ikke frie værktøjer!).

http://rtgkom.dk/~gkb/billeder/povray_hall_of_fame_01_compression_level_9_size320x256.png http://rtgkom.dk/~gkb/billeder/povray__basic_scene__compression_level_9_size320x256.png http://rtgkom.dk/~gkb/billeder/povray__basic_scene_forenklet_og_klargjort_til_animation__compression_level_9_size320x256.png
Klik på billederne til at få 1280x1024 pixel versionen af billederne.

Her er koden for den oprindelige basic_scene.pov, den forenklede basic_scene_forenklet_og_klargjort_til_animation.pov og ini-filen basic_scene_forenklet_og_klargjort_til_animation.ini, altså hovedprogrammet som styrer renderingen af de forskellige frames.

basic_scene.pov basic_scene_forenklet_og_klargjort_til_animation.pov basic_scene_hovedprogram_for_en_lille_animation.ini

<source lang="povray"> // Persistence of Vision Ray Tracer Scene Description File // File: ?.pov // Vers: 3.6 // Desc: Basic Scene Example // Date: mm/dd/yy // Auth: ? //

  1. version 3.6;
  1. include "colors.inc"

global_settings {

 assumed_gamma 1.0

}

// ----------------------------------------

camera {

 location  <0.0, 0.5, -4.0>
 direction 1.5*z
 right     x*image_width/image_height
 look_at   <0.0, 0.0,  0.0>

}

sky_sphere {

 pigment {
   gradient y
   color_map {
     [0.0 rgb <0.6,0.7,1.0>]
     [0.7 rgb <0.0,0.1,0.8>]
   }
 }

}

light_source {

 <0, 0, 0>            // light's position (translated below)
 color rgb <1, 1, 1>  // light's color
 translate <-30, 30, -30>

}

// ----------------------------------------

plane {

 y, -1
 pigment { color rgb <0.7,0.5,0.3> }

}

sphere {

 0.0, 1
 texture {
   pigment {
     radial
     frequency 8
     color_map {
       [0.00 color rgb <1.0,0.4,0.2> ]
       [0.33 color rgb <0.2,0.4,1.0> ]
       [0.66 color rgb <0.4,1.0,0.2> ]
       [1.00 color rgb <1.0,0.4,0.2> ]
     }
   }
   finish{
     specular 0.6
   }
 }

} </source>

<source lang="povray">

  1. include "colors.inc"

camera {

 location  <0.0, 0.5, -4.0>
 look_at   <0.0, 0.0,  0.0>

} sky_sphere {

 pigment { color Red }

} light_source {

<-30, 30, -30>           // light's position (translated below)
 color rgb <1, 1, 1>  // light's color

} plane {

 y, 0
 pigment { color rgb <0.7,0.5,0.3> }

} sphere {

 <1*clock, 0,0>, 1
 pigment { color rgb <1*clock,1,1> }

} </source>

<source lang="povray"> Input_File_Name=basic_scene_forenklet_og_klargjort_til_animation.pov Initial_Frame=1 Final_Frame=100 Initial_Clock=0 Final_Clock=1 </source>

En lille tabel med en række og to kolonner!

Python og modulet Visual[edit]

Installer Python, hvis du ikke allerede har det, og modulet Visual fra http://www.vpython.org/, og

  • lav en scene med en kugle.
  • Zoom ind og ud i billedet med musen.
  • Tilføj tærnet flade under kuglen.

Nogle kommentarer, tilføjet efter modulet[edit]

De fleste fik vist lavet kuglen og prøvede at navigere lidt med musen. Nogle havde problemer med at installere modulet Visual for deres Python 2.7.3. Evt. pga. at Visual kræver 2.7.2? Er der nogen som har testet dette ordentligt?

Blender med Python[edit]

Installer Blender og prøv nogle kommandoer i Python shellen, og kopier så et det første script fra den sidste link nedenfor og kør det fra tekst editoren i Blender.

Nogle kommentarer, tilføjet efter modulet[edit]

Vi gennemgik en meget hurtig, ca. 10 min, demonstration af hvordan man kan bruge nogle få API kald i Python consolen inde i Blender, samt hvordan man kan eksekvere et script fra Text Editoren i Blender. Vi startede med at downloade og installere en ny version af Blender, version 2.63.0, fordi der er for nylig lavet ret store ændringer på Blender og Python API'en i Blender, -nu kan man vistnok med et Python program styre eller udføre de samme eller de fleste af de operationer som man kan udføre med musen og tastaturet. Og så er de to ovenfor linkede guides til consolen og editoren jo lavet til version 2.6.

Her er to skærmbilleder, vel at mærke lavet efter modulets afslutning, hvor jeg har forsøgt at rekonstruere lidt situationen, både når vi legede med consolen og editoren.

http://rtgkom.dk/~gkb/billeder/blender_python_console__compression_level_9_size320x256.png http://rtgkom.dk/~gkb/billeder/blender_text_editor__compression_level_9_size320x256.png
Klik på billederne til at få 1280x1024 pixel versionen af billederne.

Afrunding ved heltalsdivision og typekonvertering med float(), 2012-09-03, Gkb[edit]

I plemummødet (ca. 10 min) i begyndelsen af modulet satte vi fokus på afrunding ved division med hele tal, altså integers.

Begreberne operand, operator, expression, evaluation og value blev defineret på tavlen og brugt i diskussionen. Vi diskuterede følgende eksempler på tavlen:

  • 2 + 2 som evalueres til 4
  • 2 / 1 som evalueres til 2
  • 3 / 1 som evalueres til 3
  • 3 / 2 som evalueres til 1
  • 3 / 2.0 som evalueres til 1.5
  • 3.0 / 2 som evalueres til 1.5
  • 3. / 2 som evalueres til 1.5

Og vi testede følgende eksempler i Python shell'en på projektoren:

>>> 3/1
3
>>> 3/2
1
>>> 3/2.
1.5
>>> 8
8
>>> float(8)
8.0
>>> float(3)/2
1.5

Derefter var det individuelt arbejde med afsnit 3, om funktioner, i lærebogen. Se gerne http://www.openbookproject.net/thinkcs/python/english2e/ch03.html.

Python og Blender = 3D grafik!?[edit]

Vi begynder næste gang med en lille øvelse i at programmere (styre) Blender med Python. Forvent ikke for meget, det er en del som skal læres før vi kan lave smarte animationer i Blender med Python.

Formålet med denne øvelse er at se konkret på et eksempel hvor Python anvendes i en "seriøs sammenhæng". Skim følgende artikler inden vi mødes næste gang:

Bemærk at der er mange gode tilbud om vejledning på nettet, men vi prøver først at bruge den mest autentiske, nemlig den som findes på http://blender.org.

Syntax Error, Runtime Error og Semantic Error, og funktioner, 2012-08-31, Gkb[edit]

I plenummødet (ca 10 min) i begyndelsen af modulet satte vi fokus på de tre typer af fejl som kan opstå når vi interpreterer, kompilerer og kører programmer, menlig syntax, runtime og semantiske fejl. Se nærmere i kapitel 1 i lærebogen, http://www.openbookproject.net/thinkcs/python/english2e/ch01.html.

Resten af modulet blev brugt til individuelt arbejde med teksten og øvelserne i lærebogen, og i den sammenhæng har jeg et par kommentarer:

  • Brug ikke IDLE, indtil videre, til at editere og eksekvere dine eksperimenter på Python's prompt eller til at editere dine scripts. Teksten og øvelserne antager at du bruger Python interpreteren fra kommandoprompten, altså fra en terminal/shell. Og at du anvender en almindelig programeditor til at lave dine scripts.
  • Funktioner. Nu er flere af eleverne på holdet begyndt på afsnittet om funktioner. Bemærk specielt begreberne:
    • Parameter,
    • parameter list og
    • local variable
    • global variable
    • return value

Som lidt perspektivering så diskuterede vi at Python er indbygget i Blender og at man altså både kan lave bokse (cubes) og flytte dem med Python scripts. Vi diskuterede om vi skulle snart se om vi kan lave lidt 3D grafik med Python og Blender. Vi aftalte at vente til alle har arbejdet med kapitel nr. 3 som handler om funktioner.

Velkommen til Programmering C, 2012-08-16, Gkb[edit]

Velkommen til faget Programmering C. I grove træk skete følgende i holdets første modul:

  • Diskussion i plenum om faget.
  • Demonstration af rendering med POV-Ray.
  • Installering af Python og arbejde med lærebogens første kapitel

Diskussion i plenum om faget[edit]

Diskussion i plenum om faget, værktøjer (tools) og lærebogen. Vores primære værktøjer i faget bliver:

  • Programmeringssproget Python (version 2.7.3 fra http://python.org)som Guido van Rossum har lavet og det
  • integrerede udviklingsmiljø IDLE som følger med den officielle version af Python, samt
  • online-lærebogen "How to Think Like a Computer Scientist, Learning with Python" af Jeffrey Elkner, Allen B. Downey, and Chris Meyers (http://www.openbookproject.net/thinkcs/python/english2e/)

Vi vil også bruge andre værktøjer, og der vil være mulighed for individuelle valg af værktøjer i nogle opgaver og projektforløb. Som et eksempel på et værktøj af en lidt anden type end Python blev POV-Ray, http://www.povray.org/, demonstreret på projektoren.

Demonstration af rendering med POV-Ray[edit]

Vi så på projektoren (altså på væggen) hvordan en 3D matematisk model (scene) med en boks og en kegle kan bygges op i POV-Ray og hvordan programmet kan bruges til at rendere (fremstille, lave) et 2D billed af denne 3D model. Vi lavede altså et lille program i POV-Ray's eget programmeringssprog til at løse denne opgave. Programmet så sådan ud.

#version 3.6;

camera {
  location  <5,5,5>
  look_at   <0,0,0>
}

light_source {
  <20,20,20>       // light's position
  color rgb <1, 1, 1>  // light's color
}            

box {
  <0,0,0>, <1,3,2>  
  pigment {color <1,1,0> } 
}                            
                             
cone{
  <0,0,0>, 2, <0,5,0>, 0    
  pigment {color <1,1,1> } 
}                             

Installering af Python og arbejde med lærebogens første kapitel[edit]

Vi installerede Python 2.7.3 fra http://www.python.org/ og begyndte at læse lærebogen og lave de små øvelser som beskrives i teksten i kapitel 1.

I den sammenhæng viste det sig at vi har behov for at kunne anvende nogle DOS kommandoer på/i den såkaldte kommandoprompt (shell) i Windows, for at kunne starte Python:

  • cd \
  • dir
  • cd Python27
  • dir

Og så kunne vi starte Python.

For at gøre det muligt for Windows at finde python.exe, når vi ikke er i C:\Python27, kan vi tilføje vejen til programmet til systemets (Windows) PATH variabel. Husk at lukke shell'en (kommandoprompten) og starte den igen, ellers har denne ændring ingen effekt.

Det viste sig også at det kan give problemer at lade Google oversætte lærebogens websider til dansk. Læs helst bogen på engelsk! Hvis I bruger automatisk oversættelse, så ændres ofte første bogstav i kommandoerne i Python programmer til et stort bogstav, og det fører typisk til en syntax fejl (syntax error), som så kan blive lidt svær at forstå og rette.