DF22: Dutch Umbraco User Group Fest op 7 oktober 2022

Ingediend door Dirk Hornstra op 10-oct-2022 08:17

Vrijdag 7 oktober 2022 was een dag om vroeg op te staan. 6.30 uur uit bed, rond 7.30 uur stond ik bij mijn collega Wesley voor de deur en om 7.00 uur stond mijn auto in Joure op een carpoolplaats en stapten we in bij onze collega Robert: TRES on tour!

Bestemming is “de Fabrique” in Utrecht, waar we rond 8.20 uur arriveren. Vandaag organiseert Dutch Umbraco User Group het event “DF22”, een afkorting voor DUUGFEST.

Inloop is vanaf 8.00 uur, de opening is om 9.00 uur, dus we zijn mooi op tijd! Met een cappuccino en een donut starten we de dag. We nemen plaats in de Stoomerij (grote zaal, later deze dag hangt er ook echt stoom in deze zaal) in stoeltjes waar de 360 graden kunt draaien. Op het scherm zien we fragmenten van “gouwe ouwe games”. Ik zie Doom, Earthworm Jim, Mortal Kombat, Rise of the Triad, hier komen goede herinneringen bij omhoog! Henk Boelman en Arnold Visser heten ons welkom en al gauw beginnen we met de eerste sessie:

 

Marie van Driessche: "Inclusive design, more than you hear".

Weet je, in de huidige tijd wordt je “dood gegooid” met “inclusiviteit” en dergelijke. En met veel zaken is het zo: als het te vaak naar voren komt, dan raak je geïrriteerd en denk je bij jezelf “nu weten we het wel”. Net zoals de code-of-conduct. Netjes met elkaar omgaan, ik vind het niet meer dan logisch. Maar goed, door excessen als bij "The Voice" is het schijnbaar nodig. Het zij zo.

En… dan word je toch weer verrast. Ik had al gezien dat bij de opening een gebarentolk op het podium zat (en ik vroeg me af, als je een gebarentolk hebt a la Irma Sluis, waarom niet op het grote scherm voor dove mensen in de hele zaal?). Maar als Marie op het podium staat en ik denk “ik hoor wel een stem, maar ik zie haar mond niet bewegen”, dan valt het kwartje: Marie is doof en werkt met gebarentaal, de gebarentolk zit nu op de eerste rij en vertaalt het naar Engels.

Zoals Robert later zegt “dat is knap, Marie zal het in “Nederlandse gebarentaal” doen, dus het komt in het Nederlands binnen bij de tolk en die moet het dan zelf omzetten naar Engels”. Want dat hebben we wel opgestoken van deze sessie: gebarentaal is een eigen taal. En wat in het Nederlands het gebaar is voor “Ja”, dat is in het Engels wat anders voor “yes” en in het Frans weer wat anders voor “oui”, dus per land/taal heb je ook weer een eigen gebarentaal.

Uit de presentatie komt een stuk irritatie naar voren. En dat is ook heel begrijpelijk. Zo zien we hoe de NS telefonisch bereikt kon worden, maar je eerst een “ja” moest inspreken om akkoord te gaan met voorwaarden: als je doof bent (en niet spreekt) en dat niet kunt zit je “vast”. De NS heeft het nu wel netjes voor elkaar, er zit nu een optie “via doventolk” bij de keuzes. Maar we zien ook een lijst met telefonische oproepen, als je doof bent heeft dat geen zin. Dus als je contactformulieren maakt, er een “noreply” afzender van maakt en waarbij je een e-mailadres (maar ook verplicht telefoonnummer in moet vullen), dan moet je elke keer weer via het contactformulier je bericht insturen.

Ook zien we een stukje techniek, waarbij studenten laten zien hoe ze met een handschoen via een PC ervoor kunnen zorgen dat de gebaren omgezet worden naar geluid (computerstem spreekt het uit). Marie vraagt ons wat er niet klopt. Mijn eerste gedachte was “Dit is cool! Ik kan/ken geen gebarentaal, dus als ik met iemand zou “spreken” die doof is, als het goed is kan hij/zij wel goed liplezen. Maar als hij/zij met gebaren met mij “spreekt” dan zou ik waarschijnlijk 90% missen of niet snappen.”

Marie gaat echter los op dit filmpje. Een leuke poging, maar niet “met de doven/Deaf” uitgewerkt, het is een stuk versimpeling van de taal en het is er nog lang niet.

