<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://blog.clawpaws.net/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Life with Lunchhooks</title>
  <link>http://blog.clawpaws.net/</link>
  <description>Diary of a virtual cat</description>
  <language>en</language>
  <pubDate>Thu, 14 Aug 2008 07:32:46 -0700</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>How Quickly We Forget</title>
    <link>http://blog.clawpaws.net/post/2008/02/13/How-Quickly-We-Forget</link>
    <guid isPermaLink="false">urn:md5:bc98d9f5a48f07841ef645221122e60f</guid>
    <pubDate>Wed, 13 Feb 2008 16:19:00 -0800</pubDate>
    <dc:creator>W. Clawpaws</dc:creator>
        <category>iPhone</category>
            
    <description>    &lt;p&gt;I'm fairly amused to see the claims that people make about the iPhone, in
particular the claims about how limited it is as a platform (i.e., how little
we can expect from it given how limited its CPU, RAM and storage capabilities
are). For example, recently Craig Hockenberry wrote about &lt;a href=&quot;http://furbo.org/2008/02/11/so-youre-going-to-write-an-iphone-app/&quot;&gt;how
difficult the iPhone will be to develop for&lt;/a&gt; and said this about its
RAM constraints:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There are some very tight limits on memory usage. You’re given approximately
64 MB of space to work with [...]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Is 64MB tight? When we compare an iPhone to the desktop machines of today,
it's true that it looks a little pokey—my laptop has 4GB in it, and my desktop
machine has even more—but that isn't the question here. The question is whether
it ought to be enough for the kind of applications people will want to run on
the iPhone and, in the context of Craig's article, whether ordinary developers
ought to be able to write applications that run on the iPhone without breaking
too much sweat, and whether the familiar and easy-to-use development tools
developers have become used to can be reasonably expected to target the
iPhone.&lt;/p&gt;
&lt;p&gt;I have to defer to Craig's actual experience developing for the iPhone when
it comes to describing the situation as it currently &lt;em&gt;is&lt;/em&gt;, but there is
no reason to suppose that it &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: italic;&quot;&gt;has to be&lt;/span&gt; that way. I'd argue that Cocoa and OS X
have a long history, and in that history many of the same tools and libraries
we're still using today targetted a much more resource-limited platform.&lt;/p&gt;
&lt;p&gt;It's easy to be spoiled by the vast amounts of memory that desktop machines
have today, but 64MB isn't peanuts. If we go back to the origins of OS X,
&lt;a href=&quot;http://en.wikipedia.org/wiki/NEXTSTEP&quot;&gt;NEXTSTEP&lt;/a&gt;, we find that it
ran with much tighter resource constraints. The base model of the very
successful &lt;a href=&quot;http://en.wikipedia.org/wiki/NeXTstation&quot;&gt;NeXTstation&lt;/a&gt;
originally had 8MB of RAM and a 105MB hard disk—yes, it actually had less disk
space than the iPhone has RAM. True, to install the developer tools you
probably wanted the 400MB disk option, and with only 8MB it was fairly quick to
start swapping, but if you maxed the machine out—to a “whopping” 32MB of
RAM—you could run quite a lot without needing to swap. It's true that NEXTSTEP
&lt;em&gt;could&lt;/em&gt; swap if it needed to, but applications that needed double the
physical RAM of the machine were rare indeed.&lt;/p&gt;
&lt;p&gt;As a quick test, I booted up my OpenSTEP 4.2 virtual machine in VMware,
where the whole virtual machine only has 64MB of RAM, and started a few
applications (the wonderful spreadsheet &lt;a href=&quot;http://en.wikipedia.org/wiki/Quantrix&quot;&gt;Quantrix&lt;/a&gt;, &lt;a href=&quot;http://en.wikipedia.org/wiki/Lighthouse_Design&quot;&gt;Lighthouse Design&lt;/a&gt;'s clone
of &lt;a href=&quot;http://en.wikipedia.org/wiki/Lotus_Improv&quot;&gt;Lotus Improv&lt;/a&gt;,
Diagram, which &lt;a href=&quot;http://www.omnigroup.com/&quot;&gt;The Omni Group&lt;/a&gt; later
cloned as &lt;a href=&quot;http://www.omnigroup.com/applications/omnigraffle/&quot;&gt;OmniGraffle&lt;/a&gt;, and
Preview opening a large PostScript file). Here is the output from
&lt;tt&gt;ps&lt;/tt&gt;:&lt;/p&gt;
&lt;pre&gt;
openstep&amp;gt; ps ugxc
USER       PID  %CPU %MEM VSIZE RSIZE TT STAT  TIME COMMAND
clawpaws   184   0.0 14.1 16.8M 9.01M ?  SW    0:05 WindowServer
clawpaws   186   0.0  2.9 3.58M 1.88M ?  SW    0:00 pbs
clawpaws   189   0.0  1.1 2.56M  704K ?  SW    0:00 appkitServer
clawpaws   190   0.0  3.7 5.79M 2.34M ?  SW    0:00 WM
clawpaws   191   0.0  3.0 6.06M 1.92M ?  SW    0:00 Preferences
clawpaws   206   0.0  4.3 7.83M 2.77M ?  SW    0:00 Diagram
clawpaws   208   0.0  1.8 7.17M 1.18M p1 SW    0:00 tcsh
clawpaws   236   0.0  6.4 8.35M 4.09M ?  SW    0:00 Quantrix
clawpaws   249   0.0  1.1 2.06M  752K p1 T     0:00 ftp
clawpaws   251   0.0  6.0 6.70M 3.86M ?  SW    0:00 Preview
&lt;/pre&gt;
&lt;p&gt;Perhaps you think it isn't fair to compare NeXTSTEP or OPENSTEP to what we
have today in OS X, but if so you probably haven't seen or used either of them.
It may be technology from more than a decade ago, but it's no Windows 95—Unix
is old, too, and many of its basics haven't changed much over the years.
Objective-C, Interface Builder and friends were there from day one. Today's
Cocoa libraries look and feel very much like their counterparts in
OPENSTEP.&lt;/p&gt;
&lt;p&gt;Craig also writes:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Guess what? This nightmare will become a reality as soon as you start
building your iPhone application. There are no NIBs. None.&lt;/p&gt;
&lt;p&gt;I don’t think this is one of those “let’s skip it for version 1.0” design
decisions. The process of unarchiving the objects in the NIB takes CPU cycles
and memory: both things that are in limited supply on the phone.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I hope that you can see from the above how little water the above argument
holds. The iPhone has plenty of CPU power for this task—NEXTSTEP used
&lt;tt&gt;nib&lt;/tt&gt;s and ran on a 25 MHz 68040, not a 400 MHz ARM.&lt;/p&gt;
&lt;p&gt;But there is something else wrong with this argument, too, namely the idea
that it is somehow cheaper to create objects programmatically rather than
by decoding an object serialization representation such as a &lt;code&gt;nib&lt;/code&gt;
file. That's a time/space performance claim that needs to be substantiated with
&lt;em&gt;evidence&lt;/em&gt;. Very very often, human intuition about what is fast is
wrong, because modern machines are complex beasts and things like caches and
memory access behavior can make a big difference. The way to know is to run
tests and see if the performance difference is actually noticable. But to
provide some counter-intuition to anyone who thinks it's obvious that pure code
ought to be faster, here's one: compact code interpreting a compact data
representation may fit in level one cache, whereas the longhand code to do the
same task may not.&lt;/p&gt;
&lt;p&gt;So, I don't buy it. I'm not saying that the iPhone SDK will have
&lt;tt&gt;nib&lt;/tt&gt;s, but I am saying that I've yet to see a good reason why it
couldn't.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.clawpaws.net/post/2008/02/13/How-Quickly-We-Forget#comment-form</comments>
      <wfw:comment>http://blog.clawpaws.net/post/2008/02/13/How-Quickly-We-Forget#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.clawpaws.net/feed/rss2/comments/208871</wfw:commentRss>
      </item>
    
  <item>
    <title>Unspecified Attributes</title>
    <link>http://blog.clawpaws.net/post/2007/08/21/Unspecified-Attributes</link>
    <guid isPermaLink="false">urn:md5:9bda4a86af4ae471bd2b208ec0d0e100</guid>
    <pubDate>Tue, 21 Aug 2007 19:35:00 -0700</pubDate>
    <dc:creator>W. Clawpaws</dc:creator>
            
    <description>    &lt;p&gt;On the Internet, as they say, no one knows you're a cat; but apparently no
