Checklists for Portable Operations

Nothing can bring a portable radio outing to a screeching halt faster than forgetting to pack a critical item—an adapter, a cable, or heaven forbid, a radio. Been there, done that. My solution is a detailed checklist for such occasions.

At some point in my life, I became an obsessive checklist maker. Back when I was still working for a living, I relied heavily on checklists for my daily to-do list, things I needed to prepare for meetings, and the like. I naturally carried that habit over into my ham radio hobby.

Ham Radio Checklists

I keep a variety of checklists handy for different types of operating. A few of my standard checklists are:

  • Hiking
  • Bike-portable
  • Stationary-mobile operating from my truck
  • Operating from the camper

I also keep some checklists for some special events:

  • Field Day
  • Our annual summer vacation

For those one-off, ad hoc events, I sit down in advance to prepare a special checklist of things I need to take. 

I know all this sounds like a no-brainer, but I wasn’t blessed with the greatest of memories. When I try to take a shortcut around this process, the risk of forgetting an important item goes way up.

Preparing the Checklist

When developing a checklist, I do a mental walk-through of my setup in the field. I simply try to visualize setting up and make a detailed list of the things I’ll need. This method works for simple setups. For more complex set-ups, I sketch it out on paper and make my checklist from that.

An even better approach is to assemble the equipment at home. Then you can do a detailed inventory of your equipment to form your checklist.

When I prepare a checklist, I first list out the containers (backpack, box, bag, etc.) that I’ll be using to carry the equipment. Next, I list out everything that needs to be in those containers. I indent these items on the checklist below the container.

As items are packed in a container, I check them off. Then, as the containers are loaded into my truck, they are checked off. 

I also keep a list of things I need to do before the event. I call this my pre-flight checklist. I use this list to make sure batteries are charged, my truck’s GPS is programmed, and the like. 

The Mechanics

For years, I created my lists using a word processor. When it was time to pack, I just printed them out. That works fine, but I now use a paperless method.

I now use an application called Evernote to keep my checklists. My checklists are stored in the cloud, so I can access them from any of my computers and even my cellphone. I can check off items on my phone as I’m packing. After the event, I just go in and un-check the items, and the checklist is ready to go for the next outing.

A portion of a checklist as it looks in the Evernote app on my cellphone
A portion of a checklist as it looks in the Evernote app on my cellphone

You can get a basic Evernote account for free. There are paid options for folks (like me) who need additional capabilities and features.

Some “Pro Tips”

Here are a few lessons I’ve learned over the years:

  • Don’t be too quick to check off an item. If you check off an item before it is physically in the container or loaded into your vehicle, you’ll eventually run into problems. Don’t ask me how I know this; just trust me on this one.
  • After an event, take a few minutes to update your checklist, if needed. Was there something you wish you had brought or should have left at home? Some of my frequently-used checklists have been evolving for decades. 

Wrap-up

So there you have it. I know this is a somewhat mundane topic, but checklists have saved my bacon on several occasions. 

73, Craig WB3GCK

Winter Field Day 2020

With family coming in this weekend, I wasn’t sure if I’d be able to participate in this year’s Winter Field Day. I did, however, manage to get out for a couple of hours at the start of the contest.

It was raining cats and dogs when I arrived at Black Rock Sanctuary, one of my favorite operating spots. I had my usual stationary-mobile set up ready to go a few minutes before the starting time. 

My antenna bundled up for a rainy Winter Field Day.
My antenna bundled up for a rainy Winter Field Day.

I mostly operated CW on 40M and 20M, but I did manage a couple of rare—for me, at least—SSB contacts on 40M. I ended up with 20 contacts in my log. There were quite a few familiar callsigns from previous Winter Field Days. 

It was getting hard to find new CW stations to work, so I decided to head out and get some errands done. I hope everyone who stuck it out had a fun—and warm—Winter Field Day.

73, Craig WB3GCK

A Brief Snowy Outing

The weatherman was predicting snow, sleet, and who-knows-what for my area today. I figured I get out for my QRP-portable fix before the weather got too bad.

My location was Schuylkill Canal Park in nearby Mont Clare, Pennsylvania. It’s just across the river from Phoenixville, and it’s been a while since I operated from there. 

My parking spot at Schuylkill Canal Park shortly after arrival.
My parking spot at Schuylkill Canal Park shortly after arrival.

By the time I got to the park, there was a coating of snow on the ground, and it was still coming down steadily. Except for a couple of mountain bikers and joggers, I had the park to myself.

After putting the antenna on the back of my truck, I tuned around on 40M and found W8BJO calling CQ from Ohio. Our QSO was interrupted by QRM, and I lost him.