Dat klinkt nogal negatief. Maar als je het verplaatst naar dat ik bijvoorbeeld die handschoen zou gebruiken en waarbij Fries automatisch naar Nederlands vertaald wordt en de tekst “ik wol in stikje bôle, ha we nog wat fryske nageltsiis yn de kuolkast lizzen” en dat zou worden “ik brood nog kaas in koelkast”, dan mist daar inderdaad een heel stuk van de echte tekst en zou ik ook ongelukkig zijn met deze “oplossing”. Leer gewoon Fries. En in ons geval: leer dus “gewoon” gebarentaal.

Marie noemt dat 1 op de 6 Nederlanders problemen heeft met lezen, rekenen. Bij dove mensen zit dat percentage rond de 70%. Om te zorgen dat je deze doelgroep bereikt moet je daar rekening mee houden en daar kunnen deze zaken bij helpen:

  • Gebruik headings en subheadings.
  • Beschrijf één punt per paragraaf.
  • Hou per regel ongeveer 7 tot 10 woorden aan.
  • Gebruik de actieve form.
  • Vermijd jargon.
  • Gebruik je wel termen of bepaalde zaken die mogelijk “moeilijk” zijn, gebruik een “glossary” om deze daar te verduidelijken.
  • Gebruik witruimte om de boel leesbaar te houden.
  • Gebruik afbeeldingen, diagrammen.
  • Lezen staat voor “dat je inspanning moet plegen” (we zien een stuk uitwerking van een podcast, één lange tekst waarbij ik als fanatieke lezen al denk: "wow, dat is wel heel onoverzichtelijk").

Als ik bovenstaande lees, dat zijn zaken die je eigenlijk al standaard moet doen, want daarmee zorg je ervoor dat teksten voor iedereen (beter) leesbaar zijn.

 

Subtitles (ondertiteling) is niet hetzelfde als Close Captioning. Bij CC worden alle geluiden in de tekst gezet, dus als er een deur gesloten wordt: dat geluid wordt ook in de ondertiteling opgenomen. We zien het voorbeeld van tennis tik….tok…..tik…., dat heeft natuurlijk geen nut/toegevoegde waarde.

Verrassend ook dat 80% van de close captioning niet door dove mensen gebruikt wordt! Maar het is natuurlijk ideaal om op je werk (open kantoortuin) of in de trein (stiltecoupe) even een filmpje te bekijken zonder geluid, maar zo wel exact te kunnen “zien” wat er gebeurt.

Als je CC toevoegt in je video’s zorg je voor een breder publiek. En als je die “los koppelt”, dan kunnen zoekmachines de teksten ook indexeren, beter voor je SEO (srt bestanden).

Flow voor ontwikkeling is bij Marie: Empathize / Define / Ideate / Prototype / Test

Maar ook hier geldt, als “niet doof persoon” je inleven in een doof persoon (empathize) gaat waarschijnlijk nog veel zaken missen: alleen met een echt doof persoon kun je veel meer problemen tackelen.

 

Door met CI/CD Umbraco Kubernetes door Erik-Jan Westendorp, Remy Simons, Corné Strijkert

Remy Simons is ziek geworden, dus dat deel van de presentatie werd overgeslagen. Dat vond ik een gemiste kans. Kun je echt niet even een deel van één van je mede-presentatoren overnemen? Je kunt (als het goed is) wel even dat deel behandelen en dan zeggen: als er vragen zijn, die kan ik waarschijnlijk niet beantwoorden, maar ik kan altijd een poging wagen.

De omgeving die hier behandeld wordt bestaat uit 3 instanties, 2 BE, 1 FE. Alle “persistant data” staat buiten de webroot, want elke release is het opbouwen van een nieuwe container.

Er wordt met blue/green databases gewerkt. Een content-stop voor de backoffice, omdat via BACPAC de database gebackupt wordt en vervolgens gerestored naar de nieuwe database. Maar dan heb je schijnbaar een “simpele” website, want bij een site gebeurt meestal wel interactie, formulieren en bij een webshop je winkelwagen, voorraad, etc.

Voor het zoeken wordt eXamineX gebruikt (Azure Search).
Voor opslag en restore van secrets wordt KeyVault gebruikt.

Via serilog sink worden de logs naar Azure Apps insights doorgestuurd.

We zien vervolgens hoe met pipelines en webhooks de flow aan elkaar gekoppeld zit en een release uitgevoerd wordt. Met nog 2 handmatige controles of de nieuwe omgeving “goed” is.

