#ubuntu-nl-mwanzo-klas 2011-04-07
<leoquant> hi  niekie
<leoquant> ik heb me eens  ingelezen in ca cert, maar ik begrijp niet welk voordeel ik zou kunnen hebben om erin te participeren, het is een soort web of trust systeem?
<niekie> leoquant: het is een certificerende authoriteit gebaseerd op web-of-trust inderdaad.
<exalt> je mag hier niet praten niekie
<exalt> van leoquant
<niekie> exalt: waarom stelt hij mij hier dan een vraag? :)
<leoquant> niekie bedankt
<leoquant> exalt
<exalt> ja leoquant :p
<leoquant> tuurlijk wel ã
<leoquant> en web of trust was ooit een idee van thawte sec.?
<niekie> Het web-of-trust idee bestaat volgens mij al een hele tijd, maar ik heb daar mij niet zo in verdiept.
<niekie> Zie ook PGP/GnuPG. :)
<leoquant> maar wanneer jij iemand certificeert is die partij te vertrouwen
<leoquant> want jij bent een assurer en bent door een aantal processen gegaan
<leoquant> ik neem aan in het zakelijkle circuit? op juist opensource?
#ubuntu-nl-mwanzo-klas 2011-04-09
<leoquant> sst
<leoquant> zo
<leoquant> de negende cursus
<commandoline> goed, we gaan wel beginnen.
<commandoline> welkom bij de -volgens mijn administratie- negende pythonles!
<commandoline> goed, laten we beginnen met het huiswerk
<commandoline> ten eerste had ik gevraagd of iedereen http://paste.ubuntu.com/588654/ begreep
<commandoline> het belangrijkste verschil met eerdere programma's is dat hier het 'hoofdprogramma' in een class is verpakt
<commandoline> het programma wordt uitgevoerd door de voer_uit()-method aan te roepen
<commandoline> en dat gebeurt onderin:
<commandoline> if __name__ == "__main__":
<commandoline> 	adresboekProgramma = AdresboekProgramma()
<commandoline> 	adresboekProgramma.voer_uit()
<commandoline> de rest is wel besproken van dat voorbeeld eerder, dus ik neem aan dat jullie daar allemaal wel uitkomen.
<commandoline> ok, dan gaan we over naar de tweede opdracht: galgje!
<commandoline> ten eerste: heeft iemand daar vragen over?
<commandoline> ok, ik zal jullie eerst even een relatief simpele uitwerking laten zien
<commandoline> en daarna een waar kunstwerk gemaakt door CasW :)
<commandoline> http://paste.ubuntu.com/591810/
<commandoline> jullie zien bij die link eerst de Word-class van vorige week
<commandoline> daarna wordt een woord gekozen om te raden
<commandoline> dat in de code zetten ('hardcoden') is natuurlijk niet zo slim
<commandoline> maar het is wel simpel
<commandoline> het alternatief zou zijn om de gebruiker te vragen een woord in te vullen.
<commandoline> goed, we gebruiken hier in het programma een list met daarin allemaal strings van 1 teken
<commandoline> standaard zijn die tekens '_'
<commandoline> maar gaandeweg veranderen ze in letters die geraden zijn
<commandoline> het aanmaken van die list gebeurt op de regels 39-41
<commandoline> daarna start het spel
<commandoline> (de while loop)
<commandoline> er wordt altijd eerst de uitvoer opgebouwd:
<commandoline> eerst worden alle letters weergeven
<commandoline> en daarna wordt de galg getekend, als er een bepaald aantal fouten is gemaakt
<commandoline> text += " _________     \n" if woord.aantal_fouten > 0 else "\n"
<commandoline> daar staat hetzelfde als:
<commandoline> if woord.aantal_fouten > 0:
<commandoline>     += " _________     \n"
<commandoline> else:
<commandoline>     text += "\n"
<commandoline> en ik ben het woord 'text' voor die eerste keer vergeten
<commandoline> (19:42:39) FOAD: Je bouwt dus elke keer "text" opnieuw op, ok.
<CasW> Ja
<CasW> (Sorry voor de late reactie)
<commandoline> ok, als dat gebeurd is, wordt gekeken of er al teveel fouten zijn gemaakt.
<commandoline> (19:44:42) hannie: Ik begrijp de 3 streepjes in het midden niet. Dat zijn toch 3 fouten
<CasW> Welke 3 streepjes bedoel je precies?
<CasW> (19:45:21) hannie: armpje, buikje, armpje
<CasW> Ja, het galgje wordt per 'lijn' getekend
<CasW> *nee dus
<CasW> Dat is dus een fout
<commandoline> de galg wordt hier van boven naar onder getekend, draai het programma maar eens, dan zie je het vanzelf
<commandoline> ok, er wordt daarna dus nagegaan of er al teveel fouten (>6) zijn gemaakt
<commandoline> zoja, dan heb je verloren en stopt de while loop
<commandoline> daarna wordt een menu weergeven
<commandoline> dat afhankelijk van de keuze v/d gebruiker een letter laat raden, een woord, of het spel stopt
<commandoline> (ja, je kan stoppen als je dik aan het verliezen bent :P)
<commandoline> maar goed, die opties worden gewoon afgehandeld met behulp van de class
<commandoline> 		locaties = woord.raad_letter(letter)
<commandoline>  		for locatie in locaties:
<commandoline>  			geraden[locatie[0]] = locatie[1]
<commandoline> is nog wel interessant
<commandoline> daar gebruiken we de eigenschap dat raad_letter het volgende teruggaf:
<commandoline> [positie, letter]
<commandoline> ok, is dit voorbeeld dan duidelijk?
<commandoline> mooi, zoals zolangzamerhand wel duidelijk is heeft CasW aan een andere uitwerking gewerkt.
<commandoline> http://www.technotaal.nl/qhangman/qhangman.tar.gz
<commandoline> let wel: je hebt het pakket 'python-qt4' nodig
<CasW> Omdat ik hem nog niet heb verwerkt tot een .deb, moet je die dus zelf installeren
<CasW> (.deb komt er wel nog aan)
<commandoline> maar dat is niet zo moeilijk:
<commandoline> gewoon het bestand uitpakken en hangman.py starten
<CasW> Dat is dus het spel starten
<CasW> Niet PyQT installeren, dat is gewoon sudo apt-get install python-qt4
<commandoline> ok, jullie kunnen het rustig bekijken, in de tussentijd ga ik verder
<commandoline> verdere uitleg over QHangman volgt in -mwanzo
<commandoline> ok, ik wil jullie vandaag nog wat nieuws uitleggen.
<commandoline> het gaat om een onderdeel van OOP:
<commandoline> inheritance (overerving)
<commandoline> je kan het gebruiken om classes uit te breiden.
<commandoline> bijvoorbeeld:
<commandoline> je hebt een class die bijna alles doet wat je wilt
<commandoline> maar Ã©Ã©n method ontbreekt
<commandoline> bijv. bij een list, je zou kunnen denken aan 'randomItem()'
<commandoline> je kan dan de complete list-class herschrijven
<commandoline> maar dat is veel te veel werk
<commandoline> in plaats daarvan kan je ervoor kiezen om een nieuwe class te maken die overerft van 'list'
<commandoline> goed, ander voorbeeld:
<commandoline> je hebt een voertuig
<commandoline> ieder voertuig kan bijv. bewegen
<commandoline> als je nou zowel een fiets als een auto zou willen programmeren
<commandoline> dan kan je ervoor kiezen om de functionaliteit die het bewegen regelt in een class Voertuig te stoppen
<commandoline> waarvan zowel Auto als Fiets overerven, zodat je geen dubbele code schrijft.
<commandoline> duidelijk tot zover?
<commandoline> http://typewith.me/ep/pad/view/ro.W-w-q$ggIak/latest
<commandoline> goed, laten we dat voorbeeld eens in code omzetten
<commandoline> ten eerste maken we een class aan
<commandoline> aangezien een voertuig kan bewegen, wil ik dat het ergens staat zodra het geÃ¯nitialiseerd is.
<commandoline> daarom heb ik de mogelijkheid gegeven om een x en y coÃ¶rdinaat te geven.
<commandoline> goed, zoals ik al eerder zei, ieder voertuig kan bewegen.
<commandoline> dus we kunnen hem een 'vooruit'-method geven.
<commandoline> ok, ik houd het even simpel en laat eigenschappen als 'richting' even weg.
<commandoline> vooruit doet niks anders dan een bepaalde afstand afleggen, opgeteld bij laten we zeggen x.
<CasW> (20:09:10) FOAD: Wat doet aantal_vakjes nu?
<CasW> Dat zegt hoeveel vakjes hij in de x-richting moet gaan
<commandoline> scherp, FOAD
<CasW> *hoeveel eenheden
<commandoline> ik maak een foutje :(
<CasW> Correctie, nÃº zegt die dat
<commandoline> goed, genoeg over een voertuig
<commandoline> laten we nu een fiets gaan maken.
<commandoline> ok, het idee is hier dat je een versnelling kan opgeven aan een fiets
<commandoline> en dat de viets afhankelijk van die versnelling een verschillend aantal hokjes opschuift bij 1x trappen.
<commandoline> begrijpt iedereen ongeveer wat hier gebeurd?
<commandoline> *gebeurt
<CasW> *fiets
<commandoline> hmm, ik ben niet helemaal wakker geloof ik :P
<leoquant> gaat goed hor!
<leoquant> o
<commandoline> ok, volgende voertuig, idd
<commandoline> (reactie op: (20:13:46) FOAD: En nu komt er een ander voertuig?)
<commandoline> goed, een auto moet zich aan een snelheidslimiet houden.
<commandoline> dat betekent dat als vooruit() wordt aangeroepen op een auto, dat die niet sneller dan de maximumsnelheid gaat, ondanks het aantal_vakjes dat is opgegeven.
<commandoline> (20:16:02) FOAD: Zou fiets.versnelling niet een default waarde moeten hebben?
<CasW> Je kunt inderdaad zeggen dat 'ie een default waarde heeft, dan doe je:
<CasW> def __init__(self, versnelling = 1)
<CasW> Bijvoorbeeld
<commandoline> FOAD: duidelijk?
<commandoline> ok, verder met de auto
<commandoline> hoewel, ik ben nog wat bij de Fiets vergeten
<commandoline> de __init__ daarvan moet de __init__ van Voertuig aanroepen
<commandoline> anders wordt self.x niet op een bepaalde waarde geset.
<commandoline> (20:18:41) exalt: moet het gewicht / bouw / materiaal keuze van de fiets niet ook iets invloed hebben over de snelheden?
<commandoline> (20:18:59) CasW: Dan moet je nog weer meer toevoegen aan die fiets
<CasW> Maar dan heb je alweer een ander soort fiets
<CasW> Dus dan doe je bijvoorbeeld class Mountainbike(Fiets)
<commandoline> dat is inderdaad een mogelijkheid
<commandoline> daarnaast kun je eigenlijk nooit alle eigenschappen van een object overnemen
<commandoline> sommige zijn ook niet relevant
<commandoline> je implementeert alleen wat je nodig hebt.
<commandoline> duidelijk, exalt?
<commandoline> in de tussentijd: ik heb zoals jullie hebben gezien op regel 22 gezorgd dat de __init__ van Voertuig aangeroepen.
<commandoline> waardoor de code weer werkt.
<commandoline> ok, nu de auto implementeren
<commandoline> ok, duidelijk wat ik tot nu toe allemaal heb getypt?
<CasW> self.vooruit
<commandoline> en ook hoe je het moet gebruiken?
<CasW> Niet Voertuig.vooruit
<commandoline> CasW: nee, want dan roept hij zichzelf aan
<commandoline> (20:25:42) FOAD: Ja.  Ik moet het nog in detail bestuderen, maar dat inheritance concept is leuk hoor.
<commandoline> het is een leuk concept, maar zorg wel dat je het alleen toepast als het echt nuttig is
<CasW> En bij Fiets dan? ;)
<commandoline> CasW: daar roept de method 'trap' de method 'vooruit' aan
<commandoline> in dat geval wordt de method niet opnieuw geimplementeerd
<CasW> Och ja, nu zie ik het pas, excuses
<commandoline> inheritance gebruiken om hele abstracte objecten te maken die amper wat doen op zichzelf heeft niet altijd evenveel nut.
<commandoline> ok, verder nog vragen?
<commandoline> goed, tijd voor het huiswerk voor de volgende keer dan
<commandoline> -- installeer: pyqt4 (python library) en laby (programmeerspelletje)
<commandoline> --- sudo apt-get install sudo apt-get install python-qt4 laby
<commandoline> -- schrijf de class die beschreven wordt bij deze link, op de plek van het commentaar:
<commandoline> --- http://paste.ubuntu.com/591811/
<commandoline> -- kijk hoe ver je kan komen bij het spel 'laby' (selecteer als programmeertaal Python). (Toepassingen > Spelletjes > Logica > Laby)
<commandoline> (20:30:24) CasW: Eenmaal sudo apt-get install
<commandoline> (20:30:28) CasW: Niet tweemaal
<commandoline> sudo apt-get install python-qt4 laby
<commandoline> wordt het dan
<commandoline> goed, succes allemaal
<commandoline> CasW, StefandeVries (neem ik aan) en ik zijn vaak in -mwanzo of een ander ubuntukanaal om vragen te beantwoorden
<commandoline> en ik blijf nu ook bereikbaar voor vragen
<commandoline> oja, je mag proberen om de classes die we hebben gemaakt te gebruiken
<commandoline> mocht je dat willen (en dan zie je direct of er nog fouten in zitten, ik heb dit nl. uit het hoofd getypt)
<commandoline> tot volgende week!
<commandoline> (dan trouwens waarschijnlijk vanaf de Ubuntu Jam in Burgum!)
<leoquant> commandoline, en CasW bedankt weer!
<commandoline> graag gedaan leoquant, jij ook bedankt weer :)
* ChanServ changed the topic of #Ubuntu-nl-mwanzo-klas to: Zaterdag 16-04-11 19.30-20.30 workshop Python (10):  #Ubuntu-nl-mwanzo-klas|  Info: http://wiki.ubuntu-nl.org/community/mwanzo/Workshop/BasiscursusPython| Leiding: commandoline en stefandevries| Logs op http://irclogs.ubuntu.com |Let ook op eventueel andere workshops| Alle cursisten join ook: #ubuntu-nl-mwanzo, daar kun je vragen stellen aan de workshopleiders.
