AI krijgt plekje in onze samenleving (een interview met ChatGPT)

Het is ‘all over the news’…. berichten over AI en dan voornamelijk ChatGPT (Conversational Generative Pre-training Transformer) van Open AI. Het ene nieuwsbericht is nog niet koud of er valt weer iets nieuws te lezen over ChatGPT. Vorige week werd bekend dat Microsoft 10 miljard dollar geïnvesteerd heeft in ChatGPT. Ze zijn dan ook van plan om functionaliteit van Open AI (o.a. ChatGPT en Dall E) in hun Office-pakket en Bing te integreren. En niet alleen Microsoft doet dit. Er zijn heel wat andere bedrijven die AI en functionaliteit van ChatGPT integreren in hun producten. Ook geinteresseerd in de mogelijkheden? Neem dan eens contact met ons op!

Wat is ChatGPT precies en hoe werkt ChatGTP? Eigenlijk heb je mij niet nodig om je daar meer over te vertellen. Dat kan het zelf veel beter. Tijd voor een interview!

Wat kun je over jezelf vertellen?

“Ik ben ChatGPT, een grote taalmodel getraind door OpenAI. Mijn kennis snijdt af in 2021. Mijn doel is om zo nauwkeurig mogelijk te antwoorden op vragen die ik krijg over een breed scala van onderwerpen. Laat het me weten als er iets specifieks is waar u meer over wilt weten.

Hoe werkt ChatGTP?

ChatGPT is een taalgeneratie model dat is getraind op een grote hoeveelheid tekst. Het is gebaseerd op de transformer-architectuur, die zich richt op het begrijpen van de context van een tekst en het genereren van antwoorden. Bij het genereren van antwoorden, analyseert het model de inputtekst en gebruikt vervolgens zijn interne representatie van de taal om tekst te produceren die relevant is voor de input en grammaticaal correct is. De training van het model is gedaan met behulp van Machine learning waardoor het model steeds beter wordt in het begrijpen van de context en het genereren van antwoorden.

Hoe werkt CHATGTP

Betekent dit dan dat je het niet altijd bij het rechte eind hebt?

Als taalmodel ben ik getraind op een grote hoeveelheid tekst en kan ik informatie geven die relevant is voor de input en grammaticaal correct is. Echter, zoals elk model, kan ik ook fouten maken of onvolledig antwoord geven. Soms kan het antwoord gebaseerd zijn op een oudere versie van de informatie, of de informatie kan verouderd zijn. Het is altijd aanbevolen om de informatie die ik geef te verifiëren met betrouwbare bronnen.

Wat zijn dan betrouwbare bronnen volgens jou?

Betrouwbare bronnen zijn degene die informatie verstrekken die geverifieerd is door experts in een bepaald vakgebied en die worden onderhouden door organisaties met een goede reputatie. Voorbeelden hiervan zijn wetenschappelijke tijdschriften, overheidswebsites, universiteiten en andere erkende organisaties. Ook kranten, tijdschriften en boeken die zijn geschreven door experts in hun veld of geverifieerd door experts kunnen betrouwbaar zijn. Het is altijd aanbevolen om de informatie te verifiëren met meerdere betrouwbare bronnen om ervoor te zorgen dat de informatie juist is.

Hoe ben je precies getraind?

Ik ben getraind met behulp van Machine learning, en meer specifiek met behulp van een techniek genaamd “unsupervised learning”. Dit betekent dat ik ben getraind op een grote hoeveelheid tekst zonder specifieke instructies of labels. Tijdens het trainingsproces heeft het model geleerd hoe tekst te analyseren en hoe tekst te genereren die relevant is voor de input en grammaticaal correct is.

De training is gedaan door het model te voeden met een grote hoeveelheid tekst data, zoals artikelen, boeken, verhalen, etc. Van deze data heeft het model geleerd hoe taal werkt, hoe woorden samenhangen en hoe grammatica en syntaxis functioneren. Dit maakt dat het model zich beter kan aanpassen aan de context en kan antwoorden geven die relevanter zijn voor de input.

Het trainingsproces is een iteratief proces en na verloop van tijd wordt het model steeds beter in het begrijpen van de context en het genereren van antwoorden.

Krijg je dagelijks veel nieuwe input?

Als taalmodel ben ik getraind op een grote hoeveelheid tekst en heb ik kennis opgedaan die afsnijdt in 2021. Na de training, word ik niet dagelijks bijgewerkt met nieuwe informatie. Dit betekent dat sommige informatie die ik geef mogelijk verouderd of niet meer actueel is. OpenAI streeft er wel naar om periodiek updates te geven aan de model om de kennis up-to-date te houden. Ook zijn er andere varianten van GPT zoals GPT-3 die op dit moment meer recent zijn getraind, met meer recente data.

Waar ik benieuwd naar ben is of we ons zorgen moeten maken over AI in de toekomst

AI, of kunstmatige intelligentie, is een snel groeiend en complex gebied. Er zijn vele voordelen van AI, zoals verbetering van efficiëntie, automatisering van taken en het ontdekken van nieuwe inzichten. Echter, er zijn ook bepaalde zorgen en uitdagingen waarmee rekening gehouden moet worden, zoals de impact op banen, privacy en ethiek.

Een van de grootste zorgen is de impact op banen. AI-systemen kunnen taken overnemen die voorheen door mensen werden uitgevoerd, waardoor mensen hun baan kunnen verliezen. Dit kan leiden tot economische problemen en sociale ongelijkheid.

Daarnaast zijn er zorgen over privacyschending. AI-systemen kunnen grote hoeveelheden persoonlijke gegevens verzamelen, analyseren en gebruiken. Dit kan leiden tot bezorgdheid over hoe deze gegevens worden gebruikt en beschermd.

Tot slot zijn er zorgen over ethische kwesties. AI-systemen kunnen bijvoorbeeld worden gebruikt voor onethische doeleinden, zoals discriminatie of surveillance. Er moeten daarom regels en wetgeving worden opgesteld om de ontwikkeling van AI te reguleren en te waarborgen dat deze wordt gebruikt voor het algemeen belang.

Het is belangrijk om deze zorgen serieus te nemen en er werk van te maken om ervoor te zorgen dat AI veilig, verantwoordelijk en ethisch wordt gebruikt. Er wordt dan ook veel onderzoek gedaan op dit gebied, om de ontwikkeling van AI te reguleren en ervoor te zorgen dat deze wordt gebruikt voor het algemeen belang.

Inderdaad. Hoe kunnen we voorkomen dat bijvoorbeeld leerlingen hun huiswerk door ChatGPT laten maken?

Er zijn verschillende manieren om te voorkomen dat leerlingen hun huiswerk door ChatGPT of andere taalmodellen laten maken:

  1. Gebruik van plagiaat software: Er zijn verschillende softwareprogramma’s die beschikbaar zijn die kunnen detecteren of een stuk tekst is overgenomen van internet. Deze software kan worden gebruikt om te controleren of leerlingen hun huiswerk echt zelf hebben geschreven.
  2. Handmatige controle: Docenten kunnen ook handmatig de huiswerk controleren en op zoek gaan naar tekenen van plagiaat. Dit kan bijvoorbeeld door te zoeken naar specifieke zinnen of woorden die voorkomen in het huiswerk en ook voorkomen in andere bronnen.
  3. Educatie: Docenten kunnen ook leerlingen educatie geven over de gevaren van plagiaat en hen aanmoedigen om hun eigen werk te doen. Leerlingen kunnen zo leren over de waarde van eerlijkheid en integriteit in hun werk.
  4. Technologische oplossing: Er zijn ook technologische oplossing zoals Turnitin, Grammarly, etc die kunnen helpen bij het detecteren van plagiaat. Deze software analyseert tekst op basis van specifieke regels en kan op deze manier plagiaat detecteren.

Het is belangrijk om te onthouden dat het voorkomen van plagiaat een gezamenlijke verantwoordelijkheid is van zowel docenten als leerlingen. Door samen te werken, kunnen we ervoor zorgen dat leerlingen hun eigen werk doen en zo de waarde van eerlijkheid en integriteit in het onderwijs behouden.

Hoe werkt CHATGTP
Gegenereerd door Dall-E: “A shiba inu developing a website”

En hoe gaan we dan met copyright om met gegenereerde afbeeldingen van bijvoorbeeld Dall E?

