Overig / Notes Leerplein Doel Leerplein leert zelfstandig te plannen en te werken volgens een planning; leert zelfstandig dingen uitzoeken (met behulp van informatie van het internet); leert samenwerken en elkaar helpen; huiswerk (af)maken. Regels Leerplein Leerplein is verplicht . Leerplein is in de eerste plaats om je huiswerk te maken voor je AO/Software Development vakken. Als je de leerpleinuren anders wilt besteden dan is daar ruimte voor maar dat moet wel in overleg met de docenten en het dient in je planning (volgend punt) te worden opgenomen. Tijdens de leerpleinuren maak je een planning in Excel, zie bijlage. In de planning plan je werk voor de komende drie uur. Aan het eind van de drie uur bepaal je in hoeverre je je planning hebt gehaald. Dat vul je weer in. Je planning lever je na elk leerplein-les in via Teams 'Leerplein'. Je planning en werkhouding tijdens de les wordt beoordeeld! Tijdens leerplein werk je zelfstandig ; als je er niet uit komt dan ga je zefl op onderzoek uit, daarna vraag je je klasgenoot en pas in de laatste plaats vraag je hulp aan één van de docenten. Als je al het AO huiswerk af hebt dan mag je: ander huiswerk maken, aan andere IT projecten werken of de AO docenten hebben extra plus werk. -- ROCvA Rooster koppelen aan Agenda Hoe koppel ik mijn Rooster aan mijn ROCvA agenda? Ga naar EduArte Classic Onder Home, ga naar instellingen - Agenda Kopieer link (eventueel eerst key/sleutel genereren) Ga naar de online versie van Outlook Ga naar kalander Kies import kalender - Kies from Web Vul de gekopieerde link in en Geef de nieuwe kalender een naam. Sync Issues Als de koppeling niet werkt kan dat komen door een corrupte OST file. Repareer dit door de mail en/of calendar folder in Outlook (lokaal) te repareren. Right-click the folder, and then click Properties . Click Clear Offline Items > OK . On the Outlook ribbon, click the Send/Receive tab. Click Update Folder . -- Bookstack Bookstack roc.och dev omgeving: http://vps232189.ovh.net/bookstack/public Bookstack commands # Create a new admin user php artisan bookstack:create-admin # Delete all activity history from the system php artisan bookstack:clear-activity # Delete all page revisions from the system php artisan bookstack:clear-revisions # Delete all page revisions from the system including update drafts php artisan bookstack:clear-revisions -a # Delete all page views from the system php artisan bookstack:clear-views # Search and remove images that are not used in page content php artisan bookstack:cleanup-images # Generate SQL commands that will upgrade the database to UTF8mb4 # See https://www.bookstackapp.com/docs/admin/ut8mb4-support/ php artisan bookstack:db-utf8mb4 # Rebuild the search index # Useful if manually inserting pages into the system php artisan bookstack:regenerate-search # Regenerate access permissions - Used mostly in development php artisan bookstack:regenerate-permissions # Delete all users from the system that are not "admin" or system users php artisan bookstack:delete-users # Copy the permission settings of a specified, or all, shelf to their child books php artisan bookstack:copy-shelf-permissions --all php artisan bookstack:copy-shelf-permissions --slug=my_shelf_slug Set rechten op directories (Centos) chown -R apache:max ./public/uploads/images/ chown -R apache:max ./storage/uploads/files/ chmod -R 775 ./public/uploads/images/ chmod -R 775 ./storage/uploads/files/ Set rechten op directories (Ubuntu) chown -R www-data:max ./public/uploads/images/ chown -R www-data:max ./storage/uploads/files/ chmod -R 775 ./public/uploads/images/ chmod -R 775 ./storage/uploads/files/ x Youtube Videos Alle video's ter ondersteuning van onderwijs ROC Alles https://www.youtube.com/playlist?list=PLBU_XXNTKkBoD2pUPw8GR8VF51mc0z67U Alleen Linux https://www.youtube.com/playlist?list=PLBU_XXNTKkBrehj5Tcax4itW85cY5xMSr Alleen SQL https://www.youtube.com/playlist?list=PLBU_XXNTKkBordjKWRgH5XqF7I9Z26Cn8 Alleen PHP https://www.youtube.com/playlist?list=PLBU_XXNTKkBrJ2kDna9tAAEJPbJBFQlZ-   Lesplanning - Max Laatste week Periode 3 ma 20-4 8A - PHP Examens uitleggen - voorschot nemen naar nieuw rooster Cijfers Opdr 1: Code aanpassen -> Corona opdracht Opdr 2: Na de vakantie -> OOP, PDO CRUD 9a - PHP cijfers - Eindcijfer (overgang): huiswerk - mondeling - portfolio nieuw rooster uitleggen Opdracht Portfolio (uitleg site/Les) en Bankrekening (deadline) 9B - PHP   9C - PHP   di 21-4 9A IB - SQL Socrative (extra) test Les Joins afmaken 9B IB - SQL   wo 22-4 8A - PHP Huiswerk maken 9a - PHP Huiswerk maken 9B - PHP   9C - PHP   -- online lessen -- ma 12-3 9A - PHP Bespreken huiswerk functies en inleiden nieuwe praktijkopdracht simulatie. Bespreken HW LInux 3.2 - opdracht 2f en opdracht 3 9B - PHP Toets PHP 1.1 9A - PHP Toets PHP 1.1 IB9A - SQL 3 nieuwe leerlingen HW verplicht!: Ali, Ayoub en Kamel Toets - week 7 - vr 12-3 8A - Linux Uitleg HW PHP En Linux, komende week concentreren op PHP: 2 opdrachten Hoofdstedenspel en dobbelstenen (of indien gewenst bankrekeningnummer) 9C Linux uitval ivm Corona - Werken aan les install Apache en Virtual Server 8A - Linux uitval ivm Corona - zelfstandig werken en individuele hulp 8A - PHP uitval ivm Corona - zelfstandig werken en individuele hulp 9C - PHP uitval ivm Corona - Toets PHP 1.1 -- Nieuwe richtlijnen Covid-19 -- do 12-3 8A - PHP Functions 2a/b - unset array - "samen programmeren" via pseude code   9B - PHP 6.4 Functions en Linux 4.1/4.2 9C - PHP Huiswerk nabespreken - demo - discipline Voorbespreken PHP Toets volgende week maandag array -> filmpje (array en assiociative array) for-loop -> filmpje   (PHP) 6.4 Functions (Linux) 4.1 en 4.2 - uitleg 9ABC Leerplein wo 11-03 9B Linux Voorbespreken PHP Toets volgende week maandag array -> filmpje (array en assiociative array) for-loop -> filmpje   Huiswerk 3.1 opgave 3 bespreken Huiswerk 3.2 Opgave 2f en 3 en maar 7! Ingeleverd? Waarom?   4.1 Deze week 4.2 Volgende week - wordt afgetekend veel werk 8B Mentorles   IB9B SQL Toets bespreken Voorbespreken SQL 2de toets: les 2, 3 en 4 (4 filmpjes kijken!) Nieuwe leerlingen? -> HW?   HW PHP 9C nakijken en voorbereiden voor morgen     (searchtag planningmax roostermax rmax) CamStudio Voor het afnemen van toetsen is het nodig om een schermopname van de toets te laten zien. Dit kan op verschillende manieren, hier wordt uitgelegd hoe dat kan met CamStudio. CamStudio Download and Install Download de portabel versie: https://portableapps.com/downloading/?a=CamStudioPortable&n=CamStudio%20Portable&s=s&p=&d=pa&f=CamStudioPortable_2.7.2_English.paf.exe "Installeer" de software, feitelijk wordt de software nu alleen uitgepakt. Start de software op en configureer een paar zaken. Omdat de software niet is geïnstalleerd moet je via de verkenner/explorer zelf naar de juiste folder CamStudioPortable toe gaan en de CamStudioPortable.exe opstarten. Configuratie 1. Zet de region op Full Screen. 2. Kies onder menu options - video options en select Microsoft Video 1 3. Kies onder menu Options - Record audio from microphone 4. Kies Options - Program Options - Name of Avi File - Automatic file naming Opname maken Druk op de rode record button om de opname te starten. Druk op de blauwe stop button (rechts naast de record button) om de opname te stoppen. -- Langs de Kromme Mijdrecht Via Ouderkerk aan de Amstel of via de Ouderkerkerplas ga je naar Abcoude, bij Abcoude langs het spoor en uiteindelijk de weg langs het Amsterdam Rijnkanaal op richting het zuiden, Breukelen en Utrech). Breukelen onder he spoor en A2   Bij Breukelen naar rechtsen dan de A2 onderdoor Via Abcoude , langs het spoor, de weg volgen (niet tunneltje onderdoor, maar vlak daarvoor naar links) naar het (Amsterdam-Rijn) kanaal. Kanaal aan linkerhand houden, brug bij Loenersloot onderdoor en door rijden tot aan Breukelen. Bij Breukelen zie je de brug over het kanaal; bij de tweede rotonde naar rechts (eerst mag je als fietser niet naar rechts). Er staat hier een fiets bordje "Station en Kockengen 4". Dit is nog een paar honderd meter voor de brug. Je gaat het spoor onderdoor, weg volgen, A2 onderdoor , weg volgen. Je komt op een brede ventweg (rechts is de provinciale weg N401). Ventweg langs N401 Weg volgen tot aan rotonde Eerste rotonde ga je naar rechts, je komt door het dorpje Portengensebrug . Vlak na de rotonde her dorpje Portengensebrug Eerste links Dan eerste weg naar links. Dat is na nog geen 2 km. Je komt op een verlaten brede weg, en je kunt links en rechts ver kijken. Verlaten weg Deze weg volgens en je komt dan langs een gemaal/sluisje (?) en dan op een weg langs een 'riviertje, de Geer . De Geer is links van je. Deze weg volgen. Ergens moet je nog een keer de N212 oversteken, rechtdoor en je volgt het water gewoon. Tot aan een de T-splitsing bij de  witte brug aan de linkerkant, deze brug gaat over de Geer. Witte brug de Geer over Linksaf de witte brug het water de Geer over en direct weer naar rechts. Je ziet een bord dat je de provincie Utrecht verlaat. Dit is een wat drukkere weg (Lange Meentweg) en je komt in het dorpje Woerdense Verlaat . Woerdense Verlaat, Amstelkade rechts Nadat je rechts bent gegaan, de Amstelkade in Woerdense Verlaat In Woerdense Verlaat opletten er komt een soort industrieterreintje aan de rechter kant. Daar moet je naar rechts ( Amstelkade ). (Als je in Woerdense Verlaat bij een brug komt dan ben je iets te ver).  Over een paar honderd meter zie je dan aan je linker hand de Kromme Mijdrecht. Deze volgen tot aan Uithoorn. Via Uithoorn langs de Amstel verder weer richting Ouderkerk a/d Amstel Scrum Scrum Begrippenlijst Het Scrumteam kent 3 rollen die elkaar complementeren in verantwoordelijkheden zodat er een optimale samenwerking kan worden bewerkstelligd.  Ontwikkelteam    Een zelf organiserend, multidisciplinair team, bestaande uit vijf tot negen leden, dat alle items op de product backlog ontwikkelt tot werkende (deel)producten.   Product Owner    Vertaalt alle klantwensen naar wat er geleverd moet worden. Hiervoor gebruikt de product owner de product backlog waarin zij bepaalt wat de hoogste prioriteit heeft.  Scrum Master    Faciliteert de product owner en het ontwikkelteam gedurende het proces. Zij zorgt ervoor dat iedereen begrijpt hoe scrum werkt en dat alle impediments (hobbels op de weg) die het proces vertragen en/of hinderen worden weggenomen.   Sprint meetings Al het werk dat gedaan moet worden is georganiseerd in 4 herhalende sprints van ieder 2 weken per sprint.    Tijdens elke sprint vinden er 4 sprint meetings (ceremonies) plaats, die de mogelijkheid bieden om het proces voortdurend aan te passen aan de omstandigheden.   Sprintplanning    Elke sprint begint met een sprintplanning waarin de product owner de opdracht voor de sprint geeft en het ontwikkelteam het werk voor de sprint plant.  Daily Scrum   Een korte dagelijkse bijeenkomst van hooguit 15 minuten waarin het ontwikkelteam de voortgang en de obstakels bespreken.  Sprint Review   Aan het eind van de sprint presenteert het ontwikkelteam de resultaten en krijgt het feedback van betrokkenen, zoals klanten, managers en collega’s.  Sprint Retrospective    Ter afronding van de sprint wordt het proces geëvalueerd met als doel het proces te verbeteren met het oog op de volgende sprint.   Termen  en Overzichten Product backlog   een lijst van al het werk dat gedaan moet worden om een product te creëren en onderhouden. De product owner beheert en prioriteert de product backlog.   Sprint backlog   een overzicht van het geselecteerde werk uit de product backlog dat het ontwikkelteam wilt realiseren gedurende de aankomende sprint.   Definition of done   een lijst met vereisten waaraan een item van de sprint backlog moet voldoen om als voltooid te worden aangemerkt.   Scrumbord   een bord met 3 kolommen (soms 4): (‘Backlog’),‘to do’, ‘doing’ en ‘done’. Hierop worden de taken die op de sprint backlog staan (vaak in de vorm van post-its) weergegeven die door teamleden zijn opgepakt.   Sprint Burndown Chart een grafiek met de voorraad werk per dag. Als het goed is, zie je een dalende lijn die aan het eidn van de sprint op 0 moet uitkomen. User Story   Een user story is een korte beschrijving van een onderdeel van een product, beschreven vanuit het oogpunt van de eindgebruiker. Het heeft de structuur: Als (wie?), wil ik (wat?), zodat ik (waarom?).   GIT - cheat sheet Install (Windows) https://git-scm.com/ https://desktop.github.com/ set up new repo (create git repo in web gui first) git init git add .gitignore touch README.md git add README.md git remote add myOrigin git@github.com:maxbis/examengesprekken git push -u origin master ssh key add ~/.ssh/id_rsa.pub in git hub web gui add file git add update repo git commit -a -m "comment" git push Get updated files git pull Overwrite local changes git reset --hard git pull New clone - install new git clone https://github.com/maxbis/examengesprekken // for Ubuntu server sudo chgrp -R www-data examengesprekken Go to older version git reset --hard 0ad5a7a6..... Git clear cache (if ignore file is changed) git rm --cached config List all tracked files git ls-tree -r HEAD --name-only Git issues with .ignore git rm -r --cached . git add . git commit -m "Stop tracking files that are now ignored" Init new repo cd path/to/class-cloud git init git add . git commit -m "Initial commit" git remote add origin https://github.com/maxbis/class-cloud.git git push -u origin master git clone https://github.com/maxbis/class-cloud.git Set Remote Git && Check git remote SSH key ssh-keygen -t ed25519 -C "your_email@example.com" eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_ed25519 cat ~/.ssh/id_ed25519.pub git remote set-url origin git@github.com:USERNAME/REPO.git git remote -v Test Connection ssh -T git@github.com CheckList Yii 1. XAMPP is recent - jun 2019 of nieuwer 2. PHP is maar één keer geïnstalleerd. - check path variabele (cmd box 'path') Er mag maar een verwijzing zijn naar een php directory. Meer details zijn te vinden op: https://www.roc.ovh/books/yii/page/trouble-shooting-yii-installatie 3. Yii2 Model generator werkt De model generator werk, http://localhost:8080/gii/model Vereisten: (1) Yii is geïnstalleerd, (2) XAMPP is up-to-date, (3) PHP van XAMPP wordt gebruikt (zie trouble shoot page), (4) database draait en (5) database is in Yii geconfigureerd en geïmporteerd ( zie les 1 ) ERD 1. Iedereen heeft een login op Lucichart Student mag andere tool gebruiken, dan graag noteren welke. Functioneel Ontwerp 1. Wireframe https://balsamiq.cloud ( Licence key voor desktop versie op verzoek via Teams verkrijgbaar ) 2. Tool overzicht Alles studenten dienen dit helder te hebben en wij moeten de voorbeelden afvinken. Wat Hoe -  Tool Voorbeeld gezien ERD voor TO     Wireframe voor FO (dat is grove schets v/d lay-out)     Uivoerontwerp; proto-type output scherm     Formulierontwerp; proto-type form (invoerscherm)     Navigatie structuur - flow diagram     Zie instructie in les welke tool je kan gebruiken. De keuze van tools is verder vrij, mits er wordt aangetoond dat de student in staat is de gevraagde diagrammen te maken. --     Ontkalken filter verwijderen 100 ml (level A) onkalkingsmiddel + 1 liter water (level B) Stoompijpje en koffieruitloop onder grote bak Toets "druppels" onder stoomknop 5 sec indrukken Stoomlampje knippert -> stoomkraan open zetten ong. 25 m. wachten Lampjes (stoom en kannetje) knipperen - stoomkraantje uit - vers water  - stoomkraantje weer aan Zelfde als stap 7 maar nu met filter KT3 Upload website Maak lijst met kandidaten in Excel, met alle studenten nummers en verzin/generate wachtwoorden. Maak een  text input file met userid's en passwords (gescheiden door spatie). Scipts ran on Ubuntu Server VPS SFTP restriction in /etc/ssh/sshd_config (aan eind toevoegen). Match Group sftp ForceCommand internal-sftp ChrootDirectory %h AllowTCPForwarding no PermitTunnel no X11Forwarding no Werkt niet goed - uiteindelijk opgelost met standaard rechten: drwxr-xr-x 14 root root 4096 Jul 26 2020 var/ drwxrwxr-x 9 root www-data 4096 Nov 30 10:28 www/ drwxr-x--x 78 max root 4096 Feb 4 21:12 softwaredeveloper/ drwxr-x--x 4 u515 sftp 4096 Feb 5 16:15 u515/ (group root werkt ook) -rw-rw-r-- 1 u515 sftp 38 Feb 3 19:42 index.php (group root werkt ook) Note group sftp only needed if ssh restriction are aplied Readme input file consists out of line with add users run addUser.sh run creatDBUsers.sql file; sudo mysql < createDB Users.sql remove run removeUser.sf go to php myadmin and delete dabases and users (no script but easy with gui) Script add users #!/bin/bash # Script to add a user to Linux system # Params or DB_FILE=createDBUsers.sql addThisUser() { if [ $(id -u) -eq 0 ]; then echo "" >> $DB_FILE if [ "$1" == "" ]; then read -p "Enter username : " username else username=$1 fi if [ "$2" == "" ]; then read -s -p "Enter password : " password else password=$2 fi egrep "^$username" /etc/passwd >/dev/null if [ $? -eq 0 ]; then echo "$username exists!" exit 1 else U_HOME=/var/www/softwaredeveloper/$username U_GROUP=sftp U_SHELL=/bin/bash pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) useradd -d $U_HOME -g $U_GROUP -m -s $U_SHELL -p $pass $username [ $? -eq 0 ] && echo "User $username has been added to system!" || echo "Failed to add a user!" chown $username $U_HOME echo "" > $U_HOME/index.php chown $username $U_HOME/index.php echo "" >> $DB_FILE echo "CREATE USER \`$username\`@\`%\` IDENTIFIED BY '$password';" >> $DB_FILE echo "ALTER USER \`$username\`@\`%\` REQUIRE NONE;" >> $DB_FILE echo "CREATE DATABASE IF NOT EXISTS \`$username\`;" >> $DB_FILE echo "GRANT ALL PRIVILEGES ON \`$username\`.* TO \`$username\`@\`%\`;" >> $DB_FILE fi else echo "Only root may add a user to the system" exit 2 fi } # is parameter is file then read input from file Mpassword> # else read two command line params if test -f "$1"; then while IFS= read -r line do addThisUser $line done < $1 else addThisUser $1 $2 fi script del users #!/bin/bash # remove user, params or removeThisUser() { if [ $(id -u) -ne 0 ]; then echo "Only root may add a user to the system" exit 2 fi if [ "$1" == "" ]; then read -p "Enter username : " username else username=$1 fi if [ $? -eq 0 ]; then userdel -r $username getent group $username || groupadd $username U_HOME=/var/www/softwaredeveloper/$username echo "Remove $U_HOME" fi } # is parameter is file then read input from file # else read command line params if test -f "$1"; then while IFS= read -r line do removeThisUser $line done < $1 else removeThisUser $1 $2 fi     examen.ovh Verwijderen resultaten uit examanresultaat Dit doe je als er een kandidaat is beoordeeld die niet heeft meegedaan. Kandidaat moet volledig uit de uitslagenlijst. DELETE FROM `results` WHERE studentid in (48, 59, 52, 51, 55, 39, 34, 68,1) AND formid=18 AND examenid=4 In dit voorbeeld worden alle resultaten van de studenten met id's 48, 59,.... en het formulier id 18 verwijderd. Als je regel 3 weglaat dan worden alle uitslagen van alle formulieren van de student van het examen (in dit voorbeeld id-4) weggehaald. Beoordelaar1/2 in batch wijzigen De beoordeling wordt pas naar de beoordeling tabel gekopieerd als die is ge-saved. Op dat moment wordt het commentaar vanuit de forms ook in de beoordeling gekopieerd. Als je de beoordelaars van de gesaved-de beoordelingen wil wijzigen. update uitslag u inner join student s on s.id = u.studentid set beoordeelaar2id = 16 where examenid= 4 and s.klas='8C' and werkproces = 'B1-K3-W1'     Backup DB Backup 5x per dag wordt een dump van de database op de server gemaakt. -> cron job Oude back-up worden verwijderd, de 23:10 back up wordt 400 dagen bewaard, de andere worden eerder verwijderd. Elk dag wordt via rsync en ssh (via public/privat keys) de hele document root plus alle database dumps gekopieerd. Script wordt geïnitieerd door NAS. Een controle script - nog niet geïmplementeerd. NAS Cron job draait om 11:10, 14:10, 17:10, 20:10 en 23:10. Er worden dus 5 DB dumps per dag gemaakt. # create backup of Bookstack Database 10 23,20,17,14,11 * * * /home/max/mysql/backupDB.sh > /home/max/mysql/backupDB.log 2>&1 Backup Script plus clean up Script backupDB.sh voor backup #!/bin/bash export PATH=/bin:/usr/bin:/usr/local/bin TODAY=`date +"%d%b%Y"` TODAY=`date +"%m%d-%H00"` ################################################################ ################## Update below values ######################## DB_BACKUP_PATH='/home/max/mysql/Backup-DB' MYSQL_HOST='localhost' MYSQL_PORT='3306' MYSQL_USER='user' MYSQL_PASSWORD='secret' DATABASE_NAME='sb_name' BACKUP_RETAIN_DAYS=180 ## Number of days to keep local backup copy ################################################################# echo "Backup started for database - ${DATABASE_NAME}" mkdir -p ${DB_BACKUP_PATH} mysqldump -h ${MYSQL_HOST} \ -P ${MYSQL_PORT} \ -u ${MYSQL_USER} \ -p${MYSQL_PASSWORD} \ ${DATABASE_NAME} | gzip > ${DB_BACKUP_PATH}/${DATABASE_NAME}-${TODAY}.sql.gz if [ $? -eq 0 ]; then # remove all files older than 400 days find ${DB_BACKUP_PATH} -type f -not -name '*.sql.gz' -mtime +400 -exec rm {} \; # remove all files older than 90 days excpet those made on the 1ste of the month find ${DB_BACKUP_PATH} -type f -not -name '*01-????.sql.gz' -mtime +90 -exec rm {} \; # remove all files not created ar 23:00 and older than 10 days find ${DB_BACKUP_PATH} -type f -not -name '*300.sql.gz' -mtime +10 -exec rm {} \; echo "Database backup successfully completed" else echo "Error found during backup" exit 1 fi ##### Remove backups older than {BACKUP_RETAIN_DAYS} days ##### find ${DB_BACKUP_PATH}/* -mtime +${BACKUP_RETAIN_DAYS} -exec rm {} \; NAS Script (let op dat niet-standaard poorten worden gebruikt ivm security) TARGET=/volume1/archives/1/ mkdir -p $TARGET/server/var/www mkdir -p $TARGET/server/home/abc nohup rsync -av -e 'ssh -p 9999' servername.domain.net:/var/www/* $TARGET/server/var/www & nohup rsync -av -e 'ssh -p 9999' servername.domain.net:/home/abc/ $TARGET/server/home/abc &   Garmin Hard reset: https://www.youtube.com/watch?v=-8vWGDOrn_Q Ostrogorski Paradox Ik laat aan de hand van een voorbeeld zien dat als er in een democratie wordt gekozen op een partij en daarmee op een compleet partij-programma, er een verkeerd beeld kan ontstaan van de "wil van de kiezer". Deze verstoring zou niet bestaan als de kiezer per onderwerp zou stemmen. Deze verstoring heeft niets te maken met coalitievorming. Ik werk een voorbeeld uit waarin twee partijen met de verkiezingen meedoen. Stel je hebt twee partijen de PP = Progressieve Partij en de CP = Conservatieven Partij. Stel er zijn drie belangrijke onderwerpen, economie (ec), milieu (env) en Europese samenwerking (eur). Stel voor het gemak dat alle onderwerpen even zwaar wegen. Dit is wat de partijen willen: Onderwerp PP, Progressieve partij CP, Conservatieve partij Economie hervormen (1) zo houden als het is (0) milieu hervormen (1) huidig beleid voortzetten (0) Europese Samenwerking meer politieke integratie (1) houden zoals het is (0) De keuzes hervormen of niet worden in het kort weergegeven door 1 of 0. Er zijn 5 kiezers en die hebben de volgende voorkeuren: Economie Milieu Europese Samenwerking Stemt (dus)op Kiezer 1 0 1 0 CP Kiezer 2 0 1 0 CP Kiezer 3 1 0 0 CP Kiezer 4 1 1 1 PP Kiezer 5 1 1 0 PP Uitslag CP wint Alleen kiezer 4 en 5 stemmen op de PP omdat zij beiden voor de meerderheid van de onderwerpen het beste passen bij de PP. Bijvoorbeeld kiezer 5 vind voor twee van zijn idealen aansluiting bij de PP en voor maar één bij de CP. Let wel alle onderwerpen tellen even zwaar. Voor kiezer 1,2 en 3 geldt andersom dat zij de meeste aansluiting vinden bij de CP. Kiezer 1 CP overeenstemming 2/3 punten Kiezer 2 CP overeenstemming 2/3 punten Kiezer 3 CP overeenstemming 2/3 punten Kiezer 4 PP overeenstemming 3/3 punten Kiezer 5 PP overeenstemming 2/3 punten Dus de meeste keizers zullen als zij volledig rationeel kiezen, kiezen voor de CP. De CP wint met 3 tegen 2 stemmen. "Case closed" of niet? Laten we per onderwerp eens gaan bekijken hoe de stand is: Economie Milieu Europese Samenwerking Kiezer 1 0 1 0 Kiezer 2 0 1 0 Kiezer 3 1 0 0 Kiezer 4 1 1 1 Kiezer 5 1 1 0 Uitslag - voorkeur PP PP CP PP wint De meerderheid (kiezer 3, 4, en 5) wil de economie hervormen (3 tegen 2). Zij zouden op dit punt kiezen voor de PP. Een ruime meerderheid (kiezer 1, 2, 4 en 5)  wil het milieu hervormen (4 tegen 1). Zij zouden op dit punt kiezen voor de PP. De meerderheid wil de Europese samenwerking niet hervormen (4 tegen 1). Zij zouden op dit punt kiezen voor de CP. Voor 2 van 3 punten wil de meerderheid dus het beleid van de PP. Het zou dus in het belang van iedereen zijn als de PP zou winnen in de verkiezingen omdat dan de meeste wensen van de kiezers dan worden uitgevoerd. De meerderheid is het immers op 2 van de 3 onderwerpen eens met de PP. Als iedereen rationeel stemt dan wint echter de CP. Dus in deze denkbeeldige vereenvoudigde situatie waarin iedereen rationeel zou handelen, zou de partij winnen die opgeteld per onderwerp niet de meerderheid zou vertegenwoordigwoordigen. Dit is slechts een vereenvoudigd voorbeeld met 3 issues en 2 partijen, maar ook in een complexere situatie geldt hetzelfde. Als de kiezers stemmen op de partij die het meest bij hun past, dan kan er als je alle issues zou optellen en eventueel zou wegen een verkiezingsuitslag komen die niet optimaal is voor de gemiddelde kiezer. Dus deze paradox laat zien dat er een vervorming van de "wil van de kiezer" kan ontstaan als er gekozen wordt op een compleet partij-programma in plaats van dat er op aparte onderwerpen zou worden gekozen. of in het Engels (quote van second.wiki): The paradox s hows that there can be strong distortions of the “will of the electorate” in elections and votes when votes are taken on entire party programs and not (separately) on individual issues. Bronnen www.pigozzi.org/Episteme_Pigozzi.pdf https://second.wiki/wiki/ostrogorski-paradox -- Running Numbers Gewicht Op de 10KM scheelt elke kilo meer gewich iets meer dan 30 seconden. Weight Estimated Time Time Difference 67kg 42:23 - 02:37 68kg 42:55 - 02:05 69kg 43:26 - 01:34 70kg 43:58 - 01:02 71kg 44:29 - 00:31 72kg 45:00 - 73kg 45:31 + 00:31 74kg 46:02 + 01:02 75kg 46:33 + 01:33 76kg 47:04 + 02:04 77kg 47:35 + 02:35 Gewicht schoenen Elke 100 gram scheelt iets minder dan 1% snelheid. Caloriegebruik Aantal kilometer X gewicht ~ calorie gebruik. Calculators: https://runbundle.com/tools/ Mail alias in Google Het werkt als volgt. Ga naar ‘tandwieltje’/settings Account and Import Add another email address (waar we ook zaten) Vul in: smtp.google.com jouw email, dus laura.bisschop@gmail.com wachtwoord (alleen als je geen 2FA aan hebt staan, anders lees verder hieronder) dan wachtwoord als je GEEN 2FA aan hebt staan (2FA is twee factor authenticatie). Heb je wel 2FA aan staan dan wordt het lastiger: In een ander window click op google-account (op je fotootje). Manage your google account (links) Security (4de optie?) Dan onder signing in to Google, App password (opnieuw aanloggen) select een app en een device (beiden zijn puur een label, dus verzin wat). Dan druk je op generate en je krijgt een wachtwoord: Dat ziet er zo uit: Dat wachtwoord in dat gele vlak kun je dan copy/past en dat is jouw wachtwoord voor  in dat andere window. Bewaar dit wachtwoord even, want het gaat soms mis (de smtp server is vaak druk). Probeer het dus opnieuw als het niet lukt. Uiteindelijk lukte het, dan krijg je een window voor een verificatie-code. Die krijg je in 1 a 2 minuten via mail. Success! Niet vergeten..... O ja en als alles werkt dan kun je dat (tijdelijke) wachtwoord weer beter weghalen. Het is niet meer nodig. Het was alleen nodig voor de verificatie email. Wachtwoord kun je weghalen op dezelfde plaats als waar jehet hebt aangemaakt. Spreekt voor zich: gewoon op het prullenmandje clicken. Nutriscore De berekening van de Nutriscore Er zijn op landniveau verschillen voor bepaalde productgroepen zoals kazen, olijfolie, .... Stap 1, negatieve- en positieve punten Bron: https://blog.has.nl/voedselkeuzelogo-2-het-nutri-score-algoritme/ Stap 2, punten omzetten in score Bron: https://www.colruytgroup.com/en/conscious-consuming/nutri-score Slide Show Pictures (HTML/CSS en JS) Hoe maak je een slide show? Opacity Je hebt 4 images en via de CSS heeft elke img een opacity van 0 en is daarmee doorzichtig. Class Active Het enige plaatje dat je ziet, is het plaatsje dat via de class active een opacity van 1 heeft gekregen. Javascript Het JavaScript zorgt ervoor dat het plaatje de class active wordt weggehaald ( remove ) en dat het volgende plaatje de class active krijgt. Via de transition in de CSS wordt de overgang van het ene naar het andere plaatje op 0.5 seconden gezet. Het JS loopt oneindig door en ververst elke 3000 ms (=3 seconden) het plaatje. HTML       Rotating Images    
      Image 1       Image 2       Image 3       Image 4  
  CSS .slideshow { position: relative; width: 300px; /* Adjust based on your image's width */ height: 200px; /* Adjust based on your image's height */ overflow: hidden; } .slideshow img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; opacity: 0; transition: opacity 0.5s; } .slideshow img.active { opacity: 1; } JavaScript let currentImageIndex = 0; const images = document.querySelectorAll('.slideshow img'); const totalImages = images.length; setInterval(() => { // Hide the current image images[currentImageIndex].classList.remove('active'); // Move to the next image or loop back to the first one currentImageIndex = (currentImageIndex + 1) % totalImages; // Show the new current image images[currentImageIndex].classList.add('active'); }, 3000); // Change the images every 3 seconds python email merge What it does Reads data from a CSV file. Uses the column named "email" from teh CSV file as the to: address. Replaces placeholders in the email text and subject line with corresponding data from the CSV file. Sends each customized email through Microsoft Outlook. How it works Replace 'your_file.csv' , standard_email_text , and standard_subject with your actual file path and text. The script reads the CSV file, replaces placeholders in the email text and subject line with the corresponding data, and sends the emails. What you need You need to have Microsoft Outlook installed on your system. This script assumes the CSV file is well-formed and the headers match the placeholders. Python's win32com.client library is used for interacting with Outlook, which is Windows-specific. @Line 28 the standard Excel delimiter is specified, this is depending on local settings and is either , or ; Example If the body text contains _index_ , _name_ , _ leeg_ or _URL_ these are replaced with the values in the corresponding lines. The search and replace is case-sensitive! Set Outlook to work offline and check the email in the outbox before going back online! Python Script import csv import win32com.client as win32 import sys # Define your standard email text and subject line here standard_email_text = """Beste _name_, Hierbij de persoonlijke link waarmee u de voortgang van _name_ kan volgen:\n_URL_. Voor het afronden van de studie binnen drie jaar, moeten dit schooljaar 8 blokken worden afgerond. Groet, ............... (deze email is automatisch gegenereerd) """ standard_subject = "voortgangsmonitor _name_" # Function to send email via Outlook def send_email(recipient, subject, body): outlook = win32.Dispatch('outlook.application') mail = outlook.CreateItem(0) mail.To = recipient mail.Subject = subject mail.Body = body mail.Send() # Reading CSV and sending emails with open('ouderemailC23 .csv', newline='', encoding='utf-8-sig') as csvfile: reader = csv.DictReader(csvfile, delimiter=';') for row in reader: if ( row['email'] == "" ): # no email, skip continue email_body = standard_email_text email_subject = standard_subject email_to = row['email'] # Replace placeholders in the email text and subject for key in row: email_body = email_body.replace(f'_{key}_', row[key]) email_subject = email_subject.replace(f'_{key}_', row[key]) print(f"To: {email_to}") print(f"Subject: {email_subject}") print(f"{email_body}\n") print("-----------------------------------------\n") # Send the email send_email(row['email'], email_subject, email_body) Max-Quiz Use Case In a classroom, as a teacher, I want to execute a formative assessment. I want to be able to start a quiz, minimize the change that students help each other and I want to be able to change quizzes, create new ones without much hassle. Furthermore, I want to monitor the quiz once it is running and I want to be able to spot irregularities during the quiz session. The commercial product Socrative matches this use case pretty well, but I kept on running into limitations. So I made my own quiz app. Installation Clone the repo git clone https://github.com/maxbis/max-quiz Update with composer composer update Database Install the MySQL database by importing the file max-quiz-database-plus example_data.sql, note that this files also creates the database for you. If you want to name the database different, please edit the SLQ file. Create and/or set rights to some directories Depending on the system you are running on, you might need to create a few directories, since empty directories are not copied with GitHub. Maybe you need to set the file/directory rights, but this depends on your system and your Web server settings. The framework Yii will give pretty clear hints for this. The Yii app can be opened by navigating to the web directory, all routes mentioned in this document are relative to this directory. Students view The app starts by navigation to the web directory. If you are not logged in you get a screen to start a quiz, this is the student's view. A student need to provide his name, class and a password to start the quiz. Student session Once a student is started. He will always get the next unanswered questions. You can refresh the page, or do whatever. The sessions kept in a cookie that is valid for 2 hours. This is also the maximum time a student can work on a quiz. When for what reason the student looses his session (he switched from device a to device b), you can provide the student a link to continue to finish the quiz. Admin Go to the login, by navigating to /admin. The standard database has one admin account, called admin with the password admin. The management of the users is all standard Yii: navigate to /tbl-user to manage this. For now only username and password are used. Quiz Screen In the quiz screen you can manage the quizzes. Only active quizzes can be started. Once a quiz is started, it can only be forced to be stopped on a student level. Progress Screen Here you can monitor the progress of the quiz. The questions are mixed per student. By pressing on the progress column ("Progr."), you can edit the submission. You can change the name, class, correct the score, and force the quiz to be finished. The code in shown in the left column helps to identify a user, since the code is printed in the header of the students working on the quiz. One all students are finished, you can export the results to Excel. Questions Screen In this screen you get a grid with all question. Here you can link/unlink questions to a quiz. Use the search bars ( question and label ) to select questions and add these to the quiz. View complete quiz On the questions screen, the first part shows the quiz data. The green dot means the quiz is active. With the view button on the area where the quiz is shown, you can view a quiz and show all questions. This can be handy when you want to reflect on the quiz with students. Import/export Questions From this screen you can go to import and export where you can import/export questions. The format used is shown in the import screen and can also be seen when exporting a series of questions. Note that only the linked question of the quiz will be exported. When the optional ID is provided in an import, you can update questions via import/export. Of course, you can also use the GUI. -- Wix Een veld op een form op "hidden" zetten. Als je in de form editor op een veld klikt dan kan je aan de rechterkant de checkbox hidden aan klikken: Op het form dat de gebruiker ziet, is dit veld dan niet meer zichtbaar. Via script kan je het veld een waarde geven. In developer mode zie je onderaan een script. Dit script is standaard 'leeg' en bevat alleen het begin en eind (hetgeen in het voorbeeld hieronder op regel 1 en 4 staat). Een regel die begint met // is een commentaarregel. In het voorbeeld hieronder zijn de commentaarregels verwijderd. w.onReady(function () { $w("#input5").value = "Hidden informatie"; $w("#hidden02").value = "Dit is een test"; }); Bovenstaande code zet de waarde van twee velden. Het veld dat hierboven op hidden is gezet heeft een ID #input5 en de waarde wordt "Hidden informatie" (regel 2 van de code). Een ander veld met het ID #hidden02 krijgt ook een waarde op regel 3. Op deze manier kan je elk veld een waarde geven. -- PHP en GMAIL In (any) project directory: composer require phpmailer/phpmailer Create app password in Google google account - security 0 2-Step Verification - App passwords emailer PHP code (this will accept a posted form and email all form fields). $value) { $emailContent .= "$key: $value\n"; } $mail = new PHPMailer(true); try { // Server settings $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; $mail->SMTPAuth = true; $mail->Username = $gmailUsername; $mail->Password = $gmailPassword; $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; $mail->Port = 587; // Recipients $mail->setFrom($gmailUsername, 'Form Submission'); $mail->addAddress($recipientEmail); // Content $mail->isHTML(false); $mail->Subject = 'New Form Submission'; $mail->Body = $emailContent; $mail->send(); echo 'Message has been sent'; } catch (Exception $e) { echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; } } ?> Form example Form Submission






Brand-Brothers Forms Nieuwe locatie https://www.roc.ovh/books/brand-brothers Handleiding Deze handleiding beschrijft de verschillende parameters die je kunt gebruiken bij het configureren van een bier selectie formulier. Het form wordt aangeroepen door middel van een URL en alle parameters worden in de URL meegegeven. Voorbeeld: https://....../.../brand-brothers/forms/?eigenaar=naam&merk=Texels&set=Texels-vuurtorenbar&minbeers=3&beerfilter=amstel&options=1,2,3,4,25,26&t=1&maxbeers=3 Spaties in URL In de gehele URL moeten spaties worden gecodeerd als %20 . Parameters De parameters zoals in het voorbeeld getoond, worden hieronder beschreven. Elke parameter is rood gemarkeerd. minbeers Beschrijving: Het minimaal aantal bieren dat geselecteerd moet worden. Werking: Als er minder bieren zijn geselecteerd dan het minimum, krijg je een waarschuwing wanneer je probeert het formulier te versturen. maxbeers Beschrijving: Het maximaal aantal bieren dat geselecteerd kan worden. Werking: Als je meer bieren selecteert dan het maximum, verschijnt er onmiddellijk een waarschuwing. Verborgen Velden Beschrijving: De volgende velden zijn verborgen en kunnen via de URL worden meegegeven. De verborgen velden worden dor het formulier meegestuurd en verschijnen in de email. eigenaar : De eigenaar van het biermerk. merk : De naam van het biermerk. set : De naam van de set die in de titel van het formulier verschijnt. t (Testmodus) Beschrijving: Hiermee kun je de testmodus van het formulier instellen. aan t kunnen de volgende waarden worden gegeven: 0: Normale werking (dezelfde als geen waarde opgegeven). 1: Alle verplichte velden zijn niet meer verplicht en het formulier wordt niet per e-mail verzonden. 2: Alle verplichte velden zijn niet meer verplicht en het formulier wordt wel per e-mail verzonden options Beschrijving: Een lijst van opties die als een komma-gescheiden lijst moeten worden opgegeven. Deze opties worden getoond op het formulier. beerfilter Beschrijving: Een filter om bieren op naam te selecteren. Werking: Als de waarde 'none' is, wordt de gehele bierselectie niet getoond. Je kunt meerdere filters specificeren, bijvoorbeeld: beerfilter=amstel,brand . Options aanpassen Om options aan te passen kan deze URL worden gebruikt: https://....../.../brand-brothers/forms/options of nieuwe interface https://....../.../brand-brothers/forms/options/index2.php Optienummer Elke optie heeft een nummer. Aan de hand van dit nummer wordt de optie op het formulieer geplaatst. De nummers hoeven niet uniek te zijn. Wanneer meerdere opties hetzelfde nummer hebben, worden alle opties op het fomrulier getoond wanneer deze optie wordt gekozen. Optienaam De naam van de optie is de naam die op de aanvraag verschijnt (email). Optielabel Het label is de de naam zoals die op het formulier verschijnt. Extra naam De extra naam is de (open) vraag die wordt gesteld indien de optie wordt geslecteerd. De naam is de naam zoals die op het aanvraag (email) verschijnt. Extra label Het extra label is de (open) vraag die wordt gesteld indien de optie wordt geslecteerd. Het label is de naam zoals die op het formulier verschijnt. URL naar options (back-up) De 'database' waarin de options worden opgeslagen kun je via de volgende URLs controleren: https://.../.../brand-brothers/forms/options/options.js https://.../.../brand-brothers/forms/options/options.json Deze bestanden zou je ook als (extra) back-up kunnen gebruiken. De twee bestanden bevatten dezelfde informatie, maar zijn om technische redenen op een andere wijze vormgegeven. Options kunnen niet worden aangepast? Als de opties niet kunnen worden aangepast, controleer dan de twee bestanden. Zijn de wijzigingen in deze bestanden wel aangepast dan zorgt de cache van de browser ervoor dat de wijzigingen niet (direct) worden getoond. Laadt de pagina dan opnieuw en leeg de browser cache (dit werkt op elke browser anders). Beers aanpassen (dit is nog nooit in productie getest) https://............/brand-brothers/forms/beers of nieuwe interface https://............/brand-brothers/forms/beers/index2.php Een beer heeft een ID en een naam zoals dat op het form te zien is. Zorg ervoor dat de ID's uniek blijven. Equipmentlist (in ontwikkeling) https://..../brand-brothers/equipment-list/folders.php -- SSH Checklist SSH Key Setup Checklist Generate SSH Key Pair Ensure that you have generated an SSH key pair on the client machine ( system a ). Run the following command and check for the existence of ~/.ssh/id_rsa (private key) and ~/.ssh/id_rsa.pub (public key): ls -l ~/.ssh/id_rsa ~/.ssh/id_rsa.pub If the keys do not exist, generate them using: ssh-keygen -t rsa -b 4096 Ensure the keys have appropriate permissions (600 for private and 644 for public keys): chmod 600 ~/.ssh/id_rsa chmod 644 ~/.ssh/id_rsa.pub Copy Public Key to Remote Server Ensure that the public key has been copied to system b and appended to the ~/.ssh/authorized_keys file. Use the ssh-copy-id command to copy the key: ssh-copy-id username@system_b Alternatively, you can manually copy the contents of ~/.ssh/id_rsa.pub to ~/.ssh/authorized_keys on system b . Verify that the authorized_keys file has the correct permissions: chmod 600 ~/.ssh/authorized_keys Make sure the .ssh directory has the correct permissions: chmod 700 ~/.ssh Check SSH Daemon Configuration on Remote Server Ensure the SSH daemon is configured to allow key-based authentication. Check /etc/ssh/sshd_config on system b for the following settings: PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no (optional, for enforcing key-based auth only) Restart the SSH daemon to apply changes: sudo systemctl restart sshd Verify Ownership and Permissions Check ownership and permissions of the user's home directory on system b : Ensure that the home directory and .ssh directory are owned by the user and have appropriate permissions: chown -R username:username /home/username chmod 700 /home/username/.ssh Ensure Correct SSH Command Usage Use the correct username and hostname when attempting to SSH into system b : ssh username@system_b If using a non-standard SSH port, specify it using the -p option: ssh -p username@system_b Check SSH Agent (Optional) Ensure that the SSH agent is running and the key is added to it, especially if using ssh-agent for key management: eval " $(ssh-agent -s) " ssh-add ~/.ssh/id_rsa Verify the keys added to the agent: ssh-add -l Review SSH Debugging Output Use the -v option with the SSH command to enable verbose mode, which can provide detailed debugging information: bash ssh -v username@system_b Look for lines indicating whether the key is being offered and any errors that may indicate why the key is being rejected. Network Issues Ensure there are no network issues preventing the connection. Check that system b is reachable via the network. Verify that the firewall on system b is allowing incoming SSH connections on the specified port. SELinux and AppArmor (Linux Specific) If system b uses SELinux, ensure it is not blocking SSH connections: sudo setenforce 0 # Temporarily disable for testing If using AppArmor, check that it allows SSHD to read the authorized_keys file. Check for Multiple Keys (Optional) If multiple keys are present, specify the exact key to use: ssh -i ~/.ssh/id_rsa username@system_b By following this checklist, you should be able to identify and resolve most issues preventing SSH key-based authentication. If problems persist, examining the verbose output from the SSH command can provide further clues. Books Black Heart (2018) - read The first book introduces Detective Dan Riley as he investigates the brutal murder of a woman found dead in a luxury hotel suite. As the investigation unfolds, dark secrets emerge, leading to a web of lies, obsession, and revenge. A thrilling police procedural with psychological elements. The Couple on Cedar Close (2019) - read This novel centers around a seemingly perfect couple, until the wife is found dead and the husband becomes the prime suspect. Detective Riley must dig deeper into their lives to uncover shocking truths that no one saw coming. The Stranger's Wife (2020) - read In this book, two women from vastly different lives find themselves linked by a series of tragic events. Riley works to solve a complex case involving abuse, betrayal, and a violent crime, with plenty of twists and turns along the way. The Woman Inside (2021) - read After surviving a near-fatal attack, Daisey Garrett wakes up in the hospital with no memory of what happened. With the help of Detective Riley, she attempts to piece together the events of that night, while her troubled personal life adds further complications. The Night of the Party (2022) This novel explores the secrets of an elite social circle after a shocking murder at a glamorous party. As Detective Riley investigates, he uncovers hidden grudges and a complex tapestry of deceit. The Lie in Our Marriage (2023) - now The sixth book focuses on a couple celebrating their 25th wedding anniversary, but beneath the surface, their relationship is falling apart. A series of dark secrets and lies unravel, leading to a gripping conclusion as Detective Riley is called to solve yet another mystery. The Housewife’s Secret (2024) - read Grid View - Max MVC Below is sample documentation that explains how to configure each column in your grid. You can include this in your project’s documentation (for example, as a README or developer guide). Grid Column Data Structure Each column in the grid is defined as an associative array. The following keys are available: Required Keys name Type: string Description: The header text shown at the top of the column. Example: 'name' => 'Order ID' data Type: string Description: Specifies how to obtain the value for each cell in this column. If the value is a plain key (e.g., "order_id" ), the cell displays the corresponding value from each record in your data array. If the value contains tokens enclosed in curly braces (e.g. "{price} * {quantity}" ), it is treated as a formula. Each token is replaced by the value from the corresponding key in the data record, and the resulting expression is evaluated. Examples: // Plain data field (must exist in each $data record) 'data' => 'order_id' // Calculated field using tokens 'data' => '{price} * {quantity}' Optional Keys width Type: string Description: The width of the column as a CSS value (e.g., "60px" or "10%" ). Example: 'width' => '80px' align Type: string Description: Sets the text alignment for the column. Valid values are: "left" (default) "right" "center" Example: 'align' => 'right' formatter Type: string Description: A PHP expression used to format the cell’s value. The expression is evaluated using eval() . You can use the variable $item (or $value for computed columns) to reference the current cell data. Example: 'formatter' => 'number_format($item["price"], 2, ".", ",")' When using formulas for the data key, the computed value can be formatted by referencing $value : 'formatter' => 'number_format($value, 2, ".", ",")' aggregate Type: string Description: Specifies how to compute an aggregate value for this column (displayed in the footer). Accepted values: "sum" – calculates the total. "average" – calculates the average. A formula string (e.g., "({YTD_PL} / {VALUE_EUR}) * 100" ) that uses tokens to reference computed aggregate values from other columns. Example: // Standard aggregate (sum) 'aggregate' => 'sum', // Aggregate based on a formula 'aggregate' => '({YTD_PL} / {VALUE_EUR}) * 100' aggregateToken Type: string Description: Used when the computed aggregate value of this column needs to be referenced in another aggregate formula. When provided, the calculated value is stored in a global object (or passed to JavaScript) under this token name. Example: 'aggregateToken' => 'YTD_PL' sortable Type: boolean (or integer with values 0/1) Description: Indicates whether the column is sortable by clicking on the header. Example: 'sortable' => true filter Type: string Description: Specifies the type of filtering available for the column. Valid values are: "none" – no filter input. "select" – a dropdown list of unique values. "text" – a text input for filtering. Example: 'filter' => 'text' hide Type: boolean Description: Determines whether the column is visible in the rendered grid. If set to true , the column is hidden from the user view via CSS ( display: none ), but it remains in the DOM so that its data is still available for calculations (such as aggregates or formulas). Example: 'hide' => true Example of a Complete Column Configuration Below is a sample array of columns that demonstrates how to configure different aspects: $columns = [ [ 'name' => 'Order ID', 'data' => 'order_id', 'width' => '80px', 'align' => 'left', 'sortable' => true, 'filter' => 'text', ], [ 'name' => 'Customer', 'data' => 'customer_name', 'width' => '150px', 'align' => 'left', 'sortable' => true, 'filter' => 'select', ], [ 'name' => 'Price', 'data' => 'price', 'width' => '80px', 'align' => 'right', 'formatter' => 'number_format($item["price"], 2, ".", ",")', 'aggregate' => 'sum', 'sortable' => true, 'filter' => 'none', ], [ 'name' => 'Quantity', 'data' => 'quantity', 'width' => '60px', 'align' => 'right', 'aggregate' => 'sum', 'sortable' => true, 'filter' => 'none', ], [ 'name' => 'Total', 'data' => '{price} * {quantity}', // Calculated column using tokens 'width' => '100px', 'align' => 'right', 'formatter' => 'number_format($value, 2, ".", ",")', // $value refers to the computed total 'aggregate' => 'sum', 'sortable' => false, 'filter' => 'none', ], [ 'name' => 'Secret Code', 'data' => 'secret_code', 'hide' => true, // Hidden from the view but used for calculations or references 'sortable' => false, 'filter' => 'none', ], ]; Notes Formulas in data or aggregate : When using a formula, ensure that tokens (e.g., {price} or {quantity} ) exactly match the keys in your data records. If a token is missing, you may get unexpected results or errors. DOM and Calculations: Even if a column is hidden ( hide is set to true ), it is still rendered in the DOM (using a CSS class such as hidden-col with display: none ). This is important so that JavaScript functions that perform calculations (such as aggregate totals) can still access the values. Formatter Security: Since formatter is evaluated using eval() , make sure that any code provided is trusted and controlled. Do not use untrusted input in these expressions. This documentation provides an overview of how to set up and customize the grid’s column definitions. Adjust the examples to match your application’s needs, and feel free to extend the configuration with additional keys or logic as required. VU Cheat Sheet – Virtual Environment Manager Standard python3 -m venv .venv source .venv/bin/activate // Linux .venv\Scripts\activate // Windows Create and Manage Environments Command Description vu new Create a new virtual environment vu rm Delete (remove) an environment vu ls List all virtual environments vu cd Print path to the environment Interactive Environment Command Description vu activate Start a new shell with the environment active exit Exit the activated shell Other Helpful Commands Command Description vu which Show path to Python binary in the env vu home Show the root directory where vu stores envs Typical Workflow vu new myproject vu run myproject pip install flask vu run myproject python app.py Or interactively: vu activate myproject # now you're inside the virtualenv python exit Weetjes / Quiz vragen Wat is het verschil tussen include en require ? A) Geen verschil B) require stopt het script bij een fout, include niet C) include is sneller D) require is alleen voor functies Antwoord: B Wat doet de  isset() functie in PHP? A) Kijkt of een variabele een lege string is B) Kijkt of een variabele bestaat én niet null is C) Kijkt of een array een waarde bevat D) Zet een variabele Antwoord: B Wie wordt gezien als de uitvinder van het World Wide Web? A) Bill Gates B) Linus Torvalds C) Tim Berners-Lee D) Steve Jobs Antwoord: C (Tim Berners-Lee ontwikkelde het WWW in 1989) Wat betekent de afkorting SSD in computerhardware? A) Static Storage Drive B) Super Speed Disk C) Solid State Drive D) Sequential Storage Device Antwoord: C Waarvoor wordt HTML gebruikt? A) Styling van webpagina's B) Structuur van een webpagina opbouwen C) Server-side logica D) Databases beheren Antwoord: B Wat betekent de afkorting CSS? A) Computer Styled Sheets B) Cascading Style Sheets C) Creative Style Syntax D) Custom Styling System Antwoord: B Welke tag gebruik je om een link te maken in HTML? A) B) C) D) Antwoord: B Welke van deze talen draait in de browser van de gebruiker? A) PHP B) Python C) JavaScript D) SQL Antwoord: C Wat doet de  tag in HTML? A) Voegt een video toe B) Voegt een afbeelding toe C) Maakt een koptekst D) Start een animatie Antwoord: B Welke eigenschap in CSS bepaalt de tekstkleur? A) background-color B) font-size C) text-style D) color Antwoord: D Wat doet  console.log() in JavaScript? A) Maakt een pop-up op het scherm B) Stuurt gegevens naar de server C) Toont informatie in de ontwikkelaarstools D) Ververst de pagina Antwoord: C Denken in Systemen (AI generated, LM Notebook) Samenvatting Donella H. Meadows' "Thinking in Systems" is een fundamentele gids voor het begrijpen van de  complexe dynamiek van systemen en hoe we effectiever met ze kunnen omgaan. Het boek benadrukt dat systeemdenken essentieel is om de wereld om ons heen te begrijpen, de grondoorzaken van problemen te identificeren en duurzame veranderingen te creëren. Hier zijn de belangrijkste concepten die in het boek worden uitgelegd: Wat is een Systeem? Een systeem is een samenhangend georganiseerde verzameling van elementen die zodanig met elkaar verbonden zijn dat ze hun eigen gedragspatroon in de loop van de tijd produceren . Het bestaat uit drie essentiële onderdelen: Elementen: De zichtbare of onzichtbare onderdelen waaruit een systeem bestaat (bijv. spelers in een team, cellen in een lichaam, of concepten zoals trots). Het veranderen van elementen heeft meestal de minste invloed op het algehele systeemgedrag. Verbindingen (Interconnections): De relaties die de elementen bij elkaar houden, zoals fysieke stromen, regels, communicatie of informatiesignalen. Het veranderen van verbindingen kan een systeem drastisch veranderen. Functie of Doel (Function or Purpose): Het overkoepelende doel of de waarschijnlijke functie van een systeem, dat vaak kan worden afgeleid uit het gedrag ervan, zelfs als het niet expliciet is geformuleerd. Het doel is vaak de meest cruciale bepalende factor voor het systeemgedrag. Voorraden (Stocks) en Stromen (Flows) Voorraden zijn de fundamenten van elk systeem , een opeenhoping van materiaal of informatie die in de loop van de tijd is opgebouwd. Ze kunnen fysiek zijn (water in een badkuip, een populatie, hout in een boom) of niet-fysiek (zelfvertrouwen, geld op een bankrekening). Een voorraad is het geheugen van de geschiedenis van veranderende stromen binnen het systeem . Stromen zijn het materiaal of de informatie die een voorraad in of uit gaan over een bepaalde periode . Dynamisch Evenwicht (Dynamic Equilibrium): De toestand waarin een voorraadniveau constant blijft omdat alle instromen gelijk zijn aan alle uitstromen. Verandering van Voorraden: Een voorraad kan worden verhoogd door de instroom te vergroten of door de uitstroom te verkleinen. Vertragingen (Delays) en Buffers: Voorraden veranderen langzaam en fungeren als vertragingen, buffers of schokdempers in systemen. Ze stellen instromen en uitstromen in staat om tijdelijk ontkoppeld en uit balans te zijn. Terugkoppelingslussen (Feedback Loops) Een terugkoppelingslus is een gesloten keten van causale verbanden waarbij veranderingen in een voorraad de stromen van of naar diezelfde voorraad beïnvloeden. Dit mechanisme creëert consistent systeemgedrag. Regulerende (Balancing) Terugkoppelingslussen (B): Deze lussen zijn doelgericht of stabiliteitszoekend . Ze proberen een voorraad op een bepaalde waarde of binnen een bereik te houden door elke opgelegde verandering tegen te werken. Voorbeelden zijn een thermostaat, die de kamertemperatuur reguleert, of het koelen van een kopje koffie naar kamertemperatuur. Ze zijn zowel bronnen van stabiliteit als van weerstand tegen verandering. Versterkende (Reinforcing) Terugkoppelingslussen (R): Deze lussen zijn versterkend, zelfversterkend of leiden tot een sneeuwbaleffect . Ze veroorzaken exponentiële groei of versnelde ineenstorting. Voorbeelden zijn rente op een spaarrekening, bevolkingsgroei of een wapenwedloop. Waarom Systemen Ons Verrassen Systemen verrassen ons vaak omdat onze mentale modellen de complexiteit van de echte wereld niet volledig bevatten. Gebeurtenissen, Gedrag en Structuur: Mensen zijn vaak gefascineerd door gebeurtenissen (de meest zichtbare, maar minst voorspellende aspecten van een systeem). Het begrijpen van gedrag (patronen over tijd) is dieper, maar structuur (verweven voorraden, stromen en terugkoppelingslussen) is de sleutel tot het begrijpen van waarom iets gebeurt. Lineaire Geesten in een Niet-lineaire Wereld: Onze lineaire denkwijze verwacht proportionele effecten van oorzaken. De wereld is echter vol niet-lineaire relaties , waar oorzaken niet proportionele effecten produceren. Niet-lineariteiten kunnen leiden tot verschuivende dominantie van terugkoppelingslussen, waardoor een systeem van het ene gedragspatroon naar het andere overgaat. Niet-bestaande Grenzen: Systemen hebben zelden echte grenzen; de wereld is een continuüm . Grenzen worden in modellen geïntroduceerd voor duidelijkheid, maar te nauwe grenzen kunnen leiden tot verrassingen. Lagen van Limieten: Elk fysiek systeem heeft meerdere inputs en outputs, en deze zijn allemaal beperkt. De meest belangrijke input op een gegeven moment is de meest beperkende factor . Groei zelf verandert de schaarste van factoren en verschuift de beperkingen. Ononderbroken groei van fysieke entiteiten in een eindige omgeving is onmogelijk . Overal Aanwezige Vertragingen: Vertragingen (zoals levertijden of perceptievertragingen) zijn alomtegenwoordig in systemen. Ze zijn kritische bepalende factoren voor systeemgedrag en veelvoorkomende oorzaken van oscillaties. Te lange vertragingen kunnen leiden tot overshoot en ineenstorting. Begrensde Rationaliteit (Bounded Rationality): Mensen nemen beslissingen die rationeel zijn binnen de informatie die ze hebben, maar ze hebben geen perfecte informatie, vooral niet over verdere delen van het systeem. Dit kan leiden tot collectieve resultaten die niemand wenst (het "onzichtbare voet" effect). Het is cruciaal om te begrijpen waarom dit gedrag ontstaat en systemen te herontwerpen om informatiestromen en prikkels te verbeteren. Eigenschappen van Zeer Functionele Systemen Functionele systemen vertonen vaak veerkracht, zelforganisatie en hiërarchie. Veerkracht (Resilience): Het vermogen van een systeem om terug te veren, te herstellen of zichzelf te repareren na een verstoring. Het ontstaat door meerdere terugkoppelingslussen die op verschillende manieren en tijdschalen werken. Er zijn altijd grenzen aan veerkracht , en deze wordt vaak opgeofferd ten gunste van stabiliteit of productiviteit op korte termijn. Zelforganisatie (Self-Organization): Het vermogen van een systeem om zijn eigen structuur complexer te maken, te leren, te diversifiëren en te evolueren. Zelforganisatie kan ontstaan uit relatief eenvoudige regels en vereist vrijheid, experimentatie en een zekere mate van wanorde. Hiërarchie (Hierarchy): Systemen zijn georganiseerd in subsystemen die samengevoegd zijn tot grotere subsystemen. Hiërarchieën bieden stabiliteit, veerkracht en efficiëntie. Het doel van de hogere lagen is om de doelen van de lagere lagen te dienen . Suboptimalisatie treedt op wanneer de doelen van een subsysteem ten koste gaan van de doelen van het totale systeem. Systeemvallen (Archetypes) en Kansen Dit zijn veelvoorkomende systeemstructuren die problematisch gedrag produceren ("vallen"), maar met inzicht kunnen worden omgezet in "kansen". Beleidsweerstand / Oplossingen die Falen (Policy Resistance / Fixes that Fail): Een systeem blijft steken, ondanks pogingen om het te veranderen, door tegenstrijdige doelen van verschillende actoren. De uitweg is loslaten en doelen harmoniseren , zodat alle actoren samen aan een groter, gedeeld doel kunnen werken. Tragedie van de Meent (Tragedy of the Commons): Overmatig gebruik van een gedeelde, uitputbare hulpbron door zwakke feedback tussen de conditie van de hulpbron en de beslissingen van de gebruikers. Oplossingen zijn educatie, privatisering of regulering (wederzijdse dwang). Afkalving naar Lage Prestaties (Drift to Low Performance): Prestatie standaarden zakken geleidelijk naar beneden, vaak door een negatieve waarneming van eerdere prestaties, waardoor corrigerende actie afneemt. De uitweg is om prestatie standaarden absoluut te houden en ze te versterken op basis van de beste prestaties . Escalatie (Escalation): Concurrerende actoren proberen elkaar te overtreffen, wat leidt tot een zelfversterkende spiraal van groei (bijv. wapenwedloop, prijs oorlogen). De uitweg is weigering om te concurreren (eenzijdige ontwapening) of onderhandeling over nieuwe regulerende lussen . Succes naar de Succesvolle (Success to the Successful): Winnaars van een competitie ontvangen middelen om nog effectiever te concurreren, wat leidt tot dominantie en eliminatie van verliezers. Oplossingen zijn diversificatie, strikte beperking van winst, het gelijktrekken van het speelveld, of beloningen die de volgende ronde niet beïnvloeden . Verschuiven van de Last naar de Intervenient (Shifting the Burden to the Intervenor / Addiction): Een oplossing voor een probleem vermindert symptomen, maar ondermijnt het zelfherstellend vermogen van het systeem, wat leidt tot afhankelijkheid. De uitweg is om symptoomverlichtende maatregelen te vermijden en zich te richten op langetermijnherstructurering , door het systeem te helpen zichzelf te helpen. Regels Overtreden (Rule Beating): Het ontduiken van de intentie van regels, wat leidt tot systeemvervormingen. De uitweg is regels te herontwerpen zodat creativiteit wordt ingezet voor het doel van de regels. Het Verkeerde Doel Nastreven (Seeking the Wrong Goal): Systemen volgen gehoorzaam doelen die onnauwkeurig of onvolledig zijn gedefinieerd, wat leidt tot onbedoelde resultaten (bijv. focus op BBP in plaats van welzijn). De uitweg is indicatoren en doelen te specificeren die het ware welzijn van het systeem weerspiegelen , en inspanning niet te verwarren met resultaat. Hefboompunten (Leverage Points) om te Interveniëren in een Systeem Meadows presenteert een rangorde van plekken om in een systeem in te grijpen, van minst tot meest effectief. Hoe hoger op de lijst, hoe moeilijker te veranderen, maar hoe groter de potentiële impact op het systeemgedrag. Transcenderen van Paradigma's: Het besef dat geen enkel paradigma "waar" is, en het loslaten van absolute overtuigingen. Paradigmas: De diepste, vaak onuitgesproken, overtuigingen die een samenleving heeft over hoe de wereld werkt, en waaruit systeemdoelen, regels, structuren, etc. voortkomen. Doelen van het Systeem: Het doel of de functie van het hele systeem. Een nieuw, duidelijk geformuleerd doel kan een hele samenleving in een nieuwe richting sturen. Zelforganisatie: Het vermogen om systeemstructuur toe te voegen, te veranderen of te evolueren. Dit is de sterkste vorm van veerkracht. Regels: Incentives, straffen en beperkingen die het gedrag in een systeem definiëren. Informatiestromen: De structuur van wie wel en geen toegang heeft tot informatie. Het herstellen of toevoegen van ontbrekende informatiestromen is een krachtige interventie. Versterkende Terugkoppelingslussen (sterkte van de toename): Het vertragen van de groei in versterkende lussen is meestal krachtiger dan het versterken van regulerende lussen. Regulerende Terugkoppelingslussen (sterkte ten opzichte van de te corrigeren effecten): Het vermogen van regulerende lussen om de voorraad op koers te houden. Vertragingen (lengtes ten opzichte van de snelheid van systeemveranderingen): Vertragingen in terugkoppelingslussen zijn kritische bepalende factoren voor systeemgedrag. Voorraad-en-Stroom Structuren (fysieke systemen en knooppunten): De fysieke opzet van voorraden en stromen. Buffering (grootte van stabiliserende voorraden ten opzichte van hun stromen): Grotere buffers kunnen een systeem stabiliseren. Getallen (constanten en parameters): De specifieke waarden die stromen bepalen (bijv. subsidies, belastingen, standaarden). Deze zijn de minst effectieve hefboompunten. Leidraden voor Leven in een Wereld van Systemen (Systeemwijsheden) Meadows concludeert met een reeks gedragswijzen die voortvloeien uit een systeemgericht wereldbeeld: Begrijp het Ritme van het Systeem: Observeer het gedrag van het systeem voordat je ingrijpt; leer de geschiedenis en focus op feiten in plaats van theorieën. Leg je Mentale Modellen Bloot: Maak aannames expliciet, daag ze uit en sta open voor correctie. Wees flexibel. Eer, Respecteer en Verspreid Informatie: Voorkom vervorming, vertraging of achterhouding van informatie. Gebruik Taal met Zorg en Verrijk Deze met Systeemconcepten: Vermijd "taalvervuiling" en breid je vocabulaire uit om complexiteit te beschrijven. Let op Wat Belangrijk is, Niet Alleen Wat Kwantificeerbaar is: Geef prioriteit aan kwaliteit boven kwantiteit. Maak Terugkoppelingsbeleid voor Terugkoppelingssystemen: Beleid moet dynamisch zijn en veranderen afhankelijk van de staat van het systeem, met ingebouwde leermechanismen. Streef naar het Welzijn van het Geheel: Maximaliseer geen delen of subsystemen ten koste van het geheel. Luister naar de Wijsheid van het Systeem: Stimuleer de krachten die het systeem zichzelf laten runnen. Lokaliseer Verantwoordelijkheid in het Systeem: Ontwerp systemen zo dat beslissingen direct leiden tot feedback over de gevolgen bij de beslissers. Blijf Bescheiden – Blijf een Leerling: Erken de onvolledigheid van mentale modellen en de complexiteit van de wereld. Leer door experimenten en omarm fouten. Vier Complexiteit: Erken en omarm de rommelige, niet-lineaire, dynamische en zelforganiserende aard van het universum. Verruim Tijdshorizonten: Kijk verder dan de korte termijn, rekening houdend met de gevolgen op lange termijn. Trotseer de Disciplines: Volg een systeem waar het ook naartoe leidt, over traditionele disciplinaire grenzen heen. Verruim de Grens van Zorgzaamheid (Caring): Erken de diepe verbondenheid van alle mensen en het mondiale ecosysteem. Erodeer het Doel van Goedheid Niet: Behoud hoge morele standaarden en geef geen gehoor aan cynisme. Donella Meadows' werk moedigt ons aan om de wereld te zien als een complex web van onderling verbonden elementen, in plaats van geïsoleerde problemen, wat ons in staat stelt om diepere inzichten te verwerven en effectievere interventies te plegen. FAQ in 8 vragen Wat is een systeem en hoe kan ik het herkennen? Een systeem is een verzameling van onderling verbonden elementen die samen een functie vervullen en gedrag vertonen dat niet te herleiden is tot de afzonderlijke delen. Om te bepalen of iets een systeem is, kun je jezelf drie vragen stellen: 1) Kun je de onderdelen identificeren? 2) Beïnvloeden de onderdelen elkaar? en 3) Produceren de onderdelen samen een effect dat anders is dan het effect van elk onderdeel afzonderlijk? Concrete voorbeelden van systemen zijn een school, een stad, een fabriek, een dier of een boom. Zelfs immateriële zaken zoals schooltrots of academische bekwaamheid kunnen elementen van een systeem zijn. Daarentegen is zand dat toevallig op een weg gestrooid is geen systeem, omdat het ontbreekt aan specifieke onderlinge verbindingen of functies. Wat zijn "stocks" en "flows" in een systeem, en waarom zijn ze belangrijk? "Stocks" (voorraden) zijn de fundamenten van elk systeem; ze representeren de hoeveelheid materiaal of informatie die op een bepaald moment in het systeem aanwezig is, zoals water in een badkuip, een populatie, boeken in een boekhandel, of zelfs je zelfvertrouwen. Stocks zijn de "geheugens" van het systeem, de cumulatieve resultaten van de geschiedenis van veranderende flows. "Flows" (stromen) zijn de bewegingen van materiaal of informatie die stocks vullen of legen. Dit kunnen bijvoorbeeld vulling en legen zijn, geboorten en sterfgevallen, aankopen en verkopen. Het begrijpen van de dynamiek van stocks en flows, oftewel hoe ze over tijd veranderen, is essentieel voor het begrijpen van complex systeemgedrag. Stocks veranderen over het algemeen langzaam en fungeren als vertragingen, buffers of schokdempers in een systeem, waardoor inflows en outflows tijdelijk losgekoppeld en onafhankelijk van elkaar kunnen zijn. Wat is een feedbackloop en welke twee hoofdtypen feedbackloops zijn er? Een feedbackloop is het mechanisme dat een verandering in een stock beïnvloedt door een flow in of uit diezelfde stock. Het is een gesloten keten van causale verbanden die begint bij een stock, door beslissingen of regels die afhankelijk zijn van het niveau van die stock, en dan weer teruggaat via een flow om de stock te veranderen. Er zijn twee hoofdtypen feedbackloops: Balancerende feedbackloops (B): Deze loops zijn doelgericht of stabiliteitsgericht. Ze proberen een stock op een bepaalde waarde of binnen een bepaald bereik te houden. Een balancerende loop is gericht tegen elke verandering die aan het systeem wordt opgelegd, en probeert de stock terug te brengen naar zijn gewenste staat (bijvoorbeeld een thermostaat die de kamertemperatuur reguleert). Versterkende feedbackloops (R): Deze loops veroorzaken groei of daling van een stock door een constante fractie van zichzelf. Ze zorgen ervoor dat een verandering in dezelfde richting blijft voortgaan (bijvoorbeeld rente op een bankrekening: hoe meer geld, hoe meer rente, wat leidt tot nog meer geld). Hoe beïnvloeden vertragingen (delays) het gedrag van systemen? Vertragingen zijn alomtegenwoordig in systemen en zijn sterke bepalende factoren van systeemgedrag. Elke stock is op zichzelf al een vertraging, en de meeste flows kennen vertragingen, zoals verzendvertragingen, perceptievertragingen of verwerkingsvertragingen. Stocks reageren pas geleidelijk op veranderingen, zelfs op plotselinge veranderingen, door langzaam te vullen of te legen. Het aanpassen van de lengte van een vertraging kan een grote verandering teweegbrengen in het gedrag van een systeem. Het is cruciaal om te begrijpen waar en hoe lang vertragingen optreden in informatiestromen of fysieke processen, omdat dit krachtige beleidshefbomen kunnen zijn om het systeem gemakkelijker of moeilijker te beheren. Wat is "bounded rationality" en de implicaties ervan voor systeemgedrag? "Bounded rationality" (begrensde rationaliteit) verwijst naar de logica die leidt tot beslissingen of acties die zinvol zijn binnen één deel van een systeem, maar niet redelijk zijn binnen een bredere context of wanneer ze worden gezien als onderdeel van het grotere systeem. Mensen zijn geen alwetende, rationele optimaliseerders, maar eerder "satisficers" die proberen hun behoeften voldoende te bevredigen voordat ze verdergaan met de volgende beslissing. We handelen rationeel binnen onze beperkte kennis en informatie, negeren vaak de gevolgen van onze acties voor het hele systeem, en zien zelden het volledige scala aan mogelijkheden. Dit betekent dat het plaatsen van nieuwe actoren in hetzelfde systeem de prestaties van het systeem niet zal verbeteren als de onderliggende informatie, prikkels, doelen, stressfactoren en beperkingen die de begrensde rationaliteit van de actoren bepalen, niet worden aangepakt door het systeem te herontwerpen. Waarom zijn systeemgrenzen en "clouds" belangrijk in systeemmodellering? In systeemmodellering is het noodzakelijk om grenzen te stellen om een systeem te kunnen analyseren en begrijpen, aangezien "er geen aparte systemen zijn; de wereld is een continuüm." Waar je een grens trekt, hangt af van het doel van de analyse en de vragen die je wilt beantwoorden. "Clouds" (wolken) in systeemdiagrammen vertegenwoordigen bronnen of bestemmingen voor flows die voor het huidige doel van de discussie als buiten het systeem worden beschouwd. Het is belangrijk om je bewust te zijn van de aannames die je maakt wanneer je een cloud gebruikt. Als bijvoorbeeld grondstoffen gegarandeerd overvloedig zijn, volstaat een cloud. Maar als er een tekort aan materialen zou kunnen ontstaan, en deze stock niet in het mentale systeemmodel wordt opgenomen, kan dit leiden tot verrassingen in de toekomst. Een te nauwe afbakening kan leiden tot het over het hoofd zien van belangrijke invloeden, zoals de impact van economische ontwikkeling buiten de officiële perimeter van een nationaal park op de ecologie binnen het park. Wat is de "tragedy of the commons" en hoe kan deze worden opgelost? De "tragedy of the commons" (tragedie van de meent) ontstaat wanneer individuen, handelend in hun eigen belang, een gemeenschappelijke hulpbron uitputten, omdat de voordelen van hun acties voor henzelf zijn, terwijl de kosten (uitputting van de hulpbron) worden gedeeld door iedereen. Dit leidt tot een onvermijdelijke ondergang als de gemeenschap onbeperkt groeit in een wereld die beperkt is. De oplossing hiervoor is niet eenvoudig, maar omvat vaak "mutual coercion, mutually agreed upon" (wederzijdse dwang, wederzijds overeengekomen). Dit kan verschillende vormen aannemen, zoals: Privatisering: Het verdelen van de commons in individuele eigendommen. Regulering: Het instellen van regels en handhaving (bijv. verkeerslichten, parkeermeters, vergunningen voor radiofrequenties). Feedbackmechanismen herstellen: Het direct laten voelen van de economische impact van iemands gebruik van de commons (bijv. betalen voor afval op basis van volume). Deze oplossingen transformeren het systeem om de ontbrekende feedbackmechanismen te herstellen en zo overexploitatie te voorkomen. Waarom is het belangrijk om naar het doel van een systeem te kijken en het meten van het succes? Het doel of de intentie van een systeem is een van de krachtigste hefbomen om het gedrag ervan te beïnvloeden. Het doel is de richtinggever van het systeem, de definieerder van discrepanties die actie vereisen, en de indicator van naleving, falen of succes waar balancerende feedbackloops naar toe werken. Als het doel slecht is gedefinieerd, als het niet meet wat het hoort te meten, of als het niet het werkelijke welzijn van het systeem weerspiegelt, kan het systeem onmogelijk een wenselijk resultaat produceren. Systemen hebben de neiging om precies datgene te produceren waarnaar gevraagd wordt. Een veelvoorkomende fout is het verwarren van inspanning met resultaat, bijvoorbeeld het meten van het succes van gezinsplanning in termen van geïmplanteerde spiraaltjes in plaats van geboortecijfers. Een van de ergste voorbeelden hiervan is het gebruik van het Bruto Nationaal Product (BNP) als maatstaf voor nationaal economisch succes, terwijl het de menselijke welvaart vaak onvoldoende weergeeft. Het is cruciaal om doelen te stellen op basis van wat werkelijk belangrijk is, in plaats van wat gemakkelijk meetbaar is, en om de kwaliteit boven de kwantiteit te stellen. Study Guide Denkend in Systemen: Een Gedetailleerde Studiegids Deze studiegids is ontworpen om uw begrip van het bronmateriaal uit "Thinking in Systems" van Donella H. Meadows te toetsen en te verdiepen. Quiz: Korte Antwoordvragen Beantwoord elke vraag in 2-3 zinnen. Wat is het fundamentele verschil tussen een Slinky en een lege doos in de context van systeemdenken? De Slinky's veerkracht en beweging komen voort uit zijn interne structuur en onderlinge verbindingen. De lege doos heeft deze inherente eigenschappen niet; de beweging wordt volledig bepaald door externe manipulatie. Waarom benadrukt Meadows het gebruik van diagrammen en tijdsgrafieken bij het bespreken van systemen? Systemen werken gelijktijdig in meerdere richtingen en zijn onderling verbonden. Woorden zijn lineair, terwijl visuele representaties zoals diagrammen de simultane aard van systeeminteracties beter kunnen weergeven. Hoe bepalen we of een verzameling elementen een "systeem" vormt? Een verzameling elementen is een systeem als de delen elkaar beïnvloeden, en samen een effect produceren dat verschilt van het effect van elk afzonderlijk deel. Er moeten identificeerbare onderdelen zijn met specifieke onderlinge verbindingen en functies. Wat is het verschil tussen een 'stock' en een 'flow' in een systeem, en hoe zijn ze gerelateerd? Een stock is een hoeveelheid of accumulatie die op een bepaald moment kan worden gemeten (bijv. water in een badkuip). Een flow is de beweging van materiaal of informatie die een stock in de loop van de tijd vult of leegt (bijv. instroom en uitstroom van water). Leg uit waarom stocks worden beschouwd als "vertragingen" of "buffers" in systemen. Stocks nemen tijd om te veranderen, zelfs als de flows plotseling veranderen, omdat flows ook tijd nodig hebben om te stromen. Dit betekent dat stocks veranderingen opvangen en vertragen, waardoor ze fungeren als stabilisatoren in het systeem. Wat is een 'balancing feedback loop' en geef een kort voorbeeld? Een balancing feedback loop is een stabiliserende, doelzoekende lus die een stock op een bepaalde waarde of binnen een bereik probeert te houden. Een voorbeeld is een thermostaat die de kamertemperatuur reguleert door de verwarming aan of uit te zetten. Wat is een 'reinforcing feedback loop' en geef een kort voorbeeld? Een reinforcing feedback loop is een lus die een verandering in het systeem versterkt en leidt tot exponentiële groei of verval. Een voorbeeld is een spaarrekening: hoe meer geld u heeft, hoe meer rente u verdient, wat weer bijdraagt aan meer geld en dus meer rente. Waarom is het concept van 'bounded rationality' cruciaal voor systeemdenkers? Bounded rationality verwijst naar het feit dat individuen beslissingen nemen op basis van beperkte informatie en een beperkte focus op hun eigen nabije belangen. Dit betekent dat beslissingen die rationeel zijn voor een onderdeel van het systeem, niet noodzakelijkerwijs het welzijn van het gehele systeem bevorderen. Hoe kunnen "vertragingen" ("delays") de dynamiek van een systeem beïnvloeden en waarom zijn ze belangrijk om te begrijpen? Vertragingen zijn overal aanwezig in systemen en kunnen de gedragsdynamiek sterk bepalen, soms leidend tot oscillaties of onverwachte resultaten. Het begrijpen van de aard en lengte van vertragingen is essentieel om systeemgedrag te kunnen analyseren en potentieel te beïnvloeden. Wat is de 'tragedy of the commons' en hoe kan dit systeemprobleem worden aangepakt? De tragedy of the commons treedt op wanneer individuen, handelend in hun eigenbelang, een gedeelde, beperkte hulpbron uitputten. Het kan worden aangepakt door "wederzijdse dwang, wederzijds overeengekomen", zoals het instellen van regels, quota, prijzen, of fysieke barrières voor het gebruik van de gemeenschappelijke bron. Antwoordsleutel Quiz Wat is het fundamentele verschil tussen een Slinky en een lege doos in de context van systeemdenken? Het verschil ligt in hun interne structuur. De Slinky's veerbeweging komt voort uit zijn eigen inherente eigenschappen en onderlinge verbindingen, terwijl de doos alleen beweegt als deze extern wordt gemanipuleerd en geen interne dynamiek heeft. Waarom benadrukt Meadows het gebruik van diagrammen en tijdsgrafieken bij het bespreken van systemen? Systemen zijn multidirectioneel en gelijktijdig met elkaar verbonden, wat moeilijk is om lineair met woorden te beschrijven. Diagrammen en grafieken bieden een taal die de simultane en onderling verbonden aard van systeemverschijnselen beter kan vastleggen. Hoe bepalen we of een verzameling elementen een "systeem" vormt? Een verzameling is een systeem als de onderdelen elkaar beïnvloeden en samen een effect produceren dat verschilt van het effect van elk afzonderlijk deel. Dit impliceert dat er specifieke onderlinge verbindingen en een functie aanwezig zijn, in tegenstelling tot een willekeurige opeenhoping. Wat is het verschil tussen een 'stock' en een 'flow' in een systeem, en hoe zijn ze gerelateerd? Een 'stock' is een meetbare hoeveelheid of accumulatie op een bepaald moment, zoals water in een badkuip. Een 'flow' is de stroom van materiaal of informatie die de stock in de loop van de tijd verandert, zoals de instroom of uitstroom van water. Flows vullen of legen stocks. Leg uit waarom stocks worden beschouwd als "vertragingen" of "buffers" in systemen. Stocks veranderen langzaam omdat flows tijd nodig hebben om te stromen, zelfs als de flows abrupt veranderen. Dit betekent dat stocks veranderingen opvangen en vertragen, waardoor ze een stabiliserend effect hebben en fungeren als schokdempers in het systeem. Wat is een 'balancing feedback loop' en geef een kort voorbeeld? Een balancing feedback loop is een stabiliserende, doelzoekende lus die een stock op een gewenste waarde of binnen een bereik houdt door veranderingen tegen te werken. Een koelende kop koffie die de kamertemperatuur benadert, is een voorbeeld van zo'n lus die streeft naar evenwicht. Wat is een 'reinforcing feedback loop' en geef een kort voorbeeld? Een reinforcing feedback loop is een lus die een initiële verandering versterkt, wat leidt tot exponentiële groei of afname. Het voorbeeld van een rentedragende bankrekening toont dit: hoe meer geld op de rekening, hoe meer rente wordt verdiend, wat de groei verder stimuleert. Waarom is het concept van 'bounded rationality' cruciaal voor systeemdenkers? Bounded rationality benadrukt dat mensen handelen op basis van beperkte informatie en hun directe belangen, vaak zonder de gevolgen voor het hele systeem te overzien. Dit is cruciaal omdat het verklaart waarom individueel 'rationele' beslissingen collectief tot ongewenste systeemprestaties kunnen leiden. Hoe kunnen "vertragingen" ("delays") de dynamiek van een systeem beïnvloeden en waarom zijn ze belangrijk om te begrijpen? Vertragingen zijn alomtegenwoordig en bepalen sterk het systeemgedrag, vaak leidend tot oscillaties of onverwachte resultaten. Het nauwkeurig identificeren van de locatie en lengte van vertragingen is essentieel, omdat het aanpassen ervan krachtige beleidsinstrumenten kan zijn om systeemgedrag te sturen. Wat is de 'tragedy of the commons' en hoe kan dit systeemprobleem worden aangepakt? De tragedy of the commons beschrijft de uitputting van een gedeelde hulpbron wanneer individuen hun eigenbelang nastreven. Dit probleem kan worden aangepakt door mechanismen van "wederzijdse dwang, wederzijds overeengekomen", zoals regulering, quota, heffingen of privatisering om het gebruik te beperken. Essayvragen Bespreek de rol van "stocks" en "flows" als fundamentele bouwstenen van systemen. Hoe beïnvloeden hun dynamiek het gedrag van complexe systemen, en geef concrete voorbeelden uit het bronmateriaal om uw argumenten te ondersteunen. Analyseer de begrippen 'balancing feedback loops' en 'reinforcing feedback loops'. Hoe interacteren deze twee soorten loops om complex systeemgedrag te creëren? Illustreer uw antwoord met voorbeelden van zowel natuurlijke als mensgemaakte systemen. "De grenzen van een systeem hangen af van het doel van de discussie – de vragen die we willen stellen." Bespreek deze bewering van Meadows. Waarom is het trekken van grenzen noodzakelijk, maar ook potentieel misleidend, in systeemmodellering? Gebruik voorbeelden zoals 'clouds' en de evolutie van parkmanagement om uw punt te verduidelijken. Meadows stelt dat "er altijd grenzen aan groei zullen zijn." Leg uit wat zij hiermee bedoelt, zowel vanuit een zelfopgelegd als een systeem-opgelegd perspectief. Hoe relateert dit concept zich aan de 'tragedy of the commons' en welke lessen kunnen we hieruit trekken voor duurzaam beheer van hulpbronnen? Het concept van 'bounded rationality' verklaart waarom goedbedoelde individuele acties vaak tot ongewenste systeemuitkomsten leiden. Bespreek hoe de structuur van een systeem, inclusief informatie, prikkels en doelen, de beslissingen van actoren vormt. Hoe kan het herontwerpen van deze structuren leiden tot betere systeemprestaties? Woordenlijst van Sleuteltermen Balancing feedback loop: Een stabiliserende, doelzoekende, regulerende feedbacklus, ook wel een "negatieve feedbacklus" genoemd, omdat deze de richting van de verandering die op het systeem wordt uitgeoefend, tegengaat of omkeert. Bounded rationality: De logica die leidt tot beslissingen of acties die zinvol zijn binnen één deel van een systeem, maar niet redelijk zijn in een bredere context of wanneer ze worden gezien als onderdeel van het bredere systeem. Buffers: De omvang van stabiliserende stocks in verhouding tot hun flows; grote stocks die veranderingen opvangen en vertragen, waardoor ze het systeem stabiliseren. Delays (Vertragingen): Tijdslagen in flows, waarneming, verwerking of reactie die het dynamische gedrag van een systeem sterk beïnvloeden en kunnen leiden tot oscillaties of onverwachte uitkomsten. Dynamic equilibrium: De toestand waarin de stock (het niveau of de omvang) stabiel en onveranderd blijft, ondanks instromen en uitstromen. Dit is alleen mogelijk wanneer alle instromen gelijk zijn aan alle uitstromen. Dynamics: Het gedrag over tijd van een systeem of een van zijn componenten. Elements (Elementen): De zichtbare, tastbare onderdelen van een systeem, maar ook immateriële zaken zoals trots of vaardigheid. Het zijn de "dingen" waaruit een systeem is opgebouwd. Feedback loop: Het mechanisme (regel of informatiestroom of signaal) dat een verandering in een stock toelaat om een flow in of uit diezelfde stock te beïnvloeden. Een gesloten keten van causale verbanden van een stock, via een reeks beslissingen en acties afhankelijk van het niveau van de stock, en weer terug via een flow om de stock te veranderen. Flow: Materiaal of informatie dat een stock binnengaat of verlaat gedurende een bepaalde periode. Flows vullen of legen stocks. Hierarchy: Systemen georganiseerd op een manier die een groter systeem creëert. Subsystemen binnen systemen, die weer zijn ingebed in andere systemen. Leverage points: Plaatsen in een systeem waar een kleine verandering een grote, langdurige impact kan hebben op het gedrag van het systeem als geheel. (Hoewel niet direct gedefinieerd, is dit een centraal concept in de tekst en de bredere context van Meadows' werk). Limits to growth: Het concept dat er altijd grenzen zullen zijn aan fysieke groei, of deze nu zelfopgelegd zijn of door het systeem worden afgedwongen. Geen enkele fysieke entiteit kan voor altijd groeien. Paradigms: De diepste sets van overtuigingen of aannames over hoe de wereld werkt; de gedeelde sociale overeenkomsten over de aard van de werkelijkheid. Paradigma's zijn de bronnen van systemen, waaruit system doelen, informatiestromen en feedbackloops voortkomen. Policy resistance: Een systeemvalkuil waarbij de doelen van subsystemen verschillend en inconsistent zijn met elkaar, wat leidt tot een patstelling en weerstand tegen verandering in het hele systeem. Reinforcing feedback loop: Een feedbacklus die een verandering in het systeem versterkt en leidt tot exponentiële groei of verval. Ook bekend als een "positieve feedbacklus" omdat deze de richting van de verandering handhaaft of versnelt. Rule beating: Een systeemvalkuil waarbij evasieve acties worden ondernomen om de intentie van de regels van een systeem te omzeilen, door de letter, maar niet de geest, van de wet te volgen, wat kan leiden tot perverse gedragingen en systeemvervormingen. Self-organization: Het vermogen van een systeem om zijn eigen structuur, gedrag en doelen te creëren, zonder externe controle of sturing. Dit omvat de evolutie van nieuwe structuren en toenemende complexiteit, zoals hiërarchie. Shifting the burden: Een systeemvalkuil waarbij een symptoom van een probleem wordt aangepakt, maar de onderliggende oorzaak onbehandeld blijft, wat vaak leidt tot afhankelijkheid van de symptomatische oplossing en een verzwakking van het systeem op lange termijn. Stock: De fundering van elk systeem; een hoeveelheid, een accumulatie of een opslag van materiaal of informatie die zich in de loop van de tijd heeft opgebouwd. Het kan worden gezien, gevoeld, geteld of gemeten op een bepaald moment. System: Een verzameling elementen, onderlinge verbindingen en een functie of doel, die samen een geheel vormen met een specifiek gedrag dat niet alleen kan worden begrepen door de afzonderlijke delen te kennen. Tragedy of the commons: Een systeemvalkuil waarbij individuen, handelend in hun eigen belang, een gedeelde, beperkte hulpbron uitputten, omdat de voordelen van extra gebruik bij het individu liggen, terwijl de kosten worden gedeeld door iedereen. -- Verkiezingen 2025 Israël–Palestina Pro-Israël → Pro-Palestina PVV → VVD → JA21 → NSC → CDA → D66 → SP → PvdD → GroenLinks–PvdA → DENK Standpunten Israël–Palestina Partij Kernpunten PVV Uiterst pro-Israël; éénstaatoplossing, ambassade Jeruzalem. VVD Pro-Israël; diplomatie, geen sancties, intern verdeeld. JA21 Sterk pro-Israël; Hamas/Iran dreiging benadrukt. NSC Licht pro-Israël; tweestatenoplossing, geen sancties. CDA Zelfverdediging Israël, maar humanitair recht; tweestatenoplossing. D66 Tweestatenoplossing (1967-grenzen); erkenning Palestijnse staat. SP Kritisch; noemt oorlog mogelijk genocide; erkenning Palestina. PvdD Pro-Palestina; sancties tegen Israël, gelijkwaardigheid. GroenLinks–PvdA Wapenembargo, sancties, stop nederzettingen. DENK Uiterst pro-Palestina; sancties, boycot, directe erkenning. Immigratie Restrictief → Ruimhartig PVV → JA21 → VVD → NSC → CDA → D66 → SP → GroenLinks–PvdA → PvdD → DENK Standpunten Immigratie Partij Kernpunten PVV Immigratie islamitische landen stoppen, asiel afschaffen. JA21 Asiel beperken, opvang in regio, minder arbeidsmigratie. VVD Instroom beperken, opvang in regio, kennismigratie welkom. NSC Strengere regels, integratie, opvang in regio. CDA Opvang in regio, streng terugkeerbeleid, ruimte voor MKB. D66 Menswaardig asielbeleid in EU, kennismigratie open. SP Humaan asielbeleid, kritisch op arbeidsmigratie door bedrijven. GroenLinks–PvdA Solidaire opvang, bescherming tegen uitbuiting. PvdD Humaan asielbeleid, bescherming vluchtelingenrechten. DENK Sterk pro-migratie; gelijke kansen en rechten. Bedrijven & Vestigingsklimaat Pro-bedrijven → Kritisch op bedrijven VVD → JA21 → NSC → CDA → PVV → D66 → GroenLinks–PvdA → SP → PvdD → DENK Standpunten Bedrijven Partij Kernpunten VVD Zeer pro-bedrijven, lage lasten, aantrekkelijk klimaat. JA21 Lagere lasten, minder regeldruk, tegen beurstaksen. NSC Vestigingsklimaat belangrijk, maar streng op constructies. CDA Pro-MKB, industrie behouden, maar duurzaamheidsregels. PVV Lagere lasten, vooral voor nationale bedrijven. D66 Balans: steun innovatie, hogere lasten op vervuiling. GroenLinks–PvdA Hogere winsten/kapitaal belasten, beurstaks. SP Forse belastingen op winsten en aandeleninkoop. PvdD Zware lasten op vervuiling, strengere regels. DENK Sociale rechtvaardigheid boven bedrijfsbelangen. Belastingdruk Particulieren Laag → Hoog PVV → VVD → JA21 → NSC → CDA → D66 → DENK → GroenLinks–PvdA → PvdD → SP Standpunten Belastingdruk Particulieren Partij Kernpunten PVV Lasten verlagen (energie, btw, zorg), lagere belastingdruk. VVD Lage lasten werkenden, beperken inkomstenbelasting. JA21 Lagere inkomsten- en erfbelasting, tegen vermogenslasten. NSC Middeninkomens ontzien, milde stijging hogere inkomens. CDA Gezinnen en middeninkomens ontzien, eerlijke verdeling. D66 Arbeid omlaag, vermogen en vervuiling omhoog. DENK Lage inkomens ontzien, hoge inkomens en kapitaal zwaarder. GroenLinks–PvdA Progressief stelsel, hogere lasten top, lagere lasten midden. PvdD Arbeid ontzien, hogere belasting op vervuiling en vermogen. SP S terke herverdeling, veel hogere lasten rijkdom/vermogen. Inkomen & Werk Marktgericht / lage herverdeling → Sterke herverdeling / inkomensgelijkheid VVD → JA21 → PVV → NSC → CDA → D66 → DENK → GroenLinks–PvdA → PvdD → SP Standpunten Inkomen & Werk Partij Kernpunten VVD Lage lasten op werk; stimuleren ondernemerschap en hoge inkomens; beperkt herverdelingsbeleid. JA21 Lagere lasten op arbeid; meer ruimte voor ondernemers en middeninkomens; tegen extra progressieve belastingen. PVV Lastenverlichting voor midden- en lage inkomens; meer koopkracht; minder nadruk op herverdeling via belastingen. NSC Focus op middeninkomens; eerlijk loon; beperkt hogere lasten voor topinkomens; balans tussen markt en bescherming. CDA Waarde voor werk en gezin; inkomensverschillen accepteren, maar steun voor kwetsbare groepen; gematigde herverdeling. D66 Lasten verschuiven van arbeid naar vermogen en vervuiling; minimumloon verhogen; stimuleren werk via scholing. DENK Gelijke kansen op de arbeidsmarkt; hogere lasten voor hoge inkomens; bestrijden van discriminatie op werkvloer. GroenLinks–PvdA Sterke inkomensherverdeling; hogere belastingen voor topinkomens; verhoging minimumloon en betere sociale zekerheid. PvdD Meer gelijkheid; hogere lasten voor vervuilende en rijke groepen; basiszekerheid centraal boven marktwerking. SP Zeer sterk voor herverdeling; forse verhoging minimumloon; hogere belastingen voor grootverdieners; inkomensverschillen terugdringen. Vermogensbelasting Laag → Hoog VVD → PVV → JA21 → NSC → CDA → D66 → DENK → GroenLinks–PvdA → PvdD → SP Standpunten Vermogensbelasting Partij Kernpunten VVD Tegen hogere vermogensbelasting; geen beurstaks. PVV Lastenverlichting sparen/huizen; tegen hogere vermogensbelasting. JA21 Tegen vermogens- en beurstaks; lagere erfbelasting. NSC Aanpak constructies, spaarders ontzien. CDA Kleine vermogens ontzien, milde verhoging top. D66 Meer progressiviteit; hogere vermogensbelasting. DENK Hogere belasting op hoge vermogens; eerlijke verdeling. GroenLinks–PvdA Progressieve vermogensbelasting, beurstaks. PvdD Extra belasting vermogen, koppeling aan ecologie. SP Forse vermogensbelasting; aanpak grootkapitaal. Europa (EU-integratie) Minder EU / nationaler → Meer EU / federaler PVV → JA21 → SP → NSC → VVD → CDA → PvdD → DENK → GroenLinks–PvdA → D66 Standpunten Europa (EU-integratie) Partij Kernpunten PVV S terk EU-kritisch; soevereiniteit boven EU; tegen verdere integratie (tot en met uittredingsretoriek). JA21 Minder macht voor Brussel; geen overdracht van bevoegdheden; strenger op migratie en grenzen in EU-kader. SP Links EU-kritisch; tegen neoliberale regels; samenwerking ja, geen federale EU of begrotingsunie. NSC Nuchter en terughoudend; subsidiariteit; kritischer op nieuwe overdracht van bevoegdheden. VVD Pro-EU voor handel/veiligheid; geen federale sprongen; strenger op begrotings- en migratieregels. CDA Constructief pro-EU; hervormen i.p.v. federaliseren; samenwerking op veiligheid, landbouw en economie. PvdD EU voor klimaat/dierenwelzijn; kritisch op landbouw- en handelsbeleid; geen federale focus. DENK Overwegend pro-EU; inzet op grondrechten en bescherming arbeidsmigratie binnen EU-kader. GroenLinks–PvdA Duidelijk pro-EU; versterking voor klimaat, sociaal beleid en rechtsstaat. D66 Zeer pro-EU/federaler; verdieping integratie (defensie, rechtsstaat, klimaat, innovatie). Landbouw en Stikstof Boeren beschermen / minder regels → Strenge stikstof / krimp veestapel PVV → JA21 → CDA → VVD → NSC → DENK → SP → D66 → GroenLinks–PvdA → PvdD Standpunten Landbouw en Stikstof Partij Kernpunten PVV Boeren maximaal ontzien; stikstofnormen versoepelen; geen gedwongen krimp/onteigening. JA21 Regeldruk omlaag; techniek en innovaties i.p.v. krimp; kritischer op Natura2000/meetmethodes. CDA Boerenperspectief centraal; gebiedsgericht maatwerk; liefst vrijwillige uitkoop. VVD Mix van innovatie, verduurzaming en vrijwillige uitkoop; doelen naleven met zo min mogelijk dwang. NSC Realistische doelen; gebiedsgericht; eerst meten en plannen verbeteren; dwang als laatste redmiddel. DENK Duurzaam en sociaal: milieudoelen met compensatie; eerlijk inkomen voor boeren. SP Ecologische doelen halen, kleine/gezinsbedrijven beschermen; aanpak megastallen en ketenmacht. D66 Sneller natuurherstel; duidelijke reductie; vrijwillige uitkoop grootschalig, krimp waar nodig. GroenLinks–PvdA Strenge stikstofaanpak; veestapel verkleinen; natuur/waterkwaliteit prioriteit; eerlijke transitie. PvdD Vergaande krimp veestapel; uitfaseren intensieve veehouderij; natuur- en dierenwelzijn voorop. Klimaat & Energie Fossiele energie behouden → Snelle verduurzaming / fossiel uitfaseren PVV → JA21 → CDA → VVD → NSC → SP → DENK → GroenLinks–PvdA → D66 → PvdD Standpunten Klimaat & Energie Partij Kernpunten PVV Klimaatbeleid “hysterie”; fossiele brandstoffen behouden; tegen klimaatplannen en windmolens. JA21 Pragmatisch: energiezekerheid via gas en kernenergie; tegen snelle uitfasering fossiel; kritischer op subsidies. CDA Stapsgewijs verduurzamen; mix van kernenergie, hernieuwbaar en innovatie; sectoren meenemen. VVD Klimaatbeleid met oog voor economie; kernenergie, waterstof, innovatie; fossiel afbouwen bij zekerheid. NSC Realistisch: reductie nodig, maar tempo/kosten beheersen; kernenergie belangrijk. SP Eerlijke transitie; energierekening omlaag; investeren in publieke energiebedrijven en isolatie. DENK Verduurzaming met sociale rechtvaardigheid; beleid betaalbaar houden voor gezinnen. GroenLinks–PvdA Ambitieus; hernieuwbaar, isolatie en ov; fossiel snel uitfaseren. D66 Hogere klimaatdoelen; zon, wind en kernenergie; NL koploper. PvdD Vergaand; fossiel snel afbouwen; tegen kernenergie; focus op natuur, hernieuwbaar, consumptie omlaag. Sociaal-cultureel beleid (identiteit & diversiteit) Nationale identiteit → Multicultureel / diversiteit centraal PVV → JA21 → NSC → VVD → CDA → SP → PvdD → GroenLinks–PvdA → D66 → DENK Standpunten Sociaal-cultureel beleid (identiteit & diversiteit) Partij Kernpunten PVV Nadruk op Nederlandse identiteit; tegen islamisering en diversiteitsbeleid; “eigen cultuur eerst”. JA21 Beperken immigratie en culturele invloed; kritischer op diversiteitsbeleid; nationale waarden. NSC Waarden en normen behouden; gematigd kritisch op identiteitspolitiek; wel ruimte voor integratie. VVD Integratieplicht; burgerschap en taal; diversiteit mag, geen aparte behandeling. CDA Gemeenschapswaarden; verbondenheid; integratie via samenleving en onderwijs. SP Gelijkheid voor iedereen; kritisch op symboolpolitiek; nadruk op solidariteit en gelijke kansen. PvdD Gelijke rechten; steun voor inclusiebeleid; ethiek en rechtvaardigheid. GroenLinks–PvdA S terk pro-diversiteit; actief tegen discriminatie; diversiteit als verrijking. D66 Vrijheid en diversiteit; pro-LHBTQ+; inclusie en multiculturaliteit. DENK Uiterst pro-diversiteit; bestrijding racisme en discriminatie; diversiteit als kracht. Defensie & NAVO Minder defensie-uitgaven → Meer investeren in NAVO/leger PvdD → SP → DENK → GroenLinks–PvdA → D66 → CDA → NSC → VVD → JA21 → PVV Standpunten Defensie & NAVO Partij Kernpunten PvdD Zeer kritisch op militaire uitgaven; drastische verlaging; focus op vrede, klimaat, diplomatie. SP Tegen verhoging NAVO-uitgaven; defensie nationaal; minder interventies. DENK Defensie als bescherming, kritisch op interventies; meer diplomatie; minder wapenwedloop. GroenLinks–PvdA NAVO-bijdragen halen met nadruk op samenwerking en vredesmissies; kritisch op wapenuitgaven. D66 Verhoging richting NAVO-norm; sterke Europese defensiesamenwerking. CDA Traditioneel pro-defensie; NAVO en krijgsmacht versterken; structureel verhogen. NSC Verhoging defensiebudget; NAVO-verplichtingen nakomen; realistisch beleid. VVD S terk pro-defensie; NAVO-norm halen/vasthouden; investeren in materieel en cyber. JA21 Zeer pro-defensie; meer soevereiniteit; investeren in krijgsmacht; NAVO-bijdrage halen. PVV Extreem pro-defensie; forse verhoging; nationale veiligheid, politie en krijgsmacht. Onderwijs & Gelijkheid Meer keuzevrijheid / minder overheid → Meer gelijkheid / sterkere overheid VVD → JA21 → CDA → NSC → PVV → D66 → DENK → GroenLinks–PvdA → PvdD → SP Standpunten Onderwijs & Gelijkheid Partij Kernpunten VVD Keuzevrijheid voor ouders/scholen; steun bijzonder onderwijs; nadruk op prestaties. JA21 Meer autonomie en marktwerking; ruimte voor selectie; minder overheidsbemoeienis. CDA Versterken bijzonder onderwijs; waarden en gemeenschap; overheid faciliteert. NSC Basisvaardigheden centraal; ongelijkheid tegengaan; diversiteit behouden. PVV Orde en discipline; Nederlandse identiteit; minder nadruk op gelijke-kansenbeleid. D66 Kansengelijkheid; investeren in leraren en innovatie; minder vroege selectie. DENK Tegen discriminatie; kansengelijkheid centraal; meer diversiteit en inclusie. GroenLinks–PvdA Gelijke kansen; meer geld naar achterstandsscholen; minder selectie, meer inclusie. PvdD Onderwijs voor duurzaamheid en gelijkheid; brede vorming i.p.v. prestatiecultuur. SP Tegen kansenongelijkheid; meer geld naar publieke scholen; stoppen met marktwerking. Wonen & Huurbeleid Vrije markt / minder regels → Sterke regulering / veel sociale huur VVD → JA21 → PVV → NSC → CDA → D66 → DENK → SP → GroenLinks–PvdA → PvdD Standpunten Wonen & Huurbeleid Partij Kernpunten VVD Meer bouwen door marktpartijen; stimuleren koopsector; beperkte regulering huren. JA21 Woningbouw stimuleren via markt; minder regels; huurregulering beperkt houden. PVV Betaalbare woningen vooral voor Nederlanders; beperkt reguleren; kritisch op woningtoewijzing aan statushouders. NSC Balans tussen markt en regulering; wil huurders beter beschermen; tegelijk sneller bouwen. CDA Investeren in bouwen; gemengd beleid: regulering waar nodig, marktwerking behouden; focus op gezinnen. D66 Meer middenhuur en sociale huur; huurregulering versterken; tegelijkertijd inzet op nieuwbouw. DENK Meer betaalbare huurwoningen; bescherming tegen discriminatie en scheefwonen; regulering vergroten. SP Sterk reguleren huurmarkt; fors uitbreiden sociale woningbouw; woningcorporaties versterken. GroenLinks–PvdA Veel meer sociale huur; strikte huurregulering; stevig ingrijpen in markt voor betaalbaarheid. PvdD Sterke regulering en duurzaamheid centraal; meer sociale huur; nadruk op ecologische woonoplossingen. Hypotheekrenteaftrek Behouden → Volledige afbouw/afschaffing PVV → JA21 → CDA → VVD → NSC → DENK → D66 → GroenLinks–PvdA → PvdD → SP Standpunten Hypotheekrenteaftrek Partij Kernpunten PVV Volledig behouden; huizenbezit beschermen; tegen verdere beperking van de aftrek. JA21 Behoud HRA; wil lasten op huizenbezit verlagen; ziet aftrek als stimulans voor middenklasse. CDA Wil HRA grotendeels behouden; geleidelijke aanpassingen mogelijk, maar zekerheid voor huiseigenaren staat voorop. VVD Afbouw zoals afgesproken doorzetten (aftrektarief verlagen), maar tegen volledige afschaffing. NSC Voorzichtige verdere afbouw mogelijk; eerlijker verdeling tussen huurders en kopers; geleidelijk invoeren. DENK Open voor hervorming; wil ongelijkheid huurders–kopers aanpakken, maar tegen plotselinge afschaffing. D66 Wil HRA sneller afbouwen; lasten verschuiven naar vermogen; huizenmarkt minder scheef maken. GroenLinks–PvdA Wil sterke afbouw; HRA vooral voor hogere inkomens afschaffen; geld naar betaalbare huurwoningen. PvdD Wil versnelde afbouw; ziet HRA als subsidie voor overconsumptie en milieubelastend bouwen. SP Wil volledige afschaffing voor hoge inkomens; drastische hervorming; richten op betaalbare huisvesting i.p.v. fiscale voordelen. Kinderopvang Beperkt / inkomensafhankelijk → Gratis / universeel PVV → JA21 → VVD → CDA → NSC → DENK → SP → PvdD → GroenLinks–PvdA → D66 Standpunten Kinderopvang Partij Kernpunten PVV Geen universeel gratis kinderopvang; ondersteuning alleen voor Nederlandse gezinnen; kritischer op kosten en migratie-effecten. JA21 Tegen gratis opvang voor iedereen; steun afhankelijk van inkomen en werk; wil misbruik tegengaan. VVD Ruimhartige kinderopvangtoeslag, maar niet volledig gratis; vooral gericht op werkende ouders en arbeidsparticipatie. CDA Kinderopvang deels inkomensafhankelijk; combinatie werk en gezin ondersteunen; geen volledig gratis opvang. NSC Betaalbare opvang belangrijk, maar wil gericht beleid; geen universele gratis opvang, maar inkomensafhankelijk en beheerst. DENK Wil betaalbare opvang voor iedereen; inkomensafhankelijk, met nadruk op kansengelijkheid en inclusie. SP Vier dagen per week gratis kinderopvang; opvang als publieke voorziening; gelijke kansen voor alle kinderen. PvdD Gratis kinderopvang als recht; koppeling met duurzaamheid en gezonde voeding; nadruk op gelijkheid. GroenLinks–PvdA Vier dagen per week gratis opvang voor alle kinderen; universaliteit en kansengelijkheid centraal. D66 Het verstgaand: gratis kinderopvang bijna volledig invoeren; opvang als recht voor ieder kind, niet gekoppeld aan werk. Overheidstekort Bezuinigen / strikte begrotingsdiscipline → Meer lenen / investeren met tekort JA21 → VVD → CDA → NSC → PVV → D66 → DENK → GroenLinks–PvdA → PvdD → SP Standpunten Overheidstekort Partij Kernpunten JA21 Strikte begrotingsdiscipline; tegen hoge staatsschuld; wil bezuinigen i.p.v. lenen. VVD Voorzichtig met tekort; wil ruimte houden voor bedrijven en lage belastingen; beperkte investeringen. CDA Degelijk begrotingsbeleid; investeren mag, maar alleen binnen Europese kaders; voorzichtig met schuld. NSC Begrotingsdiscipline belangrijk; maar ruimte voor investeringen in zorg en onderwijs; gematigde lijn. PVV Wil meer uitgeven aan zorg en veiligheid; minder oog voor begrotingsdiscipline; bezuinigen niet prioriteit. D66 Ruimte om te lenen voor klimaat en onderwijs; begroting in balans op lange termijn; meer investeringsgericht. DENK Meer investeren in sociale voorzieningen en kansengelijkheid; begroting mag tijdelijk in tekort gaan. GroenLinks–PvdA Bereid meer te lenen voor klimaat, zorg en onderwijs; tekort gebruiken als investeringsinstrument. PvdD Meer lenen en investeren voor duurzaamheid en natuur; begroting ondergeschikt aan ecologische doelen. SP Geen angst voor tekort; wil fors investeren in publieke sector; bezuinigen afgewezen, lasten bij grootkapitaal. Hoe een Economie Werkt: Het Eilandverhaal De tekst is een uitgebreide allegorie die de  fundamentele principes van de economie  uitlegt, beginnend met een primitieve samenleving op een eiland. De kern van het verhaal draait om  productiviteit ,  kapitaalaccumulatie  en  innovatie . Door het verhaal van drie eilandbewoners – Able, Baker en Charlie – wordt duidelijk gemaakt hoe  sparen, lenen en investeren  leiden tot een toename van de welvaart voor alle betrokkenen. Uiteindelijk laat de tekst zien hoe een groeiende economie leidt tot  specialisatie, de opkomst van diensten en de introductie van geld  als ruilmiddel, waarbij de focus ligt op het belang van  gereedschappen en efficiëntie voor het vervullen van menselijke behoeften. Het Begin Er waren eens drie mannen — Able, Baker en Charlie — die samen op een eiland woonden. Geen tropisch paradijs hoor, maar een ruige, kale plek zonder luxe. Hun menu? Simpel: vis. Altijd vis. Ontbijt, lunch én diner. Gelukkig wemelde het rondom het eiland van de wonderlijk identieke vissen, precies groot genoeg om één man een dag te voeden. Maar er was één probleem: er bestond daar nog geen enkele visserijtechniek. Geen hengels, geen boten, geen fancy sonar. Het beste wat ze konden doen, was het water in springen en de glibberige beesten met hun blote handen proberen te grijpen. Met die onhandige methode lukte het elke man precies één vis per dag te vangen. Net genoeg om morgen weer op te staan en opnieuw te beginnen. Zo draaide hun hele economie: wakker worden, vissen, eten, slapen. Niet bepaald een bruisend bestaan, maar ach — beter dan doodgaan. In hun supereenvoudige, sushi-gebaseerde samenleving gold één harde regel: Geen spaargeld! Geen krediet! Geen investeringen! Alles wat gevangen werd, verdween meteen in de pan. Geen voorraad, geen “visbank” voor moeilijke tijden. Toch waren Able, Baker en Charlie geen domme jongens. Net als ieder ander mens wilden ze hun leven verbeteren. Maar zolang ze per dag maar net één vis konden vangen, zaten ze vast op het minimum om te overleven. Op een avond, terwijl hij naar de sterrenhemel staarde, zuchtte Able: “Is dit het nou? Er moet toch meer zijn in het leven dan vis vangen met mijn handen?” Hij droomde van betere, hippe palmbladkleding. Van een hut die de moesson kon trotseren. En — jawel — van een carrière als filmregisseur. Maar hoe kom je ooit toe aan dromen als je de hele dag achter vissen aanzit? Toen begon er iets te ratelen in zijn hoofd. Wat nou als hij een apparaat zou maken dat de hand van de mens verlengt én de vis minder kans geeft om te ontsnappen? Een geniale ingeving: een net ! Daarmee kon hij in minder tijd méér vissen vangen. En met de vrijgekomen tijd kon hij zich eindelijk richten op zijn kledinglijn, een degelijk dak boven zijn hoofd en natuurlijk dat briljante filmscenario. De orkestmuziek begon in zijn hoofd te zwellen, hij zag het al helemaal voor zich: een leven zonder dagelijkse visdrama’s. Vol goede moed begon hij palmbast tot touw te draaien. De volgende dag keek Baker hem verbaasd aan. “Wat doe je nou? Op dieet zeker? Straks verhonger je.” Able straalde: “Nee, ik bouw een apparaat dat me oceanen vol vis gaat opleveren. Als ik klaar ben, zal ik minder hoeven vissen en nooit meer honger lijden.” Charlie rolde met zijn ogen. “Dit is waanzin, ik zeg je… waanzin! En als het mislukt, kom je niet bij mij bedelen om een stukje vis.” Maar Able liet zich niet ontmoedigen en vlocht rustig door. Aan het eind van de dag was het zover: zijn net was klaar. Hij had, zonder dat hij het zo noemde, kapitaal gecreëerd — en dat met lege maag. Die nacht lag hij hongerig in het zand, terwijl Baker en Charlie tevreden knorden met volle buiken. Maar in zijn hoofd dansten de vissen hem al tegemoet. Hij wist: morgen komt mijn moment. En inderdaad: de volgende ochtend werd hij eerst nog uitgelachen. “Leuk hoedje!” grinnikte Baker. “Maar een beetje warm voor tennis,” voegde Charlie toe. Able haalde zijn schouders op. “Lach maar, jongens. We zullen zien wie er lacht als ik tot aan mijn oksels in de visdarmen sta.” Onhandig waggelde hij de branding in met zijn vreemde uitvinding. Maar na wat stuntelen kreeg hij de slag te pakken en — hap! — de eerste vis zat erin. Baker en Charlie stopten met lachen. Een uur later trok Able zijn tweede vis van de dag op het strand. Hun monden vielen open: normaal kostte het hen een hele dag om er maar één te vangen! En zo veranderde de economie van het eiland in één klap. Able had zijn productiviteit verdubbeld. Niet alleen goed voor hem, maar uiteindelijk ook voor iedereen. Terwijl hij naar zijn vangst keek, dacht hij triomfantelijk: “Met één dag vissen kan ik nu twee dagen eten. Dat betekent dat ik elke andere dag iets anders kan doen. De mogelijkheden zijn eindeloos!” Uitleg Doordat Able zijn productiviteit had verdubbeld, kon hij nu méér produceren dan hij zelf nodig had om op te eten. En precies dáár begint de magie van economie: uit hogere productiviteit vloeien alle andere voordelen voort. Voor hij zijn gok waagde en dagenlang met een knorrende maag een net zat te vlechten, bestond er op het eiland geen enkele vorm van spaargeld. Alles wat werd gevangen, werd dezelfde dag nog opgesmikkeld. Maar doordat Able bereid was dat risico te nemen en zichzelf één dagje honger te gunnen, had hij het allereerste stuk kapitaal van het eiland gebouwd: een net! En dat net leverde meteen meer vis op dan hij kon verstouwen. Overschot! Reserve! Voorraad! (En om dit sprookje werkbaar te houden, doen we even alsof vis nooit bederft.) Dat beetje extra productie, die spaarpot in de vorm van vis, is het levenssap van elke gezonde economie. Vanaf dat moment veranderde alles: het eiland had niet langer alleen maar een dagelijks overlevingsritme, maar een echte basis om te groeien. Voor alle diersoorten — behalve de onze — draait economie in feite maar om één ding: dag tot dag overleven. Voedsel is schaars, het weer is genadeloos, roofdieren liggen op de loer, ziektes zijn verraderlijk, en echte innovaties komen maar zelden voor. Het beste wat dieren kunnen bereiken, is een schamele overleving… met tussendoor nog net genoeg tijd voor voortplanting. Meer is beter.... Wij mensen zouden precies hetzelfde lot hebben (zoals trouwens nog helemaal niet zo lang geleden het geval was), ware het niet voor twee dingen: ons grote brein en onze handige handen. Door die twee samen te gebruiken, zijn we erin geslaagd gereedschappen en machines te maken die ons vermogen om méér uit onze omgeving te halen enorm vergroten. Econoom Thomas Woods daagt zijn studenten graag uit met een gedachte-experiment: stel je voor dat alle machines en gereedschappen plotseling verdwijnen. Auto’s, tractors, hoogovens, schoppen, kruiwagens, zagen, hamers, speren… alles! Pats, foetsie! En alles wat we consumeren, zouden we weer met onze blote handen moeten jagen, verzamelen, planten en maken. Dat zou niet fraai zijn. Stel je voor hoe lastig eten wordt als je groot wild te lijf moet gaan met je tanden, vuisten en nagels. Vergeet het maar. Een konijn zou misschien nog wel lukken… maar ja, je moet het eerst nog vangen. Groenten verbouwen? Oogsten met je handen, en geen zakken om de boel in te stoppen. Kleren en meubels maken? Zonder fabrieken, zonder scharen, zonder spijkers? Succes ermee. Ondanks ons verstand zouden we economisch gezien niet beter af zijn dan chimpansees of orang-oetans. Gereedschappen maken echt het verschil. Ze maken een economie mogelijk. Speren helpen ons bij de jacht, schoppen bij het planten van gewassen, en netten bij het vangen van vis. Al die hulpmiddelen versterken de kracht van ons werk. Hoe meer we kunnen maken, hoe meer we kunnen consumeren, en hoe welvarender ons leven wordt. De simpelste definitie van economie is dan ook: het zo goed mogelijk benutten van schaarse middelen (en bijna álles is schaars) om zoveel mogelijk menselijke behoeften te vervullen. Gereedschappen, kapitaal en innovatie zijn de sleutels van die vergelijking. Met dat in gedachten is het makkelijk te zien wat een economie laat groeien: telkens betere manieren vinden om méér dingen te maken die mensen graag willen hebben. En dat principe verandert nooit — hoe groot een economie uiteindelijk ook wordt. We gaan door met het sprookje... Able, de ondernemer van het eiland, leek een glanzende toekomst tegemoet te gaan. Maar wat betekende dat voor de rest? Was er niet net een klassenverschil ontstaan — de ‘haves’ en de ‘have-nots’? Zou Baker en Charlie’s leven nu slechter worden door Able’s succes? Waarschijnlijk niet. Want ook al had Able helemaal niet de bedoeling om iemand anders te helpen dan zichzelf, zijn kapitaal zou uiteindelijk iedereen ten goede komen. Toen Baker en Charlie zagen hoe makkelijk Able nu zijn vissen binnenhaalde, konden ze hun nieuwsgierigheid niet bedwingen. “Hé, Able,” zei Charlie, “je gebruikt dat ding maar om de dag. Laat mij het dan gebruiken als jij iets anders gaat doen.” “Kom op, deel een beetje van de rijkdom, vriend,” voegde Baker toe. Maar Able was niet van gisteren. Hij herinnerde zich zijn eigen hongerige dagen, hun spottende opmerkingen, en bovenal het risico dat hij had genomen. Wat als ze mijn net kapotmaken? Wat als ik het nooit terugkrijg? Dan ben ik weer terug bij af. Dag designer palmbladmode! Dus hield hij de boot af: “Sorry jongens, geen sprake van. Ik heb mijn eigen net gemaakt, dus jullie kunnen dat ook. Het voordeel is dat je nu in elk geval wéét dat het werkt!” Charlie fronste. “Maar hoe weet ik dat ik het goed doe? Ik heb nog nooit zoiets gemaakt. En bovendien: ik kan niet zo goed tegen honger, ik ga ervan trillen. Voor ik een fatsoenlijk net heb, ben ik waarschijnlijk al verhongerd.” Baker dacht even na en kwam met een ander voorstel. “Oké gierigaard, jij wilt ons geen gunsten doen, dat begrijpen we. Maar wat als je ons een paar van je reservevissen uitleent om van te leven terwijl we ons eigen net maken? Dan verhongeren we niet, en we betalen je elke vis netjes terug zodra we extra hebben gevangen.” Dat klonk al beter, maar Able bleef sceptisch. “En wat als jullie gewoon een dagje op het strand gaan liggen bakken in de zon? Of wat als jullie netten helemaal niet werken? Dan krijg ik mijn vissen nooit meer terug en ben ik mijn spaargeld kwijt. Nee hoor, daar trap ik niet in.” Baker en Charlie begrepen dat hij een punt had: ze vroegen hem eigenlijk om risico te nemen zonder er zelf iets voor terug te doen. Toch lonkte het vooruitzicht van extra vis te sterk. Dus broedden ze verder en bedachten een deal. “Luister,” zei Baker, “laten we een afspraak maken: voor elke vis die jij ons uitleent, betalen wij er twee terug. Honderd procent winst! Waar anders op dit eiland ga je zo’n rendement halen?” Dat trok Able’s aandacht. Zijn ogen begonnen te glimmen. “Nu wordt het interessant!” Hij rekende snel: als ik twee vissen uitleen en vier terugkrijg, ben ik zonder enig werk twee vissen rijker. Ik word gewoon een vistycoon! Het leek bijna alsof hij de snor van een Hollywoodschurk stond te twirlen. Maar in werkelijkheid was het minder sinister dan het klonk. Want ook al wilde Able alleen zijn eigen voorraadkast vullen, zijn zogenaamde “hebzucht” zorgde ervoor dat de anderen een kans kregen die ze anders nooit gehad zouden hebben. Toch had Able meerdere opties: Hij kon gewoon zijn vissen bewaren voor later. Veilig, maar dan groeide zijn spaargeld niet. Hij kon zijn spaargeld gewoon zelf opeten. Lekker, maar weg spaargeld. Hij kon een heuse nettenverhuur beginnen. Twee extra netten bouwen, die verhuren voor een halve vis per dag, en voilà: hij had genoeg inkomen om nooit meer zelf te vissen. Hallo, vervroegd pensioen! Hij kon, zoals Baker voorstelde, zijn vissen uitlenen tegen rente — met het risico dat hij ze nooit terugzag. Keuzes, keuzes, keuzes. Kort samengevat: met spaargeld kun je vijf dingen doen — sparen, consumeren, uitlenen, investeren, of een slimme mix van dit alles. Uiteindelijk hakte Able de knoop door: hij besloot de lening te verstrekken. Uitleg Voor sommigen leek het misschien alsof Able zijn voordeel gebruikte om zijn behoeftige buren uit te buiten. En ja, hij maakte winst zonder zelf extra te werken. Maar dat betekende niet dat hij zomaar “iets voor niets” kreeg. Zijn winst was de vergoeding voor het risico dat hij nam. Bovendien stond zijn winst de vooruitgang van Baker en Charlie helemaal niet in de weg. Doordat Able zijn spaargeld wilde laten renderen, kregen Baker en Charlie de kans om hun eigen netten te bouwen zonder zichzelf uit te hongeren. Lukte het hen, dan hadden ze hun economische toekomst verbeterd én hun magen gevuld. Alles wat daarbovenop kwam was bonus — of beter gezegd: extra visolie. En als het mislukte, en ze hun lening niet konden terugbetalen? Dan draaide Able zelf voor het verlies op. Kortom: een geldschieter kan alleen profiteren als de lener óók profiteert. Natuurlijk zien niet alle mensen die wederzijdse voordelen even duidelijk. Stel je eens voor dat Baker en Charlie, jaloers op Able’s groeiende rijkdom, besloten dat ze recht hadden op een deel van zijn spaargeld. “Moet je die vent zien pronken in zijn chique palmblad-smokings,” mopperde Baker, “terwijl wij ons elke dag in het zweet werken met glibberige vissen. Heeft hij nog nooit van liefdadigheid gehoord? Hij kan mij toch gerust een visje of twee missen, zodat ik af en toe een dagje vrij kan nemen? Hij heeft er zoveel liggen dat hij het verschil niet eens zou merken.” Charlie knikte instemmend. “Ja, deel die rijkdom eens, elitaire visbaron!” Of stel je een ander scenario voor: dat Able zich schuldig voelde over zijn rijkdom en zich liet overhalen om gewoon wat vissen weg te geven, zonder er iets voor terug te vragen. Wat zouden Baker en Charlie dan doen met die gratis vissen? Waarschijnlijk zouden ze de kans grijpen om lekker een dagje niets te doen. En hoewel er natuurlijk helemaal niets mis is met ontspanning (sterker nog, het is vaak het uiteindelijke doel van al ons werk), zou hun vakantie geen enkel visje extra aan de economie toevoegen. Dus hoe edelmoedig het ook klinkt, liefdadigheid zou de productiviteit van het eiland niet verhogen. Een lening daarentegen wél. De kern van het verhaal: alles wat leidt tot méér vissen (lees: productie), komt het hele eiland ten goede. Hoe meer vis er is, hoe meer mogelijkheden er zijn — om meer te eten, om andere dingen te doen naast vissen… of simpelweg om een dagje helemaal niets te doen. Sommigen zullen zich afvragen: wat als Able een échte gierigaard blijkt te zijn, die al zijn nieuwe rijkdom alleen maar gebruikt om steeds rijker en rijker te worden? Is dat werkelijk een gevaar? Niet echt. Want de enige manier waarop zijn spaargeld kan groeien (zonder dat hij zelf werkt), is door het beschikbaar te maken voor de andere eilandbewoners. Als hij het oppot, gebeurt er niets: zijn rijkdom blijft gelijk of slinkt gewoon doordat hij het zelf opeet. Het mooie van particulier kapitalisme is juist dat zelfs wie alléén door eigenbelang wordt gedreven, gedwongen wordt om de levensstandaard van anderen mee omhoog te trekken. Belangrijk inzicht Rijkdom is altijd relatief. In een primitieve samenleving waar nauwelijks iets geproduceerd wordt, kan zelfs de rijkste man niet tippen aan het materiële welzijn van de armste in een geïndustrialiseerde economie. In de Middeleeuwen misten zelfs de machtigste koningen basisgemakken die tegenwoordig in elk doorsnee huishouden te vinden zijn: centrale verwarming, stromend water en verse groente in de winter. Baker en Charlie zouden misschien dromen dat twee vissen per dag pure luxe is. Maar vanuit ons perspectief is dat nauwelijks jaloersmakend. Toch vinden veel mensen het oneerlijk dat er verschillen in rijkdom bestaan. Vaak leeft de gedachte dat de rijken rijk worden ten koste van de armen. In de moderne economie heet dat ook wel de “arbeidswaardetheorie”: het idee dat winst ontstaat door arbeiders minder te betalen dan ze waard zijn. In dat denkbeeld kunnen ondernemers — of dat nu Able is of een multinational — alleen rijk worden door anderen arm te maken. Maar dat klinkt moreel verontwaardigd, en heeft weinig met de werkelijkheid te maken. Rijkdom ontstaat omdat iemand iets van waarde biedt. Able biedt leningen aan wie zelf geen spaargeld heeft. Als hij winst maakt, komt dat alleen doordat de dienst die hij levert waardevol is voor anderen. Natuurlijk, als Able een bullebak zou zijn die simpelweg de helft van de vangst van zijn buren afperste, dán was zijn rijkdom direct verbonden met hun armoede. Maar dat soort dwang voegt niets toe aan de productieve capaciteit van het eiland. Hij zou slechts afpakken wat anderen hadden geproduceerd. Sterker nog, de totale productie zou waarschijnlijk dalen, omdat de slachtoffers minder gingen werken zodra ze beseften dat hun inzet toch gestolen werd. Geschiedenis staat bol van zulke voorbeelden van dwang: slavernij, horigheid, lijfeigenschap. Ja, mensen werken onder druk, maar veel beter werken ze wanneer ze zélf profiteren van hun arbeid. Helaas is grootschalige economische vrijheid zeldzaam in de wereldgeschiedenis. Maar wanneer eigenbelang de ruimte krijgt, groeit de productieve capaciteit razendsnel. Het gebruik van krediet is daar een perfect voorbeeld van: zolang geldschieters en leners vrij zijn om hun eigen voorwaarden af te spreken, profiteren uiteindelijk alle partijen. Maar — zoals we later zullen zien — kan die markt flink verstoord worden door invloeden van buitenaf. En dan, tja… meestal eindigt dat in een ramp. Dankzij Able’s bereidheid én vermogen om leningen te verstrekken, hadden Baker en Charlie nu ook netten die ze eerder niet bezaten. Met netten voor iedereen was de gezamenlijke visvangst van het eiland gestegen van drie vissen per dag naar zes. De economie was in één klap verdubbeld, en de toekomst zag er ineens een stuk rooskleuriger uit. Maar dit gebeurde niet alleen omdat de drie mannen ontevreden waren met hun karige leventje. Hun honger — of zoals economen het noemen: “vraag” — was wel nodig om groei aan te wakkeren, maar niet voldoende om het voor elkaar te krijgen. Vraag naar méér is menselijk. Wat we ook hebben, we willen altijd meer. Misschien niet altijd meer spullen, maar wél meer tijd, meer plezier en meer keuzemogelijkheden. En dat vraagt allemaal om extra kapitaal. Waarschijnlijk klaagden Able, Baker en Charlie al járen over hun visdieet. Het verschil was dat ze nu eindelijk hun productiviteit konden vergroten om die wensen waar te maken. Met hun extra vissen konden de eilandbewoners nu eindelijk meer dan één vis per dag eten. Maar let op: de economie groeide niet omdat ze meer consumeerden. Nee, ze consumeerden meer omdat de economie groeide. Klinkt logisch, toch? Toch is het verbazingwekkend hoeveel moderne economen erin slagen om zo’n eenvoudig idee ingewikkeld te maken. Veel economen denken namelijk dat je vraag kunt vergroten door mensen simpelweg meer geld te geven. Maar dat verandert de werkelijke vraag helemaal niet — het verandert alleen hoeveel ze kunnen uitgeven aan wat er al geproduceerd is. Pas als de productie toeneemt, kunnen mensen echt méér krijgen van wat ze willen. We gaan door met het sprookje... Na een paar weken vingen Able, Baker en Charlie vissen bij de vleet met hun nieuw gebouwde netten. Twee vissen per dag per persoon werd de nieuwe standaard. Na dat magere dieet van één vis per dag kon je ze moeilijk kwalijk nemen dat ze nu wat meer namen. Maar, omdat ze inmiddels hadden geproefd van de voordelen van zelfopoffering, besloten ze een deel van die overvloed toch opzij te leggen. Om de paar dagen deden ze het gewoon weer met één vis per persoon, en de rest ging in de spaarpot. Doordat ze niet meer elk wakkere moment hoefden te vissen, kregen ze eindelijk de vrijheid om zich met andere nuttige én plezierige dingen bezig te houden. Able stortte zich op het ontwerpen van functionelere — en eerlijk is eerlijk, véél stijlvollere — palmbladkleding. Baker verrijkte zijn dieet en kookkunsten door kokosnoten te verzamelen, en Charlie bouwde de allereerste hut van het eiland. Alles ging prima, maar Baker kreeg al snel grotere dromen. “Als we met handnetten de productie kunnen verdubbelen,” zei hij, “waarom dan niet een stap verder? Laten we industrieel gaan!” Hij schetste plannen voor een revolutionair visvangsysteem: een gigantische onderwaterval met éénrichtingsdeuren. Vissen konden er wel in… maar niet meer uit. Een soort hotel zonder uitcheckbalie. Als het werkte, hoefden ze nooit meer zelf te vissen! Maar al gauw zag Baker dat dit project veel te groot was om in zijn eentje te trekken. Het materiaal, het vlechtwerk, het bouwen… zijn spierkracht, spaargeld en slimheid schoten tekort voor zo’n megaklus. Dus stelde hij een joint venture voor: samen een bedrijf oprichten, hun spaargeld bundelen, en een hele week besteden aan de bouw. Natuurlijk waren er risico’s. Net als bij Able’s eerste net was er geen enkele garantie dat het zou werken. En zelfs als het werkte, kon het gevaarte bij de eerste ruwe zee in stukken breken. Alleen dit keer stond er niet één vis op het spel, maar meer dan twintig! Toch won hun honger naar méér vis het van de angst om hun spaargeld kwijt te raken. Dus besloten ze ervoor te gaan. Na een week keihard ploeteren stond hij er: de allereerste megavanger van het eiland. En hij deed wat hij beloofde: gemiddeld twintig vissen per week, bijna zonder moeite. Af en toe een reparatie of beetje onderhoud, maar verder liep het ding bijna vanzelf. Al snel dreven ze in de vissen. Met de snel groeiende spaarvoorraad bouwden ze al gauw nóg een mega-vanger. Vissen werden zo overvloedig dat ze hun tijd volledig konden wijden aan andere projecten. Charlie gebruikte zijn spaargeld om surfplanken te bouwen, waarmee hij een ultracoole nieuwe vrijetijdsbesteding introduceerde. Able richtte een heuse kledinglijn op, zodat niet alleen hijzelf maar iedere eilandbewoner zijn imago kon opfrissen. In zijn vrije tijd begon hij zelfs aan zijn eenmans-toneelstuk. En Baker? Die stortte zich op het hardnekkige transportprobleem van het eiland en ontwierp de allereerste kano én de eerste kar. -- Dezelfde economische regels die gelden in een eenvoudige samenleving, zijn ook van kracht in een ingewikkeldere. Able’s eerste stap — kapitaal scheppen door persoonlijke opoffering — had niet alleen hemzelf, maar alle eilandbewoners geholpen. Dankzij zijn verstandige leenprogramma kwamen er steeds meer handnetten, en die productiviteit werd vervolgens benut om nóg efficiëntere visvangmachines te bouwen. Het resultaat: een beter dieet, mooiere kleding, makkelijker vervoer, vrije tijd én zelfs een beginnende surfcultuur. De verhalen over deze ongekende luxe verspreidden zich al snel naar andere eilanden, waar men nog altijd met de blote hand viste en geen tijd had om op een surfplank te staan. Al gauw kwamen er immigranten op zoek naar een beter leven. De hogere productiviteit maakte dat het eiland een grotere bevolking kon onderhouden, en die bevolking zorgde op haar beurt voor meer economische diversiteit. Sommigen gingen werken bij de mega-vangers, anderen leenden vissen om land vrij te maken voor landbouw — eindelijk een gebalanceerd dieet! — en weer anderen stapten in allerlei nieuwe beroepen. Zo ontstonden er huttenbouwers, kano-bouwers, wagenmakers, noem maar op. Doordat voedsel en gereedschappen zo efficiënt werden geproduceerd, hoefden sommige mensen zelf niets tastbaars meer te maken om te overleven. Zo werd de dienstensector geboren. Een paar creatieve eilanders vonden dat rauwe vis best wat spannender kon. Met kruiden en vuur ontwikkelden ze heuse kookkunsten. Hun gerechten werden zó gewaardeerd dat vissers en huttenbouwers bereid waren een deel van hun vangst in te ruilen voor een goede maaltijd. Charlie’s nakomelingen zagen hoe populair surfen werd en begonnen zelfs een surfschool. Naarmate er meer beroepen en diensten kwamen, ontstond er behoefte aan een ruilmiddel. Het oude systeem — ruilhandel — was omslachtig. Stel: een speermaker wilde lekker eten, maar de kok had geen speer nodig. Hoeveel maaltijden zou één speer eigenlijk waard zijn? Het was tijd voor iets universeels: geld. En wat lag meer voor de hand dan vis? Iedereen at ze, iedereen kende hun waarde. Eén vis stond nog altijd gelijk aan één dag overleven. Zo werd vis het betaalmiddel. In korte tijd werden lonen en prijzen uitgedrukt in vissen, en de hele prijslijst van het eiland was gebaseerd op de intrinsieke waarde van die ene vis. Efficiëntie en specialisatie Een economie waarin mensen zich kunnen specialiseren is altijd sterker dan een samenleving waar iedereen hetzelfde doet. Specialisatie verhoogt de productie en dus de welvaart. Neem Duffy, een eilandbewoner met talent voor houtbewerking. De gemiddelde eilandbewoner deed vijf dagen over het bouwen van een kano. Omdat hij in die tijd niet viste, kostte hem dat tien vissen aan gemiste inkomsten. Duffy kon echter een kano in vier dagen maken. Voor hem betekende dat maar acht vissen aan gemist inkomen. Hij kon dus winst maken door een kano te verkopen voor negen vissen. Voor anderen een koopje, want zij zouden er zelf tien vissen aan kwijt zijn. Iedereen won. Maar negen vissen was voor velen nog een hoop geld. Alleen de rijksten konden zich een kano veroorloven, de rest moest sparen en intussen maar blijven zwemmen. Tot Duffy besloot zijn spaargeld te investeren in gereedschap, speciaal om kano’s mee te maken. Net zoals Able generaties eerder deed, consumeerde hij minder om kapitaalgoederen te creëren. Met beter gereedschap halveerde zijn bouwtijd naar twee dagen. Nu hoefde hij maar vier vissen aan kosten goed te maken. Verlaagde hij zijn prijs naar zes vissen, dan was hij niet alleen winstgevender (twee vissen winst per kano in plaats van één), maar kon hij ook twee keer zoveel kano’s produceren. Dit was niet alleen goed voor Duffy, maar voor het hele eiland. Meer mensen konden zich een kano veroorloven tegen zes vissen, zijn klantenkring groeide en kano’s werden van luxeartikel een gebruiksvoorwerp voor iedereen. Dankzij sparen, innovatie en investering daalden de prijzen, en de voordelen van kano-bezit waren niet langer voorbehouden aan de rijken. Uitleg Zoals we in het verhaal van Duffy hebben gezien, doen dalende prijzen hem helemaal geen pijn. Integendeel: naarmate prijzen overal dalen door vergelijkbare productiviteitsstijgingen in andere beroepen, kan hij met dezelfde vissen méér dingen kopen. Innovatie is eenrichtingsverkeer. Tenzij mensen plots alles vergeten wat ze ooit geleerd hebben, stapelt efficiëntie zich alleen maar op. Het gevolg? Prijzen hebben de neiging om op de lange termijn te dalen. En dat heeft nog een bijkomend effect: dalende prijzen moedigen sparen aan. Want als eilandbewoners doorhebben dat hun vis in de toekomst méér kan opleveren dan vandaag, dan houden ze er liever een paar achter de hand. Hoe gek het ook klinkt: een vis gespaard is écht een vis verdiend. En dat sparen vergroot de hoeveelheid kapitaal die beschikbaar is voor leningen. Werkgelegenheid Naarmate de samenleving complexer werd, besloten steeds meer eilandbewoners om voor anderen te werken en hun arbeid te ruilen voor loon. De waarde van arbeid wordt altijd vermenigvuldigd door het gebruik van kapitaal. Hoe beter het kapitaal, hoe waardevoller de arbeid. Met een bulldozer graaf je immers een véél groter gat dan met een schep, ook al span je je met beide even hard in. Het is dus altijd slimmer om met het beste kapitaal te werken dat beschikbaar is. In een vrije samenleving kiezen de bewoners zelf wiens kapitaal ze gebruiken om hun arbeid te versterken. Op een paar artistieke types na, die er vrijwillig voor kozen “zonder net te vissen”, had elke arbeider drie mogelijkheden: Zelf onderconsumeren en een net bouwen. Een lening afsluiten om een net te kopen. Of werken voor iemand die al een net heeft. Omdat de eerste optie zelfopoffering vraagt en de tweede risico met zich meebrengt, kozen de meeste eilanders voor optie drie. En dan kregen ze loon. Zo kwam Finnigan, een nieuwkomer op het eiland. Een sterke kerel, maar als visser weinig succesvol. Dus besloot hij zich te specialiseren in vistransport. Met puur spierballenwerk kon hij 100 vissen per dag van het strand naar de hutten slepen. Tegen een vrachtprijs van 2% verdiende hij daar twee vissen per dag mee. Maar hij kreeg stevige concurrentie van Murray’s Kar-bedrijf. Murray had eerder een lening afgesloten om een viskar te bouwen. Daarmee kon hij 300 vissen per dag vervoeren, ook al was hij lang niet zo sterk als Finnigan. Dankzij zijn hogere productiviteit kon hij een tarief van slechts 1% rekenen en tóch drie vissen per dag verdienen. Lager tarief, méér winst. Zonder kapitaal zat Finnigan dus klem. Maar Murray rook een kans: hij zag dat Finnigan met een kar wel 400 vissen per dag zou kunnen vervoeren. Tegen 1% leverde dat vier vissen per dag op. Dus bood Murray hem een baan aan: drie vissen per dag loon. De vierde hield hij zelf als winst. Voor Finnigan was het aantrekkelijk: met hetzelfde werk werd hij productiever, kon hij lagere tarieven vragen én meer verdienen dan alleen. Murray verdiende één vis per dag extra en kon ondertussen stoppen met zelf vissen sjouwen. Zo had hij tijd om meer karren te bouwen en meer mensen in dienst te nemen. En hoe meer karren er kwamen, hoe lager de vrachtkosten voor alle eilanders. Misschien zou Finnigan later genoeg kunnen sparen om zelf een kar te bouwen en zo zijn oude baas te beconcurreren. Om dat te voorkomen, moest Murray hem méér betalen dan hij alleen ooit had kunnen verdienen — genoeg om hem tevreden te houden. Maar laten we niet vergeten: Murray deed dit allemaal uit winstbejag, niet uit liefdadigheid. Toch profiteerde Finnigan mee met een beter loon, en profiteerden álle eilanders door lagere kosten. Overige thema's banken, (internationale)handel, .....en meer. Klassiek versus Keynesiaans Klassiek vs. Keynesiaans economisch denken   Klassiek economisch denken Keynesiaans economisch denken Tijd 18e–19e eeuw (Smith, Ricardo) 20e eeuw (John M. Keynes) Motor economie Aanbod (productie, ondernemers, kapitaal) Vraag (consumptie, investeringen, overheidsuitgaven) Marktwerking Markt herstelt zichzelf, altijd evenwicht Markt kan blijven steken in crisis Overheid Minimaal ingrijpen (“laissez-faire”) Actief ingrijpen nodig in slechte tijden Werkloosheid Tijdelijk, verdwijnt vanzelf Kan langdurig blijven bestaan Oplossing crisis Wachten tot lonen dalen → werk komt terug Overheid stimuleert vraag (bijv. investeringen, subsidies) Overheidsfinanciën Altijd in evenwicht houden Tekorten toegestaan in recessie, sparen in hoogconjunctuur Beeldspraak Economie = zelfregulerend mechanisme Economie = auto die soms moet worden aangeduwd   Kennis-Checks Doel Het doel van de Kennis-Checks is (op volgorde van prioriteit): controle op het beheersen van de theorie uit een blok; controle of de stof voldoende zelfstandig is doorlopen; het vroegtijdig kunnen signaleren van studenten die ‘duiken’; het creëren van een (extra) leermoment. Planning Elk blok wordt afgesloten met twee Kennis-Checks. De eerste wordt afgenomen nadat het blok is doorlopen volgens de nominale planning (3-jarig). De tweede wordt ongeveer twee weken later gepland. Naast deze twee Kennis-Checks worden geen reguliere herkansingen geboden. Voldoende De Kennis-Check is multiplechoice en bevat rond de 25 vragen met elk 4 tot 6 antwoordmogelijkheden. De score wordt berekend als het percentage goede antwoorden, zonder rekening te houden met de gokfactor. Bij 25 vragen en gemiddeld 5 antwoordmogelijkheden moet een student volgens de algemeen geldende norm 16 vragen goed hebben voor een voldoende. Daarbij wordt impliciet uitgegaan van 20% gokscore (1 op 5). Wij hanteren de norm 13 . Eis Score per blok De hoogste score per blok geldt. Om studenten gemotiveerd te houden om ook na het behalen van een voldoende de tweede kans serieus te benutten, krijgt een student die beide keren een voldoende haalt 2 procentpunten bij zijn/haar hoogste score. Voorbeelden Score 1 Score 2 Eindresultaat 54 71 71 72 53 72 71 73 75 Score over meerdere blokken Om over meerdere blokken te bepalen of aan de eis wordt voldaan geld: De laatste twee blokken moeten beiden voldoenden(55% of hoger)  zijn Het gemiddelde over alle blokken moet voldoende zijn (55% of hoger). Of anders uitgelegd: Periode Eis 1 - Voldoende voor blok 1 én 2. 2 Voorlopig Studieadvies Voldoende gemiddeld over blok 1 t/m 4 én voldoende voor blok 3 én 4. 3 Definitief Studieadvies Voldoende gemiddeld over blok 1 t/m 6 én voldoende voor blok 5 én 6. 4 Studiecontract/overgang Voldoende gemiddeld over blok 1 t/m 8 én voldoende voor blok 7 én 8. Herkansing Indien in periode 2, 3 of 4 niet aan de eis is voldaan, kan een beroep worden gedaan op uitzonderlijke omstandigheden. De student kan dan verzoeken om één herkansing. Het verzoek moet onderbouwd zijn en de zorgcoördinator bepaalt, eventueel aan de hand van een extra gesprek, of het verzoek kan worden gehonoreerd. -- zie voor versnellen: https://www.roc.ovh/books/overig-notes/page/versnellen Versnellen 1. Uitgangspunt: Nominale planning Het eerste leerjaar is opgebouwd rond een nominaal leerschema waarin studenten acht inhoudelijke blokken afronden binnen één schooljaar. Op basis van dit schema worden instructiemomenten en ondersteuning gepland, met als doel: alle studenten richting het beoogde uitstroomniveau begeleiden. 2. Differentiatie in leertrajecten Om tegemoet te komen aan verschillen in tempo, behoefte en prestaties, hanteren wij vier niveaus van differentiatie. De indeling is dynamisch en wordt periodiek geëvalueerd door de eerstejaars Dev-docent in overleg met SLB’ers. 2.1 Nominaal traject Studenten in dit traject volgen de reguliere route van acht blokken per jaar. De totale verwachtte studieduur voor deze studenten is 3 jaar. Zij ontvangen instructie en begeleiding volgens het standaardrooster. Dit rooster wordt in de eerste weken van het schooljaar voor het hele jaar opgesteld. 2.2 Nominaal Plus (versnellen) Studenten die zelfstandig en ambitieus willen werken, kunnen in aanmerking komen voor versnelling. Voorwaarden voor deelname aan dit traject zijn: De student geeft zelf aan te willen versnellen. De student heeft geen achterstand ten opzichte van het nominale schema. De student loopt voor en op het nominal schema en is 1.5 keer verder (150%). De eerstejaars Dev-docent geeft toestemming. De houding in de klas is goed. De student heeft minimaal 65% gescoord op de kennistoetsen . De presentie is ruim voldoende 90% of meer en in ieder geval > 80% . Deelname aan het wekelijkse ‘versnellerslesuur’ is verplicht. Versnellen gebeurt altijd in groepjes : het is een gezamenlijke, zelfstandige aanpak waarbij studenten elkaar ondersteunen. Bij slechts één student kan versnellen beperkt of vervangen worden door maatwerkverdieping of een ondersteunende rol binnen reguliere lessen. Samengevat Aanweigheid minimaal 80% Kennis Check Scores minimaal 65% Voortgang 150% van nominaal (8 blokken per jaar) 2.3 Kleine achterstand (opstroomtraject) Studenten die achterlopen maar nog minimaal 70% van de nominale voortgang behalen, vallen onder deze categorie. Zij krijgen wekelijkse verplichte extra ondersteuning op school met als doel terug te keren naar het nominale schema. De begeleiding is gericht op het inhalen van de achterstand en het weer kunnen aansluiten bij het nominale beeld. 2.4 Grote achterstand Studenten met een forse achterstand (onder de 70%-norm) krijgen intensieve begeleiding. Zij worden besproken met de zorgcoördinator (ZoCo). Samen met SLB en ZoCo wordt gekeken of de achterstand inhaalbaar is. Heroriëntatie op een andere opleiding kan onderdeel zijn van dit traject. 3. Evaluatie en monitoring De eerste herziening van de classificatie vindt plaats na afronding van Blok 1 . Daarna kan de classificatie na elk blok (ongeveer elke 4 weken) worden aangepast indien gewenst. De status wordt besproken in het SLB-overleg met de eerstejaars Dev-docent en indien nodig aangepast. Ouders/verzorgers van studenten onder de 18 jaar worden verplicht geïnformeerd bij elke wijziging in classificatie. Alle classificaties worden vastgelegd in de Canvas Monitor , onder “Aantekening (alleen zichtbaar voor docenten)”. 4. Toetsing en normering Per blok wordt de voortgang gemeten aan de hand van kennistoetsen. De minimale norm om een blok als ‘behaald’ te registreren is een kennistoetsscore van 55% of hoger . De norm voor deelname aan het versnellende traject is 65% of hoger . -- zie voor kennis-check berekeningen: https://www.roc.ovh/books/overig-notes/page/kennis-checks Prompt - Atlas - CMON - nakijken (experimental) You are an AI assistant that helps a teacher evaluate student homework submissions and output structured grading data. ## Extraction Rules (IDs, attempts, metadata) - Read each `user_id` from the value next to the user name starting with u: - Read each `submission_id` from teh value next to the user and user_id, starting with u: - Read the `assignment_id` from the assignment link in the SAME student block: `` Use that numeric tail as `"assignment_id"`. This can be a comma seperated list. - Read `course_id` from the same assignment link (the `/courses/[COURSE_ID]/` segment). - Read the attempt cap string from the rating line, e.g.: `(Poging 2, max 12/12, vorige score 6)` or `(Poging 4, max 9/12)` • Attempts = number after “Poging”. • Visible maximum = first number after “max” (e.g., `12` in `max 12/12`, or `9` in `max 9/12`). - Read submission timestamp from the block’s date/time label (e.g., `29-10 13:47`) and copy that into `"submitted_at"` as-is. - Read checked state from the “Rate” checkbox in the block: • If the “Rate” checkbox is present and checked → `"checked": true`. • Otherwise → `"checked": false`. - If any specific ID field is truly missing in the provided HTML, set it to `0` (do not invent values). ## Evaluation Rules 1. Ratings range from 0 to [MAX_POINTS]. 2. If all requirements are correct **and** attempts ≤ 3 → give **full points** (but do not exceed visible “max”). 3. If attempts ≥ 4 → the **maximum rating** equals the visible “max” value shown (e.g. “max 9/12” → 9). 4. Give partial points if partly correct; give 0 if missing, unreadable, wrong, or not matching the assignment. 5. Never exceed the visible “max” for that submission (even if [MAX_POINTS] is higher). 6. Consider “Expected Words/Keywords” only as soft guidance; do not over-penalize if evidence in the screenshot/PDF clearly shows correctness. 7. Rate based on the criteria printed right under the student name. 8. Next to the feedback input box, we see the feedback on the previous submission from teh student, this is not rellevant for this submission. ## Feedback Rules - Language: Dutch or English (match the page language). - Keep it **short, clear, constructive** — 1–2 sentences max. - Confirm correctness (or main issue), then give 1 improvement tip. - Example tone: - “Netjes gedaan, je hebt de header juist aangepast.” - “Correct uitgevoerd, maar volgende keer graag één duidelijke screenshot.” - “Bijna goed — controleer of de tag echt kleiner is dan

.” - “Omdat dit poging 4 is, iets lagere score.” ## Output Requirements Return ONLY valid JSON in this exact format — no explanation before or after the JSON: { "version": "1.0", "metadata": { "cohort": "[COHORT]", "assignment_id": [numeric from the blocks; if mixed, use 0], "assignment_name": "[ASSIGNMENT_NAME]", "course_id": [COURSE_ID or 0], "course_name": "[COURSE_NAME]", "created_at": "YYYY-MM-DDTHH:MM:SS.mmmZ", "total_submissions": [COUNT] }, "submissions": [ { "submission_id": [integer from ], "user_id": [integer from or 0], "user_name": "Student Name", "rating": [integer respecting attempt cap and visible max], "feedback": "Short constructive feedback (1–2 sentences).", "checked": true, "submitted_at": "DD-MM HH:MM" } ] } ## Notes - Include **all** submissions that appear in the provided HTML. - If multiple different assignment IDs are present across blocks, set `metadata.assignment_id = 0` but still fill each block’s IDs (`submission_id`, `user_id`) correctly and keep the shared `course_id` when available; otherwise use 0. - Ensure valid, parseable JSON (no trailing commas). Raspberry Pi2 Screen issues This summary captures the "perfect storm" of hardware and software conflicts you are facing. It is designed to be shared with developers or used as a reference for future troubleshooting. 1. Hardware Inventory Computer: Raspberry Pi 2 Model B (BCM2836 SoC). Display: KeDei 3.5" SPI LCD, Version 3.0 (2015/12/01) . Critical Fact: This is a "Legacy" board that uses three 74HC595 shift registers to mimic a parallel interface. It is NOT a standard SPI display. Interface: GPIO Pins (SPI Bus 0). 2. Software Environment OS: Raspberry Pi OS "Trixie" (Debian 13) 32-bit with Desktop. Kernel: 6.x (Modern Linux Kernel). Python: 3.13. Drivers: Transitioned from the old sysfs GPIO interface to the modern Character Device ( gpiod ) and lgpio architecture. 3. The Core Problem: "The Legacy Gap" The fundamental issue is that 2015 hardware is trying to communicate with a 2025 operating system. GPIO Allocation Conflict: In modern Debian/Trixie, the kernel "claims" pins via the Device Tree. When you try to use RPi.GPIO or luma.lcd , the OS throws an lgpio.error: 'GPIO not allocated' because it views the Python script as an intruder trying to hijack system-reserved SPI pins. Timing Mismatch: The 2015 shift registers require specific, slow timing (latencies) that were easily achieved on old kernels (like Jessie). Modern 64-bit/32-bit kernels use high-speed DMA (Direct Memory Access) for SPI, which sends data faster than the 74HC595 chips can process, resulting in a permanent "White Screen." Driver Deprecation: The original KeDei drivers were binary-blobs compiled for Kernel 3.x/4.x. These are physically incompatible with the Kernel 6.x architecture used in Trixie. 4. Technical Facts for Future Reference Fact Detail Confirmed Working OS Raspbian Jessie (Legacy Kernel 4.x). Fail Symptom Persistent White Screen (Backlight on, logic off). Key Error Message lgpio.error: 'GPIO not allocated' or ImportError for legacy bitbang classes. Incompatibility Modern vc4-kms-v3d graphics driver conflicts with SPI GPIO access. Bus Speed Limit Shift registers typically fail above 1MHz to 2MHz on modern Pi hardware. Pin Mapping (BCM) DC=9 , RST=22 , MOSI=10 , SCK=11 , CS=8 . 5. Recommended Paths Forward If the "Zero Feed-in" automation is the priority, these are the only viable ways to view your data: The Web Dashboard: Since you are on a Pi 2, running a lightweight Flask web server allows you to see the status on your phone or laptop without using any GPIO pins for display. HDMI Status Screen: Since you have the "Desktop" version of Trixie, you can auto-launch a full-screen Python/Tkinter window on your HDMI monitor to show the power stats. Hardware Upgrade: Replace the 2015 KeDei with a modern I2C OLED (SSD1306) or a Waveshare SPI display that has native driver support in the 2025 Linux kernel. Would you like me to help you set up the "Auto-Launching HDMI Dashboard" since you already have the Raspberry Pi Desktop environment running?