“Your connection is not private!”

Een geldig certificaat plaatsen op je testomgeving in minder dan 5 minuten tijd? Het kan. En Alain de Klerk, een van onze Managing Directors & SharePoint Architect, legt het je snel uit:

“Bij de ontwikkeling van een nieuw IT-product of -oplossing maken we vaak van tevoren een proof-of-concept, een testomgeving en/of een acceptatie-omgeving. Op die manier kunnen we gebruikers al in een vroeg stadium betrekken bij het ontwikkelingsproces en hen om hun mening vragen.

In veel gevallen zie ik dat men aan gebruikers vraagt om de ‘SSL warning’ (of SSL-waarschuwing) te negeren op de testomgeving bij het testen van een webapplicatie. De ontwikkelaar of beheerder heeft simpelweg nog geen certificaat geïnstalleerd of gebruikt een zogenaamd self-signed certificate. En ik moet eerlijk bekennen dat ik zelf hier ook schuldig aan was.

Echter leren we gebruikers op deze manier een gedrag aan om waarschuwingen te negeren; die waarschuwing is er natuurlijk niet voor niets. Daarom laat ik zien dat je in 5 minuten, zonder kosten, een valide certificaat kan aanvragen bij een legitieme Certificate Authority. Dit gaan we doen met PowerShell en ACME; PoSh-ACME (https://poshac.me/docs/v4/).

De eerste stap is om een API Token aan te maken in Cloudflare. Wanneer je nog geen Cloudflare account hebt dan kan je deze gratis aanmaken.

De precieze stappen om een API Token aan te maken staan hier beschreven. Naast Cloudflare worden er ook tal van andere DNS-aanbieders ondersteund. De volledige lijst vind je hier

Vervolgens openen we een Microsoft PowerShell-venster en voeren we de volgende commando’s uit:

Het laatste commando opent de Windows Verkenner en toont de locatie waarin het certificaat is opgeslagen. Dit certificaat kun je vervolgens gebruiken om de applicatie in je testomgeving te beveiligen. En voilà… een valide certificaat op je testomgeving in minder dan 5 minuten tijd!”

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/[email protected]' = {
  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:

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.


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 ';'

Full Stack Angular/.Net ontwikkelaar

Heb je een passie voor front-end development met Angular? Ken je Angular van binnen en van buiten en ben je bekend met de valkuilen van Enterprise Applications gemaakt met Angular, dan is deze functie iets voor jou. Wij zijn per direct op zoek naar ambitieuze Angular ontwikkelaars voor web-development opdrachten.

Profiel

Als Angular ontwikkelaar ben allereerst een goede en creatieve ontwikkelaar. Bovendien hebben JavaScript, TypeScript, HTML en CSS geen geheimen meer voor jou. In deze functie ben je verantwoordelijke voor de innovatie, realisatie en het beheer van de complexe informatiesystemen voor onze leuke klanten. Hierbij ligt de focus op front-end ontwikkeling werk in Angular, daarnaast beschik je over voldoende kennis van back-end systemen om een full-stack oplossing neer te zetten.

Als developer achterhaal je proactief de behoeften en wensen van de gebruikers binnen de organisatie. Deze vertaal je naar functionele en technische ontwerpen, afhankelijk van de omvang van het project. Vervolgens realiseer, programmeer en test je je oplossingen, om daarna samen met je klant te bespreken of het gewenste resultaat bereikt is.

Criteria

We zijn op zoek naar een Angular ontwikkelaar die:

  • Een relevant diploma heeft, minimaal HBO niveau;
  • Minimaal drie jaar relevante werkervaring;
  • Kennis heeft van relevante tooling zoals NodeJs, Git, RxJs, Angular Material, TSLint, Karma, Jest, Cypress, Nx, NgRX, Swagger, Docker, Webpack, NPM, etc.
  • Affiniteit heeft met duidelijke user interfaces en UX;
  • Op de hoogte is van de laatste omwikkelingen op het gebied van front-end frameworks en het leuk vind deze op de voet te volgen;
  • Analytisch onderlegd is en gedreven is om te blijven leren;
  • Goede communicatieve vaardigheden heeft;

Ervaring met C#, .NET Framework, .NET Core, WebAPI en/of SQL zijn sterke pré’s.

Wat bieden wij?

Naast een marktconform salaris en uitstekende secundaire arbeidsvoorwaarden (Auto, laptop en telefoon), bieden wij jou een inspirerende werkomgeving met een enthousiast team van collega’s. De hoge kwaliteit van onze dienstverlening bereiken we door optimaal aandacht te schenken aan onze medewerkers en een klimaat te creëren waarin je je thuis voelt en alle kansen krijgt om mee te groeien. We vinden persoonlijke ontwikkeling erg belangrijk binnen Etesian en investeren hier dan ook graag in.

Verder bieden we nog:
– Ruim leasebudget;
– Jezelf blijven ontwikkelen met budget voor opleidingen en cursussen;
– 26 vakantiedagen per jaar, pensioenopbouw en collectieve kortingen;
– Salarisindicatie: medior € 2.800 – € 4.200, senior € 4.000+

Naast dit basissalaris werken wij met een maandelijkse provisie en jaarlijkse bonus op basis van inzet.

Solliciteren

Ben je geïnteresseerd in deze functie? Solliciteer dan direct door je gegevens, CV en motivatiebrief op te sturen naar [email protected]

Microsoft .NET ontwikkelaar

Wij zijn per direct op zoek naar ambitieuze .NET ontwikkelaars voor web en mobile opdrachten. In deze diverse functie als .Net ontwikkelaar ben je verantwoordelijk voor de innovatie, realisatie en het beheer van de complexe informatie systemen voor een van onze leuke klanten.

Profiel

Als developer achterhaal je proactief de behoeften en wensen van de gebruikers binnen de organisatie. Deze vertaal je naar functionele en technische ontwerpen, afhankelijk van de omvang van het project. Vervolgens realiseer, programmeer en test je je oplossingen,
om daarna samen met je klant te bespreken of het gewenste resultaat bereikt is.

Criteria

We zijn op zoek naar een .NET ontwikkelaar die: – een relevant diploma heeft, minimaal op HBO niveau;
– minimaal twee jaar relevante werkervaring heeft;
– bij voorkeur C#, ASP.NET en MVC beheerst;
– Analytisch onderlegd is en gedreven is om te blijven leren;
– Goede communicatieve vaardigheden heeft;
– Ervaring met Winforms, Webforms, JQuery zijn sterke pré’s.

Wat bieden wij?

Naast een marktconform salaris en uitstekende secundaire arbeidsvoorwaarden (Auto, laptop en telefoon), bieden wij jou een inspirerende werkomgeving met een enthousiast team van collega’s. De hoge kwaliteit van onze dienstverlening bereiken we door optimaal aandacht te schenken aan onze medewerkers en een klimaat te creëren waarin
je je thuis voelt en alle kansen krijgt om mee te groeien. We vinden persoonlijke ontwikkeling erg belangrijk binnen Etesian en investeren hier dan ook graag in.

Salarisindicatie:
– Junior profiel: Vanaf € 2.300
– Medior profiel: Vanaf € 3.000
– Senior profiel: Vanaf € 4.000

Naast dit basis salaris werken wij met een maandelijks provisie en jaarlijkse bonus op basis van inzet.

Solliciteren

Ben je geïnteresseerd in deze functie? Solliciteer dan direct door je gegevens, CV en motivatiebrief op te sturen naar [email protected]



PHP ontwikkelaar

In deze diverse functie als medior of senior PHP ontwikkelaar ben je verantwoordelijk voor de innovatie, realisatie en het beheer van de complexe informatiesystemen voor een van onze leuke klanten in de Randstad.

Profiel
Als developer achterhaal je proactief de behoeften en wensen van de gebruikers binnen de organisatie. Deze vertaal je naar functionele en technische ontwerpen, afhankelijk van de omvang van het project. Vervolgens realiseer, programmeer en test je je oplossingen, om daarna samen met je klant te bespreken of het gewenste resultaat bereikt is.

Criteria
We zijn op zoek naar een PHP ontwikkelaar die:

– Een relevant diploma heeft, minimaal op HBO niveau;
– Minimaal vier jaar relevante werkervaring heeft als PHP ontwikkelaar;
– Bij voorkeur kennis er ervaring heeft van Slim 3 en MySQL;
– Bij voorkeur ervaring heeft met WebShops en/of AWS;
– Analytisch onderlegd is en gedreven is om te blijven leren;
– Goede communicatieve vaardigheden heeft;

Ervaring met jQuery, Angular, ReactJs zijn sterke pre’s.

Wat bieden we?
Naast een marktconform salaris en uitstekende secundaire arbeidsvoorwaarden (Auto, laptop en telefoon), bieden wij jou een inspirerende werkomgeving met een enthousiast team van collega’s. De hoge kwaliteit van onze dienstverlening bereiken we door optimaal aandacht te schenken aan onze medewerkers en een klimaat te creëren waarin je je thuis voelt en alle kansen krijgt om mee te groeien. We vinden persoonlijke ontwikkeling erg belangrijk binnen Etesian en investeren hier dan ook graag in.

Salarisindicatie: medior € 2.400 – € 3.000, senior € 3.000 – 4.500

Naast dit basissalaris werken wij met een maandelijks provisie en jaarlijkse bonus op basis van inzet.

Solliciteren
Ben je geïnteresseerd in deze functie? Solliciteer dan direct door je gegevens, CV en motivatiebrief op te sturen naar [email protected]