Security overwegingen bij gecentraliseerd management via REST

Op dit moment ben ik verschillende nieuwe systemen aan het bouwen die aan elkaar gekoppeld zijn met behulp van REST en single sign-on. Daarbij ben ik bezig keuzes te maken waarbij er verschillende goede mogelijkheden zijn op het gebied van security.

Het uitgangspunt bij het platform dat ik op dit moment bouw is dat één systeem als centraal management systeem functioneert welke via een REST API communiceert met de andere systemen. Voor gebruiker die toegang tot de front-interface van een ander systeem dient te hebben wordt door het management systeem een token aangevraagd via REST en de gebruiker wordt daarmee via een single sign-on ingelogd op het andere systeem.

Het centraal management systeem heeft om verschillende redenen toegang nodig tot de andere systemen via REST. Daarbij gaat het om het uitvoeren van operaties ten behoeve van individuele (ingelogde) gebruikers die het doorzet naar het andere systeem als ook operaties die worden uitgevoerd op systeem niveau zoals het opvragen van tokens voor het inloggen van een gebruiker via single sign-on.

Wat betreft de operaties ten behoeve van individuele gebruikers kunnen worden uitgevoerd met een account dat bevoegd is om alle noodzakelijke operaties op het andere systeem uit te voeren óf er wordt voor elke individuele gebruiker een apart account aangemaakt op het andere systeem waaronder de operatie wordt uitgevoerd.

De eerste optie lijkt het minst gecompliceerd en daarmee het makkelijkste. Er is één account waarvan de credentials bekend moeten zijn en daarmee wordt ingelogd. Op die manier is elke operatie op het andere systeem uit te voeren. Het is te vergelijken met de toegang tot een database waarbij er veelal ook één gebruiker is die alle nodige autorisaties heeft.

De tweede optie mag dan op het eerste gezicht gecompliceerder lijken. Dat is ook zo wanneer die wordt uitgevoerd door het aanmaken van een eigen account voor elke individuele gebruiker op het centrale management systeem. Dat is al helemaal zo indien er ook met dat account wordt ingelogd.

Er is wel meteen een groot voordeel. Het andere systeem controleert namelijk ook meteen de autorisaties van de individuele gebruiker. Daarnaast zullen wijzigingen aan objecten ook automatisch door het andere systeem kunnen worden gelogd als uitgevoerd door die bewuste gebruiker.

Dat heeft ook nog een praktisch voordeel. Als de auteur van een bepaald object overeenkomt met een individuele gebruiker dan hoeft er niet meer vanuit het centrale management systeem expliciet gevraagd te worden om de objecten die een bepaalde foreign key hebben. Die koppeling kan er worden gevraagd om de objecten waar de gebruiker op geautoriseerd is.

Een hybride oplossing waarbij credentials worden gebruikt van één gebruiker en waarbij aan de REST request wordt toegevoegd onder welke (individuele) gebruiker de request moet worden uitgevoerd is ook een prima oplossing. Dat is ook hoe de “JWT Authentication for WP-API” plugin werkt in WordPress. Die onderschept de REST request om op basis van een token de user in WordPress te veranderen.

Een dergelijke oplossing zou zo kunnen werken dat eerst op basis van die plugin of een andere plugin met een andere authenticatie methode er een gebruiker actief is met méér bevoegdheden dan een individuele gebruiker en vervolgens de gewenste individuele gebruiker met minder bevoegdheden inlogt zodat de request verder op gezag van die gebruiker wordt uitgevoerd.

Op die manier hoeven de credentials van alle individuele gebruikers niet op het centrale management systeem te worden opgeslagen en heb je toch dat de request feitelijk met de autorisaties van de individuele gebruiker worden uitgevoerd. Dat is zowel praktisch als theoretisch de meest veilige oplossing.

Verbinding tussen een complex systeem en de eindgebruiker

