Doembladeren

Uitgelicht

Deze column verscheen eerder in de rubriek IP Lingo van het blad IP

In mijn pogingen om deze rubriek zo actueel mogelijk te laten zijn, introduceer ik deze maand een woord dat tot vandaag nog niet bestond. Ok, ik geef toe dat doembladeren een letterlijke vertaling is van het Engelse doomscrolling, maar ook dat woord staat nog in de kinderschoenen.

Iedereen kent het wel: je hebt een raar kuchje, je gaat zoeken op internet en een half uur later ben je ervan overtuigd dat je aan het begin staat van een pijnlijk en slepend ziekbed met fatale afloop. Doembladeren is het langdurig tot je nemen van slecht nieuws via sociale media, zodanig dat het een negatieve invloed heeft op je gemoedstoestand. Of, zoals ik ergens las, “obsessively reading social media posts about how utterly fucked we are”. Langdurig van bericht naar bericht surfen is natuurlijk niets nieuws en zolang het gaat over de laatste ontwikkelingen rond Wie is de Mol of het liefdeleven van Marco Borsato is er weinig aan de hand.  Maar wanneer we berichten met een negatieve inhoud tot ons nemen (waarbij ik ervan uitga dat u de amoureuze strapatsen van Marco Borsato niet als zodanig beoordeelt), treedt er een mechanisme in werking dat te vergelijken is met het  mean world syndrome. Dit is het fenomeen dat mensen door het veelvuldig kijken naar gewelddadige televisie-uitzendingen de wereld als gevaarlijker beoordelen dan hij in werkelijkheid is. Door langdurig berichten te lezen over de coronacrisis, het meest gegoogelde woord van 2020, krijgen de doembladeraars zoveel slecht nieuws te zien dat er in hun belevingswereld nauwelijks plaats meer is voor iets anders.

De oplossingen zijn even talrijk als eenvoudig: een timer op je smartphone zetten of een leuk boek lezen bijvoorbeeld. Maar de meest efficiënte oplossing is de app Mind Leak. Wanneer je te lang bezig bent op een sociaal medium, toont de app op het beeldscherm je eigen starende gezicht. Ik heb het voor u geprobeerd: dat nooit meer.

Eerder verschenen in IP2021-1

#BoekTok

Ik weet dat TikTok bestaat en ook wat je er zo ongeveer mee kunt doen, maar dat was het wel zo’n beetje, want niet alleen ik maar ook mijn kinderen zijn er eigenlijk te oud voor. Tot ik links en rechts hoorde over het succes van #BookTok en de Nederlandse versie #BoekTok. Via deze hashtags vind je op TikTok filmpjes van jongeren, en van Kluun, die elkaar boeken en schrijvers aanraden. Meestal gaat het daarbij om young adult-boeken, maar ik heb toch ook een meisje met roze haar voorbij zien komen dat Hersenschimmen van Bernlef aanprees.

In eerste instantie dacht ik dat het ging om het zoveelste geval van door de media opgeklopte gebakken internetlucht, maar navraag bij een paar boekenwinkels leerde me dat de boeken nauwelijks aan te slepen zijn wanneer ze via #BoekTok goed besproken zijn. We somberen, terecht, vaak over ontlezing, maar is het ooit gebeurd dat jongeren op zo’n grote schaal boeken kochten?

Verwacht bij #BoekTok overigens geen uitgebreide besprekingen. De filmpjes zijn maar kort en soms zie je alleen de kaft anderhalve seconde in beeld, maar het mooie van #BoekTok is dat het een platform voor en door jongeren is (al zijn de eerste leraren Nederlands, uitgeverijmedewerkers en Kluun dus, ook al gesignaleerd).

Deze column komt uit IP #7/2021

Fieldlabber

Fieldlabber. Spreek het woord hardop 5 keer achter elkaar uit en ga eens na op welke manier het zich in je hoofd nestelt. In mijn geval werd de ‘a’ gevoelsmatig een ‘e’. Dat heeft te maken met de betekenis van fieldlabber: iemand die meedoet aan een fieldlab-evenement. Bij een aantal van die evenementen namen de fieldlabbers flink wat drank tot zich. Associatief dacht ik aarbij aan fieldlebberen, een nog niet bestaand woord dat zeker een kans verdient. Fieldlabber bestaat pas een paar maanden en toch heeft het opmerkelijk genoeg al meerdere betekenissen. Een fieldlabber kan namelijk ook de organisator van een fieldlab zijn.

Voor fieldlab bestaat een goede Nederlandse vertaling, namelijk proeftuin. Daarop voortbordurend zou je een fieldlabber een proeftuinier kunnen noemen. Maar eigenlijk is een vertaling helemaal niet nodig, want ondanks de Engelse klank komt fieldlabber alleen voor in het Nederlands en vrijwel steeds in verband met corona-gerelateerde experimenten. Het past in een rijtje Engels klinkende uitdrukkingen die alleen in het Nederlands bestaan, zoals reality soap, non-food en touringcar.

Ook wanneer je op fieldlab zoekt, kom je vooral Nederlandse websites tegen. Dat komt door de typisch Nederlandse gewoonte om woorden aan elkaar te plakken. Op Google Trends is te zien dat in de rest van de wereld vrijwel iedereen field lab schrijft (zie afbeelding). De uithaal naar boven aan het einde van de grafiek is dan ook volledig te danken aan Nederlandse webpagina’s.

Ik zocht op de website van de rijksoverheid naar een goede omschrijving van fieldlab en vond dat er in ieder geval een duidelijk onderscheid is tussen fieldlabs en pilots voor testevenementen. Toen ik vervolgens keek wat de overheid beschouwt als een pilot voor een testevenement zag ik dat dat daar fieldlab-evenementen toe gerekend worden. De overheid is er dus nog niet helemaal over uit.

