Over artikels die ik elders schreef

Python-projecten ontwikkelen als een pro met PyScaffold

Ik heb de afgelopen jaren al heel wat Python-projecten ontwikkeld. Elke keer je een nieuw Python-project start, moet je een hele machinerie opstellen als je het wat robuust wilt aanpakken: tests en linting opzetten, documentatie schrijven, packaging, en dat alles samenlijmen met pre-commit hooks en continue integratie.

Tot voor kort deed ik dat elke keer manueel, maar enkele maanden geleden ben ik op zoek gegaan naar een schaalbaardere manier. Er bestaan diverse projectgeneratoren en projectsjablonen voor Python. Na een uitgebreide vergelijking kwam ik uit bij PyScaffold. Hiermee maak je eenvoudig een sjabloon voor een Git-repository voor een Python-project aan, dat al allerlei best practices toepast rond documentatie, tests, packaging, afhankelijkheden, codestijl enzovoort.

Ik heb ondertussen al twee Python-projecten met PyScaffold aangemaakt en ben met een derde bezig. De lessen die ik hieruit geleerd heb en een overzicht van wat PyScaffold allemaal voor je kan klaarzetten, heb ik beschreven in een achtergrondartikel voor Tweakers: Gelikte code met PyScaffold: Python-projecten ontwikkelen als een pro.

Andere ontwikkelaars zullen misschien tot een andere keuze komen. Zo maakt PyScaffold geen gebruik van Poetry, een moderne tool voor het beheer van afhankelijkheden en het publiceren van Python-pakketten. Maar ik maakte zelf nog geen gebruik van Poetry en PyScaffold bleek vrij goed overeen te komen met mijn stijl van ontwikkelen in Python. Misschien dat ik volgend jaar een andere keuze zou maken.

Uiteindelijk maakt het ook niet zoveel uit wat je gebruikt. Elke projectgenerator of elk projectsjabloon maakt zijn eigen keuzes voor de onderliggende tools, maar allemaal bereiken ze hetzelfde. Tijdswinst bij het opzetten van een nieuw project, en een projectstructuur die allerlei best practices toepast die je een goede basis geeft om robuuste software te ontwikkelen. Ik ga in ieder geval niet zo snel meer een nieuw Python-project opstarten zonder projectgenerator of projectsjabloon.

Ontwikkel voor Arduino, ESP32 en nog veel meer met PlatformIO

Als je embedded software wilt ontwikkelen, dan merk je al snel dat elke hardwareproducent zijn eigen ontwikkeltools naar voren schuift. Voor Arduino is dat de Arduino IDE, Nordic Semiconductor levert een eigen versie van SEGGER Embedded Studio en STMicroelectronics zweert bij STM32CubeIDE.

Elk van deze tools heeft natuurlijk zijn voordelen, maar als je vaak met verschillende hardware werkt, dan is het complex om je met meerdere ontwikkelomgevingen vertrouwd te maken. PlatformIO biedt een oplossing: het is een opensource, cross-platform, cross-architecture, multi-framework ontwikkelomgeving voor embedded software. Je kunt daardoor in één universele omgeving al je ontwikkelprojecten voor diverse hardware uitvoeren.

Platforms en frameworks

PlatformIO ondersteunt meer dan 1400 ontwikkelbordjes en microcontrollers, waaronder de Atmel AVR-serie en Arduino-bordjes, de Espressif ESP32 en ESP8266, de Microchip PIC32, de Nordic nRF5-chips, de RaspberryPi Pico en andere RP2040-gebaseerde bordjes, de STM32-familie van STMicroelectronics en de Teensy-bordjes. De ondersteuning voor al deze hardware is verzameld in 48 ontwikkelplatforms.

Daarnaast ondersteunt PlatformIO ook 25 frameworks, zoals Arduino, het Espressif IoT Development Framework (IDF), FreeRTOS, Mbed, STM32Cube en Zephyr. Op die manier kun je bijvoorbeeld Arduino- of Zephyr-code gewoon overnemen in PlatformIO, op verschillende directoryindelingen en configuratiebestanden na.

