• The ARRL Letter

    From Sean Dennis@1:18/200 to All on Sat Aug 15 21:24:20 2026
    Hello All,

    I wrote a Python script that scrapes the ARRL Letter from the ARRL site and will post it in here every Thursday afternoon Eastern time. I did a test run of last Thursday's letter and the script works, so I'll manually paste it in here this time.

    If any of you are having issues reading the whole letter, please let me know ASAP. I'll figure out a way to post it in chunks.

    === Cut ===
    ARRL Letter Issue

    The ARRL Letter for August 13, 2026

    John E. Ross, KD8IDJ, Editor | August 13, 2026

    In this Issue:

    10-Year-Old Receives Ham License and More

    Colombian Amateurs Help in Earthquake Response; Clear Frequencies
    Requested

    ARRL Year of the Club Contests Celebrate Outstanding Club Websites and Newsletters

    ARISS Receives Challenger-7 Recognition

    ARRL Live Events and Podcasts

    Announcements

    Just Ahead in Radiosport

    Upcoming ARRL Conventions and Major Events

    10-Year-Old Receives Ham License and More

    Ten-year-old new ham Reynaldo Mangual, KM7HFU, is presented with his certificate of successful completion of the Technician exam by Maricopa
    Amateur Radio Club president and 4-H group leader Michael Mills, NO7S.
    [Photo courtesy Maricopa Amateur Radio Club]

    Ten-year-old new ham Reynaldo Mangual, KM7HFU, is presented with his certificate of successful completion of the Technician exam by Maricopa
    Amateur Radio Club president and 4-H group leader Michael Mills, NO7S.
    [Photo courtesy Maricopa Amateur Radio Club]

    A brand-new young ham in Arizona got more than he was expecting after
    passing his Technician class license exam earlier this month.
    Along with getting his call sign, KM7HFU, from the FCC, 10-year-old
    Reynaldo Mangual was presented by the Maricopa Amateur Radio Association
    (MARA) with an almost-new Yaesu FT-857D HF/VHF/UHF multimode
    transceiver, an LDG YT-100 automatic antenna tuner, and power supply.
    The station had been donated anonymously to the club with the
    stipulation that it be presented to a deserving young person upon
    successfully earning an amateur radio license.
    In addition the club reports that, in an effort to introduce him to
    Morse code, Reynaldo was also given a fully-restored World War II-era
    J-38 telegraph key by club member Steve Miller, W6DSM, who collects and restores historic keys.

    Reynaldo joined ARRL this week! He is also a member of the Pinal County
    4-H Amateur Radio Club, whose youth program is supported by 4-H, MARA,
    the Arizona 4-H Foundation, and a grant from the Amateur Radio Council
    of Arizona.
    Reynaldo is now MARAs youngest member. The Maricopa Amateur Radio
    Association is an ARRL-Affiliated Club.

    ARRL offers a no-cost membership option for full-time students aged 21
    years or younger. Free Student Membership is available at
    www.arrl.org/student.

    Colombian Amateurs Help in Earthquake Response; Clear Frequencies
    Requested

    Amateur radio operators in Colombia are providing significant
    communications support following the major earthquake and aftershocks
    that struck the country on August 10, 2026. The death toll has
    reportedly exceeded 200 people, with many more still missing, and major
    damage is reported to buildings and infrastructure.

    International Amateur Radio Union, Region 2 (IARU R2) Emergency
    Communications Coordinator Carlos Alberto Santamaria Gonzalez, CO2JC,
    provided an update Thursday morning, August 13, from Faber Mosquera,
    HK6F, the emergency coordinator for the Liga Colombiana de
    Radioaficionados (LCRA), Colombias national amateur radio association.
    Mosquera said amateurs from various radio clubs and associations across
    the country have been helping to maintain and/or restore communications
    in affected areas.

    Volunteers from the Liga Radio Quindio were heading to Cerro Campanario,
    a peak at an altitude of 3,600 meters (11,800 feet) above sea level, to
    attempt to restore the club's repeater stations using solar panels and batteries.
    This peak hosts repeater stations for both the amateur radio service and
    the municipal and departmental risk management systems in the area.
    Another group of amateurs, from the Asociacion de Radioaficionados del
    Eje Cafetero, was working at their repeater site at the time of the
    earthquake.
    They reported that cellular and Wi-Fi networks immediately went down,
    and the repeaters also failed because the backup transfer system to the
    power generator did not activate.
    However, within 15 minutes, they had reactivated not only the amateur
    repeaters but also those of other services that share the site.
    Mosquera reported that amateur radio clubs from other parts of the
    country were providing additional support to restore and maintain communications.

    The Colombian amateur radio community is doing vital work by making its communication systems and human resources available for rescue,
    recovery, and locating individuals affected by this disaster, said IARU
    Region 2 Emergency Coordinator CO2JC, adding, This makes us proud to be
    amateur radio operators.

    CO2JC has also requested that all amateurs avoid transmitting on the
    IARU Region 2 emergency frequencies of 3985, 7060, 7240, 7275, 14300,
    and 21360 kHz, as well as 146.520 MHz for those in VHF range of
    Colombia, in order to minimize potential interference to emergency communications.

    See ARRL News
    for updates to this story as they become available.

    ARRL Year of the Club Contests Celebrate Outstanding Club Websites and Newsletters

    As part of ARRLs 2026 Year of the Club
    spotlight, Affiliated Clubs were invited to show how they use two
    important communications tools their websites and newsletters to
    engage members, strengthen their organizations, and promote amateur
    radio.
    The response was enthusiastic, with more than 80 entries submitted in
    each contest from clubs across the country.

    The contests were designed not simply to identify the best-looking
    website or newsletter, but to recognize radio clubs that are using these
    tools effectively to serve their members.
    A good club website can make it easy for prospective and current members
    to find information, learn about activities, and get involved.
    A good newsletter can keep members connected between meetings, share
    technical knowledge and operating opportunities, celebrate club accomplishments, and give members another reason to stay engaged.

    The goal was to highlight the many creative ways radio clubs communicate
    with their members, said ARRL Director of Publications and Editorial
    Becky Schoenfeld, W1BXY. We hope these winning websites and newsletters
    will give other clubs ideas they can adapt to their own organizations.
    Theres no single formula for an effective club communication what
    matters is understanding your audience and giving them useful,
    interesting reasons to connect and keep connected with the club.

    Outstanding Club Newsletters

    Newsletter entries were judged in three membership categories: Large
    Clubs (more than 120 members), Medium Clubs (60120 members), and Small
    Clubs (fewer than 60 members). Judges considered the navigability and attractiveness of the publications, as well as the variety and quality
    of their content. Two entries also earned special commendations for
    doing an outstanding job serving specialized audiences.

    The winners are:

    Large Clubs

    First Place: Gloucester County Amateur Radio Club, W2MMD, Pitman, New
    Jersey CrossTalk, edited by Jeffrey Garth, WB2ZBN

    Second Place: Long Island CW Club, W2LCW, Global Long Island CW Club Newsletter, edited by Richard Spohn, WB2GXM

    Ozaukee Radio Club, W9CQO, of Grafton, Wisconsin, is the winner of the
    ARRL Club Newsletter Contest in the Medium Clubs category. The Ozaukee
    Radio Club Newsletter is edited by William Shadid, W9MXQ.

    Medium Clubs

    First Place: Ozaukee Radio Club, W9CQO, Grafton, Wisconsin The Ozaukee
    Radio Club Newsletter, edited by William Shadid, W9MXQ

    Second Place: East Greenbush Amateur Radio Association, W2EGB, East
    Greenbush, New York Sidebands, edited by Bryan Jackson, W2RBJ

    Honorable Mention: Providence Radio Association, W1OP, Johnston, Rhode
    Island The Old Professor, edited by Thomas Greenwood, W1ER

    Small Clubs

    First Place: Peekskill/Cortlandt Amateur Radio Association, W2NYW,
    Greater Peekskill/Cortlandt Area, New York PCARA Update, edited by
    Malcolm G. Pritchard, NM9J

    Second Place: Morongo Basin Amateur Radio Club, W6BA, Morongo Basin,
    California MBARC Beacon, edited by Aaron Chesney, KM6IAU

    Special Commendations

    Best Newsletter for a Specialized Audience: Families and Youth: Sci-Tech Amateur Radio Society, W1STR, Natick, Massachusetts Sci-Tech Amateur
    Radio Society News, edited by Robert F. Phinney, K5TEC

    Best Newsletter for a Specialized Audience: Global Audience: Young
    Ladies Radio League, K4LMB, Global YL Harmonics, edited by Kathleen
    Houlihan, WA5DUC

    Newsletter contest judges were:
    ARRL Director of Publications and Editorial Becky Schoenfeld, W1BXY
    ARRL Senior Director of Marketing and Innovation Bob Inderbitzen, NQ1R
    NCJ Editor and PVRC Newsletter Editor John Pescatore, K3TN
    ARRL News Editor, past Ohio Section PIC, and past coordinator of the
    Ohio Section Newsletter Contest John Ross, KD8IDJ
    Outstanding Club Websites

    The website contest focused on three key areas: layout, content, and accessibility. Judges with extensive experience in website development,
    systems administration, and web infrastructure evaluated the entries to identify sites that effectively serve their clubs and their audiences.

    Cumberland Valley Amateur Radio Club, W3ACH, serving south-central Pennsylvania, is the winner of the ARRL Club Website Contest. The
    webmaster is Caleb C. Jacobs, KC3VPB.

    The winners are:

    First Place: Cumberland Valley Amateur Radio Club, W3ACH, Chambersburg, Pennsylvania www.w3ach.com, webmaster Caleb C. Jacobs, KC3VPB

    Second Place: Sierra Foothills Amateur Radio Club, W6EK, Auburn,
    California www.w6ek.org, webmaster Mike Smitty Smith, WB1G

    Third Place: Ventura County Amateur Radio Club, K6MEP, Ventura,
    California k6mep.org, webmaster David Schmidt, AI6VX

    Website contest judges were:

    ARRL New England Division Vice Director Phil Temples, K9HI

    ARRL Eastern Massachusetts Technical Coordinator Dan Brown, W1DAN

    ARRL member Erica Zavaleta, W7WXR. Erica is currently a DevOps Engineer managing web infrastructure for a regional ISP.

    The winning websites and newsletters are worth a visit not only to congratulate the clubs, but also to see how they organize information,
    promote activities, welcome newcomers, and communicate what makes their
    clubs active and relevant. They offer examples of different approaches
    to content, design, and audience demonstrating that success doesn't
    have to follow a particular template.

    The contests are part of ARRLs broader Year of the Club effort to
    celebrate the vital role that amateur radio clubs play in building and sustaining the amateur radio community. Clubs are where many radio
    amateurs first find a mentor, learn a new skill, participate in an
    event, or make the connections that keep them active in the hobby.

    Club leaders, newsletter editors, and webmasters: take a look at what
    these clubs are doing and borrow an idea or two for your own club, said
    ARRL Emergency Communications and Field Services Director Josh Johnston, KE5MHV. Year of the Club is a celebration of what clubs accomplish and
    an invitation to keep building on that success.

    ARRL and the contest judges are grateful for the enthusiastic response
    to the call for contest entries, and commend all entrants on the talent
    and time they devote to the creation of these important club
    communication tools.

    The contest winners will be honored at the 2026 ARRL National
    Convention, hosted by the Huntsville Hamfest, August 2123 in Huntsville, Alabama, and will also be featured in a 2026 issue of QST.

    ARISS Receives Challenger-7 Recognition

    ARISS, Amateur Radio on the International Space Station, has been
    honored with the prestigious Challenger-7 Recognition, a national honor celebrating organizations whose work reflects the spirit, vision, and
    values of the seven crew members of the Space Shuttle Challenger mission STS-51-L.

    This recognition is a tribute, not a competition, says the Challenger
    Center.
    It honors those who embody the Challenger crews values of exploration, learning, and inspiration, while also celebrating trailblazing
    organizations and programs that will carry this mission forward into the future.

    Nominations from nonprofit STEM (Science, Technology, Engineering, and
    Math) programs that have a national-level impact on STEM learning and
    other STEM advocates were submitted by members of the broader Challenger
    Center community, with honorees selected by an appointed committee.
    The recognitions are part of the Challenger Centers 40th anniversary celebrations.

    ARISS representatives Frank Bauer, KA3HDO (middle), and Jackie Blumer,
    KC9LEH (right), accepted the Challenger-7 Recognition from Challenger
    Center's Mike Kincaid (left) during the organization's 40th anniversary celebration. [Challenger Learning Center photo]

    The ARISS team is humbled to receive the Challenger-7 recognition, said ARISS-USA
    Executive Director and ARISS International Chair Frank Bauer, KA3HDO. We
    thank the Challenger Center community for this honor as well as treasure
    our long-standing partnership with them.
    The outcomes of our ARISS on-board astronaut experiences emulate the exploration and education spirit of the Challenger crewto engage and
    educate our next generation of explorers in STEM while giving them the
    tools and inspiration to prepare them for future STEM careers.

    Other awardees this year include AIAA American Institute of Aeronautics
    and Astronautics, American Rocketry Challenge, and Janets Planet.

    Read the ARISS News Release here.

    ARRL Live Events and Podcasts

    On the Air LIVE

    What if you need to send a message from a disaster area, but all forms
    of communication are down? The ARRL National Traffic System could be
    your tool to get the message out. Join ARRL Education Specialist Wayne
    Greene, KB4DSF, and learn about the history of the National Traffic
    System, how it works, and how you can become a regular user and be
    prepared to send and relay traffic. The livestream will air on the
    ARRL's learning center, learn.arrl.org, August 25th at 8 PM Eastern. Preregistration is required and can be accomplished through the Learning Center.

    Date: August 25, 2026

    Time: 8 PM Eastern / 5 PM Pacific

    Register Now
    | Previously Recorded Sessions

    Listen to , available every Friday. is a summary of the week's top news stories in the world of amateur radio and ARRL, along with interviews
    and other features. More info
    | Listen on Blubrry
    | Also available on iTunes and Apple Podcasts.

    On the Air

    Sponsored by Icom

    Hams and Hurricane Season

    ARRL Eastern Massachusetts Section Emergency Coordinator Rob Macedo,
    KD1CY, joins the podcast to talk about the Atlantic hurricane season and
    ham radios role in it, as a follow-up to the July/August 2026 issues
    article Ham Radio and the Hurricane Season by Rick Palm, K1CE. More info
    | Listen on Blubrry
    | Also available on iTunes and Apple Podcasts.

    Announcements

    The following America250 W1AW Portable Activations begin 0000z on
    Wednesdays, and end 2359z on Tuesdays (7 days total for each
    activation). See the complete schedule at www.arrl.org/america250-was.

    08/12/2026 Idaho W1AW/7 (host ND7L)

    08/12/2026 Ohio W1AW/8 (host K8ZT)

    08/12/2026 Massachusetts W1AW/1 (host W1AST)

    08/19/2026 Alabama W1AW/4 (host KI4KWR)

    08/19/2026 Hawaii W1AW/KH6 (host AD6E)

    08/19/2026 Oregon W1AW/7 (host N7JI)

    The North East USA SOTA
    Club invites activators and chasers of all experience levels to the 4th
    annual W2 Fall Campout, September 10 13, in New Yorks Adirondack
    Mountains. Throughout the long weekend (Thursday Sunday), look for
    Summits on the Air activators calling "CQ SOTA" from various peaks
    across the Adirondack Mountains on VHF 146.58 MHz and across the HF
    bands using CW, SSB, and FM. For POTA chasers, this is a great
    opportunity to get US - 2001 in the log as many of the summits are
    within the Adirondack State Park. Activators will be base-camped at the Wilmington Notch Campground in Wilmington, New York, with a group dinner
    and meetup on Saturday, September 12, at the Twisted Raven in
    Wilmington. For more information on Summits on the Air and getting
    started with activating and/or chasing, visit www.sota.org.uk and
    connect with the North East USA SOTA Club on Facebook.

    A new ARRL video provides tips on applying for the new ARRL America250
    Worked All States (WAS) Award. Available on the ARRLHQ YouTube channel,
    the video features Education & Learning Support Specialist Max Freedman,
    N4ML, who walks viewers through logging into Logbook of The World
    (LoTW), creating a new LoTW Worked All States account or selecting an
    existing account, adding a QSO Set and related rules, and viewing award progress at america250.arrl.org. Once youve qualified for the award,
    return to america250.arrl.org to apply for and purchase your
    certificate. View the new video at www.youtube.com/watch?v=yRKSIbLFj5w.

    Open Positions at ARRL

    Come join the headquarters staff of ARRL The National Association for
    Amateur Radio! We are currently seeking qualified applicants for the
    following positions:

    Membership Manager

    Technical Editor

    RFI Lab Engineer

    Public Relations and Outreach Manager

    Advertising Sales Manager

    Member Services Representative

    Full details may be found on the ARRL HR web page at
    www.arrl.org/careers.

    ARRL is an equal opportunity employer.

    Just Ahead in Radiosport

    August 13 -- VHF-UHF FT8 Activity Contest-NA (digital)
    August 15 - 16 -- SARTG WW RTTY Contest (digital)
    August 15 - 16 -- Russian District Award Contest (CW, phone)
    August 15 - 17 -- ARRL 10 GHz and Up Contest (CW, phone, digital)
    August 15 -- SARL Youth QSO Party (phone)
    August 15 - 16 -- Keyman's Club of Japan Contest (CW)
    August 15 -- Feld Hell Sprint (digital)
    August 15 - 16 -- North American QSO Party, SSB (phone)
    August 15 - 16 -- 2100 1.8-28 CVA DX Contest (CW)
    August 16 -- NJQRP Skeeter Hunt (CW, phone)
    August 16 -- ARRL Rookie Roundup, RTTY (digital)
    August 16 - 17 -- Run for the Bacon QRP Contest (CW)
    August 20 -- VHF-UHF FT8 Activity Contest-NA (digital)
    August 20 - 21 -- Walk for the Bacon QRP Contest (CW)
    August 20 -- NTC QSO Party (CW)
    August 22 - 23 -- YO DX HF Contest (CW, phone)
    August 22 - 23 -- ARSI VU DX Contest (CW, phone)
    August 22 - 23 -- Ohio QSO Party (CW, phone)
    August 22 - 24 -- Hawaii QSO Party (CW, phone, digital)
    August 23 -- CVA DX Contest, SSB (phone)
    August 23 -- SARL HF CW Contest (CW)

    Remember to visit the ARRL Contest Calendar
    for more events and information.

    Upcoming ARRL Conventions and Major Events

    ARRL Section, State, and Division Conventions (next 60 days)

    Search the ARRL Hamfest and Convention Database at www.arrl.org/hamfests
    to find events in your area.

    August 13 16 | Northeast HamXposition, hosting the ARRL New England
    Division Convention, Marlborough, Massachusetts

    August 15 | Cincinnati Hamfest, hosting the ARRL Great Lakes Division Convention, Owensville, Ohio

    August 21 23 | Huntsville Hamfest, hosting the 2026 ARRL National
    Convention, Huntsville, Alabama

    August 28 30 | Wyoming HamCon, hosting the ARRL Rocky Mountain Division Convention, Casper, Wyoming

    September 4 5 | Shelby Hamfest, hosting the ARRL North Carolina State Convention, Shelby, North Carolina

    September 26 | Red River Radio Amateurs Hamfest, hosting the ARRL
    Minnesota State Convention, Moorhead, Minnesota

    October 3 | Third Annual Micro Expo, hosting the ARRL Santa Barbara
    Section Convention, Camarillo, California

    October 3 | Wichita Area Hamfest, hosting the ARRL Kansas Section
    Convention, Wichita, Kansas

    October 9 10 | SPARK-CON 2026, hosting the ARRL Midwest Division
    Convention, Sedalia, Missouri

    October 10 | North Star Radio Convention, hosting the ARRL Dakota
    Division Convention, Brooklyn Park, Minnesota

    Save the Date

    Join ARRL at these Division Conventions and other major events
    throughout the year.
    Beginning in the fourth quarter, this list will also include significant
    events scheduled for the following year.

    October 16 18 | Pacificon, hosting the ARRL Pacific Division
    Convention, San Ramon, California

    Have News for ARRL?

    Submissions for the ARRL Letter and ARRL News can be sent to
    news@arrl.org. -- John E. Ross, KD8IDJ, ARRL News Editor

    ARRL -- Your One-Stop Resource for Amateur Radio News and Information

    Join ARRL or renew today!
    No other organization works harder to promote and protect amateur radio. Membership supports benefits, services, programs, and advocacy to help
    you get (and stay) active and on the air. Membership includes access to
    digital editions of all four ARRL magazines: QST, On the Air, QEX, and
    NCJ.

    Listen to , available every Friday.

    The ARRL Letter is available in an accessible format, posted weekly to
    the Blind-hams Groups.io
    email group. The group is dedicated to discussions about amateur radio
    as it concerns blind hams, plus related topics including ham radio use
    of adaptive technology.

    On the Air. Published bimonthly for newer hams, featuring introductions
    to popular activities and key concepts, equipment buying guides, and
    practical projects with step-by-step instructions all in language thats
    easy to understand.

    NCJ -- National Contest Journal. Published bimonthly, features articles
    by top contesters, letters, hints, statistics, scores, NA Sprints, and
    QSO parties.

    QEX -- A Forum for Communications Experimenters. Published bimonthly,
    features technical articles, construction projects, columns, and other
    items of interest to radio amateurs and communications professionals.

    Free of charge to ARRL members...

    Subscribe
    to the ARES Letter (monthly public service and emergency communications
    news), the NTS Letter (monthly news about the ARRL National Traffic
    System message-relay network), the ARRL Contest Update (biweekly contest newsletter), Division and Section news alerts, and much more!

    Find ARRL on Facebook! Follow us on Threads, X, and Instagram.

    The ARRL Letter is published Thursdays, 51 times each year. ARRL members
    may subscribe at no cost or unsubscribe by editing their profile at www.arrl.org/opt-in-out.

    Copyright 2026 American Radio Relay League, Incorporated.
    Use and distribution of this publication, or any portion thereof, is
    permitted for non-commercial or educational purposes, with attribution.
    All other purposes require written permission.

    ARRL

    225 Main Street, Newington, CT 06111-1400

    www.arrl.org 860-594-0200

    2026 - ARRL The National Association for Amateur Radio
    === Cut ===

    -- Sean

    ... WinErr 005: Multitasking attempted: system confused.
    --- GoldED+/LNX 1.1.5-b20240209
    * Origin: Outpost BBS * Johnson City, TN (1:18/200)
  • From Mortar M.@1:124/5016 to Sean Dennis on Mon Aug 17 09:40:04 2026
    Re: The ARRL Letter
    By: Sean Dennis to All on Sat Aug 15 2026 21:24:20

    I wrote a Python script that scrapes the ARRL Letter from the ARRL site and will post it in here every Thursday afternoon Eastern time.

    Is this OK with ARRL? Site owners can get rather touchy about scraping.

    Can you post the script? I'm interested in how that's done.
    --- SBBSecho 3.37-Linux
    * Origin: End Of The Line BBS - endofthelinebbs.com (1:124/5016)
  • From Sean Dennis@1:18/200 to Mortar M. on Mon Aug 17 22:09:56 2026
    Hello Mortar,

    17 Aug 26 09:40, you wrote to me:

    Is this OK with ARRL? Site owners can get rather touchy about
    scraping.

    From the bottom of each ARRL Letter:

    "Copyright (C) 2026 American Radio Relay League, Incorporated. Use and distribution of this publication, or any portion thereof, is permitted for non-commercial or educational purposes, with attribution. All other purposes require written permission."

    I make sure that's left in every "letter" I scrape.

    Can you post the script? I'm interested in how that's done.

    === Cut ===
    #!/usr/bin/env python3

    ### ARRL Letter Posting Script
    ###
    ### By Sean Dennis with assistance
    ### from Microsoft Copilot
    ###
    ### (C) Sean Dennis KS4TD
    ###
    ### Released under the MIT License.

    import requests
    import re
    import textwrap
    import unicodedata
    import os
    import sys
    import time

    BASE = "https://www.arrl.org"
    LETTER_LIST = "https://www.arrl.org/arrlletter"
    CACHE_FILE = os.path.expanduser("~/.arrlletter_cache")

    # ------------------------------------------------------------
    # Retry-capable fetcher with browser headers
    # ------------------------------------------------------------
    def fetch_with_retry(url, retries=5, delay=3):
    headers = {
    "User-Agent": (
    "Mozilla/5.0 (X11; Linux x86_64) "
    "AppleWebKit/537.36 (KHTML, like Gecko) "
    "Chrome/124.0 Safari/537.36"
    )
    }

    for attempt in range(1, retries + 1):
    try:
    print("Fetching {} (attempt {}/{})".format(url, attempt, retries))
    r = requests.get(url, headers=headers, timeout=20)
    r.raise_for_status()
    return r.text
    except Exception as e:
    print("Attempt {} failed: {}".format(attempt, e))
    time.sleep(delay)

    print("ERROR: All attempts failed.")
    return None

    # ------------------------------------------------------------
    # Utility functions
    # ------------------------------------------------------------
    def log(msg):
    print(msg)

    def to_ascii(s):
    return unicodedata.normalize("NFKD", s).encode("ascii", "ignore").decode("ascii")

    def load_cached_issue():
    if not os.path.exists(CACHE_FILE):
    return None
    try:
    with open(CACHE_FILE, "r") as f:
    return f.read().strip()
    except:
    return None

    def save_cached_issue(issue):
    try:
    with open(CACHE_FILE, "w") as f:
    f.write(issue)
    except Exception as e:
    log("Warning: could not save cache: {}".format(e))

    # ------------------------------------------------------------
    # 1. Fetch ARRL Letter index page (with retry)
    # ------------------------------------------------------------
    index_html = fetch_with_retry(LETTER_LIST)
    if index_html is None:
    sys.exit(1)

    # ------------------------------------------------------------
    # 2. Find newest issue link (single or double quotes)
    # ------------------------------------------------------------
    issues = re.findall(r"href=['\"](/arrlletterissue\?issue=\d{4}-\d{2}-\d{2})['\"]", index_html)
    if not issues:
    log("ERROR: No ARRL Letter issues found.")
    sys.exit(1)

    latest_issue_path = issues[0]
    latest_issue_url = BASE + latest_issue_path
    latest_issue_id = latest_issue_path.split("=")[-1]

    log("Latest ARRL Letter issue: {}".format(latest_issue_id))

    # ------------------------------------------------------------
    # 3. Check cache
    # ------------------------------------------------------------
    cached = load_cached_issue()
    if cached == latest_issue_id:
    log("Cached issue matches latest. Nothing new to download.")
    sys.exit(0)

    # ------------------------------------------------------------
    # 4. Download the issue HTML (with retry)
    # ------------------------------------------------------------
    page_html = fetch_with_retry(latest_issue_url)
    if page_html is None:
    sys.exit(1)

    # ------------------------------------------------------------
    # 5. Improved HTML cleanup
    # ------------------------------------------------------------
    import html

    # Remove scripts and styles
    clean = re.sub(r"<script.*?>.*?</script>", "", page_html, flags=re.DOTALL) clean = re.sub(r"<style.*?>.*?</style>", "", clean, flags=re.DOTALL)

    # Remove all HTML tags
    clean = re.sub(r"<[^>]+>", "", clean)

    # Decode HTML entities (&nbsp;, &#39;, etc.)
    clean = html.unescape(clean)

    # Remove "undefined" junk lines
    clean = clean.replace("undefined", "")

    # Collapse multiple spaces
    clean = re.sub(r"[ \t]+", " ", clean)

    # Remove repeated blank lines
    clean = re.sub(r"\n\s*\n\s*\n+", "\n\n", clean)

    # Remove repeated photo captions (ARRL duplicates them)
    clean = re.sub(r" \[Photo.*?\] ", "", clean)

    # Remove ARRL navigation/header lines
    clean = clean.replace("ARRL Home Page", "")
    clean = clean.replace("ARRL Audio News", "")
    clean = clean.replace("ARRL Letter Archive", "")

    # Remove unsubscribe footer
    clean = clean.replace("Unsubscribe from this list.", "")

    # Clean up leftover blank lines
    clean = re.sub(r"\n\s*\n+", "\n\n", clean)

    # Normalize line endings
    clean = clean.strip()

    # Normalize line endings
    clean = clean.strip()

    # ------------------------------------------------------------
    # 6. Convert to ASCII
    # ------------------------------------------------------------
    ascii_text = to_ascii(clean)

    1# ------------------------------------------------------------
    # 7. Normalize whitespace and wrap at 72 columns
    # ------------------------------------------------------------
    out_lines = []
    for line in ascii_text.splitlines():
    line = line.strip()
    if not line:
    out_lines.append("")
    continue
    wrapped = textwrap.wrap(line, width=72)
    out_lines.extend(wrapped)

    # ------------------------------------------------------------
    # 8. Write final file
    # ------------------------------------------------------------
    output_file = "/tmp/arrlletter-latest.asc"
    try:
    with open(output_file, "w") as f:
    f.write("\n".join(out_lines))
    log("Created {}".format(output_file))
    save_cached_issue(latest_issue_id)
    except Exception as e:
    log("ERROR: Could not write output file: {}".format(e))
    sys.exit(1)
    # ------------------------------------------------------------
    === Cut ===

    Here's the actual script called by MBSE (note that the "mbmsg" lines are wrapped):

    === Cut ===
    #!/bin/bash

    # Environment
    # PATH needed since cron doesn't inherit bash's environment
    export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    # Required by MBSE
    export MBSE_ROOT=/opt/mbse

    $MBSE_ROOT/bin/arrl_letter.py

    # Post in MIN_HAM
    mbmsg post "ARS KS4TD" "All" 61 "The ARRL Letter" "/tmp/arrlletter-latest.txt"

    # Post in Fidonet's HAM
    mbmsg post "ARS KS4TD" "All" 117 "The ARRL Letter" "/tmp/arrlletter-latest.txt" -
    === Cut ===

    I believe the Python script will run under Windows with minor modifications.

    -- Sean

    ... "I have a love interest in every one of my films: a gun." - Schwarzenegger --- GoldED+/LNX 1.1.5-b20260304
    * Origin: Outpost BBS * Johnson City, TN (1:18/200)
  • From Mortar M.@1:124/5016 to Sean Dennis on Tue Aug 18 10:35:54 2026
    Re: The ARRL Letter
    By: Sean Dennis to Mortar M. on Mon Aug 17 2026 22:09:56

    I believe the Python script will run under Windows with minor modifications.

    Coolness, thanks.
    --- SBBSecho 3.37-Linux
    * Origin: End Of The Line BBS - endofthelinebbs.com (1:124/5016)