Vind het wiel niet opnieuw uit
- December 13, 2023
- 0
De Unix-wereld kent talloze programma’s met gespecialiseerde taken. Voordat je zelf software begint te schrijven, loont het de moeite om uit te zoeken of je niet gewoon bestaande software kunt combineren.(Koen Vervloesem)
Er is de laatste tientallen jaren al veel software geschreven die degelijk werk levert. Maar keer op keer willen ontwikkelaars het wiel opnieuw uitvinden en schrijven ze hun eigen software in hun favoriete programmeertaal of framework. En hoewel er soms heel gegronde redenen zijn om dat te doen (zoals kritieke software herschrijven in Rust voor meer veiligheid), is het vaak zonde om al het werk dat al in bestaande software is gekropen zomaar opzij te leggen.
Met een combinatie van bestaande software kun je vaak al veel meer bereiken dan je zou denken, zelfs op platforms waarvoor die software oorspronkelijk niet bedoeld is. Het is een voordeel van de Unix-filosofie: programma’s die een specifieke taak uitvoeren combineren. Ik heb dit zelf ervaren toen ik voor mijn reMarkable 2 software wilde schrijven om een kalender te tonen als suspend screen.
Ik ontdekte al snel pcal, een programma dat kalenders kan genereren in PostScript-formaat. De uitvoer daarvan hoefde ik alleen maar aan GhostScript door te geven om een png-bestand te genereren om als suspend screen op te slaan. Zo kon ik met één opdracht in de shell van de reMarkable een suspend screen aanmaken met een kalender van de huidige maand.
Uiteraard kwam er meer bij kijken. Ik moest een heel shell script rond die ene opdracht schrijven voor foutenafhandeling en opties, en een systemd service en timer om het script dagelijks op te starten om de kalender te updaten. Maar omdat ik voortbouwde op pcal en GhostScript, kon ik me focussen op deze ‘glue code’ die beide programma’s goed deed werken op de reMarkable 2.
Toen ik tevreden was, presenteerde ik mijn project op Reddit. De eerste reactie was: “If only this could be synced with my Google calendar this would be perfect.” Ok, challenge accepted, dacht ik. Na wat zoekwerk ontdekte ik op de website van pcal een verwijzing naar een script ical2pcal dat een iCalendar-kalender (met bestandsextensie .ics) naar het formaat van ical omzette. En dus voegde ik een script toe dat een ics-bestand van een opgegeven url downloadde en door ical2pcal liet omzetten.
En zo heb ik uiteindelijk een nuttig script ontwikkeld waarvoor ik geen letter code moest schrijven om data te verwerken, een kalender te tonen of mijn agenda te raadplegen. Puur door bestaande software in wat shellscripts te combineren, en dat op een apparaat uit te voeren dat enkele jaren geleden nog niet eens bestond.
De uitdaging is nu natuurlijk om dit te updaten. Er vroeg al een UX-expert om de wat gedateerde lay-out van pcal te verbeteren. En iemand anders had problemen met zijn agenda in te lezen. Zowel pcal als ical2pcal zijn al jaren niet meer onderhouden. Als ik grote wijzigingen wil uitvoeren, zal ik de huidige maintainers moeten aanporren of zelf de code forken. Maar dat ik op een weekend dit project voor de reMarkable heb kunnen maken, is een bewijs van de kracht van de Unix-filosofie. Als ik al die functionaliteit zelf had moeten schrijven, was ik hier maanden mee beziggeweest.