Het gebruik van gegenereerde afbeeldingen, zoals die gemaakt zijn door DALL-E of andere kunstmatige intelligentie-systemen, kan complex zijn als het gaat om auteursrecht. Er zijn een aantal factoren waarmee rekening moet worden gehouden:

  1. Auteursrecht op de input: Als de afbeelding is gemaakt door een AI-systeem dat gebruikmaakt van bestaande afbeeldingen als input, kan het auteursrecht van deze afbeeldingen van toepassing zijn.
  2. Originaliteit: In sommige landen, zoals de Verenigde Staten, moet een werk origineel zijn om auteursrechtelijk beschermd te zijn. Als een afbeelding is gemaakt door een AI-systeem en geen menselijke creativiteit bevat, kan het niet auteursrechtelijk beschermd zijn.
  3. Transformatie: In sommige gevallen kan een afbeelding die is gemaakt door een AI-systeem auteursrechtelijk beschermd zijn als het een significante transformatie bevat van de oorspronkelijke afbeelding.
  4. Fair use: In sommige gevallen kan het gebruik van een afbeelding die is gemaakt door een AI-systeem toegestaan zijn onder de fair use doctrine, die toestaat dat bepaalde gebruiken van beschermd materiaal zonder toestemming van de rechthebbende zijn toegestaan.

In de praktijk kan het lastig zijn om te bepalen of een afbeelding die is gemaakt door een AI-systeem auteursrechtelijk beschermd is of niet. Dit is een complex onderwerp waar juridische experts op dit gebied over moeten adviseren. Het is daarom verstandig om toestemming te vragen of juridisch advies in te winnen alvorens een afbeelding die is gemaakt door een AI-systeem te gebruiken.

Er hangt dus veel af van nieuwe regelgeving die nog gemaakt moet gaan worden?

Ja, dat klopt. Er is momenteel nog geen specifieke regelgeving voor het gebruik van afbeeldingen die zijn gemaakt door kunstmatige intelligentie-systemen. Dit betekent dat de huidige auteursrechtelijke regels moeten worden toegepast op deze situaties. Maar deze regels zijn vaak ontworpen met de veronderstelling dat het werk is gemaakt door een menselijke maker, dus ze kunnen soms niet volledig passend zijn voor afbeeldingen die zijn gemaakt door AI-systemen. Er zal waarschijnlijk toekomstige regelgeving nodig zijn om deze situaties beter te behandelen.

Daarnaast is er ook veel discussie over ethische en maatschappelijke implicaties van kunstmatige intelligentie en hoe deze kunnen worden aangepakt, zoals bijvoorbeeld de verantwoordelijkheid voor de acties van AI-systemen en de bescherming van privacy. Dit zijn complexe vraagstukken waarover nog veel overleg en regelgeving nodig zal zijn.

Hartstikke bedankt voor de antwoorden. Wil je nog iets kwijt?

Graag gedaan! Als je nog meer vragen hebt, aarzel dan niet om ze te stellen. Houd er wel rekening mee dat ik als AI-model geen mening heb en alleen informatie verstrek die ik heb geleerd tijdens mijn training. Dus als u vragen heeft over mijn trainingsgegevens of als u zich zorgen maakt over de toekomst van AI, aarzel dan niet om me te vragen.”


Hoe werkt CHATGTP
Gegenereerd door Dall-E: Microsoft Clippy standing on piece of paper

Geloof het op niet: het bovenstaande interview is 1-op-1 met ChatGPT gevoerd. Als het de eerste keer is dat je hiermee in aanraking komt, is het bijna eng hoe goed en samenhangend de AI antwoord kan geven op mijn vragen. Ik vind het zelf ook nog altijd indrukwekkend.

Samenleving en regelgeving

AI gaat de komende jaren alleen maar belangrijker worden en de vraag zal voorlopig blijven hoe we hier als samenleving mee om zullen gaan.

Ook de regelgeving loopt nu al achter en met name voor bepaalde beroepen is met name dat geen goed nieuws. Waar liggen de rechten van de gegenereerde afbeeldingen? En hoe gaan we hiermee om op school of universiteit?

Hoe helpt ChatGPT developers?

ChatGPT kan developers helpen met sneller ontwikkelen. Het kan code aanvullen en zelfs genereren om bepaalde functioniteit te ondersteunen. Volledige applicaties zal het echter nog niet in elkaar steken, maar wie weet waar we over 10 jaar staan. Uiteindelijk is creativiteit en het menselijke brein een stuk complexer

AI is voorlopig Microsoft’s Clippy die het eindelijk doet. De integratie met Office is dus nog niet eens zo raar. Ook zal deze vorm van AI zo maar eens heel snel bij veel helpdesks geïmplementeerd kunnen worden. Vragen over hoe je je modem aan moet sluiten, die zouden toch beantwoord moeten kunnen worden.

Kortom, we hebben nog tijd, maar we moeten vroeg of laat AI echt een plek geven in onze samenleving.

Goed opdrachtgeverschap is een vak

Wat is ‘Opdrachtgeverschap’? En specifieker nog: wat is ‘Goed opdrachtgeverschap’? Onze senior projectmanager Edwin Fokker gaat je hierin meenemen. Niet omdat hij een uitgebreid wetenschappelijk onderzoek heeft uitgevoerd of bestudeerd, maar vanuit zijn eigen 25 jaar ervaring als projectmanager. Goed opdrachtgeverschap is een vak. Je doet dat er niet zo maar even bij!

“Dit artikel gaat met name over jou als opdrachtgever, diegene die eindverantwoordelijk is voor business ICT-projecten.   

Goed opdrachtgeverschap is kort samengevat:

  • je houding
  • je gedrag
  • en actie in jouw rol als opdrachtgever.

Jij bent eindverantwoordelijk voor het initiëren, sturen, laten uitvoeren en implementeren van veranderingen die projectmatig worden uitgevoerd. Jij krijgt, of beter, neemt eindverantwoordelijkheid voor deze verandering.

Dit is nogal wat. Je wilt ‘iets’ veranderen en/of verbeteren in je dienstverlening naar je klanten, afnemers en/of de interne organisatie. 

goed opdrachtgeverschap

Jij als goede opdrachtgever:  

  1. Bent de eigenaar van het project
    Jij voelt dat zo en gedraagt je er ook naar. Jij wilt de resultaten van het project hebben en implementeren in jouw organisatie. Goed opdrachtgeverschap staat of valt met eigenaarschap. 
  1. Speelt een actieve en beslissende rol in de formulering van de projectkenmerken
    Bestaande uit de doelstelling, business case, scope en niet te vergeten de out of scope, de requirements, de op te leveren producten, de project- en exploitatiekosten, de planning en de governance. Dit zijn de kaders en richtlijnen van jouw project, waarop je actieve sturing geeft bij de uitvoering. 
  1. Bent volledig en juist geïnformeerd tijdens jouw project
    Over de status van de op te leveren producten, de financiën, de issues en risico’s en besluit over de te nemen maatregelen om de kans op succes te vergroten. 
  1. Hebt een luisterend oor
    Voor de adviezen van de (vertegenwoordiging van de) gebruikers van je organisatie en betrokken leveranciers die allen aangestoken door jouw enthousiasme een actieve rol vervullen in jouw project. 
  1. Hebt een open en eerlijke relatie met de projectmanager van jouw project
    De projectmanager faciliteert jouw feestje en ondersteunt jou, net als je Stuurgroep, in de besluitvorming tijdens jouw project. 
  1. Stapt op de zeepkist bij het vieren van succesjes
    Met de direct betrokkenen tijdens je project en je vraagt om extra aandacht en inzet voor je project als het ‘even’ tegenzit.  
  1. Stopt het project
    Als de business case niet meer valide is of te krijgen is en als je geen goed gevoel meer hebt over de slagingskans en terugverdientijd van jouw project. 

Jij als opdrachtgever wilt ‘iets’ hebben. Jij wilt profijt hebben van de resultaten en op te leveren producten van het project. De business case, die up-to-date wordt gehouden tijdens het project en de vooraf gedefinieerde exploitatiefase erna, ondersteunt je daarbij. De tijd is echt voorbij dat de business case van het project tijdens initiatie- of opstartfase eenmalig wordt vastgelegd en doorgerekend.  

Als jij je (deels) herkent in dit betoog, maar toch nog vragen, opmerkingen en/of je bedenkingen hebt, dan hoor ik dat graag. Je bent van harte welkom om samen met mij in gesprek te gaan, zodat we van elkaars kennis en ervaringen kunnen leren.”

  