Het is hoe dan ook te hopen dat iedereen binnenkort gevaccineerd is en dat de lelijke fieldlab-samenstellingen (ook het werkwoord fieldlabben is al gesignaleerd)  net zo snel uit het Nederlands verdwijnen als ze gekomen zijn.

Eerder verschenen in IP #5/2021

AF

Een AF is een artificial friend oftewel een KV (kunstmatige vriend). Kunstmatige vrienden zijn natuurlijk niet nieuw. Zelf denk ik direct aan de twee tamagotchis die aan een vroeg en bitter einde kwamen nadat ze ergens in de jaren negentig gruwelijk waren verwaarloosd door mijn dochters. Later kwamen er de robots die eenzame en/of demente bejaarden gezelschap hielden. En zo ontstond er geleidelijk een breed scala aan apparaten die je met wat goede wil als kunstmatige vrienden kan beschouwen.

Maar de AF is van een andere orde. Hij, of in dit geval zij, ontsproot aan het brein van Nobelprijswinnaar Kazuo Ishiguro. De AF Klara is in het boek Klara and the Sun de ik-figuur. Ze is gemaakt om in een niet al te verre, dystopische toekomst een eenzame tiener gezelschap te houden. De AF kan empathie voelen en ongerust zijn, maar de emoties zijn niet gelijk aan die van de mens. En dus is de vraag hoe we ons tot de AF verhouden.

Als u betwijfelt of je überhaupt wel een relatie met iets kunstmatigs kunt hebben, moet u zich maar eens afvragen of u zich niet ooit eens tierend tot de stem van de autonavigatie heeft gericht wanneer u midden in een weiland te horen kreeg dat uw bestemming was bereikt. Op dat moment wordt Truus (want om ondoorgrondelijke redenen wordt de stem opmerkelijk vaak zo genoemd) wel degelijk menselijke kwaliteiten, of beter zwakheden, toegedicht. Truus noch Klara worden overigens warm of koud van zo’n onvriendelijke houding en dat maakt het denken over onze relaties met AF’s zo interessant. Asociaal gedrag ten opzichte van een AF leidt niet tot onaangename consequenties in de vorm van vijandige reacties en dus wordt ons gedrag volledig bepaald door onze innerlijke beschaving. Een beangstigende gedachte.

Eerder verschenen in InformatieProfessional 04/2021

Concurrent computing

Schrik niet van de titel van deze blog! Ik leg in deze blog uit wat verstaan wordt onder concurrent computing: welk problemen ermee opgelost worden? Welke nieuwe problemen erdoor ontstaan (en hoe die op te lossen zijn)? Maar waarom het toch een belangrijk onderwerp is wat veel gebruikt wordt.

Wat is concurrent computing?

In het Nederlands wordt de term ‘gedistribueerd programmeren’ gebruikt. Ik houd het in deze blog bij Concurrent computing omdat ik vind dat het de lading beter dekt. Concurrent computing is het opsplitsen van een grote taak in meerdere kleinere taken die (relatief) onafhankelijk uitgevoerd kunnen worden. Deze kleinere taken kunnen tegelijkertijd (concurrent) worden uitgevoerd. Wanneer de kleinere taken afgehandeld zijn, worden ze samengevoegd tot een enkel resultaat.

Aangezien dit vrij abstract is hierbij een voorbeeld: het bakken van een ei.
Dit bevat een aantal taken:

  • pak eieren
  • pak koekenpan
  • pak boter
  • pak zout en peper
  • zet koekenpan op gasfornuis
  • zet gasfornuis aan
  • doe boter in de koekenpan
  • wacht tot boter heet genoeg is
  • breek eieren en doe ze in de koekenpan
  • bak de eieren
  • wacht tot eieren gebakken zijn
  • voeg zout en peper toe
  • doe gasfornuis uit
  • haal koekenpan van gasfornuis
  • schep gebakken eieren uit pan

Zoals je ziet zijn er best veel taken te identificeren bij het “bakken van een ei”. Sommige taken zijn helemaal onafhankelijk van de andere taken. Maar andere taken moeten “wachten” tot een bepaalde taak is afgelopen. Bijvoorbeeld “zet koekenpan op gasfornuis” kan pas starten als “pak koekenpan” is afgehandeld. Ook zijn er taken waarin de volgorde waarin ze onderling afgehandeld worden niet zo van belang is, zoals “pak eieren”, “pak koekenpan”, “pak boter” en “pan zout en peper”. Het maakt niet veel uit of je de eieren, boter, zout en peper of koekenpan eerst pakt. Het maakt ook niet veel uit of je eerst het gasfornuis aan doet, daarna de boter in de pan en dan de pan op het gasforunuis zet, of in een andere volgorde of allemaal tegelijkertijd.

Laten we kijken of we de taken kunnen groeperen en de verbanden kunnen aanbrengen:

Schematische weergave van het bakken van eieren

Welke problemen lost het op?

Als één persoon het ei gaat bakken, dan zal het niet per se sneller of beter gaan. Maar als je meerdere personen hebt die elk een of meer taken kunnen uitvoeren, dan kan het wel efficienter. Als het het niet gaat om eieren bakken voor 1 persoon, maar eieren bakken voor 100 personen, dan wordt die efficiëntie nog belangrijker.

Een computer kan ook meer dan 1 taak tegelijkertijd uitvoeren. Eigenlijk doet een computer dat de hele tijd, maar zijn die taken meestal aparte programma’s. Bijvoorbeeld je hebt nu een web browser open en wellicht een Word document. Voor beide is de computer taken aan het uitvoeren.

Als een computerprogramma wordt uitgevoerd, dan kan je dit zien als een reeks van taken die gedaan moeten worden. Sommige taken duren relatief lang. Zo is het schrijven of lezen van data van een schijf of van het internet, een taak die qua doorlooptijd ergens tussen “meteen klaar” en “dit duurt echt veel te lang” ligt. Dit soort taken wil je eigenlijk laten uitvoeren zonder dat het de rest van het computerprogramma blokkeert. Oftewel het computerprogramma zou niet moeten hoeven wachten totdat de taak afgerond is. Het computerprogramma kan dan verder met andere taken, terwijl de langdurende taak loopt. En als die langdurende taak dan klaar is, wil je verder met de volgende gerelateerde taak.

