<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Adriaan Knapen</title>
    <link>https://aknapen.nl/</link>
    <description>Recent content on Adriaan Knapen</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-US</language>
    <lastBuildDate>Tue, 27 May 2025 00:00:00 +0000</lastBuildDate>
    
	<atom:link href="https://aknapen.nl/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Lines of Code is a Bad Productivity Metric, also for AI</title>
      <link>https://aknapen.nl/blog/20250527-more-code-less-value-lines-of-code-is-a-bad-productivity-metric-also-for-ai/</link>
      <pubDate>Tue, 27 May 2025 00:00:00 +0000</pubDate>
      
      <guid>https://aknapen.nl/blog/20250527-more-code-less-value-lines-of-code-is-a-bad-productivity-metric-also-for-ai/</guid>
      <description>“One Amazon engineer said his team was roughly half the size it had been last year, but it was expected to produce roughly the same amount of code by using A.I.” — New York Times, May 25, 2025
 Generative AI is transforming software engineering. Used well, it can boost productivity, uncover solutions faster, and streamline development workflows. I’m all for that.
But in the rush to adopt AI, we’re also seeing the resurgence of a long-debunked idea: that developer productivity can be measured by the amount of code written.</description>
    </item>
    
    <item>
      <title>How I Backup My Entire GitHub Account</title>
      <link>https://aknapen.nl/blog/20240617-how-i-backup-my-entire-github-account-using-actions/</link>
      <pubDate>Mon, 17 Jun 2024 00:00:00 +0000</pubDate>
      
      <guid>https://aknapen.nl/blog/20240617-how-i-backup-my-entire-github-account-using-actions/</guid>
      <description>I&amp;rsquo;ve spent a lot of time building everything which I store in GitHub, so I want to make sure I have a backup of it. Here&amp;rsquo;s how I have been doing it for years now, and it has worked like a charm!
The Problem With the increasing reliance on GitHub for storing code and managing projects, it&amp;rsquo;s crucial to have a backup strategy to prevent loss of data. GitHub provides redundancy and reliability, but having your own backup gives you peace of mind and control over your data.</description>
    </item>
    
    <item>
      <title>Unit Testing Cross-Fetch, TypeScript and Jest</title>
      <link>https://aknapen.nl/blog/20231006-unit-testing-cross-fetch-typescript-and-jest/</link>
      <pubDate>Fri, 06 Oct 2023 00:00:00 +0000</pubDate>
      
      <guid>https://aknapen.nl/blog/20231006-unit-testing-cross-fetch-typescript-and-jest/</guid>
      <description>Writing unit-tests for a library which overwrites the global fetch function can be a bit tricky. This post will show you how to do it.
The Problem When using cross-fetch in TypeScript, you will most likely import it like this:
import crossFetch from &amp;quot;cross-fetch&amp;quot;  This is because the cross-fetch package is not the default export, but rather a named export. However, when you want to mock the cross-fetch, you can&amp;rsquo;t use the jest.</description>
    </item>
    
    <item>
      <title>Global declarative Cronjobs in Nest.js with Bull</title>
      <link>https://aknapen.nl/blog/20230205-declarative-static-bull-jobs-in-nestjs/</link>
      <pubDate>Sun, 05 Feb 2023 00:00:00 +0000</pubDate>
      
      <guid>https://aknapen.nl/blog/20230205-declarative-static-bull-jobs-in-nestjs/</guid>
      <description>There are several ways on how to schedule repeatable jobs in Nest.js. The official documentation suggests using @nestjs/schedule. This library offers an elegant CRON-based API, which should be familiar to most Nest.js developers.
Look at how neat and simple this declarative API is:
@Injectable() export class MyService { @Cron(&amp;quot;* * * * * *&amp;quot;) handleCron() { console.log(&amp;quot;CRON is triggered&amp;quot;); } }  With one line, we now have a method which will trigger whenever our heart desires.</description>
    </item>
    
    <item>
      <title>Optimizing Docker container image size when using Yarn</title>
      <link>https://aknapen.nl/blog/20221023-optimizing-container-image-size-for-yarn-install/</link>
      <pubDate>Sun, 23 Oct 2022 00:00:00 +0000</pubDate>
      
      <guid>https://aknapen.nl/blog/20221023-optimizing-container-image-size-for-yarn-install/</guid>
      <description>In this post, I&amp;rsquo;m briefly going over how installing dependencies in your Docker image using yarn install can cause unnecessary bloat, why it happens, and the simple steps to take on how to fix it.