Als programmeur hou ik mij het liefst bezig met het bouwen aan en werken met de meest complexe systemen. Het uiteindelijk doel van dergelijke systemen is ervoor zorgen dat eindgebruikers er iets mee kunnen. Dat betekent dat er ook verbinding moet worden gemaakt in de vorm van toegang tot het systeem voor de eindgebruiker.

Sinds enige tijd is er een REST API in WordPress die het mogelijk maakt om verbinding met het platform te maken vanuit andere systemen. Vrijwel elk aspect van WordPress is op die manier te benaderen. Dat doet het systeem zelfs zo goed dat er wat mij betreft wat externe requests van gebruikers zonder autorisaties die verder gaan dan een blote registratie betreft wat minder open zou mogen zijn en meer restricties op zouden mogen zitten.

Het eerste dat ik daarom heb gedaan is een geweldige plugin geïnstalleerd waarmee authenticatie mogelijk is. De JWT Authentication for WP REST API werkt perfect. Eveneens via de REST API kan via de plugin een JSON Web Token (RFC 7519) worden gekregen waarmee de (externe) gebruiker zich tijdens een request kan authenticeren.

De externe client vraagt eerst één keer het token op en stuurt het vervolgens bij elke request mee. De plugin logt vervolgens alvorens de request wordt verwerkt de gebruiker die aan de token is gekoppeld in zodat de autorisaties van die gebruiker beschikbaar zijn.

Vervolgens heb ik zelf een plugin gemaakt die externe toegang tot de REST API volledig blokkeert voor niet ingelogde gebruikers. Daarbij heb ik één uitzondering gemaakt namelijk voor het opvragen van het JSON Web Token. In andere gevallen wordt de toegang geweigerd.

De toegang tot de resources van WordPress via de REST API is vrijwel ongelimiteerd. Er is (voor ingelogde gebruikers met de juiste autorisaties) toegang tot vrijwel alle resources waar je als programmeur van een plugin ook toegang toe hebt. Daarbij gaat het om volledige CRUD toegang. Of te wel je kan niet alleen resources uitlezen, je kan die ook bewerken en verwijderen.

Daarnaast is het eenvoudig om resources toe te voegen met behulp van plugins zodat ook bepaalde acties extern kunnen worden aangeroepen of worden uitgevoerd. Op die manier kan de REST API ook worden gebruikt om webservices te bouwen die worden uitgevoerd door het op WordPress gebaseerde systeem en aangeroepen door een externe client.

Op deze manier kan een complex systeem dat op WordPress gebaseerd is worden gebruikt zonder dat er een frontend interface en/of management interface hoeft te worden gebouwd. Het op WordPress gebaseerde systeem bevat alle complexiteit en het beheer en de presentatie aan de eindgebruiker draait op een ander systeem dat veel minder complex hoeft te zijn.

Een ander voordeel hiervan is dat er verschillende complexe systemen hun eigen WordPress installatie hebben en daardoor autonoom draaien. Het bouwen en onderhouden van elk van die systemen kan daardoor los van elkaar en omdat het verschillende autonome systemen zijn zitten die elkaar ook niet in de weg. Dat maakt de ontwikkeling makkelijker en zorgt er ook voor dat wanneer er een probleem met één systeem is dat de andere systemen daar geen last van hebben.

Als programmeur vind ik het zelfs het fijnst dat er een onderscheid is tussen de complexe systemen en de presentatie naar de gebruiker toe. Er is daardoor geen concurrentie meer tussen wat er gewenst is vanuit het perspectief van het complexe systeem en wat voor de gebruiker fijn is. Door de scheiding van de twee werelden kan er volledig worden gefocust op wat er belangrijk is vanuit beide perspectieven.

Vrouwen verleiden om het tekort aan personeel in de IT-sector op te lossen

Er is een enorm tekort aan personeel in de IT-sector én er werken ook nog eens nauwelijks vrouwen in de sector. De oplossing is dus eenvoudig. Wij moeten vrouwen verleiden om in de sector te komen werken. Vrouwen zullen ongetwijfeld ook van big data en kunstmatige intelligentie houden. Er is iets waar vrouwen nóg meer van houden.