one notices even if you drop some heavy hints. The title of my blog, &lt;em&gt;Life
with Lunchhooks,&lt;/em&gt; and the name of the domain is supposed to suggest the
idea that I am a creature with paws and claws (such as a domestic cat), but I'm
not really sure how many of the people who've actually read this site really
get that idea.&lt;/p&gt;
&lt;p&gt;If you were, or now are, trying to imagine me as a domestic cat, paws poised
over the keys, your picture of me will nevertheless be somewhat fuzzy, since I
have not given you my breed, color, national origin, age, gender, orientation
or socioeconomic status. Cat or not, one thing I can tell you for sure is that
if you're imagining a 20-something straight white American male college kid,
you're not just barking up the wrong tree, you're on the wrong side of a
different planet, barking up at a street lamp.&lt;/p&gt;
&lt;p&gt;What you imagine doesn't matter that much so long as you keep your
assumptions to yourself.  But if you let them loose, unverified, you run
the risk of embarrassing both of us.  If you are the kind of person who
must fill in those unspecified details (FWIW, I'm mostly not), one way to train
yourself to avoid making these kinds of embarrassing faux pas is to &lt;em&gt;imagine
the unusual&lt;/em&gt; for unspecified things.  That way, you're more likely to
remember that you made up that detail yourself out of whole cloth, and you'll
also be living a much richer inner life.&lt;/p&gt;
&lt;p&gt;(Of course, with the “barking up the wrong tree” metaphor, maybe I'm giving
things away about how I imagine &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: italic;&quot;&gt;you&lt;/span&gt;.)&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.clawpaws.net/post/2007/08/21/Unspecified-Attributes#comment-form</comments>
      <wfw:comment>http://blog.clawpaws.net/post/2007/08/21/Unspecified-Attributes#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.clawpaws.net/feed/rss2/comments/148621</wfw:commentRss>
      </item>
    
  <item>
    <title>Storing iPhone apps locally with data URLs</title>
    <link>http://blog.clawpaws.net/post/2007/07/16/Storing-iPhone-apps-locally-with-data-URLs</link>
    <guid isPermaLink="false">urn:md5:1f79773363030194d4f523372439ef25</guid>
    <pubDate>Mon, 16 Jul 2007 10:11:00 -0700</pubDate>
    <dc:creator>W. Clawpaws</dc:creator>
        <category>iPhone</category>
            
    <description>    &lt;p&gt;Some people think that you need net access to run web-based applications on
your iPhone. Not so. The URL below provides a simple tip calculator (sadly this
crappy blogging system doesn't let me do a direct link, which sucks, but you
can copy and paste and add it your bookmarks on your computer then sync with
your iPhone, and/or make your own page with a direct link). By using a
&lt;tt&gt;data:&lt;/tt&gt; URL, the entire page &lt;em&gt;content&lt;/em&gt; is all in the URL. If save
a bookmark for this URL, you can access this little JavaScript-based app even
in airplane mode.&lt;/p&gt;
&lt;pre&gt;
data:text/html;charset=utf-8;base64,PGh0bWw+CjxoZWFkPgo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGggPSAyNDAiIC8+Cjx0aXRsZT5UaXAgQ2FsY3VsYXRvcjwvdGl0bGU+Cgo8c2NyaXB0PgoKZnVuY3Rpb24gdGlwKGFtb3VudCkgewogICAgcmV0dXJuIHRpcDsKfQoKdmFyIG91dHB1dCA9IG51bGw7CnZhciBwZXJjZW50ID0gMTguNSAvIDEwMDsKdmFyIHJ0aXBfZmFjdG9yID0gMC4yNTsKdmFyIHJ0b3RhbF9mYWN0b3IgPSAxLjAwOwoKZnVuY3Rpb24gd3JpdGVPdXQobGluZSkgewogICBpZiAob3V0cHV0KSB7CiAgICAgIG91dHB1dC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKICAgfSBlbHNlIHsKICAgICAgb3V0cHV0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm91dHB1dEFyZWEiKTsKICAgfQogICBvdXRwdXQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGluZSkpOwp9CgpmdW5jdGlvbiB1cGRhdGUoKQp7CiAgICB2YXIgYW1vdW50ID0gTnVtYmVyKGV2YWwoaW5Gb3JtLm51bS52YWx1ZSkpOwogICAgaWYgKGFtb3VudCA9PSBOYU4pIHsKICAgICAgICB3cml0ZU91dCgnSHVoPycpOwogICAgfQogICAgdmFyIHRpcCAgPSBhbW91bnQgKiBwZXJjZW50OwogICAgdmFyIHJ0aXAgPSBNYXRoLnJvdW5kKHRpcCAvIHJ0aXBfZmFjdG9yKSAqIHJ0aXBfZmFjdG9yOwogICAgd3JpdGVPdXQoJyQnICsgYW1vdW50LnRvRml4ZWQoMikgKyAnICsgJCcgKyBydGlwLnRvRml4ZWQoMikgKyAnID0gJCcgKyAoYW1vdW50K3J0aXApLnRvRml4ZWQoMikpOwogICAgdmFyIHJ0b3RhbCA9IE1hdGgucm91bmQoKGFtb3VudCArIHRpcCkgLyBydG90YWxfZmFjdG9yICsgMC4yNSkgKiBydG90YWxfZmFjdG9yOwogICAgd3JpdGVPdXQoJyQnICsgYW1vdW50LnRvRml4ZWQoMikgKyAnICsgJCcgKyAocnRvdGFsLWFtb3VudCkudG9GaXhlZCgyKSArICcgPSAkJyArIHJ0b3RhbC50b0ZpeGVkKDIpKTsKICAgIAp9CgpmdW5jdGlvbiB6YXAoZmllbGQpIHsKICAgIGlmICghIGZpZWxkLnphcHBlZCApIHsKICAgICAgICBmaWVsZC56YXBwZWQgPSB0cnVlOwogICAgICAgIGZpZWxkLnZhbHVlICA9ICIiOwogICAgfQp9Cgo8L3NjcmlwdD4KCjwvaGVhZD4KPGJvZHk+Cgo8aDE+VGlwIENhbGN1bGF0b3I8L2gxPgoKPHA+CkVudGVyIGFmdGVyLXRheCB0b3RhbDoKPC9wPgo8Zm9ybSBuYW1lPSJpbkZvcm0iIG9uU3VibWl0PSJ1cGRhdGUoKTsgcmV0dXJuIGZhbHNlOyI+CjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJudW0iIG9uRm9jdXM9InphcCh0aGlzKSIgdmFsdWU9IjI0LjM3IiAvPgo8aW5wdXQgbmFtZT0ic3VibWl0IiB0eXBlPSJidXR0b24iIG9uQ2xpY2s9InVwZGF0ZSgpOyIgdmFsdWU9IlRpcCIgLz4KPC9mb3JtPgoKPHAgaWQ9Im91dHB1dEFyZWEiPgo8L3A+Cgo8L2JvZHk+CjwvaHRtbD4=
&lt;/pre&gt;
&lt;p&gt;By putting images inline using &lt;tt&gt;data:&lt;/tt&gt; URLs, you can create pretty
rich pages and store them locally. I created a 363,488 byte URL for my home
page (complete with images) and it loaded just fine on my iPhone.&lt;/p&gt;
&lt;p&gt;Here's a quick Perl one-liner to turn HTML into a &lt;tt&gt;data:&lt;/tt&gt; URL.&lt;/p&gt;
&lt;pre&gt;
perl -0777 -e 'use MIME::Base64; $text = &amp;lt;&amp;gt;; $text = encode_base64($text); $text =~ s/\s+//g; print &amp;quot;data:text/html;charset=utf-8;base64,$text\n&amp;quot;;'
&lt;/pre&gt;
&lt;p&gt;By making these links programmatically, you even have an ugly hack to do
persistent storage on the iPhone. Just encapsulate your app and its state in
its URL.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.clawpaws.net/post/2007/07/16/Storing-iPhone-apps-locally-with-data-URLs#comment-form</comments>
      <wfw:comment>http://blog.clawpaws.net/post/2007/07/16/Storing-iPhone-apps-locally-with-data-URLs#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.clawpaws.net/feed/rss2/comments/133928</wfw:commentRss>
      </item>
    
  <item>
    <title>Good Hash Functions</title>
    <link>http://blog.clawpaws.net/post/2007/04/22/Good-Hash-Functions</link>
    <guid isPermaLink="false">urn:md5:45cebe5ff00c2a473a9664986736b519</guid>
    <pubDate>Sun, 22 Apr 2007 00:35:00 -0700</pubDate>
    <dc:creator>W. Clawpaws</dc:creator>
        <category>Random Tips</category>
            
    <description>    &lt;p&gt;I happened to want to create a hash table with integer keys and went looking
for a suitable function. As usual, &lt;em&gt;Google is your friend&lt;/em&gt;. And as
usual, once you start researching things on the 'net, hours can go by.&lt;/p&gt;
&lt;p&gt;Thomas Wang has a good discussion of various &lt;a href=&quot;http://www.concentric.net/~Ttwang/tech/inthash.htm&quot; hreflang=&quot;en&quot;&gt;integer hash
functions&lt;/a&gt;, but that also lead me elsewhere to discussions of good hash
functions in general.&lt;/p&gt;
&lt;p&gt;In the past, I've found that many of the hash functions that are claimed as
being better than Knuth's classic string hash function don't actually prove to
be any better by most metrics, and some seem to be much worse.&lt;/p&gt;
&lt;p&gt;For example, one popular hash on the street these days seems to be Paul
Hsieh's &lt;a href=&quot;http://www.azillionmonkeys.com/qed/hash.html&quot; hreflang=&quot;en&quot;&gt;SuperFastHash&lt;/a&gt;. It does run quickly, and on the whole its statistical
properties seem to shake out reasonably well. But when you look at the actual
integers it returns, in my tests using &lt;code&gt;/usr/share/dict/web2&lt;/code&gt; on my
Mac, there seem to be a far more collisions than you'd statistically expect.
Statisitically, you'd expect about six collisions in the 32-bit space. Knuth's
hash function has only five, and they're very dissimilar words, namely:&lt;/p&gt;
&lt;pre&gt;
227010540:  autovivisection grovelings
890239928:  dialypetalous mumpishness
2851341963: anisostemonous umbellifer
3508170762: ctenodactyl fuliginousness
3909438781: prerogativity puzzleheaded
&lt;/pre&gt;
&lt;p&gt;The SuperFastHash function, on the other hand has 59 collisions, an order of
magnitude more. Here are a representative few:&lt;/p&gt;
&lt;pre&gt;
432696082: Cotinga Cotonam
535511585: miscoin misfond
631000912: amidine aminity
668950620: untossed unworked
738886349: hennin penman
749072160: revisible rewirable
&lt;/pre&gt;
&lt;p&gt;Notice that the words that hash the same seem somehow similar. That's just
weird.&lt;/p&gt;
&lt;p&gt;In addition to his own hash function, Paul Hsieh also has some other useful
code on his site, including &lt;a href=&quot;http://www.azillionmonkeys.com/qed/hash.c&quot; hreflang=&quot;en&quot;&gt;a hash test program&lt;/a&gt; comparing several different hash
implementations for speed, and &lt;a href=&quot;http://www.azillionmonkeys.com/qed/stdint.h&quot; hreflang=&quot;en&quot;&gt;a portable
implementation of stdint.h&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;http://www.isthe.com/chongo/tech/comp/fnv/&quot; hreflang=&quot;en&quot;&gt;FNV
(a.k.a. Fowler/Noll/Vo) hash&lt;/a&gt; is another hash function that seems popular
these days. It seems broadly similar to Knuth's hash function, but does a
better job of distributing hashes for short strings across the full 32-bit
space for hashes. For example, Knuth's hash hashes bat and cat to 137867 and
139236 respectively, but FNV hashes them to 950299920 and 1587996537. Like
Knuth's hash function, FNV places single-letter words in adjacent spots
(although there is an alternative version, FNV-1a, that avoids this problem),
Here are the collisions in 32-bit space for FNV.&lt;/p&gt;
&lt;pre&gt;
374764810:  diabolically koilanaglyphic
1055878936: deuteropathic vertebrosacral
1290893597: parer vila
1408982841: basiotribe narcotinic
1713658462: averral climatical
3129894270: Scorpididae transposer
&lt;/pre&gt;
&lt;p&gt;Bob Jenkins published &lt;a href=&quot;http://burtleburtle.net/bob/hash/doobs.html&quot; hreflang=&quot;en&quot;&gt;an article in Dr. Dobbs journal in 1997&lt;/a&gt;, providing a good
hash function of his own, and has continued to tweak his code since. His
&lt;a href=&quot;http://burtleburtle.net/bob/hash/index.html&quot; hreflang=&quot;en&quot;&gt;page on
hashing&lt;/a&gt; has lots of good stuff, including links to his code. His hash
function is no slouch, and is the only one I looked at that maps single
characters to radically different positions. Below are his 32-bit collisions,
again with about the distribution you'd expect:&lt;/p&gt;
&lt;pre&gt;
728135544: chorda fingerbreadth
733592810: stockily virginally
893264706: combaron unlimited
1456871225: gaspingly secularistic
1486736111: unbodied Yankee
2683815022: blackpoll Paharia
2947362466: Borinqueno unskewed
3298503807: distributress granulator
&lt;/pre&gt;
&lt;p&gt;Thanks to Paul Hsieh's test program, here are some performance numbers for
these different implementations (as benchmarked on my aging PowerBook G4):&lt;/p&gt;
&lt;pre&gt;
FNVHash         :  3.9300s
knuthHash       :  2.9700s
BobJenkins      :  2.4600s
SuperFastHash   :  2.2800s
&lt;/pre&gt;
&lt;p&gt;Running on some other architectures, I find that FNV and Knuth are really
about the same (the difference between the two seems to be a G4 artifact). On
the whole, although it may look like there's a big difference between the
algorithms, in my experience, I've found that the hash function, (or even the
whole hash table implementation!) isn't really the bottleneck. In other words,
if you make your hash function twice as fast, usually no one will notice.&lt;/p&gt;
&lt;p&gt;Paul Hsieh's SuperFastHash may be a tiny bit faster than Bob Jenkins's hash,
but I think not enough to really stand out, and its strange collisions worry
me. Bob Jenkins's hash function is probably the best and the one to use if you
want an industrial-strength hash, but it is massive and complex. FNV may be
slower, but it's short and sweet, just two mystery constants to remember. But
if I have to write it myself, from memory, I'm still going to go with Knuth.
Usually, Knuth's slightly odd pattern really won't matter.&lt;/p&gt;
&lt;p&gt;For more, see Wikipedia's coverage of &lt;a href=&quot;http://en.wikipedia.org/wiki/Hash_table&quot; hreflang=&quot;en&quot;&gt;hash tables&lt;/a&gt;, which
also has pretty good coverage of hash functions.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.clawpaws.net/post/2007/04/22/Good-Hash-Functions#comment-form</comments>
      <wfw:comment>http://blog.clawpaws.net/post/2007/04/22/Good-Hash-Functions#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.clawpaws.net/feed/rss2/comments/102268</wfw:commentRss>
      </item>
    
  <item>
    <title>Getting Backtraces with Standard ML</title>
    <link>http://blog.clawpaws.net/post/2007/02/16/Getting-Backtraces-with-Standard-ML</link>
    <guid isPermaLink="false">urn:md5:ee44dde8a382fde122e0b6685b968ace</guid>
    <pubDate>Fri, 16 Feb 2007 21:10:00 -0800</pubDate>
    <dc:creator>W. Clawpaws</dc:creator>
        <category>Programming Languages</category>
            
    <description>    &lt;p&gt;I still have a pretty good soft spot for &lt;a href=&quot;http://www.standardml.org/&quot; hreflang=&quot;en&quot;&gt;Standard ML&lt;/a&gt;. &lt;a href=&quot;http://www.haskell.org&quot; hreflang=&quot;en&quot;&gt;Haskell&lt;/a&gt; may be sexier, but whenever
