Firefox on Ubuntu has crackling sound

I’m running Xubuntu 21.04 and when I’m listening to mixcloud and visit certain sites using Firefox the sound starts to crackle and gets distorted. It can only be resolved by restarting Firefox, but restarting the browser is quite annoying. I added a bookmark to the URL “about:RestartRequired” to make the process a little less painful. I had to restart my browser fairly often until I found the following fixes to resolve the problem and find the cause. ...

June 20, 2021 · Maurits van der Schee

Minesweeper written in Go using Ebiten

It was already 7 years ago that I wrote Minesweeper for a the iPad on the iPad (using Pythonista). It was an implementation of Minesweeper in Python and it was optimized for touch usage. I have ported that implementation to Go using the Ebiten game engine, which can compile to Web Assembly. This project really was like a code kata and it proofed to be a great learning experience and a lot of fun to build. ...

June 15, 2021 · Maurits van der Schee

Low power computing at 8 watt idle

I’ve built another PC. This time I wanted to create a low power computer that could be always on. It aims to replace my NUC i7 with something powerful, silent and not too expensive. I’ve chosen an ASRock J5040-ITX motherboard with a on-board Intel J5040 CPU in an Inter-Tech ITX-601 HTPC case. This little machine is 3.2 GHz quad core with 32 GB of RAM a 1 TB SSD and costs less than 500 euro. It is a small, pretty, super fast and not too noisy little box. The case is an amazing value at 61 euros as it comes with a 60 Watt power supply with a power brick and all cables required. I run Xubuntu 20.04 LTS and it works great, I’m very pleased with the results! ...

May 5, 2021 · Maurits van der Schee

Why I use Bitlocker without TPM

Bitlocker is the Full Disk Encryption (FDE) solution in Windows, similar to FileVault in OSX and LUKS in Linux. I do advocate the use of full disk encryption on any device, but especially on devices that are prone to theft, such as laptops. In my threat model I’m using full disk encryption (solely) to prevent data theft in case of hardware theft. The power of full disk encryption lies in that it is easy to understand and reason about. Unfortunately this cannot be said about the Windows 10 (professional only) solution, unless you do what I did, as explained in this post. ...

April 4, 2021 · Maurits van der Schee

Storing JSON strings in MariaDB

In SQL every column has a name, a type and a single value (that may be NULL in some cases). These strong guarantees makes working with SQL very nice. Nevertheless people seem intrigued by these “limitations” and propose “improvements”. Some of these improvements are: The ARRAY type in SQL99 and nested arrays in SQL2003. The JSON type in MySQL the JSON/JSONB type in PostgreSQL. The XML type in SQL Server. They all weaken the guarantee that a table row has a fixed number of keys and that every key has exactly one value and that each value has a specified type. ...

March 11, 2021 · Maurits van der Schee

Installing PDO_SQLSRV on Debian 10

Installing the PHP SQL Server driver (PDO_SQLSRV) on a Debian 10 Linux system requires several steps, starting with the installation of the Microsoft ODBC Driver. Note that Debian requires TLS 1.2 and if your SQL Server does not support that you will run into “Error code 0x2746”. This post will explain how to resolve that issue. First we make sure to install the Microsoft ODBC Driver for SQL Server on Linux. ...

February 18, 2021 · Maurits van der Schee

Should table names be singular or plural?

As we all know “naming things” is jokingly named as one of the two hard problems in software engineering (the other one being “cache invalidation”). This post is about the question whether your (database) table names should be plural or singular, e.g. “posts” or “post”. You should read the following Stack Overflow post to understand that this is a heated debate: Stack Overflow: Table Naming Dilemma: Singular vs. Plural Names ...

January 2, 2021 · Maurits van der Schee

Free OTP 'soft token' written in Go

I have written open-source software that you can use as an alternative to Google/Microsoft Authenticator on any device (that Go can cross-compile for). You may (for instance) run it on your Raspberry Pi (zero) and use it as a “semi-hardware” token. The software does not (yet) support QR code scanning, so you you need to manually enter the name and secret to set up the token. Time-based One Time Passwords (TOTP) Time-based One Time Passwords (TOTP) is a technology where you agree on a shared secret with an authentication system. This shared secret is often shared via a QR code and stored in for instance a smartphone. The shared secret is combined with the UTC time in seconds in then hashed to produce a 6 digit code that is valid for 30 seconds. This is the protocol that is used by Google Authenticator and Microsoft Authenticator. ...

November 8, 2020 · Maurits van der Schee

Beelink Gemini T34 modding

I bought a “Beelink Gemini T34” mini PC for 120 EUR with 8GB RAM, 128 mSATA SSD and a N3450 quad core 2.2 Ghz CPU with an Scenario Design Power (SDP) of only 4W. It is the successor of my “Beelink T4” mini PC with 4GB RAM, 64 GB eMMC and a Z8500 quad core 2.24 Ghz CPU. I run Xubuntu 20.04 on these boxes and you can run them as a low power (headless) server or as a HTPC (Home Theater PC) for Full-HD video. In this post we will unlock the full potential of the T34, by making it run much cooler and thus faster (as this avoids CPU throttle). ...

September 11, 2020 · Maurits van der Schee

Free GDPR scanner online!

I have created a free GDPR scanner at: TQdev.com/gdpr-scanner. You can use it to see what domains are connected by your website and see who is running those domains and where they are hosted. Ideally you see only one entry with only the domain that you have entered in the web browser. In reality many websites use a lot of external services and thus also share your IP address and user agent with those services. Since this information is considered personal information this is subject to the GDPR. The GDPR says that you can only share this information if there is a need and a legal ground to do so OR a user consent. This scanner (that gives no consent) helps you identify services that information is shared with, so that you can consider whether or not you are GDPR compliant. ...

August 5, 2020 · Maurits van der Schee