<?xml version="1.0" encoding="utf-8"?>
<!-- If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/ -->
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:lj="http://www.livejournal.com">
  <id>urn:lj:livejournal.com:atom1:ben_zine</id>
  <title>Ben's Beta LJ</title>
  <subtitle>ben_zine</subtitle>
  <author>
    <email>bzanin@gmail.com</email>
    <name>ben_zine</name>
  </author>
  <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom"/>
  <updated>2009-06-03T03:49:13Z</updated>
  <lj:journal userid="3150645" username="ben_zine" type="personal"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://ben-zine.livejournal.com/data/atom" title="Ben's Beta LJ"/>
  <link rel="hub" href="http://pubsubhubbub.appspot.com/"/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:10819</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/10819.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=10819"/>
    <title>Google Wave will kill SubEthaEdit, not email; also, people suck</title>
    <published>2009-06-03T03:47:29Z</published>
    <updated>2009-06-03T03:49:13Z</updated>
    <content type="html">&lt;h2&gt;&lt;a name="executive-summary"&gt;&lt;/a&gt;Executive Summary&lt;/h2&gt;
&lt;ul&gt;	&lt;li&gt;Google Wave looks like a very nice concurrent rich text editor;&lt;/li&gt;
	&lt;li&gt;I'm worried that it is being positioned to replace tools that are far better in their niche than Wave currently is;&lt;/li&gt;
	&lt;li&gt;I'm worried that it may be able to replace tools that are better than Wave has the potential to be, and that it may therefore subtract [some] value from the internet as a communications medium.&lt;/li&gt;
&lt;/ul&gt;
&lt;a name="cutid1"&gt;&lt;/a&gt;
&lt;h2&gt;&lt;a name="in-defense-of-twitter"&gt;&lt;/a&gt;In Defense of Twitter&lt;/h2&gt;
&lt;p&gt;I enjoy using Twitter for several reasons, not the least of which is that it is amusing and very lightweight.  I've had an active account for &lt;a href="http://twitter.com/gnomon/status/19460771" title="My very first tweet, back on 2007-04-04 @ 1626h"&gt;over two years now&lt;/a&gt;, and I can count on the fingers of one hand the number of times that it has actually come in handy.  I in no way consider it to be a useful communications tool - less so even than traditional instant messengers, which in turn are less useful than IRC.&lt;/p&gt;

&lt;h3&gt;&lt;a name="the-medium"&gt;&lt;/a&gt;The Medium&lt;/h3&gt;
&lt;p&gt;Twitter's format is very well defined: it is strict UTF-8 text, 140 or fewer characters, with an associated timestamp, user id (and associated user information, interestingly), source program, "favourited" status bit, &amp;amp;c.&lt;/p&gt;
&lt;p&gt;The format makes no assumption about the environment in which it is rendered, which is part of why there are so many alternative clients available.  The default Twitter web interface augments the base data format but places no artificial restrictions on the data itself.&lt;/p&gt;
&lt;p&gt;The Twitter service gives as well as it gets.&lt;/p&gt;

&lt;h3&gt;&lt;a name="the-message"&gt;&lt;/a&gt;The Message&lt;/h3&gt;
&lt;p&gt;You&lt;sup&gt;[&lt;a href="#footnote-1"&gt;1&lt;/a&gt;]&lt;/sup&gt; imply that Twitter "discourages long, well-written pieces", but I think otherwise: firstly, it does not discourage long pieces, but rather outright forbids them; secondly, this format restriction has the opposite effect of increasing the quality of communication.&lt;/p&gt;
&lt;p&gt;This at first may seem quite counterintuitive, but consider the mental model of Twitter as an amusement: if we accept that Twitter is a game where the goal is primarily to amuse yourself and those who follow you, it's a short leap to say that goal is best served by context sensitivity and pithy wit.&lt;/p&gt;
&lt;p&gt;Even if we reject this mental model, the fact of the matter is that user accounts get quickly unfollowed by the people who find those tweets to be useless, unpleasant or otherwise objectionable.  Users who do not care about the quality of their posts soon find themselves yelling into the uncaring aether...net.&lt;/p&gt;
&lt;p&gt;Consider a very similar medium: the email subject line.  It features comparable length restrictions, can be associated with very similar metadata, has a robust ecosystem of clients, and is very well defined by a long history of RFCs and mainstream use.  I assert that the quality of the information present in your average email subject line is substantially lower than that in most tweets, and that this is a function of what the medium encourages rather than what it allows or enforces.&lt;/p&gt;
&lt;p&gt;We'll return to this point later (see "&lt;a href="#laying-blame-for-future-crimes"&gt;Laying Blame for Future Crimes&lt;/a&gt;" below).&lt;/p&gt;

&lt;h2&gt;&lt;a name="waves-in-three-parts"&gt;&lt;/a&gt;Waves in Three Parts&lt;/h2&gt;
&lt;p&gt;I'd like to borrow some insight from an article over at &lt;a href="http://www.maetico.com/everything-and-wave/" title="‘Everything’ and Wave, by Jorge Vargas, 2009-05-31 @ 2258h; tagged as &amp;quot;google, email, IM, conversation, wave, twitter, python, TurboGears, life, Uncategorized&amp;quot; (hah!)"&gt;http://www.maetico.com/everything-and-wave/&lt;/a&gt; about what Google Wave really is.  I don't fully agree with everything in the article, but it's a good read nonetheless.  It makes the valuable assertion that Wave is three things:&lt;/p&gt;
&lt;ol&gt;	&lt;li&gt;a communication protocol;&lt;/li&gt;
	&lt;li&gt;a "very efficient" client;&lt;/li&gt;
	&lt;li&gt;a set of extensions to that client.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I scare-quote "very efficient" because efficiency is an indexical statement: it depends on the goal that a person has for a technique or tool (amusement, business communication, revision tracking, threaded conversation, dessert topping + floor wax, &amp;amp;c.), and on the value each person places on the various resources used by that tool (attention span, context switch overhead, tool dependencies, eye strain, &amp;amp;c.).  For someone who stays logged into Facebook all day, the messaging system that service offers may be more efficient for quick written communication than email, despite that email has enormous advantages in other areas.&lt;/p&gt;

&lt;h3&gt;&lt;a name="the-protocol"&gt;&lt;/a&gt;The Protocol&lt;/h3&gt;
&lt;p&gt;I'm going to borrow the term "&lt;a href="http://en.wikipedia.org/wiki/Servent"&gt;servent&lt;/a&gt;" from peer-to-peer terminology to denote a network node which acts as both a client and a server.  As per Google's description&lt;sup&gt;[&lt;a href="#footnote-4"&gt;4&lt;/a&gt;]&lt;/sup&gt;, the protocol roughly concerns itself with..:&lt;/p&gt;
&lt;ol&gt;	&lt;li&gt;creating a new Wave resource on a servent node;&lt;/li&gt;
	&lt;li&gt;publishing the availability of that new resource to other subscribed servents;&lt;/li&gt;
	&lt;li&gt;receiving and publishing deltas to the original resource to other subscribed servents while acting as an authority about what constitutes the canonical ordering in which those deltas should be applied (and presumably rendered) by recipient servents.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I have a few reservations about this model and how it is being positioned.&lt;/p&gt;

&lt;h4&gt;&lt;a name="nerfing-formats"&gt;&lt;/a&gt;Nerfing Formats&lt;/h4&gt;
&lt;p&gt;The Google documentation&lt;sup&gt;[&lt;a href="#footnote-2"&gt;2&lt;/a&gt;, &lt;a href="#footnote-4"&gt;4&lt;/a&gt;, &lt;a href="#footnote-5"&gt;5&lt;/a&gt;]&lt;/sup&gt; implies but does not explicitly state that the underlying data format of a Wave document is (X)HTML.  Editing HTML well is hard, way harder than it should be.  If Google had only announced the creation of a pleasant tool which maintains a valid document in a valid state after every edit operation, I would still have been impressed.&lt;/p&gt;
&lt;p&gt;I wonder, does Wave either sacrifice the correctness or the full expressive range of the document format?  Either is very bad.  It stretches credulity that it might do neither.&lt;/p&gt;

&lt;h4&gt;&lt;a name="nerfing-accountability"&gt;&lt;/a&gt;Nerfing Accountability&lt;/h4&gt;
&lt;p&gt;Versioning is difficult.  Good versioning is &lt;em&gt;intensely&lt;/em&gt; difficult.  We're dealing with a protocol that assumes from the ground up that documents are meant to have deltas applied to them, and which by default accepts these deltas from all sources.  Each delta generates a new version of the document.&lt;/p&gt;
&lt;p&gt;The Google demo indicated that versioning in the current client reaches down to the keystroke level.  If you thought that keeping up with a newsgroup or wiki page was difficult, keeping up with Wave will be a whole new level of pain... unless one ceases to pay attention to individual edits.&lt;/p&gt;
&lt;p&gt;This model works very well for a document-centric realtime concurrent editor (see paragraph 2 of section "Executive Summary" of &lt;sup&gt;[&lt;a href="#footnote-5"&gt;5&lt;/a&gt;]&lt;/sup&gt;), where the goal is to coordinate the efforts of one or more people to create a final finished document.  Sifting through hundreds or potentially thousands of edits to get up to speed on a lengthy conversation, though, will become an incredibly difficult task.  Wave looks like it will amplify the Wikipedia accountability problem to epic proportions.&lt;/p&gt;

&lt;h4&gt;&lt;a name="nerfing-interoperability"&gt;&lt;/a&gt;Nerfing Interoperability&lt;/h4&gt;
&lt;p&gt;The problem with Wave's synchronization model is that an authoritative copy of the document has to exist somewhere.  Right now, that somewhere is necessarily one of Google's server.  They've promised that other servers will be honoured at some point, but we're not there yet.&lt;/p&gt;
&lt;p&gt;Google Talk was launched on 2004-08-24, but it wasn't until 2006-01-17 that they enabled open server federation.  This delay applied to a well-known and widely implemented protocol, while the Wave protocol is entirely new.  On the other hand, Google may have a different perspective on this release.  On the gripping hand, they've got a pretty strongly vested interest in maintaining control while the ecosystem develops.&lt;/p&gt;

&lt;h3&gt;&lt;a name="the-client"&gt;&lt;/a&gt;The Client&lt;/h3&gt;
&lt;p&gt;The client that Google demonstrated&lt;sup&gt;[&lt;a href="#footnote-2"&gt;2&lt;/a&gt;]&lt;/sup&gt; is an impressive web application.  I don't object to it on principle, but it remains to be seen how it works in other browsers.  I'm not holding out hope that it will work at all outside of Chrome, Firefox, Safari and Internet Explorer.&lt;/p&gt;
&lt;p&gt;Since the Wave document format seems to be HTML, there's a very good chance that non-browser clients will be second class participants, if they are able to work at all.  It's not fair to criticize Google for work not done by third parties, but it is perhaps more fair to criticize them for requiring this work to be done.&lt;/p&gt;

&lt;h4&gt;&lt;a name="graphics-are-for-pansies"&gt;&lt;/a&gt;Graphics are for Pansies&lt;/h4&gt;
&lt;p&gt;I really did not care for the part of the demo video&lt;sup&gt;[&lt;a href="#footnote-2"&gt;2&lt;/a&gt;]&lt;/sup&gt; where the first line of a new Wave was emboldened, as if it were an email subject line.&lt;/p&gt;
&lt;p&gt;There is a world of difference between a line of text wrapped in &lt;code&gt;&amp;lt;b&amp;gt;...&amp;lt;/b&amp;gt;&lt;/code&gt; tags and the structured metadata of an &lt;a href="http://www.faqs.org/rfcs/rfc2822.html" title="&amp;quot;Internet Message Format&amp;quot;, 2001-04, edited by Peter W. Resnick - the RFC wherein the current format of email bodies is laid out, more or less"&gt;RFC2822&lt;/a&gt; &lt;code&gt;Subject:&lt;/code&gt; line.  Google and everyone who works there understands this difference intimately, I'm sure, but I have no such faith in the base of potential Wave users.&lt;/p&gt;
&lt;p&gt;I really don't want to have to fire up a graphical browser application just to be able to exchange structured, threaded text with other users.  I really don't see Google pouring development hours into ensuring that elinks, lynx, w3m, emacs and others aren't left out in the cold.&lt;/p&gt;

&lt;h3&gt;&lt;a name="the-extensions"&gt;&lt;/a&gt;The Extensions&lt;/h3&gt;
&lt;p&gt;I like the idea of robots that interact with Waves as first-class clients.  I tend to believe that this kind of augmented interaction should happen during the editing of a document rather than during its publication, but then the entire Wave philosophy requires that these two phases no longer be treated or thought of differently.&lt;/p&gt;

