Over artikels die ik elders schreef

Simuleer elektronische schakelingen met Qucs

Begrip in elektronica krijg je pas door veel elektronische schakelingen uit te proberen en het gedrag te observeren. Dat kan met fysieke elektronische componenten, maar ook met simulaties.

In academische middens en de industrie wordt er veel gebruikgemaakt van de simulatiesoftware Multisim van National Instruments (NI). Dat is propriëtaire software, je hebt er een licentie voor nodig en ze draait alleen op Windows. Gelukkig bestaat er ook opensourcesoftware om elektronische schakelingen te simuleren onder Linux. Een van die programma’s is Qucs (Quite Universal Circuit Simulator).

Het duurde even voor ik doorhad hoe Qucs werkte, want het programma heeft niet de meest gebruiksvriendelijke interface en de documentatie is nogal fragmentarisch, op specialisten gericht en vaak verouderd. Maar zodra je de basis onder de knie hebt, werkt het programma vrij consistent.

In een artikel dat ik voor Linux Magazine schreef, simuleer ik enkele elektronische schakelingen met Qucs:

  • een spanningsdeler, als voorbeeld van een DC-simulatie;

  • een bruggelijkrichter, als voorbeeld van een transiënte simulatie;

  • een RC-filter, als voorbeeld van een Bodediagram om de frequentieafhankelijkheid van schakelingen te bestuderen.

Die laatste ziet er dan zo uit:

/images/qucs-filter.png

Ik ben geen professioneel elektronicus, maar al met al vind ik Qucs heel geschikt om de occasionele elektronische schakeling die ik maak te simuleren, en ik ga het programma zeker nog gebruiken. En dan heb ik nog maar een fractie van de mogelijkheden uitgeprobeerd. Zo ondersteunt Qucs ook heel wat wiskundige functies en laat het je zelfs toe om scripts met GNU Octave uit te voeren.

GANisme: algoritmische kunst met een hoek af

In 2018 werd het schilderij Edmond de Belamy verkocht bij veilinghuis Christie’s in New York. De koper betaalde maar liefst 432.500 dollar, veel meer dan de 7.000 tot 10.000 dollar die men voor de veiling verwachtte. Was het omdat het Parijse kunstenaarscollectief Obvious zo goed was? Nee, het was omdat de werkelijke kunstenaar een computer was, zoals te zien aan de handtekening rechts onderaan het schilderij.

Edmond de Belamy (bron: Obvious)

Edmond de Belamy was het resultaat van een generative adversarial network (GAN) en de handtekening maakte onderdeel uit van het algoritme. Het werd getraind op een verzameling van 15.000 portretten van de 14de tot de 19de eeuw uit de online kunstencyclopedie WikiArt. Daarna kon je met het systeem naar believen kunstwerken creëren in dezelfde stijl. Een van die resultaten was een wat vaag portret van een man in iets wat een kostuum lijkt, met een misvormd gezicht. Edmond de Belamy was het eerste door AI (artificial intelligence) gecreëerde kunstwerk dat bij Christie’s werd geveild. Obvious maakte nog andere portretten op dezelfde manier, in de collectie La Famille de Belamy.

In een artikel dat ik voor PC-Active schreef in mijn rubriek Denkwerk ga ik dieper in op computerprogramma's die schilderijen maken in deze kenmerkende stijl die GANisme genoemd wordt. Ik kijk ook naar enkele kunstenaars die neurale netwerken trainden op hun eigen kunstwerken om zo nog betere kunst te maken. Het levert fascinerende resultaten op!

CryptPad: samen documenten bewerken zonder pottenkijkers

Met clouddiensten zoals Google Docs, Office 365 of Collabora Online kun je met meerdere personen tegelijk aan een document werken, maar de server heeft toegang tot de inhoud van het document. Dat is nodig voor de werking, zou je denken, maar niets is minder waar: met CryptPad kan het ook zonder dat de server kan meekijken.

CryptPad gebruikt end-to-end encryptie

CryptPad is een opensource (AGPLv3) realtime collaborative editor voor het web. Je kunt hiermee dus samen met anderen aan teksten werken, maar uniek is dat dit end-to-end encryptie gebruikt. Daardoor kan zelfs de server waarop CryptPad draait je data niet inzien: alle encryptie gebeurt client-side in de webbrowser van de gebruikers. Dat betekent ook dat CryptPad je documenten niet kan herstellen als je je wachtwoord vergeet.

