boston.conman.org.rss.xml - sfeed_tests - sfeed tests and RSS and Atom files
 (HTM) git clone git://git.codemadness.org/sfeed_tests
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       boston.conman.org.rss.xml (37448B)
       ---
            1 <?xml version="1.0" encoding="UTF-8" ?>
            2 <rss version="0.91">
            3 
            4         <!-- ========================================== -->
            5         <!-- Note, there is no AUTHOR tag in this DTD   -->
            6         <!-- neither in rss-0.92 ...                    -->
            7         <!-- ========================================== -->
            8 
            9 <channel>
           10   <title>The Boston Diaries</title>
           11   <link>http://boston.conman.org/</link>
           12   <description>
           13         The on going saga of a programmer who doesn't live in Boston, nor
           14         does he even like Boston, but yet named his weblog/journal
           15         &#8220;The Boston Diaries.&#8221;
           16   </description>
           17   <language>en-us</language>
           18   <pubDate>Fri, 13 May 2022 05:18:05 GMT</pubDate>
           19   <managingEditor>sean@conman.org (Sean Conner)</managingEditor>
           20   <webMaster>sean@conman.org (Sean Conner)</webMaster>
           21   <copyright>
           22         Copyright 1999-2022 by Sean Conner.  All Rights Reserved.
           23   </copyright>
           24 
           25   <item>
           26     <title>Programming, up hill, both ways</title>
           27     <!-- <author>Sean Conner</author> -->
           28     <link>http://boston.conman.org/2022/05/12.2</link>
           29     <description>
           30       <![CDATA[
           31         <BLOCKQUOTE CITE="https://justinjackson.ca/webmaster/" TITLE="I'm a XXXXXXX webmaster">
           32 
           33         <P>People would come to us with a <B>problem,</B> and we would
           34         figure out a solution.  We couldn't just search the web <B>because
           35         the web was still being written.</B> And you couldn't just punt a
           36         hard question to the engineer in the desk next to you.  Why? 
           37         Because you were sitting alone in a utility closet packed with
           38         floppy disks and old tape drives.</P>
           39 
           40         <P CLASS="cite"><CITE><A CLASS="external" HREF="https://justinjackson.ca/webmaster/">I'm a <SPAN CLASS="cut">XXXXX­XX</SPAN> webmaster</A></CITE></P>
           41 
           42 </BLOCKQUOTE>
           43 
           44 <P>Ah,
           45 this takes me back.
           46 I got my first computer back in 1984,
           47 and if I wanted to know anything about it I was on my own.
           48 Google didn't exist
           49 (the public Internet didn't exist at the time).
           50 I didn't have anyone I could ask about computer related things.
           51 I did have books and magazines.
           52 So between experimentation and learning to read between the lines,
           53 I picked up programming.</P>
           54 
           55 <P>So when it came time to write a <A CLASS="site" HREF="http://www.conman.org/people/spc/refs/search/">metasearch engine</A>,
           56 there were no tutorials.
           57 There were no open source metasearch engines to download and use.
           58 There was only the problem of writing a metasearch engine,
           59 <A CLASS="site" HREF="http://www.conman.org/people/spc/refs/search/search.hp1.html">in a language I didn't even know</A>
           60 (and which itself was less than a year old at the time).</P>
           61 
           62 <P>Fun times.</P>
           63 
           64 <P>So I always found it odd when people would go online asking for tutorials,
           65 <EM>especially</EM> for writing metasearch engines
           66 (and yes, that did happen back then).
           67 So when something like <A CLASS="local" HREF="/2021/06/07.3">testing a negative</A> comes up,
           68 and I can't convince the Powers That Be that it's never a good idea to prove a negative,
           69 I can't just look up some tutorial on proving negatives—I just have to <A CLASS="local" HREF="/2021/07/29.1">figure it out on my own</A>.</P>
           70 
           71       ]]>
           72     </description>
           73   </item>
           74 
           75   <item>
           76     <title>“This is how we do things around here.”</title>
           77     <!-- <author>Sean Conner</author> -->
           78     <link>http://boston.conman.org/2022/05/12.1</link>
           79     <description>
           80       <![CDATA[
           81         <BLOCKQUOTE CITE="https://logicmag.io/clouds/agile-and-the-long-crisis-of-software/" TITLE="Agile and the Long Crisis of Software">
           82 
           83 <P>And, in fact, anyone with any proximity to software development has likely
           84 heard rumblings about Agile.  For all the promise of the manifesto, one
           85 starts to get the sense when talking to people who work in technology that
           86 laboring under Agile may not be the liberatory experience it’s billed as. 
           87 Indeed, software development is in crisis again—but, this time, it’s an
           88 Agile crisis.  On the web, everyone from regular developers to some of the
           89 original manifesto authors is raising concerns about Agile practices.  They
           90 talk about the “Agile-industrial complex,” the network of consultants,
           91 speakers, and coaches who charge large fees to fine-tune Agile processes. 
           92 And almost everyone complains that Agile has taken a wrong turn: somewhere
           93 in the last two decades, Agile has veered from the original manifesto’s
           94 vision, becoming something more restrictive, taxing, and stressful than it
           95 was meant to be.</P>
           96 
           97 <P>Part of the issue is Agile’s flexibility.  Jan Wischweh, a freelance
           98 developer, calls this the “no true Scotsman” problem.  Any Agile practice
           99 someone doesn’t like is not Agile at all, it inevitably turns out.  The
          100 construction of the manifesto makes this almost inescapable: because the
          101 manifesto doesn’t prescribe any specific activities, one must gauge the
          102 spirit of the methods in place, which all depends on the person experiencing
          103 them.  Because it insists on its status as a “mindset,” not a methodology,
          104 Agile seems destined to take on some of the characteristics of any
          105 organization that adopts it.  And it is remarkably immune to criticism,
          106 since it can’t be reduced to a specific set of methods.  “If you do one
          107 thing wrong and it’s not working for you, people will assume it’s because
          108 you’re doing it wrong,” one product manager told me.  “Not because there’s
          109 anything wrong with the framework.”</P>
          110 
          111 <P CLASS="cite">Via <A CLASS="external" HREF="https://news.ycombinator.com/item?id=31310561">Hacker News</A>, <CITE><A CLASS="external" HREF="https://logicmag.io/clouds/agile-and-the-long-crisis-of-software/">Agile and the Long Crisis of Software</A></CITE></P>
          112 </BLOCKQUOTE>
          113 
          114 
          115 <P>That last line,
          116 “it's not working for you,
          117 people will assume it's because you're doing it wrong,”
          118 rings really true to me.
          119 At <DEL>The Corporation</DEL>—no,
          120 I no longer work for The Corporation,
          121 I now work for The Enterprise now that the Corporate Overlords have finally taken over.
          122 So,
          123 at The Enterprise,
          124 I've been informing them pretty much all this year that this “Agile” development system they're forcing on us isn't working.
          125 Before they <A CLASS="local" HREF="/2021/09/24.1">finally took over</A>,
          126 the team I was on was always on time,
          127 on budget,
          128 smooth deployments
          129 (only two bad deployments in ten years)
          130 and no show-stopping bugs found in production.
          131 As I told upper management,
          132 given our prior track record,
          133 <EM>why</EM> change how we do development?
          134 Why fix what isn't broken?
          135 And while upper management never said this directly,
          136 through their actions they answered:  this is our process,
          137 and we're sticking to it,
          138 slipped schedules and disasterous deployments be damned!</P>
          139 
          140 <P>As to why I haven't left yet?
          141 Because it seems this “Agile” movement has invaded everywhere and things would be “more of the same” elsewhere.
          142 At least here,
          143 <A CLASS="local" HREF="/2022/02/11.3">I'm not forced to use Windows</A>.</P>
          144 
          145 
          146       ]]>
          147     </description>
          148   </item>
          149 
          150   <item>
          151     <title>Springfield isn't the most popular city name in the US</title>
          152     <!-- <author>Sean Conner</author> -->
          153     <link>http://boston.conman.org/2022/05/10.1</link>
          154     <description>
          155       <![CDATA[
          156         <BLOCKQUOTE CITE="https://www.smithsonianmag.com/arts-culture/matt-groening-reveals-the-location-of-the-real-springfield-60583379/" TITLE="Matt Groening Reveals the Location of the Real Springfield | Arts &amp; Culture| Smithsonian Magazine">
          157 
          158         <P><B>OK, why do the Simpsons live in a town called Springfield? 
          159         Isn't that a little generic?</B></P>
          160         
          161         <P>Springfield was named after Springfield, Oregon.  The only reason
          162         is that when I was a kid, the TV show “Father Knows Best” took
          163         place in the town of Springfield, and I was thrilled because I
          164         imagined that it was the town next to Portland, my hometown.  When I
          165         grew up, I realized it was just a fictitious name.  I also figured
          166         out that Springfield was one of the most common names for a city in
          167         the U.S.  In anticipation of the success of the show, I thought,
          168         “This will be cool; everyone will think it's their Springfield.”
          169         And they do.</P>
          170 
          171         <P CLASS="cite"><CITE><A CLASS="external" HREF="https://www.smithsonianmag.com/arts-culture/matt-groening-reveals-the-location-of-the-real-springfield-60583379/">Matt
          172         Groening Reveals the Location of the Real Springfield | Arts &amp;
          173         Culture| Smithsonian Magazine</A></CITE></P>
          174 
          175 </BLOCKQUOTE>
          176 
          177 <P>So I got to wondering,
          178 <I>is Springfield the most popular city name in the <ABBR TITLE="United States">US</ABBR>?</I>
          179 I know,
          180 weird question,
          181 but I'm curious.
          182 So some quick searching lead me to the <A CLASS="external" HREF="https://www.usgs.gov/u.s.-board-on-geographic-names/download-gnis-data">United States Geological Survey Geographical Names Database</A>.
          183 With some massaging of the data,
          184 I was able to determine that there are 34 States with a “Springfield,”
          185 but it's not alone.
          186 There are eight other cities that are also in 34 States:
          187 Arlington,
          188 Chester,
          189 Clinton,
          190 Farmington,
          191 Florence,
          192 Greenville,
          193 Milton,
          194 and Newport.
          195 Okay,
          196 maybe not the same 34 states across all those cities,
          197 but you get the idea.</P>
          198 
          199 <P>But those cities aren't the most popular names.
          200 No,
          201 all of them are tied for <EM>ninth place!</EM>
          202 The city name that appears in most states is “Riverside” at 46 States
          203 (plus Puerto Rico).
          204 The States that don't have a “Riverside” are Alaska,
          205 Hawaii,
          206 Oklahoma,
          207 and Louisiana
          208 (really?
          209 <EM>Louisiana?</EM>
          210 One of the world's largest river run straight through that state,
          211 and no one bothered to name a town in Louisiana,
          212 “Riverside?”).</P>
          213 
          214 <P>And just to satisfy the curious:</P>
          215 
          216 <TABLE>
          217   <CAPTION>Top 10 city names in the <ABBR TITLE="United States">US</ABBR> (including territories)</CAPTION>
          218   <THEAD>
          219     <TR><TH>Place</TH><TH>Name</TH><TH># States</TH></TR>
          220   </THEAD>
          221   <TBODY>
          222     <TR><TH ROWSPAN="1" CLASS="num">1</TH>  <TD>Riverside</TD>       <TD>47</TD></TR>
          223     <TR><TH ROWSPAN="1" CLASS="num">2</TH>  <TD>Centerville</TD>     <TD>43</TD></TR>
          224     <TR><TH ROWSPAN="1" CLASS="num">3</TH>  <TD>Fairview</TD>        <TD>41</TD></TR>
          225     <TR><TH ROWSPAN="1" CLASS="num">4</TH>  <TD>Franklin</TD>        <TD>40</TD></TR>
          226     <TR><TH ROWSPAN="1" CLASS="num">5</TH>  <TD>Midway</TD>          <TD>39</TD></TR>
          227     <TR><TH ROWSPAN="3" CLASS="num">6</TH>  <TD>Georgetown</TD>      <TD>37</TD></TR>
          228     <TR>                                    <TD>Glendale</TD>        <TD>37</TD></TR>
          229     <TR>                                    <TD>Greenwood</TD>       <TD>37</TD></TR>
          230     <TR><TH ROWSPAN="6" CLASS="num">7</TH>  <TD>Lincoln</TD>         <TD>36</TD></TR>
          231     <TR>                                    <TD>Marion</TD>          <TD>36</TD></TR>
          232     <TR>                                    <TD>Oakland</TD>         <TD>36</TD></TR>
          233     <TR>                                    <TD>Pleasant Valley</TD> <TD>36</TD></TR>
          234     <TR>                                    <TD>Salem</TD>           <TD>36</TD></TR>
          235     <TR>                                    <TD>Union</TD>           <TD>36</TD></TR>
          236     <TR><TH ROWSPAN="3" CLASS="num">8</TH>  <TD>Fairfield</TD>       <TD>35</TD></TR>
          237     <TR>                                    <TD>Lakeview</TD>        <TD>35</TD></TR>
          238     <TR>                                    <TD>Liberty</TD>         <TD>35</TD></TR>
          239     <TR><TH ROWSPAN="9" CLASS="num">9</TH>  <TD>Arlington</TD>       <TD>34</TD></TR>
          240     <TR>                                    <TD>Chester</TD>         <TD>34</TD></TR>
          241     <TR>                                    <TD>Clinton</TD>         <TD>34</TD></TR>
          242     <TR>                                    <TD>Farmington</TD>      <TD>34</TD></TR>
          243     <TR>                                    <TD>Florence</TD>        <TD>34</TD></TR>
          244     <TR>                                    <TD>Greenville</TD>      <TD>34</TD></TR>
          245     <TR>                                    <TD>Milton</TD>          <TD>34</TD></TR>
          246     <TR>                                    <TD>Newport</TD>         <TD>34</TD></TR>
          247     <TR>                                    <TD>Springfield</TD>     <TD>34</TD></TR>
          248     <TR><TH ROWSPAN="9" CLASS="num">10</TH> <TD>Bethel</TD>          <TD>33</TD></TR>
          249     <TR>                                    <TD>Clifton</TD>         <TD>33</TD></TR>
          250     <TR>                                    <TD>Eden</TD>            <TD>33</TD></TR>
          251     <TR>                                    <TD>Glenwood</TD>        <TD>33</TD></TR>
          252     <TR>                                    <TD>Hamilton</TD>        <TD>33</TD></TR>
          253     <TR>                                    <TD>Kingston</TD>        <TD>33</TD></TR>
          254     <TR>                                    <TD>Lakeside</TD>        <TD>33</TD></TR>
          255     <TR>                                    <TD>Mount Pleasant</TD>  <TD>33</TD></TR>
          256     <TR>                                    <TD>Summit               <TD>33</TD></TR>
          257   </TBODY>
          258 </TABLE>
          259 
          260       ]]>
          261     </description>
          262   </item>
          263 
          264   <item>
          265     <title>Star Wars Day?</title>
          266     <!-- <author>Sean Conner</author> -->
          267     <link>http://boston.conman.org/2022/05/04.1</link>
          268     <description>
          269       <![CDATA[
          270         <P>It's not Star Wars Day—it's Dave Brubeck Day!
          271 (and give yourself 10 cool points if you get the reference)
          272 Of course,
          273 it's only Dave Brubeck day in the <ABBR TITLE="United States">US</ABBR>.
          274 Elsewhere in the world,
          275 Dave Brubeck Day is April 5<SUP>th</SUP> for some odd reason
          276 (give yourself a geek point for getting this reference).</P>
          277 
          278 <P><SPAN CLASS="comments">[And of course Sean didn't tell you he pulled this meme from Face­Me­Linked­Insta­My­Space­Book­We­In­Gram.
          279 He's not that cool to think of this. —Editor]</SPAN></P>
          280 
          281       ]]>
          282     </description>
          283   </item>
          284 
          285   <item>
          286     <title>The legality of double slashes in URIs</title>
          287     <!-- <author>Sean Conner</author> -->
          288     <link>http://boston.conman.org/2022/05/03.2</link>
          289     <description>
          290       <![CDATA[
          291         <P><A CLASS="external" HREF="gemini://gemini.clehaxze.tw/gemlog/2022/05-03-two-cents-on-the-mistery-of-double-slashes-in-urls.gmi">Martin Chang replied</A> to my <A CLASS="local" HREF="/2022/04/30.1">musings on processing malformed Gemini requests</A>,
          292 saying that double slashes in <ABBR TITLE="Uniform Resource Indicator">URI</ABBR>s are illegal,
          293 and pointed out the <ABBR TITLE="Augmented Backus-Naur Form">ABNF</ABBR> grammar from <A CLASS="external" HREF="https://www.ietf.org/rfc/rfc3986.txt">the <ABBR TITLE="Uniform Resource Indicator">URI</ABBR> specification</A> to back up his claim:</P>
          294 
          295 <PRE CLASS="language-ABNF" TITLE="ABNF">
          296 path          = path-absolute   ; begins with "/" but not "//"
          297 path-absolute = "/" [ segment-nz *( "/" segment ) ]
          298 segment-nz    = 1*pchar
          299 pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
          300 </PRE>
          301 
          302 
          303 <P>But he didn't quote the <CODE>segment</CODE> rule:</P>
          304 
          305 <PRE CLASS="language-ABNF" TITLE="ABNF">
          306 segment       = *pchar
          307 </PRE>
          308 
          309 
          310 <P>which translated says,
          311 “0 or more <CODE>pchar</CODE> rules.” </P>
          312 
          313 <P>So the <ABBR TITLE="Augmented Backus-Naur Form">ABNF</ABBR> he quoted does indeed rule out <CODE>//­boston/­2018/­07/­04.2</CODE>.
          314 It doesn't rule out <CODE>/­boston//­2018/­07/­04.2</CODE>,
          315 since by the time we hit the double slash,
          316 we're in the <CODE>*( "/" segment )</CODE> part of the <CODE>path-absolute</CODE> rule,
          317 and <CODE>segment</CODE> can have 0 characters.
          318 But what he quoted only applies to relative links,
          319 what I receive is an abolute link.
          320 If you follow the <ABBR TITLE="Augmented Backus-Naur Form">ABNF</ABBR> from that perspective:</P>
          321 
          322 <PRE CLASS="language-ABNF" TITLE="ABNF">
          323 URI-reference = URI / relative-ref
          324 URI           = scheme ":" hier-part [ "?" query ] [ "#" fragment ]
          325 hier-part     = "//" authority path-abempty
          326                  / path-absolute
          327                  / path-rootless
          328                  / path-empty
          329 
          330 path-abempty  = *( "/" segment )
          331 
          332 ; other rules omitted
          333 </PRE>
          334 
          335 
          336 <P>not only does this allow <CODE>gemini://­gemini.conman.org/­/­boston/­2018/­07/­04.2</CODE> but <CODE>gemini://­gemini.conman.org/­/­/­/­/­/­/­/­/­/­/­boston/­2018/­07/­04.2</CODE>.</P>
          337 
          338 <P>I can understand why this was done—to simplify the grammar as the various <CODE>path-</CODE> rules generally end with <CODE>*( "/" segment )</CODE> allows one to end a <ABBR TITLE="Uniform Resource Indicator">URI</ABBR> with a trailing slash or not.
          339 I don't think the intent was to allow long strings of slashes,
          340 but that's the end result of a lax grammar.
          341 Martin is also correct that multiple slashes are treated as a single slash on <ABBR TITLE="Portable Operating System Interface">POSIX</ABBR>
          342 (basically,
          343 any Unix system),
          344 that's not the case across all operating systems.
          345 One exception I can think of Amiga<ABBR TITLE="Operating System">OS</ABBR>,
          346 where each slash represents a parent directory.
          347 This command, <CODE>cd ///</CODE> on Amiga<ABBR TITLE="Operating System">OS</ABBR> is the same as <CODE>cd ‥/‥/‥</CODE> on a <ABBR TITLE="Portable Operating System Interface">POSIX</ABBR> system.
          348 Crazy,
          349 I know.
          350 And maybe not even relevant these days,
          351 but I thought I should mention it.</P>
          352 
          353       ]]>
          354     </description>
          355   </item>
          356 
          357   <item>
          358     <title>I'm hoping this is a joke, because if it's not, I'm not sure what that says about our society</title>
          359     <!-- <author>Sean Conner</author> -->
          360     <link>http://boston.conman.org/2022/05/03.1</link>
          361     <description>
          362       <![CDATA[
          363         <P>I finished my lunch of a sub sandwich when I notice a message printed on the wrapper in not-so-small print:</P>
          364 
          365 <DIV CLASS="pf">
          366 
          367 <IMG SRC="/2022/05/03/wrapper.jpg" WIDTH="400" HEIGHT="300" ALT="[A sub sandwich wrapper with “DO NOT EAT THIS WRAPPER” printed on it.] I'll admit, the sub was good, but not so good as to keep eating everything in sight." TITLE="I'll admit, the sub was good, but not so good as to keep eating everything in sight.">
          368 
          369 </DIV>
          370 
          371 <P>I have no words.</P>
          372 
          373       ]]>
          374     </description>
          375   </item>
          376 
          377   <item>
          378     <title>Notes on an overheard conversation about tea</title>
          379     <!-- <author>Sean Conner</author> -->
          380     <link>http://boston.conman.org/2022/05/02.1</link>
          381     <description>
          382       <![CDATA[
          383         <P>“You know,
          384 you forgot to remind me to make your tea.” </P>
          385 
          386 <P>“Oh.
          387 I need to remind you make tea.” </P>
          388 
          389 <P>“Sigh.” </P>
          390 
          391 <P>“So thank you for reminding me to remind you to make tea.” </P>
          392 
          393 <P>“…” </P>
          394 
          395 <P>“Um,
          396 doesn't hitting your head against the wall hurt?” </P>
          397 
          398       ]]>
          399     </description>
          400   </item>
          401 
          402   <item>
          403     <title>It was a simple bug, but …</title>
          404     <!-- <author>Sean Conner</author> -->
          405     <link>http://boston.conman.org/2022/05/01.2</link>
          406     <description>
          407       <![CDATA[
          408         <P>I was right about <A CLASS="local" HREF="/2022/04/30.1">the double slash bug</A>—<A CLASS="local" HREF="/2022/04/16.1">it was a simple bug after all</A>.
          409 The authors of two Gemini crawlers wrote in about the double slash bug,
          410 and from them,
          411 I was able to get the root cause of the problem—<A CLASS="site" HREF="gemini://gemini.conman.org/boston/">my blog on Gemini</A>.
          412 Good thing I hedged my statement about not being the cause yesterday.
          413 Sigh.</P>
          414 
          415 <P>Back in Debtember,
          416 <A CLASS="local" HREF="/2021/12/06.2">I added support for displaying multiple posts</A>.
          417 It's not an easy feature to describe,
          418 but basically,
          419 it allows one to
          420 (by hacking the <ABBR TITLE="Uniform Resource Locator">URL</ABBR>,
          421 but who hacks <ABBR TITLE="Uniform Resource Locator">URL</ABBR>s these days?)
          422 specify posts via a range of dates.
          423 And it's on these pages that the double slashed <ABBR TITLE="Uniform Resource Locator">URL</ABBR>s appear.
          424 Why that happens is easy—I was generating the links directly from strings:</P>
          425 
          426 <PRE CLASS="language-Lua" TITLE="Lua">
          427 local function geminilink(entry)
          428   return string.format("gemini://%s%s/%s%04d/%02d/%02d.%d",
          429             config.url.host,
          430             port, -- generated elsewhere
          431             config.url.path,
          432             entry.when.year,
          433             entry.when.month,
          434             entry.when.day,
          435             entry.when.part
          436     )
          437 end
          438 </PRE>
          439 
          440 
          441 <P>instead of from a <ABBR TITLE="Uniform Resource Locator">URL</ABBR> type.
          442 I think when I wrote the above code,
          443 I wasn't thinking in terms of a <ABBR TITLE="Uniform Resource Locator">URL</ABBR> type,
          444 but of constructing a <ABBR TITLE="Uniform Resource Locator">URL</ABBR> from data I already had.
          445 The bug itself is due to <CODE>config.url.path</CODE> ending in a slash,
          446 so the third slash in the string literal wasn't needed.
          447 The correct way isn't that hard:</P>
          448 
          449 <PRE CLASS="language-Lua" TITLE="Lua">
          450 local function geminilink(entry)
          451   return uurl.toa(uurl.merge(config.url,
          452                 {
          453                   path = string.format("%04d/%02d/%02d.%d",
          454                                 entry.when.year,
          455                                 entry.when.month,
          456                                 entry.when.day,
          457                                 entry.when.part)
          458                 }))
          459 end
          460 </PRE>
          461 
          462 <P>and it wouldn't have exhibited the issue.</P>
          463 
          464 <P>With this fix in place,
          465 I think I will continue to reject requests with the double slash,
          466 as it is catching bugs,
          467 which is a Good Thing™.</P>
          468 
          469       ]]>
          470     </description>
          471   </item>
          472 
          473   <item>
          474     <title>A zombie site from May Days past</title>
          475     <!-- <author>Sean Conner</author> -->
          476     <link>http://boston.conman.org/2022/05/01.1</link>
          477     <description>
          478       <![CDATA[
          479         <P>Given that today is <A CLASS="external" HREF="https://en.wikipedia.org/wiki/May_Day">May Day</A> I was curious as to <A CLASS="local" HREF="/thisday/05/01">what I wrote on past May Days</A>.
          480 And lo'
          481 sixteen years ago <A CLASS="local" HREF="/2006/05/01.2">I wrote about <CODE>OsiXs.org</CODE></A> and their attempt to “change the world!”
          482 Amazingly,
          483 <A CLASS="external" HREF="http://osixs.org/">the website</A> is still around,
          484 although with even less than there was sixteen years ago.
          485 I guess I was right when I wrote back then,
          486 “I personally don't see this going anywhere fast.” </P>
          487 
          488       ]]>
          489     </description>
          490   </item>
          491 
          492   <item>
          493     <title>Musings on processing malformed Gemini (and web) requests</title>
          494     <!-- <author>Sean Conner</author> -->
          495     <link>http://boston.conman.org/2022/04/30.1</link>
          496     <description>
          497       <![CDATA[
          498         <P>I'm still bothered with Gemini requests like <CODE>gemini://gemini.conman.org//boston/2015/10/17.2</CODE>.
          499 I thought <A CLASS="local" HREF="/2022/04/16.1">it might be a simple bug</A> but now I'm not so sure.
          500 There's a client out there that has made 1,070 such requests,
          501 and if that was all,
          502 or even most,
          503 of the requests,
          504 then yes,
          505 that's probably a simple bug.
          506 But it's not.
          507 It turns out to be only 4% of the requests from said client are malformed in that way.
          508 Which to me indicates that something out there might be generating such links
          509 (and for this case,
          510 I checked and <A CLASS="local" HREF="/2022/04/22.3">I don't think I'm the cause this time</A>).</P>
          511 
          512 <P>I decided to see what happens on the web.
          513 I poked a few web sites with similar “double slash” requests and I got mixed results.
          514 Most of the sites just accepted them as is and served up a page.
          515 The only site that seemed to have issues with it was <A CLASS="external" HREF="https://news.ycombinator.com/">Hacker News</A>,
          516 and I'm not sure what status it returned since it's difficult to obtain the status codes from browsers.</P>
          517 
          518 <P>So,
          519 I have a few options.</P>
          520 
          521 <OL>
          522 
          523 <LI>I can keep the current code and always reject such requests.
          524 In my mind,
          525 such requests have no meaning and are malformed,
          526 so why shouldn't I just reject them?</LI>
          527 
          528 <LI>I can send a permanent redirection to the “proper” location.
          529 This has the upside of maintaining a canonical link to each page,
          530 but with the downside of forcing clients through an additional request,
          531 and me having to live with the redundant requests in the log files.
          532 But it's obvious what resource is being requested,
          533 and sending a permenent redirect informs the client of the proper location.</LI>
          534 
          535 <LI>I can just silently clean up the request and carry on.
          536 The upside—clean logs with only one request.
          537 The downside—two (or more) valid locations for content.
          538 On the one hand,
          539 this just feels wrong to me,
          540 as technically speaking,
          541 <CODE>/foo</CODE> and <CODE>//foo</CODE> should be different resources
          542 (as per <A CLASS="external" HREF="https://www.ietf.org/rfc/rfc3986.txt">Uniform Resource Identifier: Generic Syntax</A>,
          543 <CODE>/foo</CODE> and <CODE>/foo/</CODE> are technically different resources,
          544 so why not this case?).
          545 On the other hand,
          546 this issue is generally ignored by most web servers out there anyway,
          547 so there's that precendent.
          548 On the gripping hand,
          549 doing this just seems like a cop out and blindly following what the web does.</LI>
          550 
          551 </OL>
          552 
          553 <P>Well,
          554 how do current Gemini servers deal with it?
          555 Pretty much like existing web servers—most just treat multiple slashses as a single slash.
          556 I think <A CLASS="site" HREF="gemini://gemini.conman.org//boston/2015/10/17.2">my server</A> is the outlier here.
          557 Now the question is—how pedantic do I want to be?
          558 Is “good enough” better then “perfect?” </P>
          559 
          560 <P>Perhaps a better question is—why am I worrying about this anyway?</P>
          561 
          562       ]]>
          563     </description>
          564   </item>
          565 
          566   <item>
          567     <title>“We're a local newspaper run by a non-local company, we don't care about European readers”</title>
          568     <!-- <author>Sean Conner</author> -->
          569     <link>http://boston.conman.org/2022/04/23.2</link>
          570     <description>
          571       <![CDATA[
          572         <BLOCKQUOTE CITE="gemini://station.martinrue.com/adou/f3868913db6e409eae9fa67845f70324">
          573 
          574 <P>I was reading Conman's latest article, and he linked to a page called
          575 «Transilvania Times».  I wanted to see it, but for the first time since the
          576 vote of the GPDR my visit was denied because I'm European.</P>
          577 
          578 <P CLASS="cite"><CITE><CODE><A CLASS="external" HREF="gemini://station.martinrue.com/adou/f3868913db6e409eae9fa67845f70324">gemini://station.martinrue.com/adou/f3868913db6e409eae9fa67845f70324</A></CODE></CITE></P>
          579 </BLOCKQUOTE>
          580 
          581 
          582 <P>The “GPDR” is a typo—the author actually meant the <A CLASS="external" HREF="https://en.wikipedia.org/wiki/General_Data_Protection_Regulation" TITLE="General Data Protection Regulation">GDPR</A>.
          583 And it pains me to see something like this happen.
          584 Here's someone from Europe who was interested in reading a story about a person in <A CLASS="external" HREF="https://www.cityofbrevard.com/">a small <ABBR TITLE="United States">US</ABBR> town</A> and yet,
          585 they couldn't because the owners of the news website
          586 (which isn't owned locally,
          587 but instead by <A CLASS="external" HREF="https://en.wikipedia.org/wiki/CNHI">a larger company in another state</A>)
          588 probably doesn't care about European readers.
          589 The company does have a policy for <A CLASS="external" HREF="https://www.transylvaniatimes.com/site/california_privacy_policy.html">California readers</A>,
          590 so I don't see why it can't be extended for the <ABBR TITLE="General Data Protection Regulation">GDPR</ABBR>.
          591 This is just so short sighted.</P>
          592 
          593       ]]>
          594     </description>
          595   </item>
          596 
          597   <item>
          598     <title>Does that mean I know have to unit test my text-only websites?</title>
          599     <!-- <author>Sean Conner</author> -->
          600     <link>http://boston.conman.org/2022/04/23.1</link>
          601     <description>
          602       <![CDATA[
          603         <P>I fixed the <A CLASS="local" HREF="/2022/04/22.2">infinite redirections from Hell bug</A>.
          604 And again,
          605 like most bugs, 
          606 it was an easy fix—just don't redirect if you come from <CODE>http://flummux.org/</CODE>.
          607 It feels weird to think of having to test a text-only website,
          608 but there is a form of programming involved,
          609 so it shouldn't be as much of a surprise as it is.</P>
          610 
          611 <P>Sigh.</P>
          612 
          613       ]]>
          614     </description>
          615   </item>
          616 
          617   <item>
          618     <title>I have now wrapped my brain around how it got that link</title>
          619     <!-- <author>Sean Conner</author> -->
          620     <link>http://boston.conman.org/2022/04/22.3</link>
          621     <description>
          622       <![CDATA[
          623         <P><A CLASS="external" HREF="gemini://gemini.clehaxze.tw/gemlog/2022/04-22-re-my-common-gemini-crawler-pitfalls.gmi">Martin Chang replied</A> to my <A CLASS="local" HREF="/2022/04/16.1">post about Gemini crawlers</A>,
          624 saying that it was his crawler that had sent links like <CODE>gemini://gemini.conman.org/boston/2008/04/30/2008/04/30.1</CODE> and decided to look into the issue.
          625 Well,
          626 he did,
          627 and he found it wasn't his issue,
          628 but mine.</P>
          629 
          630 <P>Oh my.</P>
          631 
          632 <P>Okay,
          633 so how did I end up generating links like <CODE>gemini://gemini.conman.org/boston/2008/04/30/2008/04/30.1</CODE>?</P>
          634 
          635 <P>This is,
          636 first and foremost,
          637 a blog on the web.
          638 Each entry is stored as <ABBR TITLE="HyperText Markup Language">HTML</ABBR>,
          639 and when a request is made via <A CLASS="site" HREF="gopher://gopher.conman.org/1Phlog:">gopher</A> or <A CLASS="site" HREF="gemini://gemini.conman.org/boston/">Gemini</A>,
          640 the entries making up the request are retrieved and <A CLASS="local" HREF="/2021/12/06.2">converted to the appropriate format</A>.
          641 As part of that conversion,
          642 links to the blog itself have to be translated appropriately,
          643 and that's where the error happened.</P>
          644 
          645 <P>So,
          646 for example,
          647 the links for the above entry are collected:</P>
          648 
          649 <OL>
          650 <LI><CODE>http://www.cisco.com/</CODE></LI>
          651 <LI><CODE>http://it.slashdot.org/article.pl?sid=08/04/29/2254242</CODE></LI>
          652 <LI><CODE>http://www.arin.net/</CODE></LI>
          653 <LI><CODE>2008/04/30.1#fn-2008-04-30-1-1</CODE></LI>
          654 <LI><CODE>http://www.barracudanetworks.com/</CODE></LI>
          655 <LI><CODE>http://answers.yahoo.com/question/index?qid=20080219010714AAnF91Q</CODE></LI>
          656 </OL>
          657 
          658 <P>Those links with a <ABBR TITLE="Uniform Resource Locator">URL</ABBR> scheme are passed through as is,
          659 but #4 is special,
          660 not only is it a relative link to my blog,
          661 but it also contains a <ABBR TITLE="Uniform Resource Locator">URL</ABBR> fragment,
          662 and that's where things went pear-shaped.
          663 The code to do the <ABBR TITLE="Uniform Resource Locator">URL</ABBR> translations parsed each link as a <ABBR TITLE="Uniform Resource Locator">URL</ABBR>,
          664 but for relative links,
          665 I used the string,
          666 not the parsed <ABBR TITLE="Uniform Resource Locator">URL</ABBR> structure.
          667 As such,
          668 the code didn't work so well with <ABBR TITLE="Uniform Resource Locator">URL</ABBR> fragments,
          669 and thus,
          670 I ended up with links like <CODE>gemini://gemini.conman.org/boston/2008/04/30/2008/04/30.1</CODE>
          671 (for the record,
          672 the same bug was in the gopher translation code as well).</P>
          673 
          674 <P>The fix,
          675 as for most bugs,
          676 was easy once the core issue was identified.
          677 The other issues I talked about are,
          678 as far as I can tell,
          679 not stuff I can fix.</P>
          680 
          681       ]]>
          682     </description>
          683   </item>
          684 
          685   <item>
          686     <title>Play stupid games, win stupid prizes</title>
          687     <!-- <author>Sean Conner</author> -->
          688     <link>http://boston.conman.org/2022/04/22.2</link>
          689     <description>
          690       <![CDATA[
          691         <P>It's not only <A CLASS="local" HREF="/2022/01/11.1">Gemini bots having issues with redirects</A>.
          692 I'm poking around the logs from my webserver,
          693 when I scan all of them to see the breakdown of response codes my server is sending
          694 (for this month).
          695 And well … it's rather surprising:</P>
          696 
          697 <TABLE>
          698   <CAPTION>Breakdown of HTTP response codes from all the sites I host</CAPTION>
          699   <THEAD>
          700     <TR><TH>Status</TH> <TH>Meaning</TH> <TH>Count</TH></TR>
          701   </THEAD>
          702   <TFOOT>
          703     <TR><TH>Status</TH> <TH>Meaning</TH> <TH>Count</TH></TR>
          704   </TFOOT>
          705   <TBODY>
          706     <TR><TD CLASS="num">302</TD> <TD>Found (moved temporarily)</TD> <TD CLASS="num">253773</TD></TR>
          707     <TR><TD CLASS="num">200</TD> <TD>OK</TD> <TD CLASS="num">178414</TD></TR>
          708     <TR><TD CLASS="num">304</TD> <TD>Not Modified</TD> <TD CLASS="num">25552</TD></TR>
          709     <TR><TD CLASS="num">404</TD> <TD>Not Found</TD> <TD CLASS="num">8214</TD></TR>
          710     <TR><TD CLASS="num">301</TD> <TD>Moved Permanently</TD> <TD CLASS="num">6358</TD></TR>
          711     <TR><TD CLASS="num">405</TD> <TD>Method Not Allowed</TD> <TD CLASS="num">1453</TD></TR>
          712     <TR><TD CLASS="num">410</TD> <TD>Gone</TD> <TD CLASS="num">685</TD></TR>
          713     <TR><TD CLASS="num">400</TD> <TD>Bad Request</TD> <TD CLASS="num">255</TD></TR>
          714     <TR><TD CLASS="num">206</TD> <TD>Partial Content</TD> <TD CLASS="num">151</TD></TR>
          715     <TR><TD CLASS="num">401</TD> <TD>Unauthorized</TD> <TD CLASS="num">48</TD></TR>
          716     <TR><TD CLASS="num">500</TD> <TD>Internal Server Error</TD> <TD CLASS="num">24</TD></TR>
          717     <TR><TD CLASS="num">403</TD> <TD>Forbidden</TD> <TD CLASS="num">4</TD></TR>
          718   </TBODY>
          719 </TABLE>
          720 
          721 
          722 <P>I was not expecting that many temporary redirects.
          723 Was it some massive issue across all the sites?
          724 Or just a few?
          725 Well,
          726 it turned all of the temporary redirects were from one site: <CODE>http://www.flummux.org/</CODE>
          727 (and no,
          728 I'm not linking to it as the reason why will become clear).
          729 I registered the domain way back in 2000 just as a place to play around with web stuff or to temporarly make files available without cluttering up my main websites.
          730 The site isn't meant to be at all serious.</P>
          731 
          732 <P>Scanning the log file manually,
          733 I was seeing endless log entries like:</P>
          734 
          735 <PRE CLASS="language-data" TITLE="data">
          736 <SPAN CLASS="cut">XXXXX­XXXXX­XXXXX</SPAN> - - [10/Apr/2022:20:55:05 -0400] "GET / HTTP/1.0" 302 284 "http://flummux.org/" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MRA 4.6 (build 01425); .NET CLR 1.0.3705; .NET CLR 2.0.50727)" -/- (-%)
          737 </PRE>
          738 
          739 
          740 <P>That log entry indicates a “browser” from <ABBR TITLE="Internet Protocol">IP</ABBR> address <SPAN CLASS="cut">XXXXX­XXXXX­XXXXX</SPAN>,
          741 identifying itself as “Mozilla (yada yada)” on the 10<SUP>th</SUP> of April,
          742 attempted to get the main page,
          743 as referred by <CODE>http://flummux.org/</CODE>.
          744 And for how many times this happened,
          745 broken down by browser:</P>
          746 
          747 <TABLE>
          748   <CAPTION>Top five user agents making the troublesome requests</CAPTION>
          749   <THEAD>
          750     <TR><TH>Count</TH> <TH>User agent</TH></TR>
          751   </THEAD>
          752   <TBODY>
          753     <TR><TD CLASS="num">127100</TD> <TD>Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MRA 4.6 (build 01425); .NET CLR 1.0.3705; .NET CLR 2.0.50727)</TD></TR>
          754     <TR><TD CLASS="num">126495</TD> <TD>Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET4.0C; .NET4.0E)</TD></TR>
          755     <TR><TD CLASS="num">42</TD> <TD>Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.97 Safari/537.36</TD></TR>
          756     <TR><TD CLASS="num">36</TD> <TD>CATExplorador/1.0beta (sistemes at domini dot cat; https://domini.cat/catexplorador/)</TD></TR>
          757     <TR><TD CLASS="num">15</TD> <TD>Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0</TD></TR>
          758   </TBODY>
          759 </TABLE>
          760 
          761 
          762 <P>Ah,
          763 two “browsers” that don't limit the number of redirects they follow.
          764 And amusingly enough,
          765 <EM>both</EM> agents came from the <EM>same</EM> <ABBR TITLE="Internet Protocol">IP</ABBR> address.
          766 Or maybe it's the same agent,
          767 just lying about what it is.
          768 Who knows?
          769 Well,
          770 aside from the author(s) of said “browser.” </P>
          771 
          772 <P>But what was all horribly confusing to me why the server was issuing a temporary redirect.
          773 Yes,
          774 if you try to go to <CODE>http://flummux.org/</CODE> the server will repond with a permanent redirect (status 301) to <CODE>http://www.flummux.org/</CODE>
          775 (the reasons for that is to canonicalize the <ABBR TITLE="Uniform Resource Locator">URL</ABBR>s and avoid the “duplicate content penalty” from Google—I set this all up years ago).
          776 But the site shouldn't redirect again.
          777 I can bring the site up in my browser without issue
          778 (which is a visual … pun?  Commentary?  Joke? on the line “The sky above the port was the color of television, tuned to a dead channel.”).</P>
          779 
          780 <P>And then I remembered—back in 2016,
          781 I set things up such that if the browser sent in a referring link,
          782 the page would temporarily redirect back to the referring link
          783 (which is why I'm not linking to it—you would just be redirected right back to this page).
          784 I set that up on a lark for some reason that now esacapes me.
          785 So the above “browsers” kept bouncing back and forth between <CODE>flummux.org</CODE> and <CODE>www.flummux.org</CODE>.
          786 For a quarter of a million requests.</P>
          787 
          788 <P>Sigh.</P>
          789 
          790 <P>In other news,
          791 bugs are nothing more than an inattention to detail.</P>
          792 
          793       ]]>
          794     </description>
          795   </item>
          796 
          797   <item>
          798     <title>Notes on some extreme lawn ornaments, Brevard edition</title>
          799     <!-- <author>Sean Conner</author> -->
          800     <link>http://boston.conman.org/2022/04/22.1</link>
          801     <description>
          802       <![CDATA[
          803         <P>Eight years ago
          804 (wow!  Has it been that long?
          805 <SPAN CLASS="comments">[Yes. —Editor]</SPAN>
          806 <SPAN CLASS="comments">[Who asked you? —Sean]</SPAN>)
          807 while in <A CLASS="external" HREF="http://brevardnc.org/">Brevard</A>,
          808 I took a picture of some <A CLASS="local" HREF="/2014/10/29.2">extreme lawn ornaments—life sized plastic cows</A>.
          809 I wrote the “eat moar chikin” image caption
          810 (if you hold your mouse over the image,
          811 it should pop up)
          812 because the cows reminded me of the cows used by <A CLASS="external" HREF="https://www.chick-fil-a.com/">Chick-fil-a</A>.</P>
          813 
          814 <P>I'm reading the <A CLASS="external" HREF="https://www.transylvaniatimes.com/">Transylvania Times</A> when I come across the article
          815 “<A CLASS="external" HREF="https://www.transylvaniatimes.com/features/transylvanian-of-the-week-john-taylor/article_0ace5e02-bb59-11ec-a02d-3fc39a4c45c6.html">Transylvanian of the Week: John Taylor</A>.”
          816 He owns <A CLASS="external" HREF="https://optaylors.com/">O.P. Taylor's</A>,
          817 a well known toy store in the area,
          818 and he's the one with the life sized plastic cows in his front yard.
          819 Not only that,
          820 but he purchased them from the person who made them for Chick-fil-a.
          821 Little did I know that my caption was more correct than I thought.</P>
          822 
          823       ]]>
          824     </description>
          825   </item>
          826 
          827 
          828 </channel>
          829 </rss>
          830