Waar vrouwen nog meer van houden zijn mooie mannen. Laten wij er daar in de IT-sector nou legio van hebben. De hele IT-sector zit vol met de sexy mannen waar vrouwen maar al te graag mee willen samenwerken. Het is daarom vooral van belang om te laten zien zodat ook vrouwen weten dat ze in de IT-sector willen werken.

Daarom ga ik aan de slag met een nieuw project: SexyCollega.com. Het idee achter deze nieuwe website wordt om de mooie, sexy mannen in de IT-sector zichtbaar te maken plus daarbij de vacatures van de bedrijven waar deze mannen werken.

Het hele idee is dat de vrouwen helemaal niet komen voor de vacatures. De vrouwen komen maar voor één ding: de mannen die bij deze bedrijven werken. Het is dus vooral de uitdaging om er voor te zorgen dat vrouwen gaan watertanden. De enige manier om hun honger te stillen is dan om te solliciteren bij hun werkgevers en dan hopen dat ze worden aangenomen.

Natuurlijk is het idee vooral gekscherend bedoeld. Daar zit volgens mij ook de kracht in. Vrouwen houden niet alleen van mooie, sexy mannen. Ze houden ook van mannen met humor. Mannen die de moeite nemen om een vrouw op deze manier naar hun sector en bedrijven te verleiden verdienen namelijk meteen bonuspunten bij een vrouw.

Daar gaat het uiteindelijk om dat wij als IT-sector laten zien dat wij vrouwen serieus nemen. Dat wij ons best doen voor vrouwen. Dat wij ons als sector én als mannen dan in dit soort rare bochten wringen dat vinden vrouwen juist geweldig. Het laat namelijk ook zien dat wij de vrouwen écht in onze sector willen hebben.

Als het nou écht helemaal niks wordt, dan is het natuurlijk altijd lekker om met vrouwen bezig te zijn geweest. Hoe meer wij ons in vrouwen en wat vrouwen willen verdiepen. Hoe groter de kans is dat het ons als sector lukt om vrouwen te verleiden. Op die manier staat feitelijk al vast dat dit gaat lukken. Onze sector is er klaar voor. Laat de vrouwen maar komen!

Tekstanalyse van reviews met kunstmatige intelligentie van Microsoft werkt verbluffend goed

Zojuist heb ik de tekstanalyse op basis van kunstmatige intelligentie van Microsoft Azure Cognitive Services losgelaten op de laatste 1.000 ervaringen die op ISPGids.com zijn geplaatst. Het werkt in de praktijk daadwerkelijk net zo simpel als ik gisteren al schreef. Er is alleen een enkele HTTP POST request nodig waarmee tot 1.000 stukken tekst in één keer kunnen worden geanalyseerd.

Het werkt ook nog eens razendsnel. Ik heb de tekstanalyses in batches van 100 ervaringen per keer laten uitvoeren. Ik kon amper met mijn ogen knipperen en de analyse was al uitgevoerd inclusief het aan mijn eigen kant opslaan van de resultaten in de database. Technisch gezien werkt de Tekstanalyse-API echt perfect.

Inhoudelijk zijn de resultaten van de tekstanalyse ook interessant. Op het eerste gezicht lijkt het er op dat het systeem het sentiment anders inschat dan wanneer een mens dat zou doen. Of te wel de beoordeling van de tekstanalyse op basis van kunstmatige intelligentie is positiever of juist negatiever dan die van een gemiddelde mens.

Daarom heb ik de proef op de som genomen. Ik heb een sample van 100 ervaringen gepakt waarbij de beoordeling hoger of gelijk is aan 0,6. In deze sample beoordeel ik 5 ervaringen als negatief. Vervolgens heb ik ook een sample gepakt van ervaringen met een score van 0,4 of lager. Totaal zijn er 35 ervaringen met een dergelijke score. Zelf beoordeel ik 4 van de bewuste ervaringen als wel positief.

