Deze week stond in het teken van containerisatie, plugin-verbeteringen en DevOps-uitdagingen
VSCode Plugin: Multiplatform Compatibiliteit en Feature Uitbreiding
Een van mijn eerste opdrachten deze week was het uitbreiden van de VSCode Knowledge Graph plugin die ik vorige week ontwikkelde. Een belangrijk doel was om de plugin niet alleen in VSCode maar ook in Cursor IDE werkend te krijgen.
Het probleem bleek te zitten in een versieconflict – de plugin was opgebouwd voor VSCode 1.98.0 terwijl mijn Cursor IDE werkte op versie 1.96.2. Door de version requirements in het package.json bestand aan te passen, kon ik de plugin succesvol draaiend krijgen in beide omgevingen. Hoewel een schijnbaar kleine aanpassing, was dit een belangrijke stap in het verbeteren van de compatibiliteit en gebruiksvriendelijkheid van de plugin.
Na deze bugfix heb ik een gestructureerde roadmap opgesteld voor verdere ontwikkeling:
Roadmap Knowledge Graph Plugin:
0. Ondersteuning voor meerdere bestandsformaten
1. Verbetering van conceptherkenning en formattering
2. Conceptnormalisatie en synoniemenDe implementatie verliep voorspoedig met verschillende belangrijke verbeteringen:
Support voor YAML, Markdown en TXT bestanden
Een WYSIWYG interface met formulier voor nieuwe concepten/relaties
Automatische bestandstype-detectie
Caching en incrementele parsing voor betere performance
Nieuwe manieren om relaties tussen concepten aan te duiden, zoals ...
Om het project professioneel af te ronden, heb ik ook de nodige aandacht besteed aan een MIT-licentie:
Ik merkte dat mijn project geen licentie had en wou hier graag over bijleren. Ik vond de website opensource.org en koos voor de MIT-licentie, die populair en veel gebruikt is in de open-source community.
Van DLLs naar NuGet: De Overgang naar Moderne Package Management
Een interessante uitdaging was het overzetten van het Rabbitrest-project van lokale DLL-references naar NuGet packages. Dit was een belangrijk migratieproject dat de codebase moderner en beter onderhoudbaar moest maken.
Het proces omvatte:
Het opzetten van een
nuget.configbestandConfiguratie van
global.propsvoor projectbrede instellingenAanpassing van projectbestanden voor NuGet-compatibiliteit
Het opschonen van de
lib-folder, waarbij niet-gebruikte DLLs werden verwijderd
Voor projecten waarvoor nog geen NuGet packages beschikbaar waren, behield ik voorlopig de DLL-references – een pragmatische aanpak om de overgang geleidelijk te laten verlopen zonder de bestaande functionaliteit te verstoren.
Docker Containerization: CI/CD Workflows Automatiseren
Een groot deel van mijn week werd in beslag genomen door het opzetten van Docker containers en het integreren hiervan in de CI/CD pipeline via Gitea Actions. Dit bleek een uitdagende, maar leerzame ervaring.
Initieel liep ik tegen een obstakel aan toen bleek dat mijn virtuele machine niet goed was ingesteld voor Docker Desktop:
Het probleem lag bij 'nested virtualization' die niet aanstond in de BIOS van de virtuele machine. Ik heb alle nodige Windows features aangezet en WSL2 geïnstalleerd, maar de VM-platform ondersteunde geen nested virtualization.
Om toch voortgang te boeken, heb ik het project gekopieerd naar een fysieke machine waarop ik Docker wel kon installeren. Daar leerde ik enkele belangrijke Docker best practices:
Variabelen moeten correct geconfigureerd worden via
.envbestanden of omgevingsvariabelenDocker image names mogen geen hoofdletters bevatten
Relatieve paden worden anders geïnterpreteerd binnen de Dockerfile context
De grootste uitdaging was het opzetten van een geautomatiseerde workflow die Docker images zou bouwen en deployen naar de Gitea registry. Dit vereiste aandacht voor:
Correcte padverwijzingen vanuit verschillende perspectieven (Dockerfile vs. Action)
NuGet package resolution in de CI/CD omgeving
Efficiënte build processen (debug vs. release mode)
Timeout-problemen tijdens het cachen van builds
Na verschillende iteraties en opzoekwerk over Github Actions, kon ik een schone en functionele workflow implementeren:
Na wat tijd en opzoekingswerk op Github, heb ik wat gelijkwaardige actions gevonden die ik kan gebruiken als basis. Zo kan de Dockerfile zich nu op verschillende plaatsen bevinden en heb ik de hacky manier voor het vinden van NuGets eruit kunnen halen, waardoor de action veel cleaner is.
Command Worker: Complexe Containerisatie
Een extra uitdaging kwam aan het eind van de week met het containeriseren van de Command Worker applicatie – een complex project met zowel Blazor Server, Blazor Client als API componenten.
Deze taak bleek extra complex vanwege de omvang en structuur van het project:
Dit is een pittige opdracht aangezien het zo'n groot project is met zowel een Blazor server als client en een API.
Om deze complexiteit te beheersen, nam ik verschillende stappen:
Toevoegen van gezondheidscontroles (health checks) aan de API voor monitoring
Creëren van een aparte solution zonder testprojecten (Docker en testomgevingen bleken niet goed samen te werken)
Refactoren van projectbestanden voor betere compatibiliteit met Docker en CI/CD workflows
Het Belang van Test Maintenance
Een belangrijk leermoment kwam toen ik voor het Timotheus-project eerder geschreven testen moest reactiveren:
Door zoveel code veranderingen waren deze niet meer werkend met de huidige codebase. Mijn mentor noemde dit een 'los eindje' en vertelde me dat dit een veel voorkomend probleem is binnen IT waar hij niet van houdt.
Dit benadrukte het belang van het up-to-date houden van testen, zelfs tijdens snelle ontwikkelcycli. De testen hielpen uiteindelijk om alle mogelijke testresultaten te valideren en in de bin folder op te slaan voor verificatie.
Conclusie en Reflectie
Week 7 kenmerkte zich door diepgaand werk aan verschillende DevOps-aspecten: containerisatie, CI/CD automatisering, en package management-modernisering. Deze vaardigheden vormen een essentieel onderdeel van moderne software engineering en geven me waardevolle ervaring voor toekomstige projecten.
De uitdagingen met Docker en CI/CD pipelines hebben me geleerd hoe belangrijk het is om systematisch problemen aan te pakken en geduldig te zijn bij het debuggen van complexe buildprocessen. Tegelijkertijd heeft de plugin-ontwikkeling mijn front-end en development-tool vaardigheden verder aangescherpt.
Aan het eind van de week stond er een langdurige action te draaien – een mooi symbool voor hoe software development vaak werkt: je zet processen in gang en wacht geduldig op resultaten, klaar om volgende week verder te bouwen op wat je hebt bereikt.