Bij het restoren van de database werd nog genoemd dat voor het restoren van de database er een bepaalde controle toegevoegd is (is de nieuwe omgeving na provisioning “up”), omdat bleek dat soms een proces klaar leek te zijn, maar deze toch nog voor een korte periode niet bereikbaar was.

Via environment-variabelen kunnen zaken buiten de container gehouden worden.
Een webhook wordt gekoppeld aan een deploymentfile.

Voor het deployen wordt gebruik gemaakt van portainer.

In de lijst met “TODO’s” werd nog genoemd: portainer via een webhook uitvoeren, waardoor je geen YAML-bestanden in je eigen repo hoeft mee te nemen (want daarmee vervuil je eigenlijk de broncode met de inrichting daarvan op een bepaalde locatie).
En de image version in de build run name meenemen, want dat is nu in de container registry niet terug te zien.

Omdat er toch nog wat vragen kwamen was dit item rond 10.45 uur afgelopen, op zich wel jammer, want we hadden 101 Umbraco Security Hardening door Pascal van Oostenbrugge ook nog wel willen zien.

Van 11.00 tot 11.30 was er een koffiebreak.

Om 11.30 uur zaten we weer in de Stoomerij, Dave Woestenborgh zijn talk ging over “A journey into the unknown”. Hij had een half uur de tijd en die heeft hij exact gehaald!

Dit was de sessie die ik het beste vond!

Dave heeft meegewerkt aan 24days in Umbraco: https://24days.in/umbraco-cms/

En in deze sessie komt hij met “handige tips” om bepaalde zaken in je C# code in de Umbraco-pipeline te hangen, zodat je bijvoorbeeld kunt zorgen dat gebruikers met bepaalde rollen geselecteerde pagina’s niet kunnen verwijderen en/of de-publiceren. Hoe je virtuele routes kunt instellen (voor een sitemap.xml of robots.txt bijvoorbeeld), hoe je kunt zorgen dat het “aanmaken” van een type pagina bijvoorbeeld maar 1x kan (je kunt 1 “onderhoudspagina” hebben, meer heeft (mogelijk) geen nut). Ook hoe je paden kunt aanpassen, maar daar wel mee moet oppassen: wordt niet gecached, dus je kunt jezelf performanceproblemen op de hals halen!

De zaken zijn terug te vinden via deze Github link.

Om 12.00 een half uur in het Magazijn gezeten bij de sessie “Empowering communties with Umbraco en Discord” door Corné Hoskam.

Ik kende Discord niet (wel eens de naam gehoord, maar niet zelf gebruikt), werd veel in de game-sector gebruikt, maar na covid-19 voor veel meer zaken ingezet. Voor .NET devs de SDK: github.com/discord-net/Discord.Net

We zien een voorbeeld van een custom message handler. Daarbij zit je bijvoorbeeld binnen een channel in Discord, voer je ?debug in en krijg je jouw naam, type kanaal e.d. terug.

Je kunt ook in je Umbraco-omgeving een soort leaderboard bijhouden. In deze voorbeelden ging het dus voornamelijk om dat je een soort bot hebt en zaken in Umbraco hiervoor kunt inregelen. En zoals we zien is dat inderdaad een stuk makkelijker dan dat je zelf een soort framework/cms zou moeten opzetten om die koppelingen te maken en dit te kunnen onderhouden. Het voorbeeld is terug te vinden op Github.

 

Van 12.30 tot 13.30 uur was er lunch. Lekkere broodjes, prima geregeld!

 

Om 13.30 uur weer terug naar de Stoomerij, Andy Butland spreekt hier over de “Latest news from Umbraco HQ”. Dat verhaal gaat erover hoe er meer structuur in de organisatie gekomen is. Op vaste tijden releases uitbrengen. Dus was bij een eerste release er champagne, confetti, zo zat Andy bij een volgende release op een hotelkamer klaar om de boel online te zetten.

Umbraco 10 gaat door (een LTS versie), maar ook Umbraco 11 komt alweer dichterbij (december, geen LTS versie trouwens). Ook zijn zaken die diep geïntegreerd waren in de code losgetrokken, zodat developers hun eigen keuze qua componenten kunnen doorvoeren. cDXP : compose your tech-stack.

Codegarden van dit jaar wordt nog even genoemd. Eindelijk weer een in-person-event. Met 1458 bezoekers, 51 sprekers en 67 sessies.