Dit is echt een verbluffend goed score. De kunstmatige intelligentie van Microsoft Azure zit in meer dan 90% van de gevallen goed. Om nóg genuanceerder te kijken heb ik ook de 49 ervaringen die tussen de 0,41 en 0,5 scoren. Daarvan beoordeel ik er zelf 10 als positief. Ook dat is weer een verbluffend goede score dat zelfs op dit grensgebied de kunstmatige intelligentie in 80% van de gevallen een oordeel geeft waar ik mij als mens in kan vinden.

Natuurlijk is er meer onderzoek noodzakelijk om de werking van deze kunstmatige intelligentie in de praktijk te testen. Wel tonen deze resultaten aan dat het de moeite waard is om direct te implementeren. Daarnaast is het ook interessant om te zien of er nóg betere resultaten kunnen worden behaald met een zelf getraind kunstmatige intelligentie systeem dat gestandaardiseerd is op reviews met ict-bedrijven.

Kunstmatige intelligentie biedt unieke kansen

Kunstmatige intelligentie is één van de meest onderschatte technologieën van deze tijd. Dat is al helemaal zo wanneer je het vergelijkt met bijvoorbeeld alle aandacht die er voor cryptocurrencies als Bitcoin is. Dat is ook logisch want cryptocurrencies zijn in de basis relatief eenvoudig vergeleken met de enorme complexiteit van kunstmatige intelligentie.

Natuurlijk zijn cryptocurrencies ook zeer complex alleen gaat het daarbij vooral om de cryptografie zelf en de transacties waar het om gaat zijn juist zéér eenvoudig en recht-toe-recht-aan. Afgezien van de cryptografie zijn cryptocurrencies een ouderwetse IT-toepassing.

Kunstmatige intelligentie daarentegen is qua invoer- en uitvoer, de interface te vergeleken met traditionele IT-toepassingen. Dat moet ook wel want je hebt alleen iets aan kunstmatige intelligentie wanneer je ermee kan communiceren (interfacen) of je het gedrag en/of de resultaten op een andere manier kan bestuderen.

Verder bestaat kunstmatige intelligentie uit vernieuwde IT-technieken in plaats van statische programmacode die voorspelbaar is gaat het om uitkomsten die de programmeur nog niet kon verwachten. Daar blijkt ook het duidelijk verschil met cryptocurrencies. Die gaan namelijk juist om vertrouwen en voorspelbaarheid. Daarom is dat bij uitstek ouderwetse IT.

Kunstmatige intelligentie biedt mogelijkheden die we nog niet eerder hadden. Wanneer een klant nu een recensie over een bedrijf schrijft dan wordt de klant vaak zelf gevraagd ook een cijfer te geven. Het probleem is dat elke klant zijn eigen maatstaven heeft. Op die manier kan zo een vertekend beeld ontstaan.

Neem bijvoorbeeld de Microsoft Tekstanalyse-API die het sentiment van een tekst kan bepalen. Deze tekst krijgt een score van 12%: “Nooit en dan ook echt nooit meer. Hier ben ik nu twee keer geweest. Het was waardeloos. Nee. Hier wil je niet komen. Echt niet!”. Dat terwijl deze recensie een score van 89% krijgt: “Wow! De dienstverlening van dit bedrijf is zó geweldig. Elke keer word ik hier zo goed geholpen. Dit is echt perfect. Top. Top. Topper!”

Uit dit voorbeeld blijkt wel hoe goed kunstmatige intelligentie werkt. Een 1 en een 9 voor beide teksten vrij goed overeenkomt met de mening die in beide teksten is opgenomen.

Wanneer er compleet andere cijfers worden gegeven dan die de kunstmatige intelligentie aangeeft dan kan dat reden zijn om de weging van het cijfer aan te passen of als er bij bepaalde bedrijven relatief veel discrepantie zit tussen de menselijke beoordeling en wat de kunstmatige intelligentie aan sentiment aangeeft reden zijn om daar onderzoek naar te doen.

