<?xml version="1.0" encoding="UTF-8"?>

<rss version="2.0">
  <channel>
    <title>Chouser's Blog</title>
    <link>http://n01se.net/chouser/blog/</link>
    <description>The web log of Chris Houser</description>
    <managingEditor>chouser@n01se.net</managingEditor>


    <item>
      <pubDate>Tue, 12 Jul 2005 00:49:14 EDT</pubDate>
      <title>Building a fence.</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#fence</guid>
      <link>
        http://n01se.net/chouser/blog/#fence
      </link>
      <description><![CDATA[<table>
  <tr>
    <td>
      <p>With this entry I narrowly escape leaving my blog dorment for an
      entire year.  My wife took this picture as we began building a
      fence around our back yard.  We're pretty much done now, but I
      haven't taken any more photos yet.</p>
    </td>
    <td width="50%">
      <img
      src="http://bluweb.com/chouser/info/blog/img/mid_2005.06.04-16530.jpg"
      align="right" alt="Fence posts" width="100%" />
    </td>
  </tr>
</table>

<p>Not really worth waiting a year for this, was it?</p>

]]></description>
    </item>

    <item>
      <pubDate>Thu, 22 Jul 2004 23:45:24 EDT</pubDate>
      <title>The Grid</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#thegrid</guid>
      <link>
        http://n01se.net/chouser/blog/#thegrid
      </link>
      <description><![CDATA[<p>A conversation near the beginning of TNT's new TV series
<a href="http://www.tnt.tv/Title/Display/0,5918,540146,00.html" title="tnt.tv">The Grid</a>
sparked a debate at my house.  The conversation was between Maren,
the head of a new anti-terrorist task-force, and Raza, one of her
hand-picked staff members.</p>

<blockquote><p><em>Raza:</em> Why me?</p>

<p><em>Maren:</em> You speak Arabic, and you're the CIA's best mid-east
analyst.  I've read your reports, and although I don't agree
with some of your assessments, I always find your analysis
compelling.</p>

<p><em>Raza:</em> But you disagree; enlighten me.</p>

<p><em>Maren:</em> You write that Islam is the religion of the
oppressed.  I say it appeals to oppressed men because it
sanctions the oppression of women.  To me, Islam is one thing:
fear.  And until the clerics can stand up and say that killing
people is the work of the devil, and that it is a woman's
God-given right to eat, sleep, walk, do, say whatever she wants,
I'm dumb, deaf, and blind to what they're selling.</p>

<p><em>Raza:</em> Have you ever bothered to ask a Muslim woman if she
feels oppressed?  [Maren looks like she hadn't thought of that.]
Islam is the faith of over a billion people.  Are you then
saying all one-billion are criminal?  I find it inexcusable that
a woman with your standing could judge an entire religion by the
actions of a fundamentalist faction.  How would you feel if I
judged all Christians by the actions of the KKK?  Islam inspired
a humane civilization and made some of the greatest
contributions to the culture of the world, but because of some
narrow thinking by governments like ours and people like... you,
we're judged by our worst example.  Certainly you as an
ambitions woman can sympathize.</p>

<p><em> ...emotional appeal by a third character and other unimportant
details... </em></p>

<p><em>Maren:</em> All right... Raza, I want you to educate me on who
we're up against.  When I'm wrong I expect you to set me right.</p>

</blockquote>

<p>Soon after this conversation, my wife started commenting on the
show's politically correct agenda.  She thought that Maren was
backing down from her original point of view and caving to Raza's
more leftist opinion.  I disagreed, and explained that the show
wouldn't let their dynamic lead woman be pushed around so easily,
and certainly not by arguments that are as old as the debate
itself.</p>

<p>A quick look at his points shows why Maren couldn't not have been
convinced.  She disagrees with Raza's opinion that "Islam is the
religion of the oppressed," but I'm not sure what group of people
he could be referring to; certainly not Muslims in the West where
freedom of religion is guaranteed and fewer have been killed by
religious oppression than by car accidents.  Presumably he's not
referring to countries run by Muslim clerics, where Islam is also
the religion of any oppressors that might be around.</p>

<p>Raza counters her assertion with a truly silly idea: that Muslim
women might not <em>feel</em> oppressed.  Maren, as the head of an
anti-terrorism group at a anti-terrorism meeting, is speaking of
terrorism, and Raza knows it.  Of course there are Muslim women
who are living in countries with religious freedom who are not
oppressed, because if they felt oppressed by Islam they would have
the freedom to escape it.  These are not the women Maren is
talking about, and it's rather hard to ask a woman if she feels
oppressed after she's been the victim of an "honor" killing.</p>

<p>The next rhetorical question from Raza compares Islamic terrorism
to the KKK.  I've heard this argument before, and it continues to
baffle me.  Would any of the defenders of modern Islam be willing
to defend countries that taught the racist underpinnings of the
KKK in their schools, gave money to the families of KKK members
involved in violent attacks, and allowed the High Priests of the
KKK to dictate the policies of their government?</p>

<p>Then Raza drives his argument home by finally placing blame on
specific people and institutions.  The only entities that he
specifically criticizes in his entire speech are... the United
States and his boss.</p>

<p>So it was obvious to me that Maren was not giving in to such a
ridiculous opinion.  I figured it was more likely that she wanted
to encourage her employee to continue being open with her, even
though she disagreed with him.  She probably hired him <em>because</em>
of his different perspective, and didn't want him to back down
either.</p>

<p>By the end of the show, Maren had proven herself to be uncertain,
easily shaken, and a pushover.  This leaves only one possibility:
my wife was right, and I was wrong.  The silly little show had set
up what I thought was a bit of a straw-man argument for the
politically correct opinion... and then let the straw-man win.</p>

]]></description>
    </item>

    <item>
      <title>Mozilla Hack</title>
      <pubDate>Tue, 22 Jun 2004 23:20:16 EDT</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#flatbmark05</guid>
      <link>
        http://n01se.net/chouser/blog/#flatbmark05
      </link>
      <description><![CDATA[<p>The <a href="http://www.mozilla.org/products/firefox/" title="mozilla.org">Mozilla Firefox</a>
<a href="http://update.mozilla.org/extensions/" title="update.mozilla.org">Extensions page</a> is now
listing my own
<a href="http://update.mozilla.org/extensions/moreinfo.php?application=firefox&#38;id=117&#38;vid=158" title="update.mozilla.org">Flat Bookmark Editing</a> extension.  It makes modifying bookmarks
more convenient (as inspired by <a href="http://galeon.sourceforge.net/" title="galeon.sourceforge.net">Galeon</a> and encouraged by <a href="http://dev.gentoo.org/~agriffis/" title="dev.gentoo.org/~agriffis">Aron</a>).  Try it out with Firefox 0.9 and see if you like it.</p>

]]></description>
    </item>

    <item>
      <title>Petals around the Rose</title>
      <pubDate>Tue, 22 Jun 2004 08:24:47 EDT</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#rosepetals</guid>
      <link>
        http://n01se.net/chouser/blog/#rosepetals
      </link>
      <description><![CDATA[<p><a href="/us/chouser/proj/rose/" title="">Here's a fun little puzzle.</a>  Just start
making guesses and see if you can figure it out.  Reading the
source <em>is</em> considered cheating, if you were wondering.  Oh, and
it only works in <a href="http://www.mozilla.org/products/firefox/" title="mozilla.org">Mozilla</a> and friends right now.  I may fix that eventually.</p>

<p><em>Update:</em> It now works in IE. Get 6 in a row correct, and get
what reward you can from a handful of JavaScript.</p>

]]></description>
    </item>

    <item>
      <title>Targeting Lower Manhattan</title>
      <pubDate>Mon, 12 Apr 2004 23:39:14 EDT</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#pdb</guid>
      <link>
        http://n01se.net/chouser/blog/#pdb
      </link>
      <description><![CDATA[<p>The Washington Post summarized the recently declassified PDB
(Presidential Daily Briefing), in part,
<a href="http://www.washingtonpost.com/wp-dyn/articles/A4275-2004Apr11.html" title="washingtonpost.com">this way</a>:</p>

<blockquote><p>The 2001 memo declassified late Saturday reported that the FBI
had information that al Qaeda operatives had been in the United
States for years, that they might be planning a hijacking in the
United States and targeting a building in Lower Manhattan...</p>

</blockquote>

<p>Al Qaeda targeting a building on Lower Manhattan of course sounds
ominously like a reference to the World Trade Center attack of
September 11.  But if you read the PDB itself, even the copy the
Washington Post
<a href="http://www.washingtonpost.com/wp-dyn/articles/A2285-2004Apr10.html" title="washingtonpost.com">put online</a>, you will find no reference to Manhattan.  The only
New York buildings mentioned in the PDB are "federal buildings",
which can be found all over New York.  Notably, none of these were
attacked on September 11.</p>

<p>The other items most frequently named by opponents of Bush as
clear warnings in the PDB of Sept. 11 are the title "Bin Ladin
Determined To Strike in US", members of Al-Qa'ida living in the
US, and a phone call to a US Embassy warning a Bin Ladin supporter
was in the US planning attacks.  I highly recommend reading the
<a href="http://www.foxnews.com/printer_friendly_story/0,3566,116766,00.html" title="foxnews.com">actual document</a> to see the details and contexts of these items.</p>

<p>The title is primarily supported in the PDB by the first
paragraph, where it says "Bin Ladin since 1997 has wanted to
conduct terrorist attacks in the US".  The sources sited for this
assertion include "media reports" and "US television interviews."
Anyone who had been watching TV shows about Bin Ladin would find
this PDB's title unsurprising.</p>

<p>I <em>was</em> surprised that the FBI knew there were Al-Qa'ida members
in the US, but that's because I hadn't been following the Embassy
bombings.  If I had, I would have known that two of the Al-Qa'ida
members found guilty of those bombings were US citizens -- another
example of the historical and publicly available nature of the
information in the PDB.</p>

<p>Finally, the US Embassy in the United Arab Emirates got a phone
call in May of 2001 warning of Bin Ladin supporters planning
attacks in the US.  However, according to the PDB the call claimed
this attack would be carried out with explosives.  As far as I
know, there have been no terrorist bomb attacks in the US since
May of 2001.  Another red herring.</p>

<p>In fact, if you read through the PDB yourself, I think you'll find
Dr. Rice's characterization to be fairly accurate: most of the
information is historical and none of it correctly warns of what
happened on Sept. 11.  If the attacks could have been prevented,
it would not have been because of any information contained in
this PDB.</p>

]]></description>
    </item>

    <item>
      <title>Stupid Mozilla Tricks</title>
      <pubDate>Fri, 05 Mar 2004 00:27:26 EST</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#mozgentoobugs</guid>
      <link>
        http://n01se.net/chouser/blog/#mozgentoobugs
      </link>
      <description><![CDATA[<p><a href="http://www.mozilla.org/products/firefox/" title="mozilla.org">Mozilla</a> has
apparently had a cool
<a href="http://www.deftone.com/blogzilla/archives/keyword_searching.html" title="deftone.com">bookmark keyword</a> feature I didn't know about until
<a href="http://dev.gentoo.org/~agriffis/" title="dev.gentoo.org/~agriffis">Aron</a> mentioned it to me this
week.  If you edit any of your bookmarks in a Mozilla browser, you
should see a keyword field which is normally blank.  If you fill
it in, you can simply type that keyword where you'd normally type
a URL in the browser window, and it'll take you to your bookmark
location instead.</p>

<p>You can geek it up another notch by using a "%s" in your bookmarks
Location field, like this:</p>

<ul><li>Location: http://www.google.com/search?q=%s&#38;btnI</li>

<li>Keyword: gl</li>

</ul>

<p>Now you can type into your browser Location field "gl mars rover"
and be taken to Google's "I'm Feeling Lucky" results.</p>

<p>Of course Aron knew all that already.  What he wanted was
something even more clever.  He wanted a bookmark that would run
queries on the <a href="http://bugs.gentoo.org/" title="bugs.gentoo.org">Gentoo Bugzilla
database</a> the same way bugs.gentoo.org does.  That is, you can
type a bug number, a word to be found among currently open bugs,
or "ALL" and a word to be found in any bug.  As it turns out,
applying a little JavaScript is all that's needed.  To use my
solution just paste <a href="http://bluweb.com/chouser/proj/gentookey.txt" title="bluweb.com">this line</a> into your bookmarks.txt.  Then try typing "bug 1234",
"bug pop3d", or "bug ALL pop3d" into your Location field to see it
in action.</p>

]]></description>
    </item>

    <item>
      <title>Monster Alert Level</title>
      <pubDate>Thu, 22 Jan 2004 20:50:20 EST</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#alert</guid>
      <link>
        http://n01se.net/chouser/blog/#alert
      </link>
      <description><![CDATA[<p>I can never remember what the terrorism alert level colors are,
what order they come in, or what they mean.  Maybe <a
href="http://www.geekandproud.net/terror/">this</a> will help me
keep track.  Well, maybe not, but at least it's funny.</p>

]]></description>
    </item>

    <item>
      <title>TiVo vs. MythTV</title>
      <pubDate>Thu, 04 Dec 2003 00:52:01 EST</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#tivo</guid>
      <link>
        http://n01se.net/chouser/blog/#tivo
      </link>
      <description><![CDATA[<p>I think I would really enjoy <a href="http://www.tivo.com/" title="tivo.com">TiVo</a> or some
other PVR/DVR solution.  I've been thinking and talking about
putting together my own solution (buy hardware components, write
or customize software, etc.) for years now.  I started with just
trying to get a decent MP3/Ogg player that my wife was comfortable
using.  I failed.  <a href="http://www.bluweb.com/us/chouser/proj/dimrec/" title="bluweb.com">Not completely</a>, but pretty badly.  The problem is I don't have
the time to do it all myself, and am too cheap to buy easier
solutions.</p>

<p>I found out today that I could buy a TiVo for around $200.  That's
a lot cheaper than what it would cost for me to build my own
solution, and it's all done already.  I was so excited I called my
wife from work (rare).  Then I started looking into the details;
the basic box is $200.  Then you need a monthly subscription of
around $13.  If I like this as much as I think I will, I'll still
be using it 2 years from now -- $13 * 12 months * 2 years &#62; $300.
TiVo provides a lifetime subscription for $300, so let's just add
that to the price: $500.</p>

<p>But what about playing music?  I almost had a working solution...
Well, TiVo can solve that too, just add the Home Media option for
$100, and it'll integrate nicely with my Windows desktop: $600.
But wait, I don't have a Windows machine at home all the time.  I
could probably whip up my own server for Linux... reverse engineer
the network protocol...</p>

<p>Oh, and there's no DVD player built into the basic box.  You can
get one with DVD for an extra $100 or so, but there's no easy way
to add it later:  $700.</p>

<p>And TiVo doesn't have any clean way to skip ads.  You can hack it,
but maybe not if you buy the newer Series 2 TiVos (which are the
ones with the music option).  And if you want to add another
harddrive, you probably have to hack it.  Man that sounds like a
lot of work... what was the point?  Oh yeah, TiVo was going to be
less work and cheaper.  $700.</p>

<p>Well, I could buy a pretty decent PC for $700 and hook it up to my
TV.  The problem then would just be the software, and I know I
don't have time to write that kind of thing.  Fortunately, someone
already did, and it's called <a href="http://www.mythtv.org/" title="mythtv.org">MythTV</a>.
Out of the box, it has <em>every</em> feature I mentioned above, plus
"automatic" commercial detection and skipping, a frontend for
emulation Nintendo (NES) and Super-Nintendo (SNES) machines, a
weather forecast module, and an RSS feed reader.  And it looks
<a href="http://www.mythtv.org/modules.php?name=MythFeatures" title="mythtv.org"><em>pretty</em></a>.</p>

<p>Doesn't look like a very difficult decision after all.  I already
have some of the hardware I'll need, but not all.  I'll let you
know how it goes.</p>

]]></description>
    </item>

    <item>
      <title>Litestep</title>
      <pubDate>Mon, 24 Nov 2003 12:07:14 EST</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#litestep</guid>
      <link>
        http://n01se.net/chouser/blog/#litestep
      </link>
      <description><![CDATA[<p>I need to add to my list of tools required to make Windows less
painful.  <a href="http://www.litestep.net/" title="litestep.net">Litestep</a> is a Windows
"shell" replacement, and not a new one.  It must be one of the
oldest programs meant to replace the normal Start menu and taskbar
generally found at the bottom of the Windows desktop, and it is
now GPL.  It is <em>highly</em> customizable (through an arcane maze of
textfiles), and having spent the weekend poking at it, I'm quite
happy with the results.</p>

<img src="http://bluweb.com/chouser/info/blog/img/litetray02.png"
alt="My customized litestep GUI" />

<p>This small tray sits in the lower-right corner of my screen and
gives me all the information I need -- systray icons, CPU meter,
and the current time and date.  In the far right corner is also my
current virtual desktop number; more on that in a minute.  That's
all that stays on my screen -- no start menu button, no desktop
icons, no annoying list of open windows -- nothing but this small
clean tray.</p>

<p>Litestep provides fully customizable menus, including a nice
root-menu so I can get to the normal list of programs by
right-clicking anywhere on the desktop.  It also lets me bind
keystrokes so I can get to everything I need from the keyboard,
without even reaching for the mouse.  It's all very nice.</p>

<p>I do need to mention the virtual desktops, though.  Litestep can
provide virtual desktops via one of several plugins, any they
provide the very pretty feature of drawing miniature
representations of all your desktops.  However, I chose not to use
these for a couple of reasons.  The main reason is that they all
seem to hide the windows not on the current desktop by moving them
beyond the border of the screen.  This as two negative
consequences: one is that all the windows on all the desktops show
up in my alt-tab list simultaneously; the other is that they get
very confused when my desktop changes size so that I end up with
pieces of windows hanging off the sides of my screen.  The other
reason is the process-blocking issue I mentioned before; if the
same process provides all my menus and my virtual desktops, I
could become pretty badly stuck.</p>

<p>So I continue to use the excellent
<a href="http://www.windowspowerpro.com/" title="windowspowerpro.com">Windows PowerPro</a> for my
virtual desktops, and it is actually what is drawing the desktop
number in the lower-right corner of my screen.  I think it is
evidence of the quality of both Litestep and PowerPro that they
work so well together.</p>

]]></description>
    </item>

    <item>
      <title>That is called a theme.</title>
      <pubDate>Mon, 10 Nov 2003 12:17:48 EST</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#bushdemocracy</guid>
      <link>
        http://n01se.net/chouser/blog/#bushdemocracy
      </link>
      <description><![CDATA[<p><em>With a strong sense of history, George W. Bush last week made
the case for "a forward strategy" of idealism in American
foreign policy...  "From the Fourteen Points to the Four
Freedoms, to the Speech at Westminster, America has put our
power at the service of principle," Bush said. "The advance of
freedom is the calling of our time."</em></p>

<p><em>That is called a theme...</em></p>

<p><em>Most people did not have the chance to catch the whole speech
on cable, and found only snippets on broadcast TV; the longest
excerpt of the half-hour address ran less than four minutes on
prime-time network news...</em></p>

<p><em>[N]ot even The Times gave readers the chance to study the full
text in the paper. (It's on the
<a href="http://www.nytimes.com/2003/11/06/politics/06TEXT-BUSH.html?pagewanted=print" title="nytimes.com">Times Web site</a>...)</em></p>

<p><em>This speech clearly articulated the policy this Bush will be
remembered for. If you are interested in knowing where he wants
to take this country and why, you will find it worth reading all
the way through. Reading summaries and excerpts and critiques
lets editors and analysts do the thinking for you. Film snippets
of applause lines won't help you grasp the import, which you
should have even if you want to disagree knowledgeably.</em></p>

<p>--William Safire,
<a href="http://www.nytimes.com/2003/11/10/opinion/10SAFI.html?n=Top%2fOpinion%2fEditorials%20and%20Op%2dEd%2fOp%2dEd%2fColumnists%2fWilliam%20Safire&#38;pagewanted=print" title="nytimes.com">The Age of Liberty</a></p>

]]></description>
    </item>

    <item>
      <pubDate>Fri, 31 Oct 2003 01:12:36 EST</pubDate>
      <title>Tools to make Windows livable.</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#wtools</guid>
      <link>
        http://n01se.net/chouser/blog/#wtools
      </link>
      <description><![CDATA[<p>Several months ago I accepted a new position where I work almost
exclusively in Windows.  I've made peace with this and settled in,
at least until I can start helping with a Linux port.  Here are
the tools that make living in Microsoft's world possible:</p>

<dl><dt><a href="http://www.vim.org" title="vim.org">Vim</a></dt>

<dd><p>An extremely comfortable interface to text in all its forms.</p>

</dd>

<dt><a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/" title="chiark.greenend.org.uk/~sgtatham">putty</a></dt>

<dd><p>This is a very solid terminal emulator with telnet and ssh
built right in.  Besides being wholly functional, it has the
little extras that make me feel at home, like select-to-copy
and right-click-to-paste.</p>

</dd>

<dt><a href="http://www.cygwin.com/" title="cygwin.com">CygWin</a></dt>

<dd><p>All the little tools that every OS should provide, but
Microsoft left out.  You know: grep, tail, xargs, ... gcc.</p>

</dd>

<dt><a href="http://perl.com/" title="perl.com">Perl</a></dt>

<dd><p>Because sometimes a batch file just won't cut it.  I'd be
happy to list <a href="http://www.python.org" title="python.org">Python</a> or
<a href="http://ruby-lang.org/en/" title="ruby-lang.org">Ruby</a> here, but as it turns out
even the non-unixy people around here already have Perl
installed.</p>

</dd>

<dt><a href="http://texturizer.net/firebird/" title="texturizer.net">Firebird</a></dt>

<dd><p>For now, it's <strong>The</strong> web browser.  Eventually it may just be
the <a href="http://mozedit.mozdev.org/" title="mozedit.mozdev.org">editor</a>,
<a href="http://xmlterm.sourceforge.net/" title="xmlterm.sourceforge.net">terminal emulator</a>, and
<a href="http://aspn.activestate.com/ASPN/Mozilla" title="aspn.activestate.com">development
environment</a> too.</p>

<p>I'll post my favorite extensions later.</p>

</dd>

<dt><a href="http://www.windowspowerpro.com/" title="windowspowerpro.com">Windows PowerPro</a></dt>

<dd><p>Once upon a time, I had three 21-inch Trinitrons on my desk,
and I used virtual desktops on each.  Now I have a single
17-inch, so to be stuck on one desktop would mean constant
pain.</p>

<p>Windows PowerPro to the rescue: it provides solid virtual
desktops with a highly configurable interface.  And I don't
mean skinnable, although it may be that too; what I mean is I
can set keyboard shortcuts and have it otherwise just stay out
of my way.  It also has tons of extra little features I'm
barely using.</p>

</dd>

<dt><a href="http://rom.jalix.org/software.html#shidewin" title="rom.jalix.org">ShideWin</a></dt>

<dd><p>Of course something as powerful as virtual desktops couldn't
be possible in Windows without some kind of complication.  As
it turns out, there appears to be no way to show or hide a
window without going through it's application's event loop.
Trash X-Windows if you want to, but it sure got this one right.</p>

<p>Anyway, this means that if an app is "not responding" (perhaps
because you're debugging it and at a breakpoint), the
desktop-switcher thread blocks waiting for the stuck app to
respond.</p>

<p>ShideWin is the handy little program I use to get myself
un-stuck in the situations.  It's sad that I need it at all,
and worse that I use it almost every day, but it's just the
natural consequence of the "design" decisions embodied in
Windows.</p>

</dd>

</dl>

<p>Without these I could still do my job, I just wouldn't want to.</p>

<p><em>PS. Until I get trackback figured out, I'll have to link to
related posts manually.
<a href="http://www.livingtorah.org/journal/archives/2003_11.php#002263" title="livingtorah.org">Like this</a>.</em></p>

]]></description>
    </item>

    <item>
      <pubDate>Mon, 29 Sep 2003 17:16:52 EDT</pubDate>
      <title>Treason</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#coultertreason</guid>
      <link>
        http://n01se.net/chouser/blog/#coultertreason
      </link>
      <description><![CDATA[<p>I didn't know that Senator Joe McCarthy's claims about Communists
in the State Department have turned out to be true.  I didn't know
that many of those he accused not only had Communist beliefs but
were actually being paid by the USSR for information and
influence.  I hadn't realized how many people believed that the
best we could hope for against Communist Russia was stalemate, and
never heard President Reagan's plans to crush Communism described
as a cohesive strategy.</p>

<p>But now I know, because I have been informed -- I just finished
reading <a href="http://anncoulter.com/" title="anncoulter.com">Ann Coulter</a>'s latest book,
<a href="http://pricescan.com/books/BookDetail.asp?isbn=1400050308" title="pricescan.com (ISBN 1400050308)"><cite>Treason</cite></a>.  If any of these statements have
surprised you, you should definitely read this book.  It's easy to
follow, but is copiously footnoted which make continuing research
on your own much easier.</p>

<p>If you aren't familiar with Coulter's writing or are not already
persuaded by conservative ideas, you may have her style a bit
abrasive.  She unfortunately attempts to use name calling and
exaggeration for humor.  If these jokes bother you, just ignore
them; her arguments do not rely on <em>ad hominem</em> attacks.</p>

<p>Most of the book is about critical moments in the last 100 years
of American history, updated with recent findings and discussed in
the light of current events.  You really ought to read it.</p>

]]></description>
    </item>

    <item>
      <pubDate>Sun, 28 Sep 2003 23:01:08 EDT</pubDate>
      <title>Nuclear option</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#senatenuclear</guid>
      <link>
        http://n01se.net/chouser/blog/#senatenuclear
      </link>
      <description><![CDATA[<p>Since Miguel Estrada withdrew his name from consideration for the
US Court of Appeals (a few weeks ago now), you may have heard more
mention of the "Nuclear option."  Most media outlets seem to treat
this kind of thing as if it's too difficult for us to understand
the actual details, so they talk in metaphor and hyperbole.  I
decided to see if I could figure out what's really going on.</p>

<p>Estrada is one of the judicial nominations made by President Bush
that the Senate Democrats have been keeping from getting a vote on
the Senate floor.  When they had the majority in the Senate, the
Democrats didn't let the nominations out of committee.  Now that
they no longer control the committees, they're using the threat of
filibuster to prevent the vote from happenning.</p>

<p>Time is set aside before most votes to give the Senators a chance
to debate that vote.  A filibuster is just taking advantage of this
time to talk endlessly and prevent any other business from getting
done, including the vote itself.  A cloture motion is a way to
force an end to the debate and move on to the vote itself.  All of
this is laid out in the Senate rules which are agreed upon by the
Senators themselves.  Senate Rule XXII (that's Rule 22 for the us
non-Romans) deals with cloture:</p>

<blockquote><p>[T]he Presiding Officer shall, without debate, submit to the
Senate by a yea-and-nay vote the question: "Is it the sense of
the Senate that the debate shall be brought to a close?" And if
that question shall be decided in the affirmative by
three-fifths of the Senators duly chosen and sworn -- except on
a measure or motion to amend the Senate rules, in which case the
necessary affirmative vote shall be two-thirds of the Senators
present and voting -- then said measure, motion, or other matter
pending before the Senate, or the unfinished business, shall be
the unfinished business to the exclusion of all other business
until disposed of.</p>

<p>Thereafter no Senator shall be entitled to speak in all more
than one hour on the measure...</p>

<p>-- <a href="http://rules.senate.gov/senaterules/rule22.htm" title="rules.senate.gov">from Senate
  Rule XXII</a></p>

</blockquote>

<p>This "two-thirds" is the infamous "super-majority" that the Senate
Republicans do not have, which means the Democrats can block any
motion they decide is worth filibustering.  Naturally, the Senate
Republicans are looking for ways to get these nominees past a
filibuster.  I was surprised to find that they actually have a
couple different options here.  I guess I didn't realize the
Constitution doesn't directly address this level of detail.
Senate Rules still have to answer to a higher law.</p>

<blockquote><p>[Some] Members of the majority [are] saying they are going to
have this rule changed regardless of what the Rules Committee
does; that if it does not work out in the Rules Committee, they
are going to come here and have the Presiding Officer just say
what we have been doing is unconstitutional.</p>

<p>-- <a href="http://thomas.loc.gov/cgi-bin/query/z?r108:S09MY3-0008:" title="thomas.loc.gov">Senator Reid</a></p>

</blockquote>

<p>Well that's an option, but it may not work.  And if it <em>does</em>
work, would there be other consequences?  Senate Minority Whip
Harry Reid continued...</p>

<blockquote><p>[T]o say suddenly that you cannot have a filibuster because it
is unconstitutional, creates many different problems. Does that
mean if 11 members of the Judiciary--a majority--holds up a
judicial nominee, that that is unconstitutional and it can come
immediately to the floor? I think not.</p>

</blockquote>

<p>This is what's being described as the "nuclear option".  So maybe
we should set that option aside -- I very much doubt the Republican
leadership would go for it, anyway.</p>

<p>But there's another little loophole in Rule XXII.  A motion to
amend the Rules only requires "two-thirds of the Senators present
and voting."  So the Republicans could propose an amendment to
Rule XXII which would make it easier to break a judicial
nomination filibuster.  Even if the Democrats hated it badly
enough to filibuster the amendment, perhaps the Republicans could
schedule a cloture vote when fewer Democrats were around, in which
case it might pass.</p>

<p>Feels like hacking, doesn't it?</p>

<p>But this is actually what Senate Majority Leader Bill Frist has
begun doing.  Using concepts and language from amendments proposed
in the past by Democrats,
<a href="http://thomas.loc.gov/cgi-bin/query/z?r108:S09MY3-0006:" title="thomas.loc.gov">Frist
proposed</a> his own amendment to Rule XXII:</p>

<blockquote><p>My proposal is similar to [one] by my
distinguished Democratic colleague from Georgia, Senator ZELL
MILLER, [and to one] offered in 1995 by the
distinguished Democratic Senators from Iowa and Connecticut, TOM
HARKIN and JOE LIEBERMAN...</p>

<p>My resolution... is more narrowly tailored [and] applies only to
nominations. It leaves the rest of rule XXII unamended. It
addresses the very specific defect that needs repair.</p>

</blockquote>

<p>Although some news reports are erroneously describing this option
as being "nuclear" as well, Senator Reid (D) disagrees:</p>

<blockquote><p>Now, I do say to the leader [Mr. Frist] that I think this is
being approached in a proper fashion. I think that to go to seek
a rules change is the way it should be done. If you don't like
what is going on here, try to change a rule.</p>

<p>-- <a href="http://thomas.loc.gov/cgi-bin/query/z?r108:S09MY3-0008:" title="thomas.loc.gov">Senator Reid</a></p>

</blockquote>

<p>It'll be interesting to see where this ends up.</p>

<p><em>PS. Sorry for the long gap in blog updates.  There are many
reasons for this, but none of them serious or commendable.  Of
course I was afraid from the beginning that I would drop the ball,
but hopefully this post is the beginning of regular updates
again.</em></p>

]]></description>
    </item>

    <item>
      <pubDate>Thu, 04 Sep 2003 13:03:50 EDT</pubDate>
      <title>Blog reloaded</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#reload</guid>
      <link>
        http://n01se.net/chouser/blog/#reload
      </link>
      <description><![CDATA[<p>Ok, the auto-reload system I
<a href="http://bluweb.com/chouser/info/blog/#bloggysog" title="bluweb.com">described
earlier</a> is back on line.  The design is fundamentally the same,
but the code now checks for a couple of common situations that had
been causing <a href="http://bluweb.com/chouser/info/blog/#diereloaddie" title="bluweb.com">significant failures</a> previously.  For example if either the XML
version-number file or the blog page itself was "stuck" in the
browser's cache, my code would reload the blog wildly and
repeatedly.</p>

<p>Anyway, this and other problems should now be fixed.  Let me know
if you see any more problems.</p>

]]></description>
    </item>

    <item>
      <pubDate>Fri, 29 Aug 2003 23:42:45 EDT</pubDate>
      <title>Auto-reload problems</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#diereloaddie</guid>
      <link>
        http://n01se.net/chouser/blog/#diereloaddie
      </link>
      <description><![CDATA[<p>A couple of readers have seen problems with this blog's
auto-reload feature; either it's not reloading at all (hi Aaron),
or it reloads constantly (hi Amby).  This obviously won't do, so
I'm turning the feature off until I can kill these bugs.</p>

<p>Sorry for any trouble.</p>

]]></description>
    </item>

    <item>
      <pubDate>Fri, 29 Aug 2003 09:30:00 EDT</pubDate>
      <title>Mozilla goodies</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#mozgoodies</guid>
      <link>
        http://n01se.net/chouser/blog/#mozgoodies
      </link>
      <description><![CDATA[<p>I've wondered for a long time how to log my own custom
messages into Mozilla's JavaScript Console.  Searching the web, I
was only able to find others asking similar questions, but no
answers.  So I dug around; with the help of the 
<a href="http://unstable.elemental.com/mozilla/" title="unstable.elemental.com">Mozilla cross-referenced
source</a> and some experimentation, here is a solution.
Unfortunately, you need to enable higher privileges, and I have no
way of knowing if this is the easiest way.  It's not as simple as
I'd hoped, but it works:</p>

<pre>var PM = netscape.security.PrivilegeManager;
PM.enablePrivilege( 'UniversalXPConnect' );
var logString = Components.classes[
    '@mozilla.org/consoleservice;1'
  ].getService(
    Components.interfaces.nsIConsoleService
  ).logStringMessage;</pre>

<p>That enables the privileges you need and grabs a reference to the
function you'll want to use.  Now you can just call <code>logString</code>:</p>

<pre>logString( 'Hello World!' );</pre>

<p>By the way, I had forgotten this about JavaScript, but it's
important:  Variables in JavaScript are <strong>global</strong>, even when
first used inside a function, unless you specifically declare them
using <code>var</code>.</p>

<p>While digging around for information about Mozilla and Firebird, I
stumbled across the <code>about:cache</code> and <code>about:config</code> URLs.  To
try one out, just type it into Mozilla's address box.  Using
<code>about:config</code> I was able to discovered Mozilla's strict
JavaScript mode.  Very cool:</p>

<pre>user_pref(
  "javascript.options.showInConsole", true );
user_pref(
  "javascript.options.strict", true );</pre>

<p>Also cool are all <a href="http://texturizer.net/firebird/tips.html" title="texturizer.net">these
tips</a> for making Firebird even more enjoyable than it already
was.</p>

]]></description>
    </item>

    <item>
      <pubDate>Thu, 28 Aug 2003 10:23:20 EDT</pubDate>
      <title>Mothra the Blogmonster</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#MtB</guid>
      <link>
        http://n01se.net/chouser/blog/#MtB
      </link>
      <description><![CDATA[<p>One problem from <a href="http://bluweb.com/chouser/info/blog/#mozrss" title="bluweb.com">Monday</a> was that setting the XML document's <code>onload</code> handler
only worked once.  Subsequent loads weren't handled at all, until
I switched to using <code>addEventListener</code> instead.  I think the
only other problems that caused the behavior I saw on Monday were
all related to not enabling UniversalBrowserRead privileges
everywhere that I should have.</p>

<p>So now it's working!  It places blog entry guids in your browser
history to keep track of which ones you've read, and it uses a
single cookie to store your own personal list of subscriptions.  I
still haven't figured out how to sign it, so if you want to use it
you need to restart your browser with the following line added to
your <code>prefs.js</code>:</p>

<pre>user_pref(
  "signed.applets.codebase_principal_support",
  true);</pre>

<p>Once you've done that, you can
<a href="http://bluweb.com/chouser/info/blog/mtb.html" title="bluweb.com">give it a try</a>.
Use <code>&lt;space&gt;</code> to page down or advance to the next unread
entry.  There is currently no automatic refresh at all, so you'll
have to do a page reload while holding down <code>&lt;shift&gt;</code> to
refresh all the feeds.</p>

<p>Don't get too carried away adding subscriptions, because the URL
to Mothra may change, and your cookie may not match once that
happens.  If you really want to, you can download both
<a href="http://bluweb.com/chouser/info/blog/mtb.html" title="bluweb.com"><code>mtb.html</code></a> and
<a href="http://bluweb.com/chouser/info/blog/mtb.js" title="bluweb.com"><code>mtb.js</code></a> and run
them from your local machine.  Then you can upgrade manually in
the future without losing your subscription list, and you won't
have to "trust" anything else from my site.</p>

<p>As an interesting puzzle to solve,
<a href="http://bluweb.com/chouser/info/blog/mtb.html" title="bluweb.com">Mothra</a> is a
success.  You'll have to let me know whether you think it's a
success as a useful application.  Also, look for more details on
code signing once I figure out how to do it.</p>

<p><em>PS. Thanks to <a href="http://www.css.tayloru.edu/~abrooks/" title="css.tayloru.edu/~abrooks">Aaron</a> for
help on the name.</em></p>

]]></description>
    </item>

    <item>
      <pubDate>Mon, 25 Aug 2003 23:46:08 EDT</pubDate>
      <title>Mozilla meets RSS</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#mozrss</guid>
      <link>
        http://n01se.net/chouser/blog/#mozrss
      </link>
      <description><![CDATA[<p>So after playing around with loading XML files from within
JavaScript for my <a href="http://bluweb.com/chouser/info/blog/#bloggysog" title="bluweb.com">auto-refresh</a> system, I was inspired.  Why not load full RSS
feeds this same way?  I could build a full RSS blog reader right
in <a href="http://mozilla.org" title="mozilla.org">mozilla</a>!</p>

<p>I'm not exactly sure why I'm doing this.  Perhaps it's just the
fun of solving an interesting puzzle.  It's not like there's
<a href="http://www.lights.com/weblogs/rss.html" title="lights.com">too few blog readers</a>
out there.</p>

<p>Anyway, if I can get this working, it will be cross-platform (pure
mozilla -- JavaScript, CSS, etc.), highly "skinnable", use the
beautiful gecko engine for rendering content, and "installing" it
will be a matter of adding a link to your bookmarks.</p>

<p>The basics were surprisingly easy, and I've got a
<a href="http://bluweb.com/chouser/info/blog/img/blogread01.png" title="bluweb.com">screenshot</a> to prove it.  But I'm now bogged down in mozilla
security model issues.  I can't figure out how to get the
privileges I need to load an XML RSS feed from any ol' URL on the
web.</p>

<p><a href="http://www.mozilla.org/projects/security/components/signed-scripts.html" title="mozilla.org">This page</a> got me started, and I'm using <strong>codebase principal</strong>
until I can get everything else working.  To do this I had to add
a line to my <code>prefs.js</code>:</p>

<pre>user_pref(
  "signed.applets.codebase_principal_support",
  true);</pre>

<p>I then believe I need to enable some privilege from within my
JavaScript, like this:</p>

<pre>netscape.security.PrivilegeManager.enablePrivilege(
  "UniversalBrowserRead");</pre>

<p>Doing this makes the security errors go away, but the XML document
never gets loaded, or at least the <code>onload</code> handler never gets
called.  Until I figure out why that is, this is pretty much
useless.</p>

]]></description>
    </item>

    <item>
      <pubDate>Thu, 21 Aug 2003 16:24:23 EDT</pubDate>
      <title>Bloggy sog.</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#bloggysog</guid>
      <link>
        http://n01se.net/chouser/blog/#bloggysog
      </link>
      <description><![CDATA[<p>The HTML-based version of this blog now has an automatic refresh
system.  I hope it will keep your copy of my blog from getting old
and soggy.  The page uses JavaScript to periodically fetch an
extremely small XML file. The XML is never displayed on the
screen, but instead is used by the JavaScript to determine if a
reload is necessary.  This is my first attempt to use this kind of
background data-fetch on a web page.</p>

<p>Periodically, an XML file named <code>blogv.xml</code> is fetched from the
web server.  It contains a number describing the latest version of
this blog that has been uploaded.  For example, it might contain:</p>

<pre>&lt;v&#62;42&lt;/v&#62;</pre>

<p>One of the <code>&lt;meta&#62;</code> tags in the HTML file also contains a
version number, like:</p>

<pre>&lt;meta name="version" content="42" /&#62;</pre>

<p>When the XML file is reloaded, once every half-hour, its fresh
number is checked against the version number in the older HTML
file.  If the numbers don't match, the HTML page currently in the
browser must be out-of-date, so the page is re-loaded.</p>

<p>You can check to see if this is working for you by scrolling to
the bottom of this page.  The date and time marked as "Last
auto-sync" is when your browser last fetched <code>blogv.xml</code> and
confirmed that the page you're looking at is the latest version.
If you see "none succeeded", it's probably because your browser
doesn't support the XML features needed (ie. you're using IE or
some other non-gecko browser), or perhaps you have JavaScript
turned off.</p>

<p>Most of the work is done by
<a href="http://bluweb.com/chouser/info/blog/reloader.js" title="bluweb.com"><code>reloader.js</code></a>.  In order to allow the same JavaScript to be
used by multiple web pages, it gets all the information it needs
from the HTML page header:</p>

<pre>&lt;meta name="version" content="42" /&#62;
&lt;link rel="latestversion"
  href="http://bluweb.com/chouser/info/blog/blogv.xml" /&#62;
&lt;script src="info/blog/reloader.js"
  type="text/javascript"&#62;
&lt;/script&#62;</pre>

<p>The web page also kicks off the sync timer from its <code>&lt;body&#62;</code>
tag:</p>

<pre>&lt;body onload="startreloader()"&#62;</pre>

<p>Finally, the date and time are included at the bottom using an
element with <code>id="checkdate"</code>:</p>

<pre>Last refresh auto-check:
&lt;span id="checkdate"&#62;
  none succeeded
&lt;/span&#62;</pre>

<p>This was all inspired by <a href="http://www.css.tayloru.edu/~abrooks/" title="css.tayloru.edu/~abrooks">Aaron</a>, who noted that a 50K page reloaded every hour generates
at least 1.2MB of traffic per day.  Instead, this system downloads
less than 250 bytes per sync, including all the HTTP headers.
Adding in one full 50K page per day for when I've actually posted
something new, a whole month of traffic would come out to about
1.7MB.  That's a pretty dramatic improvement.  Thanks, Aaron!</p>

]]></description>
    </item>

    <item>
      <pubDate>Tue, 19 Aug 2003 16:08:27 EDT</pubDate>
      <title>A viscous cycle</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#englisherrors</guid>
      <link>
        http://n01se.net/chouser/blog/#englisherrors
      </link>
      <description><![CDATA[<p>I just stumbled upon <a href="http://www.wsu.edu/~brians/errors/" title="wsu.edu/~brians">Common
Errors in English</a>, and I'm very much enjoying it, especially the
<a href="http://www.wsu.edu/~brians/errors/errors.html" title="wsu.edu/~brians">list of errors</a>
and <a href="http://www.wsu.edu/~brians/errors/nonerrors.html" title="wsu.edu/~brians">Non-Errors</a>.  It's full of useful, witty answers and careful
detail.  Of course, I would never hurl
<a href="http://www.wsu.edu/~brians/errors/epigram.html" title="wsu.edu/~brians">epitaphs</a> at
those who make silly mistakes,
<a href="http://www.wsu.edu/~brians/errors/irregardless.html" title="wsu.edu/~brians">irregardless</a> of the cause.  In fact, I
<a href="http://www.wsu.edu/~brians/errors/care.html" title="wsu.edu/~brians">could care less</a>.  I
don't think it's worth banging on a
<a href="http://www.wsu.edu/~brians/errors/podium.html" title="wsu.edu/~brians">podium</a> at those
who are <a href="http://www.wsu.edu/~brians/errors/flounder.html" title="wsu.edu/~brians">foundering</a> with the language.  Life is enough a
<a href="http://www.wsu.edu/~brians/errors/veil.html" title="wsu.edu/~brians">veil of tears</a>
already.</p>

<p>Also fun:</p>

<ul><li>American <a href="http://www.wsu.edu/~brians/errors/emigrate.html" title="wsu.edu/~brians">emigrants</a>.</li>

<li>Start from <a href="http://www.wsu.edu/~brians/errors/zero.html" title="wsu.edu/~brians">ground zero</a>.</li>

<li><a href="http://www.wsu.edu/~brians/errors/confusionism.html" title="wsu.edu/~brians">Confusionism</a>.</li>

<li><a href="http://www.wsu.edu/~brians/errors/depreciate.html" title="wsu.edu/~brians">Depreciated</a> features.</li>

<li>Getting caught in a
<a href="http://www.wsu.edu/~brians/errors/vicious.html" title="wsu.edu/~brians">viscous
cycle</a>.</li>

</ul>

]]></description>
    </item>

    <item>
      <pubDate>Mon, 18 Aug 2003 13:15:19 EDT</pubDate>
      <title>private? static? unnamed?</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#staticfunction</guid>
      <link>
        http://n01se.net/chouser/blog/#staticfunction
      </link>
      <description><![CDATA[<p>The first C++ project larger than a small class assignment that I
ever worked on was for my
<a href="http://www.bluweb.com/us/chouser/proj/magiclens/" title="bluweb.com">senior
project</a> in <a href="http://www.css.tayloru.edu/" title="css.tayloru.edu">Computer Science at
Taylor</a>.  As I worked, I became frustrated with the consequences
of some of my design decisions which had seemed obvious when I
made them.  In desperation I went went to a bookstore (Borders, I
think) to some C++ book to help, but I was totally overwhelmed by
the number of books available, most of which didn't look like they
would help me.</p>

<p>After flipping through the first couple pages,
<a href="http://dev.gentoo.org/~agriffis/" title="dev.gentoo.org/~agriffis">Aron</a> suggested
<a href="http://pricescan.com/books/BookDetail.asp?isbn=0201633620" title="pricescan.com (ISBN 0201633620)">Large-Scale C++ Software Design by John Lakos</a>.
I was under no illusions about my class project being truly
"Large-Scale", so I didn't think the book would help me.  I was so
wrong.  It answered every question I had at the time, and educated
me on questions that I <em>should</em> have been asking, but wasn't.
It educates me to this day.</p>

<h4>private?</h4>

<p>Here's a little gem.  Hopefully most C++ programmers are already
familier with this point, but I know I sure wasn't taught anything
like this in school:</p>

<blockquote><p>...all other things being equal, it is better to insulate a
client from an implementation detail than not to do so--even if
only to reduce the clutter in the physical interface...</p>

<p>Private member functions, although encapsulated logical
implementation details of a class, are part of the physical
interface of a component...</p>

<p>Sometimes functions are made private members not because they
need private access but because the private section of the
header file is a good place to store these factored helper
functions.  That is, some private helper functions can do all of
their work using only the public interface of the class.  In
these cases, the transformation from private member to static
free functions is easy and quickly accomplished...</p>

<p>[Lakos 6.3.3]</p>

</blockquote>

<h4>static?</h4>

<p>I was struggling with this today because I thought that all free
functions (i.e. global, not member functions) were static by
default and that by default they are accessible to other object
files when linked (i.e. have external linkage).  In fact, my
<a href="http://pricescan.com/books/BookDetail.asp?isbn=0201514591" title="pricescan.com (ISBN 0201514591)">C++
reference</a> says:</p>

<blockquote><p>All global objects have storage class <em>static</em>.  [Stroustrup
3.5]</p>

</blockquote>

<p>So if a static free function is just a default global function,
and by default global functions have external linkage, how does
this accomplish the privacy Lakos thinks we should have?</p>

<p>Well, Stroustrup thought that might confuse me:</p>

<blockquote><p>The word "static" has two basic meanings in C and C++.  One is
"allocated once at a fixed address" (as opposed to allocated on
the stack once per function call); the other is "local" (as in
local to a translation unit or "in class scope").  These two
meanings interact and frequently cause confusion.  [Stroustrup
7.1.1]</p>

</blockquote>

<p>BTW, a "translation unit" is a basically a <code>.c</code> file and all of
the files it <code>#include</code>s.</p>

<p>So now it starts to make sense.  By default, functions have
<em>storage class static</em>, but that's not the same as being
"local".  As it turns out, the rules for determining whether
something will be local or global are not trivial:</p>

<blockquote><p>A name of file scope that is explicitly declared <code>static</code> is
local to its translation unit and can be used as a name for
other objects, functions, and so on, in other translation units.
Such names are said to have internal linkage.  A name of file
scope that is explicitly declared <code>inline</code> is local to its
translation unit.  A name of file scope that is explicitly
declared <code>const</code> and not explicitly declared <code>extern</code> is
local to its translation unit.  So is the name of a class that
has not been used in the declaration of an object function, or
class that is not local to its translation unit and has no
static members and no noninline member functions.  Every
declaration of a particular name of file scope that is not
declared to have internal linkage in one of these ways in  a
multifile program refers to the same object, function, or class.
Such names are said to be external or to have external linkage.</p>

<p>Typedef names, enumerators, and template names do not have
external linkage.</p>

<p>Static class members have external linkage.</p>

<p>Noninline class member functions have external linkage.  Inline
class member functions must have exactly one definition in a
program.</p>

<p>Local names explicitly declared <code>extern</code> have external linkage
unless already declared <code>static</code>.</p>

<p>[Stroustrup 3.3]</p>

</blockquote>

<p>Ok, well that's all a bit of a mess.  The simple point is that
although the storage class of all file-global declarations is
<em>static</em>, those that are specifically declared <code>static</code> are
private to that translation unit.  Or as Stroustrup puts it:</p>

<blockquote><p>A name specified <code>static</code> has internal linkage.  [Stroustrup 7.1.1]</p>

</blockquote>

<h4>unnamed?</h4>

<p>A final thought... Lakos does mention another way to write free
functions for use within a single translation unit:</p>

<blockquote><p>We will be able to achieve this same effect more elegantly using
unnamed namespaces... once this relatively new language feature
becomes more widely available. [Lakos 6.3.3]</p>

</blockquote>

<p>In fact, global <code>static</code> functions are actually deprecated in
C++:</p>

<blockquote><p>Unnamed namespaces make global <code>static</code> redundant.  For
example:</p>

<pre>namespace {
  void f(); // accessible from this
            // translation unit;
            // inaccessible from
            // other units
}</pre>

<p>[Stroustrup 3.3.1.5]</p>

</blockquote>

]]></description>
    </item>

    <item>
      <pubDate>Sat, 16 Aug 2003 09:31:59 EDT</pubDate>
      <title>What a punny name!</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#svnarch</guid>
      <link>
        http://n01se.net/chouser/blog/#svnarch
      </link>
      <description><![CDATA[<p><a href="http://subversion.tigris.org/" title="subversion.tigris.org">Subversion</a> is meant to be a
successor to <a href="http://www.cvshome.org/" title="cvshome.org">CVS</a>, and I've just
started using it.  Another system competing to replace CVS is
<a href="http://regexps.srparish.net/www/" title="regexps.srparish.net"><code>arch</code></a>, which I have
explored using in the past.  So why have I chosen Subversion (at
least for now) over <code>arch</code>?</p>

<p>Perhaps the most important reason is that there appears to be a
good deal more momentum behind the development of Subversion
than <code>arch</code>.  Regardless of the reason for this, it has some
important consequences including more frequent bug fixes, new
features completed sooner, etc.  Even if the <em>current</em> product
is less mature or lacking in features (I'm not saying it is),
these consequences may allow it to overcome any current
shortcomings.</p>

<p>My other reasons are slightly more embarrassing.  For one,
Subversion has a less radical paradigm than <code>arch</code>.  This
isn't necessarily good, but it does mean it's easier for someone
who is familiar with CVS to start using Subversion.  Also,
Subversion has better support for running on Windows, and I'm
afraid that has enough of an impact on my reality right now that
it also factored into my decision.</p>

<p>Subversion was easy to set up (with the help of
<a href="http://svnbook.red-bean.com/" title="svnbook.red-bean.com">this handy book</a>) and is now
successfully keeping my blog files synced up.  Of course it's
too soon to know how things will end up, but so far using
Subversion has been a positive experience.</p>

]]></description>
    </item>

    <item>
      <pubDate>Fri, 15 Aug 2003 09:35:11 EDT</pubDate>
      <title>And the winner is...</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#shortsortwin</guid>
      <link>
        http://n01se.net/chouser/blog/#shortsortwin
      </link>
      <description><![CDATA[<p>The <a href="http://bluweb.com/chouser/info/blog/#shortsort" title="bluweb.com">shortest C
sort function</a> contest has concluded.  We have a tie at 62 chars.
<a href="http://www.css.tayloru.edu/~abrooks/" title="css.tayloru.edu/~abrooks">Aaron</a> gets top billing
for a solution that even works with zero-length arrays:</p>

<pre>S(a,c)int*a;{for(;c;*a&#62;a[c]?*a^=a[c]^=*a^=a[c]:0)S(a+1,--c);}</pre>

<p><a href="http://www.css.tayloru.edu/~bbell/" title="css.tayloru.edu/~bbell">Bob</a> uses an independently
engineered but identical test-and-swap clause, identical function
definition syntax, and weighs in at the same 62 chars, but his
loop doesn't like zero-length arrays:</p>

<pre>S(a,n)int*a;{for(;--n;S(a+1,n))*a&#62;a[1]?*a^=a[1]^=*a^=a[1]:0;}</pre>

<p>Michael Sterrett (aka Mr. Bones) came in a close 3rd with
65 chars:</p>

<pre>S(int*a,int c){for(;c--;S(a++,*a&#62;a[c]?*a^=a[c]^=*a^=a[c],c:c));}</pre>

<p>My solution came in a dismal 4th place at 66 chars, and still
breaks for zero-length arrays:</p>

<pre>S(int*a,int n){--n?S(a,n),S(a+1,n),n=a[1],n&#60;*a?a[1]=*a,*a=n:0:0;}</pre>

<p>Sterrett and I failed to discover the default parameter-type trick
that Aaron and Bob used, but after seeing it we could both shorten
our solutions to a <em>very</em> close 63 and 64 chars, respectively:</p>

<pre>S(a,c)int*a;{for(;c--;S(a++,*a&#62;a[c]?*a^=a[c]^=*a^=a[c],c:c));}
S(a,n)int*a;{--n?S(a,n),S(a+1,n),n=a[1],n&#60;*a?a[1]=*a,*a=n:0:0;}</pre>

<p>Aaron submitted some of his earlier attempts as well.  Here's a 64
char solution using double-recursion (doesn't do 0-arrays):</p>

<pre>S(a,c)int*a;{--c?S(a,c),S(++a,c),*a&#60;(c=*--a)?*a=*++a,*a=c:0:0;}</pre>

<p>When he added 0-array's to the above, he ended up with 66 chars:</p>

<pre>S(a,c)int*a;{--c&#62;0?S(a,c),S(++a,c),*a&#60;(c=*--a)?*a=*++a,*a=c:0:0;}</pre>

<p>While we're looking at non-winners, here's my 50 char solution
that breaks key rules of the contest (uses a library and
constrains the array to 99 entries:</p>

<pre>S(int*a,int*b){return b&#62;99?*a-*b:qsort(a,b,4,S);}</pre>

]]></description>
    </item>

    <item>
      <pubDate>Thu, 14 Aug 2003 21:54:39 EDT</pubDate>
      <title>Slimy Donkeys</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#blogsd</guid>
      <link>
        http://n01se.net/chouser/blog/#blogsd
      </link>
      <description><![CDATA[<p>Neither <a href="http://www.yaml.org/" title="yaml.org">YAML</a> nor
<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/74043" title="blade.nagaokaut.ac.jp">RedCloth</a> is working out for me, as I described
<a href="http://bluweb.com/chouser/info/blog/#blognotyaml" title="bluweb.com">yesterday</a>.  So I've attempted to create a solution that is good
at describing both structure and document text and is also easy to
edit in a text editor, especially <a href="http://www.vim.org" title="vim.org">vim</a>.  For
now, I'm calling my new file format "SD".</p>

<h4>Symbolic Data</h4>

<p>An SD document represents an ordered hash (sorry Brett) which can
be thought of as a list of key/value pairs (PairList).  Each key
is a string, and each value is either a string, or another
PairList.</p>

<pre>
-title Chouser's
-item
  -id head
  -title Genesis
-item
  -id foot
  -title Apocalypse
</pre>

<p>In this example, the top-level PairList includes a pair whose key
is <code>title</code> and value is <code>Chouser's</code>.  It also includes two more
pairs, both of which have keys of <code>item</code>.  Each pair with a key
of <code>item</code> has a value that is a PairList of length two.</p>

<p>This is quite similar to XML (except XML tags can have
attributes).  And like XML, there's a bit of ambiguity about
whether the key is an object name or a type name.  For example
<code>id</code> and <code>title</code> both have values that are generic strings, so
they're acting as object names.  However, <code>item</code> shows up a
couple times in the same PairList, so it can't really be an object
name.  Instead, each <code>item</code> value contains the same list of
keys, so <code>item</code> is acting more like a type name.  This is an
ambiguity I'm willing to accept for the sake of brevity in the
document itself.  It doesn't seem to have hurt XML too badly
(yet)...</p>

<h4>Synthetic Document</h4>

<p>So far, this is just sort of a weak YAML.  So to help tip the
balance toward document text, SD provides a special syntax for
key/value pairs when the key is nil.  The special syntax is to
leave out the key:</p>

<pre>
-item
  -id head
  -title Genesis

  Value whose key is nil.

  A second value whose key is nil.
  This is still part of the second value.

  -pubDate today
</pre>

<p>This item has 5 pairs, and two of them (the 3rd and 4th) have
nil keys.  How the value of a nil-node is used is
application-specific, just like how an <code>item</code> or <code>title</code> is
used is application-specific.  But it sure would be convenient for
nil-nodes to be used for paragraphs of text.</p>

<h4>Simple Delimiters</h4>

<p>Another feature I wanted is inline markup for hyperlinks, bold,
italic, etc.  This is what RedCloth had been trying to do for me,
before I gave up on it.  SD provides a small set of punctuation
that can be used for inline markup:</p>

<ul><li><code>&#91;/<em>emphasized</em>/&#93;</code></li>

<li><code>&#91;-<strong>strong</strong>-&#93;</code></li>

<li><code>&#91;.code.&#93;</code></li>

<li><code>&#91;\<cite>citation</cite>\&#93;</code></li>

<li><code>&#91;=<a href="http://bluweb.com/" title="bluweb.com">http://bluweb.com/</a> hyperlink=&#93;</code></li>

</ul>

<h4>Structured Dashes</h4>

<p>That's all there is to it.  I've written a parser package in Ruby,
along with some code that can generate HTML fragments from SD
document fragments, and a vim syntax file.  It tries to leave HTML
tags alone and escape other punctuation, so that anything SD can't
do for you, you can still do with some HTML of your own.  I've
also written Ruby programs that use the parser to generate the RSS
and HTML formats of my blog from
<a href="http://bluweb.com/chouser/info/blog/blog.sd" title="bluweb.com">SD source</a>.  The
parser API and the SD format are both <strong>extremely</strong> young; I
really only started a couple days ago.  I'll include links to the
code below, but don't rely on any of this being stable or staying
consistent. As always, <a href="mailto:chouser@bluweb.com" title="">comments are
welcome</a>.  I'll post more details and updates as events warrant.</p>

<ul><li><a href="http://bluweb.com/chouser/info/blog/blog.sd" title="bluweb.com">This blog in
SD format</a></li>

<li><a href="http://bluweb.com/chouser/info/blog/sd.rb" title="bluweb.com">SD parser and
HTML utilities in Ruby</a></li>

<li><a href="http://bluweb.com/chouser/info/blog/sd2rss.rb" title="bluweb.com">Tool to
convert my SD blog to RSS</a></li>

<li><a href="http://bluweb.com/chouser/info/blog/sd2html.rb" title="bluweb.com">Tool to
convert my SD blog to HTML</a></li>

<li><a href="http://bluweb.com/chouser/info/blog/sd.vim" title="bluweb.com">SD syntax file
for vim</a></li>

</ul>

<p><em>P.S. I didn't realize until nearly done with this post that I
was unconciously copying my headline style from Charlie's
<a href="http://www.livingtorah.org/~csebold/emacs/why.phtml" title="livingtorah.org/~csebold">EMACS</a>
page.  Sorry for the Simple-minded Duplication, Charlie!</em></p>

]]></description>
    </item>

    <item>
      <pubDate>Wed, 13 Aug 2003 11:49:19 EDT</pubDate>
      <title>Like I need a hole in my head</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#blognotyaml</guid>
      <link>
        http://n01se.net/chouser/blog/#blognotyaml
      </link>
      <description><![CDATA[<p>What the world needs now is another structured text file format.
Our current options (<a href="http://www.langdale.com.au/SOX/" title="langdale.com.au">SOX</a>,
<a href="http://www.yaml.org/" title="yaml.org">YAML</a>,
<a href="http://www.triptico.com/software/grutatxt.html" title="triptico.com">Grutatxt</a>,
<a href="http://www.stalphonsos.com/~attila/remark/" title="stalphonsos.com/~attila">remark</a>,
<a href="http://bradchoate.com/past/001653.php" title="bradchoate.com">Textile</a>,
<a href="http://ettext.taint.org/doc/ettext.html" title="ettext.taint.org">EtText</a>,
<a href="http://txt2html.sourceforge.net/" title="txt2html.sourceforge.net">HTML::TextToHTML</a>, and oh-yeah
<a href="http://www.w3.org/XML/" title="w3.org">XML</a>) are entirely insufficient.</p>

<p>Of course I'm being a bit facetious, but I'm not entirely kidding.
The <a href="http://bluweb.com/chouser/info/blog/#blogyaml" title="bluweb.com">"YAML with a shot of Textile"</a> quip should have
been a clue.  Each of the packages I just listed leans rather
heavily toward either <em>data-structure</em> representation (SOX,
YAML) or <em>document</em> representation (all the others).</p>

<p>Unfortunately, my blog is a mixture of the two.  As a whole, it is
a data-structure -- a title, author, etc. and a list of entries
each of which has a date, title, etc.  However, the body of each
entry is of course a sort of miniature document.  This can be
quite adequately <em>represented</em> in the more disciplined formats
(XML, YAML, SOX), but it is not necessarily easy to <em>edit</em> in
any of them.  Someday there will be an XML editor that does this
for us, but that's another story...</p>

<p>So I thought that YAML for structure and Textile for the text was
a good plan.  YAML allows an indented structure that
<a href="http://www.vim.org" title="vim.org">vim</a> is quite happy with, and Textile
translates easy-to-type markers into HTML (like &#42;bold&#42;
into <strong>bold</strong>).  The fact that YAML and
<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/74043" title="blade.nagaokaut.ac.jp">RedCloth</a> (Textile for <a href="http://ruby-lang.org/en/" title="ruby-lang.org">Ruby</a>) seemed to
work well together, I think, helped obscure the weaknesses of
both.</p>

<p>It was RedCloth that cracked first.  It's got some implementation
issues, but once I started pulling that thread the whole thing
unraveled.  It's goals are a bit too lofty, and it's design is
<em>far</em> too complex.  It uses multiple passes through the text to
apply all of it's various formatting rules, which means each pass
can have undesired effects on the following passes.  The code
attempts to correct for these, but it quickly becomes a big hairy
mess.</p>

<p>Since I really didn't need all of Textile's features, I looked
around at the other options available.  None of them seemed to be
a really good fit, and my needs (I thought to myself) were quite
modest.  So I set about writing my own alternative.  This is where
YAML started to fall apart.  Apparently it does some amount of
processing on text blocks itself, merging paragraphs into long
lines, deleting blank lines, and generally wreaking havoc.  Trying
to correctly process my text blocks was turning out to involve a
whole lot of fighting to get back information YAML had lost or
obscured for me.</p>

<p>What the world needs now is new structured text file format.</p>

<p>To be continued...</p>

]]></description>
    </item>

    <item>
      <pubDate>Tue, 12 Aug 2003 10:40:31 EDT</pubDate>
      <title>Contest: shortest C sort function</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#shortsort</guid>
      <link>
        http://n01se.net/chouser/blog/#shortsort
      </link>
      <description><![CDATA[<p>Here's a fun little puzzle proposed by
<a href="http://www.css.tayloru.edu/~abrooks/" title="css.tayloru.edu/~abrooks">Aaron</a>.  What's the
shortest C function you can write that sorts an array of int's?
Your function should work when called as: S(int *array, int
length)</p>

<p>You can't use any #includes or libraries in your function, and
it must compile in gcc with no command-line flags, although
warnings are ok.  It can't assume anything about the array
values; duplicates, zeros, negative numbers, etc. should all be
handled correctly.</p>

<p>Give it a try; it's fun!  At least a half-dozen of Aaron's
friends are working on this, and I'll post the results here
later this week.  If you'd like to have your entry listed here,
just <a href="mailto:chouser@bluweb.com" title="">send it to me</a>.  So far we've
got three entries under 70 bytes long (that includes a newline
at the end of the function definition).</p>

<p>Here's the program your function needs to work in -- you just
write your own "sort.c":</p>

<pre>#include &#60;stdio.h&#62;
#include "sort.c"
main() {
    int i, count=255, array[count];
    for( i=0; i&#60;count; i++) {
        array[i]=count-i;
        printf("unsorted i[%d]=%d\n", i, array[i]);
    }
    S(array,count);
    for( i=0; i&#60;count; i++)
        printf("sorted i[%d]=%d\n", i, array[i]);
}</pre>

]]></description>
    </item>

    <item>
      <pubDate>Mon, 04 Aug 2003 21:07:01 EDT</pubDate>
      <title>Noonan's book on Hillary Clinton</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#noonancase</guid>
      <link>
        http://n01se.net/chouser/blog/#noonancase
      </link>
      <description><![CDATA[<p>I've really enjoyed
<a href="http://www.opinionjournal.com/columnists/pnoonan/archive/" title="opinionjournal.com">Peggy Noonan's column</a> in the Wall Street Journal, so I had big
expectations for her book,
<a href="http://pricescan.com/books/BookDetail.asp?isbn=0060393408" title="pricescan.com (ISBN 0060393408)"><cite>The Case Against Hillary Clinton</cite></a>. I was
not disappointed by the form -- it was very pleasant to read and
full of rich language.</p>

<p>I was, however, somewhat disappointed by the substance.  It
seemed to me almost half made-up.  She spends one full chapter
describing a scenario which she eventually admits was a dream.
She spends most of another chapter imagining what Hillary must
have been thinking during some hypothetical plane trip.  It's a
short book already, so to discover half of it was straight from
Noonan's imagination was a bit of a let-down.</p>

<p>On the other hand, the other half the book does indeed contain
some eye-opening evidence of Hillary's real views and the
history of "Clintonism".  Let me give you one short quote of the
good stuff:</p>

<blockquote><p>In 1977, Hillary wrote an essay called "Children's Rights: A
Legal Perspective." ... She asserts that the decision of a
minor "about motherhood and abortion, schooling, cosmetic
surgery, treatment of venereal disease, or employment and
others where the decision or lack of one will significantly
affect the child's future should no be made unilaterally by
parents.  Children should have the right to be permitted to
decide their own future if they are competent."  She goes on
to suggest that children might assert the rights to "grow up
in a world at peace" under a United Nations declaration, and
says that "children and adults might have special standing to
question the proliferation of nuclear power or junk food..."</p>

</blockquote>

<p>With appropriate expectations, the book may very well be worth
reading.</p>

]]></description>
    </item>

    <item>
      <pubDate>Sat, 02 Aug 2003 09:08:03 EDT</pubDate>
      <title>Apocalypse and Exegesis 6 (part 2)</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#perl6apo6p2</guid>
      <link>
        http://n01se.net/chouser/blog/#perl6apo6p2
      </link>
      <description><![CDATA[<p>There is a convention in C++ that <em>input</em> parameters are passed
by copy or reference, and <em>output</em> parameters are passed by
pointer.</p>

<pre>void foo(const String &#38;inparam,
         String *outparam) { ... }</pre>

<p>Although passing by reference (inparam) and by pointer
(outparam) do almost exactly the same thing, there are a couple
of subtle differences.  One difference is that we can declare
the object of the reference as <code>const</code>, which means the compiler
will warn us if we try to change any values in that object.
This makes sense, because we shouldn't be messing around with an
<em>input</em> parameter.</p>

<p>Another difference is that in order to pass the compiler's type
checks, the <em>caller</em> ends up using syntax that reminds us which
parameters are input and which are output.  The caller often
needs to use <code>&#38;</code> to get a pointer to output objects, like this:</p>

<pre>String a, b;
foo(a, &#38;b);</pre>

<p>Of course this is just a convention, and nothing prevents you
from creating functions that take non-const references and then
change their values, treating them like output parameters
anyway.</p>

<p>Perl 6 will also have quite flexible parameter-passing choices:</p>

<dl><dt><code>is constant</code></dt>

<dd>This is the default, and is very much like the <code>const
String &#38;inparam</code> in C++. Perl will complain if you try
to modify the value of a parameter passed like this, so it is
input-only.</dd>

<dt><code>is rw</code></dt>

<dd>Still a pass by reference, this is non-const and so could
be used for output parameters.</dd>

<dt><code>is ref</code></dt>

<dd>This is almost identical to <code>rw</code>, except for what Perl
does if the actual argument passed is undefined.  There may be
other subtle differences I don't yet understand.</dd>

<dt><code>is copy</code></dt>

<dd>This is similar C++'s default.  You can change the value
if you want to, but it won't be reflected in the caller's
copy, so this is an input-only parameter.</dd>

</dl>

<p>These choices allow Perl 6 to fully cover the range of
<em>functionality</em> provided by C++ in parameter passing, and it
does so in a much more readable way.  However, there appears to
be no way to encourage <em>callers</em> to reflect whether a particular
parameter is input or output.  This is unfortunate, because it
opens a little window of ambiguity in the interface between
caller and function, and interfaces are exactly where most bugs
creep in.</p>

<pre>sub foo(String $inparam is constant,
        String $outparam is rw) {...}</pre>

<p>Just looking at the function call, it's impossible to tell that
the function is planning on modifying <code>$b</code>.</p>

<p>One final comment--these last two entries on Perl 6 have been
critical about specific features, but I in no way intend to
suggest that my overall impression is negative.  If fact, I'm
very excited about Perl 6's real type system, emphasis on
compile-time type checking, macros, and grammar-like regex's,
all running on top of an independent bytecode.</p>

]]></description>
    </item>

    <item>
      <pubDate>Fri, 01 Aug 2003 22:02:27 EDT</pubDate>
      <title>Apocalypse and Exegesis 6</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#perl6apo6</guid>
      <link>
        http://n01se.net/chouser/blog/#perl6apo6
      </link>
      <description><![CDATA[<p>I've been reading through the latest round of Perl 6 details the
last couple of days (in
<a href="http://www.perl.com/pub/a/2003/03/07/apocalypse6.html" title="perl.com">Apocalypse 6</a> and
<a href="http://www.perl.com/pub/a/2003/07/29/exegesis6.html" title="perl.com">Exegesis
6</a>).  I haven't finished the Apocalypse yet, but so far I've
  made a couple of observations.</p>

<p>First, any function in Perl 6 may have any of six different kinds
of formal parameters, categorized by whether they're optional,
named, etc.</p>

<table class="open">
  <tr>
    <th>&nbsp;</th>
    <th>Required</th>
    <th>Optional</th>
    <th>Slurpy</th>
  </tr>
  <tr>
    <th>Positional</th>
    <td>&nbsp;$</td>
    <td>?$</td>
    <td>*@</td>
  </tr>
  <tr>
    <th>Named</th>
    <td>&nbsp;</td>
    <td>&nbsp;+</td>
    <td>*%</td>
  </tr>
</table>

<p>I won't go into too much detail here --
<a href="http://www.perl.com/pub/a/2003/07/29/exegesis6.html" title="perl.com">Exegesis
6</a> explains all this rather gently.  But what I noticed is that
although you might expect a complete matrix of the six kinds of
parameters, there is in fact (AFAICT) no way to define a
<strong>Required Named</strong> parameter.  This seems like a shortcoming.</p>

<p>Instead, the sixth kind of formal parameter in Perl 6 is called
an <em>invocant</em>, and is actually a second, special kind of
<strong>Required Positional</strong> parameter.</p>

<p>My second observation ... will have to wait until later, because
I must go to bed.</p>

]]></description>
    </item>

    <item>
      <pubDate>Thu, 31 Jul 2003 09:28:16 EDT</pubDate>
      <title>The Maltese Camel</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#maltesecamel</guid>
      <link>
        http://n01se.net/chouser/blog/#maltesecamel
      </link>
      <description><![CDATA[<blockquote><p>As soon as she walked through my door I knew her
type: she was an argument waiting to happen. I wondered if the
argument was required... or merely optional? Guess I'd know the
parameters soon enough.</p>

<p>"I'm Star At Data," she offered.</p>

<p>She made it sound like a pass. But was the pass by name? Or by
position?</p>

<p>"I think someone's trying to execute me. Some caller."</p>

<p>"Okay, I'll see what I can find out. Meanwhile, we're gonna have
to limit the scope of your accessibility."</p>

<p>"I'd prefer not to be bound like that," she replied.</p>

<p>"I see you know my methods," I shot back.</p>

<p>She just stared at me, like I was a block. Suddenly I wasn't
surprised someone wanted to dispatch her.</p>

<p>"I'll return later," she purred. "Meanwhile, I'm counting on you
to give me some closure."</p>

<p>It was gonna be another routine investigation.</p>

<p>-- Dashiell Hammett, "The Maltese Camel"</p>

</blockquote>

<p>I found this very funny.  It's actually from a piece about Perl
6, <a href="http://www.perl.com/pub/a/2003/07/29/exegesis6.html" title="perl.com">Exegesis 6</a>.</p>

]]></description>
    </item>

    <item>
      <pubDate>Wed, 30 Jul 2003 23:29:14 EDT</pubDate>
      <title>New blog format (again)</title>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#blogyaml</guid>
      <link>
        http://n01se.net/chouser/blog/#blogyaml
      </link>
      <description><![CDATA[<p>When I first posted this blog on the web, I was quite proud that
I was using the RSS blog standard as my source format, editing
it happily in vim, and generating the HTML web page with
industry-standard XSLT.</p>

<p>But my pride came before a fall.  My dear friend Charlie
immediately pointed out that I was not, after all, following the
RSS standard, and that it made a real difference.  By his
suggestion, I pointed a variety of blog reader programs
(<a href="http://www.nongnu.org/straw/" title="nongnu.org">straw</a>,
<a href="http://www.yole.ru/projects/syndirella/" title="yole.ru">Syndirella</a>) at my RSS
file, and they all choked.  Upon further investigation, it turns
out that RSS is only barely XML, and using XSLT to transform it
and vim to edit it would be quite painful.  So I began searching
for a new source format that would make it easy to generate RSS
and HTML.</p>

<p>The correct answer is...   ok, that's pride again, so let's try:
The current answer is... <a href="http://www.yaml.org/" title="yaml.org">YAML</a> with a
shot of <a href="http://bradchoate.com/past/001653.php" title="bradchoate.com">Textile</a>.  The
latest version of <a href="http://ruby-lang.org/en/" title="ruby-lang.org">Ruby</a> includes
YAML, and a Ruby implementation of Textile
(<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/74043" title="blade.nagaokaut.ac.jp">RedCloth</a>) is available.</p>

<p>So here I am, happily writing (nearly) plaintext in vim,
generating good clean xhtml, and generally compliant RSS.
There are still a few issues to work out over the next couple
days, but hopefully this will work for everyone now!</p>

]]></description>
    </item>

    <item>
      <pubDate>Thu, 24 Jul 2003 00:00:00 EDT</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#badexample</guid>
      <link>
        http://n01se.net/chouser/blog/#badexample
      </link>
      <title>Don't set a bad example</title>
      <description><![CDATA[<p>Photos of the dead bodies of Saddam Hussein's sons,
<a href="http://www.cnn.com/2003/WORLD/meast/07/24/sprj.irq.sons/index.html" title="cnn.com">Uday and Qusay</a> have now been released.  I'm not extremely
interested in whether releasing these photos was a good idea or
not, but I do want to bring up an argument I heard against doing
so.</p>

<p>I heard a pundit say we should not release these photos because
we don't want to set an example or precedent for our enemies to
do the same when they have the dead bodies of American soldiers.
I've heard similar positions on a number of topics, including
preemptive strikes on foreign powers.  Regardless of where I
stand on these issues, I think this is often a silly line of
reasoning.</p>

<p>For example, in order to reach this conclusion regarding the
Hussein photos, we would have to ignore that a "precedent" has
already been "set"--US soldiers dragged through the streets in
front of TV cameras in Mogadisu; photos of prisoners-of-war in
various conflicts, etc.  Then let's imagine a scenario where
choosing to not release these photos has a positive
example-setting effect.  I suppose this would be some government
or power, in some kind of military conflict with the US, which
has just captured or killed a US soldier.  They would have to be
considering this same question -- should we release photos of
these US soldiers, or not?  They would recall that the US could
have done that with the Hussein boys and chose not to, and say
to themselves something along the lines of, "What a respectable
decision the Great Satan made; we should do the same."</p>

<p>Do you believe that would ever happen?</p>

<p>So: if you're going to oppose a potential action of the US
government please come up with a better reason, like it's
immorral or unconstitutional or something, not that it would set
a bad example for our military adversaries.</p>

]]></description>
    </item>

    <item>
      <pubDate>Wed, 23 Jul 2003 00:00:00 EDT</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#clintonplan</guid>
      <link>
        http://n01se.net/chouser/blog/#clintonplan
      </link>
      <title>Clinton supports Bush on Iraq?</title>
      <description><![CDATA[<p>I heard an interesting theory about the Clintons a few weeks ago
(sorry, I don't remember where).  According to the theory, the
Clintons know there's almost no chance of Hillary winning the
Presidency over Bush in 2004, so they've got their sites set on
2008.  If a Democrat were to win in 2004, he would be basically
guaranteed the Democrat nomination in 2008, locking Hillary out.
Therefore, Bill and Hillary are working to keep Bush in the
White House for one more term.</p>

<p>If this theory were true, you might expect the Clintons to do
something during the early part of the 2004 campaign to distract
U.S. voters from the Democrat candidates.  Perhaps Hillary would
write a "<a href="http://www.iht.com/articles/99231.html" title="iht.com">wildly hyped
new memoir</a>".</p>

<p>And now, with all the candidates piling criticism on Bush's
mistake in his last State of the Union address, you might expect
the Clintons to do something about it.  Yesterday,
<a href="http://www.cnn.com/2003/ALLPOLITICS/07/23/clinton.iraq.sotu/index.html" title="cnn.com">President Clinton gave an interview</a> on Larry King's show.  He
said, "I thought the White House did the right thing ... The
thing we ought to be focused on is what is the right thing to do
now."</p>

<p>Of course Mr. Clinton may have some other reason for supporting
the President in the face of sharp criticism by Democrat
Presidential candidates.  It's probably a very good reason, and
I'll think of it any second now...</p>

]]></description>
    </item>

    <item>
      <pubDate>Tue, 22 Jul 2003 00:00:00 EDT</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#blogonline</guid>
      <link>
        http://n01se.net/chouser/blog/#blogonline
      </link>
      <title>Chouser's Blog now online</title>
      <description><![CDATA[<p>My blog is finally up, and this is it.  Thanks to
<a href="http://dev.gentoo.org/~agriffis/" title="dev.gentoo.org/~agriffis">Aron</a> for the initial
encouragement, and <a href="http://www.livingtorah.org/~csebold/" title="livingtorah.org/~csebold">Charlie</a> for the most recent inspiration.</p>

<p>I have no idea how regular this will be, but I've been doing
okay for the last few weeks, so maybe I can keep it up.  Wish me
luck.</p>

]]></description>
    </item>

    <item>
      <pubDate>Tue, 22 Jul 2003 00:00:00 EDT</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#NAG</guid>
      <link>
        http://n01se.net/chouser/blog/#NAG
      </link>
      <title>Spinning</title>
      <description><![CDATA[<p><a href="http://turbulence.org/Works/freeman/" title="turbulence.org">N.A.G.</a> (Network
Auralization for Gnutella) reminds me a bit of the snatches of
sound you might hear while spinning a radio dial, but without
the annoying static: mysterious hints of depth and meaning, but
without any true depth or meaning.  And for once,
<a href="http://turbulence.org/Works/freeman/audio/example2.php" title="turbulence.org">the
screenshot isn't the best first clue about what it is</a>.</p>

<p>Perhaps I like it for the same reasons or in the same way as I
like <cite>They Might Be Giants</cite>: mysterious hints.</p>

]]></description>
    </item>

    <item>
      <pubDate>Tue, 15 Jul 2003 00:00:00 EDT</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#socat</guid>
      <link>
        http://n01se.net/chouser/blog/#socat
      </link>
      <title>socat general network utility</title>
      <description><![CDATA[<p>If you've ever used
<a href="http://freshmeat.net/projects/netcat/?topic_id=150" title="freshmeat.net">netcat</a> or
found yourself trying to pipe stuff to telnet, you've got to
take a look at <a href="http://www.dest-unreach.org/socat/" title="dest-unreach.org">socat</a>.
From the <a href="http://www.dest-unreach.org/socat/doc/README" title="dest-unreach.org">README</a>:</p>

<blockquote><p>socat is a relay for bidirectional data transfer between two
independent data channels. Each of these data channels may be
a file, pipe, device (serial line etc. or a pseudo terminal),
a socket (UNIX, IP4, IP6 - raw, UDP, TCP), an SSL socket,
proxy CONNECT connection, a file descriptor (stdin etc.), the
GNU line editor, a program, or a combination of two of these.
These modes include generation of "listening" sockets, pipes
and pseudo terminals.</p>

<p>socat can be used, e.g., as TCP port forwarder (one-shot or
daemon), as an external socksifier, for attacking weak
firewalls, as a shell interface to UNIX sockets, IP6 relay,
for redirecting TCP oriented programs to a serial line, to
logically connect serial lines on different computers, or to
establish a relatively secure environment (su and  chroot) for
running client or server shell scripts with network
connections.</p>

</blockquote>

<p>Thanks to <a href="http://dev.gentoo.org/~agriffis/" title="dev.gentoo.org/~agriffis">Aron</a> for pointing
this one out.</p>

]]></description>
    </item>

    <item>
      <pubDate>Mon, 14 Jul 2003 00:00:00 EDT</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#senatedrama</guid>
      <link>
        http://n01se.net/chouser/blog/#senatedrama
      </link>
      <title>Drama in the Senate</title>
      <description><![CDATA[<blockquote><p>Sen. Thomas Daschle, leader of the Senate's Democratic
minority, attempted an audacious coup Wednesday when he seized
the majority leader's prerogative by calling up a stalled
child tax credit bill.</p>

<p>Majority Leader Bill Frist, not alerted by Daschle, was off
the floor when the minority leader made his move. Sen.
Richard Lugar, managing the State Department reauthorization
bill on the floor, stopped the proceedings by initiating a
quorum call and summoning Frist. When he arrived, Frist made a
non-debatable motion to kill the bill. All 51 Republican
senators, told that this was a test of whether Frist or
Daschle was going to be the real majority leader, defeated the
proposal in a straight party-line roll call.</p>

<p>--<a href="http://www.townhall.com/columnists/robertnovak/printrn20030712.shtml" title="townhall.com">Robert Novak</a></p>

</blockquote>

<p>I find this sort of thing extremely interesting, and I don't
know why it isn't reported more widely.  For what it's worth, my
impression is that this kind of rule exploitation is not
particularly more common from one major party than the other.</p>

<p>The full text of what Novak described above is scattered among
other Senate business on
<a href="http://thomas.loc.gov/cgi-bin/query/R?r108:FLD001:S09090" title="thomas.loc.gov">pages
S9089 and S9094</a> of the
<a href="http://thomas.loc.gov/cgi-bin/query/B?r108:@FIELD(FLD003+s)+@FIELD(DDATE+20030709)" title="thomas.loc.gov">Congressional Record for July 9th</a>, and includes McCain's
somewhat interesting position on the matter.</p>

]]></description>
    </item>

    <item>
      <pubDate>Fri, 11 Jul 2003 00:00:00 EDT</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#blogrss</guid>
      <link>
        http://n01se.net/chouser/blog/#blogrss
      </link>
      <title>RSS (XML) for blogs</title>
      <description><![CDATA[<p>Changed the format of my blog file to fit
<a href="http://backend.userland.com/formatsForBlogBrowsers" title="backend.userland.com">Dave
Winer's suggestion regarding RSS</a></p>

]]></description>
    </item>

    <item>
      <pubDate>Fri, 11 Jul 2003 00:00:00 EDT</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#dog</guid>
      <link>
        http://n01se.net/chouser/blog/#dog
      </link>
      <title>I don't have a dog</title>
      <description><![CDATA[<p><a href="http://www.spankmag.com/" title="spankmag.com">Youth Culture</a>
<a href="http://www.everything2.com/index.pl?node_id=417449" title="everything2.com">Killed My
Dog</a></p>

]]></description>
    </item>

    <item>
      <pubDate>Thu, 10 Jul 2003 00:00:00 EDT</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#pdfad</guid>
      <link>
        http://n01se.net/chouser/blog/#pdfad
      </link>
      <title>PDF ad</title>
      <description><![CDATA[<p>Have you seen the
<a href="http://www.everything2.com/index.pl?node_id=417449" title="everything2.com">Television
commercial</a> for the PDF file format?  I guess I'm used to seeing
computer ads on TV these days, but this is the first file format
I can remember seeing advertised in such a general forum.  It
strikes me as a small landmark in the inexorable march of
computer technology into mainstream U.S. culture.</p>

]]></description>
    </item>

    <item>
      <pubDate>Fri, 02 May 2003 00:00:00 EDT</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#coulterquote</guid>
      <link>
        http://n01se.net/chouser/blog/#coulterquote
      </link>
      <title>Liberalism</title>
      <description><![CDATA[<p>"Liberalism is part of a religious disorder that demands a
belief that life is controllable."</p>

<p>--<a href="http://www.jewishworldreview.com/cols/coulter1.asp" title="jewishworldreview.com">Ann
Coulter</a></p>

]]></description>
    </item>

    <item>
      <pubDate>Tue, 15 Apr 2003 00:00:00 EDT</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#lifevalue</guid>
      <link>
        http://n01se.net/chouser/blog/#lifevalue
      </link>
      <title>The value of human life</title>
      <description><![CDATA[<p>As modern history has progressed, the general willingness of our
country's citizens to tolerate war casualties has dropped.  I
wonder if this at all tracks with our perception of the value of
human life.</p>

<p>So what are the ways we could measure the perceived value of a
human life at any particular point in time?  Some vague ideas...</p>

<dl><dt>The medical cost of keeping someone alive another day</dt>

<dt>Infant mortality rate</dt>

<dt>Average life expectancy</dt>

<dd>This is less for men than for women, right?  Is that part
of why we're less willing to see women die in combat?  Or is
it more related to...</dd>

<dt>Potential for nurturing future life</dt>

<dt>Average income per day</dt>

</dl>

<p>Of course, since most of these factors have gotten better (more
or less) consistently over the last several hundred years, it
would probably be pretty hard to figure out which ones have the
greatest impact.  Also, it would be quite difficult to rate the
casualties that we "tolerate" -- just because lots of our men
died in Vietnam doesn't mean we were tolerating it, for example.</p>

]]></description>
    </item>

    <item>
      <pubDate>Thu, 16 Jan 2003 00:00:00 EST</pubDate>
      <guid isPermaLink="false">http://n01se.net/chouser/blog/#draft</guid>
      <link>
        http://n01se.net/chouser/blog/#draft
      </link>
      <title>Re-instituting the draft</title>
      <description><![CDATA[<p>NPR's Marketplace today had a segment entitled
<a href="http://www.marketplace.org/play/audio.php?media=/2003/01/16_mpp%26start=00:00:07:05.0%26end=00:00:09:38.0" title="marketplace.org">Return of the Draft</a>:</p>

<blockquote><p><em>Commentator Lionel Van Deerlin says to bring the reality of
war home to all Americans, reinstate the draft:</em> While war in
Iraq seems distant and theoretical, Van Deerlin says we won't
understand the ramifications of this war until we confront the
socio-economic facts about who defends us: military volunteers
are poor, giving their lives while the rest of us are free to
enjoy our liberties.  Reinstating the draft will enable all to
defend the country.</p>

</blockquote>

<p>After hearing the segment, I sent Marketplace this letter:</p>

<p>Marketplace,</p>

<p>Our county's modern military is not like that of the Civil War
or of ancient Rome as Lionel Van Deerlin suggested in this
evening's commentary.  We have highly-skilled, highly-trained
people building and using advanced weaponry and defensive
systems that protect our soldier in the field.  In fact our
"underprivileged" may be safer in the military than if they were
civilians.  If you will allow me; let's do some numbers:</p>

<ul><li>Average annual death rate among the active military over
the last 15 years (this includes the former Gulf War):
71 out of every 100,000 or 0.07%</li>

<li>Average annual death rate among the general U.S.
population of roughly the same age range (15-29 year-olds) in
2000: 88 out of every 100,000 or 0.09%</li>

</ul>

<p>(Note that targeting the general population demographic to more
closely match the military by restricting to males, minorities,
or to include older age groups generally increases the death
rate, making the argument more convincing.)</p>

<p>These are not the numbers you would expect if we in the
"privileged classes" were taking advantage of the less fortunate
by sending them to war in our stead.  Our courageous and
patriotic soldiers volunteered for their jobs, understanding the
potential risks as well as the rewards, and considered it a fair
trade.  Someone drafted against their will gets to make no such
value judgment.</p>

<p>A paid volunteer military, supported by advanced technology and
a conscientious society, is just.</p>

<p>PS. Some notes on the statistics:</p>

<p>The military death rate was calculated by taking "Total Deaths"
divided by "Active Duty", averaged over the years
1987 through 2001 from:
"<a href="http://web1.whs.osd.mil/mmid/casualty/Death_Rates.pdf" title="web1.whs.osd.mil">U.S.
ACTIVE DUTY MILITARY DEATHS - 1980 through 2001</a>"</p>

<p>The U.S. population death rate was calculated by taking the
average of the rates for the groups "15-19" and "20-24" in the
"All origins, Both Sexes" column of Table
4 in: "<a href="http://www.cdc.gov/nchs/data/nvsr/nvsr50/nvsr50_15.pdf" title="cdc.gov">National Vital Statistics Reports, Vol 50 Num 15, Deaths: Final
Data for 2000</a>"</p>

]]></description>
    </item>

  </channel>
</rss>