Grafisch of op de opdrachtregel

PlatformIO voorziet in integraties met allerlei editors en ontwikkelomgevingen, zoals Visual Studio Code, CLion, Atom, Eclipse, Siblime Text, maar ook Emacs en Vim. De makers raden zelf Visual Studio Code aan, de populaire cross-platform code-editor van Microsoft.

Je kunt ook volledig op de opdrachtregel met PlatformIO werken, zonder daarvoor een grafische interface zoals Visual Studio Code te gebruiken. Installeer daarvoor PlatformIO als Python-module met pip:

pip install platformio

Daarna initialiseer je een nieuw project in de huidige directory met:

pio project init

Projecten bouwen met PlatformIO

Ik ben de laatste jaren voor mijn projecten waardoor ik traditioneel de Arduino IDE of Arduino CLI gebruikte overgestapt naar PlatformIO. Je maakt er eenvoudig projecten mee die je op meerdere types ontwikkelbordjes bouwt, en PlatformIO installeert de benodigde toolchains, frameworks en software development kits. Je geeft ook eenvoudig afhankelijkheden aan voor externe bibliotheken, en ook debugging en unit tests zijn in je projecten te integreren.

/images/platformio-environments.png

Wil je met PlatformIO aan de slag? Voor Linux Magazine schreef ik een artikel waarin ik een eenvoudig voorbeeldproject met PlatformIO aanmaak. Dat werkt op het Seeeduino XIAO-bordje van het Atmel SAM-platform, op de Arduino Nano RP2040 Connect en op de Raspberry Pi Pico.

Herken vogeldeuntjes in je tuin met BirdNET-Pi

Vraag je je ook weleens af welke vogelsoorten er allemaal je tuin bezoeken? Met een Raspberry Pi en een microfoon kun je de hele dag het geluid in je tuin opnemen. De software BirdNET-Pi herkent daarin vogeldeuntjes en toont je in een webinterface handige statistieken van wanneer welke vogels te horen zijn.

/images/birdnetpi-overzicht.png

BirdNET is een app voor Android en iOS die vogelsoorten kan onderscheiden aan de hand van geluidsopnames. Ideaal als je tijdens een wandeling je afvraagt welke vogel dat speciale deuntje laat horen. Onder de motorkap draait een neuraal netwerk van onderzoekers van Cornell University dat op geluiden van drieduizend vogelsoorten is getraind. Je neemt enkele seconden van het deuntje op je telefoon op, de app analyseert die vervolgens en benoemt daarna de vogels waarvan het geluid daar het meest op lijkt.

Luistervinkende Raspberry Pi

Patrick McGuire heeft met BirdNET-Pi een versie van BirdNET gemaakt die op de Raspberry Pi werkt. De software luistert continu naar het geluid van een usb-microfoon en herkent daarin realtime vogelgeluiden. Dat werkt op een Raspberry Pi 4B, 3B+ en Zero W 2. Om van alle mogelijkheden te kunnen genieten, is een Raspberry Pi 4B wel aangeraden.

Als je BirdNET ook als app op je telefoon kunt draaien, wat is dan het voordeel van BirdNET-Pi? Het belangrijkste pluspunt is dat BirdNET-Pi continu luistert, waardoor je het de klok rond vogelgeluiden kunt laten herkennen. Voor vogelliefhebbers levert dat ook interessante statistieken op, zoals hoe laat je het meeste kans maakt om specifieke vogelsoorten te spotten.

/images/birdnetpi-statistieken.png

Een ander voordeel is dat BirdNET-Pi zijn analyses volledig offline doet, terwijl de smartphone-app elke audio-opname naar de servers van het BirdNET-project moet doorsturen om daar de analyse uit te voeren. Je zou dus een Raspberry Pi met BirdNET-Pi op een plaats zonder netwerktoegang kunnen installeren en na een dag de opgeslagen detecties kunnen raadplegen.

In een artikel van me op id.nl lees je hoe je BirdNET-Pi op een Raspberry Pi installeert en configureert.

Een webgebaseerde kantooromgeving op de Raspberry Pi met Nextcloud Hub