Een voorbeeld waar je dit kan zien (maar wat je dus eigenlijk niet merkt), is als je aan het tekstverwerken bent. De tekstverwerker zal om de zoveel tijd het gewijzigde bestand automatisch bewaren, zodat mocht er iets misgaan je niet alles overnieuw hoeft te typen. Dit bewaren duurt afhankelijk van de grootte van het bestand zeer kort tot wel enkele seconden, en dit gebeurt terwijl je zit te typen. Het zou dan heel irritant zijn als de letters die je typt niet meer op het scherm verschijnen, omdat de tekstverwerker het bestand net aan het bewaren is. Omdat het bewaren en het tonen van de letters die je typt twee aparte taken zijn die gelijktijdig kunnen gebeuren, merk je hier niks van.

Een ander voorbeeld is een website. Je kan je voorstellen dat meerdere mensen tegelijktijd een pagina van die website willen bekijken. De server waar de website “op staat”, krijgt dan tegelijkertijd verschillende vragen. Zo’n vraag duurt even om af te handelen, voordat het antwoord (de pagina) teruggegeven kan worden. Er draaien dan ook meerdere taken op die server die allemaal zo’n vraag kunnen beantwoorden en deze taken kunnen dat “gelijktijdig” afhandelen.

Je zou dit kunnen vergelijken met een garderobe in de schouwburg; je geeft je jas af, de medewerker hangt het op en geeft een ontvangstbewijs terug. Als er maar 1 medewerker zou zijn en meerdere bezoekers, dan zouden veel mensen lang moeten wachten. Maar met meerdere medewerkers neemt de wachttijd af. Elke medewerker doet dezelfde taak, omdat er veel vraag is naar die taak.

Even terug naar ons voorbeeld. In geval van het eieren-bak-voorbeeld zouden de taken verdeeld kunnen worden als er meer dan een persoon zou meewerken:

Schematische weergave van het bakken van eieren verdeelt over 3 personen

Zoals je ziet zijn er in dit voorbeeld 3 personen die de taken uitvoeren. Sommige taken kunnen prima tegelijkertijd uitgevoerd worden, zoals het pakken van eieren, koekenpan, boter en zout en peper. Aangezien er 3 personen zijn maar dat stukje 4 taken heeft, zal persoon C of eerst de eieren pakken of eerst de zout en peper. Als er nog een 4e persoon was geweest, kon ook dat tegelijk. Ook zie je dat personen soms even moeten wachten totdat een taak is afgerond (die soms door een andere persoon wordt uitgevoerd), voordat ze verder kunnen met hun volgende taak.

Hoe werkt dat dan?

Een computer kan meerdere taken tegelijkertijd uitvoeren, bijvoorbeeld omdat de computer meerdere processoren heeft en/of de processor meerdere “cores” heeft. Dit heet parallel computing. Maar meerdere processoren of “cores” is niet per se een voorwaarde om concurrent computing te ondersteunen. Een computer doet sowieso meerdere taken “tegelijkertijd”, vaak meer taken dan het aantal processoren of cores. Dit werkt zo: de tijd dat 1 taak op de processor mag draaien, is beperkt, vaak tot niet langer dan 10 tot 100 millisecondes. Als de taak binnen die tijd niet is afgerond, dan wordt de taak gepauzeerd en mag een andere taak op de processor. Dit wordt ook wel time slicing genoemd en wordt gebruikt ongeacht het aantal processoren.

In het plaatje hiernaast zie je hoe het werkt. Twee taken worden “tegelijkertijd” afgehandeld. Tegelijkertijd staat tussen aanhalingstekens, omdat steeds eerst de ene daarna de andere wordt gedaan.

Bij 2 processoren kan het er zo uitzien.

Merk op dat de taken niet per definitie aan 1 processor gebonden zijn en dat er nog steeds gebruik gemaakt wordt van time slicing.

Zoals je ziet is de totale tijd die nodig is om taak A en taak B af te ronden kleiner als er 2 processoren gebruikt worden, namelijk 3 time slices bij 2 processoren en 5 time slices bij gebruik van 1 processor.

Welke nieuwe problemen ontstaan?

Concurrent computing kan ervoor zorgen dat taken efficienter uitgevoerd worden en dat het voor de gebruiker lijkt of de computer niet door een bepaalde taak geblokkeerd wordt.

Als taken tegelijkertijd worden uitgevoerd is het wel belangrijk dat iets ervoor zorgt dat de verschillende taken even veel tijd krijgen, dat ze gestart en gepauzeerd worden op het juiste moment en in de juiste volgorde, dat de taken soms onderling moeten kunnen communiceren en dat als ze dezelfde data gebruiken, dat dat geen problemen oplevert. Dit samen wordt concurrency control genoemd.

Een veel gebruikt voorbeeld om te illustreren welke problemen zich kunnen voordoen bij concurrent computing is die van het opnemen van een bankrekening. Je kan je voorstellen dat dit de volgende stappen heeft:

1) controleer of er genoeg op de rekening staat om x bedrag op te nemen

2a) zo ja, haal x bedrag van de rekening

2b) zo nee, laat weten dat het niet kan.

Als op exact hetzelfde moment 2 keer een bedrag van dezelfde rekening wordt gehaald, en er time slicing wordt gebruikt, kan het zijn dat het volgende gebeurt:

Bovenstaande wordt een race condition genoemd.

Om een race condition op te lossen, kan gebruik worden gemaakt van een blokkade; in het voorbeeld hierboven zorg je ervoor dat er maar 1 taak tegelijk iets met de bankrekening kan doen, andere taken moeten even wachten. Dit wordt ook wel een lock genoemd.

