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.

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

The Forgotten Antenna

We’re expecting some snow and sleet tomorrow, so I figured I head out for a little QRP-portable operating before the nasty weather moved in. So, I drove to nearby Black Rock Sanctuary for a quick outing.

The temperature today in southeastern Pennsylvania was a mild 42° F. I planned to operate from a picnic table using my AlexLoop clamped to the table. However, in my haste to get on the road, I neglected to put the AlexLoop in my truck. As Homer Simpson would say, “Doh!”

I had some antenna wires, but I didn’t think it was a good idea to mess with trees in a nature preserve. Fortunately, I always keep the necessary equipment for my stationary-mobile set-up in the truck. With my 19-foot vertical mounted on the back, I operated from inside the truck.  

A view of the "cockpit" of the truck
A view of the “cockpit” of the truck

The bands were in great shape this afternoon. It didn’t take long on 40M to put 5 SKCC contacts in the log. I also had a nice rag chew with K8RQX in Michigan before moving up to 20M.

Up on 20M, I had a coast-to-coast SKCC QSO with WD7JS in Washington. Russ was booming into Pennsylvania and gave my 5-watt signal an “honest 539.” I’ll take it! I moved down to check out 30M and had a quick SKCC QSO with K5MP in Florida before packing up.

Despite my absent-mindedness, It was a nice outing. Next time, I’ll have to pay better attention to my checklist.

72, Craig WB3GCK

Polar Bear Moonlight Madness – November 2019

Although the Polar Bear QRP Club has been around for 13 years, the club hasn’t been very active in recent years. The club’s recent move from Yahoo Groups to groups.io prompted renewed interest among the members.

Mike VE3WMB/VA2NB organized one of the club’s Polar Bear Moonlight Madness Events (PBMME). The PBMME is an informal event where we get on the air—typically outdoors—on a Saturday closest to a full moon.

For today’s PBMME, I drove out to Upper Schuylkill Valley Park near Royersford, PA, one of my favorite portable locations. I was tempted to set up at a picnic table but, with the 39°F temperature (and a windchill of 29°F), I opted to operate from my truck. I went with my usual set up: my homebrew 19-foot vertical mounted on the truck and my KX3 up in the cab.

My operating location in Upper Schuylkill Valley Park for the November 2019 Polar Bear Moonlight Madness Event (PBMME).
My operating location in Upper Schuylkill Valley Park for the November 2019 Polar Bear Moonlight Madness Event (PBMME).

I started on 40M and almost immediately got a call from VA2NB. Mike was operating from his cottage in Quebec. This was the first Polar Bear QSO for each of us in a long time. Unfortunately, Mike would be the only Polar Bear in my log today.

After working Mike, I went on to make another half-dozen QSOs, including a couple of two-way QRP contacts and some nice rag chews. I also picked up a new SKCC number from NC7H Idaho. There were a few other Polar Bears on the air but, sadly, I never heard them.

The Schuylkill River at Upper Schuylkill Valley Park
The Schuylkill River at Upper Schuylkill Valley Park

I was only out for 2 hours but it was a fun time. Thanks to VA2NB for preventing me from getting skunked today. I’m hoping that activity in the Polar Bear QRP Club will continue to grow.

72, Craig WB3GCK