Vorige week mochten we met de steun van JCW (Jeugd, Cultuur en Wetenchap) en de KU Leuven voor het eerst een hele kampweek inrichten. Een eindje terug bleek immers dat JCW met een gat in hun line-up zat: na vele jaren succesvolle programmeerkampen, had de verantwoordelijke vrijwilliger er dit jaar geen tijd meer voor. We stelden daarom een combinatie voor tussen programmeren, wiskunde en kunst. Zo konden we onze passie voor wiskunde en hun dubbele doelstelling van cultuur en wetenschap een mooi plekje geven.
In deze blog vind je een fotoverslag van de week. Voor de geïnteresseerden voegen we ook hier en daar een zoekterm of kort woordje uitleg toe. We hebben er echter een hele week mee gevuld, dus alles helemaal uitleggen zou deze blogpost veel te lang maken. We houden de diepgaandere uitleg dan ook graag voor een andere keer.
Om vlot mooie kunstwerken te programmeren, besloten we om met Processing te werken. Net zoals Arduinocode een microcontroller aanstuurt met C++ die wat uitgebreid werd om simpelere code te kunnen schrijven, tekent Processing een canvas vol met wat je in (ietwat vereenvoudigde) Javacode schrijft. Door allerlei coördinatenberekeningen en details rond grafische interfaces samen te vatten in leesbare methodes — zoals square(150, 20, 40) voor een vierkant op positie (150, 20) met een zijdelengte van 40 pixels — liet deze taal ons toe om al op dag één aan het tekenen te gaan.
Na dit creatieve opwarmertje gingen we na de middag even terug naar de basics: lussen en condities. Die simpele concepten komen in zowat elke programmeertaal terug en zouden we de rest van de week veelvuldig benutten. Een simpel schaakbord programmeren was voor sommigen echter herhaling, dus besloten ze om er allerhande creatieve kleuringen aan te geven.
Om de eerste dag af te sluiten, tekenden we met deze nieuwe programmeerskills alvast een eerste wiskundig interessant prentje: door punten gelijk verspreid op een cirkel te zetten, en dan het 1ste punt met het 2de te verbinden, het 2de met het 4de, het 3de met het 6de … ontstaat een cardioïde. Nog voor iedereen klaar was, experimenteerden de eersten al met andere formules en parameters, en zo eindigden we dag één met een mysterie/cliffhanger.
Tegen de volgende ochtend viel onze spreekwoordelijke euro dat er niet zomaar een y-coördinaat gekozen werd, maar dat die steeds 0 was, waardoor alle “foute” punten op dezelfde middenlijn vielen. Deze verklaring maakte meer experimenteren natuurlijk niet minder interessant en al snel stonden de schermen vol leuke kunstwerkjes in allerhande kleuren.
Om te vermijden dat die mooie kunstwerkjes in de digitale vergetelheid zouden zinken, lieten we de ogen even rusten en hielden we een knutselpauze. Hoewel hier een heel andere soort nauwkeurigheid voor nodig was, werd er toch ook enthousiast aan gewerkt en kon iedereen naar huis met mooie buttons en wenskaartjes.
Daarna gooiden we het helemaal de andere kant uit met moiré-effecten, die net het leukst zijn wanneer je er actief mee kan interageren. Niet om uit te printen dus, maar als je ook even wil proberen kan je op deze blogpost enkele gelijkaardige interactieve elementen uittesten.
Na een middagpauze met volgens sommigen te veel en anderen dan weer te weinig wiskundepraat … was het tijd voor een beetje (georganiseerde) chaos. Door willekeurige hoekpunten van een figuur te kiezen en er een kleine berekening mee te maken (bijvoorbeeld het midden nemen t.o.v. een vorig punt) kun je immers allerhande patronen tevoorschijn toveren.
In groot contrast t.o.v. maandag, waar amper een woord gezegd werd door de deelnemers, werden de geziene tools op dinsdag ook voor een ander soort chaos ingezet. Met kleuren, animatie en willekeur op zak, verschenen plots allerhande flikkerende constructies op sommige schermen, tot groot vertier en/of verzucht van anderen. We zullen de lezer van dit soort chaos sparen.
Op woensdag gingen we opnieuw spelen met zowel willekeur als structuur. Een rooster vol willekeurig georiënteerde tegeltjes lijkt haast te simpel om interessant te zijn, maar toch hoorden we heel wat hersengekraak om al dat verschuiven, draaien en herschalen in de juiste volgorde toe te passen. Bovendien zijn de resultaten best intrigerend.
Na al dit hersenkraken was het tijd voor een sportieve pauze met lasergeweertjes … althans eenmaal iedereen zijn theorie had geformuleerd over hoe die geweertjes precies registreerden dat je geraakt werd. De bomen op de campus zorgden voor leuke verstopplekjes en ondanks het warme weer werd er heel wat gelopen.
Daarna sloten we de dag moe maar voldaan af, met nog enkele projectjes rond spiralen en phyllotaxis (hoe planten hun blaadjes verspreiden om zoveel mogelijk zonlicht op te vangen).
Op dag vier begonnen we de dag door zelf even in de huid van onze computer te kruipen. Alvorens turtle graphics te gaan implementeren, speelden we zelf even voor schildpad. De tafels en stoelen die we doorheen de week het hele lokaal rond achterlieten, zorgden voor een heus hindernissenparcours eens je een blinddoek opzette. Duidelijke instructies bleken een must.
De instructies “Ga 5 stappen vooruit”, “Draai naar links”, … vertaalden we daarna in methodes zoals forward(5), turn(90), … voor de virtuele schildpadden die even later over het scherm raceten.
We genoten ook even van het mooie weer buiten, op weg naar een ijsje (JCW trakteerde voor hun 25ste verjaardag, en tegen ijsjes zeggen wij natuurlijk nooit nee). De methodes turtle.forward(), turtle.turn(), … waar we zopas nog serieus mee bezig waren, zorgden tijdens het wandelen voor pakken entertainment. De voorbijstaanders keken geboeid toe hoe we elkaar instructies zoals “Jens punt spring!” naar elkaar riepen of daarop reageerden met syntax errors, onbekende methodes of overflows — de excuses om een instructie niet op te volgen waren zowaar even creatief als de instructies zelf.
Voor nog coolere resultaten zoals deze fractalen, leerden we daarna ook nog over recursie, over Lindenmayersystemen en hoe je in Processing met letters en woorden kan werken.
De week vloog voorbij: algauw was het al vrijdag en zat het kamp er bijna op. We gingen nog met een laatste nieuw thema aan de slag: cellulaire automaten.
Wel, het voorlaatste thema … terwijl een deel van de groep andere gelijkaardige modellen zoals Game of Life verkenden, vatten anderen de uitdaging aan om de bekende Julia– en Mandelbrotfractalen te begrijpen en zelf te implementeren. Gezien de vereiste voorkennis was dit niet voor iedereen haalbaar, maar op een creatief kamp vol wiskunde en code kunnen deze klassiekers natuurlijk ook niet ontbreken.
Doorheen de week konden de verhalen over Alan Turing op interesse rekenen, de wiskundige die de grondslagen van de computerwetenschappen legde, en daarbij moesten de spellen Turing Tumble en Turing Machine natuurlijk even uitgetest worden. Goedgekeurd? Wel, we hoorden dat meerdere deelnemers al volop aan het nadenken zijn over hun verlanglijstje voor Kerstmis, dus …
En zo werd het dringend tijd om de laatste knutselwerkjes af te maken, en natuurlijk kon een extra spelletje (of twee) geen kwaad.
Maar daarmee zat deze leuke week er echt wel op, dus gingen we met een dubbel gevoel opruimen. Een beetje bijslapen klonk wel aanlokkelijk, maar we misten de verwonderde gezichtjes en hypothetische discussies al. Volgend jaar meer zo’n kampen proberen organiseren dan maar!
Wow, ziet er naar uit dat die gastjes echt een leuk kamp gehad hebben!