Maar hierdoor kan weer een deadlock ontstaan; een vergelijkbaar voorbeeld als hierboven zou zijn geld overschrijven van rekening A naar rekening B. Als twee taken dat willen doen en de eerste zet een lock op rekening A en wil daarna een lock zetten op rekening B, maar de tweede is net iets eerder en heeft al een lock op rekening B gezet en wil een lock op rekening A, dan zijn beide taken op elkaar aan het wachten.

Een ander probleem kan hier weer uit ontstaan: resource starvation. Dit is als een taak iets (een resource) nodig heeft om te beginnen, maar deze resource nooit beschikbaar komt (bijvoorbeeld omdat een andere taak de resource steeds gelockt heeft).

Een voorbeeld van resource starvation is het Filosofenprobleem.

Bovenstaande problemen zijn allemaal op te lossen, maar de programmeur moet zich hiervan wel bewust zijn. Sommige programmeertalen hebben hulpmiddelen zodat bovenstaande problemen zoveel mogelijk voorkomen worden.

Hoe werkt concurrent computing in programmeertalen?

De meeste programmeertalen bieden (op verschillende niveaus) ondersteuning voor concurrent computing.  Bij sommige programmeertalen wordt concurrent computing op een vrij laag niveau ondersteund, wat betekent dat de programmeur veel zelf moet doen. Gelukkig zijn er ook programmeertalen en frameworks die concurrent computing ondersteunen op een hoger niveau, waardoor veel van bovenstaande problemen al opgelost zijn of simpel zijn te voorkomen.

Om het niet onnodig ingewikkeld te maken (en deze blog ook niet te lang), focus ik alleen op een bepaalde manier (op een hoger niveau) van het gebruik van concurrent computing die je in veel talen (onder verschillende namen) terug ziet komen:

Beloftes

Als je aan het programmeren bent, werk je veel met waardes. Bijvoorbeeld een getal, de naam van het bestand wat je op dat moment aan het inlezen bent of de inhoud van datzelfde bestand. Sommige waardes kosten relatief veel tijd om te achterhalen, zoals bijvoorbeeld de inhoud van een bestand, omdat het bestand ingelezen moet worden vanaf schijf of het internet. Het zou dus handig zijn als je dat tegelijkertijd met andere taken kan uitvoeren, zodat het programma er niet op hoeft te wachten. Je doet eigenlijk een belofte dat de waarde achterhaald is op het moment dat je er echt iets mee wilt doen, en in de tussentijd kan je in je programma net doen of je de waarde al hebt.

Een belofte wordt in programmeertalen Promise, Future (een toekomstige waarde), delay (uitstel) of deferred (uitgesteld) genoemd, maar aangezien meestal Promise of Future gebruikt wordt, houd ik het bij “belofte”. Overigens is er een verschil tussen promises en futures die per programmeertaal anders uitgelegd wordt.

Een belofte (Promise / Future) kan dus gebruikt worden alsof het de waarde is die het belooft te zijn. De belofte kan op een gegeven moment vervuld worden (Promise fulfilled of future resolved). Ook kan het zijn dat de belofte gebroken wordt (promise rejected). Als een belofte vervuld wordt, kan het programma iets met de beloofde waarde doen. Maar wanneer een belofte gebroken wordt, kan het programma daar op een andere manier op reageren. Als je bijvoorbeeld in je programma een tekst wil ophalen van een website en een andere tekst van een heel andere website, dan kan je dat zien als twee beloftes voor toekomstige waardes. Deze beloftes kunnen tegelijkertijd vervuld worden, of als het internet “stuk” is, dan worden de beloftes gebroken. Als je een belofte net gedaan hebt, dan is die nog niet vervuld maar ook nog niet gebroken; de belofte staat nog uit (promise pending).

Wat heb je hier nu aan hoor ik je denken? Als we teruggaan naar het eieren-bak-voorbeeld dan zou je de taak “pak eieren” als een belofte kunnen zien dat je op een zeker moment in de toekomst eieren hebt. Als je die belofte kan vervullen, dan kan je doorgaan naar de volgende taak (“breek eieren en doe ze in de koekenpan”), tenzij je de eieren laat vallen, want dan breek je de belofte (en de eieren).

Ons voorbeeld zou er in pseudocode als volgt uit kunnen zien:

eieren = pakEieren()		// de belofte om eieren te pakken
koekenpan = pakKoekenpan()	// de belofte om een koekenpan te pakken
boter = pakBoter()		// de belofte om boter te pakken
zoutEnPeper = pakZoutEnPeper()	// de belofte om zout en peper te pakken
gasfornuis = zetGasFornuisAan()	// de belofte om gasfornuis aan te zetten


BeloftesSamen( [ koekenpan, boter ] )	// als de beloftes beide
 .vervuld( koekenpanMetBoter => { 	// vervult zijn
   BeloftesSamen( [			// doe nieuwe beloftes:
     zetOpGasFornuis(gasfornuis, koekenpan)
     doeBoterInKoekenpan(koekenpan, boter)
     gasfornuis
   ] )
 } )
 .vervuld( heteKoekenpan => {		// als bovenstaande 3 beloftes 
					// vervuld zijn, doe een nieuwe
					// belofte:
   wachtTotBoterHeetGenoegIs(koekenpanMetBoter)
 } )
 .vervuld( koekenpanMetEieren => {	// als bovenstaande belofte 
					// vervuld is, doe nieuwe belofte
   breekEierenInKoekenpan(eieren, heteKoekenpan)
 } )
 .vervuld( bakkendeEieren => {
   BeloftesSamen( [
     bakEieren(koekenpanMetEieren)
     naEnigeTijd {			// terwijl de eieren aan het 
					// bakken zijn, voeg zout en 
					// peper toe na enige tijd
       voegZoetEnPeperToe (koekenpanMetEieren, zoutEnPeper);
     }
   ] )
 } )
 .vervuld( gebakkenEieren => {		// als bovenstaande twee beloftes
					// vervuld zijn:
    wachtTotEierenGebakkenZijn(bakkendeEieren)
 } )
 .vervuld( eierenKlaar => {		// als de bovenstaande belofte 
					// vervuld is,
    BeloftesSamen( [			// doe 3 nieuwe beloftes:
      schepEierenUitPan(gebakkenEieren)
      haalKoekenpanVanFornuis()
      doeGasFornuisUit()
    ] )
  } )
  .vervuld( {		// als bovenstaande beloftes vervuld zijn, dan
    eetEieren()		// zijn de eieren klaar om opgegeten te worden
  } )
  .gebroken( {		// als een van bovenstaande beloftes gebroken 
			// wordt, doe dan dit:
    geefRedenWaaromErGeenEierenZijn()
  } )	

