tspi.at

This page contains short articles about projects I'm doing myself or that friends of mine have expressed some interest in and for which I've decided to write short summaries. It also contains some short notes on how to solve some particular problems to keep an easy to access repository for friends and other people who might have the same problems.

Please note that many of these articles are written late at night or in short breaks so if you spot any errors any correction is welcome.

The topics covered include:

Some source-code of hobby projects and/or partially externally used code as well as some unfinished stuff that I've released under BSD or BSD-like licenses can be found in my GitHub repositories. Most of the finished and released projects are automatically built for every release and every GitHub commit by Jenkins Pipelines on dynamically created Xen virtual machines for FreeBSD (amd64, arm6, aarch64), Linux (amd64) and Windows (amd64) as well as automatically tested by the pipeline scripts (using Unit-Testing for components, Frama-C with it's wp plugin against RTEs and to prove certain correctness constraints on C applications as well as Selenium with Java to emulate users on Web applications using chromedriver). I plan to auto deploy the artifacts in near future to a public artifact repository (like this webpage is automatically deployed on every commit into the corresponding repository).

Since someone complained. Yes this page has been rebuilt into a non dynamic static webpage. This has been done to reduce server load and simply reduce unnecessary computational overhead. Since there is currently not much interactive content besides some tools that perform server-side calculations it has proven to be much more reliable and computationally inexpensive to use static sites. I've developed the strong opinion that a static site driven by an static site generator combined with a Jenkins build solution as well as git as SCM is suited for many applications that do not expose any external user interactivity and are way easier to manage, have a smaller attack surface and are much more maintainable than CMS based solutions.

If you like to read books on interesting subjects you can also refer to my list of recommended books

COVID-19 statistics

Due to the situation in Europe I've added some automatically updated graphs to somehow visualize the severity of the COVID-19 outbreak. These are of course by no means guaranteed to be valid and no important differences like community structure, healthcare capabilities, different testing methods have been included.

Latest articles

Cherenkov radiation summary

28 Sep 2020 - tsp

A short summary about the basic idea behind Cherenkov radiation

Maxwell equation summary

22 Sep 2020 - tsp

A short summary about the basic properties of Maxwell equations, the resulting electromagnetic wave equations and commonly used gauges (Lorenz, Coulomb).

A look at the pastry distributed hashtable

19 Sep 2020 - tsp

This blog post takes a look at the pastry distributed hashtable. This is a hashtable that allows resilient and scaling distributed key value stores and that can be used to build a variety of applications on top.

Some Gaussian integrals in 1 dimension

11 Sep 2020 - tsp

Short summary of various commonly used Gaussian integrals (1 dimensional) most of the time not shown in school textbooks.

Cheap spectrum analyzer protocol

06 Sep 2020 - tsp

This blog post describes the protocol used by many currently sold cheap spectrum analyzer boards as far as I've been able to gather information.

Comparison of generic data serialization methods

24 Aug 2020 - tsp

A summary and short comparison of various generic (non application specific) data serialization techniques and formats

LoRA WAN device activation (OTAA and ABP)

19 Aug 2020 - tsp

Minimal description of the two possible activation procedures of LoRA WAN device activation and the meaning of device activation for the network. This article has been written since the difference between OTAA and ABP as well as the reasoning seems to be a problem for some developers.

Simple XML serialization and deserialization in C#

19 Aug 2020 - tsp

Since a student of mine struggled realizing simple structured serialization and deserialization to and from XML in C# I decided to put together a small tutorial.

LoRA WAN stuff often not seen

18 Aug 2020 - tsp

A short summary of LoRA WAN stuff that's often not seen by device and application manufacturers and developers. This blog post tries to give a short overview of network behavior and internals.

Recovering MySQL or MariaDB database via dump and restore

14 Aug 2020 - tsp

This blog post summarizes the steps for disaster recovery on MariaDB or MySQL in case the database system doesn't start up any more or contains damaged table definitions which might even prevent one from dropping tablespaces or databases.

A simple home-built epoxy counter-top

09 Aug 2020 - tsp

Short blog post about the casting of a simple epoxy countertop with embedded sink.

How stuff works - Line power distribution and protective measures in Europe (consumer side)

03 Aug 2020 - tsp