Backstory time The other day, I was containerizing a simple Node.js project. The MVP Dockerfile was as simple as it gets:
FROM node:16.18.0-alpine COPY ./package.json ./yarn.lock ./ RUN yarn install --immutable --production  Yet, after adding a development dependency the resulting image size bloated from 57.</description>
    </item>
    
    <item>
      <title>Rendering Azure Log Analytics make-series in Grafana</title>
      <link>https://aknapen.nl/blog/20220916-render-azure-log-analytics-make-series-in-grafana/</link>
      <pubDate>Fri, 16 Sep 2022 00:00:00 +0000</pubDate>
      
      <guid>https://aknapen.nl/blog/20220916-render-azure-log-analytics-make-series-in-grafana/</guid>
      <description>Not too long ago I got into building a metrics dashboard for our resources in Azure. Specifically, we&amp;rsquo;re running our applications in Azure Kubernetes Services and want to have a dashboard to track how everything is doing. Since we already have our logs emitted to Azure Log Analytics we could use that to build our metrics.
Writing the queries to fetch our data from Log Analytics is rather straight forward.</description>
    </item>
    
    <item>
      <title>Collect Emails from NextJS Form in HubSpot</title>
      <link>https://aknapen.nl/blog/collect-emails-from-nextjs-form-in-hubspot/</link>
      <pubDate>Thu, 27 May 2021 00:00:00 +0000</pubDate>
      
      <guid>https://aknapen.nl/blog/collect-emails-from-nextjs-form-in-hubspot/</guid>
      <description>Collect Emails from NextJS Form in HubSpot HubSpot is an awesome platform to centrally track all the contacts your company is doing business with. At ClaimR we have been using HubSpot with great success, as it allows all our team members to have a single source of truth.
During the last few weeks I have been working on our renewed website. NextJS is a no-brainer at this point, as it is an amazing framework which spits out static HTML wherever it can - perfect for fast loading landing pages - while also giving you the flexibility to mix in some dynamic content and other server side logic.</description>
    </item>
    
    <item>
      <title>How to Build a Plugin for Docusaurus v2</title>
      <link>https://aknapen.nl/blog/how-to-build-a-plugin-for-docusaurus-v2/</link>
      <pubDate>Sat, 10 Oct 2020 00:00:00 +0000</pubDate>
      
      <guid>https://aknapen.nl/blog/how-to-build-a-plugin-for-docusaurus-v2/</guid>
      <description>Cool stuff: This blogpost got featured on the official Docusaurus blog! 🎉
Now, go read on about creating your own Docusaurus plugin 🚀.
 At ClaimR we have been using Docusaurus v2 for our developer and documentation website for a while now. After a couple of months of using it we can confidently say that we’re very happy with our choice.
Docusaurus comes batteries-included, so you immediately get a lot of value, while it is flexible enough to tailor it to your needs if there’s something you like differently.</description>
    </item>
    
    <item>
      <title>Always-Free Managed PostgreSQL Databases Reviewed</title>
      <link>https://aknapen.nl/blog/always-free-managed-postgresql-databases/</link>
      <pubDate>Tue, 25 Aug 2020 00:00:00 +0000</pubDate>
      
      <guid>https://aknapen.nl/blog/always-free-managed-postgresql-databases/</guid>
      <description>Edit: This content in this post is already a couple of years stale. Heroku Postgres is not free anymore. However, in the mean time Fly.io now features Fly Postgres. It&amp;rsquo;s a bit more hands-on than many managed Postgres services. However, it does fit within your free-tier and does not oversell your shared database.
So, if you don&amp;rsquo;t mind getting your hands dirty, then it&amp;rsquo;s a very solid option.</description>
    </item>
    
    <item>
      <title>Prod&#43;&#43;[3]: Leaner Search Using DuckDuckGo !Bangs</title>
      <link>https://aknapen.nl/blog/prod-plus-plus-3-duckduckgo-bashes/</link>
      <pubDate>Fri, 21 Aug 2020 00:00:00 +0000</pubDate>
      
      <guid>https://aknapen.nl/blog/prod-plus-plus-3-duckduckgo-bashes/</guid>
      <description>In this mini-series I will walk you through some habits I replaced in recent times, which have shown to pay off and make me a more productive programmer/power-user of my computer. All these changes should be easy to gradually adopt, so I would highly recommend checking them out. If you’ve any suggestions ☝️ or improvements ✍️, then email me at hi@aknapen.nl or reach out using any of the social media listed here.</description>
    </item>
    
    <item>
      <title>Server Sided GraphQL with Apollo Client</title>
      <link>https://aknapen.nl/blog/server-sided-graphql-with-apollo-client/</link>
      <pubDate>Tue, 30 Jun 2020 00:00:00 +0000</pubDate>
      
      <guid>https://aknapen.nl/blog/server-sided-graphql-with-apollo-client/</guid>
      <description>During development of the dashboard I’m making for ClaimR I found myself in the position where I wanted to query a GraphQL endpoint from my backend. (It’s a NextJS powered project, hence the server sided logic is written in Node.) So, I started looking for GraphQL clients but with little success.
