/srv/irclogs.ubuntu.com/2011/04/30/#ubuntu-nl-klas.txt

puckipedia/quit17:22
leoquantzo, nu even afwachten of er publiek is deze avond18:27
commandolineMooi dat jullie er weer allemaal zijn, en welkom bij de 12e pythonles!18:31
commandolinegoed, het huiswerk voor vandaag was niet veel18:32
commandolinemaar ik wil nog wel even vragen of iemand wat te vragen heeft over tuples, keyword arguments en/of PEP818:32
commandolinenou, zo snel zijn  we nog nooit klaar geweest met het huiswerk :P18:33
StefandeVriesdat moeten we vaker doen :P18:33
commandolineok, deze les is de laatste les waarin jullie echt nieuwe dingen zullen leren18:34
commandolinemaar er is volgende week nog wel les18:35
commandolinedit staat er voor vandaag op het programma:18:35
commandoline- decorators18:35
commandoline- een aantal modules18:36
commandolinete beginnen met decorators, ik wil die uitleggen aan de hand van een voorbeeld.18:36
leoquanthannie> gaan we nog leren webpagina's te maken?18:36
StefandeVriesNee, hannie, dat niet meer. Dat zou te diep gaan voor een beginnerscursus18:37
commandolinemaar misschien dat we volgende week wel alvast een tipje van de sluier oplichten.18:37
commandolinehttp://typewith.me/ep/pad/view/ro.6e1a1ZfrVlf/latest18:38
commandolineok, jullie zien dat ik een simpele class heb gemaakt18:39
commandolinedie class moet een rechthoek voorstellen18:39
commandolinede class heeft twee properties, lengte en breedte, en die kunnen we gebruiken18:40
commandolinehandig, maar wat als we oppervlakte willen weten?18:40
commandolinedie property zou iedere keer bijgewerkt moeten worden als we lengte of breedte aan zouden passen18:41
commandolinedat is niet erg handig18:41
commandolineeen alternatief zou zijn om een method te maken18:41
commandolineiets als:18:41
commandolineverkrijg_oppervlakte()18:41
commandolinehet nadeel is dat dat minder 'mooi' staat dan een echte property18:41
commandolinedaarvoor is een oplossing, die ik jullie nu ga laten zien.18:42
commandolinegoed, ik heb nu een normale method gemaakt, eigenlijk wat ik net beschreef18:42
commandolinenu wil ik er een property van maken18:42
commandolinedat heb ik nu gedaan18:43
commandolinewat er ongeveer gebeurt18:44
commandolinehet methodobject 'oppervlakte' wordt door property() omgezet in een object dat zich voordoet als een normale property18:44
commandolinezoals lengte en breedte18:44
commandolineen dat object vervangt dan het oorspronkelijke oppervlakte18:44
commandolinedat maakt mogelijk wat ik nu ga typen.18:45
StefandeVrieshannie> de eigenschap is hier dus lengte * breedte?18:45
StefandeVriesInderdaad, hannie18:45
commandolinehet resultaat van deze code is '20' en '600'18:46
StefandeVries<Dooitze> Wat doet die property nou?18:46
StefandeVriesDie property zorgt ervoor dat je de returnwaarde van de functie als variabele(property) kunt benaderen18:47
commandolineok, tot nu toe is er nog geen decorator bij betrokken geweest18:47
commandolinewe kunnen de regel 'oppervlakte = property(oppervlakte)' vervangen door iets anders18:48
commandolineen dat wordt een decorator genoemd18:48
commandolineen dat is nu gebeurt18:48
commandoline@property betekent 'voer op deze method de property functie uit, en sla het resultaat op in de naam van die method'18:49
commandolinewe hadden i.p.v. property ook een andere functie kunnen gebruiken, zoals jullie straks zullen zien18:49
commandolinedat zorgt dan natuurlijk wel voor een ander resultaat.18:50
commandolineik ga jullie nu een andere veelgebruikte decorator laten zien18:51
commandoline@staticmethod18:51
commandolineeen static method is een method (van een class, zoals altijd) die geen 'self' meekrijgt18:52
commandolineen dus niks kan veranderen aan een object18:52
commandolineje kan het wel zien als een functie die aan een class wordt gehangen.18:52
commandolineje hebt om een static method aan te roepen dan ook geen instantie nodig18:52
commandolinegoed, een voorbeeldje in het typewith.me bestand18:53
commandolinehttp://typewith.me/3caWKjndO1 (voor de nieuwkomers)18:53
commandolinewat jullie zien is dat ik twee rechthoeken aanmaak18:56
commandolineen dat ik die vergelijk d.m.v. een static method van het object Rechthoek18:56
commandolinegroter() is eigenlijk gewoon een functie, die ik aan Rechthoek heb gehangen omdat hij daar zo goed bij past18:57
commandolinemaar hij had er net zo goed naast kunnen staan.18:57
commandolineok, nog een voorbeeld, een soort 'alternatieve constructor'18:57
commandolineeen vierkant heeft gelijke zijden, dus de 'constructor' voor een vierkant heeft maar één argument nodig18:58
commandolinedat wordt vervolgens gewoon 2x doorgegeven aan de échte Rechthoek constructor.18:59
commandolineok, dat is alles wat ik over decorators en de twee voorbeelden daarvan te melden heb, vragen tot zover?19:00
StefandeVrieshannie> Het is duidelijk, maar ik moet er wel mee gaan stoeien19:00
StefandeVriesDe praktijk is de beste leermeester ;)19:00
commandolineidd :)19:01
commandolineok, dan gaan we verder naar onderwerp twee van vandaag: modules19:01
commandolinejullie hebben al een aantal modules gezien, maar ik wil jullie er vandaag nog een aantal laten zien19:01
commandolinemaar eerst even een linkje: http://docs.python.org/library/index.html19:02
commandolinede documentatie van python voor alle met python meegeleverde modules19:02
commandolinedaarin kan je alle functies en classes die ik gebruik uit de python modules vandaag nazoeken19:03
commandolinezodat je precies weet wat ze doen19:03
commandolineik raad aan om dat een keertje te doen, zodat je straks ook modules kan gebruiken die ik niet heb uitgelegd door de documentatie ervan te lezen19:03
commandolineer zijn namelijk veel meer nuttige modules dan ik in een cursus kan laten zien.19:04
StefandeVrieswe zouden er 2 cursussen mee kunnen vullen :)19:04
commandolinehttp://paste.ubuntu.com/601417/19:05
commandolineik wil de modules van vandaag uitleggen aan de hand van twee voorbeelden19:05
commandolinehet eerste voorbeeld haalt de titels van blogartikels van de planet van ubuntu-nl op, en laat die op het scherm zien.19:05
commandolineeven wat termen verduidelijken:19:06
commandolineplanet van ubuntu-nl: http://planet.ubuntu-nl.org/19:06
commandolineRSS: een op de taal XML gebaseerde manier om bijv. nieuwsberichten te beschrijven19:07
commandolinede link van de 'RSS feed' van de Ubuntu-NL planet staat hier: http://planet.ubuntu-nl.org/rss20.xml19:07
commandolineals je die opent in je browser krijg je waarschijnlijk een soort grafisch overzicht19:08
commandolinealleen dat krijgen we niet van python als invoer19:08
commandolinewat we te zien krijgen is de broncode van die pagina, en die ziet er zo uit:19:09
commandolinehttp://paste.ubuntu.com/601419/19:09
StefandeVries<hannie> Wat betekent de u voor '\n'?19:10
StefandeVriesDie u zorgt ervoor dat in welk schrift de website ook zou staan, de '\n' altijd een nieuwe regel is; Chinees, Cyrillisch, etc.19:10
commandolinegoed, terug naar het pythonprogramma19:11
commandolineeerst importeren we twee modules:19:11
commandoline- urllib219:11
commandoline- xml.dom.minidom19:11
commandolinemet de eerste kunnen we documenten van internet (http) ophalen19:12
commandolinebijv. een webpagina, of hier dus, een rss feed19:12
commandolinemet de tweede kunnen we xml omzetten in objecten (parsen), en aangezien rss gebaseerd is op xml, kunnen we er ook rss mee lezen19:12
commandolineop regel 4 haal ik m.b.v. urllib2 de pagina op.19:13
commandolinewat die functie teruggeeft is een soort file-object19:13
commandolineik kan er bijv. .read() op aanroepen om de data in een string te krijgen19:13
commandolinemaar dat doe ik niet19:13
commandolinewant xml.dom.minidom kan als invoer precies zo'n file object verwerken19:13
commandolinedat gebeurt op regel 719:14
commandoline'dom' is nu een object dat we kunnen gebruiken om de data uit het xml-bestand te lezen19:15
commandoline(dom betekent Document Object Model)19:15
commandolinewe halen alle blokken tekst tussen <title></title> op, en dat zijn er meerdere.19:15
commandolineop regel 9 lopen we door al die 'titles' heen19:16
commandolineer zitten een paar titles teveel tussen19:16
commandolinedaarom gebruik ik if:19:16
commandolineif title.parentNode.tagName == "item":19:16
commandolineparentNode geeft de 'tag' waar de huidige title in staat19:17
commandolineals je dat niet begrijpt, geen probleem19:17
commandolinega ervan uit dat het gewoon nodig is hier om alle goede data te krijgen19:17
commandolineals aan die voorwaarde is voldaan, gebeurt het volgende:19:17
commandolineresult.append(title.childNodes[0].nodeValue)19:17
commandolinerelevant is 'title.childNodes[0].nodeValue'19:18
commandolinedat is een ingewikkelde xml.dom.minidom notatie voor 'geef me alle tekst binnen <title></title>'19:18
commandolineen die tekst (string) wordt dus toegevoegd aan result19:18
commandolinedaarna wordt het resultaat alleen nog maar uitgeprint naar de terminal19:18
commandolinevragen over dit programma?19:19
commandolineok, dan gaan we over naar het huiwerk, daar wil ik nog even wat uitlegtijd bij hebben19:20
leoquantdat kan19:21
commandolineleoquant: bedankt :P19:22
commandolinehttp://paste.ubuntu.com/601425/19:22
commandoline* huiswerk19:22
commandolineik heb jullie hier een kant en klaar pythonprogramma gegeven, dat ik een behoorlijke tijd terug heb geschreven19:22
commandolinehet bevat geen commentaar, niet zo netjes.19:23
commandolinenou wil ik jullie vragen om dat te doen, waardoor je begrijpt welke modulefunctie wat doet.19:23
commandolinehet voorbeeld maakt gebruik van de sqlite3 module19:24
commandolinemet die module kun je een database aanmaken19:24
commandolineeen database die je kan benaderen via SQL19:25
commandolinedat is een taal speciaal geschreven voor databases19:25
commandolinedie taal is niet moeilijk, maar valt wel buiten deze cursus19:26
commandolinedus daarom zal ik de stukken programma in sql even uitleggen19:26
commandolineCREATE TABLE IF NOT EXISTS books (id INTEGER PRIMARY KEY, title TEXT, writer TEXT)19:27
commandolinebetekent 'maak een database, als die niet al bestaat, waarin ik een boekenverzameling in op kan slaan'19:27
commandoline(zeg maar wat gegevens over de boeken)19:27
commandolineINSERT INTO books VALUES (null, ?, ?)19:27
commandolinebetekent 'stop in de database 'boeken' de data (null, ?, ?)'19:28
commandolineik zou wel graag willen dat jullie uitzoeken wat die vraagtekens doen.19:28
commandolinewant dat is onderdeel van het pythondeel van de opdracht :)19:28
commandolineSELECT * FROM books WHERE title = ?19:28
commandolinegeef alle boeken waar de titel ? is19:28
commandolineSELECT * FROM books WHERE writer = ?19:29
commandolineidem, maar dan met de schrijver19:29
commandolineSELECT * FROM books19:29
commandolinegeeft alle boeken terug19:29
commandolineok, daarmee zijn we klaar met de complete basis van python!19:30
leoquantcongrats!19:30
commandolineals je met een idee rondliep voor deze cursus van een programma dat je wil schrijven, dan zou ik dat proberen uit te voeren19:30
leoquanten allebei zeeeer bedankt!19:30
commandolinedan kan ik over *2 weken* nog even helpen met een aantal dingen19:31
commandolineals er vragen ontstaan.19:31
leoquantvind het geweldig opgezet19:31
commandolinede volgende (laatste) les is over 2 weken (ondanks wat ik eerder zei)19:32
leoquantja dat wou ik net nog even vragen..:)19:32
commandolinenog één ding19:32
commandoline(20:28:42) hannie: Moet de uitleg in het Engels?19:32
commandolinedie vraag is waarschijnlijk gebaseerd op het feit dat de programma's van vandaag in het Engels zijn19:33
commandolineen de rest in het Nederlands was.19:33
commandolinedat heb ik gedaan om het makkelijker te maken, maar als je Engels kan schrijven (evt. met wat opzoeken), zou ik zeker Engelse programma's schrijven19:33
commandolinehet maakt het veel makkelijker om (internationaal) samen te werken aan programma's.19:34
commandolineok, dat was het voor vandaag, tot over twee weken, en bedankt voor jullie komst!19:35
=== ChanServ changed the topic of #ubuntu-nl-klas to: Zaterdag 30-04-11 19.30-20.30 workshop PYTHON: #Ubuntu-nl-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 workshopleider.

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!