Verdwijnt de ICT-afdeling met de self-service PowerBI tool?

Dat is de vraag die BI Consultant en Data analist Roger Persoon zich stelt. Het antwoord lees je hieronder:

“Microsoft Power BI is een interactieve tool voor het visualiseren van data. Het doel is om gegevens om te zetten naar informatie en dit beschikbaar te maken voor de eindgebruiker.

Risico’s van self-service tools

Power BI is ontwikkeld om een self-service BI-tool te zijn. Self-service BI is heel populair op dit moment. Daarmee verzamelen medewerkers data die ze vervolgens rapporteren in bijvoorbeeld dashboards. Niet meer afhankelijk zijn van de ICT-afdeling lijkt ideaal, maar brengt ook een aantal risico’s met zich mee.

Hieronder een van de risico’s die ik niet vaak genoemd zie als ik de moeilijkheden opzoek voor invoering van PowerBI. Als je dit googelt gaat het voornamelijk over de moeilijkheden van PowerBI zelf: de tool dus en welke kennis je hiervoor nodig hebt. Niet wat voor effect het heeft op de werkvloer.

Want even serieus: is het echt een optie om aan medewerkers die tot dan toe alleen wat Excel-sheets kant-en-klaar krijgen voorgeschoteld met hierop data die hen moet ondersteunen in hun werkzaamheden na een korte introductie een aantal datasets te geven en te zeggen: ga hier maar mee aan de slag. Succes ermee! 

Allereerst wordt hiermee vergeten dat dit veelal niet tot hun kernactiviteit behoort maar een middel is om te controleren dan wel te rapporteren over hun dagelijkse werkzaamheden. 

Van papier naar digitaal

Tijdens mijn werkzame leven heb ik veelal gewerkt voor softwarebedrijven die bij lokale overheden documentmanagementsystemen implementeerden. Dit allemaal in het kader van ondersteuning van de medewerkers. Hiervoor moesten de meeste medewerkers hun werkwijze, die ze soms al jaren hanteerden, veranderen. Documenten moesten niet meer in de kast worden opgeborgen met kleurcodes op alfabet worden opgeborgen maar geregistreerd en geclassificeerd. En niet te vergeten: digitaal. Ook uitgaande post wordt niet meer via de brievenbus bezorgd: alles gaat via de BerichtenBox van Mijn Overheid.

Dit zou dan het einde van de postkamer worden: iedereen doet dit zelf (self-service dus).

Stapsgewijze invoering

Veelal ging dit geschetste toekomstbeeld voor de medewerkers te vlug. De gevolgen waren dat ze hun eigen papieren archief creëerden en het systeem links lieten liggen. Beter ging het dan ook als je de invoering stapsgewijs uitvoerde.

Allereerst laat je de postkamer ‘digitaliseren’. Papier wordt vervangen door digitale opslag (wat in de praktijk betekende het scannen van inkomende post en het printen van uitgaand post). Maar intern worden de documenten alleen nog beschikbaar gesteld via het documentmanagementsysteem.

Daarna ga je stapsgewijs verder: e-mails registreren door medewerkers, communicatie naar de burgers toe via de berichtenbox van Mijn Overheid totdat je uiteindelijk toch het geschetste en gewenste toekomstbeeld hebt bereikt. Nog makkelijker gaat dit proces als je de medewerkers kunt prikkelen zodat de veranderingen zelf vragen: “Waarom kan ik mijn e-mail niet zelf registreren?” of “Waarom moet ik de vergunning via de postkamer versturen?”.  

‘Klant en kok ineen’

Als ik mijn ervaring hierin projecteer naar PowerBI als self-service BI tool zie ik wel enige overeenkomsten. Het concept van self-service is namelijk eenvoudig: de klant bedient zichzelf. Voorheen gebeurde dat door het personeel. Denk bijvoorbeeld aan tankstations, warenhuizen of een zelfbedieningsrestaurant. De klant redt zichzelf prima en het personeel is alleen nog aanwezig voor ondersteunende taken. Dit zou echter betekenen in het geval van PowerBI t.o.v. het zelfbedieningsrestaurant: je bent ook nog de kok.  

Implementatie van PowerBI als self-service tool

Mijns inziens kan dit ook beter stapsgewijs. Begin allereerst met de rapporten en dashboards via PowerBI te delen. En ja, dit zal nog steeds door de ICT-afdeling gebeuren (beter nog: hier heb je genoeg specialisten voor). De organisatie raakt vertrouwd met de presentatie van de gegevens via deze weg. Kunnen ze al een beetje spelen met filters en in- en uitzoomen op de data (drillen).

Op deze manier creëer je vanzelf een vraag bij de afdelingen en medewerkers die meer willen. Die inderdaad zelf de dashboards willen maken en via verschillende invalshoeken de data willen bekijken om direct een trendbreuk te kunnen constateren. Of alleen de data die voor de medewerker/afdeling zelf relevant is willen weergeven. Ook hier kun je nog als tussenstap kiezen dat er een aanvraag wordt gedaan om een dataset beschikbaar te stellen die die data bevat waarmee aan de slag kan worden gegaan binnen PowerBI om het te visualiseren: ook weer een rol voor de ICT-afdeling.

Onderhoud en controle blijft belangrijk

Om een wildgroei aan rapporten te voorkomen zal er verder ook nog enige controle moeten worden uitgevoerd op de rapporten/dashboards. Er is een kans dat meerdere medewerkers – gedeeltelijk – hetzelfde rapport maken en dan loop je het risico dat de gemaakte rapporten andere definities bevatten dan centraal is afgesproken. Ook hierin zou de ICT-afdeling een rol in kunnen spelen: onderhoud en controle blijft een belangrijke factor.

Self-service BI kan werken, maar…

Self-service BI klinkt aanlokkelijk, maar zal niet voor iedereen werken en zou stap voor stap moeten ingevoerd. Zie het niet als kans om de ICT-afdeling uit het proces te halen maar geef ze meer een ondersteunende en controlerende rol. Ook zullen er genoeg afdelingen en medewerkers zijn die niet aan self-service BI willen. Probeer ze dat dan ook niet op te dringen: als ze zelf niet de meerwaarde ervan inzien is invoering gedoemd te mislukken.”

Gebruik van C# in web development?

Onze software developer Nino van Laar vraagt zich af waarom de programmeertaal C# niet vaker wordt gebruikt bij het ontwikkelen van webapplicaties. Hij neemt je tijdens zijn zoektocht mee naar het antwoord: 

“Een analyse van alle openbare GitHub repositories toont aan dat C# al enkele jaren een stabiele lijn toont op het percentage van gebruik binnen de repositories, variërend tussen 3 en 4% (Zapponi, 2022). Ontwikkelaars gebruiken C# voor een breed scala aan projecten zoals Windowsapplicaties, games en web development.  

Weinig websites gebouwd in C# 

Aangezien C# meer dan 20 jaar bestaat, is er veel documentatie en expertise aanwezig die geraadpleegd kan worden voor snelle en adequate ontwikkeling. Desondanks is het percentage websites wat gebruik maakt van C# als ontwikkelcode slechts 8% (W3Techs, 2022). De meeste websites blijven geprogrammeerd in PHP waardoor deze bij uitstek de populairste code is om te gebruiken in webdevelopment.

Hierbij rijst dan ook de volgende vraag: ‘Waarom wordt C# nog niet grootschalig ingezet voor de ontwikkeling van webapplicaties?’ 

Ontwikkelen van webapplicaties

C# is een moderne, object georiënteerde programmeertaal ontwikkeld door Microsoft. Het stelt ontwikkelaars in staat om veilige en robuuste applicaties te ontwikkelen onder het .NET platform. De ontwikkeling van webapplicaties in C# gebeurt doorgaans in het ASP.NET framework, welke is gebouwd op het bekende .NET framework. ASP.NET voegt enkele belangrijke functionaliteiten toe aan .NET die nodig zijn voor het ontwikkelen van webapplicaties, zoals:

  • Een basis framework voor het verwerken van web requests in C# 
  • Een web-page templating syntax, beter bekend als Razor, waarmee dynamische webpagina’s kunnen worden gebouwd door het gebruik van C#
  • Libraries voor veelvoorkomende websites zoals een model, view, controller (MVC) 
  • Een authenticatiesysteem waarin libraries, een database en templatepagina’s zijn opgenomen voor het verwerken van logins. Hiernaast is het eenvoudig om multifactorauthenticatie en externe authenticatie in te stellen 
  • Editor extensions om eenvoudig syntax highlighting, code completion en andere specifieke functionaliteiten in de IDE naar keuze te krijgen

