WSJT-X Setup on macOS

I may add to these notes, but a key one was to make sure to give WSJT-X access to the microphone, even when using a USB cable to control the rig. Thanks to K3DCW for the tip.

I presume that you have a checkmark in the box labeled “PortAudio” next to the USB Audio CODEC device selectors. If so, then the only other thing that I can think of is that you haven’t given macOS permission to access your “microphone.” Many of these programs see/treat that USB Audio CODEC as a microphone input and failing to give it access to your “microphone” will cause it to not hear a thing. Go to the Security & Privacy pane and make sure that Fldigi has access to the microphone.

I also have iShowU Audio Capture installed (for OBS screen recording), which I thought might have been the problem. Here are my current working audio settings (Audio Midi Setup).

The rest of the settings described here work out well for connecting the IC-7300 and my MacBook Pro.

To get the gain right in the software, I used the RF Gain knob on the IC-7300. There is a way to adjust this in the settings but I can’t find it at the moment. It’s the ACC/USB AF Output Level setting under MENU>SET>Connectors (make sure you scroll up and down the menu items as needed). All suggestions are to get the bar in WSJT or JTDX to about 30 dB.

Labeling minimum and maximum values on a fill color guide in #rstats #ggplot2

This took me a while to understand, and even though I think this should be built in somewhere, I ended up with the following function:

