<?xml version="1.0"?>

<rss version="2.0">
  <channel>
    <title>The Space Toast Pages  05 2007</title>
    <link>/stp</link>
    <description>The management is not responsible for lost or stolen towel cards. Should your towel card be lost or stolen, you will no longer have access to towels.</description>
    <language>en</language>
 <generator>blosxom 2.0 (RSS 2.0 mod)</generator>
 <docs>http://blogs.law.harvard.edu/tech/rss</docs>

  <item>
    <title>SGV Artillery Game: Proof of Concept</title>
    <pubDate>Tue, 29 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/29#173</link>
    <guid isPermaLink="true">/stp/173</guid>
    <description>&lt;p&gt;
&lt;/p&gt;

&lt;h2&gt;Issue &lt;AppleScriptIssueNonsense&gt;173&lt;/AppleScriptIssueNonsense&gt;, for the week of &lt;AppleScriptDateNonsense&gt;7/2/2006&lt;/AppleScriptDateNonsense&gt;.&lt;/h2&gt;

&lt;blockquote&gt;Toast Note: What with the site redesign (now complete), three concurrent jobs, and a bad summer cold, the Space Toast Page has been a bit neglected lately.  Still, I have a treat for you this week.  Thanks for waiting.&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;173/artillery.svg&quot;&gt;&lt;img src=&quot;173/artilleryBit.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(If the above opens as plain text, save it to the desktop and drag the file onto your browser.)&lt;/p&gt;

&lt;p&gt;This is a proof of concept for a tile-based &lt;a href=&quot;http://en.wikipedia.org/wiki/Artillery_%28computer_game%29&quot;&gt;artillery game&lt;/a&gt; using Scalable Vector Graphics (&lt;a href=&quot;http://en.wikipedia.org/wiki/SVG&quot;&gt;SVG&lt;/a&gt;) and JavaScript.  SVG was meant to be an open, plugin-free alternative to Flash, but it was a relative failure.  To date, only FireFox and Opera 9 fully support the SVG specifications, with Safari's support still incomplete, and no native support in Internet Explorer.  Adobe has released an SVG viewer plugin for most web browsers, but Adobe's implementation is not fully compatible with standard SVG.  Still, the Safari development team is making fast progress, and Google is reported to be working on a translator for Internet Explorer, so SVG may yet see a true dawn.&lt;/p&gt;

&lt;p&gt;To date, the game has only been tested in FireFox 1.5 for Mac and Safari 2.0.4.  It is buggy, but runs in FireFox.  Safari will draw the initial game state, but does not loop.&lt;/p&gt;

&lt;p&gt;The game runs at a resolution of 700x500 pixels.  In a window smaller than that, FireFox creates scrollbars, which trap the arrow keys.  I don't know a way around this yet.  It should be possible to make the game scale up or down to the size of the window automatically, as SVG is resolution-independent, but that may require redoing the artwork and JavaScript to use percentage measurements, rather than pixel measurements.&lt;/p&gt;

&lt;p&gt;The game artwork was created in &lt;a href=&quot;http://www.inkscape.org&quot;&gt;Inkscape&lt;/a&gt;, an open-source project which is making great strides toward creating an alternative to Adobe Illustrator.  As of version 0.44, Inkscape is not suitable for directly editing graphics in an interactive SVG file.  It has a tendency both to mangle JavaScript and to revert custom group names to generic ones.  Additionally, Inkscape's method of saving object attributes like color and stroke width is to bundle them into one long &lt;tt&gt;style&lt;/tt&gt; element (i.e. &lt;tt&gt;style=&quot;fill:#574736;fill-opacity:1stroke-width:0;stroke-opacity:1&quot;&lt;/tt&gt;) rather than splitting them into individual elements, which are easier to access with JavaScript.  The Inkscape team's progress remains impressive.&lt;/p&gt;

&lt;p&gt;My biggest concern is speed.  The game currently maintains its frame rate by idling for 10 milliseconds between loops, although I think I've come up with a better way to do it -- please refer to the JavaScript's comments.  Although I doubt that FireFox's SVG drawing routines are tuned for game speeds, my biggest worry is the speed of JavaScript execution.  Some parts of the script store game data in JavaScript variables, others assign it to the game's SVG objects -- as whim desired, really.  The latter seems to be considered more &quot;correct,&quot; in terms of modern programmers' fetish for object-based programming, but I'm all but convinced it's terminally slower than the former.  Accessing elements (manipulating the DOM) is also an absolute pain in the ass in JavaScript.  For both reasons, I suggest doing it as little as possible.&lt;/p&gt;

&lt;p&gt;As near as I can tell, this is the most advanced SVG game anyone has written to date -- which is sad, but telling.  Owing to uneven support, sluggish speed and lack of an integrated development environment, I can't see SVG supplanting Flash any time soon.  Still, SVG is not without potential.  Enjoy the game.&lt;/p&gt;

&lt;h2&gt;Further Reading:&lt;/h2&gt;

&lt;p&gt;&lt;i&gt;With some previous JavaScript experience, it took me about a week of spare time to get this far.  The following sources and examples were invaluable.&lt;/i&gt;&lt;/p&gt;

&lt;div class=&quot;IndexLink&quot;&gt;
&lt;p&gt;&lt;a href=&quot;http://www.carto.net/papers/svg/manipulating_svg_with_dom_ecmascript/&quot;&gt;Manipulating SVG Documents Using ECMAScript (Javascript) and the DOM&lt;/a&gt; - The single best source for getting started in interactive SVG.  The over-reliance on mouse clicks for addressing elements in the DOM did set me back a bit though.&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;IndexLink&quot;&gt;
&lt;p&gt;&lt;a href=&quot;http://volity.org/wiki/index.cgi?SVG_Tricks&quot;&gt;SVG Tricks&lt;/a&gt; - Details some of the biggest gotchas of SVG manipulation.  Required reading.&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;IndexLink&quot;&gt;
&lt;p&gt;&lt;a href=&quot;http://jwatt.org/svg/authoring/&quot;&gt;SVG Authoring Guidelines&lt;/a&gt; - Good advice on the gotchas you'll come across later on, from one of the members of the Mozilla SVG Project.&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;IndexLink&quot;&gt;
&lt;p&gt;&lt;a href=&quot;http://www.codedread.com/yastframe.php&quot;&gt;YAST - An SVG/JavaScript Game&lt;/a&gt; - CodeDread's Tetris clone, which was my principle source for reverse engineering.&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;IndexLink&quot;&gt;
&lt;p&gt;&lt;a href=&quot;http://www.kahunanui.com/math.html&quot;&gt;3D Math for Beginners&lt;/a&gt; - The clearest introduction to radians and coordinate manipulation I've come across.  My advice is never to try to use the Wikipedia to learn mathematical concepts: even simple topics there appear to be written by mathematicians for mathematicians.&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;IndexLink&quot;&gt;
&lt;p&gt;&lt;a href=&quot;http://www.croczilla.com/svg/&quot;&gt;Mozilla SVG Resources&lt;/a&gt; - A bit sparse, but a link to a good Tetris clone, and a couple other tidbits.&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;IndexLink&quot;&gt;
&lt;p&gt;&lt;a href=&quot;http://www.zvon.org/xxl/svgReference/Output/el_path.html&quot;&gt;Zvon SVG Reference - Element Path&lt;/a&gt; - Path tag examples, a few other bits.&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;IndexLink&quot;&gt;
&lt;p&gt;&lt;a href=&quot;http://www.w3.org/TR/SVG/paths.html&quot;&gt;W3C: Paths - SVG 1.1&lt;/a&gt; - W3C's official descriptions of the path element.  About as readable as anything W3C publishes, but it may still be useful.&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;IndexLink&quot;&gt;
&lt;p&gt;&lt;a href=&quot;http://www.mozilla.org/projects/svg/&quot;&gt;Mozilla SVG Project&lt;/a&gt; - Official page of the team behind FireFox's SVG implementation.&lt;/p&gt;
&lt;/div&gt;
</description>
  </item>
  <item>
    <title>Review: Pirates of the Caribbean: At World's End</title>
    <pubDate>Tue, 29 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/29#Pirates3</link>
    <guid isPermaLink="true">/stp/film/reviews/Pirates3</guid>
    <description>
&lt;p&gt;
This seems to be the summer of grand refutation for the &quot;more is better&quot; blockbuster.  &lt;i&gt;Spiderman 3&lt;/i&gt;, &lt;i&gt;Shrek the Third&lt;/i&gt;, and the upcoming &lt;i&gt;Live Free or Die Hard&lt;/i&gt; and &lt;i&gt;The Bourne Ultimatum&lt;/i&gt; all seem designed to provide more of everything, but less of what we want.  &lt;i&gt;Pirates of the Caribbean: At World's End&lt;/i&gt; is no exception.
&lt;/p&gt;

&lt;p&gt;
&lt;i&gt;Pirates 3&lt;/i&gt; is a huge, clattering, whirring, blurring, shooting, smashing mashup of everything from the first two.  Everything is bigger, everything is more.  Every character is back.  You've seen boarding scenes, but not like these -- never this huge, never this chaotic.  You've seen naval combat, but you've never seen a ship literally chewed apart by cannon fire.  It's fun while it lasts, and it lasts a long time, so why does it all boil down to a grand feeling of huh, well, all right then?
&lt;/p&gt;

&lt;p&gt;
&lt;i&gt;Pirates 3&lt;/i&gt; is intensely all right, which alone makes it much more worth our moviegoing dollar than most of the summer blockbusters we've sat through.  Most attempts at the kind of guiltless, unapologetic fun of Bruckheimer and Verbinski's &lt;i&gt;Pirates&lt;/i&gt; series fail. It turns out that popcorn movies aren't easy.  &lt;i&gt;Pirates 3&lt;/i&gt; has an extraordinary level of craftsmanship and amazing stats, but it also has a great deal of control -- the most frequently missed ingredient of such blockbusters.  What it does miss are two apparently contradictory elements: focus and chaos.
&lt;/p&gt;

&lt;p&gt;
Picture a movie as a two-dimensional  graph, on which anything can be placed; the only rule is the x-axis, which is time.  Where the movie deviates toward the bottom of the graph, it moves toward focus.  The movie knows what it's doing, why it's doing it, and how it's certain to accomplish it.  This is focus, in movie terms.  &lt;i&gt;Gosford Park&lt;/i&gt; is the most focused  film you will ever see.  It's also one of the most boring experiences you will ever sit through.
&lt;/p&gt;

&lt;p&gt;
At the top of the graph is chaos; here lies invention, awe, the subconscious.  The non-narrative films of Matthew Barney lie entirely at the top of the graph.  Even the apparent dips toward structure -- the bike race in &lt;i&gt;Cremaster 4&lt;/i&gt;, or the opera in &lt;i&gt;Cremaster 5&lt;/i&gt; -- are just feints.  Whatever internal logic or focus the filmmaker may have in mind, it's not presented in the film.
&lt;/p&gt;

&lt;p&gt;
At the bottom of the graph, &lt;i&gt;Pirates 3&lt;/i&gt; suffers, generally on the burdens of being the third of a largely unplanned trilogy.  There are so many characters, so many plotlines.  Betrayals happen so quickly and frequently from all sides that their resonances seems to cancel each other out, like plucking a guitar string from both ends at random.  Who are the most important characters, what do they need to accomplish, and how?  The movie jerks all too frequently toward the bottom of the graph, but never takes the time to make a solid, meaningful drive.
&lt;/p&gt;

&lt;p&gt;
At the top of the graph, only one thing needs to be said: The characters take a trip to the afterlife.  What makes the afterlife unique?  Not very much, really -- same sea and sky, same cinematography.  The best we ever get is Captain Jack Sparrow's private purgatory as a salt flat and a series of heat hallucinations.  The mythical Far East is a series of generic nighttime sets which blow up predictably.  Intangible sexual tension, which obeys its own unknown rules in the movies as it does in real life, is almost entirely absent.  The movie wrongly believes that it's in too much of a hurry to ever just stop, take a breath, and look around.
&lt;/p&gt;

&lt;p&gt;
&lt;i&gt;Pirates of the Caribbean: At World's End&lt;/i&gt; lies almost entirely in the middle of our imaginary graph, delivering  with verve and finesse all of the audience's desires, except for the desire to dream.
&lt;/p&gt;
</description>
  </item>
  <item>
    <title>Sketchbook Marquee</title>
    <pubDate>Sun, 27 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/27#sketchbook</link>
    <guid isPermaLink="true">/stp/sketchbook/sketchbook</guid>
    <description>
&lt;p&gt;
&lt;a href=&quot;http://www.spacetoast.net/STP/sketchbook/sketchbook.jpg&quot;&gt;&lt;img src=&quot;http://www.spacetoast.net/STP/sketchbook/sketchbookbit.png&quot; style=&quot;float: left;&quot;&gt;&lt;/a&gt;Concept: Faux ink and watercolor, pastel colors&lt;br /&gt;
Software: Inkscape&lt;br /&gt;
Download: &lt;a href=&quot;http://www.spacetoast.net/STP/sketchbook/sketchbook.svg&quot;&gt;sketchbook.svg&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;http://www.spacetoast.net/STP/sketchbook/sketchbook.jpg&quot;&gt;
&lt;/p&gt;
</description>
  </item>
  <item>
    <title>Blosxom Marquee</title>
    <pubDate>Sun, 27 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/27#blosxom</link>
    <guid isPermaLink="true">/stp/sketchbook/blosxom</guid>
    <description>