C# steeds populairder 

Langzaam maar zeker wint C# aan populariteit bij ontwikkelaars voor web development. Dit komt mede door het openstellen van de framework code op Github. Iedereen kan de code nu inzien, reviewen, aanpassen en/of aanvulling doorvoeren op de bestaande code.  

Hierdoor groeit er een community die steeds actiever wordt in de doorontwikkeling van ASP.net. Verbeteringen en bugfixes laten daardoor minder lang op zicht wachten en worden regelmatige vrijgegeven. 

Support op meerdere platforms

Een ander speerpunt om C# te gebruiken is de cross-platform support. Het framework is gebouwd om alleen op Windows te werken maar applicaties en hulpmiddelen ontwikkeld met behulp van .NET kunnen eenvoudig op andere platforms werken zoals macOS en Linux. Visual Studio, de IDE ontwikkeld door Microsoft, geeft gebruikers hierdoor de kans webapplicaties op elk operating system te ontwikkelen en in gebruik te nemen.  

Aangezien ASP.NET verder gebouwd is op .NET hebben ontwikkelaars ook direct voordelen bij onder andere: 

  • Automatisch geheugenmanagement 
  • Cross-platform architectuur 
  • Package management
  • Garbage collection 
  • Asynchroon programmeren 
  • Eenvoudige ontwikkeling van MVC-webapplicaties en RESTful API’s 

Razor syntax: makkelijk te leren

ASP.NET maakt gebruik van zijn eigen markup syntax voor het embedden van .NET code in webpagina’s. Hiervoor gebruiken zij de Razor syntax. Deze syntax, ontwikkeld in 2010, is een vereenvoudigde syntax die eenvoudig te leren is als beginner en meer productiviteit brengt bij een expert. Een Razor webpagina bestaat uit HTML en Razor code. Wanneer een server een request krijgt om een pagina te laden zal eerst de Razor code uitgevoerd worden om vervolgens de HTML aan te genereren en terug te sturen naar de gebruiker.  

Er is hierbij een grote overeenkomst te vinden met PHP, waarbij PHP-pagina’s bestaan uit PHP en HTML en op dezelfde manier op de server worden gegenereerd. Ontwikkelaars met C# ervaring zullen dan ook eerder uit te voeten kunnen met de Razor syntax dan de PHP-syntax.

PHP blijft koploper

PHP vertoont ontzettend veel overeenkomsten met ASP.NET in combinatie met Razor bestanden. Beide programmeertalen kunnen embedded worden in de HTML-code, zijn cross platform in te zetten en zijn op basis van performance aan elkaar gewaagd.  

Toch blijft PHP de koploper in de strijd om populairste programmeertaal voor webapplicaties. Dit komt met name door onderstaande punten: 

  • Vanwege de populariteit is er een enorme community ontstaan waarbij veel ontwikkelaars zich hebben opgewerkt tot specialist 
  • Er is een grote database vol referenties en educatief materiaal 
  • PHP ondersteunt vrijwel iedere database 
  • Er is een grote collectie aan open-source add-ons 
  • De hosting van een PHP-website is doorgaans goedkoop 
  • PHP is eenvoudig te leren

Voor zowel PHP als C# zijn er dus voor- en nadelen die het ontwikkelproces dan wel vereenvoudigen als bemoeilijken. Maar waarom heeft C#, en in het bijzonder ASP.NET, nog zo’n kleine marktwaarde in de websites?

Overstap naar ASP.NET

Het antwoord hierop lijkt vrij voor de hand liggend. Tot nog toe was ASP.NET een framework dat enkel gericht was op het ontwikkelen van webapplicaties voor een Windows machine. Sinds 2016 is ASP.NET Core uitgekomen waarmee deze restrictie van Windows verdween. Het lijkt er dan ook op dat het grote publiek nog niet de overstap heeft gemaakt naar C# vanuit de meer populaire webontwikkelmethodes zoals PHP. De verwachting is dat steeds meer bedrijven, zeker vanwege de release van ASP.NET Core, de overstap naar ASP.NET overwegen en zullen nemen.

PHP versus C#

Persoonlijk heb ik in zowel PHP als C# geprogrammeerd. Als beginnend programmeur is PHP een ontzettend eenvoudige taal om te leren. Simpele websites kunnen op deze manier in een handomdraai worden gemaakt. Het leren van C# vergt wat meer inspanning en duurt dan ook langer om daadwerkelijk te kunnen gebruiken.  

Vanwege de object georiënteerde structuur binnen .NET is het eenvoudiger om code te differentiëren dan in PHP. Een persoonlijke voorkeur gaat hiervoor dan ook uit naar C#. Waar PHP zich behoudt tot een programmeertaal voor webapplicaties kan het leren van C# de horizon verbreden en de stap naar andere ontwikkelmethodes binnen .NET vereenvoudigen.”

Integrate 2022

Alweer een week of twee geleden vond Integrate 2022 plaats. Het is de grootste integratieconferentie die gericht is op integratie met Microsoft-producten en dan met name integratie met behulp van Azure. Het was de tiende keer dat de conferentie plaatsvond. Na twee lastige jaren, waarbij het alleen online plaatsvond, net als alle andere conferenties, kwamen er dit jaar weer een slordige 250 integratie-developers en architecten van over de hele wereld bij elkaar in Londen. Daarnaast volgden er ook nog meer dan 500 deelnemers Integrate 2022 op afstand via een livestream.

Wat vooral duidelijk werd is dat Microsoft nog steeds vol inzet op integratie in de cloud met behulp van Azure Integration Services. Maar het snapt ook dat het voorlopig nog een hybride wereld zal blijven.

Live in Londen versus streamend thuis

Rob Fox volgde Integrate vanuit Londen zelf, terwijl Sjoerd Alaerds de conferentie online volgde. Het werd ons al snel duidelijk dat het aanwezig zijn op het event zelf meerwaarde heeft.

1) Vragen worden direct beantwoord

Op locatie kun je direct je vragen stellen aan de juiste personen, bijvoorbeeld de spreker zelf. Online is er een chatforum opgezet, maar deze werd voornamelijk gebruikt om problemen met de stream aan te duiden. Je kon er ook vragen stellen aan de sprekers, maar deze bleven helaas (live) onbeantwoord. In plaats daarvan werden ze verzameld in een centrale blog wachtend op antwoord.

2) Aandacht erbij houden

In een volle zaal houd je toch beter je aandacht bij het verhaal dat verteld wordt dan dan thuis. Een plek waar je vaak veel afleiding hebt. Bovendien kun je de aandacht vestigen daar waar jij waarde aan hecht. Of het nu de spreker of de afgebeelde sheets of demo zijn. Helaas werd de keuze voor de mensen die via de stream keken voor hen gemaakt en was in het begin van de conferentie vaak alleen de spreker in beeld.

3) Storingen heb je niet

In Londen heb je dan ook nog eens geen last van storingen. Hoe anders is dat als je op afstand meekijkt. Ook in 2022 en na twee jaar een streamend event waren er nog steeds problemen met de stream en de verbinding.

4) Het sociale aspect

Behalve informatie-uitwisseling wordt het sociale aspect van zo’n evenement wel eens onderschat. Na twee jaar binnen zitten is het goed om weer mensen te kunnen ontmoeten.

Het uitwisselen van ideeën met gelijkgestemden, de organisatie en Microsoft zelf werkt inspirerend. Zeker als het mensen zijn die zich buiten je eigen bubbel bevinden. Het geeft je simpelweg nieuwe inzichten.

En na een dag veel luisteren trek je samen met een groep mensen de stad in om samen wat te eten en het ook eens over wat anders te hebben dan werk of Covid. Ondanks dat je geleefd wordt, kom je frisser thuis dan je vertrok met allerlei ideeën.

De conferentie

De eerste dag werd traditioneel geheel gevuld door Microsoft en de nodige nieuwigheden en aankondigingen. Daarbij viel op dat Microsoft veel feedback vroeg van haar klanten. Voor ieder product zijn er surveys die ingevuld kunnen worden, zodat de verschillende productteams weten of ze op de goede weg zijn of moeten bijsturen.

De tweede en derde dag kwamen veel meer praktijkvoorbeelden aan bod. Ze werden vooral gevuld door mensen uit het veld, de professionals, meestal Microsoft MVPs (Most Valuable Professionals). Deze blogpost zal vooral inzoomen op wat Microsoft te melden had, maar daarmee willen we de professionals vooral niet tekort doen. Ook de praktijkvoorbeelden zijn belangrijk om anderen te inspireren.

Integratie is hot

Integratie is hot en het zal de komende jaren alleen maar meer worden. Dat zegt Gartner. Ze verwachten een verdubbeling van de integratiemarkt tegen 2025. En dat is logisch. In de steeds meer interconnected wereld, moeten steeds meer systemen met elkaar kunnen communiceren.

Voor deze groei is het belangrijk om de juiste tools te kiezen. Voor Microsoft zit de toekomst in de cloud. Onder de noemer Azure Integration Services (AIS) bundelt Microsoft de verschillende services die het aanbiedt voor integratie in Azure. Denk hierbij aan Logic Apps, Service Bus, Event Grid en Api Management.

Integratie in Azure

Een van de grootste problemen in Azure is het managen van al je integraties die vaak meerdere services gebruiken. Bij veel grote klanten zijn er honderden en honderden integraties. Dat wordt in Azure heel lastig te managen. In BizTalk was dit een stuk gemakkelijker.

Kovai heeft daarvoor Serverless 360 in het leven geroepen, een tool waarmee het managen van integraties in Azure een stuk beter te doen is. Nu steekt Microsoft hand in eigen boezem en gaat er ook mee aan de slag. Het zal er nog niet heel snel aankomen, maar er wordt gewerkt aan een andere view in Azure, speciaal voor integraties.

Logic Apps

Sjoerd

Een van de belangrijkste integratieservices in Azure zijn Logic Apps. Het is daarom niet raar dat Microsoft er het afgelopen jaar weer flink in geïnvesteerd heeft. Verschillende problemen zijn aangepakt en er zijn uiteraard nieuwe features toegevoegd. Hieronder een overzicht van alle productupdates die het afgelopen jaar zijn doorgevoerd.

Naast de verbeteringen die de afgelopen tijd doorgevoerd zijn, is er ook een roadmap voor 2022 gedeeld. Men kijkt daarbij niet alleen naar nieuwe features, maar ook de designer wordt aangepakt. En dat is nodig. Er zijn toch wel wat tekortkomingen in de Designer voor developers waarvoor workarounds nodig zijn. Hieronder de roadmap voor 2022.

Zelf word ik het meest enthousiast van de Data mapper-functionaliteiten. In de integratiewereld is het vertalen van de data een van de belangrijkste onderdelen binnen ons vak. Door slimmere tools en technieken toegereikt te krijgen, worden deze stappen alleen maar makkelijker

Service Bus, Event Hubs & Stream Analytics

Rob

Service Bus was een van de eerste services die Microsoft ooit aanbood in Azure. Dat gaat terug tot 2008, alweer 14 jaar geleden. Maar dat wil niet zeggen dat men stil heeft gezeten. Behalve een nieuwe built-in portal om de berichten op je queues te kunnen managen, ligt de focus de laatste jaren en in de nabije toekomst met name op events. Dat wil niet zeggen dat queuing een “outdated” technologie is. Alles heeft zijn plek in de moderne architectuur. Queues garanderen onder andere vaak volgorde, waar event hubs dat niet doet.

Event Streaming is not “modern” and queues are not “traditional”. Both are patterns of state-of-the-art messaging infrastructures.

Service Bus

Voor Service Bus zijn er de laatste tijd wat updates uitgekomen:

  • Minimum TLS version
    De minimale default TLS-versie is voortaan 1.2, maar je kunt het terugzetten naar oudere versies als je applicaties nog geen gebruik kunnen maken van TLS 1.2.
  • Service Bus Explorer in de portal
    Voor ServiceBus is deze “Quality of Life”-update voor developers en support net uitgekomen in preview.
  • SAS token disablen
    Je kunt nu afdwingen dat je Service Bus alleen gebruikmaakt van Azure Active Directory. Een belangrijke security update.
  • JMS & large messages
    Je kunt nu JMS (Java Message Service) gebruiken om met Service Bus te communiceren. Je hoeft hierdoor bijna niets meer te doen om een applicatie die van JMS gebruikmaakt aan te sluiten op Service Bus.

Maar uiteraard zit het team niet stil en komen er ook nog enkele interessante updates uit de komende tijd:

  • Scale sets
    Je kunt partities maken om tot 256 messaging units te schalen (het waren er 16), waardoor de throughput vele malen groter wordt. De volgorde van berichten kan dan echter niet meer gegarandeerd worden.
  • Consistent low latency queues
    De storage van een queue gaat, net als bij Event Hubs, “lokaal” bij de Service Bus gehost worden. Dat betekent dat de storagelaag van Azure Storage verdwijnt en er minder latency is.
  • Queue purge vanaf een bepaalde tijd
    Ingebouwd in de nieuwe Service Bus Explorer.
  • Durable terminus
    Verbindingen met o.a. containers zullen hierdoor stabieler worden.

Event Hubs

Dat Event Hubs snel is, wisten we eigenlijk al. Kafka is daarbij een van de grootste concurrenten. Wat Microsoft daarbij slim doet is ervoor zorgen dat Kafka-gebruikers gemakkelijk aan kunnen sluiten op Event Hubs op dezelfde manier als ze gewend zijn. Er wordt zelfs gewerkt aan een beleving in de portal die nagenoeg hetzelfde is als de “Kafka-experience”.

Volgens de data van Microsoft zou Event Hubs wel consistenter zijn dan Kafka. Het is vooral consistenter in snelheid en throughput.

Heel lang wordt er echter niet stilgestaan bij Event Hubs. Men wil vooral door met Stream Analytics.

De meest recente toevoeging voor Event Hubs is Self Service dedicated clusters, waardoor je nu zelf je clusters kan upscalen en downscalen.

De roadmap van Event Hubs ziet er als volgt uit:

Stream Analytics

Met Stream Analytics kun je realtime analyses uitvoeren op gestreamde data. Je maakt onder andere gebruik van een vertrouwde SQL-achtige taal om deze analyses uit te kunnen voeren die ook nog eens uit te breiden is met behulp van C# en Javascript. Deze analyses kunnen onder andere gebruikt worden om anomalies in je systemen snel te ontdekken.

Stream Analytics is iets waar Microsoft duidelijk op tijd bij was. Microsoft staat samen met Google op eenzame hoogte volgens Forrester. Het is dan ook niet zo raar dat men hier meer over te vertellen heeft dan over Event Hubs.

Het is dan ook niet voor niets dat er veel nieuwe toevoegingen te zien zijn bij Stream Analytics, zoals het automatisch schalen en een mogelijkheid om geen code te gebruiken in een editor.

En ook voor de komende tijd zit je gebakken. Onder andere de performance krijgt een behoorlijke boost.

Power Automate

Rob

En dan is er nog het Power Platform van Microsoft met o.a. Power Automate. Tools voor de “citizen developers”. Het moet werknemers binnen een bedrijf de mogelijkheid bieden om zelf kleine taken te kunnen automatiseren, zonder dat er bijvoorbeeld een heel supportmodel voor opgetuigd hoeft te worden.

De sessie gaat vooral over het feit dat Azure Integration Services en het Power Platform elkaar aan moeten vullen. Het allermoeilijkste werk wordt gedaan in Azure Integration Services, waarbij bijvoorbeeld een systeem ontsloten wordt met behulp van API’s in API management. Vervolgens kan iemand met behulp van Power Apps of Power Automate gebruik maken van die API’s en de data gebruiken voor het automatiseren van de kleinere, vaak afdelingsspecifieke, taken.

Bicep script en Liquid maps

Twee zaken waar we nog even kort bij stil willen staan zijn Bicep en Liquid maps. Met name Bicep kwam heel veel voorbij. Het is een nieuwe manier van Microsoft om gemakkelijk je services te kunnen deployen naar Azure. Daarnaast kwamen ook soms nog Liquid Maps voorbij, waarvan ook hieronder nog een voorbeeldje te vinden is.

Bicep

Rob

