The Coding Flow

Code Clean Or Die Tryin'

  • Details Matter!

    Details Change Log Commit: 448fc310 improve reporting 31 changed files versus Commit: 1ef7a40c extract median calculation into a separate function 1 changed file Commit: 8125e973 provide total downtime as deparate data point 2 changed file ... Downtime func (d *DataCollector) addDowntime( downtime time.Duration) { d.totalDowntime += downtime } versus func (d *DataCollector) addDowntime(dt time.Duration) { d.totalDowntime += dt } versus func (d *DataCollector) addDowntime(downTime time.Duration) { d.totalDowntime += downTime } versus

    Read more…
  • Setup ExpertSDR for Digital Modes on Linux

    I recently got a SunSDR2 DX and it took me some time to get it up and running with all the other software that I use for ham radio. Maybe the following article saves you some hours. CAT ExpertSDR comes with its own network-based CAT protocol named TCI. It has the great advantage that all changes are pushed to the clients, so there is no polling necessary and the clients are updated immediately.

    Read more…
  • Unmute a microHAM DigiKeyer II on Linux

    I’m currently playing around with a microHAM DigiKeyer II and my Ubuntu 20.04 ham radio PC. When I plug in the DK2, there is no RX audio available, although the sound device is recognized by Ubuntu and all the other features of the DK2 work perfectly. To save you some of the hours that I needed to find the cause, here is my current insight into the problem: capturing is disabled by default for the Mic input in ALSA.

    Read more…
  • 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] Reload the unit file: systemctl --user daemon-reload Enable the service: systemctl --user enable cwdaemon.

    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…