WB3GCK hunkered down in the truck.
WB3GCK hunkered down in the truck.

I went up to 20M and worked K0RO from Mississippi. Ralph was operating as K3Y/5 in the annual SKCC K3Y event. Next, I called F6EJN, who was operating in the K3Y event representing Europe. Bob was very strong into Pennsylvania, and he gave me a 589 report. My last QSO was with fellow SKCC’er, WD5BVQ, in Louisiana. 

Schuylkill Canal Park in Mont Clare, Pennsylvania. The Locktender's House is on the left.
Schuylkill Canal Park in Mont Clare, Pennsylvania. The Locktender’s House is on the left.

The temperature was about 20°F, and I was starting to feel it. I started the truck once or twice for some heat, but that caused some noise in the radio. The accumulation was over an inch, and the road into the park was untreated. I figured I had better head out before things got worse.

It was a short but fun outing, but it was good to get home and warm up.

72, Craig WB3GCK

Mohican Outdoor Center 2020

The Boschveldt QRP Club convened for our Winter trip to the Delaware Water Gap National Recreation Area in northern New Jersey. We all enjoyed a fun weekend of ham radio in a scenic setting.

As in past years, we rented a cabin at the Mohican Outdoor Center (MOC) near Blairstown, New Jersey. This year’s crew included Ed K3YTR, Glen NK1N, Ed K3BVQ, John NU3E, Ed WA3WSJ, Walt KB3SBC, and me.

Ed WA3WSJ (L) and Walt KB3SBC outside the cabin
Ed WA3WSJ (L) and Walt KB3SBC outside the cabin

On Friday, some of the early arrivals headed out to Crater Lake to do some operating. The road down to the lake was closed, so they operated from the nearby Blue Mountain Lakes Trailhead instead. I arrived mid-afternoon as NK1N and NU3E were putting up an inverted L antenna outside the cabin. Glen had already set up a station inside the cabin. After settling in and catching up with old friends, we all drove into Blairstown for dinner at Buck Hill Brewery and Restaurant.

Ed K3YTR (L) trying his loop antenna inside the cabin with Ed K3BVQ observing
Ed K3YTR (L) trying his loop antenna inside the cabin with Ed K3BVQ observing

I volunteered to provide breakfast on Saturday, so I made breakfast sandwiches for everyone. (I refer to them as Craig McMuffins—with apologies to a certain fast-food restaurant chain.)

Glen NK1N making some satellite contacts outside the cabin
Glen NK1N making some satellite contacts outside the cabin

After breakfast, everyone took off in different directions. NK1N and NU3E hiked up to Raccoon Ridge on the Appalachian Trail. WA3WSJ went over to the Pennsylvania side to operate from some scenic overlooks. K3YTR did some experimenting with antennas back at the cabin.

I operated stationary-mobile at the Blue Mountain Lakes Trailhead to make some contacts in the SKCC Weekend Sprintathon (WES). I did a National Parks on the Air (NPOTA) activation from this spot back in 2016. K3BVQ and KB3SBC were parked about a half-mile down the road from me doing a Parks on the Air (POTA) activation of Delaware Water Gap.

Ed K3BVQ (L) and Walt KB3SBC doing a POTA activation of the Delaware Water Gap National Recreation Area
Ed K3BVQ (L) and Walt KB3SBC doing a POTA activation of the Delaware Water Gap National Recreation Area

I made about a dozen SKCC contacts, including K3BVQ down the road. (Ed was a solid 599, of course.) Later, while tuning around on 20M, I heard WA3WSJ calling CQ with the club’s callsign, W3BQC. Ed was across the river in Pennsylvania at a site overlooking Delaware Water Gap. We had some heavy QRM during our short contact, but we managed to complete the QSO.

My location at the Blue Mountain Lakes Trailhead
My location at the Blue Mountain Lakes Trailhead

Later that night, we went back into town for our customary Saturday night dinner at the Blairstown Inn. We had a few beers, great food, lots of tall stories, and plenty of laughter. That was a great way to end the day.

Ed K3YTR (L) trying his loop antenna inside the cabin with Ed K3BVQ observing
Ed K3YTR (L) trying his loop antenna inside the cabin with Ed K3BVQ observing

NU3E made his incredible Belgian waffles for breakfast on Sunday. John’s amazing waffles have become a Sunday morning tradition on these trips. After breakfast, it was time to pack up and clean up the cabin.

John NU3E making his amazing Belgian waffles for breakfast on Sunday morning
John NU3E making his amazing Belgian waffles for breakfast on Sunday morning

I always look forward to these Winter trips with my old QRP buddies. I think it’s fair to say everyone had a great time again this year.

72, Craig WB3GCK

Ringing in 2020