Zoals je ziet kunnen beloftes geschakeld worden in een rij van beloftes (promise chaining), waarbij als een belofte vervuld is een nieuwe belofte gemaakt kan worden. Ook kunnen beloftes samen een nieuwe belofte vormen. Deze nieuwe belofte zal alleen dan vervuld zijn, als alle beloftes waar die uit gestaat, ook vervuld zijn. De volgorde waarin deze beloftes vervuld worden, is dan niet van belang. Ook kunnen ze tegelijkertijd afgehandeld worden.

Ik hoop dat ik de beloftes die ik aan het begin van deze blog deed, heb kunnen vervullen en dat duidelijk is wat concurrent computing is.

Fleet

Onderstaande column verscheen eerder in de rubriek IP Lingo van het blad IP.

Deze rubriek gaat over nieuwe woorden en begrippen in de informatiewereld. Tussen het moment van schrijven en de publicatiedatum zitten een paar weken. Dat is in onze snelle wereld een hele tijd.  Een begrip kan in die periode oud nieuws geworden zijn, of een algemeen ingeburgerd begrip. Of dat ook opgaat voor fleet is voor mij een vraag en voor u als lezer een weet. Toen ik vanochtend (half november) een rondje maakte langs een aantal bekenden kon niemand me in ieder geval vertellen wat fleets zijn. Ze bestaan op het moment dat ik dit schrijf dan ook nog niet in Nederland. Het is aan u om te zien hoe snel een ontwikkeling kan gaan (of niet).

Natuurlijk bestaat het woord fleet al wel. Er zijn een paar plaatsen in Engeland met de naam Fleet. Het betekent vloot in het Engels en is tevens de naam van een Belgische keten van autodealers, een Australisch motorfietsmerk én een firma die handelt in klysma’s. De Urban Dictionary spreekt bij fleet dan ook van ‘a term to describe when someone is cleaning out their ass/vagina’.

Maar de fleet die ik bedoel is de nieuwste  functie van Twitter. Het gaat om een bericht dat na 24 uur automatisch verdwijnt. Hiermee sluit Twitter aan bij een richting die bedrijven als Snapchat, Instagram en Facebook al veel eerder insloegen. “Omdat ze na een dag verdwijnen, helpen fleets de mensen om zich niet geremd te voelen om hun persoonlijke en terloopse gedachten, meningen en gevoelens te delen”, blogden Joshua Harris en Sam Haveson, respectievelijk design director en product manager bij Twitter.  Mijn optimistische ik is blij omdat een hoop vuilspuiterij daarmee automatisch verdwijnt, maar aan de andere kant kan het betekenen dat reaguurders en andere gekkies zich bevrijd voelen van hun laatste remmingen en helemaal los gaan. Wie zal het zeggen? U misschien/niet/waarschijnlijk/uiteraard?

Eerder verschenen in IP #9/2020

Islandora Online: Islandora as an Institutional Repository

Dit jaar wordt er vanwege de corona crisis ook door Islandora een Online event gehouden. Of eigenlijk zijn het 4 events van elk 5 uur.
Hieronder het verslag van het vierde en laatste event, gehouden op 11 augustus. Eerdere verslagen zijn hier te vinden: Islandora 8, Islandora & Metadata, en Migration.

Islandora as an IR

Eerst wordt er een overzicht gegeven van de huidige stand van zaken. Er is een aantal modules in Islandora 7 die het mogelijk maken om Islandora als een IR te gebruiken. PDF solution pack, Usage Stats, Entities solution pack, Scholar, IP Embargo zijn voorbeelden. Het LASIR project heeft ook veel gedaan voor IR in Islandora 7. Drupal 8 biedt zelf al een groot deel van de functionaliteit die deze modules verschaffen. Een ander deel zit nu al in Islandora 8. Wat vooral nog ontbreekt, zijn embargo’s en importeren van DOIs, PubMed, en dergelijke. Wat er al wel is, is LDAP for institutional login, Orcid login, OAI-PMH, Simple XML Sitemap, MetaTag (for Google Scholar), Entity Browser, Linked Data Lookup Field, PDF.js (embedded PDF viewer)* en meer.

Momenteel wordt er al hard gewerkt aan het implementeren van Embargoes. Hierbij wordt gewerkt met restricties op zowel IP als tijdsgebonden. Dit kan op “object” (node) niveau en op “bestanden” (media) niveau. Permissions by term maakt het nu al mogelijk in Drupal 8 om restricties via metadata terms te regelen. In Persistent Identifiers wordt Handles en DataCite DOIs geïmplementeerd. CrossRef DOIs wordt aan gewerkt. Er zijn plannen voor andere identifiers via een generiek framework. Over “dynamic citaties display” wordt momenteel veel nagedacht, maar er is nog geen implementatie van.

Open Access Kent State (OAKS) heeft een IR in de lucht in Islandora 8. OAKS bevat 3500 artikelen, 12 tijdschriften en 1600 conference proceedings. Discovery Garden heeft een IR oplossing gemaakt voor Islandora 8. Hier zijn speciale content types en open standaard taxonomieën voor ontwikkeld. Ook bieden ze een invoer-workflow, access control, embargo’s, rights and license management, versioning, SSO, OAI-PMH en een speciale IR presentatie laag.

