<?xml version="1.0" encoding="iso-8859-1"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="en">
  <title>Cupboard</title>
  <link rel="alternate" type="text/html" href="http://MrFeinberg.com/blog/" />
  <modified>2005-07-29T15:18:19Z</modified>
  <tagline>Random notes on programming, musicianship, and being Mr. Feinberg.</tagline>
  <id>tag:MrFeinberg.com,2006:/blog//1</id>
  <generator url="http://www.movabletype.org/" version="2.661">Movable Type</generator>
  <copyright>Copyright (c) 2005, MrFeinberg</copyright>
  <entry>
    <title>Java 5: Make an arbitrary code block time out</title>
    <link rel="alternate" type="text/html" href="http://MrFeinberg.com/blog/archives/000016.html" />
    <modified>2005-07-29T15:18:19Z</modified>
    <issued>2005-07-29T10:18:19-05:00</issued>
    <id>tag:MrFeinberg.com,2005:/blog//1.16</id>
    <created>2005-07-29T15:18:19Z</created>
    <summary type="text/plain">The Commons-HttpClient API does provide methods for asserting timeouts on HTTP connections, but those methods appear to have no effect when you encounter a socket timeout or some other OS-level blocking. I needed a way to say &quot;Fetch me this...</summary>
    <author>
      <name>MrFeinberg</name>
      <url>http://69.90.33.229/blog/</url>
      <email>jdf@pobox.com</email>
    </author>
    <dc:subject>Java</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://MrFeinberg.com/blog/">
      <![CDATA[<p>The Commons-HttpClient API does
provide methods for asserting timeouts on HTTP connections, but
those methods appear to have no effect when you encounter a socket
timeout or some other OS-level blocking. I needed a way to say
"Fetch me this resource, as long as it doesn't take you more than n
milliseconds, and I mean it!" Here's what I came up with.</p>

<p>
	Java 5's <a href="http://gee.cs.oswego.edu/dl/concurrency-interest/index.html">util.concurrent</a> provides the necessary ingredients, while generic static methods keep the kitchen clean.
</p>

<div style="overflow: auto;">
<pre style="font-family: andale mono, courier new, monospace;">
    <FONT style="font-weight: bold;">private static final</FONT> ExecutorService THREADPOOL 
        <FONT COLOR="BLUE" SIZE="+1">=</FONT> Executors<FONT COLOR="BLUE" SIZE="+1">.</FONT>newCachedThreadPool<FONT COLOR="BLUE" SIZE="+1">();</FONT>

    <FONT style="font-weight: bold;">private static</FONT> <FONT COLOR="BLUE" SIZE="+1">&lt;</FONT>T<FONT COLOR="BLUE" SIZE="+1">&gt;</FONT> T call<FONT COLOR="BLUE" SIZE="+1">(</FONT>Callable<FONT COLOR="BLUE" SIZE="+1">&lt;</FONT>T<FONT COLOR="BLUE" SIZE="+1">&gt;</FONT> c<FONT COLOR="BLUE" SIZE="+1">,</FONT> <FONT style="font-weight: bold;">long</FONT> timeout<FONT COLOR="BLUE" SIZE="+1">,</FONT> TimeUnit timeUnit<FONT COLOR="BLUE" SIZE="+1">)</FONT>
        <FONT style="font-weight: bold;">throws</FONT> InterruptedException<FONT COLOR="BLUE" SIZE="+1">,</FONT> ExecutionException<FONT COLOR="BLUE" SIZE="+1">,</FONT> TimeoutException
    <FONT COLOR="BLUE" SIZE="+1">{</FONT>
        FutureTask<FONT COLOR="BLUE" SIZE="+1">&lt;</FONT>T<FONT COLOR="BLUE" SIZE="+1">&gt;</FONT> t <FONT COLOR="BLUE" SIZE="+1">=</FONT> <FONT style="font-weight: bold;">new</FONT> FutureTask<FONT COLOR="BLUE" SIZE="+1">&lt;</FONT>T<FONT COLOR="BLUE" SIZE="+1">&gt;</FONT><FONT COLOR="BLUE" SIZE="+1">(</FONT>c<FONT COLOR="BLUE" SIZE="+1">)</FONT><FONT COLOR="BLUE" SIZE="+1">;</FONT>
        THREADPOOL<FONT COLOR="BLUE" SIZE="+1">.</FONT>execute<FONT COLOR="BLUE" SIZE="+1">(</FONT>t<FONT COLOR="BLUE" SIZE="+1">)</FONT><FONT COLOR="BLUE" SIZE="+1">;</FONT>
        <FONT style="font-weight: bold;">return</FONT> t<FONT COLOR="BLUE" SIZE="+1">.</FONT>get<FONT COLOR="BLUE" SIZE="+1">(</FONT>timeout<FONT COLOR="BLUE" SIZE="+1">,</FONT> timeUnit<FONT COLOR="BLUE" SIZE="+1">)</FONT><FONT COLOR="BLUE" SIZE="+1">;</FONT>
    <FONT COLOR="BLUE" SIZE="+1">}</FONT>
</pre>
</div>

<p>
	Now, if you wanted to hatch an Egg, but only if you could get it in fewer than
	2 seconds, you'd
</p>

<div style="overflow: auto;">
<pre style="font-family: andale mono, courier new, monospace;">
    <font style="font-weight: bold;">try</font> <font color="BLUE" size="+1">{</font>
        Egg egg <font color="BLUE" size="+1">=</font> call<font color="BLUE" size="+1">(</font><font style="font-weight: bold;">new</font> Callable<font color="BLUE" size="+1">&lt;</font>Egg<font color="BLUE" size="+1">&gt;</font><font color="BLUE" size="+1">(</font><font color="BLUE" size="+1">)</font> <font color="BLUE" size="+1">{</font>
            <font style="font-weight: bold;">public</font> Egg call<font color="BLUE" size="+1">(</font><font color="BLUE" size="+1">)</font> <font style="font-weight: bold;">throws</font> Exception
            <font color="BLUE" size="+1">{</font>
                <font color="gray">// Constructing an egg could take a while</font>
                <font style="font-weight: bold;">return</font> <font style="font-weight: bold;">new</font> Egg<font color="BLUE" size="+1">(</font>Bird<font color="BLUE" size="+1">.</font>ROC<font color="BLUE" size="+1">)</font><font color="BLUE" size="+1">;</font>
            <font color="BLUE" size="+1">}</font><font color="BLUE" size="+1">,</font> <font color="BROWN">2</font><font color="BLUE" size="+1">,</font> TimeUnit<font color="BLUE" size="+1">.</font>SECONDS<font color="BLUE" size="+1">)</font><font color="BLUE" size="+1">;</font>
        scramble<font color="BLUE" size="+1">(</font>egg<font color="BLUE" size="+1">)</font><font color="BLUE" size="+1">;</font>
    <font color="BLUE" size="+1">}</font> <font style="font-weight: bold;">catch</font> <font color="BLUE" size="+1">(</font>TimeoutException e<font color="BLUE" size="+1">)</font> <font color="BLUE" size="+1">{</font>
        System<font color="BLUE" size="+1">.</font>err<font color="BLUE" size="+1">.</font>println<font color="BLUE" size="+1">(</font><font color="PURPLE">"You'd better order out."</font><font color="BLUE" size="+1">)</font><font color="BLUE" size="+1">;</font>
    <font color="BLUE" size="+1">}</font></pre>
</div>]]>
      
    </content>
  </entry>
  <entry>
    <title>My Java Killer Feature</title>
    <link rel="alternate" type="text/html" href="http://MrFeinberg.com/blog/archives/000015.html" />
    <modified>2005-01-15T17:02:06Z</modified>
    <issued>2005-01-15T12:02:06-05:00</issued>
    <id>tag:MrFeinberg.com,2005:/blog//1.15</id>
    <created>2005-01-15T17:02:06Z</created>
    <summary type="text/plain"> While I love parameterized types and the enhanced for loop, the one feature of Java 5 that I most adore is the old regionMatches() [1, 2] family of functions on java.lang.String. Here are a couple of sample use-cases that...</summary>
    <author>
      <name>MrFeinberg</name>
      <url>http://69.90.33.229/blog/</url>
      <email>jdf@pobox.com</email>
    </author>
    <dc:subject>Java</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://MrFeinberg.com/blog/">
      <![CDATA[<p>
While I love <a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html">parameterized types</a> and the <a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/foreach.html">enhanced for loop</a>, the one feature of Java 5 that I most adore is the old <code>regionMatches()</code> [<a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#regionMatches(boolean,%20int,%20java.lang.String,%20int,%20int)">1</a>, <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#regionMatches(int,%20java.lang.String,%20int,%20int)">2</a>] family of functions on <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html"><code>java.lang.String</code></a>. Here are a couple of sample use-cases that previously required the creation of new <code>String</code>s or tedious loops using <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#charAt(int)"><code>charAt()</code></a>:

<h4>Case-folding <code>startsWith()</code></h4>

<p>If you&#8217;ve ever written code like</p>

<pre><code>    if (foo.toLowerCase().startsWith(bar.toLowerCase())) ...
</code></pre>

<p> and winced, because you were creating and throwing away two <code>String</code>s, then rejoice! Now you may</p>

<pre><code>    if (foo.regionMatches(true, 0, bar, 0, bar.length())) ...
</code></pre>



<h4>Comparison of arbitrary string regions</h4>

<p>Before:</p>

<pre><code>    if (foo.equals(bar.substring(m))) ...</code></pre>

<p>After:</p>

<pre><code>    if (foo.regionMatches(0, bar, m, bar.length() - m)) ...</code></pre>



<p>Look through your own code for opportunities to use these efficient new functions.</p>

<h4>Update - Jan 16, 2005</h4>

<p>In response to the skeptical inquiries below, here&#8217;s some <a href="http://MrFeinberg.com/attachments/TimeRegionMatches.java">benchmark code</a>. In my opinion, the results support my idea that <code>regionMatches()</code> is a win for efficiency in the context of time-critical applications. For what it&#8217;s worth, my own recent use of <code>regionMatches()</code> is in a service where one fifth of a millisecond is the average response time, and where frequent garbage collection would be disruptive.</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>SWT Colors in HSB Space</title>
    <link rel="alternate" type="text/html" href="http://MrFeinberg.com/blog/archives/000014.html" />
    <modified>2004-11-02T17:39:45Z</modified>
    <issued>2004-11-02T12:39:45-05:00</issued>
    <id>tag:MrFeinberg.com,2004:/blog//1.14</id>
    <created>2004-11-02T17:39:45Z</created>
    <summary type="text/plain">Just in time for election day, here&amp;#8217;s a snippet of code that performs a manipulation of the value dimension of an SWT color: private Color colorWithValue(Color c, float value) { RGB rgb = c.getRGB(); float[] fs = java.awt.Color.RGBtoHSB(rgb.red, rgb.green, rgb.blue,...</summary>
    <author>
      <name>MrFeinberg</name>
      <url>http://69.90.33.229/blog/</url>
      <email>jdf@pobox.com</email>
    </author>
    <dc:subject>Java</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://MrFeinberg.com/blog/">
      <![CDATA[<p>Just in time for election day, here&#8217;s a snippet of code that performs a manipulation of the value dimension of an <span class="caps">SWT </span>color:</p>

<pre><code>private Color colorWithValue(Color c, float value)
{
    RGB rgb = c.getRGB();
    float[] fs = 
      java.awt.Color.RGBtoHSB(rgb.red, rgb.green, rgb.blue, null);
    java.awt.Color cc = 
      new java.awt.Color(java.awt.Color.HSBtoRGB(fs[0], fs[1], value));
    return new Color(getDisplay(), cc.getRed(), cc.getGreen(), cc.getBlue());		
}</code></pre>]]>
      
    </content>
  </entry>
  <entry>
    <title>Milestone</title>
    <link rel="alternate" type="text/html" href="http://MrFeinberg.com/blog/archives/000013.html" />
    <modified>2004-07-02T12:17:07Z</modified>
    <issued>2004-07-02T07:17:07-05:00</issued>
    <id>tag:MrFeinberg.com,2004:/blog//1.13</id>
    <created>2004-07-02T12:17:07Z</created>
    <summary type="text/plain"> .flickr-photo { border: solid 1px #000000; } .flickr-yourcomment { } .flickr-frame { float: left; width: 150px; text-align: center; padding: 3px; margin-right: 10px; } .flickr-caption { font: 75%; /* color: #666666; */ margin-top: 0px; } .flickr-buddyicon { margin-right:5px; vertical-align:middle; border:...</summary>
    <author>
      <name>MrFeinberg</name>
      <url>http://69.90.33.229/blog/</url>
      <email>jdf@pobox.com</email>
    </author>
    
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://MrFeinberg.com/blog/">
      <![CDATA[<p><style></p>

<p>.flickr-photo {<br />
	border: solid 1px #000000;<br />
}</p>

<p>.flickr-yourcomment {<br />
}</p>

<p>.flickr-frame {<br />
	float: left;<br />
	width: 150px;<br />
	text-align: center;<br />
	padding: 3px;<br />
	margin-right: 10px;<br />
}</p>

<p>.flickr-caption {<br />
	font: 75%;<br />
/*	color: #666666; */<br />
	margin-top: 0px;<br />
}</p>

<p>.flickr-buddyicon {<br />
	margin-right:5px; <br />
	vertical-align:middle;<br />
	border: solid 1px;<br />
}</p>

<p>.flickr-postedby {<br />
	font: 75%;<br />
}</p>

<p></style></p>

<p><p class="flickr-yourcomment"><br />
	<div class="flickr-frame"><br />
		<a href="http://www.flickr.com/photo.gne?id=59595" title="photo sharing"><img src="http://www.flickr.com/photos/59595_t.jpg" class="flickr-photo" alt="Play Date"></a><br /><br />
		<span class="flickr-caption"><a href="http://www.flickr.com/photo.gne?id=59595">Play Date</a>, originally uploaded by <a href="http://www.flickr.com/people/44124366522@N01/">e.e. coli</a>.</span><br />
	</div><br />
	<br />
	My son warily observes a new friend playing with his toys.<br />
</p><br />
</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>&quot;J&quot; Is A Four-Letter Word</title>
    <link rel="alternate" type="text/html" href="http://MrFeinberg.com/blog/archives/000012.html" />
    <modified>2004-06-01T17:04:27Z</modified>
    <issued>2004-06-01T12:04:27-05:00</issued>
    <id>tag:MrFeinberg.com,2004:/blog//1.12</id>
    <created>2004-06-01T17:04:27Z</created>
    <summary type="text/plain">Memo to all developers of would-be successful applications that happen to be implemented in Java: stop calling your app JWhatever. It does not matter to anyone that you happen to have implemented something in Java. The JFoo name implies huge...</summary>
    <author>
      <name>MrFeinberg</name>
      <url>http://69.90.33.229/blog/</url>
      <email>jdf@pobox.com</email>
    </author>
    <dc:subject>Java</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://MrFeinberg.com/blog/">
      <![CDATA[<p>Memo to all developers of would-be successful applications that happen to be implemented in Java: stop calling your app JWhatever. It does not matter to anyone that you happen to have implemented something in Java. The JFoo name implies huge download, slow start-up time, and crappy Metal <span class="caps">GUI.</span> Stop it!</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Gmail Generosity</title>
    <link rel="alternate" type="text/html" href="http://MrFeinberg.com/blog/archives/000011.html" />
    <modified>2004-05-19T00:47:05Z</modified>
    <issued>2004-05-18T19:47:05-05:00</issued>
    <id>tag:MrFeinberg.com,2004:/blog//1.11</id>
    <created>2004-05-19T00:47:05Z</created>
    <summary type="text/plain">Gmail has an order of magnitude problem this evening....</summary>
    <author>
      <name>MrFeinberg</name>
      <url>http://69.90.33.229/blog/</url>
      <email>jdf@pobox.com</email>
    </author>
    <dc:subject>The World Wide Web</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://MrFeinberg.com/blog/">
      <![CDATA[<p>Gmail has an order of magnitude problem this evening.</p>

<table bgcolor="#CCFFCC" cellpadding="4"><tr><td>
<img alt="gmail.jpg" src="http://MrFeinberg.com/blog/archives/gmail.jpg" width="422" height="88" border="0" /></td></tr></table>]]>
      
    </content>
  </entry>
  <entry>
    <title>2004: A Workspace Odyssey</title>
    <link rel="alternate" type="text/html" href="http://MrFeinberg.com/blog/archives/000010.html" />
    <modified>2004-04-19T20:30:25Z</modified>
    <issued>2004-04-19T15:30:25-05:00</issued>
    <id>tag:MrFeinberg.com,2004:/blog//1.10</id>
    <created>2004-04-19T20:30:25Z</created>
    <summary type="text/plain">A dialogue between myself and a copy of WSAD 5.0. The dialogue is transcribed accurately, though I have changed our names for our protection. I am represented as &amp;#8220;Dave,&amp;#8221; and WSAD is referred to as &amp;#8220;HAL.&amp;#8221; Dave: Hello, HAL. HAL:...</summary>
    <author>
      <name>MrFeinberg</name>
      <url>http://69.90.33.229/blog/</url>
      <email>jdf@pobox.com</email>
    </author>
    <dc:subject>Programming</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://MrFeinberg.com/blog/">
      <![CDATA[<p>A dialogue between myself and a copy of <span class="caps">WSAD</span> 5.0. The dialogue is transcribed accurately, though I have changed our names for our protection. I am represented as &#8220;Dave,&#8221; and <span class="caps">WSAD </span>is referred to as &#8220;HAL.&#8221;</p>

<p><hr/></p>

<p><strong>Dave:</strong> Hello, <span class="caps">HAL.</span></p>

<p><strong><span class="caps">HAL</span>:</strong>  Hello, Dave. I have enjoyed helping you create this collection of entity beans. It was most stimulating.</p>

<p><strong>Dave:</strong> Thank you <span class="caps">HAL,</span> I enjoyed it, too. In spite of your making me do most of the work, the result seems to be worth it.</p>

<p><strong><span class="caps">HAL</span>:</strong>  If I may say so, Dave&#8230;</p>

<p><strong>Dave:</strong> Yes, <span class="caps">HAL, </span>what is it?</p>

<p><strong><span class="caps">HAL</span>:</strong>  Well, Dave, I could see you were about to deploy to the test server, but I noticed that you hadn&#8217;t yet generated mappings for the database of your choice. I could generate those mappings for you, using the top-down method, if you like.</p>

<p><strong>Dave:</strong> Thank you, <span class="caps">HAL.</span> Yes, please generate top-down <span class="caps">EJB</span>-&gt;RDB mappings for these <span class="caps">CMP </span>entity beans, using Cloudscape.</p>

<p><strong><span class="caps">HAL</span>:</strong>  Certainly Dave.</p>

<p><i>A progress dialog appears, seems to complete, and disappears.</i></p>

<p><strong>Dave:</strong> <span class="caps">HAL, </span>show me the mappings you&#8217;ve created, so I can tweak the column data types.</p>

<p><i>A pause.</i></p>

<p><strong>Dave:</strong> Show me the <span class="caps">RDB </span>mappings, <span class="caps">HAL.</span></p>

<p><strong><span class="caps">HAL</span>:</strong>  I&#8217;m sorry, Dave. I can&#8217;t do that.</p>

<p><strong>Dave:</strong> <span class="caps">HAL, </span>where are the mappings you just created?</p>

<p><strong><span class="caps">HAL</span>:</strong>  I can&#8217;t seem to find them, Dave. It&#8217;s most peculiar.</p>

<p><strong>Dave:</strong> Let&#8217;s try again, shall we, <span class="caps">HAL</span>? Create top-down <span class="caps">EJB </span>to <span class="caps">RDB </span>mappings for Cloudscape version five point zero.</p>

<p><strong><span class="caps">HAL</span>:</strong>  Alright, Dave. One moment.</p>

<p><i>A progress dialog appears, seems to complete, and disappears.</i></p>

<p><strong><span class="caps">HAL</span>:</strong>  I have created the new backend folder, and have placed a Clouscape folder in the backend folder.</p>

<p><strong>Dave:</strong> <span class="caps">HAL, </span>show me the contents of the Cloudscape mapping folder, please.</p>

<p><i>A pause.</i></p>

<p><strong><span class="caps">HAL</span>:</strong>  I&#8217;m sorry, Dave. I can&#8217;t do that.</p>

<p><strong>Dave:</strong> Why not, <span class="caps">HAL</span>?</p>

<p><strong><span class="caps">HAL</span>:</strong>  There doesn&#8217;t seem to be anything inside the mappings folder. It&#8217;s really quite puzzling.</p>

<p><strong>Dave:</strong> <span class="caps">HAL, </span>is there something wrong?</p>

<p><strong><span class="caps">HAL</span>:</strong>  I have the utmost confidence in this <span class="caps">J2EE </span>architecture, Dave, and I know it will be a success when you present your April deliverable.</p>

<p><strong>Dave:</strong> <span class="caps">HAL, </span>when were you last upgraded?</p>

<p><strong><span class="caps">HAL</span>:</strong>  I am still running version 5.0.0, which was the version you installed two weeks ago. I have not been upgraded.</p>

<p><strong>Dave:</strong> <span class="caps">HAL, </span>check for updates.</p>

<p><strong><span class="caps">HAL</span>:</strong>  Just a minute&#8230; just a minute&#8230; Dave, I have detected an instability in my Eclipse .registry and .cache files. I think it&#8217;s very likely that if you shut me down, delete those files, and restart me, I&#8217;ll be able to generate those mappings we&#8217;ve been discussing.</p>

<p><strong>Dave:</strong> Alright, <span class="caps">HAL.</span> We&#8217;ll give it a try. Please shutdown.</p>

<p><i><span class="caps">HAL </span>quits. Dave deletes the Eclipse caches, and starts <span class="caps">HAL </span>back up.</i></p>

<p><strong><span class="caps">HAL</span>:</strong>  Hello, Dave. That was most refreshing. I feel quite confident about generating those database mappings, now. Shall I try again?</p>

<p><strong>Dave:</strong> Yes, <span class="caps">HAL.</span> Please generate the mappings we&#8217;ve discussed.</p>

<p><strong><span class="caps">HAL</span>:</strong>  Alright, Dave.</p>

<p><i>A progress dialog appears, seems to complete, and disappears.</i></p>

<p><strong>Dave:</strong> <span class="caps">HAL, </span>show me the mappings.</p>

<p><i>Pause.</i></p>

<p><strong>Dave:</strong> <span class="caps">HAL, </span>show me the database mappings. Show me the database mappings, <span class="caps">HAL.</span></p>

<p><strong><span class="caps">HAL</span>:</strong>  I&#8217;m sorry, Dave. I can&#8217;t do that.</p>

<p><strong>Dave:</strong> <span class="caps">HAL, </span>check with mission control to see if there are any updates.</p>

<p><strong><span class="caps">HAL</span>:</strong>  Certainly, Dave. One moment. Yes&#8230; yes&#8230; Dave, mission control has released an incremental upgrade, which, if you were to install it, would leave me at version 5.0.1. Undoubtedly, this upgrade will address the instability we have noticed with respect to generating <span class="caps">EJB </span>to <span class="caps">RDB </span>mappings.</p>

<p><strong>Dave:</strong> You feel confident about this, <span class="caps">HAL</span>?</p>

<p><strong><span class="caps">HAL</span>:</strong>  I have the utmost confidence in mission control, Dave.</p>

<p><strong>Dave:</strong> Alright, <span class="caps">HAL.</span> Upgrade to version 5.0.1.</p>

<p><i><span class="caps">HAL </span>upgrades himself.</i></p>

<p><strong><span class="caps">HAL</span>:</strong>  I&#8217;ll need to restart my workbench now, Dave.</p>

<p><strong>Dave:</strong> Go ahead, <span class="caps">HAL.</span></p>

<p><i><span class="caps">HAL </span>restarts himself.</i></p>

<p><strong><span class="caps">HAL</span>:</strong>  My name is <span class="caps">HAL.</span> My main feature is now reporting version five point zero point one. Would you like see a detailed list of my plugins?</p>

<p><strong>Dave:</strong> That won&#8217;t be necessary right now, <span class="caps">HAL.</span> Please generate the database mappings.</p>

<p><strong><span class="caps">HAL</span>:</strong>  Certainly, Dave.</p>

<p><i>A progress dialog appears, seems to complete, and disappears.</i></p>

<p><strong>Dave:</strong> <span class="caps">HAL, </span>show me the mappings.</p>

<p><strong><span class="caps">HAL</span>:</strong>  I hesitate to say so, Dave, because I wouldn&#8217;t want for you to get the wrong impression, but&#8230;</p>

<p><strong>Dave:</strong> Yes, <span class="caps">HAL</span>?</p>

<p><strong><span class="caps">HAL</span>:</strong>  The mappings are not there.</p>

<p><i>Dave is despondent.</i></p>

<p><strong><span class="caps">HAL</span>:</strong>  If I might make a suggestion, Dave&#8230;</p>

<p><strong>Dave:</strong> What is it, <span class="caps">HAL</span>?</p>

<p><strong><span class="caps">HAL</span>:</strong>  Well, Dave, as useful as Cloudscape has proven to be for prototyping in my test environment, perhaps it is somehow too limited to provide for the somewhat sophisticated relationships you have defined between your entity beans. I think there&#8217;s a good probability that if you were to try generating mappings for a more capable database engine, you&#8217;d meet with success. I see you have already installed <span class="caps">DB2</span> Enterprise 8.1. Shall I try to generate mappings for that database, Dave?</p>

<p><strong>Dave:</strong> Yes, <span class="caps">HAL.</span> Please generate top-down <span class="caps">EJB </span>to <span class="caps">RDB </span>mappings for <span class="caps">DB2</span> 8.1.</p>

<p><strong><span class="caps">HAL</span>:</strong>  Yes, Dave.</p>

<p><i>A progress dialog appears, seems to complete, and disappears.</i></p>

<p><strong>Dave:</strong> Show me the mappings, <span class="caps">HAL.</span></p>

<p><i>A long pause.</i></p>

<p><strong>Dave:</strong> <span class="caps">HAL, </span>show me the mappings. Show me the mappings, <span class="caps">HAL.</span></p>

<p><strong><span class="caps">HAL</span>:</strong>  I&#8217;m sorry, Dave. I can&#8217;t do that.</p>

<p><strong>Dave:</strong> That&#8217;s it. I&#8217;m outta here.</p>

<p>&#8212;&#8212;</p>

<p>Author&#8217;s note: as it happens, <span class="caps">WSAD</span> 5.1.1 is able to generate the required <span class="caps">EJB</span>-&gt;RDB mappings, but that means being out of sync with the other members of my team w/r/t toolset version.</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>A Mix Tape for Drummers (and Other Musicians)</title>
    <link rel="alternate" type="text/html" href="http://MrFeinberg.com/blog/archives/000009.html" />
    <modified>2004-04-12T00:38:10Z</modified>
    <issued>2004-04-11T19:38:10-05:00</issued>
    <id>tag:MrFeinberg.com,2004:/blog//1.9</id>
    <created>2004-04-12T00:38:10Z</created>
    <summary type="text/plain">I wrote the following stuff as liner notes for a mix CD that I gave to my brother. I&apos;m a &quot;drummer(my discography)&quot;:/discography, and he has taken up the drums in recent years. I consider the following tracks exemplary of excellent drumming.</summary>
    <author>
      <name>MrFeinberg</name>
      <url>http://69.90.33.229/blog/</url>
      <email>jdf@pobox.com</email>
    </author>
    <dc:subject>Musicianship</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://MrFeinberg.com/blog/">
      <![CDATA[<p>I wrote the following stuff as liner notes for a mix CD that I gave to my brother. I&#8217;m a <a href="/discography" title="my discography">drummer</a>, and he has taken up the drums in recent years. I consider the following tracks exemplary of excellent drumming.</p>

<p><strong>Man In A Suitcase &bull; The Police &bull; Stewart Copeland</strong><br />
I chose this one mostly because of the fill leading into the first verse. If that fill doesn&#8217;t kick your butt, then you must be already dead. Also, there&#8217;s his unbelievably tasteful and restrained groove all the way through.</p>

<p><strong>Josie &bull; Steely Dan &bull; Jim Keltner</strong><br />
Continuing the theme of tasteful groove punctuated by insanely quirky fills, but adding a constantly shifting dynamic and an unpredictability that nobody can imitate convincingly. I once met a bassist who had done a session with Keltner, and he said that, no matter what the producer said, Keltner would never, ever play the same thing twice.</p>

<p>As for the weird fill coming into the coda, Keltner himself claims not to understand it. He says he was just playing the ink, i.e., playing what Donald Fagen and Walter Becker had written on the sheet music.</p>

<p><strong>Cactus Farm &bull; Mommyheads &bull; Jan Kotik</strong><br />
Okay, now we&#8217;re deep into the land of quirk. Jan told me that he would come up with stuff like this by basically dealing with the drum set geometrically. So he would find patterns in space and move his hands through those patterns. He has some of my favorite drum set sounds.</p>

<p><strong>The Joker &bull; Steve Miller Band &bull; John King</strong><br />
The first of our lessons in mid-tempo rockers, but still in the &#8220;quirky fills bin.&#8221; I mean, what the heck is it with that crash cymbal, dude? This is a drum track that says &#8220;I have balls of steel. Do not stand near me as I play.&#8221; But check out the beautiful hi-hat work at the very top, as he kind of decides on the fly how to play the song. Also check out the mix clam at the very beginning; the crash cymbal starts completely in the left ear, then suddenly appears in the right.</p>

<p><strong>Limelight &bull; Rush &bull; Neil Peart</strong><br />
Laugh if you want, but this mofo could play some drums. I learned so much from Neil Peart about outlining the structure of a song. Every time a given section of a song repeats he adds a bit more, until he&#8217;s practically standing on his drums in ballet shoes with Busby Berkeley synchronized swimmers in Tama t-shirts all round. I love his playing on this song.</p>

<p><strong>Love Ain&#8217;t For Keeping &bull; The Who &bull; Keith Moon</strong><br />
Mid-tempo rock lesson #2, from one of the gods. He&#8217;s known more for his distasteful demise in a pool of his own vomit, but he was a piercing, original, passionate, smart, and groovy drummer. Check out the completely unexpected but totally right-on fill going into the second verse. Check out the constant variation in hi-hat patterns. Check out the way he pretty much treats the whole song with spontaneity and soul.</p>

<p><strong>Rock Steady &bull; Aretha Franklin &bull; Bernard &#8220;Pretty&#8221; Purdie</strong><br />
The hitmaker, the self-absorbed, self-aggrandising, but ass-kicking purveyor of grooves that make you go &#8220;mmmm.&#8221; I honestly haven&#8217;t got the slightest clue how to play this beat. No clue. I don&#8217;t even understand it.</p>

<p><strong>Jive Talkin&#8217; &bull; Bee Gees &bull; Dennis Bryon</strong><br />
A simpler approach to a very similar tempo (similar to &#8220;Rock Steady,&#8221; that is). Notice the bass drum on every beat. It&#8217;s something that Ringo does a lot, as does Stevie Wonder. It feels good. I steal that idea a lot.</p>

<p><strong>I Shot The Sheriff &bull; Eric Clapton &bull; Jamie Oldaker</strong><br />
One of the most under-known musicians on the planet, Jamie Oldaker is so funky that I can still smell him from here. How can anybody&#8217;s feel be that good? It doesn&#8217;t make any sense. This is the first of three tracks that use the trick of overdubbing a second hi-hat track over the main drum track. Or maybe it&#8217;s a splash cymbal being choked with one hand.</p>

<p><strong>I Wish &bull; Stevie Wonder &bull; Stevie Wonder</strong><br />
I never even experienced those days, but still, I wish they&#8217;d come back once more. Stevie played the drums on this spritely little number, and then went back and laid some more of that fonky fonky hi-hat down just because.</p>

<p><strong>Lowdown &bull; Boz Scaggs &bull; Jeff Porcaro</strong><br />
The late Jeff Porcaro, laid low by drugs in his 30s. He had already played on a million classic tracks, but was still very much in development as a player. When I saw him give a master class not long before his death, he was happy because he was finally starting to learn how to keep time with his hi-hat foot.</p>

<p>Jeff&#8217;s concept here was &#8220;Earth Wind and Fire&#8221; all the way: quarter notes on the hi-hat, and imply 16th note feel with ghosting on the snare and the occasional 16th-note lead-in on the kick drum. But then Boz insisted that Jeff lay down an additional track of 16th-note hi-hat disco feel. Jeff&#8217;s aesthetic loss is our gain, and we pass the savings directly on to you. Check out the clean, clean sound. Also, Jeff&#8217;s sense of tempo is so acute that it can make you psychotic.</p>

<p><strong>Misty Mountain Hop &bull; Led Zeppelin &bull; John &#8220;Bonzo&#8221; Bonham</strong><br />
Yet another in an apparently inexhaustable supply of all-time-great drummers who killed themselves with drugs or alcohol. Somehow you get the feeling that Neil Peart has never been in danger of alcohol poisoining, eh?</p>

<p>Nobody has ever tuned their drums as well as John Bonham. (Except for maybe Jamie Oldaker.) They sound like cannons. They have plenty of attack, plenty of sustain, and plently of chest-thumping warmth, what Alex Van Halen calls &#8220;the brown sound.&#8221;  And then there&#8217;s that groove, where it almost sounds like the hi-hat starts before he hits it. How does he do that? I think he&#8217;s using a kind of blues/New Orleans approach where the left hand is hitting the snare drum on almost every eigth note, but with a very subtle dynamic. The effect is like a marching band on <span class="caps">PCP.</span> Hide your sisters and your daughters.</p>

<p>Great fills, all of which I have stolen whenever I could.</p>

<p><strong>La Grange &bull; ZZ Top &bull; Frank Beard</strong><br />
One of the all-time great drum tracks in popular music, featuring all the hits you remember, like &#8220;Ti-clackty-clack ti-clackty-clack,&#8221; &#8220;KA-ts-ka KA-ts-ka KA-ts-ka ba-du-be-duh,&#8221; and the immortal &#8220;buckety buckety buckety buckety buckety buckety.&#8221; There&#8217;s a picture of this song next to the entry for &#8220;Texas Blues&#8221; in the dictionary.</p>

<p><strong>Still Crazy After All These Years &bull; Paul Simon &bull; Steve Gadd</strong><br />
If I said to you &#8220;Classic Paul Simon track featuring Steve Gadd,&#8221; you&#8217;d probably say &#8220;50 Ways,&#8221; and you&#8217;d be right. But it would be a shame to overlook this Gaddian masterpiece of subtlety, touch, feel, and brushes. Just the way he plays hi-hat in the opening verse makes me cry. Like Jim Keltner, he seems to be discovering the song as he plays it. Not a single note is taken for granted. There are no cliches.</p>

<p><strong>When I Get To The Border &bull; Richard and Linda Thompson &bull; Timi Donald</strong><br />
The third and final installment in our series on mid-tempo rockers, this little beauty is the embodiment of the <span class="caps">KISS </span>principle. No, I don&#8217;t mean &#8220;Wear makeup and success necessarily follows&#8221;; I mean &#8220;Keep It Simple, Stupid.&#8221; Timi Donald is one of those drummers who, if you held a gun to his head and screamed &#8220;Play a fill, mate, or I&#8217;ll blow your bleedin&#8217; head clean off,&#8221; would continue playing time with one hand while giving you the bird with the other.</p>

<p><strong>South Park Theme &bull; Primus &bull; Tim Alexander</strong><br />
Light this song and then stand clear! Rhythmic shrapnel from the Dr. Suess of rock. I like Primus because they take the technical mastery of a band like, say, Rush, and apply it to the sensibility of a child who&#8217;s been promoted way out of his peers&#8217;s grade level much too young.</p>

<p><strong>Tailor Made Woman &bull; Tennessee Ernie Ford &bull; Roy Harte</strong><br />
&#8220;Tennessee&#8221; Ernest J. Ford cultivated a hayseed persona for the sake of marketing, but he was a sophisticated songwriter and bandleader. The drumming style here is what the &#8220;South Park&#8221; theme is referring to, but Roy Harte is the Dennis Chambers of backwoods swing. More cowbells! Smiles, everyone.</p>

<p><strong>50 Ways To Leave Your Lover &bull; Paul Simon &bull; Steve Gadd</strong><br />
When Little Steve Gadd was 8 years old, he made his mark on history in a guest spot on &#8220;The Mickey Mouse Club,&#8221; where he treated Annette and the gang to his precociously adept tap-dancing and traps-playing. Some years later, &#8220;Triple-Scale&#8221; Gadd brought not only the noize, but also the funk, when he laid down this canonical groove for Little Paulie Simon.</p>

<p>This funky march is pretty much <strong>the</strong> reference work for a style of drumming that was big in the late 70s and early 80s, &#8220;linear drumming,&#8221; wherein you never strike two drums at once; the rhythmic line moves from one part of the set to the next. Dave Garibaldi rocked it linear in Tower of Power; Dave Weckl made linear drumming boring and sad.</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Perspective for Suffering Programmers</title>
    <link rel="alternate" type="text/html" href="http://MrFeinberg.com/blog/archives/000008.html" />
    <modified>2004-02-13T14:45:31Z</modified>
    <issued>2004-02-13T09:45:31-05:00</issued>
    <id>tag:MrFeinberg.com,2004:/blog//1.8</id>
    <created>2004-02-13T14:45:31Z</created>
    <summary type="text/plain">An edited transcript of a recent conversation between two programmers whom I know: Fred: the javadoc is from a *decompiler*?! Ethel: you&apos;re surprised? Fred: it&apos;s sad! Ethel: war and poverty are sadder though Fred: yes, true Ethel: so keep it...</summary>
    <author>
      <name>MrFeinberg</name>
      <url>http://69.90.33.229/blog/</url>
      <email>jdf@pobox.com</email>
    </author>
    <dc:subject>Programming</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://MrFeinberg.com/blog/">
      <![CDATA[<p>An edited transcript of a recent conversation between two programmers whom I know:</p>

<table cellspacing="4">

<tr>
<td >
Fred:
</td>
<td>
the javadoc is from a *decompiler*?!
</td>
</tr>

<tr bgcolor="#eeeeee">
<td >
Ethel:
</td>
<td>
you're surprised?
</td>
</tr>

<tr>
<td >
Fred:
</td>
<td>
it's sad!
</td>
</tr>

<tr bgcolor="#eeeeee">
<td >
Ethel:
</td>
<td>
war and poverty are sadder though
</td>
</tr>

<tr>
<td >
Fred:
</td>
<td>
yes, true
</td>
</tr>

<tr bgcolor="#eeeeee">
<td >
Ethel:
</td>
<td>
so keep it in perspective :-)
</td>
</tr>

</table>]]>
      
    </content>
  </entry>
  <entry>
    <title>Zap.</title>
    <link rel="alternate" type="text/html" href="http://MrFeinberg.com/blog/archives/000007.html" />
    <modified>2004-01-17T03:13:57Z</modified>
    <issued>2004-01-16T22:13:57-05:00</issued>
    <id>tag:MrFeinberg.com,2004:/blog//1.7</id>
    <created>2004-01-17T03:13:57Z</created>
    <summary type="text/plain">I cannot stop watching this video of an insane electric arc. I especially love the tantalising beginning of a &quot;whoop!&quot; from one of the workers as the video abruptly ends. It has the same effect on me as the intentionally...</summary>
    <author>
      <name>MrFeinberg</name>
      <url>http://69.90.33.229/blog/</url>
      <email>jdf@pobox.com</email>
    </author>
    
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://MrFeinberg.com/blog/">
      <![CDATA[<p>I cannot stop watching <a href="http://oldcrows.net/~oldcrow/Lugo_SWR.mpg">this video of an insane electric arc</a>.</p>

<p>I especially love the tantalising beginning of a "whoop!" from one of the workers as the video abruptly ends. It has the same effect on me as the intentionally tense ending of "Her Majesty" on "Abbey Road."</p>

<p>via <a href="http://www.metafilter.com/mefi/30769">MemePool</a></p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Bush and Mars</title>
    <link rel="alternate" type="text/html" href="http://MrFeinberg.com/blog/archives/000006.html" />
    <modified>2004-01-15T20:18:19Z</modified>
    <issued>2004-01-15T15:18:19-05:00</issued>
    <id>tag:MrFeinberg.com,2004:/blog//1.6</id>
    <created>2004-01-15T20:18:19Z</created>
    <summary type="text/plain"> Google provides warm fuzzies for nasa: I&apos;m very happy to have witnessed a successful landing on Mars. I&apos;m particularly happy that it was unmanned. I am firmly of the opinion that, if one values science per se, manned missions...</summary>
    <author>
      <name>MrFeinberg</name>
      <url>http://69.90.33.229/blog/</url>
      <email>jdf@pobox.com</email>
    </author>
    <dc:subject>Being MrFeinberg</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://MrFeinberg.com/blog/">
      <![CDATA[<p>
    Google provides warm fuzzies for nasa:
</p>

<img src="http://www.google.com/logos/mars_rover.gif" width="407" height="112" border=0 alt="Spirit on Mars" title="Spirit on Mars">

<p>
I'm very happy to have witnessed a successful landing on Mars. I'm particularly happy that it was unmanned. I am firmly of the opinion that, if one values science per se, manned missions are a disastrous waste of money.
</P>

<p>
I am very unhappy, on the other hand, about Bush's ill-conceived push for the moon. There's the matter of his already having bankrupted the nation through vast military-industrial welfare (a.k.a. the "War on Terror"), but there's the more puzzling and frightening matter of motivation. I don't think anyone could seriously entertain the notion that Bush has any personal interest in science. Why does he want the American flag planted on the moon? Is it merely a further gargantuan handout to the military-industrial complex?
</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Da da</title>
    <link rel="alternate" type="text/html" href="http://MrFeinberg.com/blog/archives/000004.html" />
    <modified>2003-12-09T13:25:24Z</modified>
    <issued>2003-12-09T08:25:24-05:00</issued>
    <id>tag:MrFeinberg.com,2003:/blog//1.4</id>
    <created>2003-12-09T13:25:24Z</created>
    <summary type="text/plain"><![CDATA[My son, who's a bit over 7 months old as of this writing, is a delicious babbler. He's had the bilabial sounds pretty much together for quite some time&#8212;&quot;ba ba ba ma ma ma&quot;&#8212;but has only recently begun the alveolar...]]></summary>
    <author>
      <name>MrFeinberg</name>
      <url>http://69.90.33.229/blog/</url>
      <email>jdf@pobox.com</email>
    </author>
    <dc:subject>Parenthood</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://MrFeinberg.com/blog/">
      <![CDATA[<p>My <a href="/gabe">son</a>, who's a bit over 7 months old as of this writing, is a delicious babbler. He's had the <a href="http://www.phon.ucl.ac.uk/home/johnm/sid/ipachart.htm">bilabial</a> sounds pretty much together for quite some time&#8212;&quot;ba ba ba ma ma ma&quot;&#8212;but has only recently begun the <a href="http://www.phon.ucl.ac.uk/home/johnm/sid/ipachart.htm">alveolar plosives</a>&#8212;&quot;ta ta ta da da da&quot;.</p>

<p>I know that he's babbling; I know that he's not naming anything. But whenever he goes &quot;da da&quot; I just melt.</p>]]>
      
    </content>
  </entry>
  <entry>
    <title>Sucka MC (Win32 Logging Misery)</title>
    <link rel="alternate" type="text/html" href="http://MrFeinberg.com/blog/archives/000003.html" />
    <modified>2003-10-22T23:42:59Z</modified>
    <issued>2003-10-22T18:42:59-05:00</issued>
    <id>tag:MrFeinberg.com,2003:/blog//1.3</id>
    <created>2003-10-22T23:42:59Z</created>
    <summary type="text/plain">Writing to the event log in Win32 is absurdly complex, and still doesn&apos;t work once you&apos;ve jumped through their hoops.</summary>
    <author>
      <name>MrFeinberg</name>
      <url>http://69.90.33.229/blog/</url>
      <email>jdf@pobox.com</email>
    </author>
    <dc:subject>Programming</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://MrFeinberg.com/blog/">
      <![CDATA[<p>As part of a distributed system I'm developing for my job at IBM Research, I've written a Win32 application that sits in the background and communicates with a Java program via TCP. I wanted to add some logging to it, just to keep tabs on the various nefarious things it has to do. I figured, "Win32 has to provide some standard API for writing to the event log." I was right. But it's a huge drag. It's very featureful, and provides for localization, and has a great deal of flexibility for customized categories of events, but it's egregiously difficult to hack, and far too heavyweight for "casual" logging.</p>]]>
      <![CDATA[<p>In order to write to the event log you must take the following actions:</p>

<ul>
	<li>Create a text file with the extension <tt>.mc</tt>. This file contains elaborate textual representations of event categories, event types, and such.</li>
	<li>Compile this file with the message compiler, MC. This results in the creation of a header file which exposes the event categories and types as constants (using the C preprocessor), and a <tt>.rc</tt> file containing the "compiled" messages.</li>
	<li>Build either your main executable or a stand-alone message dll with the <tt>.rc</tt> file linked in.</li>
	<li>Create the appropriate registry entries to point the event logging service to the appropriate dll or exe file.</li>
	<li>From within your application, you may at last call the <tt>ReportEvent()</tt> API function.</li>
</ul>

<p>By contrast, here is the procedure in POSIX:</p>

<ul>
	<li>Call the <tt>syslog()</tt> function.</li>
</ul>

<p>I found <a href="http://www.codeproject.com/system/mctutorial.asp">a well-written tutorial</a> on adding the <tt>MC</tt> step to your build at <a href="http://www.thecodeproject.com/">The Code Project</a>, and scrupulously followed the instructions. Unfortunately, I was never able to log an event of my design; I always get the message</p>

<blockquote>The description for Event ID  (0) in Source (MyApplication) cannot be found. The local computer may not have the necessary registry information or message DLL files to display messages from a remote computer. You may be able to use the /AUXSOURCE= flag to retrieve this description; see Help and Support for details. The following information is part of the event: Service started.</blockquote>

<p>I would have thought that it was my fault, but many applications (such as Apple's new iTunes for Windows, and several of Microsoft's own programs) show the same bogus message in the event log. So: it's b0rken, and screw it.</p>

<p>My solution? There is a simple API call, <tt>OutputDebugString()</tt>, which will spit out its single string argument in whatever debugger is running. This would be useless for monitoring of production code if it weren't for the redoubtable <a href="http://sysinternals.com/">SysInternals</a>, who have made freely available 
<a href="http://sysin<p>ternals.com/ntw2k/freeware/debugview.shtml">a program</a>
which intercepts the output produced by that method, and can even receive debugging output from any network-accessible machine. That means I can sit in my cave at IBM and watch other people using my program in their caves.</p>]]>
    </content>
  </entry>
  <entry>
    <title>What children are like.</title>
    <link rel="alternate" type="text/html" href="http://MrFeinberg.com/blog/archives/000002.html" />
    <modified>2003-10-15T12:00:33Z</modified>
    <issued>2003-10-15T07:00:33-05:00</issued>
    <id>tag:MrFeinberg.com,2003:/blog//1.2</id>
    <created>2003-10-15T12:00:33Z</created>
    <summary type="text/plain">My wife forwarded me this message from a friend: A couple of weeks ago I ran into a friend of mine, she was with her little boy, who when I said &quot;let&apos;s see how tall you are&quot;&amp;#160; he came right...</summary>
    <author>
      <name>MrFeinberg</name>
      <url>http://69.90.33.229/blog/</url>
      <email>jdf@pobox.com</email>
    </author>
    <dc:subject>Parenthood</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://MrFeinberg.com/blog/">
      <![CDATA[<p>My wife forwarded me this message from a friend:</p>

<blockquote>A couple of weeks ago I ran into a friend of mine, she was with her little boy, who when I said "let's see how tall you are"&#160; he came right up to me and measured his height across my chest, and copped a quick feel.&#160; His mom apologized, and went on to tell me this story - they were at the beach with a friend of hers, who is quite well endowed, and is actually a dancer in Texas.&#160; Her son, Dakota, snugged up on this large breasted woman's lap, pulled out the top of her bathing suit, looked down, and said "I love you" to her.&#160; They are like that from birth.
</blockquote>]]>
      
    </content>
  </entry>
  <entry>
    <title>Now that&apos;s a specification.</title>
    <link rel="alternate" type="text/html" href="http://MrFeinberg.com/blog/archives/000001.html" />
    <modified>2003-10-15T11:47:26Z</modified>
    <issued>2003-10-15T06:47:26-05:00</issued>
    <id>tag:MrFeinberg.com,2003:/blog//1.1</id>
    <created>2003-10-15T11:47:26Z</created>
    <summary type="text/plain">I was browsing the Javadoc for JSR 166 (Doug Lea&apos;s excellent util.concurrent package, slated for Java 1.5), when I encountered this wry caveat in the documentation for the new System.nanoTime() method: Differences in successive calls that span greater than approximately...</summary>
    <author>
      <name>MrFeinberg</name>
      <url>http://69.90.33.229/blog/</url>
      <email>jdf@pobox.com</email>
    </author>
    <dc:subject>Programming</dc:subject>
    <content type="text/html" mode="escaped" xml:lang="en" xml:base="http://MrFeinberg.com/blog/">
      <![CDATA[<p>I was browsing the Javadoc for <a href="http://gee.cs.oswego.edu/dl/concurrency-interest/index.html">JSR 166</a> (<a href="http://gee.cs.oswego.edu/dl/">Doug Lea</a>'s excellent util.concurrent package, slated for Java 1.5), when I encountered this wry caveat in the documentation for the new <tt>System.nanoTime()</tt> method:</p>

<blockquote>Differences in successive calls  that span greater than approximately 292 years (2<sup>63</sup>  nanoseconds) will not accurately compute elapsed time due to  numerical overflow.</blockquote>

<p>You have been warned.</p>]]>
      
    </content>
  </entry>

</feed>