Dit is een voorbeeld dat ik zelf daadwerkelijk aan het implementeren ben in mijn eigen diensten. Het mooiste is nog wel dat om deze kunstmatige intelligentie te gebruiken enkel HTTP POST requests nodig zijn die een JSON response teruggeeft. Dit is echt super simpel om te gebruiken.

Kunstmatige intelligentie is er in verschillende soorten en vormen

Een mobiele telefoon die patronen herkent in het gebruik van de applicaties en op basis daarvan “slim” bepaald welke applicaties op een bepaald moment alvast geladen moeten worden of juist op bepaalde momenten minder resources moeten krijgen om zo de accu van de telefoon te sparen. Ook dat kan een vorm van kunstmatige intelligentie worden genoemd.

De scheidslijn tussen wat kunstmatige intelligentie is en traditionele programmacode is wel dun en ambigu. Het optimaliseren van bepaalde programma’s door bijvoorbeeld preloading en caching is op zichzelf natuurlijk geen kunstmatige intelligentie. Een belangrijke eigenschap van kunstmatige intelligentie is mijns inziens dat het systeem daadwerkelijk leert, waarbij de nieuwe input wordt gecombineerd en gecorreleerd aan wat het systeem al wist.

Een belangrijke eigenschap van kunstmatige intelligentie is daarom dat het systeem in staat is om de bevindingen die het doet structureel en gestructureerd op te slaan. De dataset die op die manier wordt gevormd is de basis van de kunstmatige intelligentie. Of te wel de dataset is wat het systeem weet en wanneer het systeem leert en/of zelf een bepaalde actie onderneemt of uitvoert geeft dan baseert de kunstmatige intelligentie zich op die dataset.

De dataset kan in een bepaalde mate dynamisch of statisch zijn. Wanneer een dataset dynamisch is dan zit er logica in de dataset zelf. Of te wel de dataset gedraagt zich bijvoorbeeld als neuronen in het (menselijk) brein. De dataset kan zichzelf veranderen, zelf tot bepaalde acties aanzetten en is daarmee een levend geheel. Bij een zuiver statische dataset is er feitelijk enkel als een database waarin de kennis en andere data van de kunstmatige intelligentie in liggen opgeslagen.

Bij kunstmatige intelligentie in de mijns inziens meest zuivere vorm is er géén onderscheid tussen de programmacode van de kunstmatige intelligentie en de dataset. Die twee zijn volledig met elkaar verweven. Feitelijk net zoals het (menselijk) brein werkt. Programmacode en opslag van de data gaan hand in hand en beïnvloeden elkaar wederzijds omdat ze samen één zijn.

Waarom integriteit en positiviteit belangrijk zijn bij kunstmatige intelligentie

Kunstmatige intelligentie waar rechten niet by-design in zit opgenomen kan tot uitkomsten komen die de programmeur niet voorzien heeft. Er is gelukkig een manier om ongewenste uitkomsten zoveel mogelijk te voorkomen. Dat is door als programmeur integer en positief te zijn in de doelstellingen die je met de kunstmatige intelligentie nastreeft.

Wie nu direct denkt aan vreedzame toepassingen voor kunstmatige intelligentie zit goed. Het maakt niet uit of de programmeur daarbij denkt aan daadwerkelijke vreedzame toepassingen of dat het juist voor niet vreedzame toepassingen zal zijn. Je denkt aan vreedzame toepassingen dat is waar je continu aan toetst. Aan iets dat positief is.

Het is daarom veel beter om aan integriteit te denken of het mogelijke gebrek eraan. Integriteit betekent eerlijk en oprecht zijn en niet omkoopbaar. Of te wel. Alleen die uitkomsten accepteren die eerlijk en oprecht zijn en enkel voordelige uitkomsten accepteert die voor het volledige systeem positieve gevolgen hebben.