Islandora as an Data Repository

UPEI (University of Prince Edward Island, de geboorteplek van Islandora) deed een project van 18 maanden om Islandora 8 als Data Repository in te richten. Dit is goed gedocumenteerd op https://islandora-rdm.researchspaces.ca/. Een onderzoeker kan hiermee de data van een onderzoek plannen, bewaren, mee (samen)werken, publiceren onafhankelijk van formaat of grootte van de dataset. De dataset krijgt een DOI, is doorzoekbaar, krijgt metadata, verwijst via ORCID en FundRef en is veilig.

Standaard node-media-files relatie

Het project bevat zowel code als veel documentatie en manieren waarop een Data Repository ingericht kan worden. Een van de grote verschillen met Islandora 8 (en standaard Drupal 8) is hoe bestanden gerelateerd worden. Normaal gesproken wordt elk bestand in Drupal 8 vertegenwoordigd door een Media type. Een media type bevat velden (voor metadata), heeft versie beheer en kan bijna alles wat een Content node ook kan. Een media type heeft ook een source type. Een source type bepaalt of het om een plaatje, video, geluid of iets anders gaat. Content node is het eigenlijke item in Drupal. Dit content node kan een of meerdere media types bevatten.

Het project heeft de relatie tussen nodes, media en bestanden aangepast zodat een media type meerdere bestanden kan bevatten. Dit maakt het beheer van een dataset eenvoudiger omdat er eigenlijk een laag minder is. In de normale situatie bevat een dataset bijvoorbeeld 3 delen. Elk deel bevat een media entity voor het oorspronkelijke bestand en 2 media entities voor elke afgeleiden. Er zijn dus 9 media entities nodig.

In de nieuwe situatie hebben ze aan het media type een aantal velden toegevoegd voor deze afgeleiden, waardoor een media entity het oorspronkelijke bestand en de afgeleiden bestanden kan bevatten.

Complexe workflows

Drupal 8 bevat support voor complexe workflows om publicaties in te voeren en te wijzigen. Formulieren kunnen op diverse manieren gemaakt worden. Hier zijn veel mogelijkheden voor. Maar een ingevoerde publicatie moet nog door diverse mensen gecontroleerd kunnen worden. Die publicatie moet op dat moment nog niet zichtbaar zijn voor het publiek. De publicatie moet echter wel zichtbaar en bewerkbaar zijn voor een selecte groep mensen. Een publicatie moet eigenlijk een bepaalde status hebben waarbij een bepaalde groep mensen toegang heeft. Tussen deze statussen moet een overgang zitten van de ene status naar een andere status. Content moderation biedt deze functionaliteit. Ook kan de Rules module reageren op status overgangen. Bijvoorbeeld kan een mailtje gestuurd worden als de status wordt aangepast van een publicatie. Alle bouwblokken voor complexe workflows zijn dus in principe beschikbaar in Drupal 8. Alleen moeten deze bouwblokken nog wel “gestapeld” worden en geconfigureerd.

Dit was het laatste verslag van Islandora Online. Natuurlijk heb ik niet alle onderwerpen die voorbij kwamen behandeld, dus hierbij ook een link naar de event pagina met daarop de dagprogramma’s en een link naar de video’s die gemaakt zijn van de presentaties.

Islandora Online: Islandora and Migration

Dit jaar wordt er vanwege de corona crisis ook door Islandora een Online event gehouden, of eigenlijk zijn het 4 events van elk 5 uur.
Hieronder het verslag van het derde event, gehouden op 4 augustus. Het verslag van het eerste event is hier te vinden. Het verslag van het tweede event is hier te vinden.

Helaas kon ik niet “live” aanwezig zijn bij dit event vanwege vakantie, maar gelukkig is het hele event opgenomen. Hierbij een verslag gebaseerd op het opgenomen event.

Uitdagingen

Het onderwerp van dit event is het migreren van content naar Islandora 8 vanaf Islandora 7 of een ander systeem. Migreren levert altijd vragen en problemen op, tenzij de data die gemigreerd wordt al perfect is. En dat is eigenlijk nooit het geval. Migreren levert altijd uitdagingen op: Omdat de metadata niet perfect is. Omdat lastige keuzes gemaakt moeten worden. Omdat bepaalde delen van de data niet passen in het nieuwe systeem. Omdat het nieuwe systeem (een nieuw soort) data verwacht of kan bieden die nog niet in het oude systeem zat. Omdat de metadata op een ander precisie niveau ingevoerd moet worden.

Soms moeten er lastige keuzes gemaakt worden tijdens de migratie, die er later voor zorgen dat er meer mogelijk wordt. Zo heeft in de metadata een persoon vaak een rol. Ook kan een persoon identifiers hebben en/of een of meerdere namen. De manier waarop deze data gemigreerd wordt, bepaalt voor een groot deel wat er daarna in Drupal (mee) gedaan kan worden.

Drupal Migrate

Drupal Migrate is de manier om veel migraties te doen. Natuurlijk zijn ook andere manieren mogelijk, maar bij alle zijn twee technieken te onderscheiden: ETL en ELT. ETL staat voor Extract data, Transform data en Load data. Dus eigenlijk haal je de data eerst uit het oorspronkelijke systeem, daarna vorm je de data zo dat het ingelezen kan worden in het nieuwe systeem en dan lees je het in. De letters van ELT staan ook voor Extract, Transform en Load. Alleen wordt de data nu eerst ingelezen waarna het wordt omgevormd.