&lt;h4&gt;&lt;a name="spell-e"&gt;&lt;/a&gt;Spell-E&lt;/h4&gt;
&lt;p&gt;A spell checker&lt;sup&gt;[&lt;a href="#footnote-3"&gt;3&lt;/a&gt;]&lt;/sup&gt; that takes into account grammatical structure, with some degree of reliability, and that draws on the enormous corpus of structured text and language research that Google can bring to bear on the problem?  This is incredibly exciting all on its own.  Do want.&lt;/p&gt;

&lt;h4&gt;&lt;a name="search-e-map-e-the-chess-dingus-etc"&gt;&lt;/a&gt;Search-E, Map-E, the chess dingus, &amp;amp;c.&lt;/h4&gt;
&lt;p&gt;These look like trivial shortcuts to add URLs and prevent having to use other browser tabs.  Frankly, I don't care about them in the slightest, except that they encourage blind copying and pasting of links.  At least they provide an alternative to blindly copying and pasting &lt;em&gt;content&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;The chess example was particularly cool because it perfectly matches the protocol model of a [blank] shared state and a series of tiny transactional updates.&lt;/p&gt;

&lt;h2&gt;&lt;a name="laying-blame-for-future-crimes"&gt;&lt;/a&gt;Laying Blame for Future Crimes&lt;/h2&gt;
&lt;p&gt;My main objections to Google Wave are not about what it provides, but about how it is being positioned.  The Rasmussens et al have created a fantastic collaborative concurrent rich text editor, and they have a right to be proud of it; but Wave is being heralded by the press, traditional and otherwise&lt;sup&gt;[&lt;a href="#footnote-6"&gt;6&lt;/a&gt;, &lt;a href="#footnote-7"&gt;7&lt;/a&gt;, &lt;a href="#footnote-8"&gt;8&lt;/a&gt;, &lt;a href="#footnote-9"&gt;9&lt;/a&gt;]&lt;/sup&gt;, as a replacement for..:&lt;/p&gt;
&lt;ul&gt;	&lt;li&gt;groupware&lt;/li&gt;
	&lt;li&gt;email&lt;/li&gt;
	&lt;li&gt;mailing lists&lt;/li&gt;
	&lt;li&gt;instant messenger systems&lt;/li&gt;
	&lt;li&gt;twitter (and workalikes)&lt;/li&gt;
	&lt;li&gt;weblogs&lt;/li&gt;
	&lt;li&gt;web forums&lt;/li&gt;
	&lt;li&gt;usenet&lt;/li&gt;
	&lt;li&gt;IRC&lt;/li&gt;
	&lt;li&gt;Sharepoint&lt;/li&gt;
	&lt;li&gt;Facebook (and workalikes)&lt;/li&gt;
	&lt;li&gt;revision control systems (!)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It's a &lt;em&gt;concurrent document editor&lt;/em&gt;&lt;sup&gt;[&lt;a href="#footnote-5"&gt;5&lt;/a&gt;]&lt;/sup&gt;, and fundamentally differs from all of the above.  While it's true that it may be able to replace the most basic parts of some of these tools, doing so will require throwing away the good bits of each that make them powerful and worthwhile.&lt;/p&gt;
&lt;p&gt;My worry is that Google will seriously try to position Wave as an alternative to some of these systems, and that by dint of its user / fan base, it might to some extent succeed.  I'm getting pretty tired of good systems and protocols being replaced by more popular but purely inferior ones.&lt;/p&gt;
&lt;p&gt;Mandating bad behaviour is unquestionably bad.  Merely encouraging it is less bad, but still not good.  Internet users have enough bad habits to deal with without being encouraged to adopt a huge set of new ones.&lt;/p&gt;

&lt;h2&gt;&lt;a name="regression-bad-or-hands-off-my-email-or-get-off-my-lawn"&gt;&lt;/a&gt;Regression Bad, or, Hands Off My Email, or, Get Off My Lawn&lt;/h2&gt;
&lt;p&gt;I am very worried by Lars Rasmussen's description&lt;sup&gt;[&lt;a href="#footnote-8"&gt;8&lt;/a&gt;]&lt;/sup&gt; of how he believes Wave relates to email:
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Q&lt;/strong&gt;: This seems like this will replace email - but can it really replace all we love about email?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lars&lt;/strong&gt;: We think of email as an incredibly successful protocol.  Google Wave is our suggestion for how this could work better.  You can certainly store your own copy by way of the APIs and with the extensions.  The model for ownership - it's a shared object, so how do you delete the object?  Even though it's a shared object, no one can take it away from you without your consent.  There will eventually be reversion to sync up with the cloud or you own servers.  We're not planning on having spam in wave (laughs).  Early on in email, spam wasn't really taken into account, so we benefit from that learning experience.  We're planning on a feature so that you can't add me to your Wave without being on a white list.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Later on, Lars mentions that a bidirectional email-to-wave gateway might be difficult, but possible.  The problem is that email includes a set of well-structured header information and the optional ability to include an arbitrary number of body elements, each which may contain highly structured information (e.g. MIME sections containing binary files), semistructured documents (e.g.  HTML, Markdown, format=flowed, or other text formats which offer hints about enhanced rendering while not requiring it) or unstructured text; whereas Waves appear to not only strip away the requirement for this extra richness but also the ability to include it.&lt;/p&gt;
&lt;p&gt;Accepting and rendering down rich structure while offering only text with primarily presentational markup makes for a unbalanced flow of information.&lt;/p&gt;

&lt;h2&gt;&lt;a name="references"&gt;&lt;/a&gt;References:&lt;/h2&gt;

&lt;ol&gt;	&lt;li&gt;&lt;a name="footnote-1"&gt;&lt;/a&gt;@&lt;a href="http://twitter.com/rcwoolley" title="Robert Woolley, now on Twitter!"&gt;rcwoolley&lt;/a&gt;, personal correspondence&lt;/li&gt;
	&lt;li&gt;&lt;a name="footnote-2"&gt;&lt;/a&gt;&lt;a href="http://www.youtube.com/watch?v=v_UyVmITiYQ" title="&amp;quot;Google Wave Developer Preview at Google I/O 2009&amp;quot; on YouTube, posted 2009-05-28; &amp;quot;Googe Wave Developer Preview presentation at the Day 2 Keynote of Google I/O. To learn more visit http://wave.google.com&amp;quot;"&gt;http://www.youtube.com/watch?v=v_UyVmITiYQ&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a name="footnote-3"&gt;&lt;/a&gt;&lt;a href="http://www.youtube.com/watch?v=Sx3Fpw0XCXk" title="&amp;quot;Google Wave: Natural Language Processing&amp;quot; on YouTube, posted 2009-05-28; &amp;quot;Casey Whitelaw describes the natural language processing behind Google Wave&amp;#39;s spelling correction on the deck of the Sydney office. Birds and boat horns for effect.&amp;quot;"&gt;http://www.youtube.com/watch?v=Sx3Fpw0XCXk&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a name="footnote-4"&gt;&lt;/a&gt;&lt;a href="http://www.waveprotocol.org/whitepapers/internal-client-server-protocol" title="&amp;quot;Google Wave Data Model and Client-Server Protocol&amp;quot;, by Jochen Bekmann, Michael Lancaster, Soren Lassen, David Wang (&amp;quot;in alphabetical order&amp;quot;); this is a Wave page, so presumably it will be edited like crazy, but I read revision 25 of &amp;#39;wuid:gx:215f16809c9c08cf&amp;#39;, whatever that means"&gt;http://www.waveprotocol.org/whitepapers/internal-client-server-protocol&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a name="footnote-5"&gt;&lt;/a&gt;&lt;a href="http://www.waveprotocol.org/whitepapers/operational-transform" title="&amp;quot;Google Wave Operational Transform&amp;quot;, by David Wang, Alex Mah; wave page, revision 13 of &amp;#39;wuid:gx:3d5606d3fa71efc1&amp;#39;"&gt;http://www.waveprotocol.org/whitepapers/operational-transform&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a name="footnote-6"&gt;&lt;/a&gt;&lt;a href="http://www.maetico.com/everything-and-wave/" title="‘Everything’ and Wave, by Jorge Vargas, 2009-05-31 @ 2258h; tagged as &amp;quot;google, email, IM, conversation, wave, twitter, python, TurboGears, life, Uncategorized&amp;quot; (hah!)"&gt;http://www.maetico.com/everything-and-wave/&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a name="footnote-7"&gt;&lt;/a&gt;&lt;a href="http://www.techcrunch.com/2009/05/28/google-wave-drips-with-ambition-can-it-fulfill-googles-grand-web-vision/" title="&amp;quot;Google Wave Drips With Ambition. A New Communication Platform For A New Web.&amp;quot;, by MG Siegler, originally posted on 2009-05-28, updated four times when I read it"&gt;http://www.techcrunch.com/2009/05/28/google-wave-drips-with-ambition-can-it-fulfill-googles-grand-web-vision/&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a name="footnote-8"&gt;&lt;/a&gt;&lt;a href="http://www.techcrunch.com/2009/05/28/live-with-the-google-wave-creators/" title="&amp;quot;Live With The Google Wave Creators&amp;quot;, by MG Siegler, originally posted on 2009-05-28"&gt;http://www.techcrunch.com/2009/05/28/live-with-the-google-wave-creators/&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a name="footnote-9"&gt;&lt;/a&gt;&lt;a href="http://www.texttechnologies.com/2009/05/29/google-wave-finally-a-microsoft-killer/" title="&amp;quot;Google Wave - finally a Microsoft killer?&amp;quot;, by Curt Monash, posted 2009-05-29 @ 0149h"&gt;http://www.texttechnologies.com/2009/05/29/google-wave-finally-a-microsoft-killer/&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a name="footnote-10"&gt;&lt;/a&gt;&lt;a href="http://twitter.com/gnomon/status/2011194686" title="&amp;quot;Just wrote ~16KiB of commentary about Google Wave to unfortunate @rcwoolley. Short form: this will kill SubEthaEdit, not email; people suck.&amp;quot;, posted to Twitter &amp;quot;from web&amp;quot; at 2009-06-02 @ 2137h (or thereabouts)"&gt;http://twitter.com/gnomon/status/2011194686&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:10657</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/10657.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=10657"/>
    <title>Write Better Dammit</title>
    <published>2009-02-26T04:40:02Z</published>
    <updated>2009-02-26T04:40:02Z</updated>
    <content type="html">&lt;p&gt;Passion radiates.  You can see it roll off people in waves, like haze from a locomotive engine.  Like that heat, passion doesn't do much in a vacuum, and most of it gets wasted as entropy.&lt;/p&gt;
&lt;p&gt;Manage it properly, though, and heat becomes flame, flame becomes fire.  Fire can warm the needy, lift rockets to the heavens, and light the way through temples, tombs and libraries.&lt;/p&gt;
&lt;p&gt;Fire brings light.  Cast wide, it can bring knowledge and safety; focused coherently, in can carry words and thoughts to the other side of the world, or on into the far future.&lt;/p&gt;
&lt;p&gt;Passion - gathered, directed, encoded - powers the world.&lt;/p&gt;
&lt;p&gt;My passion is for the written word.  I use it awkwardly, but I love it dearly.  Thought, inspiration, hard-fought wisdom and brilliant insight live on and leap from person to person, across generations, as simple words.  Used well, words uplift and ennoble us.  They are the crowning achievement of humanity.&lt;/p&gt;
&lt;p&gt;That gleaming potential is all too often tarnished by poor use.  Bad language is wasteful and frustrating, like a stubborn sneeze or an unreachable itch.  It can be mundane; it can be tragic.  And it can be avoided.&lt;/p&gt;
&lt;p&gt;Every word is an opportunity to do well, and to do good; to strike a chord and hear it richly resonate; to drop a stone in a pond and watch the ripples spread.  Every word is a chance to stoke the embers of our passions and pass on a little warmth.&lt;/p&gt;
&lt;p&gt;We can all choose to have our words be slow and calm; fierce and torrential; strong and bright and beautiful.&lt;/p&gt;
&lt;p&gt;We can all do better.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;We can all do better.&lt;/em&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:10262</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/10262.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=10262"/>
    <title>Bits off the wire</title>
    <published>2009-01-07T02:51:45Z</published>
    <updated>2009-01-07T02:57:25Z</updated>
    <content type="html">&lt;p&gt;Optical fiber is a brilliant invention: it is a thread of spun glass.  By the magic of total internal reflection, the refraction index of the material, and the wavelength(s) of the light fired down the pipe; by the engineering of dense  wavelength multiplexing, and quantum-tunneling solid-state laser boosters set into the fiber every few kilometers; and, sometimes, by the hard work of cable-laying ship captains who stubbornly brave the high seas to thread this spun glass  across the ocean floor, billions of bits flow from point to point across the world.  Against all odds, not to mention the second law of thermodynamics, the world has managed to hew from the static of random potential the most powerful communications tool our civilization has ever seen.&lt;/p&gt;