De opensource collaborationsoftware Nextcloud Hub verbetert jaar na jaar. Het begon ooit als een online opslagdienst die je op je eigen server kon installeren, maar ondertussen doet het veel meer. Je kunt er bestanden mee delen en synchroniseren, chatten en videobellen, en er zelfs een agenda, contacten en e-mail op draaien. Jaar na jaar komen er nieuwe functies bij, wat Nextcloud zeker voor thuisgebruikers, maar zelfs voor bedrijven interessant maakt.

Een ander succes is het webgebaseerde kantoorpakket Collabora Online, de webversie van LibreOffice. Installeer je dit op een Linux-server, dan kun je via je browser documenten bewerken en zelfs met meerdere personen samenwerken. Vooral de integratie van Collabora Online in Nextcloud Hub maakt het een interessant programma om documenten te delen en eraan samen te werken:

/images/nextcloud-collabora-online.png

De installatie van Nextcloud Hub en de integratie met Collabora Online kan op meerdere manieren. Wanneer je dit volledig zelf doet, steek je er wel wat werk in. Ook het up-to-date houden en het beheer vereist aandacht. Dat is niet voor iedereen weggelegd.

Een oplossing voor wie zich daarmee niet wil bezighouden, is de Ubuntu-appliance van Nextcloud. Dit is een aangepaste versie van de Linux-distributie Ubuntu, Ubuntu Core, met Nextcloud Hub in een 'snap' geïnstalleerd. Je krijgt dan automatisch updates. Bovendien kun je er ook Collabora Online in installeren.

Van dit alles bestaan ook versies voor een ARM-processor. Ideaal om op een Raspberry Pi 3B(+) of 4B te zetten. Wil je weten hoe dit werkt, lees dan mijn stappenplan in het artikel Nextcloud Hub installeren op Raspberry Pi met Collabora Online voor PCM.

Als je ooit al eens Nextcloud en/of Collabora Online geïnstalleerd hebt en dat te lastig vond, moet je het zeker eens opnieuw proberen. Niet alleen het Ubuntu-appliance is handig, ook op andere vlakken is het beheer van Nextcloud in de laatste jaren veel eenvoudiger geworden. De webinterface van een certificaat van Let's Encrypt voorzien is bijvoorbeeld met één opdracht en één configuratiewijziging te doen.

Luister BLE-, Zigbee- en Thread-netwerkverkeer af met Wireshark

Bij problemen met draadloze apparaten is het vaak moeilijk om precies de oorzaak aan te duiden. Wireshark is een populaire opensource-packetsniffer die zowel op Windows, Linux als macOS draait. Het is een standaard hulpmiddel geworden in de gereedschapskist van netwerkbeheerders. Je onderzoekt er zowel wifi- als ethernetverkeer mee, bijvoorbeeld om netwerkproblemen te analyseren.

Met een nRF52840 Dongle van Nordic Semiconductor en een plug-in voor Wireshark kun je er ook Bluetooth Low Energy-, Zigbee- en Thread-verkeer mee uit de lucht plukken. Voor PCM beschreef ik de hele procedure om BLE en Zigbee te sniffen.

Nordic Semiconductor biedt de firmware voor de nRF52840 Dongle en de bijbehorende plug-ins voor Wireshark hier aan:

Ik gebruik de nRF Sniffer for Bluetooth LE continu om BLE-apparaten te debuggen. Zo kun je eenvoudig met de displayfilters van Wireshark filteren op specifieke types BLE-pakketten. Zo filter je bijvoorbeeld op iBeacon-pakketten:

(btcommon.eir_ad.entry.company_id == 0x004c) && (btcommon.eir_ad.entry.data[:2] == 02:15)

Dat beperkt de getoonde pakketten tot degene met manufacturer-specific data van company ID 0x004c (van Apple) en met de eerste twee bytes gelijk aan 0x0215. [1]

Maar hoe kom je aan die displayfilter? Als je op manufacturer-specific data van company ID 0x004c wilt filteren in Wireshark, klik je eenvoudigweg op het veld Company ID in het paneel met pakketdetails van een iBeacon-pakket, rechtskik je en kies je dan Apply as Filter en dan Selected. Dat voegt een displayfilter toe voor alle pakketten met de geselecteerde waarde voor het company ID.

