(Re)Learning Morse Code

When I first received my amateur radio license in 2019, I barely thought about Morse code. Older hams reminded me that Morse code was once a required part of the exam for obtaining a license, and that new operators should be thankful for the much easier tests of recent years that don't require it. A few months after I received my technician license, a fellow ham (one of my Elmers) invited me on a hike for Summits on the Air (SOTA). He worked stations around the world on CW using 8 watts of power and a key made from paperclips and spare wood pieces. I was intrigued and decided to begin learning Morse code.

After a few months of studying, I purchased a decent Morse code paddle. By this point, I was a general class operator with HF privileges. I called CQ on 40 meters for several nights using CW. When a station replied to my call one evening, I discovered, to my horror, that I could not understand the code transmitted by the operator on the other end. The speed was not excessively fast, and yet I could not complete the QSO. I was frustrated and didn't understand what had happened.

When studying during the previous months, I had relied on visual reference materials to learn Morse code. I had a reference guide with the dots and dashes representing each letter and number on it. When I listened to pre-recorded audio clips of QSOs, I diligently followed along with my visual aid, mentally translating each sound into pictures of dots and dashes. The proper way to study Morse code is to listen to the sounds, translating them directly into letters and numbers. The extraneous step of visualizing the dots and dashes in your head significantly slows down comprehension and response time. Additionally, I had focused too much of my studying on transmitting instead of receiving. This was the cause of my inability to complete my first Morse code QSO! I needed to relearn.

In many ways, relearning Morse code is harder the second time around, especially since I'm coming to it with my existing visualizations. I've now been using a mobile phone app called MorseZapp to help me break my bad Morse code habits. The paid version has a lot of practice exercises for both transmitting and receiving in addition to exercises on Q signals and common CW phrases. I highly recommend this app if you have an Apple device.

I practice with the app at least once or twice a week, and I've now completed several successful QSOs on both 40 meters and 20 meters. It's a huge improvement from where I was in 2019.

Tags: amateurradio cw

1 comment(s)

Webmention

I'm now sending and receiving Webmentions on this site!

Webmention is similar to Pingback, except it is simpler to implement. I wrote my own Webmention handler following the spec on the W3C web site.

The core concept is that an HTTP endpoint receives a POST request with two variables set: source and target. When sending outbound Webmention requests (e.g. links from your site to an external site), the source will be a page on your site, and the target will be the external site. When receiving inbound Webmention requests (e.g. an external site linking to your site), the source will be the external site, and the target will be a page on your site.

The Webmention protocol requires that the source and target are valid URLs and that the source actually links to the target. Checking that the source links to the target requires retrieving the source over the network and parsing it for links. That lends itself to abuse by malicious actors if the processing is done synchronously. To mitigate some of the abuse risk, my Webmention receiver processes inbound and outbound requests asychronously (i.e., by storing the requests in a database and processing them later via a cron job).

Pingback was plagued with spam almost from inception, and if Webmention is more widely implemented, it will most likely suffer the same fate. There are multiple extensions to Webmention (like Vouch) that try to reduce unwanted spam. I'll be implementing Vouch in the near future on my site.

What happens once a Webmention is received and processed? The spec doesn't define any required action beyond the HTTP 202 - Accepted response on success or HTTP 400 - Bad Request on failure. I intend to publish any Webmention requests as comments on the blog post for which the request was received. The code to handle that portion of the process is still in progress.

For now, I am sending the Webmention endpoint URL for each blog post on my site as part of the Link header. Most Webmention libraries should be able to retrieve and parse the endpoint from that header.

At some point, once I feel comfortable with my Webmention implementation, I'll likely release it on Github under a BSD-style license.

Tags: webmention

0 comment(s)

Markdown

I wrote this blog platform specifically for my site. It's a minimalistic platform intended for a small site with a single author or administrator. As I was developing the platform, I debated how to handle the input of new entries, specifically whether to include HTML tags in the content of an entry when storing data in the database. I originally stored the entry content as plaintext without HTML tags, and when displaying the content, I used PHP's nl2br method to convert newlines to HTML line break tags.

That solution left me unsatisfied; it felt like a hack. Ultimately I settled on using markdown to input new entries in the system. I store the markdown plaintext in the database, and when displaying the content, I utilize Parsedown to convert the markdown to HTML.

The blog entries can now be displayed for the web quite easily, or they can be used in other applications that understand markdown. Arguably, HTML is widespread enough that portability concerns should be minimal, but its hierarchical nature means that a valid HTML document requires the appropriate opening tag, header, body, closing tag, etc. A blog entry in a database with basic HTML tags is not a valid HTML document on its own. With markdown, the plaintext of the content in the database is valid and can be easily rendered as HTML.

Pedantic? Perhaps, but this solution is satisfying.

Tags: markdown

1 comment(s)

First Post

Another blog, another inaugural post. Another wellspring of activity that lasts through the warm months and drifts away in the colder ones.

I'm not sure what I want this blog to represent. Maybe a reading list? A brief synopsis of my day? Quotes and random interesting facts?

Our modern lives are difficult to quantify because we are taken in so many directions simultaneously. The digital world lures us into its ethereal and luminal spaces. It brings connection without presence, experience without perception. We are everything at once and nothing at all.

I'd like to write more about my relationship with the online world in terms less poetic than above. I'd like to write about my work in technology and my search for meaning.

Maybe this blog will give me a chance to do so.

2 comment(s)