I want to get something serious done, I find myself turning to SML.&lt;/p&gt;
&lt;p&gt;One of my occasional claims for why I sick with ML is that you can actually
debug SML programs (c.f., Haskell, where being laziness makes debugging
&amp;quot;interesting&amp;quot; -- great if you want a &lt;a href=&quot;http://www.haskell.org/hat&quot; hreflang=&quot;en&quot;&gt;research&lt;/a&gt; &lt;a href=&quot;http://www.cs.mu.oz.au/~bjpop/buddha/&quot; hreflang=&quot;en&quot;&gt;project&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;But in practice, debugging in &lt;a href=&quot;http://smlnj.cs.uchicago.edu/&quot; hreflang=&quot;en&quot;&gt;SML/NJ&lt;/a&gt; can actually be a pain. If you get an exception from
one of the library functions, you may end up with an unhelpful error message
like this one:&lt;/p&gt;
&lt;pre&gt;
    uncaught exception Domain [domain error]
      raised at: Basis/Implementation/real64.sml:88.32-88.46
&lt;/pre&gt;
&lt;p&gt;Without any sort of backtrace, you get no clue about where/how the exception
was raised.&lt;/p&gt;
&lt;p&gt;But it turns out that there &lt;em&gt;is&lt;/em&gt; a feature in SML/NJ that lets you
get a backtrace. It's just that it's barely documented at all!&lt;/p&gt;
&lt;p&gt;It turns out that if you type:&lt;/p&gt;
&lt;pre&gt;
    CM.make &amp;quot;$smlnj-tdp/back-trace.cm&amp;quot;;
    SMLofNJ.Internals.TDP.mode := true;
&lt;/pre&gt;
&lt;p&gt;when you first start SML, and then compile your code, when you get an
exception, you'll get a backtrace.&lt;/p&gt;
&lt;p&gt;Now, you'll see something more like:&lt;/p&gt;
&lt;pre&gt;
    CALL   art.sml:52.7-52.55: Art.toIntensity[2]
              (from: art.sml:89.38-89.57: Art.emitGray[2].iz)
    CALL   art.sml:79.27-93.33: Art.emitGray[2]
              (from: art.sml:13.26-13.29: Art.for[2])
    GOTO   art.sml:10.7-13.45: Art.for[2]
              (from: art.sml:78.22-93.34: Art.emitGray[2])
    CALL   art.sml:77.19-93.34: Art.emitGray[2]
              (from: art.sml:13.26-13.29: Art.for[2])
    CALL   art.sml:10.7-13.45: Art.for[2]
              (from: art.sml:75.14-93.35: Art.emitGray[2])
    CALL   art.sml:64.7-98.7: Art.emitGray[2]
              (from: ???)
    CALL   art.sml:249.7-307.9: Art.doMix[2]
              (from: ???)
    
    uncaught exception Domain [domain error]
      raised at: Basis/Implementation/real64.sml:88.32-88.46
&lt;/pre&gt;
&lt;p&gt;Cool. You've got to wonder though, why people would write a cool and useful
feature like this and not clearly tell people about it.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.clawpaws.net/post/2007/02/16/Getting-Backtraces-with-Standard-ML#comment-form</comments>
      <wfw:comment>http://blog.clawpaws.net/post/2007/02/16/Getting-Backtraces-with-Standard-ML#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.clawpaws.net/feed/rss2/comments/80738</wfw:commentRss>
      </item>
    
  <item>
    <title>Use Google to * Yourself</title>
    <link>http://blog.clawpaws.net/post/2007/02/12/Use-Google-to-Yourself</link>
    <guid isPermaLink="false">urn:md5:69e4737a87b87597efd38e0c9d0c98fa</guid>
    <pubDate>Mon, 12 Feb 2007 20:42:00 -0800</pubDate>
    <dc:creator>W. Clawpaws</dc:creator>
            
    <description>    &lt;p&gt;In bored moments, I sometimes wish that Google had a &amp;quot;Just show my some
random interesting thing&amp;quot; button in addition to its &amp;quot;I'm feeling lucky&amp;quot; button.
It doesn't, but if you're after something relatively random and occasionally
worthy of a chuckle, Google is your still friend.&lt;/p&gt;
&lt;p&gt;Google's search facilities allow you to include wildcards in your searches.
You can't just search for &amp;quot;*&amp;quot;, but you can make seed phrases. It's often quite
strange what the top hit is. Here are a couple, and their top hits as of
today,&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.google.com/search?q=%22There+is+a+*+in+my+*%22&quot;&gt;&amp;quot;There
is a * in my *&amp;quot;&lt;/a&gt; — There is a carrot in my ear.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.google.com/search?q=%22I+can%27t+believe+I+*+a+whole+*%22&quot;&gt;&amp;quot;I can't
believe I * a whole *&amp;quot;&lt;/a&gt; — I can't believe I wasted a whole decade.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And so on...&lt;/p&gt;
&lt;p&gt;Certainly a silly time waster, but if you hopefully you won't waste a whole
decade.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.clawpaws.net/post/2007/02/12/Use-Google-to-Yourself#comment-form</comments>
      <wfw:comment>http://blog.clawpaws.net/post/2007/02/12/Use-Google-to-Yourself#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.clawpaws.net/feed/rss2/comments/79393</wfw:commentRss>
      </item>
    
  <item>
    <title>Universal Binaries without XCode</title>
    <link>http://blog.clawpaws.net/post/2007/02/11/Universal-Binaries-without-XCode</link>
    <guid isPermaLink="false">urn:md5:8af08ea8dbccc66783a84dbfd82f5318</guid>
    <pubDate>Sun, 11 Feb 2007 13:53:00 -0800</pubDate>
    <dc:creator>W. Clawpaws</dc:creator>
        <category>Random Tips</category>
            
    <description>    &lt;p&gt;OS X inherited &lt;a href=&quot;http://en.wikipedia.org/wiki/Fat_binary&quot; hreflang=&quot;en&quot;&gt;fat binary&lt;/a&gt; technology from &lt;a href=&quot;http://en.wikipedia.org/wiki/NEXTSTEP&quot; hreflang=&quot;en&quot;&gt;NextStep&lt;/a&gt;. Back in the
NextStep days, the incantation was easy, you'd just add &lt;code&gt;-arch i386 -arch
ppc&lt;/code&gt; to all your compilation/linking/library commands and you'd be all
set.&lt;/p&gt;
&lt;p&gt;With OS X, Apple made it &amp;quot;even easier&amp;quot; — just a check box in &lt;a href=&quot;http://developer.apple.com/tools/xcode/&quot; hreflang=&quot;en&quot;&gt;XCode&lt;/a&gt;. And for
projects that still use things like &lt;code&gt;Makefile&lt;/code&gt;s, they give you
detailed instructions for &lt;a href=&quot;http://developer.apple.com/opensource/buildingopensourceuniversal.html&quot;&gt;Building
an Open Source Universal Binary&lt;/a&gt;. Great right? Not so much, because the
those instructions essentially tell you how to make XCode manage the whole
build, which is, frankly, nuts.&lt;/p&gt;
&lt;p&gt;If you try to go old school and pass &lt;code&gt;-arch i386 -arch ppc&lt;/code&gt; to
&lt;code&gt;gcc&lt;/code&gt;, all seems fine until you try to link, and which point it dies
horribly. Turns out that the &amp;quot;standard&amp;quot; developer libraries are thin, not fat.
So, to link your program, you need to pass &lt;code&gt;-syslibroot
/Developer/SDKs/MacOSX10.4u.sdk&lt;/code&gt; to the linker to have it find some
libraries with the proper amount of universal goodness. For a C++ project, the
relevant incantation is&lt;/p&gt;
&lt;pre&gt;
   g++ -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc
&lt;/pre&gt;
&lt;p&gt;Why didn't they just &lt;em&gt;say&lt;/em&gt; that? Maybe they were too
embarrassed...&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.clawpaws.net/post/2007/02/11/Universal-Binaries-without-XCode#comment-form</comments>
      <wfw:comment>http://blog.clawpaws.net/post/2007/02/11/Universal-Binaries-without-XCode#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.clawpaws.net/feed/rss2/comments/79052</wfw:commentRss>
      </item>
    
  <item>
    <title>Understanding mdfind</title>
    <link>http://blog.clawpaws.net/post/2007/02/11/Making-OS-X-Fat-Binaries-with-Traditional-Tools</link>
    <guid isPermaLink="false">urn:md5:29f08700267a74f86d6e792cbf26448d</guid>
    <pubDate>Sun, 11 Feb 2007 13:23:00 -0800</pubDate>
    <dc:creator>W. Clawpaws</dc:creator>
        <category>Random Tips</category>
            
    <description>    &lt;p&gt;I love Apple's Spotlight in theory, but in practice I hate the GUI
implementation. On my 1.33Mhz G4 laptop, having it try to search while I'm
still trying to type the first is both painful and usually useless. And, to
make matters worse, when using Spotlight from the Finder, it seems to crash the
finder about 50% of the time.&lt;/p&gt;
&lt;p&gt;So, half the time I end up just using &lt;a href=&quot;http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/locate.1.html&quot; hreflang=&quot;en&quot;&gt;locate&lt;/a&gt; or &lt;a href=&quot;http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/find.1.html&quot; hreflang=&quot;en&quot;&gt;find&lt;/a&gt;. But I keep thinking that I should really be using
&lt;em&gt;mdfind&lt;/em&gt;. But the &lt;a href=&quot;http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/mdfind.1.html&quot; hreflang=&quot;en&quot;&gt;manual page&lt;/a&gt; is less than helpful. It says&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The query can be a string or a query expression.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;which isn't very helpful because it doesn't tell you what valid query
expressions look like.&lt;/p&gt;
&lt;p&gt;Some people tell you to just do a search in the Finder, save it as a saved
search/smart folder, and then go peek in &lt;code&gt;~/Library/Saved Searches&lt;/code&gt;.
There you'll find evil XML (or binary) plist files, which are unreadable by
normal people. But here's a useful trick to render them in human readable form
(i.e., the old-style ASCII plist format). If the file ends with a
&lt;code&gt;.plist&lt;/code&gt; extension (e.g., &lt;code&gt;~/blah/foobar.plist&lt;/code&gt;), you can
use &lt;code&gt;defaults read ~/blah/foobar&lt;/code&gt; (note the lack of the
&lt;code&gt;.plist&lt;/code&gt; — the &lt;code&gt;defaults&lt;/code&gt; command insists on adding it).
If it &lt;em&gt;doesn't&lt;/em&gt; end with &lt;code&gt;.plist&lt;/code&gt;, you can make a temporary
symlink that does.&lt;/p&gt;
&lt;p&gt;So, you can look at saved searches, but learning from examples only goes so
far. And, you can use &lt;a href=&quot;http://developer.apple.com/documentation/Darwin/Reference/ManPages/man1/mdls.1.html&quot; hreflang=&quot;en&quot;&gt;mdls&lt;/a&gt; on existing known files to find potential attributes to
use in your search.&lt;/p&gt;
&lt;p&gt;But what you really need is to know the &lt;a href=&quot;http://developer.apple.com/documentation/Carbon/Conceptual/SpotlightQuery/Concepts/QueryFormat.html&quot; hreflang=&quot;en&quot;&gt;query expression syntax&lt;/a&gt;, and the &lt;a href=&quot;http://developer.apple.com/documentation/Carbon/Reference/MetadataAttributesRef/index.html&quot; hreflang=&quot;en&quot;&gt;metadata attributes&lt;/a&gt;. Why they can't just tell you about these
references on the &lt;code&gt;mdfind&lt;/code&gt; man page I don't know.&lt;/p&gt;
&lt;p&gt;This documentation is a good start, except that it is still fairly sparse.
From what I can tell, the &lt;code&gt;inRange&lt;/code&gt; operator doesn't work, or at
least doesn't work on dates. This works to find the files I've changed in the
last day:&lt;/p&gt;
&lt;pre&gt;
   mdfind '(kMDItemFSContentChangeDate &amp;gt;= $time.today(-1)) &amp;amp;&amp;amp; (kMDItemFSContentChangeDate &amp;lt; $time.now) &amp;amp;&amp;amp; (kMDItemContentTypeTree = &amp;quot;public.content&amp;quot;)'
&lt;/pre&gt;
&lt;p&gt;but this one doesn't&lt;/p&gt;
&lt;pre&gt;
   mdfind '(inRange(kMDItemFSContentChangeDate,$time.today(-1),$time.now)) &amp;amp;&amp;amp; (kMDItemContentTypeTree = &amp;quot;public.content&amp;quot;)'
&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;kMDItemContentTypeTree = &amp;quot;public.content&amp;quot;&lt;/code&gt; part is to weed
out updated cache files and the like, although apparently
&lt;code&gt;Makefile&lt;/code&gt;s don't qualify as content (none of the importers
recognize them, I guess), so they get weeded out too. &lt;em&gt;sigh&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Still, I'm closer than ever to weaning myself off &lt;code&gt;locate&lt;/code&gt; and
&lt;code&gt;find&lt;/code&gt;. Maybe.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.clawpaws.net/post/2007/02/11/Making-OS-X-Fat-Binaries-with-Traditional-Tools#comment-form</comments>
      <wfw:comment>http://blog.clawpaws.net/post/2007/02/11/Making-OS-X-Fat-Binaries-with-Traditional-Tools#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.clawpaws.net/feed/rss2/comments/79034</wfw:commentRss>
      </item>
    
  <item>
    <title>Fun with Lego Mindstorms NXT</title>
    <link>http://blog.clawpaws.net/post/2007/02/11/Fun-with-Lego-Mindstorms-NXT</link>
    <guid isPermaLink="false">urn:md5:968fe0dd747b806534dc8fc6ed44351e</guid>
    <pubDate>Sun, 11 Feb 2007 01:44:00 -0800</pubDate>
    <dc:creator>W. Clawpaws</dc:creator>
            
    <description>    &lt;p&gt;C got me an &lt;a href=&quot;http://mindstorms.lego.com&quot; hreflang=&quot;en&quot;&gt;Lego
