<rss version="2.0"
xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">
 <channel>
  <title>News You Can Bruise</title>
  <link>http://www.crummy.com/</link>
  <description>Your chicken, your egg, your problem</description>
<creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license>
  <image>
   <url>http://www.crummy.com/nb/resources/img/export.png</url>
   <title>News You Can Bruise</title>
   <link>http://www.crummy.com/</link>
  </image>
  <managingEditor>leonardr@segfault.org (Leonard Richardson)</managingEditor>
  <language>en-us</language>
  <docs>http://backend.userland.com/rss</docs>
  <lastBuildDate>Fri, 09 May 2008 01:15:26 GMT</lastBuildDate>
<item>
 <description>Ryan Ginstrom, who just sent me some Beautiful Soup money, has &lt;a href="http://ginstrom.com/scribbles/"&gt;a cool weblog about Japanese-English translation and Python&lt;/a&gt;. From the weblog I found out about &lt;a href="http://ginstrom.com/scribbles/2008/02/19/translating-maru-batsu-into-english/"&gt;maru batsu&lt;/a&gt;. Has it reawakened my &lt;a href="http://unicode.org/charts/symbols.html"&gt;longstanding love of punctuation&lt;/a&gt;&amp;#8253;
</description>
 <pubDate>Fri, 09 May 2008 01:15:26 GMT</pubDate>
 <guid isPermaLink="true">http://www.crummy.com/2008/05/08/2</guid>
</item>
<item>
 <description>Speaking of things I read on Waxy, check out &lt;a href="http://www.pixeljam.com/dinorun/"&gt;Dino Run&lt;/a&gt;, a synthesis of the ludological concepts I've developed through years of Game Roundups. Specifically, 1) &lt;a href="http://www.crummy.com/2005/01/01/0"&gt;"a flexible set of techniques to use towards your goals, and lots of random variation within well-defined parameters"&lt;/a&gt;; and more importantly 2) &lt;a href="http://www.crummy.com/2004/04/13/2"&gt;"replace the humans with dinosaurs"&lt;/a&gt;.

&lt;p&gt;Disclaimer: in the interest of scientific accuracy I should point out that, like many animal-themed games, Dino Run uses as a game mechanic a totally inaccurate model of evolution. It also depicts the K-T event as something you could outrun, which seems about an order of magnitude worse than having an action hero outrun an explosion.</description>
 <pubDate>Fri, 09 May 2008 00:09:34 GMT</pubDate>
 <category domain="http://www.crummy.com/nb/nb.cgi/category/nycb/">games/roundup</category>
 <guid isPermaLink="true">http://www.crummy.com/2008/05/08/1</guid>
</item>
<item>
 <description>I'm not really interested right now in writing the kind of weblog entry I usually write. I apologize since I assume you read my weblog for that kind of entry, but this is not some lame "I'm not going to write much for a while because I'm so busy.". I'm no busier than usual and I like writing, but at the moment I want to focus on creating new things and doing research. Most of my writing at the moment is fiction.

&lt;p&gt;So here is the deal. If there's something interesting or helpful you think I could find out or create, tell me about it in a comment. I read a number of weblogs that do something similar (eg. &lt;a href="http://waxy.org/"&gt;waxy&lt;/a&gt;, &lt;a href="http://www.requestcomics.com/"&gt;Request Comics&lt;/a&gt;) and the results are always interesting.  </description>
 <pubDate>Thu, 08 May 2008 22:46:36 GMT</pubDate>
 <guid isPermaLink="true">http://www.crummy.com/2008/05/08/0</guid>
</item>
<item>
 <description>It looks like &lt;a href="http://www.crummy.com/pix/2008/0506-copier.jpg"&gt;someone's setting up an office&lt;/a&gt; in my apartment building.</description>
 <pubDate>Wed, 07 May 2008 01:25:24 GMT</pubDate>
 <guid isPermaLink="true">http://www.crummy.com/2008/05/06/0</guid>
</item>
<item>
 <description>On Saturday I went with Evan to see the pretty decent Dave Eggers-curated exhibition of cartoonish art, &lt;a href="http://apexart.org/exhibitions/eggers.htm"&gt;"Lots of Things Like This"&lt;/a&gt;. &lt;a href="http://www.crummy.com/pix/2008/0503-Apex Art/"&gt;Here are some pictures from Saturday&lt;/a&gt;, including &lt;a href="http://www.crummy.com/pix/2008/0503-Apex Art/03-L.H.O.O.Q.JPG"&gt;L.H.O.O.Q.&lt;/a&gt;, first in my mission to take my own pictures of Duchamp's major forgeries. (Duchamp retouched L.H.O.O.Q., probably to make the Mona Lisa's face more like his own, betting that you wouldn't notice because you'd be distracted by the moustache; &lt;a href="http://avline.abacusline.co.uk/pictures/jpeg/pics/mona.jpg"&gt;dare to compare&lt;/a&gt;.)</description>
 <pubDate>Tue, 06 May 2008 01:45:21 GMT</pubDate>
 <guid isPermaLink="true">http://www.crummy.com/2008/05/05/1</guid>