De extra filter voor de eerste twee bytes is wat meer werk als je de syntax niet kent. Selecteer gewoon het volledige veld Data in het paneel met pakketdetails van een iBeacon-pakket, rechtsklik en kies dan Apply af Filter en dan ... and Selected. Dat voegt deze filter toe als extra vereiste aan de al gebruikte filter. Maar nu filter je alle pakketten met exact dezelfde data als dit geselecteerde pakket:

btcommon.eir_ad.entry.data == 02:15:18:ee:15:16:01:6b:4b:ec:ad:96:bc:b9:6d:16:6e:97:00:00:00:00:d8

Als je wilt filteren op de eerste twee bytes, voeg je [:2] aan het dataveld toe. Die vergelijk je dan met de bytes 02:15.

Dan Larimer over democratie als gedecentraliseerde consensus

Ik schrijf al meer dan twintig jaar over allerlei technische onderwerpen en ik heb daarbuiten nog heel wat andere interesses. Maar het is nog maar enkele jaren geleden dat ik in een epifanie plots de rode draad in al die onderwerpen zag: decentralisatie.

  • Ik geloof in de kracht van opensourcesoftware omdat de gebruikers daardoor niet alleen consument maar ook producent zijn.

  • Ik ben een groot voorstander van self-hosted software zodat je niet afhankelijk bent van clouddiensten van grote bedrijven.

  • Tien jaar geleden al schreef ik over Bitcoin en ik vind blockchains en andere vormen van distributed ledgers fascinerende technologie om zonder centrale controle transacties te kunnen uitvoeren.

  • In mijn strijd voor meer privacy vind ik het vooral belangrijk dat mensen controle over hun eigen data hebben, en daarom ben ik een grote fan van technologieën zoals Nextcloud, Solid en end-to-end encryptie.

  • Ik vind het belangrijk dat je zelf dingen kunt maken en programmeren, en ik ben dan ook blij dat ik deel uitmaak van de DIY/makersbeweging die dit democratiseert met de Raspberry Pi, ESP32, Arduino, 3d-printers, fablabs enzovoort.

  • Ik vind dat huishoudens zoveel mogelijk zelfvoorzienend zouden moeten zijn, niet alleen voor energie, maar ook voor voedsel.

More Equal Animals - The Subtle Art of True Democracy (Bron: Dan Larimer)

Toen ik dan in het begin van dit jaar Dan Larimers (gratis te downloaden) boek More Equal Animals - The Subtle Art of True Democracy ontdekte, las ik dit bijna in één ruk uit. Op bijna elke pagina las ik wel inzichten die verweven waren met de rode draad in mijn interesses.

In essentie is een blockchain een techniek om zonder centrale aansturing tot consensus te komen. Bij Bitcoin is dat consensus over transacties, maar volgens Larimer kun je de principes van blockchains ook op onze samenleving zelf toepassen. Een succesvolle samenleving implementeert volgens Larimer een proces dat zoveel mogelijk tot consensus leidt.

Democratie is in die ogen een proces om geschillen te beslechten met meerdere partijen en dat is iets waarin blockchains zo goed zijn. Echte democratie gaat volgens Larimer dan ook over het coördineren met andere personen terwijl je nog je persoonlijke autonomie en macht behoudt. En de ideale vorm van de samenleving bestaat dan uit gedecentraliseerde, autonome gemeenschappen op alle niveaus.

Voor PC-Active schreef ik uitgebreider over de visie die Larimer in zijn boek beschreef. Als onderwerpen zoals persoonlijke autonomie, gedecentraliseerd bestuur, een antifragiele samenleving en de gevaren van moral hazard je nauw aan het hart liggen, dan is het boek More Equal Animals een aanrader.

Visualiseer data van je Bluetooth-sensors