Bicep is een Domain Specific Language (DSL) om Azure infrastructuur deployments te automatiseren, bijvoorbeeld voor het gebruik in je CICD pipelines. De taal verschilt van de ARM (JSON) templates in meerdere opzichten. Het duidelijkste verschil is de overzichtelijkere en gebruiksvriendelijkere code. Maar ook andere zaken zoals idempotentie, een orchestrator die automatisch de volgorde bepaalt en het feit dat je de deployment in aparte kleine modules kan schrijven, zijn allemaal erg handig.

Ik gebruikte het nog niet en gebruikte vooral Terraform, maar ik ga nu in ieder geval met Bicep aan de slag.

Hieronder een voorbeeld van een Bicep file, met daaronder de veel grotere JSON template.

Bicep

param location string = resourceGroup().location
param storageAccountName string = 'toylaunch${uniqueString(resourceGroup().id)}'

resource storageAccount 'Microsoft.Storage/storageAccounts@2021-06-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Hot'
  }
}

JSON Template

{
  "$schema": "<https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#>",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    },
    "storageAccountName": {
      "type": "string",
      "defaultValue": "[format('toylaunch{0}', uniqueString(resourceGroup().id))]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2021-06-01",
      "name": "[parameters('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "StorageV2",
      "properties": {
        "accessTier": "Hot"
      }
    }
  ]
}

Liquid Maps

Sjoerd

Ook in cloudintegratie is data mapping belangrijk, zodat de systemen onafhankelijk van elkaar blijven. Tevens kun je met data mapping ook “Messaging pattern” implementeren.

In de cloud zijn er verschillende mogelijkheden om de data mapping voor elkaar te krijgen

  • BizTalk maps (geconverteerd naar XSL 1.0)
  • XSLT mapping (2.0, 3.0)
  • Liquid Template

Waarbij BizTalk maps en XSLT mapping het beste werkt voor XML to XML, is Liquid mogelijk voor JSON, XML en text (oa. CSV). Bovenstaande mapping methodes zijn niet overal toe te passen, zo is bijvoorbeeld de BizTalk map alleen mogelijk in een Logic App, terwijl XSLT mapping en Liquid Template mogelijk zijn in zowel een Logic App als in Azure Function te gebruiken zijn.

Liquid is een data mapper gebaseerd op een template, zoals hieronder in het voorbeeld goed te zien is, is dat de JSON al wordt opgebouwd. Tussen de “{{}}” worden de parameters gevuld welke uitgelezen dienen te worden vanuit de bron. Wat je daarmee als voordeel hebt, is dat je gelijk ziet hoe het resultaat van de mapping eruit komt te zien.

Liquid map template

{%- assign deviceList = content.devices | Split: ', ' -%}

{
   "fullName": "{{content.firstName | Append: ' ' | Append: content.lastName}}",
   "firstNameUpperCase": "{{content.firstName | Upcase}}",
   "phoneAreaCode": "{{content.phone | Slice: 1, 3}}",
   "devices" : [
      {%- for device in deviceList -%}
         {%- if forloop.Last == true -%}
         "{{device}}"
         {%- else -%}
         "{{device}}",
         {%- endif -%}
      {%- endfor -%}
   ]
}

Etesian op weg naar landelijke dekking met 50 medewerkers

Sinds mei 2022 heeft Etesian, een IT-Consultancy bedrijf van oorsprong uit hartje Kerkrade, maar liefst 50 vakbekwame professionals uit het hele land aan boord die maatwerkoplossingen leveren voor diverse IT-vraagstukken. Met deze enorme groei in medewerkers is het bedrijf op weg naar een landelijke dekking binnen Nederland. 

Ondanks de schaarste op de arbeidsmarkt is Etesian, met de inzet van verschillende kanalen, in staat geweest te blijven groeien. Van een groot eigen netwerk tot samenwerkingsverbanden met onderwijsinstellingen en recruitment partners die helpen met het vinden van professionals met de juiste kennis en ervaring. 

Actief in Nederland en België

Momenteel is Etesian actief in Nederland en België en helpen zij klanten met het implementeren van complexe IT-oplossingen. Het ontwikkelen van applicaties, e-Commerce oplossingen, de integratie van ERP-data of financiële gegevens met andere systemen, het implementeren van Microsoft 365 of het managen van diverse  IT-projecten. Een kleine greep uit de diensten die deze 50 professionals leveren aan klanten in binnen- en buitenland.  

Familiegevoel

Etesian is gebleken, ook in tijd van schaarste, op de werknemersmarkt een aantrekkelijke werkgever te zijn door marktconforme arbeidsvoorwaarden, persoonlijk ontwikkelplannen en extra opleidingsbudget. De meerdere teambuildingsactiviteiten naast het werk en een informele cultuur zorgen voor het onmiskenbare familiegevoel.  

Toekomst

In 2015 hebben Lars Schmitz en Sven Engels samen Etesian opgericht met als doel uit te groeien tot een middelgrote IT-dienstverlener. In Kerkrade begonnen als een kleine lokale IT-speler en in zeven jaar tijd uitgegroeid tot een graag geziene IT-partner in het zuiden en midden van het land. De komende periode wil Etesian doorgroeien naar een middelgrote speler zodat zij heel Nederland kunnen voorzien van hun expertise. 

De invloed van COVID-19 op projectmanagement

De pandemie heeft een grote impact op de (nieuwe) manier van werken. Door het (al dan niet verplicht) thuiswerken, heeft ook de projectmanager de manier van werken aan moeten passen. Het praatje bij het koffieapparaat wordt gemist. En even snel langs die collega voor de laatste details is er niet meer bij. Behoren de brainstormsessies met een ‘brownpaper’ wand tot de verleden tijd? Zomaar een paar voorbeelden die zeker niet zijn verdwenen, maar wel op en andere creatieve wijze tot stand moeten komen. Ook als de pandemie voorbij is, zal projectmanagement niet meer fulltime naar het kantoorbureau terugkeren. Hoe ziet projectmanagement er na het coronatijdperk uit?

Samenwerken op afstand

De afgelopen twee jaar heeft ons geleerd dat veel projecten prima uitgevoerd kunnen worden vanuit een thuiswerkomgeving. In het begin van de coronacrisis was het misschien even wennen, maar de digitale projectmeeting is inmiddels een vast ritueel geworden.

Dit blijft waarschijnlijk zo, grotendeels vanwege het aantal bewezen voordelen van thuiswerken voor werkgevers en werknemers: van verhoogde productiviteitsniveaus tot verbeterde flexibiliteit. Daar waar thuiswerken drie jaar terug vaak nog onderwerp van discussie was, hebben ondernemingen nu te maken met een ongekende verschuiving naar werken op afstand. Kantoortuinen worden steeds meer ingericht op het hybride werken van de toekomst.

Het zorgde echter ook voor uitdagingen. Werken op afstand verandert immers de dynamiek van de werkplek volledig. Daardoor zijn bepaalde werkprocessen moeilijker uitvoerbaar, zoals spontane samenwerking, teambuilding en andere projectmanagementtaken. Dit werkt doorgaans veel beter wanneer alle teamleden aanwezig zijn om ideeën met elkaar uit te wisselen.

Wees creatief en vind andere of betere manieren om hetzelfde niveau van samenwerking aan te moedigen als projectteamleden zich niet in dezelfde ruimte bevinden. Dit zal grotendeels afhangen van het feit of we effectief met elkaar kunnen communiceren.

Communicatie

Het thuiswerken kan een negatief effect hebben op de betrokkenheid van werknemers. Effectieve communicatiekanalen zijn daarom noodzakelijk om ervoor te zorgen dat projectmedewerkers goed gemotiveerd blijven. Zo raken online communicatietools om te chatten (Teams, Slack), videotools (Teams, Zoom), organisatietools (Trello, Confluence) en brainstormingtools (Miro) steeds meer ingebed op de werkplek.

Veranderende rol door technologie

In de loop der jaren heeft technologie een ware revolutie teweeggebracht in de manier waarop projecten worden beheerd. Tien jaar geleden zou het idee om effectief vanuit huis te werken niet serieus zijn genomen. Nog maar twee jaar geleden gold het samen in één ruimte zitten als voorwaarde voor een succesvol agile project.

Cloudgebaseerde systemen worden steeds vaker gebruikt bij projectbeheer. Als zodanig zullen software, gegevensopslag, servertoegang, beheersystemen en een hele reeks HR-taken veel meer gestroomlijnd worden, waardoor de interne werkomgeving van veel bedrijven en projecten verandert.