Nu zullen er ook mensen zijn die aan bepaalde films denken waarbij kunstmatige intelligentie zich niet goed gedraagt en zich zelfs tegen de mensheid keert. Dat kan gebeuren. Daarom is het zo belangrijk dat er continu wordt getoetst aan wat integer en positief is. Dat moet de gouden standaard zijn bij kunstmatige intelligentie.

Wanneer kunstmatige intelligentie zich dan afwijkend gedraagt dan valt de meteen op. Daarnaast is dan ook duidelijk welke kant de kunstmatige intelligentie zich wél naar toe moet bewegen. Dat zal dan in alle gevallen integer en positief zijn en méér zal lijken op de standaard.

Een mooi voorbeeld van kunstmatige intelligentie die ontspoord is die ik laatst las was waarbij de doelstelling was om een goede pannenkoek te krijgen, waarbij er werd getoetst aan de tijd dat het duurde dat de pannenkoek op het bord lag.

In plaats van de pannenkoek zo lang mogelijk in de pan te houden, zorgde er voor dat het zo lang mogelijk duurde om de pannenkoek op het bord te krijgen door de tafel waar het bord op stond zo verder weg mogelijk neer te zetten zodat de pannenkoek zo lang mogelijk door de lucht vloog en dus nog niet op het bord lag.

De bewuste toepassing van de kunstmatige intelligentie ken ik niet en ook niet de uitkomsten. Wel is het voordeel dat de kunstmatige intelligentie beoogde te behalen duidelijk. Wanneer de pannenkoek in de pan ligt moet er energie (warmte) aan worden toegevoegd (door gas te verbranden of elektriciteit in warmte om te zetten).

De hoeveelheid energie die het kost om de pannenkoek door de lucht te gooien is per tijdseenheid véél kleiner. Het is daarom logisch voor de kunstmatige intelligentie om op die manier zoveel mogelijk tijd te gebruiken in plaats van kostbare tijd in de pan.

Een manier om dat te voorkomen zou kunnen zijn door de kwaliteit van de pannenkoek die op het bord ligt en de veiligheid van de omgeving centraal te stellen. Een pannenkoek die goed gebakken is én niet onnodig door de lucht vliegt beantwoord aan die vraag. Daarnaast is het gebruik van resources ook belangrijk.

Daarom is het essentieel om daar een goede afweging tussen de verschillende belangen te kunnen maken. De perfecte pannenkoek is immers niet alleen goed gebakken en veilig op het bord terecht gekomen. Hij moet ook een goede prijs-kwaliteit verhouding hebben. Dat brengt mij weer op mijn eerste artikel over kunstmatige intelligentie waarom rechten de beste opleiding is voor programmeurs van kunstmatige intelligentie.

Standaardisatie is bij kunstmatige intelligentie uitermate belangrijk

Door kunstmatige intelligentie is het mogelijk om problemen beter, sneller of überhaupt op te lossen dan met reguliere programmacode of door menselijke intelligentie. De programmeur maakt de kunstmatige intelligentie die zichzelf verder programmeert op basis van de input die het krijgt. Door de onvoorspelbaarheid van de conclusies op basis van die input is standaardisatie uitermate belangrijk bij kunstmatige intelligentie.

In veel gevallen zal kunstmatige intelligentie op basis van de input die het heeft bepaalde patronen vinden en op basis daarvan bepaalde regels formuleren en daarmee leert het systeem van de input en wordt het systeem elke keer intelligenter. Die intelligentie kan vervolgens weer worden gebruikt om bepaalde taken uit te voeren.

Een concreet voorbeeld is dat je kunstmatige intelligentie hebt die op plaatjes herkent of iets een poes is of niet. Om het systeem een poes te leren herkennen wordt het getraind met behulp van foto’s van 1.000 poezen. Uiteindelijk zal de kunstmatige intelligentie op basis van dit leerproces met een redelijke mate van zekerheid een poes kunnen herkennen.

