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 “The Boston Diaries.”
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">XXXXXXX</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 & 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 &
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 FaceMeLinkedInstaMySpaceBookWeInGram.
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">XXXXXXXXXXXXXXX</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">XXXXXXXXXXXXXXX</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