#OpenToWork Available for new opportunities! Let's build something amazing together.

Get in touch

Archive for 2020

archy

Holding on and making the best out of 2020

Again we are at the end of the year and to start with the same words from my 2019 recap. WHAT A YEAR! If you read my 2019 recap, you know that it was a personal rollercoaster. At the beginning of 2020, I had a lot of energy and was pretty excited to make it a great year.

Read more

#DevHack: Specifying what to run on Vercel dev

While developing the integration with Strava on our cycling club website, I wanted to use serverless functions to simplify the data retrieval from Strava. The website runs on Vercel, and if you’re going to test out your serverless functions locally, you will need to use Vercel its CLI. You can install the Vercel CLI by running the following command: npm i vercel -g.

Read more

#DevHack: cross-platform testing your tool on GitHub Actions

One of the Doctor’s objectives, a documentation tool that converts markdown to SharePoint pages, was to make it usable cross-platform. Initially, I created this as an internal tool for Valo and would only be used on Azure DevOps or GitHub Actions. In the first release, I focussed on making the tool available to others like you and seeing if there was any interest in it.

Read more

Doctor - the static site generator for SharePoint

I love static sites! In 2020 I have created ten production sites with various static site generators and a couple of POCs. My favorites are Hugo and Next.js. Doctor logo The story Internally in our team, we did the same. For our Valo partner/client documentation, we used mkdocs as our static site generator.

Read more

#DevHack: Open custom VSCode WebView panel and focus input

For the last two weeks, I have been working on my FrontMatter extension for Visual Studio Code. This extension helps others and myself make it easier to manage their static markdown pages’ metadata. Some time ago, I received the question to enhance the tag and category experience. As when you have many tags or categories, it is not optimal to use the selectors/pickers VSCode provides you.

Read more

Be aware adding extensions to SharePoint Content Type Hub

For one of our clients, we had a Microsoft support case open for a long time. On the client, its tenant, every time they created a new site collection, our Valo application customizers appeared automatically. Most of the time, this happened between 5-60 minutes. Internally in our Valo codebase, we do not have anything which triggers this automation.

Read more

Five tips to make you a better presenter at virtual events

I love presenting on a stage. I love to engage with people, have an audience in front of me. So you think that presenting virtually would be no big deal. Actually, it is a big deal. One of the things I miss the most is the engagement with the audience. The feeling you talk to only yourself.

Read more

#DevHack: Dismiss messaging extension dialog in MS Teams

Currently, I am developing my first “real” Microsoft Teams app with SharePoint Framework. In this app, I am making use of the new messaging extension capability. Info what are messaging extensions? While developing a form in my extension, I wanted to cancel and submit a button. When I started implementing the cancel button, its onClick event, I was lost in how to close the dialog.

Read more

#DevHack: Optimizing initial load JS from Next.js

Now that my PimpYourOwnBike website has launched. I started looking at where I can do some optimizations. When looking at the Next.js build output, I spotted a red number in the First Load JS section. First load JS too big That would be the first thing on my list to optimize, getting this number from red to green.

Read more

#DevHack: Create SharePoint library with the Microsoft Graph

When you are reading this, you are looking to create a SharePoint library from the Microsoft Graph. It is straightforward but a bit confusing because you will have to use the lists endpoint. When you are a SharePoint developer, we all learned that a list is not the same as a library, and lists get created under the /lists/ URL path.

Read more

My take on the Next.js framework

Last week, just went I took my bike for a ride. I got an idea. What if I create a new store for selling online personalizable bike stickers? During the two-hour bike ride, I more and more got convinced of the idea. When I was back home, I started printing a couple of stickers to test it out.

Read more

#DevHack: Configuring domains for your branches on Vercel

To prepare my new online store’s release for selling personalizable bike stickers called: Pimp Your Own Bike. I wanted to make sure that I could test out my website before merging it to the main branch. Using a predefined custom domain would be the easiest way. Highlighting my environments On Azure, I would typically use slots on the web app.

Read more

#DevHack: Getting some clarity in your site analytics