Je kunt gratis gebruikmaken van de server op cryptpad.fr om de software te evalueren. Een gratis account aanmaken volstaat; je hoeft zelfs geen e-mailadres op te geven. De beschikbare opslag is in principe beperkt tot 50 MB, maar momenteel is dat tijdelijk verhoogd tot 1 GB om thuiswerken vanwege COVID-19 te ondersteunen. Voor meer opslagruimte kun je bijbetalen, waarmee je dan ook de ontwikkeling van het project steunt, die gebeurt door het Franse bedrijf XWiki SAS. Uiteraard kun je ook je eigen CryptPad-server opzetten, al dan niet via Docker.

De functionaliteit is uiteraard niet te vergelijken met de hierboven vermelde clouddiensten, maar voor eenvoudige documenten werkt CryptPad verrassend goed. CryptPad ondersteunt ook Markdown-syntax, en daarmee kun je tekst, presentaties en zelfs polls aanmaken. Allemaal volledig end-to-end versleuteld. Wil je meer weten? Lees dan mijn artikel over CryptPad in Linux Magazine waarin ik meer aandacht schenk aan de mogelijkheden.

Zet je eerste stappen in programmeren

Als je je computer inschakelt, je smartphone ontgrendelt of je thermostaat bijstelt, treedt er op de achtergrond een heel proces in werking. Iemand (meestal een heel team) heeft de processor die in deze apparaten zit geprogrammeerd: minutieus aan de processor uitgelegd welke instructies die moet uitvoeren.

Computers en algoritmes overheersen steeds meer ons leven. Er gaan zelfs stemmen op om kinderen op de lagere school al te leren programmeren. Maar hoe begin je daaraan? En welke van de vele programmeertalen kies je?

De Arduino Uno, een gebruiksvriendelijk bordje om microcontrollers te leren programmeren. (Bron: Arduino)

Voor Linux Magazine schreef ik het artikel Zet je eerste stappen in programmeren. Ik bespreek er machinetaal, computationeel denken, visuele programmeertalen zoals Scratch en Node-RED, algemene programmeertalen zoals JavaScript en Python en hun ecosystemen, en tot slot het Arduino-platform voor wie meer met microcontrollers en elektronica aan de slag wil.

Uiteindelijk is de beste manier om te leren programmeren het in de praktijk doen en veel oefenen. Zoiets houd je alleen vol als je het interessant vindt. Ik raad dan ook niet aan om een specifieke programmeertaal te kiezen omdat ze populair is of veel gevraagd is op de arbeidsmarkt.

Kies gewoon een taal die goed geschikt is voor iets waarin je geïnteresseerd bent, of dat nu games ontwikkelen, websites bouwen of mobiele apps maken is. En begin dan gewoon al lerend dit te programmeren. Nadat je de basis van een eerste taal onder de knie hebt, leer je heel snel een andere programmeertaal.

Bouw je eigen Raspberry Pi-cluster

Het aantal Raspberry Pi's in mijn huis begon onhandelbaar te worden en het kluwen van kabels en voedingsadapters was me al even een doorn in het oog. Ik besloot een aantal van deze Raspberry Pi's op elkaar te stapelen in een clusterbehuizing, aangesloten op één voeding en één netwerkswitch.

De belangrijkste componenten van de configuratie die ik koos, zijn:

Clusterbehuizing

Deze behuizing met zes lagen vond ik voor € 20 op Amazon:

Een clusterbehuizing voor Raspberry Pi's met acrylplaatjes

De Raspberry Pi's zijn hiermee niet volledig beschermd, want er zit alleen boven en onder elk processorbordje een acrylplaatje. Maar een voordeel van deze opstelling is dat ze gemakkelijk uit te breiden is. Je kunt er ook eenvoudig een laag uitnemen als je die Raspberry Pi tijdelijk elders nodig hebt.

Voeding

Als voeding koos ik voor het € 29 kostende Anker PowerPort 12 A 60 W laadstation met 6 poorten:

Het Anker PowerPort 12 A 60 W laadstation kan 6 Raspberry Pi's voeden.