&lt;p&gt;
&lt;a href=&quot;http://www.spacetoast.net/STP/web/blosxom/blosxom.jpg&quot;&gt;&lt;img src=&quot;http://www.spacetoast.net/STP/sketchbook/sketchbookbit.png&quot; style=&quot;float: left;&quot;&gt;&lt;/a&gt;Concept: Visual pun logo, unpackable on closer examination&lt;br /&gt;
Software: Inkscape&lt;br /&gt;
Download: &lt;a href=&quot;http://www.spacetoast.net/STP/web/blosxom/blosxom.svg&quot;&gt;blosxom.svg&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;http://www.spacetoast.net/STP/web/blosxom/blosxom.jpg&quot;&gt;
&lt;/p&gt;
</description>
  </item>
  <item>
    <title>Podcast Marquee</title>
    <pubDate>Sun, 27 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/27#podcast</link>
    <guid isPermaLink="true">/stp/sketchbook/podcast</guid>
    <description>
&lt;p&gt;
&lt;a href=&quot;http://www.spacetoast.net/STP/podcasts/Podcast.jpg&quot;&gt;&lt;img src=&quot;http://www.spacetoast.net/STP/sketchbook/sketchbookbit.png&quot; style=&quot;float: left;&quot;&gt;&lt;/a&gt;Concept: Logo combination in faux 3D&lt;br /&gt;
Software: Inkscape&lt;br /&gt;
Download: &lt;a href=&quot;http://www.spacetoast.net/STP/podcasts/Podcast.svg&quot;&gt;Podcast.svg&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;http://www.spacetoast.net/STP/podcasts/Podcast.jpg&quot;&gt;
&lt;/p&gt;
</description>
  </item>
  <item>
    <title>Podcast: &quot;The Music of Erich Zann&quot; by H. P. Lovecraft</title>
    <pubDate>Tue, 22 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/22#zann</link>
    <guid isPermaLink="true">/stp/podcasts/lovecraft/zann</guid>
    <description>
&lt;p&gt;
&lt;a href=&quot;http://www.spacetoast.net/STP/podcasts/Podcast.jpg&quot;&gt;&lt;img src=&quot;http://www.spacetoast.net/STP/podcasts/Podcastbit.png&quot; style=&quot;float: left;&quot;&gt;&lt;/a&gt;The Space Toast Pages present a free audiobook of H. P. Lovecraft's &quot;The Music of Erich Zann.&quot;  In his impoverished days as a student, a young American makes the acquaintance of an old musician whose singular genius draws him ever closer to the mysteries beyond the wall atop the Rue d'Auseil.  This short story was originally published March 1922 in &lt;i&gt;The National Amateur&lt;/i&gt;, 44, No. 4, pages 38-40. Rasmussen hates his voice, and hopes you will too.&lt;br /&gt;
 &lt;br /&gt;
 Listen to podcast: &lt;a href=&quot;http://www.spacetoast.net/STP/podcasts/lovecraft/TheMusicOfErichZann.mp3&quot;&gt;TheMusicOfErichZann.mp3&lt;/a&gt; &lt;br /&gt;
 [17 minutes, 52 second - 8.2 MB mp3]&lt;br /&gt;
 &lt;br /&gt;
 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/publicdomain/&quot;&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width:0&quot; src=&quot;http://i.creativecommons.org/l/publicdomain/88x31.png&quot; /&gt;&lt;/a&gt;&lt;br/&gt;This 
&lt;span xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; href=&quot;http://purl.org/dc/dcmitype/&quot; rel=&quot;dc:type&quot;&gt;work&lt;/span&gt; is licensed under a &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/publicdomain/&quot;&gt;Creative Commons Public Domain License&lt;/a&gt;.
&lt;/p&gt;
</description>
  </item>
  <item>
    <title>Mid-Coast Preschool Services Development Screening Interview</title>
    <pubDate>Sun, 20 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/20#screening</link>
    <guid isPermaLink="true">/stp/about/screening</guid>
    <description>
&lt;p&gt;
&lt;a href=&quot;http://www.spacetoast.net/STP/about/TheAuthor.jpg&quot;&gt;&lt;img src=&quot;http://www.spacetoast.net/STP/about/TheAuthorbit.png&quot; style=&quot;float: left;&quot;&gt;&lt;/a&gt;&lt;tt&gt;Child's Name:&lt;/tt&gt;	&lt;u&gt;&lt;span style=&quot;color: #000077; font-style: italic;&quot;&gt;Matthew Rasmussen&lt;/span&gt;	&lt;/u&gt; 	&lt;tt&gt;Age&lt;/tt&gt;	&lt;u&gt;&lt;span style=&quot;color: #000077; font-style: italic;&quot;&gt;4yrs 4 mo.&lt;/span&gt;&lt;/u&gt;  &lt;tt&gt;Date&lt;/tt&gt;	&lt;u&gt;&lt;span style=&quot;color: #000077; font-style: italic;&quot;&gt;Dec 6, 1984&lt;/span&gt;&lt;/u&gt;

&lt;p&gt;
&lt;tt&gt;Four Years
&lt;/p&gt;

&lt;p&gt;
&lt;u&gt;Social:&lt;/u&gt; &lt;br /&gt;
 1. How much does your child do for himself in dressing and washing up?&lt;br /&gt;
	[X]	Unbuttons and buttons clothing&lt;br /&gt;
	[X]	Washes hands and face&lt;br /&gt;
	[X]	Toilet trained day and night&lt;br /&gt;
	[X]	Cares for self at toilet&lt;/tt&gt;	&lt;span style=&quot;color: #000077; font-style: italic;&quot;&gt;mostly&lt;/span&gt;&lt;tt&gt; &lt;br /&gt;
	&lt;br /&gt;
2. How much does your child do for himself in eating?&lt;br /&gt;
	[X]	Spreads with knife&lt;/tt&gt;	&lt;span style=&quot;color: #000077; font-style: italic;&quot;&gt;soft things&lt;/span&gt;&lt;tt&gt; &lt;br /&gt;
	&lt;br /&gt;
3. Describe how he/she plays with children.&lt;/tt&gt;	&lt;span style=&quot;color: #000077; font-style: italic;&quot;&gt;gets upset w/ younger children interfering&lt;/span&gt;&lt;tt&gt; &lt;br /&gt;
	[X]	Understands taking turns/sharing&lt;br /&gt;
	[X]	Group play (2-3 children)
&lt;/p&gt;

&lt;p&gt;
&lt;u&gt;Gross Motor:&lt;/u&gt; &lt;br /&gt;
1. What does your child do when playing outside?&lt;/tt&gt;  &lt;span style=&quot;color: #000077; font-style: italic;&quot;&gt;Pretend play - Boats, Little puppy or Sandbox&lt;/span&gt;&lt;tt&gt; &lt;br /&gt;
	[ ]	Bounces and catches large ball&lt;/tt&gt;	&lt;span style=&quot;color: #000077; font-style: italic;&quot;&gt;-no&lt;/span&gt;&lt;tt&gt; &lt;br /&gt;
	[ ]	Pedals tricycle turning corners&lt;/tt&gt;	&lt;span style=&quot;color: #000077; font-style: italic;&quot;&gt;no - big wheel too large - snow on ground now&lt;/span&gt;&lt;tt&gt; &lt;br /&gt;
	[X]	Runs and climbs&lt;br /&gt;
	[X]	Hops on one foot&lt;br /&gt;
	&lt;br /&gt;
 &lt;u&gt;Fine Motor:&lt;/u&gt; &lt;br /&gt;
1. What does your child do with paper and pencil?&lt;br /&gt;
	[X]	Copies +&lt;br /&gt;
	[X]	Copies []&lt;br /&gt;
	&lt;br /&gt;
2. What kinds of toys does your child play with?&lt;br /&gt;
	[X]	Imitates bridge&lt;br /&gt;
	[ ]	Completes 6 piece puzzle&lt;br /&gt;
	[X]	Builds tower of 10 blocks&lt;br /&gt;
	[X]	Cuts with scissors&lt;br /&gt;
	&lt;br /&gt;
Mid-Coast Preschool Services&lt;br /&gt;
Developmental Screening Interview&lt;br /&gt;
Four years&lt;br /&gt;
Page 2
&lt;/p&gt;

&lt;p&gt;
&lt;u&gt;Language/Concepts:&lt;/u&gt; &lt;br /&gt;
1. How much does your child talk?&lt;/tt&gt;	&lt;span style=&quot;color: #000077; font-style: italic;&quot;&gt;very verbal&lt;/span&gt;&lt;tt&gt;
&lt;/p&gt;

&lt;p&gt;
2. Can you give me an example of the kind of sentence he/she uses?	&lt;/tt&gt;&lt;span style=&quot;color: #000077; font-style: italic;&quot;&gt;Noah and Ethan are my very best friends&lt;/span&gt;&lt;tt&gt;
&lt;/p&gt;

&lt;p&gt;
3. How well is he understood by others?&lt;/tt&gt;	&lt;span style=&quot;color: #000077; font-style: italic;&quot;&gt;very well&lt;/span&gt;&lt;tt&gt; &lt;br /&gt;
	[X]	Relates experiences, describes activities&lt;br /&gt;
	[X]	Names 3 Primary colors&lt;br /&gt;
	[X]	Says most sounds except r s th and l&lt;br /&gt;
	[X]	Repeats nursery rhyme or song for others&lt;br /&gt;
	[X]	Understood by strangers&lt;br /&gt;
	&lt;br /&gt;
 &lt;/tt&gt;&lt;u&gt;&lt;span style=&quot;color: #000077; font-style: italic;&quot;&gt;Carolyn Rasmussen&lt;/span&gt;&lt;/u&gt;&lt;tt&gt; &lt;br /&gt;
Interviewer&lt;/tt&gt;
&lt;/p&gt;
</description>
  </item>
  <item>
    <title>Cloaking Blosxom</title>
    <pubDate>Wed, 16 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/16#cloaking</link>
    <guid isPermaLink="true">/stp/web/blosxom/cloaking</guid>
    <description>&lt;p&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.spacetoast.net/STP/web/blosxom/blosxom.jpg&quot;&gt;&lt;img src=&quot;http://www.spacetoast.net/STP/web/blosxom/blosxombit.png&quot; style=&quot;float: left;&quot;&gt;&lt;/a&gt;The correct form of a URL is &lt;i&gt;where/what&lt;/i&gt;, as a web address exists to organize content.  By default, Blosxom serves pages from &lt;a href=&quot;http://www.spacetoast.net/cgi-bin/blosxom.cgi&quot;&gt;www.spacetoast.net/cgi-bin/blosxom.cgi&lt;/a&gt;, a machine-centric &lt;i&gt;where/how&lt;/i&gt; address which breaks the above guideline.  A method was needed to disguise the address of the cgi script.
&lt;/p&gt;

&lt;p&gt;
Blosxom's main site includes &lt;a href=&quot;http://blosxom.sourceforge.net/faq/cgi/hide_cgi_bit.htm&quot;&gt;instructions&lt;/a&gt; for hiding the ...cgi-bin/blosxom.cgi address on an Apache server by means of an .htaccess file -- a local preferences file.  Unfortunately, the instructions did not work for this site.
&lt;/p&gt;

