Debug-avonturen met de KnowledgeGraph plugin
Deze week begon met het verder werken aan de KnowledgeGraph plugin - een Visual Studio Code extensie die bij HolonCom belangrijk blijkt voor kennisbeheer binnen projecten. Maandag heb ik eerst de documentatie grondig verbeterd: overlappende informatie verwijderd, verouderde delen bijgewerkt en verschillende markdown bestanden een duidelijker doel gegeven (changelog, readme, roadmap).
Daarna ben ik systematisch door de codebase gegaan om verbeterpunten te identificeren. Ik heb enkele bevindingen gedaan die directe aandacht nodig hadden:
Type validatie issues waarbij
as unknown as occurrencescasts werden gebruikt - een patroon dat tot runtime errors kan leidenAsynchrone initialisatieproblemen die potentiële race conditions veroorzaakten
Diverse kleinere problemen rondom data-toegang, UX/UI elementen en algemene code kwaliteit
Tijdens het testen ontdekte ik een merkwaardig probleem: de debug logs gaven aan dat er geen links of data werd gemapped bij activatie van de plugin. Dit bleek uiteindelijk een symptoom van een dieper probleem te zijn. Na uren van debugging ontdekte ik dat de dist-map (waar de gecompileerde code zou moeten staan) een verouderde compilatie bevatte. Dit leidde tot een reeks onverwachte problemen - mijn nieuwe features en fixes waren eigenlijk nooit echt getest!
// Voorbeeld van een probleem dat ik oploste:
// Oude code - problematische type casting
const occurrences = someData as unknown as occurrences;
// Nieuwe code - type-veilige benadering
if (isOccurrences(someData)) {
const occurrences = someData;
// Verdere verwerking...
}Dinsdag dook ik dieper in de debugproblematiek. Wat ik leerde bevestigde iets waar ik al langer van overtuigd was: debugging is echt een onderschatte vaardigheid in software ontwikkeling. Na het verwijderen van de dist- en out-folders en het aanpassen van configuraties, werkte de plugin nog steeds niet.
De grootste doorbraak kwam toen ik ontdekte dat het probleem bij de YAML parser lag. De nieuw geïmplementeerde library was te strikt in vergelijking met de oude parser. Na een grondige refactoring van de parser werkte de ondersteuning voor YAML files weer. Als bonus heb ik ook de hover-functionaliteit verbeterd, inclusief de opmaak van tekst in de hover UI en een bug opgelost waardoor relation types geen descriptions toonden.
Structurele verbeteringen en nieuwe projecten
Woensdag splitste ik de logica van de link providers op, zodat elk type nu zijn eigen link provider heeft - een stap richting betere modulariteit en onderhoud van de code. Met de plugin nu in een stabiele staat, kon ik me richten op een ander project.
Mijn mentor had changes gepusht voor een project dat ik moest containerizen in Docker. Na eerst enkele refactors door te voeren om het project buildbaar te maken, heb ik de code geanalyseerd en een plan gemaakt. Ik creëerde de nodige Docker files en een GitHub Action, waarna ik verschillende iteraties nodig had om de actie succesvol te laten bouwen.
Er deden zich problemen voor met de NuGet packages. Een veelvoorkomend probleem was dat NuGet packages werden gemaakt bij elke push naar willekeurige branches, waardoor features werden gebruikt die nog niet compatibel waren:
# Aangepaste GitHub Action-configuratie:
on:
push:
branches:
- develop
- release/*
# Zorgt dat NuGet packages alleen worden gemaakt van stabiele branchesCore libraries en NuGet optimalisatie
Op donderdag moest ik dieper duiken in het Core.All project vanwege problemen met NuGet packages. Sommige projects hadden geen NuGet packages, wat vaak wijst op projecten die ontbreken in de solution of niet correct geconfigureerd zijn voor package creatie.
Een hardnekkig probleem bleef zich voordoen met één specifieke package. Zelfs na het expliciet instellen van IsPackable op true werd de NuGet nog steeds niet correct gegeneerd in de GitHub Action. Uiteindelijk heb ik deze handmatig gepusht naar de online repository, wat weer nieuwe uitdagingen opleverde met het StreamDesk project.
Ik heb verbeteringen aangebracht in de Global.props file door een IsPackable variabele te introduceren en de lokale NuGet repository te optimaliseren:
<!-- Global.props aanpassingen -->
<PropertyGroup>
<IsPackable Condition="'$(IsPackable)' == ''">true</IsPackable>
<PackageOutputPath Condition="'$(Configuration)' == 'Debug'">$(MSBuildThisFileDirectory)..\..\packages\debug</PackageOutputPath>
<PackageOutputPath Condition="'$(Configuration)' == 'Release'">$(MSBuildThisFileDirectory)..\..\packages\release</PackageOutputPath>
</PropertyGroup>Deze aanpassing zorgt ervoor dat packages nu in verschillende repositories komen afhankelijk van de build configuratie (debug of release), wat de ontwikkelingsworkflow verbetert.
Blog website en visuele identiteit
Verder werkte ik deze week aan een blog website voor een klant. Na contact met hem te hebben opgenomen, kon ik zijn bestaande WordPress posts exporteren. Dit maakte het migratieproces aanzienlijk eenvoudiger.
Ik heb ook tijd besteed aan het ontwikkelen van een visuele identiteit voor de site. Het logo dat ik creëerde bevat een kameleon met een triskelion-achtig symbool als staart:
De kameleon symboliseert aanpassingsvermogen en veelzijdigheid
De triskelion (drievoudige spiraal) staat voor groei, beweging en transformatie - kernwoorden in Jos' werk
Op vrijdag valideerde ik of er een API beschikbaar was om posts te maken buiten de Ghost blog interface om. Deze functionaliteit bleek inderdaad aanwezig, wat de workflow voor content creatie zal verbeteren.
Testmigratie en afrondende werkzaamheden
De laatste opdracht van de week was het migreren van tests van MSTest naar xUnit voor het E-shop project. Dit proces werd bemoeilijkt door enkele ontbrekende projectreferenties en oudere .NET Framework projecten (<4.0). Na samenwerking met Dries om deze issues op te lossen, kon ik de tests succesvol migreren en valideren dat ze correct werken.
Tot slot heb ik nog wat Docker configuratie werk gedaan voor het StreamDesk project, waarmee ik de week productief afsloot.
Reflectie
Deze week heeft mij vooral geleerd hoe belangrijk het is om systematisch te debuggen. Door stap voor stap te werken en hypotheses te testen, kon ik complexe problemen oplossen die op het eerste gezicht ontmoedigend leken.
De projecten bij HolonCom bieden een uitstekende mix van technische uitdagingen die mijn vaardigheden verbreden - van plugin ontwikkeling en dockerisatie tot visuele identiteit creatie en testframeworks. Ik merk dat deze diversiteit mij dwingt om snel nieuwe concepten te leren en bestaande kennis in verschillende contexten toe te passen.