<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Programming &amp;mdash; KJ7RRV</title>
    <link>https://kj7rrv.com/tag:Programming</link>
    <description></description>
    <pubDate>Wed, 29 Apr 2026 09:19:57 -0700</pubDate>
    <item>
      <title>Number of ham radio licenses in the US by class and state</title>
      <link>https://kj7rrv.com/number-of-ham-radio-licenses-in-the-us-by-class-and-state</link>
      <description>&lt;![CDATA[More #RandomOpenData! Feel free to use this data for whatever you would like. This data is published in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose.&#xA;&#xA;This breaks the number of current FCC-issued US #HamRadio licenses by state and license class.&#xA;&#xA;This data is obtained by scraping the ARRL&#39;s FCC License Counts page, which is in turn based on data published by the FCC.&#xA;&#xA;Because this data will change over time, I included both the data in JSON format and a Python script to obtain the data. I update the JSON data when I think about it, but it&#39;s better to use the script to get the data yourself if you need it to be up to date.&#xA;&#xA;Scraper program&#xA;&#xA;!/usr/bin/env python3&#xA;&#xA;hamstats.py - get statistics on US amateur radio licenses by state and class&#xA;&#xA;Copyright 2023 Samuel Sloniker KJ7RRV&#xA;&#xA;Permission to use, copy, modify, and/or distribute this software for any&#xA;purpose with or without fee is hereby granted.&#xA;&#xA;THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH&#xA;REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY&#xA;AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,&#xA;INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM&#xA;LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR&#xA;OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR&#xA;PERFORMANCE OF THIS SOFTWARE.&#xA;&#xA;import json&#xA;import datetime&#xA;import requests&#xA;import bs4&#xA;&#xA;page = requests.get(&#34;http://www.arrl.org/fcc-license-counts&#34;)&#xA;soup = bs4.BeautifulSoup(page.text, features=&#34;lxml&#34;)&#xA;&#xA;date = datetime.datetime.strptime(&#xA;    soup.find(id=&#34;content&#34;).find(&#34;em&#34;).text.split(&#34; &#34;)[-1], &#34;%d-%b-%Y&#34;&#xA;).strftime(&#34;%Y-%m-%d&#34;)&#xA;&#xA;classes = cell.text for cell in soup.find(&#34;tr&#34;)&#xA;tabledata = {&#xA;    row.find(&#34;td&#34;).text.replace(&#34;*&#34;, &#34;&#34;): {&#xA;        classes[number]: int(&#34;0&#34; + cell.text)&#xA;        for number, cell in enumerate(row.findall(&#34;td&#34;)[1:])&#xA;    }&#xA;    for row in soup.findall(&#34;tr&#34;)[1:]&#xA;}&#xA;&#xA;print(json.dumps({&#34;date&#34;: date, &#34;data&#34;: table_data}))&#xA;&#xA;Current data as of April 19, 2023&#xA;&#xA;{&#34;date&#34;: &#34;2023-10-19&#34;, &#34;data&#34;: {&#34;Alabama&#34;: {&#34;Novice&#34;: 67, &#34;Tech&#34;: 5445, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 3158, &#34;Advanced&#34;: 537, &#34;Extra&#34;: 2882, &#34;Total&#34;: 12089}, &#34;Alaska&#34;: {&#34;Novice&#34;: 15, &#34;Tech&#34;: 1565, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 887, &#34;Advanced&#34;: 147, &#34;Extra&#34;: 661, &#34;Total&#34;: 3275}, &#34;Arizona&#34;: {&#34;Novice&#34;: 112, &#34;Tech&#34;: 11136, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 5121, &#34;Advanced&#34;: 1002, &#34;Extra&#34;: 4565, &#34;Total&#34;: 21936}, &#34;Arkansas&#34;: {&#34;Novice&#34;: 39, &#34;Tech&#34;: 4107, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1960, &#34;Advanced&#34;: 312, &#34;Extra&#34;: 1616, &#34;Total&#34;: 8034}, &#34;California&#34;: {&#34;Novice&#34;: 648, &#34;Tech&#34;: 58946, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 19532, &#34;Advanced&#34;: 3434, &#34;Extra&#34;: 15521, &#34;Total&#34;: 98081}, &#34;Colorado&#34;: {&#34;Novice&#34;: 90, &#34;Tech&#34;: 10653, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 4555, &#34;Advanced&#34;: 708, &#34;Extra&#34;: 3748, &#34;Total&#34;: 19754}, &#34;Connecticut&#34;: {&#34;Novice&#34;: 121, &#34;Tech&#34;: 3122, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1891, &#34;Advanced&#34;: 387, &#34;Extra&#34;: 1686, &#34;Total&#34;: 7207}, &#34;Delaware&#34;: {&#34;Novice&#34;: 20, &#34;Tech&#34;: 768, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 509, &#34;Advanced&#34;: 86, &#34;Extra&#34;: 416, &#34;Total&#34;: 1799}, &#34;District of Columbia&#34;: {&#34;Novice&#34;: 4, &#34;Tech&#34;: 254, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 114, &#34;Advanced&#34;: 20, &#34;Extra&#34;: 118, &#34;Total&#34;: 510}, &#34;Florida&#34;: {&#34;Novice&#34;: 437, &#34;Tech&#34;: 18293, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 11839, &#34;Advanced&#34;: 2533, &#34;Extra&#34;: 9971, &#34;Total&#34;: 43073}, &#34;Georgia&#34;: {&#34;Novice&#34;: 110, &#34;Tech&#34;: 8791, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 4971, &#34;Advanced&#34;: 829, &#34;Extra&#34;: 4101, &#34;Total&#34;: 18802}, &#34;Guam&#34;: {&#34;Novice&#34;: 1, &#34;Tech&#34;: 104, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 50, &#34;Advanced&#34;: 8, &#34;Extra&#34;: 102, &#34;Total&#34;: 265}, &#34;Hawaii&#34;: {&#34;Novice&#34;: 29, &#34;Tech&#34;: 2030, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 770, &#34;Advanced&#34;: 146, &#34;Extra&#34;: 687, &#34;Total&#34;: 3662}, &#34;Idaho&#34;: {&#34;Novice&#34;: 28, &#34;Tech&#34;: 6483, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 2535, &#34;Advanced&#34;: 246, &#34;Extra&#34;: 1618, &#34;Total&#34;: 10910}, &#34;Illinois&#34;: {&#34;Novice&#34;: 257, &#34;Tech&#34;: 8576, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 5290, &#34;Advanced&#34;: 1010, &#34;Extra&#34;: 4386, &#34;Total&#34;: 19519}, &#34;Indiana&#34;: {&#34;Novice&#34;: 168, &#34;Tech&#34;: 7240, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 4148, &#34;Advanced&#34;: 717, &#34;Extra&#34;: 3179, &#34;Total&#34;: 15452}, &#34;Iowa&#34;: {&#34;Novice&#34;: 55, &#34;Tech&#34;: 2987, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1685, &#34;Advanced&#34;: 403, &#34;Extra&#34;: 1493, &#34;Total&#34;: 6623}, &#34;Kansas&#34;: {&#34;Novice&#34;: 70, &#34;Tech&#34;: 3381, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1936, &#34;Advanced&#34;: 289, &#34;Extra&#34;: 1535, &#34;Total&#34;: 7211}, &#34;Kentucky&#34;: {&#34;Novice&#34;: 72, &#34;Tech&#34;: 4573, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 2546, &#34;Advanced&#34;: 408, &#34;Extra&#34;: 2025, &#34;Total&#34;: 9624}, &#34;Louisiana&#34;: {&#34;Novice&#34;: 60, &#34;Tech&#34;: 2623, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1689, &#34;Advanced&#34;: 335, &#34;Extra&#34;: 1354, &#34;Total&#34;: 6061}, &#34;Maine&#34;: {&#34;Novice&#34;: 38, &#34;Tech&#34;: 1853, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1261, &#34;Advanced&#34;: 213, &#34;Extra&#34;: 1107, &#34;Total&#34;: 4472}, &#34;Maryland&#34;: {&#34;Novice&#34;: 100, &#34;Tech&#34;: 4768, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 2811, &#34;Advanced&#34;: 541, &#34;Extra&#34;: 2662, &#34;Total&#34;: 10882}, &#34;Massachusetts&#34;: {&#34;Novice&#34;: 147, &#34;Tech&#34;: 5746, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 3487, &#34;Advanced&#34;: 661, &#34;Extra&#34;: 3275, &#34;Total&#34;: 13316}, &#34;Michigan&#34;: {&#34;Novice&#34;: 176, &#34;Tech&#34;: 9764, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 5349, &#34;Advanced&#34;: 988, &#34;Extra&#34;: 4675, &#34;Total&#34;: 20952}, &#34;Minnesota&#34;: {&#34;Novice&#34;: 108, &#34;Tech&#34;: 5280, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 2970, &#34;Advanced&#34;: 600, &#34;Extra&#34;: 2509, &#34;Total&#34;: 11467}, &#34;Mississippi&#34;: {&#34;Novice&#34;: 23, &#34;Tech&#34;: 2174, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1359, &#34;Advanced&#34;: 223, &#34;Extra&#34;: 1262, &#34;Total&#34;: 5041}, &#34;Missouri&#34;: {&#34;Novice&#34;: 98, &#34;Tech&#34;: 7503, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 3866, &#34;Advanced&#34;: 637, &#34;Extra&#34;: 3079, &#34;Total&#34;: 15183}, &#34;Montana&#34;: {&#34;Novice&#34;: 27, &#34;Tech&#34;: 2244, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1172, &#34;Advanced&#34;: 171, &#34;Extra&#34;: 821, &#34;Total&#34;: 4435}, &#34;Nebraska&#34;: {&#34;Novice&#34;: 28, &#34;Tech&#34;: 1697, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1038, &#34;Advanced&#34;: 221, &#34;Extra&#34;: 752, &#34;Total&#34;: 3736}, &#34;Nevada&#34;: {&#34;Novice&#34;: 37, &#34;Tech&#34;: 4505, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1888, &#34;Advanced&#34;: 318, &#34;Extra&#34;: 1527, &#34;Total&#34;: 8275}, &#34;New Hampshire&#34;: {&#34;Novice&#34;: 52, &#34;Tech&#34;: 2437, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1489, &#34;Advanced&#34;: 261, &#34;Extra&#34;: 1480, &#34;Total&#34;: 5719}, &#34;New Jersey&#34;: {&#34;Novice&#34;: 196, &#34;Tech&#34;: 5944, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 3232, &#34;Advanced&#34;: 710, &#34;Extra&#34;: 3072, &#34;Total&#34;: 13154}, &#34;New Mexico&#34;: {&#34;Novice&#34;: 27, &#34;Tech&#34;: 3256, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1469, &#34;Advanced&#34;: 272, &#34;Extra&#34;: 1332, &#34;Total&#34;: 6356}, &#34;New York&#34;: {&#34;Novice&#34;: 400, &#34;Tech&#34;: 11825, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 6805, &#34;Advanced&#34;: 1363, &#34;Extra&#34;: 5923, &#34;Total&#34;: 26316}, &#34;North Carolina&#34;: {&#34;Novice&#34;: 145, &#34;Tech&#34;: 10303, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 5876, &#34;Advanced&#34;: 1018, &#34;Extra&#34;: 5131, &#34;Total&#34;: 22473}, &#34;North Dakota&#34;: {&#34;Novice&#34;: 10, &#34;Tech&#34;: 743, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 419, &#34;Advanced&#34;: 63, &#34;Extra&#34;: 300, &#34;Total&#34;: 1535}, &#34;Ohio&#34;: {&#34;Novice&#34;: 319, &#34;Tech&#34;: 12255, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 7404, &#34;Advanced&#34;: 1294, &#34;Extra&#34;: 6107, &#34;Total&#34;: 27379}, &#34;Oklahoma&#34;: {&#34;Novice&#34;: 44, &#34;Tech&#34;: 5003, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 2527, &#34;Advanced&#34;: 376, &#34;Extra&#34;: 1985, &#34;Total&#34;: 9935}, &#34;Oregon&#34;: {&#34;Novice&#34;: 101, &#34;Tech&#34;: 11190, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 4967, &#34;Advanced&#34;: 707, &#34;Extra&#34;: 3578, &#34;Total&#34;: 20543}, &#34;Pennsylvania&#34;: {&#34;Novice&#34;: 276, &#34;Tech&#34;: 10644, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 6351, &#34;Advanced&#34;: 1293, &#34;Extra&#34;: 5579, &#34;Total&#34;: 24143}, &#34;Puerto Rico&#34;: {&#34;Novice&#34;: 100, &#34;Tech&#34;: 2917, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1195, &#34;Advanced&#34;: 172, &#34;Extra&#34;: 702, &#34;Total&#34;: 5086}, &#34;Rhode Island&#34;: {&#34;Novice&#34;: 21, &#34;Tech&#34;: 837, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 486, &#34;Advanced&#34;: 90, &#34;Extra&#34;: 460, &#34;Total&#34;: 1894}, &#34;South Carolina&#34;: {&#34;Novice&#34;: 59, &#34;Tech&#34;: 4690, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 2732, &#34;Advanced&#34;: 471, &#34;Extra&#34;: 2361, &#34;Total&#34;: 10313}, &#34;South Dakota&#34;: {&#34;Novice&#34;: 16, &#34;Tech&#34;: 887, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 598, &#34;Advanced&#34;: 116, &#34;Extra&#34;: 485, &#34;Total&#34;: 2102}, &#34;Tennessee&#34;: {&#34;Novice&#34;: 112, &#34;Tech&#34;: 9281, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 5196, &#34;Advanced&#34;: 813, &#34;Extra&#34;: 4372, &#34;Total&#34;: 19774}, &#34;Texas&#34;: {&#34;Novice&#34;: 293, &#34;Tech&#34;: 26659, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 13308, &#34;Advanced&#34;: 2289, &#34;Extra&#34;: 11236, &#34;Total&#34;: 53785}, &#34;Utah&#34;: {&#34;Novice&#34;: 35, &#34;Tech&#34;: 12721, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 3267, &#34;Advanced&#34;: 307, &#34;Extra&#34;: 2133, &#34;Total&#34;: 18463}, &#34;Vermont&#34;: {&#34;Novice&#34;: 14, &#34;Tech&#34;: 973, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 526, &#34;Advanced&#34;: 103, &#34;Extra&#34;: 496, &#34;Total&#34;: 2112}, &#34;Virgin Islands&#34;: {&#34;Novice&#34;: 0, &#34;Tech&#34;: 117, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 71, &#34;Advanced&#34;: 10, &#34;Extra&#34;: 53, &#34;Total&#34;: 251}, &#34;Virginia&#34;: {&#34;Novice&#34;: 179, &#34;Tech&#34;: 9406, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 5353, &#34;Advanced&#34;: 935, &#34;Extra&#34;: 4804, &#34;Total&#34;: 20677}, &#34;Washington&#34;: {&#34;Novice&#34;: 187, &#34;Tech&#34;: 18746, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 8128, &#34;Advanced&#34;: 1136, &#34;Extra&#34;: 5717, &#34;Total&#34;: 33914}, &#34;West Virginia&#34;: {&#34;Novice&#34;: 41, &#34;Tech&#34;: 3054, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1444, &#34;Advanced&#34;: 213, &#34;Extra&#34;: 1244, &#34;Total&#34;: 5996}, &#34;Wisconsin&#34;: {&#34;Novice&#34;: 93, &#34;Tech&#34;: 4802, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 3217, &#34;Advanced&#34;: 561, &#34;Extra&#34;: 2553, &#34;Total&#34;: 11226}, &#34;Wyoming&#34;: {&#34;Novice&#34;: 10, &#34;Tech&#34;: 1014, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 646, &#34;Advanced&#34;: 114, &#34;Extra&#34;: 471, &#34;Total&#34;: 2255}, &#34;Other&#34;: {&#34;Novice&#34;: 1, &#34;Tech&#34;: 284, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 95, &#34;Advanced&#34;: 7, &#34;Extra&#34;: 201, &#34;Total&#34;: 588}, &#34;TOTAL&#34;: {&#34;Novice&#34;: 5916, &#34;Tech&#34;: 376599, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 187188, &#34;Advanced&#34;: 32824, &#34;Extra&#34;: 155108, &#34;Total&#34;: 757635}}}&#xA;&#xA;#Programming #FOSS]]&gt;</description>
      <content:encoded><![CDATA[<p>More <a href="https://kj7rrv.com/tag:RandomOpenData" class="hashtag"><span>#</span><span class="p-category">RandomOpenData</span></a>! Feel free to use this data for whatever you would like. This data is published in the hope that it will be useful, but <strong>without any warranty</strong>; without even the implied warranty of <strong>merchantability</strong> or <strong>fitness for a particular purpose</strong>.</p>

<p>This breaks the number of current FCC-issued US <a href="https://kj7rrv.com/tag:HamRadio" class="hashtag"><span>#</span><span class="p-category">HamRadio</span></a> licenses by state and license class.</p>

<p>This data is obtained by scraping <a href="http://www.arrl.org/fcc-license-counts">the ARRL&#39;s FCC License Counts page</a>, which is in turn based on data published by the FCC.</p>

<p>Because this data will change over time, I included both the data in JSON format and a Python script to obtain the data. I update the JSON data when I think about it, but it&#39;s better to use the script to get the data yourself if you need it to be up to date.</p>

<h2 id="scraper-program" id="scraper-program">Scraper program</h2>

<pre><code class="language-python">#!/usr/bin/env python3

# ham_stats.py - get statistics on US amateur radio licenses by state and class
#
# Copyright 2023 Samuel Sloniker KJ7RRV
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted.
#
# THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
# AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
# OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.

import json
import datetime
import requests
import bs4

page = requests.get(&#34;http://www.arrl.org/fcc-license-counts&#34;)
soup = bs4.BeautifulSoup(page.text, features=&#34;lxml&#34;)

date = datetime.datetime.strptime(
    soup.find(id=&#34;content&#34;).find(&#34;em&#34;).text.split(&#34; &#34;)[-1], &#34;%d-%b-%Y&#34;
).strftime(&#34;%Y-%m-%d&#34;)

classes = [cell.text for cell in soup.find(&#34;tr&#34;)][1:]
table_data = {
    row.find(&#34;td&#34;).text.replace(&#34;*&#34;, &#34;&#34;): {
        classes[number]: int(&#34;0&#34; + cell.text)
        for number, cell in enumerate(row.find_all(&#34;td&#34;)[1:])
    }
    for row in soup.find_all(&#34;tr&#34;)[1:]
}

print(json.dumps({&#34;date&#34;: date, &#34;data&#34;: table_data}))
</code></pre>

<h2 id="current-data-as-of-april-19-2023" id="current-data-as-of-april-19-2023">Current data as of April 19, 2023</h2>

<pre><code class="language-json">{&#34;date&#34;: &#34;2023-10-19&#34;, &#34;data&#34;: {&#34;Alabama&#34;: {&#34;Novice&#34;: 67, &#34;Tech&#34;: 5445, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 3158, &#34;Advanced&#34;: 537, &#34;Extra&#34;: 2882, &#34;Total&#34;: 12089}, &#34;Alaska&#34;: {&#34;Novice&#34;: 15, &#34;Tech&#34;: 1565, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 887, &#34;Advanced&#34;: 147, &#34;Extra&#34;: 661, &#34;Total&#34;: 3275}, &#34;Arizona&#34;: {&#34;Novice&#34;: 112, &#34;Tech&#34;: 11136, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 5121, &#34;Advanced&#34;: 1002, &#34;Extra&#34;: 4565, &#34;Total&#34;: 21936}, &#34;Arkansas&#34;: {&#34;Novice&#34;: 39, &#34;Tech&#34;: 4107, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1960, &#34;Advanced&#34;: 312, &#34;Extra&#34;: 1616, &#34;Total&#34;: 8034}, &#34;California&#34;: {&#34;Novice&#34;: 648, &#34;Tech&#34;: 58946, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 19532, &#34;Advanced&#34;: 3434, &#34;Extra&#34;: 15521, &#34;Total&#34;: 98081}, &#34;Colorado&#34;: {&#34;Novice&#34;: 90, &#34;Tech&#34;: 10653, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 4555, &#34;Advanced&#34;: 708, &#34;Extra&#34;: 3748, &#34;Total&#34;: 19754}, &#34;Connecticut&#34;: {&#34;Novice&#34;: 121, &#34;Tech&#34;: 3122, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1891, &#34;Advanced&#34;: 387, &#34;Extra&#34;: 1686, &#34;Total&#34;: 7207}, &#34;Delaware&#34;: {&#34;Novice&#34;: 20, &#34;Tech&#34;: 768, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 509, &#34;Advanced&#34;: 86, &#34;Extra&#34;: 416, &#34;Total&#34;: 1799}, &#34;District of Columbia&#34;: {&#34;Novice&#34;: 4, &#34;Tech&#34;: 254, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 114, &#34;Advanced&#34;: 20, &#34;Extra&#34;: 118, &#34;Total&#34;: 510}, &#34;Florida&#34;: {&#34;Novice&#34;: 437, &#34;Tech&#34;: 18293, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 11839, &#34;Advanced&#34;: 2533, &#34;Extra&#34;: 9971, &#34;Total&#34;: 43073}, &#34;Georgia&#34;: {&#34;Novice&#34;: 110, &#34;Tech&#34;: 8791, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 4971, &#34;Advanced&#34;: 829, &#34;Extra&#34;: 4101, &#34;Total&#34;: 18802}, &#34;Guam&#34;: {&#34;Novice&#34;: 1, &#34;Tech&#34;: 104, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 50, &#34;Advanced&#34;: 8, &#34;Extra&#34;: 102, &#34;Total&#34;: 265}, &#34;Hawaii&#34;: {&#34;Novice&#34;: 29, &#34;Tech&#34;: 2030, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 770, &#34;Advanced&#34;: 146, &#34;Extra&#34;: 687, &#34;Total&#34;: 3662}, &#34;Idaho&#34;: {&#34;Novice&#34;: 28, &#34;Tech&#34;: 6483, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 2535, &#34;Advanced&#34;: 246, &#34;Extra&#34;: 1618, &#34;Total&#34;: 10910}, &#34;Illinois&#34;: {&#34;Novice&#34;: 257, &#34;Tech&#34;: 8576, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 5290, &#34;Advanced&#34;: 1010, &#34;Extra&#34;: 4386, &#34;Total&#34;: 19519}, &#34;Indiana&#34;: {&#34;Novice&#34;: 168, &#34;Tech&#34;: 7240, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 4148, &#34;Advanced&#34;: 717, &#34;Extra&#34;: 3179, &#34;Total&#34;: 15452}, &#34;Iowa&#34;: {&#34;Novice&#34;: 55, &#34;Tech&#34;: 2987, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1685, &#34;Advanced&#34;: 403, &#34;Extra&#34;: 1493, &#34;Total&#34;: 6623}, &#34;Kansas&#34;: {&#34;Novice&#34;: 70, &#34;Tech&#34;: 3381, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1936, &#34;Advanced&#34;: 289, &#34;Extra&#34;: 1535, &#34;Total&#34;: 7211}, &#34;Kentucky&#34;: {&#34;Novice&#34;: 72, &#34;Tech&#34;: 4573, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 2546, &#34;Advanced&#34;: 408, &#34;Extra&#34;: 2025, &#34;Total&#34;: 9624}, &#34;Louisiana&#34;: {&#34;Novice&#34;: 60, &#34;Tech&#34;: 2623, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1689, &#34;Advanced&#34;: 335, &#34;Extra&#34;: 1354, &#34;Total&#34;: 6061}, &#34;Maine&#34;: {&#34;Novice&#34;: 38, &#34;Tech&#34;: 1853, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1261, &#34;Advanced&#34;: 213, &#34;Extra&#34;: 1107, &#34;Total&#34;: 4472}, &#34;Maryland&#34;: {&#34;Novice&#34;: 100, &#34;Tech&#34;: 4768, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 2811, &#34;Advanced&#34;: 541, &#34;Extra&#34;: 2662, &#34;Total&#34;: 10882}, &#34;Massachusetts&#34;: {&#34;Novice&#34;: 147, &#34;Tech&#34;: 5746, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 3487, &#34;Advanced&#34;: 661, &#34;Extra&#34;: 3275, &#34;Total&#34;: 13316}, &#34;Michigan&#34;: {&#34;Novice&#34;: 176, &#34;Tech&#34;: 9764, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 5349, &#34;Advanced&#34;: 988, &#34;Extra&#34;: 4675, &#34;Total&#34;: 20952}, &#34;Minnesota&#34;: {&#34;Novice&#34;: 108, &#34;Tech&#34;: 5280, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 2970, &#34;Advanced&#34;: 600, &#34;Extra&#34;: 2509, &#34;Total&#34;: 11467}, &#34;Mississippi&#34;: {&#34;Novice&#34;: 23, &#34;Tech&#34;: 2174, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1359, &#34;Advanced&#34;: 223, &#34;Extra&#34;: 1262, &#34;Total&#34;: 5041}, &#34;Missouri&#34;: {&#34;Novice&#34;: 98, &#34;Tech&#34;: 7503, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 3866, &#34;Advanced&#34;: 637, &#34;Extra&#34;: 3079, &#34;Total&#34;: 15183}, &#34;Montana&#34;: {&#34;Novice&#34;: 27, &#34;Tech&#34;: 2244, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1172, &#34;Advanced&#34;: 171, &#34;Extra&#34;: 821, &#34;Total&#34;: 4435}, &#34;Nebraska&#34;: {&#34;Novice&#34;: 28, &#34;Tech&#34;: 1697, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1038, &#34;Advanced&#34;: 221, &#34;Extra&#34;: 752, &#34;Total&#34;: 3736}, &#34;Nevada&#34;: {&#34;Novice&#34;: 37, &#34;Tech&#34;: 4505, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1888, &#34;Advanced&#34;: 318, &#34;Extra&#34;: 1527, &#34;Total&#34;: 8275}, &#34;New Hampshire&#34;: {&#34;Novice&#34;: 52, &#34;Tech&#34;: 2437, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1489, &#34;Advanced&#34;: 261, &#34;Extra&#34;: 1480, &#34;Total&#34;: 5719}, &#34;New Jersey&#34;: {&#34;Novice&#34;: 196, &#34;Tech&#34;: 5944, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 3232, &#34;Advanced&#34;: 710, &#34;Extra&#34;: 3072, &#34;Total&#34;: 13154}, &#34;New Mexico&#34;: {&#34;Novice&#34;: 27, &#34;Tech&#34;: 3256, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1469, &#34;Advanced&#34;: 272, &#34;Extra&#34;: 1332, &#34;Total&#34;: 6356}, &#34;New York&#34;: {&#34;Novice&#34;: 400, &#34;Tech&#34;: 11825, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 6805, &#34;Advanced&#34;: 1363, &#34;Extra&#34;: 5923, &#34;Total&#34;: 26316}, &#34;North Carolina&#34;: {&#34;Novice&#34;: 145, &#34;Tech&#34;: 10303, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 5876, &#34;Advanced&#34;: 1018, &#34;Extra&#34;: 5131, &#34;Total&#34;: 22473}, &#34;North Dakota&#34;: {&#34;Novice&#34;: 10, &#34;Tech&#34;: 743, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 419, &#34;Advanced&#34;: 63, &#34;Extra&#34;: 300, &#34;Total&#34;: 1535}, &#34;Ohio&#34;: {&#34;Novice&#34;: 319, &#34;Tech&#34;: 12255, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 7404, &#34;Advanced&#34;: 1294, &#34;Extra&#34;: 6107, &#34;Total&#34;: 27379}, &#34;Oklahoma&#34;: {&#34;Novice&#34;: 44, &#34;Tech&#34;: 5003, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 2527, &#34;Advanced&#34;: 376, &#34;Extra&#34;: 1985, &#34;Total&#34;: 9935}, &#34;Oregon&#34;: {&#34;Novice&#34;: 101, &#34;Tech&#34;: 11190, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 4967, &#34;Advanced&#34;: 707, &#34;Extra&#34;: 3578, &#34;Total&#34;: 20543}, &#34;Pennsylvania&#34;: {&#34;Novice&#34;: 276, &#34;Tech&#34;: 10644, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 6351, &#34;Advanced&#34;: 1293, &#34;Extra&#34;: 5579, &#34;Total&#34;: 24143}, &#34;Puerto Rico&#34;: {&#34;Novice&#34;: 100, &#34;Tech&#34;: 2917, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1195, &#34;Advanced&#34;: 172, &#34;Extra&#34;: 702, &#34;Total&#34;: 5086}, &#34;Rhode Island&#34;: {&#34;Novice&#34;: 21, &#34;Tech&#34;: 837, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 486, &#34;Advanced&#34;: 90, &#34;Extra&#34;: 460, &#34;Total&#34;: 1894}, &#34;South Carolina&#34;: {&#34;Novice&#34;: 59, &#34;Tech&#34;: 4690, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 2732, &#34;Advanced&#34;: 471, &#34;Extra&#34;: 2361, &#34;Total&#34;: 10313}, &#34;South Dakota&#34;: {&#34;Novice&#34;: 16, &#34;Tech&#34;: 887, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 598, &#34;Advanced&#34;: 116, &#34;Extra&#34;: 485, &#34;Total&#34;: 2102}, &#34;Tennessee&#34;: {&#34;Novice&#34;: 112, &#34;Tech&#34;: 9281, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 5196, &#34;Advanced&#34;: 813, &#34;Extra&#34;: 4372, &#34;Total&#34;: 19774}, &#34;Texas&#34;: {&#34;Novice&#34;: 293, &#34;Tech&#34;: 26659, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 13308, &#34;Advanced&#34;: 2289, &#34;Extra&#34;: 11236, &#34;Total&#34;: 53785}, &#34;Utah&#34;: {&#34;Novice&#34;: 35, &#34;Tech&#34;: 12721, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 3267, &#34;Advanced&#34;: 307, &#34;Extra&#34;: 2133, &#34;Total&#34;: 18463}, &#34;Vermont&#34;: {&#34;Novice&#34;: 14, &#34;Tech&#34;: 973, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 526, &#34;Advanced&#34;: 103, &#34;Extra&#34;: 496, &#34;Total&#34;: 2112}, &#34;Virgin Islands&#34;: {&#34;Novice&#34;: 0, &#34;Tech&#34;: 117, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 71, &#34;Advanced&#34;: 10, &#34;Extra&#34;: 53, &#34;Total&#34;: 251}, &#34;Virginia&#34;: {&#34;Novice&#34;: 179, &#34;Tech&#34;: 9406, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 5353, &#34;Advanced&#34;: 935, &#34;Extra&#34;: 4804, &#34;Total&#34;: 20677}, &#34;Washington&#34;: {&#34;Novice&#34;: 187, &#34;Tech&#34;: 18746, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 8128, &#34;Advanced&#34;: 1136, &#34;Extra&#34;: 5717, &#34;Total&#34;: 33914}, &#34;West Virginia&#34;: {&#34;Novice&#34;: 41, &#34;Tech&#34;: 3054, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 1444, &#34;Advanced&#34;: 213, &#34;Extra&#34;: 1244, &#34;Total&#34;: 5996}, &#34;Wisconsin&#34;: {&#34;Novice&#34;: 93, &#34;Tech&#34;: 4802, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 3217, &#34;Advanced&#34;: 561, &#34;Extra&#34;: 2553, &#34;Total&#34;: 11226}, &#34;Wyoming&#34;: {&#34;Novice&#34;: 10, &#34;Tech&#34;: 1014, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 646, &#34;Advanced&#34;: 114, &#34;Extra&#34;: 471, &#34;Total&#34;: 2255}, &#34;Other&#34;: {&#34;Novice&#34;: 1, &#34;Tech&#34;: 284, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 95, &#34;Advanced&#34;: 7, &#34;Extra&#34;: 201, &#34;Total&#34;: 588}, &#34;TOTAL&#34;: {&#34;Novice&#34;: 5916, &#34;Tech&#34;: 376599, &#34;Tech-Plus&#34;: 0, &#34;General&#34;: 187188, &#34;Advanced&#34;: 32824, &#34;Extra&#34;: 155108, &#34;Total&#34;: 757635}}}
</code></pre>

<p><a href="https://kj7rrv.com/tag:Programming" class="hashtag"><span>#</span><span class="p-category">Programming</span></a> <a href="https://kj7rrv.com/tag:FOSS" class="hashtag"><span>#</span><span class="p-category">FOSS</span></a></p>
]]></content:encoded>
      <guid>https://kj7rrv.com/number-of-ham-radio-licenses-in-the-us-by-class-and-state</guid>
      <pubDate>Thu, 20 Apr 2023 14:45:19 +0000</pubDate>
    </item>
    <item>
      <title>US State Names and Abbreviations in JSON</title>
      <link>https://kj7rrv.com/us-state-names-and-abbreviations-in-json</link>
      <description>&lt;![CDATA[This is the first of a series of posts of #RandomOpenData. These posts will contain public-domain data in JSON and other readily-usable, machine-readable formats.&#xA;&#xA;Feel free to use this data for whatever you would like. This data is published in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose.&#xA;&#xA;Array of state names&#xA;&#xA;[&#34;Alabama&#34;, &#34;Alaska&#34;, &#34;Arizona&#34;, &#34;Arkansas&#34;, &#34;California&#34;, &#34;Colorado&#34;, &#34;Connecticut&#34;, &#34;Delaware&#34;, &#34;Florida&#34;, &#34;Georgia&#34;, &#34;Hawaii&#34;, &#34;Idaho&#34;, &#34;Illinois&#34;, &#34;Indiana&#34;, &#34;Iowa&#34;, &#34;Kansas&#34;, &#34;Kentucky&#34;, &#34;Louisiana&#34;, &#34;Maine&#34;, &#34;Maryland&#34;, &#34;Massachusetts&#34;, &#34;Michigan&#34;, &#34;Minnesota&#34;, &#34;Mississippi&#34;, &#34;Missouri&#34;, &#34;Montana&#34;, &#34;Nebraska&#34;, &#34;Nevada&#34;, &#34;New Hampshire&#34;, &#34;New Jersey&#34;, &#34;New Mexico&#34;, &#34;New York&#34;, &#34;North Carolina&#34;, &#34;North Dakota&#34;, &#34;Ohio&#34;, &#34;Oklahoma&#34;, &#34;Oregon&#34;, &#34;Pennsylvania&#34;, &#34;Rhode Island&#34;, &#34;South Carolina&#34;, &#34;South Dakota&#34;, &#34;Tennessee&#34;, &#34;Texas&#34;, &#34;Utah&#34;, &#34;Vermont&#34;, &#34;Virginia&#34;, &#34;Washington&#34;, &#34;West Virginia&#34;, &#34;Wisconsin&#34;, &#34;Wyoming&#34;]&#xA;&#xA;Array of state abbreviations&#xA;&#xA;[&#34;AL&#34;, &#34;AK&#34;, &#34;AZ&#34;, &#34;AR&#34;, &#34;CA&#34;, &#34;CO&#34;, &#34;CT&#34;, &#34;DE&#34;, &#34;FL&#34;, &#34;GA&#34;, &#34;HI&#34;, &#34;ID&#34;, &#34;IL&#34;, &#34;IN&#34;, &#34;IA&#34;, &#34;KS&#34;, &#34;KY&#34;, &#34;LA&#34;, &#34;ME&#34;, &#34;MD&#34;, &#34;MA&#34;, &#34;MI&#34;, &#34;MN&#34;, &#34;MS&#34;, &#34;MO&#34;, &#34;MT&#34;, &#34;NB&#34;, &#34;NV&#34;, &#34;NH&#34;, &#34;NJ&#34;, &#34;NM&#34;, &#34;NY&#34;, &#34;NC&#34;, &#34;ND&#34;, &#34;OH&#34;, &#34;OK&#34;, &#34;OR&#34;, &#34;PA&#34;, &#34;RI&#34;, &#34;SC&#34;, &#34;SD&#34;, &#34;TN&#34;, &#34;TX&#34;, &#34;UT&#34;, &#34;VT&#34;, &#34;VA&#34;, &#34;WA&#34;, &#34;WV&#34;, &#34;WI&#34;, &#34;WY&#34;]&#xA;&#xA;Dictionary of states to abbreviations&#xA;&#xA;{&#34;Alabama&#34;: &#34;AL&#34;, &#34;Alaska&#34;: &#34;AK&#34;, &#34;Arizona&#34;: &#34;AZ&#34;, &#34;Arkansas&#34;: &#34;AR&#34;, &#34;California&#34;: &#34;CA&#34;, &#34;Colorado&#34;: &#34;CO&#34;, &#34;Connecticut&#34;: &#34;CT&#34;, &#34;Delaware&#34;: &#34;DE&#34;, &#34;Florida&#34;: &#34;FL&#34;, &#34;Georgia&#34;: &#34;GA&#34;, &#34;Hawaii&#34;: &#34;HI&#34;, &#34;Idaho&#34;: &#34;ID&#34;, &#34;Illinois&#34;: &#34;IL&#34;, &#34;Indiana&#34;: &#34;IN&#34;, &#34;Iowa&#34;: &#34;IA&#34;, &#34;Kansas&#34;: &#34;KS&#34;, &#34;Kentucky&#34;: &#34;KY&#34;, &#34;Louisiana&#34;: &#34;LA&#34;, &#34;Maine&#34;: &#34;ME&#34;, &#34;Maryland&#34;: &#34;MD&#34;, &#34;Massachusetts&#34;: &#34;MA&#34;, &#34;Michigan&#34;: &#34;MI&#34;, &#34;Minnesota&#34;: &#34;MN&#34;, &#34;Mississippi&#34;: &#34;MS&#34;, &#34;Missouri&#34;: &#34;MO&#34;, &#34;Montana&#34;: &#34;MT&#34;, &#34;Nebraska&#34;: &#34;NB&#34;, &#34;Nevada&#34;: &#34;NV&#34;, &#34;New Hampshire&#34;: &#34;NH&#34;, &#34;New Jersey&#34;: &#34;NJ&#34;, &#34;New Mexico&#34;: &#34;NM&#34;, &#34;New York&#34;: &#34;NY&#34;, &#34;North Carolina&#34;: &#34;NC&#34;, &#34;North Dakota&#34;: &#34;ND&#34;, &#34;Ohio&#34;: &#34;OH&#34;, &#34;Oklahoma&#34;: &#34;OK&#34;, &#34;Oregon&#34;: &#34;OR&#34;, &#34;Pennsylvania&#34;: &#34;PA&#34;, &#34;Rhode Island&#34;: &#34;RI&#34;, &#34;South Carolina&#34;: &#34;SC&#34;, &#34;South Dakota&#34;: &#34;SD&#34;, &#34;Tennessee&#34;: &#34;TN&#34;, &#34;Texas&#34;: &#34;TX&#34;, &#34;Utah&#34;: &#34;UT&#34;, &#34;Vermont&#34;: &#34;VT&#34;, &#34;Virginia&#34;: &#34;VA&#34;, &#34;Washington&#34;: &#34;WA&#34;, &#34;West Virginia&#34;: &#34;WV&#34;, &#34;Wisconsin&#34;: &#34;WI&#34;, &#34;Wyoming&#34;: &#34;WY&#34;}&#xA;&#xA;Dictionary of abbreviations to states&#xA;&#xA;{&#34;AL&#34;: &#34;Alabama&#34;, &#34;AK&#34;: &#34;Alaska&#34;, &#34;AZ&#34;: &#34;Arizona&#34;, &#34;AR&#34;: &#34;Arkansas&#34;, &#34;CA&#34;: &#34;California&#34;, &#34;CO&#34;: &#34;Colorado&#34;, &#34;CT&#34;: &#34;Connecticut&#34;, &#34;DE&#34;: &#34;Delaware&#34;, &#34;FL&#34;: &#34;Florida&#34;, &#34;GA&#34;: &#34;Georgia&#34;, &#34;HI&#34;: &#34;Hawaii&#34;, &#34;ID&#34;: &#34;Idaho&#34;, &#34;IL&#34;: &#34;Illinois&#34;, &#34;IN&#34;: &#34;Indiana&#34;, &#34;IA&#34;: &#34;Iowa&#34;, &#34;KS&#34;: &#34;Kansas&#34;, &#34;KY&#34;: &#34;Kentucky&#34;, &#34;LA&#34;: &#34;Louisiana&#34;, &#34;ME&#34;: &#34;Maine&#34;, &#34;MD&#34;: &#34;Maryland&#34;, &#34;MA&#34;: &#34;Massachusetts&#34;, &#34;MI&#34;: &#34;Michigan&#34;, &#34;MN&#34;: &#34;Minnesota&#34;, &#34;MS&#34;: &#34;Mississippi&#34;, &#34;MO&#34;: &#34;Missouri&#34;, &#34;MT&#34;: &#34;Montana&#34;, &#34;NB&#34;: &#34;Nebraska&#34;, &#34;NV&#34;: &#34;Nevada&#34;, &#34;NH&#34;: &#34;New Hampshire&#34;, &#34;NJ&#34;: &#34;New Jersey&#34;, &#34;NM&#34;: &#34;New Mexico&#34;, &#34;NY&#34;: &#34;New York&#34;, &#34;NC&#34;: &#34;North Carolina&#34;, &#34;ND&#34;: &#34;North Dakota&#34;, &#34;OH&#34;: &#34;Ohio&#34;, &#34;OK&#34;: &#34;Oklahoma&#34;, &#34;OR&#34;: &#34;Oregon&#34;, &#34;PA&#34;: &#34;Pennsylvania&#34;, &#34;RI&#34;: &#34;Rhode Island&#34;, &#34;SC&#34;: &#34;South Carolina&#34;, &#34;SD&#34;: &#34;South Dakota&#34;, &#34;TN&#34;: &#34;Tennessee&#34;, &#34;TX&#34;: &#34;Texas&#34;, &#34;UT&#34;: &#34;Utah&#34;, &#34;VT&#34;: &#34;Vermont&#34;, &#34;VA&#34;: &#34;Virginia&#34;, &#34;WA&#34;: &#34;Washington&#34;, &#34;WV&#34;: &#34;West Virginia&#34;, &#34;WI&#34;: &#34;Wisconsin&#34;, &#34;WY&#34;: &#34;Wyoming&#34;}&#xA;&#xA;#Programming #FOSS]]&gt;</description>
      <content:encoded><![CDATA[<p>This is the first of a series of posts of <a href="https://kj7rrv.com/tag:RandomOpenData" class="hashtag"><span>#</span><span class="p-category">RandomOpenData</span></a>. These posts will contain public-domain data in JSON and other readily-usable, machine-readable formats.</p>

<p>Feel free to use this data for whatever you would like. This data is published in the hope that it will be useful, but <strong>without any warranty</strong>; without even the implied warranty of <strong>merchantability</strong> or <strong>fitness for a particular purpose</strong>.</p>

<h2 id="array-of-state-names" id="array-of-state-names">Array of state names</h2>

<pre><code class="language-json">[&#34;Alabama&#34;, &#34;Alaska&#34;, &#34;Arizona&#34;, &#34;Arkansas&#34;, &#34;California&#34;, &#34;Colorado&#34;, &#34;Connecticut&#34;, &#34;Delaware&#34;, &#34;Florida&#34;, &#34;Georgia&#34;, &#34;Hawaii&#34;, &#34;Idaho&#34;, &#34;Illinois&#34;, &#34;Indiana&#34;, &#34;Iowa&#34;, &#34;Kansas&#34;, &#34;Kentucky&#34;, &#34;Louisiana&#34;, &#34;Maine&#34;, &#34;Maryland&#34;, &#34;Massachusetts&#34;, &#34;Michigan&#34;, &#34;Minnesota&#34;, &#34;Mississippi&#34;, &#34;Missouri&#34;, &#34;Montana&#34;, &#34;Nebraska&#34;, &#34;Nevada&#34;, &#34;New Hampshire&#34;, &#34;New Jersey&#34;, &#34;New Mexico&#34;, &#34;New York&#34;, &#34;North Carolina&#34;, &#34;North Dakota&#34;, &#34;Ohio&#34;, &#34;Oklahoma&#34;, &#34;Oregon&#34;, &#34;Pennsylvania&#34;, &#34;Rhode Island&#34;, &#34;South Carolina&#34;, &#34;South Dakota&#34;, &#34;Tennessee&#34;, &#34;Texas&#34;, &#34;Utah&#34;, &#34;Vermont&#34;, &#34;Virginia&#34;, &#34;Washington&#34;, &#34;West Virginia&#34;, &#34;Wisconsin&#34;, &#34;Wyoming&#34;]
</code></pre>

<h2 id="array-of-state-abbreviations" id="array-of-state-abbreviations">Array of state abbreviations</h2>

<pre><code class="language-json">[&#34;AL&#34;, &#34;AK&#34;, &#34;AZ&#34;, &#34;AR&#34;, &#34;CA&#34;, &#34;CO&#34;, &#34;CT&#34;, &#34;DE&#34;, &#34;FL&#34;, &#34;GA&#34;, &#34;HI&#34;, &#34;ID&#34;, &#34;IL&#34;, &#34;IN&#34;, &#34;IA&#34;, &#34;KS&#34;, &#34;KY&#34;, &#34;LA&#34;, &#34;ME&#34;, &#34;MD&#34;, &#34;MA&#34;, &#34;MI&#34;, &#34;MN&#34;, &#34;MS&#34;, &#34;MO&#34;, &#34;MT&#34;, &#34;NB&#34;, &#34;NV&#34;, &#34;NH&#34;, &#34;NJ&#34;, &#34;NM&#34;, &#34;NY&#34;, &#34;NC&#34;, &#34;ND&#34;, &#34;OH&#34;, &#34;OK&#34;, &#34;OR&#34;, &#34;PA&#34;, &#34;RI&#34;, &#34;SC&#34;, &#34;SD&#34;, &#34;TN&#34;, &#34;TX&#34;, &#34;UT&#34;, &#34;VT&#34;, &#34;VA&#34;, &#34;WA&#34;, &#34;WV&#34;, &#34;WI&#34;, &#34;WY&#34;]
</code></pre>

<h2 id="dictionary-of-states-to-abbreviations" id="dictionary-of-states-to-abbreviations">Dictionary of states to abbreviations</h2>

<pre><code class="language-json">{&#34;Alabama&#34;: &#34;AL&#34;, &#34;Alaska&#34;: &#34;AK&#34;, &#34;Arizona&#34;: &#34;AZ&#34;, &#34;Arkansas&#34;: &#34;AR&#34;, &#34;California&#34;: &#34;CA&#34;, &#34;Colorado&#34;: &#34;CO&#34;, &#34;Connecticut&#34;: &#34;CT&#34;, &#34;Delaware&#34;: &#34;DE&#34;, &#34;Florida&#34;: &#34;FL&#34;, &#34;Georgia&#34;: &#34;GA&#34;, &#34;Hawaii&#34;: &#34;HI&#34;, &#34;Idaho&#34;: &#34;ID&#34;, &#34;Illinois&#34;: &#34;IL&#34;, &#34;Indiana&#34;: &#34;IN&#34;, &#34;Iowa&#34;: &#34;IA&#34;, &#34;Kansas&#34;: &#34;KS&#34;, &#34;Kentucky&#34;: &#34;KY&#34;, &#34;Louisiana&#34;: &#34;LA&#34;, &#34;Maine&#34;: &#34;ME&#34;, &#34;Maryland&#34;: &#34;MD&#34;, &#34;Massachusetts&#34;: &#34;MA&#34;, &#34;Michigan&#34;: &#34;MI&#34;, &#34;Minnesota&#34;: &#34;MN&#34;, &#34;Mississippi&#34;: &#34;MS&#34;, &#34;Missouri&#34;: &#34;MO&#34;, &#34;Montana&#34;: &#34;MT&#34;, &#34;Nebraska&#34;: &#34;NB&#34;, &#34;Nevada&#34;: &#34;NV&#34;, &#34;New Hampshire&#34;: &#34;NH&#34;, &#34;New Jersey&#34;: &#34;NJ&#34;, &#34;New Mexico&#34;: &#34;NM&#34;, &#34;New York&#34;: &#34;NY&#34;, &#34;North Carolina&#34;: &#34;NC&#34;, &#34;North Dakota&#34;: &#34;ND&#34;, &#34;Ohio&#34;: &#34;OH&#34;, &#34;Oklahoma&#34;: &#34;OK&#34;, &#34;Oregon&#34;: &#34;OR&#34;, &#34;Pennsylvania&#34;: &#34;PA&#34;, &#34;Rhode Island&#34;: &#34;RI&#34;, &#34;South Carolina&#34;: &#34;SC&#34;, &#34;South Dakota&#34;: &#34;SD&#34;, &#34;Tennessee&#34;: &#34;TN&#34;, &#34;Texas&#34;: &#34;TX&#34;, &#34;Utah&#34;: &#34;UT&#34;, &#34;Vermont&#34;: &#34;VT&#34;, &#34;Virginia&#34;: &#34;VA&#34;, &#34;Washington&#34;: &#34;WA&#34;, &#34;West Virginia&#34;: &#34;WV&#34;, &#34;Wisconsin&#34;: &#34;WI&#34;, &#34;Wyoming&#34;: &#34;WY&#34;}
</code></pre>

<h2 id="dictionary-of-abbreviations-to-states" id="dictionary-of-abbreviations-to-states">Dictionary of abbreviations to states</h2>

<pre><code class="language-json">{&#34;AL&#34;: &#34;Alabama&#34;, &#34;AK&#34;: &#34;Alaska&#34;, &#34;AZ&#34;: &#34;Arizona&#34;, &#34;AR&#34;: &#34;Arkansas&#34;, &#34;CA&#34;: &#34;California&#34;, &#34;CO&#34;: &#34;Colorado&#34;, &#34;CT&#34;: &#34;Connecticut&#34;, &#34;DE&#34;: &#34;Delaware&#34;, &#34;FL&#34;: &#34;Florida&#34;, &#34;GA&#34;: &#34;Georgia&#34;, &#34;HI&#34;: &#34;Hawaii&#34;, &#34;ID&#34;: &#34;Idaho&#34;, &#34;IL&#34;: &#34;Illinois&#34;, &#34;IN&#34;: &#34;Indiana&#34;, &#34;IA&#34;: &#34;Iowa&#34;, &#34;KS&#34;: &#34;Kansas&#34;, &#34;KY&#34;: &#34;Kentucky&#34;, &#34;LA&#34;: &#34;Louisiana&#34;, &#34;ME&#34;: &#34;Maine&#34;, &#34;MD&#34;: &#34;Maryland&#34;, &#34;MA&#34;: &#34;Massachusetts&#34;, &#34;MI&#34;: &#34;Michigan&#34;, &#34;MN&#34;: &#34;Minnesota&#34;, &#34;MS&#34;: &#34;Mississippi&#34;, &#34;MO&#34;: &#34;Missouri&#34;, &#34;MT&#34;: &#34;Montana&#34;, &#34;NB&#34;: &#34;Nebraska&#34;, &#34;NV&#34;: &#34;Nevada&#34;, &#34;NH&#34;: &#34;New Hampshire&#34;, &#34;NJ&#34;: &#34;New Jersey&#34;, &#34;NM&#34;: &#34;New Mexico&#34;, &#34;NY&#34;: &#34;New York&#34;, &#34;NC&#34;: &#34;North Carolina&#34;, &#34;ND&#34;: &#34;North Dakota&#34;, &#34;OH&#34;: &#34;Ohio&#34;, &#34;OK&#34;: &#34;Oklahoma&#34;, &#34;OR&#34;: &#34;Oregon&#34;, &#34;PA&#34;: &#34;Pennsylvania&#34;, &#34;RI&#34;: &#34;Rhode Island&#34;, &#34;SC&#34;: &#34;South Carolina&#34;, &#34;SD&#34;: &#34;South Dakota&#34;, &#34;TN&#34;: &#34;Tennessee&#34;, &#34;TX&#34;: &#34;Texas&#34;, &#34;UT&#34;: &#34;Utah&#34;, &#34;VT&#34;: &#34;Vermont&#34;, &#34;VA&#34;: &#34;Virginia&#34;, &#34;WA&#34;: &#34;Washington&#34;, &#34;WV&#34;: &#34;West Virginia&#34;, &#34;WI&#34;: &#34;Wisconsin&#34;, &#34;WY&#34;: &#34;Wyoming&#34;}
</code></pre>

<p><a href="https://kj7rrv.com/tag:Programming" class="hashtag"><span>#</span><span class="p-category">Programming</span></a> <a href="https://kj7rrv.com/tag:FOSS" class="hashtag"><span>#</span><span class="p-category">FOSS</span></a></p>
]]></content:encoded>
      <guid>https://kj7rrv.com/us-state-names-and-abbreviations-in-json</guid>
      <pubDate>Thu, 20 Apr 2023 01:56:26 +0000</pubDate>
    </item>
    <item>
      <title>User configuration template for MediaWiki</title>
      <link>https://kj7rrv.com/user-configuration-template-for-mediawiki-wl4x</link>
      <description>&lt;![CDATA[I wrote a #MediaWiki template that allows for the creation of templates that change based on user configuration.&#xA;&#xA;Edit: This will invalidate MediaWiki cache on pages that use it, increasing server CPU usage and page load times. Use this template sparingly.&#xA;&#xA;Dependencies/Prerequisites&#xA;&#xA;The GetUserName and ParserFunctions extensions are required. Also, you must create namespaces called DefaultConfig and UserConfig.&#xA;&#xA;define(&#34;NSDEFAULTCONFIG&#34;, 3000);&#xA;define(&#34;NSDEFAULTCONFIGTALK&#34;, 3001);&#xA;define(&#34;NSUSERCONFIG&#34;, 3002);&#xA;define(&#34;NSUSERCONFIGTALK&#34;, 3003);&#xA;$wgExtraNamespaces[NSUSERCONFIG] = &#34;UserConfig&#34;;&#xA;$wgExtraNamespaces[NSUSERCONFIGTALK] = &#34;UserConfigtalk&#34;;&#xA;$wgExtraNamespaces[NSDEFAULTCONFIG] = &#34;DefaultConfig&#34;;&#xA;$wgExtraNamespaces[NSDEFAULTCONFIGTALK] = &#34;DefaultConfigtalk&#34;;&#xA;$wgNamespaceProtection[NSDEFAULTCONFIG] = array(&#34;editdefaultconfig&#34;);&#xA;$wgGroupPermissions&#39;sysop&#39; = true;&#xA;$wgCapitalLinkOverrides[NSDEFAULTCONFIG] = false;&#xA;$wgCapitalLinkOverrides[NSDEFAULTCONFIGTALK] = false;&#xA;$wgNamespacesWithSubpages[NSUSERCONFIG] = true;&#xA;wfLoadExtension(&#39;GetUserName&#39;);&#xA;wfLoadExtension(&#39;ParserFunctions&#39;);&#xA;&#xA;It is recommended to only allow administrators or other trusted users to edit the DefaultConfig namespace. Unfortunately, I am not aware of any way to prevent users from editing other users&#39; UserConfig pages; this means that users can change the configuration settings of others.&#xA;   &#xA;Template&#xA;&#xA;Put this in Template:Config:&#xA;&#xA;{{#ifexist:DefaultConfig:{{{1}}}|{{#ifexist:UserConfig:{{#USERNAME:}}/{{{1}}}|{{UserConfig:{{#USERNAME:}}/{{{1}}}}}|{{ DefaultConfig:{{{1}}}}}}}|&#39;&#39;&#39;ERROR&#39;&#39;&#39;: No such configuration option exists. Please {{#ifexist:UserConfig:{{#USERNAME:}}/isadmin|create|ask an administrator to create}} [[DefaultConfig:{{{1}}}]].}}&#xA;&#xA;If you wish, you can create a UserConfig:[username]/isadmin page for all admin users. This has no effect other than changing the error message, so it is not important. Unlike other configuration settings, the content of this page does not matter; it only has to exist.&#xA;&#xA;Usage&#xA;&#xA;Simply use {{config|[option name]}} to get a configuration option. You must have a DefaultConfig:[option name] page. By default, {{config}} will return its content. However, if a user has a UserConfig:[user name]/[option name] page, its content will be returned instead.&#xA;&#xA;Example&#xA;&#xA;On the PBARC Web site, we use this for several things, including a {{time}} template. This takes time values in the format {{time|18|45}} and allows users to choose whether to see times as &#34;6:45 PM&#34; (12-hour time) or &#34;18:45&#34; (24-hour/military time). &#xA;&#xA;Here is the code for Template:Time:&#xA;&#xA;{{#ifeq: {{config|miltime}}|true|{{{1}}}:{{{2}}}|{{#ifexpr: ({{{1}}} = 12) and ({{{2}}} = 00)|12:00 noon|{{#ifexpr: ({{{1}}} = 00) and ({{{2}}} = 00)|12:00 midnight| {{#ifeq: {{#expr: {{{1}}} mod 12}} | 0 | 12 | {{#expr: {{{1}}} mod 12}}}}:{{{2}}} {{#ifexpr: {{{1}}} &lt; 12|AM|PM}}}}}}}}&#xA;&#xA;It will check the miltime configuration value and, if it is true, use 24-hour time; otherwise, it will use 12-hour time. On the PBARC site, it is set to false by default, but it could also be set to true. &#xA;&#xA;License&#xA;&#xA;This post, including all code, is released into the public domain under Creative Commons Zero. Feel free to use it for any purpose without asking permission or giving attribution.&#xA;&#xA;#PBARC #FOSS #Programming]]&gt;</description>
      <content:encoded><![CDATA[<p>I wrote a <a href="https://kj7rrv.com/tag:MediaWiki" class="hashtag"><span>#</span><span class="p-category">MediaWiki</span></a> template that allows for the creation of templates that change based on user configuration.</p>

<p><strong>Edit:</strong> This will invalidate MediaWiki cache on pages that use it, increasing server CPU usage and page load times. Use this template sparingly.</p>

<h2 id="dependencies-prerequisites" id="dependencies-prerequisites">Dependencies/Prerequisites</h2>

<p>The <a href="https://www.mediawiki.org/wiki/Extension:GetUserName"><code>GetUserName</code></a> and <a href="https://www.mediawiki.org/wiki/Extension:ParserFunctions"><code>ParserFunctions</code></a> extensions are required. Also, you must create namespaces called <code>DefaultConfig</code> and <code>UserConfig</code>.</p>

<pre><code class="language-php">define(&#34;NS_DEFAULTCONFIG&#34;, 3000);
define(&#34;NS_DEFAULTCONFIG_TALK&#34;, 3001);
define(&#34;NS_USERCONFIG&#34;, 3002);
define(&#34;NS_USERCONFIG_TALK&#34;, 3003);
$wgExtraNamespaces[NS_USERCONFIG] = &#34;UserConfig&#34;;
$wgExtraNamespaces[NS_USERCONFIG_TALK] = &#34;UserConfig_talk&#34;;
$wgExtraNamespaces[NS_DEFAULTCONFIG] = &#34;DefaultConfig&#34;;
$wgExtraNamespaces[NS_DEFAULTCONFIG_TALK] = &#34;DefaultConfig_talk&#34;;
$wgNamespaceProtection[NS_DEFAULTCONFIG] = array(&#34;editdefaultconfig&#34;);
$wgGroupPermissions[&#39;sysop&#39;][&#39;editdefaultconfig&#39;] = true;
$wgCapitalLinkOverrides[NS_DEFAULTCONFIG] = false;
$wgCapitalLinkOverrides[NS_DEFAULTCONFIG_TALK] = false;
$wgNamespacesWithSubpages[NS_USERCONFIG] = true;
wfLoadExtension(&#39;GetUserName&#39;);
wfLoadExtension(&#39;ParserFunctions&#39;);
</code></pre>

<p>It is recommended to only allow administrators or other trusted users to edit the <code>DefaultConfig</code> namespace. Unfortunately, I am not aware of any way to prevent users from editing other users&#39; <code>UserConfig</code> pages; this means that users can change the configuration settings of others.</p>

<h2 id="template" id="template">Template</h2>

<p>Put this in <code>Template:Config</code>:</p>

<pre><code class="language-mediawiki">{{#ifexist:DefaultConfig:{{{1}}}|{{#ifexist:UserConfig:{{#USERNAME:}}/{{{1}}}|{{UserConfig:{{#USERNAME:}}/{{{1}}}}}|{{ DefaultConfig:{{{1}}}}}}}|&#39;&#39;&#39;ERROR&#39;&#39;&#39;: No such configuration option exists. Please {{#ifexist:UserConfig:{{#USERNAME:}}/isadmin|create|ask an administrator to create}} [[DefaultConfig:{{{1}}}]].}}
</code></pre>

<p>If you wish, you can create a <code>UserConfig:[username]/isadmin</code> page for all admin users. This has no effect other than changing the error message, so it is not important. Unlike other configuration settings, the content of this page does not matter; it only has to exist.</p>

<h2 id="usage" id="usage">Usage</h2>

<p>Simply use <code>{{config|[option name]}}</code> to get a configuration option. You must have a <code>DefaultConfig:[option name]</code> page. By default, <code>{{config}}</code> will return its content. However, if a user has a <code>UserConfig:[user name]/[option name]</code> page, its content will be returned instead.</p>

<h2 id="example" id="example">Example</h2>

<p>On the <a href="https://w7bkg.org/wiki/Home_Page">PBARC Web site</a>, we use this for several things, including a <code>{{time}}</code> template. This takes time values in the format <code>{{time|18|45}}</code> and allows users to choose whether to see times as “6:45 PM” (12-hour time) or “18:45” (24-hour/military time).</p>

<p>Here is the code for <code>Template:Time</code>:</p>

<pre><code class="language-mediawiki">{{#ifeq: {{config|miltime}}|true|{{{1}}}:{{{2}}}|{{#ifexpr: ({{{1}}} = 12) and ({{{2}}} = 00)|12:00 noon|{{#ifexpr: ({{{1}}} = 00) and ({{{2}}} = 00)|12:00 midnight| {{#ifeq: {{#expr: {{{1}}} mod 12}} | 0 | 12 | {{#expr: {{{1}}} mod 12}}}}:{{{2}}} {{#ifexpr: {{{1}}} &lt; 12|AM|PM}}}}}}}}
</code></pre>

<p>It will check the <code>miltime</code> configuration value and, if it is <code>true</code>, use 24-hour time; otherwise, it will use 12-hour time. On the PBARC site, it is set to <code>false</code> by default, but it could also be set to <code>true</code>.</p>

<h2 id="license" id="license">License</h2>

<p>This post, including all code, is released into the public domain under <a href="https://creativecommons.org/publicdomain/zero/1.0/">Creative Commons Zero</a>. Feel free to use it for any purpose without asking permission or giving attribution.</p>

<p><a href="https://kj7rrv.com/tag:PBARC" class="hashtag"><span>#</span><span class="p-category">PBARC</span></a> <a href="https://kj7rrv.com/tag:FOSS" class="hashtag"><span>#</span><span class="p-category">FOSS</span></a> <a href="https://kj7rrv.com/tag:Programming" class="hashtag"><span>#</span><span class="p-category">Programming</span></a></p>
]]></content:encoded>
      <guid>https://kj7rrv.com/user-configuration-template-for-mediawiki-wl4x</guid>
      <pubDate>Wed, 15 Mar 2023 00:46:19 +0000</pubDate>
    </item>
  </channel>
</rss>