<?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/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/'>
<channel>
  <title>confuseme</title>
  <link>http://confuseme.livejournal.com/</link>
  <description>confuseme - LiveJournal.com</description>
  <managingEditor>sah@awesame.org</managingEditor>
  <lastBuildDate>Sat, 17 Jan 2009 10:09:32 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>confuseme</lj:journal>
  <lj:journalid>237055</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <image>
    <url>http://l-userpic.livejournal.com/82689207/237055</url>
    <title>confuseme</title>
    <link>http://confuseme.livejournal.com/</link>
    <width>100</width>
    <height>100</height>
  </image>

<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/23510.html</guid>
  <pubDate>Sat, 17 Jan 2009 10:09:32 GMT</pubDate>
  <title>The Mae Shi</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/23510.html</link>
  <description>If you like music and you have not yet heard Run To Your Grave by The Mae Shi, you must go listen to it right now.  I am serious about this.

&lt;p&gt;
If you &lt;i&gt;have&lt;/i&gt; already heard it, please explain to me in small words why you didn&apos;t tell me about it, and let&apos;s get that problem solved, whatever it is.</description>
  <comments>http://confuseme.livejournal.com/23510.html</comments>
  <lj:music>The Mae Shi - Run To Your Grave</lj:music>
  <media:title type="plain">The Mae Shi - Run To Your Grave</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/23081.html</guid>
  <pubDate>Mon, 15 Dec 2008 01:47:03 GMT</pubDate>
  <title>A Christmas Rant</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/23081.html</link>
  <description>There was a period of time spanning, as far as I can tell, the late 19th and early 20th centuries, when popular Christmas-themed music made for commercial purposes was often pretty good.

&lt;p&gt;
We have recordings dating from the end of that period which are perfectly serviceable, if growing somewhat too familiar.  That familiarity notwithstanding, if you wish to make a buck selling shitty modern Christmas pop music, it is &lt;i&gt;not&lt;/i&gt; necessary to &quot;update&quot; those classics to sound just as shitty as all other modern Christmas-themed pop.  Given the monumental lack of effort required to make modern pop music, you can just as easily make &lt;i&gt;new&lt;/i&gt; shitty pop.  Or, if you like those classics so fucking much, you could strive to make something of lasting value, like Burl Ives, and Bing Crosby, and the Andrews Sisters, and Irving goddamn Berlin did.

&lt;blockquote type=&quot;cite&quot;&gt;In the meadow we can build a snowman&lt;br /&gt;
Then pretend that he is Parson Brown&lt;br /&gt;
He&apos;ll say &apos;Are you married?&apos;&lt;br /&gt;
We&apos;ll say &apos;No, man,&apos;&lt;br /&gt;
&apos;But you can do the job when you&apos;re in town!&apos;&lt;/blockquote&gt;

&lt;p&gt;
That&apos;s how you write a fucking Christmas song, idiots.  Please have some goddamn respect and don&apos;t fuck up songs you lack the talent to write.

&lt;p&gt;
Oh, and Merry Christmas.</description>
  <comments>http://confuseme.livejournal.com/23081.html</comments>
  <lj:music>the shittiest cover of Winter Wonderland I have ever heard</lj:music>
  <media:title type="plain">the shittiest cover of Winter Wonderland I have ever heard</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/22953.html</guid>
  <pubDate>Thu, 06 Mar 2008 06:04:40 GMT</pubDate>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/22953.html</link>
  <description>I&apos;ve set up a blog for my writing on computer programming and my various programming projects: &lt;a href=&quot;http://www.hackerdashery.com/&quot;&gt;http://www.hackerdashery.com/&lt;/a&gt;.  &lt;br /&gt;&lt;br /&gt;Tech stuff will be showing up over there from now on.</description>
  <comments>http://confuseme.livejournal.com/22953.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/22757.html</guid>
  <pubDate>Tue, 19 Feb 2008 16:47:39 GMT</pubDate>
  <title>codepad</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/22757.html</link>
  <description>Those of you who write computer programs might be interested in my latest project: &lt;a href=&quot;http://codepad.org/&quot;&gt;http://codepad.org/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It&apos;s a pastebin that runs your code for you.  My idea is that this will be good for showing people how to do things, demonstrating errors and weird behavior, and solving small problems when you don&apos;t have an interpreter/compiler handy.  Untrusted code is run under a supervisor based on &lt;a href=&quot;http://www.xs4all.nl/~weegen/eelis/geordi/&quot;&gt;geordi&lt;/a&gt;.  It uses ptrace, chroot, and resource limits to jail the untrusted code in a way that is probably still not as airtight as I&apos;d like.&lt;br /&gt;&lt;br /&gt;If there&apos;s a language or feature that would make codepad more useful to you, please request it, and I&apos;ll do my best to accommodate.</description>
  <comments>http://confuseme.livejournal.com/22757.html</comments>
  <category>projects</category>
  <category>codepad</category>
  <category>hacking</category>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/22504.html</guid>
  <pubDate>Thu, 01 Nov 2007 05:20:56 GMT</pubDate>
  <title>before the cream sits out too long</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/22504.html</link>
  <description>The usual suspects and I are going as Devo this Halloween.  We all picked different Devo outfits to immitate, and Greg was trying on goggles to go with his:&lt;br /&gt;&lt;br /&gt;&quot;Those are good.&quot;&lt;br /&gt;&lt;br /&gt;&quot;How about these?&quot;&lt;br /&gt;&lt;br /&gt;&quot;No, they&apos;re too cool.  Now you look like you&apos;re in Front 242.&quot;&lt;br /&gt;&lt;br /&gt;&quot;It&apos;s a fine line.&quot;</description>
  <comments>http://confuseme.livejournal.com/22504.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/22125.html</guid>
  <pubDate>Mon, 01 Jan 2007 20:06:08 GMT</pubDate>
  <title>my first haiku of 2007</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/22125.html</link>
  <description>judas priest still rocks&lt;br /&gt;I announce, flipping you off&lt;br /&gt;with blurred tv hands</description>
  <comments>http://confuseme.livejournal.com/22125.html</comments>
  <category>haiku</category>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/21875.html</guid>
  <pubDate>Thu, 26 Oct 2006 02:01:26 GMT</pubDate>
  <title>Hazel&apos;s Maxim</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/21875.html</link>
  <description>In conversation tonight, my brother Greg and I were bemoaning the fact that there are always lousy computer programmers out there producing lousy code, and good programmers are perpetually stuck dealing with it.  Greg then originated a succinct, funny statement of profound truth about software engineering.  I&apos;m calling it &quot;Hazel&apos;s Maxim&quot; (let&apos;s hope I never make up a good maxim, I&apos;d be out of luck!)

