| puckipedia | /quit | 17:22 |
|---|---|---|
| leoquant | zo, nu even afwachten of er publiek is deze avond | 18:27 |
| commandoline | Mooi dat jullie er weer allemaal zijn, en welkom bij de 12e pythonles! | 18:31 |
| commandoline | goed, het huiswerk voor vandaag was niet veel | 18:32 |
| commandoline | maar ik wil nog wel even vragen of iemand wat te vragen heeft over tuples, keyword arguments en/of PEP8 | 18:32 |
| commandoline | nou, zo snel zijn we nog nooit klaar geweest met het huiswerk :P | 18:33 |
| StefandeVries | dat moeten we vaker doen :P | 18:33 |
| commandoline | ok, deze les is de laatste les waarin jullie echt nieuwe dingen zullen leren | 18:34 |
| commandoline | maar er is volgende week nog wel les | 18:35 |
| commandoline | dit staat er voor vandaag op het programma: | 18:35 |
| commandoline | - decorators | 18:35 |
| commandoline | - een aantal modules | 18:36 |
| commandoline | te beginnen met decorators, ik wil die uitleggen aan de hand van een voorbeeld. | 18:36 |
| leoquant | hannie> gaan we nog leren webpagina's te maken? | 18:36 |
| StefandeVries | Nee, hannie, dat niet meer. Dat zou te diep gaan voor een beginnerscursus | 18:37 |
| commandoline | maar misschien dat we volgende week wel alvast een tipje van de sluier oplichten. | 18:37 |
| commandoline | http://typewith.me/ep/pad/view/ro.6e1a1ZfrVlf/latest | 18:38 |
| commandoline | ok, jullie zien dat ik een simpele class heb gemaakt | 18:39 |
| commandoline | die class moet een rechthoek voorstellen | 18:39 |
| commandoline | de class heeft twee properties, lengte en breedte, en die kunnen we gebruiken | 18:40 |
| commandoline | handig, maar wat als we oppervlakte willen weten? | 18:40 |
| commandoline | die property zou iedere keer bijgewerkt moeten worden als we lengte of breedte aan zouden passen | 18:41 |
| commandoline | dat is niet erg handig | 18:41 |
| commandoline | een alternatief zou zijn om een method te maken | 18:41 |
| commandoline | iets als: | 18:41 |
| commandoline | verkrijg_oppervlakte() | 18:41 |
| commandoline | het nadeel is dat dat minder 'mooi' staat dan een echte property | 18:41 |
| commandoline | daarvoor is een oplossing, die ik jullie nu ga laten zien. | 18:42 |
| commandoline | goed, ik heb nu een normale method gemaakt, eigenlijk wat ik net beschreef | 18:42 |
| commandoline | nu wil ik er een property van maken | 18:42 |
| commandoline | dat heb ik nu gedaan | 18:43 |
| commandoline | wat er ongeveer gebeurt | 18:44 |
| commandoline | het methodobject 'oppervlakte' wordt door property() omgezet in een object dat zich voordoet als een normale property | 18:44 |
| commandoline | zoals lengte en breedte | 18:44 |
| commandoline | en dat object vervangt dan het oorspronkelijke oppervlakte | 18:44 |
| commandoline | dat maakt mogelijk wat ik nu ga typen. | 18:45 |
| StefandeVries | hannie> de eigenschap is hier dus lengte * breedte? | 18:45 |
| StefandeVries | Inderdaad, hannie | 18:45 |
| commandoline | het resultaat van deze code is '20' en '600' | 18:46 |
| StefandeVries | <Dooitze> Wat doet die property nou? | 18:46 |
| StefandeVries | Die property zorgt ervoor dat je de returnwaarde van de functie als variabele(property) kunt benaderen | 18:47 |
| commandoline | ok, tot nu toe is er nog geen decorator bij betrokken geweest | 18:47 |
| commandoline | we kunnen de regel 'oppervlakte = property(oppervlakte)' vervangen door iets anders | 18:48 |
| commandoline | en dat wordt een decorator genoemd | 18:48 |
| commandoline | en dat is nu gebeurt | 18: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 |
| commandoline | we hadden i.p.v. property ook een andere functie kunnen gebruiken, zoals jullie straks zullen zien | 18:49 |
| commandoline | dat zorgt dan natuurlijk wel voor een ander resultaat. | 18:50 |
| commandoline | ik ga jullie nu een andere veelgebruikte decorator laten zien | 18:51 |
| commandoline | @staticmethod | 18:51 |
| commandoline | een static method is een method (van een class, zoals altijd) die geen 'self' meekrijgt | 18:52 |
| commandoline | en dus niks kan veranderen aan een object | 18:52 |
| commandoline | je kan het wel zien als een functie die aan een class wordt gehangen. | 18:52 |
| commandoline | je hebt om een static method aan te roepen dan ook geen instantie nodig | 18:52 |
| commandoline | goed, een voorbeeldje in het typewith.me bestand | 18:53 |
| commandoline | http://typewith.me/3caWKjndO1 (voor de nieuwkomers) | 18:53 |
| commandoline | wat jullie zien is dat ik twee rechthoeken aanmaak | 18:56 |
| commandoline | en dat ik die vergelijk d.m.v. een static method van het object Rechthoek | 18:56 |
| commandoline | groter() is eigenlijk gewoon een functie, die ik aan Rechthoek heb gehangen omdat hij daar zo goed bij past | 18:57 |
| commandoline | maar hij had er net zo goed naast kunnen staan. | 18:57 |
| commandoline | ok, nog een voorbeeld, een soort 'alternatieve constructor' | 18:57 |
| commandoline | een vierkant heeft gelijke zijden, dus de 'constructor' voor een vierkant heeft maar één argument nodig | 18:58 |
| commandoline | dat wordt vervolgens gewoon 2x doorgegeven aan de échte Rechthoek constructor. | 18:59 |
| commandoline | ok, dat is alles wat ik over decorators en de twee voorbeelden daarvan te melden heb, vragen tot zover? | 19:00 |
| StefandeVries | hannie> Het is duidelijk, maar ik moet er wel mee gaan stoeien | 19:00 |
| StefandeVries | De praktijk is de beste leermeester ;) | 19:00 |
| commandoline | idd :) | 19:01 |
| commandoline | ok, dan gaan we verder naar onderwerp twee van vandaag: modules | 19:01 |
| commandoline | jullie hebben al een aantal modules gezien, maar ik wil jullie er vandaag nog een aantal laten zien | 19:01 |
| commandoline | maar eerst even een linkje: http://docs.python.org/library/index.html | 19:02 |
| commandoline | de documentatie van python voor alle met python meegeleverde modules | 19:02 |
| commandoline | daarin kan je alle functies en classes die ik gebruik uit de python modules vandaag nazoeken | 19:03 |
| commandoline | zodat je precies weet wat ze doen | 19:03 |
| commandoline | ik 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 lezen | 19:03 |
| commandoline | er zijn namelijk veel meer nuttige modules dan ik in een cursus kan laten zien. | 19:04 |
| StefandeVries | we zouden er 2 cursussen mee kunnen vullen :) | 19:04 |
| commandoline | http://paste.ubuntu.com/601417/ | 19:05 |
| commandoline | ik wil de modules van vandaag uitleggen aan de hand van twee voorbeelden | 19:05 |
| commandoline | het eerste voorbeeld haalt de titels van blogartikels van de planet van ubuntu-nl op, en laat die op het scherm zien. | 19:05 |
| commandoline | even wat termen verduidelijken: | 19:06 |
| commandoline | planet van ubuntu-nl: http://planet.ubuntu-nl.org/ | 19:06 |
| commandoline | RSS: een op de taal XML gebaseerde manier om bijv. nieuwsberichten te beschrijven | 19:07 |
| commandoline | de link van de 'RSS feed' van de Ubuntu-NL planet staat hier: http://planet.ubuntu-nl.org/rss20.xml | 19:07 |
| commandoline | als je die opent in je browser krijg je waarschijnlijk een soort grafisch overzicht | 19:08 |
| commandoline | alleen dat krijgen we niet van python als invoer | 19:08 |
| commandoline | wat we te zien krijgen is de broncode van die pagina, en die ziet er zo uit: | 19:09 |
| commandoline | http://paste.ubuntu.com/601419/ | 19:09 |
| StefandeVries | <hannie> Wat betekent de u voor '\n'? | 19:10 |
| StefandeVries | Die u zorgt ervoor dat in welk schrift de website ook zou staan, de '\n' altijd een nieuwe regel is; Chinees, Cyrillisch, etc. | 19:10 |
| commandoline | goed, terug naar het pythonprogramma | 19:11 |
| commandoline | eerst importeren we twee modules: | 19:11 |
| commandoline | - urllib2 | 19:11 |
| commandoline | - xml.dom.minidom | 19:11 |
| commandoline | met de eerste kunnen we documenten van internet (http) ophalen | 19:12 |
| commandoline | bijv. een webpagina, of hier dus, een rss feed | 19:12 |
| commandoline | met de tweede kunnen we xml omzetten in objecten (parsen), en aangezien rss gebaseerd is op xml, kunnen we er ook rss mee lezen | 19:12 |
| commandoline | op regel 4 haal ik m.b.v. urllib2 de pagina op. | 19:13 |
| commandoline | wat die functie teruggeeft is een soort file-object | 19:13 |
| commandoline | ik kan er bijv. .read() op aanroepen om de data in een string te krijgen | 19:13 |
| commandoline | maar dat doe ik niet | 19:13 |
| commandoline | want xml.dom.minidom kan als invoer precies zo'n file object verwerken | 19:13 |
| commandoline | dat gebeurt op regel 7 | 19:14 |
| commandoline | 'dom' is nu een object dat we kunnen gebruiken om de data uit het xml-bestand te lezen | 19:15 |
| commandoline | (dom betekent Document Object Model) | 19:15 |
| commandoline | we halen alle blokken tekst tussen <title></title> op, en dat zijn er meerdere. | 19:15 |
| commandoline | op regel 9 lopen we door al die 'titles' heen | 19:16 |
| commandoline | er zitten een paar titles teveel tussen | 19:16 |
| commandoline | daarom gebruik ik if: | 19:16 |
| commandoline | if title.parentNode.tagName == "item": | 19:16 |
| commandoline | parentNode geeft de 'tag' waar de huidige title in staat | 19:17 |
| commandoline | als je dat niet begrijpt, geen probleem | 19:17 |
| commandoline | ga ervan uit dat het gewoon nodig is hier om alle goede data te krijgen | 19:17 |
| commandoline | als aan die voorwaarde is voldaan, gebeurt het volgende: | 19:17 |
| commandoline | result.append(title.childNodes[0].nodeValue) | 19:17 |
| commandoline | relevant is 'title.childNodes[0].nodeValue' | 19:18 |
| commandoline | dat is een ingewikkelde xml.dom.minidom notatie voor 'geef me alle tekst binnen <title></title>' | 19:18 |
| commandoline | en die tekst (string) wordt dus toegevoegd aan result | 19:18 |
| commandoline | daarna wordt het resultaat alleen nog maar uitgeprint naar de terminal | 19:18 |
| commandoline | vragen over dit programma? | 19:19 |
| commandoline | ok, dan gaan we over naar het huiwerk, daar wil ik nog even wat uitlegtijd bij hebben | 19:20 |
| leoquant | dat kan | 19:21 |
| commandoline | leoquant: bedankt :P | 19:22 |
| commandoline | http://paste.ubuntu.com/601425/ | 19:22 |
| commandoline | * huiswerk | 19:22 |
| commandoline | ik heb jullie hier een kant en klaar pythonprogramma gegeven, dat ik een behoorlijke tijd terug heb geschreven | 19:22 |
| commandoline | het bevat geen commentaar, niet zo netjes. | 19:23 |
| commandoline | nou wil ik jullie vragen om dat te doen, waardoor je begrijpt welke modulefunctie wat doet. | 19:23 |
| commandoline | het voorbeeld maakt gebruik van de sqlite3 module | 19:24 |
| commandoline | met die module kun je een database aanmaken | 19:24 |
| commandoline | een database die je kan benaderen via SQL | 19:25 |
| commandoline | dat is een taal speciaal geschreven voor databases | 19:25 |
| commandoline | die taal is niet moeilijk, maar valt wel buiten deze cursus | 19:26 |
| commandoline | dus daarom zal ik de stukken programma in sql even uitleggen | 19:26 |
| commandoline | CREATE TABLE IF NOT EXISTS books (id INTEGER PRIMARY KEY, title TEXT, writer TEXT) | 19:27 |
| commandoline | betekent '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 |
| commandoline | INSERT INTO books VALUES (null, ?, ?) | 19:27 |
| commandoline | betekent 'stop in de database 'boeken' de data (null, ?, ?)' | 19:28 |
| commandoline | ik zou wel graag willen dat jullie uitzoeken wat die vraagtekens doen. | 19:28 |
| commandoline | want dat is onderdeel van het pythondeel van de opdracht :) | 19:28 |
| commandoline | SELECT * FROM books WHERE title = ? | 19:28 |
| commandoline | geef alle boeken waar de titel ? is | 19:28 |
| commandoline | SELECT * FROM books WHERE writer = ? | 19:29 |
| commandoline | idem, maar dan met de schrijver | 19:29 |
| commandoline | SELECT * FROM books | 19:29 |
| commandoline | geeft alle boeken terug | 19:29 |
| commandoline | ok, daarmee zijn we klaar met de complete basis van python! | 19:30 |
| leoquant | congrats! | 19:30 |
| commandoline | als je met een idee rondliep voor deze cursus van een programma dat je wil schrijven, dan zou ik dat proberen uit te voeren | 19:30 |
| leoquant | en allebei zeeeer bedankt! | 19:30 |
| commandoline | dan kan ik over *2 weken* nog even helpen met een aantal dingen | 19:31 |
| commandoline | als er vragen ontstaan. | 19:31 |
| leoquant | vind het geweldig opgezet | 19:31 |
| commandoline | de volgende (laatste) les is over 2 weken (ondanks wat ik eerder zei) | 19:32 |
| leoquant | ja dat wou ik net nog even vragen..:) | 19:32 |
| commandoline | nog één ding | 19:32 |
| commandoline | (20:28:42) hannie: Moet de uitleg in het Engels? | 19:32 |
| commandoline | die vraag is waarschijnlijk gebaseerd op het feit dat de programma's van vandaag in het Engels zijn | 19:33 |
| commandoline | en de rest in het Nederlands was. | 19:33 |
| commandoline | dat heb ik gedaan om het makkelijker te maken, maar als je Engels kan schrijven (evt. met wat opzoeken), zou ik zeker Engelse programma's schrijven | 19:33 |
| commandoline | het maakt het veel makkelijker om (internationaal) samen te werken aan programma's. | 19:34 |
| commandoline | ok, 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!