Andy licht ook nog even toe hoe de organisatie opgebouwd is, uit verschillende groepen. Zo heb je de core collaborators, de package team, the documentation creators en nog een aantal groepen: link.

We zijn oktober… wat in de dev-wereld Hacktober is! Dus wil je helemaal los gaan, ga je gang: blog-link.

  • Er is (komt?) een nieuwe marketplace, met de tag “umbraco-marketplace” kun jij je eigen projecten in de marketplace toevoegen.
  • De plug-in “Plumber” is overgenomen door Umbraco en gaat “Umbraco Workflow” worden.
  • We zijn cross platform: dus SQLite is standaard beschikbaar.
  • In versie 10.2 komen language variants, 10.3 is de laatste geplande minor-release.
  • Er komt een nieuwe property editor, de Block Grid Editor. Hiermee wordt de Block List Editor deprecated.
  • Er komt een nieuwe management API.
  • Er komt een nieuwe backoffice, Angular wordt deprecated.
  • Er komen breaking changes, nieuwe packages die nieuwe UI componenten gaan gebruiken.
  • Umbraco Forms krijgen meer features, data wordt aanpasbaar, zaken qua toegang en audit-trail worden toegevoegd.
  • De DXP roadmap, er komt een headless API voor Forms.
  • Licensing as a service, voor Forms, maar oo voor andere packages.

En de cloud variant krijgt ook nieuwe features, 2FA mogelijkheid, deployen naar een US datacenter, packages die in de cloud vooraf geïnstalleerd worden. En CI / CD.

Om 14.00 uur sprak Marco van der Voorn van TRES over “Keeping your developers happy”.
Wij waren daar niet bij, want om dezelfde tijd stond in de Deep dive room Lennard Fonteijn met zijn sessie “Upgrading Umbraco from 7 to 10 (and everything in between)”. Mijn collega Johan is hier al eens mee bezig geweest, heeft zaken uitgewerkt, maar we vroegen ons af “is er nog meer en als iemand anders de fouten al gemaakt heeft en dit ons vertelt, dan scheelt ons dat weer veel tijd”.

Aan het eind van deze sessie kwamen we tot de conclusie dat hier niet echt zaken naar voren gekomen zijn die niet bij ons bekend waren. Aan de ene kant fijn, want dan weet je dat je het zelf goed gedaan hebt, aan de andere kant een beetje teleurstellend want je had gehoopt hier wat van op te steken. Deze sessie was dus eigenlijk meer bedoeld voor developers die nog niet naar het updaten/upgraden hadden gekeken en voor wie het allemaal nieuw is.

Flow volgens Lennard / learnings:

  • Breng eerst in kaart wat je onderdelen/componenten zijn en of ze te upgraden zijn. Met 7 / 8 werk je met het .NET Framework, je gaat bij 9 / 10 naar .NET Core en niet alles is daarin beschikbaar.
  • Kijk naar de zaken die in de versies veranderen en wat dit voor impact heeft.
  • Lennard noemt hier PetaPoco en NPoco.
  • Als je een Umbraco 7 project hebt, upgrade die eerst naar de laatste/nieuwste versie (7.15.9 momenteel). Er is namelijk een “voor 7.6” en een “na 7.6” change. Daarin is het gebruik van UDI en een ID voor de Property Values doorgevoerd (breaking change), zie our.umbraco.com.
  • Upgrade je project, zet alle code die niet werkt in commentaar en zorgt dat je project weer wil draaien. Krijg je een homepage te zien zonder fouten (ook al is het een witte pagina), dan is stap 1 uitgevoerd.
  • De volgende stappen zijn dat je stuk voor stuk code die uitgezet is weer actief maakt en de boel gaat fixen.

Het omzetten van content kan lang duren, Lennard had een situatie waarbij de conversie van U8 naar U9 2 uur duurde (en je hebt totaal geen idee of het proces nog draait en wat er gebeurt).

Handige tip(s):

  • Umbraco 9 (en hoger) plaatsen zelf hun antiforgery-tokens in de razor-bestanden! Die moet je dus zelf niet meer toevoegen, want dan heb je er 2 en gaat het dus niet goed!
  • Css wordt meteen aan het begin in je HTML geplaatst. Dat werd vroeger aan het einde gedaan. Dus doe je zaken met css in partials, dat werkt nu niet meer. Advies van Lennard was om Smidge te gebruiken, hiermee kun je css bundelen.

 