&lt;p&gt;Now.  I don't like TV.&lt;/p&gt;
&lt;p&gt;This Christmas I was given a generous gift: a Hauppauge HVR-950 USB TV tuner.  I really, really wanted one of these.  The widget is about the size of one of those slim Zippo lighters.  I plug one end in to my USB hub and the other end to a        coaxial cable that runs to a telescoping antenna of the same sort you'd find on a plastic radio.  With the help of twelve kilobytes of closed-source firmware dynamically loaded into its onboard processor, I can tune into a whole set of channels streaming right out of the CN tower, not to mention what comes across the water from Buffalo.  The CBC broadcasts an MPEG-2 stream with 1920 by 1080 lines of interlaced resolution; mplayer gives me a variety of options to upsample the spatial resolution with the help of the extra temporal resolution added by the interlacing of the fields.&lt;/p&gt;
&lt;p&gt;The video stream is completely independent of the transmission technique, and my bargain-priced, extremely powerful quad-core processor makes short work of the digital signal; but the HVR-950 itself does some fascinating, insightful and difficult work to condense the vapour of that feeble radio transmission into something from which the video signal can be recovered.&lt;/p&gt;
&lt;p&gt;The little widget gets warm when it's in use.  The signal varies depending on what lies between the antenna and the window.&lt;/p&gt;
&lt;p&gt;We have covered the planet with a web of spun glass and the dreams of a world light the fiber day and night; but that pride is completely different from the flare of inspiration sparked by the faintest of radio signals, coming through thin air from the other end of the world.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:10194</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/10194.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=10194"/>
    <title>D945GLC how-to todos</title>
    <published>2008-07-09T01:26:12Z</published>
    <updated>2008-07-09T01:26:12Z</updated>
    <content type="html">&lt;p&gt;Dear LJ,&lt;/p&gt;
&lt;p&gt;IOU:&lt;/p&gt;
&lt;ul&gt;	&lt;li&gt;an explanation of why I recently bought an Intel D945GCLF Atom motherboard (short story: my laptop died spectacularly, G45-based motherboards won't hit retail channels for another two months, I can't wait that long for a new system, and I wanted a low-power standalone file server anyhow);&lt;/li&gt;
	&lt;li&gt;an explanation, and perhaps explanatory pictures, of why the abovementioned motherboard is currently housed in a cardboard box tied with pink wrapping ribbon;&lt;/li&gt;
	&lt;li&gt;how-to documents detailing how to get Damn Small Linux 4.4.2 playing nicely with..:
	&lt;ol&gt;	&lt;li&gt;a D-Link DGE-530T gigabit PCI network card (PCI ID 1186:4b01, rev 11);&lt;/li&gt;
		&lt;li&gt;the built-in RealTek RTL8102E 10/100 network chip (PCI ID 10ec:8136, rev 02);&lt;/li&gt;
		&lt;li&gt;the 82801G audio controller built into the ICH7 north bridge (PCI ID 8086:27d8, rev 01);&lt;/li&gt;
		&lt;li&gt;Firefox 3;&lt;/li&gt;
	&lt;/ol&gt;&lt;/li&gt;
	&lt;li&gt;news about my recent awk hackery;&lt;/li&gt;
	&lt;li&gt;an update on the job search.&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:9971</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/9971.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=9971"/>
    <title>Translation from PR-Speak to English of Selected Portions of "An Act to Amend the Copyright Act"</title>
    <published>2008-06-13T19:16:46Z</published>
    <updated>2008-06-13T19:22:33Z</updated>
    <content type="html">&lt;blockquote class="email"&gt;&lt;pre&gt;&lt;strong&gt;From:&lt;/strong&gt; "Ministers Prentice and Verner" &amp;lt;&lt;a href="mailto:minister.industry@ic.gc.ca"&gt;Minister.Industry@ic.gc.ca&lt;/a&gt;&amp;gt;
&lt;strong&gt;To:&lt;/strong&gt; CanadianCitizens@everywhere.com
&lt;strong&gt;Subject:&lt;/strong&gt; An Act to Amend the Copyright Act
&lt;strong&gt;Date:&lt;/strong&gt; Thu, 12 Jun 2008 13:09:06 -0400&lt;/pre&gt;

&lt;p&gt;The Government of Canada has introduced Bill C-61, An Act to 
Amend the Copyright Act. The proposed legislation is a 
made-in-Canada approach that balances the needs of Canadian 
consumers and copyright owners, promoting culture, innovation 
and competition in the digital age.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="fisk"&gt;
&lt;p&gt;We've introduced our version of Bill C-60. We removed a bunch 
of the exceptions that protected consumers from legal harassment, 
added in a couple of media attention grabs, and made it illegal to 
share or even talk about the tools that would allow anyone to take 
advantage of the exceptions that we did leave in.&lt;/p&gt;
&lt;p&gt;We wrote it on Canadian soil, so we qualify for the sticker.&lt;/p&gt;
&lt;p&gt;We totally caved to the US IP lobby, and we even borrowed wording 
from the WIPO treaty, but this is good for Canadians! It means that 
more money will be invested into our knowledge economy!&lt;/p&gt;
&lt;/div&gt;

&lt;blockquote class="email"&gt;
&lt;p&gt;What does Bill C-61 mean to Canadians?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="fisk"&gt;
&lt;p&gt;Quit screaming at us! We're just doing a favour to some people 
that asked really, really nicely. And they really, really want 
what we're giving them, so that makes everything OK.&lt;/p&gt;
&lt;/div&gt;

&lt;blockquote class="email"&gt;
&lt;p&gt;Specifically, it includes measures that would:&lt;/p&gt;
&lt;ul&gt;	&lt;li&gt;expressly allow you to record TV shows for later 
	viewing; copy legally purchased music onto other devices, 
	such as MP3 players or cell phones; make back-up copies 
	of legally purchased books, newspapers, videocassettes and 
	photographs onto devices you own; and limit the "statutory 
	damages" a court could award for all private use copyright 
	infringements;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;div class="fisk"&gt;
&lt;p&gt;You can do everything that you've been doing up until the 
mid-90s, but you can't back up your DVDs, video games or 
application software. Also, you're not allowed to back up anything 
that has any kind of DRM on it, because permitting circumvention 
for legal uses makes IP owners mad. You're just not allowed to 
break DRM, mmmkay? Unless you're a security researcher, because 
then you're doing it for educational purposes.&lt;/p&gt;
&lt;p&gt;Who qualifies as a security researcher? We'll let case law 
figure that out! That's what it does best.&lt;/p&gt;
&lt;p&gt;If you download music onto digital media that you've purchased, 
you've already payed a significant levy that filters back to the 
organization that represents Canadian musicians. The 2004 
Finckenstein decision in BMG Canada Inc. v. John Doe may have said 
that paying the levy means you're allowed to download music, but 
we only want you to pay attention to Sexton's assertion that 
Finckenstein shouldn't have explicitly said that downloading music 
was legal.&lt;/p&gt;
&lt;p&gt;So we're still charging you extra for the media you buy, because 
the CRIA lobbied good and hard through the 80s and 90s for it, but 
now we're making it illegal for that surcharge to actually give you 
any value.&lt;/p&gt;
&lt;p&gt;We're limiting the damages to five hundred bucks &lt;em&gt;per 
song&lt;/em&gt; that you download. That's just plain reasonable, of 
course: if you've downloaded a song, there isn't any reason for you 
to buy the twenty copies of the CD that you normally would have, 
and it's only fair to make sure that music publishers get the money 
they're owed. If you're uploading, though, god help you, because 
there aren't any limits on the damages there.&lt;/p&gt;
&lt;p&gt;We understand what "peer-to-peer" means, but we hope that the 
news media doesn't, so they'll glom onto the 500 number and 
conveniently ignore that there's no protection here at all.&lt;/p&gt;
&lt;/div&gt;

&lt;blockquote class="email"&gt;
&lt;ul&gt;	&lt;li&gt;implement new rights and protections for copyright
	holders, tailored to the Internet, to encourage
	participation in the online economy, as well as stronger
	legal remedies to address Internet piracy;&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;div class="fisk"&gt;
&lt;p&gt;We think the internet makes the marketplace difficult for 
companies that have a lot of money but no real idea how to compete 
in it. We're going to make it easy for old companies to litigate 
these new upstarts right out of business. They have less money, so 
they can't lobby as well; they can't afford as many lawyers, so 
we'll set a bunch of precedents that continue to reinforce aging 
and ailing business practices; and everyone will be happy, happy, 
happy!&lt;/p&gt;
&lt;p&gt;We'll ignore the complexities of transparent redistribution, 
copying-vs-caching, remixing and open licenses, because those 
things are new and hard to understand. We'll let case law waltz 
through that minefield. That worked great for Australia and the 
US!&lt;/p&gt;
&lt;/div&gt;

&lt;blockquote class="email"&gt;
&lt;ul&gt;	&lt;li&gt;clarify the roles and responsibilities of Internet
	Service Providers related to the copyright content flowing
	over their network facilities; and&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;div class="fisk"&gt;
&lt;p&gt;We don't want to require Canadian internet service providers to 
police the content that flows through their networks because Canada 
actually has a Privacy Commissioner. We would be hung by our 
eyelids and kicked until we blink. That's, um, bad for Canadians. 
And the marketplace. And innovation. And we like our eyelids.&lt;/p&gt;
&lt;p&gt;We'll require ISPs to forward takedown notices to customers 
instead of requiring them to immediately remove the material. 
This may seem a little soft on violators, sure, but we still don't 
impose any penalties on companies that issue incorrect notices. 
Scattershot subpoenas and intimidation are still valid tactics!&lt;/p&gt;
&lt;/div&gt;

&lt;blockquote class="email"&gt;
&lt;ul&gt;	&lt;li&gt;provide photographers with the same rights as other
	creators.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;div class="fisk"&gt;
&lt;p&gt;Oh, and we'll throw a sop to the photographers. They've been 
getting boned for decades. Time to bone some other group for a 
while.&lt;/p&gt;
&lt;/div&gt;

&lt;blockquote class="email"&gt;
&lt;p&gt;What Bill C-61 does not do:&lt;/p&gt;
&lt;ul&gt;	&lt;li&gt;it would not empower border agents to seize your iPod 
	or laptop at border crossings, contrary to recent public 
	speculation&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;div class="fisk"&gt;
&lt;p&gt;Bill C-61 doesn't let border guards seize your digital devices, 
because bills are subject to parliamentary review. Instead, we'll 
leave that to the ACTA, which we're working on in secret. 
Canadians don't have to worry their pretty little heads about the 
international commitments that we're making on their behalf. 
Nobody will mind, anyhow: border crossing is such a fast, painless 
procedure that adding on just a little bit of intrusive searching 
won't hurt anyone.&lt;/p&gt;
&lt;/div&gt;

&lt;blockquote class="email"&gt;
&lt;p&gt;What this Bill is not:&lt;/p&gt;
&lt;ul&gt;	&lt;li&gt;it is not a mirror image of U.S. copyright laws. Our 
	Bill is made-in-Canada with different exceptions for 
	educators, consumers and others and brings us into line 
	with more than 60 countries including Japan, France, 
	Germany and Australia&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;div class="fisk"&gt;
&lt;p&gt;We are high as kites.&lt;/p&gt;
&lt;/div&gt;

&lt;blockquote class="email"&gt;
&lt;p&gt;Bill C-61 was introduced in the Commons on June 12, 2008 by 
Industry Minister Jim Prentice and Heritage Minister Jos&amp;eacute;e 
Verner.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="fisk"&gt;
&lt;p&gt;We made this! Right here in Canada! That makes it good!&lt;/p&gt;
&lt;/div&gt;

&lt;blockquote class="email"&gt;
&lt;p&gt;For more information, please visit the Copyright Reform Process 
website at &lt;a href="http://www.ic.gc.ca/epic/site/crp-prda.nsf/en/home"&gt;www.ic.gc.ca/epic/site/crp-prda.nsf/en/home&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thank you for sharing your views on this important matter.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="fisk"&gt;
&lt;p&gt;Our circular file welcomes your feedback.&lt;/p&gt;
&lt;/div&gt;

&lt;blockquote class="email"&gt;
&lt;p&gt;The Honourable Jim Prentice, P.C., Q.C., M.P.&lt;br /&gt;
Minister of Industry&lt;/p&gt;
&lt;p&gt;The Honourable Josée Verner, P.C., M.P.&lt;br /&gt;
Minister of Canadian Heritage, Status of Women
and Official Languages and Minister for
La Francophonie&lt;/p&gt;
&lt;/blockquote&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:9626</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/9626.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=9626"/>
    <title>99 bottles of way too much time on my hands</title>
    <published>2008-04-18T04:56:31Z</published>
    <updated>2008-04-18T05:03:43Z</updated>
    <content type="html">&lt;p&gt;Because my cow-orkers just &lt;em&gt;had&lt;/em&gt; to bring up the &lt;a href="http://99-bottles-of-beer.net"&gt;Dreaded Site&lt;/a&gt;&amp;trade;, and I just &lt;em&gt;had&lt;/em&gt; to look at the Scheme version and note that, while at least it was present, the organization of the code in all three versions left a great deal to be desired. A few more moments of reading revealed that the output was wrong, too.&lt;/p&gt;