This weekend I discovered a cool new tool from Microsoft called Clarity. The tool allows you to understand how users interact with your website. It can do this by using Google Analytics integration and features like session replays and heatmaps. Info https://clarity.microsoft.com/ I was not looking for such a tool. I just bumped into it.

Read more

#DevHack: Dynamic manifests for Progressive Web App aka PWA

In the previous #DevHack, I told you how to use deep links in your PWA for Microsoft Teams. This approach I currently implemented in one of my proof of concepts. Another functionality that my POC needed to have is to have dynamic manifest creating for the PWA. Info #DevHack: Deep linking to Microsoft Teams in Android and iOS In this #DevHack, I will tell you how you can make it possible to get dynamic manifests for your PWA using Azure Static Web Apps and Azure Functions.

Read more

Running the CollabDays Benelux event on Azure Static Web App

This article recaps the CollabDays Benelux event that BIWUG and DIWUG organized together and happened on the 24th of October. We held the event virtually due to Covid-19, like most of the events in 2020. We decided that we wanted to do this as a virtual event together around May/June timeframe to make sure we could let it happen.

Read more

#DevHack: Deep linking to Microsoft Teams in Android and iOS

This week #DevHack is about opening Microsoft Teams deep links from your solution/app. For a new proof of concept, I wanted to open a chat/app from my PWA app quickly. Luckily Microsoft Teams supports this with their deep links functionality. Info Read more about Microsoft Teams deep links here: deep links documentation In the documentation, it states that you must use the https://teams.

Read more

What is the right approach to cache data in your solution?

We all want to be the fastest. We all want to make sure our apps outperform others, but what do you need to do for it? In this article, I will explain what the best approach is to cache your solutions. Important When building on top of a platform like SharePoint, you will always have to deal with the fact that you cannot be faster than the platform itself.

Read more

#DevHack: Simple caching in Node.js Azure Functions

Azure Functions do not have an out-of-the-box caching mechanism. For caching, the recommended way would be to use a distributed cache like Azure Cache or Redis. These services each come with their price tag and might be too robust for the cache you want to create or need. For Azure Function created with C#, you can use the good old memory cache.

Read more

#DevHack: Microsoft Edge - Network Console

For a long time, I loved using Postman for API testing. Ever since the Chrome apps got deprecated, the experience was not the same anymore. Since then, I have been using Charles, Insomnia, and some other tools. This week I discovered an experimental feature in Microsoft Edge which allows you to edit and replay API calls from within the browser.

Read more

SPFx issues with the new Referrer-Policy in Chrome >= 85

Since version 85 of Chrome, the default referrer policy has changed from no-referrer-when-downgrade to strict-origin-when-cross-origin. This change might have a significant impact on your SharePoint Framework solutions when they rely on the referrer header (or better, the referer header with a single “r”). What is the referrer header? Whenever your browser does an API call, the referrer header gets used to indicate the page’s origin from where it was performed.

Read more

Redesign of my blog with Tailwind

Since the beginning of 2013, I have been using the same blog theme with a couple of small changes that I did over the years. Most of the time, I would change the primary colors, but that was all. Why would you change something which works fine? When I moved from WordPress to a static site, at first, I thought it would be an excellent time to redo the design, but the migration took a bit longer, so I just ported the design to Hugo.

Read more

Running #PYOD online store with PowerPlatform and Azure

During the Corona crisis, Luise Freese and I was chatting about conferences and stickers. Nobody can get stickers these days, as all conferences are now virtual. That brought us to the crazy idea of opening our sticker store on which we want to sell stickers created for IT/Tech/DEV people. Info the store is called Pimp Your Own Device and is available at: http://pimpyourowndevice.

Read more

PnP Virtual Conference: Start UI testing your solutions

On the first of September 2020, the PnP team organized its first virtual conference. The conference had lots of great sessions, and I am sure you would have had a hard time picking the sessions you wanted to follow. You know what they say, choosing is losing. Actually, that is not true.

Read more

Parse multipart/form-data in Azure Function

While working on an internal Azure Static Web Site project, I needed to upload CSV files to an Azure Function to import data to Cosmos DB. When uploading a file to your API, the multipart/form-data content-type is used. The body’s format looks a bit “special” as it requires some parsing to get each file.