Om 15.00 tot 15.30 was er een break, met het team op de foto (ook de sprekers met elkaar op de foto).

 

Om 15.30 uur zaten we in het Magazijn bij de sessie van Callum Whyte over “Umbraco Anywhere”.

Callum gaf zelf al aan dat het misschien niet overal even nuttig is, maar dat het meer een kwestie is van “omdat het kan”. Want omdat het nu .NET Core is, kan Umbraco op Linux draaien. Dus op… koelkasten. Raspberry Pi. En andere omgevingen. Zo zien we de Azure Functions test SDK die je lokaal kunt laten draaien waar Callum een Umbraco achter gehangen had.

Callum laat ons ook een paar tweets zien, iemand die Umbraco op Steam Deck geïnstalleerd heeft. Iemand die het met een tablet wil proberen.

Ook MAUI, waarmee je voor de iPhone en Android kunt bouwen. Het voormalige Xamarin.

De syntax daarin is een beetje afwijkend, maar lijkt wel erg op hoe je dat in een .NET Core project met Program.cs en Startup.cs inregelt. Kijk, dat is best wel cool. Want zo kun je redelijk 1-op-1 de code opbouwen voor je website en voor je mobiele varianten.

We zien hoe via dependency injection je kunt besluiten om bijvoorbeeld niet de backoffice toe te voegen.

Omdat MAUI geen DI in controls toestaat heeft Callum een work-around in de Program.cs geplaatst door de Mainpage zelf toe te voegen.

 

Om 16.00 uur zaten we weer in het magazijn, deze keer de sessie van Jeroen Breuer: “Umbraco with external login providers”.

Eerst een korte uitleg over OpenID Connect, daarna een Umbraco voorbeeld en als afsluiter de conclusie.

Umbraco ondersteunt users en members. Deze kunnen door elke willekeurige OpenID Connector provider aangeleverd worden, dit is al zo sinds versie 9.3.

Auto linking houdt het volgende in: users en members moeten in de Umbraco omgeving bestaan. Auto linking zorgt dat die actie uitgevoerd wordt: je logt in: nog geen account, dan aangemaakt. En het gebruikt events om te zorgen dat er extra rollen/groepen toegewezen worden.

Omdat Jeroen hiermee aan de slag is gegaan heeft hij een aantal bugs gevonden, gefixt en dat is nu doorgevoerd (in versie 10.2). Onder andere:

  • Tokens werden niet opgeslagen in de tabel
  • Members werden ge-update voordat ze aangemaakt waren
  • Je kon een member niet verwijderen (foreign key referenties)
  • Claims werden niet overgestuurd

Wat vaak vergeten wordt is dat je uitlogt uit Umbraco, maar dat je “ook” uit moet loggen bij je externe provider. Dit heeft Jeroen uitgewerkt. Het voorbeeld wat hij toonde is via zijn Github te bekijken/testen.

Jeroen heeft nog een feature request open staan, namelijk virtuele users/members: link. Want die moeten nu bestaan in Umbraco.

En dat ben ik wel met hem eens. Want stel dat je de site hebt van organisatie X. Wij (de IT-leverancier) kunnen hier met onze Single-Sign-On inloggen. Maar daarmee worden we ook gebruikers binnen het CMS van de klant. Voor het fixen van problemen prima, maar eigenlijk zou je, zodra je uitlogt weer “verwijderd” moeten worden. Waarbij de acties dan gekoppeld worden aan een systeem-account.

 

Goed, dit waren de sessies voor ons vandaag.  De andere groep was al weg (de oppas van de kinderen moest weer afgelost worden), ook wij zijn naar huis gereden omdat we zo “mooi de spits konden ontwijken”. En dat was ook zo, mooi op tijd weer thuis.

Een leuke dag en nu kijken of we met de opgedane kennis / informatie daar ook gebruik van kunnen maken. De tips van Dave waren erg goed, werden zo'n beetje live door ons doorgegeven aan de developers die op de zaak nog aan het werk waren. Maar in de sheets lijkt het alsof die gebruikt kunnen worden vanaf versie 9.x. En wij willen dit natuurlijk ook gebruiken in onze 7.x en 8.x installaties. Mocht dat het geval zijn, dan misschien eens kijken of we dat voor elkaar kunnen krijgen en dat ook weer terug kunnen geven aan de community. Want volgens mij wil iedereen voorkomen dat de klant zijn/haar homepage verwijdert of depubliceert (jazeker, dat gebeurt...).