</item>
<item>
 <description>It's &lt;A href="http://www.crummy.com/jabberwocky/"&gt;two years since my mother's death&lt;/a&gt;. When someone dies you're left with your mental model of that person. This is a kind of immortality but as immortality goes it's really terrible, because your mental model of another person is never good enough to give any satisfaction. It's the difference between a real person and ELIZA.

&lt;p&gt;Except in dreams. The people in our dreams are simulations run by the brain, but we don't notice at the time. I dream about my mother all the time, and for a while I fool myself into thinking a few mental images are a real person. And I wake up and it's painful, like it always is when you realize you've been fooling yourself.

&lt;p&gt;But that's not as bad as it gets, because sometimes I dream that my mother dies. I wake up and realize it was a dream, and I'm relieved. And then I remember that the dream was accurate, and it's worse. The mental-model sort of immortality is mostly good for keeping the pain fresh.</description>
 <pubDate>Mon, 05 May 2008 23:12:37 GMT</pubDate>
 <guid isPermaLink="true">http://www.crummy.com/2008/05/05/0</guid>
</item>
<item>
 <title>They Said I Prob'ly Shouldn't Fly With Just One Eye</title>
 <description>While waking up yesterday morning I had one of those semi-sensible waking up ideas, where I revamped &lt;a href="http://www.crummy.com/warren/"&gt;my pretty-much-abandoned memorial page for my old BBS&lt;/a&gt; to reuse the actual old screens from the BBS. So the file listings would be colored text like they were on Da Warren, the homepage would be a copy of the BBS's main menu, etc. I could even put up ports of my WCCode masterpieces like The Online Hedgehog Detector and Eliminator, and Are You Online?

&lt;p&gt;Well, looking at those old menus, that's probably not going to happen anytime soon because it would be a very confusing interface. But! To give the menus a proper look-see I ended up writing a program that converts my ANSI files to HTML. If you have any old ANSI files lying around it might work on them too. It even supports blinking ANSI, using the much-maligned (greatly-maligned?) &amp;lt;blink&amp;gt; tag. Well, the CSS equivalent.

