boston.conman.org.rss.xml - sfeed_tests - sfeed tests and RSS and Atom files | |
git clone git://git.codemadness.org/sfeed_tests | |
Log | |
Files | |
Refs | |
README | |
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>[email protected] (Sean Conner)</managingEditor> | |
20 <webMaster>[email protected] (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'… | |
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>becau… | |
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://justinja… | |
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.conm… | |
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/searc… | |
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 tutor… | |
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 n… | |
68 and I can't convince the Powers That Be that it's never a good idea to p… | |
69 I can't just look up some tutorial on proving negatives—I just have to… | |
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-… | |
82 | |
83 <P>And, in fact, anyone with any proximity to software development has l… | |
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 th… | |
86 laboring under Agile may not be the liberatory experience it’s billed … | |
87 Indeed, software development is in crisis again—but, this time, it’s… | |
88 Agile crisis. On the web, everyone from regular developers to some of t… | |
89 original manifesto authors is raising concerns about Agile practices. T… | |
90 talk about the “Agile-industrial complex,” the network of consultant… | |
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: somewhe… | |
93 in the last two decades, Agile has veered from the original manifesto’s | |
94 vision, becoming something more restrictive, taxing, and stressful than … | |
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 pra… | |
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 experien… | |
103 them. Because it insists on its status as a “mindset,” not a method… | |
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 … | |
107 thing wrong and it’s not working for you, people will assume it’s be… | |
108 you’re doing it wrong,” one product manager told me. “Not because… | |
109 anything wrong with the framework.”</P> | |
110 | |
111 <P CLASS="cite">Via <A CLASS="external" HREF="https://news.ycombinator.c… | |
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 fina… | |
122 So, | |
123 at The Enterprise, | |
124 I've been informing them pretty much all this year that this “Agile”… | |
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 th… | |
142 At least here, | |
143 <A CLASS="local" HREF="/2022/02/11.3">I'm not forced to use Windows</A>.… | |
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/ma… | |
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 re… | |
162 is that when I was a kid, the TV show “Father Knows Best” to… | |
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. Wh… | |
165 grew up, I realized it was just a fictitious name. I also figur… | |
166 out that Springfield was one of the most common names for a city… | |
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.smit… | |
172 Groening Reveals the Location of the Real Springfield | Arts &am… | |
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 … | |
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:/… | |
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… | |
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… | |
223 <TR><TH ROWSPAN="1" CLASS="num">2</TH> <TD>Centerville</TD> <TD… | |
224 <TR><TH ROWSPAN="1" CLASS="num">3</TH> <TD>Fairview</TD> <TD… | |
225 <TR><TH ROWSPAN="1" CLASS="num">4</TH> <TD>Franklin</TD> <TD… | |
226 <TR><TH ROWSPAN="1" CLASS="num">5</TH> <TD>Midway</TD> <TD… | |
227 <TR><TH ROWSPAN="3" CLASS="num">6</TH> <TD>Georgetown</TD> <TD… | |
228 <TR> <TD>Glendale</TD> <TD… | |
229 <TR> <TD>Greenwood</TD> <TD… | |
230 <TR><TH ROWSPAN="6" CLASS="num">7</TH> <TD>Lincoln</TD> <TD… | |
231 <TR> <TD>Marion</TD> <TD… | |
232 <TR> <TD>Oakland</TD> <TD… | |
233 <TR> <TD>Pleasant Valley</TD> <TD… | |
234 <TR> <TD>Salem</TD> <TD… | |
235 <TR> <TD>Union</TD> <TD… | |
236 <TR><TH ROWSPAN="3" CLASS="num">8</TH> <TD>Fairfield</TD> <TD… | |
237 <TR> <TD>Lakeview</TD> <TD… | |
238 <TR> <TD>Liberty</TD> <TD… | |
239 <TR><TH ROWSPAN="9" CLASS="num">9</TH> <TD>Arlington</TD> <TD… | |
240 <TR> <TD>Chester</TD> <TD… | |
241 <TR> <TD>Clinton</TD> <TD… | |
242 <TR> <TD>Farmington</TD> <TD… | |
243 <TR> <TD>Florence</TD> <TD… | |
244 <TR> <TD>Greenville</TD> <TD… | |
245 <TR> <TD>Milton</TD> <TD… | |
246 <TR> <TD>Newport</TD> <TD… | |
247 <TR> <TD>Springfield</TD> <TD… | |
248 <TR><TH ROWSPAN="9" CLASS="num">10</TH> <TD>Bethel</TD> <TD… | |
249 <TR> <TD>Clifton</TD> <TD… | |
250 <TR> <TD>Eden</TD> <TD… | |
251 <TR> <TD>Glenwood</TD> <TD… | |
252 <TR> <TD>Hamilton</TD> <TD… | |
253 <TR> <TD>Kingston</TD> <TD… | |
254 <TR> <TD>Lakeside</TD> <TD… | |
255 <TR> <TD>Mount Pleasant</TD> <TD… | |
256 <TR> <TD>Summit <TD… | |
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 … | |
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/… | |
292 saying that double slashes in <ABBR TITLE="Uniform Resource Indicator">U… | |
293 and pointed out the <ABBR TITLE="Augmented Backus-Naur Form">ABNF</ABBR>… | |
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… | |
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-absolu… | |
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> f… | |
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//bost… | |
337 | |
338 <P>I can understand why this was done—to simplify the grammar as the v… | |
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 sla… | |
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</ABB… | |
346 where each slash represents a parent directory. | |
347 This command, <CODE>cd ///</CODE> on Amiga<ABBR TITLE="Operating 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 … | |
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… | |
364 | |
365 <DIV CLASS="pf"> | |
366 | |
367 <IMG SRC="/2022/05/03/wrapper.jpg" WIDTH="400" HEIGHT="300" ALT="[A sub … | |
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 d… | |
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="… | |
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 mul… | |
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 d… | |
422 specify posts via a range of dates. | |
423 And it's on these pages that the double slashed <ABBR TITLE="Uniform Res… | |
424 Why that happens is easy—I was generating the links directly from stri… | |
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> t… | |
442 I think when I wrote the above code, | |
443 I wasn't thinking in terms of a <ABBR TITLE="Uniform Resource Locator">U… | |
444 but of constructing a <ABBR TITLE="Uniform Resource Locator">URL</ABBR> … | |
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.wiki… | |
480 And lo' | |
481 sixteen years ago <A CLASS="local" HREF="/2006/05/01.2">I wrote about <C… | |
482 Amazingly, | |
483 <A CLASS="external" HREF="http://osixs.org/">the website</A> is still ar… | |
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</ti… | |
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://g… | |
499 I thought <A CLASS="local" HREF="/2022/04/16.1">it might be a simple bug… | |
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 malforme… | |
508 Which to me indicates that something out there might be generating such … | |
509 (and for this case, | |
510 I checked and <A CLASS="local" HREF="/2022/04/22.3">I don't think I'm th… | |
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 g… | |
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"… | |
516 and I'm not sure what status it returned since it's difficult to obtain … | |
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 locati… | |
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">… | |
543 <CODE>/foo</CODE> and <CODE>/foo/</CODE> are technically different resou… | |
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 … | |
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 slashse… | |
556 I think <A CLASS="site" HREF="gemini://gemini.conman.org//boston/2015/10… | |
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?</… | |
561 | |
562 ]]> | |
563 </description> | |
564 </item> | |
565 | |
566 <item> | |
567 <title>“We're a local newspaper run by a non-local company, we don… | |
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/f3868913db… | |
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 sinc… | |
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.m… | |
579 </BLOCKQUOTE> | |
580 | |
581 | |
582 <P>The “GPDR” is a typo—the author actually meant the <A CLASS="ex… | |
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… | |
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/C… | |
588 probably doesn't care about European readers. | |
589 The company does have a policy for <A CLASS="external" HREF="https://www… | |
590 so I don't see why it can't be extended for the <ABBR TITLE="General Dat… | |
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… | |
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 re… | |
604 And again, | |
605 like most bugs, | |
606 it was an easy fix—just don't redirect if you come from <CODE>http://f… | |
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</titl… | |
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/… | |
624 saying that it was his crawler that had sent links like <CODE>gemini://g… | |
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.o… | |
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</AB… | |
639 and when a request is made via <A CLASS="site" HREF="gopher://gopher.con… | |
640 the entries making up the request are retrieved and <A CLASS="local" HRE… | |
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><… | |
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=20080219010714AAnF… | |
656 </OL> | |
657 | |
658 <P>Those links with a <ABBR TITLE="Uniform Resource Locator">URL</ABBR> … | |
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>… | |
662 and that's where things went pear-shaped. | |
663 The code to do the <ABBR TITLE="Uniform Resource Locator">URL</ABBR> tra… | |
664 but for relative links, | |
665 I used the string, | |
666 not the parsed <ABBR TITLE="Uniform Resource Locator">URL</ABBR> structu… | |
667 As such, | |
668 the code didn't work so well with <ABBR TITLE="Uniform Resource Locator"… | |
669 and thus, | |
670 I ended up with links like <CODE>gemini://gemini.conman.org/boston/2008/… | |
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 bo… | |
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… | |
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</C… | |
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 … | |
707 <TR><TD CLASS="num">200</TD> <TD>OK</TD> <TD CLASS="num">178414</TD>… | |
708 <TR><TD CLASS="num">304</TD> <TD>Not Modified</TD> <TD CLASS="num">2… | |
709 <TR><TD CLASS="num">404</TD> <TD>Not Found</TD> <TD CLASS="num">8214… | |
710 <TR><TD CLASS="num">301</TD> <TD>Moved Permanently</TD> <TD CLASS="n… | |
711 <TR><TD CLASS="num">405</TD> <TD>Method Not Allowed</TD> <TD CLASS="… | |
712 <TR><TD CLASS="num">410</TD> <TD>Gone</TD> <TD CLASS="num">685</TD><… | |
713 <TR><TD CLASS="num">400</TD> <TD>Bad Request</TD> <TD CLASS="num">25… | |
714 <TR><TD CLASS="num">206</TD> <TD>Partial Content</TD> <TD CLASS="num… | |
715 <TR><TD CLASS="num">401</TD> <TD>Unauthorized</TD> <TD CLASS="num">4… | |
716 <TR><TD CLASS="num">500</TD> <TD>Internal Server Error</TD> <TD CLAS… | |
717 <TR><TD CLASS="num">403</TD> <TD>Forbidden</TD> <TD CLASS="num">4</T… | |
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:… | |
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 … | |
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 -… | |
737 </PRE> | |
738 | |
739 | |
740 <P>That log entry indicates a “browser” from <ABBR TITLE="Internet P… | |
741 identifying itself as “Mozilla (yada yada)” on the 10<SUP>th</SUP> o… | |
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.… | |
754 <TR><TD CLASS="num">126495</TD> <TD>Mozilla/4.0 (compatible; MSIE 7.… | |
755 <TR><TD CLASS="num">42</TD> <TD>Mozilla/5.0 (X11; Linux x86_64) Appl… | |
756 <TR><TD CLASS="num">36</TD> <TD>CATExplorador/1.0beta (sistemes at d… | |
757 <TR><TD CLASS="num">15</TD> <TD>Mozilla/5.0 (Windows NT 10.0; Win64;… | |
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 P… | |
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 … | |
773 Yes, | |
774 if you try to go to <CODE>http://flummux.org/</CODE> the server will rep… | |
775 (the reasons for that is to canonicalize the <ABBR TITLE="Uniform Resour… | |
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 a… | |
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… | |
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>f… | |
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 l… | |
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" HRE… | |
813 | |
814 <P>I'm reading the <A CLASS="external" HREF="https://www.transylvaniatim… | |
815 “<A CLASS="external" HREF="https://www.transylvaniatimes.com/features/… | |
816 He owns <A CLASS="external" HREF="https://optaylors.com/">O.P. Taylor's<… | |
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 |