Since it seems to be a huge mystery to many people this blog post tries to summarize some of the parts relevant to the consumer side of power grid systems.

Automatic plant watering and illumination (smallest version)

26 Jul 2020 - tsp

In this blog article I'm describing a small automated plant watering solution that's used indoor to grow basil, capsicum and chili pepper indoor.

Z, ABCD, S and T parameters in two port networks

12 Jul 2020 - tsp

A short summary about the different meaning and interpretation of impedance, ABCD, scattering and transfer parameters in simple (linear) two port networks.

Repairing corrupted RabbitMQ instance (VHost / experienced error, not a dets file)

11 Jul 2020 - tsp

Mini post about an unusual error when using RabbitMQ - or mnesia in general. This is something that shouldn't happen and was also not expected to happen.

Runtime swapable and upgrade-able modules in ANSI C

09 Jul 2020 - tsp

This article describes an trick that I'm using in some of my applications to allow one to exchange modules or plugins inside an application at application runtime as well as keeping old versions active as long as they're required.

Capacitance measurement with AVR (simple, fast)

09 Jul 2020 - tsp

Mini article about the measurement of capacitance with AVRs with a minimum of external components (in it's most extreme form none external components exploiting the gate capacitance of the micro-controllers input)

Using Aspell to perform spellchecking (manually and inside the build pipeline)

05 Jul 2020 - tsp

Mini article about the usage of the Aspell spell checker on FreeBSD on the command line and inside the automated build pipeline for static webpages

What (in my opinion) one can learn from Erlang/OTP for other programming languages

01 Jul 2020 - tsp

Since I'm a huge fan of the Erlang programming language and the OTP toolkit but normally aren't working with projects where Erlang is suited or in case some existing code is using already other languages and so I'm not capable of using Erlang I tried to summarize some of the things that I think one can learn from programming in Erlang/OTP even when using other programming languages. Of course this stuff is not enforced by the runtime environments and it's harder to achieve on other platforms but the approaches work nevertheless.

How to use the Webauthn API on a webpage to implement 2FA using YubiKey or TPM

01 Jul 2020 - tsp

A dive into programming using the WebAuthn API in JavaScript and the requirements on the server side to perform 2FA using HSM's like the YubiKey, platform embedded TPMs or similar solutions supported by webauthn.

3D printing NACA airfoil profiles

12 Jun 2020 - tsp

Mini Blog-Post that describes modeling 4 digit NACA airfoil profiles in OpenJSCAD

Why pure JavaScript web apps are neither the future nor a good idea

06 Jun 2020 - tsp

This is an opinion article on the future of web development. Currently there is a trend about building more and more logic into the client - even for simple tasks. That trend has been there previously and it has been a bad idea back then. This article tried to present a few arguments why I don't think that this is or should be the future of the web.

A method to write object oriented code in ANSI C

24 May 2020 - tsp

This blog post summarizes a method that can be used to develop software in the same way one would when using object oriented techniques with C++, Java or similar languages. It's based on the method used by the previously mentioned languages to implemented that stuff on bare metal.

Using an Raspberry-Pi as UMTS/LTE gateway

06 May 2020 - tsp

Since a friend required this - a short write up on how to use your Raspberry-Pi (with FreeBSD) with an UMTS/LTE modem to provide internet connectivity to your local network.

Anatomy of a typical Unix-like/Linux daemon

25 Apr 2020 - tsp

A really short introduction of the basic anatomy of a Unix-like or Linux daemon process.

WebRTC Media Streams

14 Apr 2020 - tsp

This blog post is part of a short series about WebRTC. It describes the different media sources available as well as how one can do local loopback of a datastream. Note that data transfer is not described in this blog post, only access to webcam and screen sharing streams and direct pixel manipulation.

k-Means clustering algorithm

22 Mar 2020 - tsp

Short summary about the k-means algorithm and it's usage

Simple JPEG image I/O with libjpeg

20 Mar 2020 - tsp

Short tutorial on how to use libjpeg for simple image I/O (to read and write JPEG files to/from disk or memory and represent them as simple in-memory bitmap for simple CV experiments)

NodeMCU based PIR motion sensor supporting WiFi and MQTT

19 Mar 2020 - tsp

Mini tutorial on how to use the NodeMCU Amica and a cheap PIR sensor module to build a pretty simple motion sensor that supports reporting via MQTT messages.

Frama-C predicates

06 Mar 2020 - tsp

Really short primer on ACSL predicates for formal verification of ANSI C code with Frama-C.

Frama-C with wp-dynamic and function pointers

02 Mar 2020 - tsp

How to use Frama-C static analysis and proof assitant with ACSL annotations for function pointers in ANSI C.

How this site is built with Jekyll and Jenkins

01 Mar 2020 - tsp

A short summary on how this page is built using the Jekyll static website generator as well as a really simple Jenkins job that's triggered by a GitHub webhook.

Automatic Ethernet and WiFi failover on FreeBSD

28 Feb 2020 - tsp

Short introduction on how to use lagg(4) to perform automatic seamless switching from ethernet to WiFi (when they represent the same network on the same IP subnet) and back on FreeBSD.

Neuronal network basics

25 Feb 2020 - tsp

A short introduction into neuronal networks and backpropagation

Using a bluetooth mouse with FreeBSD

18 Feb 2020 - tsp

Summary on how to enable a bluetooth mouse on FreeBSD

Simple usage of Kerberos for SSH authentication on FreeBSD

17 Feb 2020 - tsp

A short primer on how to get started using Kerberos for authentication inside your network. This includes setup of an kerberos key distribution center (KDC) on an secure host as well as of the server machines against which one will authenticate as well as the required configuration on the clients.

Selenium with Chromium and Java on FreeBSD

10 Feb 2020 - tsp

This is a short description on how to get started using Selenium with chromedriver on FreeBSD with a Java application. This can be used to develop automatic test applications for web applications or simple bots that scrape content from webpages or automate actions on the web using a full browser capable of running JavaScript, running browser plugins, etc. (Update - In addition an implementation in Python has been added to show a short draft on how one can get started with Selenium in Python as well.)

AWS first steps - How to initialize the admin IAM user and initialize CLI tools

02 Feb 2020 - tsp

Real first mini steps when using Amazon webservices. Adding 2FA to your root user, creating an administrative user, enabling 2FA there and creating access keys for CLI tools.

Using Sonoff T4EU1C non-neutral switches with own firmware

15 Jan 2020 - tsp

A short review about the T4EU1C Sonoff Switch as well as an example how to flash Sonoff basic switches with custom firmware

Getting started with node-red for home/lab/process automation

24 Dec 2019 - tsp

A short tutorial on how to setup node red and configure the first flows to be used with sonoff basic switches and other data sources as well as XMPP/MQTT interfaces and some other ideas how one can use node red in various areas

Privacy - TOR, VPN, DOH, Encryption. What's effective and what does it provide?

22 Dec 2019 - tsp

Since I often hear confusion about the level or type of privacy when I talk with people about onion routing services like TOR, tunneling services like VPN, DNS encryption via DOH, using proxyservers, using alternate DNS services, using encryption and signature, etc. I've decided to write a short blog post about that different stuff and what it provides - and what not (in my personal opinion).

Simple ESP8266 blink example with NONOS SDK and custom Makefile

02 Dec 2019 - tsp

Example on how one can use the ESP8266 NONOS SDK to build applications using a custom Makefile (i.e. not using the nested Makefiles of espressifs SDK) to build one of the most simple microcontroller projects.

Manually compiling ESP8266 applications

29 Nov 2019 - tsp

A short description on what the ESP8266-NONOS-SDK really does (step by step) to build the firmware images that get uploaded to the microcontroller via esptool.

How to use Frama-C to proof correctness of AVR microcontroller code

27 Nov 2019 - tsp

This is a short article that shows how one can use Frama-C and the WP plugin to proof correctness or some properties of ANSI C code written for AVR microcontrollers.

Some respectable TOR hidden services

11 Nov 2019 - tsp

Because it's sometimes said TOR hidden services are only used by criminals this post lists a few more credible services and some reasons why one might use them.

Clone or pull all your github repos (possible as basis for a backup)

07 Nov 2019 - tsp

A short summary on how to use the GitHub API with access tokens to mirror all your GitHub repositories and keep them up to date.

x86 and x86-64 memory models

03 Nov 2019 - tsp

A really short *unfinished* introduction into the various memory models of the x86 architecture

Using an IPv6 tunnel broker

01 Nov 2019 - tsp

How to get an IPv6 network connection working if your ISP doesn't support IPv6 even today. Also includes a short description on how to do this on an connection using dynamic endpoint adresses.

Setting up the ESP32 and ESP8266 build environment

07 Oct 2019 - tsp

Short summary on how to setup the development environment for ESP8266 (Non-OS and RTOS) as well as ESP32 (RTOS) including a short shellscript that's capable of setting up the development environment.

OpenHantek on FreeBSD for USB oscilloscope

02 Oct 2019 - tsp

A really short description on how to build OpenHantek on FreeBSD and how to configure the system - and how to create a FreeBSD port.

Configuring ADSL PPTP connection (for example with Austrian DSL providers) on FreeBSD with mpd5

25 Sep 2019 - tsp

A short summary on how to configure mpd5 to authenticate against an external PPP provider for PPPoA usage (via PPTP). This is required for authentication with most Austrian (A)DSL providers when using their modems in single user mode.

Running Android Studio (or any other X11 application) on a remote machine via X11

22 Sep 2019 - tsp

A short rant on the incapability of Android Studio to be portable over various POSIX operating systems and a hackish solution on how to keep the feeling of a local application while running it remotely on a Linux machine.

Using piezo disks for automatic bed leveling on 3D printers

11 Sep 2019 - tsp

Description of an easy way of using piezo disks as touch sensors to perform bed leveling with 3D printers or other CNC machines. This blog entry describes the most basic possible way without much external circuits (only an ATtiny13A and two resistors are used)

GIT and SVN interoperability or moving from SVN to GIT without loosing history

10 Sep 2019 - tsp

How to use the GIT client to interoperate with a remote SVN server or how to migrate an SVN repository to GIT including it's full history.

Simple digital filter design

06 Sep 2019 - tsp

A short tutorial on designing and applying digital filters.

What is Multifactor authentication (MFA) and how to use a Yubikey on FreeBSD for Web and PAM (Local, SSH, etc.) authentication

27 Jul 2019 - tsp

This article contains a short tutorial about multifactor authentication, various factors that may be used and a tutorial on how to use the Yubikey hardware token for web- and local as well as SSH (pam) authentication on FreeBSD.

How to use TOR as normal user

21 Jul 2019 - tsp

A short description how to use TOR as a normal user and what to be aware of when using TOR

How to use Frama-C to proof C code (short primer)

12 Jun 2019 - tsp

A short primer on how to use Frama-C to proof properties about C-code.

What are JSON web tokens any why would one want to use them?

26 May 2019 - tsp

Just a short description of what a JWT is, what it can do for one and how they are realized - and why one would want to use them to identify users in one's web application by using JWTs instead of session IDs.

Authenticating and signing using Austrias citizen card

25 May 2019 - tsp

A short summary on how to embed authentication and generally signing with the Austrian citizien card

Building an I2C controllable stepper driver board with DRV8825 breakout boards and ATMega328p

23 May 2019 - tsp

This is the description of a small carrier board for two DRV8825 breakout boards (or compatible) that are controlled by an AVR (ATMega328p) which runs a small (linear) motion processor that gets it's commands via I2C.

Using Git / Git Cheatsheet

07 May 2019 - tsp

A short cheat sheet on how to use the git version control system (most basic operations)

I2C communication between RaspberryPi and an AVR based I2C slave

04 May 2019 - tsp

This article explains how to use an AVR as I2C slave device (basically how to set registers for the TWI controller) and how to interface that to an RaspberryPi running FreeBSD

Topology basics

03 May 2019 - tsp

Basic definitions for topology (notes taken during various lectures)

The Blogsphere - How pingbacks work

03 May 2019 - tsp

The blogsphere is a web of interconnected websites. As usual websites are linked like all pages in the WWW but on the other hand they provide an easy way of notifying each other of being referenced by a third party. Pingback is - besides trackbacks - the (XML-RPC based) technology used for that notification.

Where does complex impedance come from?

02 May 2019 - tsp

This post describes a simple derivation of the complex inpedance formulas well known from electronics.

Using cheap 28BYJ-48 stepper with ULM2003 drivers and AVR/Arduino

30 Apr 2019 - tsp

Short explanation on how to use the 28BYJ-48 geared stepper motor with the ULM2003 7-way Darlington transistor array.

Fast ballpark calculation of maximum speed for maximum car througput (using simple high-school physics and math)

25 Apr 2019 - tsp

Something most drivers don't want to hear - a basic pallpark calculation of the optimal maximum speed that offers the maximum car througput on streets.

Using AVRs GPIO pins with avr-gcc

24 Apr 2019 - tsp

How to use the GPIO pins on the AVR microcontrollers when using avr-gcc

Comparison of TAN mechanisms and alternatives

17 Apr 2019 - tsp

This blog post should provide a short overview of TAN alternatives and methods as well as their pitfalls and security

Wie DKIM und SPF funktioniert (und weshalb Mail-Forwarding eine schlechte Idee ist)

14 Apr 2019 - tsp

This is an article (in German because of it's specific audience) about SPF and DKIM features that prevent mail spoofing and it's effects on mail forwarding

Building a simple 3D printer (and what turned out to be not so simple)

14 Apr 2019 - tsp

This article describes some of the ideas and thoughts during building my first FDM printer and which lessions have been learned from that project.

How to handle LoRA messages from thethingsnetwork from JavaEE with TTNClientJ2

10 Apr 2019 - tsp

This article is a (really) short tutorial on how one can handle messages from LoRA nodes that are routed via thethingsnetwork inside an self-contained JavaEE application.

Adding tags for indexing webpages with Jekyll

10 Apr 2019 - tsp

An easy method to add tags to your static Jekyll generated pages and blogs

Linear stepper motor control - A summary

05 Apr 2019 - tsp

A short summary of the algorithms required for linear accelerated and decelerated stepper motor control on microcontrolers.

How to setup an TOR hidden service

04 Apr 2019 - tsp

A short description how to setup a TOR hidden service or an stealth hidden service and why one would want to do that even if one doesn't offer illegal content

Getting started with STM32F401RE Nucleo starter board on FreeBSD

27 Mar 2019 - tsp

How to get started with the STM32F401RE nucelo development board on FreeBSD with gcc and openocd

Using Sonoff basic switches with own firmware

15 Mar 2019 - tsp

Example how to flash Sonoff basic switches with custom firmware (using cli tools or the Arduino IDE)

Building a LoRA WAN gateway (and supplying data for the things network)

18 Feb 2019 - tsp

The following article leads the reader through building an LoRA-WAN gateway from an iMST ic880a concentrator board and an RaspberryPi. Optionally is shows the reader how to add GPS, enable remote configuration via the tinc VPN daemon and via a TOR stealth hidden service.

Android development on FreeBSD

22 Nov 2018 - tsp

How to get started with Android development on FreeBSD (using Android Studio)

Some notes on 3D printing

25 Sep 2018 - tsp

Just a collection of comments on 3D printing

Automatic domain validation TLS certificates with acme.sh and let's encrypt with own DNS servers

04 May 2017 - tsp

A tutorial on how to automatically manage TLS certificates for various services with DNS challenges and an zone served out of a bind zonefile that is protected via DNSSEC.

Speicherprobleme bei Android auf älteren Geräten umgehen

05 Jan 2015 - tsp

A short description of the davlik.vm.* tuneables for memory management tuning on Android devices

Android ADB über TCP/IP

20 Dec 2014 - tsp

How to use ADB over TCP/IP instead of USB

DNSSEC (manuell) mit BIND Werkzeugen

02 May 2014 - tsp

How to automate DNSSEC signatures on a manually managed zone

Verschlüsselter (Facebook) Chat mit Pidgin

22 Nov 2013 - tsp

A short description (in german) how to use the facebook chat with it's XMPP interface.

How to enable EAP-MD5 on Windows 7

22 Feb 2013 - tsp

A short description how to enable EAP-MD5 authentication for wired 802.1x authentication on Windows 7 since it has been (correctly) disabled for security reasons


Dipl.-Ing. Thomas Spielauer, Wien (webcomplains389t48957@tspi.at)

This webpage is also available via TOR at http://jugujbrirx3irwyx.onion/

Valid HTML 4.01 Strict Powered by FreeBSD IPv6 support