Deze verandering roept echter ook vragen op over gegevensbeveiliging, waardoor het projectsupport juist ook over die vaardigheden dient te beschikken om de online toegang en aanwezigheid van hun bedrijf in de cloud te beschermen. 

Niet één projectmanagementmethode

Een decennium terug zouden projectmanagers al hun projecten volgens één en dezelfde projectmanagementmethode managen… Projectmanagers zijn nu veel flexibeler en creëren vaak ‘gecombineerde benaderingen’ (agile en waterval), afgestemd op de behoeften van hun specifieke project en de verschillende projectmanagementmethodes. Deze gecombineerde projectmanagement benaderingen blijken over het algemeen succesvoller dan het traditionele proces met één raamwerk.

Maak jezelf daarom proactief vertrouwd met een reeks ‘andere’ potentieel bruikbare methodes. Je weet tenslotte nooit wanneer een op samenwerking gebaseerde aanpak van pas kan komen.

Sta open voor de toekomst

COVID-19 heeft misschien een catastrofaal effect gehad op de projectmanagementsector, maar het heeft bedrijven ook de mogelijkheid geboden om hun strategieën voor de toekomst te onderbreken, na te denken en te heroverwegen. In plaats van vast te blijven zitten in het verleden en een verouderd werkmodel, is dit het ideale moment om naar de toekomst te kijken en de trends te omarmen die de industrie de komende maanden biedt. Bijvoorbeeld door:

  • op technologie gebaseerde systemen te implementeren;
  • werk vanuit huis te optimaliseren, en;
  • eventuele nieuwe vaardigheden te leren en toe te passen.

Daarmee zorg je ervoor dat niet alleen jouw bedrijf de pandemie overleeft, maar ook dat jij jezelf verder ontwikkelt en groeit.

Zo organiseer je individuele licenties met Microsoft PowerShell

Wij maken bij Etesian veelvuldig gebruik van Microsoft365 diensten en daarvoor zijn natuurlijk licenties nodig. Deze licenties kenden we voorheen toe aan iedere collega. Eind 2018 kondigde Microsoft aan dat we gebruik konden maken van groepslicenties (group based licensing).

Kortgezegd betekent dit dat je licenties kunt toekennen op basis van groepslidmaatschap in plaats van aan individuele gebruikers. Dit maakt het beheer van licenties een stuk gemakkelijker.

Echter waren we wel vergeten om onze individueel toegekende licenties netjes op te ruimen. Tijd voor een Microsoft PowerShell script! Het resultaat van het PowerShell script is een comma separated bestand zoals in onderstaand voorbeeld:

Zo organiseer je individuele licenties met Microsoft PowerShell

Dit bestand hebben we vervolgens gebruikt om onze licenties te organiseren.

Het PowerShell script is gebaseerd op het script dat door Microsoft zelf beschikbaar wordt gesteld. Tevens maken we dankbaar gebruik van de lijst die door Brad Wyatt beschikbaar wordt gesteld op zijn blog ‘The Lazy Administrator’ met vertalingen voor de producten.

Zo organiseer je individuele licenties met Microsoft PowerShell


