Deze week stond volledig in het teken van consolidatie en optimalisatie. Met het einde van mijn stage in zicht, richtte ik me op het afwerken van openstaande taken en het implementeren van cruciale deployment-oplossingen. Deze week bracht interessante technische uitdagingen met zich mee, van cross-platform compatibiliteit tot automated versioning systemen.
VS Code Extension deployment en Docker voorbereidingen
De week begon met een grondige evaluatie van mijn takenlijst - een essentiële stap om ervoor te zorgen dat ik geen losse eindjes achterlaat. Een van de eerste taken was het "vernederlandsen" van Jos' blog website, waarbij ik het Engels thema moest lokaliseren naar het Nederlands.
Het werken met remote development via Webmin gaf me waardevolle inzichten in serveronfiguratie. Door een poortverbinding op te zetten kon ik direct vanuit VS Code wijzigingen aanbrengen in de gehoste bestanden. Dit workflow patroon - waarbij lokale development tools worden gekoppeld aan remote servers - is een krachtige methode die ik vaker zal toepassen.
Een belangrijke mijlpaal was het succesvol deployen van mijn VS Code plugin naar de Visual Studio Marketplace. Het VSCE (Visual Studio Code Extension) proces leerde me veel over software distributie:
VSCE tooling: De command-line tool voor packaging en publishing van extensies
VSIX packaging: Het creëren van distribueerbare pakketbestanden
Marketplace deployment: Het volledige proces van submission tot publicatie
Parallel hieraan werkte ik aan het oplossen van build issues in het HolonCom.Core.All project. Deze debugging sessie bracht twee veel voorkomende problemen aan het licht:
Verkeerde variabel referenties: Een klassiek voorbeeld van waarom code review cruciaal is
Nuget versioning conflicts: Oude versies die niet de nieuwste codebase reflecteerden
Nuget versioning complexiteit en Docker implementatie
De dag begon met een inspirerend gesprek over de Camino de Santiago, wat me deed realiseren hoe waardevol de informele momenten met collega's zijn voor team building en kennisdeling.
Het technische hoogtepunt was het tackelen van een complex versioning probleem. De non-semantische versioning "3.0.1.5-develop.0.89" bracht interessante uitdagingen met zich mee. Ik leerde over version ranges in NuGet:
[3.0.1-3.0.2) // 3.0.1 inclusief, 3.0.2 exclusiefDeze notatie, hoewel op het eerste zicht verwarrend, biedt krachtige mogelijkheden voor dependency management.
Voor de Docker implementatie in de command worker hanteerde ik de "fail fast" methodologie. Deze aanpak - waarbij je bewust alle externe referenties verwijdert en systematisch de benodigde dependencies toevoegt - zorgt voor een cleane, minimale codebase. Het resultaat was een geoptimaliseerde solution met alleen de essentiële componenten.
Een cruciale les betrof case sensitivity verschillen tussen operating systems:
Windows: Case-insensitive voor bestandspaden
Ubuntu/Linux: Case-sensitive voor bestandspaden
Dit verklaarde waarom builds lokaal slaagden maar faalden in de CI/CD pipeline. De normalisatie van folder- en projectnamen was essentieel voor cross-platform compatibility.
Git configuratie en source code refactoring
Merge conflicts brachten interessante Git gedragingen aan het licht. Het commando git config core.ignoreCase false was een game-changer voor cross-platform development. Deze configuratie maakt Git case-sensitive op Windows, wat consistentie waarborgt met Linux-gebaseerde CI/CD omgevingen.
Een fascinerende Git-eigenschap die ik ontdekte: Git slaat alleen bestanden op, geen folders. Folders worden behandeld als namespaces. Deze architecturale beslissing verklaart waarom het hernoemen van folders in Git complex kan zijn.
Het refactoren van de E-shop solution vereiste uitgebreide projectfile synchronisatie. Projecten die lang alleen als NuGet packages waren gebruikt, hadden verouderde source code projectfiles. Deze asymmetrie tussen NuGet en source-only projectfiles is een veelvoorkomend probleem in grote codebases.
Visual Studio vs Command Line building
Een belangrijke ontdekking betrof de verschillen tussen Visual Studio en command-line builds. Visual Studio bevat standaard target files die niet op het bestandssysteem aanwezig zijn, maar wel beschikbaar zijn tijdens compilation. Dit kan leiden tot:
Compatibiliteitsproblemen met oudere projectfiles
Inconsistente build gedragingen tussen development en CI/CD omgevingen
Missing dependency issues bij manual compilation
PowerToys' PowerRename tool bewees zijn waarde voor bulk refactoring operaties. Dit soort tools zijn onmisbaar voor grote codebase transformaties.
Automated versioning en multi-targeting challenges
De implementatie van automated build versioning voor Core.Arango was een complexe maar waardevolle oefening. Het systeem werkt als volgt:
Version prefix: 3.0.1 (manueel beheerd)
Build number: Auto-increment bij elke push
CI/CD integration: Automatische versie updates
Kritische overwegingen voor dit systeem:
Infinite loop prevention:
[skip ci]commits voorkomen recursieve triggersTiming coordination: Versie updates voor NuGet packaging
De uitbreiding van mijn VS Code plugin met flexible file detection binnen KnowledgeGraph folders vereiste geavanceerde bestandssysteem navigatie. Deze feature verhoogt de gebruiksvriendelijkheid aanzienlijk.
Ghost project lokalisatie bracht me in contact met moderne i18n (internationalization) patronen:
JSON-based translations: Gestructureerde key-value pairs
Template integration:
{{t "key"}}helpers voor dynamic contentFallback mechanisms: en.json als backup voor nl-be.json
Het werken met multi-target frameworks in .NET bracht een belangrijk inzicht: ambiguïteit in publish commando's kan builds doen falen. De oplossing - explicit framework specification met -f net9.0 - is een best practice voor CI/CD pipelines.
Reflectie en geleerde lessen
Deze week onderstreepte het belang van:
Cross-platform awareness: OS-specifieke gedragingen kunnen subtiele maar kritieke problemen veroorzaken
Automated tooling: Deployment pipelines en versioning systemen verminderen menselijke fouten
Clean architecture: "Fail fast" methodologieën leiden tot optimale codebases
Documentation: README files en proces documentatie zijn cruciaal voor knowledge transfer
De balans tussen technische diepgang en praktische implementatie was deze week perfect. Elke uitdaging bracht waardevolle inzichten die direct toepasbaar zijn in toekomstige projecten.