<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/rss-style.xsl" type="text/xsl"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	     xmlns:dc="http://purl.org/dc/elements/1.1/"
	   xmlns:atom="http://www.w3.org/2005/Atom"
	     xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	  xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>
<channel>
	<title>internet &#8211; Terence Eden’s Blog</title>
	<atom:link href="https://shkspr.mobi/blog/tag/internet/feed/" rel="self" type="application/rss+xml" />
	<link>https://shkspr.mobi/blog</link>
	<description>Regular nonsense about tech and its effects 🙃</description>
	<lastBuildDate>Sun, 05 Apr 2026 07:08:56 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://shkspr.mobi/blog/wp-content/uploads/2023/07/cropped-avatar-32x32.jpeg</url>
	<title>internet &#8211; Terence Eden’s Blog</title>
	<link>https://shkspr.mobi/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title><![CDATA[This time is different]]></title>
		<link>https://shkspr.mobi/blog/2026/02/this-time-is-different/</link>
					<comments>https://shkspr.mobi/blog/2026/02/this-time-is-different/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 26 Feb 2026 12:34:39 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[technology]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=64559</guid>

					<description><![CDATA[3D TV, AMP, Augmented Reality, Beanie Babies, Blockchain, Cartoon Avatars, Curved TVs, Frogans, Hoverboards, iBeacons, Jetpacks, Metaverse, NFTs, Physical Web, Quantum Computing, Quibi, Small and Safe Nuclear Reactors, Smart Glasses, Stadia, WiMAX.  The problem is, the same dudes (and it was nearly always dudes) who were pumped for all of that bollocks now won&#039;t stop wanging on about Artificial…]]></description>
										<content:encoded><![CDATA[<p>3D TV, AMP, Augmented Reality, Beanie Babies, Blockchain, Cartoon Avatars, Curved TVs, Frogans, Hoverboards, iBeacons, Jetpacks, Metaverse, NFTs, Physical Web, Quantum Computing, Quibi, Small and Safe Nuclear Reactors, Smart Glasses, Stadia, WiMAX.</p>

<p>The problem is, the same dudes (and it was nearly always dudes) who were pumped for all of that bollocks now won't stop wanging on about Artificial Fucking Intelligence.</p>

<p>"It's gonna be the future bro, just trust me!"</p>

<p>"I dunno, man. Seems like you say that about every passing fancy - and they all end up being utterly underwhelming."</p>

<p>"This time is different!"</p>

<p><em>*sigh*</em></p>

<blockquote><p>The investor who says, “This time is different,” when in fact it’s virtually a repeat of an earlier situation, has uttered among the four most costly words in the annals of investing.</p>

<p><a href="https://www.franklintempleton.com/forms-literature/download/TL-R16">16 rules for investment success - Sir John Templeton</a></p></blockquote>

<p>All of the above technologies are still chugging along in some form or other (well, OK, not Quibi). Some are vaguely useful and others are propped up by weirdo cultists. I don't doubt that AI will be a <em>part</em> of the future - but it is obviously just going to be one of <em>many</em> technology which are in use.</p>

<blockquote><p>No enemies had ever taken Ankh-Morpork. Well technically they had, quite often; the city welcomed free-spending barbarian invaders, but somehow the puzzled raiders found, after a few days, that they didn't own their horses any more, and within a couple of months they were just another minority group with its own graffiti and food shops.</p>

<p>Terry Pratchet's <del>Faust</del> Eric</p></blockquote>

<p>The ideology of "winner takes all" is unsustainable and not supported by reality.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=64559&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2026/02/this-time-is-different/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Preventing NAPTR Spam]]></title>
		<link>https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/</link>
					<comments>https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 18 Aug 2025 11:34:47 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[privacy]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=61707</guid>

					<description><![CDATA[You&#039;re the sort of cool nerd who knows all the weird esoterica which makes up DNS, right? In amongst your A, AAAA, SOA, and MX records, there&#039;s a little used NAPTR. Yes, you can use DNS to store Name Authority Pointers!  What?!  It is yet another of those baroque standards which spits out things like:  cid.uri.arpa. ;;       order pref flags service        regexp           replacement IN NAPTR…]]></description>
										<content:encoded><![CDATA[<p>You're the sort of cool nerd who knows all the weird esoterica which makes up DNS, right? In amongst your A, AAAA, SOA, and MX records, there's a little used <a href="https://dn.org/understanding-naptr-records-and-their-role-in-dns/">NAPTR</a>. Yes, you can use DNS to store Name Authority Pointers!</p>

<p>What?!</p>

<p>It is yet another of those <a href="https://shkspr.mobi/blog/2015/11/a-polite-way-to-say-ridiculously-complicated/">baroque</a> standards which spits out things like:</p>

<pre><code class="language-_">cid.uri.arpa.
;;       order pref flags service        regexp           replacement
IN NAPTR 100   10   ""    ""  "!^cid:.+@([^\.]+\.)(.*)$!\2!i"    .
</code></pre>

<p>Essentially, it is a way to store contact details within a DNS record (rather than in a WHOIS record).</p>

<p>Back in the early 2000s, the dotTel company opened the .tel TLD with a promise that it could be used to store your contact details in DNS<sup id="fnref:history"><a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#fn:history" class="footnote-ref" title="Even back in 2009 I didn't think it was terribly compelling. By 2013, it was almost dead. And in 2017 it became just another generic TLD." role="doc-noteref">0</a></sup>.  The idea was simple, rather than storing my phone number in your address book, you'd store my domain name - <a href="https://edent.tel/">https://edent.tel/</a></p>

<p>If I updated my phone number, changed my avatar, or deleted an old email address - your address book would automatically update via DNS. Nifty!</p>

<p>If you didn't know a company's phone number, you'd dial <code>example.com</code> on your phone and it would grab the phone numbers from DNS. Wowsers trousers!</p>

<p>You can see an example by running:</p>

<pre><code class="language-_">dig justin.tel NAPTR
</code></pre>

<p>You'll get back something like:</p>

<pre><code class="language-_">NAPTR   100 101 "u" "E2U+web:http" "!^.*$!http://justinkhayward.com!" 
</code></pre>

<p>A phone number stored in a NAPTR would look something like:</p>

<pre><code class="language-_">NAPTR   100 100 "u" "E2U+voice:tel" "!^.*$!tel:+442074676450!" .
</code></pre>

<p>Brilliant! But there's a problem - aside from the somewhat obtuse syntax! - and that problem is spam.</p>

<p>Those of you old enough to remember putting your unexpurgated contact details into WHOIS know that the minute it went live you were bombarded with sales calls and scammy emails. So putting your details directly into DNS is a bad idea, right?</p>

<p>.tel thought they'd come up with a clever hack to prevent that. As they explain in <a href="https://web.archive.org/web/20120504070307/https://dev.telnic.org/docs/privacy.pdf">the .tel privacy paper</a>, records can be individually encrypted.</p>

<ul>
<li>Alice has her contact details on <code>alice.tel</code></li>
<li>Bob has his contact details on <code>bob.tel</code></li>
<li>Alice agrees to share her phone number with Bob.</li>
<li>Alice looks up Bob's public key from <code>bob.tel</code>.</li>
<li>Alice encrypts her phone number.</li>
<li>Alice generates a new DNS record specifically for Bob - <code>bob123456.alice.tel</code></li>
<li>Alice shares the name of the new record with Bob.</li>
<li>Bob downloads the NAPTR from <code>bob123456.alice.tel</code> and decrypts it with his private key.</li>
<li>Bob periodically checks for updates.</li>
<li>Alice can decide to revoke Bob's access by removing the data or subdomain.</li>
</ul>

<p>Clever! If convoluted.  You can <a href="https://rikkles.blogspot.com/2008/05/privacy-in-tel.html">read more about the way friendships and public keys were managed</a> and <a href="https://web.archive.org/web/20120504073313/https://dev.telnic.org/docs/naptr.pdf">some more technical details</a>.</p>

<p>Are there better ways?</p>

<h2 id="multi-recipient-encryption"><a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#multi-recipient-encryption">Multi Recipient Encryption</a></h2>

<p>When people say "you can't give Government a secret key to your private messages" they are technically incorrect<sup id="fnref:worst"><a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#fn:worst" class="footnote-ref" title="The worst type of incorrect." role="doc-noteref">1</a></sup>.  Multi Recipient Encryption is a thing.</p>

<p>Here's a very simplified and subtly wrong explanation:</p>

<ul>
<li>Alice creates a <em>temporary</em> public/private keypair.</li>
<li>Alice encrypts some text with her temporary public key - resulting in <code>e</code>.</li>
<li>Alice encrypts the temporary private key with Bob's public key - resulting in <code>k1</code>.</li>
<li>Alice encrypts the temporary private key with Charlie's public key - resulting in <code>k2</code>.</li>
<li>Alice publishes the concatenation of <code>e+k1+k2</code></li>
<li>Bob downloads the file, decrypts <em>his</em> version of the key, and uses that to decrypt the message.</li>
<li>Charlie does the same.</li>
</ul>

<p>In this way, both recipients are able to decipher the text but no one else can.  So can we just shove an encrypted record in the NAPTR?  Not quite.</p>

<p>There are two main problems with this for DNS purposes.</p>

<ol>
<li>The encrypted size grows with every recipient.</li>
<li>Every time a new recipient is added, everyone needs to download the data again even if it is unchanged.</li>
</ol>

<p>Generally speaking, DNS records are a maximum of 255 characters - <a href="https://kb.isc.org/docs/aa-00356">although they can be concatenated</a>.</p>

<p>An extra record could be used to say when the plaintext was last updated - which would let existing recipients know not to download it again.</p>

<p>Monitoring for changes would allow a user to know roughly how many recipients had been added or removed.</p>

<p>What other ways could there be?</p>

<h2 id="what-else-could-be-done"><a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#what-else-could-be-done">What else could be done?</a></h2>

<p>Here's the user story.</p>

<ul>
<li>I want a friend to subscribe to my [phone|email|street|social media] address(es).</li>
<li>I must be able to pre-approve access.</li>
<li>When I change my address, my friend should get my new details.</li>
<li>I need to be able to revoke people's access.</li>
<li>This should be done via DNS<sup id="fnref:dns"><a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#fn:dns" class="footnote-ref" title="Why DNS? Because I like making life difficult." role="doc-noteref">2</a></sup>.</li>
</ul>

<p>Using an API this would be playing on easy mode. A friend (or rather, their app) would request an API key from my service. I would approve it, and then ✨magic✨.</p>

<p>DNS isn't <em>technically</em> an API although, with enough effort, you could make it behave like one<sup id="fnref:marquis"><a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#fn:marquis" class="footnote-ref" title="If you were a sadist!" role="doc-noteref">3</a></sup>.</p>

<p>So - how would <em>you</em> do it?</p>

<div id="footnotes" role="doc-endnotes">
<hr>
<ol start="0">

<li id="fn:history">
<p>Even back in 2009 <a href="https://shkspr.mobi/blog/2009/03/some-thoughts-on-tel/">I didn't think it was terribly compelling</a>. By 2013, <a href="https://shkspr.mobi/blog/2013/03/should-i-renew-my-tel-domain/">it was almost dead</a>. And in 2017 <a href="https://shkspr.mobi/blog/2017/02/whats-the-future-for-the-tel-domain-name/">it became just another generic TLD</a>.&nbsp;<a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#fnref:history" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:worst">
<p>The <em>worst</em> type of incorrect.&nbsp;<a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#fnref:worst" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:dns">
<p>Why DNS? Because I like making life difficult.&nbsp;<a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#fnref:dns" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:marquis">
<p>If you were a sadist!&nbsp;<a href="https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/#fnref:marquis" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=61707&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/08/preventing-naptr-spam/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Get the location of the ISS using DNS]]></title>
		<link>https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/</link>
					<comments>https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 06 Jul 2025 11:34:33 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[trivia]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=61693</guid>

					<description><![CDATA[I love DNS esoterica. Weird little things that you can shove in the global directory to be distributed around the world instantly(ish).  Domain names, like www.example.com usually resolve to servers. As much as we think of &#34;the cloud&#34; as being some intangible morass of ethereal Turing-machines floating in probability space, the more prosaic reality is that they&#039;re just boxen in data centres. They …]]></description>
										<content:encoded><![CDATA[<p>I love DNS esoterica. Weird little things that you can shove in the global directory to be distributed around the world instantly(ish).</p>

<p>Domain names, like <code>www.example.com</code> usually resolve to servers. As much as we think of "the cloud" as being some intangible morass of ethereal Turing-machines floating in probability space, the more prosaic reality is that they're just boxen in data centres. They have a physical location.</p>

<p>Got a tricky machine which is playing silly-buggers? Wouldn't it be nice to know exactly where it is? That way you can visit and give it some <a href="https://tvtropes.org/pmwiki/pmwiki.php/Main/PercussiveMaintenance">percussive maintenance</a>.</p>

<p>Enter the DNS LOC record!</p>

<p>The snappily titled <a href="https://www.rfc-editor.org/rfc/rfc1876.html">RFC 1876</a> is an <em>experimental</em> standard. It allows you to create a DNS record which specifies the latitude and longitude of your server. Of course, some data-centres are very tall and some are underground. So it also contains an altitude parameter.</p>

<p>The standard allows for a minimum altitude of -100,000 metres - deep enough for any bunker! The maximum altitude is 42,849,672 metres which is high enough to allow it to be used on <a href="https://www.esa.int/Enabling_Support/Space_Transportation/Types_of_orbits#GEO">satellites in geostationary orbit</a>.</p>

<p>So, as a bit of fun, I decided to create <code>where-is-the-iss.dedyn.io</code></p>

<p>It isn't a website. You can't ping it. There's no way to interact with it <em>except</em> by using DNS.  Yup! You can use a DNS query to get the (approximate) location of the International Space Station!</p>

<p>Linux and Mac users<sup id="fnref:win"><a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#fn:win" class="footnote-ref" title="I don't think there's a way for Windows users to look up LOC records using PowerShell or the Command Prompt." role="doc-noteref">0</a></sup> can run:</p>

<p><code>dig where-is-the-iss.dedyn.io LOC</code></p>

<p>And receive back the latest position of the ISS:</p>

<pre><code class="language-_">;; ANSWER SECTION:
where-is-the-iss.dedyn.io. 1066 IN  LOC 47 24 53.500 N 66 12 12.070 W 430520m 10000m 10000m 10000m
</code></pre>

<p>The DNS records are updated every 15 minutes on a best-effort basis<sup id="fnref:nasa"><a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#fn:nasa" class="footnote-ref" title="Look, I'm not NASA, OK? If you're using this to help you dock then I cannot be held responsible." role="doc-noteref">1</a></sup>.</p>

<h2 id="how"><a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#how">How</a></h2>

<p>The lovely people at <a href="https://www.n2yo.com">N2YO</a> have a website which allows you to track <em>loads</em> of objects in orbit.  They also have an <a href="https://www.n2yo.com/api/">easy to use API</a> with a generous free tier.</p>

<p>Calling <code>https://api.n2yo.com/rest/v1/satellite/positions/25544/0/0/0/1/&amp;apiKey=_____</code> gets back the latest position:</p>

<pre><code class="language-json">{
    "info": {
        "satname": "SPACE STATION",
        "satid": 25544,
        "transactionscount": 7
    },
    "positions": [
        {
            "satlatitude": -21.25409321,
            "satlongitude": 140.3335763,
            "sataltitude": 420.09,
            "azimuth": 292.92,
            "elevation": -70.95,
            "ra": 202.69300845,
            "dec": -32.16097472,
            "timestamp": 1751366048,
            "eclipsed": true
        }
    ]
}
</code></pre>

<p>Note that the altitude is in Km, whereas the LOC format requires m.</p>

<p>The latitude and longitude are in decimal format - they need to be converted to Degrees, Minutes, and Seconds.</p>

<p>There were only a few free domain name providers who offer an API for updating LOC records.  I went for <a href="https://desec.io/">deSEC</a> a charity from Berlin. They have <a href="https://desec.readthedocs.io/en/latest/">comprehensive API documentation</a>.</p>

<p>Adding the initial LOC record is done with:</p>

<pre><code class="language-bash">curl https://desec.io/api/v1/domains/where-is-the-iss.dedyn.io/rrsets/ \
    --header "Authorization: Token _______" \
    --header "Content-Type: application/json" --data @- &lt;&lt;&lt; \
    '{"type": "LOC", "records": ["40 16 25.712 S 29 32 36.243 W 427550m 0.00m 10000m 10m"], "ttl": 900}'
</code></pre>

<p>However, updating the record is a little trickier. it needs to be sent as an <a href="https://desec.readthedocs.io/en/latest/dns/rrsets.html#modifying-an-rrset">HTTP PATCH</a> to a subtly different URl. The PATCH only needs to send the data which have changed.</p>

<pre><code class="language-bash">curl -X PATCH https://desec.io/api/v1/domains/where-is-the-iss.dedyn.io/rrsets/@/LOC/ \
    --header "Authorization: Token _______" \
    --header "Content-Type: application/json" --data @- &lt;&lt;&lt; \
    '{"records": ["40 16 25.712 S 29 32 36.243 W 427550m 0.00m 10000m 10m"]}'
</code></pre>

<p>I set the <a href="https://ttl-calc.com/">Time To Live</a> at 900 seconds. Every 15 minutes my code runs to update the record<sup id="fnref:api"><a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#fn:api" class="footnote-ref" title="I suppose you could build an API with unlimited request limits by distributing data via DNS TXT records. Would best suit static or infrequently updating data. Push it once to DNS and let everyone…" role="doc-noteref">2</a></sup>. That keeps me well within the API limits for both services.  I could add TXT records showing when it was last updated, or other sorts of unstructured data, but I think this is enough for a quick proof-of-concept.</p>

<p>There you have it! A complex and silly way to demonstrate how DNS can be used to hold the most unlikely of records<sup id="fnref:naptr"><a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#fn:naptr" class="footnote-ref" title="See if you can find the other interesting record I've added to DNS!" role="doc-noteref">3</a></sup>.  Say, I wonder how you'd represent the co-ordinates of the Mars Rover…?</p>

<h2 id="further-reading"><a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#further-reading">Further Reading</a></h2>

<p>For more DNS weirdness, please see my other posts:</p>

<ul>
<li><a href="https://shkspr.mobi/blog/2022/08/dns-esoterica-bimi-svg-in-dns-txt-wtf/">BIMI - SVG in DNS TXT WTF?!</a></li>
<li><a href="https://shkspr.mobi/blog/2022/07/dns-esoterica-why-you-cant-dig-switzerland/">Why you can't dig Switzerland</a></li>
</ul>

<div id="footnotes" role="doc-endnotes">
<hr>
<ol start="0">

<li id="fn:win">
<p>I don't think there's a way for Windows users to look up LOC records using PowerShell or the Command Prompt.&nbsp;<a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#fnref:win" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:nasa">
<p>Look, I'm not NASA, OK? If you're using this to help you dock then I cannot be held responsible.&nbsp;<a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#fnref:nasa" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:api">
<p>I suppose you could build an API with unlimited request limits by distributing data via DNS TXT records. Would best suit static or infrequently updating data. Push it once to DNS and let everyone query it semi-locally.&nbsp;<a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#fnref:api" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:naptr">
<p>See if you can find the other interesting record I've added to DNS!&nbsp;<a href="https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/#fnref:naptr" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=61693&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2025/07/get-the-location-of-the-iss-using-dns/feed/</wfw:commentRss>
			<slash:comments>15</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[http:, ftp:, and ... dict:?]]></title>
		<link>https://shkspr.mobi/blog/2024/09/http-ftp-and-dict/</link>
					<comments>https://shkspr.mobi/blog/2024/09/http-ftp-and-dict/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 18 Sep 2024 11:34:56 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[internet]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=52349</guid>

					<description><![CDATA[I went for a spelunk through an ancient codebase a few weeks ago which contained a curious regex that I just couldn&#039;t grok.  {&#60;((https?&#124;ftp&#124;dict&#124;tel):[^\&#039;&#34;&#62;\s]+)&#62;}i   I&#039;m familiar with HTTP and FTP. I worked in the mobile industry, so knew that tel:+44... could be used to launch a dialer.  But DICT?!?!?!  It turns out that, lurking on the Internet are Dictionary Servers!  They exist to allow you…]]></description>
										<content:encoded><![CDATA[<p>I went for a spelunk<sup id="fnref:spelunk"><a href="https://shkspr.mobi/blog/2024/09/http-ftp-and-dict/#fn:spelunk" class="footnote-ref" title="v 1: explore natural caves [syn: {cave}, {spelunk}]" role="doc-noteref">0</a></sup> through an ancient codebase a few weeks ago which contained a curious regex that I just couldn't grok<sup id="fnref:grok"><a href="https://shkspr.mobi/blog/2024/09/http-ftp-and-dict/#fn:grok" class="footnote-ref" title="(/grok/, /grohk/, vt. 1. To understand. Connotes intimate and exhaustive knowledge." role="doc-noteref">1</a></sup>.</p>

<pre><code class="language-_">{&lt;((https?|ftp|dict|tel):[^\'"&gt;\s]+)&gt;}i
</code></pre>

<p>I'm familiar with HTTP and FTP. I worked in the mobile industry, so knew that <code>tel:+44...</code> could be used to launch a dialer.</p>

<p>But DICT?!?!?!</p>

<p>It turns out that, lurking on the Internet are <em>Dictionary Servers</em>!  They exist to allow you to query dictionaries over a network.</p>

<blockquote><p>For many years, the Internet community has relied on the "webster" protocol for access to natural language definitions. […] In recent years, the number of publicly available webster servers on the Internet has dramatically decreased.  Fortunately, several freely-distributable dictionaries and lexicons have recently become available on the Internet.  However, these freely-distributable databases are not accessible via a uniform interface, and are not accessible from a single site.</p></blockquote>

<p><a href="https://datatracker.ietf.org/doc/html/rfc2229">The (informal) standard was published in 1997</a> but has kept a relatively low profile since then.  You can understand why it was invented - in an age of low-size disk drives and expensive software, looking up data over a dedicated protocol seems like a nifty<sup id="fnref:nifty"><a href="https://shkspr.mobi/blog/2024/09/http-ftp-and-dict/#fn:nifty" class="footnote-ref" title="nifty \nifty\ adj. 1. Very good; excellent; -- an informal term meaning about the same as {groovy}, sense 1. [informal, 1960's]" role="doc-noteref">2</a></sup> idea.</p>

<p>Then disk size exploded, databases became cheap, and search engines made it easy to look up words.</p>

<h2 id="how-it-works"><a href="https://shkspr.mobi/blog/2024/09/http-ftp-and-dict/#how-it-works">How it works</a></h2>

<p>You can try it out today!</p>

<p>Run this command in your terminal:</p>

<p><code>curl dict://dict.org/d:Internet</code></p>

<p>That will bring back the definition from the server's default dictionary. If you want to look up a word in a <em>specific</em> dictionary - like The Jargon File - you can run:</p>

<p><code>curl dict://dict.org/d:Internet:jargon</code></p>

<p>You can even use it for simple translation tasks. For example, to translate English to Japanese:</p>

<p><code>curl dict://dict.org/d:Internet:fd-eng-jpn</code></p>

<h2 id="what-else"><a href="https://shkspr.mobi/blog/2024/09/http-ftp-and-dict/#what-else">What Else?</a></h2>

<p>Perhaps the easiest way to explore the protocol and server is to use telnet:</p>

<p><code>telnet dict.org dict</code></p>

<p>Type the command <code>HELP</code> and help ye shall receive:</p>

<pre><code class="language-_">113 help text follows
DEFINE database word         -- look up word in database
MATCH database strategy word -- match word in database using strategy
SHOW DB                      -- list all accessible databases
SHOW DATABASES               -- list all accessible databases
SHOW STRAT                   -- list available matching strategies
SHOW STRATEGIES              -- list available matching strategies
SHOW INFO database           -- provide information about the database
SHOW SERVER                  -- provide site-specific information
OPTION MIME                  -- use MIME headers
CLIENT info                  -- identify client to server
AUTH user string             -- provide authentication information
STATUS                       -- display timing information
HELP                         -- display this help information
QUIT                         -- terminate connection

250 ok
</code></pre>

<p>That will allow you to see all the dictionaries available - in a variety of languages - and the various commands you can use with them.</p>

<h2 id="unanswered-questions"><a href="https://shkspr.mobi/blog/2024/09/http-ftp-and-dict/#unanswered-questions">Unanswered Questions</a></h2>

<ol start="0">
<li>Are there any other Dictionary Servers still available on the Internet?</li>
<li>Did the Webster Protocol get specified outside of <a href="https://www.cs.brandeis.edu/~bruncott/elisp/webster19-alpha.el">obscure source code</a>?</li>
<li>Is there something interesting and modern one could do with a DICT server?</li>
</ol>

<div id="footnotes" role="doc-endnotes">
<hr>
<ol start="0">

<li id="fn:spelunk">
<p>v 1: explore natural caves [syn: {cave}, {spelunk}]&nbsp;<a href="https://shkspr.mobi/blog/2024/09/http-ftp-and-dict/#fnref:spelunk" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:grok">
<p>(/grok/, /grohk/, vt. 1. To understand. Connotes intimate and exhaustive knowledge.&nbsp;<a href="https://shkspr.mobi/blog/2024/09/http-ftp-and-dict/#fnref:grok" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:nifty">
<p>nifty \nifty\ adj.   1. Very good; excellent; -- an informal term meaning about the same as {groovy}, sense 1. [informal, 1960's]&nbsp;<a href="https://shkspr.mobi/blog/2024/09/http-ftp-and-dict/#fnref:nifty" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=52349&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2024/09/http-ftp-and-dict/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[.ss TLD opening for direct registrations]]></title>
		<link>https://shkspr.mobi/blog/2024/07/ss-tld-opening-for-direct-registrations/</link>
					<comments>https://shkspr.mobi/blog/2024/07/ss-tld-opening-for-direct-registrations/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 31 Jul 2024 11:34:05 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[africa]]></category>
		<category><![CDATA[domains]]></category>
		<category><![CDATA[ICANN]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[tld]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=51212</guid>

					<description><![CDATA[It looks like South Sudan&#039;s Top Level Domain is going to start allowing direct registrations!  Long-time readers of this blog will know that it&#039;s possible to register  .me.ss domain names - there are various other 3rd level domains you can buy.  But, from the 1st of August 2024, you&#039;ll be able to apply for a 2nd level. So you&#039;ll be able to grab example.ss.  Here&#039;s the official announcement.    As …]]></description>
										<content:encoded><![CDATA[<p>It looks like South Sudan's Top Level Domain is going to start allowing direct registrations!</p>

<p>Long-time readers of this blog will know that <a href="https://shkspr.mobi/blog/2021/07/hot-mess-a-new-emoji-domain/">it's possible to register  <code>.me.ss</code> domain names</a> - there are various other <a href="https://nic.ss/faqs/">3rd level domains</a> you can buy.</p>

<p>But, from the 1st of August 2024, you'll be able to apply for a 2nd level. So you'll be able to grab <code>example.ss</code>.</p>

<p><a href="https://nic.ss/wp-content/uploads/2024/07/ssNIC-Registry-Sunrise-Registration-Policy-July-2024.pdf">Here's the official announcement</a>.</p>

<p><a href="https://nic.ss/wp-content/uploads/2024/07/ssNIC-Registry-Sunrise-Registration-Policy-July-2024.pdf"><img src="https://shkspr.mobi/blog/wp-content/uploads/2024/07/Sunrisess-fs8.png" alt="National Communication Authority (NCA) ssNIC Registry Sunrise Registration Policy July 2024. 1 Duration: The Registry will run the registration process according to the below timetable: Sunrise Period: 45 Days (1st August – 15th September 2024). Landrush Period: 30 Days (20th September – 10th October 2024). Early Access Period: 10 Days (15th October – 25th October 2024). General Availability: 1st November 2024" width="750" class="aligncenter size-full wp-image-51213"></a></p>

<p>As per normal for a new TLD, there will be a period where organisations with Trade Marks can register their domains. Then a period where anyone with sufficient cash can register their cool idea for a domain. Then it opens up to everyone.</p>

<p>So what will they cost? <a href="https://www.afriregister.com/">Afriregister</a> provided these prices:</p>

<table>
<thead>
<tr>
  <th>Period</th>
  <th align="right">Domain</th>
  <th align="right">Registration</th>
  <th align="right">Renewal</th>
</tr>
</thead>
<tbody>
<tr>
  <td>Sunrise (2 years)</td>
  <td align="right">.ss</td>
  <td align="right">€1020</td>
  <td align="right">€110</td>
</tr>
<tr>
  <td></td>
  <td align="right">.co.ss</td>
  <td align="right">€610</td>
  <td align="right">€60</td>
</tr>
<tr>
  <td>Landrush (1 year)</td>
  <td align="right">.ss</td>
  <td align="right">€300</td>
  <td align="right">€110</td>
</tr>
<tr>
  <td></td>
  <td align="right">.co.ss</td>
  <td align="right">€160</td>
  <td align="right">€60</td>
</tr>
<tr>
  <td>Early Access (1 year)</td>
  <td align="right">.ss</td>
  <td align="right">€220</td>
  <td align="right">€110</td>
</tr>
<tr>
  <td></td>
  <td align="right">.co.ss</td>
  <td align="right">€160</td>
  <td align="right">€60</td>
</tr>
<tr>
  <td>General (1 year)</td>
  <td align="right">.ss</td>
  <td align="right">€110</td>
  <td align="right">€110</td>
</tr>
<tr>
  <td></td>
  <td align="right">.co.ss</td>
  <td align="right">€60</td>
  <td align="right">€60</td>
</tr>
</tbody>
</table>

<p>For comparison, their .me.ss domains are only €25.</p>

<p>Registrations will only be allowed in ASCII - which means no IDNs.  The majority of the languages officially recognised in South Sudan appear to be written in the Latin script, so that shouldn't be a huge issue.</p>

<p>As is common with all other TLDs, there is a list of words which will not be allowed to be registered.</p>

<blockquote><p>Applications will not be accepted for domain names appearing on the Second Level Domain (SLD) block list.</p></blockquote>

<p>When I previously investigated this, there were lots of names which weren't available due to local politics. Although there is <a href="https://web.archive.org/web/20210813045419/https://nic.ss/download/reserved_restricted_premium_list/?wpdmdl=2330&amp;refresh=6115fae57ea441628830437">an archived version of the list of banned words (PDF)</a>, the modern SLD Block List appears to have vanished from the registry. I've asked them for an updated list which I'll link to once I get it.</p>

<p>I think it is fair to say that <a href="https://www.theregister.com/2019/01/24/south_sudan_nazi_domain/">the .ss TLD has had a tumultuous history</a>.  There hasn't been much discussion of this change in policy since <a href="https://x.com/NCA_SSD/status/1811778704059547783/quotes">the announcement a few weeks ago</a> - but I hope that this opening up will help South Sudanese people &amp; businesses to establish their own distinct presence on the Internet.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=51212&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2024/07/ss-tld-opening-for-direct-registrations/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Universal Basic Website]]></title>
		<link>https://shkspr.mobi/blog/2024/04/universal-basic-website/</link>
					<comments>https://shkspr.mobi/blog/2024/04/universal-basic-website/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 27 Apr 2024 11:34:29 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[future]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[isp]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=50077</guid>

					<description><![CDATA[Many years ago - when I was very young and you were even younger - it was standard for an ISP to provide all their users with a small amount of webspace.  Both Pipex and Demon offered webspace back in 1996. If my hazy memory is correct, they offered a few megabytes - more than enough for a fledgeling website.  But, over the years, ISPs shut down their bundled web offerings.  Even their bundled…]]></description>
										<content:encoded><![CDATA[<p>Many years ago - when I was very young and you were even younger - it was standard for an ISP to provide all their users with a small amount of webspace.  Both <a href="https://www.independent.co.uk/life-style/how-well-are-you-being-served-1361473.html">Pipex and Demon offered webspace back in 1996</a>. If my hazy memory is correct, they offered a few megabytes - more than enough for a fledgeling website<sup id="fnref:midi"><a href="https://shkspr.mobi/blog/2024/04/universal-basic-website/#fn:midi" class="footnote-ref" title="With background MIDI music, as was the fashion of the day." role="doc-noteref">0</a></sup>.</p>

<p>But, over the years, <a href="https://wiki.archiveteam.org/index.php/TalkTalk">ISPs shut down their bundled web offerings</a>.  Even their <a href="https://www.which.co.uk/news/article/john-lewis-closing-its-broadband-service-what-to-do-if-youre-affected-aW8xD1i65Kgs">bundled email services went on the chopping block</a>.  This is sad, but understandable. Most people unbundled their email so they didn't need to stick with the same ISP.  Why have <code>user@isp.example</code> when you could have a GMail address?</p>

<p>And, indeed, why host data with your ISP when you could just use Facebook?</p>

<p>For most people, Facebook is a pretty good personal website. You can post your photos and have your friends &amp; family see them. You can write long heartfelt rants about your teenage melodrama. You can put up the opening times of your new business. You can even host a discussion board around a specific topic.</p>

<p>Now, don't get me wrong, there are a few problems with Facebook<sup id="fnref:facebook"><a href="https://shkspr.mobi/blog/2024/04/universal-basic-website/#fn:facebook" class="footnote-ref" title="This is an understatement." role="doc-noteref">1</a></sup>. All your faves are problematic. But I think it shows that people want the benefits of personal websites, even if they don't want the hassle of <em>running</em> those websites.</p>

<p>What does the world look like if a country offers its citizens a Universal Basic Website?  Similar to Universal Basic Income, a no-questions asked entitlement to a chunk of the Web. Perhaps a generic subdomain, some storage space, and an easy to use interface?</p>

<p>Oh, sure, there are lots of technical issues. You'd probably have to make sure people weren't running unapproved scripts. Moderation of prohibited content would be contentious. Tech support would be a nightmare. Some corrupt company would get billions to run a sub-standard service. A failed backup or a hacker would wipe out your bakery's recipes.</p>

<p>But...</p>

<p>We accept that there are common spaces in the real world<sup id="fnref:meatspace"><a href="https://shkspr.mobi/blog/2024/04/universal-basic-website/#fn:meatspace" class="footnote-ref" title="AKA Meatspace. AKA AFK." role="doc-noteref">2</a></sup> where people can have fun without paying. Anyone can go to a park. Anyone can stick a flyer up on a community notice board. We let kids ride the bus for free.</p>

<p>Can we do the same in cyberspace?</p>

<p>You can <a href="https://mastodon.social/@Edent/112161196933183367">read some other peoples' thoughts on this Mastodon thread</a>.</p>

<div id="footnotes" role="doc-endnotes">
<hr>
<ol start="0">

<li id="fn:midi">
<p>With background MIDI music, as was the fashion of the day.&nbsp;<a href="https://shkspr.mobi/blog/2024/04/universal-basic-website/#fnref:midi" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:facebook">
<p>This is an understatement.&nbsp;<a href="https://shkspr.mobi/blog/2024/04/universal-basic-website/#fnref:facebook" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:meatspace">
<p>AKA Meatspace. AKA AFK.&nbsp;<a href="https://shkspr.mobi/blog/2024/04/universal-basic-website/#fnref:meatspace" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=50077&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2024/04/universal-basic-website/feed/</wfw:commentRss>
			<slash:comments>12</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Virgin Media preparing to offer symmetrical upload speeds?]]></title>
		<link>https://shkspr.mobi/blog/2024/03/virgin-media-preparing-to-offer-symmetrical-upload-speeds/</link>
					<comments>https://shkspr.mobi/blog/2024/03/virgin-media-preparing-to-offer-symmetrical-upload-speeds/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 08 Mar 2024 12:34:09 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[isp]]></category>
		<category><![CDATA[virgin]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=49873</guid>

					<description><![CDATA[Virgin Media - a UK-based fibre-optic ISP - recently sent me a survey about their potential product offerings. It was desperate to know if I wanted bundled streaming video (no), or Sky Sports (LOL no), or any other digital subscriptions (no, go away), or a landline (what, is this the 1990s?).  They even wanted to know if I&#039;d pay extra for priority support.    In amongst all the other offers, they …]]></description>
										<content:encoded><![CDATA[<p>Virgin Media - a UK-based fibre-optic ISP - recently sent me a survey about their potential product offerings. It was desperate to know if I wanted bundled streaming video (no), or Sky Sports (LOL no), or any other digital subscriptions (no, go away), or a landline (what, is this the 1990s?).  They even wanted to know if I'd pay extra for priority support.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/03/VM-Priority-Support-fs8.png" alt="Priority support add on for £3." width="1632" height="542" class="aligncenter size-full wp-image-49875">

<p>In amongst all the other offers, they asked whether I would be interested in paying more for symmetric Internet speeds!</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/03/VM-Symmetric-fs8.png" alt="List of proposed upgrades including Symmetrical data add on for £4." width="974" height="563" class="aligncenter size-full wp-image-49874">

<p>Here are some of the offerings they proposed. I must not that these are from a market research exercise. Whether they'll ever launch, and whether the prices are accurate, is something we'll have to wait to see.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2024/03/VM-Options-fs8.png" alt="List of different broadband packages each with symmetrical speed add ons." width="1008" height="1873" class="aligncenter size-full wp-image-49876">

<p>As I've mentioned before, <a href="https://shkspr.mobi/blog/2020/12/whats-the-point-in-gigabit-broadband/">I like my 500Mbps down - but the 50Mbps upload is a bit of a drag</a>. So I eagerly answered "yes" to anything that looked like faster upload bandwidth.</p>

<p>I've no idea if this will actually materialise. And I can only hope those prices are realistic.</p>

<p>If you're interested in joining Virgin Media, you can <a href="http://aklam.io/rOTKz1">get £50 if you join with my link</a>.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=49873&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2024/03/virgin-media-preparing-to-offer-symmetrical-upload-speeds/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[False Friends - HTML Elements which are also Top Level Domains]]></title>
		<link>https://shkspr.mobi/blog/2023/09/false-friends-html-elements-which-are-also-top-level-domains/</link>
					<comments>https://shkspr.mobi/blog/2023/09/false-friends-html-elements-which-are-also-top-level-domains/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 18 Sep 2023 11:34:25 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[tld]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=46823</guid>

					<description><![CDATA[In linguistics, a &#34;False Friend&#34; is a word which looks similar in multiple languages, but means something different in each of them. For example the word &#34;gift&#34; in English means &#34;a present&#34;, in German means &#34;poison&#34;, and in Norwegian it means &#34;married&#34;.  The Internet uses Top Level Domains (TLD) to organise information into hierarchies. This website uses .mobi - you may also be familiar with .com …]]></description>
										<content:encoded><![CDATA[<p>In linguistics, a "<a href="https://en.wikipedia.org/wiki/False_friend">False Friend</a>" is a word which looks similar in multiple languages, but means something different in each of them. For example the word "gift" in English means "a present", in German means "poison", and in Norwegian it means "married".</p>

<p>The Internet uses Top Level Domains (TLD) to organise information into hierarchies. This website uses .mobi - you may also be familiar with .com for commercial entities, or .de for German pages.</p>

<p>The World Wide Web uses HyperText Markup Language (HTML) to structure web pages. For example <code>&lt;footer&gt;</code> to display a footer, or <code>&lt;ol&gt;</code> for an ordered list.</p>

<p>There is absolutely no relationship between the two sets of entities. But, just for fun, are there any HTML elements which happen to be false friends of the TLDs?</p>

<p>Before we go any further, have a quick think. How many do you reckon there are? Are there some which spring to mind immediately?</p>

<p>Obviously, the first port of call is AI. Its mastery of all things means that we can get an accurate answer in a nanosecond.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2023/09/chatgpt-fs8.png" alt="Me: Which TLDs have the same name as valid HTML5 elements? ChatGPT:  As of my last knowledge update in September 2021, there are two top-level domains (TLDs) that have the same name as valid HTML5 elements:  .dev: This TLD corresponds to the <dev> HTML5 element.  .app: This TLD corresponds to the <app> HTML5 element. Please note that this information is based on the state of TLDs as of September 2021. There might have been updates or changes after that date, so it's always a good idea to check official sources or domain registrars for the most current information." width="932" height="473" class="aligncenter size-full wp-image-46824">

<p>Oh.</p>

<p>Right, let's compare the <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Element">Element Reference</a> with the <a href="https://www.iana.org/domains/root/db">Root Zone Database</a>.</p>

<p>There are <em>fifteen</em> current HTML elements which have a match with a TLD. And a couple which are deprecated.  Here they are:</p>

<table>
<thead>
<tr>
  <th align="center"></th>
  <th align="right">HTML</th>
  <th>TLD</th>
</tr>
</thead>
<tbody>
<tr>
  <td align="center">🔊</td>
  <td align="right"><code>&lt;audio&gt;</code></td>
  <td><a href="https://nic.audio/">.audio</a></td>
</tr>
<tr>
  <td align="center">🇧🇷</td>
  <td align="right"><code>&lt;br&gt;</code></td>
  <td><a href="https://registro.br/">.br</a></td>
</tr>
<tr>
  <td align="center">🗂</td>
  <td align="right"><code>&lt;data&gt;</code></td>
  <td><a href="https://www.dishtlds.com/data/">.data</a></td>
</tr>
<tr>
  <td align="center">🇭🇷</td>
  <td align="right"><code>&lt;hr&gt;</code></td>
  <td><a href="https://www.domene.hr/portal/home">.hr</a></td>
</tr>
<tr>
  <td align="center">🇱🇮</td>
  <td align="right"><code>&lt;li&gt;</code></td>
  <td><a href="https://www.nic.li/">.li</a></td>
</tr>
<tr>
  <td align="center">🔗</td>
  <td align="right"><code>&lt;link&gt;</code></td>
  <td><a href="http://uniregistry.link/">.link</a></td>
</tr>
<tr>
  <td align="center">🗺</td>
  <td align="right"><code>&lt;map&gt;</code></td>
  <td><a href="https://nic.map/">.map</a></td>
</tr>
<tr>
  <td align="center">☰</td>
  <td align="right"><code>&lt;menu&gt;</code></td>
  <td><a href="http://nic.menu/">.menu</a></td>
</tr>
<tr>
  <td align="center">🔎</td>
  <td align="right"><code>&lt;search&gt;</code></td>
  <td><a href="https://nic.search/">.search</a></td>
</tr>
<tr>
  <td align="center">👉</td>
  <td align="right"><code>&lt;select&gt;</code></td>
  <td><a href="https://nic.select/">.select</a></td>
</tr>
<tr>
  <td align="center">🧥</td>
  <td align="right"><code>&lt;style&gt;</code></td>
  <td><a href="https://nic.style/">.style</a></td>
</tr>
<tr>
  <td align="center">🇹🇩</td>
  <td align="right"><code>&lt;td&gt;</code></td>
  <td><a href="https://nic.td/">.td</a></td>
</tr>
<tr>
  <td align="center">🇹🇭</td>
  <td align="right"><code>&lt;th&gt;</code></td>
  <td><a href="https://www.thnic.co.th/">.th</a></td>
</tr>
<tr>
  <td align="center">🇹🇷</td>
  <td align="right"><code>&lt;tr&gt;</code></td>
  <td><a href="https://nic.tr">.tr</a></td>
</tr>
<tr>
  <td align="center">📹</td>
  <td align="right"><code>&lt;video&gt;</code></td>
  <td><a href="https://nic.video">.video</a></td>
</tr>
</tbody>
</table>

<p>And the ones which are no longer valid HTML:</p>

<table>
<thead>
<tr>
  <th align="center"></th>
  <th align="right">HTML</th>
  <th>TLD</th>
</tr>
</thead>
<tbody>
<tr>
  <td align="center">🖕</td>
  <td align="right"><code>&lt;center&gt;</code></td>
  <td><a href="https://nic.center">.center</a></td>
</tr>
<tr>
  <td align="center">🇹🇹</td>
  <td align="right"><code>&lt;tt&gt;</code></td>
  <td><a href="https://www.nic.tt/">.tt</a></td>
</tr>
</tbody>
</table>

<p>Is that more than you expected? Less? Are there others which you think should be TLDs? Should HTML get a <code>&lt;uk&gt;</code> element post-Brexit? Have I missed any?</p>

<p>Comments in the usual box.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=46823&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/09/false-friends-html-elements-which-are-also-top-level-domains/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Book Review: The Internet Con - How to Seize the Means of Computation by Cory Doctorow ★★★★⯪]]></title>
		<link>https://shkspr.mobi/blog/2023/09/book-review-the-internet-con-how-to-seize-the-means-of-computation-by-cory-doctorow/</link>
					<comments>https://shkspr.mobi/blog/2023/09/book-review-the-internet-con-how-to-seize-the-means-of-computation-by-cory-doctorow/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 17 Sep 2023 11:34:16 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[Book Review]]></category>
		<category><![CDATA[Cory Doctorow]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[politics]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=47097</guid>

					<description><![CDATA[This is beloved firebrand Cory doing what he does best. Rallying the rebellion with righteous indignation and a no-nonsense approach to fixing technology&#039;s ills.  If you&#039;ve read any of his fiction, or listened to him talk, you&#039;ll know what to expect. An overview of how big tech has screwed us over and the consequences of those machinations. Unlike other writers, Doctorow provides eminently…]]></description>
										<content:encoded><![CDATA[<p><img src="https://shkspr.mobi/blog/wp-content/uploads/2023/09/cover.jpg" alt="Book cover for the Internet Con. It looks like a shattered phone screen." width="200" class="alignleft size-full wp-image-47100">This is beloved firebrand Cory doing what he does best. Rallying the rebellion with righteous indignation and a no-nonsense approach to fixing technology's ills.</p>

<p>If you've read any of his fiction, or listened to him talk, you'll know what to expect. An overview of how big tech has screwed us over and the consequences of those machinations. Unlike other writers, Doctorow provides <em>eminently practical</em> solutions.</p>

<p>Now, some of the solutions you'll be unable to implement unless you're an elected official. So now's a great time to write to your representative and ask them to take action.</p>

<p>He is relentless at pointing out the hypocrisy of big tech - fighting to carve out exceptions for themselves which they then deny to others. We get a full-on historical lesson about the VCR and how the fight for the right to <del>party</del> infringe copyright was won and lost several times.</p>

<p>I spent many years working inside the UK Government pushing the agenda of open standards and interoperability. So it was particularly gratifying to read:</p>

<blockquote><p>Governments can—and should—have rules about interoperability in their procurement policies. They should require companies hoping to receive public money to supply the schematics, error codes, keys and other technical matter needed to maintain and improve the things they sell and provide to our public institutions.</p></blockquote>

<p>That's what I did! It is getting better - but it is work that will never be finished.</p>

<p>Similarly, he accurately describes the problems with Standards Development Organisations:</p>

<blockquote><p>standardization meetings and forensic examinations of firewall errors—is supremely dull. It combines the thrill of bookkeeping with the excitement of Robert’s Rules of Order.</p></blockquote>

<p>I've been a member of many and - yes - that's exactly what it is like. But, I take slight issue at some of his suggestions on this topic. The ideal SDO <em>has</em> to be a compromise. No one gets to walk away entirely happy. This is the eternal "Devil's Bargain" - we all exchange a little bit of what we want in order to get closer to what we need. I'm not sure there's any way around that without centrally mandating specific technical choices.</p>

<p>Indeed, he goes on to say:</p>

<blockquote><p>We won’t fix anything by demanding the impossible and shouting “nerd harder!” when tech companies fail to produce it. Nor will we fix anything by taking the tech industry at its word when it tells us that effective policies are flat-out impossible.</p></blockquote>

<p>I'm a boring practicalist. At some point we need to do what works, even if it is ideologically unpleasant.</p>

<p>One of the things that Cory does well is "steelman" his opponents' arguments. He's excellent at taking on some big topics (CSAM and Blockchain, for example) and giving their proponents the benefit of the doubt<sup id="fnref:bc"><a href="https://shkspr.mobi/blog/2023/09/book-review-the-internet-con-how-to-seize-the-means-of-computation-by-cory-doctorow/#fn:bc" class="footnote-ref" title="OK, he does say &quot;It’s an established fact that 99.83 percent of all conversations about blockchain are nonconsensual.&quot; Which is a bit uncharitable. It's, like, 99.73% max!" role="doc-noteref">0</a></sup>. And then he forensically takes them apart.</p>

<p>Cory's writing style is like his spoken style. The poetic rhythm is almost palpable - as is his love for sarcastic asides. It makes this - admittedly short - book supremely quick to read.  I feel greedy asking for more - but the book does end rather abruptly.</p>

<p>If you work in tech, or go anywhere near tech-policy, this is a must read. It gives you the history of how we got here, explains the problems happening now, and warns about an uncertain future.</p>

<ul>
<li>The <a href="https://www.versobooks.com/en-gb/products/3035-the-internet-con">eBook is currently on sale for £4.50</a> from the publishers.</li>
<li>You can follow Cory Doctorow on Mastodon <a rel="mention" class="u-url mention" href="https://mamot.fr/@pluralistic">@pluralistic</a></li>
</ul>

<div id="footnotes" role="doc-endnotes">
<hr>
<ol start="0">

<li id="fn:bc">
<p>OK, he does say "It’s an established fact that 99.83 percent of all conversations about blockchain are nonconsensual." Which is a bit uncharitable. It's, like, 99.<strong>7</strong>3% max!&nbsp;<a href="https://shkspr.mobi/blog/2023/09/book-review-the-internet-con-how-to-seize-the-means-of-computation-by-cory-doctorow/#fnref:bc" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=47097&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/09/book-review-the-internet-con-how-to-seize-the-means-of-computation-by-cory-doctorow/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[What will the Web be like in 20 years?]]></title>
		<link>https://shkspr.mobi/blog/2023/09/what-will-the-web-be-like-in-20-years/</link>
					<comments>https://shkspr.mobi/blog/2023/09/what-will-the-web-be-like-in-20-years/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 03 Sep 2023 11:34:06 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[predictions]]></category>
		<category><![CDATA[web]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=46634</guid>

					<description><![CDATA[Way back in 2011, I contributed to an article on The Next Web called &#34;What will the Web be like in 20 years?&#34;.  Foolishly, I missed the 10 year anniversary, but let&#039;s see how we&#039;re doing against those predictions a little over halfway through.  My prediction for the Web?  The same speed. Faster pipes &#38; processors – more bloated markup &#38; JS.  Well... fuck! Bang on the money there. The web is f…]]></description>
										<content:encoded><![CDATA[<p>Way back in 2011, I contributed to an article on The Next Web called "<a href="https://thenextweb.com/news/what-will-the-internet-be-like-in-20-years">What will the Web be like in 20 years?</a>".</p>

<p>Foolishly, I missed the 10 year anniversary, but let's see how we're doing against those predictions a little over halfway through.</p>

<p>My prediction for the Web?</p>

<blockquote><p>The same speed. Faster pipes &amp; processors – more bloated markup &amp; JS.</p></blockquote>

<p>Well... fuck! Bang on the money there. The web <em>is</em> faster than it was on dial-up. But I can't say that it's noticeably better since I got ADSL. Sure, it's faster to download big files and stream 4K video. But for day-to-day browsing? Between the unoptimised "hero" images, multi-megabytes of JS, and thousands of trackers, it sometimes feels like we've taken a step backwards in speed.</p>

<p>We all know that bloat expands to fill available bandwidth. But perhaps we could rein it in a little? Please?</p>

<p>A few of the predictions are already here. Better, smarter phones. Computers becoming pervasive and invisible. And, yes, lots of cat gifs.</p>

<p>Some of the other predictions are - I think it's fair to say - not quite on track.</p>

<p>We haven't returned to an AOL model where AT&amp;T charge us per minute. And I don't see any path to that.</p>

<p>Internet censorship is a tricky one. There are some countries which routinely shut off net access. There's still a cat-and-mouse game with pirates. There are still people crying censorship when their inflammatory posts are removed.  But, outside of a few jurisdictions, you remain as free as ever to criticise whoever you want.</p>

<p>Holograms aren't even close to real. And, no, Facebook's laughable attempts at the MeTAvErSe don't count. Perhaps Apple's iBalls (or whatever they're called) will get us to that point before 2031? But I doubt it.</p>

<p>There are a lot of predictions about 3D printers. Look, they're pretty nifty, but it is clear that most homes don't need an endless supply of rapidly printed plastic doodahs.</p>

<p>Finally, there are a couple which I still think are feasible by 2031. Take this one from Santiago Ochoa:</p>

<blockquote><p>Companies like Google, Facebook, PayPal, Amazon, will create virtual currency systems linked to our social reputation. The more friends, posts, contacts, and comments we have, the more +1s, “like it”s or whatever points we’ll accumulate. These points will then be used to buy real things like you do now with PayPal and Amazon. Good social communicators will be able to make a living out of social networking points. Similar to Second Life but not limited to a virtual world. Our cell phones will be used as wallets and even some salaries will be paid with virtual money.</p></blockquote>

<p>Social credit scores aren't mainstream… yet. But Twitter is experimenting giving revenue to some posters based on their social reach. Facebook's currency dreams are dead for now, but I bet another social network will try to use virtual money as its hook. Some people are, no doubt, being paid in volatile cryptotokens. And many of us use our phones as tap-to-pay wallets.</p>

<p>There's also this by Pedro Henrique Monteiro Padilha:</p>

<blockquote><p>Internet will more and more allow people to work to companies on other countries or continents. It will also create a new way for all our social behavior, we will have web shows and maybe web pubs. The large bandwidth will help us connecting everywhere and we will no longer need TV as we know. Every TV show will be a stream to be brought in different languages.</p></blockquote>

<p>That's pretty much the Covid experience, isn't it? Remote working, Zoom quizzes, livestreaming, and endless Netflix. Perhaps by the end of this decade streaming services won't be geo-restricted and decent subtitles will be available to all?</p>

<p>It's fun to see how accurate people's guesses are. But making predictions is usually less about future gazing and more about understanding our current reality. It isn't about being right or wrong - it's about daring to dream of something brighter than today.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=46634&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/09/what-will-the-web-be-like-in-20-years/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[The new .zip TLD is going to cause some problems]]></title>
		<link>https://shkspr.mobi/blog/2023/05/the-new-zip-tld-is-going-to-cause-some-problems/</link>
					<comments>https://shkspr.mobi/blog/2023/05/the-new-zip-tld-is-going-to-cause-some-problems/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sat, 13 May 2023 11:34:42 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[tld]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=45766</guid>

					<description><![CDATA[Many years ago, Google applied for the .zip Top Level Domain. ICANN, in its infinite wisdom, granted it. And now, I think, bad things are going to happen.  You see computers try to be helpful. They see you wrote &#34;visit example.com&#34; and autolink the thing which looks like a domain name. That&#039;s handy - especially as most people don&#039;t have the time or skill to write HTML.  So what happens when…]]></description>
										<content:encoded><![CDATA[<p>Many years ago, Google applied for the <code>.zip</code> Top Level Domain. ICANN, in its infinite wisdom, granted it. And now, I think, bad things are going to happen.</p>

<p>You see computers <em>try</em> to be helpful. They see you wrote "visit example.com" and autolink the thing which looks like a domain name. That's handy - especially as most people don't have the time or skill to write HTML.</p>

<p>So what happens when things which are <em>not</em> domain names look like they are domain names? I've been worrying about this for a few years:</p>

<blockquote class="social-embed" id="social-embed-567820810371735553" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/edent" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Terence Eden is on Mastodon</p>@edent</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody">Grrr... Because .zip is a valid TLD, it's impossible to know whether <a href="http://example.zip">example.zip</a> should be a URL or a filename.</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/edent/status/567820810371735553"><span aria-label="9 likes" class="social-embed-meta">❤️ 9</span><span aria-label="5 replies" class="social-embed-meta">💬 5</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2015-02-17T23:00:05.000Z" itemprop="datePublished">23:00 - Tue 17 February 2015</time></a></footer></blockquote>

<p>Right now there is an old tweet, blog, email, or instant message from an authority figure which points to a non-existent .zip domain.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2023/05/people-of-Twitter-talking-about-photos.zip-there-are-lots-of-them.png" alt="people of Twitter talking about photos.zip there are lots of them." width="748" height="777" class="aligncenter size-full wp-image-45773">

<p>Is that domain available to buy? Well, <a href="https://www.registry.google/tlds/tech/">let's look at Google's Domain Availability site</a></p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2023/05/Screenshot-how-exciting-photos.zip-is-available.png" alt="Screenshot how exciting photos.zip is available." width="860" height="508" class="aligncenter size-full wp-image-45772">

<p><small>(No, I don't know where the missing "T" is either.)</small></p>

<p>Yup! OK, premium domains like <code>photos.zip</code> appear to be about £1,000 - which should put off some scammers. But the price for non-premium .zips is between £10-£30.</p>

<p>Look, I doubt a former president ever Tweeted "Hey, anyone know how I extract files from something called <a href="https://blah.zip">blah.zip</a> on a Mac?" but I'll bet you that something, somewhere, is going to be abused with this new TLD.</p>

<p>I feel like a curmudgeonly old fart. Don't we have <em>enough</em> TLDs? What's the limit?  There are very few meaningful controls on who can register all but the most retrictive TLDs (looking at you, <code>.int</code>!)  So at what point do we just give up and same everyone can have their own Top Level?</p>

<p>Anyway, have fun determining if the link you see was ever intended to link to a website!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=45766&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2023/05/the-new-zip-tld-is-going-to-cause-some-problems/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Some new HTTP verbs]]></title>
		<link>https://shkspr.mobi/blog/2022/09/some-new-http-verbs/</link>
					<comments>https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 13 Sep 2022 11:34:17 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[internet]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=43528</guid>

					<description><![CDATA[Hyper-Text Transfer Protocol is, by some measure, the most popular way for computers to talk to each other on the Internet.  Generally speaking, clients (like browsers) talk to servers using a set number of HTTP &#34;verbs&#34;. This tells the server what sort of thing the client is trying to do.  The two most popular verbs are probably POST - which lets you send data to a server - and  GET - which lets…]]></description>
										<content:encoded><![CDATA[<p>Hyper-Text Transfer Protocol is, by some measure, the most popular way for computers to talk to each other on the Internet<sup id="fnref:madeup"><a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#fn:madeup" class="footnote-ref" title="I just made up that &quot;fact&quot;. But it feels right, doesn't it?" role="doc-noteref">0</a></sup>.</p>

<p>Generally speaking<sup id="fnref:complicated"><a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#fn:complicated" class="footnote-ref" title="It is a lot more complicated than that. If you want to have a rant about precise definitions, please do so on your own blog." role="doc-noteref">1</a></sup>, clients (like browsers) talk to servers using a set number of HTTP "verbs". This tells the server what sort of thing the client is trying to do.</p>

<p>The two most popular<sup id="fnref:again"><a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#fn:again" class="footnote-ref" title="I can't be bothered to actually back this up with statistics." role="doc-noteref">2</a></sup> verbs are probably <code>POST</code> - which lets you send data to a server - and  <code>GET</code> - which lets you get data back from a server.</p>

<p>There are <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods">other HTTP verbs</a> like <code>DELETE</code> to delete data, and <code>PATCH</code> to change data. But it is a fairly limited set of actions.</p>

<p>What would be some interesting or useful verbs to add to HTTP's vocabulary?</p>

<h2 id="payments"><a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#payments">Payments</a></h2>

<p>I think the most obvious one would be <code>BUY</code>.</p>

<p>A client sends a <code>GET</code> request to a server. The server responds with <a href="https://http.cat/402">HTTP Status <code>402</code> Payment Required</a> which includes payment details. The client sends <code>BUY</code> along with confirmation that they've sent the payment<sup id="fnref:buy"><a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#fn:buy" class="footnote-ref" title="How? I dunno? A signed response from a payment provider? A crypto receipt? Something like that." role="doc-noteref">3</a></sup>. The server responds with the content.</p>

<h2 id="mistakes"><a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#mistakes">Mistakes</a></h2>

<p>What about if you make a mistake using <code>POST</code>, <code>PUT</code>, or <code>DELETE</code>? Wouldn't you like to use HTTP <code>UNDO</code>?</p>

<blockquote class="social-embed" id="social-embed-1562878651158257666" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><blockquote class="social-embed" id="social-embed-1562875597050720258" lang="en" itemscope="" itemtype="https://schema.org/SocialMediaPosting"><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/edent" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRkgBAABXRUJQVlA4IDwBAACQCACdASowADAAPrVQn0ynJCKiJyto4BaJaQAIIsx4Au9dhDqVA1i1RoRTO7nbdyy03nM5FhvV62goUj37tuxqpfpPeTBZvrJ78w0qAAD+/hVyFHvYXIrMCjny0z7wqsB9/QE08xls/AQdXJFX0adG9lISsm6kV96J5FINBFXzHwfzMCr4N6r3z5/Aa/wfEoVGX3H976she3jyS8RqJv7Jw7bOxoTSPlu4gNbfXYZ9TnbdQ0MNnMObyaRQLIu556jIj03zfJrVgqRM8GPwRoWb1M9AfzFe6Mtg13uEIqrTHmiuBpH+bTVB5EEQ3uby0C//XOAPJOFv4QV8RZDPQd517Khyba8Jlr97j2kIBJD9K3mbOHSHiQDasj6Y3forATbIg4QZHxWnCeqqMkVYfUAivuL0L/68mMnagAAA" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">Terence Eden is on Mastodon</p>@edent</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody">Your deepest wish comes true and you get to add one more HTTP Verb to the specification.<br><br>Which one do you choose?<hr class="social-embed-hr"><label for="poll_1_count">Buy: (6)</label><br><meter class="social-embed-meter" id="poll_1_count" min="0" max="100" low="33" high="66" value="12.5">6</meter><br><label for="poll_2_count">Forgive: (10)</label><br><meter class="social-embed-meter" id="poll_2_count" min="0" max="100" low="33" high="66" value="20.8">10</meter><br><label for="poll_3_count">Prevaricate: (20)</label><br><meter class="social-embed-meter" id="poll_3_count" min="0" max="100" low="33" high="66" value="41.7">20</meter><br><label for="poll_4_count">Something else - what?: (12)</label><br><meter class="social-embed-meter" id="poll_4_count" min="0" max="100" low="33" high="66" value="25.0">12</meter></section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/edent/status/1562875597050720258"><span aria-label="3 likes" class="social-embed-meta">❤️ 3</span><span aria-label="0 replies" class="social-embed-meta">💬 0</span><span aria-label="2 reposts" class="social-embed-meta">🔁 2</span><time datetime="2022-08-25T18:52:33.000Z" itemprop="datePublished">18:52 - Thu 25 August 2022</time></a></footer></blockquote><header class="social-embed-header" itemprop="author" itemscope="" itemtype="https://schema.org/Person"><a href="https://twitter.com/chthonicionic" class="social-embed-user" itemprop="url"><img class="social-embed-avatar social-embed-avatar-circle" src="data:image/webp;base64,UklGRjADAABXRUJQVlA4ICQDAADQDQCdASowADAAPq1GnEmmI6KhLizIwBWJZQC9i7y3rEB0g+Oj7+0D6Z4iGQI4FcKKtBqvjyo/cChHkzveddeaY43ZcsdIuOmqa3Y2xJ26C7xefdq44K5rLBcuu0g2vx7p09PQQp/Vo5X4yG3Ra7ii8IALAyByAAD+BQLIY1tBXfK5PlIIX94Fs79p9t9Akb9B4PBc6TkCqSi/0zZui7QbeG5To/2dA27PUH2Fq6zaHkdRs2RXBld0pmjdS98qcZT8FTgTNBggjBO8IytPQIZPW2WyabL3IFcDupVwG1gxP02zCOzVnZZbMI56+UoqeSMsYrgc4tOYMM36AL7Vjyx/2MBTnsou/1RyWhHlH6CsxCQ7+peCyKB5nK2SZkQ8VZQRuKY+AIu7Hn2XfKZP/f8bUbMeMMyVqISMu6IZ9pjPJdqnhAnIZPXDVTYAEHSAhGOLny4h+ZShKG607ApeL/P3G3KVS+E2Kwkb8a5p3VpvJCaSgk0cIyvIicCEw2doHX6m7ynIZ/ll05dsGsic7GS957jHrujd0LTK629FrIQ+4H2DKxJXQCXbaK8kU6m8nX5xwtTfV8zdIhr+a69Y3AsbzO+E1huMSpo+vMnhJFsp7tJd6950FNLMhepj03Ev8CSbmoRvEyf4DVNa3CPo8PShQeAW+HigeJ9TVNoG4LRm8+jXWaW33PNx384aPJivGoQeOiOco9vg1pVUYkpEfXUuHAAXC5dAE72GhICVKshvJUF6M7UpAPPo2HB5jM8Bmrl57v8ls835reoCW6UrnwPLJIe4vDqs2sBMGWkux+pA00MIzsLj9do3PDpPgcyvmMR6e+xyjIcde0Z9A5F5mmxaiZ7qQpDnsvetoHaCmQSCGdD1Cn/UJV1BV27wPupVtCJYOXYlBD+tk0+V8+fqOUqNBdQIRW6fZMNbYeMR2Gw0ptYcTwPAPvnnDxmzsUMx543izdn9TixQPLr3O141r5SsFduS3CuPe1Adf76PL05pFHksFhKYyLcXebtJlAgEtkOsdvLw6OeN+5DGDWE6Gk1U2HIeG3B3rlRIKb3V49QTlcQAAAA=" alt="" itemprop="image"><div class="social-embed-user-names"><p class="social-embed-user-names-name" itemprop="name">ཀ།༨ཇ ་།་འ།སབཇའ</p>@chthonicionic</div></a><img class="social-embed-logo" alt="Twitter" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0Aaria-label%3D%22Twitter%22%20role%3D%22img%22%0AviewBox%3D%220%200%20512%20512%22%3E%3Cpath%0Ad%3D%22m0%200H512V512H0%22%0Afill%3D%22%23fff%22%2F%3E%3Cpath%20fill%3D%22%231d9bf0%22%20d%3D%22m458%20140q-23%2010-45%2012%2025-15%2034-43-24%2014-50%2019a79%2079%200%2000-135%2072q-101-7-163-83a80%2080%200%200024%20106q-17%200-36-10s-3%2062%2064%2079q-19%205-36%201s15%2053%2074%2055q-50%2040-117%2033a224%20224%200%2000346-200q23-16%2040-41%22%2F%3E%3C%2Fsvg%3E"></header><section class="social-embed-text" itemprop="articleBody"><small class="social-embed-reply"><a href="https://twitter.com/edent/status/1562875597050720258">Replying to @edent</a></small><a href="https://twitter.com/edent">@edent</a> Possibly it’s forgive, but … UNDO</section><hr class="social-embed-hr"><footer class="social-embed-footer"><a href="https://twitter.com/chthonicionic/status/1562878651158257666"><span aria-label="1 likes" class="social-embed-meta">❤️ 1</span><span aria-label="0 replies" class="social-embed-meta">💬 0</span><span aria-label="0 reposts" class="social-embed-meta">🔁 0</span><time datetime="2022-08-25T19:04:41.000Z" itemprop="datePublished">19:04 - Thu 25 August 2022</time></a></footer></blockquote>

<p>Let's not get in to a discussion about <a href="https://blog.mestwin.net/idempotent-methods-in-http/">idempotency</a><sup id="fnref:idempotent"><a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#fn:idempotent" class="footnote-ref" title="FINE! Have a discussion about the implications. It bet it won't end in bloodshed." role="doc-noteref">4</a></sup></p>

<h2 id="halt-and-catch-fire"><a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#halt-and-catch-fire">Halt And Catch Fire</a></h2>

<p>Some CPUs have peculiar instructions which can be (ab)used to make them <a href="http://www.catb.org/jargon/html/H/HCF.html">self-destruct</a>. So why not extend that to HTTP⸮</p>

<p>&lt;https://twitter.com/whalecoiner/status/1562878271960002560&gt;</p>

<p>Remember that scene in <em>every</em> Star Trek movie where the captain shouts "Computer! Initiate self-destruct sequence. Confirmation code Heliotrope Banana Daguerreotype." Let's extend that so that clients can request that a (virtual?) machine shuts down.</p>

<h2 id="wont-you-please-please-help-me"><a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#wont-you-please-please-help-me">Won't you please <em>please</em> help me?</a></h2>

<p>APIs - and other services - are sometimes difficult to use. In the Linux<sup id="fnref:linux"><a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#fn:linux" class="footnote-ref" title="…or as I’ve recently taken to calling it, GNU plus Linux…" role="doc-noteref">5</a></sup> world we just type <code>-h</code> or <code>--help</code> after every command and get some more-or-less useful help text.</p>

<p>So what about HTTP <code>HELP</code>? Return a machine- or human-readable document explaining what commands the server responds to. Pretty sure that'd be useful.</p>

<h2 id="who-are-you-who-who"><a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#who-are-you-who-who">Who are you? Who? Who?</a></h2>

<p>Cookies have gotten out of hand. And, frankly, they're a security disaster. Why should a server send a client a token to store? Let's reverse that with HTTP <code>REMEMBER</code>.</p>

<p>The client sends the server a suitably complex string and a validity period. The server is then compelled to remember the client's authorisation. Perfect<sup id="fnref:perfect"><a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#fn:perfect" class="footnote-ref" title="I'm not sure this makes any more sense than doing it the cookie way. But, hey, that's what brainstorming is for!" role="doc-noteref">6</a></sup>!</p>

<p>And when you want to log out, an HTTP <code>FORGET</code> is easier than clearing your cookies. Imagine that, a log-out button in your browser which worked everywhere...!</p>

<h2 id="over-to-you"><a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#over-to-you">Over to you</a></h2>

<p>So, if you were made God-Emperor-For-Life of the IETF, which new HTTP verbs would you add?</p>

<div id="footnotes" role="doc-endnotes">
<hr>
<ol start="0">

<li id="fn:madeup">
<p>I just made up that "fact". But it feels right, doesn't it?&nbsp;<a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#fnref:madeup" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:complicated">
<p>It is a lot more complicated than that. If you want to have a rant about precise definitions, please do so on your own blog.&nbsp;<a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#fnref:complicated" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:again">
<p>I can't be bothered to actually back this up with statistics.&nbsp;<a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#fnref:again" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:buy">
<p>How? I dunno? A signed response from a payment provider? A crypto receipt? Something like that.&nbsp;<a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#fnref:buy" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:idempotent">
<p>FINE! Have a discussion about the implications. It bet it won't end in bloodshed.&nbsp;<a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#fnref:idempotent" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:linux">
<p>…or as I’ve recently taken to calling it, GNU plus Linux…&nbsp;<a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#fnref:linux" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

<li id="fn:perfect">
<p>I'm not sure this makes any more sense than doing it the cookie way. But, hey, that's what brainstorming is for!&nbsp;<a href="https://shkspr.mobi/blog/2022/09/some-new-http-verbs/#fnref:perfect" class="footnote-backref" role="doc-backlink">↩︎</a></p>
</li>

</ol>
</div>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=43528&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/09/some-new-http-verbs/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[DNS Esoterica: BIMI - SVG in DNS TXT WTF?!]]></title>
		<link>https://shkspr.mobi/blog/2022/08/dns-esoterica-bimi-svg-in-dns-txt-wtf/</link>
					<comments>https://shkspr.mobi/blog/2022/08/dns-esoterica-bimi-svg-in-dns-txt-wtf/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 01 Aug 2022 11:34:24 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[internet]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=43112</guid>

					<description><![CDATA[You&#039;ve been on the Internet a long time, right? Of course you know what BIMI is. All the cool kids do. But, for those of you who aren&#039;t hip to the jive of the Infobahn...  BIMI (Brand Indicators for Message Identification) is a new standard that can curb the issue of online impersonators. ... BIMI is a new standard that enables you to include your company’s logo alongside the emails you send. T…]]></description>
										<content:encoded><![CDATA[<p>You've been on the Internet a long time, right? Of course <em>you</em> know what BIMI is. All the cool kids do. But, for those of you who aren't hip to the jive of the Infobahn...</p>

<blockquote><p>BIMI (Brand Indicators for Message Identification) is a new standard that can curb the issue of online impersonators. ... BIMI is a new standard that enables you to include your company’s logo alongside the emails you send. That way, your brand stands out among other emails, and your customers are sure that the emails are legitimate.</p>

<p><a href="https://www.dmarcanalyzer.com/bimi/how-to-create-a-bimi-record/">How To Create a BIMI record</a></p></blockquote>

<p>Wow! Much innovation! Such security! There's no way a fraudster could put a bank's logo on their dodgy spam, right?</p>

<p><em>*sigh*</em></p>

<p>OK, so in order for this not to be abused, most email providers require brands to pay for an expensive <a href="https://support.google.com/a/answer/10911028">Verified Mark Certificate (VMC)</a> - a digital certificate which says that you are the trademark owner of the logo.</p>

<p>How much does it cost?</p>

<p><strong>US$1,499.00</strong></p>

<p>Per <em>year</em>!  No wonder no one is using BIMI.</p>

<p>Then it's just a case of sticking something like this in your DNS <code>TXT</code> records:</p>

<pre><code class="language-txt">v=BIMI1;
l=https://example.com/logo.svg;
a=https://example.com/certificate.pem
</code></pre>

<p>That's nice, and all, but I don't think I've ever seen one in the wild. Even the BIMI Group <a href="https://bimigroup.org/bimi-generator/">haven't bothered paying for the VMC</a>!</p>

<p>One of the few organisations who <em>have</em> set this up correctly is DigiCert.  Because they're one of the orgs you can buy this service from.</p>

<p><code>dig txt default._bimi.digicert.com</code> will get you:</p>

<pre><code class="language-txt">;; ANSWER SECTION:
default._bimi.digicert.com. 3600 IN TXT 
   "v=BIMI1; 
    l=https://www.digicert.com/resources/DigiCertLogo_WhiteOnBlue.svg; 
    a=https://cacerts.digicert.com/digicert_com_vmc_WhiteOnBlue.pem"
</code></pre>

<p>You can read the <a href="https://www.ssl.com/guide/pem-der-crt-and-cer-x-509-encodings-and-conversions/">PEM certificate</a> using:
<code>openssl x509 -in digicert_com_vmc_WhiteOnBlue.pem -noout -text</code></p>

<p>Inside, you'll find this nugget:</p>

<p><code>data:image/svg+xml;base64,H4sIAAAAAAAACo1XXW/jRhJ8tn8FwzwF4NDzzaFhb3BRckmADRAgwL4eHFoxhePZhqiVN/…</code></p>

<p>Hmmm… <a href="https://blog.dotnetframework.org/2016/12/07/h4siaaa-whats-so-important-about-this-string/"><code>H4sIAAA</code> is the start of a base64 encoded zipped string</a>.</p>

<p>Once decoded and unzipped, we find… the SVG logo!</p>

<p>It's fairly obvious that people want a nice logo next to their email in your inbox. If you're on GMail, you're probably used to seeing your friends faces smiling back at you. But that only works if everyone is on the same email system. So BIMI is a reasonable idea for a cross-provider standard.</p>

<h2 id="downsides"><a href="https://shkspr.mobi/blog/2022/08/dns-esoterica-bimi-svg-in-dns-txt-wtf/#downsides">Downsides</a></h2>

<p>There are several problems with BIMI.</p>

<p>The first is cost. If it were free then <code>AbsolutelyYourBank@trust_me.biz</code> could use the HSBC logo with impunity. I'm sure an extremely dedicated fraudster could spend the $1.5k and fool DigiCert into certifying their illegitimate use of someone else's logo. But it's unlikely to happen.</p>

<p>There's also a privacy issue. Because the BIMI logos are stored on a website, the website owner could track when they were downloaded and use that to work out who was reading their emails. Thankfully, both GMail and Yahoo proxy the images - so the provider doesn't get any additional analytics benefit.</p>

<p>Support is poor in GMail. Here's an email from LinkedIn:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2022/07/LinkedIn.png" alt="Screenshot of an email." width="507" height="276" class="aligncenter size-full wp-image-43225">
As you can see, the BIMI logo is displayed by the email address - but is absent in the contact view.</p>

<p>Finally, DNS <code>TXT</code> records are limited to 255 bytes of data. That's why logos are restricted to being (fairly short) links.</p>

<h2 id="is-it-worth-it"><a href="https://shkspr.mobi/blog/2022/08/dns-esoterica-bimi-svg-in-dns-txt-wtf/#is-it-worth-it">Is it worth it?</a></h2>

<p>I think the marketplace of ideas has answered this with a fairly resounding "no".</p>

<p>You can <a href="https://bimiradar.com/glob">track adoption at BIMIBRadar</a>.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2022/08/bimiradar_1.png" alt="graph showing less that 0.001% of domains have adopted BIMI." width="1023" height="767" class="aligncenter size-full wp-image-43237">

<p>It would be great to stick your face, logo, or picture next to every email you send. But the risk from fraudsters is just too high.</p>

<p>The cost of certification is necessary to stop misuse - but that also means that smaller brands and individuals are locked out.  Which isn't what we want from an open Internet.</p>

<p>There's no worldwide brand registry which can certify your use of an image. And, even if there were, it would be a huge single-point-of-failure.</p>

<p>The <a href="https://mailarchive.ietf.org/arch/browse/bimi/">conversation about BIMI chugs on in IETF mailing lists</a>. Do get involved if you think you have something of value to add.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=43112&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/08/dns-esoterica-bimi-svg-in-dns-txt-wtf/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[DNS Esoterica - Why you can't dig Switzerland]]></title>
		<link>https://shkspr.mobi/blog/2022/07/dns-esoterica-why-you-cant-dig-switzerland/</link>
					<comments>https://shkspr.mobi/blog/2022/07/dns-esoterica-why-you-cant-dig-switzerland/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Thu, 14 Jul 2022 11:34:18 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[trivia]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=43028</guid>

					<description><![CDATA[As part of my new job, I&#039;m learning a lot more about the mysteries of the Domain Name System than any mortal should know I thought possible.  The humble unix dig command allows you to query all sort of DNS information. For example, to see name server records for the BBC website, you can run:  dig bbc.co.uk NS  Which will get you:  ;; Got answer: ;; -&#62;&#62;HEADER&#60;&#60;- opcode: QUERY, status: NOERROR, id: …]]></description>
										<content:encoded><![CDATA[<p>As part of my new job, I'm learning a lot more about the mysteries of the Domain Name System than <del>any mortal should know</del> I thought possible.</p>

<p>The humble unix <code>dig</code> command allows you to query all sort of DNS information. For example, to see name server records for the BBC website, you can run:</p>

<p><code>dig bbc.co.uk NS</code></p>

<p>Which will get you:</p>

<pre><code class="language-_">;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 35614
;; flags: qr rd ra; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 17

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 097db2ee4c92b84982083ecf62b5b5f2007906e616035113 (good)
;; QUESTION SECTION:
;bbc.co.uk.         IN  NS

;; ANSWER SECTION:
bbc.co.uk.      900 IN  NS  ddns1.bbc.com.
bbc.co.uk.      900 IN  NS  dns0.bbc.co.uk.
bbc.co.uk.      900 IN  NS  ddns1.bbc.co.uk.
...
</code></pre>

<p>And a whole lot more.  But you can go further down the DNS tree. What are the nameservers for <code>.co.uk</code>?</p>

<p><code>dig co.uk NS</code></p>

<p>And you'll get your answer.  You can go one further and see the nameservers for the Top Level Domain:</p>

<p><code>dig uk NS</code></p>

<p>Which replies with:</p>

<pre><code class="language-_">;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 54061
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 8, AUTHORITY: 0, ADDITIONAL: 17

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 880427eda8ff71de2ab4f43862b5b65f95e317d29cc10a8e (good)
;; QUESTION SECTION:
;uk.                IN  NS

;; ANSWER SECTION:
uk.         159692  IN  NS  nsc.nic.uk.
uk.         159692  IN  NS  dns1.nic.uk.
uk.         159692  IN  NS  nsd.nic.uk.
...
</code></pre>

<p>And that works with <em>every</em> TLD. Countries like <code>de</code>, generic names like <code>museum</code>, and internationalised domains like <code>在线</code>. All of them work!</p>

<p>Except Switzerland.</p>

<p>Switzerland's country code is <code>ch</code> - after the name <i lang="la">Confoederatio Helvetica</i>. Let's run the <code>dig</code> on it: <code>dig ch NS</code></p>

<pre><code class="language-_">;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: REFUSED, id: 31910
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
</code></pre>

<p>We have been <strong>refused</strong> and <strong>warned</strong>.  But why does this only happen with Switzerland?</p>

<p>The blame - as with most modern ills - lies in the mid-1970s. The Bee Gees were storming the charts with "Jive Talkin'", the Rocky Horror Picture Show was gathering a cult following, and MIT scientists were causing chaos.  Literally.</p>

<p><a href="https://en.wikipedia.org/wiki/Chaosnet">Chaosnet</a> was an early network protocol designed for local networks.  It was technically very clever but, sadly, never really took off.</p>

<p>However, it found its way into DNS records. Let's go back to the answer to <code>dig bbc.co.uk NS</code>:</p>

<pre><code class="language-_">;; ANSWER SECTION:
bbc.co.uk.      900 IN  NS  ddns1.bbc.com.
</code></pre>

<p>OK, the first part is the domain name. The number is the TTL. The <code>IN</code> is the class. The NS says this is a nameserver record. And, finally, we get the domain of the nameserver.</p>

<p>But, in the class, what does <code>IN</code> stand for?</p>

<p>"<strong>Internet</strong>", obviously. Wait... Isn't the DNS on the Internet? Why do we need to specify that these DNS records are for Internet?</p>

<p>Well, isn't it obvious? Because you might want records of a <em>different</em> network. Like, for example, Chaosnet.</p>

<p>And if Internet is abbreviated to <code>IN</code>, what is Chaosnet shortened to? That's right! <code>CH</code>.</p>

<p>So, <code>dig</code> sees you enter <code>ch</code> for Switzerland, but thinks you're asking about <code>CH</code> for Chaosnet. And so it fails.</p>

<p>In order to query the records for <code>ch</code> we need to provide an absolutely fully-qualified domain name. It's as simple as sticking a dot at the end of the domain name:</p>

<p><code>dig ch. NS</code></p>

<pre><code class="language-_">;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 64932
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 11

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: e19b9c23cdfa0f7bcf82750462b5c16b47744386c7974ffb (good)
;; QUESTION SECTION:
;ch.                IN  NS

;; ANSWER SECTION:
ch.         164894  IN  NS  e.nic.ch.
ch.         164894  IN  NS  a.nic.ch.
ch.         164894  IN  NS  f.nic.ch.
</code></pre>

<p>And there we go. A failed 1970s experiment like bell-bottoms and Betamax videos - but with much longer lasting consequences.</p>

<p>You can see some <code>CH</code> records by running like:</p>

<p><code>dig ch txt @f.root-servers.net version.bind</code></p>

<p>That will get you something like:</p>

<pre><code class="language-_">;; ANSWER SECTION:
version.bind.       86400   CH  TXT "cloudflare-f-root-20190930"
</code></pre>

<p>Of course, DNS doesn't <em>only</em> have <code>IN</code> and <code>CH</code> class records.</p>

<p>There's also <a href="https://en.wikipedia.org/wiki/Hesiod_(name_service)">Hesiod</a> - <code>HS</code>. But you already knew that, right...?</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=43028&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/07/dns-esoterica-why-you-cant-dig-switzerland/feed/</wfw:commentRss>
			<slash:comments>23</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Drones Vs Telegraphs]]></title>
		<link>https://shkspr.mobi/blog/2022/02/drones-vs-telegraphs/</link>
					<comments>https://shkspr.mobi/blog/2022/02/drones-vs-telegraphs/#respond</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Tue, 01 Feb 2022 12:34:18 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[drone]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[telegraph]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=41606</guid>

					<description><![CDATA[There is a thoroughly modern story coming out of Ireland:                Drones are being used routinely around Irish racecourses to take advantage of a short time lag between broadcast footage of events and the action on the ground.          Even this small delay allows gamblers take advantage of changes to so-called “in-running” betting odds, if say a horse begins to struggle, jumps awkwardly, o…]]></description>
										<content:encoded><![CDATA[<p>There is a <em>thoroughly</em> modern story coming out of Ireland:</p>

<figure>
    <blockquote>
        <p>Drones are being used routinely around Irish racecourses to take advantage of a short time lag between broadcast footage of events and the action on the ground.</p>
        <p> Even this small delay allows gamblers take advantage of changes to so-called “in-running” betting odds, if say a horse begins to struggle, jumps awkwardly, or falls.</p>
    </blockquote>
    <figcaption><cite><a href="https://www.thestory.ie/2021/12/21/the-battle-above-the-skies-of-irish-racecourses-drone-operators-vs-horse-racing-ireland/">The battle above the skies of Irish racecourses: drone operators vs Horse Racing Ireland</a></cite>.</figcaption>
</figure>

<p>Obviously what those naughty drone operators are doing is despicable. Imagine cheating bookmakers out of their hard-won profits by using technology! Awful!</p>

<p>But it reminded me of an earlier story.  <strong>Much</strong> earlier!</p>

<p>Tom Standage wrote a brilliant book called "<a href="https://amzn.to/3qR3OGl">The Victorian Internet</a>". It talks about how the invention of the telegraph upended all sorts of social conventions - in much the same way as the popularity of the Web did at the end of the last century.</p>

<p>Provincial bookmakers used to accept bets long after the race was over. They would wait until the information was transmitted to them via telegraph. To prevent regular punters sending the winning horse's name back to their accomplices, the telegraph companies simply banned unauthorised people from transmitting racing results.  But there was plenty of cunning to be had…</p>

<p>Here's an excerpt from Tom's book:</p>

<blockquote><p>One story from the 1840s tells of a man who went into the telegraph office at Shoreditch station in London on the day of the Derby, an annual horse race, and explained that he had left his luggage and a shawl in the care of a friend at another station—the station that just happened to be nearest the racetrack. He sent a perfectly innocent-sounding message asking his friend to send the luggage and the shawl down to London on the next train, and the reply came back: "YOUR LUGGAGE AND TARTAN WILL BE SAFE BY THE NEXT TRAIN." The apparently harmless reference to "TARTAN" revealed the colours of the winning horse and enabled the man to place a bet and make a hefty profit.</p></blockquote>

<p>You can read more about this in "<a href="https://www.google.co.uk/books/edition/The_London_Anecdotes_for_All_Readers/AU5UaumQJvIC?hl=en&amp;gbpv=1&amp;dq=%22YOUR+LUGGAGE+AND+TARTAN+WILL+BE+SAFE+BY+THE+NEXT+TRAIN.%22&amp;pg=PA31&amp;printsec=frontcover">The London Anecdotes for All Readers</a>" published in 1848.</p>

<p>I wonder what the next innovation will be which exploits information asymmetry?</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=41606&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2022/02/drones-vs-telegraphs/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[How many connected devices do you have at home?]]></title>
		<link>https://shkspr.mobi/blog/2020/12/how-many-connected-devices-do-you-have-at-home/</link>
					<comments>https://shkspr.mobi/blog/2020/12/how-many-connected-devices-do-you-have-at-home/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Mon, 21 Dec 2020 12:26:37 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[IoT]]></category>
		<category><![CDATA[Smart Home]]></category>
		<category><![CDATA[wifi]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=37575</guid>

					<description><![CDATA[Five years ago, I wrote that I had 30 connected devices at home.  How has that changed over the last half-decade?  Some of my devices have consolidated. My Eufy security cameras have a hub - so despite having more cameras, They&#039;re using fewer IP addresses. Similarly, I&#039;ve replaced most of my LIFX bulbs with Zigbee which also use a hub-and-spoke model.  So these are the devices I currently have…]]></description>
										<content:encoded><![CDATA[<p>Five years ago, I wrote that <a href="https://shkspr.mobi/blog/2015/08/128-wifi-devices-ought-to-be-enough-for-anyone/">I had 30 connected devices at home</a>.  How has that changed over the last half-decade?</p>

<p>Some of my devices have consolidated. My Eufy security cameras have a hub - so despite having more cameras, They're using fewer IP addresses. Similarly, I've replaced most of my LIFX bulbs with Zigbee which also use a hub-and-spoke model.</p>

<p>So these are the devices I currently have connected:</p>

<ol>
<li><a href="https://shkspr.mobi/blog/2019/11/gadget-review-dophigo-dv-200-wifi-doorbell/">Video Doorbell</a></li>
<li><a href="https://shkspr.mobi/blog/2020/11/review-moixa-battery/">Solar Battery</a></li>
<li>LIFX bulb in external light</li>
<li>Security camera</li>
<li><a href="https://shkspr.mobi/blog/2020/02/turn-an-old-ereader-into-an-information-screen-nook-str/">EInk display</a></li>
<li>Alexa</li>
<li><a href="https://shkspr.mobi/blog/2020/11/review-g9070-robot-vacuum/">Robot vacuum cleaner / mop</a></li>
<li>TV</li>
<li>Android TV box</li>
<li>Amazon Fire TV stick</li>
<li>Chromecast</li>
<li><a href="https://shkspr.mobi/blog/2020/08/broadcasting-vinyl-over-my-lan-aka-alsa2chromecast/">Internet Connected Record Player</a> (yes! Really!)</li>
<li>PS4</li>
<li>Nintendo Switch</li>
<li>AV Amplifier</li>
<li>Another Alexa</li>
<li>Home server</li>
<li><a href="https://shkspr.mobi/blog/2020/10/review-eufycam-2c-wireless-home-security-camera-system/">Eufy Cameras Hub</a></li>
<li><a href="https://shkspr.mobi/blog/2019/11/mixing-hue-and-innr-smart-lights/">Philips Hue Light Hub</a></li>
<li>Internal LIFX bulb</li>
<li><a href="https://shkspr.mobi/blog/2019/02/tado-api-guide-updated-for-2019/">Smart heating control</a></li>
<li>Office TV</li>
<li>Wife's work laptop</li>
<li>Wife's personal laptop</li>
<li>Wife's phone</li>
<li>My work laptop</li>
<li><a href="https://shkspr.mobi/blog/2020/05/review-clevo-n151cu-lafite-iv-system76-darter-pro-entroware-proteus/">My personal laptop</a></li>
<li><a href="https://shkspr.mobi/blog/2020/06/oneplus-5t-two-and-a-half-years-later/">My phone</a></li>
<li>My tablet</li>
<li><a href="https://shkspr.mobi/blog/2018/08/review-meross-smart-plugs-and-surge-protector/">Power strip</a></li>
<li>Lifx lamp</li>
<li>Internet connected plasma ball</li>
<li>Gym TV</li>
<li><a href="https://shkspr.mobi/blog/2015/03/adding-wifi-to-a-roomba/">Another robot vacuum cleaner</a></li>
<li><a href="https://shkspr.mobi/blog/2018/11/building-an-alexa-powered-electric-blanket/">Internet connected electric blanket</a> (my side)</li>
<li>Internet connected electric blanket (her side)</li>
<li><a href="https://shkspr.mobi/blog/2020/04/relaunching-edent_solar-part-5-getting-data-out-of-fronius-solarweb/">Solar panel inverter</a></li>
</ol>

<p>We have a lot of smarthome kit! I've probably forgotten some. And I haven't counted my various Raspberries Pi and obsolete computers. But we're only a family of two. Larger families are likely to have more phones, tablets, and many other devices.</p>

<p>Is the future the "hub" model? Most of these devices don't need a power-hungry WiFi connection. Keep the airwaves clear for high-bandwidth devices and move everything to ZigBee or similar?</p>

<p>Either way, the number of devices in a typical home is only going to increase. What do we need to do to prepare for that?</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=37575&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/12/how-many-connected-devices-do-you-have-at-home/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[The State of SIP]]></title>
		<link>https://shkspr.mobi/blog/2020/08/the-state-of-sip/</link>
					<comments>https://shkspr.mobi/blog/2020/08/the-state-of-sip/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 28 Aug 2020 11:31:44 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[sip]]></category>
		<category><![CDATA[voip]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=36458</guid>

					<description><![CDATA[How well does SIP work on a modern Android phone, with no 3rd party apps?  I&#039;m trying to give up my mobile phone contract. As part of that, I&#039;m switching my voice calls to VoIP providers. For family and friends, that usually means WhatsApp, Skype, Signal and other consumer apps. For work, Hangouts, Zoom, and Skype.  But what about &#34;normal&#34; people who just want to dial a PSTN number?  And what…]]></description>
										<content:encoded><![CDATA[<p>How well does SIP work on a modern Android phone, with no 3rd party apps?</p>

<p>I'm trying to <a href="https://shkspr.mobi/blog/2020/08/giving-up-on-phone-contracts/">give up my mobile phone contract</a>. As part of that, I'm switching my voice calls to VoIP providers. For family and friends, that usually means WhatsApp, Skype, Signal and other consumer apps. For work, Hangouts, Zoom, and Skype.</p>

<p>But what about "normal" people who just want to dial a <abbr title="Public switched telephone network">PSTN</abbr> number?</p>

<p>And what about "abnormal" people who want to dial my VoIP directly?</p>

<p>These are my experiments using the OnePlus 5T running Android 10, using the native Android dialler.</p>

<h2 id="inbound-pstn-to-sip-working"><a href="https://shkspr.mobi/blog/2020/08/the-state-of-sip/#inbound-pstn-to-sip-working">Inbound PSTN to SIP - working!</a></h2>

<p>In my previous blog post - <a href="https://shkspr.mobi/blog/2020/07/adding-sip-calls-to-android-for-free/">Adding SIP calls to Android for free!</a> - I described how to get set up with a free SipGate Basic account.</p>

<p>Now, if people ring a landline phone number, it redirects to my SIP. Which means my Android phone just starts ringing and I can answer like normal. It works even if I only have WiFi coverage.  Magic!</p>

<h2 id="outbound-sip-to-pstn-working"><a href="https://shkspr.mobi/blog/2020/08/the-state-of-sip/#outbound-sip-to-pstn-working">Outbound SIP to PSTN - working!</a></h2>

<p>Just works! Using SipGate I can call out from my phone - assuming I've told Android to let me pick which SIM to call from.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/08/Choose-a-SIM-for-this-call-includes-SIP-accounts-and-SIM-cards.png" alt="Choose a SIM for this call - includes SIP accounts and SIM cards." width="1080" height="932" class="aligncenter size-full wp-image-36462">

<p>Or, I can go to the SipGate website and type in a phone number. My SIP line calls me and, once I'm connected, calls out to the other number.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/08/Initiate-Call-Screen.png" alt="Initiate Call Screen." width="462" height="641" class="aligncenter size-full wp-image-36461">

<p>As a bonus, their <a href="https://web.archive.org/web/20200923224530/https://www.sipgatebasic.co.uk/rates">per-minute call rates are much cheaper</a> than my mobile provider!</p>

<p>Sadly, SipGate don't support SIP-to-SIP calls. So I've set up <em>another</em> SIP account on my phone.</p>

<h2 id="inbound-sip-to-sip-working"><a href="https://shkspr.mobi/blog/2020/08/the-state-of-sip/#inbound-sip-to-sip-working">Inbound SIP to SIP - working!</a></h2>

<p>Most SIP provider websites are terrible. The least-worst one that I found which was offering free pure-SIP accounts was <a href="https://serweb.iptel.org/user/reg/index.php">IPTEL.org</a>.</p>

<p>People with SIP phones can call me directly on <a href="sip:edent@iptel.org">edent@iptel.org</a>.  Woo!</p>

<h2 id="outbound-sip-to-sip-broken-%f0%9f%98%9e"><a href="https://shkspr.mobi/blog/2020/08/the-state-of-sip/#outbound-sip-to-sip-broken-%f0%9f%98%9e">Outbound SIP to SIP - broken 😞</a></h2>

<p>When I try to call a SIP number using my IPTEL account, nothing happens.</p>

<p>Android asks which "SIM" I want to call from.
<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/08/Choose-a-SIM-for-this-call.png" alt="Choose a SIM for this call." width="1080" height="638" class="aligncenter size-full wp-image-36460">
I get a dialler screen, but it never connects. There's no ringing. No error tone. Nothing.</p>

<p>I'm on my home WiFi with no port filtering. I don't have a VPN running.   I'm trying to call <a href="sip:music@iptel.org">music@iptel.org</a> - a SIP account which just plays music. I can call it from my desktop and mobile browser using <a href="https://tryit.jssip.net/">the free jssip.net website</a>.</p>

<p>But if I try the same thing using my phone SIP dialler - it never connects.  I've tried calling a friend's SIP number - and it never connects. I've tried with and without and outbound proxy. Still nothing.</p>

<p>I can obviously make SIP calls via SipGate - but that only goes to the PSTN.</p>

<p>I can receive SIP calls - whether originating from the PSTN or other SIP users.</p>

<p>Perhaps IPTEL don't support it? I tried <a href="https://linphone.org">LinPhone</a> - but that couldn't make SIP calls either, unless I downloaded their Android app. Even that was a bit iffy.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/08/Incompatible-Codec-Error.png" alt="Incompatible Codec Error." width="1080" height="349" class="aligncenter size-full wp-image-36465">

<p>In my whole circle of telco geeks, I only found three people with SIP accounts. I could only make calls to one of those. The others failed to connect - but there was no useful info in their logs.  Huge thanks to <a href="https://www.hardill.me.uk/">Ben</a> and <a href="https://twitter.com/mattpep">Matt</a> for helping me test.</p>

<h2 id="im-done"><a href="https://shkspr.mobi/blog/2020/08/the-state-of-sip/#im-done">I'm done</a></h2>

<p>At which point, I'm beaten. I'm going to give up trying to make SIP to SIP calls. As it happens, I only know one person who regularly uses their own SIP account. Hi Neil!</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=36458&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/08/the-state-of-sip/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Broadcasting vinyl over my LAN - ALSA2ChromeCast]]></title>
		<link>https://shkspr.mobi/blog/2020/08/broadcasting-vinyl-over-my-lan-aka-alsa2chromecast/</link>
					<comments>https://shkspr.mobi/blog/2020/08/broadcasting-vinyl-over-my-lan-aka-alsa2chromecast/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Wed, 05 Aug 2020 11:41:10 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[music]]></category>
		<category><![CDATA[vinyl]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=36129</guid>

					<description><![CDATA[Previously, on the Terence Eden Adventures:   I accidentally won a load of vinyl on eBay, and I bought the cheapest record player I could find.   The record player has USB output. So I shoved it into a Rock Pi S - an SBC similar to a Raspberry Pi - to broadcast vinyl all over my house via ChromeCast! Here&#039;s how.  Detect the audio  Install alsa-utils if they&#039;re not already present.  Find your…]]></description>
										<content:encoded><![CDATA[<p>Previously, on the Terence Eden Adventures:</p>

<ul>
<li><a href="https://shkspr.mobi/blog/2020/07/building-a-record-wall/">I accidentally won a load of vinyl on eBay</a>, and</li>
<li><a href="https://shkspr.mobi/blog/2020/08/inside-a-30-record-player/">I bought the cheapest record player I could find</a>.</li>
</ul>

<p>The record player has USB output. So I shoved it into a <a href="https://shkspr.mobi/blog/2020/04/tech-review-rock-pi-s/">Rock Pi S</a> - an SBC similar to a Raspberry Pi - to broadcast vinyl all over my house via ChromeCast! Here's how.</p>

<h2 id="detect-the-audio"><a href="https://shkspr.mobi/blog/2020/08/broadcasting-vinyl-over-my-lan-aka-alsa2chromecast/#detect-the-audio">Detect the audio</a></h2>

<p>Install <code>alsa-utils</code> if they're not already present.</p>

<p>Find your hardware with</p>

<pre><code class="language-bash">arecord -l
</code></pre>

<p>One of the outputs should be:</p>

<pre><code class="language-bash">card 2: Microphone [USB Microphone], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
</code></pre>

<p>In this case, we want Hardware Card 2, Device 0. From now on, we'll refer to this as <code>hw:2,0</code>. Yours may be different.</p>

<p>Record a sample from the input. Make sure the record player is playing music!</p>

<pre><code class="language-bash">arecord  --device=&amp;quot;hw:2,0&amp;quot; -d 10 -f dat -t wav test.wav
</code></pre>

<p>That will record a 10 second WAV file at the best possible audio resolution. Check that it has worked by playing back the WAV on a different computer.</p>

<h2 id="install-icecast"><a href="https://shkspr.mobi/blog/2020/08/broadcasting-vinyl-over-my-lan-aka-alsa2chromecast/#install-icecast">Install Icecast</a></h2>

<p><a href="https://icecast.org/">Icecast</a> is a terrible bit of software with no sensible user documentation or guide. Install it with:</p>

<pre><code class="language-bash">sudo apt install icecast2
</code></pre>

<p>It should prompt you for some information. And then it will start in the background automagically.  If not, run:</p>

<pre><code class="language-bash">/etc/init.d/icecast2 start
</code></pre>

<p>You can edit the default config with:</p>

<pre><code class="language-bash">sudo nano /etc/icecast2/icecast.xml
</code></pre>

<p>Here's a minimal config. This  The admin username is <code>admin</code> and all the passwords are <code>password</code> - you probably want to change that!
The hostname is set to the IP address of the Pi, <code>192.168.0.123</code>:</p>

<pre><code class="language-xml">&lt;icecast&gt;
    &lt;hostname&gt;192.168.0.123&lt;/hostname&gt;
    &lt;location&gt;Earth&lt;/location&gt;
    &lt;admin&gt;icemaster@localhost&lt;/admin&gt;
    &lt;limits&gt;
        &lt;clients&gt;100&lt;/clients&gt;
        &lt;sources&gt;2&lt;/sources&gt;
        &lt;queue-size&gt;524288&lt;/queue-size&gt;
        &lt;client-timeout&gt;30&lt;/client-timeout&gt;
        &lt;header-timeout&gt;15&lt;/header-timeout&gt;
        &lt;source-timeout&gt;10&lt;/source-timeout&gt;
        &lt;burst-on-connect&gt;1&lt;/burst-on-connect&gt;
        &lt;burst-size&gt;65535&lt;/burst-size&gt;
    &lt;/limits&gt;
    &lt;authentication&gt;
        &lt;source-password&gt;password&lt;/source-password&gt;
        &lt;relay-password&gt;password&lt;/relay-password&gt;
        &lt;admin-user&gt;admin&lt;/admin-user&gt;
        &lt;admin-password&gt;password&lt;/admin-password&gt;
    &lt;/authentication&gt;
    &lt;listen-socket&gt;
        &lt;port&gt;8000&lt;/port&gt;
    &lt;/listen-socket&gt;
    &lt;http-headers&gt;
        &lt;header name="Access-Control-Allow-Origin" value="*"/&gt;
    &lt;/http-headers&gt;
    &lt;fileserve&gt;1&lt;/fileserve&gt;
    &lt;paths&gt;
        &lt;basedir&gt;/usr/share/icecast2&lt;/basedir&gt;
        &lt;logdir&gt;/var/log/icecast2&lt;/logdir&gt;
        &lt;webroot&gt;/usr/share/icecast2/web&lt;/webroot&gt;
        &lt;adminroot&gt;/usr/share/icecast2/admin&lt;/adminroot&gt;
        &lt;alias source="/" destination="/status.xsl"/&gt;
    &lt;/paths&gt;
    &lt;logging&gt;
        &lt;accesslog&gt;access.log&lt;/accesslog&gt;
        &lt;errorlog&gt;error.log&lt;/errorlog&gt;
        &lt;loglevel&gt;3&lt;/loglevel&gt;
        &lt;logsize&gt;10000&lt;/logsize&gt;
    &lt;/logging&gt;
    &lt;security&gt;
        &lt;chroot&gt;0&lt;/chroot&gt;
    &lt;/security&gt;
&lt;/icecast&gt;
</code></pre>

<p>To restart after making changes, run:</p>

<pre><code class="language-bash">/etc/init.d/icecast2 restart
</code></pre>

<p>If you visit <code>http://your_server_ip:8000</code> then you should see a boring interface. You can't do anything with it yet.</p>

<h2 id="install-ice2"><a href="https://shkspr.mobi/blog/2020/08/broadcasting-vinyl-over-my-lan-aka-alsa2chromecast/#install-ice2">Install Ice2</a></h2>

<p>Icecast is a server - but you <em>also</em> need a client to broadcast audio to the server. Annoying that Icecast doesn't come with one. And annoying that there's no tutorial to tell you all this.</p>

<pre><code class="language-bash">sudo apt install ice2
</code></pre>

<p>I followed <a href="https://github.com/Juul/icecast-usb-microphone-guide">this tutorial</a>. Basically, create a file called <code>ice.xml</code> with this in it:</p>

<pre><code class="language-xml">&lt;ices&gt;
    &lt;stream&gt;
        &lt;input&gt;
            &lt;module&gt;alsa&lt;/module&gt;
            &lt;param name="rate"&gt;48000&lt;/param&gt;
            &lt;param name="channels"&gt;2&lt;/param&gt;
            &lt;param name="device"&gt;hw:2,0&lt;/param&gt;
        &lt;/input&gt;
        &lt;metadata&gt;
            &lt;name&gt;@edent's record player&lt;/name&gt;
            &lt;genre&gt;Live Vinyl&lt;/genre&gt;
            &lt;description&gt;Listen to what's on my record player&lt;/description&gt;
            &lt;url&gt;http://192.168.0.123:8000&lt;/url&gt;
        &lt;/metadata&gt;
        &lt;instance&gt;
            &lt;hostname&gt;192.168.0.123&lt;/hostname&gt;
            &lt;port&gt;8000&lt;/port&gt;
            &lt;password&gt;password&lt;/password&gt;
            &lt;mount&gt;/vinyl.ogg&lt;/mount&gt;
            &lt;yp&gt;1&lt;/yp&gt;
            &lt;encode&gt;
                &lt;quality&gt;10&lt;/quality&gt;
                &lt;samplerate&gt;48000&lt;/samplerate&gt;
                &lt;channels&gt;2&lt;/channels&gt;
            &lt;/encode&gt;
            &lt;downmix&gt;0&lt;/downmix&gt;
        &lt;/instance&gt;
    &lt;/stream&gt;
    &lt;background&gt;1&lt;/background&gt;
    &lt;logpath&gt;.&lt;/logpath&gt;
    &lt;logfile&gt;ices.log&lt;/logfile&gt;
    &lt;logsize&gt;2048&lt;/logsize&gt;
    &lt;loglevel&gt;4&lt;/loglevel&gt;
    &lt;consolelog&gt;0&lt;/consolelog&gt;
&lt;/ices&gt;
</code></pre>

<p>Now run <code>ices2 ice.xml</code> - it will run in the background.</p>

<p>The admin page of Icecast should now have something like this:
<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/07/Screenshot-from-2020-07-27-19-10-39.png" alt="Icecast admin page." width="703" height="375" class="aligncenter size-full wp-image-36131">
You can now play the audio via the HTML5 player on the page - or open the M3U in VLC.</p>

<h2 id="chromecast-broadcast"><a href="https://shkspr.mobi/blog/2020/08/broadcasting-vinyl-over-my-lan-aka-alsa2chromecast/#chromecast-broadcast">ChromeCast Broadcast</a></h2>

<p>For my home AV set-up, the easiest way to broadcast audio to my amp is to use its built-in ChromeCast Audio.</p>

<p>There are loads of solutions, but the easiest to use was <a href="https://pypi.org/project/PyChromecast/">PyChromeCast</a>. Once installed, it can stream audio from IceCast to a ChromeCast. Bit convoluted, but it works!</p>

<p>To discover ChromeCasts on your network, run <code>python3</code> then enter these commands:</p>

<pre><code class="language-python">import time
import pychromecast
pychromecast.discovery.discover_chromecasts()
</code></pre>

<p>You'll get a list of ChromeCasts on your network. Mine showed:</p>

<pre><code class="language-_">[('192.168.0.789', 4321, UUID('5632e20d-1030-4885-ad3d-496504b7c820'), 'Pioneer VSX-933', 'Pioneer VSX-933 ABC1234')]
</code></pre>

<p>We want the ChromeCast's ID - which is the 4 digit int.  Back to Python</p>

<pre><code class="language-python">pychromecast.get_chromecasts(4321)
</code></pre>

<p>You'll get a bit more debug data:</p>

<pre><code class="language-_">[Chromecast('192.168.0.789', port=4321, device=DeviceStatus(friendly_name='Pioneer VSX-933 ABC1234', model_name='Pioneer VSX-933', manufacturer='Onkyo And Pioneer', uuid=UUID('5632e20d-1030-4885-ad3d-496504b7c820'), cast_type='cast'))]
</code></pre>

<p>This supports <code>cast</code> - good!</p>

<p>Now we can send the audio to the ChromeCast</p>

<pre><code class="language-python">cast = pychromecast.get_chromecasts(4321)[0]
cast.wait()
mc = cast.media_controller
mc.play_media('http://192.168.0.123:8000/vinyl.ogg', 'audio/ogg')
</code></pre>

<p>Success! Vinyl ➡️ USB ➡️ ALSA ➡️ IceCast ➡️ Ogg ➡️ Ethernet ➡️ WiFi ➡️ ChromeCast ➡️ Speakers.</p>

<h2 id="is-it-worth-it"><a href="https://shkspr.mobi/blog/2020/08/broadcasting-vinyl-over-my-lan-aka-alsa2chromecast/#is-it-worth-it">Is it worth it?</a></h2>

<p>Depends. Do you like lossy, crackly vinyl, smushed down to OGG, flown across a network, then digitally reprocessed into luscious 5.1 surround sound with a 4.5 second lag?</p>

<p>Meh.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=36129&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/08/broadcasting-vinyl-over-my-lan-aka-alsa2chromecast/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Some Thoughts on  Broadband Speeds in the WFH Age]]></title>
		<link>https://shkspr.mobi/blog/2020/05/some-thoughts-on-broadband-speeds-in-the-wfh-age/</link>
					<comments>https://shkspr.mobi/blog/2020/05/some-thoughts-on-broadband-speeds-in-the-wfh-age/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Fri, 29 May 2020 11:39:53 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[isp]]></category>
		<category><![CDATA[wfh]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=35130</guid>

					<description><![CDATA[ISPs suck. They&#039;re designed to. The A in ADSL stands for &#34;Asymmetric&#34;. That is, your download speed is faster than your upload speed. This makes sense for most domestic purposes. Most people suck down a lot more than they push up.  But we&#039;ve now entered the (permanent?) work-from-home era. If you&#039;re anything like me, you&#039;re spending more time broadcasting video than you ever did before. It&#039;s…]]></description>
										<content:encoded><![CDATA[<p>ISPs suck. They're designed to. The <strong>A</strong> in ADSL stands for "Asymmetric". That is, your download speed is faster than your upload speed. This makes sense for most domestic purposes. Most people suck down a lot more than they push up.</p>

<p>But we've now entered the (permanent?) work-from-home era. If you're anything like me, you're spending more time broadcasting video than you ever did before. It's <em>painfully</em> obvious when you're stuck on a video call with someone who has restricted upload speeds. Blocky video and garbled sound - getting worse if more people in the household are streaming at once.</p>

<p>Almost all ISPs sell connections this way. And, to be fair, it made sense. But it's increasingly difficult to justify. Gamers want to stream, TikTokers want to meme, and boring old farts like me want HD video calls.</p>

<p>Before this all kicked off, I took the fastest upload package I could find.</p>

<img src="https://shkspr.mobi/blog/wp-content/uploads/2020/05/Internet-Speeds.jpeg" alt="A speed test result." width="900" height="643" class="aligncenter size-full wp-image-35131">

<p>Over 300Mbps down is swish! And the 35 up is pretty decent - especially if both my wife and I are on calls. But I'd gladly trade some of my download speed for a faster upload speed.</p>

<p>So which mainstream ISP will be the first to market symmetric - or better - speeds for home workers? BT is apparently <a href="https://www.ispreview.co.uk/index.php/2020/02/openreach-test-xgs-pon-ahead-of-symmetric-fttp-speed-trial.html">trialling it as part of their fibre roll out</a>.</p>

<p>Of course, if you're permanently working from home, perhaps it makes sense for people to go back to having a dedicated, separate line for work?</p>

<p>Either way, broadband speeds will have to change soon. People are beginning to send more data than ever before.</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=35130&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/05/some-thoughts-on-broadband-speeds-in-the-wfh-age/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title><![CDATA[Netizens or Webizens?]]></title>
		<link>https://shkspr.mobi/blog/2020/04/netizens-or-webizens/</link>
					<comments>https://shkspr.mobi/blog/2020/04/netizens-or-webizens/#comments</comments>
				<dc:creator><![CDATA[@edent]]></dc:creator>
		<pubDate>Sun, 05 Apr 2020 11:19:16 +0000</pubDate>
				<category><![CDATA[/etc/]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[language]]></category>
		<category><![CDATA[net]]></category>
		<guid isPermaLink="false">https://shkspr.mobi/blog/?p=34537</guid>

					<description><![CDATA[Way back in the 1990s, the word &#34;Netizen&#34; was coined.  I always took it to mean &#34;someone who lives on the Internet&#34;. In modern times, the neologism has been superseded with &#34;webizen&#34;.    I find this an interesting development. It is well known that people often confused the Net with the Web.  Hence the need for these &#34;explanatory&#34; t-shirts:    Of course, the original meaning of Netizen was…]]></description>
										<content:encoded><![CDATA[<p>Way back in the 1990s, the word "<a href="https://www.december.com/cmc/mag/1996/sep/callnet.html">Netizen</a>" was coined.  I always took it to mean "someone who lives on the Internet". In modern times, the neologism has been superseded with "webizen".</p>

<p><a href="https://www.theguardian.com/world/live/2020/mar/11/coronavirus-update-live-news-uk-health-minister-italy-lockdown-australia-us-china-stock-markets-outbreak-latest-updates?page=with:block-5e68d5be8f08c2df6d27764e#block-5e68d5be8f08c2df6d27764e"><img src="https://shkspr.mobi/blog/wp-content/uploads/2020/03/webizens.jpg" alt="  Chinese webizens are turning to ever more inventive methods to evade online censorship and spread the first-hand account of a Wuhan physician on the frontline of tackling Covid-19, writing it backwards, translating it into English, and even producing a Braille version.  The article, which was published on WeChat by People Magazine on 10 March, was “immediately deleted across the entire network”, according to a report from Radio Free Asia. But the deletions only began a game of cat and mouse with the censors, as users firstly began using classic methods, like sharing screenshots of the contents, and then moved on to more inventive ways of obfuscating the text, including translations into Braille, Morse Code, English and Emoji. Here’s a sample sentence: ❤芬曾🌶🗾‍🥘1⃣份🧣💗肺👁病👤‍💦病☠检测‍🐆🗻，她用红色👊出“SARS冠☄病☠”字🐑，当‍).  Other approaches included rewriting the entire text backwards, or writing it in “Martian”, by replacing every character with visually similar alternatives – so that the passage “艾芬曾拿到过一份不明肺炎病人的病毒检测报告” becomes the nonsense text “哎棼缯拿箌过┅份钚明肺燚病亡啲病蝳检测报告”. Eventually, RFA reports, even those articles were deleted." width="994" height="1024" class="aligncenter size-full wp-image-34538"></a></p>

<p>I find this an interesting development. It is well known that people often confused the Net with the Web.  Hence the need for these "explanatory" t-shirts:</p>

<p><a href="https://web.archive.org/web/20190312200553/https://twitter.com/w3c/status/1105453516154433536"><img src="https://shkspr.mobi/blog/wp-content/uploads/2020/04/D1dcHSyX0AAtgDa.jpg" alt="Photo of Tim Berners-Lee wearing a T-shirt which says &quot;I didn't invent the Internet&quot; and Vint Cerf wearing a T-shirt saying &quot;I didn't invent the web&quot;." width="840" height="560" class="aligncenter size-full wp-image-50185"></a></p>

<p>Of course, the <em>original</em> meaning of Netizen was something quite different.</p>

<blockquote><p>Netizens are the people who actively contribute online towards the development of the Net and discuss the nature and role of this new communications medium.</p>

<p>Netizens are people who decide to devote time and effort into making the Net, this new part of our world, a better place.</p>

<p>Lurkers are not Netizens, and vanity home pages are not the work of Netizens. While lurking or trivial home pages do not harm the Net, they do not contribute either.</p>

<p><a href="https://www.december.com/cmc/mag/1996/sep/netizen.html">CMC Magazine - 1996</a></p></blockquote>

<p>So, I suppose, Webizen makes more sense. The Web has won. Nearly everything on the 'Net uses HTTP to communicate.  Ports 80 and 443 reign supreme.</p>

<p>Two thousand years ago, the proudest boast was <em>civis romanus sum</em>. Today, all free people, wherever they may live, are citizens of the Internet, and therefore, as a free man, I take pride in the words "Ich bin ein Webizen!"</p>
<img src="https://shkspr.mobi/blog/wp-content/themes/edent-wordpress-theme/info/okgo.php?ID=34537&HTTP_REFERER=RSS" alt="" width="1" height="1" loading="eager">]]></content:encoded>
					
					<wfw:commentRss>https://shkspr.mobi/blog/2020/04/netizens-or-webizens/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
	</channel>
</rss>