&lt;p&gt;
The first method given for cloaking Blosxom (&lt;a href=&quot;http://blosxom.sourceforge.net/faq/cgi/hide_cgi_bit.htm&quot;&gt;bullet three, step two&lt;/a&gt;) redirected requests for any address in the STP directory to Blosxom, including images, media files and old pages.  For this site, it would have been written thusly:
&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;
RewriteEngine on&lt;br /&gt;
RewriteRule ^STP/?(.*)$ /cgi-bin/blosxom.cgi/$1
&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;
The second given method (bullet three) invoked Blosxom only if a real file could not be found.  It had problems with directories.  Since STP/web/blosxom/ is a real directory, Blosxom did not attempt to create a page there, defaulting to either listing the files in the directory or producing a missing/forbidden error.  Here is how it would have appeared:
&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-d&lt;br /&gt;
RewriteRule ^STP/?(.*)$ blosxom.cgi/$1 [L,QSA]
&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;
Venerable Apache Server's developers are a strange, thundering race who produce suitably impenetrable &lt;a href=&quot;http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html&quot;&gt;documentation&lt;/a&gt;, but after some levelling up the following was arrived at:
&lt;/p&gt;

&lt;p&gt;&lt;tt&gt;
Options +Indexes&lt;br /&gt;
RewriteEngine on&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-f&lt;br /&gt;
RewriteRule ^STP(.*) http://www.spacetoast.net/cgi-bin/blosxom.cgi$1
&lt;/tt&gt;&lt;/p&gt;

&lt;p&gt;
Here is a breakdown.  The first line overrides Laughing Squid's default error when trying to browse a directory without an index file.  The second turns the URL rewriting engine on.  The third tells it when to work -- in this case, when a file can not be found.  (Notice that the missing directory line is now gone.)  The fourth line tells Apache to remove &quot;STP&quot; and send the remainder of the address to the blosxom.cgi script.
&lt;/p&gt;

&lt;p&gt;
This portion of the Blosxom installation took far more &lt;a href=&quot;http://www.spacetoast.net/geekdom&quot;&gt;geekery&lt;/a&gt; than it should have.  Strictly speaking though, it is optional.
&lt;/p&gt;
</description>
  </item>
  <item>
    <title>Notes on Installing Blosxom</title>
    <pubDate>Wed, 16 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/16#installation</link>
    <guid isPermaLink="true">/stp/web/blosxom/installation</guid>
    <description>&lt;p&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.spacetoast.net/STP/web/blosxom/blosxom.jpg&quot;&gt;&lt;img src=&quot;http://www.spacetoast.net/STP/web/blosxom/blosxombit.png&quot; style=&quot;float: left;&quot;&gt;&lt;/a&gt;Blosxom's &lt;a href=&quot;http://blosxom.sourceforge.net/documentation/users/install/dynamic/&quot;&gt;official installation instructions&lt;/a&gt; are concise and straightforward.  Installation required only a standard FTP client and a text editor.  (I used &lt;a href=&quot;http://www.jedit.org/&quot;&gt;JEdit&lt;/a&gt; with the FTP plugin installed.)  The blosxom.cgi script ran as soon as it was installed; SpaceToast.net's ISP, &lt;a href=&quot;http://laughingsquid.net/&quot;&gt;Laughing Squid&lt;/a&gt;, did not require it to be &quot;blessed&quot; first.
&lt;/p&gt;

&lt;p&gt;
Configuration was straightforward.  The settings are stored in the script itself.  Many settings can be left at the defaults.
&lt;/p&gt;

&lt;p&gt;
Fitting the Space Toast Pages' existing layout into the Blosxom engine was equally straightforward.  An old Space Toast Page was sliced into three &quot;flavor&quot; files, the &lt;a href=&quot;http://www.spacetoast.net/STP/head.html&quot;&gt;head.html&lt;/a&gt;, &lt;a href=&quot;http://www.spacetoast.net/STP/story.html&quot;&gt;story.html&lt;/a&gt; and &lt;a href=&quot;http://www.spacetoast.net/STP/foot.html&quot;&gt;foot.html&lt;/a&gt; files, with Blosxom markup tags added where dynamic content should be placed.  (An additional &lt;a href=&quot;http://www.spacetoast.net/STP/date.html&quot;&gt;date.html&lt;/a&gt; flavor file is required.  On the Space Toast Pages it is an empty file, as date stamps are part of the story template.)
&lt;/p&gt;

&lt;p&gt;
Blosxom stores posts as plain text files in the &quot;data directory&quot; and serves them as html files or rss feeds from the &quot;blog directory.&quot;  The Space Toast Pages keep everything in SpaceToast.net/STP.  Surprisingly, this doesn't cause a problem.  Any of the posts on the Space Toast Pages can be accessed as raw text files by simply substituting .txt for .html in the address bar.  The text file is a real file sitting on SpaceToast.net; the html file is a fake created by Blosxom when it's requested.  An .htaccess file makes the ephemeral page look real -- more on that in the next post on cgi cloaking.
&lt;/p&gt;
</description>
  </item>
  <item>
    <title>Why Blosxom?</title>
    <pubDate>Tue, 15 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/15#why</link>
    <guid isPermaLink="true">/stp/web/blosxom/why</guid>
    <description>&lt;p&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;http://www.spacetoast.net/STP/web/blosxom/blosxom.jpg&quot;&gt;&lt;img src=&quot;http://www.spacetoast.net/STP/web/blosxom/blosxombit.png&quot; style=&quot;float: left;&quot;&gt;&lt;/a&gt;I'd been meaning to add blog software to my site for some time, and of all the  &lt;a href=&quot;http://en.wikipedia.org/wiki/List_of_content_management_systems&quot;&gt;content management systems&lt;/a&gt; I looked into, &lt;a href=&quot;http://blosxom.sourceforge.net/&quot;&gt;Blosxom&lt;/a&gt; seemed to best suite my prejudices:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free and open source&lt;/li&gt;
&lt;li&gt;Small and easy on the server&lt;/li&gt;
&lt;li&gt;No annoying .php pages, as discussed in &lt;a href=&quot;http://www.spacetoast.net/STP/163.html&quot;&gt;this rant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;No database -- nothing to yell at me if I make changes with FTP&lt;/li&gt;
&lt;li&gt;Plugins to add missing features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
With Blosxom now up and running, I can report that it delivers all of the above, at the cost of the following:
&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Missing, out of date and incomplete documentation&lt;/li&gt;
&lt;li&gt;Missing, out of date and incomplete plugins&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Blosxom is ancient in web terms, buoyed along by its simplicity of design.  The original site is no longer updated, and while the current developers have mirrored the site to SourceForge, they appear to have done little to update it.  Newer plugins can be found offsite, without documentation or generally even descriptions of what they do.  Plugins listed on the conserved original site are often dead links; mirrors of the plugin code can usually be googled, but any documentation not included in the code itself is often gone.  Blosxom has only basic functionality without plugins.
&lt;/p&gt;

&lt;p&gt;
It is (apparently) possible for an artist with only a modest technical background to install, configure and use Blosxom.  The core blosxom.cgi script is bulletproof, and the original installation instructions are quite good.  Setup is minimal, and there are no dependancies.  An understanding of Perl is not required.
&lt;/p&gt;

&lt;p&gt;
Plugins can be another matter.  Many of the plugin problems fall under a recurrent fallacy of open source: &lt;b&gt;&quot;It's free, so I can be lazy.&quot;&lt;/b&gt;  Certain plugins expect the user to be a Perl hacker, which is counter to the philosophy behind the software.  Others omit documentation, or are abandoned with features incomplete.  Blosxom's stop-and-go development over the years has not helped the problem.  More on the plugins used on the Space Toast Pages will follow, after some notes on basic installation and the problem of &quot;cloaking&quot; the cgi-bin URLs.
&lt;/p&gt;
</description>
  </item>
  <item>
    <title>Junk Mail Art</title>
    <pubDate>Fri, 04 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/04#159</link>
    <guid isPermaLink="true">/stp/159</guid>
    <description>&lt;p&gt;
&lt;/p&gt;

&lt;h2&gt;Issue 159, for the week of &lt;AppleScriptDateNonsense&gt;11/27/2005&lt;/AppleScriptDateNonsense&gt;.&lt;/h2&gt;

&lt;blockquote&gt;Toast Note: Failing to produce a real Space Toast Page tonight, I got playing with junk mail a little after midnight (it's now close to 3AM).  The medium represents an inexhaustible resource, and I've been endeavoring to come up with uses for it lately.  The following pieces are assembled out of what junk mail I've accumulated since the blinds project.  (More on that later.)&lt;/blockquote&gt;

&lt;p&gt;&lt;img SRC=&quot;159/BunnyBig.jpg&quot; height=375 width=500&gt;&lt;/p&gt;

&lt;p&gt;Lem's &lt;a href=&quot;http://www.frozenreality.co.uk/comic/bunny&quot;&gt;Bunny&lt;/a&gt;, from the  web comic of the same name.  It's been submitted in a slightly different form to Bunny's &lt;a href=&quot;http://www.frozenreality.co.uk/comic/warren&quot;&gt;Warren&lt;/a&gt;, the section for fan-made strips.&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;159/MarboxianBig.jpg&quot; height=375 width=500&gt;&lt;/p&gt;

&lt;p&gt;The Marboxian.  It had to be done.&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;159/OpusBig.jpg&quot; height=375 width=500&gt;&lt;/p&gt;

&lt;p&gt;Finally, Berkley Breathed's &lt;a href=&quot;http://www.berkeleybreathed.com&quot;&gt;Opus&lt;/a&gt;, who in my world needs neither introduction nor invitation.&lt;/p&gt;
</description>
  </item>
  <item>
    <title>Finding Oz</title>
    <pubDate>Fri, 04 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/04#141</link>
    <guid isPermaLink="true">/stp/141</guid>
    <description>&lt;p&gt;
&lt;/p&gt;

&lt;h2&gt;Issue 141, for the week of &lt;AppleScriptDateNonsense&gt;6/6/2004&lt;/AppleScriptDateNonsense&gt;.&lt;/h2&gt;

&lt;blockquote&gt;Toast Note: &quot;Marboxian&quot; can now be viewed online through Hash Inc's new &lt;a href=&quot;http://amfilms.hash.com/search/entry.php?entry=795&quot;&gt;A:M Films&lt;/a&gt; web site.  (I'm feeling happy... which is a big deal... for me.)  Also managed to fix the too wide problem with the Space Toast Page's JavaScript.&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0001.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0007.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0017.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0018.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0019.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0025.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0029.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0030.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0035.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0036.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0042.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0045.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0049.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0054.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0056.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0062.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0067.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0072.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0085.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0091.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0093.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0103.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0108.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0124.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0130.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0138.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0146.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0149.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0157.jpg&quot; width=400 height=300&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;141/Island.0166.jpg&quot; width=400 height=300&gt;&lt;/p&gt;
</description>
  </item>
  <item>
    <title>More Human Resources</title>
    <pubDate>Fri, 04 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/04#149</link>
    <guid isPermaLink="true">/stp/149</guid>
    <description>&lt;p&gt;
&lt;/p&gt;

&lt;h2&gt;Issue 149, for the week of &lt;AppleScriptDateNonsense&gt;12/5/2004&lt;/AppleScriptDateNonsense&gt;.&lt;/h2&gt;

&lt;blockquote&gt;Toast Note: Presenting &quot;Human Resources&quot; comic strips 12-25.  (&lt;a href=&quot;145.html&quot;&gt;Click here for Strips 1-11, in issue 145.&lt;/a&gt;)  Medium: Blue ballpoint pen (museum issue) and red magic marker (museum issue) on recycled note pad paper (museum issue), improvised straight edges (museum/personal issue).  Dedicated to the wage slaves of America, and the founder of the feast, &lt;a href=&quot;http://cagle.slate.msn.com/working/041029/catrow.gif&quot;&gt;Curious George&lt;/a&gt;.&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;149/HR-No.gif&quot; height=269 width=550&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;149/HR-Mankind.gif&quot; height=289 width=500&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;149/HR-Spanglish.gif&quot; height=248 width=500&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;149/HR-SirDesk.gif&quot; height=264 width=550&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;149/HR-Gum.gif&quot; height=271 width=500&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;149/HR-Fuscia.gif&quot; height=300 width=500&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;149/HR-vsHR1.gif&quot; height=266 width=550&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;149/HR-vsHR2.gif&quot; height=299 width=500&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;149/HR-AssholesAsylum.gif&quot; height=301 width=650&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;149/HR-CentralAir.gif&quot; height=244 width=500&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;149/HR-Beaver.gif&quot; height=314 width=500&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;149/HR-Declined.gif&quot; height=237 width=550&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;149/HR-MassArt.gif&quot; height=223 width=500&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;149/HR-ScenicCanada.gif&quot; height=291 width=550&gt;&lt;/p&gt;

&lt;p&gt;Updated:  &lt;a href=&quot;145.html&quot;&gt;Click here for Strips 1-11, in issue 145.&lt;/a&gt; &lt;a href=&quot;158.html&quot;&gt;Click here for Strips 26-41, in issue 158.&lt;/a&gt;&lt;/p&gt;
</description>
  </item>
  <item>
    <title>Human Resources</title>
    <pubDate>Fri, 04 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/04#145</link>
    <guid isPermaLink="true">/stp/145</guid>
    <description>&lt;p&gt;
&lt;/p&gt;

&lt;h2&gt;Issue 145, for the week of &lt;AppleScriptDateNonsense&gt;9/12/2004&lt;/AppleScriptDateNonsense&gt;&lt;/h2&gt;

&lt;blockquote&gt;Toast Note: Presenting &quot;Human Resources&quot; comic strips 1-11.  Medium: Blue ballpoint pen (museum issue) and red magic marker (museum issue) on 4.25&quot;x7&quot; recycled note pad paper (museum issue), improvised straight edges (museum/personal issue), clipboard (museum issue).  Dedicated to the wage slaves of America.&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;145/HR-HateYourChildren.gif&quot; height=204 width=600&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;145/HR-Airzooka.gif&quot; height=255 width=512&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;145/HR-lions.gif&quot; height=252 width=600&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;145/HR-FuckOff.gif&quot; height=296 width=500&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;145/HR-masters.gif&quot; height=209 width=600&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;145/HR-homeschooler.gif&quot; height=278 width=550&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;145/HR-Normandy.gif&quot; height=281 width=500&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;145/HR-15s.gif&quot; height=306 width=600&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;145/HR-HighSchool.gif&quot; height=283 width=500&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;145/HR-alcohol.gif&quot; height=244 width=543&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;145/HR-efficiency.gif&quot; height=282 width=600&gt;&lt;/p&gt;

&lt;p&gt;Updated: &lt;a href=&quot;149.html&quot;&gt;Click here for Strips 12-25, in issue 149.&lt;/a&gt;   &lt;a href=&quot;158.html&quot;&gt;Click here for Strips 26-41, in issue 158.&lt;/a&gt;&lt;/p&gt;
</description>
  </item>
  <item>
    <title>DVCam High Resolution Photography</title>
    <pubDate>Fri, 04 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/04#167</link>
    <guid isPermaLink="true">/stp/167</guid>
    <description>&lt;p&gt;
&lt;/p&gt;

&lt;h2&gt;Issue &lt;AppleScriptIssueNonsense&gt;167&lt;/AppleScriptIssueNonsense&gt;, for the week of &lt;AppleScriptDateNonsense&gt;3/5/2006&lt;/AppleScriptDateNonsense&gt;.&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;167/CopleyNight.jpg&quot;&gt;&lt;img src=&quot;167/CopleyNightWee.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&quot;Copley Square at Night&quot; 1415 x 2559 pixels.  890KB jpeg.&lt;/p&gt;

&lt;p&gt;The picture above was stitched together from 108 smaller images using &lt;a href=&quot;http://hugin.sourceforge.net/&quot;&gt;Hugin&lt;/a&gt;, a set of open source panorama creation tools.  Each slice was captured to tape on a consumer digital camcorder by slowly moving the camera back and forth across the scene from top to bottom at full optical zoom.  Once imported and converted to a series of tiffs, the autopano-sift module was run to automatically match neighboring images.  Matching points were input by hand in places where the software could not do so.  The combined image was exported at full resolution with the edge-smoothing &quot;enblend&quot; module enabled.  Cropping and sky completion were performed in Photoshop, and the image shrunk by 50% to eliminate jaggies left over from the camera's original compression.&lt;/p&gt;
</description>
  </item>
  <item>
    <title>Still More Human Resources</title>
    <pubDate>Fri, 04 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/04#158</link>
    <guid isPermaLink="true">/stp/158</guid>
    <description>&lt;p&gt;
&lt;/p&gt;

&lt;h2&gt;Issue 158, for the week of &lt;AppleScriptDateNonsense&gt;10/23/2005&lt;/AppleScriptDateNonsense&gt;.&lt;/h2&gt;

&lt;blockquote&gt;Toast Note: Presenting &quot;Human Resources&quot; comic strips 26-41.  (&lt;a href=&quot;145.html&quot;&gt;Click here for Strips 1-11, in issue 145.&lt;/a&gt;  &lt;a href=&quot;149.html&quot;&gt;Click here for Strips 12-25, in issue 149.&lt;/a&gt;)  Medium: Blue ballpoint pen (museum issue) and red magic marker (museum issue) on recycled note pad paper (museum issue), improvised straight edges (museum/personal issue).  Dedicated once again to the wage slaves of America: &quot;&lt;a href=&quot;http://www.austinchronicle.com/issues/dispatch/2004-10-15/cols_ventura.html&quot;&gt;vagrants amidst the plenty.&lt;/a&gt;&quot;&lt;/blockquote&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;158/CockSuckers.gif&quot; height=228 width=550&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;158/Connor.gif&quot; height=328 width=550&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;158/Discipline.gif&quot; height=258 width=500&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;158/FunctionSpace.gif&quot; height=246 width=500&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;158/JackFrost.gif&quot; height=261 width=550&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;158/MiraclePenis.gif&quot; height=243 width=550&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;158/OutsideHire.gif&quot; height=296 width=600&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;158/PSP.gif&quot; height=238 width=500&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;158/Rats.gif&quot; height=267 width=550&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;158/Styrofoam.gif&quot; height=250 width=550&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;158/Whales.gif&quot; height=235 width=500&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;158/TimedTicket.gif&quot; height=283 width=550&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;158/WorkHere.gif&quot; height=262 width=600&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;158/Porn.gif&quot; height=245 width=500&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;158/Trends.gif&quot; height=267 width=600&gt;&lt;/p&gt;

&lt;p&gt;&lt;img SRC=&quot;158/Dead.gif&quot; height=285 width=550&gt;&lt;/p&gt;
</description>
  </item>
  <item>
    <title>Space Toast 2006 Paint Catalogue</title>
    <pubDate>Fri, 04 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/04#174</link>
    <guid isPermaLink="true">/stp/174</guid>
    <description>&lt;p&gt;
&lt;/p&gt;

&lt;h2&gt;Issue &lt;AppleScriptIssueNonsense&gt;174&lt;/AppleScriptIssueNonsense&gt;, for the week of &lt;AppleScriptDateNonsense&gt;7/9/2006&lt;/AppleScriptDateNonsense&gt;.&lt;/h2&gt;

&lt;p&gt;&lt;img src=&quot;174/SpaceTones.jpg&quot;&gt;&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;174/01.jpg&quot;&gt;
&lt;img src=&quot;174/09.jpg&quot;&gt;
&lt;img src=&quot;174/02.jpg&quot;&gt;
&lt;img src=&quot;174/12.jpg&quot;&gt;
&lt;img src=&quot;174/03.jpg&quot;&gt;
&lt;img src=&quot;174/04.jpg&quot;&gt;
&lt;img src=&quot;174/05.jpg&quot;&gt;
&lt;img src=&quot;174/06.jpg&quot;&gt;
&lt;img src=&quot;174/07.jpg&quot;&gt;
&lt;img src=&quot;174/08.jpg&quot;&gt;
&lt;img src=&quot;174/10.jpg&quot;&gt;
&lt;img src=&quot;174/11.jpg&quot;&gt;
&lt;img src=&quot;174/13.jpg&quot;&gt;
&lt;img src=&quot;174/14.jpg&quot;&gt;
&lt;img src=&quot;174/15.jpg&quot;&gt;
&lt;img src=&quot;174/16.jpg&quot;&gt;
&lt;img src=&quot;174/17.jpg&quot;&gt;
&lt;img src=&quot;174/18.jpg&quot;&gt;
&lt;img src=&quot;174/19.jpg&quot;&gt;
&lt;img src=&quot;174/20.jpg&quot;&gt;
&lt;img src=&quot;174/22.jpg&quot;&gt;
&lt;img src=&quot;174/23.jpg&quot;&gt;
&lt;img src=&quot;174/24.jpg&quot;&gt;
&lt;img src=&quot;174/25.jpg&quot;&gt;
&lt;img src=&quot;174/26.jpg&quot;&gt;
&lt;img src=&quot;174/27.jpg&quot;&gt;
&lt;img src=&quot;174/28.jpg&quot;&gt;
&lt;img src=&quot;174/29.jpg&quot;&gt;
&lt;img src=&quot;174/41.jpg&quot;&gt;
&lt;img src=&quot;174/30.jpg&quot;&gt;
&lt;img src=&quot;174/31.jpg&quot;&gt;
&lt;img src=&quot;174/32.jpg&quot;&gt;
&lt;img src=&quot;174/33.jpg&quot;&gt;
&lt;img src=&quot;174/34.jpg&quot;&gt;
&lt;img src=&quot;174/35.jpg&quot;&gt;
&lt;img src=&quot;174/36.jpg&quot;&gt;
&lt;img src=&quot;174/37.jpg&quot;&gt;
&lt;img src=&quot;174/39.jpg&quot;&gt;
&lt;img src=&quot;174/40.jpg&quot;&gt;
&lt;img src=&quot;174/45.jpg&quot;&gt;
&lt;img src=&quot;174/38.jpg&quot;&gt;
&lt;img src=&quot;174/42.jpg&quot;&gt;
&lt;img src=&quot;174/43.jpg&quot;&gt;
&lt;img src=&quot;174/21.jpg&quot;&gt;
&lt;img src=&quot;174/44.jpg&quot;&gt;
&lt;img src=&quot;174/46.jpg&quot;&gt;
&lt;/p&gt;
</description>
  </item>
  <item>
    <title>A Random English-Sounding Place Name Generator</title>
    <pubDate>Thu, 03 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/03#166</link>
    <guid isPermaLink="true">/stp/166</guid>
    <description>&lt;p&gt;
&lt;/p&gt;

&lt;h2&gt;Issue &lt;AppleScriptIssueNonsense&gt;166&lt;/AppleScriptIssueNonsense&gt;, for the week of &lt;AppleScriptDateNonsense&gt;2/26/2006&lt;/AppleScriptDateNonsense&gt;.&lt;/h2&gt;

&lt;tt&gt;
&lt;p&gt;Here is a funny request:&lt;/p&gt;

&lt;p&gt;I'm launching my new Feudalism inspired game next week, and I need a TON of english&lt;br /&gt;
sounding region names.  Like Woodstown, or Clapshire.&lt;/p&gt;

&lt;p&gt;I can TRY to think of them all myself (I'll need anywhere from 45-50), but the&lt;br /&gt;
prospect baffles my widdle mind.  SO if you have time and inspiration, and feel like&lt;br /&gt;
inventing 4-5 of them FOR me, I'd really appreciate it.&lt;/p&gt;

&lt;p&gt;Thanks (in advance)&lt;/p&gt;

&lt;p&gt;-&lt;a href=&quot;http://www.achainstory.net&quot;&gt;EvilMustache&lt;/a&gt;&lt;/p&gt;
&lt;/tt&gt;

&lt;p&gt;Below are fifteen randomly generated English-sounding place names.  Reload the page for fifteen more.  Enable JavaScript if nothing appears:&lt;/p&gt;

&lt;p&gt;&lt;script language=&quot;JavaScript&quot;&gt; var openers = 'Ab,Ac,Alder,Ash,Ba,Ax,Ayle,Ban,Bel,Baw,Bing,Burg,Bod,Barn,Bux,Bridge,Bridg,Burn,Bos,Can,Chester,Con,Crom,Castle,Carn,Castle,Carn,Dart,Dagen,Don,Dot,Dun,Daw,Eal,Eps,Ep,Gain,Gates,Glaston,Gloss,Glouc,Great,Hack,Hess,Holms,Else,Hemp,Horn,Huns,Hoy,Holy,Hast,Hove,Hy,Il,Ip,Ivy,Lee,Ly,Lei,Let,Lo,Lou,Lon,Long,Long,Marble,Mat,Mex,Market,Liddle,Leather,More,Moor,Morn,Mans,Nail,New,New,New,New,Nor,Nor,Old,Ox,Port,Port,Port,Potter,Potter,Padd,Queen,Queen,Red,Red,Rei,Ring,Roth,Roy,Ram,Saff,Salt,Saw,Sax,Sax,Sea,Sea,Sea,Sea,Staple,Stable,Staple,Stable,Stain,Stock,South,South,South,Staun,Slea,Skip,Stone,Stow,Swin,Tad,Taun,Teigh,Tewk,Tew,Tor,Tott,Trow,Up,Ux,Ver,Wade,Wake,Wo,Woo,Whal,Whale,Whit,Whit,Whit,Wal,Well,Well,Woo,Wey,Wey,Ya,York,Well'; var middlers = 'ton,ton,don,don,-upon-,-on-,ham,ham,ham,ing,ing,ing,-under-,led,led,led,ly,ly,sea,castle,bo,ces,ces,min,le,-le-,en,en,en,en,ix,ford,-over-fast,grove,ce,pat,ri,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,'; var closers = 'don,don,don,ton,ton,ton,ton,ton,ton,ter,ter,ter,ter,bury,burgh,burgh,burgh,shot,ford,ford,ford,ford,ham,ham,ham,ham,ham,bridge,bridge,bridge,bridge,bridge,field,field,field,well,bury,bury,bury,bury,hill,hill,hill, Hill,wood,wood,wood,port,port,port, Port,-on-Sea,es,worth,mere,mere,stoft,stoft,-in-Marsh,hull,market,market, Market, Castle, Castle,-by-the-Sea,ley,shed,shire,shire,mouth,mouth,wood,wood,wood,wood,wood,wich,hurst,minster,nell,nell, Town, Town, Town,thorpe,edge,edge, Heath,heath'; openers = openers.split(&quot;,&quot;); middlers = middlers.split(&quot;,&quot;); closers = closers.split(&quot;,&quot;); var Output = ''; for(var i=0;i&lt;14;i++) { rando = Math.round(Math.random() * (openers.length - 1)); Output = Output + openers[rando]; rando = Math.round(Math.random() * (middlers.length - 1)); Output = Output + middlers[rando]; rando = Math.round(Math.random() * (closers.length - 1)); Output = Output + closers[rando]; Output = Output + ', '; } rando = Math.round(Math.random() * (openers.length - 1)); Output = Output + openers[rando]; rando = Math.round(Math.random() * (middlers.length - 1)); Output = Output + middlers[rando]; rando = Math.round(Math.random() * (closers.length - 1)); Output = Output + closers[rando]; document.write(Output); &lt;/script&gt;&lt;/p&gt;
</description>
  </item>
  <item>
    <title>Clip Splicing Without QuickTime Pro</title>
    <pubDate>Thu, 03 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/03#170</link>
    <guid isPermaLink="true">/stp/170</guid>
    <description>&lt;p&gt;
&lt;/p&gt;

&lt;h2&gt;Issue &lt;AppleScriptIssueNonsense&gt;170&lt;/AppleScriptIssueNonsense&gt;, for the week of &lt;AppleScriptDateNonsense&gt;4/30/2006&lt;/AppleScriptDateNonsense&gt;.&lt;/h2&gt;

&lt;p&gt;QuickTime Pro wouldn't have pissed me off if they hadn't taken features &lt;i&gt;out&lt;/i&gt; of the player to make a paid version.  Add some good stuff, charge me extra for it and keep the basics free -- fine -- but cripple the software and charge me extortion money, and I'm not inclined to pay.  I've been using Macintosh computers for a long time; I remember when it was exciting that a clip could actually &lt;i&gt;maintain synch!&lt;/i&gt;  I remember QuickTime 1, QuickTime 2, and the Waterloo that was QuickTime 3.  Release three was when Apple gave us some nice codecs and tried to dance around the fact that they'd started charging for cut, copy and paste.  It was also when they began nagging us to upgrade to Pro, but that, fortunately, has taken a more subdued tone lately.&lt;/p&gt;

&lt;p&gt;Since I never use the second paragraph of a Space Toast Page to actually set up the essay, let's just take a second to mention that it's Apple's botched QuickTime strategy that has gotten us to 2006 with no serious alternative to Flash.  Full JavaScript-based interactivity, on-the-fly transitions, realtime filters, and unlimited dynamic tracks in any supported video, still, audio, 3D, panorama or sprite format were and remain possible in QuickTime, but without a real track-based development tool (which should have come standard with every Mac) these features remain hollow bullet points.&lt;/p&gt;

&lt;p&gt;Never mind that you can't cut, copy and paste anymore.&lt;/p&gt;

&lt;p&gt;So what are our options?  Let's say, theoretically, that you're working on an animation for a local science museum.  Theoretically, they're going to be running a QuickTime movie to a video projector from within a PowerPoint presentation.  Imagine that it's about Ben Franklin, and it's going to be fantastic.  This is all theoretical, mind you.  Now lets imagine that, because it's going to a video projector, you're working at above DV resolution.  You nursed Premier along for far too long, and when Apple did a trade-over promotion with Final Cut DV you jumped at it.  Here's the problem: Any editing, even splicing clips together or adding a sound track, will cause Final Cut Express (another creatively crippled program) to first scale down to DV resolution (720x480) and then scale back up when you export -- resulting in a noticeable loss of image quality, especially on the kite strings.  (Don't forget how theoretical this all is.)  All you really need is the 21st century equivalent of a Steinbeck, but QuickTime paywalled clip splicing in 1998.&lt;/p&gt;

&lt;p&gt;The solution is to go back before 1998.  QuickTime 2.5 was the final pre-3.0 release and, being freeware, installers can still be found all over the internet.  Download a QuickTime 2.5 installer, choose Custom Install, and install only the MoviePlayer application.  At the risk of talking out of my ass, at 164k, the MoviePlayer application seems to be little more than a pass-through for features wired into QuickTime, which means that MoviePlayer can now do more than it could when it came out.  For instance, it can play .dv clips, or .mov clips compressed with the DV codec, even though digital camcorder support wasn't added to QuickTime until 3.0.&lt;/p&gt;

&lt;p&gt;MoviePlayer can't do everything though.  H.264 (one of what appear to be three different implementations of MPEG-4 video currently in QuickTime) runs only under Mac OS-X, and opening one of its clips in MoviePlayer will return an error -- thought, impressively, not a crash.  &quot;Present Movie&quot; will crash Classic however; don't use it.  As a Classic application, MoviePlayer is limited to QuickTime Classic's codecs: Animation, BMP, Cinepak, Component Video, DV NTSC, DV PAL, DVC Pro PAL, Graphics, H.261, H.263, Intel Indeo Video 5, Motion JPEG-A, Motion JPEG-B, MPEG-4 Video, none, Photo - JPEG, Planar RGB, PNG, Sorenson Video, Sorenson Video 3, TGA, TIFF, and Video.&lt;/p&gt;

&lt;p&gt;MoviePlayer has the old-fashioned design philosophy of a product without a marketing strategy.  It's remarkably intuitive by today's standards.  Drag on the timeline with the shift key to select part or all of a clip; a black bar appears to indicate how much you've selected.  You can cut, copy, paste, delete, or drag and drop to your heart's content.  (Large clips sometimes return low memory errors with cut, copy and paste -- dragging and dropping seems to avoid this problem entirely.)  &quot;Extract Tracks...&quot;, in the Edit menu, creates a new clip with either the audio or video track.  Tracks may be deleted individually, or temporarily turned off and on in the Edit menu as well.  Choosing &quot;Get Info&quot; under the Movie menu and selecting &quot;Time&quot; from the &quot;Files&quot; popup menu will allow you to view timecodes.&lt;/p&gt;

&lt;p&gt;To get back to that theoretical Ben Franklin animation, pretend that you have spliced together a final cut of the animation and need to replace the scratch track of the live actor's lines with a sound effects track mixed in Audacity or Final Cut Express.  Open the sound clip you've exported from either program, select it all and copy it.  Go back to the animation clip, choose &quot;Delete Tracks...&quot;, delete the current sound track, and click on the first frame of the clip.  Hold down option and go up to the Edit menu.  The &quot;Paste&quot; menu item has become &quot;Add,&quot; which will allow you to paste the sound track under the video.  Selecting &quot;Paste&quot; without holding down the option key will perform the default insert operation, moving all the video out of the way and inserting black video for the length of the audio clip.  It's weird, but it makes a kind of dumb sense.&lt;/p&gt;

&lt;p&gt;We have successfully edited a QuickTime clip, and we have two options with which to save it.&lt;/p&gt;

&lt;p&gt;The File menu's familiar &quot;Save As...&quot; includes two choices of its own.  &quot;Save normally (allowing dependancies)&quot; will display a much smaller file size than &quot;Make movie self-contained.&quot;  Chances are the latter is your best bet though.  &quot;Make movie self-contained&quot; will copy all of the track data you've added to the clip into one file, rather than looking up all of the individual files you spliced together to make the clip.  When you select &quot;Make movie self-contained&quot; a new option will ungrey: &quot;Playable on non-Apple computers.&quot;  Select this.  QuickTime used to default to saving movie data into a &quot;MooV&quot; resource alongside the data fork, rather than into the data fork itself; non-Apple systems never used the split resource/data fork file structure, and see only an empty or corrupt movie file.  Use the &quot;Playable on non-Apple computers&quot; option to avoid this problem.  The advantage of &quot;Save As...&quot; with &quot;Make movie self-contained&quot; and &quot;Playable on non-Apple computers&quot; is that the resultant movie will be &lt;i&gt;exactly&lt;/i&gt; the data that you fed into it.  Nothing is recompressed.  There is no digital generation loss (and yes, there is such a thing).&lt;/p&gt;

&lt;p&gt;What if you need to recompress the movie though?  Suppose you need a 320x240 version compressed for the web.  What if the computer playing the animation has too slow a hard drive to keep up with the Photo-JPEG codec at maximum quality?  Beneath &quot;Save As...&quot; is an &quot;Export...&quot; option.  This brings up the standard QuickTime export dialogue, from which you can export to non-QuickTime formats, as well as change the frame size, frame rate, sound and video codecs, and streaming optimizations.&lt;/p&gt;

&lt;p&gt;As usual, I've gone on for far too long with a very simple idea, and one week's Space Toast Page has become another's.  If you can run Classic, get MoviePlayer.  It's a pawn shop Swiss army knife with a rusty corkscrew and the initials P.B.R. carved into the handle, but it still basically works.  If you want a Big Message, which I'm sure you don't, onward is not always upward, and Neil Young can kick it out better in nine days than John Melencamp could in his entire wasted career.  Thank you for reading.&lt;/p&gt;
</description>
  </item>
  <item>
    <title>Build Notes: Junk Mail Blinds</title>
    <pubDate>Thu, 03 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/03#160</link>
    <guid isPermaLink="true">/stp/160</guid>
    <description>&lt;p&gt;
&lt;/p&gt;

&lt;h2&gt;&lt;center&gt;Issue 160, for the week of &lt;AppleScriptDateNonsense&gt;12/4/2005&lt;/AppleScriptDateNonsense&gt;.&lt;/center&gt;&lt;/h2&gt;

&lt;p&gt; &lt;/p&gt;

&lt;center&gt;&lt;img SRC=&quot;160/Intro.jpg&quot; height=240 width=320&gt;&lt;/center&gt;

&lt;p&gt;Boring Preface:  There's this idea of &quot;junk chic&quot; floating around that I'm vaguely attracted to.  Most of it, however, seems to be concerned with buying old crap at antiques stores and putting a new coat of paint on it.  What I'm interested in is more finding uses for the reasonably well-made things we're expected to throw away.  Somehow I'm not sure if making things yourself will ever come back into the mainstream; there's just too much money to be made selling us everything.  Maybe that's the point.  Free software, free instructions, free knowledge... There's a growing, silent acknowledgment that there needs to be a non-commercial sphere to life, distinct from religion and opposition, and this nebulous idea of &quot;family&quot; our politicians keep pounding us with.  Not everything is about money.  The irony is that the people who sent me the raw material for this project did so in the hope of making money from me.  And they can screw.&lt;/p&gt;

&lt;p&gt;Theory:  By affixing strips of junk mail to an existing set of venetian blinds, one can drastically reduce the amount of light allowed through without losing the ability to raise and lower the blinds.&lt;/p&gt;

&lt;p&gt;Get:  In my case, about three months' worth of junk mail, but your mileage will vary.  Your trusty roll of duct tape (color to suit).  Two rolls of scotch tape.  A ruler.  A spool of uninsulated wire.  A pair of needle-nosed pliers.  A thumbtack.  Space to work.&lt;/p&gt;

&lt;p&gt;Step i:  Measure the width of your window.  The real width.  Don't leave a full inch on either side like those goddamn blinds we're covering over.  Leave maybe a couple of millimeters.  (Dark!  We must have dark!)&lt;/p&gt;

&lt;p&gt;Step ii:  Tape off on your workspace a piece of real estate (in my case, floor) measuring the same width as your window and six inches tall.  (Or three floorboards, if they're each two inches tall.)  This will serve as a template for building the sections.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Stepiii.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Stepiiibit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step iii:  Next we'll need to figure out where to affix the hangers that will connect the junk mail blinds to the existing ones.  We will eventually be bending wire into a set of three connector pieces, one for each of the three strings running down through the original blinds.  For now, grab your ruler and measure the distance between the edge of the window and the nearest of these strings.  On your template, go in the measured distance from either side and make tape marks.  Also, find the center of the template and mark it with tape as well.  I think we're ready to start building a section.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step1.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step1bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 1:   Find a nice piece of junk mail (you'll start talking like this) -- maybe a credit card letter with your name misspelled, or a useless &quot;newsletter&quot; from your predatory health insurance company.  Lane Bryant sure likes sending me fliers now that they've decided I'm female.  Whatever you have handy.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step2.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step2bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 2:  Fold the piece of junk mail upward at the bottom (I recommend using an existing fold) and align it with the bottom left corner of your workspace.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step3.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step3bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 3:  Tape the folded portion down with scotch tape.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step4.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step4bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 4:  Fold the top of your sheet of junk mail down so that it fits within your six-inch template.  Chances are it doesn't have another crease already made at the six inch mark, so use your ruler to make the fold yourself.&lt;/p&gt;

&lt;p&gt;Step 5:  Tape that bad boy down.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step6.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step6bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 6:  Grab another piece of junk mail.  Place it under the previous piece so that they're overlapping by an inch or two.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step7.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step7bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 7:  Fold the bottom up so that it's sort of &quot;eating&quot; the previous piece.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step8.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step8bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 8:  Tape the folded part to the old piece and to itself.  Be sure that the corners are taped thoroughly.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/AnnoyingTip.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/AnnoyingTipbit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Annoying Tip:  Kinda thin?  Not sure it's going to block enough light?  I'm sure you've got a lot of little pieces of junk mail floating around.  Why not tape one of them inside the fold before taping it down?  Envelopes work great for this -- they're two-ply.  You can even stick smaller annoying things like fake credit cards inside the envelopes before taping them down.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step9.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step9bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 9:  Grab your ruler again and fold the top down.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step10.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step10bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 10:  Tape that muthah down, and to the previous piece.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step11.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step11bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 11:  Repeat steps 6 through 10 until the section fills your template.  You now have a strip of junk mail six inches tall, and as wide as your window.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step12.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step12bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 12:  Enjoy a good pull of Endurance Ale.  You've earned it!  (It's called Endurance for a reason, but it grows on you.)&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step13.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step13bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 13:  Flip the section over.  You'll notice that all the taping has been done on the reverse, keeping it out of sight.  Just because we're making things out of junk mail doesn't mean we can't pay attention to aesthetics.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step14.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step14bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 14:  Grab your duct tape.  We'll be using the duct tape to add strength where the new blinds connect to the old ones.  It'll also impose some kind of order on the appearance of the blinds, which is probably just as well.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step15.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step15bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 15:  Rip off a strip between half again and twice the height of the section.  That'll be about ten inches, if you want to measure it.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step16.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step16bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 16:  Use the marks you made in step iii to stick the tape down where it will be needed to match up with the string.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step17.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step17bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 17:  Flip the section back over.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step18.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step18bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 18:  Fold the ends of the strip of duct tape over and stick them down.  Remember, we don't care too much what this side looks like.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step19.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step19bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 19:  Repeat steps 13 through 18, placing a strip of duct tape for each of the three marks we made in step iii.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step20.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step20bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 20:  Grab your thumbtack.  On each of the strips of duct tape, make two holes about a quarter of an inch apart and one inch from the top of the section.  I recommend cutting out a template, to save you from having to measure the position of the holes every time.  Make sure the holes go all the way through, and are wide enough to get a piece of wire through.  Don't stab yourself.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step21.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step21bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 21:  Grab your spool of wire.  Straighten a bit of it out to work with.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step22.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step22bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 22:  Using your ruler and pliers, snip off three pieces of wire each measuring four inches long.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step23.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step23bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 23:  Center a piece of wire in your pliers.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step24.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step24bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 24:  Fold it in half, into a long horseshoe shape.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step25.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step25bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 25:  Fold the wire at a right angle, half an inch from the pronged end.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step26.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step26bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 26:  Repeat steps 23 through 25 for the other two pieces of wire.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step27.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step27bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 27:  Twist your venetian blinds shut so that the slats are angled down toward you.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step28.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step28bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 28:  Insert the first of the bent pieces of wire around the first string on the inside of your blinds.  We want it to hang so that the prongs are facing inward.&lt;/p&gt;

&lt;p&gt;Step 29:  Repeat step 28 for the other two pieces of wire.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step30.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step30bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 30:  Bring the blind section over to your window and find the first set of holes in the top of the duct tape.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step31.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step31bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 31:  Place the first prong through the first hole.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step32.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step32bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 32:  Place the second prong through the second hole.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step33.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step33bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 33:  Reach around behind the section and bend the prongs up, flush with the back of it.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step34.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step34bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 34:  Repeat steps 31 through 33 for the other two pieces of wire.  The new junk mail blind section is officially hung.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step35.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step35bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 35:  Tear off three small squares of duct tape.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;160/Step36.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Step36bit.jpg&quot; height=113 width=150&gt;&lt;/a&gt;Step 36:  Stick each over one of the exposed sets of prongs on the back.  This is to keep the ends of the wire from catching on anything.  Squeeze tight.&lt;/p&gt;

&lt;p&gt;Step 37:  Repeat all numbered steps until the blinds are complete.&lt;/p&gt;

&lt;p&gt;Criticisms:  I've noticed two things, since completing the blinds, which deserve attention.  First, the mechanism in the blinds, not being designed to hold this much weight, has begun to squeak a bit.  A dab of electric shaver oil or graphite would probably take care of the problem, but I haven't bothered to try yet.  The second concern is a tendency I've noticed for the lowermost sections to catch momentarily while nearing the bottom.  Why this should be an issue near the bottom but not the top I still don't know.  I've found that the problem can be reduced by bending the wire hangers outward on the bottom-most sections, so that the blind section sits farther out from the original slats.&lt;/p&gt;

&lt;p&gt;Final Thoughts:  It took me about twenty minutes to do a section, once I got all of the experimenting out of the way.  I did one or two sections a night, which made for some relaxing non-computer work before bed.  (It was kinda nice.)  I'm still not totally satisfied with the hanging scheme (bent wire) but I haven't come up with anything better or easier.  All things considered, I'm pretty happy.&lt;/p&gt;

&lt;center&gt;&lt;a href=&quot;160/Final.jpg&quot; target=_new&gt;&lt;img SRC=&quot;160/Finalbit.jpg&quot; height=300 width=100&gt;&lt;/a&gt;&lt;/center&gt;
</description>
  </item>
  <item>
    <title>Myst V and the Way Forward</title>
    <pubDate>Thu, 03 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/03#165</link>
    <guid isPermaLink="true">/stp/165</guid>
    <description>&lt;p&gt;
&lt;/p&gt;

&lt;h2&gt;Issue &lt;AppleScriptIssueNonsense&gt;165&lt;/AppleScriptIssueNonsense&gt;, for the week of &lt;AppleScriptDateNonsense&gt;2/19/2006&lt;/AppleScriptDateNonsense&gt;.&lt;/h2&gt;

&lt;p&gt;Literally three steps in, I'm defeated by a low gate.  I'm looking down at it.  I could step over it.  Still I'm trapped.&lt;/p&gt;

&lt;p&gt;I have chosen to begin this essay with a digression.&lt;/p&gt;

&lt;p&gt;You know those programs that change the screen resolution when they go to full-screen, and then tell the other applications that they've done it?  It's a kind of a slapdash Mac port thing.  You quit, and every window on the screen has been squished down to an absurdly wee size and moved to the top left corner of the screen.  Myst V is like that.&lt;/p&gt;

&lt;p&gt;Ultimately, that's not the point of this essay, though.&lt;/p&gt;

&lt;p&gt;As with Myst [I], the exploded box of which hangs on my wall for inspiration and which I can still play under Classic, the default navigation system of Myst V becomes bothersome after a few minutes.  You're rarely quite looking where you want to be, and yet with the Obsidian/Burn:Cycle-style smoothly eased tracking shots between nodes replacing Myst's hard cuts and simple transitions, you often find yourself looking at the interesting object during movement, only to have your camera jerked away from it as the move completes.  Nodes that would appear to give access to nearby areas are often a few feet from the ones that actually do.  Myst V, of course, adds two additional movement styles, a free movement mode that doesn't appear to support game pads, and a &quot;Classic Plus&quot; which slaves the view rotation to the mouse cursor -- something not to be attempted without a truly boss frame rate and/or a love of vertigo.&lt;/p&gt;

&lt;p&gt;Still, we haven't reached our ultimate point.&lt;/p&gt;

&lt;p&gt;The engine underlying Myst V is unique to the in-storyline Myst franchise.  Instead of prerendered stills (Myst, Riven) or prerendered VR panoramas (Myst III, Myst IV), the game is rendered in realtime 3D.  The appeal of this method for the developers is obvious.  Rather than setting up shots, rendering, tweaking, rerendering, overlaying animations, and then having to move to a wholly separate software system to construct the game play, development goes straight from modeling to game engine in one step, assisted by a glut of available off the shelf software.  Besides that, it just feels more modern -- an unremarked upon motivation among middle-aged tech developers like the Miller brothers.&lt;/p&gt;

&lt;p&gt;The trouble is, it's not better.  Compare the following screen shots:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;165/Riven.jpg&quot;&gt;&lt;img src=&quot;165/RivenSmall.jpg&quot; width=200 height=129&gt;&lt;/a&gt; &lt;a href=&quot;165/MystV.jpg&quot;&gt;&lt;img src=&quot;165/MystVSmall.jpg&quot; width=200 height=129&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Even with the best video card, which you don't have, and all the light baking and optimization tricks in the book, the graphical quality of a frame rendered in one 30th of a second is never going to achieve the richness of a frame rendered over half an hour.  The underlying models and textures must be smaller.  The lighting system must be simpler.  Even with a compressed color palette and knife-sharp shadows (not entirely undesirable for direct sunlight), not to mention eight years between them, the Riven screenshot is more realistic than that of Myst V.  The objects are more complex and more numerous, the textures are high enough quality to be invisible, and everything that should cast a shadow does.&lt;/p&gt;

&lt;p&gt;Of course, the quality of a still image isn't the end of realism, which is where we uncover one of the most compelling reasons for the move to realtime 3D: Myst V moves.  Look at the water in the game's reversed wood between the worlds starting point, and even on low texture quality you'll see ripples.  Moving ripples.  No more strange, frozen glass oceans.  Stand still when you arrive on the beach.  The clouds move slowly through the sky.  The waves roll in and fall away.  Birds flit through the sky (though most seem to be part of the static landscape).  The sense of immersion is heightened, until, of course, you start wishing your video card could smooth those jaggies without the frame rate tanking, you notice that the smoothness of objects' faces becomes angular at their edges, and you're just plain stopped while floating along like Professor Xavier by a tumble of small, ordinarily fun to climb rocks.&lt;/p&gt;

&lt;p&gt;It's still not our point, but it's worth mentioning that it's best to make an insurmountable obstacle insurmountable.  Personally, I can also climb a ladder with one hand, wade, and swim -- not that it matters.&lt;/p&gt;

&lt;p&gt;We do in fact have a point, and we're getting dangerously close to it.&lt;/p&gt;

&lt;p&gt;Myst V, while perhaps as good a puzzle game as its predecessors, has abandoned its roots.  This, in itself, would not be a bad thing if the result were actually worth the change.&lt;/p&gt;

&lt;p&gt;Let's review what Myst V has gained:&lt;/p&gt;

&lt;ul&gt;

&lt;li&gt;Unlimited panning.  Can also be achieved in prerendered graphics using VR panoramas, as with Obsidian, Myst III, Myst IV.&lt;/li&gt;

&lt;li&gt;Animated tracking shots between nodes.  Unnecessary.  Our brains understand a &quot;cut&quot; -- it's that blink we do every time we look from one object to another.  The novelty wears off quickly, as game play is slowed by it.&lt;/li&gt;

&lt;li&gt;Free movement.  Draws attention to the character's limitations.  Movement is still on a rail, we're simply allowed to deviate slightly from it.  Not essential to this genre.&lt;/li&gt;

&lt;li&gt;Dynamic lighting effects.  Underutilized.  Aside from the hard shadows cast by moving objects, most of Myst V's lighting appears to be painted on.&lt;/li&gt;

&lt;li&gt;Hardware acceleration.  Modern video cards can do a lot.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Now let's review what Myst V has lost:&lt;/p&gt;

&lt;ul&gt;

&lt;li&gt;Prerendered graphics.  Visually superior to realtime 3D graphics in richness and complexity.&lt;/li&gt;

&lt;li&gt;Video.  Those motion-captured 3D people with actors' faces look pretty creepy, and the cloth keeps intersecting the legs.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Myst V is the last Myst game, but it need not be the death knell of the genre.  There is room to move forward with the graphical adventure, while learning from the mistakes of Myst V.  Realtime 3D graphics simply aren't good enough.  Is there a better way?  I would suggest that there is.&lt;/p&gt;

&lt;p&gt;First, though, review &lt;a href=&quot;http://media.ubi.com/emea/myst5/videos/Nolo320_.mov&quot;&gt;this QuickTime VR panorama&lt;/a&gt; of a node in Myst V.  The panning doesn't quite feel right.  I suspect that there are two reasons for this, one trivial and the other quite complex.&lt;/p&gt;

&lt;p&gt;Regarding the simpler problem, real life lenses are rarely perfectly round.  They tend to flatten in the middle, creating lower distortion near the center of the image and higher distortion toward the edges.  We've come to expect this.  VR panoramas, which typically distort and display a portion of a single 360 degree image, are, I suspect, correcting for an idealized lens.  Distortion is lowest at the center and increases toward the edges at a rate that is mathematically &quot;right,&quot; but less complex than that of a typical lens.  If I'm right, this should be easy enough to overcome by tweaking the lens correction algorithms.&lt;/p&gt;

&lt;p&gt;The second problem is more complex, and it has to do with the way cameras are actually manipulated.  Photographing panoramas requires the purchase or construction of a custom camera mount which places the lens directly in the center of rotation.  This is unusual.  Usually, the camera is mounted at its base, placing the lens above and in front of its center of rotation.  Panning thus introduces a small movement to the camera's view position in addition to its orientation.  Your eyes are likewise mounted above and in front of their center of rotation.  The effect is most noticeable when objects are close-up.  Close one eye and hold a pen up in front of you.  Turn your head left and right.  You can see different things behind the pen based on where your head is turned.  You expect to.  It's part of your sense of depth, and it's something that VR panoramas completely fail to reproduce.&lt;/p&gt;

&lt;p&gt;Here we have arrived at our point.&lt;/p&gt;

&lt;p&gt;I propose that a slightly novel game engine can overcome the limitations of both VR panoramas and realtime 3D in the graphical adventure genre.  We can regain the detail of prerendered scenery and filmed actors without sacrificing the ability to animate portions or all of a given scene.  If we accept the primacy of the node to the genre, discarding arguably unnecessary tracking shot transitions and &quot;free&quot; movement modes, we can consider a new style of node construction I unceremoniously dub the Dented Ball.&lt;/p&gt;

&lt;p&gt;The Dented Ball is a real ball, or rather a very close approximation made up of several hundred triangles.  Inside it lies a virtual camera, slightly above and forward of center.  On the inside of the ball is mapped a high resolution image of a prerendered scene.  Looking outward, the virtual camera records a portion of the scene, corrects for lens effects, and sends the resultant view to the player.  This ball is our basic game node.&lt;/p&gt;

&lt;p&gt;The scenery images, not to mention the tiny amount of data needed to construct this particular ball's geometry, are loaded from the game DVD while the player is at a nearby node.  Priority is given to the nodes directly connected to the previously occupied node, with priority further given to those portions of the landscape that the player would see first upon stepping into a given node from the previous.  Nodes far behind are discarded, and reloaded only when the player nears them again.  The goal is to minimize or eliminate waiting time between nodes.&lt;/p&gt;

&lt;p&gt;Animation such as waves, birds, and even people may be added to the scene by mapping movie clips, rather than still images, to a portion or all of the inside of the Dented Ball.  Modern video compression algorithms nearly half the amount of data that must be pulled off the game DVD to equal the image quality of a standard movie DVD, and modern computer DVD drives are capable of reading data much faster than is necessary to play movies compressed the old fashioned way.  By feeding movie clips into the priority system above, waiting time between nodes can still be kept to a minimum.  In addition, a standardized set of tools for fading, overlaying and cutting between still images should be integrated to allow for such simple effects as lightning flashes and the slow dimming of the sun as it goes behind a cloud, without requiring a large and unwieldy video clip.&lt;/p&gt;

&lt;p&gt;In an ideal scene, there are no objects near the camera.  (This is of course unlikely.)  The edges of the ball on which the scene is painted are too far away from the viewer for the slight position offset of the camera to be noticeable.  This would be a scene of the player floating high in the air -- on the whole not very useful.&lt;/p&gt;

&lt;p&gt;Nearby objects are the reason we call this the Dented Ball.  Imagine that the player is standing near the corner of a wall.  Panning right, more of the right side of the wall becomes visible, panning left, the opposite.  In order to simulate this effect, the ball itself has been dented inward, toward the camera, so that its edge matches up with the wall's corner in the prerendered scene.  From the outside, the ball would appear to have a large dent in it, hence our name for it.  Because the camera offset is most noticeable when objects are close, gradually falling off to imperceptibility as objects move farther away, the actual dent of a perfectly right-angled wall in the ball would not have straight edges, but would in fact taper out at an increasingly gentle angle before plunging smoothly back into the outside surface of the ball.&lt;/p&gt;

&lt;p&gt;Despite our name though, dents aren't the only method we'll need to produce proper foreground/background separation while panning.  (We should just go ahead and call this separation &quot;parallax effects.&quot;)  Reference the pen with one eye closed again.  It, like a blade of grass, glasses on a nearby table, and any number of other real world objects exhibit a complete separation from their background.  In such cases we'll need to slice the ball into concentric layers, like an onion, and map a series of cutout portions of the scene onto each.  There will be times when we'll need to combine slices with dents.  Depth maps, grayscale images representing simply how far any point in a given image is from the camera, can be rendered from any 3D animation package, and can be used to assist an automated workflow for making these dent and layering decisions.&lt;/p&gt;

&lt;p&gt;The Dented Ball allows us to create a richer visual experience, both static and in motion, than any previously conceived graphic adventure engine.  By repurposing modern video cards to draw concentric near-3D nodes, we find a new way to leverage the technologies users and game developers already possess.  We unify the rich legacy of graphic adventure games like Myst V while discarding our detrimental modern preoccupations.  In doing so, we glimpse a third path though the complexities of contemporary game design and begin once again simply to explore.&lt;/p&gt;
</description>
  </item>
  <item>
    <title>Build Notes: Tape Case Bike Light</title>
    <pubDate>Thu, 03 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/03#177</link>
    <guid isPermaLink="true">/stp/177</guid>
    <description>&lt;p&gt;
&lt;/p&gt;

&lt;h2&gt;Issue &lt;AppleScriptIssueNonsense&gt;177&lt;/AppleScriptIssueNonsense&gt;, for the week of &lt;AppleScriptDateNonsense&gt;8/27/2006&lt;/AppleScriptDateNonsense&gt;.&lt;/h2&gt;

&lt;blockquote&gt;Toast Note: Happy birthday to my sister Becky, who is celebrating in India.  Wow.  That is way cooler than a Cuisinart.&lt;/blockquote&gt;

&lt;p&gt;&lt;img src=&quot;177/frontspiece.jpg&quot;&gt;&lt;/p&gt;

&lt;p&gt;Boring Preface:  Massachusetts state law requires a bike to have a forward light while riding at night.  Commuting home on the city's lit streets, I'm less worried about seeing the road than about other people seeing me.  The cheapest bike lights seem to run about $20, so I'll make that the maximum budget for this project.  The light needs to be easy to attach and remove, durable enough to throw into a shoulder bag, and easy to turn on and off.  I'd also like it to double as a flashlight the next time a transformer blows up in Central Square.&lt;/p&gt;

&lt;p&gt;Theory:  The front reflector seems to be the most logical place to attach the light to the bike, though I don't want to obscure the reflector itself.  It should be possible to build a bike light inside an old audiocassette case using two AA batteries, a pack of magnets, and a bright white LED upgrade for a mini Maglite.  The light would clip around the bike's front reflector.  This project should cost less than $20.&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/get.jpg&quot;&gt;&lt;img src=&quot;177/getbit.jpg&quot;&gt;&lt;/a&gt;
Get:
&lt;ul&gt;
&lt;li&gt;An audio tape case&lt;/li&gt;
&lt;li&gt;A three-LED upgrade kit for a mini Maglite&lt;/li&gt;
&lt;li&gt;Eight (8) round 3/4&quot; ceramic magnets&lt;/li&gt;
&lt;li&gt;Two (2) AA batteries&lt;/li&gt;
&lt;li&gt;Some thin insulated wire&lt;/li&gt;
&lt;li&gt;A few scraps of aluminum foil&lt;/li&gt;
&lt;li&gt;Electrical tape&lt;/li&gt;
&lt;li&gt;A small tube of super glue&lt;/li&gt;
&lt;li&gt;A pair of needle-nosed pliers&lt;/li&gt;
&lt;li&gt;A utility knife&lt;/li&gt;
&lt;li&gt;A ruler or measuring tape&lt;/li&gt;
&lt;li&gt;Space to work&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Make sure that the cassette case isn't one of the newer &quot;slim&quot; cases, but the regular kind.  The mini Maglite upgrade kits consist of a replacement reflector housing three bright white LEDs wired into a resistor correctly sized for two AA batteries.  They retail for about $11.  You could certainly use your own LEDs (I read that Christmas lights are a cheap way to get them) but I don't know nearly enough of a damn about electricity to figure out what size resistor to use -- just that I need one to keep from blowing the LEDs out.  Three-quarter inch ceramic (black) magnets usually come in packs of eight at the hardware or hobby store, and go for about $1.25.  They're fun to play with.  If you don't have a little spool of insulated wire lying around the house, I guarantee you have a broken stereo in the basement you can pillage.  Utility knives seem to have been renamed &quot;box cutters&quot; since I was a kid, but I refuse to let the terrorists win.
&lt;/p&gt;

&lt;p&gt;
Step A:  Measure the width of your front reflector.  These instructions are written for a reflector about 2 and 1/8 inches wide.  From what I can tell from a cursory look around Porter Square, this kind is fairly common.  Some of the newer bikes have smaller reflectors (why?), which should work fine for our project.  A larger reflector would require a larger case -- maybe a VHS-C tape case.  Everything jams in pretty snugly with this design as is, so if your reflector is a different size you'll have to play jazz a bit.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/01.jpg&quot;&gt;&lt;img src=&quot;177/01bit.jpg&quot;&gt;&lt;/a&gt;
Step 1: Take the tape and label out of your audiocassette case and throw them away.  Your crappy Sony deck hasn't worked for most of a decade now anyway.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/02.jpg&quot;&gt;&lt;img src=&quot;177/02bit.jpg&quot;&gt;&lt;/a&gt;
Step 2: Cut/snap the two prongs out of the tape case.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/03.jpg&quot;&gt;&lt;img src=&quot;177/03bit.jpg&quot;&gt;&lt;/a&gt;
Step 3: Measure the width of the bracket on the back of your reflector -- the part that connects it to the bike.  Mine is 3/4 of an inch wide.  The metal piece will probably be a little bit narrower than the part it screws into.  If it is, just take the wider of the two measurements.  Like I said, mine seems to be a pretty standard part, so if your reflector is the same size as mine it's also probably 3/4 of an inch wide at the bracket too.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/04.jpg&quot;&gt;&lt;img src=&quot;177/04bit.jpg&quot;&gt;&lt;/a&gt;
Step 4: Cut a notch, using that measurement, in the back of the tape case.  The reflector and bracket together are too thick for the case to snap shut around, so we'll need the bracket to hang out the back.  Be careful to center your cut.  Cut from the bottom of the case up to about even with the overhang.  Mark your cut lightly with a straight edge or ruler, then go over it repeatedly until you cut all the way through.  A little bit of splintering around the cut is normal, just don't be so impatient that you crack the case.  Did I mention it might be a good idea to put a new blade in your knife for this project?  It might be a good idea to put a new blade in your knife for this project.  Before now.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/05.jpg&quot;&gt;&lt;img src=&quot;177/05bit.jpg&quot;&gt;&lt;/a&gt;
Step 5: Wrap electrical tape around all three sides of the cut.  This will cover up the shattery bits, keep any cracks from spreading, and give it a nice rubberized mounting around the bike reflector bracket.  Cut away the excess.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/06.jpg&quot;&gt;&lt;img src=&quot;177/06bit.jpg&quot;&gt;&lt;/a&gt;
Step 6: Grab two of the ceramic magnets.  We're going to be gluing them on either side of the cut, about even with the overhang.  These will be to rest against the back of the reflector, hopefully keeping it from moving too much.  One by one -- and with the other magnets clear -- put a good bead of super glue on one of the two magnets, press it into place and hold it there for about a minute.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/07.jpg&quot;&gt;&lt;img src=&quot;177/07bit.jpg&quot;&gt;&lt;/a&gt;
Step 7: Stick a piece of electrical tape along the entire length of the bottom of the case, folded over lengthwise.  Half of it should be stuck to the outside of the case, and half to the inside, with the tape stuck to itself where it crosses the notch we cut.  This will keep the bottom from wobbling by holding it tightly against the metal bracket.  The electrical tape is a little bit stretchy, which is good.  Anyone going for extra credit here might try sticking a rubber elastic inside the tape for extra holding power.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/08.jpg&quot;&gt;&lt;img src=&quot;177/08bit.jpg&quot;&gt;&lt;/a&gt;
Step 8: Open the LED upgrade kit.  You'll find a little black cup with the LEDs inside and two wires sticking straight out the back, surrounded by a silver reflector.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/09.jpg&quot;&gt;&lt;img src=&quot;177/09bit.jpg&quot;&gt;&lt;/a&gt;
Step 9: Remove the reflector; the LEDs are bright and directional enough without it, and it's too thick to fit inside our tape case.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/10.jpg&quot;&gt;&lt;img src=&quot;177/10bit.jpg&quot;&gt;&lt;/a&gt;
Step 10: Bend the two wires on the back to either side, being careful not to rush and snap them.  I don't really know how much abuse they'll take, and I don't want to find out.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/11.jpg&quot;&gt;&lt;img src=&quot;177/11bit.jpg&quot;&gt;&lt;/a&gt;
Step 11: Cut four pieces of wire: three long ones (maybe 4-5 inches apiece?) and one short one (1-2 inches long).
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/12.jpg&quot;&gt;&lt;img src=&quot;177/12bit.jpg&quot;&gt;&lt;/a&gt;
Step 12: Strip each of the wires half an inch in from both ends.  If you've never stripped wires with pliers before, it's easy: Go around the wire worrying the plastic insulation with your pliers' cutters.  Don't squeeze hard enough to actually cut the wire.  The plastic cuts more easily than the metal inside.  Begin pulling the wire as you continue weakening the insulation.  Look for strong places, and keep pulling the wire and worrying at the insulation.  Eventually, the plastic will begin to slide off the wire.  Yank it off, and give the wire a twist or two.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/13.jpg&quot;&gt;&lt;img src=&quot;177/13bit.jpg&quot;&gt;&lt;/a&gt;
Step 13: Take two of your longer pieces of wire.  Make a little loop in the stripped portion on one side.  Slide this loop around one of the wires on the back of the LED cup.  Twist it a few more times, and squish it all together to get a good electrical connection.  Repeat, looping the second wire to the cup's other connection.  If you want now, you can solder the wires permanently together -- but I hate soldering, and I don't want to pretend this project requires it.  Either way, finish by sticking a square of electrical tape on the back of the cup.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/14.jpg&quot;&gt;&lt;img src=&quot;177/14bit.jpg&quot;&gt;&lt;/a&gt;
Step 14: Slide the LED cup up under the lip of the cassette case, facing outward.  Feel free to glue it in place, but it's a pretty tight fit -- I say don't bother.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/15.jpg&quot;&gt;&lt;img src=&quot;177/15bit.jpg&quot;&gt;&lt;/a&gt;
Step 15: Since LEDs only allow current to flow through them in one direction, we'll need to figure out which side is + and which is -.  Hold the wires against either end of one of the AA batteries.  If it lights up (cool!) make a note of which side is which.  If not, reverse and retry.  (If nothing lights up, redo those connections.)
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/16.jpg&quot;&gt;&lt;img src=&quot;177/16bit.jpg&quot;&gt;&lt;/a&gt;
Step 16: Tear off two pieces of electrical tape, each about twice the length of a battery.  Lay each strip of tape face up on the table and center the batteries on them.  We're going to be taping the wires directly to the batteries.  It's easy to do, and with the LEDs we won't have to change the batteries much anyway.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/17.jpg&quot;&gt;&lt;img src=&quot;177/17bit.jpg&quot;&gt;&lt;/a&gt;
Step 17: Tear off two small scraps of aluminum foil.  Stick the wire from one end of the LED cup to the electrical tape beneath the battery contact, and then put a scrap of foil on top of it.  Wrap the tape around the battery contact.  Repeat for the other wire and the other battery.  Wrap the tape around the battery contact.  The aluminum foil is here to give us a larger electrical contact.  Aluminum foil is conductive.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/18.jpg&quot;&gt;&lt;img src=&quot;177/18bit.jpg&quot;&gt;&lt;/a&gt;
Step 18: Tear off two more scraps of aluminum foil.  Using the same procedure as the last step, stick the short wire to the other end of one of the batteries.  Grab a ceramic magnet and the other scrap of aluminum foil.  Tape the loose end of the short wire to the top of the magnet, with part of the foil sticking out.  Fold the foil over the top of the magnet.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/19.jpg&quot;&gt;&lt;img src=&quot;177/19bit.jpg&quot;&gt;&lt;/a&gt;
Step 19: Tear off a larger scrap of aluminum foil and wrap it completely around one of the remaining magnets.  This will be our &quot;switch.&quot;
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/20.jpg&quot;&gt;&lt;img src=&quot;177/20bit.jpg&quot;&gt;&lt;/a&gt;
Step 20: As in step 18, tape the remaining long wire to another of the magnets, with a piece of foil folded over to make an electrical contact.  Let it stick itself to the &quot;switch&quot; magnet.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/21.jpg&quot;&gt;&lt;img src=&quot;177/21bit.jpg&quot;&gt;&lt;/a&gt;
Step 21: Just like in step 17, connect the loose end of the wire to the remaining battery contact.  The LED should light up.  If it doesn't, troubleshoot: We should have a circuit going from the LEDs to the first battery, through the bottom magnet, through the foil on the &quot;switch,&quot; through the second battery, back into the LEDs.  Make sure your +'s and -'s are all going in the right direction.  Redo the foil/wire connections with more foil.  If it did work, great job.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/22.jpg&quot;&gt;&lt;img src=&quot;177/22bit.jpg&quot;&gt;&lt;/a&gt;
Step 22: Notice something.  When you pull the &quot;switch&quot; magnet out of the stack and replace it with a bare magnet, the LEDs don't light up.  Ceramic magnets aren't conductive.  When the &quot;switch&quot; is in place, the circuit is on.  When there's a bare magnet there instead, it's off.  Leave the bare magnet in the stack between the two wired magnets.  Stack the &quot;switch&quot; and the two remaining magnets with the &quot;switch&quot; in between.  We should have two stacks of three magnets, which you'll notice are about the same depth as the tape case.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/23.jpg&quot;&gt;&lt;img src=&quot;177/23bit.jpg&quot;&gt;&lt;/a&gt;
Step 23: Push the two batteries tightly into the top right and left hand corners of the tape case so that they're square with the edge.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/24.jpg&quot;&gt;&lt;img src=&quot;177/24bit.jpg&quot;&gt;&lt;/a&gt;
Step 24: Place the stacks of magnets at the lower inside corners of the batteries.  Experiment with closing the tape case.  Find the position where the stacks are as close to the lower right and left hand corners of the case as possible, but the case can still close without hitting the magnet stacks or the batteries.  We want everything to fit snugly.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/25.jpg&quot;&gt;&lt;img src=&quot;177/25bit.jpg&quot;&gt;&lt;/a&gt;
Step 25: Once you've found the ideal positions, put a generous bead of super glue on top of each magnet stack and close the case.  Hold the case shut as tightly as possible for about a minute, to make sure the super glue sets up properly with the top of the case.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/26.jpg&quot;&gt;&lt;img src=&quot;177/26bit.jpg&quot;&gt;&lt;/a&gt;
Step 26: Flip the case over and repeat step 25, gluing the bottom of the magnet stacks to the bottom of the case.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/27.jpg&quot;&gt;&lt;img src=&quot;177/27bit.jpg&quot;&gt;&lt;/a&gt;
Step 27: Once you've given the super glue some time to set up, flip the case back over and reopen it.  Since we had to cut that notch in the back of the case, the back is the weak point: pull evenly on both sides to reopen.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/28.jpg&quot;&gt;&lt;img src=&quot;177/28bit.jpg&quot;&gt;&lt;/a&gt;
Step 28: The trouble with ceramic magnets is that they don't like sticking to anything more than they like sticking to themselves.  To add strength, encircle each of the glued magnets with another bead of super glue.  Let it set up, and cut away the excess if it gets on anything else.
&lt;/p&gt;

&lt;p&gt;
&lt;a href=&quot;177/29.jpg&quot;&gt;&lt;img src=&quot;177/29bit.jpg&quot;&gt;&lt;/a&gt;
Step 29: Tape the loose wires out of the way.  You're done.  Swap the &quot;switch&quot; with the other loose magnet (storing the loose magnet on the other stack) place it around your bike reflector and let it snap shut.  You've got a light on your bike -- a bright one at that, which doesn't strobe, pops on and off easily, and won't chew through batteries every couple weeks.
&lt;/p&gt;

&lt;p&gt;
Criticisms: Despite being built in a plastic case, the light is far from waterproof.  I wouldn't even call it terribly splashproof.  Silly as it would look, a sandwich bag over the top might not be the worst idea on a rainy day.  Opening the light takes some learning, as you figure out how to evenly pull on both sides of the case's back.  The biggest problem I've encountered, though, is the one mentioned in step 28: ceramic magnets just don't like to glue down.  Step 28 was an afterthought, after I had to reglue one of the stacks.  It's certainly stronger with an additional bead running around the base of the magnets, but I'm starting to think a gel epoxy (nasty as that stuff is) might eventually be needed.
&lt;/p&gt;

&lt;p&gt;
Final Thoughts:  It works, weirdly enough.  Assuming you already have things like pliers, electrical tape and a set of batteries, you should have no trouble beating the $20 budget.  (If not, they're good things to own.)  Please enjoy your antiluxury good.  Build one?  Send me a picture.
&lt;/p&gt;

&lt;blockquote&gt;If you liked this project, you may also dig the previous Build Notes: &lt;a href=&quot;160.html&quot;&gt;Junk Mail Blinds&lt;/a&gt;.&lt;/blockquote&gt;

&lt;blockquote&gt;&lt;img src=&quot;177/endcap.jpg&quot;&gt;&lt;/blockquote&gt;

&lt;blockquote&gt;&lt;a href=&quot;http://www.spacetoast.net/STP/177/177printable.html&quot;&gt;[Click here for a printable version -- or just turn stylesheets off.]&lt;/a&gt;&lt;/blockquote&gt;
</description>
  </item>
  <item>
    <title>Letter to the Editor</title>
    <pubDate>Thu, 03 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/03#147</link>
    <guid isPermaLink="true">/stp/147</guid>
    <description>&lt;p&gt;
&lt;/p&gt;

&lt;h2&gt;Issue 147, for the week of &lt;AppleScriptDateNonsense&gt;10/24/2004&lt;/AppleScriptDateNonsense&gt;&lt;/h2&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;From the Boston Metro Weekend Edition, &lt;a href=&quot;http://parex.metro.st/ftp/20041022_1000005.pdf&quot;&gt;Oct. 22-24, 2004&lt;/a&gt;, page 29:&lt;/h2&gt;

&lt;p&gt;&quot;NEW PAD ON NEWBURY&quot;&lt;/p&gt;

&lt;p&gt;WHEN CHRISTINA Capone moved from her digs in New York she had a bit of anxiety about abandoning the hustle and bustle of &quot;the city.&quot;  She was ready to head back to her hometown of Boston, but didn't want to trade off on her urban lifestyle.  &quot;I was nervous when I looked at places in Beacon Hill  because there was nobody on the streets,&quot; said Capone, 26, who works in the media department at Hill, Holliday, Connors, Cosmopulos Inc.  The solution -- a modern, two-bedroom,  door-man building on Newbury Street. Needless to say, she hasn't missed a beat.  &quot;The constant motion is so important to me,&quot; said Capone, while gazing down from her third-floor apartment at the consistent flow of shoppers passing Niketown and the oh-so-cosmopolitan diners heading into Armani Cafe.  The floor-to-ceiling windows in her spacious abode help to absorb the energy of the city's most fashionable street. The glass coffee table, khaki-colored couch peppered with primary-colored pillows and modern art on the  walls  pulsate  urban sophistication.  &quot;The inside reflects the outside and the energy of the city,&quot; she said.  Although a posh place on Newbury can be a bit of a drain on your wallet, the convenience makes up for all the cash you'd be dumping  into  a  car,  said Capone.  &quot;My mentality is that there is no reason to drive. Everything should be in walking distance,&quot; said Capone.  Whether it's a fresh salad from Scuzzi a block away, or  a pasta dish from Piattini Wine Cafe across the street, everything  is right  at your fingertips.  And, although Capone admits  she  does  have  a weakness for the trendiest purses at Luna, which she stores nicely in her walk-in closet,  the  rest  of  the swanky shops don't tempt her. &quot;I'm lucky that I don't have a shopping problem,&quot; said Capone.&lt;/p&gt;

&lt;p&gt;FACTS: Name: Christina Capone - Age: 26 - Occupation: Media relations at Hill, Holiday, Connors, Cosmopulos Inc. - Rent/Own: Rent - Size: Two-bedroom - Where: Newbury Street &lt;/p&gt;

&lt;p&gt;- CHRISTINA WALLACE&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h2&gt;Sent to the Boston Metro October 24, 2004:&lt;/h2&gt;

&lt;p&gt;Thank you for this weekend's Home section profile of Christina Capone's &quot;New Pad on Newbury.&quot;  Might I, however, submit a somewhat different profile?&lt;/p&gt;

&lt;p&gt;After five months of post-college job seeking, animator Matthew Rasmussen, 24, settled into an hourly-wage position selling tickets at a local museum.  He now rents (not owns) a room in a four bedroom Inman Square apartment, which features a living room, a porch with peeling paint, and a mostly-functional kitchen.  Rasmussen's bedroom is tastefully appointed with a desk of his own construction, an oak futon, and a prefab bookshelf.  A geranium by the window, perched jauntily atop a milkcrate, quietly pulsates urban sophistication when it needs to be watered.&lt;/p&gt;

&lt;h2&gt;Reader Lindsay LeClair adds:&lt;/h2&gt;

&lt;p&gt;Lindsay B. LeClair lives in an apartment with floors so uneven that even the &lt;br /&gt;
shelves are falling over, but it's otherwise cozy and sunny, with a kitchen to &lt;br /&gt;
beat the band.  She is cohabiting with her boyfriend of nearly five years, &lt;br /&gt;
which is terribly convenient -- she would not be able to afford living in &lt;br /&gt;
Boston if she didn't share a bedroom.  It's too bad, really, that this &lt;br /&gt;
convenient apartment is nowhere near a grocery store.  The young couple was &lt;br /&gt;
really counting on Lindsay's beater car to make up for that.  All jokes aside, &lt;br /&gt;
the apartment is beautiful, convenient to the T barring, if convenience &lt;br /&gt;
includes strolling through an industrial, lifeless bioengineering square where &lt;br /&gt;
you're pretty sure they're actually TRYING to make the undead... or at least &lt;br /&gt;
that's what it smells like.  In spite of all that, Lindsay is very happy in &lt;br /&gt;
their new apartment.  &lt;/p&gt;
</description>
  </item>
  <item>
    <title>Iraqi War Deaths</title>
    <pubDate>Thu, 03 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/03#178</link>
    <guid isPermaLink="true">/stp/178</guid>
    <description>&lt;p&gt;
&lt;/p&gt;

&lt;h2&gt;Issue &lt;AppleScriptIssueNonsense&gt;178&lt;/AppleScriptIssueNonsense&gt;, for the week of &lt;AppleScriptDateNonsense&gt;10/15/2006&lt;/AppleScriptDateNonsense&gt;.&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;178/IraqiWarDeaths.gif&quot;&gt;&lt;img src=&quot;178/IraqiWarDeathsbit.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please click the above link to view the image at full size.&lt;/p&gt;

&lt;p&gt;This image is released without copyright:&lt;/p&gt;

&lt;p&gt;&lt;!--Creative Commons License--&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/publicdomain/&quot;&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://creativecommons.org/images/public/norights-a.png&quot;/&gt;&lt;/a&gt; &lt;br /&gt;
This work is licensed under a &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/publicdomain/&quot;&gt;Creative Commons Public Domain License&lt;/a&gt;.&lt;!--/Creative Commons License--&gt;&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt; &lt;Work rdf:about=&quot;&quot;&gt; &lt;license rdf:resource=&quot;http://creativecommons.org/licenses/publicdomain/&quot; /&gt; &lt;dc:title&gt;Iraqi War Deaths&lt;/dc:title&gt; &lt;dc:rights&gt;&lt;Agent&gt;&lt;dc:title&gt;Matthew I. Rasmussen&lt;/dc:title&gt;&lt;/Agent&gt;&lt;/dc:rights&gt; &lt;/Work&gt; &lt;License rdf:about=&quot;http://creativecommons.org/licenses/publicdomain/&quot;&gt;&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;&lt;subClassOf xmlns=&quot;&quot; rdf:resource=&quot;http://web.resource.org/cc/PublicDomain&quot;/&gt;&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/p&gt;
</description>
  </item>
  <item>
    <title>STP Relaunched</title>
    <pubDate>Wed, 02 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/02#relaunch</link>
    <guid isPermaLink="true">/stp/housekeeping/relaunch</guid>
    <description>
&lt;p&gt;
The Space Toast Page has become the Space Toast Pages, a &quot;journal of journals&quot; on Rasmussen's various obsessions and experiments.  The weekly issue format has been discarded in favor of a categorized, feed-friendly, commentable series of blogs and sub-blogs running on the free and open source &lt;a href=&quot;http://blosxom.sourceforge.net/&quot;&gt;Blosxom&lt;/a&gt; content management system.  Thank you as always for reading, and welcome back!
&lt;/p&gt;
</description>
  </item>
  <item>
    <title>Older Archive</title>
    <pubDate>Wed, 02 May 2007 23:00:00 GMT</pubDate>
    <link>/stp/2007/05/02#oldarchive</link>
    <guid isPermaLink="true">/stp/housekeeping/oldarchive</guid>
    <description>
&lt;p&gt;
For older Space Toast Pages (weekly &quot;Issues&quot;), please go to &lt;a href=&quot;www.spacetoast.net/STP/previousindex.html&quot;&gt; www.spacetoast.net/STP/previousindex.html&lt;/a&gt;.  I'm working on bringing these into the new STP system, starting with the most popular and my personal favorites, and eventually running back to issue 112, but it may take some time.
&lt;/p&gt;
</description>
  </item>
  </channel>
</rss>
