Taco Steemers

A personal blog.


In case you have doubts about putting your (hobby) stuff out there

There is going to be someone out there who is a good fit for what you made. They will like it, and even though you might not know they exist, and they forget about you the moment a notification comes in on their phone, something good was accomplished there.

What is HTTP, actually? What happens when we access a web page

What is HTTP, actually? A short description the Hypertext Transfer Protocol and what happens when we want to access a web page.

Starting up: low friction, minimal process and minimal tools

Preserving project speed and enjoyment -- We can keep up a high iteration speed by keeping things simple and only introducing tools and processes when we absolutely have to.

Title keywords make company websites easier to find later on

It is a good idea to put some keywords in your landing page title. Without keywords in the title I can't find you anymore next week when I need you.

Catching an exception from an annotation on a JAX-RS resource

An exception resulting from an annotation cannot be caught in a regular try / catch block because the result of the annotation is computed before our code is executed.

Checking checksums

This page is about file checksums for situations where the distributor of the file also provides the checksum. If available, we always want to compare a given checksum with the checksum of the file we downloaded.

Thinking about how to organise my writing

Thinking out loud about where to place notes, as opposed to blog posts, and how to get them easy to find.

Automatically blocking a git commit if we detect a known mistake

It is possible to automatically block a git commit if it makes a known mistake. This can be done with a pre-commit hook.

Avoid unmaintained and undifferentiated forks on your repository hosting profile

By forking many projects some people end up with too much on their profile page. Their original projects are hard to find. If you want to check out a project you can make a local clone. When you fork a project online, you are offering that project in that state. People might take you up on your offer and start using it as-is. You have a responsibility there.

Diagramming can be a valuable tool for thinking as well as communication

Words alone are sometimes not sufficient. Diagrams can help us understand a situation in new ways, assisting with our thinking as well as communication. If you don't diagram already, try it out!

On clarifying the status of demoed products

Giving a demonstration of a future product or feature can be a great way to check if development is on the right track. Unfortunately stakeholders don't always understand that a demo can be very far from a finished product.

Some files and information should not be in source control

Which are they, what should we do with them instead, and how can we avoid mistakes?

Prefer to create constructive or uplifting conversations at work

It is healthy to discuss negative parts of situations. When we are part of such a discussion, it is good if we can turn it in to an uplifting or constructive conversation.

Dark and light web themes: consider using a hybrid CSS/JS implementation

Instead of using either CSS media queries for operating system theme preferences or a Javacript-based theme selector we can use both. An automatic CSS-based switching and JS-based switching where the user can choose.

Usability anti-pattern: no controls in fullscreen

A fullscreen window needs to have an obvious button to get out of fullscreen mode.

Thoughts on self-managing teams

Self-managing teams are great. People feel their shared responsibility and come together to solve problems. There should be someone that is authorized to make decisions on specific topics. And the topic 'people' should not be forgotten.

Git: how can we squash (flatten) commits

In this article I explain two ways in which we can squash commits.

The Twitter share button does not need javascript

When we let Twitter generate a 'tweet this button' for our website, Twitter includes a javascript file. We don't need to include this javascript file. The share button can be just a hyperlink. Twitter uses the referrer header to determine which URL the user wants to tweet about.

The javascript …

Git pull without merge

Applying remote changes to our local branch without an additional merge commit

When (not) to squash commits

In this article I want to talk about squashing (flattening) a series of commits in to one commit. Squashing is a good tool to have, but not everything should be squashed away. Intermediate commit history can have value.

Please use root relative URLs

Resources with URLs that do not specify the root will not be loaded if the user visits a subpage directly.

Creating a new website without breaking search engine results and bookmarks

When moving our website to a different CMS or framework we might end up with a different URL structure. This is bad for search engine rankings and people's bookmarks. To avoid problems we can use rewrite rules and redirect rules.

Notes on making drag-and-drop functionality with Javascript

When I wanted to make drag and drop functionality I found there were plenty of tutorials out there. I am adding a few more words on the topic because I had to find workarounds for issues that I didn't find mentioned elsewhere.

Why can the data we just stored on disk not be read?

Data that our code writes to a file may not be accessible immediately after writing. One reason is that some output stream implementations use buffers, and prefer to write out their whole buffer in one go. In these situations, if we want to be sure the data can be read …

How to avoid displaying directory listings on your website

Our websites contain directories with files that are not usually read by humans. Examples are directories containing Javascript files or files for XML feeds. Sometimes we want to disallow directory listings for these directory contents.

How to include HTML documents inside HTML documents

There are two good ways to include our static HTML documents inside the main HTML documents that make up our website. One is to include them server-side, before the server sends the main HTML document to the web browser. The other is client-side loading where we have Javascript on the …

