<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Protocol on billpg industries™</title><link>https://owl.billpg.com/tags/protocol/</link><description>Recent content in Protocol on billpg industries™</description><generator>Hugo</generator><language>en-us</language><copyright>© William Godfrey.</copyright><lastBuildDate>Sat, 05 Sep 2026 14:41:07 +0000</lastBuildDate><atom:link href="https://owl.billpg.com/tags/protocol/index.xml" rel="self" type="application/rss+xml"/><item><title>I Wrote a NuGet Package!</title><link>https://owl.billpg.com/i-wrote-a-nuget-package/</link><pubDate>Sat, 05 Sep 2026 14:41:07 +0000</pubDate><guid>https://owl.billpg.com/i-wrote-a-nuget-package/</guid><description>&lt;p&gt;I’ve been working a little in the world of &lt;strong&gt;HTTP Authentication&lt;/strong&gt;. When you connect a system to another system, there’s usually a set of tokens that get passed around and managed and sometimes accidentally pushed to a public git repo.&lt;/p&gt;
&lt;p&gt;When you try to connect to a website that requires a user login, you’ll be sent back a &lt;strong&gt;&lt;code&gt;401&lt;/code&gt;&lt;/strong&gt; response with a &lt;strong&gt;&lt;code&gt;WWW-Authenticate:&lt;/code&gt;&lt;/strong&gt; header. Except you won’t. You’ll be sent a 302 redirect to a login page.&lt;/p&gt;</description></item><item><title>Will We Run Out of Unicodes?</title><link>https://owl.billpg.com/the-expanding-universe-of-unicode/</link><pubDate>Mon, 10 Nov 2025 19:40:40 +0000</pubDate><guid>https://owl.billpg.com/the-expanding-universe-of-unicode/</guid><description>&lt;p&gt;Before Unicode, digital text lived in a fragmented world of 8-bit encodings. ASCII had settled in as the good-enough-for-English core, taking up the first half of codes, but the other half was a mish-mash of regional code pages that mapped characters differently depending on locale. One set for accented Latin letters, another set for Cyrillic.&lt;/p&gt;
&lt;p&gt;Each system carried its own assumptions, collisions, and blind spots. Unicode emerged as a unifying vision. a single character set for all human languages, built on a 16-bit foundation. All developers had to do was swap their 8-bit loops for 16-bit loops. Some bristled that half the bytes were all zeros, but this was for the greater good.&lt;/p&gt;</description></item><item><title>POP3 - The ideas that didn't make it.</title><link>https://owl.billpg.com/pop3-didnt-make-it/</link><pubDate>Thu, 29 Apr 2021 17:09:39 +0000</pubDate><guid>https://owl.billpg.com/pop3-didnt-make-it/</guid><description>&lt;p&gt;This is part of series of posts documenting extensions to the POP3 protocol.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://owl.billpg.com/pop3-commit-refresh/" rel="noreferrer noopener" data-type="post" data-id="226" target="_blank"&gt;POP3 – A Commit and Refresh Mechanism&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://owl.billpg.com/pop3-message-ids/" rel="noreferrer noopener" data-type="post" data-id="261" target="_blank"&gt;POP3 – Goodbye to numeric message IDs!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://owl.billpg.com/pop3-deli/" rel="noreferrer noopener" data-type="post" data-id="335" target="_blank"&gt;POP3 – Delete Immediately&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/billpg/POP3Listener/" rel="noreferrer noopener" target="_blank"&gt;billpg.POP3Listener - A reference implementation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I had a few ideas along the way. This post collects some that didn&amp;rsquo;t quite make it. I present these so the time I spent won&amp;rsquo;t have been a &lt;em&gt;complete&lt;/em&gt; waste. 🐘&lt;/p&gt;</description></item><item><title>POP3 - Delete Immediately</title><link>https://owl.billpg.com/pop3-deli/</link><pubDate>Wed, 07 Apr 2021 18:03:51 +0000</pubDate><guid>https://owl.billpg.com/pop3-deli/</guid><description>&lt;p&gt;This post is part of series documenting extensions I&amp;rsquo;ve designed and prototyped for the POP3 protocol. I originally had this idea on the way to designing &lt;a href="https://owl.billpg.com/pop3-commit-refresh/" rel="noreferrer noopener" data-type="post" data-id="226" target="_blank"&gt;a mechanism for keeping connections open&lt;/a&gt; and avoid having to close and reopen them. I had abandoned this specific idea early on in that process but once I started writing up my notes for public discussion, I realised this small update might still be useful to implement.&lt;/p&gt;</description></item><item><title>POP3 - Goodbye to numeric message IDs!</title><link>https://owl.billpg.com/pop3-message-ids/</link><pubDate>Mon, 22 Mar 2021 19:57:42 +0000</pubDate><guid>https://owl.billpg.com/pop3-message-ids/</guid><description>&lt;p&gt;This is the second post in my series describing a number of extensions to the POP3 protocol. The main one is a mechanism to refresh an already opened connection to allow newly arrived messages to be downloaded, which I&amp;rsquo;ve described on &lt;a href="https://owl.billpg.com/pop3-commit-refresh/" data-type="post" data-id="226" target="_blank" rel="noreferrer noopener"&gt;a separate post&lt;/a&gt;. This one is a lot simpler in scope but if we&amp;rsquo;re doing work in this protocol anyway, this may as well come as a package.&lt;/p&gt;</description></item><item><title>POP3 - A Commit and Refresh Mechanism</title><link>https://owl.billpg.com/pop3-commit-refresh/</link><pubDate>Mon, 22 Mar 2021 19:08:48 +0000</pubDate><guid>https://owl.billpg.com/pop3-commit-refresh/</guid><description>&lt;p&gt;POP3 is a popular protocol for accessing a mailbox full of email messages. While small devices have moved their mail reading apps to IMAP and proprietary protocols, POP3 remains the preferred protocol for moving email messages between big servers where a no-frills, download-and-delete system is preferred.&lt;/p&gt;
&lt;p&gt;A problem with this protocol is embodied in this question: &lt;strong&gt;&amp;ldquo;How often should we poll for new messages?&amp;rdquo;&lt;/strong&gt; There&amp;rsquo;s a non-trivial overhead to connecting. Poll too quickly and you overload the system. Poll too far apart and messages take too long to arrive.&lt;/p&gt;</description></item><item><title>POP3 - UIDL is a required command!</title><link>https://owl.billpg.com/pop3-uidl/</link><pubDate>Thu, 17 Dec 2020 20:06:55 +0000</pubDate><guid>https://owl.billpg.com/pop3-uidl/</guid><description>&lt;p&gt;&lt;a href="https://tools.ietf.org/html/rfc1957" rel="noreferrer noopener" target="_blank"&gt;RFC 1957&lt;/a&gt; observes, discussing mail reading software that implements the popular POP3 protocol: &amp;ldquo;two popular clients require optional parts of the RFC. Netscape requires UIDL, and Eudora requires TOP.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;This reads like a complaint, but this tell me that Netscape&amp;rsquo;s mail reader (which these days is called Thunderbird) is well designed.&lt;/p&gt;
&lt;p&gt;The rot started with  &lt;a href="https://tools.ietf.org/html/rfc1939" rel="noreferrer noopener" target="_blank"&gt;RFC 1939&lt;/a&gt;, the standard for this protocol. This document specifies that &lt;strong&gt;UIDL&lt;/strong&gt; is &lt;em&gt;optional&lt;/em&gt;. This was a mistake. Without UIDL, the protocol is not reliable. I write this in the hope of persuading you that UIDL should not only be considered a requirement for a POP3 server, but that any client software that &lt;em&gt;doesn&amp;rsquo;t&lt;/em&gt; require UIDL should not be trusted. I&amp;rsquo;m looking at you, Eudora!&lt;/p&gt;</description></item><item><title>Is your API broken?</title><link>https://owl.billpg.com/is-your-api-broken/</link><pubDate>Wed, 16 Jul 2014 23:54:00 +0000</pubDate><guid>https://owl.billpg.com/is-your-api-broken/</guid><description>&lt;p&gt;&amp;ldquo;Welcome to the Example Rutabaga Company. We’ve got a simple REST API for all your rutabaga needs!&amp;rdquo; Indeed, it is simple… &lt;code&gt;   POST https://rutabaga.example.com/Order/ HTTP/1.1&lt;/code&gt; &lt;code&gt;   Content-Type: application/json&lt;/code&gt; &lt;code&gt;   {&amp;quot;Quantity&amp;quot;: 5800,&lt;/code&gt; &lt;code&gt;    &amp;quot;Quality&amp;quot;: &amp;quot;Tasty!&amp;quot;,&lt;/code&gt; &lt;code&gt;    &amp;quot;DeliverTo&amp;quot;: &amp;quot;123 Fake Street, New Orleans&amp;quot;}&lt;/code&gt; Send this and you&amp;rsquo;ll either get an error or an &amp;ldquo;OK&amp;rdquo; response with a tracking ID inside. Later, you’ll get several thousand tasty rutabagas in the post. What could go wrong? Everything.&lt;/p&gt;
&lt;h2 id="schrödingers-response"&gt;Schrödinger&amp;rsquo;s Response&lt;/h2&gt;
&lt;p&gt;From the client’s point of view, there’s a clear action to take depending on the response code. &lt;img src="https://owl.billpg.com/images/cat1-161x300.jpg" data-align="right" width="156" height="290" /&gt;&lt;/p&gt;</description></item></channel></rss>