&lt;blockquote&gt;&lt;b&gt;Hazel&apos;s Maxim:&lt;/b&gt; &quot;You can take the fuck-ups from the code, but you can&apos;t take the code from the fuck-ups.&quot;&lt;/blockquote&gt;</description>
  <comments>http://confuseme.livejournal.com/21875.html</comments>
  <category>nerdiness</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/21582.html</guid>
  <pubDate>Sun, 08 Oct 2006 08:24:58 GMT</pubDate>
  <title>code blocks and C-like lambda expressions</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/21582.html</link>
  <description>A while back, I started using Ruby for some personal software projects.  I was immediately impressed with its &quot;code block&quot; syntax.  It&apos;s a fairly natural Algol-like syntax for lambda expressions, and is used to great effect in the language.  &lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;I&apos;d like to advocate wider adoption of this kind of syntax, and suggest some improvements.

&lt;p&gt;
Briefly, Ruby functions can take a special &quot;code block&quot; parameter, which appears in their scope as a function called &quot;yield&quot;:

&lt;blockquote&gt;&lt;pre&gt;def twice()
    yield()
    yield()
end&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;
The magic &lt;tt&gt;yield&lt;/tt&gt; function is then specified using the code block syntax, when &lt;tt&gt;twice&lt;/tt&gt; is called:

&lt;blockquote&gt;&lt;pre&gt;twice() do
    print &quot;hello&quot;
end&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;
Output:

&lt;blockquote&gt;&lt;pre&gt;hello
hello&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;
(Ruby also allows the use of the more C-like &lt;tt&gt;{}&lt;/tt&gt; delimiters -- which I generally prefer -- in place of &lt;tt&gt;do&lt;/tt&gt;/&lt;tt&gt;end&lt;/tt&gt;, but &lt;tt&gt;do&lt;/tt&gt;/&lt;tt&gt;end&lt;/tt&gt; matches the Algol-like syntax of Ruby&apos;s built-in constructs, so I prefer it in that context.)

&lt;p&gt;
Like regular function declarations, code blocks can take parameters:

&lt;blockquote&gt;&lt;pre&gt;def with(a, b)
    yield(a, b)
end
    
with(7, 3) do |x, y|
    print x+y
end&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;
Output:

&lt;blockquote&gt;&lt;pre&gt;10&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;
Ruby uses this for all kinds of familiar things, both from procedural and functional languages.  Here are some examples:

&lt;blockquote&gt;&lt;pre&gt;&lt;i&gt;# a foreach loop over a list&lt;/i&gt;
[1, 2, 3].each do |x|
    print x
end

&lt;i&gt;# mapping&lt;/i&gt;
squares = [1, 2, 3].map do |x|
    x*x  &lt;i&gt;# note the handy auto-return here&lt;/i&gt;
end

&lt;i&gt;# like what some languages call &quot;using&quot; or &quot;with&quot;&lt;/i&gt;
File::open(&apos;foo.txt&apos;) do |fd|
    &lt;i&gt;# the file will automatically be closed when we exit this scope&lt;/i&gt;
    print fd.read()
end&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;
First of all, I think this is a great syntax for lambda expressions in Algol- and C-like languages.  I prefer the C-like variant in general, so I&apos;ll use that from now on.  Also, in imitation of C/C++/Java/etc function declaration, I would pull the &lt;tt&gt;|x, y|&lt;/tt&gt; signature definitions out in front of the &lt;tt&gt;{}&lt;/tt&gt;s.  (I think I like the vertical bars better than overloading &lt;tt&gt;(x, y)&lt;/tt&gt; to handle both invocation and declaration the way C does.  Recruiting &lt;tt&gt;||&lt;/tt&gt; for delimiters strikes me as an okay idea, but there are some good reasons to prefer distinct symbols for open and close -- you could also overload &lt;tt&gt;()&lt;/tt&gt;, &lt;tt&gt;[]&lt;/tt&gt;, or even &lt;tt&gt;&amp;lt;&amp;gt;&lt;/tt&gt;.)  So I think the standard syntax for &lt;tt&gt;(lambda (x y) code)&lt;/tt&gt; in C-like languages should be something like &lt;tt&gt;|x, y| { code }&lt;/tt&gt;.  This has the fun consequence that function declaration could be done like this:

&lt;blockquote&gt;&lt;pre&gt;foo = |x, y| {
    do_stuff(x*y)
}&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;
Or, for a statically-typed language, maybe something like:

&lt;blockquote&gt;&lt;pre&gt;int func foo = |int x, float y| {
    do_stuff(x*y)
}&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;
Some of the things Ruby does with its code blocks are built-in constructs (like &lt;tt&gt;foreach&lt;/tt&gt; and &lt;tt&gt;using&lt;/tt&gt;) in other Algol-like languages.  This got me thinking: it would be nice to have a language in which all the control structures were expressible as functions that take code blocks.  In Ruby (using the &lt;tt&gt;{}&lt;/tt&gt; syntax) you could write an &quot;if&quot; function and call it like this:

&lt;blockquote&gt;&lt;pre&gt;if (a &amp;gt; b) {
    do_stuff()
}&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;
But not like this:

&lt;blockquote&gt;&lt;pre&gt;if (a &amp;gt; b) {
    do_stuff()
} else {
    other_stuff()
}&lt;/pre&gt;&lt;/blockquote&gt;

Ruby&apos;s code block syntax is based on a similar idea in Smalltalk, which is powerful enough to express &lt;tt&gt;if&lt;/tt&gt;/&lt;tt&gt;else&lt;/tt&gt; (although not in C-like syntax):