Drupal Migrate gebruikt ETL, waarbij deze fases duidelijk te onderkennen zijn binnen het proces. Een migratie wordt uitgedrukt als een YAML document. Drupal Migrate maakt ook gebruik van de Drupal Plugin API waardoor het mogelijk is om eigen acties tijdens de migratie te definiëren. Natuurlijk bestaan er al veel van dit soort plugins in de Drupal community en worden ze ook gebruikt binnen Islandora 8. Zo is er een plugin om data te “extracten” uit Islandora 7, maar ook data van bestanden of data via een web API kan gebruikt worden. Maar ook zelf een plugin ontwikkelen is relatief simpel.

Drupal Migrate ondersteunt ook high water marks, wat betekent dat bij een migratie die niet helemaal goed gaat alleen het stuk wat misgaat opnieuw gedaan hoeft te worden. Mocht het helemaal misgaan, dan kan ook een rollback (terug naar een punt waar het nog wel goed was) gedaan worden.

Hulpmiddelen en tutorials

migrate_islandora_csv is een online begeleiding (tutorial) over hoe men Drupal Migrate kan gebruiken. Als bron gebruikt men een CSV bestand, maar er wordt uitgebreid stilgestaan bij het opschonen en vormen van de data (de T van ETL) en hoe men relaties tussen data aanlegt tijdens de migratie. Bovendien wordt dit alles stap-voor-stap uitgelegd.

migrate_7x_claw is een module bedoeld om te migreren vanaf Islandora 7 naar Islandora 8. Alle datastreams worden hiermee gemigreerd, inclusief “audit trail“. De metadata wordt gemigreerd vanuit Solr of een willekeurige XML datastream. Maar migrate_7x_claw is vooral een startpunt voor de migratie en nog geen volledige oplossing. Het is iets wat nog verder ingevuld en ontwikkeld moet worden voor de specifieke situatie. Om migrate_7x_claw goed te kunnen gebruiken en begrijpen, is migrate_islandora_csv een goed startpunt. Ook is het belangrijk om de Drupal Migrate API goed te begrijpen, maar ook Drupal config synchronization en Drupal features.

Andere migratie methodes

Migratie kan natuurlijk ook op een andere manier. Islandora 7 content wordt opgeslagen in Fedora 3.x. Islandora 8 content wordt (deels) opgeslagen in Fedora 5. Fedora 5 en 6 verschillen niet veel van elkaar, in elk geval veel minder dan Fedora 3 verschilt van Fedora 5. Islandora 8 of 9 gaat op een gegeven moment ook draaien op Fedora 6. Vanuit de Fedora community is er een project om de overgang van Fedora 3 naar Fedora 6 wat betreft migratie zo simpel mogelijk te houden. Ze zijn hier ook druk mee bezig dus het is interessant om te kijken of dit ook een manier is om van Islandora 7 naar Islandora 8 over te gaan.

Zowel Islandora 7 als Fedora 3 hebben een REST API. Ook Islandora 8 bevat een REST API. Dus in principe is het mogelijk om data uit het oude systeem te halen via de REST API. Daarna deze data omzetten in een ander formaat met welke methode/programmeertaal dan ook. Vervolgens de data inlezen via de Islandora 8 REST API. Voordeel is dat je volledige controle hebt over de data en het proces, maar dat is ook meteen het nadeel. Dit betekent namelijk dat je alles zelf moet doen.

Islandora Workbench is een ander hulpmiddel om te gebruiken bij migraties. Het gebruikt de REST API en gebruikt als bron een CSV bestand. Dit bestand moet al wel het juiste formaat hebben. De export en transform moet dus eigenlijk buiten Workbench om gedaan worden. Hierdoor is de configuratie en gebruik van Workbench vrij simpel, maar het werk ervoor kan complex(er) zijn. Workbench heeft allerlei manieren om de data voor ingesten te checken, zodat bij ingest er geen verrassingen zijn.

Migratie naar Islandora 8 kan dus op veel manieren, maar zal altijd (in meer of mindere mate) werk en hoofdbrekers opleveren. Al met al een erg interessant event, waarbij ik veel geleerd heb. Migratie naar Islandora 8 is veel verder dan ik gedacht had. Het verslag van het vierde en laatste event is hier te vinden.

Islandora Online: Islandora & Metadata

Dit jaar wordt vanwege de corona crisis ook door Islandora een Online event gehouden. Eigenlijk zijn het 4 events van elk 5 uur. Hieronder het verslag van het tweede event, gehouden op 28 juli. Het verslag van het eerste event is hier te vinden.

Metadata anders

Het tweede event had als onderwerp metadata. Islandora 8 behandelt metadata anders dan Islandora 7. In Islandora 7 wordt de metadata in een XML bestand ingeladen. MODS, Dublin Core, METS en MADS (voor personen) zijn opties, waarbij meestal MODS gekozen wordt. Islandora 7 genereert dan Dublin Core metadata uit de MODS omdat Dublin Core in Fedora verplicht is. Islandora 8 slaat de metadata op in Drupal fields die aan een “Repository item” hangen. Deze velden kunnen bepaalde beperkingen hebben, zoals lengte of inhoud. Zo kan je instellen dat bijvoorbeeld een datum veld ook echt alleen datums kan bevatten.

Beperkter met meer mogelijkheden

Islandora 8 levert standaard al veel metadata velden mee. Er is een mapping van MODS naar deze velden. Maar MODS (en andere metadata schema’s) bieden veel meer mogelijkheden om de metadata precies te typeren/classificeren. Er werd dus gediscussieerd over deze mapping en of het gebruik van velden niet te beperkend is. Hier werd geen concensus over bereikt.

Nu is het wel zo dat hoewel wij in Islandora 7 MODS gebruiken met een groot aantal velden, we lang niet alle velden van deze MODS ook echt afbeelden of op andere manieren gebruiken. Deel van de discussie was ook of Islandora nu echt de plek is om al je metadata te managen. Of zijn er systemen die daar beter geschikt voor zijn. Ik denk dat het laatste het geval is.

Taxonomie en Linked Data