Read more

Why I picked Cypress over Selenium

For the PnP Virtual Conference, I did a talk about how to start with UI testing. During the session, someone asked me why my preference is Cypress and not Selenium. As the session was only 30 minutes, it is hard to fit every bits and piece in it. That is the intention of this article to tell you why we are using Cypress.

Read more

Retrieving the CosmosDB query continuation token in Node.js

For one of our internal tools at Valo, I am creating a portal for managing our project localizations. The portal itself will be produced as a static website and hosted on Azure Static Web App. The great thing about Azure Static Web Apps is that it comes with hosting and the ability to create Azure Functions.

Read more

Parse application/x-www-form-urlencoded in Azure Function

For a Mailchimp webhook, I had to parse the application/x-www-form-urlencoded form data to JSON. Azure Functions does not automatically do this for you, so you have to provide your parser. I knew that I had already done this, so I went on a search journey through my code. To make it easier next time, I wanted to share the code snippet with the rest of you.

Read more

Which service? Netlify vs Vercel vs Azure Static Web App

I like to use static websites. It is fun to see that so many go back to the “old” way of working, but still try to find our ways to add our content dynamically. Retro tech is hip again Last year I made my move to static with my blog, which is now running on the Azure Storage static website option and powered by Hugo and do not regret it.

Read more

Manual GitHub workflow triggers for Azure Static Web Site

In July 2020, GitHub released a new manual trigger feature for its GitHub Actions workflows. This trigger allows you to run a workflow from the UI, or you can also use it to run it via an HTTP POST request. The HTTP POST request option makes it very useful to trigger your workflow to run from an external system.

Read more

How to make local Azure Static Web App development easier

Static sites are cool again (actually for a long time), and Microsoft knows that. Their new Azure Static Web App - App Service is currently in preview. At the moment, it still misses some key functionalities, but I am sure that these will get added once they put it in GA (hopefully to be announced at Ignite in September 2020).

Read more

End-to-End testing your Microsoft Teams solutions with Cypress