Bluetooth Low Energy (BLE) is een dankbaar protocol om als hobbyprogrammeur mee te werken. De specificaties zijn allemaal op de website van de Bluetooth SIG te vinden en zowat elk ontwikkelplatform kent wel een of meerdere BLE-bibliotheken.

In een artikel voor Computer!Totaal leg ik uit hoe je data van BLE-sensors uitleest in je eigen Arduino-code die op een ESP32-microcontroller draait, en het resultaat visualiseert op het scherm van een M5Stack Core.

Een BLE-apparaat kan op twee manieren communiceren: door data te broadcasten naar iedereen in de buurt, of door een één-op-één verbinding te maken met een ander apparaat en daarnaar data te zenden. In het artikel werk ik voor beide communicatiemanieren een voorbeeldprogramma uit.

Broadcasten gebeurt vaak door omgevingssensoren. De RuuviTag is zo'n sensor die temperatuur, luchtvochtigheid, luchtdruk en beweging detecteert. [1] De sensor broadcast zijn data elke seconde via BLE als manufacturer data. Het protocol is volledig gedocumenteerd. In het artikel in Computer!Totaal leg ik uit hoe je de temperatuur hieruit decodeert en op het scherm van de M5Stack Core toont.

Andere apparaten gebruiken verbindingen. De Bluetooth SIG heeft een heel aantal services voor verbindingen gedefinieerd waarvan je de specificaties gewoon kunt raadplegen. Een populaire is de service Heart Rate. In het artikel beschrijf ik hoe je de code schrijft om met behulp van de bibliotheek NimBLE-Arduino met een hartslagsensor te verbinden en realtime je hartslag op het scherm van de M5Stack Core te tonen. Ideaal voor tijdens het sporten! [2]

/images/m5stack-heart-rate-display.jpg

Maak je eigen kvm-over-ip-systeem met Pi-KVM

Als je nas of server op zolder is gecrasht, wil je waarschijnlijk voorkomen dat je het probleem ter plaatse moet oplossen. Met een kvm-over-ip-systeem kun je op afstand ingrijpen via het netwerk. Met Pi-KVM bouw je zoiets zelf met een Raspberry Pi en enkele goedkope componenten.

Op de GitHub-pagina van Pi-KVM staat uitgelegd welke componenten je nodig hebt om je eigen kvm te maken:

  • Raspberry Pi 4

  • hdmi-naar-csi-2-adapterbordje of hdmi-naar-usb-dongel

  • een usb-splitter om de usb-c-aansluiting van de Raspberry Pi 4 zowel voor stroom als usb-otg in te zetten

De Raspberry Pi 4 krijgt dan toegang tot de hdmi-uitvoer van je nas of server en emuleert een toetsenbord, muis en opslag. De opensourcesoftware Pi-KVM biedt dit alles in een webinterface aan, zodat je via je webbrowser op je nas of server kunt werken alsof je ernaast zit:

/images/pikvm-opslag.png

Voor PCM schreef ik het artikel Pi-KVM: Nas benaderen via Raspberry Pi op afstand. Ik leg er uit hoe je zelf een usb-splitter maakt van twee usb-kabels en hoe je Pi-KVM installeert en instelt en het gebruikt om een iso-image aan te koppelen en op je nas of server te installeren.

De ontwikkelaars hebben ook een eigen HAT ontwikkeld die je op de Raspberry Pi 4 kunt monteren. De verkoop start binnenkort.

GPT-3: overtuigende onzin

Het Amerikaanse onderzoekslaboratorium OpenAI heeft vorig jaar een neuraal netwerk getraind dat tekst kan schrijven die bijna menselijk lijkt. Het taalmodel maakt gebruik van deep learning met maar liefst 175 miljard parameters. In mei 2020 werd GPT-3, zoals het model heet, voorgesteld. Het is de derde in een reeks van taalmodellen met de naam Generative Pre-trained Transformer.