Mistakes will be made

I occasionally make a mistake in a professional environment. Mistakes will be made, that is just how it is. We do have to keep looking at how we handle them and make sure we are not making a habit of it. Here I share some of my thoughts on the …

Still searching for a daily use computer that just works

Unfortunately there have been several problems with my macOS install, and with the Unix ports I install with brew.

There has been a time when the Finder appeared to not get an updated list of inodes. After moving files with the Finder the files appeared in the original directory as …

Quick text manipulation, a practical `sed` example

Suppose you have received a 10k line file of text in a format that is difficult for you to work with, like XML. You want to get some specific information from that file, and realize that getting that information by hand will take a long while.

In some cases an …

I found myself working hard instead of smart

Ah, the often mentioned "work smart, not hard". As well as "not invented here"...

I had set out to re-launch my blog. Somehow, in my enthusiasm, I ended up writing a static website generator almost to completion. The only two remaining topics were the two topics that most looked like …

Connecting to your printer on a Linux system

If you are using a GNU/Linux distribution and are having trouble finding your printer in print dialog screens, the following may be of help to you. Make sure you have CUPS installed, the Common Unix Printing System. Start cups first, on my system this can be done by executing …

Programmatically creating scalable vector graphics (SVG)

This is a small note on programmatically creating scalable vector graphics. For this we use Python with svgwrite which was simply the first tool I found. We will not be comparing different tools.

When creating graphics for posters, programs, or the web there are some advantages in using scalable vector …

Setting up a Secure FTP server (SFTP)

We want to set up a secure FTP server (let us call this 'the service', to avoid confusion). This service will receive backups. The service (and it's clients) don't need access to any unrelated commands. So we will make an empty PATH and won't let the users perform a normal …

Some notes on trying out Crashplan, Duplicati and BackupPc

Observations after testing Crashplan.

The Crashplan test-setup has not been able to connect for a while. As a result these notes are partially from memory and could not be revisited. The user interface is confusing, buttons are placed far away from the context they operate in. There are buttons that …

Configuring an Apache installation for use with the SSL protocol

Is your ownCloud client saying Failed to connect to ownCloud: Connection refused?

A possible cause could be that the webserver that is serving your ownCloud does not have SSL enabled. In this note I will describe how I did that for my own Apache 2 install. If you do a …

Memory for the SuperMicro X7SPA-H-D525-0

I recently bought the SuperMicro X7SPA-H-D525-0 motherboard. The Micron memory listed as compatible by SuperMicro was no longer available. I then checked Kingston's compatibility list. It listed two options for this motherboard.

Some blog- and forum posts mentioned using similar Kingston memory for similar SuperMicro motherboards. Taking the Atom D525 …

Switched from Wordpress to Pelican

Over the past two years I've posted some writing on a different domain. That is a shared Wordpress site which hasn't been seeing much love (the other party hasn't made any posts). I've been thinking of also writing some smaller notes, things that I tend to forget and then have …

Something to think about when storing or processing files in your web app

Recently I saw code that looked like the following:

function handleFileRequest
    variable file = getFile('storage/${params.filename}')
    send file

This code readily accepts a user-supplied piece of information to retrieve a file. This is very wrong, luckily it was caught in a code review.

It is wrong because it allows …

Weak references, are you sure you want to use them?

One of the projects that I have been working on lately is a standard C# codebase, a framework of sorts, for a particular niche category of software.  This is for a client that develops and uses a lot of this kind of applications in-house. Many of these have been written …

Why I like the filesystem as an interface to the OS

A short while ago I made a post about a daemon that I have developed. This daemon needs information about connected storage devices and their mounted partitions. There is currently only a Linux version. I tried to develop a Windows version too (in the same code base even) but that …

USB Storage Back Up Daemon

I am working an a daemon (service) that will automatically back up all mounted partitions on USB storage devices, with or without prior configuration for a particular drive. In it's simplest form, the daemon will back up any USB storage device that you plug in. This includes thumb drives and …

A small script to help organize your torrent downloads

A couple of days ago I wrote a small housekeeping script (in Python), that lists stale torrent data. I use this to help clean up the directory that I let my torrent application store the torrent data to. The script will list those files that are not part of the …

Setting up network shares with NFS and Linux systems

For quite a while, I have had a backup solution that I was not happy with. I have now remedied this. I am using a small server, a HP Proliant Microserver N40L. I tend to use Debian-based GNU/Linux systems at home. While I do eventually want my new solution …

Minimal Linux and Windows process spawn test

I am working on a small backup utility meant to add value to other, proper backup utilities. At the least, I want this program to run on any vanilla install of a (semi-) recent Linux or Windows desktop version. I would also like to keep a small file-size, and prefer …