The Coding Flow

Code Clean Or Die Tryin’

  • Run the CWDaemon as Service

    If you want to automatically run the cwdaemon with sidetone output through pulseaudio, the cwdaemon needs to be started as a systemd user service. This is because pulseaudio is only avaiable when you are logged in and the cwdaemon must not be started before pulseaudio is available. Add the following content as ~/.config/systemd/user/cwdaemon.service: [Unit] Description="CW Daemon" [Service] Type=forking ExecStart=/usr/sbin/cwdaemon -d ttyS1 -x p -T 700 -s 30 [Install] WantedBy=default.

    Read more…
  • Resources about SDR and DSP

    I started looking deeper into software defined radio and digital signal processing. Here are some great resources about those topics: Sam Koblenski’s blog posts Rick Lyons: A Quadrature Signals Tutorial: Complex, but not Complicated Steven W. Smith, Ph.D.: The Scientist and Engineer’s Guide to Digital Signal Processing Stefan Scholl: Exact Signal Measurements using FFT Analysis András Retzler: Software Defined Radio Receiver Application with Web-based Interface (BSc Thesis) András Retzler: Integrating digital demodulators into OpenWebRX (MSc Thesis) OpenWebRX Source Code csdr Source Code

  • Goodbye Wordpress, hello Hugo!

    Today I wiped off Wordpress from my webspace and switchted to Hugo, a static site generator - just in case you are wondering.

  • FT-450 Hamlib Timeout Glitch

    I control my FT-450D using Hamlib. This worked fine if only a single program was connected to the rig. To be able to connect multiple programs at the same time, I wanted to run the rigctld server as a service and connect the programs using the model #2 (“NET rigctl”). This setup works fine, but every now and then the connection to the FT-450D stopped working. Here is how I found out what’s going on and how I fixed it.

    Read more…
  • Automatically resetting an USB-to-serial adapter

    I read the temperatures and other data from my heating controller using a python script. The heating controller is connected via a serial line to a raspberry pi, using an FTDI USB-to-serial adapter. From time to time, the adapter stops working. Plugging it out and in again helps, but eventually I found out how to restart it automatically. You need to find out the device number of your adapter (here it is device 4):

    Read more…
  • Iris

    I built my own keyboard. It is an Iris from The Iris has a split 56-key ortholinear layout and it is fully programmable, running the QMK firmware. Step 1: Choose wisely Coming from the Kinesis Freestyle II, I wanted to go one step further and have all keys (especially the cursor keys) right at my fingertips, without the need to move my hands. And I wanted to have this luxury everywhere, therefor I looked for a fully programmable solution with split layout.

    Read more…
  • Learning to Go

    In May I started into a breakneck adventure: new job, new programming language, new tech stack - everything starting over. I was hired at Paessler to be a Go developer. Coming from the Java planet, I had to learn everything from scratch: the Go language itself the “state-of-the-art” development environment for Go: VS Code GitLab with its concept of CI/CD pipelines Vue.js for some frontend work (see below) Docker and Kubernetes as runtime environment I can’t remember a moment in my career where I had to master so many different technologies at once.

    Read more…
  • Using the myAVR “mySmartUSB light” under Linux in the Arduino IDE

    I recently bought a handful of Arduino Nano clones, just in order to learn that for a price of 4€ per CPU it is not granted that there is a bootloader on the ATmega328P. Hence I needed an “in-system-programmer” to be able to install the bootloader. I found the “mySmartUSB light” from myAVR at Conrad for a reasonable price. The device works in principle on Linux with avrdude, given that you have a driver for the “CP210x USB to UART Bridge” already installed.

    Read more…
  • Help! Gradle is using a different version of a library to build my extension/plug-in!

    Just a note for myself that might also help others. Symptoms: When building your Gradle extension/plug-in, strange compile errors occur. E.g. the compiler can’t find methods, which are obviously there when you look into the library’s code. Problem: Gradle carries a lot libraries. It is likely that you want to use one of those libraries in a more recent version. Gradle adds its libraries to the classpath when you add compile gradleApi() to your dependencies.

    Read more…
  • The secret step to save your software from the creeping death of unmaintainability

    Abstract Software which is developed over several years usually tends to come into a state, where the effort and risk of change increases dramatically with each new feature. This often ends at the point, where either nobody dares to take the risk of any further change, or it is simply too expensive to implement a new feature. What is necessary to guard against this destiny and keep a software fit for change even after years of development?

    Read more…