I always try to start each year with some QRP-portable operating. In keeping with that tradition, I headed out to participate in the annual Straight Key Night (SKN) activities.

My destination was one of my usual Wintertime haunts, Black Rock Sanctuary. When I arrived, the temperature was about 35°F with cloudy skies and occasional flurries. I operated stationary-mobile from inside my truck with my faithful 19-ft vertical mounted on the back. My MS2 straight key was my weapon of choice.

MY KX3 and MS2 straight key ready for Straight Key Night
MY KX3 and MS2 straight key ready for Straight Key Night

There was enough activity on 40 meters, so I never changed bands. Band conditions were pretty good, and it didn’t take long to log my first contact of 2020. Thanks to Alan W4AMV in North Carolina for doing the honors.

At one point, a curious couple approached the truck. They were intrigued with my antenna, so I spent some time chatting with them about ham radio.

My usual parking spot at Black Rock Sanctuary
My usual parking spot at Black Rock Sanctuary

After I operated for about 2 hours—and exhausted my coffee supply—I decided to pack it in. I ended up with 10 QSOs in the log. All of them were fellow SKCC members.

So, another year is underway. I already have some interesting radio activities on my calendar. This year should be fun, ham radio-wise.

I hope you and yours have a wonderful 2020.

72, Craig WB3GCK

Rainy Polar Bear Outing

Today was the monthly Polar Bear Moonlight Madness Event (PBMME). While the weather had warmed up to a balmy 50°F, it came with a bunch of rain. The weather was lousy, but the bands were pretty good.

I headed back to Black Rock Sanctuary for today’s outing, and it rained the entire time I was there. So, I hunkered down in the truck for this one.

The WB3GCK portable QRP shack on a rainy afternoon
The WB3GCK portable QRP shack on a rainy afternoon

I started on 40M and was greeted with loud static crashes from the storm passing by. Despite the QRN, I had two-way QRP QSOs with W9ILF in Indiana, WI8J in Michigan, and fellow Polar Bear, Mike VE3WMB, in Ontario.

I ventured out in the rain to configure my 19-foot vertical for the 20M band. The pipeline to the West Coast must have been wide open. I worked two California stations and had a two-way QRP QSO with K7QF in Washington state. I also had an SKCC QSO with K5DMC down in Mississippi for good measure.

There was a 10M contest going on, so I headed up there to see what was going on. My vertical was only giving me a 2:1 SWR on 10M, but that was good enough to work a contester 5 miles away.

I went back to 40M for a bit before packing up and ended up with a nice two-way QRP QSO with K4JJW in North Carolina. Dick was really booming in with his 5 watts.

My homebrew vertical wrapped up for the rain
My homebrew vertical wrapped up for the rain

After tearing down the antenna in the rain, I got back in the truck to head home. As my luck would have it, the sun was trying to break through the clouds. That figures!

Nonetheless, I had fun today. Now it’s time to go dry out some antenna parts.

72, Craig WB3GCK

Adding Custom Fields to an ADIF File

I’m not much of a programmer. I’ll be the first to admit that. But, now and then, I manage to cobble together a useful script using the Python programming language to make short work of repetitive, tedious tasks. Here’s an example.

I described my process for logging contacts in a previous post. Part of that process is keeping track of where I was at the time and what rig I was using. My main log in N3FJP’s ACLog uses the other fields feature to implement the ADIF tags, MY_QTH and MY_RIG. Adding that information to ADIF files being imported into my main logging program was time-consuming.

I had been using ADIF Master to add these fields and populate them. I still highly recommend ADIF Master but I wanted to see if I could automate things using Python.

What I ended up with is a script that prompts me to enter my location and rig. If the ADIF file doesn’t already include a tag for TX_PWR, the script prompts me to enter my transmit power also. It then generates these new tags and inserts them in each record in the file. It takes me about 15 seconds to execute the script.

As I noted earlier, I’m no programmer. So, this code might not be the most elegant—or “Pythonic,” as they say—way to approach the problem. However, it does exactly what I needed.


Source Code

__author__ = "Craig LaBarge WB3GCK"
__email__ = "wb3gck at arrl.net"
__contact__ = "https://wb3gck.com/contact/"
__date__ = "5/03/2019"
__version__ = "v1.1.0"

# This script is used to add my custom tags to ADIFs exported from SKCCLogger or other programs.
# The script expects:
#     Files in ADIF located in the same working directory as the script
#     ADIF files must have a ".adi" or ".adif" extension.


import os
import sys