Belangrijk bij de keuze voor de voeding is dat ze per poort voldoende vermogen kan leveren voor je Raspberry Pi's. Ik ging daarvoor uit van het vermogensverbruik van zes Raspberry Pi 4's op volle kracht. Uit een benchmark van MagPi blijkt dat dit model in een stresstest tot 7 W verbruikt.

Een set van laadkabels (usb-c voor de Raspberry Pi 4, usb-a voor de eerdere modellen) vult dit aan.

Waarschuwing

Ik heb laadkabels van 25 cm lang gekocht om het geheel zo compact mogelijk te houden, maar dat was eigenlijk iets te kort: door de stijfheid van de kabels blijft het laadstation niet stabiel staan. Maak dezelfde fout niet.

Netwerkswitch

Voor de netwerkverbinding kies je een switch met één poort meer dan het aantal Raspberry Pi's in je cluster. Een eenvoudige unmanaged gigabit-ethernetswitch is voldoende. Ik koos voor een TP-Link LS108G 8-poorts gigabit-ethernetswitch van € 25:

De TP-Link LS108G 8-poorts gigabit-ethernetswitch voorziet de Raspberry Pi's van een netwerkverbinding.

Voor de netwerkkabels koos ik voor een set van 7 platte Cat7-ethernetkabels.

Waarschuwing

Ik heb ook hier voor kabels van 25 cm lang gekozen om het geheel zo compact mogelijk te houden, maar dit was een miskoop. Ze waren te stijf, ik had echt flexibele ethernetkabels moeten kopen. En 25 cm was te kort.

Statusleds

Ik wilde de status van mijn Raspberry Pi's eenvoudig kunnen tonen, maar kant-en-klare oplossingen vond ik te duur of met een te klein schermpje. Ik vond een leuke lowtech-oplossing in het Mini Battery Display van Open-Smart. Voor € 1,30 per stuk vind je dit kleine printplaatje met leds op AliExpress. Het bevat een ledbalk met tien segmenten, die je kunt aansturen om bijvoorbeeld de processorbelasting of cpu-temperatuur aan te duiden:

Het Mini Battery Display van Open-Smart is perfect voor statusleds voor je Raspberry Pi.

Ik heb zes van deze printplaatjes op een breadboard geprikt en elk printplaatje is met vier jumperwires met zijn Raspberry Pi verbonden. Ik heb dan een Python-programma geschreven om de leds aan te sturen op basis van de processorbelasting: rpi-mini-battery-display.

Het resultaat

Als je dit alles dan in elkaar steekt, ziet dat er als volgt uit:

Mijn cluster van zes Raspberry Pi's.

Ik koos voor de horizontale plaatsing omdat die het minste problemen met de te korte kabels oplevert, en het zorgt ook voor een gelijkmatige warmteafvoer. Je ziet op de achtergrond wel nog het laadstation in de lucht 'zweven' door de te korte voedingskabels...

Voor PCM beschreef ik uitgebreid hoe je zelf zo'n cluster maakt. Het artikel gaat alleen in op de hardwarekant, maar daar komt al heel wat bij kijken. Meer tips en gedetailleerdere instructies vind je in het artikel.

Al met al ben ik hier tevreden mee. Ik probeer nu sneller nieuwe zaken op mijn Raspberry Pi's uit omdat ik er geen werkloze Raspberry Pi's meer voor uit een doos hoef te halen of een vrij stopcontact moet zoeken. En mijn bureau ziet er heel wat netter uit!

Stembesturing zonder luistervinken met Rhasspy

Met slimme assistenten zoals Google Assistant, Amazon Alexa en Apple Siri geef je opdrachten met je stem. Leuk, maar je stemopnames worden wel naar de cloud gestuurd voor verwerking. Met een Raspberry Pi en de opensourcesoftware Rhasspy kun je stembesturing volledig lokaal realiseren, zelfs zonder internet. Je stemopdrachten koppel je dan aan Node-RED of een domoticasysteem zoals Home Assistant, en dat zonder dat Google, Amazon of Apple de hele tijd meeluistert. Zelfs in het Nederlands.

Rhasspy is geen afgewerkte spraakassistent zoals voorgaande voorbeelden. Het is eigenlijk een toolkit waarmee je zelf je eigen spraakassistent ontwikkelt. Meer voor de doe-het-zelvers dus, maar als je al een eigen domoticasysteem zoals Home Assistant hebt draaien, zal dit je zeker niet afschrikken. Na de configuratie heb je een systeem dat audio omzet in gestructureerde JSON-gegevens:

