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

    func (d *DataCollector) addDowntime(downtime time.Duration) {
    	d.totalDowntime += downtime
    	
    }
    

    versus

    func (d *DataCollector) addDowntime(downtime time.Duration) {
    	d.totalDowntime += downtime
    }
    

    Do Details Matter?

    Do you see it? In both examples, all the alternatives do exactly the same, but their form has subtile differences. Do those details matter?

    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. This is a great leap forward. On the downside, the list of programs that can use TCI is rather short at the moment. Alternatively ExpertSDR offers an emulation of the Kennwood TS-480, which can be used via a virtual COM port. This works, but it is not very easy to setup, as you need to compile a kernel module (e.g. the tty0tty null modem emulator).

    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.

    1. 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.target
    
    1. Reload the unit file: systemctl --user daemon-reload
    2. Enable the service: systemctl --user enable cwdaemon.service
    3. Start the service: systemctl --user start cwademon.service

    On the next boot, the cwdaemon will only start when you log in and stop when you log out.

    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:

  • 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…
  • keeb.io Iris

    I built my own keyboard. It is an Iris from keeb.io. The Iris has a split 56-key ortholinear layout and it is fully programmable, running the QMK firmware.

    my keeb.io Iris keyboard

    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. The Iris provides both for a reasonable price, if you are able to use a soldering iron.

    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. But “Viel Feind’, viel Ehr’”, so let’s rock!

    Read more…