&lt;table style="color:white; background-color:black"&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&amp;#x263A;&amp;#x263B;&amp;#x2665;&amp;#x2666;&amp;#x2663;&amp;#x2660;&amp;#x2022;&amp;#x25D8;&amp;#x25CB;X&amp;#x2642;&amp;#x2640;X&amp;#x266B;&amp;#x263C;&amp;#x25B8;    &lt;span style="color:dimgray; background-color:black"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:black; background-color:black"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:dimgray; background-color:darkred"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:black; background-color:darkred"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:dimgray; background-color:darkgreen"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:black; background-color:darkgreen"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:dimgray; background-color:#8b8b00"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:black; background-color:#8b8b00"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:dimgray; background-color:darkblue"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:black; background-color:darkblue"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:dimgray; background-color:darkmagenta"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:black; background-color:darkmagenta"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:dimgray; background-color:darkcyan"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:black; background-color:darkcyan"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:dimgray; background-color:gray"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:black; background-color:gray"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:black; background-color:gray; text-decoration: blink"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:white; background-color:black"&gt;
&amp;#x25C2;&amp;#x2195;&amp;#x203C;&amp;#x00B6;&amp;#x00A7;&amp;#x25AC;&amp;#x21A8;&amp;#x2191;&amp;#x2193;&amp;#x2192;&amp;#x2190;&amp;#x221F;&amp;#x2194;&amp;#x25B4;&amp;#x25BE;     &lt;/span&gt;&lt;span style="color:red; background-color:black"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkred; background-color:black"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:red; background-color:darkred"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkred; background-color:darkred"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:red; background-color:darkgreen"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkred; background-color:darkgreen"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:red; background-color:#8b8b00"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkred; background-color:#8b8b00"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:red; background-color:darkblue"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkred; background-color:darkblue"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:red; background-color:darkmagenta"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkred; background-color:darkmagenta"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:red; background-color:darkcyan"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkred; background-color:darkcyan"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:red; background-color:gray"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkred; background-color:gray"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkred; background-color:gray; text-decoration: blink"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:white; background-color:black"&gt;
!"#$%&amp;'()*+,-./0    &lt;/span&gt;&lt;span style="color:green; background-color:black"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkgreen; background-color:black"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:green; background-color:darkred"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkgreen; background-color:darkred"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:green; background-color:darkgreen"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkgreen; background-color:darkgreen"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:green; background-color:#8b8b00"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkgreen; background-color:#8b8b00"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:green; background-color:darkblue"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkgreen; background-color:darkblue"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:green; background-color:darkmagenta"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkgreen; background-color:darkmagenta"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:green; background-color:darkcyan"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkgreen; background-color:darkcyan"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:green; background-color:gray"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkgreen; background-color:gray"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkgreen; background-color:gray; text-decoration: blink"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:white; background-color:black"&gt;
123456789:;&lt;=&gt;?@    &lt;/span&gt;&lt;span style="color:yellow; background-color:black"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:#8b8b00; background-color:black"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:yellow; background-color:darkred"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:#8b8b00; background-color:darkred"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:yellow; background-color:darkgreen"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:#8b8b00; background-color:darkgreen"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:yellow; background-color:#8b8b00"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:#8b8b00; background-color:#8b8b00"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:yellow; background-color:darkblue"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:#8b8b00; background-color:darkblue"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:yellow; background-color:darkmagenta"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:#8b8b00; background-color:darkmagenta"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:yellow; background-color:darkcyan"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:#8b8b00; background-color:darkcyan"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:yellow; background-color:gray"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:#8b8b00; background-color:gray"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:#8b8b00; background-color:gray; text-decoration: blink"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:white; background-color:black"&gt;
ABCDEFGHIJKLMNOP    &lt;/span&gt;&lt;span style="color:blue; background-color:black"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkblue; background-color:black"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:blue; background-color:darkred"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkblue; background-color:darkred"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:blue; background-color:darkgreen"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkblue; background-color:darkgreen"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:blue; background-color:#8b8b00"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkblue; background-color:#8b8b00"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:blue; background-color:darkblue"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkblue; background-color:darkblue"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:blue; background-color:darkmagenta"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkblue; background-color:darkmagenta"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:blue; background-color:darkcyan"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkblue; background-color:darkcyan"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:blue; background-color:gray"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkblue; background-color:gray"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkblue; background-color:gray; text-decoration: blink"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:white; background-color:black"&gt;
QRSTUVWXYZ[\]^_`    &lt;/span&gt;&lt;span style="color:magenta; background-color:black"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkmagenta; background-color:black"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:magenta; background-color:darkred"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkmagenta; background-color:darkred"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:magenta; background-color:darkgreen"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkmagenta; background-color:darkgreen"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:magenta; background-color:#8b8b00"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkmagenta; background-color:#8b8b00"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:magenta; background-color:darkblue"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkmagenta; background-color:darkblue"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:magenta; background-color:darkmagenta"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkmagenta; background-color:darkmagenta"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:magenta; background-color:darkcyan"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkmagenta; background-color:darkcyan"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:magenta; background-color:gray"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkmagenta; background-color:gray"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkmagenta; background-color:gray; text-decoration: blink"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:white; background-color:black"&gt;
abcdefghijklmnop    &lt;/span&gt;&lt;span style="color:cyan; background-color:black"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkcyan; background-color:black"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:cyan; background-color:darkred"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkcyan; background-color:darkred"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:cyan; background-color:darkgreen"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkcyan; background-color:darkgreen"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:cyan; background-color:#8b8b00"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkcyan; background-color:#8b8b00"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:cyan; background-color:darkblue"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkcyan; background-color:darkblue"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:cyan; background-color:darkmagenta"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkcyan; background-color:darkmagenta"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:cyan; background-color:darkcyan"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkcyan; background-color:darkcyan"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:cyan; background-color:gray"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkcyan; background-color:gray"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:darkcyan; background-color:gray; text-decoration: blink"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:white; background-color:black"&gt;
qrstuvwxyz{|}~&amp;#x2302;&amp;#x00C7;    &amp;#x2665;&lt;/span&gt;&lt;span style="color:gray; background-color:black"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:white; background-color:darkred"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:gray; background-color:darkred"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:white; background-color:darkgreen"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:gray; background-color:darkgreen"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:white; background-color:#8b8b00"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:gray; background-color:#8b8b00"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:white; background-color:darkblue"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:gray; background-color:darkblue"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:white; background-color:darkmagenta"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:gray; background-color:darkmagenta"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:white; background-color:darkcyan"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:gray; background-color:darkcyan"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:white; background-color:gray"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:gray; background-color:gray"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:gray; background-color:gray; text-decoration: blink"&gt;&amp;#x2665;&lt;/span&gt;&lt;span style="color:white; background-color:black"&gt;
&amp;#x00FC;&amp;#x00E9;&amp;#x00E2;&amp;#x00E4;&amp;#x00E0;&amp;#x00E5;&amp;#x00E7;&amp;#x00EA;&amp;#x00EB;&amp;#x00E8;&amp;#x00EF;&amp;#x00EE;&amp;#x00EC;&amp;#x00C4;&amp;#x00C5;&amp;#x00C9;    
&amp;#x00E6;&amp;#x00C6;&amp;#x00F4;&amp;#x00F6;&amp;#x00F2;&amp;#x00FB;&amp;#x00F9;&amp;#x00FF;&amp;#x00D6;&amp;#x00DC;&amp;#x00A2;&amp;#x00A3;&amp;#x00A5;&amp;#x20A7;&amp;#x0192;&amp;#x00E1;    
&amp;#x00ED;&amp;#x00F3;&amp;#x00FA;&amp;#x00F1;&amp;#x00D1;&amp;#x00AA;&amp;#x00BA;&amp;#x00BF;&amp;#x2310;&amp;#x00AC;&amp;#x00BD;&amp;#x00BC;&amp;#x00A1;&amp;#x00AB;&amp;#x00BB;&amp;#x2591;    
&amp;#x2592;&amp;#x2593;&amp;#x2502;&amp;#x2524;&amp;#x2561;&amp;#x2562;&amp;#x2556;&amp;#x2555;&amp;#x2563;&amp;#x2551;&amp;#x2557;&amp;#x255D;&amp;#x255C;&amp;#x255B;&amp;#x2510;&amp;#x2514;    
&amp;#x2534;&amp;#x252C;&amp;#x251C;&amp;#x2500;&amp;#x253C;&amp;#x255E;&amp;#x255F;&amp;#x255A;&amp;#x2554;&amp;#x2569;&amp;#x2566;&amp;#x2560;&amp;#x2550;&amp;#x256C;&amp;#x2567;&amp;#x2568;    
&amp;#x2564;&amp;#x2565;&amp;#x2559;&amp;#x2558;&amp;#x2552;&amp;#x2553;&amp;#x256B;&amp;#x256A;&amp;#x2518;&amp;#x250C;&amp;#x2588;&amp;#x2584;&amp;#x258C;&amp;#x2590;&amp;#x2580;&amp;#x03B1;    
&amp;#x03B2;&amp;#x0393;&amp;#x03C0;&amp;#x03A3;&amp;#x03C3;&amp;#x00B5;&amp;#x03C4;&amp;#x03A6;&amp;#x0398;&amp;#x03A9;&amp;#x03B4;&amp;#x221E;&amp;#x2205;&amp;#x2208;&amp;#x2229;&amp;#x2261;    
&amp;#x00B1;&amp;#x2265;&amp;#x2264;&amp;#x2320;&amp;#x2321;&amp;#x00F7;&amp;#x2248;&amp;#x00B0;&amp;#x2219;&amp;#x00B7;&amp;#x221A;&amp;#x207F;&amp;#x00B2;&amp;#x25AA;    &lt;/span&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;p&gt;Here's the source: &lt;A href="http://www.crummy.com/software/ansi2html/ansi2html.py"&gt;ansi2html.py&lt;/a&gt;. I've released it into the public domain.

&lt;p&gt;Strangely enough, this program didn't already exist--&lt;a href="http://search.cpan.org/~autrijus/HTML-FromANSI-1.01/script/ansi2html"&gt;HTML::FromANSI&lt;/a&gt; works for color codes but doesn't handle the CP437 extended ASCII characters that were a staple of DOS-based BBSes. There was a last burst of enthusiasm for ANSI files in general around 1999, when &lt;a href="http://www.deater.net/weave/vmwprod/ansi2gif/"&gt;ansi2gif&lt;/a&gt; was released, but that seems to have been before web browsers had Unicode support, so nobody thought of putting it in the browser. And nowadays most people interested in ANSI art are into the scene stuff that mostly uses the block characters, and instead of cheap HTML translations you get cool things like &lt;A href="http://ansi.notchill.com/article/4/lightbox-prototype-progress"&gt;lightboxes&lt;/a&gt;.

&lt;p&gt;I wanted to bring all my tacky BBS screens into the browser and share them with you. Then I got this program working, actually saw all my tacky screens for the first time in years, and thought better of it. I will share one of my old Da Warren screens with you, to give you an idea of what the program can do. I've put it up at &lt;a href="http://www.crummy.com/software/ansi2html"&gt;the ANSI2HTML web page&lt;/a&gt;. The graphics aren't bad because it's a plagiarized parody of someone else's ANSI advertising their pirate BBS. I used it as Da Warren's login screen occasionally.

&lt;p&gt;There are a couple problems with the script. The first is that it needs some line-wrapping logic to simulate an 80-column screen. The second, which might be related, is that some ANSIs look crappy when it converts them to HTML. And--I'm embarrassed that this never occurred to me before--I'm not sure how an ANSI file is supposed to distinguish between an \x0a that's a newline and a \x0a that's INVERSE WHITE CIRCLE. Right now I treat 'em all like newlines.

&lt;p&gt;But, at the very least I hope someone will get some use out of my Python dict mapping the IBM PC's special characters to numeric HTML entities. I forsee a renaissance of ZZT-style ANSI art games, old door games ported to the Web, etc.

&lt;p&gt;PS: the official Unicode name of the &amp;#x2302; character is "HOUSE". I never mentally gave it a name, but "HOUSE"? Seriously? I'd have called it HOME PLATE.

&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; Added support for the simple cursor movement codes that can be simulated by adding newlines and spaces, which makes basically all ANSIs convert well enough that you can see what they are. Getting more complex than that will involve creating a virtual screen and drawing the whole thing on that before converting the finished product to HTML. Not worth it for me right now.

&lt;p&gt;Uh, one more bit of art. This is how I signed my name in one of the BBS bulletins:

&lt;pre&gt;
                                                &amp;#x250C;&amp;#x2510;
                                               &amp;#x2514;&amp;#x253C;&amp;#x2518;
                                               &amp;#x250C;&amp;#x253C;&amp;#x2510;eonard
                                               &amp;#x2514;&amp;#x2518;&amp;#x2514;
&lt;/pre&gt;</description>
 <pubDate>Sun, 04 May 2008 05:32:38 GMT</pubDate>
 <guid isPermaLink="true">http://www.crummy.com/2008/05/04/0</guid>
</item>
<item>
 <title>The Legend Of The Legend Of Zelda</title>
 <description>So a while ago I finished the Wii Zelda game I borrowed from Steve Minutillo, and yesterday I finished the Gamecube Zelda game I borrowed from Adam Parrish. I think &lt;i&gt;Wind Waker&lt;/i&gt; (the Gamecube game) is my favorite Zelda game. This is partly because of its use of the Zelda myth.

&lt;p&gt;The prevailing fanboy approach to the Zelda series is to try to put the games into some chronological order where there's an eternal recurrence of a hero archetype who keeps being reborn to fight the same evil over and over. In fact this is also the official approach, but it doesn't hold together very well. The details don't match up. Look at the intro story to Zelda 2: what should be a straightforward sequel is already a mess. 

&lt;p&gt;I prefer to think of every game in the series as being a different culture's telling of a myth--literally, the legend of Zelda--each emphasizing different things. Example: sometimes the hero visits a parallel universe, sometimes not, but in every telling with a parallel universe, the nature of the universe is different. It's like playing through all the video game adaptations of &lt;i&gt;Journey to the West&lt;/i&gt;. On this view, trying to put the Zelda games in chronological order is like trying to unify the two creation myths in Genesis. It misses the point.

&lt;p&gt;However, the Zelda myth is not that interesting on its own: it's the myth of The Kid Who Collected A Bunch Of Similar Things. Like if three-quarters of &lt;i&gt;Lord of the Rings&lt;/i&gt; was Aragorn slumming it up and down Middle-Earth trying to find all the pieces of the Sword That Was Broken. I still need to play the N64 installments of the franchise, but &lt;i&gt;Wind Waker&lt;/i&gt; had the best riffs on the myth of any Zelda game I've played.

&lt;p&gt;First, the Polynesian-style setting was totally different, and it worked well. I think the ocean squares could have been reduced in size by about 25%, but it made the game world interesting the way loci of activity were scattered more or less uniformly across the map.

&lt;p&gt;Also, in the other games I've played Link doesn't have much of a character arc. In &lt;i&gt;Twilight Princess&lt;/i&gt; he starts out as a Luke Skywalker farm boy type who's thrust into greatness, but it doesn't really work because he's got &lt;a href="http://tvtropes.org/pmwiki/pmwiki.php/Main/DullSurprise"&gt;the emotional range of your Kathy Ireland&lt;/a&gt;. He's a lot more expressive in &lt;i&gt;Wind Waker&lt;/i&gt; with its cartoony graphics. He's also younger; his hero clothes are itchy and he's terrified, but he goes and is the hero anyway. It's typical Joseph Campbell stuff, but other games in the series don't even come up to that level. And it's especially effective with the &lt;i&gt;Wind Waker&lt;/i&gt; backstory, in which the world is in the state it is because the last time someone ran through the eternal recurrence and told the myth, the hero didn't show up.

&lt;p&gt;Bonuses: it's got &lt;a href="http://www.creativeuncut.com/gallery-02/zww-cartographerfish.html"&gt;a character&lt;/a&gt; who's effectively &lt;a href="http://www.crummy.com/2003/07/09/2"&gt;a coffinfish&lt;/a&gt;. I named my character "Zelda" in a tribute to the original NES Zelda game, which yielded yuk-worthy dialogue like "Hurry, Zelda! We must reach Zelda!". And while researching the &lt;a href="http://cube.ign.com/articles/522/522179p1.html"&gt;much-loath&amp;eacute;d&lt;/a&gt; character of Tingle, I discovered &lt;a href="http://blog.wired.com/games/2006/09/tingles_rupee_l.html?entry_id=1549375"&gt;Freshly Picked Tingle's Rosy Rupeeland&lt;/a&gt;, the game that's a ruthless parody of the Zelda myth in addition to being a big "screw you" to fanboys everywhere.</description>
 <pubDate>Fri, 02 May 2008 23:31:13 GMT</pubDate>
 <guid isPermaLink="true">http://www.crummy.com/2008/05/02/1</guid>
</item>
<item>
 <description>The problem with &lt;a href="http://www.herecomeseverybody.org/2008/04/looking-for-the-mouse.html"&gt;directly comparing the amount of time people spend watching TV with the amount of time spent writing Wikipedia&lt;/a&gt; is that a big chunk of Wikipedia is status reports about what happened on TV. Great article though.</description>
 <pubDate>Fri, 02 May 2008 12:26:45 GMT</pubDate>
 <guid isPermaLink="true">http://www.crummy.com/2008/05/02/0</guid>
</item>
<item>
 <title>Space Game</title>
 <description>I had an idea for a game and immediately started expanding the scope of the game beyond all reason, but let's keep it relatively simple. This is a game where you run a space program. You've got a mission, let's say putting a man on the moon and bringing him back safely. You get to design the spaceship, landing module, etc (I think we're at a point where you could design these in a fair amount of detail and it could be made fun). Then you do the launch, deal with any problems that come up, and try to carry out the mission.

&lt;p&gt;I'm pretty sure there was a "space race" game in the 90s that let you manage a space program on the large scale and probably had some budget challenges, but I doubt it let you design spaceships in a meaningful way. What do you think of this game idea? No pressure since I'm not going to actually develop such a game.

&lt;p&gt;Hm, actually it could work as a space-race role playing game.</description>
 <pubDate>Fri, 02 May 2008 02:01:27 GMT</pubDate>
 <guid isPermaLink="true">http://www.crummy.com/2008/05/01/0</guid>
</item>
<item>
 <description>I got nothing, so before going to sleep I'll just point you to &lt;a href="http://www.starslip.com/2008/01/03/starslip-12/"&gt;my favorite &lt;i&gt;Starslip Crisis&lt;/i&gt; ever&lt;/a&gt;.</description>
 <pubDate>Thu, 01 May 2008 02:03:37 GMT</pubDate>
 <guid isPermaLink="true">http://www.crummy.com/2008/04/30/0</guid>
</item>
<item>
 <title>Teeth Suck: The Continuing Saga</title>
 <description>I'm pretty well-off now, but up until I graduated from college I was poor. Not where's the next meal coming from poor, thank goodness, but working all your spare time to pay the bills poor. There are &lt;a href="http://www.scalzi.com/whatever/003704.html"&gt;many ways it sucks to be poor&lt;/a&gt;, but one part that I really hated was being &lt;i&gt;treated&lt;/i&gt; like I was poor. 

&lt;p&gt;Being poor is like going through airport security all the time. You always need something from someone who doesn't need you, doesn't care about you, and suspects you're trying to scam them. In fact, airport security is just a pathological case: it's for people too "poor" for fractional jet ownership. All of America's great leveling experiences: jury duty, the DMV, phone support, the emergency room, etc., are leveling in that they treat everyone the way America treats the poor.

&lt;p&gt;I've made it a goal in life to be treated that way as little as possible. I don't think anyone should be treated that way, so I also do what I can to stop it in general, which as it turns out is not much at all. Which brings us to tonight's word: dental insurance.

&lt;p&gt;Due to &lt;a href="http://www.crummy.com/2007/08/15/2"&gt;circumstances previously discussed&lt;/a&gt;, Sumana and I are on student health insurance and have our dental work done at the NYU dental college. The waiting room is always crowded and chaotic, the waits are long, you have to fill out the insurance forms yourself, and the actual work is very slow (it's done by dental students who frequently need to bring real dentists over for help). And of course it's done by dental students, which means it's more likely something would go disastrously wrong. It's dental work for people who can't pass up an opportunity to spend time to save money. Compare to the ritzy &lt;A href="http://www.crummy.com/2007/08/23/0"&gt;Dentist 2.0&lt;/a&gt;, where we shelled out big bucks out-of-pocket, but had a really good experience with little waiting.

&lt;p&gt;So dental work is more aggravating for me than it used to be. But why complain about it now, apart from weblogs being places to complain about things. Because six months ago it was discovered that I have a magic lesion. The dental student assigned to me said that there are always dental students who need to fill minor cavities of a certain dimension for the board exams. She asked if I'd be willing to have the cavity filled as part of someone's board exam in the spring. I said sure. Go in and have it filled as part of a checkup, go in and have it filled as part of an exam. The only difference is that in the latter case you're helping someone become a dentist.

&lt;p&gt;Well, I found out the second difference around February, when I got my first call from a dental student wanting to fill my cavity. When you get a cavity filled as part of a board exam, you have to make the trip to the NYU dental school &lt;i&gt;twice&lt;/i&gt;: once to get an X-ray of the tooth in question for grading purposes, and once for the actual filling. Oh yeah, the X-ray will happen in the middle of the day on, say, Tuesday, and the actual filling will happen at 7 AM on Sunday. But! I'll get the filling done for free and $100 on top of that.

&lt;p&gt;Oh yeah. I recognize this. The lure of the hundred dollars. When I was in college I considered, among other biology-related money-making schemes, having board work done at the UCLA dental school. In retrospect I should have gone for it. That $100 would have been welcome, and going to the dentist at all back then would have saved me a root canal down the line.

&lt;p&gt;Now? Not so much. I have the privilege of putting a high price on my time. The 7AM on Sunday thing doesn't bother me much, but I'm not interested in making a separate trip in the middle of a workday just to get some X-rays. I asked if they could reuse the full-spectrum X-rays I'd gotten when I started getting work done at NYU. They weren't very old at that point. Nope, they had to be new X-rays of the tooth in question. Sorry, I said. I'm not interested. I was stoic in the face of reminders that I was being offered $100 for my time.

&lt;p&gt;Last week I got &lt;i&gt;another&lt;/i&gt; call from &lt;i&gt;another&lt;/i&gt; dental student preparing for the boards. I turned him down and explained why I had turned down the first dental student. But this guy sounded desperate. I'm like the only guy in New York City with a lesion that's the right shape. And after I explained why I'd said no the first time, he said he could meet me halfway. I didn't have to come in the middle of the day for the X-rays; he would meet me at 6PM on, say, Tuesday, and we could do them then. And he'd pay me $100! I hemmed and hawed and eventually agreed.

&lt;p&gt;Today I went down to the land of dentistry and met the dental student, and he was really good. He fast-talked his way into an X-ray booth downstairs so I wouldn't have to wait 15-20 minutes for one of the overbooked booths reserved for my ilk. He took the X-rays and a cast of the tooth. It was an even better experience than Dentist 2.0. I actually started thinking things like "Wow, things move really smoothly when it's just you and the dentist getting things done!"

&lt;p&gt;You knew it was coming. At this point I found out the third difference between getting the cavity filled as part of the appointment and getting it filled as part of a board exam. He's explaining what's going to happen on Sunday and he says something like "Oh, it's going to be an amalgam filling. I noticed you've got composite fillings. Is that going to be a problem?"

&lt;p&gt;Yes. Another one of the things I can do now that I'm well-off is not let people put silver and mercury into my head. I have lousy teeth but they're mine, and I want to keep them looking like teeth. A dental student can see I've got lots of fillings just by looking at my teeth, but I don't want to advertise that fact to laymen.

&lt;p&gt;Thus begins the Tense Situation. The rules say that the lesion has to be a certain size and that it has to be filled with amalgam, or maybe the amalgam's a cost-saving measure or whatever. The dental student suggests I can have the cavity filled with amalgam for the exam, and then have the amalgam taken out and composite put back in. I ask how long that will take. It turns out he's talking about two different visits: the board exam, and then a follow-up appointment where I do what I was planning to do in the first place: have a tooth drilled and filled with composite. So after the board exam I'll be where I am now. Except I'll have to pay for the second appointment, which will wipe out any $100-related gains I may have made from the first, and then some.

&lt;p&gt;I ask if my student insurance will cover the second appointment. Oh. I have &lt;i&gt;insurance&lt;/i&gt;! No problem! All I have to do is show up for two dentist appointments, which I'd agreed to do earlier. True, I've already wasted an evening coming over here for a third dentist appointment, but that's a sunk cost at this point.

&lt;p&gt;That's when all the stuff I mentioned earlier really hits me, about when I was in college and thought about having board work done. This program isn't a way for the helpful rich guy with bad insurance to help dental students pass the boards. It's a way for a poor person with no insurance to get a cavity filled and make a little money on the side. I've broken the parameters of the program with my snobbish insistence on fillings that don't look like crap or activate my fear of biting a piece of aluminum foil while eating a burrito.

&lt;p&gt;I feel terrible but I'm not going to go through a dental procedure just so I can have it done again a week later. I say I'm sorry a lot and walk out. I walk out knowing that the dental student is probably in the same situation I was in in college. He probably has a bunch of loans. When he graduates he'll start making good money, but right now he needs to spend $100 on some lab equipment for a demonstration. And his lab equipment has just walked out. Now I'm the one acting like I don't need someone else. I'm the one with the power to say no, and it doesn't make me feel better that the alternative to 'no' is a deeply unpleasant experience for me.

&lt;p&gt;Teeth suck.

&lt;p&gt;The only bright side is that the dental student told me this after he saw my other fillings, instead of on Sunday. If he'd sprung the filling surprise on me in front of the people giving the exam, he said, they would have flunked him for poor patient management. Now at least he's got a chance to find someone else.</description>
 <pubDate>Wed, 30 Apr 2008 01:21:54 GMT</pubDate>
 <guid isPermaLink="true">http://www.crummy.com/2008/04/29/0</guid>
</item>
<item>
 <description>You'd think I'd have gotten enough history of interactive fiction from all the other books on the topic I've read, but &lt;a href="http://home.grandecom.net/~maher/if-book/"&gt;&lt;i&gt;Let's Tell A Story Together&lt;/i&gt;&lt;/a&gt; held my interest. Plus it's the first time I skimmed &lt;a href="http://home.grandecom.net/~maher/if-book/if-10.htm"&gt;the back of the book&lt;/a&gt; looking for my name and my name actually showed up! Somehow I hadn't heard of &lt;a href="http://members.chello.at/theodor.lauppert/games/acheton.htm"&gt;Acheton&lt;/a&gt; or it hadn't registered on my mind or something.</description>
 <pubDate>Tue, 29 Apr 2008 02:52:05 GMT</pubDate>
 <guid isPermaLink="true">http://www.crummy.com/2008/04/28/0</guid>
</item>
<item>
 <title>Hardy Kingfisher</title>
 <description>Keeping in the spirit of "Might as well do a release", I just did &lt;a href="http://newsbruiser.tigris.org/servlets/NewsItemView?newsItemID=2109"&gt;a release of NewsBruiser&lt;/a&gt;. Yes, you heard right. The last release happened &lt;a href="http://www.crummy.com/2005/02/13/1"&gt;over three years ago&lt;/a&gt;, back when there was still hope in the world. People seemed to smile more then... there were concerts in the park... but enough of this sepia-tinged nostalgia. &lt;a href="http://newsbruiser.tigris.org/servlets/NewsItemView?newsItemID=2109"&gt;NewsBruiser 2.6.2 is here!&lt;/a&gt;

&lt;p&gt;&lt;a href="http://newsbruiser.tigris.org/source/browse/newsbruiser/CHANGELOG?rev=1.290&amp;view=markup"&gt;New features include:&lt;/a&gt; commenting is less aggravating for commenters (you no longer have to give your email address, a useless feature akin to the way BBS signups used to ask for your home address), comments are less aggravating for administrators (a certain class of HTML-heavy comment spam couldn't be removed via the edit screen, and now it can be), "Today in History" works a lot better for weblogs that have, say, ten years of archives. The del.icio.us export supports the new del.icio.us API. Stuff like that.

&lt;p&gt;As usual, all of the crummy.com weblogs have been automatically upgraded, and since that's a pretty good chunk of NewsBruiser's active installed base, we're doin' pretty well. Of course the crummy.com weblogs have had most of the bug fixes for some time, because all those changes I mentioned, and indeed all the NewsBruiser work I've done for the past three years, were directly motivated by my needs or someone on crummy.com's needs or &lt;a href="http://www.ocf.berkeley.edu/~sumanah/ces.shtml"&gt;Sumana's&lt;/a&gt; needs.

&lt;p&gt;This is the big problem with NewsBruiser: in the early 2000s I'd add features (RSS 3.0 anyone?) just because I thought they were cool and I liked programming, or because someone had said they might use NewsBruiser in the future if I added such-and-such a feature. The result is a sprawling code base (at least it's modular!), a UI that reaches further than my limited UI design skills can take it, and except for &lt;a href="http://vitanuova.loyalty.org/"&gt;Seth&lt;/a&gt; none of those people ended up using NewsBruiser anyway. And now I've got a program that works fine and is very reliable, but which contains core samples from my entire history as a working programmer (which means a lot of ugly code) and has a lot of unnecessary features.

&lt;p&gt;Some of my initial goals (running on Python 1.5.2 because hosting services didn't have 2.x yet) don't make sense anymore. Some (no external dependencies at all) still make sense in the abstract but I think they make NB a lot more complicated than it needs to be. The  template system is weird and terrible, and I should be using someone else's template system that has things like loops. I still don't think NewsBruiser should depend on a particular web framework but I would like to keep the data store in a SQLite file. That would make indexing and categories (to pick two examples) much simpler.

&lt;p&gt;It would put an end to NewsBruiser's current infinite extensibility, but you know what. I've used this program for ten years. I'm the person with the strangest needs who actually uses it, and I've got a pretty good idea of what I need from it. So I could just start over, bring in whatever code I can from the old NewsBruiser, and have something shiny and compact that implements the Atom Publishing Protocol.

&lt;p&gt;To the extent there's demand for weblog software written in a reasonable language (ie. not Perl or PHP), NewsBruiser could still be a player. But my hard realization of today is that there's not really such a demand. The vast majority of weblog installations based on free software use Movable Type (Perl) or WordPress (PHP) or LiveJournal (Perl). The people have spoken, the bastards. And life is short, and I've already got an &lt;a href="http://www.crummy.com/software/BeautifulSoup/"&gt;open source project&lt;/a&gt; that hundreds of people depend on, which I don't spend enough time working on. So why spend a lot of time improving another project when no one (not even me, really) will appreciate the improvement?

&lt;p&gt;So we bruise on, boats against the current. I'll make the changes I need to make to keep myself and my hostees happy, but NewsBruiser is officially what we call "stable", and has been for three years. I probably won't do any more than small fixes until the Python 1.5 idioms in NewsBruiser start being deprecated.</description>
 <pubDate>Sun, 27 Apr 2008 13:55:50 GMT</pubDate>
 <guid isPermaLink="true">http://www.crummy.com/2008/04/27/0</guid>
</item>
<item>
 <description>I try not to be the sort of person who posts weblog entries about the latest episode of &lt;i&gt;Battlestar Galactica&lt;/i&gt;, but I wanted to give episode writer &lt;a href="http://www.janeespenson.com/"&gt;Jane Espenson&lt;/a&gt; props for her excellent name-check of &lt;a href="http://www.crummy.com/pix/2002/11-england/Temple%20of%20Mithras/01-Me%20at%20the%20Temple%20of%20Mithras.jpg"&gt;the Mithraic mystery cult&lt;/a&gt;.</description>
 <pubDate>Sun, 27 Apr 2008 03:09:14 GMT</pubDate>
 <guid isPermaLink="true">http://www.crummy.com/2008/04/26/2</guid>
</item>
 </channel>
</rss>
