Arthur De Schutter

Hello, I am Arthur!


I am a Backend developer focusing on .NET, employed @ Routty.

I use this domain (and subdomains) for my personal projects.
Hope I can link some cool stuff later.
Link to some cool stuff below.


Contact

If you really want, you can contact me via LinkedIn.


The Cool Stuff:

Meersponsoring.be, een extra centje voor onze verenigingen

Als je ooit een btw-nummer hebt aangevraagd, zoals ik een tweetal jaar geleden, herken je dit scenario hoogstwaarschijnlijk. Jij of je boekhouder heeft al het nodige papierwerk ingediend bij de Kruispuntbank van Ondernemingen, en je wacht ongeduldig op je ondernemingsnummer zodat je eindelijk aan de slag kunt.

Nog voor je het officiële document met je gloednieuwe btw-nummer in de bus ontvangt, krijg je al reclame en spam toegestuurd. Dit betekent dat nog vóór de KBO je inschrijving heeft afgerond, derden al toegang hebben tot de lijst met nieuwe ondernemingen in België.

Naar mijn mening wordt de spits afgebeten door de Interprofessionele Federatie voor Zelfstandige Werknemers. Zij sturen gewoon een factuur voor een lidmaatschap, in de hoop dat onwetende starters niet beseffen dat dit een volledig optionele aansluiting is.

Zelf vond ik het wel bijzonder dat andere bedrijven zo snel toegang hebben tot nieuwe gegevens in het KBO, dus dat wil ik ook wel eens bekijken! Blijkt dat je heel de database gewoon kan downloaden, zo gezegd zo gedaan.

Fast forward naar een vergadering van een VZW waarin ik actief ben en het gaat over onze reclameboek, we hebben de sponsorlijst van vorig jaar, een zorgvuldig geselecteerde lijst van lokale bedrijven die ons willen sponsoren in ruil voor wat reclame op onze evenementen. We bespreken of we nog bedrijven kunnen toevoegen en we spreken af als we eens gaan rondrijden. In mijn hoofd gaat een belletje ringkelen, weet je nog de KBO database die ik gedownload heb?

Heb een export gemaakt van alle bedrijven in mijn dorp, deze was niet perfect, want er stonden ook andere VZW's in maar ook internationale holdings etc, deze zijn best onwaarschijnlijk om te sponsoren dus na een tiental types te filteren heb ik een lijst met alle bedrijven in mijn dorp die eventueel willen sponsoren. Dit was wel een succes, we hebben nieuwe en meer verborgen bedrijven/ondernemers gevonden en zo onze kas wat kunnen aandikken!

Meersponsoring.be

Over heel België zijn er (jeugd)verenigingen, sportclubs en andere VZW's die lokaal actief zijn, gesteund door diezelfde lokale bedrijven. Daarom heb ik nu Meersponsoring.be gelanceerd, zodat andere verenigingen ook kunnen doen wat ik kon, gratis en voor niets. Mijn jeugd is gevormd in deze verenigingen en sportclubs, dit is dan mijn beetje dat ik terug kan geven om ervoor te zorgen dat zij morgen kunnen doen waar ze goed in zijn.

Je moet zelf het werk nog wel doen, een brief sturen of hen eens een keer opbellen, dit zijn voor ons intensieve weken en meersponsoring is geen marketing platform, ik lever alleen de data aan, nu is het aan jou!

Technicaliteiten

Dit is een project gebouwd in .NET met een frontend in Blazor, Postgres als database en alles in een Docker Compose voor een bijna F5-and-go experience. Het seeden van heel de KBO-databank vereiste wel wat trial and error, want op een performante manier meer dan 15 miljoen lijnen inserten is niet evident. Ik heb de vraag gesteld hoe dit beter kon aan een gastspreker op Techorama, en hij zei: "If you only have to do it once, does it really matter?"

Met zoveel data en soms wat joins is het wel belangrijk om slimme indexes te maken, maar ik sta toch versteld dat het zo performant is.

Dit wordt gehost op een Hetzner VPS, waar het me bijna geen geld kost. Samen met andere projectjes die ik host, heb ik nog geen performance issues tegengekomen.


Reviewing Reviews with AI: The Making of GoodreadsLunatics

While browsing Reddit, I stumbled upon a community called GoodreadsLunatics, a place where people post pictures of the most forward-thinking individuals from LinkedIn. You know the type and probably have some people like that on your feed.

You know where people can also share their forward opinions? That’s right, Goodreads! A mostly okay platform where people can rate the books they read, write optional reviews, and engage in some social aspects, like any other social media.

The Idea:

A game where you get a funny review, and you need to guess which book it is! Lame? Maybe. But what I was really interested in was Blazor, the new web framework from Microsoft that allows me to stay within my Microsoft technology cave.

Step 0: Getting the Data

Goodreads has an API, surprisingly, but it’s pretty limited in functionality and did not provide the large datasets I was looking for. So, scraping it was! I found a list of the 100 most-reviewed books and scraped 30 one-star reviews, then 30 two-star reviews, and so on up to five stars. Is the scraper technologically advanced? No. There were some minor hurdles due to loading times and anti-scraper measures, but nothing too difficult. In no time, I had all the information from the 100 most-reviewed books, along with some handpicked books I personally had read. The reviews followed as well. That’s 111 books times 30 reviews for each rating (5), resulting in a nice catalog of reviews. I started with a SQL Server database.

Step 1: Data Classification

With almost 16,000 reviews, I still had to filter out the funny ones. Reviews in other languages or long-winded sincere reviews were not needed. So, to follow the AI Hype, I wrote an AI review program in C# using Semantic Kernel, which was surprisingly straightforward. First, I hooked it up to a local LLM, which did the job just fine, but its idea of "funny" was not really what I was looking for. I switched out my local LLM with OpenAI's ChatGPT. Still using Semantic Kernel, I was scared of an outrageous credit card bill, but to my surprise, after some testing and rating all the 16K reviews, my bill was less than 5 EUR—a surprise, to say the least.

Step 3: Building the UI

Blazor is like the middle child of Microsoft. It doesn’t get enough attention, but I hope it survives, unlike all the other UI frameworks from Microsoft. I’m a backend developer at heart, but we plow through it. With frameworks like Bootstrap or MudBlazor, it becomes bearable, and we have a functioning interface with some simple logic to show, load, and get some feedback from the user. I’ll keep this section short because I haven’t found anything new here. I still like Blazor, I guess?

Step 4: Getting the Funny Ones

I let AI do the grunt work by rating each review. Then I built a simple admin panel to manually approve each review. The classification was not really good enough to just pump into the game and be done with it. I built in a mechanism to ask the user if the review was funny and planned on integrating an ELO-like system where subsequent negative feedback lowers your score more than just one and vice versa—just like chess. But let’s wait until I get some real user interaction.

Step 5: Hosting

I know some Azure services are free, but I wanted to use Docker with Docker Compose. I have a NAS at home, which worked fine, but unfortunately, my internet speed isn’t too great and was very slow to load the covers of the books. So, I rented a Hetzner server for 3.50 a month, and after some intro to Linux and refreshing my command-line skills, I got it up and running, migrated the data, and set up a Cloudflare tunnel to get it working.

Step 6: Done

This project took a long time, not because it was hard or too much work but because I was busy with other projects, some freelancing, and life in general. I’m glad I picked it up, and it is in a state where it is functional. Of course, you can build and build and build, but I am just going to launch it and see how it goes.

Thanks for reading.

⚠️ Note: This project is no longer live unfortunately