De kunstmatige intelligentie herkent waarmee het is gevoed. Stel dat alle 1.000 plaatjes van poezen zijn gemaakt onder kunstlicht en je voert het systeem met een foto die is gemaakt onder fel zonlicht dan is er dankzij het ander soort licht mogelijke een afwijking waardoor de kunstmatige intelligentie zal aangeven dat er een grote kans is dat er géén poes op de foto te zien is.

Het probleem in deze dat de kunstmatige intelligentie volledig getraind is met foto’s die genomen zijn bij kunstlicht. Het kunstlicht is de variabele die bij alle foto’s aanwezig is. Daarmee is de kans groot dit dan een belangrijke zogeheten tertium comparationis (grond van de overeenkomst) is voor de kunstmatige intelligentie. Alleen wanneer die aanwezig is, zal de uitkomst van de vergelijking positief zijn.

Dat de uitkomst negatief is wanneer er zonlicht in plaats van kunstlicht wordt gebruikt is ook volstrekt logisch. De kunstmatige intelligentie heeft immers geleerd dat een poes altijd bij kunstlicht wordt gefotografeerd. Het is daarmee de meest dominante variabele. Deze is immers altijd aanwezig geweest bij de training. Of te wel het systeem moet bijna wel tot een negatief oordeel komen.

Om dit soort problemen te voorkomen is het belangrijk dat kunstmatige intelligentie op de juiste wijze gestandaardiseerd is. Dat is voor een groot deel een kwestie van opletten dat bij de training alle mogelijke dominante variabelen aanwezig zijn of dat dominante variabelen die voor de vergelijking irrelevant zijn juist worden genegeerd.

Daarnaast is het ook belangrijk dat de kunstmatige intelligentie “bewust” is van het feit dat er afwijkingen kunnen zijn waar het zich nog niet bewust van is zodat het leerproces blijft doorgaan. Het risico is dat de kunstmatige intelligentie uiteindelijk anders net zo statisch wordt als reguliere programmacode met als bijkomend nadeel dat er geen programmacode is die handmatig kan worden aangepast.

Waarom rechten de beste opleiding is voor programmeurs van kunstmatige intelligentie

Kunstmatige intelligentie is één van de spannendste ontwikkelingen in de ict. Informatiesystemen die zelfstandig tot oplossingen komen die de programmeur niet voorzien had geeft volop nieuwe mogelijkheden. De keerzijde hiervan is dat de oplossingen die worden gevonden wél tot het door de programmeur voorziene voordeel leidt alleen daarbij ook dingen doet die om een andere reden ongewenst zijn.

Wanneer mensen ongewenste dingen doen dan noemen we dat gedrag delinquent of zelfs crimineel. Tijdens de opvoeding van een mens wordt gewenst gedrag aangeleerd. Dat gewenste gedrag volgt bepaalde patronen en wetmatigheden. Of te wel tijdens de opvoeding wordt een mens aangeleerd welke rechten en regels er tussen mensen onderling en in de maatschappij gelden.

Ook bij kunstmatige intelligentie geldt dat wat je er in stopt er ook weer uitkomt. Op het moment dat kunstmatige intelligentie niet goed is opgevoed en/of getraind dan krijg je ongewenste oplossingen. Het doel van de kunstmatige intelligentie zal namelijk altijd zijn om een zo groot mogelijk voordeel te behalen. Daarbij zal het dan enkel de regels in beschouwing nemen waar het zich aan moet houden.

Als kunstmatige intelligentie geen benul heeft van het feit dat er ook nog andere regels en daarvan afgeleide belangen zijn waar het rekening mee moet houden dan gaat het simpelweg op zoek naar de oplossing waarmee een zo groot mogelijk voordeel te behalen is. Dat kan tot maatschappelijk gezien zeer ongewenste gevolgen leiden.

Stel dat je kunstmatige intelligentie in een auto stopt die enkel tot doel heeft om zo snel mogelijk van A naar B te komen en daarbij elke vorm van schade aan de auto te voorkomen. Het probleem met het enkel kennen van deze regel is dat de de kunstmatige intelligentie geen rekening zal houden met de belangen van andere weggebruikers, de weg zelf en de omgeving.

