<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Homepage on AA9PW Amateur Radio Practice Site</title>
    <link>https://www.aa9pw.com/</link>
    <description>Recent content in Homepage on AA9PW Amateur Radio Practice Site</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 18 Jan 2025 12:33:46 +1000</lastBuildDate>
    <atom:link href="https://www.aa9pw.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Learning Morse Code</title>
      <link>https://www.aa9pw.com/morsecode/learning-morse-code/</link>
      <pubDate>Sun, 18 Nov 2018 12:33:46 +1000</pubDate>
      <guid>https://www.aa9pw.com/morsecode/learning-morse-code/</guid>
      <description>&lt;p&gt;First of all, I would like to say that this is not meant to be a ‘definitive guide’ to learning morse code! There are many ways to do it, the best way being the one that works for you. This page presents some of the conventional wisdom plus a few ideas on how you might use the morse code generator found at this web site (or morse software running on your own computer). Above all, Regular Practice seems to be the key to drilling the sounds into your head so they become second nature. I’ve reproduced a useful article by David Finley on learning code using the Koch method.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Technician</title>
      <link>https://www.aa9pw.com/amateur-radio-exam-practice/technician/</link>
      <pubDate>Sun, 18 Nov 2018 12:33:46 +1000</pubDate>
      <guid>https://www.aa9pw.com/amateur-radio-exam-practice/technician/</guid>
      <description>&lt;p&gt;The FCC Technician Exam (Element 2) consists of 35 questions, you are required to get over 75% (26 out of 35) for a passing grade. There are 10 subelements, T0-T9, and the full exam consists of questions from each subelement (and from each of the topic groups within each subelement). You can use the checkboxes below to include some or all of the subelements in your practice exam.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Current Question Pool&lt;/strong&gt;: 424 Questions, Effective July 1, 2022 - June 30th 2026&lt;/p&gt;</description>
    </item>
    <item>
      <title>General</title>
      <link>https://www.aa9pw.com/amateur-radio-exam-practice/general/</link>
      <pubDate>Sun, 18 Nov 2018 12:33:46 +1000</pubDate>
      <guid>https://www.aa9pw.com/amateur-radio-exam-practice/general/</guid>
      <description>&lt;p&gt;The FCC General Exam (Element 3) consists of 35 questions, you are required to get over 75% (26 out of 35) for a passing grade. There are ten subelements, G0-G9, and the full exam consists of questions from each subelement (and from each of the topic groups within each subelement). You can use the checkboxes below to include some or all of the subelements in your practice exam.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Current Question Pool&lt;/strong&gt;: 429 Questions, Effective July 1, 2023 - June 30, 2027&lt;/p&gt;</description>
    </item>
    <item>
      <title>Morse Code Generator</title>
      <link>https://www.aa9pw.com/morsecode/test/</link>
      <pubDate>Sun, 18 Nov 2018 12:33:46 +1000</pubDate>
      <guid>https://www.aa9pw.com/morsecode/test/</guid>
      <description>&lt;p&gt;You can use this page to create customized morse code, everything from basic letters and numbers to fully-fledged morse code conversations. If you find this morse generator helpful, please consider &lt;a href=&#34;https://www.paypal.com/donate/?hosted_button_id=NMDZCHJHFPK2L&#34;&gt;supporting this site&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;instructions&#34;&gt;Instructions&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;Adjust the morse code parameters&lt;/strong&gt; as needed, the group size impacts how many groups of text get created for many of the morse content types. 1 group is typically the eqivalent of 5 words with 5 characters per word.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Select the type of morse code you want to generate&lt;/strong&gt; by clicking on type of content desired - Koch, Letters, Callsigns, etc.. The button will turn solid orange when that option is selected.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Click the &amp;ldquo;Generate new practice text&amp;rdquo; button&lt;/strong&gt; to create the text you want to practice&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Click &amp;lsquo;Play&amp;rsquo; to listen to the morse code.&lt;/strong&gt; You can click Show Text to see the original text being sent.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;script src=&#34;https://fkurz.net/ham/jscwlib/src/jscwlib.js&#34;&gt;&lt;/script&gt;&#xA;&#xA;&#xA;&lt;script src=&#34;https://www.aa9pw.com/js/qso.js&#34;&gt;&lt;/script&gt;&#xA;&#xA;&lt;h2&gt; Select the morse code content&lt;/h2&gt;&#xA;&lt;form class=&#34;row g-3&#34; onsubmit=&#34;event.preventDefault();&#34;&gt;&#xA;  &lt;div class=&#34;col-md-3&#34;&gt;&#xA;    &lt;label for=&#34;groupSize&#34;&gt;Group Size&lt;/label&gt;&#xA;    &lt;select name=&#34;groupSize&#34; size=&#34;1&#34; class=&#34;form-select&#34; id=&#34;groupSize&#34;&gt;&#xA;      &lt;option&gt;1&lt;/option&gt;&#xA;      &lt;option&gt;2&lt;/option&gt;&#xA;      &lt;option&gt;3&lt;/option&gt;&#xA;      &lt;option&gt;4&lt;/option&gt;&#xA;      &lt;option&gt;5&lt;/option&gt;&#xA;    &lt;/select&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;col-md-3&#34;&gt;&#xA;    &lt;label for=&#34;codeSpeed&#34;&gt;Overall Speed&lt;/label&gt;&#xA;      &lt;select name=&#34;codeSpeed&#34; size=&#34;1&#34; class=&#34;form-select&#34; id=&#34;codeSpeed&#34;&gt;&#xA;        &lt;option value=&#34;3&#34;&gt;3 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;4&#34;&gt;4 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;5&#34;&gt;5 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;6&#34;&gt;6 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;7&#34;&gt;7 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;8&#34;&gt;8 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;9&#34;&gt;9 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;10&#34; selected=&#34;selected&#34;&gt;10 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;11&#34;&gt;11 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;12&#34;&gt;12 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;13&#34;&gt;13 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;15&#34;&gt;15 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;18&#34;&gt;18 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;20&#34;&gt;20 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;22&#34;&gt;22 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;25&#34;&gt;25 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;27&#34;&gt;27 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;30&#34;&gt;30 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;32&#34;&gt;32 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;35&#34;&gt;35 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;37&#34;&gt;37 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;40&#34;&gt;40 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;45&#34;&gt;45 wpm &lt;/option&gt;&#xA;        &lt;option value=&#34;50&#34;&gt;50 wpm &lt;/option&gt;&#xA;      &lt;/select&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;form-group col-md-3&#34;&gt;&#xA;    &lt;label for=&#34;useFarnsworth&#34;&gt;Use Farnsworth?&lt;/label&gt;&#xA;    &lt;select name=&#34;useFarnsworth&#34; size=&#34;1&#34; class=&#34;form-select&#34; id=&#34;useFarnsworth&#34; &gt;&#xA;      &lt;option value=&#34;yes&#34; selected=&#34;selected&#34;&gt;Yes&lt;/option&gt;&#xA;      &lt;option value=&#34;no&#34;&gt;No&lt;/option&gt;&#xA;    &lt;/select&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;form-group col-md-3&#34;&gt;&#xA;    &lt;label for=&#34;characterSpeed&#34;&gt;Character Speed&lt;/label&gt;&#xA;    &lt;select name=&#34;characterSpeed&#34; size=&#34;1&#34; class=&#34;form-select&#34; id=&#34;characterSpeed&#34; &gt;&#xA;      &lt;option value=&#34;15&#34;&gt;15 wpm Farnsworth &lt;/option&gt;&#xA;      &lt;option value=&#34;18&#34;&gt;18 wpm Farnsworth &lt;/option&gt;&#xA;      &lt;option value=&#34;20&#34; selected=&#34;selected&#34;&gt;20 wpm Farnsworth &lt;/option&gt;&#xA;      &lt;option value=&#34;23&#34;&gt;23 wpm Farnsworth &lt;/option&gt;&#xA;      &lt;option value=&#34;25&#34;&gt;25 wpm Farnsworth &lt;/option&gt;&#xA;      &#xA;    &lt;/select&gt;&#xA;  &lt;/div&gt;&#xA;    &lt;div class=&#34;col-md-5&#34;&gt;&#xA;&#xA;      &lt;input type=&#34;radio&#34; class=&#34;btn-check&#34; name=&#34;test_data&#34; id=&#34;koch&#34; value=&#34;koch&#34; autocomplete=&#34;off&#34; checked&gt;&#xA;      &lt;label class=&#34;btn btn-outline-warning&#34; for=&#34;koch&#34;&gt;Koch&lt;/label&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;col-md-7&#34;&gt;&#xA;      &lt;select name=&#34;kochSelection&#34; size=&#34;1&#34; class=&#34;form-select&#34; id=&#34;kochSelection&#34;&gt;&#xA;        &lt;option value=&#34;1&#34;&gt;K, M&lt;/option&gt;&#xA;        &lt;option value=&#34;2&#34;&gt;All the above + R&lt;/option&gt;&#xA;        &lt;option value=&#34;3&#34;&gt;All the above + S&lt;/option&gt;&#xA;        &lt;option value=&#34;4&#34;&gt;All the above + U&lt;/option&gt;&#xA;        &lt;option value=&#34;5&#34;&gt;All the above + A&lt;/option&gt;&#xA;        &lt;option value=&#34;6&#34;&gt;All the above + P&lt;/option&gt;&#xA;        &lt;option value=&#34;7&#34;&gt;All the above + T&lt;/option&gt;&#xA;        &lt;option value=&#34;8&#34;&gt;All the above + L&lt;/option&gt;&#xA;        &lt;option value=&#34;9&#34;&gt;All the above + O&lt;/option&gt;&#xA;        &lt;option value=&#34;10&#34;&gt;All the above + W&lt;/option&gt;&#xA;        &lt;option value=&#34;11&#34;&gt;All the above + I&lt;/option&gt;&#xA;        &lt;option value=&#34;12&#34;&gt;All the above + .&lt;/option&gt;&#xA;        &lt;option value=&#34;13&#34;&gt;All the above + N&lt;/option&gt;&#xA;        &lt;option value=&#34;14&#34;&gt;All the above + J&lt;/option&gt;&#xA;        &lt;option value=&#34;15&#34;&gt;All the above + E&lt;/option&gt;&#xA;        &lt;option value=&#34;16&#34;&gt;All the above + F&lt;/option&gt;&#xA;        &lt;option value=&#34;17&#34;&gt;All the above + 0&lt;/option&gt;&#xA;        &lt;option value=&#34;18&#34;&gt;All the above + Y&lt;/option&gt;&#xA;        &lt;option value=&#34;19&#34;&gt;All the above + ,&lt;/option&gt;&#xA;        &lt;option value=&#34;20&#34;&gt;All the above + V&lt;/option&gt;&#xA;        &lt;option value=&#34;21&#34;&gt;All the above + G&lt;/option&gt;&#xA;        &lt;option value=&#34;22&#34;&gt;All the above + 5&lt;/option&gt;&#xA;        &lt;option value=&#34;23&#34;&gt;All the above + /&lt;/option&gt;&#xA;        &lt;option value=&#34;24&#34;&gt;All the above + Q&lt;/option&gt;&#xA;        &lt;option value=&#34;25&#34;&gt;All the above + 9&lt;/option&gt;&#xA;        &lt;option value=&#34;26&#34;&gt;All the above + Z&lt;/option&gt;&#xA;        &lt;option value=&#34;27&#34;&gt;All the above + H&lt;/option&gt;&#xA;        &lt;option value=&#34;28&#34;&gt;All the above + 3&lt;/option&gt;&#xA;        &lt;option value=&#34;29&#34;&gt;All the above + 8&lt;/option&gt;&#xA;        &lt;option value=&#34;30&#34;&gt;All the above + B&lt;/option&gt;&#xA;        &lt;option value=&#34;31&#34;&gt;All the above + ?&lt;/option&gt;&#xA;        &lt;option value=&#34;32&#34;&gt;All the above + 4&lt;/option&gt;&#xA;        &lt;option value=&#34;33&#34;&gt;All the above + 2&lt;/option&gt;&#xA;        &lt;option value=&#34;34&#34;&gt;All the above + 7&lt;/option&gt;&#xA;        &lt;option value=&#34;35&#34;&gt;All the above + C&lt;/option&gt;&#xA;        &lt;option value=&#34;36&#34;&gt;All the above + 1&lt;/option&gt;&#xA;        &lt;option value=&#34;37&#34;&gt;All the above + D&lt;/option&gt;&#xA;        &lt;option value=&#34;38&#34;&gt;All the above + 6&lt;/option&gt;&#xA;        &lt;option value=&#34;39&#34;&gt;All the above + X&lt;/option&gt;&#xA;        &lt;option value=&#34;40&#34;&gt;All the above + BT&lt;/option&gt;&#xA;        &lt;option value=&#34;41&#34;&gt;All the above + AR&lt;/option&gt;&#xA;        &lt;option value=&#34;42&#34;&gt;All the above + SK&lt;/option&gt;&#xA;        &lt;option value=&#34;43&#34;&gt;All the above + KN&lt;/option&gt;&#xA;      &lt;/select&gt;&#xA;      &lt;small id=&#34;kochHelp&#34; class=&#34;form-text text-muted&#34;&gt;Start with K &amp; M then add R when you can copy K and M correctly 90% of the time, as you learn each new character (copy &gt;90%) add the character below it on the list until you know them all!&lt;/small&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;col-md-5&#34;&gt;&#xA;      &lt;input type=&#34;radio&#34; class=&#34;btn-check&#34; name=&#34;test_data&#34; id=&#34;letters&#34; value=&#34;letters&#34; autocomplete=&#34;off&#34;&gt;&#xA;      &lt;label class=&#34;btn btn-outline-warning&#34; for=&#34;letters&#34;&gt;Letters&lt;/label&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;col-md-7&#34;&gt;&#xA;      &lt;select name=&#34;letterSelection&#34; size=&#34;4&#34; class=&#34;form-control&#34; id=&#34;letterSelection&#34;  multiple=&#34;multiple&#34; &gt;&#xA;        &lt;option value=&#34;a b c d e f g h i j k l m n o p q r s t u v w x y z&#34; selected=&#34;selected&#34;&gt;all letters &lt;/option&gt;&#xA;        &lt;option value=&#34;e i s h&#34; &gt;e i s h &lt;/option&gt;&#xA;        &lt;option value=&#34;t m o&#34; &gt;t m o &lt;/option&gt;&#xA;        &lt;option value=&#34;a u v&#34; &gt;a u v &lt;/option&gt;&#xA;        &lt;option value=&#34;n d b&#34; &gt;n d b &lt;/option&gt;&#xA;        &lt;option value=&#34;a w j&#34; &gt;a w j &lt;/option&gt;&#xA;        &lt;option value=&#34;n k c&#34; &gt;n k c &lt;/option&gt;&#xA;        &lt;option value=&#34;f l&#34; &gt;f l &lt;/option&gt;&#xA;        &lt;option value=&#34;r g z&#34; &gt;r g z &lt;/option&gt;&#xA;        &lt;option value=&#34;p q x y&#34; &gt;p q x y &lt;/option&gt;&#xA;      &lt;/select&gt;&#xA;      &lt;small id=&#34;lettersHelp&#34; class=&#34;form-text text-muted&#34;&gt;Another approach to learning the letters is by learning the various letter groups (similar sounds) and then adding in more groups over time.&lt;/small&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;col-md-5&#34;&gt;&#xA;      &lt;input type=&#34;radio&#34; class=&#34;btn-check&#34; name=&#34;test_data&#34; id=&#34;numbers&#34; value=&#34;numbers&#34; autocomplete=&#34;off&#34;&gt;&#xA;      &lt;label class=&#34;btn btn-outline-warning&#34; for=&#34;numbers&#34;&gt;Numbers&lt;/label&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;col-md-7&#34;&gt;&#xA;      &lt;small id=&#34;numbersHelp&#34; class=&#34;form-text text-muted&#34;&gt;This contains all the numbers, 0-9&lt;/small&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;col-md-5&#34;&gt;&#xA;      &lt;input type=&#34;radio&#34; class=&#34;btn-check&#34; name=&#34;test_data&#34; id=&#34;punctuation&#34; value=&#34;punctuation&#34; autocomplete=&#34;off&#34;&gt;&#xA;      &lt;label class=&#34;btn btn-outline-warning&#34; for=&#34;punctuation&#34;&gt;Punctuation and Prosigns&lt;/label&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;col-md-7&#34;&gt;&#xA;      &lt;select name=&#34;letterSelection&#34; size=&#34;4&#34; class=&#34;form-control&#34; id=&#34;punctuationSelection&#34;  multiple=&#34;multiple&#34; &gt;&#xA;        &lt;option value=&#34;, . ? &lt;bt&gt; / &lt;kn&gt; &lt;ar&gt; &lt;sk&gt;&#34; selected=&#34;selected&#34;&gt;all punctuation &lt;/option&gt;&#xA;        &lt;option value=&#34;, . ?&#34; &gt;, . ?&lt;/option&gt;&#xA;        &lt;option value=&#34;&lt;bt&gt; / &lt;kn&gt;&#34;&gt;bt / kn&lt;/option&gt;&#xA;        &lt;option value=&#34;&lt;ar&gt; &lt;sk&gt;&#34;&gt;ar sk &lt;/option&gt;&#xA;      &lt;/select&gt;&#xA;      &lt;small id=&#34;lettersHelp&#34; class=&#34;form-text text-muted&#34;&gt;&#xA;        Generates five sets of five punctuation and prosigns per group.&#xA;      &lt;/small&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;col-md-5&#34;&gt;&#xA;      &lt;input type=&#34;radio&#34; class=&#34;btn-check&#34; name=&#34;test_data&#34; id=&#34;allCharacters&#34; value=&#34;allCharacters&#34; autocomplete=&#34;off&#34;&gt;&#xA;      &lt;label class=&#34;btn btn-outline-warning&#34; for=&#34;allCharacters&#34;&gt;All Characters&lt;/label&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;col-md-7&#34;&gt;&#xA;      &lt;small id=&#34;allCharactersHelp&#34; class=&#34;form-text text-muted&#34;&gt;This contains all the letters, numbers, punctuation and prosigns, five sets of five characters per group.&lt;/small&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;col-md-5&#34;&gt;&#xA;      &lt;input type=&#34;radio&#34; class=&#34;btn-check&#34; name=&#34;test_data&#34; id=&#34;callsigns&#34; value=&#34;callsigns&#34; autocomplete=&#34;off&#34;&gt;&#xA;      &lt;label class=&#34;btn btn-outline-warning&#34; for=&#34;callsigns&#34;&gt;Callsigns&lt;/label&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;col-md-7&#34;&gt;&#xA;      &lt;small id=&#34;allCharactersHelp&#34; class=&#34;form-text text-muted&#34;&gt;This generates random callsigns containing letters, numbers, and certain punctuation symbols, five callsigns per group.&lt;/small&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;col-md-5&#34;&gt;&#xA;      &lt;input type=&#34;radio&#34; class=&#34;btn-check&#34; name=&#34;test_data&#34; id=&#34;callsigns_fd&#34; value=&#34;callsigns_fd&#34; autocomplete=&#34;off&#34;&gt;&#xA;      &lt;label class=&#34;btn btn-outline-warning&#34; for=&#34;callsigns_fd&#34;&gt;Field Day Exchange&lt;/label&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;col-md-7&#34;&gt;&#xA;      &lt;small id=&#34;callsignsHelp&#34; class=&#34;form-text text-muted&#34;&gt;This generates random callsigns containing letters, numbers, and certain punctuation symbols plus the ARRL Field Day exchange (class and section). Increasing the Group Size adds additional sets of five station exchanges.&lt;/small&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;col-md-5&#34;&gt;&#xA;      &lt;input type=&#34;radio&#34; class=&#34;btn-check&#34; name=&#34;test_data&#34; id=&#34;pota_exchange&#34; value=&#34;pota_exchange&#34; autocomplete=&#34;off&#34;&gt;&#xA;      &lt;label class=&#34;btn btn-outline-warning&#34; for=&#34;pota_exchange&#34;&gt;POTA CW QSO&lt;/label&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;col-md-7&#34;&gt;&#xA;      &lt;small id=&#34;potaHelp&#34; class=&#34;form-text text-muted&#34;&gt;This generates a typical POTA-style exchange with random callsigns containing letters, numbers, and certain punctuation symbols. Increasing the Group Size adds in additional station exchanges.&lt;/small&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;col-md-5&#34;&gt;&#xA;      &lt;input type=&#34;radio&#34; class=&#34;btn-check&#34; name=&#34;test_data&#34; id=&#34;qso&#34; value=&#34;qso&#34; autocomplete=&#34;off&#34;&gt;&#xA;      &lt;label class=&#34;btn btn-outline-warning&#34; for=&#34;qso&#34;&gt;QSO&lt;/label&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;col-md-7&#34;&gt;&#xA;      &lt;small id=&#34;qsoHelp&#34; class=&#34;form-text text-muted&#34;&gt;This creates part of a simulated morse contact with another amateur station, it will contains callsigns, abbreviations, prosigns and more. The Group Size has no effect on the QSO option.&lt;/small&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;col-md-12&#34;&gt;&#xA;      &lt;button  class=&#34;btn btn-primary&#34; id=&#34;generateMorse&#34;&gt;Generate new practice text&lt;/button&gt;&#xA;    &lt;/div&gt;&#xA;&lt;/form&gt;&#xA;&#xA;&lt;div class=&#34;row&#34;&gt;&#xA;  &lt;div class=&#34;text-muted small col-12&#34; id=&#34;messages&#34; style=&#34;margin:10px;&#34;&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;row&#34;&gt;&#xA;  &lt;div class=&#34;code-view col-12&#34; id=&#34;ta&#34; style=&#34;margin:10px;&#34;&gt;&lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&lt;div class=&#34;row justify-content-between&#34;&gt;&#xA;  &lt;div class=&#34;col-5&#34;&gt;&#xA;    &lt;button class=&#34;btn btn-primary&#34; id=&#34;playPause&#34;&gt;Play&lt;/button&gt;&#xA;    &lt;button class=&#34;btn btn-secondary&#34; id=&#34;showText&#34;&gt;Show Text&lt;/button&gt;&#xA;  &lt;/div&gt;&#xA;  &lt;div class=&#34;col-4&#34;&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;div id=&#34;info&#34;&gt;&lt;/div&gt;&#xA;&#xA;&lt;script&gt;&#xA;  &#xA;  var m = new jscw({&#34;wpm&#34;: 25});&#xA;  var qso = new QsoObject(); &#xA;  var content = &#34;random&#34;;&#xA;  var group_num = 5;&#xA;  var text = &#34;&#34;;&#xA;  var isPaused = false;&#xA;  var obscuredText = &#34;&#34;;&#xA;  var isObscured = true;&#xA;  var alphabetArray = [&#39;a&#39;,&#39;b&#39;,&#39;c&#39;,&#39;d&#39;,&#39;e&#39;,&#39;f&#39;,&#39;g&#39;,&#39;h&#39;,&#39;i&#39;,&#39;j&#39;,&#39;k&#39;,&#39;l&#39;,&#39;m&#39;,&#39;n&#39;,&#39;o&#39;,&#39;p&#39;,&#39;q&#39;,&#39;r&#39;,&#39;s&#39;,&#39;t&#39;,&#39;u&#39;,&#39;v&#39;,&#39;w&#39;,&#39;x&#39;,&#39;y&#39;,&#39;z&#39;];&#xA;  var numberArray = [&#39;1&#39;,&#39;2&#39;,&#39;3&#39;,&#39;4&#39;,&#39;5&#39;,&#39;6&#39;,&#39;7&#39;,&#39;8&#39;,&#39;9&#39;,&#39;0&#39;];&#xA;  var punctuationArray = [&#39;,&#39;,&#39;.&#39;,&#39;?&#39;,&#39;&lt;bt&gt;&#39;,&#39;/&#39;,&#39;&lt;kn&gt;&#39;,&#39;&lt;ar&gt;&#39;,&#39;&lt;sk&gt;&#39;];&#xA;  var kochArray = [&#39;k&#39;,&#39;m&#39;,&#39;r&#39;,&#39;s&#39;,&#39;u&#39;,&#39;a&#39;,&#39;p&#39;,&#39;t&#39;,&#39;l&#39;,&#39;o&#39;,&#39;w&#39;,&#39;i&#39;,&#39;.&#39;,&#39;n&#39;,&#39;j&#39;,&#39;e&#39;,&#39;f&#39;,&#39;0&#39;,&#39;y&#39;,&#39;,&#39;,&#39;v&#39;,&#39;g&#39;,&#39;5&#39;,&#39;/&#39;,&#39;q&#39;,&#39;9&#39;,&#39;z&#39;,&#39;h&#39;,&#39;3&#39;,&#39;8&#39;,&#39;b&#39;,&#39;?&#39;,&#39;4&#39;,&#39;2&#39;,&#39;7&#39;,&#39;c&#39;,&#39;1&#39;,&#39;d&#39;,&#39;6&#39;,&#39;x&#39;,&#39;&lt;bt&gt;&#39;,&#39;&lt;ar&gt;&#39;,&#39;&lt;sk&gt;&#39;,&#39;&lt;kn&gt;&#39;]&#xA;&#xA;  var morseText = &#34;&#34;;&#xA;&#xA;  var generateMorseButton = document.getElementById(&#39;generateMorse&#39;);&#xA;  generateMorseButton.addEventListener(&#39;click&#39;, getContent);&#xA;&#xA;  var playButton = document.getElementById(&#39;playPause&#39;);&#xA;  playButton.addEventListener(&#39;click&#39;, playPausePlayer);&#xA;&#xA;  var showTextButton = document.getElementById(&#39;showText&#39;);&#xA;  showTextButton.addEventListener(&#39;click&#39;, showText);&#xA;&#xA;  &#xA;&#xA;  m.setVolume(0.5);&#xA;  &#xA;&#xA;  &#xA;&#xA;  function sync() {&#xA;      console.log(&#34;SYNC&#34;);&#xA;      var txt = document.getElementById(&#39;ta&#39;).value;&#xA;      txt = txt.replace(/(?:\r\n|\r|\n)/g, &#34; &#34;);&#xA;      m.setText(txt);&#xA;      txt = txt.replace(/\&#34;/g, &#39;\\&#34;&#39;);&#xA;&#xA;  }&#xA;&#xA;  function escapeHtml(unsafe){&#xA;    return unsafe&#xA;         .replace(/&amp;/g, &#34;&amp;amp;&#34;)&#xA;         .replace(/&lt;/g, &#34;&amp;lt;&#34;)&#xA;         .replace(/&gt;/g, &#34;&amp;gt;&#34;)&#xA;         .replace(/&#34;/g, &#34;&amp;quot;&#34;)&#xA;         .replace(/&#39;/g, &#34;&amp;#039;&#34;);&#xA;  }&#xA;&#xA;  function resetButtons() {&#xA;    console.log(&#34;Resetting Buttons&#34;);&#xA;    playButton.textContent = &#34;Play&#34;;&#xA;    playButton.disabled = false; &#xA;    showTextButton.textContent = &#34;Show Text&#34;;&#xA;  }&#xA;&#xA;  function showText(event){&#xA;    &#xA;    if (showTextButton.textContent == &#34;Show Text&#34;) {&#xA;      console.log(&#34;Showing text&#34;, text);&#xA;      showTextButton.textContent = &#34;Hide Text&#34;;&#xA;      document.getElementById(&#39;ta&#39;).innerHTML = escapeHtml(text);&#xA;      isObscured = false;&#xA;    }&#xA;    else {&#xA;      console.log(&#34;Hiding text&#34;, obscuredText);&#xA;      showTextButton.textContent = &#34;Show Text&#34;;&#xA;      document.getElementById(&#39;ta&#39;).innerHTML = obscuredText;&#xA;      isObscured = true;&#xA;    }&#xA;  }&#xA;&#xA;  function playPausePlayer(event) {&#xA;    if (playButton.textContent == &#34;Play&#34; || playButton.textContent == &#34;Replay&#34;) {&#xA;      playButton.textContent = &#34;Pause&#34;;&#xA;      m.play();&#xA;      isPaused = false;&#xA;    }&#xA;    else if (playButton.textContent == &#34;Pause&#34;) {&#xA;      playButton.textContent = &#34;Continue&#34;;&#xA;      m.pause();&#xA;      isPaused = true;&#xA;    }&#xA;    else {&#xA;      playButton.textContent = &#34;Pause&#34;;&#xA;      m.pause();&#xA;      isPaused = false;&#xA;    }&#xA;  }&#xA;&#xA;  function restartPlayer(event){&#xA;    m.stop();&#xA;    playButton.textContent = &#34;Pause&#34;;&#xA;    m.play();&#xA;  }&#xA;&#xA;  &#xA;  &#xA;  function getContent(event) {&#xA;    var messages = &#34;&#34;;&#xA;&#xA;    if (isPaused == true) {&#xA;      console.log(&#34;reset pause&#34;);&#xA;      m.pause();&#xA;      isPaused = false;&#xA;    }&#xA;&#xA;    console.log(&#34;Generate new practice text Clicked!&#34;);&#xA;    var groupNumber =  document.getElementById(&#34;groupSize&#34;);&#xA;    console.log(&#34;Group number: &#34; + groupNumber.value);&#xA;&#xA;    &#xA;    var wpm = document.getElementById(&#34;codeSpeed&#34;);&#xA;    &#xA;    var charspeed = document.getElementById(&#34;characterSpeed&#34;);&#xA;    &#xA;    &#xA;    var useFarnsworth = document.getElementById(&#34;useFarnsworth&#34;);&#xA;&#xA;    &#xA;    &#xA;    console.log(&#34;Effective Speed: &#34; + wpm.value);&#xA;    console.log(&#34;Character Speed: &#34; + charspeed.value);&#xA;    if (parseInt(wpm.value) &lt;= parseInt(charspeed.value) &amp;&amp; useFarnsworth.value == &#34;yes&#34;) {&#xA;      m.setEff(wpm.value);&#xA;      m.setWpm(charspeed.value);&#xA;    }&#xA;    &#xA;    else {&#xA;      console.log(&#34;Overall speed &gt; Farnsworth, set both to overall speed value&#34;);&#xA;      m.setEff(wpm.value);&#xA;      console.log(&#34;Effective Speed: &#34; + wpm.value);&#xA;      m.setWpm(wpm.value);&#xA;      console.log(&#34;Character Speed: &#34; + wpm.value);&#xA;      if (useFarnsworth.value == &#34;yes&#34;) {&#xA;        messages += (&#34;Overall speed is greater than the Character (Farnsworth) speed, using &#34; + wpm.value + &#34; wpm for both.&#34;);&#xA;      }&#xA;    }&#xA;&#xA;&#xA;    &#xA;  &#xA;&#xA;    var contentSelection = document.querySelector(&#39;input[type=radio][name=test_data]:checked&#39;);&#xA;    console.log(&#34;Content Selection: &#34; + contentSelection.value);&#xA;    &#xA;    &#xA;    var chars = &#34;abcdefghijklmnopqrstuvwxyz&#34;;&#xA;&#xA;    switch(contentSelection.value) {&#xA;      case &#39;koch&#39;:&#xA;        var kochIndex = document.getElementById(&#34;kochSelection&#34;);&#xA;        chars = kochArray.slice(0, parseInt(kochIndex.value)+1)&#xA;        console.log(&#34;Koch characters: &#34; + chars );&#xA;        text = random_text(groupNumber.value,5,chars);&#xA;        break;&#xA;      case &#39;letters&#39;:&#xA;        chars = alphabetArray;&#xA;&#xA;        var letterSelect = document.getElementById(&#34;letterSelection&#34;);&#xA;        var selectedOpts = [...letterSelect.options].filter(x =&gt; x.selected).map(x =&gt; x.value.split(&#34; &#34;));&#xA;        chars = [].concat(...selectedOpts);&#xA;        console.log(&#34;Letters characters: &#34; + chars );&#xA;        console.log(&#34;Letters size: &#34; + chars.length );&#xA;&#xA;        text = random_text(groupNumber.value,5,chars);&#xA;&#xA;        break;&#xA;      case &#39;numbers&#39;:&#xA;        chars = numberArray;&#xA;        console.log(&#34;Number characters: &#34; + chars );&#xA;        text = random_text(5,5,chars);&#xA;        break;&#xA;      case &#39;punctuation&#39;:&#xA;        chars = punctuationArray;&#xA;&#xA;        var puncSelect = document.getElementById(&#34;punctuationSelection&#34;);&#xA;        var selectedOpts = [...puncSelect.options].filter(x =&gt; x.selected).map(x =&gt; x.value.split(&#34; &#34;));&#xA;        chars = [].concat(...selectedOpts);&#xA;        console.log(&#34;Punctuation characters: &#34; + chars );&#xA;        console.log(&#34;Punct size: &#34; + chars.length );&#xA;      &#xA;        text = random_text(groupNumber.value,5,chars);&#xA;        break;&#xA;      case &#39;allCharacters&#39;:&#xA;        chars = kochArray;&#xA;        text = random_text(groupNumber.value,5,chars);&#xA;        break;&#xA;      case &#39;callsigns&#39;:&#xA;        chars = kochArray;&#xA;        text = qso.getCallsigns(groupNumber.value,5);&#xA;        break;&#xA;      case &#39;callsigns_fd&#39;:&#xA;        chars = kochArray;&#xA;        text = qso.getCallsigns_with_fieldday(groupNumber.value,5);&#xA;        break;&#xA;      case &#39;pota_exchange&#39;:&#xA;      console.log(&#34;Creating POTA&#34;); &#xA;        chars = kochArray;&#xA;        text = qso.getPOTA_exchange(groupNumber.value,5);&#xA;        break;&#xA;      case &#39;qso&#39;:&#xA;        console.log(&#34;Creating QSO&#34;);&#xA;        text = qso.getQso();&#xA;        break;&#xA;      default:&#xA;        chars = alphabetArray;&#xA;        text = random_text(groupNumber.value,5,chars);&#xA;        break;&#xA;    }&#xA;    console.log(&#34;Text: &#34; + text);&#xA;&#xA;    &#xA;    resetButtons();&#xA;    m.init();&#xA;    m.setText(text);&#xA;    &#xA;    &#xA;    obscuredText = text.replace(/[^ ]/g,&#34;&amp;#x25CF;&#34;);&#xA;    document.getElementById(&#39;ta&#39;).innerHTML = obscuredText;&#xA;    document.getElementById(&#39;messages&#39;).innerHTML = messages;&#xA;  }&#xA;&#xA;  &#xA;&#xA;  function random_text(groups = 5, length = 5, chars = alphabetArray, ){&#xA;    console.log(&#39;Random&#39;);&#xA;    &#xA;    &#xA;    var new_text = &#34; &#34;;&#xA;&#xA;    &#xA;    for(let gr=0; gr &lt; groups; gr++) {&#xA;&#xA;      &#xA;      for(let block=0; block &lt; 5; block++) {&#xA;&#xA;        &#xA;        for (let c=0; c &lt; length; c++) {&#xA;          new_text += chars[Math.floor(Math.random() * chars.length)];&#xA;        }&#xA;        new_text += &#34; &#34;;&#xA;      }&#xA;      new_text += &#34;= &#34;;&#xA;    }&#xA;    console.log(new_text);&#xA;    document.getElementById(&#39;ta&#39;).innerHTML = new_text;&#xA;    return new_text;&#xA;  }&#xA;&#xA;  &#xA;  m.onFinished = function () { &#xA;    playButton.textContent = &#34;Replay&#34;;&#xA;    m.init();&#xA;    m.setText(text);&#xA;  }&#xA;&lt;/script&gt;&#xA;&#xA;&#xA;&lt;div id=&#34;donate-button-container&#34;&gt;  &#xA;  &lt;div&gt;If you find the morse code generator helpful please consider supporting the site!&lt;/div&gt;&#xA;  &lt;div id=&#34;donate-button&#34;&gt;&lt;/div&gt;&#xA;  &lt;script src=&#34;https://www.paypalobjects.com/donate/sdk/donate-sdk.js&#34; charset=&#34;UTF-8&#34;&gt;&lt;/script&gt;&#xA;  &lt;script&gt;&#xA;  PayPal.Donation.Button({&#xA;  env:&#39;production&#39;,&#xA;  hosted_button_id:&#39;NMDZCHJHFPK2L&#39;,&#xA;  image: {&#xA;  src:&#39;https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif&#39;,&#xA;  alt:&#39;Donate with PayPal button&#39;,&#xA;  title:&#39;PayPal - The safer, easier way to pay online!&#39;,&#xA;  }&#xA;  }).render(&#39;#donate-button&#39;);&#xA;  &lt;/script&gt;&#xA;&lt;/div&gt;</description>
    </item>
    <item>
      <title>POTA CW exchanges added to Morse Generator</title>
      <link>https://www.aa9pw.com/blog/pota-cw-practice-added/</link>
      <pubDate>Sat, 18 Jan 2025 12:33:46 +1000</pubDate>
      <guid>https://www.aa9pw.com/blog/pota-cw-practice-added/</guid>
      <description>&lt;p&gt;&lt;strong&gt;POTA CW exchanges added&lt;/strong&gt; - I have added POTA (&lt;a href=&#34;https://parksontheair.com/index.html&#34;&gt;Parks on the Air&lt;/a&gt;) exchanges to the &lt;a href=&#34;https://www.aa9pw.com/morsecode/test/&#34; title=&#34;morse code generator&#34;&gt;Morse Code Generator&lt;/a&gt;. I have used various sources for how these types of exchanges normally go (see list below), but they may need &amp;rsquo;tweaking&amp;rsquo; a bit to add in more variability.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://qrper.com/2021/08/how-to-send-a-standard-pota-cw-exchange/&#34;&gt;QRPer.com - How to send a standard POTA CW exchange&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://docs.pota.app/docs/cw_guide.html&#34;&gt;Parks on the Air CW Guide&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.hamradioduo.com/pota-cw-cheatsheet/&#34;&gt;HamRadioDuo POTA CW Cheatsheet&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Here&amp;rsquo;s an example of what it might generate so far. It assumes there&amp;rsquo;s an activating station that calls CQ at the start and then there are some replies from hunters, up to five, depending on the Group setting you use on the generator page (e.g., setting Group = 3 would give you replies from three hunter stations).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Upcoming maintenance &amp; new Extra pool</title>
      <link>https://www.aa9pw.com/blog/upcoming-maintenance/</link>
      <pubDate>Mon, 12 Aug 2024 12:33:46 +1000</pubDate>
      <guid>https://www.aa9pw.com/blog/upcoming-maintenance/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m doing some behind the scenes maintainance work on the site, consolidating my DNS and Nameservers and other things. Hopefully this wont result in any issues but you never know! If the site does vanish or stop working then please let me know.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m also working on the new Extra pool that was released recently. I&amp;rsquo;m a little behind on getting that into the site due to some other maintenance that needed to be done before I could update the question pool.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Welcome to the new site!</title>
      <link>https://www.aa9pw.com/blog/welcome/</link>
      <pubDate>Sun, 19 Jun 2022 12:33:46 +1000</pubDate>
      <guid>https://www.aa9pw.com/blog/welcome/</guid>
      <description>&lt;p&gt;Its a brand new look for AA9PW.com! After many years of WordPress combined with various hacks and other disruptions I figured it was time to change things up and move to something a bit more modern. This new site is built using &lt;a href=&#34;https://gohugo.io&#34;&gt;Hugo&lt;/a&gt;, a Static Site Generator (SSG) that uses the Go programming language under the hood.&lt;/p&gt;&#xA;&lt;p&gt;This is still a work in progress and I imagine I&amp;rsquo;m going to be tweaking things for a while. The main benefit is that I can move away from having WordPress, a backend database and the required hosting infrastructure, to something a bit more streamlined. The previous site wasnt really using much of the tools that WordPress provides but it was still subject to the various hacks and security risks that came with using the popular blogging platform.&lt;/p&gt;</description>
    </item>
    <item>
      <title>New Technician Pool is available</title>
      <link>https://www.aa9pw.com/blog/technician-2022-pool-available/</link>
      <pubDate>Tue, 07 Jun 2022 12:33:46 +1000</pubDate>
      <guid>https://www.aa9pw.com/blog/technician-2022-pool-available/</guid>
      <description>&lt;p&gt;I have added the latest Technician question pool to the newer version of the test prep site. This comes into effect for exams taken on or after July 1st, 2022. I will take down the old question pool from both this site and the new site on June 30th and from then on the new site will be where you can find the practice exams.&lt;/p&gt;&#xA;&lt;p&gt;Please let me know if you have purchased access to the current Technician exam pool to get custom exams and results tracking but it is possible you will take your exam after July 1st, 2022, please let me know so I can update your access to include the new pool.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Extra</title>
      <link>https://www.aa9pw.com/amateur-radio-exam-practice/extra/</link>
      <pubDate>Sun, 18 Nov 2018 12:33:46 +1000</pubDate>
      <guid>https://www.aa9pw.com/amateur-radio-exam-practice/extra/</guid>
      <description>&lt;p&gt;The FCC Extra Exam (Element 4) consists of 50 questions, you are required to get over 74% (37 out of 50) for a passing grade. There are ten subelements, E0-E9, and the full exam consists of questions from each subelement (and from each of the topic groups within each subelement).&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Current Question Pool&lt;/strong&gt;: 602 Questions, Effective July 1, 2024 - June 30, 2028&lt;/p&gt;&#xA;&lt;h2 id=&#34;extra-exam-subelements&#34;&gt;Extra Exam Subelements&lt;/h2&gt;&#xA;&lt;p&gt;The Extra exam has questions that cover the following topics (subelements)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Morse Code Symbols and Sounds</title>
      <link>https://www.aa9pw.com/morsecode/morse-code-alphabet/</link>
      <pubDate>Sun, 18 Nov 2018 12:33:46 +1000</pubDate>
      <guid>https://www.aa9pw.com/morsecode/morse-code-alphabet/</guid>
      <description>&lt;p&gt;The popular view of Morse code (aka CW, Continuous Wave) as a collection of dots and dashes is the first thing to forget when trying to learn morse code! For this reason, you will not find the usual table of letters and their corresponding dot/dash equivalents. What you will see is a table of the &lt;strong&gt;letters and their sound equivalents&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It is far better to learn to associate a letter with a sound from the beginning, rather than trying to translate the sound into a letter via dots and dashes. The table below shows the sounds for the letters, numbers, punctuation and some of the common procedural signals often used in amateur radio contacts.&lt;/p&gt;</description>
    </item>
    <item>
      <title>So you want to learn Morse Code</title>
      <link>https://www.aa9pw.com/morsecode/so-you-want-to-learn-morse-code/</link>
      <pubDate>Sun, 18 Nov 2018 12:33:46 +1000</pubDate>
      <guid>https://www.aa9pw.com/morsecode/so-you-want-to-learn-morse-code/</guid>
      <description>&lt;p&gt;Forget Frustration: Gain Valuable Morse Skills And Increase Your Amateur-Radio Pleasure&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;By David G. Finley, N1IRZ&lt;/strong&gt;&#xA;&lt;em&gt;Copyright © 1995, 2000. All Rights Reserved*&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;Note: For complete information on Morse Code training, CW operating, Morse Code history, and more, see the author’s book, Morse Code: Breaking the Barrier, published by &lt;a href=&#34;http://www.mfjenterprises.com/&#34;&gt;MFJ Enterprises, Inc.&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Amateur license restructuring is here. You no longer need to pass a 13- or 20-word-per-minute (wpm) test to gain full operating privileges. Passing a 5-wpm test gets you everything. However, there are good reasons why you should do more than that. Having a level of Morse proficiency that is of real use on the air, meaning that you can copy at 12-13 wpm or more, will add immeasurably to your enjoyment of Amateur Radio.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ham Morse Version 1.492 now available</title>
      <link>https://www.aa9pw.com/blog/version-1492-of-ham-morse-released/</link>
      <pubDate>Wed, 28 Sep 2022 12:33:46 +1000</pubDate>
      <guid>https://www.aa9pw.com/blog/version-1492-of-ham-morse-released/</guid>
      <description>&lt;p&gt;Version 1.492 of the Ham Morse iOS application was released on the &lt;a href=&#34;https://apps.apple.com/us/app/ham-morse/id315980140&#34;&gt;App Store&lt;/a&gt; a few days ago. This was mostly a maintenance release to address a few bugs and other issues that had cropped up. However, it also included a more significant change to the app configuration - the app audio now plays regardless of the device&amp;rsquo;s Silent Mode setting! This has been causing issues for ages where it looks the app is playing but there is no audio so I&amp;rsquo;m very hopefull this will fix those issues once and for all.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Callsigns and Replay options added to Morse Generator</title>
      <link>https://www.aa9pw.com/blog/callsigns-and-replay-for-morse-generator/</link>
      <pubDate>Mon, 01 Aug 2022 12:33:46 +1000</pubDate>
      <guid>https://www.aa9pw.com/blog/callsigns-and-replay-for-morse-generator/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Replay option&lt;/strong&gt; - You can now replay a passage of practice text in the &lt;a href=&#34;https://www.aa9pw.com/morsecode/test/&#34; title=&#34;morse code generator&#34;&gt;Morse Code Generator&lt;/a&gt;. When the code for a particular passage of text has finished playing, the play button will change to a &amp;lsquo;Replay&amp;rsquo; option that will allow you to listen to the same passage of text again. The Play button now has the following states:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Play - Initial setting, click to play the generated practice text.&lt;/li&gt;&#xA;&lt;li&gt;Pause - Pause the morse audio&lt;/li&gt;&#xA;&lt;li&gt;Continue - Unpause the morse audio&lt;/li&gt;&#xA;&lt;li&gt;Replay - Replay morse for the current text from the start.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Callsigns&lt;/strong&gt; - I have added back in the Callsign option so you can practice copying callsigns in the code generator. It will generate standard US callsigns like AA9PW as well as prefixes indicating an operator is outside of their normal region, AA9PW/0&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bug fix for Ham Morse now available</title>
      <link>https://www.aa9pw.com/blog/bug-fix-for-ham-morse-now-available/</link>
      <pubDate>Fri, 15 Jul 2022 12:33:46 +1000</pubDate>
      <guid>https://www.aa9pw.com/blog/bug-fix-for-ham-morse-now-available/</guid>
      <description>&lt;p&gt;Version 1.490 of the Ham Morse iOS application was released on the &lt;a href=&#34;https://apps.apple.com/us/app/ham-morse/id315980140&#34;&gt;App Store&lt;/a&gt; today (July 15th, 2022). This was a maintenance release to fix a bug present in v1.480 related to iPhones with a specific screen size (12/13 minis, 11 pro, X and XS).&lt;/p&gt;&#xA;&lt;h2 id=&#34;technical-bugs&#34;&gt;Technical bugs&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fixed a UI layout bug for iPhones with screens height of 812 points. This was causing the app to crash on launch on those particular devices because it couldnt find an appropriate UI description for that screen size.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Ham Morse Version 1.480 now available</title>
      <link>https://www.aa9pw.com/blog/new-version-of-ham-morse-released/</link>
      <pubDate>Sat, 09 Jul 2022 12:33:46 +1000</pubDate>
      <guid>https://www.aa9pw.com/blog/new-version-of-ham-morse-released/</guid>
      <description>&lt;p&gt;Version 1.480 of the Ham Morse iOS application was released on the &lt;a href=&#34;https://apps.apple.com/us/app/ham-morse/id315980140&#34;&gt;App Store&lt;/a&gt; yesterday. This was mostly a maintenance release to address a few bugs and other issues that had cropped up.&lt;/p&gt;&#xA;&lt;h2 id=&#34;app-features&#34;&gt;App Features&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Added support for larger iPhone screens.&lt;/li&gt;&#xA;&lt;li&gt;Updated or removed RSS news feeds which were no longer working.&lt;/li&gt;&#xA;&lt;li&gt;Updated the support URL.&lt;/li&gt;&#xA;&lt;li&gt;Reorganized the iPad screen layout slightly.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;technical-bugs&#34;&gt;Technical bugs&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Fixed a thread-related bug that would cause the app to crash if you pressed one of the morse content buttons while the app was playing.&lt;/li&gt;&#xA;&lt;li&gt;Implemented autolayout on the iPad UI XIB to support various screen sizes using a single XIB file. I was unable to get horizontal layout to work consistently so that is still not available.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Morse QSO option now back online</title>
      <link>https://www.aa9pw.com/blog/morse-qso-now-back-online/</link>
      <pubDate>Tue, 05 Jul 2022 12:33:46 +1000</pubDate>
      <guid>https://www.aa9pw.com/blog/morse-qso-now-back-online/</guid>
      <description>&lt;p&gt;I have fixed the &lt;a href=&#34;https://www.aa9pw.com/morsecode/test/&#34; title=&#34;morse code generator&#34;&gt;Morse Code Generator&lt;/a&gt; to bring the QSO option back online. It will now create a part of a simulated CW conversation (QSOs) that will give you practice copying many of the usual elements of a basic morse code conversation: callsigns, names, places, weather, rigs and antenna, power, etc.&lt;/p&gt;&#xA;&lt;p&gt;An example of a generated QSO is shown below.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;kd9otp de ku9vyw = ge, tu for call = ur rst 475 = name here is harold = location hr is greensburg, indiana =   here, the weather is snowing = I have a ic781 = the ant is a 3 el yagi sending out 350 watts = i work as a driver = ive been a ham fer 54 years = back to you kd9otp de ku9vyw kn ar =&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>About</title>
      <link>https://www.aa9pw.com/about/</link>
      <pubDate>Thu, 22 Feb 2018 17:01:34 +0700</pubDate>
      <guid>https://www.aa9pw.com/about/</guid>
      <description>&lt;p&gt;Welcome to the AA9PW amateur exam practice website. It is built and maintained by me, Simon Twigger, aka AA9PW. This site has been through a variety of incarnations since I first put it on line in 1996. I used it as a way to teach myself Perl programming and web development while I was doing a postdoc fellowship in Biochemistry. The site was originally hosted courtesy of the Medical College of Wisconsin&amp;rsquo;s Biochemistry department until I registered AA9PW.com around 1999.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ham Morse iOS App Support</title>
      <link>https://www.aa9pw.com/ham-morse/support/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.aa9pw.com/ham-morse/support/</guid>
      <description>&lt;p&gt;Welcome to the support page for the Ham Morse iOS application. Your feedback on the app and how its working (or if its not working!) are really important so there are a few ways you can get in touch.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Using the Disqus comment feature below&lt;/li&gt;&#xA;&lt;li&gt;Via our &lt;a href=&#34;https://www.facebook.com/AA9PW&#34;&gt;Facebook Page&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Via direct email to &lt;strong&gt;simont at aa9pw.com&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I will endeavour to get back to you as soon as I can to help address any issues that you may be having.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ham Morse Privacy Policy</title>
      <link>https://www.aa9pw.com/ham-morse/privacy-policy/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.aa9pw.com/ham-morse/privacy-policy/</guid>
      <description>&lt;h1 id=&#34;ham-morse-privacy-policy&#34;&gt;Ham Morse Privacy Policy&lt;/h1&gt;&#xA;&lt;h2 id=&#34;summary&#34;&gt;Summary&lt;/h2&gt;&#xA;&lt;p&gt;We do not directly gather any personal data such as e-mails, first or last names, phone numbers or mailing addresses. However, we do utilize Flurry Analytics in order to collect some user data related to how the app is used. Flurry tracks which features are popular and which features are less well used, it also helps with crash reporting so we can identify and fix bugs more effectively. The data is only available in an anonymized form, it can not be tracked back to a specific user or device. For more information on Flurry and your options for managing yoyur data please see Flurry&amp;rsquo;s Privacy Policy and opt-out link, below.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ham Morse Release Notes</title>
      <link>https://www.aa9pw.com/ham-morse/release-notes/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://www.aa9pw.com/ham-morse/release-notes/</guid>
      <description>&lt;h2 id=&#34;new-features-in-v1492&#34;&gt;New Features in v1.492&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Audio is no longer muted when the device is in Silent Mode. 🎉&lt;/li&gt;&#xA;&lt;li&gt;Clear button is deactivated while the morse is playing, but it is now reactivated once the morse is finished to make it easier to reset the text and start a new practice session.&lt;/li&gt;&#xA;&lt;li&gt;Fixed bug related to the News option where devices were crashing when News was selected.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;new-features-in-v1490&#34;&gt;New Features in v1.490&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Bug fix to address crashes seen on certain iPhone models with specific screen dimensions.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;new-features-in-v1485&#34;&gt;New Features in v1.485&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Added support for larger iPhone screen sizes, e.g. iPhone 13 Max&lt;/li&gt;&#xA;&lt;li&gt;Updated RSS feeds to remove ones that were no longer working&lt;/li&gt;&#xA;&lt;li&gt;Small changes to the UI for the iPad&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;new-features-in-v1450&#34;&gt;New features in v1.450:&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Added a number of common accented letters (å ä ch è é ö and ü) to better support our European morse enthusiasts&lt;/li&gt;&#xA;&lt;li&gt;Modified the available audio tone to go down to 220Hz, research has show that using tones in the 250-300Hz range can improve the ability to copy morse code in noisy signal conditions. For more information see LA3ZA’s Studies on morse code recognition&lt;/li&gt;&#xA;&lt;li&gt;Added the ability to vary the text block length when copying random blocks of characters (e.g. letters, numbers, etc). This varies the length of the blocks of characters in a more natural way so they are not always 5 characters long&lt;/li&gt;&#xA;&lt;li&gt;iPhone 5 and Retina support to make use of the larger screen size in the iPhone5 and later models.&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
  </channel>
</rss>
