Simpal met NativeLink – turbocharge je builds zonder de koffie koud te laten worden

Er zijn projecten die op papier klein ogen, maar een kijkje onder de motorkap (en het nodige denkwerk om het concept te snappen) laat zien hoe je als developer met de juiste tools veel tijd en resources bespaart. NativeLink is er zo eentje en als (voor mij) eerste kennismaking heb ik er Simpal mee gemaakt. Aan de buitenkant een simpele rekenmachine (ToyCalc), maar ook een showcase van hoe je het buildproces slimmer en sneller maakt.

Met NativeLink van Trace Machina dus. De belofte vooraf: na een paar keer bouwen met NativeLink voelt lokaal compilen ineens alsof je terug bent in de tijd van dial-up internet, oef…

De façade: ToyCalc

ToyCalc zelf is niets meer dan een simpele calculator in Python. Het draait hier echter niet om het rekenen maar om de setup. De manier waarop dependencies, distributies en builds zijn geregeld, dat is waar de magie zit.

Simpal gebruikt Bazel, een serieus stuk gereedschap dat bekendstaat om z’n deterministische builds en herbruikbare artefacten. En precies daar haakt NativeLink slim op in.

De “cheat code”: NativeLink in je build

Kijk naar onderstaand stukje van build.sh. Hier zie je meteen dat NativeLink letterlijk een schakelaar is voor full remote execution of gewoon caching met een environment variable:

if [ "$USE_REMOTE_EXEC" = "1" ]; then

  echo "[INFO] Using full remote execution via NativeLink (--config=remote-exec)"

  BAZEL_FLAGS="--config=remote-exec"

else

  echo "[INFO] Using local execution with remote cache (default)"

fi

bazel build //:build_pyinstaller $BAZEL_FLAGS --verbose_failures

Oftewel:

Zet USE_REMOTE_EXEC=1 en je build gaat de cloud in, draait daar snel z’n rondje en komt terug met een keurig pakketje.

Laat je ‘m uit, dan gebruik je NativeLink “gewoon” als slimme cache.

Je hoeft verder niets te doen dan wel/niet kiezen voor de cloud build en ineens gaat het veeeel sneller.

NativeLink via Nix: een helper met smaak

De code is geschreven voor macOS waarbij NativeLink wordt geïntegreerd zodat je het via een shell-functie kunt gebruiken. Dus kan zijn dat je voor ander OS wat moet aanpassen.

NATIVELINK_HELPER='nativelink() {

  if [[ "$1" == "--help" || "$1" == "--version" ]]; then

    nix run github:TraceMachina/nativelink \

      --extra-experimental-features nix-command \

      --extra-experimental-features flakes -- "$@"

  else

    nix run github:TraceMachina/nativelink \

      --extra-experimental-features nix-command \

      --extra-experimental-features flakes \

      "$HOME/GitHub/taatuut/simpal/basic_cas.json5" "$@"

  fi

}'

Dat betekent dat je (na één keer je terminal opnieuw starten) je gewoon nativelink build kunt tikken zonder de extra flags.

Waarom is dit handig

Voorkomt “het werkt -alleen- op mijn machine” en versnelt het build proces.

Met NativeLink worden builds consistent, cachebaar en reproduceerbaar waarbij collega’s en de CI-server dezelfde artefacten gebruiken.

De snelheid krijg je ‘kado’ door gebruik maken van cloud infrastructuur en bovenal het feit dat NativeLink alleen dat opnieuw doet waar veranderingen in de code aan ten grondslag liggen. In mijn simpele calculator projectje zie je vooral verschil tussen eerste build en navolgende. Zonder veranderingen in de build (ja waarom dan builden, maar even als praktische verificatie van de theorie) gaat dan dus razendsnel, en ook bij wijzigingen is het sneller vanwege het hierboven genoemde: alleen doen wat nodig is. Echte winst ga je daar natuurlijk vooral mee halen in grote(re) projecten die vaak gebuild, getest en gereleased worden.

Wat heb ik nu weer geleerd

Je hebt niet per se een megaproject nodig hebt om met NativeLink te werken. Een kleine repo als ToyCalc is genoeg om het nut te laten zien. En als dit werkt voor deze demo, werkt het nog beter voor een enterprise-monorepo met 600 microservices.

Is remote de toekomst voor alle builds? Dat weet ik niet, maar voor enterprise projects met meerdere participanten is het zeker een valide optie zo te zien aan de bedrijven op de NativeLink website die er al mee bezig zijn.

NativeLink verandert hiermee een spelregel van software bouwen waardoor traaaage en inconsistente builds niet langer nodig zijn.

Geinteresseerd? Check de Simpal repo en lees meer over NativeLink en Trace Machina . Laat me vooral ook horen wat je ervan denkt!

Do Androids Dream of Electric Sheep?

I don’t know, maybe I should ask ChatGPT some time. What I do know is that I’ll soon have the possibility to build my own droid with the Viam Rover! Look at this mail…

And I already got me the Raspberry stuff I need with the Rover. I played a bit with the Viam robotics platform in the recent past and created and controlled a virtual robot. But way cooler to build a real one of course. Oh, for those who want to try Viam with a real robot right now, go to https://www.viam.com/resources/try-viam and take over a Rover in their robotics lab in New York for a while.

So from now on keeping my eyes on the mailbox while finding some inspiration. I have some help with that by the way.

Yes, these firespitting robots once aired on Wondere Wereld with Chriet Titulaer for those amongst us old enough to remember that crazy 80s show.

Client side regel gebaseerd matchen van data op PII* of andere gevoelige informatie