Mindstorms NXT&lt;/a&gt; for my birthday. A great birthday present is something
you're pleased to have been given, but would never have bought for yourself,
either because you hard to justify or because you would never have thought of
it. I think this qualified on the former count — I knew if I got one, it'd be a
terrible time sink. But I forgot Bertrand Russell's quote that &amp;quot;The time you
enjoy wasting is not wasted time&amp;quot;. I've certainly enjoyed almost all the time
I've wasted on NXT fun (even browsing the &lt;a href=&quot;http://mindstorms.lego.com/Overview/NXTreme.aspx&quot; hreflang=&quot;en&quot;&gt;technical
docs&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;It seems to be developing quite a community. There are several blogs,
including&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://thenxtstep.blogspot.com/&quot; hreflang=&quot;en&quot;&gt;The NXT
STEP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://nxtasy.org/&quot; hreflang=&quot;en&quot;&gt;NXTasy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are also a &lt;a href=&quot;http://www.teamhassenplug.org/NXT/NXTSoftware.html&quot; hreflang=&quot;en&quot;&gt;ton of ways
to program&lt;/a&gt; the thing. I've mostly used the provided NXT-G graphical
programming environment and &lt;a href=&quot;http://bricxcc.sourceforge.net/nbc/&quot; hreflang=&quot;en&quot;&gt;NXC&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It's also pretty amazing what people have managed to do with NXT-G. For
example, I'd never have attempted something as complex as &lt;a href=&quot;http://kisd.de/~krystian/nxt/&quot; hreflang=&quot;en&quot;&gt;a radar display&lt;/a&gt; what struck
me as a fairly primitive and awkward language. I guess it's more capable than I
thought, but I still think it's an insanely awkward way to express anything
remotely complex.&lt;/p&gt;
&lt;p&gt;I've built all the roaming robot designs that come with the set, but I like
the basic TriBot best for versatility. I need to try doing some other designs
too. &lt;a href=&quot;http://www.legoedwest.com/page.php?19&quot; hreflang=&quot;en&quot;&gt;LegoEdWest&lt;/a&gt; has build instructions for various straightforward
variations on the original theme, such as &lt;a href=&quot;http://mindstorms.lego.com/MeetMDP/BDavis.aspx&quot; hreflang=&quot;en&quot;&gt;Brian
Davis&lt;/a&gt;'s JennToo robot.&lt;/p&gt;
&lt;p&gt;For coolness-factor, here's a &lt;a href=&quot;http://www.philohome.com/nxtway/nxtway.htm&quot; hreflang=&quot;en&quot;&gt;Segway clone&lt;/a&gt;
built using just the light sensor (and another &lt;a href=&quot;http://web.mac.com/ryo_watanabe/iWeb/Ryo%27s%20Holiday/NXTway-G%3AMovie3.html&quot;&gt;
cooler one&lt;/a&gt;), and a &lt;a href=&quot;http://www.youtube.com/watch?v=hnpMrgDCXlc&amp;amp;eurl=&quot; hreflang=&quot;en&quot;&gt;PackBot
clone&lt;/a&gt; (which requires various &lt;a href=&quot;http://www.legoeducation.com/store/SearchResult.aspx?pt=9&amp;amp;by=6&amp;amp;bhcp=1&quot; hreflang=&quot;en&quot;&gt;extra parts&lt;/a&gt; to build.&lt;/p&gt;
&lt;p&gt;And if you want more fun than what comes in the box, there are some really
interesting hardware pieces on the horizon, including compass, acceleration,
and gyro sensors, as well as input and output multiplexors. See&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.hitechnic.com/&quot; hreflang=&quot;en&quot;&gt;HiTechnic&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.mindsensors.com&quot; hreflang=&quot;en&quot;&gt;Mindsensors&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There sure is a lot going on here.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.clawpaws.net/post/2007/02/11/Fun-with-Lego-Mindstorms-NXT#comment-form</comments>
      <wfw:comment>http://blog.clawpaws.net/post/2007/02/11/Fun-with-Lego-Mindstorms-NXT#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.clawpaws.net/feed/rss2/comments/78852</wfw:commentRss>
      </item>
    
  <item>
    <title>Cars, Priores/Priuses/Prii</title>
    <link>http://blog.clawpaws.net/post/2007/02/10/Cars-Priores/Priuses/Prii</link>
    <guid isPermaLink="false">urn:md5:86a688354d741cd028c976379b9f194a</guid>
    <pubDate>Sat, 10 Feb 2007 14:53:00 -0800</pubDate>
    <dc:creator>W. Clawpaws</dc:creator>
            
    <description>    &lt;p&gt;So, C was idly looking at new car websites last night. We're both always
frustrated by the fact that most cars are available in such bland colors. I
mean, if you're going to spend hours researching your new car, spend more than
$20,000 on it, and have to wait weeks or months for it to arrive, you might at
least be able to get it in a range of colors at least as interesting as a $69
&lt;a href=&quot;http://www.apple.com/ipodshuffle/&quot; hreflang=&quot;en&quot;&gt;iPod&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Myself, I keep hoping that the rumored &lt;a href=&quot;http://www.worldcarfans.com/spyphotos.cfm/spyphotoid/6070119.001/country/jcf/toyota/spy-image-next-gen-toyota-prius&quot; hreflang=&quot;en&quot;&gt;2008 Prius&lt;/a&gt; will be totally overwhelmingly cool and come in
some actual colors. But I won't hold my breath.&lt;/p&gt;
&lt;p&gt;And the &lt;a href=&quot;http://priusonline.com/viewtopic.php?t=1891&amp;amp;sid=5511364ad036aad5209e9c7e8584b0ea&quot; hreflang=&quot;en&quot;&gt;official plural of prius&lt;/a&gt;? Apparently it's Prius. Wow, how
bland, what a surprise.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.clawpaws.net/post/2007/02/10/Cars-Priores/Priuses/Prii#comment-form</comments>
      <wfw:comment>http://blog.clawpaws.net/post/2007/02/10/Cars-Priores/Priuses/Prii#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.clawpaws.net/feed/rss2/comments/78818</wfw:commentRss>
      </item>
    
  <item>
    <title>SIGCSE booked</title>
    <link>http://blog.clawpaws.net/post/2007/02/10/SIGCSE-booked</link>
    <guid isPermaLink="false">urn:md5:806d51f62022c35b251e0f04f50d1e15</guid>
    <pubDate>Sat, 10 Feb 2007 14:38:00 -0800</pubDate>
    <dc:creator>W. Clawpaws</dc:creator>
        <category>CS Education</category>
            
    <description>    &lt;p&gt;So, I'm headed to &lt;a href=&quot;http://www.cs.potsdam.edu/sigcse07/index.shtml&quot; hreflang=&quot;en&quot;&gt;SIGCSE&lt;/a&gt;. Registering on the last day of early registration is
pretty dumb since all the conference hotels are pretty-much full, and flights
are about $550. On the other hand, if I'd waited even longer, I would have felt
even dumber.&lt;/p&gt;
&lt;p&gt;There are lots of interesting things on the &lt;a href=&quot;http://db.grinnell.edu/sigcse/sigcse2007/Program/Program.asp&quot; hreflang=&quot;en&quot;&gt;program&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I'll have to try to find out more about the vicinity (Covington, Kentucky)
.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.clawpaws.net/post/2007/02/10/SIGCSE-booked#comment-form</comments>
      <wfw:comment>http://blog.clawpaws.net/post/2007/02/10/SIGCSE-booked#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.clawpaws.net/feed/rss2/comments/78810</wfw:commentRss>
      </item>
    
  <item>
    <title>Here goes nothing...</title>
    <link>http://blog.clawpaws.net/post/2007/02/10/Here-goes-nothing</link>
    <guid isPermaLink="false">urn:md5:bdc8afcbd4acbd967a7c7989729783e8</guid>
    <pubDate>Sat, 10 Feb 2007 14:15:00 +0000</pubDate>
    <dc:creator>W. Clawpaws</dc:creator>
            
    <description>    &lt;p&gt;So, apparently my domain now has &lt;em&gt;blogging&lt;/em&gt; support. What does this
mean in practice...? I don't know, but I've had this domain for years, doing
pretty-much nothing. Maybe I should try to actually use it for something.&lt;/p&gt;
&lt;p&gt;So, as an experiment, I'm going to try seeing if I can use it as a (rather
public) way to record things I think are interesting.&lt;/p&gt;</description>
    
    
    
          <comments>http://blog.clawpaws.net/post/2007/02/10/Here-goes-nothing#comment-form</comments>
      <wfw:comment>http://blog.clawpaws.net/post/2007/02/10/Here-goes-nothing#comment-form</wfw:comment>
      <wfw:commentRss>http://blog.clawpaws.net/feed/rss2/comments/78805</wfw:commentRss>
      </item>
    
</channel>
</rss>