Na twee weken bij HolonCom waarin ik de basis leerde kennen en werkte aan projectconfiguraties, werd mijn derde week gekenmerkt door diepere technische uitdagingen rondom NuGet packages, automatiseringsscripts en het debuggen van andermans code. Deze week bracht niet alleen technische groei, maar leerde me ook waardevolle lessen over geduld en systematisch probleemoplossen.
NuGet Packages en Projectrefactoring
De week begon waar ik geëindigd was: het project bouwde nog niet succesvol vanwege padproblemen. Bij de transitie van libraries naar absolute en relatieve paden binnen een gecentraliseerd project liep ik tegen diverse uitdagingen aan. In het core project implementeerde ik een schakelaar om flexibel te kunnen wisselen tussen NuGet packages en lokale projectreferenties - een elegante oplossing die onze ontwikkelwerkstroom aanzienlijk verbeterde.
Tijdens het troubleshooten van build-issues stuitte ik op de beruchte "ambiguous name" error. Na wat speurwerk ontdekte ik dat het probleem niet lag bij identieke namen van solution en project zoals ik eerst dacht, maar bij een dubbel gebruikte package name. Deze kleine maar cruciale aanpassing liet de build eindelijk slagen.
Het documenteren van versioning policies vormde een interessante uitdaging. Semantic versioning is essentieel voor betrouwbare softwareontwikkeling, maar het bleek dat onze stabiele versie (3.0.0) alleen in de testomgeving bestond. Dit inspireerde me om onze GitHub Actions workflow te verbeteren met nieuwe functionaliteiten:
Automatisch triggeren van de action bij nieuwe tags in Gitea
Bouwen van packages voor pull requests om te testen (zonder publicatie)
Automatische Gitea releases bij het pushen van tags
Deze verbeteringen maakten onze deployment pipeline robuuster en beter geautomatiseerd, wat de efficiëntie van ons ontwikkelproces aanzienlijk verhoogde.
Code Obfuscation en Deployment Challenges
Een bijzonder leerzaam onderdeel van de week was het implementeren van code obfuscation met "Obfuscar" - een techniek om reverse-engineering tegen te gaan door code te verwarren. Dit proces vereiste aanpassingen in de Global.props file en het toevoegen van XML-configuratiebestanden per project. Bij het testen ontdekte ik een interessant fenomeen: Windows CMD doet aan caching, waardoor ik voor elke test eerst de prompt moest afsluiten om accurate resultaten te krijgen.
Een cruciaal inzicht tijdens dit proces was het belang van de "CopyLocalLockFileAssemblies"-variabele, die op true gezet moest worden om dependencies correct te laten packagen. Deze kleine maar essentiële kennis illustreert hoe diepgaand het .NET ecosysteem kan zijn.
De workflow voor code obfuscation stuitte echter op een onverwachte hindernis: de Obfuscar.Console.exe is een Windows executable, maar onze Gitea runner draait op Ubuntu. Dit cross-platform probleem deed me denken aan de ILRepack uitdagingen uit week 2. Na overleg met mijn mentor besloten we om de obfuscated NuGet packages handmatig te deployen naar een nieuwe Gitea organisatie. Om dit proces te stroomlijnen, ontwikkelde ik met behulp van Cursor AI een script dat de deployment automatiseerde.
Netwerktroubleshooting en Remote Issues
Halverwege de week werd ik geconfronteerd met connectiviteitsproblemen na een Windows update. De Remote Desktop connectie naar onze VM faalde, wat resulteerde in een diepgaande troubleshooting sessie van netwerkconfiguratie, firewalls en RDP-protocol instellingen. Tijdens het wachten op een oplossing benutte ik de tijd door literatuur over gegevensleer te bestuderen - een mooi voorbeeld van hoe downtime constructief kan worden gebruikt.
Uiteindelijk ontdekten we dat de automatische traffickingssnelheid in Remote Desktop race conditions veroorzaakte - een waardevolle les in netwerktroubleshooting die aantoonde dat problemen soms op onverwachte plekken zitten. Dit herinnerde me aan wat mijn mentor eerder zei over race conditions in asynchrone programmeertalen.
Van BAT naar PowerShell: Scriptautomatisering
Een belangrijk deel van mijn week bestond uit het verfijnen van scripts voor NuGet deployment. Aanvankelijk begon ik met .BAT bestanden voor Windows, maar mijn mentor adviseerde om over te stappen op PowerShell voor geavanceerdere functionaliteit. De transitie tussen deze scripting languages was een leerzame ervaring die mijn toolset verbreedde.
Het script moest dynamisch zijn met parameters voor versie, projecten, solution paden en NuGet bronnen. De grootste uitdaging was het correct beheren van alpha-versies en het pushen van verschillende versies naar verschillende repositories - Holoncom voor alpha-versies en Desco voor stabiele versies.
De refactoring van het script van een hardcoded implementatie naar een parametrische aanpak maakte het herbruikbaar voor verschillende projecten en scenarios. Ik creëerde uiteindelijk twee versies: één met relatieve paden en één met absolute paden, wat de flexibiliteit voor verschillende ontwikkelomgevingen verhoogde.
Debugging Andermans Code: Het Timotheus Project
De laatste dagen van de week waren gewijd aan het debuggen van het Timotheus project - een klassiek voorbeeld van het werken met erfcode. De berekeningen voor de enneagram- en stresstesten werkten niet correct; ongeacht de gegeven antwoorden kwamen dezelfde resultaten terug, en de hash van de vragen klopte niet.
Door systematische unit tests te schrijven (meer dan 500 regels aan tests) en debug informatie te verwerken, kon ik geleidelijk de problemen identificeren. Bij de stresstest ontdekte ik bijvoorbeeld dat sommige antwoorden voor 500% meetelden en andere voor 0% - een duidelijke oorzaak van de incorrecte resultaten.
Deze debugging-ervaring leerde me het belang van methodisch werken bij het analyseren van andermans code. Het monitoren van console en netwerkverkeer via developer tools was essentieel om JavaScript errors en API-interactieproblemen te identificeren. Het bevestigde ook mijn mentors wijsheid over het belang van documentatie: goede code beantwoordt de "hoe" vraag, maar documentatie verklaart het "waarom" - cruciaal bij het navigeren door onbekende codebasissen.
Sociale Dimensie: Team Building
Een warm moment in de week was een team lunch, een traditie bij HolonCom voor nieuwe medewerkers. Hoewel het met twee weken vertraging plaatsvond, was het een gezellige gelegenheid om mijn collega's beter te leren kennen buiten de technische context van ons werk. Deze sociale dimensie van software ontwikkeling is net zo belangrijk als de code zelf en droeg bij aan mijn gevoel van verbondenheid met het team.
Reflectie en Leerpunten
Ondanks alle inspanningen eindigde de week met enkele onopgeloste problemen in het Timotheus project - een JavaScript error bij het doorsturen van antwoorden en incorrecte scoringsresultaten. Het voelde onbevredigend om iets "kapot" achter te laten voor het weekend, maar het is ook een realistische weerspiegeling van softwareontwikkeling: soms moet je accepteren dat niet alles in één sprint opgelost kan worden.
Deze derde week heeft me geleerd dat geduld, systematisch troubleshooten en goede communicatie met je team essentiële vaardigheden zijn voor een software engineer. Elke bug is een leermoment, elke commit een kleine overwinning, en samen vormen ze de weg naar groei en vakmanschap in dit veld.
Voor de komende week sta ik voor de uitdaging om de Timotheus issues volledig op te lossen en verder te gaan met de systematische migratie van managed libraries naar afzonderlijke, goed gedocumenteerde NuGet packages. Ik kijk uit naar de volgende stappen in mijn ontwikkeling als software engineer bij HolonCom.