&lt;blockquote&gt;&lt;pre&gt;(a &amp;gt; b)
    ifTrue: [ doStuff ]
    ifFalse: [ otherStuff ].&lt;/pre&gt;&lt;/blockquote&gt;
    
&lt;p&gt;
The key concept employed in the Smalltalk code above is just &lt;i&gt;named parameters&lt;/i&gt;.  There&apos;s no reason named parameters couldn&apos;t work with the C-like code block syntax -- instead of setting the magic &quot;yield&quot; variable the way Ruby does, just allow function-type parameters to be declared, say, at the end of the parameter list, and allow parameters to be specified by name in much the same way Ruby and Python already do.  It would be cute to write a language in which &quot;if&quot; could be implemented like this:

&lt;blockquote&gt;&lt;pre&gt;if = |cond, block, else=nil| {
    &lt;i&gt;# using logic operators for control flow is ugly&lt;/i&gt;
    (cond and (block() or true)) or (else and (else() or false))
}&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;
and called like this:

&lt;blockquote&gt;&lt;pre&gt;if (cond) {
    do_stuff()
} else {
    other_stuff()
}&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;
One interesting thing about a syntax like that is that it won&apos;t allow you to implement a standard &lt;tt&gt;while (cond) { code }&lt;/tt&gt; construct, because the condition doesn&apos;t work like a parameter to a function: it can&apos;t be evaluated at call time, it needs to be re-evaluated each time the loop restarts.  Instead, you&apos;d get something like &lt;tt&gt;while {cond} { code }&lt;/tt&gt;, which I find I prefer -- &lt;tt&gt;()&lt;/tt&gt; and &lt;tt&gt;{}&lt;/tt&gt; have clear and separate meanings, so we&apos;d be clarifying a situation that sometimes surprises beginners by using the correct brackets for the semantics!
</description>
  <comments>http://confuseme.livejournal.com/21582.html</comments>
  <category>nerdiness</category>
  <category>ruby</category>
  <category>programming languages</category>
  <lj:security>public</lj:security>
  <lj:reply-count>5</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/21264.html</guid>
  <pubDate>Mon, 11 Sep 2006 03:52:04 GMT</pubDate>
  <title>Close-block Delimiter Symbols Considered Helpful</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/21264.html</link>
  <description>I&apos;ve decided to start posting some of my thoughts about programming languages and software development tools.  Since I so love to bitch and moan, I&apos;ll motivate myself by starting off with a complaint about the language I use every day at work, Python. &lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;And so, donning my asbestos smoking jacket, I wax philosophical about syntax:

&lt;p&gt;
One of the first things one notices about Python is that it has &quot;significant whitespace&quot;; in particular, its syntax relies on indentation to delimit blocks of code.  Most languages make indentation optional, but a few, like Python and Haskell, require consistent indentation.  Some people immediately hate this feature, and some people immediately love it.  My own initial reaction was that this was not a good idea, but I didn&apos;t feel strongly about it, and I gave it a chance.  Now I &lt;em&gt;do&lt;/em&gt; feel strongly about it.  Over time I have come to feel that this is the worst single mistake in the design of the Python language.  What&apos;s particularly bad about this mistake is that it might be propagated into future languages -- it could conceivably irritate programmers like me for decades to come.  So this is my attempt to explain why Python should not be imitated in this respect.

&lt;p&gt;
First, let me separate out two aspects of this feature.  The first is &lt;em&gt;required indentation&lt;/em&gt;.  Required indentation is pretty much okay with me.  I don&apos;t think it&apos;s particularly wise to make your language interact badly with the &lt;a href=&quot;http://www.jwz.org/doc/tabs-vs-spaces.html&quot;&gt;tabs-vs-spaces quagmire&lt;/a&gt;, but who knows?  Maybe a language feature like this, in a popular language, could finally end that holy war.  Anyway, that&apos;s not what I&apos;m talking about here.  The second aspect, the one I&apos;m interested in, is &lt;em&gt;doing without a close-block delimiter symbol&lt;/em&gt;.  (An example of block delimiter symbols, if that phrase isn&apos;t self-explanitory: Java&apos;s block delimiter symbols are &quot;{&quot; and &quot;}&quot;.)  Note that this is entirely unrelated to the first aspect -- a language could require consistent indentation just like Python does, and also have an explicit close-block delimiter.

&lt;p&gt;
Oh, you say, but that would be redundant.  How horrible and ugly!  Well, contrary to popular opinion, Python is not entirely without block delimiter symbols.  In fact, every Python block must begin with the open-block delimiter, &quot;:&quot;, like this:

&lt;blockquote&gt;&lt;pre&gt;if a == b&lt;b&gt;:&lt;/b&gt;
    do_stuff()&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;
Compare this to the equivalent Ruby code, which has a close-block delimiter, &quot;end&quot;, but no explicit open-block delimiter:


&lt;blockquote&gt;&lt;pre&gt;if a == b
    do_stuff()
&lt;b&gt;end&lt;/b&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;
So there is no ideological purity involved in Python&apos;s abandonment of the close-block delimiter; it already has a redundant block delimiter, it just has the wrong one!  Why the &quot;wrong&quot; one?  Because, perhaps unlike open-block delimiters, close-block delimiter symbols are &lt;em&gt;useful&lt;/em&gt;.  They&apos;re so useful that even Python can&apos;t get along without one: it has a keyword that it uses a lot like a restricted close-block delimiter symbol for a few special cases where it just can&apos;t get around the need for such a thing!  It&apos;s called &quot;pass&quot;, and it&apos;s used in these cases:

&lt;blockquote&gt;&lt;pre&gt;
# I don&apos;t care whether this works or not
try:
    this_might_fail()
except:
    &lt;b&gt;pass&lt;/b&gt;&lt;/pre&gt;

&lt;pre&gt;# make this method do nothing in this subclass
def override_method():
    &lt;b&gt;pass&lt;/b&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;
Again, some Ruby for comparison:

&lt;blockquote&gt;&lt;pre&gt;# make this method do nothing in this subclass
def override_method()
&lt;b&gt;end&lt;/b&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;
Okay, so technically, pass isn&apos;t a close-block delimiter, it&apos;s a no-op.  Other lines can follow it at the same indentation level.  But it&apos;s required for otherwise-empty blocks, and there&apos;s no reason for it to exist other than to make clear the existence of such a block, and in practice it is used very much like a close-block delimiter.  The reasoning here is interesting.  When a block contains lines of code, Python&apos;s designers presumably feel that the meaning of the code is clear without a close-block delimiter.  But when a block contains no code, it&apos;s somehow too weird; one &quot;def&quot; statement directly before another, or an &quot;except&quot; with unindented lines after it would be too confusing.  So an indication that the block is empty and over is desirable, even though it&apos;s not strictly necessary in order for the program to be parseable.

&lt;p&gt;
I also find it interesting that the case with open-block delimiters is not so weird -- in languages which lack them, as Ruby does, the only consequence is that while some blocks start with something like &quot;if a == b&quot;, others start with a more generic symbol, like &quot;begin&quot;.  Many languages do that anyway, even when they have an open-block delimiter, as with the C/C++/Java &quot;do {} while();&quot;.

&lt;p&gt;
Speaking of which, you may have noticed that Python lacks a do-while loop.  Why?  I think it&apos;s &lt;a href=&quot;http://mail.python.org/pipermail/python-dev/2006-February/060718.html&quot;&gt;because it would be awkward&lt;/a&gt;:

&lt;blockquote&gt;&lt;pre&gt;do:
    some_stuff()
while a &amp;gt; b
foo()&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;
Because of the lack of a close-block delimiter symbol, &quot;while a &amp;gt; b&quot; above looks like an ordinary Python statement, or the start of a new while loop, after the end of the block.  Tellingly, &lt;a href=&quot;http://www.python.org/dev/peps/pep-0315/&quot;&gt;the proposal for adding a do-while loop to Python&lt;/a&gt; suggests that it be integrated with the existing while loop, so that the &quot;while&quot; clause could open a new block, sort of like the way if/else and try/except work.  The proposed syntax for the example I gave above would employ &quot;pass&quot; to visually close the block, like this:

&lt;blockquote&gt;&lt;pre&gt;do:
    some_stuff()
while a &amp;gt; b:
    &lt;b&gt;pass&lt;/b&gt;