Funtion Get-LicenseAssignmentInfo {
<#
.SYNOPSIS
This function will check if a license is assigned directly to a user, if the license is group based, or both
#>
param(
    [Parameter(Mandatory=$True, ValueFromPipeLine=$false)][Microsoft.Online.Administration.User]$User,
    [Parameter(Mandatory=$True, ValueFromPipeLine=$false)][string]$SkuId
)
BEGIN {
    [bool]$LicenseIsAssignedDirectly = $false;
    [bool]$LicenseIsGroupBased = $false;
    [string]$Sku = '';
}
PROCESS {
    #Retrieve the correct license from the user object
    [Array]$licenses = $User.Licenses | Where-Object {$_.AccountSkuId -eq $SkuId}
    if ($licenses.Count -eq 0) {
        throw "License could not be found"
    }
    elseif ($licenses.Count -gt 1) {
        throw "License found more than once"
    }
    else {
        #GroupsAssigningLicense contains a collection of IDs of objects assigning the license
        #This could be a group object or a user object (contrary to what the name suggests)
        #If the collection is empty, this means the license is assigned directly - this is the case for users who have never been licensed via groups in the past
        if ($licenses[0].GroupsAssigningLicense.Count -eq 0)
        {
            $LicenseIsAssignedDirectly = $true
            $LicenseIsGroupBased = $false
        }
        #If the collection contains the ID of the user object, this means the license is assigned directly
        #Note: the license may also be assigned through one or more groups in addition to being assigned directly
        if (($licenses[0].GroupsAssigningLicense | Where-Object {$_ -eq $user.ObjectId}).Count -gt 0) {
            $LicenseIsAssignedDirectly = $true
        }
        #If the collection contains at least one ID not matching the user ID this means that the license is inherited from a group.
        #Note: the license may also be assigned directly in addition to being inherited
        if (($licenses[0].GroupsAssigningLicense | Where-Object {$_ -ne $user.ObjectId}).Count -gt 0) {
            $LicenseIsGroupBased = $true;
        }
    }
    $Sku = $SkuId -split ":" | Select-Object -Last 1
    $SkuFriendlyName = $SkuFriendlyNames.Item($Sku)
}
END {
    return New-Object -Type PSObject -Property @{
        'User' = $User.UserPrincipalName
        'SkuId'= $SkuId
        'Sku' = $SkuFriendlyName
        'LicenseIsAssignedDirectly' = $LicenseIsAssignedDirectly
        'LicenseIsGroupBased' = $LicenseIsGroupBased
    }
  }
}
$SkuFriendlyNames = @{
"O365_BUSINESS_ESSENTIALS"           = "Office 365 Business Essentials"
"O365_BUSINESS_PREMIUM"              = "Office 365 Business Premium"
"DESKLESSPACK"                       = "Office 365 (Plan K1)"
"DESKLESSWOFFPACK"                   = "Office 365 (Plan K2)"
"LITEPACK"                           = "Office 365 (Plan P1)"
"EXCHANGESTANDARD"                   = "Office 365 Exchange Online Only"
"STANDARDPACK"                       = "Enterprise Plan E1"
"STANDARDWOFFPACK"                   = "Office 365 (Plan E2)"
"ENTERPRISEPACK"                     = "Enterprise Plan E3"
"ENTERPRISEPACKLRG"                  = "Enterprise Plan E3"
"ENTERPRISEWITHSCAL"                 = "Enterprise Plan E4"
"STANDARDPACK_STUDENT"               = "Office 365 (Plan A1) for Students"
"STANDARDWOFFPACKPACK_STUDENT"       = "Office 365 (Plan A2) for Students"
"ENTERPRISEPACK_STUDENT"             = "Office 365 (Plan A3) for Students"
"ENTERPRISEWITHSCAL_STUDENT"         = "Office 365 (Plan A4) for Students"
"STANDARDPACK_FACULTY"               = "Office 365 (Plan A1) for Faculty"
"STANDARDWOFFPACKPACK_FACULTY"       = "Office 365 (Plan A2) for Faculty"
"ENTERPRISEPACK_FACULTY"             = "Office 365 (Plan A3) for Faculty"
"ENTERPRISEWITHSCAL_FACULTY"         = "Office 365 (Plan A4) for Faculty"
"ENTERPRISEPACK_B_PILOT"             = "Office 365 (Enterprise Preview)"
"STANDARD_B_PILOT"                   = "Office 365 (Small Business Preview)"
"VISIOCLIENT"                        = "Visio Pro Online"
"POWER_BI_ADDON"                     = "Office 365 Power BI Addon"
"POWER_BI_INDIVIDUAL_USE"            = "Power BI Individual User"
"POWER_BI_STANDALONE"                = "Power BI Stand Alone"
"POWER_BI_STANDARD"                  = "Power-BI Standard"
"PROJECTESSENTIALS"                  = "Project Lite"
"PROJECTCLIENT"                      = "Project Professional"
"PROJECTONLINE_PLAN_1"               = "Project Online"
"PROJECTONLINE_PLAN_2"               = "Project Online and PRO"
"ProjectPremium"                     = "Project Online Premium"
"ECAL_SERVICES"                      = "ECAL"
"EMS"                                = "Enterprise Mobility Suite"
"RIGHTSMANAGEMENT_ADHOC"             = "Windows Azure Rights Management"
"MCOMEETADV"                         = "PSTN conferencing"
"SHAREPOINTSTORAGE"                  = "SharePoint storage"
"PLANNERSTANDALONE"                  = "Planner Standalone"
"CRMIUR"                             = "CMRIUR"
"BI_AZURE_P1"                        = "Power BI Reporting and Analytics"
"INTUNE_A"                           = "Windows Intune Plan A"
"PROJECTWORKMANAGEMENT"              = "Office 365 Planner Preview"
"ATP_ENTERPRISE"                     = "Exchange Online Advanced Threat Protection"
"EQUIVIO_ANALYTICS"                  = "Office 365 Advanced eDiscovery"
"AAD_BASIC"                          = "Azure Active Directory Basic"
"RMS_S_ENTERPRISE"                   = "Azure Active Directory Rights Management"
"AAD_PREMIUM"                        = "Azure Active Directory Premium"
"MFA_PREMIUM"                        = "Azure Multi-Factor Authentication"
"STANDARDPACK_GOV"                   = "Microsoft Office 365 (Plan G1) for Government"
"STANDARDWOFFPACK_GOV"               = "Microsoft Office 365 (Plan G2) for Government"
"ENTERPRISEPACK_GOV"                 = "Microsoft Office 365 (Plan G3) for Government"
"ENTERPRISEWITHSCAL_GOV"             = "Microsoft Office 365 (Plan G4) for Government"
"DESKLESSPACK_GOV"                   = "Microsoft Office 365 (Plan K1) for Government"
"ESKLESSWOFFPACK_GOV"                = "Microsoft Office 365 (Plan K2) for Government"
"EXCHANGESTANDARD_GOV"               = "Microsoft Office 365 Exchange Online (Plan 1) only for Government"
"EXCHANGEENTERPRISE_GOV"             = "Microsoft Office 365 Exchange Online (Plan 2) only for Government"
"SHAREPOINTDESKLESS_GOV"             = "SharePoint Online Kiosk"
"EXCHANGE_S_DESKLESS_GOV"            = "Exchange Kiosk"
"RMS_S_ENTERPRISE_GOV"               = "Windows Azure Active Directory Rights Management"
"OFFICESUBSCRIPTION_GOV"             = "Office ProPlus"
"MCOSTANDARD_GOV"                    = "Lync Plan 2G"
"SHAREPOINTWAC_GOV"                  = "Office Online for Government"
"SHAREPOINTENTERPRISE_GOV"           = "SharePoint Plan 2G"
"EXCHANGE_S_ENTERPRISE_GOV"          = "Exchange Plan 2G"
"EXCHANGE_S_ARCHIVE_ADDON_GOV"       = "Exchange Online Archiving"
"EXCHANGE_S_DESKLESS"                = "Exchange Online Kiosk"
"SHAREPOINTDESKLESS"                 = "SharePoint Online Kiosk"
"SHAREPOINTWAC"                      = "Office Online"
"YAMMER_ENTERPRISE"                  = "Yammer Enterprise"
"EXCHANGE_L_STANDARD"                = "Exchange Online (Plan 1)"
"MCOLITE"                            = "Lync Online (Plan 1)"
"SHAREPOINTLITE"                     = "SharePoint Online (Plan 1)"
"OFFICE_PRO_PLUS_SUBSCRIPTION_SMBIZ" = "Office ProPlus"
"EXCHANGE_S_STANDARD_MIDMARKET"      = "Exchange Online (Plan 1)"
"MCOSTANDARD_MIDMARKET"              = "Lync Online (Plan 1)"
"SHAREPOINTENTERPRISE_MIDMARKET"     = "SharePoint Online (Plan 1)"
"OFFICESUBSCRIPTION"                 = "Office ProPlus"
"YAMMER_MIDSIZE"                     = "Yammer"
"DYN365_ENTERPRISE_PLAN1"            = "Dynamics 365 Customer Engagement Plan Enterprise Edition"
"ENTERPRISEPREMIUM_NOPSTNCONF"       = "Enterprise E5 (without Audio Conferencing)"
"ENTERPRISEPREMIUM"                  = "Enterprise E5 (with Audio Conferencing)"
"MCOSTANDARD"                        = "Skype for Business Online Standalone Plan 2"
"PROJECT_MADEIRA_PREVIEW_IW_SKU"     = "Dynamics 365 for Financials for IWs"
"STANDARDWOFFPACK_IW_STUDENT"        = "Office 365 Education for Students"
"STANDARDWOFFPACK_IW_FACULTY"        = "Office 365 Education for Faculty"
"EOP_ENTERPRISE_FACULTY"             = "Exchange Online Protection for Faculty"
"EXCHANGESTANDARD_STUDENT"           = "Exchange Online (Plan 1) for Students"
"OFFICESUBSCRIPTION_STUDENT"         = "Office ProPlus Student Benefit"
"STANDARDWOFFPACK_FACULTY"           = "Office 365 Education E1 for Faculty"
"STANDARDWOFFPACK_STUDENT"           = "Microsoft Office 365 (Plan A2) for Students"
"DYN365_FINANCIALS_BUSINESS_SKU"     = "Dynamics 365 for Financials Business Edition"
"DYN365_FINANCIALS_TEAM_MEMBERS_SKU" = "Dynamics 365 for Team Members Business Edition"
"FLOW_FREE"                          = "Microsoft Flow Free"
"POWER_BI_PRO"                       = "Power BI Pro"
"O365_BUSINESS"                      = "Office 365 Business"
"DYN365_ENTERPRISE_SALES"            = "Dynamics Office 365 Enterprise Sales"
"RIGHTSMANAGEMENT"                   = "Rights Management"
"PROJECTPROFESSIONAL"                = "Project Professional"
"VISIOONLINE_PLAN1"                  = "Visio Online Plan 1"
"EXCHANGEENTERPRISE"                 = "Exchange Online Plan 2"
"DYN365_ENTERPRISE_P1_IW"            = "Dynamics 365 P1 Trial for Information Workers"
"DYN365_ENTERPRISE_TEAM_MEMBERS"     = "Dynamics 365 For Team Members Enterprise Edition"
"CRMSTANDARD"                        = "Microsoft Dynamics CRM Online Professional"
"EXCHANGEARCHIVE_ADDON"              = "Exchange Online Archiving For Exchange Online"
"EXCHANGEDESKLESS"                   = "Exchange Online Kiosk"
"SPZA_IW"                            = "App Connect"
"WINDOWS_STORE"                      = "Windows Store for Business"
"MCOEV"                              = "Microsoft Phone System"
"VIDEO_INTEROP"                      = "Polycom Skype Meeting Video Interop for Skype for Business"
"SPE_E5"                             = "Microsoft 365 E5"
"SPE_E3"                             = "Microsoft 365 E3"
"ATA"                                = "Advanced Threat Analytics"
"MCOPSTN2"                           = "Domestic and International Calling Plan"
"FLOW_P1"                            = "Microsoft Flow Plan 1"
"FLOW_P2"                            = "Microsoft Flow Plan 2"
"CRMSTORAGE"                         = "Microsoft Dynamics CRM Online Additional Storage"
"SMB_APPS"                           = "Microsoft Business Apps"
"MICROSOFT_BUSINESS_CENTER"          = "Microsoft Business Center"
"DYN365_TEAM_MEMBERS"                = "Dynamics 365 Team Members"
"STREAM"                             = "Microsoft Stream Trial"
"EMSPREMIUM"                         = "ENTERPRISE MOBILITY + SECURITY E5"
}
#Connect-MsolService

$licenses = @()
 

#find all users and list all licenses
Get-MsolUser -All `
    | Where-Object {$_.UserPrincipalName -like '*etesian.nl'} `
    | Sort-Object UserPrincipalName `
    | ForEach-Object {

    $user = $_;
    $user.Licenses | Foreach-Object {

    $licenseAssignedInformation = LicenseAssignmentInfo -User $user -SkuId $_.AccountSkuId

    $licenses += $licenseAssignedInformation

    }

}

#Output the licenses to a CSV file
$licenses | Select-Object User, SkuId, Sku, LicenseIsAssignedDirectly, LicenseIsGroupBased | Export-Csv "C:\Temp\Licenses.csv" -NoTypeInformation -Delimiter ';'

Meer weten, neem dan contact met ons op!