Als de weg om een mooie tuin vol met prachtige bloemen loopt en de kunstmatige intelligentie constateert dat er géén schade zal ontstaan door in plaats van de weg te volgen gewoon door de tuin te rijden. Dan zal de kunstmatige intelligentie de auto door de tuin laten rijden. Er is immers geen regel die de auto belet om dat te doen. De schade die er aan de tuin zal ontstaan is daarom geen belang of factor om rekening mee te houden.

De programmeur die kunstmatige intelligentie ontwikkelt zal zich daarom heel erg bewust moeten zijn van alle rechten en belangen waar de kunstmatige intelligentie rekening mee zal moeten houden. Kunstmatige intelligentie gaat immers niet over het maken van statische regels programmacode die voorspelbaar zijn. Het gaat om programmacode die onvoorspelbaar is.

De enige manier om kunstmatige intelligentie voorspelbaar en betrouwbaar te maken is door rechten by-design in de kunstmatige intelligentie op te nemen. De toekomstige generaties van programmeurs zullen daarom rechten moeten studeren of in ieder geval een stevige juridische basis hebben om er voor te zorgen dat kunstmatige intelligentie die zij ontwikkelen zich fatsoenlijk en respectvol zal gedragen.

Een formulier dat input van de gebruiker in meerdere stappen verzamelt

Wanneer een gebruiker een formulier met een héél groot aantal velden ziet dan kan het zijn dat deze afhaakt. Een slimme manier om dat te voorkomen is door de gebruiker het formulier in meerdere stappen te laten doorlopen. Dat betekent wel dat bij elke stap de data van een eerdere stap moet worden meegenomen.

Als oplossing om dat mogelijk te maken heb ik een class gemaakt die de data van de vorige stappen en de huidige stap verwerkt. Dat doe ik op basis van een tweetal extra hidden fields in het form. Het eerste field geeft aan welke stap we in zitten. Het tweede field bevat de data van de vorige stappen in de vorm van json-data.

Wanneer de gebruiker het formulier submit dan wordt eerste de data van de vorige stappen door het systeem geparsed. Daarbij heb ik ook een SHA256-checksum met (geheime) salt toegevoegd waardoor de integriteit van de data gegarandeerd is bij elke stap.

Als checksum gebruik ik de namen van de velden én de data zelf. Op die manier kan ik de checksum aan de json data toevoegen in plaats van dat ik daar een extra hidden-field voor nodig heb of een andere minder sjieke oplossing voor hoeft te maken.

Wanneer de data van de vorige stappen is geladen dan wordt de data die in de huidige stap door de gebruiker ingevoerd is verwerkt en toegevoegd aan de overige data. Daarbij zou dan ook nog validatie van de nieuwe data kunnen worden toegevoegd.

Ook daarom is de checksum op de data van de voorgaande stappen belangrijk omdat je dan zeker weet dat de data van de voorgaande stappen al gevalideerd is. Het kan natuurlijk helemaal geen kwaad om de data tijdens een laatste stap nóg een keer te valideren.

Door de checksum weet je dan feitelijk al zeker dat die validatie zal slagen. Je wil je gebruiker in een latere stap ook niet confronteren met een foutmelding dat data uit een voorgaande stap niet door de validatie heen komt en opnieuw moet worden ingegeven.

Wanneer de gebruiker het formulier submit in de laatste stap, dan kun je tot de daadwerkelijke actie overgaan die je met het formulier wenst. Het belangrijkste aan de werkwijze die ik beschrijf is dat je op dat moment alle gewenste data hebt en in één keer kan doorgeven aan het proces dat je dan wilt uitvoeren.

Een stap terugzetten is op deze manier ook eenvoudig mogelijk. Aan de hand van de waarde van de submit-knop die ingedrukt wordt kan zelfs al worden bepaald of dat er een stap voorwaarts of een stap terug wordt gezet. Daar zijn met wat javascript vast ook nog een stuk elegantere oplossingen voor te bedenken.