foo()&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;(This combination of &quot;do-while&quot; and &quot;while&quot; into a single looping construct is actually very appealing for other reasons -- I encourage you to read the reasoning in  &lt;a href=&quot;http://www.python.org/dev/peps/pep-0315/&quot;&gt;the PEP&lt;/a&gt; to see why more languages should have a construct like Python&apos;s proposed do-while-else.)

&lt;p&gt;
Aside from simple readability, there are some important reasons why close-block delimiter symbols are useful.  Let me point out what a big deal that is.  The whole question about how to do block-delimiting is usually about readability.  The questions are things like &quot;does {} look better than begin/end?&quot;, and &quot;is (foo bar) clearer than &amp;lt;foo&amp;gt;bar&amp;lt;/foo&amp;gt;?&quot;, and &quot;which lines should the delimiters go on?&quot; -- questions about what the code looks like.  When you use indentation as your only close-block delimiter, though, there are some problems that go &lt;em&gt;beyond&lt;/em&gt; readability.  Here are the ones I&apos;m aware of:
 
&lt;ul&gt;
&lt;li&gt; Many technologies are bad at preserving indentation in text.  Pasting Java or Ruby code into a chat message or web page (without &amp;lt;pre&amp;gt;) might make it look uglier than you&apos;d like, but pasting Python code into the same places is likely to &lt;em&gt;destroy information&lt;/em&gt;, rendering the code uninterpretable or just subtly incorrect.  I see this happen pretty frequently.

&lt;p&gt;
&lt;li&gt; When moving a section of code from one nesting level to another, or changing the indentation scheme of a block of code to match the local convention,  close-block delimiter symbols preserve the information about where blocks exist in the moving code section.  Indentation is very bad at this, because its addition or removal can be done in a non-atomic way, affecting some lines before others.  If you indent by hand, it&apos;s easy to lose track, as you move down through the pasted section, of the intended containing block for the next line of code.  If you get this wrong in a language like Java, your code may look confusing, but it will behave correctly.  In a language like Python, your code can quietly do the wrong thing!  (This has actually happened to me.)  Getting this right without undue mental effort requires special editor features, but even those can&apos;t always save you.  My editor happens to have those features, and I still occasionally get bitten by this when someone else&apos;s editor interprets tab characters differently from mine, or when a nesting-level change is not a simple copy-and-paste operation (for example, when an enclosing conditional block is being removed, or when two-space indentation is being converted to four-space indentation.)
&lt;/ul&gt;

Sure, these are not such horrible problems.  They don&apos;t irritate me most days.  But they do irritate me &lt;em&gt;sometimes&lt;/em&gt;, and there&apos;s no reason why I should ever have to tolerate them!  I get nothing in return.  Redundant close-block delimiter symbols have no associated cost, and some tangible benefits.  Please, when designing new a language -- even a language that requires consistent indentation -- include a close-block delimiter symbol!</description>
  <comments>http://confuseme.livejournal.com/21264.html</comments>
  <category>nerdiness</category>
  <category>programming languages</category>
  <category>python</category>
  <lj:security>public</lj:security>
  <lj:reply-count>6</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/21169.html</guid>
  <pubDate>Tue, 29 Aug 2006 23:46:49 GMT</pubDate>
  <title>acquisitions</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/21169.html</link>
  <description>Last December, I learned that &lt;a href=&quot;http://www.foldeshare.com/&quot;&gt;FolderShare&lt;/a&gt; was &lt;a href=&quot;http://www.eweek.com/article2/0,1895,1882202,00.asp&quot;&gt;acquired by&lt;/a&gt; &lt;a href=&quot;http://www.microsoft.com/presspass/press/2005/nov05/11-03FolderSharePR.mspx&quot;&gt;Microsoft&lt;/a&gt;.  I worked at FolderShare in the early days, and had a hand in building all of the major pieces of the system.  After I left they continued to improve it for a couple years, but I figure Microsoft owns some fairly substantial chunks of my code now.  Too bad I didn&apos;t have any stock.&lt;br /&gt;&lt;br /&gt;More recently, I learned that &lt;a href=&quot;http://biz.yahoo.com/prnews/060823/law031.html?.v=69&quot;&gt;Sony Pictures&lt;/a&gt; &lt;a href=&quot;http://today.reuters.co.uk/news/articlenews.aspx?type=internetNews&amp;amp;storyID=2006-08-23T064240Z_01_N23294892_RTRIDST_0_OUKIN-UK-MEDIA-SONY-GROUPER.XML&quot;&gt;had&lt;/a&gt; &lt;a href=&quot;http://www.forbes.com/markets/feeds/afx/2006/08/23/afx2966869.html&quot;&gt;agreed&lt;/a&gt; &lt;a href=&quot;http://news.zdnet.com/2100-9588_22-6108508.html&quot;&gt;to buy&lt;/a&gt; &lt;a href=&quot;http://www.grouper.com/&quot;&gt;Grouper&lt;/a&gt;, where I worked until early this year.  I put a lot of effort into Grouper, and wrecked my wrists in the process, so I was very happy to hear that it amounted to something.  And this time, I did have some stock!  As one of my friends put it, I won the Internet Lotto -- but only the scratch-and-win game, not the mega-jackpot game with the little numbered balls.</description>
  <comments>http://confuseme.livejournal.com/21169.html</comments>
  <category>work</category>
  <lj:security>public</lj:security>
  <lj:reply-count>7</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/20768.html</guid>
  <pubDate>Tue, 11 Apr 2006 20:08:27 GMT</pubDate>
  <title>c-repl</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/20768.html</link>
  <description>&lt;span class=&apos;ljuser&apos; lj:user=&apos;evan&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://evan.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://evan.livejournal.com/&apos;&gt;&lt;b&gt;evan&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; just put together the web page for his excellent C read-eval-print loop hack, &lt;a href=&quot;http://neugierig.org/software/c-repl/&quot;&gt;c-repl&lt;/a&gt;.  If you code in C every day the way I used to, you will no doubt be running this thing in a terminal at all times starting any second now.</description>
  <comments>http://confuseme.livejournal.com/20768.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/20678.html</guid>
  <pubDate>Mon, 20 Feb 2006 07:35:37 GMT</pubDate>
  <title>Incoherence</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/20678.html</link>
  <description>&lt;center&gt;&lt;a href=&quot;http://www.omgaudio.com/incoherence/&quot;&gt;&lt;img src=&quot;http://www.omgaudio.com/incoherence/screenshot.png&quot;&gt;&lt;/a&gt;&lt;/center&gt;&lt;br&gt; As some of you already know, my brother and I have finally finished the commercial release of our audio visualization / analysis tool, &lt;a href=&quot;http://www.omgaudio.com/incoherence/&quot;&gt;Incoherence&lt;/a&gt;.  (Scroll down for free plug-ins.)  We&apos;re getting ready to show it off to some recording industry people, and we&apos;d appreciate your comments before we go and step off that particular cliff.</description>
  <comments>http://confuseme.livejournal.com/20678.html</comments>
  <category>incoherence</category>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/20381.html</guid>
  <pubDate>Wed, 01 Feb 2006 06:32:47 GMT</pubDate>
  <title>book report</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/20381.html</link>
  <description>During my prolonged absence, I got a lot of reading done.  Here&apos;s my book report.  Because I have so many books to talk about, I&apos;m going to limit myself to grouping them into three categories and giving one or two sentences per book.&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;Highly Recommended:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Breakfast at Tiffany&apos;s by Truman Capote&lt;br /&gt;File under &quot;better than the movie.&quot;  Calibration warning: I also love everything J.D. Salinger ever published.&lt;br /&gt;&lt;br /&gt;The John Varley Reader by John Varley&lt;br /&gt;I loved &quot;Millennium&quot; when I read it a few years ago, but hadn&apos;t gotten around to reading any of Varley&apos;s other stuff.  I read this collection while on vacation in Japan, and I sometimes found myself feeling anxious to get back to the hotel so I could read more!&lt;br /&gt;&lt;br /&gt;The Golden Globe by John Varley&lt;br /&gt;Possibly the most fun I have ever had reading science fiction, unless it was Transmetropolitan.  I don&apos;t really know what to say about John Varley, except that he is among the most entertaining writers I can think of.&lt;br /&gt;&lt;br /&gt;A Fire upon the Deep by Vernor Vinge&lt;br /&gt;I am not usually crazy about hard sci-fi, but this was an exception.  Reading this book, I was kind of able to remember why I liked the Foundation series so much when I was in the sixth grade.&lt;br /&gt;&lt;br /&gt;A Deepness in the Sky by Vernor Vinge&lt;br /&gt;CAPITALISTS.  IN.  SPACE.  Like aFutD, this book is full of interesting ideas on the general topic of intelligence.&lt;br /&gt;&lt;br /&gt;The Language Instinct by Steven Pinker&lt;br /&gt;I decided to read this after seeing a video of a Steven Pinker lecture.  Normally I find popular science kind of irritating -- another exception.&lt;br /&gt;&lt;br /&gt;Ministry of Space by Warren Ellis&lt;br /&gt;This is a short graphic novel about an alternate history in which the British end up employing Werner von Brown after World War II.  I don&apos;t usually like WWII-related alternate histories...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid2&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;So-so:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The Collected Stories of Vernor Vinge by Vernor Vinge&lt;br /&gt;Vinge let his &quot;singularity&quot; idea keep him from writing the kind of science fiction I am most interested in early in his career, so this collection gets better toward the end.  &quot;Bomb Scare&quot; -- which Vinge seems to have thought was a weak story -- is not to be missed.&lt;br /&gt;&lt;br /&gt;Blood Music by Greg Bear&lt;br /&gt;Sometimes brilliant, but kind of uneven.  This one is all about biotech, so I&apos;d be interested to know what &lt;span class=&apos;ljuser&apos; lj:user=&apos;schmatz&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://schmatz.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://schmatz.livejournal.com/&apos;&gt;&lt;b&gt;schmatz&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; thinks of it.&lt;br /&gt;&lt;br /&gt;White Light by Rudy Rucker&lt;br /&gt;Alcoholic, somewhat sexist college professor in infinityland.  Contains quite a few entertaining thought experiments.&lt;br /&gt;&lt;br /&gt;Red Thunder by John Varley&lt;br /&gt;This was fun, but not in the same league as The Golden Globe.  It kind of reminded me of Michael Crichton.&lt;br /&gt;&lt;br /&gt;Outlines of a Formalist Philosophy of Mathematics by Haskell B. Curry&lt;br /&gt;I picked this up for cheap due to the author.  It&apos;s a pretty clear argument for viewing math as a science, without the need for nonsense like Platonic ideals or a basis in intuition.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid3&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;b&gt;I Want My Time Back:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A Gift from Earth by Larry Niven&lt;br /&gt;The obvious influence of Larry Niven on both John Varley and Vernor Vinge made me think maybe I should give him another shot.  Nope.&lt;br /&gt;&lt;br /&gt;The Structure of Scientific Revolutions by Thomas Kuhn&lt;br /&gt;This is where &quot;paradigm shift&quot; comes from.  Interesting insights, fucking awful writing.  The guy can&apos;t write his own fucking name without using at least one subjunctive clause.&lt;br /&gt;&lt;br /&gt;The Nature of Physical Theory by Victor F. Lenzen&lt;br /&gt;Published in 1931.  Sometimes I get a kick out of reading older stuff about science, but not this time.  Read Feynman&apos;s &quot;The Character of Physical Law&quot; instead.&lt;br /&gt;</description>
  <comments>http://confuseme.livejournal.com/20381.html</comments>
  <category>books</category>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/19991.html</guid>
  <pubDate>Tue, 17 Jan 2006 01:23:02 GMT</pubDate>
  <title>more excellent nerdiness</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/19991.html</link>
  <description>Since I&apos;m indulging in nerdy jokes today, I feel I should mention my friend &lt;span class=&apos;ljuser&apos; lj:user=&apos;motive_nuance&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://motive-nuance.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://motive-nuance.livejournal.com/&apos;&gt;&lt;b&gt;motive_nuance&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&apos;s favorite unit of velocity: megahertz gallons per acre (time&lt;sup&gt;-1&lt;/sup&gt; * distance&lt;sup&gt;3&lt;/sup&gt; / distance&lt;sup&gt;2&lt;/sup&gt;).  It works out to be about 0.94 meters per second.&lt;br /&gt;&lt;br /&gt;Officer: Do you know how fast you were going back there?&lt;br /&gt;Smartass: Yes officer, about &lt;a href=&quot;http://www.google.com/search?q=38+megahertz+gallons+per+acre+in+mph&quot;&gt;38 megahertz gallons per acre&lt;/a&gt;.</description>
  <comments>http://confuseme.livejournal.com/19991.html</comments>
  <category>nerdiness</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/19953.html</guid>
  <pubDate>Mon, 16 Jan 2006 23:44:47 GMT</pubDate>
  <title>awesame</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/19953.html</link>
  <description>While chatting with some friends a while back, &lt;span class=&apos;ljuser&apos; lj:user=&apos;schmatz&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://schmatz.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://schmatz.livejournal.com/&apos;&gt;&lt;b&gt;schmatz&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; and I invented a word that I feel should be added to the lexicon of every right-thinking nerd:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;awesame: adj.  Having impressive rotational symmetry.  &quot;Because the laws of physics are so awesame, a shortstop doesn&apos;t need to know whether he&apos;s facing north or south in order to catch a fly ball.&quot;  [From &quot;awesome&quot; + &quot;same&quot;, and the observation that, as rendered in many fonts, &quot;awesame&quot; is awesame.]&lt;/tt&gt;</description>
  <comments>http://confuseme.livejournal.com/19953.html</comments>
  <category>nerdiness</category>
  <category>words</category>
  <category>awesame</category>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/19590.html</guid>
  <pubDate>Sun, 08 Jan 2006 07:38:59 GMT</pubDate>
  <title>chained to a dying animal</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/19590.html</link>
  <description>Those of you who haven&apos;t heard from me elsewhere might be wondering why I haven&apos;t been using livejournal these last nine months.  Well, ljfriends, that&apos;s because I&apos;m all fucked up.  Nine months ago, my wrist problems rapidly went from &quot;my wrist sometimes gets tired and achy, so I take regular typing breaks and do stretches&quot; to &quot;my wrists never feel normal, and if I type they swell up and my muscles spasm and I sometimes experience sharp, shooting pain along my forearm, so I try not to ever type.&quot;  Around the same time, a strange &quot;allergy&quot; I have to nobody-knows-what also rapidly got much worse.  Before, my hands or feet would sometimes get strangely itchy in the morning, or if I got too warm.  Now, my entire body erupts in an extremely painful stinging sensation, like being jabbed with thousands of needles, if I try to walk around the block in the sun.  (I thought the &quot;jabbed with needles&quot; thing might be an exaggeration, until I had blood work done recently and got to compare the sensations -- this actually hurts more than needles.)&lt;br /&gt;&lt;br /&gt;So, that&apos;s what&apos;s been going on in my life.  I&apos;m writing to you now using Dragon NaturallySpeaking, a voice-recognition program for Windows (it&apos;s frustrating and full of ridiculous bugs, but it works okay, especially for e-mail and chat.)  I haven&apos;t typed much more than a password in four months, and my wrists do seem to be improving.  I&apos;m on antihistamines for the allergy, and they make me a little spacey but they mostly work, if I also am careful to stay cool and out of the sun.&lt;br /&gt;&lt;br /&gt;Some friends and I went to Japan for a couple of weeks in June, which was awesome, and apparently whatever it is that I&apos;m allergic to doesn&apos;t exist in Japan (or on vacation?), so everything worked out great.&lt;br /&gt;&lt;br /&gt;I&apos;ve had some entertaining adventures with medicine and alternative medicine.  My doctor claimed my wrist problems were due to &quot;carpal tunnel&quot;, but 15 minutes of research on the Internet revealed to me that my symptoms do not remotely match carpal tunnel (I get numbness in the two fingers that aren&apos;t supposed to get numb with carpal tunnel, and not in the other three).  I tried acupuncture (feels really fucking weird, doesn&apos;t work for me), chiropractic (makes lots of loud cracking noises, doesn&apos;t work for me, also has an adjective for a name), and deep tissue massage (sort of works a little).  Before I found an antihistamine which helps with the allergy (most don&apos;t do anything for me), I drank a stinky Chinese herbal concoction which I think maybe helped a little bit, actually.  I went to physical therapy, where I learned some exercises to improve my posture, so that now my posture is somewhat better, but my upper back also cracks pretty frequently, which disturbs me.&lt;br /&gt;&lt;br /&gt;Anyway, I&apos;m thinking maybe posting on livejournal is convenient enough now that I can start up again.  I don&apos;t want this to become a journal of my medical problems, so don&apos;t expect to hear about anything but the most major developments on that front (really, I promise.)</description>
  <comments>http://confuseme.livejournal.com/19590.html</comments>
  <category>ailments</category>
  <lj:security>public</lj:security>
  <lj:reply-count>12</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/19399.html</guid>
  <pubDate>Sat, 05 Mar 2005 20:54:12 GMT</pubDate>
  <title>SAT analogies</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/19399.html</link>
  <description>In conversation last night, I came up with a couple of analogies that I think would be excellent candidates for inclusion on the SAT:&lt;br /&gt;&lt;br /&gt;Science : The God of Atheists :: Flax Seed : Vegan Foie Gras&lt;br /&gt;&lt;br /&gt;Intelligent Design : Evolution :: The Stork : Fucking</description>
  <comments>http://confuseme.livejournal.com/19399.html</comments>
  <lj:music>Arovane - Neyem</lj:music>
  <media:title type="plain">Arovane - Neyem</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/18842.html</guid>
  <pubDate>Tue, 25 Jan 2005 04:17:29 GMT</pubDate>
  <title>So Jealous</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/18842.html</link>
  <description>I&apos;ve been getting a lot out of the new Tegan and Sara album, &quot;So Jealous&quot; -- I recommend you check it out.  It took me a while to get past some of the problems with this record, though, and I thought I might save you the trouble.  So, here&apos;s my simple guide to liking &quot;So Jealous&quot; by Tegan and Sara:&lt;br /&gt;&lt;br /&gt;1. Remember that band Belly?  They rocked.&lt;br /&gt;2. Put the CD on.&lt;br /&gt;3. Skip to track 7.&lt;br /&gt;4. Listen to the rest of the record.&lt;br /&gt;5. Wasn&apos;t that &lt;i&gt;great&lt;/i&gt;?  &lt;br /&gt;6. Now go listen to the first 6 tracks and see whether you like any of those.  Some of them are pretty decent.</description>
  <comments>http://confuseme.livejournal.com/18842.html</comments>
  <lj:music>Tegan and Sara -- We Didn&apos;t Do It</lj:music>
  <media:title type="plain">Tegan and Sara -- We Didn&apos;t Do It</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/18528.html</guid>
  <pubDate>Thu, 30 Dec 2004 13:16:39 GMT</pubDate>
  <title>an airplane is a bus with security checkpoints</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/18528.html</link>
  <description>US Airways is also an idiot.&lt;br /&gt;&lt;br /&gt;My flight out of Providence was delayed by about and hour and a half, causing me to miss my connection in Philadelphia.  The first available flight to SF was early the next morning.  So I got to spend the night in a hotel in Philadelphia.  &lt;br /&gt;&lt;br /&gt;My family is from Pittsburgh, but we moved away when I was two years old, and I haven&apos;t really been back to Pennsylvania much since then.  It was really weird to hear so many people in the hotel bar who talk just like my aunts and uncles.  And they make the same kinds of jokes!  When I told the shuttle driver which airline I was on, he asked &quot;domestic, or imported?&quot;&lt;br /&gt;&lt;br /&gt;Anyway, since the flight was so early, and I wasn&apos;t anxious to miss it by failing to show up two hours early, I decided to stay up rather than try to sleep.  And then of course the early morning flight turned out to be a late morning flight, and I got to sit in the airport for an extra two and a half hours, so tired I could barely see straight.  &lt;br /&gt;&lt;br /&gt;There was a guy in some kind of military uniform waiting for the same flight.  At one point, he started fooling around with some kind of magic trick -- he had this dime-sized bit of paper or something that he would get spinning, so that it would fall very slowly, like a Maple tree&apos;s &quot;helicopter&quot; seeds.  And he could keep it from falling by pushing air up at it, I think, so that it levitated a few inches above his hands.  I&apos;m fairly certain that I was not dreaming this, but when I first saw him doing that, in my sleep-deprived state, it took me a minute (and some fairly hard arm-pinching) to convince myself I was awake!</description>
  <comments>http://confuseme.livejournal.com/18528.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/18282.html</guid>
  <pubDate>Fri, 24 Dec 2004 11:04:32 GMT</pubDate>
  <title>Merry Fucking Christmas</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/18282.html</link>
  <description>Greetings from SFO.  &lt;br /&gt;&lt;br /&gt;I am an idiot, and I missed my plane.  Now I get to hang out in SFO until the next one leaves at 6am.  With enough of this brutal conditioning, I may one day adapt to this insane future in which it is often necessary to arrive at the airport &lt;i&gt;one or even two entire hours&lt;/i&gt; before take-off.  But I&apos;m sort of betting I&apos;ll continue to be an idiot for a while yet.&lt;br /&gt;&lt;br /&gt;My brother is also an idiot.&lt;br /&gt;&lt;br /&gt;In other news, as you might have noticed up there in the title, I have settled on &quot;Merry Fucking Christmas&quot; as my official December greeting.  I don&apos;t want to adopt some lifeless, culturally ignorant PC substitution, but I don&apos;t want to accidentally fail to offend the Christ freaks, either.</description>
  <comments>http://confuseme.livejournal.com/18282.html</comments>
  <lj:music>periodic announcements about unattended baggage</lj:music>
  <media:title type="plain">periodic announcements about unattended baggage</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>12</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/18010.html</guid>
  <pubDate>Sat, 20 Nov 2004 01:20:54 GMT</pubDate>
  <title>I fear for my weekend</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/18010.html</link>
  <description>&lt;a href=&quot;http://slashdot.org/articles/04/11/19/2055253.shtml&quot;&gt;Grouper got slashdotted.&lt;/a&gt;</description>
  <comments>http://confuseme.livejournal.com/18010.html</comments>
  <lj:music>Ratatat - Breaking Away</lj:music>
  <media:title type="plain">Ratatat - Breaking Away</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/17816.html</guid>
  <pubDate>Thu, 18 Nov 2004 09:27:02 GMT</pubDate>
  <title>collagerie</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/17816.html</link>
  <description>By the way, those of you who don&apos;t read &lt;span class=&apos;ljuser&apos; lj:user=&apos;stellarbaby&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://stellarbaby.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://stellarbaby.livejournal.com/&apos;&gt;&lt;b&gt;stellarbaby&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&apos;s journal should go look at the pretty pictures in &lt;a href=&quot;http://www.livejournal.com/users/stellarbaby/14055.html&quot;&gt;this post&lt;/a&gt;.  Her travel journals are arguably even better than her &lt;a href=&quot;http://www.stellarbaby.com/letters/legs.html&quot;&gt;letters&lt;/a&gt;.</description>
  <comments>http://confuseme.livejournal.com/17816.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/17581.html</guid>
  <pubDate>Thu, 18 Nov 2004 09:05:09 GMT</pubDate>
  <title>The Dresden Dolls</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/17581.html</link>
  <description>We saw &lt;a href=&quot;http://www.dresdendolls.com/&quot;&gt;The Dresden Dolls&lt;/a&gt; tonight.  They&apos;re from Boston.  Some alternate-reality Boston, that is, in which a terrible accident involving experimental neurotoxins and laughing gas fused Kate Bush and the Joker into a pair of twin marionettes.  Their cover of &quot;War Pigs&quot; was really something.&lt;br /&gt;&lt;br /&gt;I enjoyed the band, despite their uncomfortably high Tori Amos quotient.  The &quot;audience participation&quot;, however -- which they encouraged -- was somewhat harder to take.  I think about a third of the audience was composed of attention-seeking dorks in bad costumes.  Why do people feel compelled to draw attention to themselves when everyone is trying to watch the band?  Whoever that fucking was in the &lt;i&gt;front row&lt;/i&gt; with the fucking &lt;i&gt;pom-poms&lt;/i&gt;, for example, that person really got on my nerves.</description>
  <comments>http://confuseme.livejournal.com/17581.html</comments>
  <lj:music>too deaf for music</lj:music>
  <media:title type="plain">too deaf for music</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/17384.html</guid>
  <pubDate>Wed, 17 Nov 2004 02:06:51 GMT</pubDate>
  <title>part of the problem</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/17384.html</link>
  <description>&lt;a href=&quot;http://www.acmqueue.com/modules.php?name=Content&amp;amp;pa=showpage&amp;amp;pid=225&quot;&gt;This article&lt;/a&gt; is so fucking frustrating, it makes me want to kill puppies.  Allow me to paraphrase.

&lt;p&gt;
&lt;blockquote&gt;&lt;i&gt;
&lt;b&gt;Problem:&lt;/b&gt;&lt;br&gt;
1) Software sucks.&lt;br&gt;
2) Because programmers are in hell.&lt;br&gt;
3) Because programming tools have not really gotten better in the last 25 years.&lt;br&gt;
&lt;p&gt;
&lt;b&gt;Solution:&lt;/b&gt;&lt;br&gt;
1) Look at the doggy.&lt;br&gt;
2) See how you can ask Alice &quot;why did&quot; and &quot;why didn&apos;t&quot; questions.&lt;br&gt;
3) What do you mean &quot;part of the problem?&quot;&lt;br&gt;
4) Ow, my face.  You stuck a pencil in my face.
&lt;/blockquote&gt;&lt;/i&gt;</description>
  <comments>http://confuseme.livejournal.com/17384.html</comments>
  <lj:music>Sleater-Kinney - Get Up</lj:music>
  <media:title type="plain">Sleater-Kinney - Get Up</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>8</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://confuseme.livejournal.com/16975.html</guid>
  <pubDate>Tue, 09 Nov 2004 08:48:13 GMT</pubDate>
  <title>Hollandaise and Pavlov</title>
  <author>sah@awesame.org</author>  <link>http://confuseme.livejournal.com/16975.html</link>
  <description>&lt;span class=&apos;ljuser&apos; lj:user=&apos;wookiepocket&apos; style=&apos;white-space: nowrap; text-decoration: line-through;&apos;&gt;&lt;a href=&apos;http://wookiepocket.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://wookiepocket.livejournal.com/&apos;&gt;&lt;b&gt;wookiepocket&lt;/b&gt;&lt;/a&gt;&lt;/span&gt; over there posted a recipe for Hollandaise sauce, and that got me thinking.&lt;br /&gt;&lt;br /&gt;The first time I ever heard of Hollandaise sauce was in my high school psychology class.  It was in the context of some story about a group of people who had dinner together, including Hollandaise sauce, and who got food poisoning.  The next time each of them had Hollandaise sauce, they disliked the taste, or they felt ill afterward, something like that -- the point was that they had a trained reaction to the stimulus.  I thought it was a pretty compelling story at the time, contrasted closely as it was with Freud&apos;s unscientific, coke-fueled raving.  And so, any time someone mentions Hollandaise sauce, I think of food poisoning and psychology.&lt;br /&gt;&lt;br /&gt;It just occurred to me that this is funny.</description>
  <comments>http://confuseme.livejournal.com/16975.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
</channel>
</rss>