Op wat voor soort teksten werd GPT-3 dan getraind? Een gefilterde versie van het webarchief van Common Crawl, een andere dataset van webpagina's, WebText2, de inhoud van heel wat boeken (datasets Books1 en Books2) en de inhoud van Wikipedia. Eigenlijk dus zowat alles wat je maar op internet kunt vinden. In totaal ongeveer 450 gigabytes invoer. Opvallend is dat GPT-3 daardoor niet alleen op menselijke teksten is getraind, maar ook op computercode zoals css, jsx en Python. GPT-3 kan daardoor teksten genereren variërend van poëzie tot proza en nieuwsberichten en computerprogramma's.

OpenAI gaf vorig jaar enkele honderden ontwikkelaars toegang tot een bètaversie van de GPT-3 API en verzekerde zich daardoor van enkele maanden media-aandacht. Het wapenfeit waarmee GPT-3 het meest in het nieuws kwam, was dat het volledige nieuwsartikelen uit zijn duim kon zuigen. Je geeft dan een titel en subtitel op en het model schrijft hierover een kort artikel van ongeveer 200 woorden. Die artikelen blijken op het eerste gezicht verrassend coherent te zijn, maar vaak ook duidelijk verkeerde informatie te bevatten of opvallende herhalingen van zinnen.

Vorig jaar schreef ik voor PC-Active in mijn rubriek Denkwerk een artikel over GPT-3, Een computer die als een mens schrijft. Het is nu ook online te lezen. Je vindt er heel wat voorbeelden van wat er misloopt met GPT-3.

Mijn conclusie:

GPT-3 genereert tekst die bij een oppervlakkige lezing niet te onderscheiden is van een door een mens geschreven tekst. Tegelijk heeft dit taalmodel totaal geen begrip van wat het schrijft. Dat is een gevaarlijke combinatie: er kan onzin in de tekst staan, maar zo overtuigend beschreven dat nietsvermoedende lezers het gewoon geloven. Maar eigenlijk is dat niet zo heel verschillend van wat we nu al hebben: veel mensen schrijven ook onzin. GPT-3 is gewoon een samenvatting van de teksten van miljoenen mensen.

Kortom, GPT-3 is een kind van zijn tijd.

Geef je MQTT-gebaseerd domoticasysteem een dashboard met Homepoint op een M5Stack Core

Je domoticasysteem stuur je in veel gevallen aan via een webinterface op je laptop of een mobiele app op je smartphone. Maar altijd toegang tot je domoticasysteem hebben via een klein schermpje aan de muur is zeker zo handig. Je kunt zo'n apparaatje zelf in elkaar knutselen met een microcontrollerbordje, een schermpje en wat knoppen, maar als je het in de woonkamer wilt gebruiken, wil je niet dat er allerlei losse draadjes en printplaatjes te zien zijn.

Homepoint op een M5Stack Core

M5Stack, een jong Chinees bedrijf, biedt allerlei producten aan die gebouwd zijn rond een ESP32-microcontroller, die er niet als een ontwikkelbordje uitzien. Vooral interessant is de M5Stack Core BASIC Kit: een modulair, stapelbaar ESP32-bordje met een lcd-scherm van 2 inch en drie knoppen in een sobere behuizing. Die ziet er niet slecht uit in je woonkamer. De module is heel compact: 13 mm hoog, en 54 mm lang en breed. Ik heb er ondertussen al enkele in huis staan.

Een van de programma's die je op de M5Stack Core [1] kunt installeren, is Homepoint. Het biedt een interface om een op MQTT gebaseerd domoticasysteem aan te sturen en de status van sensors te tonen.

Voor Computer!Totaal schreef ik een artikel over hoe je Homepoint op je M5Stack Core installeert en er een dashboard voor je domoticasysteem van maakt. Ik leg er diverse configuraties uit. Een volledige configuratie vind je ook in het artikel dat ik een tijdje geleden over Homepoint in het Engelstalige gedeelte van mijn blog schreef.

Een systeem zoals Homepoint op een apparaatje zoals de M5Stack Core maakt je domoticasysteem veel toegankelijker. Een dashboard dat altijd beschikbaar is zonder dat je een laptop hoeft open te klappen of een smartphone moet ontgrendelen, doet je veel meer gebruikmaken van de sensorgegevens. Zo is de vraag "Is het koud buiten?" hier nu snel beantwoord :-)