For a long time, I was looking for a way to start end-to-end test solutions in Microsoft Teams. The easiest way to start running these tests is against the web experience (https://teams.microsoft.com). That way, we can use tools like Cypress. Another reason to do these E2E tests with Cypress is that internally we use Cypress for all our E2E tests.

Read more

Utility functions which you might not know existed in SPFx

Utility/helper functions, every project uses them, but how do you get them to your projects. For our products, we use a common/shared library private npm package. By sharing this package to all our products, we do not have to reinvent the wheel every time, but also have to fix things in one place when there is a bug.

Read more

Ignoring the JSON comment errors in your SPFx solutions

Something that bothers me for a long time is the comments in the SharePoint Framework component JSON manifest files. As you may know, JSON does not allow you to add comments to its content. Visual Studio Code will show some errors for it as well. VSCode comment errors in JSON I understand that comments are needed.

Read more

My setup: get to know what I use

In this article, I will tell you more about what I use during my daily work. Feel free to let me know what you are using or what you recommend. Important Updated the article in July 2021 with the new office setup. The 2021 setup My office setup in 2021 The 2020 setup My desk in the office (2020) Office Desk setup As you can see in the photo above, my setup consists of:

Read more

My review of the Jabra Evolve2 85 headset

For three months, I have waited for the Jabra Evolve2 85 to show up. During the Corona crisis, I needed a new headset to filter out all the noise my kids make at home, so that I could 100% focus on my work. A colleague told me about this headset. When I ordered it, it was not even out yet but was soon to be released.

Read more

Ringing the doorbell on your Sonos speakers

Ringing your doorbell on your Sonos speakers Ding dong!!! Earlier this week, I changed my old doorbell to the Eufy video doorbell. When it arrived and wanted to install it, I found out that my current wiring with the intercom system was not supported. Luckily the doorbell has a battery, so instead of running on power coming from the old wires, it will run on the battery for six months.

Read more

Things which only happen just before you are about to release

Hey team, are we ready to release? Yes, push the button and ship it. Why are all our tests failing? Why are our builds crashing? Why can I not access our services? Sounds familiar? It seems to be a common issue when you are just about to release your solution/project/product/…

Read more

How to use Cypress to test your SharePoint solution with an Azure AD-secured API

How to use Cypress to test your SharePoint solution with an Azure AD-secured API In January 2020, I explained my approach to how you can make use of Cypress to test out your SharePoint solutions. Cypress is great to use and simple to configure. I like the capability of running individual tests on your local machine to verify if the solution is still working as expected once you implemented changes, and do full runs after nightly builds.

Read more

DIY: Building a busy light to show your Microsoft Teams presence

For many of us, working from home is mandatory these days. For me, nothing major changed. I was already used to work from home since I joined Valo 2,5 years ago. One thing that has changed is that my children are now at home while I am working. Luckily I was prepared for it (I thought).

Read more

Running an Azure DevOps self-hosted agent on WSL

Some time ago, I migrated my blog from Wordpress to a static site by Hugo. To generate the static pages, I make use of Azure DevOps pipelines. The free tier, which gives me up to 1800 minutes/month, is enough, but not this month. When I wanted to publish my blog post from yesterday, I got the following friendly message:

Read more

Conditional publish packages to NPM via GitHub actions

While I was working on one of my hobby projects to automate our home with Homebridge, I wanted to have an easy way to publish my packages to NPM. I usually do this via Azure DevOps, but as one of the conditions to get the plugin verified is that it is published publically on GitHub, I wanted to give GitHub Actions a try.

Read more

Using the new multilingual APIs in Modern SharePoint

Currently, the Multilingual page publishing for Modern SharePoint feature is rolling out to first-release tenants. This feature allows you to create pages on communications sites in different languages. These pages get linked to each other, and with a language switcher, you can navigate from language variant to variant. Info: Microsoft 365 Roadmap status on Multilingual page publishing for Modern SharePoint: https://www.

Read more

Showing a spinner when dynamically loading resources for your SPFx property pane

In your SharePoint Framework web parts, you have the option to load resources dynamically. These resources could be data you want to fetch or dynamically load controls before the property pane panel gets shown. To achieve this, you implement the logic in the loadPropertyPaneResources method. Info: You can find more information about dynamically loading controls here: Special property pane dynamic loading.

Read more

Utilize Playwright together with Jest to cross-browser E2E test your solutions

On my journey to select the best tool for our end-to-end tests for our teams, I tested out the recently announced Playwright tool from Microsoft. This tool is the new version of Puppeteer (as the core team members moved to Microsoft). Info: The benefits of E2E tests are that it validates if your features work (or keep working when implementing changes), and also provides a more code-driven approach of documenting the features and user flows.

Read more

Quick tip: How to use dynamic variable groups in Azure DevOps YAML pipelines

The preferred way to implement pipelines these days in Azure DevOps is via YAML. Which makes the pipeline part of your code and is automatically version controlled. When you were used to the classic way of creating release pipelines, you might have used environment scoped variables. These scoped variables were great to specify to which environments you wanted to provision/install/deploy/… your solutions.

Read more

Best practice: specify the Local SharePoint results source ID to gain search control

When creating solutions based on SharePoint search, you best always define the source ID of the Local SharePoint results source with each call. By providing that source ID with each request, you make sure that the results you expect for your solutions are always the same. Which ID? The Local SharePoint results source ID you are looking for is: 8413cd39-2156-4e00-b54d-11efd9abdb89.

Read more

Why does your timer trigger Azure Function run at unforeseen times?

Why does your timer trigger Azure Function run at unforeseen times? Has it ever happened that your timer triggered Azure Function was running on unforeseen times? We had it for two functions, and could not immediately find out where or why this was triggered more than once an hour. Timer function running multiple times per hour One of the functions should run once every hour, but as you can see, sometimes it runs more.

Read more

Using Cypress for end to end testing your SharePoint solutions

Last year I already wrote an article about how you could implement visual UI tests for your SharePoint solutions by using Puppeteer in combination with Jest. I still use these tools for setting up various UI tests in our products, but a couple of months ago, a tool called Cypress caught my attention.

Read more
Back to top