&lt;p&gt;I'm sure you can see where this is going.&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;&lt;code class="scheme r5rs"&gt;
&lt;em&gt;;; Gnomon - on Thu Apr 17 23:54:52 EDT 2008
;; sha1sum of lastname, firstname, newline:
;; 3952893c66ffbe071f266caa04b25161c1da30a1
;; Because I wanted a version that would Do
;; The Right Thing with capitals and plural
;; cases, and because mixing logic, display
;; and generation code does not satisfy me.&lt;/em&gt;

(&lt;strong&gt;define&lt;/strong&gt; (iota n)
  (&lt;strong&gt;let&lt;/strong&gt; loop ((l '()) (i 0))
    (&lt;strong&gt;if&lt;/strong&gt; (&lt;strong&gt;&amp;gt;&lt;/strong&gt; i n)
        l
        (loop (&lt;strong&gt;cons&lt;/strong&gt; i l) (&lt;strong&gt;+&lt;/strong&gt; i 1)))))
&lt;em&gt;;; See &lt;a href="http://srfi.schemers.org/srfi-1/"&gt;SRFI-1&lt;/a&gt; for a better version of this;
;; my function is backward in several ways.
;; It can also be argued that &lt;a href="http://srfi.schemers.org/srfi-42/"&gt;SRFI-42&lt;/a&gt; could
;; allow an implementation that consed up a
;; bit less temporary garbage. If SRFI-1 is
;; out, though, SRFI-42 is way out. Basics.&lt;/em&gt;

(&lt;strong&gt;define&lt;/strong&gt; (plural? n . up)
  (&lt;strong&gt;let&lt;/strong&gt; ((.. &lt;strong&gt;string-append&lt;/strong&gt;)
        (num (&lt;strong&gt;number-&amp;gt;string&lt;/strong&gt; n))
        (bot " bottle")
        (ltr (&lt;strong&gt;if&lt;/strong&gt; (&lt;strong&gt;null?&lt;/strong&gt; up) "n" "N")))
    (&lt;strong&gt;case&lt;/strong&gt; n ((0) (.. ltr "o more" bot "s"))
            ((1) (.. num bot))
            (&lt;strong&gt;else&lt;/strong&gt; (.. num bot "s")))))
&lt;em&gt;;; PLURAL? has to merge the logic for cases
;; when the string will be used at the head
;; of a sentence, requiring a capital; when
;; only one bottle is left, which needs the
;; singular form; and when none are left at
;; all, which requires a special case. It's
;; lucky that not all combinations of these
;; cases can be reached, allowing us to use
;; only three of the possible six branches.&lt;/em&gt;

(&lt;strong&gt;define&lt;/strong&gt; (verse n)
  (&lt;strong&gt;let&lt;/strong&gt; ((.. &lt;strong&gt;string-append&lt;/strong&gt;)
        (top (plural? n 1))
        (mid (plural? n))
        (nxt (plural? (&lt;strong&gt;if&lt;/strong&gt; (&lt;strong&gt;=&lt;/strong&gt; n 0)
                          99
                          (&lt;strong&gt;-&lt;/strong&gt; n 1))))
        (beer " of beer")
        (wall " on the wall")
        (actn (&lt;strong&gt;if&lt;/strong&gt; (&lt;strong&gt;=&lt;/strong&gt; n 0)
                  "Go to the store and buy some more, "
                  "Take one down and pass it around, ")))
    `(,(.. top beer wall ", " mid beer ".")
       .  ,(.. actn nxt  beer wall "."))))
&lt;em&gt;;; VERSE conses a pair where the CAR stores
;; the first line of the verse, and the CDR
;; the second. There is no sense in using a
;; proper list; we would just waste the end
;; of it anyways. Also: yay quasiquotation!&lt;/em&gt;

(&lt;strong&gt;define&lt;/strong&gt; (sing verse)
  (&lt;strong&gt;let&lt;/strong&gt; ((n &lt;strong&gt;newline&lt;/strong&gt;))
    (&lt;strong&gt;display&lt;/strong&gt; (&lt;strong&gt;car&lt;/strong&gt; verse)) (n)
    (&lt;strong&gt;display&lt;/strong&gt; (&lt;strong&gt;cdr&lt;/strong&gt; verse)) (n) (n)))
&lt;em&gt;;; SING exploits the implicit BEGIN wrapped
;; around the body of a LET to DISPLAY both
;; lines of a verse in order. Also note the
;; pleasant symmetry of CAR and CDR that we
;; get to use because of our choice made up
;; above in VERSE to use a dotted pair as a
;; representation instead of a proper list.&lt;/em&gt;

(&lt;strong&gt;for-each&lt;/strong&gt; sing (&lt;strong&gt;map&lt;/strong&gt; verse (iota 99)))
&lt;em&gt;;; MAP for effect, FOR-EACH for side effect&lt;/em&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;It's been submitted for inclusion, of course, with the following lines as an additional note to the site maintainers:&lt;/p&gt;

&lt;blockquote&gt;&lt;pre&gt;&lt;code class="scheme r5rs"&gt;
;; The code is long, the comments too;
;; A bit less wrong than version two;
;; No syntax-case, like version three;
;; Just one right place per step, you see.
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;I'm a little bit in love with the &lt;a href="http://www.aplusdev.org"&gt;A+&lt;/a&gt; &lt;a href="http://99-bottles-of-beer.net/language-a+-11.html"&gt;version&lt;/a&gt;.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:9258</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/9258.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=9258"/>
    <title>awk snippet, rep: duplicate a string N times</title>
    <published>2008-04-09T01:32:20Z</published>
    <updated>2008-04-09T01:32:20Z</updated>
    <category term="code awk"/>
    <lj:music>Postmaster, from Demographically Unsound by Tettix</lj:music>
    <content type="html">&lt;p&gt;I'm going to start posting the random bits of awk code that I come up with.&lt;/p&gt;
&lt;p&gt;Sorry.&lt;/p&gt;
&lt;p&gt;For a project about which I'll be writing more in a bit, I needed the ability to quickly produce long strings - on the order of a few dozen, and in some case a few hundred, mebibytes. I went through several iterations before I came up with a version that I liked. That version is called &lt;code class="awk"&gt;rep6&lt;/code&gt; in the below source code; in my personal library file I would just call it &lt;code class="awk"&gt;rep&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;pre&gt;&lt;code class="awk"&gt;&lt;em&gt;#!/bin/gawk -f 

# by gnomon
# sha1sum of printf &amp;quot;%s %s&amp;quot;, firstname, lastname:
# 1110be40263bc427f7906f4e01c0cc218c6daf6e
# Tue Apr  8 21:11:32 EDT 2008
#
# posted to #awk in the hopes of garnering some feedback
# about style, ideas and performance. 

# GPL v2 (but it's not finished yet, so why bother?)&lt;/em&gt;

&lt;strong&gt;function&lt;/strong&gt; rep1(s,n,      r) {
&lt;em&gt;# O(n) allocate/appends
# 2 lines of code
# This is the simplest possible solution that will work:
# just repeatedly append the input string onto the value
# that will be passed back, decrementing the input count
# until it reaches zero.&lt;/em&gt;
        &lt;strong&gt;while&lt;/strong&gt; (n--&amp;gt;0) r = r s;
        &lt;strong&gt;return&lt;/strong&gt; r;
}

&lt;strong&gt;function&lt;/strong&gt; rep2(s,n,      r) {
&lt;em&gt;# O(1) + O(n) allocate/appends
# 3 lines of code
# The idea here is to generate a string of length n with
# sprintf and then use gsub to replace everything in the
# generated string with the input string. Hopefully this
# will take advantage of some smart internal workings of
# the regex engine to avoid repeated allocations.
# UPDATE: false hope. This is by far the slowest tactic.&lt;/em&gt;
        r = &lt;strong&gt;sprintf&lt;/strong&gt;((&amp;quot;%0&amp;quot;n-1&amp;quot;s&amp;quot;),&amp;quot;0&amp;quot;);
        &lt;strong&gt;gsub&lt;/strong&gt;(/0/,s,r);
        &lt;strong&gt;return&lt;/strong&gt; r;
}

&lt;strong&gt;function&lt;/strong&gt; rep3(s,n,      c,n2,r,r2) {
&lt;em&gt;# O(log n) allocate/appends UPDATE: this is a lie!
# 6 lines of code
# Here we trade for faster execution by sacrificing some
# code clarity. We keep a temporary string and a counter
# that we start off at 1, doubling both until we pass n;
# then we start over at 1, and we repeat until exactly n
# is reached. This may be ugly but it is faaaaaaast.&lt;/em&gt;
        &lt;strong&gt;for&lt;/strong&gt; (;c &amp;lt; n; c += n2) {
                r2 = s;
                &lt;em&gt;#for (n2=1; n2*2&amp;lt;(n-c); n2*=2) {
                #     APPEND++; r2=r2 r2}&lt;/em&gt;
                &lt;strong&gt;for&lt;/strong&gt; (n2=1; n2*2&amp;lt;(n-c); n2*=2) r2=r2 r2;
                &lt;em&gt;# APPEND++;&lt;/em&gt;
                r  = r r2;
        }
        &lt;strong&gt;return&lt;/strong&gt; r;
}

&lt;strong&gt;function&lt;/strong&gt; rep4(s,n) {
&lt;em&gt;# O(1) allocate/appends
# 2 lines of code
# A feat - both stupid and naive! Is consing up a string
# to avoid repeated print operations really that bad, or
# can good buffering make a dumb idea actually workable?
# UPDATE: no, it can't. This still handily beats out the
# gsub version, but it's slower than rep1 and way slower
# than rep3. Moral: buffer not the unbufferable!&lt;/em&gt;
        &lt;strong&gt;while&lt;/strong&gt; (n--&amp;gt;0) &lt;strong&gt;printf&lt;/strong&gt; s;
        &lt;strong&gt;print&lt;/strong&gt; &amp;quot;&amp;quot;;
}

&lt;strong&gt;function&lt;/strong&gt; rep5(s,n,      r,x) {
&lt;em&gt;# O(log n) allocate/appends - *actually true* this time!
# 3 lines of code
# Rather than keeping track of a counter like rep3 does,
# here we just use the call stack and recurse. Turns out
# that I run out of RAM way faster than gawk runs out of
# call stack. There may be a good threshold at which the
# recursion can halt and we fall back to a simple append
# approach like rep1 - but really, why bother? This code
# is simple and fast. Also, the shortest possible string
# is one character, and 32 recursive calls turn that one
# character into 4,294,967,296; that is more than enough
# to fill all available RAM on most current machines. If
# it doesn't, the performance is likely to be limited by
# the speed of malloc() (and therefore sbrk()) anyhow. A
# quick test reveals that gawk 3.1.5 on a 32-bit x86 box
# with 512 megs of RAM can stack just short of 7e3 calls
# before segfaulting; dc -e'2 7000^f' prints a very long
# number indeed: 2108 decimal digits, to be precise, and
# it will presumably take a good long while before every
# normal machine has that many bytes of RAM. We're safe.
        #DEPTH++;&lt;/em&gt;
        &lt;strong&gt;if&lt;/strong&gt; (n &amp;lt; 2) x = (n == 1);
        &lt;strong&gt;else&lt;/strong&gt; r = rep5(s,(n-(x=(n%2==1)))/2);
        &lt;strong&gt;return&lt;/strong&gt; (r r (x?s:&amp;quot;&amp;quot;));
}

&lt;strong&gt;function&lt;/strong&gt; rep6(str,num,  remain,result) {
&lt;em&gt;# O(log n) allocate/appends - identical to rep5
# 7 lines of code
# This is a much cleaner version of the preceding block.
# For some reason I enjoy reading awk code bereft of the
# optional semicolons, but I enjoy writing it with; this
# is odd, but there it is. It'd be less embarassing if I
# showed only the below without any of the above, but it
# would be less valuable and less honest.
        #DEPTH++; # global var for counting recursions&lt;/em&gt;
        &lt;strong&gt;if&lt;/strong&gt; (num &amp;lt; 2) {
                remain = (num == 1)
        } &lt;strong&gt;else&lt;/strong&gt; {
                remain = (num % 2 == 1)
                result = rep6(str, (num - remain) / 2)
        }
        &lt;strong&gt;return&lt;/strong&gt; result result (remain ? str : &amp;quot;&amp;quot;)
}

BEGIN {
        &lt;em&gt;#NUM = 10000000;     STR = &amp;quot;foo&amp;quot;;&lt;/em&gt;
        NUM  = &lt;strong&gt;ARGV&lt;/strong&gt;[1] + 0; STR = &lt;strong&gt;ARGV&lt;/strong&gt;[2];
        &lt;strong&gt;delete ARGV&lt;/strong&gt;[1];    &lt;strong&gt;delete ARGV&lt;/strong&gt;[2];
        &lt;strong&gt;if&lt;/strong&gt;        (&lt;strong&gt;ARGV&lt;/strong&gt;[3] ~ /0/) {
                &lt;strong&gt;exit&lt;/strong&gt; 0;
        } &lt;strong&gt;else&lt;/strong&gt; &lt;strong&gt;if&lt;/strong&gt; (&lt;strong&gt;ARGV&lt;/strong&gt;[3] ~ /1/) {
                &lt;strong&gt;print&lt;/strong&gt; rep1(STR,NUM);
        } &lt;strong&gt;else&lt;/strong&gt; &lt;strong&gt;if&lt;/strong&gt; (&lt;strong&gt;ARGV&lt;/strong&gt;[3] ~ /2/) {
                &lt;strong&gt;print&lt;/strong&gt; rep2(STR,NUM);
        } &lt;strong&gt;else&lt;/strong&gt; &lt;strong&gt;if&lt;/strong&gt; (&lt;strong&gt;ARGV&lt;/strong&gt;[3] ~ /3/) {
                &lt;strong&gt;print&lt;/strong&gt; rep3(STR,NUM);
                #print APPEND &amp;gt;&amp;gt; &amp;quot;/dev/stderr&amp;quot;;
        } &lt;strong&gt;else&lt;/strong&gt; &lt;strong&gt;if&lt;/strong&gt; (&lt;strong&gt;ARGV&lt;/strong&gt;[3] ~ /4/) {
                rep4(STR,NUM);
        } &lt;strong&gt;else&lt;/strong&gt; &lt;strong&gt;if&lt;/strong&gt; (&lt;strong&gt;ARGV&lt;/strong&gt;[3] ~ /5/) {
                &lt;strong&gt;print&lt;/strong&gt; rep5(STR,NUM);
                &lt;em&gt;#print DEPTH &amp;gt;&amp;gt; &amp;quot;/dev/stderr&amp;quot;;&lt;/em&gt;
        } &lt;strong&gt;else&lt;/strong&gt; &lt;strong&gt;if&lt;/strong&gt; (&lt;strong&gt;ARGV&lt;/strong&gt;[3] ~ /6/) {
                &lt;strong&gt;print&lt;/strong&gt; rep6(STR,NUM);
                &lt;em&gt;#print DEPTH &amp;gt;&amp;gt; &amp;quot;/dev/stderr&amp;quot;;&lt;/em&gt;
        }
        &lt;strong&gt;delete&lt;/strong&gt; &lt;strong&gt;ARGV&lt;/strong&gt;[3];
        &lt;strong&gt;exit&lt;/strong&gt; 0;
}

&lt;em&gt;# FIXME:
# - investigate whether some tactics work better when
#   consing small iterations of very large strings;
# * done: the version that starts at one, doubles until
#   overflow and then starts again at one
# - see if there's some way of making the gsub approach
#   work better: it's too fun to abandon outright;
# - is there some way to use fewer state variables in
#   rep3? The current version is really awkward;
# - is there any way to collapse or compound the r2 and
#   r assignments in rep3 to shave a line or two?
# * sure, but rep3 is a dead end anyway. Reusing the
#   value returned by a variable assignment to remove a
#   reference to it works, as in rep5, but the result
#   is a mess and a waste of effort. Still fun, though.&lt;/em&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/blockquote&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:9083</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/9083.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=9083"/>
    <title>awk matcher performance - what gives?</title>
    <published>2008-03-27T04:19:39Z</published>
    <updated>2008-03-27T04:19:39Z</updated>
    <content type="html">&lt;p&gt;I'm tapping this out in T9 on my E50 rather than using one of the two keyboards I usually have in my kit bag&lt;sup&gt;[&lt;a href="#note1"&gt;1&lt;/a&gt;]&lt;/sup&gt;. It's not as goofy a setup as it sounds: one board is a ThinkOutside Stowaway that is smaller than the paperbacks I tote, and the other is an Apple Wireless which is thin enough to be a non-issue. I carry two because I keep the former paired with my phone and the latter with my N800, and I use the devices concurrently often enough that re-pairing is more onerous than taking the cargo space hit. Real-world space versus time optimization tradeoff, ladies and gents... But I digress.&lt;/p&gt;
&lt;p&gt;I'm tapping away on my phone because there's something I want to get out of my increasingly murky brain before I get so tired that it disappears completely, and there's a good chance that'll happen before I get home.&lt;/p&gt;
&lt;p&gt;The thing is this: mikeX, a fellow who hangs out in an IRC channel that I also frequent (#awk on irc.freenode.net), mentioned that he ran a performance comparison between a couple of constructions that ought to be equivalent:&lt;/p&gt;
&lt;ul&gt;	&lt;li&gt;&lt;code&gt;time gawk '/test/{print $2}' file.txt&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;time mawk '/test/{print $2}' file.txt&lt;/code&gt;&lt;/li&gt;
	&lt;li&gt;&lt;code&gt;time grep test file.txt | awk '{print $2}'&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The file&lt;sup&gt;[&lt;a href="#note2"&gt;2&lt;/a&gt;]&lt;/sup&gt; was fifteen mebibytes of short lines with only one line, the last, containing the string "test". The first command turned out to be the slowest by far - about an order of magnitude. The second and third executed at roughly the same speed.&lt;/p&gt;
&lt;p&gt;What makes this particularly interesting is that mikeX had just finished skimming through the same paper&lt;sup&gt;[&lt;a href="#note3"&gt;3&lt;/a&gt;]&lt;/sup&gt; that I had coincidentally re-read just the night before - one which compares the merits of several classes of regular expression and regex engines - and concluded that the speed difference was due to a deficiency of the type discussed in the paper (basically, that grep, awk and others use a DFA-style matcher which offers sometimes huge speedups with patterns that do not require backreferences, and that Perl and several other languages use a backtracking matcher with horrific worst-case performance even in those situations when the simpler, hugely faster DFA could be used instead).&lt;/p&gt;
&lt;p&gt;One the one hand, this is definitely not the case, since the pattern in question is a fixed string and therefore is both the best case for any matcher and devoid of the kind of backtracking that would highlight the bad behaviour described in the paper; on the other hand, &lt;em&gt;something&lt;/em&gt; is causing that performance delta. So what gives?&lt;/p&gt;
&lt;p&gt;I seem to recall that grep calls into play some kind of fast-path logic when the pattern is a fixed string (something tricky like Boyer-Moore? Something macho like exploiting CPU-specific string-scanning instructions? Something slightly less macho but more insightful, like taking into account cache fill timings?). I know that mawk is reputed to be a very fast version of the tool. I suspect that the matcher in gawk is quite sophisticated. I'm curious to see how Dmitry Zakharov's busybox awk applet ranks on the speed tests.&lt;/p&gt;
&lt;p&gt;What I'm getting at, here, is that I'm about to do some code-diving that I think may yield some very educational results. I'll need some sleep first, though.&lt;/p&gt;
&lt;p&gt;Hey, here's my stop.&lt;/p&gt;

&lt;hr&gt;

&lt;dl&gt;
&lt;dt&gt;&lt;a name="note1"&gt;1&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;	&lt;p&gt;OK, I'm cleaning this up after getting home. HTML editing and linking is way, way too painful to do with T9 and an impoverished text editor.&lt;/p&gt;
&lt;/dd&gt;

&lt;dt&gt;&lt;a name="note2"&gt;2&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;	&lt;p&gt;If you're curious enough to want to duplicate the test, you can generate your own test file with the following pipeline:&lt;/p&gt;
	&lt;blockquote&gt;
	&lt;code&gt;time awk 'function r(s,n){while(n--&amp;gt;0)print s};BEGIN{s=ARGV[1];n=ARGV[2];r(s,n);print "test case hello world";r(s,n);exit 0}' "Hello world, how are you" 300000 &amp;gt; test-file.txt&lt;/code&gt;
	&lt;/blockquote&gt;
	&lt;p&gt;That shouldn't take longer than a second or two to run, and should generate a file with the md5sum &lt;code&gt;9cf078b42b15b6927d04b08c82699e16&lt;/code&gt;.&lt;/p&gt;
&lt;/dd&gt;

&lt;dt&gt;&lt;a name="note3"&gt;3&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;	&lt;p&gt;&lt;a href="http://swtch.com/~rsc/regexp/regexp1.html"&gt;Regular Expression Matching Can Be Simple And Fast&lt;/a&gt;, Russ Cox, 2007-01&lt;/p&gt;
&lt;/dd&gt;
&lt;/dl&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:8741</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/8741.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=8741"/>
    <title>Petals on a wet, black bough</title>
    <published>2008-03-15T01:53:53Z</published>
    <updated>2008-03-15T01:53:53Z</updated>
    <lj:music>Technology Crisis - Earth's Assault on the Central AI</lj:music>
    <content type="html">&lt;p&gt;On the commute home today, I saw:&lt;/p&gt;
&lt;ul&gt;    &lt;li&gt;A kid, not a day older than sixteen, in a secondhand jacket, sporting a red fitted cap covered in thin black squiggles with a
stylized letter F above the bill. His chin crept back to halfway between his underbite and his adam's apple. He fiddled with his iPod as he sat down, then stowed it in his backpack. He pulled a dog-eared Penguin Classic out of his artfully distressed backpack - I couldn't resolve the title - and settled in. Five stops whipped by. It wasn't until he dotted the page that he noticed he was crying.&lt;/li&gt;
    &lt;li&gt;Two large guys with identical haircuts and choice of clothing style. They breezed into the subway just behind a very blonde, very leggy lady wearing a very brief skirt indeed, and they all sat down together. The guys both wore very fashionable glasses and expensive clothing that didn't hide that they were both a good bit overweight. They grinned at each other and the rest of the subway and barely paid any attention to her attempts at making conversation. One nudged the other with his elbow and leaned in to crack a joke. They both laughed so hard for so long that they didn't see the lady get up to offer her seat to a swaying, grateful octogenerian.&lt;/li&gt;
    &lt;li&gt;A lady in her late fifties dourly poking at the keypad of a Nokia N70 and convincing it to map her keypresses into ideographs. She filled two entire screens, then patiently waited until the subway reached a point on the track where it hit open air and GSM reception. She carefully examined the small cornerful of pixels that graphed her signal strength, waited for it to max out, then hit Send. Once the screen emptied, she stashed the handset in her coat pocket, chuckled, then broke out into a grin so wide that I couldn't help but return it.&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:8604</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/8604.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=8604"/>
    <title>Dear CBC, Re: Canadia 2056</title>
    <published>2008-02-11T06:09:19Z</published>
    <updated>2008-02-11T06:09:19Z</updated>
    <content type="html">&lt;pre&gt;To: CBC Radio (&lt;a href="http://www.cbc.ca/canadia2056/index.html?copy-contactus"&gt;via&lt;/a&gt;)
From: [excised]
X-from-city: Toronto
X-from-province: Ontario&lt;/pre&gt;

&lt;blockquote&gt;
&lt;p&gt;Dear CBC,&lt;/p&gt;
&lt;p&gt;I am addressing the broadcasters and/or administrators, and not the show creators, right? Because if this &lt;em&gt;*is*&lt;/em&gt; being read by a show creator, I'm talking to the wrong people. Could you forward it on to the guy with the corner office and the speakerphone? Much obliged. Coffee's on me next time.&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;Dear CBC,&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cbc.ca/canadia2056/"&gt;Canadia 2056&lt;/a&gt; troubles me. I've heard and read excellent things about it. A couple of my friends who got on the bandwagon early enough to catch the first season in its entirety tell me that it's excellent. The premise is right up my alley, and I grew up on Grant Naylor and Douglas Adams, after all.&lt;/p&gt;
&lt;p&gt;Dear CBC, why do you make it so hard for new listeners to find this show?&lt;/p&gt;
&lt;p&gt;There aren't any podcasts.&lt;/p&gt;
&lt;p&gt;There aren't any sample episodes (not even the first one!).&lt;/p&gt;
&lt;p&gt;There is a &lt;a href="http://www.cbcshop.ca/CBC/shopping/product.aspx?Product_ID=ERART00217&amp;amp;Variant_ID=CAN2056&amp;amp;lang=en-CA"&gt;rather pricy CD set&lt;/a&gt; available, but it seems that the only place selling it is the online &lt;a href="http://www.cbcshop.ca/CBC/default.aspx?lang=en-CA"&gt;CBC Shop&lt;/a&gt;. The high price isn't a showstopper, but the fact that the Shop &lt;a href="http://www.cbcshop.ca/CBC/content/ShopInfo.aspx?topic_ID=PaymentMethods"&gt;only accepts credit cards&lt;/a&gt; or gift cards which have been purchased with credit cards certainly is.&lt;/p&gt;
&lt;p&gt;Dearest Canadian Broadcasting Corporation, &lt;a href="http://mattwatts.ca/?p=162"&gt;I understand&lt;/a&gt; that there are guild and union complexities here that make distribution challenging. I really do understand it, and I don't mean to downplay how difficult it is to work these things out.&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;Loveliest and most rose-scented CBC, please also understand, though, that you've got a great show here, and a potentially rabid fan base. The standard deal in these situations is this: you make it possible for your fans to listen to the show, and we in return make it vastly popular, perhaps eventually raising it to the level of a cultural classic. Gobs of money get made, awards get handed out, everyone goes home happy. Isochronous broadcasting models simply don't reach the target audience, here. The good news is that there is a myriad, a plenitude, a veritable cornucopia of alternative distribution channels; and I absolutely guarantee that if there are any motivated fans out there, the show is one five-line crontabbed shell script from being redistributed without you - a win for audiences in only the shortest of terms.&lt;/p&gt;
&lt;p&gt;O most inscrutable and confusing CBC - let's do this thing, shall we?&lt;/p&gt;
&lt;p&gt;Thanks ever so much.&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;Slightly creepily yours,&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Ben&lt;/p&gt;&lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;hr /&gt;

&lt;pre&gt;To: CBC Radio (&lt;a href="http://www.cbc.ca/canadia2056/index.html?copy-contactus"&gt;via&lt;/a&gt;)
From: [excised]
X-from-city: Toronto
X-from-province: Ontario&lt;/pre&gt;

&lt;blockquote&gt;
&lt;p&gt;Dear Canadia site maintaners,&lt;/p&gt;
&lt;p&gt;There may be a typo or wto on the &lt;a href="http://www.cbc.ca/canadia2056/"&gt;front pge&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;"New on the video page this week. Producer and director Greg De Clute speaks on the creation of an epsiode of the show."&lt;/p&gt;
&lt;p&gt;"The first season of Canadia 2056 is now avaiable on CD from the CBC Shop."&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I am as excited as everyone about the epsiodes now avaiable at the CBC Shop, but whiskey tango foxtrot - how did those zingers evaid the speelchecker?&lt;/p&gt;
&lt;br /&gt;
&lt;p&gt;Cordially your,&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Bne&lt;/p&gt;&lt;/blockquote&gt;
&lt;/blockquote&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:8402</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/8402.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=8402"/>
    <title>Collection time</title>
    <published>2008-02-08T04:11:30Z</published>
    <updated>2008-02-08T04:11:30Z</updated>
    <lj:music>Ciaran Hamilton's strings remix of Hide and Seek</lj:music>
    <content type="html">&lt;p&gt;Dear internets, I owe you writings. Don't send the goons yet. My wife's been sick, my dog needed surgery, the recession has driven the price of keyboard presses so high... I see that you are unmoved.&lt;/p&gt;&lt;p&gt;Very well, then.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:7998</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/7998.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=7998"/>
    <title>Moderately open letter to 2K Games about BioShock and SecuROM</title>
    <published>2007-09-13T04:57:19Z</published>
    <updated>2007-09-13T18:24:57Z</updated>
    <category term="firstworldproblems"/>
    <category term="drm"/>
    <category term="securom"/>
    <category term="bioshock"/>
    <category term="gaming"/>
    <content type="html">&lt;p&gt;I'm frustrated with the BioShock. I want to buy it, but I can't; and I want it badly enough that my frustration has fuelled a letter rather than just a decision not to purchase the game.&lt;/p&gt;
&lt;p&gt;The 2K Games BioShock forum has &lt;a href="http://forums.2kgames.com/forums/showthread.php?t=6979"&gt;a thread&lt;/a&gt; on the topic. It seems that I am far from the only person who feels this way. Also, many of the people I asked for copyediting and proofreading advice mentioned that they would like to express support for my contention; it was not my intention to do anything but send this letter in by registered mail, representing only myself, but I certainly don't mind if others weigh in as well.&lt;/p&gt;
&lt;p&gt;My plan is to print out the following next Friday (the 21st), modulo any good content advice received before then; to count up the number of people who respond to this post with anything containing the words "me too"; to include that number along with a link to this page as an addendum; and to send the whole mess to 2K Boston, 2K Games, and Take Two Interactive by registered mail. I'll probably toss over a copy to Elizabeth Tobey over at the &lt;a href="http://www.2kgames.com/cultofrapture/home.html"&gt;Cult of Rapture&lt;/a&gt;, since she is keeping in touch with the fanbase.&lt;/p&gt;
&lt;p&gt;I don't expect this to accomplish anything specific beyond venting my own frustration. I can hope, though.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p class="sec intro"&gt;Dear 2K Games,&lt;/p&gt;

&lt;p class="sec"&gt;Thank you for BioShock. It has lived up to the System Shock legacy, garnered glowing critical praise, and      raised the bar for graphics, gameplay and writing. Congratulations: you've earned it!&lt;/p&gt;
&lt;p&gt;On the other hand, BioShock has deeply disappointed me. I can't buy it, and I can't play it. Here's why.&lt;/p&gt;

&lt;p class="sec"&gt;My friends and I are avid, dedicated gamers. We have huge libraries encompassing classic adventures to the     very latest console titles.  Games are as important to us as books, movies and music; they are points in the history of the   gaming industry and in our own lives.  It's wonderful to dust off an old game and spend a rainy Sunday afternoon strolling    down memory lane in the Great Underground Empire, or Britannia, or Citadel Station, or Hell.&lt;/p&gt;
&lt;p&gt;Control software requires us to rely either on publisher benevolence for future replayability or on the skills of the game-cracking underground. I can trust only the latter, since the stance of the former has repeatedly been made crystal clear. I   appreciate assurances of future unlocking, but only software crackers have delivered.&lt;/p&gt;

&lt;p class="sec"&gt;I use my computer for serious work, and I write software for personal, pedagogical and public purposes. A      reliable, transparent and deterministic computer is a necessity for this, not a luxury. SecuROM makes even installing         BioShock a non-starter.&lt;/p&gt;
&lt;p&gt;I maintain many computers for my employer, family and friends, and myself; I know too well the headaches that SecuROM      causes and I won't pay for that pain. I must refuse to support systems with it installed - reluctantly, since stranding       friends is anathema, but refusal is the only reasonable action. SecuROM is not open or reviewed software. Its threat model    includes the user performing actions on his or her own machine. It claims administrative control of the user's system. When   opaque software does this, the computer can and must no longer be trusted.&lt;/p&gt;
&lt;p&gt;I encourage my friends to do their own research, starting with your FAQ. Those who read up on the topic more often than    not decide against purchasing your game.&lt;/p&gt;

&lt;p class="sec"&gt;Principle is also at stake. It is wrong and unfair that your ardent, honest fans must jump through hoops -     managing activations, juggling discs, surrendering user choice about acceptable hardware and software - while those who play  without paying, those whom you ought to discourage and inconvenience, instead enjoy a better experience.&lt;/p&gt;
&lt;p&gt;Playing an illegitimate copy would perhaps satisfy my technical and historical objections, but it would neglect the        equally important points of system and ethical integrity. I must emphasize that this is not an option. &lt;/p&gt;

&lt;p class="sec"&gt;Control software punishes only users who try to do the right thing. Regardless of intent, requiring that       SecuROM be installed treats every user as a threat and a thief, and a lazy one, since cracked copies are widely available. It is technically painful; demonstrably ineffective; offensive and condescending; and it deeply compromises the playability of   your game. This is not acceptable.  &lt;/p&gt;
&lt;p&gt;This is &lt;em&gt;not acceptable&lt;/em&gt;.&lt;/p&gt;

&lt;p class="sec"&gt;I write regretfully, but with optimism. If I thought there were no chance of changing your mind, I would not   have bothered. You can still do the right thing. I'll be the first in line to purchase BioShock when it is sold in an         acceptable format, but neither I nor anyone I can influence will purchase games on your current unreasonable terms.&lt;/p&gt;

&lt;p class="sec"&gt;Your fan,&lt;/p&gt;
&lt;p class="sig"&gt;&lt;em&gt;[me]&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:7807</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/7807.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=7807"/>
    <title>AACS golf, round 2</title>
    <published>2007-05-31T08:09:18Z</published>
    <updated>2007-05-31T08:09:18Z</updated>
    <content type="html">&lt;p&gt;Scheme code, with no constant values longer than three decimal digits (i.e. AACS-Golf format):&lt;/p&gt;
&lt;blockquote&gt;
&lt;code&gt;&lt;pre&gt;(let ((^ expt))
  (* (+ -170
        (* 23 29 101 269
           (- (^ 2 11) 307)
           (- (^ 2 11) 175)
           (^ 3 4) (^ 7 3)
           (+ 89 (* (^ 2 7) (^ 3 8)))))
     (* 2 3 3 11 37 229 (- (^ 2 11) 855)
        (+ (^ 2 15) 645))))&lt;/pre&gt;&lt;/code&gt;
&lt;/blockquote&gt;

&lt;p&gt;In case anyone else wants to play AACS-Golf, the value you now want to factor is, in decimal:
&lt;blockquote&gt;92214563780560366130661709445338835634&lt;/blockquote&gt;

&lt;p&gt;Hexadecimal:&lt;/p&gt;
&lt;blockquote&gt;455FE10422CA29C4933F95052B792AB2&lt;/blockquote&gt;

&lt;p&gt;Segmented hexadecimal:&lt;/p&gt;
&lt;blockquote&gt;45 5F E1 04 22 CA 29 C4 93 3F 95 05 2B 79 2A B2&lt;/blockquote&gt;

&lt;p&gt;Binary octets:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;01000101 01011111 11100001 00000100
00100010 11001010 00101001 11000100
10010011 00111111 10010101 00000101
00101011 01111001 00101010 10110010&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;Binary string:&lt;/p&gt;
&lt;blockquote&gt;01000101&lt;wbr&gt;01011111&lt;wbr&gt;11100001&lt;wbr&gt;00000100&lt;wbr&gt;00100010&lt;wbr&gt;11001010&lt;wbr&gt;00101001&lt;wbr&gt;11000100&lt;wbr&gt;10010011&lt;wbr&gt;00111111&lt;wbr&gt;10010101&lt;wbr&gt;00000101&lt;wbr&gt;00101011&lt;wbr&gt;01111001&lt;wbr&gt;00101010&lt;wbr&gt;10110010&lt;/blockquote&gt;

&lt;p&gt;The rules of AACS-Golf: using only the &lt;code&gt;+&lt;/code&gt; (addition), &lt;code&gt;-&lt;/code&gt; (subtraction), &lt;code&gt;*&lt;/code&gt; (multiplication), &lt;code&gt;/&lt;/code&gt; (division) and &lt;code&gt;^&lt;/code&gt; (exponentiation) operators, and the &lt;code&gt;(&lt;/code&gt; and &lt;code&gt;)&lt;/code&gt; (parentheses) grouping operators, construct an expression which evaluates to the most recently compromised AACS processing key; no constant value may have more than N (base M) digits; score is given according to the number of constants which appear in the expression; lowest score wins.&lt;/p&gt;

&lt;p&gt;My AACS-Golf entry for 3-base-10, above, nets me a score of 32. I'm sure someone else can do better. What's your score?&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:7521</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/7521.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=7521"/>
    <title>Factoring the Number du Jour</title>
    <published>2007-05-02T17:49:49Z</published>
    <updated>2007-05-02T17:49:49Z</updated>
    <content type="html">&lt;p&gt;This is terrible, terrible code. Just stupendously terrible. The only reason I wrote it is because I was idly factoring by hand using &lt;code&gt;dc(1)&lt;/code&gt; for about twenty minutes and got tired of it.&lt;/p&gt;
&lt;p&gt;So please don't judge my coding, or Scheme, by the quality of the below. I know that the algorithm is braindead too.&lt;/p&gt;
&lt;code&gt;&lt;pre&gt;(define (find-factors-seeded num . start-factors)
  (let ((bound (/ num 2))
        (decimation (apply * start-factors)))
    (let loop ((factors start-factors)
               (factor (apply max start-factors))
               (num (/ num decimation)))
      (cond ((&amp;gt; factor bound)
             (reverse factors))
            ((= 0 (remainder num factor))
             (begin
               (display factor)
               (display "\t")
               (display num)
               (newline)
               (loop (cons factor factors)
                     factor
                     (/ num factor))))
            (else
             (loop factors (+ 2 factor) num))))))

(define (factor-hd-dvd-processing-key)
; (find-factors-seeded
;  13256278887989457651018865901401704640
;  2 2 2 2 2 2 5 19 12043 216493)
  (find-factors-seeded
   13256278887989457651018865901401704640
   2 2 2 2 2 2 5 19 12043))&lt;/pre&gt;&lt;/code&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:7326</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/7326.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=7326"/>
    <title>User Code on the Nintendo DS</title>
    <published>2007-01-11T01:51:11Z</published>
    <updated>2007-01-11T01:51:11Z</updated>
    <content type="html">&lt;p&gt;The Nintendo DS is a terrific piece of hardware.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;First of all, it's a brilliant gaming device. The touch screen, though admittedly still ever-so-slightly tinged with gimmickry, has been used to great effect in a bunch of different games, and developers seem now to have a firm handle on when to use it and when to concentrate on the buttons instead. The games coming out for it are really, really excellent: I've put more hours into Castlevania: Dawn of Sorrow than I'd really care to admit, and Portrait of Ruin is edging its way up near Symphony of the Night and Metroid as one of my favourite side-scrollers of all time. The multiplayer aspects, too, are just superb. I've had bundles of fun playing New Super Mario Bros, Mario Kart and Metroid Prime: Hunters; the few times I've had the chance to play Tetris DS with more than three other people at the same time have been laugh riots; and playing over the internet is both surprisingly fluid and a whole lot of fun.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Second of all, the hardware is excellent and the hobbyist coder scene for the device is booming. Sure, there is the normal amount of game stealing taking place - I mean, that pall hangs over every console system - but there's so much original stuff being cranked out for the DS, and the games are so comparatively inexpensive, that there's really not much incentive to snarf ROMs. There &lt;em&gt;is&lt;/em&gt; something to be said about being able to carry around a single card instead of a bagful of physical game cartridges, though, and that brings me to the point of this whole deal: aftermarket writeable carts.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Getting the DS to boot something other than an official game is a difficult process, or at least it used to be. There's a whole digital signature infrastructure in place as well as some other hardware- and software-verification shenanigans in place to prevent anything but official games from booting, but we all know exactly what these kinds of measures are worth: if motivated enthusiasts can physically touch the device, it's purely a matter of time before the thing is running Yet Another Tetris Clone and booting some variant of Linux.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Oh, wait, &lt;a href="http://www.dslinux.org"&gt;whaddya know&lt;/a&gt;?&lt;/p&gt;&lt;br /&gt;&lt;p&gt;First-generation attempts to boot user code on the DS were awkward: they involved faking out the verification routines with an actual game, then swapping in the user code using a few neat memory redirection techniques and a writeable cart in the secondary GameBoy Advance port without the DS firmware noticing. Crafty, but clunky.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Then came the PassMe and FlashMe tactics, the former which simply allowed booting of user code in the GBA port without requiring a real game cart and the latter which involved flashing the actual BIOS of the DS - inventive but risky.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Nowadays there are &lt;a href="http://en.wikipedia.org/wiki/Nintendo_DS_storage_devices"&gt;slick devices&lt;/a&gt; like the DS-X and the M3 DS Simply. The DS-X (around $120) looks like a normal DS cartridge with a pair of LEDs and a USB port on the top of it. Plug it into your computer and it shows up like a 512-megabyte flash drive, just waiting for you to copy over whatever programs or games you want to run on your DS; plug it into your DS and it will boot into a program launcher, ready to fire up whatever you've copied into its internal store. The M3 DS Simply (closer to $45) does exactly the same thing except that it lacks the LEDs and has no internal storage: instead, it accepts MicroSD cards (which, these days, can hold upward of two gigabytes apiece and which cost approximately Who Cares, They're So Cheap It Doesn't Matter).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Devices from the previous generation - the ones that slot into the secondary GameBoy Advance port on the DS and need a (Pass|Flash)Me to boot (like the Supercard Lite or M3 Perfect/Pro, usually around $40 these days) - are still useful for two reasons. One, if you opt for a full GBA-sized cart, you can also use it in your actual GBA hardware (which may not sound like a big win until you remember that the GBA has a serial port that the DS lacks, making it much easier to plug hobbyist hardware into the older system); two, earlier models accomplished their boot-and-switch tricks by having a small amount of internal RAM - usually about 32 megs - that they would copy code into before running, and this RAM can be used by DSLinux for its own nefarious ends... like running IRC clients, web browsers, SSH clients and so forth.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Hmmm, Forth... Perhaps even Scheme, too? Mwahahaha!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So for about eighty bucks - two games - plus the cost of a MicroSD card or two, you could be running all kinds of nifty programs and carrying around your entire collection of GBA and DS software, and all in a slick colour-matched package that makes your game machine look like it was made that way.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:6972</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/6972.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=6972"/>
    <title>All I want for ChristmaAAAAIEEEEAAAAARGH WHUMP WHUMP WHUMP CRUNCH WHUMP WHUMP SQUISH SMACK DRIP</title>
    <published>2006-12-12T03:08:55Z</published>
    <updated>2006-12-12T03:08:55Z</updated>
    <lj:music>Beatles - Love - I Am the Walrus</lj:music>
    <content type="html">&lt;p&gt;&lt;a href="http://dreamlandtoyworks.com/my_little_cthulhu.html"&gt;Oh boy oh boy oh boy!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(&lt;a href="http://jwz.livejournal.com/722364.html"&gt;via&lt;/a&gt; &lt;a href="http://jwz.livejournal.com"&gt;jwz&lt;/a&gt;, of course)&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:6694</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/6694.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=6694"/>
    <title>No Thrills</title>
    <published>2006-12-12T02:23:54Z</published>
    <updated>2006-12-12T02:23:54Z</updated>
    <lj:music>wind, traffic, static</lj:music>
    <content type="html">&lt;p&gt;A young man once found himself, as one usually does at the beginning of these stories, in the wrong place at the wrong time. He reacted in an atypical, coolheaded and quick-witted fashion, highlighting by turns his above-average physical prowess, attractive but not overwhelming good looks and his downright innate likability. Unfortunately his reasonable, even laudable actions drew him into a very complicated situation: there were more people who needed and asked for his help, a group of organized competents who unfortunately were motivated at cross purposes to the ones asking for help, and - as always - an attractive, feisty young lady who for some reason had managed to rack up a long string of romantic failures. It must have been her shining idealism, or perhaps just that she placed her career as a doctor, scientist, lawyer, professor or crusading mammal-saver above her own wants and needs.&lt;/p&gt;

&lt;p&gt;Things went from bad to worse for the young man as his actions and inaccurately expressed and acted-upon belief in The Right Thing curried equal parts of favour from those who needed help and ire from those who wished that he would just butt the hell out. Involvement, curiousity, belligerence and self-righteousness raced to the boil in both groups.  More and more important people got drawn in on both sides, and eventually towering spires of political, economic, electronic and pyrotechnic power were grabbed and swung by both sides like snapped-off pool cues. The fallout left the young man and woman bruised and aching, but their friends, families, psyches, hometowns or personal lives were permanently scarred or destroyed.&lt;/p&gt;

&lt;p&gt;After a lull conveniently timed to last just long enough for the grieving process to progress from despair to incandescent rage, the young man and woman marshalled their resources and draw upon a couple of heretofore concealed or unavailable reserves of information, inspiration or firepower to mount one final offense against the enemy before Time Ran Out. They would have succeeded, too, except for just one or two subtle but vital flaws that, in their haste, they had neglected to iron out of their plan. Just when all hope was lost, however, the young woman revealed both the extent of her commitment to the cause and the depth of her feelings for the young man by sacrificing herself for him, incidentally providing just the opportunity that he needed to secure Final Victory against the antagonists and, in the ensuing chaos and upheaval, race off with her to the nearest medical facility.&lt;/p&gt;

&lt;p&gt;He was too late. He had won the day, but the cost was terrible. All he could do was take solace in the fact that the young woman had wanted it to be this way, and that all of his actions, no matter the cost exacted upon his entourage by choice and by chance, were The Right Thing To Do At The Time.&lt;/p&gt;

&lt;p&gt;The knowledge was cold comfort, though, and despite the crackling fire in his getaway cabin, his warm rug, his cup of tea and his purring lap cat, the winter seeped into his mood and his bones. He was no longer so young a man. He couldn't shake the feeling that things weren't supposed to end this way.  Where was the triumph? Where were the fanfares, the necessarily secret but vastly powerful favours and debts owed to him by highly placed allies? He heaved a sigh, raised his steaming mug with both hands and inhaled, long and slow, a curl of steam that smelled of bergamot and home and her. He stood, weathering the cracking of his joints and a reproachful feline yowl, and paced over to the immense library that covered the entire wall of the cottage. He stared out the window for a while, studying snow blowing through moonlight.&lt;/p&gt;

&lt;p&gt;Then he turned resolutely to the As and started looking for a new story.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:6466</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/6466.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=6466"/>
    <title>No clues but it's easy</title>
    <published>2006-11-29T00:08:24Z</published>
    <updated>2006-11-29T00:08:24Z</updated>
    <lj:music>Big Rude Jake - Buster Boy (Walk Tall)</lj:music>
    <content type="html">&lt;pre&gt;1F 8B 08 00 13 CE 6C 45 00 03 65 94 4D 76 DB 30
0C 84 F7 3D 05 76 3E 17 44 42 26 2B 92 60 F9 13
45 3D 7D 07 94 D2 E6 BD 2E 12 DB 12 04 7E 98 19
C8 0B 7B E2 60 FF FB 68 D2 3B ED EC 86 36 2A B1
08 C5 57 A6 A2 27 05 49 35 96 37 0D A5 D1 38 16
1A 41 A8 C8 49 EF 79 91 DA 4F DC ED F8 E0 41 81
3F A4 BC 06 6D 22 85 6A D3 2A 2D 5D 24 9F 35 E1
41 F1 D6 23 A3 F3 AA B3 1F 87 48 A5 59 E9 8C 23
90 7E 48 A3 3D E2 4E 98 C5 37 94 4B E6 98 3A 31
79 BE E8 0C 31 09 75 6D 63 D1 04 C9 C4 CE 69 F3
0F 5C 6D 51 5B 1C 17 71 F1 E4 85 93 5D 5F 8D 0D
78 07 70 EC 7D 4A C7 F1 8E 0B 10 8A 47 3F B6 A1
FB B0 CF 30 33 17 E0 56 ED 3D 6E B8 97 2F EA C9
08 BB 0B E2 27 AE C4 0E 00 8C D0 3B E8 C0 BD 86
8E D4 45 A8 8A 56 AB 28 C0 ED EA 22 27 72 5A 86
7C 0E 88 E4 70 10 9D 22 07 C5 7D 09 9B A6 3B 2E
7C C3 B0 6F 1D 86 8F E2 83 74 82 A4 29 C6 C7 B8
90 30 2B D0 9E CE DC 50 2B 63 4D 1F 14 32 EE 4D
33 9D DA 0E D8 34 8C EB A1 F1 6A 16 48 59 84 9B
58 3D D3 6F CD 5B 94 C7 3B 30 99 A2 9B 38 9E 5D
EE E7 4E 9D C9 D3 CF 89 03 93 2C 7B 50 9A F1 93
1B 8C 28 23 36 81 36 20 C3 77 0C 9F 04 A4 49 91
93 59 1C A8 37 FB 7B FA D9 8C 0F C5 5B 6D B6 CD
BC E4 15 85 A2 F3 1D 56 0E E0 06 09 2C BF AC C9
B0 69 FF E5 C2 B7 08 35 4C EA E9 02 A4 D9 77 59
D7 41 03 7F 93 B4 F1 AD D3 E3 E4 F7 1C C2 B9 37
5C 6D 1A 01 DB 21 19 DC 40 78 1D C6 8C C5 23 02
A3 4B 02 65 C1 E3 0C 48 84 08 91 38 4C 47 4B 4F
FF 35 45 7E 23 2A D8 85 CC D7 76 4B F4 EA B7 3C
26 CC B3 2F 56 8C D0 00 29 81 BE 21 74 98 F1 E4
B2 1C F5 BA F2 12 21 0C BB E3 8E 22 AF 20 EE 2D
8A 61 58 7B D8 D0 14 2D DB DD CD AF 15 63 C2 CA
0D FA 5A 45 BB B1 14 B2 3A 01 47 83 09 EB AA 13
9C BC C5 94 EE A7 1D 5B 6E BF FD 0E 2D F6 91 F9
E9 CD 39 83 26 DA 24 01 B6 62 DD 6C A9 AF BA C4
EB 8B D0 12 58 61 E9 98 3C 22 B6 1B 08 BD B2 BB
57 0E 93 AE 29 CC 6C 5E 39 81 1C 07 0A 8D C9 69
FE 7A 4D E8 09 54 CD DA DA 7A 7F 2C 64 33 4A D7
8B 04 17 88 A7 8F AB FF 11 DD 01 3A 68 D9 C1 36
30 E3 25 1C FE C3 E5 B4 56 A1 23 30 60 7A B9 A4
50 F4 EB 88 75 1F E2 7B EC 6B E0 75 86 ED A6 E5
0E 8D 96 B8 30 4C 33 23 4B E3 84 20 06 50 FC 53
81 77 D4 2E 6E C0 B8 80 24 E2 90 73 AD 11 96 F4
F1 F3 F6 1A 11 E6 CD D4 81 50 01 63 F5 20 2F 68
3F F8 40 E0 87 65 FE 09 E0 1D FC 0A AD AC FA AF
0C A6 59 C4 3B D3 62 F3 65 E3 8A 93 C5 FF 44 AC
41 B3 23 9C F6 D4 8F 3F 95 FF 5F 91 9A 05 00 00&lt;/pre&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:6235</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/6235.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=6235"/>
    <title>Directionless anger - what the heck?</title>
    <published>2006-10-31T03:39:47Z</published>
    <updated>2006-10-31T03:39:47Z</updated>
    <content type="html">&lt;p&gt;I just had a lovely weekend, a very pleasant evening blitzing through about half of Steven Gould's &lt;a href="http://en.wikipedia.org/wiki/Jumper_%28novel%29"&gt;Jumper&lt;/a&gt; (ill-gotten because I can't convince Chapters to order a copy and I haven't yet taken the time to apply for a library card - mea culpa), and a decent dinner. I've got a nice week shaping up and an excellent weekend to anticipate.&lt;/p&gt;&lt;p&gt;So why do I have this furnace of directionless rage boiling away inside? What the hell is the deal with that, anyhow? I keep hoping and trying to grow up and get to know myself well enough to figure these things out and deal with them, but I seem to be just ever so slightly better at inventing twisty mazes of internal logic than at navigating them.&lt;/p&gt;&lt;p&gt;Bah. Time to hermit for a bit until it passes, I guess.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:5908</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/5908.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=5908"/>
    <title>Apartment!</title>
    <published>2006-10-10T10:05:48Z</published>
    <updated>2006-10-10T10:05:48Z</updated>
    <content type="html">Jesus H cockroach-capsizing christ, it's nice to have an apartment. Now I just need to start filling it with, you know, stuff. Like a plate. And somewhere to sit while eating food from said plate. And, just maybe, something other than a bottle of stout to put on said plate.&lt;br /&gt;&lt;br /&gt;Hoo boy.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:5846</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/5846.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=5846"/>
    <title>All Good Things</title>
    <published>2006-08-29T07:06:10Z</published>
    <updated>2006-08-29T07:21:18Z</updated>
    <lj:music>Jeff Buckley - Satisfied Mind</lj:music>
    <content type="html">&lt;p&gt;I'm living on a series of timers. Right now my bloodstream is just replete with ethanol, and though I'm soused enough that no doubt I'll have needed to revise this entry five or six times before hitting CTRL-X (yes, I'm still posting from my instant messenger client), my system is diligently metabolizing the poison and restoring my physical state to a point where I can no longer blame my behaviour on inebriation.&lt;/p&gt;

&lt;p&gt;That is to say, I'm three sheets to the wind, thank you very much.&lt;/p&gt;

&lt;p&gt;It's Sam's fault. I knocked back a half-dozen glasses of quite potent drink before switching to tumblers and repeating the performance. The party was both spectacular and low key. It'll be what I remember when I think back on Ottawa.&lt;/p&gt;

&lt;p&gt;As usual, it's past midnight, well into the morning hours, and everyone but me has turned in for the night. I'll be out of the city soon. Wednesday's coming up quickly. The new job starts next Tuesday. Am I ready? Not hardly.&lt;/p&gt;

&lt;p&gt;Not fucking hardly.&lt;/p&gt;

&lt;p&gt;I'm listening to scratchy jazz, kicked online through 33 1/3 RPM motors, brush-and-coil motors, electromechanical pickups, unremarkable cables, what sounds like an altogether middle-of-the-road amplifier, a halfway decent sound card and some custom-compiled version of LAME; I'm reading and agreeing with arguments by Pilgrim ("Juggling Oranges") and Hoye ("I Want A Big Toy") about how, in the long run, data longevity trumps pretty much every other technical concern [and I'm amused by how part of the discussion following the latter post has turned to audio output rather than input: how easily we come full circle, when we look hard enough]; I'm preparing to leave behind pretty much everything and everyone I know; and the only thing that manages to follow the sweep and stay squarely in the spotlight of my wandering attention span is how dearly I wish I could tell them how much they mean to me. How much they still do.&lt;/p&gt;

&lt;p&gt;Morning will slam shut the portcullis again, of course, and I'll look back on this and think of myself as an idiot, but my opinions about data longevity will stop me from deleting it. Screw you, future self. Manuscripts don't burn.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(she looked at me and said)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Time for sleep, it seems. I've got more thinking to do and more packing to finish, and tomorrow promises to be a long and memorable day. It flies like an arrow, and - there's that full circle again - I'm living on a series of timers.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:5438</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/5438.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=5438"/>
    <title>No no; cryptic is my MIDDLE name</title>
    <published>2006-08-26T07:00:24Z</published>
    <updated>2006-08-26T07:00:24Z</updated>
    <lj:music>Mario Kart DS theme</lj:music>
    <content type="html">&lt;p&gt;Soothing heartsickness with Junior Mints and Mario Kart DS is surprisingly effective.&lt;/p&gt;
&lt;p&gt;Also, I'm moving to Toronto either next Tuesday evening or next Wednesday morning. There's a Unix system administrator position in Markham with my name (and signature, natch) on it. I start on 2006-09-05T0830h.&lt;/p&gt;
&lt;p&gt;Yay?&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:5183</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/5183.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=5183"/>
    <title>SwingOttawa - this Friday, 2030h, 151 Chapel Street</title>
    <published>2006-07-28T04:37:03Z</published>
    <updated>2006-07-28T04:37:03Z</updated>
    <content type="html">C'mon &lt;a href="http://www.swingottawa.ca/index_e.shtml"&gt;out&lt;/a&gt;. Bring five bucks, a pair of indoor shoes to change into, and your friends. This, ladies and gents, is where it's at.</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:5054</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/5054.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=5054"/>
    <title>Away messages as a medium for expression</title>
    <published>2006-07-24T03:17:35Z</published>
    <updated>2006-07-24T03:17:35Z</updated>
    <lj:music>Humming fans</lj:music>
    <content type="html">&lt;p&gt;Every once in a while, I'm reminded that I abuse the Away message functionality of my &lt;abbr title="instant messenger"&gt;IM&lt;/abbr&gt; &lt;a href="http://konst.org.ua/en/centericq/" title="“Centericq is a text mode menu- and window-driven IM interface that supports the ICQ2000, Yahoo!, AIM, IRC, MSN, Gadu-Gadu and Jabber protocols. [...]”; written by Klyagin Konstantin Nickolayevich, this program is my IM crutch. I love it far out of proportion to its usefulness, though that&amp;#39;s a judgement passed on the messages of the medium much more so than the program itself"&gt;client of choice&lt;/a&gt;. This reminder usually takes the form of a &lt;a href="http://catb.org/jargon/html/C/core-dump.html"&gt;core dump&lt;/a&gt; when said message exceeds 4096 bytes.&lt;/p&gt;
&lt;p&gt;A more responsible me would patch the bug and submit the patch. The selfish me, however, considers the behaviour useful.&lt;/p&gt;
&lt;p&gt;Because of the quantity of spew that ends up in these Away messages, and because it's sometimes interesting to go back and take a look at what braindump ended up in there - those messages are even less edited than &lt;em&gt;this&lt;/em&gt; text spigot - I usually save the post-crash text. Here's an interesting one; time of death was saved as Tuesday, July 18, 02:08:26 EDT 2006:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Thursday: meeting up with Cor at the Rideau Chapters at 1400h; hanging around downtown for a bit; working on porting my weblog over to PyBlosxom (if only for mod_python support - the Perl interpreter overhead from my current CGI setup is murder) as well as WordPress, then letting the two duke it out (I'm secretly rooting for PyBlosxom); finishing up the core of my Forth-to-JavaScript static/inlining compiler, then readapting it to the problem of generating fast, dynamic Imari code sequences.&lt;/p&gt;
&lt;blockquote&gt;Ephemeral, inconstant, drawn in sand&lt;br /&gt;
Seedlings on the breeze, comments made offhand&lt;br /&gt;
Words said in haste and just as soon forgot&lt;br /&gt;
The barest few take root, but most do not.&lt;br /&gt;
&lt;br /&gt;
Bits sent down the wire, forming messages,&lt;br /&gt;
Stories, meaning, laid out in passages&lt;br /&gt;
Awaiting just interpretation,&lt;br /&gt;
A little thought, evaluation.&lt;br /&gt;
&lt;br /&gt;
But the words are out of joint and control&lt;br /&gt;
Entropy steps in and exacts its toll:&lt;br /&gt;
The thread is cut loose, misunderstanding&lt;br /&gt;
And impatience prolong the fighting&lt;br /&gt;
&lt;br /&gt;
But a patient thought, and its expression,&lt;br /&gt;
In just the right spot brings resolution.&lt;/blockquote&gt;
&lt;p&gt;Friday: work, 1200h-2000h; then Rob Woolley's birthday party {UPDATE: 0127h: doing laundry so I have some white shirts to wear tomorrow. Or at least one white shirt. One usually suffices)&lt;/p&gt;
&lt;p&gt;Saturday: Aliens Fest at Alec's place, starting at 1200h (and running through until the late evening, but I'll be leaving after the first film); then work, 1600h-2215h (during which I'll be briefly meeting up with Gord); then immediately off downtown to meet up with Alec et al for his DJ gig at Helsinki; then back home for some much-needed shut-eye.&lt;/p&gt;
&lt;p&gt;Sunday: work, 0900h-1500h (which implies a painfully early alarm time, probably around 0730h); blues dance workshop downtown (111A Rideau Street, studio #3 upstairs - Dance Network Studios), 1600h-1800h; then dinner, then glorious, glorious rest.&lt;/p&gt;
&lt;p&gt;Monday: meeting up with Mike Hoye for lunch at 1230h at the Rideau Second Cup; then work, 1645h-2230h&lt;/p&gt;
&lt;p&gt;Tuesday: work, 1400h-2000h; then having pho with Stefan and anyone else who wants to come out.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Well, it was interesting to me.&lt;/p&gt;
&lt;p&gt;You should see the nonsense that flies forth from my phone. It's staggering how many useless bits a mind, an appendage, an input device and a transmission medium can generate.&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:ben_zine:4639</id>
    <link rel="alternate" type="text/html" href="http://ben-zine.livejournal.com/4639.html"/>
    <link rel="self" type="text/xml" href="http://ben-zine.livejournal.com/data/atom/?itemid=4639"/>
    <title>Beg Pardon, or "poetry, on the topic of marriage, awful, for the purpose of mockery, one"</title>
    <published>2006-07-23T06:53:06Z</published>
    <updated>2006-07-23T06:53:06Z</updated>
    <lj:music>Paul Simon - Surprise - Everything About It Is A Love Song</lj:music>
    <content type="html">&lt;p&gt;This is the very worst example of a wine-soaked unedited pre-first draft. The rhyming scheme is infantile, the meter is all wrong, and it only manages two of the several poignant moments I was aiming to capture. I'll rewrite dramatically when I wake, and sober, up.&lt;/p&gt;

&lt;blockquote&gt;Rich in dignity and grace,&lt;br /&gt;
&lt;a href="http://off.net/~mhoye/wedding/site.html"&gt;Bride and groom&lt;/a&gt; strode down the aisle,&lt;br /&gt;
There to seal with an embrace&lt;br /&gt;
Commitment made in classic style.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://neon.polkaroo.net/~mhoye/blarg/archives/2006_07.php"&gt;Mike&lt;/a&gt;, Arlene, the blessed pair,&lt;br /&gt;
With their friends and family,&lt;br /&gt;
Joyous music in the air,&lt;br /&gt;
Resplendent in finery,&lt;br /&gt;
&lt;br /&gt;
Lit the day and eve with style,&lt;br /&gt;
Shared their joy generously,&lt;br /&gt;
Had the band play on a while&lt;br /&gt;
Then retired graciously;&lt;br /&gt;
&lt;br /&gt;
As the candle-wax grew cold&lt;br /&gt;
Friends and family made bold&lt;br /&gt;
To toast the pair, to make heard&lt;br /&gt;
Their sentiments; in a word&lt;br /&gt;
&lt;br /&gt;
The love that in that quiet hall&lt;br /&gt;
For them both was felt by all.&lt;br /&gt;
&lt;/blockquote&gt;</content>
  </entry>
</feed>
