Monday, January 05, 2026

Installing a later hamlib on Linux

I'm currently using Ubuntu 24.04.3 LTS in the shack. Choosing an older stable version of the bleeding edge where I find changes to the sound system give me trouble with the apps I use including FreeDV, WSJT-X, and Fldig.

Unfortunately, the version of libhamlib either in the OS or bundled in the apps doesn't have some of the radios I use, including the QMX, so I wanted to upgrade it. Here are the steps I took, although there may be an easier way.

First, to find the path to the hamlib library that wsjtx is using:

ldd /usr/bin/wsjtx|grep hamlib

Next I had a look at that file to see where it symbolically linked with:

ls -l /lib/x86_64-linux-gnu/libhamlib.so.4

I downloaded the latest hamlib source tar archive from: https://github.com/Hamlib/Hamlib/releases

Unpacked and built the source (I already developer tools installed but I'll leave that out of this note):

tar xzvf hamlib-4.6.5.tar.gz
cd hamlib-4.6.5/
./configure
make
sudo make install

This put a new hamlib in:

/lib/x86_64-linux-gnu/libhamlib.so.4

I moved aside the old sym link:

sudo mv /usr/local/lib/libhamlib.so.4 /usr/local/lib/libhamlib.so.4.orig

And made a sym link to the newly built library:

sudo ln $HOME/Documents/hamlib-4.6.5/src/.libs/libhamlib.so.4 /usr/local/lib/libhamlib.so.4

I may not have this entirely accurate but it will serve as a note to myself. Anyhow, the programs now have a later version of hamlib.

Sunday, January 04, 2026

FreeDV Australian net - 21 stations

An excellent Sunday morning FreeDV net with several stations who were on for the first time or just installed a few days before. Stations included: VK2CJB, VK2GRF, VK2JAB, VK2JCB, VK3CKY, VK3GTP, VK3JCO, VK3KEZ, VK3MTV, VK3PCC, VK3SRC, VK3TPM, VK3XCI, VK4WGR, VK5ABE, VK5KFG, VK5KVA, VK5MH, VK5RA, VK7JB.


I run on Ubuntu 24.04 LTS linux but there was some discussion of the woes people have with Hamlib on windows. Recently here I built Hamlib from their Tar release and managed to get FreeDV (and FLDigi) to use it by changing sym links.

Thanks to VK5KVA, Jack, who will host a net on 7045 from 8:30pm eastern time tonight (Sunday).

Friday, January 02, 2026

A contact on the LARCSet radio

I'm having some trouble with this radio. Extremely low modulation with the mic amp as it comes. Not sure what's wrong. To get enough power out I'm vastly over-driving it with an external mic amp. Richard, VK3LRJ, kindly humoured me and recorded a bit of how I'm received there. I've overlayed that bit of audio in this video recording from my shack.


Not great. An interesting little radio though. https://www.hfsignals.com/index.php/larcset/ 


Developing for Apple platforms - we're in a good place

My most popular app, WSPR Watch, is now 14 years old and it's not surprising that the underlying technology has changed a lot in that time. It started out in Objective C using UIKit, was ported to Swift over time and most recently migrated to SwiftUI.

I am not a brilliant programmer, I know this because I've met and worked with some who are - they are amazing. I'm a plodder. It takes me a long time to get comfortable with a new language, new framework, the right ways to avoid problems with multi-threaded code.

Recently, I re-watched a Worldwide Developer Conference (WWDC) video on migrating to Swift 6 which has new, compiler based, features for letting me know when something I'm doing is dangerous in a multi-threaded program. When I enabled Swift 6, Xcode showed me dozens of errors. The video gave good advice: "Don't Panic". I worked through the complaints and in the end my program not only worked but a subtle bug in the map display was gone!

The other day, I read a brilliant post about Swift Concurrency, which not only helped me understand what I was doing but also showed how easy it is to do network requests with URLSession. Up until now I've been using a thirdparty package called Alamofire which provided a nice wrapper over the underlying code. Apple has cleaned things up and it all works nicely with async/await.

With the help of ChatGPT, (which gave me useful example code), I manually converted one of my network loader classes to no longer use Alamofire. The code was shorter and clearer after this effort.

LLMs are fantastic for programmers. Normally when I need to do something new, I have to read documentation, watch WWDC videos, try to find recent sample code, and generally mess around until I figure it out. An LLM can give me a code snippet that does what I want and that's a great start. They aren't perfect but they're close.

After manually porting my network code I thought I'd try the built-in AI in Xcode on one of the other data loaders. I opened the file and asked it to modify the code to use URLSession instead of Alamofire. It did and the code was better than mine in a few ways. 

It's taken time for SwiftUI to mature but today I feel more productive than ever and, with the help of the LLMs, can start projects I never would have attempted. We are in a good place as developers for Apple platforms.

Wednesday, December 31, 2025

Tech Talk on ABC Radio - Apple's year of turmoil

This week I chatted with a fellow tech commentator and journalist Nic Healey who's filling in on ABC Nightlife. Wrapping up the year we discussed Apple's controversial "Liquid Glass" user interface design and the turnover in executives at the company. 

The astounding market capitalisation of NVIDIA begs the question, are we in another bubble, like in 2000, and was Bill Gates right when he pointed out that we over estimate short term effects and under estimate long term effects - in this case of AI. Listen here: https://www.abc.net.au/listen/programs/nightlife/peter-marks/106188550 

Sunday, December 28, 2025

Sunday FreeDV net - 18 stations

A good net this morning with lots of nice Xmas cheer and looking forward to 2026 being a good year for FreeDV activity. 


Stations on frequency included: VK2AWJ, VK2CJB,VK2NP,VK2YW,VK3AHC, VK3ANC,VK3BU, VK3FAR,VK3GTP,VK3KEZ, VK3PCC, VK5ABE,VK5COL,VK5KVA,VK5LA,VK5MH,VK5RT, and me, VK3TPM.

One station, John, VK2AWJ had outstanding audio quality (to my ear) he said he was using a Logitech headest - perhaps the close mic really helps.

Tuesday, December 23, 2025

Built the new LARCSet US$39 40m 5W SSB Transceiver from HFSignals

The LARCSet is a 40m 5W SSB Transceiver Kit from hfsignals.com. It's just US$39. The VFO is analog and it's a descendant of the bitx40 line. Ashar Farhan says you can build it in a day and I can cornfirm that promise.

The board comes with the vast majority of components already fitted.


The work that needs to be done by the builder is winding a few toroids (although happly the three trifilar ones come pre-wound), assembling the front panel, fitting potentiometers, soldering crystals and a few transistors including the IRF510. The manual is very clear.

The front panel is held in place by the little screw nuts from the 3.5mm panel mount sockets and I found that there wasn't enough thread on these to hold it in place. I sanded down the front edge of the board and ended up gluing the nuts to better hold it in place.

My VFO toroid needed one extra turn to get it in the right range so bear that in mind when winding.

The varactor tuning is quite sensitive and I think a multi-turn pot or an additional fine tuning pot might be good idea. I like the idea of a totally analog VFO but amusingly QRP-Labs has just announced a compact digital VFO that could be suitable for radios like this. Here's a video showing unboxing, stages of the build, receiver testing and final completion.


I enjoyed the build and it received first go. 

The radio has some rather serious problems. CW produces about 3W but the signal is modulated with a tone. Sideband is extremely weak - it seems that the single transistor microphone amplifier produces vastly too little audio for the mixer. I shorted R73, the feedback resistor in the mic amp, and got a bit more gain.

I found that the bandpass filter, L2 & L3, peaks a bit low - at 6.9Mhz - and I plan to remove a turn to improve sensitivity. Others have pointed out that the output low pass filter is a too aggressive.

Because of the low cost of the kit, shipping is a significant part. HFSignals is offering a pack of five and I'm going to suggest it as a group build project at my local club.

Here's a bit more of it receiving. The VFO is quite stable but tuning is very sensitive. I plan to add a fine tune control.


Here's a better quality rendering of the schematic (click to enlarge):


After following the instructions, rather than the board marking, I've got L4 and L5 in the right spot and now I'm seeing about 2.7W CW out which is a little disappointing but better than before. 

Fine Tune Knob

The main tuning is quite course so I've added a 1K in series with the hot end and this makes tuning much better. Here's a demo:


I've developed a simple 3D printed case which is working quite nicely.

Conclusion

As much as I like this project, I'd have to say I would not recommend version 1. I hope Farhan will work to produce a better revision.

Monday, December 22, 2025

Project box designed with OpenSCAD

As someone not generally comfortable with CAD I've been enjoying the almost childlike simplicity of TinkerCAD. The other day, David, VK3KR, suggested I have a look at OpenSCAD. It is a very different approach. Rather than dragging shapes from a pallet and modifying them by dragging, you code the shapes you want.

I built a QRP L-Match some time ago, inspired by Peter VK3YE, but mounted in a small food storage box it didn't look great. Working in OpenSCAD looks like this:


You write code on the left and each time you save, the render updates on the right. Sometimes, I'd love it if I could drag something in the render and have the code update. Maybe one day. There's a button to export STL and it looks like it can talk to some 3D printers directly although I haven't tried this.

I particularly like that I can set variables and then use them throughout the code so changing things like the wall thickness is set once and updates everywhere.


My experience is about one day of playing so please don't take my code as a good example of best practice. Here it is though.

// Box for L match tuner

$fa = 1;    // Minimum angle

$fs = 0.4;  // Minimum size


wall_thickness = 1.5;

box_x=80;

box_y=65;

box_z=25;

overlap=0.001;

bnc_r=10.5/2;

bnc_holes=12.5/2;

switch_r=6.5/2;

poly_r=7/2;

poly_mount_r=3/2;

poly_mount_offset=7;


difference() {

    // Outer cube

    cube([box_x, box_y, box_z], center=true);

    

    // Inner cube (subtract from outer to create hollow space)

    // Inner dimensions: 20mm - 2*3mm = 14mm

    translate([0, 0, wall_thickness + overlap])

    cube([box_x-(2*wall_thickness), box_y-(2*wall_thickness), box_z-(wall_thickness)], center=true);

    

    bnc_socket(z=box_x / 2);

    bnc_socket(z=-box_x / 2);

    

    // inductance switch holes in side

    switch_spacing=10;

    for (i = [0:1:4]) {

        rotate([90,0,0])

        translate([(i * 10) - 20, 0, -box_y / 2]) // push to the side of the box

        cylinder(h=10, r1=switch_r, r2=switch_r, center=true);

    }

    

    // extra cap switch

    rotate([90,0,0])

    translate([0, 0, box_y / 2]) // push to the side of the box

    cylinder(h=10, r1=switch_r, r2=switch_r, center=true);

    

    translate([25,-15,0]) {

        // polyvaricon main hole

        rotate([0,0,90])

        translate([0, 0, -(box_z / 2)+4]) // push to the base of the box

        cylinder(h=10, r1=poly_r, r2=poly_r, center=true);

    

        // polyvaricon screw hole

        rotate([0,0,90])

        translate([poly_mount_offset, 0, -(box_z / 2)+4]) // push to the base of the box

        cylinder(h=10, r1=poly_mount_r, r2=poly_mount_r, center=true);

    

        // polyvaricon screw hole

        rotate([0,0,90])

        translate([-poly_mount_offset, 0, -(box_z / 2)+4]) // push to the base of the box

        cylinder(h=10, r1=poly_mount_r, r2=poly_mount_r, center=true);

    }

}


module bnc_socket(z = 0) {

// end hole for BNC socket

    rotate([0,90,0])

    translate([0, 0, z]) // push to the end of the box

    cylinder(h=10, r1=bnc_r, r2=bnc_r, center=true);

    

    // mounting holes for BNC socket

    rotate([0,90,0])

    translate([bnc_holes, bnc_holes, z]) // push to the end of the box

    cylinder(h=10, r1=poly_mount_r, r2=poly_mount_r, center=true);

    

    // mounting holes for BNC socket

    rotate([0,90,0])

    translate([-bnc_holes, bnc_holes, z]) // push to the end of the box

    cylinder(h=10, r1=poly_mount_r, r2=poly_mount_r, center=true);

    

    // mounting holes for BNC socket

    rotate([0,90,0])

    translate([bnc_holes, -bnc_holes, z]) // push to the end of the box

    cylinder(h=10, r1=poly_mount_r, r2=poly_mount_r, center=true);

    

    // mounting holes for BNC socket

    rotate([0,90,0])

    translate([-bnc_holes, -bnc_holes, z]) // push to the end of the box

    cylinder(h=10, r1=poly_mount_r, r2=poly_mount_r, center=true);

}

Here's the lid:

// Box lid for L match tuner

$fa = 1;    // Minimum angle

$fs = 0.4;  // Minimum size

wall_thickness = 1.5;

box_x=80;

box_y=65;

box_z=wall_thickness;

overlap=0.001;

// lid

cube([box_x, box_y, box_z]);

// inside

translate([wall_thickness, wall_thickness, 0])

cube([box_x-(wall_thickness*2), box_y-(wall_thickness*2), wall_thickness * 3]);

The language is a bit odd. I don't know why what I call functions are called modules for example.

There are some very interesting looking libraries available including one for project boxes called YAPP_box like mine. 

The downloadable binaries are quite old, dated 2021, but development seems active. I tried building the macOS version but it failed and I haven't persisted.

Although the learning curve on a code driven 3D design program is higher than a click and drag version there are benefits. Things like the row of holes for inductance switches is a loop and a single setting of the radius of the hole is used throughout.