DynDaCo

Ik bouw productiesystemen in Ruby on Rails en .NET.

Achtentwintig jaar lang, grotendeels voor machinebouwers en integratoren, van de PLC en de robot tot in de browser — data uit machines halen en op een scherm krijgen, systemen aan elkaar knopen die daar nooit voor bedoeld waren, en de legacy-databanken vervangen die in stilte een afdeling draaiende houden.

Ruby on Rails

De toepassingen waar mensen de hele dag in werken: registers, opvolging, planning, rapportering. Systemen die jarenlang blijven meegroeien — en de nieuwe thuis voor waar het bedrijf vandaag op draait.

.NET

Applicaties die met installaties praten. PLC's, trackers en meettoestellen uitlezen via hun eigen protocollen, op machines die blijven werken als het netwerk dat niet doet, en data doorgeven aan de systemen erboven.

Hoe diep het gaat

"Full stack" betekent meestal de browser en de server. In een fabriek moet dat meer betekenen. Ik heb op elk van deze lagen gewerkt, en dat is vooral nuttig omdat ik daardoor weet wat de laag eronder echt kan leveren.

  1. Interface De schermen waar mensen mee werken — Hotwire, Vue, en bedieningsterminals op de vloer
  2. Applicatie Rails en ASP.NET Core — registers, opvolging, planning, rapportering
  3. Edge-diensten Software op machines die blijft werken wanneer het netwerk wegvalt
  4. Protocollen Siemens S7, Modbus TCP, OPC UA, AIS en een pak eigen binaire formaten
  5. Automatisatie Siemens PLC-programma's en Fanuc-robotprogramma's — de machines zelf
  6. Verbonden toestellen Toestellen in het veld die terugkoppelen — laadpalen, meters, trackers

Legacy vernieuwen

Een legacy-databank waar een hele afdeling op draait. Een mod_perl-toepassing die niemand nog durft uitrollen. Een VB6-tool die één iemand onderhoudt. Het wérkt nog, en net daarom is vervangen zo lastig — er is geen crisis die stilstand rechtvaardigt, en niets mag verloren gaan.

Ik breng die systemen naar Rails met een minimum aan downtime. De aanpak is altijd dezelfde, en de volgorde doet ertoe.

  1. 01

    Lees wat er echt staat

    Naast de documentatie ook kijken naar de data, want die zegt meestal meer. Oude systemen verzamelen info die nergens anders bestaat dan in de records zelf: de statuscode die na 2009 iets anders betekent, het veld dat voor een tweede doel hergebruikt is. Ik lees de echte databank voor ik iets voorstel.

  2. 02

    Bouw een herhaalbare import

    Een eenmalig conversiescript geeft je één poging. Een herhaalbare import laat je zo vaak als je wil tegen live data draaien, zodat elke aanname maanden voor de overschakeling al aan de realiteit getoetst is. Die ene beslissing haalt het grootste deel van het risico weg.

  3. 03

    Respecteer de gewoontes van mensen

    Bestaande URL's blijven werken. Wachtwoorden migreren stil bij de eerste aanmelding in plaats van iedereen te dwingen tot een reset. De woordenschat blijft wat je mensen al gebruiken. Een migratie waar gebruikers voor opgeleid moeten worden, is een migratie die weerstand oproept.

  4. 04

    Schakel over met een minimum aan downtime

    Tegen dan heeft de import al tientallen keren gedraaid en is het nieuwe systeem op echte records naast het oude gelegd. Een overschakeling hoort een ingestudeerde, saaie operatie te zijn — en omkeerbaar als ze dat niet is.

Geselecteerd werk

Al het werk

Vatenopvolging en lijnanalyse voor een machinebouwer

Vaten gevolgd door het spoelen en vullen, stilstanden van de lijn tot op de minuut verklaard, en datastromen die een technieker zelf in een browser samenstelt — .NET en Akka.NET aan de rand, Rails voor de analyse erboven.

  • ASP.NET Core 10
  • Akka.NET
  • Vue 3
  • TimescaleDB
  • InfluxDB
  • Ruby on Rails
  • Grafana

Schepen volgen én weten wat ze aan het doen zijn

Eén kaart van een gemengde vloot, die niet alleen toont waar elk schip is maar ook wat de systemen aan boord melden — brandstof, toestand van de machines, draaiuren — plus wie er aan boord is.

  • Ruby on Rails
  • PostgreSQL
  • PostGIS
  • AIS
  • Binaire TCP-protocollen