def listfiles():
    """This function finds all ADIF files in the working directory and prints out a listing with index
    numbers.  It returns a list of available ADIF files."""
    logs = []
    count = 1
    for filename in (os.listdir('.')):
        if '.adi' in filename:
            logs.append(filename)
            print(str(count) + ' - ' + filename)
            count = count + 1
    if not logs:   # Check for empty list; e.g., no PDFs found
        print('')
        print('Ooops! No ADIF files found!!  \nTerminating script...\n')
        sys.exit()
    else:
        print('')
        return logs


print('\n*** add_tags.py ' + __version__ + ' by WB3GCK ***\n')


# Prompt the user for the integer number corresponding to the desired message file.
# Check to make sure the input is within the proper range
good_file = False
file_choice = ''
file_list = listfiles()  # Get a list of ADIF files
file_in = ''
while not good_file:
    file_in = input('Enter the ADIF file number:  ')
    if not file_in.isdecimal():  # Check for non-numeric input
        print('Input must be a numeral!  Try again, Pal!')
        continue
    else:
        file_nr = int(file_in) - 1
    if file_nr < 0 or file_nr > (len(file_list) - 1):  # Check for out of range input
        print('Input out of range.  Better try that again, Bucko.')
    else:
        file_choice = file_list[file_nr]  # Sets the selected file name
        good_file = True

# Check the selected file for the presence of a TX_PWR tag
if ('TX_PWR' in open(file_choice).read()) or ('tx_pwr' in open(file_choice).read()):
    has_pwr = True
else:
    has_pwr = False

# Prompt user for the MY_QTH value
my_qth = input(r'Enter QTH:  ')
qth_tag = '<MY_QTH:' + str(len(my_qth)) + '>' + my_qth + ' '

# Prompt user for MY_RIG value
my_rig = input(r'Enter Rig:  ')
rig_tag = '<MY_RIG:' + str(len(my_rig)) + '>' + my_rig + ' '


# Prompt user for TX_PWR if there is no TX_PWR in the selected file
good_pwr = False
tx_pwr = ''
pwr_tag = ''
if not has_pwr:
    while not good_pwr:
        tx_pwr = input('Enter TX_PWR:  ')
        # Check for numerals and decimal points only
        try:
            val = float(tx_pwr)
            good_pwr = True
        except ValueError:
            print("Hey Bucko! Numerals and decimal points only!!")
    pwr_tag = '<TX_PWR:' + str(len(tx_pwr)) + '>' + tx_pwr + ' '

# Create the replacement tag
if not has_pwr:
    new_tags = qth_tag + rig_tag + pwr_tag + '<EOR>'
else:
    new_tags = qth_tag + rig_tag + '<EOR>'

# Modify the selected ADIF file
file = open(file_choice, 'r')
filedata = file.read()

# Replace the target string
if '<EOR>' in open(file_choice).read():
    filedata = filedata.replace('<EOR>', new_tags)
elif '<eor>' in open(file_choice).read():
    filedata = filedata.replace('<eor>', new_tags)
else:
    print('Are you sure this is a valid ADIF file?? \nTerminating script...')
    sys.exit()

file = open(file_choice, 'w')
file.write(filedata)

print('\nGreat success! ' + file_choice + ' modified.\n')

How to Run It

I run this script on a Windows machine, so this section is focused on that operating system. For Linux and Mac, you might need to do some research.

  • Make sure you have Python 3 installed on your computer. If not, you can get it for free at python.org.
  • Download the script file here and unzip it.
  • Place the ADIF file you want to modify in the same folder as the script file. 
  • Open a command window and navigate to the directory containing the script and ADIF file.
  • Start the script with the command: python add_tags.py. I use a Windows batch file to save having to save some typing. Depending on how Python is installed on your system, you might be able to just double-click the script file.
  • Following the prompts, enter the necessary information. That’s all there is to it.
Screenshot of the add_tag.py script running
Screenshot of the add_tag.py script running

Some Precautions

  • This script doesn’t check to see if you have already modified the ADIF file. If you have, you’ll end up with redundant fields in your ADIF file. Your logging program probably won’t like that.
  • Always keep a backup of your ADIF file or have an easy way to regenerate it. If you make a mistake in one of your inputs, just start over with another copy of the ADIF file.
  • I’ve only included a minimal amount of error checking in the script, so it’s far from bullet-proof. Double-check each input carefully before pressing <ENTER>.

Disclaimers

Of course, no article on software is complete without a disclaimer or two.

  • Use this script at your own risk. It works for me, but I make no guarantees that it will work for you.
  • I can’t offer any technical support or tailor it to your application.

So there you have it. If you find yourself having to routinely add fields to an ADIF file—maybe not, but you never know—feel free to modify this script to suit your needs. It should be easy to adapt it to add other ADIF tags.

If you want to dabble in Python programming, Google is your friend. There are tons of resources out there for learning Python.

73, Craig WB3GCK