Drupal 8 maakt voor de velden (indien gewenst) wel gebruik van een taxonomie. Deze kan zowel open (gebruikers kunnen eigen termen toevoegen) als gesloten (gebruiker kan alleen kiezen uit een vastgestelde lijst) zijn.
Er was ook een praatje over hoe je een autocomplete veld maakt die via Linked Data de data ophaalt. Hierbij werd zowel de tekst als een URI opgeslagen, zodat de relatie gehouden blijft.
De metadata bij een Repository item wordt in Fedora als Linked Data opgeslagen. Wanneer de metadata wijzigt van een item, dan wordt deze geserialiseerd in RDF en vanuit Drupal naar Fedora gestuurd, zodat de metadata ook duurzaam bewaard blijft.

Gebruik en tools

Er werd natuurlijk ook gesproken over het gebruik van metadata; welke velden missen in welke situaties en hoe wordt metadata opgeruimd in Islandora 7 zodat de migratie naar Islandora 8 beter en soepeler verloopt. Dat de metadata in Islandora 7 opgeruimd moet worden voordat aan de migratie naar Islandora 8 begonnen wordt, staat als een paal boven water.
Islandora Workbench is een tool om metadata (maar ook objecten) te kunnen wijzigen of inladen. Er zijn verschillende andere manieren om dit te doen voor zowel Islandora 7 als 8. Maar het is goed te zien dat verschillende tools worden ontwikkeld want dan is er iets te kiezen.

De dagen zijn wel lang als je een online event “bezoekt” wat in Canada gehost wordt. Ze hielden wel een beetje rekening met andere landen door het begin uur steeds te verschuiven, maar dit event was pas om 10 uur ’s avonds afgelopen. Hier is het verslag van het derde event te lezen.

Islandora Online: Islandora 8

Dit jaar wordt vanwege de corona crisis ook door Islandora een Online event gehouden. Eigenlijk zijn het 4 events van elk 5 uur. Hieronder een verslag van het eerste event, gehouden op 21 juli en alleen online (dus geen mooie plaatjes van exotische oorden).
De events hebben allemaal een soortgelijke opbouw: steeds ongeveer 1 uur praatjes en daarna korte pauze, met in het midden een langere pauze van een uur waarvan een half uur “social” is: je kan praten met de anderen (business or pleasure) of een spelletje spelen (vooral kruiswoordraadsels in het Engels zijn een uitdaging).

Verschil tussen Islandora 7 en Islandora 8

Het eerste event had als onderwerp Islandora 8. Islandora 8 verschilt van Islandora 7 nog meer dan Drupal 7 verschilt van Drupal 8. Maar dat is zeker niet slecht. Waar Islandora 7 Drupal 7 gebruikt om Islandora content te tonen, is in Islandora 8 deze content eigenlijk gewoon al Drupal 8 content. Dit houdt in dat Islandora 8 veel dichter bij Drupal 8 blijft en daardoor allemaal technieken maar vooral ook modules van Drupal 8 (een soort plug-ins voor extra functionaliteit) zonder enige aanpassing meteen kan gebruiken. Dit maakt Islandora 8 flexibeler en makkelijker uitbreidbaar.

Taken en microservices

Taken worden ook veel beter gescheiden van andere zaken: microservices voeren precies 1 bepaalde taak uit, los van de rest van het systeem. Bijvoorbeeld het aanmaken van afgeleiden of “optische tekenherkenning” (OCR) wordt geheel los van Drupal uitgevoerd, eventueel op hele andere servers. Een bepaalde actie start de microservice vanuit code door een en met een bepaalde context. De microservice wordt echter niet meteen gestart. De vraag en context worden in een wachtrij gezet totdat de microservice vrij is om de vraag te beantwoorden. Als de microservice klaar is, komt het antwoord (bijvoorbeeld een afgeleide of een OCR bestand) terug naar Drupal.

Digitale preservatie en opslaan

De taak van het opslaan van de data wordt uitbesteed aan Flysystem. Flysystem zorgt ervoor dat de plek waar de data opgeslagen wordt en de manier waarop opgeslagen wordt abstract is voor Drupal. Flysystem koppelt Fedora aan Drupal, waardoor de belangrijke data in een Digital Asset Management system wordt opgeslagen. Aangezien dit allemaal in te stellen is, kan gekozen worden wat nu eigenlijk belangrijke data is die dus opgeslagen wordt in Fedora, zodat Fedora de digitale preservatie kan regelen. Maar als de data naar een andere plek moet, kan dit ook. Opties hierbij zijn ondere andere local disk, (s)ftp, dropbox, AWS S3 of andere Cloud storage (via OpenStack swift).

Integraties en community

Islandora 8 heeft inmiddels een grote groep mensen die eraan werken en ook integraties met andere systemen maken. Zo is er al een integratie met ArchivesSpace. Voor statistieken wordt Matomo gebruikt, maar dit staat nog in de kinderschoenen. Islandora 8 biedt ook OAI-PMH. Zoals bij alles in Drupal 8 is ook dit een view, die helemaal is in te stellen zoals je wilt. Ook is Islandora 8 uit de box IIIF compatible. Cantaloupe implementeert de IIIF image API. Drupal 8 genereert de IIIF manifests (ook een view). Islandora 8 kan een manifest interpreteren en via een ingebouwde IIIF viewer afbeelden.

Support en updates

Drupal 7 support is uitgebreid tot november 2022. Islandora 7 houdt vast aan de eerdere datums. Dit betekent features tot november 2020, bug fixes tot november 2021 en security updates tot april 2022. Drupal 8 support loopt (gek genoeg) tot november 2021, maar de overstap naar Drupal 9 is relatief klein. Wanneer Islandora 9 uitkomt en de support voor Islandora 8 eindigt, is nu nog niet bekend.

Het was een hele interessante middag en avond. Over de andere 3 events verschijnt binnenkort ook een blog. Hier staat de blog van de tweede dag en hier die van de derde dag.