/images/rhasspy-audio-to-json.svg

Je bedoeling herkennen

Rhasspy herkent niet zomaar alles wat je zegt. Je dient zelf te definiëren welke zinnen Rhasspy moet verstaan en welke bedoeling (intent) hij daaraan geeft. Omdat deze herkenning specifiek op maat van jouw vereisten gebeurt, vereist dit geen clouddienst met grote verwerkingskracht, maar kun je Rhasspy perfect op een Raspberry Pi draaien.

Zo definieer je bijvoorbeeld een intent LightState die een toestand kent: aan of uit. Je vult dan zinnen in die deze intent weergeven, zoals "doe het licht aan". Als je dan die zin uitspreekt, komt de hele machinerie van Rhasspy in gang en krijg je als resultaat het JSON-fragment dat de herkende bedoeling op een gestructureerde manier weergeeft.

Daarop kun je dan Home Assistant, Node-RED of je eigen software laten reageren en bijvoorbeeld je apparaten via je stem laten aansturen. Rhasspy maakt gebruik van MQTT (Message Queuing Telemetry Transport) om boodschappen op je netwerk rond te sturen wanneer je hem geactiveerd hebt, wanneer hij een zin heeft herkend, wanneer een sessie voorbij is enzovoort. Je kunt dus in gelijk welke programmeertaal of gelijk welk domoticasysteem op die MQTT-boodschappen reageren en zelf MQTT-boodschappen sturen om functionaliteit van Rhasspy aan te spreken.

Aan de slag met Rhasspy

Wil je ook met Rhasspy aan de slag? Op de website van Computer!Totaal leg ik in het artikel Zo krijg je stembesturing op de Raspberry Pi uit hoe je met Rhasspy begint op een Raspberry Pi met luidspreker en microfoon. Op het einde van het artikel kun je spraakopdrachten in het Nederlands geven aan Rhasspy en kun je Node-RED daarop laten reageren (zie ook mijn artikel Node-RED: apparaten en diensten koppelen zonder code). Loop je tegen problemen aan? Bezoek dan zeker Rhasspy's forum eens, waar talloze behulpzame communityleden actief zijn (waaronder ikzelf).

Heeft de mogelijkheid om zonder clouddienst aan stembesturing te doen je geprikkeld? Lees dan zeker mijn boek Control Your Home with Raspberry Pi: Secure, Modular, Open-Source and Self-Sufficient. Zoals de ondertitel al zegt, is het zelfvoorzienende aspect een belangrijk principe van mijn aanpak in dit boek. Ik vind dat een domoticasysteem niet mag afhangen van externe diensten van bedrijven die er van de ene op de andere dag de brui aan kunnen geven, of die continu kunnen zien wat ik thuis doe. Voor stembesturing geldt dat nog meer: je wilt niet dat Google of een ander bedrijf meeluistert met wat er in je huis gebeurt, ook al is het per ongeluk.

Het hele hoofdstuk over stembesturing in mijn boek gaat dan ook over Rhasspy. Het gaat iets dieper in op enkele aspecten die in het artikel in Computer!Totaal minder of niet aan bod kwamen. Zo leg ik er uit hoe je één Raspberry Pi als basis opzet en één of meerdere als satellieten, zodat je op meerdere plaatsen in huis met Rhasspy kunt spreken. Ook andere manieren dan Node-RED om de opdrachten die je geeft te verwerken komen aan bod, zoals met Python (onder andere via AppDaemon). Het boek is in het Engels en de voorbeelden dus ook, maar dezelfde aanpak werkt ook perfect in het Nederlands.

Monitor en beperk het netwerkverkeer van je IoT-apparaten met SPIN

Het Internet of Things (IoT) is wat uit de hand aan het lopen, en cybercriminelen maken dankbaar misbruik van al die goedkope apparaatjes in je thuisnetwerk. Maar je hoeft het kind niet met het badwater weg te gooien. Hoe houd je je IoT-apparaten in het oog en, beter nog, hoe blokkeer je hun netwerktoegang selectief, zodat je met een geruster hart kunt gaan slapen?

Het SIDN (Stichting Internet Domeinregistratie Nederland) biedt met SPIN (Security and Privacy for In-home Networks) opensourcesoftware voor je thuisrouter aan waarmee je de verkeersstromen van al je IoT-apparaten in beeld brengt en kunt ingrijpen als een van je apparaten gecompromitteerd is.

In het februari/maartnummer van PCM van dit jaar schreef ik een artikel over SPIN. Je kunt dit nu online lezen, in twee delen:

Monitor en beperk netwerkverkeer

Er bestaan kant-en-klare routers met SPIN ingebouwd, maar je kunt het ook op OpenWrt installeren of op Valibox, een OpenWrt-gebaseerd besturingssysteem van SIDN. Het apparaat zet een draadloos netwerk op, en daarmee verbind je de IoT-apparaten die je wilt analyseren. Ik heb SPIN getest door de Valibox-firmware op een Raspberry Pi 3B te installeren.

Uit mijn test bleek dat SPIN ook prima geschikt is om het netwerkverkeer van een smartphone in het oog te houden. Onmiddellijk nadat je op je met de SPIN-router verbonden smartphone naar een website surft of een app opent, zie je in het live overzicht van SPIN allerlei verbindingen, verrassend meer dan je op het eerste gezicht zou verwachten:

/images/spin-nodes.png

Je kunt ook het netwerkverkeer van een apparaat dat je niet meer vertrouwt blokkeren, of je kunt het netwerkverkeer in een pcap-bestand opslaan. Dat pluis je daarna dan met een packet sniffer zoals Wireshark uit.

Een veiliger internet

IoT-apparaten worden steeds populairder, maar fabrikanten besteden helaas niet altijd voldoende aandacht aan de beveiliging ervan. Er is zeker een mentaliteitswijziging bij IoT-fabrikanten nodig, zodat hun apparaten een veilige standaardconfiguratie hebben, van veilige programmeermethodes gebruikmaken, regelmatig updates krijgen enzovoort.

Maar ondertussen hebben gebruikers ook een verantwoordelijkheid: geef niet elk willekeurig IoT-apparaat in je huis volledige toegang tot je netwerk. SPIN is daarbij een handig hulpmiddel: installeer het op je thuisrouter of, beter nog, op een afzonderlijk draadloos toegangspunt voor je IoT-apparaten.

Turris MOX, de modulaire opensourcerouter

Voor PCM heb ik een tijdje geleden de Turris MOX aan de tand gevoeld. Mijn bevindingen lees je in het artikel Turris MOX review - Modulaire opensource-router. De intro:

Als je een normale router koopt, zit je vast aan de specificaties. De Turris MOX is anders: je koopt een of meerdere modules, die je aan elkaar klikt om van het apparaat te maken wat je wilt: een router, switch, draadloos toegangspunt, server of welk ander netwerkapparaat dan ook. Ook achteraf kun je nog extra modules toevoegen. Hoe dat bevalt, lees je in deze Turris MOX review.

De Turris MOX, een modulaire opensourcerouter

Ik keek al lange tijd uit naar dit apparaat en ik wilde het heel graag testen. Ik ging er al van uit dat ik na mijn test de Turris MOX zou kopen voor mijn thuisnetwerk. Dat heb ik niet gedaan, hoe graag ik het ook wilde. Ik vond de installatie van de Turris MOX té omslachtig, de Wi-Fi-antennes in de behuizing wegwerken té precair, de software nog wat te buggy en uiteindelijk betaal je toch veel voor de flexibiliteit die het apparaat je biedt.

Maar het concept vind ik nog altijd geweldig. Er zouden meer van deze oplossingen moeten zijn. Een thuisnetwerk evolueert, je vereisten kunnen op enkele jaren snel veranderen, en als je dan gewoon eenvoudig een Wi-Fi-adapter kunt vervangen of ethernetpoorten of een modem voor het mobiele netwerk kunt toevoegen, is dat een veel duurzamer oplossing dan een nieuw apparaat te moeten kopen.

Ik hoop dus dat dit concept van een modulaire opensourcerouter aanslaat en nog verfijnd wordt. Hopelijk ben ik na de volgende test wél tevreden genoeg om er zelf een aan te schaffen.

Volledige anonimiteit bestaat niet