Het is weer een hele mondvol, de titel van deze post. Een korte discussie met mezelf of het dan beter helemaal in het Engels of Nederlands kan, heb ik gevoerd maar sla ik op deze plek nu over. Wel even uitleg wat PII oftewel Persoonlijk Identificeerbare Informatie betekent:

*) PII is alle informatie, al dan niet actief of passief beheerd binnen een organisatie, waarmee potentieel de identiteit van een persoon achterhaald kan worden. Denk aan gegevens als zoals naam, burgerservicenummer, geboortedatum en geboorteplaats, maar ook informatie van verwanten of biometrische gegevens, en daarnaast alle andere informatie die aan een persoon is gekoppeld of kan worden gekoppeld, waaronder medische, educatieve, financiële en werkgelegenheidsinformatie.

Bovenstaande is een vrije vertaling van de uitleg op https://csrc.nist.gov/glossary/term/pii Op https://autoriteitpersoonsgegevens.nl/nl/over-privacy/persoonsgegevens/wat-zijn-persoonsgegevens is ook uitleg over persoonsgegevens te vinden, echter zonder direct de term PII te noemen.

Onder ‘gevoelige informatie’ versta ik hier alle andere niet per se persoonsgebonden gegevens die voor een bedrijf van belang zijn vanuit oogpunt van intern en/of externe (vertrouwelijke) processen, intellectueel eigendom, concurrentie oogpunt etc.

Om even met het resultaat te beginnen: dat zijn actiegerichte bevindingen op basis van de toegepaste regels in de scan met de Data Fitness Agent om deze PII of andere gevoelige informatie te vinden. Deze bevindingen komen automatisch bij de relevante personen terecht komt voor verdere opvolging. Als ondersteuning daarbij is de informatie binnen de online Data Fitness klantomgeving ook toegankelijk in dashboards voor verdere analysedoeleinden en visuele presentatie. Hieronder een voorbeeld van zo’n dashboard, en daarna de verdere uitleg over het waarom en hoe tot dit resultaat te komen.

Waarom client side rule processing met de Data Fitness ControlOne Agent?

Waar het om gaat is het volgende: in de huidige situatie in je organisatie heb je ongestructureerde data (‘losse bestanden’ zoals Office documenten, PDF, afbeeldingen, project informatie en meer…). Die bestanden kunnen gevoelige informatie zoals PII bevatten, maar het is niet bekend welke bestanden dit betreft. Dan kun je met de Data Fitness content scan de inhoud van deze bestanden uitlezen en doorsturen naar de Cloud omgeving voor verdere analyse.

Maar wat als bepaalde inhoud van bestanden niet buiten de organisatie naar een externe omgeving mag, omdat deze bijvoorbeeld PII of andere gevoelige data bevat, maar je wel wilt weten om welke bestanden het gaat? Dan kun je met de client side content check alleen de bevindingen rapporteren naar de Cloud omgeving en daarop verdere analyse uitvoeren en acties ondernemen.

Dus als je binnen je organisatie alleen informatie die aan bepaalde regels voldoet wilt of mag gebruiken voor verdere verwerking, of deze juist wilt uitsluiten, dan is de content check de juiste optie (deze opzet kan natuurlijk ook bij de meta scan gebruikt worden, maar in de content scan is vaak meer te ‘vinden’).

Hoe werkt het?

Stel je voor, je hebt wat willekeurige data waarin misschien PII of andere gevoelige informatie voorkomt…

…en daarnaast regels om te matchen met die PII of organisatie specifieke informatie. In onderstaande code staan een paar regels voor Waterschappen waarvoor op basis van publiek beschikbare documenten gekeken is naar mogelijke definities van regels voor dossier- en projectnummer. Voor de PII regels zijn simpele voorbeelden gegeven voor BSN, IBAN, paspoort en meer. Deze zijn nog niet compleet (want voor iets als BSN is ook een aanvullende berekening als aanvullende validatie check nodig), maar daarover in een volgende blog meer.

Een aantal standaard regels is voor alle Data Fitness gebruikers beschikbaar, en aanvullende regels kunnen door de klant worden toegevoegd in de Data Fitness Cloud omgeving.

Bij de scan wordt de regels opgehaald uit de Cloud omgeving en lokaal toegepast. Een kijkje onder de motorkap laat zien dat aan de inhoud bevindingen (findings) worden toegevoegd voor elke regel die matcht.

De resultaten worden vervolgens naar de Data Fitness Cloud omgeving gestuurd, afhankelijk van de instellingen zijn dat de content of bevindingen, of beide.

De analyse van de bevindingen wordt in een overzichtelijk dashboard gepresenteerd, en daarnaast worden er acties aan gekoppeld, zoals versturen van notificaties naar relevante personen of afdelingen binnen de organisatie met de prioriteit en het voorgestelde vervolg.

Het interactieve dashboard biedt ook mogelijkheden om de informatie te filteren om snel tot specifieke inzichten te komen.

En nu?

Inzet van client side regel gebaseerd matchen van data op PII of andere gevoelige informatie geeft actief zicht en controle op de gegevens binnen de organisatie. Hiermee heb je vanuit de privacy wetgeving of andere externe relevante regelgeving én interne kaders voor datamanagement de mogelijkheid in handen om gericht verantwoordelijk beheren en beheersen van ongestructureerde data binnen de organisatie uit te zetten en op te volgen.

Interessant om binnen je eigen organisatie eens op deze manier bestanden te laten bekijken, of andere vragen? Neem dan contact op met info@dataether.nl