# Function to show min and max values on fill color bars.
# Inspiration from
# original_func should be something like "scales::breaks_pretty(3)"
breaks_min_max <- function(original_func) {
    function(x) {
        original_result <- original_func(x)
        breaks <- c(min(x), 
breaks_sort <- sort(breaks)
# If values are too close, drop one of them
close <- diff(breaks_sort) < 1
breaks_sort <- breaks_sort[!close]

Note the very rough method of determining when labels will be too close together. This would need to be modified if working with negative numbers or values that are all decimals.

In use:

aes(x = mpg,
y = disp,
color = qsec)) +
geom_point(size = 5) +
scale_color_continuous(breaks = breaks_min_max(scales::breaks_pretty(4)))


Update 2021-09-28:

If you have a log scale, this will also work if you use breaks_log(). Example below. This seems to be sensitive to the number of breaks you set; for the example below, 4 doesn’t work (the top and bottom values aren’t labeled), but 6 does.

ggplot(mtcars, aes(x = mpg, y = disp, color = qsec)) + 
geom_point(size = 5) + 
scale_color_continuous(trans = "log10",
breaks = breaks_min_max(scales::breaks_log(6)))

List of #APRS Projects (and interesting alternatives)

I’ve expanded my search beyond what I introduced in APRS tracker/viewer build concept. Here I will attempt to organize projects some other folks have put together.

This has been sitting in draft mode for several weeks, but I’m pushing it out now and hoping to add more as I learn.

Bulk Convert your Dire Wolf logs to GPX

Dire Wolf won’t let you save both a daily and single log file of packets received, but if you log daily with LOGDIR, you can write a script that bundles up all the log files and then produces a GPX file of the output. This is useful if you want an idea of the area your digipeater or iGate is covering without trusting to or, which only provide the actual path taken and drop duplicate iGated packets.

Simple script for Linux:

# merge log files
sed 1d *.log > log_merged.csv
# convert to gpx
log2gpx log_merged.csv > log_merged.gpx

(sed tip from means you don’t need Python or similar)

Make it executable:

chmod +x

Run or schedule in cron:


APRS tracker/viewer build concept

Writing this on the fly and hope to add links later.

I’ve been into APRS lately, which tends to yield project ideas. There are small trackers put there that aren’t cheap, cheaper trackers that aren’t small, and none of them do all of what you might want.

At an event (e.g., an endurance race in a remote location), you want everyone to know as much as possible. We’ve tried satellite tracking on racers to various success, but when the race course has little mobile data and barely SMS (if anything), satellites don’t help race directors very much.

Having enough amateur radio volunteers to set up a real net is the dream, but in absence, what else can we do? Enter APRS.

Build idea here is for an easy-to-install vehicle (staff and volunteer) tracker that lets everyone see other where other people are. A limited number of hams would enter data and send messages or bulletins, and the rest would be passive; not pushing buttons on the radio, but having access to received data.

Quick concept and then I’m done:

  • Raspberry Pi Zero running Dire Wolf as a TNC.
    • Will need USB port, maybe not the Zero?
  • Cheap 2m radio, ideally mobile rather than HT so powering is easy. Doesn’t need any features!
  • Custom cable to run the radio and sound in/out.
  • USB sound card.
  • APRSdroid pr APRSfi phone app.

See where im going? Need to run numbers on cost, because it’s adding up in my head.

Summits on the Air (SOTA) and highpointing

Did some quick looking for information on Summits on the Air (SOTA), a ham radio contest to make contacts while either you or your contact are standing on top of a summit (mountain peak, usually) and highpointing, which is a hiking contest to stand on all the high points in a given set of jurisdictions (continents, counties, US states, US counties, etc.). Links below.

  • maps to help you find official SOTA summits, although determining which association you belong to is not especially clear. Minnesota is association K0M and North/South Dakota are association W0D.
  • SOTAwatch is a good place to let people know what peak you’ll be on so they can try to contact you
  • SOTA summits in North Dakota and South Dakota:
  • SOTA summits in Minnesota:
  • Getting started with SOTA:
  • SOTA Minnesota association reference manual:
  • Joining in with SOTA:
  • How to activate a SOTA peak:
  • Minnesota county high points:


Getting Started in Genealogy

I responded to a “how do you get started” question somewhere else and came out with the following brain dump, so I’ll post it here too.

What tips and tricks would you have to get started with genealogy?

You don’t have to put your tree in Ancestry and pay monthly, especially if you have hosting somewhere. Webtrees is good software. If you are associated with a university, you may have access to an Ancestry subscription for free through the library. Set up a system for digital files and naming conventions on your local machine to back up any documentation you add to an online tree. Family tree software should all operate with the GEDCOM format, which makes it really easy to move around if you are dissatisfied (although objects like photos may be harder to).

When I started in high school 20 years ago, it was just a tree of everyone I knew I was related to. Then you get back far enough and have to ask people for help. My grandmother remembered dozens of names and dates, which got me further. Ancestry and similar free websites ( can fill in a lot. helped me find a ton of obituaries and gossip column entries, which filled in even more.

It’s only recently that I got into thinking about the “History” going on around my ancestors when they were alive, and that’s been driving my interest for the last year. Person A lived in this place in the 1890s–what was going on there, and how were global events affecting them? or another archive were very useful for this as well.

Although Ancestry and are subscription, even one month lets you dig into and download as much as you want, so if money is tighter you can sign up for a single month and dedicate a lot of time to getting as much raw material as possible.

Urban Arrow Family winter riding

I can’t promise a lot of updates about this, but here are some observations from this morning. 20 degrees F, alleged 7 mph wind (felt like more). Put studded tires on last night, felt super solid with two kids in the box. Trace to drifts of 2″ of snow, drifts were sketchier on return trip without kids.

Kids stayed warm with the classic rain tent, coats, mittens, hat/hood, and big flannel blanket. Still would like more protection from wind in the back where it’s just mesh.

LCD screen seemed okay, although I think battery is discharging faster than usual. I am bringing the battery inside now between rides.

All around, a wonderful ride. Plus we saw turkeys!

photo of the corner of an urban arrow cargo bike and some turkey tracks in snow
Turkey tracks on the preschool commute.


How to ignore Port on the Grand Forks Herald website

(Updated 2021-04-09) If you really don’t care what Rob Port has to say, here’s a Greasemonkey script to hide his articles from appearing on the Grand Forks Herald website:

// ==UserScript==
// @name     _Remove Port
// @include*
// @require
// @grant    GM_addStyle
// ==/UserScript==
//- The @grant directive is needed to restore the proper sandbox.

/*--- Use the jQuery contains selector to find content to remove.
    Beware that not all whitespace is as it appears.
var badDivs1 = $(".section-article-teaser-item:contains('Port:')");
var badDivs2 = $(".section-article-teaser-item:contains('Mailbag:')");
var badDivs3 = $(".section-article-teaser-item:contains('Plain Talk Live:')");

badDivs1.remove ();
badDivs2.remove ();
badDivs3.remove ();

//-- Or use badDivs.hide(); to just hide the content.

Taken almost entirely from

Redis server weirdness and workaround

Don’t have a better title yet. Sometimes bug email lists are the best way to find answers!

After installing Nextcloud using yunohost (which is awesome so far), the Redis server crashed and couldn’t be restarted. Turns out a couple cifs (Samba) drives I was mounting in fstab were preventing Redis from starting.

I unmounted the drives, started Redis through yunohost, and then remounted the drives. If I have to reboot, will probably have to go through this again, so not an ideal solution.

Error message:

Jul 19 22:14:46 systemd[1]: Failed to start Advanced key-value store.

Solution figured out from: