Deze bijeenkomst was op zaterdag 18 februari 2017, 's middags van 13:00 tot 17:00 uur in De Hilt in Eemnes.

De gebruikelijke inloop vond plaats in de Eemzaal.

Om 13:30 uur hield HCC!opensource hun Algemene Ledenvergadering in de Driestenzaal.

Daarna hielden wij om 14:30 uur onze jaarlijkse Algemene Ledenvergadering in de Driestenzaal. Meer informatie over deze ALV, zoals de uitnodiging en het verslag, is te vinden op onze website. Gebruik hiervoor het menu Activiteiten, Vergaderingen. Alleen HCC leden kunnen informatie over onze ALV's bekijken, daarom is het nodig om in te loggen.

Na afloop van de ALV hielden we een pauze.

Plenaire sessie

Om 15:30 uur begint de plenaire sessie in de Driestenzaal. Pedro is de gespreksleider. Hij houdt eerst een inventarisatieronde waarbij ieder een onderwerp kan noemen en hoe lang het ongeveer duurt.

Theo vertelt over Requests zoals aangekondigd in de nieuwsbrief van februari. Dit is een Python library waarmee je heel eenvoudig informatie van websites kunt downloaden. Hij gaat dit gebruiken om de webpagina's van de HCC!programmeren website te downloaden. Dan kunnen hieruit de links gehaald worden met Beautiful Soup, wat de vorige keer is besproken. De webpagina's waar deze links naar verwijzen kunnen dan ook gedownload worden. Hiermee kun je een soort van web scraper maken, en een soort lokale kopie van de website maken. Op deze manier kunnen ook de links worden nagekeken. Onze website werkt tegenwoordig met https, een secure verbinding, dat wordt ook ondersteund. Ook webpagina's die met een wachtwoord zijn beveiligd kunnen met Requests worden gedownload. De Requests library biedt nog veel meer mogelijkheden. Meer informatie is te vinden op http://python-requests.org/.

Titus heeft enkele 3D filmpjes gemaakt met OpenGL en Free Basic. Het zijn diverse animaties van lopende figuren. Hij demonstreert de filmpjes op de beamer. De animaties worden apart van de code opgeslagen. De code om de bewegingen te genereren heeft hij zelf geschreven. Hij is bezig om de code over te zetten naar C++. Verder laat hij nog een filmpje zien dat van te voren is berekend. De schaduw wordt automatisch bij de bolletjes in de figuren getekend.

Arjan vertelt over parallel processing. Hij is bezig het C++ AMP boek (http://www.gregcons.com/cppamp/) te lezen. C++ AMP is een portable library van Microsoft waarmee je programma's parallel kunt laten werken. Het zit gratis bij Visual Studio, hij demonstreert dit op de beamer. Hij laat zien hoe je code voor een matrix vermenigvuldiging met deze library gebruikt in Visual Studio. Na het compilerent wordt het programma parallel uitgevoerd op de GPU op de grafische kaart, in meer dan 100 cores tegelijk. De AMP libray werkt met alle verschillende GPU soorten, bijvoorbeeld van AMD. Op zijn laptop kan hij die van Intel en NVIDIA gebruiken, die laatste bestaat uit 2 engines. Debuggen kan niet op de grafische processor, daarvoor kun je een emulator gebruiken, die zit bij de C++ AMP library. Hij demonstreert hoe het vermenigvuldigen van 2 grote matrices van bijvoorbeeld 2000 x 2000 een stuk sneller gaat. Er wordt een speciale array gebruikt, zowel op de gewone CPU als op de GPU. De data wordt dan heel snel heen en weer gekopiƫerd. Het systeem neemt de matrix en de extent, het aantal rijen en kolommen, met de lambda erin. Voor elke dimensie wordt dan 1 core gebruikt. Een loop wordt dan 2000 keer tegelijk uitgevoerd. Een matrix van 2000 x 2000 wordt dan berekend door 4 miljoen threads te starten, allemaal parallel. Het programma wacht met synchronize tot alle threads zijn afgelopen. Met QueryPerfocmanceCounter wordt de tijd opgenomen, het is ongeveer 1000 keer zo snel. Hij laat een voorbeeld test output zien met Init time, Copy time en Kernel time. De Visual Studio Analyser heeft een grafische weergave van de thread informatie. Je kunt markers in je code opnemen die zie je dan in de grafiek terug. Hij heeft nog geen toepassing hiervoor, dit zijn eerste verkenningen. De structuur van een GPU is eenvoudig, een instructie wordt op meerdere cores tegelijk uitgevoerd. Grafische processoren worden ook gebruikt voor berekeningen van sterrenkundigen en voor problemen als zwermintelligentie, zoals het simuleren van een zwerm spreeuwen.

Johan meldt dat hij gaat met Gerard een groep binnen HCC!programmeren beginnen: Programmeertechnieken. Hij kwam Dynamisch programmeren tegen, misschien willen meer mensen hier iets van weten. Dan kunnen er korte presentaties van worden gehouden. GeĆÆnteresseerden kunnen zich aansluiten, er komt een tekst voor op onze website.

Don demonstreert op de beamer een klein werkend programma van slechts 2 regels code. Het is een werkende digitale klok met datum en tijd op Linux Mint. De rest van het Pascal programma maakt gebruik van grafische Lazarus componenten. Het programma bestaat uit een Timer en enkele Labels. De 2 regels code passen de Caption van de labels aan bij een Timer event. Het Form is ingesteld in de Object Inspector onder Linux. Het executable bestand van de digitale klok is 25,1 megabytes groot. Je kunt dit bestand kopieren naar een ander systeem, er zijn geen extra bestanden nodig. De ticktijd kan worden ingesteld, deze staat op 1 seconde.

Gordon is van plan om elke maand een opgave te publiceren. Hij vraagt zich af voor welk publiek hij dit het beste kan doen. Mogelijk over de Pause en Break toetsen, die worden nooit gebruikt behalve als je programmeert. In een Command prompt DOS box kun je wel Pauze en Break gebruiken. Bij de Basic code '10 goto 10' heb je deze knop wel nodig, alleen Break werkt. In Basic moet je er 'scan' voor zetten, zodat je het programma met een toets kunt afbreken.

Gerard gebruikt het whiteboard. Hij werkt de laatste tijd meestal met zijn favoriete taal Python. Af en toe komt hij oude Basic programma's tegen. Deze wil hij vertalen van Basic naar Python. Die oude Basic programma's bevatten veel Goto statements. Goto is niet mogelijk in Python. Wel zijn er gestructureerde mogelijkheden, zoals for en while.

Als voorbeeld:

for i = 1 to 10
..
next

Dit is met goto:

  i = 1
l1:
  ..
  if i < 10
    i = i + 1
    goto l1

Ook Knuth gebruikt in zijn boeken een soort van pseudocode met goto, dit zijn sprongopdrachten. Conversie naar een programma zonder goto is niet altijd gemakkelijk. Als voorbeeld geeft hij een programma met een boomstructuur in Basic met 3x goto. De loops zijn niet netjes genest:

    |
/-->|
|   |<--\
\---|   |
    |   |
/-->|   |
|   |---/
\---|
    |
    V

Een manier om deze simpel te vertalen is door een variabele 'volgende' in het Python programma te gebruiken. Elk stukje verwerking krijgt een naam, een label. In een grote lus neem je veel if statements. Telkens gebruik je dan de volgende variabele, dus:

if volgende = l1 ... met code voor dit blok
if volgende = l2 ... enzovoorts

Elke goto wordt dan vervangen door volgende = l1 en een loop continu. Dit lijkt op een finite state machine. Dit wordt in Fortran assigned goto genoemd. Het levert onleesbare code op, maar het is een goede manier om het oorspronkelijke programmate vertalen.

Een paar maanden heeft Gerard 7 simpele oefeningen met backtracking laten zien. Toen heeft hij deze structuur daarvoor gebruikt. Daarvoor heeft hij een programm gemaakt dat netjes gestructureerd is. Knuth gebruikt voor backtracking wel goto. Hij vroeg zich af, werken zijn 7 oefeningen ook op de manier van Knuth? Daarom heeft hij die code op deze manier gemaakt, deze werkt net zo goed. Deze techniek is goed om te weten, ook met andere programmeertalen. Dit kun je mogelijk gedeeltelijk of helemaal automatiseren.

Er wordt opgemerkt dat een for next loop eigenlijk een goto loop is. In assembler heb je wel weer goto's. Er volgt een discussie dat de processor wel met goto werkt. Daar zijn weer uitzonderingen op zoals de speciale 'rep movsb' instructie zonder goto. Er zijn ook voorbeelden van assembler code met gestructureerde code in het commentaar. Ook wordt een artikel van Dijkstra genoemd 'Goto considered harmful'. Deze titel was niet van Dijkstra zelf, maar van de Editor.

Om 17:30 uur eindigt de plenaire sessie.