Overheden, onderzoeksinstellingen of bedrijven geven vaak om allerlei redenen 'geanonimiseerde' data vrij over personen. Helaas blijkt het in veel gevallen nog mogelijk om de personen achter de data te identificeren.

In PC-Active 311 van april schreef ik een artikel over de moeilijkheid om echt geanonimiseerde datasets aan te maken. Het artikel is nu ook op de website gepubliceerd: Volledige anonimiteit bestaat niet.

Bruikbaar of anoniem, nooit beide

Een geanonimiseerde database bevat geen namen meer, maar in combinatie met andere gegevensbronnen zijn de personen alsnog te identificeren (bron: Paul Ohm)

Een veel geciteerd artikel is dat van professor Paul Ohm van de University of Colorado Law School: Broken Promises of Privacy: Responding to the Surprising Failure of Anonymization (2010). Daarin argumenteert hij dat privacywetten niet volstaan om re-identificatie van personen in 'geanonimiseerde' datasets tegen te gaan. Privacywetten beperken zich immers tot gegevens die jou persoonlijk identificeren.

In deze tijd van grootschalige databases en grote computerkracht is het echter kinderspel om gigantisch veel gegevens te combineren, te vergelijken en te correleren, waardoor je uit een combinatie van schijnbaar anonieme gegevens die volledig aan de privacywetten voldoen de identiteit van iemand kunt achterhalen.

Ohms voorstel was om niet meer toe te laten zulke grote databases in zijn geheel te analyseren, maar ze interactief te maken of alleen gemiddeldes over verschillende personen als resultaat terug te geven. Dat beperkt natuurlijk de bruikbaarheid van de gegevens, maar dat is juist zijn punt: gegevens zijn ofwel bruikbaar ofwel perfect anoniem, maar nooit beide. Geen enkele bruikbare database kan perfect anoniem zijn en hoe bruikbaarder de data gemaakt worden, hoe minder privacy de betreffende personen hebben.

Hoe dan wel anonimiseren?

In het artikel bespreek ik diverse studies waaruit blijkt dat elke anonimisering van individuele gegevens gedoemd is om gedeanonimiseerd te worden. Enkele aanpakken die beter werken, zijn:

  • Gegevens van verschillende personen samenvoegen en alleen deze geaggregeerde data in de dataset bijhouden.

  • Privacygevoelige gegevens van ruis voorzien en de gegevens van meerdere personen bij elkaar optellen om statistieken te berekenen, zodat personen niet meer op individueel niveau te identificeren zijn. Dit heet differentiële privacy.

  • Een neuraal netwerk trainen op identificeerbare gegevens en daarmee een synthetische dataset genereren die statistisch identiek is aan de originele dataset, maar op geen enkele manier meer tot individuele personen terug te leiden is.

Kortom, anonimiteit is niet eenvoudig te bereiken.

Veilig thuiswerken met Linux Magazine

Linux Magazine 3 jaargang 21, over thuiswerken

Linux Magazine 3 is nu te koop, met als thema thuiswerken. Als privacy-activist heb ik mijn bijdrage aan het thema geleverd met twee artikels die opensourcetoepassingen met end-to-end encryptie bespreken:

Veilig videobellen met opensourcesoftware

Ik testte Jitsi Meet, Jami en Nextcloud Talk en vergeleek ze als oplossingen om te videobellen, met speciale aandacht voor beveiliging en end-to-end encryptie. Mijn conclusie: Jitsi biedt allround de meeste mogelijkheden, Jami is ideaal als je volledig peer-to-peer wilt werken en Nextcloud Talk is vooral interessant door zijn naadloze integratie met de andere componenten van Nextcloud.

Cryptpad: samen documenten bewerken zonder pottenkijkers

Ik testte Cryptpad, een opensource realtime collaborative editor voor het web. Je kunt hiermee dus samen met anderen aan teksten werken, maar uniek is dat dit end-to-end encryptie gebruikt. Daardoor kan zelfs de server waarop Cryptpad draait je data niet inzien: alle encryptie gebeurt client-side in de webbrowser van de gebruikers.

En uiteraard staan in dit nummer ook mijn vaste rubrieken: de geek pages, de /rant waarin ik oproep om bij te dragen aan open datasets voor spraaktechnologie zoals Mozilla's Common Voice, Focus op veiligheid en experttips.