graphql-request seemed like a match, with what looked like a recent release earlier this year. However, on closer inspection it’s pretty clear that it has been abandoned.</description>
    </item>
    
    <item>
      <title>Prod&#43;&#43;[2]: Managing Kubernetes Context Files</title>
      <link>https://aknapen.nl/blog/prod-plus-plus-2-shell-improvement-managing-kubernetes-context-files/</link>
      <pubDate>Thu, 28 May 2020 00:00:00 +0000</pubDate>
      
      <guid>https://aknapen.nl/blog/prod-plus-plus-2-shell-improvement-managing-kubernetes-context-files/</guid>
      <description>In this mini-series I will walk you through some habits I replaced in recent times, which have shown to pay off and make me a more productive programmer/power-user of my computer. All these changes should be easy to gradually adopt, so I would highly recommend checking them out. If you’ve any suggestions ☝️ or improvements ✍️, then email me at hi@aknapen.nl or reach out using any of the social media listed here.</description>
    </item>
    
    <item>
      <title>Prod&#43;&#43;[1]: Master Git</title>
      <link>https://aknapen.nl/blog/prod-plus-plus-1-master-git/</link>
      <pubDate>Thu, 30 Apr 2020 00:00:00 +0000</pubDate>
      
      <guid>https://aknapen.nl/blog/prod-plus-plus-1-master-git/</guid>
      <description>In this mini-series I will walk you through some habits I replaced in recent times, which have shown to pay off and make me a more productive programmer/power-user of my computer. All these changes should be easy to gradually adopt, so I would highly recommend checking them out. If you’ve any suggestions ☝️ or improvements ✍️, then email me at hi@aknapen.nl or reach out using any of the social media listed here.</description>
    </item>
    
    <item>
      <title>Prod&#43;&#43;: A Mini-Series on How to be More Productive</title>
      <link>https://aknapen.nl/blog/prod-plus-plus-a-mini-series-on-how-to-be-more-productive/</link>
      <pubDate>Wed, 29 Apr 2020 00:00:00 +0000</pubDate>
      
      <guid>https://aknapen.nl/blog/prod-plus-plus-a-mini-series-on-how-to-be-more-productive/</guid>
      <description>In this mini-series I will walk you through some habits I replaced in recent times, which have shown to pay off and make me a more productive programmer/power-user of my computer. All these changes should be easy to gradually adopt, so I would highly recommend checking them out. If you’ve any suggestions ☝️ or improvements ✍️, then email me at hi@aknapen.nl or reach out using any of the social media listed here.</description>
    </item>
    
    <item>
      <title>Containerizing Secret Hitler.io</title>
      <link>https://aknapen.nl/blog/containerizing-secret-hitler-io/</link>
      <pubDate>Tue, 28 Apr 2020 00:00:00 +0000</pubDate>
      
      <guid>https://aknapen.nl/blog/containerizing-secret-hitler-io/</guid>
      <description>Game Night Some weeks ago I found myself wanting to play the social deduction game Secret Hitler. There’s an excellent online version Secret Hitler.io, which during the ongoing Corona related lock-down is a great find. There was one issue: Sign-ups were disabled that night because of excessive demand. So instead of a game night we went on to see if we could deploy our own version, as the website is open source anyway.</description>
    </item>
    
    <item>
      <title>Continuous Deploy your own Matrix instance</title>
      <link>https://aknapen.nl/blog/matrix-ansible-continuous-deployment/</link>
      <pubDate>Tue, 23 Jul 2019 00:00:00 +0000</pubDate>
      
      <guid>https://aknapen.nl/blog/matrix-ansible-continuous-deployment/</guid>
      <description>Bye Whatsapp A while ago I decided to move away from Whatsapp and Telegram in favor of Matrix, mostly to improve my privacy and get more control over my own data - yes Whatsapp, I&amp;rsquo;m looking at your limited backup options. But enough about the idealistic tech vision and more about tech itself.
To get the most out of Matrix it is best to deploy an instance for yourself. It&amp;rsquo;s quite an involved process, however luckily there&amp;rsquo;s an Ansible playbook which does most of the heavy lifting for you.</description>
    </item>
    
  </channel>
</rss>