<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7819623</id><updated>2012-01-28T09:13:53.801-05:00</updated><category term='ruby'/><category term='concatenation'/><category term='has_many_polymorphs'/><category term='avatar'/><category term='development'/><category term='stringio'/><category term='privacy'/><category term='require'/><category term='debate'/><category term='earworm'/><category term='purple pleather pants'/><category term='spelling'/><category term='association'/><category term='grammar'/><category term='module'/><category term='cell phones'/><category term='css'/><category term='git'/><category term='stringbuffer'/><category term='gem'/><category term='plugin'/><category term='rails'/><category term='distance'/><category term='reliability'/><category term='t-mobile'/><category term='pointy haired boss'/><category term='range'/><category term='activesupport'/><category term='strings'/><category term='rhetoric'/><category term='probability'/><category term='rant'/><category term='dr. who'/><category term='meme'/><category term='testspec'/><category term='gravatar'/><category term='dry'/><category term='ia'/><category term='english'/><category term='security'/><category term='customer service'/><category term='programming'/><category term='random'/><category term='onomotopoiea'/><category term='jsp'/><category term='music'/><category term='legal'/><category term='rubygems'/><category term='gems'/><category term='information assurance'/><category term='negotiation'/><category term='food'/><category term='argumentation'/><category term='kernel'/><category term='optimization'/><category term='benchmarking'/><category term='caching'/><category term='testing'/><category term='management'/><category term='subversion'/><category term='morality'/><title type='text'>Essays</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>62</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7819623.post-9155878900373967310</id><published>2009-05-23T16:51:00.001-05:00</published><updated>2009-05-31T17:45:56.117-05:00</updated><title type='text'>Moved</title><content type='html'>This blog has moved to &lt;a href="http://jamesarosen.com/" title="Cerulean Confessions"&gt;http://jamesarosen.com/&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-9155878900373967310?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/9155878900373967310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=9155878900373967310' title='113 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/9155878900373967310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/9155878900373967310'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2009/05/moved.html' title='Moved'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>113</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-6170872332278485389</id><published>2009-01-31T10:33:00.003-05:00</published><updated>2009-01-31T10:42:54.905-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='t-mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='customer service'/><category scheme='http://www.blogger.com/atom/ns#' term='cell phones'/><title type='text'>Customer Service WIN</title><content type='html'>&lt;p&gt;I just took a look at my cell phone bill.  I went 254 minutes over . . . which is quite surprising to me because I never use it during the day and I have free nights and weekends.  Or so I thought.  It turns out I only had 400 night minutes and unlimited weekends.  (I was sure I was right, but, of course, we know that human memory is quite &lt;a href="http://en.wikipedia.org/wiki/Confabulation"&gt;fallible&lt;/a&gt;.)&lt;/p&gt;

&lt;p&gt;
So I called up T-Mobile to bitch about them changing my plan on me without me noticing.  But it seems they did not.  I was just wrong.  Nonetheless, they offered to add their "faves" plan or whatever it's called so I could get free calls to my five most frequently called numbers, which, given my bill looks like a &lt;a href="http://en.wikipedia.org/wiki/Power_law"&gt;power law&lt;/a&gt;, will help substantially.)  Normally they want a 2-year contract for that plan, but they knocked it down to one AND BACK-DATED IT so it applies to this bill and I get out of the contract sooner.&lt;/p&gt;

&lt;p&gt;
Major win for T-Mobile.  I've always said I liked their customer service.  Now I remember why I'm not getting an iPhone: stupid AT&amp;T couldn't even tell me my credit card wasn't processing; they just racked up lots of late fees.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-6170872332278485389?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/6170872332278485389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=6170872332278485389' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/6170872332278485389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/6170872332278485389'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2009/01/customer-service-win.html' title='Customer Service WIN'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-6591066329039633511</id><published>2009-01-24T22:07:00.006-05:00</published><updated>2009-01-24T22:25:29.164-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='food'/><title type='text'>My Dream Menu, take 1</title><content type='html'>&lt;h4&gt;Mélange&lt;/h4&gt;
Salad of frisée, radicchio, chive, cucumber, pecans, honey garlic dressing and coconut shavings.

&lt;h4&gt;Kanso&lt;/h4&gt;
Fresh whole wheat pasta, olive oil, fresh cracked black pepper, sea salt.  Served with a side bowl of Parmesan snow.

&lt;h4&gt;Forte&lt;/h4&gt;
Four ounce flatiron steak with two grilled jumbo shrimp, drizzled in walnut oil.

&lt;h4&gt;Concision&lt;/h4&gt;
Lime sorbet scooped with a melon-baller into a rocks glass.

&lt;h4&gt;(needs a name)&lt;/h4&gt;
Bacon and leek consommé.

&lt;h4&gt;(also needs a name; austerity?)&lt;/h4&gt;
Trout and asparagus almondine.

&lt;h4&gt;Indulgence&lt;/h4&gt;
Double chocolate bombe with cappucino ice cream.

&lt;h4&gt;Digestive&lt;/h4&gt;
Krupnik, Limoncello, etc.

&lt;p&gt;I might like to fit in a tempura somewhere.  Thoughts?  Also, bacon is particularly tough to do consommé with because it has lots of fat and little to no cartilage and tendon (needed for the gelatin) &amp;mdash; perhaps there's another interesting meat to be used?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-6591066329039633511?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/6591066329039633511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=6591066329039633511' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/6591066329039633511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/6591066329039633511'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2009/01/my-dream-menu-take-1.html' title='My Dream Menu, take 1'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-6467101584215483746</id><published>2009-01-20T20:52:00.002-05:00</published><updated>2009-01-20T20:54:20.892-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='grammar'/><category scheme='http://www.blogger.com/atom/ns#' term='english'/><title type='text'>English as She is Spoke, Part 3: the Ugly</title><content type='html'>Today was a joyous day in our country.  It was also both a &lt;em&gt;monumental&lt;/em&gt; and &lt;em&gt;momentous&lt;/em&gt; occasion.

It was &lt;strong&gt;not&lt;/strong&gt; a "monumentous" one.  The opinions of multiple callers and pundits on NPR today notwithstanding.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-6467101584215483746?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/6467101584215483746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=6467101584215483746' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/6467101584215483746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/6467101584215483746'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2009/01/english-as-she-is-spoke-part-3-ugly.html' title='English as She is Spoke, Part 3: the Ugly'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-2919174908547825975</id><published>2008-11-17T22:06:00.004-05:00</published><updated>2008-11-17T22:08:47.506-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grammar'/><category scheme='http://www.blogger.com/atom/ns#' term='onomotopoiea'/><category scheme='http://www.blogger.com/atom/ns#' term='english'/><title type='text'>English as She is Spoke, Part 2: the Good</title><content type='html'>"Meh" was &lt;a href="http://www.google.com/hostednews/ap/article/ALeqM5hyI8ZfLlWGArP3zCmdKxZldyCKAwD94GBL381"&gt;recently added&lt;/a&gt; to the Collins English Dictionary.  My fuddy-duddy post of yesterday notwithstanding, this makes me happy.  I enjoy having an onomotopoetic word for apathy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-2919174908547825975?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/2919174908547825975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=2919174908547825975' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/2919174908547825975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/2919174908547825975'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/11/english-as-she-is-spoke-part-2-good.html' title='English as She is Spoke, Part 2: the Good'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-8113217056080995222</id><published>2008-11-17T00:19:00.004-05:00</published><updated>2008-11-17T00:29:31.569-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spelling'/><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='english'/><title type='text'>English as She is Spoke</title><content type='html'>&amp;lt;rant&amp;gt;
Twenty percent of the words in the title of Richard Ford's &lt;a href="http://www.amazon.com/Lay-Land-Richard-Ford/dp/0679454683"&gt;The Lay of the Land&lt;/a&gt; are misspelled!  In the title!  You're telling me not even his editor remembers the word "ley?"

I suppose I shouldn't be surprised: Firefox doesn't know the word.  It snubs me with its little red dotted line, suggesting instead "la," and "lye," and even "hey" and "levy."
&amp;lt;/rant&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-8113217056080995222?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/8113217056080995222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=8113217056080995222' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/8113217056080995222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/8113217056080995222'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/11/english-as-she-is-spoke.html' title='English as She is Spoke'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-6334571976219785453</id><published>2008-11-02T18:39:00.003-05:00</published><updated>2008-11-02T18:51:05.010-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='earworm'/><category scheme='http://www.blogger.com/atom/ns#' term='dr. who'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>Sometimes, having been a music major is a curse</title><content type='html'>&lt;p&gt;There's a moment in Mendelssohn's Hebrides Overture that reminds me of something, but I can't pin it down.  It's about halfway through; 4'55" in on the André Previn recording.  It starts out in the celli, I think, and then moves up.  Could it be in a recent action movie?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Later...&lt;/em&gt;I'm not sure this is what I was thinking of, but it's pretty similar to the base line of the new Dr. Who theme.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-6334571976219785453?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/6334571976219785453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=6334571976219785453' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/6334571976219785453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/6334571976219785453'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/11/sometimes-having-been-music-major-is.html' title='Sometimes, having been a music major is a curse'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-8502087903294702697</id><published>2008-10-02T21:05:00.007-05:00</published><updated>2008-10-02T21:17:40.949-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='meme'/><category scheme='http://www.blogger.com/atom/ns#' term='legal'/><category scheme='http://www.blogger.com/atom/ns#' term='privacy'/><title type='text'>Supreme Court History</title><content type='html'>&lt;p&gt;In response to the &lt;a href="http://abstract-me.livejournal.com/323561.html"&gt;Know Your Supreme Court History meme&lt;/a&gt;, I offer &lt;a href="http://historyofprivacy.net/Roberson.htm"&gt;Roberson v. Rochester Folding Box Company&lt;/a&gt;.  Admittedly, it's a New York Court of Appeals decision, not a U.S. Supreme Court decision, but it has stood the test of time.&lt;/p&gt;

&lt;h4&gt;What happened&lt;/h4&gt;
&lt;p&gt;&lt;blockquote&gt;"The complaint alleges that the Franklin Mills Co., one of the defendants, was engaged in a general milling business and in the manufacture and sale of flour; that before the commencement of the action, without the knowledge or consent of plaintiff, defendants, knowing that they had no right or authority so to do, had obtained, made, printed, sold and circulated about 25,000 lithographic prints, photographs and likenesses of plaintiff, made in a manner particularly set up in the complaint; that upon the paper upon which the likenesses were printed and above the portrait there were printed, in large, plain letters, the words, "Flour of the Family," and below the portrait in large capital letters..."&lt;/blockquote&gt;&lt;/p&gt;

&lt;p&gt;In other words, a company used a woman's picture to advertise their product, but it didn't ask her permission or offer her payment for the picture and/or the endorsement.&lt;/p&gt;

&lt;h4&gt;Why it's important&lt;/h4&gt;
&lt;p&gt;&lt;i&gt;Roberson&lt;/i&gt; is perhaps &lt;em&gt;the&lt;/em&gt; bedrock privacy case in American history.  There is no obvious precedent: it is the first case to set the standard that "identity" is a legal object and that it is legally owned by its subject.  The decision states that, &lt;blockquote&gt;"It may be said in the first place that the theory upon which this action is predicated is new."&lt;/blockquote&gt;&lt;/p&gt;

&lt;p&gt;The case also demonstrates that even though privacy rights are not explicitly enumerated in the Constitution, they can still trump the First Amendment.  It's important that the plaintiff did &lt;em&gt;not&lt;/em&gt; allege libel, merely that they misappropriated her likeness.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-8502087903294702697?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/8502087903294702697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=8502087903294702697' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/8502087903294702697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/8502087903294702697'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/10/supreme-court-history.html' title='Supreme Court History'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-4000793498020696625</id><published>2008-09-14T19:08:00.002-05:00</published><updated>2008-09-14T19:11:02.416-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='morality'/><title type='text'>Loyalty Scale</title><content type='html'>&lt;p&gt;In part III of the continuing series on morality, I took the "Identification with All Humanity" quiz at &lt;a href="http://www.yourmorals.org/"&gt;yourmorals.org&lt;/a&gt;.  The results:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;&amp;nbsp;&lt;/th&gt;&lt;th&gt;Obama Supporters&lt;/th&gt;&lt;th&gt;McCain Supporters&lt;/th&gt;&lt;th&gt;Me&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;th&gt;Community&lt;/th&gt;&lt;td&gt;3.0&lt;/td&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;2.0&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;th&gt;Country&lt;/th&gt;&lt;td&gt;3.0&lt;/td&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;th&gt;World&lt;/th&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;2.6&lt;/td&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-4000793498020696625?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/4000793498020696625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=4000793498020696625' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/4000793498020696625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/4000793498020696625'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/09/loyalty-scale.html' title='Loyalty Scale'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-7409370997441535613</id><published>2008-09-14T19:04:00.003-05:00</published><updated>2008-09-14T19:07:07.498-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='morality'/><title type='text'>Moral Dilemmas Results</title><content type='html'>&lt;p&gt;In part II of the continuing series on morality, I took the "Moral Dilemmas" quiz at &lt;a href="http://www.yourmorals.org"/&gt;yourmorals.org&lt;/a&gt;.  The results:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;&amp;nbsp;&lt;/th&gt;&lt;th&gt;Average&lt;/th&gt;&lt;th&gt;Me&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;th&gt;Impersonal Dilemmas&lt;/th&gt;&lt;td&gt;3.0&lt;/td&gt;&lt;td&gt;6.0&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;th&gt;Personal Dilemmas&lt;/th&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;1.0&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-7409370997441535613?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/7409370997441535613/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=7409370997441535613' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/7409370997441535613'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/7409370997441535613'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/09/moral-dilemmas-results.html' title='Moral Dilemmas Results'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-6989250023045978255</id><published>2008-09-14T18:58:00.005-05:00</published><updated>2008-09-14T19:07:58.364-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='morality'/><title type='text'>Moral Foundation Results</title><content type='html'>&lt;p&gt;I just took the highly informative "Moral Foundation" quiz at &lt;a href="http://www.yourmorals.org/"&gt;yourmorals.org&lt;/a&gt;.  The results:&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;&amp;nbsp;&lt;/th&gt;&lt;th&gt;Liberals&lt;/th&gt;&lt;th&gt;Conservatives&lt;/th&gt;&lt;th&gt;Me&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;th&gt;Harm&lt;/th&gt;&lt;td&gt;3.6&lt;/td&gt;&lt;td&gt;2.9&lt;/td&gt;&lt;td&gt;4.0&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;th&gt;Fairness&lt;/th&gt;&lt;td&gt;3.7&lt;/td&gt;&lt;td&gt;3.0&lt;/td&gt;&lt;td&gt;4.0&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;th&gt;Loyalty&lt;/th&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;td&gt;3.2&lt;/td&gt;&lt;td&gt;2.7&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;th&gt;Authority&lt;/th&gt;&lt;td&gt;2.1&lt;/td&gt;&lt;td&gt;3.3&lt;/td&gt;&lt;td&gt;2.2&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;th&gt;Purity&lt;/th&gt;&lt;td&gt;1.3&lt;/td&gt;&lt;td&gt;2.9&lt;/td&gt;&lt;td&gt;1.0&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-6989250023045978255?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/6989250023045978255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=6989250023045978255' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/6989250023045978255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/6989250023045978255'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/09/moral-foundation-results.html' title='Moral Foundation Results'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-5956389959173091864</id><published>2008-07-05T15:50:00.002-05:00</published><updated>2008-07-05T16:01:18.631-05:00</updated><title type='text'>Comcast, Airport Express, and DHCP</title><content type='html'>&lt;p&gt;I just got a new Comcast high-speed cable account today.  It was a bit of a hassle to get the setup utility to run properly on OSX, but it did eventually.  Then I had a working connection from laptop to cable modem to the world.&lt;/p&gt;
&lt;p&gt;I wanted to use my Airport Express as a wireless router; this went less smoothly.  I fiddled with this setting and that, but could not get the Airport Express to get a DHCP lease.  &lt;a href='http://forums.macrumors.com/archive/index.php/t-129311.html'&gt;This discussion&lt;/a&gt;, however, solved my problem immediately: the trick is that the cable modem remembers the MAC address of the computer you set up the account with.  To fix the problem, just power-cycle the modem while the Airport Express is plugged in to the LAN port.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-5956389959173091864?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/5956389959173091864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=5956389959173091864' title='22 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/5956389959173091864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/5956389959173091864'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/07/comcast-airport-express-and-dhcp.html' title='Comcast, Airport Express, and DHCP'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-3560170191118612641</id><published>2008-06-25T10:18:00.003-05:00</published><updated>2008-06-25T10:30:02.727-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='stringio'/><category scheme='http://www.blogger.com/atom/ns#' term='strings'/><category scheme='http://www.blogger.com/atom/ns#' term='concatenation'/><category scheme='http://www.blogger.com/atom/ns#' term='stringbuffer'/><title type='text'>Ruby Needs a StringBuffer</title><content type='html'>&lt;p&gt;
john has written a little &lt;a href='http://macdevelopertips.com/ruby/using-a-string-as-a-file-in-ruby.html'&gt;post&lt;/a&gt;
about using a String as a File (really as an IO) in Ruby.  He does a great job explaining how &lt;tt&gt;StringIO&lt;/tt&gt;s work for reading characters.  They're particularly good for unit tests on IO operations.
&lt;/p&gt;

&lt;p&gt;
What john doesn't mention, however, is that &lt;tt&gt;StringIO&lt;/tt&gt; is only an 'I.'  It has no 'O.'  You &lt;em&gt;can't&lt;/em&gt; do this, for example:
&lt;/p&gt;

&lt;pre&gt;&lt;code class='ruby'&gt;s = StringIO.new
s &lt;&lt; 'foo'
s &lt;&lt; 'bar'
s.to_s
# =&gt; should be "foo\nbar"
# =&gt; really is ''
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
Ruby really needs a &lt;tt&gt;StringBuffer&lt;/tt&gt; just like the one Java has.  &lt;tt&gt;StringBuffer&lt;/tt&gt;s serve two important purposes.  First, they let you test the output half of what Ruby's &lt;tt&gt;StringIO&lt;/tt&gt; does.  Second, they are useful for building up long strings from small parts -- something that &lt;a href='http://www.joelonsoftware.com/articles/fog0000000319.html'&gt;Joel&lt;/a&gt; reminds us over and over again is otherwise very very slow.
&lt;/p&gt;

&lt;p&gt;
So I wrote a &lt;a href='http://github.com/gcnovus/ruby-tidbits/tree/master/lib/tidbits/core_extensions/io/string_buffer.rb'&gt;StringBuffer&lt;/a&gt;,
but it's not very good, and it's not very fast.  What we need is one written in C in the core Ruby library.  Now &lt;em&gt;that&lt;/em&gt; will help Rails scale.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-3560170191118612641?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/3560170191118612641/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=3560170191118612641' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/3560170191118612641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/3560170191118612641'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/06/ruby-needs-stringbuffer.html' title='Ruby Needs a StringBuffer'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-5485052486386168439</id><published>2008-05-27T17:59:00.002-05:00</published><updated>2008-05-27T18:02:37.089-05:00</updated><title type='text'>Handling Routing and Dispatch Errors in Rails</title><content type='html'>&lt;p&gt;
I've been trying to show nice error pages for &lt;code&gt;RoutingError&lt;/code&gt;s and &lt;code&gt;MethodNotAllowed&lt;/code&gt; errors, which are raised outside of the context of a &lt;code&gt;Controller&lt;/code&gt;.  I dug into the routing and dispatch code and finally realized that those errors cause a direct call to &lt;code&gt;:rescue_action&lt;/code&gt;, bypassing &lt;code&gt;:rescue_action_with_handler&lt;/code&gt;.
&lt;/p&gt;
&lt;p&gt;
I've put the result at &lt;a href='http://pastie.caboo.se/204355'&gt;http://pastie.caboo.se/204355&lt;/a&gt;.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-5485052486386168439?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/5485052486386168439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=5485052486386168439' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/5485052486386168439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/5485052486386168439'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/05/handling-routing-and-dispatch-errors-in.html' title='Handling Routing and Dispatch Errors in Rails'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-2829964182637899669</id><published>2008-04-25T18:45:00.002-05:00</published><updated>2008-12-11T13:33:22.536-05:00</updated><title type='text'>9PM: End of the World</title><content type='html'>&lt;p&gt;I went to check the weather on &lt;a href='http://www.weather.com'&gt;weather.com&lt;/a&gt; today.  I like their hour-by-hour feature.  Unfortunately, today it gave me some odd information: &lt;img src='http://1.bp.blogspot.com/_Fr8odXT8I_s/SBJtLPxMsVI/AAAAAAAAADA/evnHRd8Kalc/s320/Picture+1.png' title='Weather.com Hour-by-Hour' /&gt;&lt;br/&gt;
So 8PM: Thunderstorms; 9PM: world ends?
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-2829964182637899669?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/2829964182637899669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=2829964182637899669' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/2829964182637899669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/2829964182637899669'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/04/9pm-end-of-world.html' title='9PM: End of the World'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Fr8odXT8I_s/SBJtLPxMsVI/AAAAAAAAADA/evnHRd8Kalc/s72-c/Picture+1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-8132265017801870429</id><published>2008-04-16T13:22:00.002-05:00</published><updated>2008-04-16T13:33:00.986-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pointy haired boss'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='purple pleather pants'/><title type='text'>Really Simple Development With Git</title><content type='html'>&lt;p&gt;Once you've got your hot new app up on &lt;a href='http://github.com'&gt;GitHub&lt;/a&gt;, you want to work on it, but you're used to the Subversion world of update-code-test-update-commit.  What does a good code cycle look like in Git?&lt;/p&gt;

&lt;p&gt;My friends, I tell you I have the answer.  And it's simple.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;git checkout -b nifty_name_for_nifty_new_feature&lt;/li&gt;
&lt;li&gt;git pull [repository [branch]]&lt;/li&gt;
&lt;li&gt;for each submodule of interest: cd path/to/submodule; git pull&lt;/li&gt;
&lt;li&gt;[code code code]&lt;/li&gt;
&lt;li&gt;[test test test]&lt;/li&gt;
&lt;li&gt;git add files/related/to/commit
&lt;li&gt;git commit -m 'nifty feature done'&lt;/li&gt;
&lt;li&gt;take 5 minute break to feed puppy or check roast in oven&lt;/li&gt;
&lt;li&gt;git checkout master&lt;/li&gt;
&lt;li&gt;git merge nifty_name_for_nifty_new_feature&lt;/li&gt;
&lt;li&gt;git branch -D nifty_name_for_nifty_new_feature&lt;/li&gt;
&lt;li&gt;git push&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This keeps all development in tight little branches.  The branches only exist locally, and go away when the feature makes its way to master.  Happiness.  Especially when teammates ask you to stop working on nifty_feature and fix acts_as_pointy_haired_boss.  In that case, I recommend "fixing_bug_12345" as the branch name; that helps you remember what the branch does after you get back from the really boring meeting on how you can sell more purple pleather pants to Auckland this year.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-8132265017801870429?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/8132265017801870429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=8132265017801870429' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/8132265017801870429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/8132265017801870429'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/04/really-simple-development-with-git.html' title='Really Simple Development With Git'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-4159456810384056098</id><published>2008-04-16T13:00:00.003-05:00</published><updated>2008-04-16T13:21:41.989-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rhetoric'/><category scheme='http://www.blogger.com/atom/ns#' term='argumentation'/><category scheme='http://www.blogger.com/atom/ns#' term='debate'/><category scheme='http://www.blogger.com/atom/ns#' term='negotiation'/><title type='text'>Thank You For Arguing</title><content type='html'>&lt;p&gt;I bought Jay Heinrichs' &lt;a href="http://www.thankyouforarguing.com/"&gt;Thank You For Arguing&lt;/a&gt; last summer, but never got around to more than glancing at it.  I've been reading it at pretty much every chance over the past few days, though.  It's absolutely fantastic!
&lt;/p&gt;
&lt;p&gt;One of the main theses of the book seems to be that people shouldn't think of rhetoric as manipulation, and Jay even does little sidebars to point out when he's using techniques within the book to convince you of his points, but I still can't help but feel manipulated.  Ah well, it doesn't stop me from wanting to practice my rhetoric more.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-4159456810384056098?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/4159456810384056098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=4159456810384056098' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/4159456810384056098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/4159456810384056098'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/04/thank-you-for-arguing.html' title='Thank You For Arguing'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-6930267745702298162</id><published>2008-03-27T17:27:00.003-05:00</published><updated>2008-04-16T13:22:13.826-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='avatar'/><category scheme='http://www.blogger.com/atom/ns#' term='gravatar'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='gems'/><title type='text'>New Gem: Avatar</title><content type='html'>&lt;p&gt;I released Avatar version 0.0.3 today.  This gem offers avatar support for a variety of sources.  It's not Rails-specific, but to use it in a Rails app, do something like the following.&lt;/p&gt;
&lt;p&gt;In app/helpers/people_helper.rb:&lt;/p&gt;
&lt;pre&gt;&lt;code class='ruby'&gt;class PeopleHelper
  include Avatar::View::ActionViewSupport

  def default_avatar_url(size)
    req = controller.request
    "#{req.protocol}#{req.host_with_port}#{image_path("/images/avatar_default_#{size}.png")}"
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;app/views/people/show.html.erb:&lt;/p&gt;
&lt;pre&gt;&lt;code class='ruby'&gt;&lt;%= avatar_tag(@current_user, :size =&gt; 40, :default =&gt; default_avatar_url(:small) %&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The default settings will check for a &lt;a href="http://gravatar.com"&gt;Gravatar&lt;/a&gt; for &lt;code class='ruby'&gt;@current_user.email&lt;/code&gt;.  There are other implementations, including one that works with the &lt;a href="http://www.kanthak.net/opensource/file_column/"&gt;file_column&lt;/a&gt; plugin.  I'll be happy to add more implementations; the project is hosted on &lt;a href="http://github.com/gcnovus/avatar/tree/master"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-6930267745702298162?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/6930267745702298162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=6930267745702298162' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/6930267745702298162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/6930267745702298162'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/03/new-gem-avatar.html' title='New Gem: Avatar'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-818416345320285733</id><published>2008-03-11T17:52:00.004-05:00</published><updated>2008-03-11T17:58:00.479-05:00</updated><title type='text'>Shelves: Rack Extensions</title><content type='html'>&lt;p&gt;
I think Christian's &lt;a href="http://rack.rubyforge.org/"&gt;Rack&lt;/a&gt; is fantastic.  It's such a good idea, in fact, that Ab5tract and I are starting a GitHub projct called Shelves for Rack extensions.  Our mission is to do request and response support for all the non-HTTP types of interaction that a website needs to do these days.  We envision SMS, Email, and Twitter queries, and maybe even Port Knocking.  Shelves will be modular, with lots of support classes for new request/response media.
&lt;/p&gt;
&lt;p&gt;More info as we get near a usable version.  If anyone wants to contribute, drop us a line.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-818416345320285733?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/818416345320285733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=818416345320285733' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/818416345320285733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/818416345320285733'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/03/shelves-rack-extensions.html' title='Shelves: Rack Extensions'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-5143344805602550630</id><published>2008-03-01T05:37:00.004-05:00</published><updated>2008-03-01T09:31:27.268-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='caching'/><category scheme='http://www.blogger.com/atom/ns#' term='benchmarking'/><category scheme='http://www.blogger.com/atom/ns#' term='association'/><category scheme='http://www.blogger.com/atom/ns#' term='has_many_polymorphs'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='optimization'/><title type='text'>The Final Word on Rails Association Extension</title><content type='html'>&lt;p&gt;
There has been a great deal of debate on how to extend Rails Associations.
Ryan &lt;a href="http://ryandaigle.com/articles/2006/12/3/extend-your-activerecord-association-methods"&gt;
discusses&lt;/a&gt; the "block" method:&lt;/p&gt;
&lt;pre&gt;&lt;code class='ruby'&gt;class Organization &lt; ActiveRecord::Base
  has_many :people do
    def find_active
      find(:all, :conditions =&gt; ["active = ?", true])
    end
  end
end
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This is identical to the "extend" method; in fact Rails converts a "block" into an "extend":&lt;/p&gt;
&lt;pre&gt;&lt;code class='ruby'&gt;module FindActiveExtension
  def find_active
    find(:all, :conditions =&gt; ["active = ?", true])
  end
end

class Organization &lt; ActiveRecord::Base
  has_many :people, :extend =&gt; FindActiveExtension
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The commenters then debate the merits of the "class method" method:&lt;/p&gt;
&lt;pre&gt;&lt;code class='ruby'&gt;class Person &lt; ActiveRecord::Base
  def self.find_active
    find(:all, :conditions =&gt; ["active = ?", true])
  end
end

class Organization &lt; ActiveRecord::Base
  has_many :people
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In all three cases (really two), you can call something like:&lt;/p&gt;
&lt;pre&gt;&lt;code class='ruby'&gt;organization.people.find_active&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
&lt;em&gt;There are differences, though!&lt;/em&gt;
I ran some experiments to find out how each works, and found that unless
you have some particular reason not to, you should always use the "block"
or "extend" version, for two reasons:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The "class method" version does not allow manual caching.
&lt;pre&gt;&lt;code class='ruby'&gt;class Person &lt; ActiveRecord::Base
  def self.find_active
    @active ||= find(:all, :conditions =&gt; ["active = ?", true])
  end
end
&lt;/code&gt;&lt;/pre&gt;
Will break, as Adam T. mentioned in the comments.
&lt;/li&gt;
&lt;li&gt;
The association version is slightly faster then the class version.
I created the same has_many relationship to two pairs of classes
(Person has_many Things; User has_many Widgets).
I then added 6 sub-association selectors (red, green, blue,
small, medium, large) in different ways:
Thing had class methods; User had the same methods embedded in
the has_many association.  I then ran benchmarks on 100 users/people
and 5000 things/widgets (with identical respective associations).
The x1 times are for finding all of 6 sub-association lookups on
every Person (Class) and User (Association).  The x2 times are
for finding and reloading all 6 (that is, to gain the benefit of
any automatic caching done by Rails or the database).
In absolute times:
&lt;pre&gt;                           user     system      total        real
Class (x1):            4.650000   0.680000   5.330000 ( 11.320903)
Association (x1):      4.530000   0.670000   5.200000 ( 10.861711)
Class (x2):            9.240000   1.360000  10.600000 ( 21.934539)
Association (x2):      9.000000   1.330000  10.330000 ( 21.066327)
&lt;/pre&gt;
Dividing the bottom two rows in half:
&lt;pre&gt;                           user     system      total        real
Class (x1):            4.650000   0.680000   5.330000 ( 11.320903)
Association (x1):      4.530000   0.670000   5.200000 ( 10.861711)
Class (x2)/2:          4.620000   0.680000   5.300000 ( 10.967270)
Association (x2)/2:    4.500000   0.665000   5.165000 ( 10.533164)
&lt;/pre&gt;
Dividing all rows by the number of queries performed (per/query time):
&lt;pre&gt;                           user     system      total        real
Class (x1)/600:        0.007750   0.001133   0.008883 (  0.018868)
Association (x1)/600:  0.007550   0.001117   0.008667 (  0.018103) 
Class (x2)/1200:       0.007700   0.001133   0.008833 (  0.018279)
Association (x2)/1200: 0.007500   0.001108   0.008608 (  0.017555)
&lt;/pre&gt;
The association version is a little faster, and gains more from the
automatic caching Rails does.
&lt;/li&gt;
&lt;p&gt;You can check out the experiment at &lt;a href="https://svn.u-presence.com/svn/experiments/association_vs_class/"&gt;https://svn.u-presence.com/svn/experiments/association_vs_class/&lt;/a&gt;
(username guest, no password).
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-5143344805602550630?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/5143344805602550630/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=5143344805602550630' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/5143344805602550630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/5143344805602550630'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/03/final-word-on-rails-association.html' title='The Final Word on Rails Association Extension'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-2756011765886776693</id><published>2008-02-26T16:23:00.004-05:00</published><updated>2008-02-27T14:37:34.322-05:00</updated><title type='text'>Pesto Caesar Salad</title><content type='html'>&lt;p&gt;I've been experimenting with salad dressings for a head of Romaine I got recently, and finally came up with the following.  For one large salad:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;5 leaves Romaine (I leave the rib in; if you don't like it, use 7 rib-less leaves)&lt;/li&gt;
&lt;li&gt;1&amp;frac12;-2 tsp lemon juice&lt;/li&gt;
&lt;li&gt;2-3 tsp olive oil&lt;/li&gt;
&lt;li&gt;8-10 drops Worcestershire sauce (instead of anchovies!)&lt;/li&gt;
&lt;li&gt;a few (ok, several for me) turns of fresh-ground black pepper&lt;/li&gt;
&lt;li&gt;1 tsp pesto (I use Classico if I haven't recently made a fresh batch)&lt;/li&gt;
&lt;li&gt;about 2 Tbsp. freshly shaved Parmesan (see below)&lt;/li&gt;
&lt;li&gt;&amp;frac14; tsp onion powder or some finely minced white onion&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Put everything but the lettuce and the cheese into a large bowl.&lt;/li&gt;
&lt;li&gt;Mix vigorously&lt;/li&gt;
&lt;li&gt;Tear up the lettuce and toss in the bowl&lt;/li&gt;
&lt;li&gt;Shred the Parmesan.  You can use a vegetable peeler, but I find the best method
is to use the back of a paring knife to peel off shreds.  Don't use a cheese grater
&amp;mdash; at least, not a fine one.  The goal is about 1cm&lt;sup&gt;2&lt;/sup&gt; shreds.&lt;/li&gt;
&lt;li&gt;Eat tastiness&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-2756011765886776693?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/2756011765886776693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=2756011765886776693' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/2756011765886776693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/2756011765886776693'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/02/pesto-caesar-salad.html' title='Pesto Caesar Salad'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-5035381128521265812</id><published>2008-02-19T23:52:00.005-05:00</published><updated>2008-02-20T07:47:47.741-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='module'/><title type='text'>with_modules_unavailable and some Module helpers</title><content type='html'>&lt;p&gt;
I've been trying to test a new Rails plugin (stay tuned!), and I've found that I need to have certain Modules unavailable.  This is useful when you need to test that missing Modules will raise errors or if you have behavior conditional on what gems are installed.
&lt;/p&gt;

&lt;p&gt;I wanted something like:&lt;/p&gt;
&lt;pre&gt;&lt;code class='ruby'&gt;...
with_modules_unavailable(Foo, Bar::Baz::Goo) do
  test stuff
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;To get this working, just put the following in your test_helper.rb (this version requires Inflector):&lt;/p&gt;
&lt;pre&gt;&lt;code class='ruby'&gt;Module.class_eval do
  
  def defining_module
    chain = self.to_s.split(/\:\:/)
    chain.pop
    if chain.empty?
      Object
    else
      chain.join('::').constantize
    end
  end
  
  def simple_name
    self.to_s.split(/\:\:/).pop
  end
  
end

Test::Unit::TestCase.class_eval do

  def with_modules_unavailable(*mods, &amp;block)
    Thread.exclusive do
      mods.each do |mod|
        mod.defining_module.send :remove_const, mod.simple_name.to_sym
      end
      yield block
      mods.reverse.each do |mod|
        mod.defining_module.send :const_set, mod.simple_name.to_sym, mod
      end
    end
  end
  
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You can test that it works with:&lt;/p&gt;
&lt;pre&gt;&lt;code class='ruby'&gt;def test_with_modules_unavailable
  with_modules_unavailable(ActiveRecord::Base) do
    assert_raise(NameError) { ::ActiveRecord::Base.class_eval { } }
  end
  assert_nothing_raised { ::ActiveRecord::Base.class_eval { } }
end
&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-5035381128521265812?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/5035381128521265812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=5035381128521265812' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/5035381128521265812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/5035381128521265812'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/02/withmodulesunavailable-and-some-module.html' title='with_modules_unavailable and some Module helpers'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-1930137723474718304</id><published>2008-02-17T21:05:00.004-05:00</published><updated>2008-02-20T07:48:39.222-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='range'/><title type='text'>Updates to active_support_hacks</title><content type='html'>&lt;p&gt;
I've made a couple of updates to my &lt;code&gt;active_support_hacks&lt;/code&gt;
&lt;/p&gt;

&lt;h4&gt;First: DateRange#include?(other)&lt;/h4&gt;
&lt;p&gt;This accepts a Date, Time or another TimeRange.  It assumes &lt;em&gt;inclusive&lt;/em&gt; range ends&lt;/p&gt;
&lt;pre&gt;&lt;code class='ruby'&gt;4.days.ago.until(1.day.ago).include?(2.days.ago)                    #  =&gt; true
4.days.ago.until(1.day.ago).include?(3.days.ago.until(2.days.ago)   #  =&gt; true
5.hours.from_now.until(10.hours.from_now).include?(6.days.from_now) #  =&gt; false
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;Second: Pretty Date Formatters&lt;/h4&gt;
&lt;p&gt;These generate human-readable times and dates, like "9 hours from now" and "earlier this week"&lt;/p&gt;
&lt;pre&gt;&lt;code class='ruby'&gt;f = ActiveSupport::CoreExtensions::Time::PrettyNumericDateFormatter.new
f.call(5.hours.ago)       # =&gt; "5 hours ago"
f.call(37.days.ago)       # =&gt; "1 month ago"

f = ActiveSupport::CoreExtensions::Time::PrettySimpleDateFormatter.new
f.call(5.hours.ago)       # =&gt; "earlier today"
f.call(55.days.from_now)  # =&gt; "later this year"
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
You can load these into the ActiveSupport formatting code like so:
&lt;/p&gt;
&lt;pre&gt;&lt;code class='ruby'&gt;require 'active_support/core_ext/time/pretty_numeric_date_formatter'
require 'active_support/core_ext/time/pretty_simple_date_formatter'

#each formatter must either respond to #call(Date) and #call(Time) or be a String for strftime

formatters = {
  :pretty_numeric =&gt; ActiveSupport::CoreExtensions::Time::PrettyNumericDateFormatter.new,
  :pretty_simple =&gt; ActiveSupport::CoreExtensions::Time::PrettySimpleDateFormatter.new
}
formatters[:pretty] = formatters[:pretty_numeric]
formatters[:default] = formatters[:pretty]

ActiveSupport::CoreExtensions::Time::Conversions::DATE_FORMATS.merge!(formatters)
ActiveSupport::CoreExtensions::Date::Conversions::DATE_FORMATS.merge!(formatters)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
I have that in my Rails app in &lt;code&gt;/config/initializers/date_formats.rb&lt;/code&gt;.  If you don't
want to override the default formatting of dates, don't include the &lt;code&gt;formatters[:default] = formatters[:pretty]&lt;/code&gt; line.  By including a &lt;code&gt;[:default]&lt;/code&gt; in the hash, all &lt;code&gt;ActionView&lt;/code&gt;s will automatically use this formatter.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-1930137723474718304?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/1930137723474718304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=1930137723474718304' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/1930137723474718304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/1930137723474718304'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/02/updates-to-activesupporthacks.html' title='Updates to active_support_hacks'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-1184912298388354639</id><published>2008-02-16T00:17:00.003-05:00</published><updated>2008-02-16T00:43:30.590-05:00</updated><title type='text'>Frustrated with Media</title><content type='html'>&lt;p&gt;
I'm really just tired of it all.
&lt;/p&gt;
&lt;p&gt;
I've been trying all evening to watch some old TV shows on my nice Netflix unlimited subscription.  Problem: I've got a Mac.  I've got Parallels, and occasionally it'll run Windows, but mostly it just crashes.  I'm sick and tired of Microsoft writing code that crashes constantly.
&lt;/p&gt;
&lt;p&gt;
I'm sick and tired of Apple being greedy and refusing to license their DRM.  Hey, Apple: you do realize that licensing it out to Netflix makes your products &lt;em&gt;more&lt;/em&gt; valuable, right?  You're sure as hell not going to get me to use your iTunes Movie Rental service; it's a load of crap.  Watch one movie once for $4 or watch unlimited movies unlimited times for $15/month?  No question.  Apple makes a better product than Microsoft, but they're just as obnoxious about it.
&lt;/p&gt;
&lt;p&gt;
I'm sick and tired of the music and movie industries treating me like a criminal.  Yeah, I used to download music.  You know what happened?  I spent $300 in the last couple years on CDs.  I spent $200 on concerts.  That's $500 on music, or about $490 more than I spent in the 20 years before I started downloading.  I've since stopped downloading illegally and my purchases have plummeted.  I just can't find the good music any more.
&lt;/p&gt;
So, in conclusion, to Steve Jobs, Steve Ballmer, Harry Sloan, Philippe Dauman, Sumner Redstone, Reyer Maker, and the rest of your ilk:
&lt;strong&gt;Stick it up your fat, greasy, selfish asses&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-1184912298388354639?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/1184912298388354639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=1184912298388354639' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/1184912298388354639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/1184912298388354639'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/02/blog-post.html' title='Frustrated with Media'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-3574127682595274803</id><published>2008-02-14T19:31:00.011-05:00</published><updated>2008-02-20T07:48:46.082-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='distance'/><category scheme='http://www.blogger.com/atom/ns#' term='activesupport'/><category scheme='http://www.blogger.com/atom/ns#' term='plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='range'/><title type='text'>ActiveSupport additions: TimeRange and Distance</title><content type='html'>&lt;p&gt;
I've created some utility classes that I use in many of my projects.  I've broken them out into a Rails plugin, but they should really be part of ActiveSupport.
&lt;/p&gt;
&lt;h4&gt;&lt;strong&gt;First: TimeRange&lt;/strong&gt;&lt;/h4&gt;
&lt;pre&gt;&lt;code class="ruby"&gt;t = 5.minutes.ago.until(1.second.ago)
s = 10.minutes.ago.until(3.minutes.ago)
overlap = t &amp;amp; s
overlap.start_time # =&gt; 5.minutes.ago
overlap.end_time   # =&gt; 3.minutes.ago
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;&lt;strong&gt;Second: Distance&lt;/strong&gt;&lt;/h4&gt;
&lt;pre&gt;&lt;code class="ruby"&gt;4.miles + 6.miles  # =&gt; 10.miles
5.yards.to_feet    # =&gt; 15.feet
12.miles.in_km     # =&gt; 19.312128.km
12.miles.as_km     # =&gt; 19.312128.km
2.meters &gt; 2.yards # =&gt; true
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
Eventually, I plan on moving some of &lt;a href="http://www.blogger.com/geokit.rubyforge.org/"&gt;GeoKit&lt;/a&gt; into some sort of ActiveRecord::DistanceSupport in the plugin.
&lt;/p&gt;
&lt;p&gt;
If you want the plugin, you can get it at &lt;a href="https://svn.u-presence.com/svn/plugins/active_support_hacks/"&gt;https://svn.u-presence.com/svn/plugins/active_support_hacks/&lt;/a&gt; (Username &lt;code&gt;guest&lt;/code&gt;, no password).  I'd love any other suggestions or comments on the utilities.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-3574127682595274803?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/3574127682595274803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=3574127682595274803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/3574127682595274803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/3574127682595274803'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/02/activesupport-additions-timerange-and.html' title='ActiveSupport additions: TimeRange and Distance'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-987918606395545229</id><published>2008-02-10T12:17:00.000-05:00</published><updated>2008-02-10T15:41:27.409-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='information assurance'/><category scheme='http://www.blogger.com/atom/ns#' term='reliability'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='ia'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Reliable Software in 3 Simple Steps</title><content type='html'>&lt;h4&gt;(or: How I Realized Intro Economics Applies to Software Engineering)&lt;/h4&gt;

&lt;h4&gt;The Rules:&lt;/h4&gt;&lt;ol&gt;
  &lt;li&gt;Hire a small number of really good programmers&lt;/li&gt;
  &lt;li&gt;Hire one Information Assurance (IA) superstar&lt;/li&gt;
  &lt;li&gt;Hire as many testers as you can without regard to past performance&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;The Rationale:&lt;/h4&gt;&lt;ul&gt;
  &lt;li&gt;Software development is largely a weakest-link game.  If you hire one crappy programmer, he'll write crappy code that the stars have to fix.  They'll be slower &lt;em&gt;and&lt;/em&gt; more resentful.  Therefore, only hire really good programmers.&lt;/li&gt;
  &lt;li&gt;Security and reliability measures are a best-effort game.  You don't need a whole slew of IA stars to see the big picture.  I'm a believer in the idea of "more heads..." thinking, so I might hire two experts if I could afford it, but this position has rapidly diminishing returns&lt;/li&gt;
  &lt;li&gt;Bug fixing is a sum-of-efforts game.  The more eyeballs the better.  This is particularly true because even really good developers make assumptions about users.  Having average-Joe people doing testing will get the developers good feedback early in the life-cycle&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;Finally, the credits:&lt;/h4&gt;&lt;ul&gt;
  &lt;li&gt;&lt;a href="http://www.joelonsoftware.com/"&gt;Joel&lt;/a&gt; has brought up these themes before, usually more eloquently and thoroughly&lt;/li&gt;
  &lt;li&gt;Anderson and Moore come to very similar conclusions in &lt;a href="www.cl.cam.ac.uk/~rja14/Papers/econ_crypto.pdf"&gt;Information Security Economics &amp;mdash; and Beyond&lt;/a&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-987918606395545229?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/987918606395545229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=987918606395545229' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/987918606395545229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/987918606395545229'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/02/reliable-software-in-3-simple-steps.html' title='Reliable Software in 3 Simple Steps'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-4725289634418920628</id><published>2008-02-09T13:39:00.002-05:00</published><updated>2008-02-20T07:49:36.992-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rubygems'/><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='require'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='gem'/><title type='text'>Hacking Rubygems' #require, #require_gem, #gem</title><content type='html'>I have some old gems in my latest Rails app, and Rubygems has changed its syntax since those gems were built.  The gems have &lt;code&gt;require_gem&lt;/code&gt; in them, but the newest version of Rubygems doesn't add that command to Kernel, so you get &lt;code&gt;NoMethodError&lt;/code&gt;s when the gem loads.  This simple hack in &lt;code&gt;config/environment.rb&lt;/code&gt; will fix it:
&lt;pre&gt;&lt;code class='ruby'&gt;# hack rubygem's change to #require:
Kernel.class_eval do
  def require_gem(*args)
    gem *args
  end
end
&lt;/code&gt;&lt;/pre&gt;
I have it right before &lt;code&gt;require File.join(File.dirname(__FILE__), 'boot')&lt;/code&gt; in case my &lt;code&gt;config/environments/xxx.rb&lt;/code&gt; loads an old gem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-4725289634418920628?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/4725289634418920628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=4725289634418920628' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/4725289634418920628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/4725289634418920628'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/02/hacking-rubygems-require-requiregem-gem.html' title='Hacking Rubygems&apos; #require, #require_gem, #gem'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-4466203983307899585</id><published>2008-02-09T11:06:00.002-05:00</published><updated>2008-02-15T21:19:02.798-05:00</updated><title type='text'>The Problem With Rails Resource Routes</title><content type='html'>&lt;p&gt;Today I show how to easily solve an incredibly annoying (but small) problem in Rails Routing for Resources.
&lt;/p&gt;
&lt;p&gt;
For my past few Rails projects, I've created a module called ModelLoader that I include in my Controllers to load requested Models from the database.  For each of my models, I have a &lt;code&gt;#load_xxx&lt;/code&gt; and a &lt;code&gt;require_xxx!&lt;/code&gt;.  For an app that contains People and Tickets, the model loader would look something like this:
&lt;pre&gt;&lt;code class='ruby'&gt;module Utilities
  module Controller
    module ModelLoader
      
      def load_person
        safe_load :@person, Person, :person_id
      end

      def require_person!
        require_exists! :@person, Person, :person_id
      end

      def load_ticket
        safe_load :@ticket, Ticket, :ticket_id
      end

      def require_ticket!
        require_exists! :@ticket, Ticket, :ticket_id
      end

      private

      def safe_load(variable_name, klass, parameter_name)
        begin
          instance_variable_set(variable_name, klass.find(params[parameter_name]))
        rescue ActiveRecord::RecordNotFound =&gt; e
          nil #swallow it; must have a statement here for coverage to see the line
        end
      end
      
      def require_exists!(variable_name, klass, parameter_name)
        raise error_for(klass, parameter_name) unless instance_variable_get(variable_name)
      end
      
      def error_for(klass, parameter_name)
        if params[parameter_name]
          msg = "Could not find #{klass} with id #{params[parameter_name]}"
        else
          msg = "Parameter #{parameter_name} is required"
        end
        ActiveRecord::RecordNotFound.new(msg)
      end
      
    end
  end
end
&lt;/code&gt;&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;
In my Controllers, I just do something like
&lt;code&gt;append_before_filter :load_person, :only =&gt; [:foo, :bar]&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
This is &lt;em&gt;almost&lt;/em&gt; perfect.  The problem is that some of my actions are accessible via more than one route.  In particular, a nested- and non-nested version of the same resource:
&lt;pre&gt;&lt;code class='ruby'&gt;  map.resources :people do |people|
    people.resources :tickets
  end
  map.resources :tickets
&lt;/code&gt;&lt;/pre&gt;
gives routes like 
&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;/people/:id/edit&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;/people/:person_id/tickets/:id&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;/tickets/:id&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;

&lt;p&gt;
That means that somestimes :id is a Person#id and sometimes it's a Ticket#id.  This wreaks havoc on my model loader.  (It's also a problem for Sutto's &lt;a href='http://blog.ninjahideout.com/posts/eoraptor-extracts-preparesrb'&gt;similar, but more elegant solution&lt;/a&gt;.)
&lt;/p&gt;
&lt;p&gt;
The solution is simple:
&lt;pre&gt;&lt;code class='ruby'&gt;module ActionController
  module Resources
    class Resource
      def member_path
        @member_path ||= "#{path}/:#{singular}_id"
      end
    end
  end
end
&lt;/code&gt;&lt;/pre&gt;
&lt;/p&gt;
Now all route segments have the class name in them:
&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;/people/:person_id/edit&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;/people/:person_id/tickets/:ticket_id&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;/tickets/:ticket_id&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-4466203983307899585?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/4466203983307899585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=4466203983307899585' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/4466203983307899585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/4466203983307899585'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/02/problem-with-rails-resource-routes.html' title='The Problem With Rails Resource Routes'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-8767869585137867616</id><published>2008-01-30T22:11:00.000-05:00</published><updated>2008-02-20T07:50:19.314-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='random'/><category scheme='http://www.blogger.com/atom/ns#' term='probability'/><category scheme='http://www.blogger.com/atom/ns#' term='gem'/><title type='text'>First Ruby Gem!!!</title><content type='html'>I've just created my first Ruby Gem out of the with_probability code I've been working on.  Simply
&lt;pre&gt;&lt;code&gt;sudo gem install nondeterminism&lt;/code&gt;&lt;/pre&gt;
Much thanks also to the initial author of the &lt;a href="http://pastie.caboo.se/137188"&gt;Sometimes Pastie&lt;/a&gt;

Any problems with or suggestions for the gem?  Join the Google &lt;a href='http://groups.google.com/group/ruby-nondeterminism'&gt;Ruby-Nondeterminism Group&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-8767869585137867616?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/8767869585137867616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=8767869585137867616' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/8767869585137867616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/8767869585137867616'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/01/first-ruby-gem.html' title='First Ruby Gem!!!'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-7438377091784203731</id><published>2008-01-29T13:50:00.003-05:00</published><updated>2008-02-15T21:53:18.640-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='random'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>with_probability</title><content type='html'>&lt;p&gt;
In fuzzing my database for testing (see &lt;a href="http://railspikes.com/2008/1/25/fuzzing-your-database"&gt;Fuzzing your Database&lt;/a&gt; and &lt;a href="http://faker.rubyforge.org/"&gt;Faker&lt;/a&gt;), I've found the following to be very useful:

&lt;pre&gt;&lt;code class='ruby'&gt;Object.class_eval do
  def with_probability(prob, &amp;block)
    if rand &amp;lt;= prob
      block.call 
      return ProbabilisticDoer::Done.new
    else
      return ProbabilisticDoer::NotDone.new
    end
  end
end

module ProbabilisticDoer
  class NotDone
    def else_with_probability(prob, &amp;block)
      with_probability(prob, &amp;block)
    end
    def else(&amp;block)
      with_probability(1, &amp;block)
    end
  end
  
  class Done
    def else_with_probability(prob, &amp;block)
      return self
    end
    def else(&amp;block)
      return self
    end
  end
end
&lt;/code&gt;&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;
With that, you can do things like
&lt;pre&gt;&lt;code class='ruby'&gt;u = User.create(...)
with_probability(9/10.0) do
  u.stuff_that_most_users_should_do
end

with_probability(0.01) do
  u.stuff_that_very_few_users_should_do
end.else_with_probability(0.2) do
  u.stuff_that_some_but_none_of_the_above_users_should_do
end.else do
  u.stuff_the_rest_of_the_users_should_do
end
&lt;/code&gt;&lt;/pre&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-7438377091784203731?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/7438377091784203731/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=7438377091784203731' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/7438377091784203731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/7438377091784203731'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2008/01/withprobability.html' title='with_probability'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-4537374705400680338</id><published>2007-07-06T12:52:00.005-05:00</published><updated>2008-02-15T21:54:03.915-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='has_many_polymorphs'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>has_many_polymorphs and the open-closed principle</title><content type='html'>&lt;p&gt;I like &lt;a href="http://blog.evanweaver.com/pages/has_many_polymorphs"&gt;has_many_polymorphs&lt;/a&gt;.  I would love it if only it obeyed the open-closed principle.
&lt;/p&gt;
&lt;p&gt;
Let's say I have a PetOwner model, and I want it to &lt;code&gt;have_many pets&lt;/code&gt; polymorphically.
&lt;/p&gt;
&lt;p&gt;
has_many_polymorphs lets you do this:
&lt;pre&gt;&lt;code class='ruby'&gt;class PetOwner &amp;lt; ActiveRecord::Base
  has_many_polymorphs :from =&gt; [:dogs, :cats, :fish]
  ...
end
&lt;/code&gt;&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;
But what if I later decide I want to add a Ferret class?  In addition to
&lt;pre&gt;&lt;code class='ruby'&gt;class Ferret &amp;lt; AbstractPet
  ...
end
&lt;/code&gt;&lt;/pre&gt;
&lt;/p&gt;
I also have to change PetOwner:
&lt;pre&gt;&lt;code class='ruby'&gt;class PetOwner &amp;lt; ActiveRecord::Base
  has_many_polymorphs :from =&gt; [:dogs, :cats, :fish, :ferrets]
  ...
end
&lt;/code&gt;&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;
It would be really lovely if has_many_polymorphs could just tell what has inherited from AbstractPet.  There's no reason you can't do this (in fact, I did before I wrote this post), but there's a timing problem: &lt;em&gt;all of the inherited classes have to load before PetOwner does&lt;/em&gt;.  The &lt;code&gt;has_many_polymorphs ...&lt;/code&gt; call only happens when PetOwner is first included, so all of those other classes have to have already registered themselves with AbstractPet (simply by inheriting from it) by then; unfortunately, there's no good way to guarantee class load order without major hacking at the environment.
&lt;/p&gt;
&lt;p&gt;
Sometimes we just have to put up with not-the-best.  Alas.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-4537374705400680338?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/4537374705400680338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=4537374705400680338' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/4537374705400680338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/4537374705400680338'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2007/07/hasmanypolymorphs-and-open-closed.html' title='has_many_polymorphs and the open-closed principle'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-830527798592940205</id><published>2007-07-01T18:25:00.001-05:00</published><updated>2008-02-15T21:27:10.508-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='testspec'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>and the test_spec_on_rails journey continues</title><content type='html'>&lt;p&gt;
Test/Spec has a wonderful - if largely unnoticed - feature: you can specify the superclass of contexts.  The default is the ole' Test::Unit::TestCase, but that won't always do.
&lt;/p&gt;
&lt;p&gt;
Let's say, hypothetically, you wanted to write some integration tests for your not-quite-shiny Rails app.  You'd use ApplicationController::IntegrationTest, right?  That way you can do things like &lt;code&gt;&lt;code&gt;get "/posts/34.html"&lt;/code&gt;&lt;/code&gt; and it would look up the routings and just &lt;em&gt;&lt;em&gt;do the right thing&lt;/em&gt;&lt;/em&gt;.  Awesome.
&lt;/p&gt;
&lt;p&gt;
Except... things aren't quite so simple when using test/spec.  Therefore, I bring you an illustrious, illustrative example:
&lt;pre&gt;&lt;code class='ruby'&gt;require File.dirname(__FILE__) + '/../test_helper'

class UserStoriesTest &lt; ActionController::IntegrationTest
 fixtures :people, :openid_authentications, :password_authentications
 context "User Stories", ActionController::IntegrationTest do
   context "a person coming to the site to log in", ActionController::IntegrationTest do
     specify "should see the welcome page" do
       get '/'
       template.should.be 'welcome/index'
       status.should.be 200
     end
     specify "should be able to successfully log in with email and password..." do
       post_via_redirect '/login.html', {:email =&gt; 'pete.thomas@xahoo.com', :password =&gt; 'test'}
       template.should.be 'people/home'
       status.should.be 200
     end
   end
 end

end
&lt;/code&gt;&lt;/pre&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-830527798592940205?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/830527798592940205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=830527798592940205' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/830527798592940205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/830527798592940205'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2007/07/and-testspeconrails-journey-continues.html' title='and the test_spec_on_rails journey continues'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-6396446277711460060</id><published>2007-07-01T11:44:00.003-05:00</published><updated>2008-02-15T21:29:17.521-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='testspec'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='testing'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>test_spec_on_rails continued...</title><content type='html'>&lt;p&gt;
Yesterday, I was very happy because all my controller tests (using &lt;a href="http://chneukirchen.org/blog/archive/2007/06/announcing-test-spec-0-4-a-bdd-interface-for-test-unit.html"&gt;test/spec&lt;/a&gt;, of course) were passing individually.
&lt;/p&gt;
&lt;p&gt;
Today I decided to run &lt;code&gt;rake test:functionals&lt;/code&gt; just to make sure they played well together.  CRASH!  BOOM! OTHER LOUD NOISES!
&lt;/p&gt;
&lt;p&gt;
The problem, after two hours of debugging, is that I was creating the same context in different controllers.  DocumentationControllerTest had a "A guest" context, and so did "AccountControllerTest" and "WelcomeControllerTest"
&lt;/p&gt;
&lt;p&gt;
Test/spec is perfectly happy to merge these . . . I just didn't realize it merged them.  I assumed that it would scope the context to its parent TestClass.  No such luck.
&lt;/p&gt;
&lt;p&gt;
The solution is quite easy, and really not all that bad practice anyway: scope your contexts manually.  For example:
&lt;pre&gt;&lt;code class='ruby'&gt;class WelcomeControllerTest &lt; Test::Unit::TestCase
 context "The Welcome Controller" do
   context "A guest" do
     ...
   end
   context "A logged-in user" do
     ...
   end
 end
end
&lt;/code&gt;&lt;/pre&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-6396446277711460060?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/6396446277711460060/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=6396446277711460060' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/6396446277711460060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/6396446277711460060'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2007/07/testspeconrails-continued.html' title='test_spec_on_rails continued...'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-6294092872386260020</id><published>2007-06-30T20:25:00.003-05:00</published><updated>2008-02-15T21:31:16.483-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='testspec'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='dry'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>ActsAsAuthenticated in test_spec_on_rails</title><content type='html'>&lt;p&gt;
I was having trouble getting "login_as" from the ActsAsAuthenticated plugin to work with test/spec on Rails.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://technoweenie.stikipad.com/plugins/show/RSpecs"&gt;TechnoWeenie&lt;/a&gt; suggested doing a &lt;code&gt;def login_as...&lt;/code&gt; within each context.  (It no longer does; I've put the code from this post into that page now.)  That didn't seem very DRY, so I tried including ActsAsAuthenticated all over the place.  Nothing worked...
&lt;/p&gt;
&lt;p&gt;
Until I realized the problem: each "context" block creates a new instance of Test::Unit::TestCase.  I had assumed it created a new instance of XxxControllerTest.  Alas.  Easy to fix.  Just put&lt;code&gt;Test::Unit::TestCase.send(:include, AuthenticatedTestHelper) &lt;/code&gt; before the opening of your XxxControllerTest.
&lt;/p&gt;
&lt;p&gt;
For example:
&lt;pre&gt;&lt;code class='ruby'&gt;require File.dirname(__FILE__) + '/../test_helper'
require 'welcome_controller'

Test::Unit::TestCase.send(:include, AuthenticatedTestHelper)

# Re-raise errors caught by the controller.
class WelcomeController; def rescue_action(e) raise e end; end

class WelcomeControllerTest &lt; Test::Unit::TestCase
  fixtures :people
  def setup
    @controller = WelcomeController.new
    @request    = ActionController::TestRequest.new
    @response   = ActionController::TestResponse.new
  end
  context "A logged-in person" do
    setup do
      use_controller WelcomeController
      login_as :yvette_moore
    end
     ...
  end
end
&lt;/code&gt;&lt;/pre&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-6294092872386260020?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/6294092872386260020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=6294092872386260020' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/6294092872386260020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/6294092872386260020'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2007/06/actsasauthenticated-in-testspeconrails.html' title='ActsAsAuthenticated in test_spec_on_rails'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-722332488933506714</id><published>2007-06-29T14:20:00.000-05:00</published><updated>2007-06-29T14:33:27.115-05:00</updated><title type='text'>My Keirsey Profile</title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;span style="font-size:100%;"&gt;According to &lt;a href="http://www.keirsey.com/"&gt;Keirsey&lt;/a&gt;, I'm an &lt;a href="http://keirsey.com/personality/ntep.html"&gt;ENTP&lt;/a&gt;&lt;a href="http://keirsey.com/personality/ntep.html"&gt;: The Inventor&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;span style="font-size:100%;"&gt;

II.   NT, the &lt;a href="http://keirsey.com/personality/nt.html"&gt;RATIONALIST&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt; (6% of population)&lt;/span&gt;

&lt;span style="font-weight: bold;"&gt;GENERAL DESCRIPTION&lt;/span&gt;:
&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Technology-oriented  /  Motto: Knowledge is power&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Strategists:  Designers and executers of a plan&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;NTs are task oriented; they determine how things get done&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Curious yet skeptical; “Why?” drives their actions&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Objective, logical, and analytical&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Detached&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Focus on things; ideas&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;NTs eat, sleep, and breathe answers to a single question&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Uncompromising quest for competence, excellence, to be at the top - not near the top)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Worst thing for NTs: to be normal&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Set extremely high standards / high bar&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Also interested in making you competent;  has little tolerance for incompetence; you are no longer of any value to them; probably a large number of people are placed in the non-value category&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Seek to lift up the level of the environment / the organization&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Strong need for predictability&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Visionary – constantly brainstorming about taking things to the next level of competence/excellence&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;There is always something wrong with today – NTs are self-correcting either mentally or through maneuvers&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Perceive that they are teetering on the brink of disaster&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Fear of not succeeding is greater than the fear of failing&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;They have the gift to get people to see where they are today and where they are going
&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;DOWNSIDE&lt;/span&gt;:
&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Encoded is an unreasonable bar of excellence&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Great facility with words&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Plagued with the fear of being found out:  there may be a crack in the armor&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;NTs may never discover that the earlier tapes played in their heads (one’s value as a human being is determined by one’s level of excellence) are not the truth.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;They have this internal competency check list that is, all too often, uncompromising.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;By failing the internal competency checklist … bad things will happen.  Likely that there are a large number of people who question:  are you competent by my criteria / very few people will fit into their inner core of close and acceptable associates&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Always upping the bar&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;They go to jobs that they know they will be good at&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Theoretically, they don’t finish anything;  it’s always in a state of improvement, modification, expanding&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;If they conceptualize something beyond their perceived capacity, they disengage or / they will focus on ways to get their arms around it to make it manageable&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;NTs won’t lie; they will word-smith the truth
&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Needs a Sensing Type to ...
&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;bring up pertinent facts&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;apply experience to problems&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;read the fine print in a contract&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;notice what needs attention now&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;have patience&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;keep track of essential details&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;face difficulties with realism&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;remind them that the joys in the present are important&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Needs a Feeling Type to...&lt;/span&gt;
&lt;ul&gt;&lt;li&gt;persuade&lt;/li&gt;&lt;li&gt;conciliate&lt;/li&gt;&lt;li&gt;forecast how others will feel&lt;/li&gt;&lt;li&gt;arouse enthusiasm&lt;/li&gt;&lt;li&gt;teach&lt;/li&gt;&lt;li&gt;sell&lt;/li&gt;&lt;li&gt;advertise&lt;/li&gt;&lt;li&gt;appreciate the thinker
&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:100%;"&gt;
&lt;span style="font-weight: bold;"&gt;CAREERS&lt;/span&gt;:
Leans toward science and technology; systems analysts, research and development
&lt;span style="font-weight: bold;"&gt;
INTELLIGENCE&lt;/span&gt;:
Strategic intelligence;  everything  must be analyzed in terms of its how and why
&lt;span style="font-weight: bold;"&gt;
RULES&lt;/span&gt;:
Challenge all rules and dismiss any that do not make sense
&lt;span style="font-weight: bold;"&gt;
SEARCHES FOR TWO THINGS&lt;/span&gt;:
To be a part of a team yet maintain a level of detachment / autonomy&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-722332488933506714?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/722332488933506714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=722332488933506714' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/722332488933506714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/722332488933506714'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2007/06/my-keirsey-profile.html' title='My Keirsey Profile'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-3758381461142934306</id><published>2007-06-21T15:13:00.000-05:00</published><updated>2007-06-21T15:44:08.297-05:00</updated><title type='text'>Some Band/Album Names</title><content type='html'>Some possibly great band or album names:
&lt;ul&gt;&lt;li&gt;Jerome Sheffield and the Wrong Goldfish&lt;/li&gt;&lt;li&gt;Three Halves Make a Whole Turquoise Sandwich&lt;/li&gt;&lt;li&gt;Eight Full Sundays&lt;/li&gt;&lt;li&gt;The Standards&lt;/li&gt;&lt;li&gt;Octothorp&lt;/li&gt;&lt;li&gt;Prefixes to Problems
&lt;/li&gt;&lt;/ul&gt;
Some really bad ones:
&lt;ul&gt;&lt;li&gt;If, But, When, ...&lt;/li&gt;&lt;li&gt;Intricate and Restful&lt;/li&gt;&lt;li&gt;Refurbished Pickles&lt;/li&gt;&lt;li&gt;Yessiree, I Am Indeed a Proctologist&lt;/li&gt;&lt;li&gt;Teh H4x0r5&lt;/li&gt;&lt;li&gt;Fiends with Hairnets&lt;/li&gt;&lt;li&gt;Big Buttresses&lt;/li&gt;&lt;li&gt;Nothing to See Here; Move Along
&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-3758381461142934306?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/3758381461142934306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=3758381461142934306' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/3758381461142934306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/3758381461142934306'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2007/06/some-bandalbum-names.html' title='Some Band/Album Names'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-5910115539310224876</id><published>2007-06-21T11:49:00.001-05:00</published><updated>2008-02-15T21:32:15.983-05:00</updated><title type='text'>Problems with a Democratic Republic</title><content type='html'>&lt;p&gt;
Scott Adams &lt;a href="http://dilbertblog.typepad.com/the_dilbert_blog/2007/06/nostrildumbass-.html"&gt;writes&lt;/a&gt; that he thinks Michael Bloomberg might be the man to stop this inane, barbaric feast upon "flip-floppers."  I hope it's true.
&lt;/p&gt;
&lt;p&gt;
But it's not the only problem with representative democracy.  The Federalist Papers make many great arguments why our system is the best that humans can achieve, but it really fails in one area: public bias.
&lt;/p&gt;
&lt;p&gt;
This past week, the Economist had a great &lt;a href="http://www.economist.com/world/na/displaystory.cfm?story_id=9340166"&gt;story&lt;/a&gt; on public bias.  The author lists four biases: "first, people do not understand how the pursuit of private profits often yields public benefits: they have an anti-market bias.  Second, they underestimate the benefits of interactions with foreigners: they have and anti-foreign bias.  Third, they equate prosperity with employment rather than production: Mr Caplan calls this the "make-work bias".  Finally, they tend to think economic conditions are worse than they are, a bias towards pessimism."
&lt;/p&gt;
&lt;p&gt;
I am now extremely disheartened that any politician would be able to convince the public that his or her policies are good given these biases.  Congress and the President have done some astounding work (and some necessary compromises) to build a strong piece of legislation on immigration reform, but the public &lt;a href="http://www.nytimes.com/2007/06/10/washington/10oppose.html?ei=5065&amp;en=04edbbe59bfd2b82&amp;amp;ex=1182052800&amp;partner=MYWAY&amp;amp;pagewanted=print"&gt;hates&lt;/a&gt; it . . . and it isn't helping Congress's &lt;a href="http://www.usatoday.com/news/washington/2005-03-14-congress-poll_x.htm"&gt;report card&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Maybe the immigration bill isn't perfect.  Maybe it's even downright bad.  Certainly with all this bias, though, there have to be plenty of instances where the people disagree with a good idea.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-5910115539310224876?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/5910115539310224876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=5910115539310224876' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/5910115539310224876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/5910115539310224876'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2007/06/problems-with-democratic-republic.html' title='Problems with a Democratic Republic'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-5780743124746595216</id><published>2007-02-19T12:08:00.002-05:00</published><updated>2008-02-15T21:33:04.384-05:00</updated><title type='text'>Success, but no record</title><content type='html'>&lt;p&gt;
Well, I did it . . . I think.  See, I remember thinking "I've gotta study every day" quite often for the last couple weeks, but I didn't write down when I did or check off each day from a list.
&lt;/p&gt;
&lt;p&gt;
What did we learn: keep track of your goals so you know when you're hitting and missing.  I must've forgotten something from my earlier weight training days.  And maybe it would help to start keeping track of that again.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-5780743124746595216?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/5780743124746595216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=5780743124746595216' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/5780743124746595216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/5780743124746595216'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2007/02/success-but-no-record.html' title='Success, but no record'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-1530173935260987040</id><published>2007-02-05T01:30:00.000-05:00</published><updated>2007-02-05T01:33:05.889-05:00</updated><title type='text'>New Horizons in Self-Discipline</title><content type='html'>Today I begin my new self discipline training.  I will study Chinese vocab at least 5 minutes every single day for the next 10 days.  No exceptions.  No, "I'll do double tomorrow."  No excuses.

(For those curious, &lt;a href="http://www.stevepavlina.com/blog/"&gt;Steve Pavlina&lt;/a&gt; was much of my inspiration.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-1530173935260987040?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/1530173935260987040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=1530173935260987040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/1530173935260987040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/1530173935260987040'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2007/02/new-horizons-in-self-discipline.html' title='New Horizons in Self-Discipline'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-116526335427384776</id><published>2006-12-04T15:07:00.001-05:00</published><updated>2008-02-15T21:33:41.647-05:00</updated><title type='text'>My first Chinese joke</title><content type='html'>&lt;p&gt;
You've gotta appreciate the little things you can accomplish when you know as little Chinese as I do.  Last week, in Chinese class:
&lt;/p&gt;
&lt;p&gt;
鐘老師: 潔旎, 你的 生日 是 哪天?
&lt;/p&gt;
&lt;p&gt;
潔旎: 七月 十九號.
&lt;/p&gt;
&lt;p&gt;
鐘老師: 哪年?
&lt;/p&gt;
&lt;p&gt;
我: 每年!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-116526335427384776?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/116526335427384776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=116526335427384776' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/116526335427384776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/116526335427384776'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2006/12/my-first-chinese-joke.html' title='My first Chinese joke'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-115485630197066064</id><published>2006-08-06T04:14:00.001-05:00</published><updated>2008-02-15T21:34:20.691-05:00</updated><title type='text'>It's Stitchin' Time</title><content type='html'>&lt;p&gt;
So &lt;a href="http://joshualander.com/"&gt;Josh&lt;/a&gt; just told me about myfabrik.com.  It's a neat concept - free online storage in exchange for the requirement that everything's public.  It's a great way both to trade information at a higher speed and settle on standards (as people will be using the same versions of files, just like source repositories) (note to self: write about how faster exchange might equal accepting more standards).
&lt;/p&gt;
&lt;p&gt;
I said, "so, clearly, you can't upload copyrighted material..."
&lt;/p&gt;
&lt;p&gt;
The first thought that came to my mind was to create an online directory of people who were willing to trade files over myfabrik and you agree on a time to trade, then take the files down because leaving them up would leave them likely to being happened upon.
&lt;/p&gt;
&lt;p&gt;
Then, I said, " you could have a program that searches the directory, negotiates a time with the other party, then automatically uploads, downloads, deletes.
&lt;/p&gt;
&lt;p&gt;
Josh says, "and instead of 'torrents' they'd be called 'stitches'.  I can see the program icon now!"
&lt;/p&gt;
&lt;p&gt;
But why create it?  I mean, there's no profit in it, and why is it better than torrents?  It's like the laserdisc or the SACD - yeah, they're better, but they're not revolutionary.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-115485630197066064?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/115485630197066064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=115485630197066064' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/115485630197066064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/115485630197066064'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2006/08/its-stitchin-time.html' title='It&apos;s Stitchin&apos; Time'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-113994483629220054</id><published>2006-02-14T14:07:00.002-05:00</published><updated>2008-02-15T21:36:14.829-05:00</updated><title type='text'>Science and Math in Sorry State</title><content type='html'>&lt;p&gt;
The other day, I went to my local supermarket to do my normal shopping.  Most weeks, I get a half pound of sliced ham and a half pound of sliced turkey from the deli.  I've been noticing lately, though, that I eat all the turkey first and then most of the ham goes bad.  So I ordered "three fifths of a pound of turkey, please."  The very nice deli counter worker said, "ok," and set about pulling turkey from the display case.  After a minute, she called her manager over, and they discussed something for a minute, and then the original worker asked, "um, what's three fifths of a pound?"  I can accept that some people just don't do fractions well; that's fine, and it doesn't make her evil, stupid, or make me want to shop there less (as she was polite about her question).  The following, however does bug me: &lt;em&gt;neither of them got it right when I responded that "three fifths is point six pounds."&lt;/em&gt;  I mean, the scale has the decimal point right there.  Is it that easy to confuse ".4" with ".6"?  I don't mean that you glance at it and mistake the "4" for a "6".  I mean she looked at the scale, which read, ".42" and asked, "is that about right?"
&lt;/p&gt;
&lt;p&gt;
Now, I don't mean to point out the flaws of one seemingly very nice person.  I am using this as an example of the kind of things our schools are failing to teach.  I applaud any effort to improve schools, so I'm all for giving this "no-child" thing a shot, but it doesn't seem like a silver bullet that will work across the country.  If you set standards, and thus money, on &lt;em&gt;knowledge&lt;/em&gt; tests rather than &lt;em&gt;critical thinking&lt;/em&gt; tests, there's no incentive to teach the skills that people need to excel in math and science.  That isn't to say that we should completely abandon either the idea of basing funding on test scores or on testing knowledge; both may have value.  In addition to the capital of Illinois (probably Chicago, right?  &lt;-- note for humor-impaired: this is a joke), though, we should probably test a person's ability to make (or better yet, judge) a rhetorical argument.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-113994483629220054?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/113994483629220054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=113994483629220054' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/113994483629220054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/113994483629220054'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2006/02/science-and-math-in-sorry-state.html' title='Science and Math in Sorry State'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-112774759909099795</id><published>2005-09-26T10:06:00.001-05:00</published><updated>2008-02-15T21:35:12.565-05:00</updated><title type='text'>Taxes == Bad?</title><content type='html'>&lt;p&gt;
I've studied enough economics to believe that tax-and-spend policies are inefficient and make the market lose money.
&lt;/p&gt;
&lt;p&gt;
Still, that's not always a good enough reason to cut taxes.  If we want the federal government to live up to its current obligations (not that I'm opposed to reducing its scope, but we've got the programs we've got until we cut some), we have to be willing to fund them.  That's why &lt;a href="http://www.washingtonpost.com/ac2/wp-dyn?pagename=article&amp;contentId=A2881-2003Jun16&amp;notFound=true"&gt;this article&lt;/a&gt; makes me so angry.  No, it's not entirely &lt;span style="font-style:italic;"&gt;fair&lt;/span&gt; to ask the richest in the country to sacrifice for our troops, who, generally, aren't rich . . . but it's not always about fair.  I know if I made more than $1M annually, I'd be happy to give back $4k for the troops.  My philosophy on this issue resembles what I've come to describe as the "Jewish take on giving."  That is, God helps those who help themselves, so make sure you and your loved ones are taken care of; after that, offer what you can.  There's no sense in giving of yourself what you cannot.  Simple pragmatism does volumes on the issue of wealth disparity in America.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-112774759909099795?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/112774759909099795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=112774759909099795' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112774759909099795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112774759909099795'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2005/09/taxes-bad.html' title='Taxes == Bad?'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-112723680072035629</id><published>2005-09-20T12:19:00.001-05:00</published><updated>2008-02-15T21:37:10.682-05:00</updated><title type='text'>Can Government Build Cities?</title><content type='html'>&lt;p&gt;
Clifford Thies, Professor of Economics and Finance at Shenandoah University, wrote &lt;a href="http://mises.org/story/1918"&gt;this article&lt;/a&gt; criticising the idea that the federal government should be responsible for rebuilding the Gulf Coast region.
&lt;/p&gt;
&lt;p&gt;
I have not been won over that we should rebuild New Orleans at all, and I am generally in favor of letting private enterprise prevail when it can.  (If it cannot in this case, then perhaps the federal government should get involved.)  Nonetheless, I had some qualms with his argument.
&lt;/p&gt;
&lt;p&gt;
I wrote this letter:
&lt;/p&gt;
&lt;p&gt;
First, I would like to thank you for a well-researched, thought-provoking article.  I have neither the time nor the resources to fact-check your statistics, but will trust you; they do not seem to lie outside of my vision of the reality of American cities.
&lt;/p&gt;
&lt;p&gt;
I do, however, have a few issues I would like to raise regarding the article.
&lt;/p&gt;
&lt;p&gt;
First, your statistics do indicate some sort of correlation between "liberal" policies and things we agree are negative (high crime, overly high unemployment).  After empirically showing the correlation, however, you only suggest one theoretical conclusion: that the former caused the latter.  Is it not equally possible that a history of bad results has resulted in a population becoming frustrated and turning to liberalism to solve its problems?  We would have a clearer picture of this if we looked at these correlative graphs over time.
&lt;/p&gt;
&lt;p&gt;
Second, you say, "It seems that liberals who focus their attention on redistributing wealth lose sight of the first responsibility of government, which is to protect its citizens."  Certainly I agree that protection of property and violent crime fall under this responsibility of government.  What about protection from the effects of the evils of previous generations, including misogyny and slavery?  I see room for the argument that government ought to only protect us against current, active evils, but I would have to see that argument more fully developed to accept that liberalism (in the modern sense) supports goals outside government's due goal of protection.
&lt;/p&gt;
&lt;p&gt;
Lastly, there is a degree to which Americans believe in personal freedom, and a degree to which we believe in fairness.  The two are constantly at odds; for much of our early history, strong states' rights indicated we favored personal freedom; lately, attaching more and more rights to the 14th amendment has implied that we favor fairness in general.  I would like to see data that correlate examples of positive fairness behavior (donating to charity, for example) with less liberal voting behavior.  This correlation would give me more peace of mind that we could relax the government's control and still hope to have a good balance of freedom and fairness.
&lt;/p&gt;
&lt;p&gt;
Again, thank you for writing this article.  I look forward to discussing these ideas further.
&lt;/p&gt;
&lt;p&gt;
Sincerely,
[me]
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-112723680072035629?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/112723680072035629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=112723680072035629' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112723680072035629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112723680072035629'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2005/09/can-government-build-cities.html' title='Can Government Build Cities?'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-112723369314003543</id><published>2005-09-20T11:25:00.001-05:00</published><updated>2008-02-15T21:37:53.205-05:00</updated><title type='text'>On Being Happy to Live in the US</title><content type='html'>&lt;p&gt;
I read a &lt;a href="http://www.lewrockwell.com/rozeff/rozeff26.html"&gt;well-put-together article&lt;/a&gt; today.  I am not generally pro- or anti-Libertarian.  Their arguments have some merit and some shortcomings.  On whole, I was very glad to have read the essay.
&lt;/p&gt;
&lt;p&gt;
I wrote a response to him:
Thank you for your thought provoking article.  I do not agree with your analysis, but I want to express my gratitude for making me question my acceptance of this government.  Personally, I actively accept the authority of the United States.  I have read the Constitution a dozen times, and am very happy to live in a country where that document is the supreme law of the land.
&lt;/p&gt;
&lt;p&gt;
I would like to comment on a couple of specifics of your article.  In the middle, you make 10 numbered assertions (which I will not reproduce here for brevity's sake).

&lt;ol&gt;
  &lt;li&gt;The American Civil War was certainly the will of many Northerners.  It would be difficult to get definitive numbers for who consented to the war, but the issue is more grey than your statement makes it appear.

  &lt;li&gt;Certainly true (see # 6, below).

  &lt;li&gt;Also true.  The only remedy to this that I can see is to have each person opt in or out of being a citizen of the country at some point, without requiring him or her to leave on the latter choice.  This makes guaranteeing property rights very difficult; also, would not a person who settles in the middle of Iowa, but opts not to pay taxes nor receive public goods still receiving the public good of border defense?  It would be very difficult for the US Armed Forces to know that a missile is bound for non-US property within US border, and not defend against such an attack.  If you have a solution to this problem, I would strongly support a person's right to opt out of government programs, taxes and regulations wholesale.  See also # 6, below.

  &lt;li&gt;True (see # 6, below).

  &lt;li&gt;Yes, but we've generally changed that, and view the changes as "progress."

  &lt;li&gt;This is an excellent argument.  ## 2-5 are all true, but seem to only serve to counter your opposition without furthering your argument.  (That is, there could be a third option.)

  &lt;li&gt;In what way was the Constitution never a "valid agreement or contract"?  Perhaps your argument is that there is no body with the authority to settle disputes and enforce such a contract - that there is no court of law outside of the US to which the entities in the Constitution are beholden.  This is true, but we must, at some level, bootstrap; eventually the universe runs out of elephants upon which to stand.  Can you think of a better option than a court that is a member of its own entity, but is beholden to its constituents just as they are to it?

  &lt;li&gt;This argument, as well as several of the others, fails for immigrants (at least rational, literate immigrants with access to a copy of the US Constitution in their native tongue before arriving).  I agree there is a sense of compulsion for those of us born here, but we truly are free to leave.  I sympathize with your argument that we do not wish to uproot our lives, but if the stresses of abiding by US law were truly too great, one would leave.

  &lt;li&gt;This is precisely Publius' argument in the 10th Federalist Paper.  His solution, and the one we have adopted, is that Republican (representative, not Right-wing) governments decrease the chance of only the majority's will being expressed; there are no such checks in Democratic (direct, not Left-wing) governments.

  &lt;li&gt;You say "This however cannot legally bind those others who do not so vote."  This MAY not so legally bind those others, but it certainly could.  I am not a legal expert, so I am not sure of what language would be necessary (and whether or not it is already present), but I have no doubt that one could create an amendment or pass legislation that creates exactly this contract.  It is my interpretation of the Constitution that the ratification process (article VII) does this; it was then up to the states to determine how such ratification would happen internally.  Assuming each Citizen of a state agreed by the laws of that state, he (specifically "he," here) agreed to such a ratification.  My arugment here, unfortunately, only pushes "tacit consent" down to the state level.
&lt;/ol&gt;
&lt;p&gt;
In closing, I would just like to ask you this: do you have the resources to defend your house against nuclear states?  I know I do not, and I thank my lucky stars for being able to be part of the United States for this, and many other reasons.
&lt;/p&gt;
&lt;p&gt;
Again, I greatly appreciated your article, and look forward to hearing from you on these issues.  Thank you for your time.
&lt;/p&gt;
&lt;p&gt;
Sincerely,
[me]
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-112723369314003543?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/112723369314003543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=112723369314003543' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112723369314003543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112723369314003543'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2005/09/on-being-happy-to-live-in-us.html' title='On Being Happy to Live in the US'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-112603353447971878</id><published>2005-09-06T13:14:00.001-05:00</published><updated>2008-02-15T21:38:46.392-05:00</updated><title type='text'>Responsibilities of Government</title><content type='html'>&lt;p&gt;
The recent Gulf Coast disaster has prompted me to summarize some of my thoughts on the responsibility of government.  "Government" has many definitions, but I tend to think of it as being responsible for things that everybody wants but nobody wants to be responsible for.
&lt;/p&gt;
&lt;p&gt;
&lt;h4&gt;Services and How They're Paid For&lt;/h4&gt;
How services are divided up should not be determined by who funded them.  Services are for providing a public (shared) good.  For those who want services to be tied to how much you contribute, the reliance should go the other way: you have to pay in based on what you are expected to reap.  Pay-as-you-go doesn't work with public goods; if it did, we would simply make them private goods and everybody would take care of him- or herself.
&lt;/p&gt;
&lt;p&gt;
That said, there are probably things that are currently under the government's purview that needn't be public goods.  We should not hesitate to remove things from this domain.  For example, I am not going to argue in this post for or against Social Security, but the fact that it's so difficult to reform seems like a problem to me.  We should never think of services as givens; they should be justified and regularly rejustified.
&lt;/p&gt;
&lt;p&gt;
The following lists apply to the "Government" in general.  In the US (the scope of my discussions), this consists of many levels of government.  The distribution of powers and responsibilities throughout these levels is the task of a different essay.
&lt;/p&gt;
&lt;ul&gt;
  &lt;lh&gt;Things the Government Should Provide - these are the things without which society itself cannot hold&lt;/lh&gt;
  &lt;li&gt;&lt;b&gt;Defense from incursion from foreign nations&lt;/b&gt;
  &lt;li&gt;&lt;b&gt;Defense against attacks from nature&lt;/b&gt;: hurricanes, floods, wild boars and the flu
  &lt;li&gt;&lt;b&gt;Protection of life, liberty and property&lt;/b&gt;: criminal court, police,
  &lt;li&gt;&lt;b&gt;Dispute resolution&lt;/b&gt;: among people, businesses and lower governments - civil court, support of contracts
  &lt;li&gt;&lt;b&gt;Facilitate contribution&lt;/b&gt;: universally accessible polling places, frequent open meetings for discussion issues, unwavering support of the rights of its citizens to praise, criticize and participate in their government.
&lt;/ul&gt;
&lt;p&gt;
Note that defense against terrorism doesn't have its own item.  I would argue that it falls under "Protection of life, liberty and property" rather than under "Defense from incursion from foreign nations," but the current president seems to think it is more of a war.
&lt;/p&gt;
&lt;ul&gt;
  &lt;lh&gt;Things the Government Might Provide - these are the things we might want to help one another out with, but without which society itself would not crumble to anarchy&lt;/lh&gt;
  &lt;li&gt;&lt;b&gt;Protection from non-transmittable disease&lt;/b&gt;: health care program beyond the scope of vaccination and disease control.
  &lt;li&gt;&lt;b&gt;Protection from poverty&lt;/b&gt;: poverty is notoriously difficult to overcome, and programs such as welfare, Medicaid and low-income housing have tried to break the cycle.  Their efficacy is debatable, though their goal decidedly good.
  &lt;li&gt;&lt;b&gt;Education&lt;/b&gt; (or protection from idiocy): here I will merely comment that paying for education with local property taxes is a bad idea because of the poverty -&gt; poor schools -&gt; poor jobs -&gt; poverty cycle.  On the other hand, completely socializing education means people will be paying for schools that they will never use.  Education seems to be a semi-public good like many of the others in this category.
  &lt;li&gt;&lt;b&gt;Infrastructure&lt;/b&gt;: things like roads, airports, internet access, telephone lines, the electromagnetic spectrum could be entirely paid for by the government, entirely paid for by usage fees or by some sort of balance between the two.  I am currently leaning towards government footing the bill from the start, but people paying back into the system based on use to support future improvements; regardless, we should have a consistent strategy across media.
&lt;/ul&gt;

&lt;ul&gt;
  &lt;lh&gt;Things the Government Should not Provide&lt;/lh&gt;
  &lt;li&gt;Subsidies for items that are not public goods (sugar, oil, diapers, art).  A free and open market will determine what is of value to produce and sell.  (Note that in re: art, I think it may be important for government to instill an appreciation for art, for it is often said that a society's art is the measure of its worth.)
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-112603353447971878?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/112603353447971878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=112603353447971878' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112603353447971878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112603353447971878'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2005/09/responsibilities-of-government.html' title='Responsibilities of Government'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-112601734488065636</id><published>2005-09-06T09:15:00.001-05:00</published><updated>2008-02-15T21:39:33.544-05:00</updated><title type='text'>Really Good Chicken Soup</title><content type='html'>&lt;p&gt;
I gave my mother my recipe for Chicken Soup last night.  Now I offer it to the world.  This is NOT a nice, easy, one-pot recipe; it takes some time to prepare, but cooks in a crock pot, so you have some hands-off time at the end.  Makes 6-8 servings.
&lt;/p&gt;
&lt;ul&gt;
  &lt;lh&gt;Tools&lt;/lh&gt;
  &lt;li&gt;Crock pot
  &lt;li&gt;Grill
  &lt;li&gt;Sautee pan / skillet
  &lt;li&gt;Bowl that can take high heat (ceramic works great)
&lt;/ul&gt;

&lt;ul&gt;
  &lt;lh&gt;Ingredients&lt;/lh&gt;
  &lt;li&gt;4 strips bacon, preferably low-sodium
  &lt;li&gt;5 carrots, peeled and sliced into rounds (I like 3/4" wide at the narrow end of the carrot, and 1/4" wide at the thick end of the carrot so each round has about the same volume)
  &lt;li&gt;4 stalks celery, sliced (1/2")
  &lt;li&gt;5 cloves garlic
  &lt;li&gt;1 leek or 5 shallots or 1 medium onion or 1 bunch green onions (about 2/3 C chopped, regardless)
  &lt;li&gt;1.5 lb boneless, skinless chicken breast
  &lt;li&gt;Cracked black pepper
  &lt;li&gt;Fine sea salt
  &lt;li&gt;Olive oil
  &lt;li&gt;Rosemary
  &lt;li&gt;1 can (12 oz) Chicken stock
  &lt;li&gt;Cold water
&lt;/ul&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;b&gt;Render the bacon fat&lt;/b&gt;.  Put a frying pan or skillet over high heat.  Add the bacon and cook until lightly crisped.  Occassionally drain the fat off into a bowl.  Place the bacon aside.  Allow to cool, then dice.
  &lt;li&gt;&lt;b&gt;Sautee the carrots and celery&lt;/b&gt;.  Heat 1-2tsp bacon fat in a sautee pan (I like to use a clean pan, since there is probably some burned fat in the pan you used for the bacon, and we know burned fat is very bad for you).  Sautee the celery and carrots for a few minutes.  Don't cook them too much; they're going into the soup for more cooking, after all.
  &lt;li&gt;&lt;b&gt;Sautee the onions and garlic&lt;/b&gt;.  Heat 1tsp bacon fat in a sautee pan.  Sautee the garlic and onions until the garlic turns a light brown.  The onions will not caramelize as fast, so if you want them nice and brown, start them about 3 minutes before adding the garlic.
  &lt;li&gt;&lt;b&gt;Grill the chicken&lt;/b&gt;.  Lightly coat the chicken in olive oil, salt, pepper and rosemary.  Grill over fairly high heat until cooked through, but still juicy.  Allow to cool, then cut into bite-sized pieces.
  &lt;li&gt;&lt;b&gt;Combine&lt;/b&gt;.  Put the chicken stock in a crock pot, adding twice as much water (24oz.).  Add the carrots, celery, onions, garlic, bacon and chicken.  Cook on high for 45 minutes.
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-112601734488065636?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/112601734488065636/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=112601734488065636' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112601734488065636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112601734488065636'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2005/09/really-good-chicken-soup.html' title='Really Good Chicken Soup'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-112551165066538314</id><published>2005-08-31T12:56:00.001-05:00</published><updated>2008-02-15T21:40:33.292-05:00</updated><title type='text'>Let's Hold Each Other to a Higher Standard</title><content type='html'>&lt;strong&gt;Rant Alert!&lt;/strong&gt;
&lt;p&gt;
Last year, I signed up for a year-long membership at St. Louis Workout on Union St. in St. Louis, MO.  I paid my $200 and signed a contract.  At the end of the year, I didn't go back; I didn't really dislike the gym, but I found another that I liked better.  A couple of weeks after the end of the year contract, however, I thought I'd better make sure everything was cleaned up, so I called the gym.  "No problem," the lady said, "just come in by the 15th and we'll clear everything up for you."  I came in on the 13th and signed some paperwork declaring my intent to leave the gym; part of the paperwork was an "amount due" field, about which the gentleman at the gym said, "just put '$0' since you prepaid your year membership."
&lt;/p&gt;
&lt;p&gt;
Two weeks after that, I got a bill from the company stating that I owed "$23.66 per month" [for two months after the year membership] and late fees totaling $50.  I called them to sort it out.  My argument was as follows:
&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;They were perfectly within their right to collect on this amount due, since I had signed a contract stating that I would give them advance notice of my termination
  &lt;li&gt;I had made my intentions clear by a) pre-purchasing the year membership rather than enrolling in a repeated-billing process and b) not visiting the gym after the membership had ended
  &lt;li&gt;Two representatives of the gym had both told me that there would be no problems in closing my account
  &lt;li&gt;Therefore, they should work out some deal with me so they come out as the good guys, willing to help out their customers in the case of an unintentional error
&lt;/ol&gt;
&lt;/p&gt;
The "gentleman" on the phone disagreed, stating that he "had nothing further to say to me."  So I wished him a good day and hung up.  I will send the check.  They will cash it.
&lt;/p&gt;
&lt;p&gt;
But I have learned my lesson: I no longer have any faith in corporations to "provide a service to their customers."  From now on I will treat them as an enemy whose only purpose is to take my money.  I will not sign devious contracts.
&lt;/p&gt;
&lt;p&gt;
And I will hold myself to a higher standard: read all fine print.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-112551165066538314?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/112551165066538314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=112551165066538314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112551165066538314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112551165066538314'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2005/08/lets-hold-each-other-to-higher.html' title='Let&apos;s Hold Each Other to a Higher Standard'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-112534176053269426</id><published>2005-08-29T13:49:00.001-05:00</published><updated>2008-02-15T21:42:33.887-05:00</updated><title type='text'>Things that Should Exist</title><content type='html'>&lt;ol&gt;
&lt;li&gt;&lt;h4&gt;Dream Recorder&lt;/h4&gt;
&lt;p&gt;So according to physics, anything that's an engine is also a generator.  (Just run it in reverse, dummy.)
&lt;/p&gt;
&lt;p&gt;
Well, I know almost nothing about the human brain, but it would be pretty cool if we could apply the generator/engine model to the visual center of the brain in order to record dreams.  This, of course, relies on figuring out where dream visions differ from real visions; that is, clearly you don't just dream about the backs of your eyelids (at this point, half my audience closes their eyes to see what the backs of their eyelids look like - admit it), so somewhere between cone/rod and the innermost processing a misfire has to take place.  If it originates really close to the outside world in the optic nerve, then we've got some potential!
&lt;/p&gt;
&lt;p&gt;
Now we just need to do some research and then find test subjects who will let us put wireless transmitters on their optic nerves.
&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;h4&gt;MP3 Tagger&lt;/h4&gt;
&lt;p&gt;
I'd like to be able to put little digital sticky notes on my mp3s.  A note could attach to a whole song or just a few seconds.  Then, you could send all the notes to a friend as a file, and the friend's reader would pop the notes up when the song is played.  Like the little notes in MS Word, but for music.  It's important that they be able to be restricted to a small portion of a song, since, for example, I may not like the whole song, but want to point out a "really cool drum solo" or something.  This software would have nothing to do with music piracy, since it's dependent upon you both having copies of the same song.  Unfortunately, if you want the stickies to be applied automatically, you'd need to use a music format that has track information (ID3, for example); if not, you'd have to apply the stickies manually.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;h4&gt;Filesystem URL Symlinks&lt;/h4&gt;&lt;p&gt;Unix, Linux, Mac, etc. all have a great feature called symlinks - basically virtual copies of a file.  They come in two versions: "hard" symlinks act as full copies of the file, but don't have the original content, while "soft" symlinks act like really thin wrappers so you can basically call a file by two different names (great for directory shortcuts and the like).
&lt;/p&gt;
&lt;p&gt;
Now that OSs like OSX are starting to come with webservers preinstalled, I'd like to see a third category: URL symlinks: things that act like files but are really handled by the web server.  The following example should illuminate: I've got iTunes, which uses an XML file for its library data.  But let's say I'd like to have it use a database instead (maybe to do reporting, or in the hopes that it does lookups faster), or have it use a web url (so all my computers use the same library file, say).  I could have my local web server take over the responsibility for the "file" /Library/iTunes/library.xml or whatever.  It would accept reads and writes just like any other file (so long as I enabled those permissions), but would actually forward the requests to a servlet.  I see this as the next evolution in web servers.  We're almost there with wikis, but not quite.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-112534176053269426?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/112534176053269426/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=112534176053269426' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112534176053269426'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112534176053269426'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2005/08/things-that-should-exist.html' title='Things that Should Exist'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-112500736890390272</id><published>2005-08-25T17:02:00.001-05:00</published><updated>2008-02-15T21:46:36.458-05:00</updated><title type='text'>Specialization</title><content type='html'>&lt;p&gt;
Today I will venture into a few areas that I see as related:
&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Appreciation for and learning of good writing has declined over the past 100 years in America
  &lt;li&gt;Time marches ever forward (ignoring, for the moment, those realities in which it does not)
  &lt;li&gt;The &lt;i&gt;Liberal Arts&lt;/i&gt; education
&lt;/ol&gt;

&lt;h4&gt;1.&lt;/h4&gt;
&lt;p&gt;
I repeatedly hear those in my grandparents' generation complaining that, "kids these days can't read or write."  There are certainly many possible reasons for this being true, including
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;a) Linguistics - grammars and vocabularies are ever-shifting, so generation Y will sound nothing like the Depression-era folks' speech, and thus each will think the other doesn't speak the language correctly.
  &lt;li&gt;b) The Failure of &lt;i&gt;No Child Left Behind&lt;/i&gt; (and the American education system in general) - in my opinion, the situation of reading and writing in America was going downhill well before President Bush took office, but this policy, while well-intentioned, was poorly implemented.  It certainly isn't helping.  Fully Federalizing education has failed spectacularly for the last 40 years, so I'm all fore giving the states and local communities more power, but they need more money, too.
  &lt;li&gt;c) There's more stuff to learn - seriously.  Kids 100 years ago didn't have to master the internet and learn the history of the Iraq war.  Admittedly, there is material that they learned that has gone by the wayside, but for the most part, we just keep increasing the amount of &lt;i&gt;stuff&lt;/i&gt; kids have to learn by the time they're 18.  This is a direct by-product of #2, above.
&lt;/ul&gt;

&lt;p&gt;
This essay is not the place to debate the first or second reason for the change (I say decline, but 1a above argues against that) in the reading and writing of American students.  I am interested in the effects of 1c.
&lt;/p&gt;

&lt;h4&gt;2.&lt;/h4&gt;&lt;p&gt;That means stuff accumulates over time.  There's never &lt;em&gt;less&lt;/em&gt; of it than there was.&lt;/p&gt;

&lt;h4&gt;3.&lt;/h4&gt;
&lt;p&gt;
The theory of a Liberal Arts education is that it produces a well-rounded academic.  This is a wonderful goal.  I make my living writing computer code, but I wouldn't want my life or learning limited to that; I would go insane.  Well-roundedness has another benefit: more connections.  Invention, creativity, problem solving - all the stuff where the gears in your head are really chugging - are basically the synthesizing of ideas.  The more fields with which you have experience, the more connections and styles of thought you have.  Some argue, "why should I have to take 4 semesters of psychology if I know I want to go into Gothic Architecture?"  This is a good point; taken to the extreme, the idea of "more classes is better" would mean never graduating.  So we need to find a balance.
&lt;/p&gt;
&lt;p&gt;
But even if we find a good balance today, won't it have to shift with time?  There will be more classes necessary to learn all about Gothic Architecture since eventually there will be the Neo-Gothicists and the Post-Neo-Gothicists, and ...  There will also be new fields not yet imagined - fields about which "any intelligent person" ought to know at least a little.  So if all fields tend to expand in volume at about the same rate, the ratios won't shift, but we'll all end up spending longer in school.
&lt;/p&gt;
&lt;p&gt;
Let's hope those working to lengthening life expectancy maintain their focus.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-112500736890390272?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/112500736890390272/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=112500736890390272' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112500736890390272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112500736890390272'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2005/08/specialization.html' title='Specialization'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-112473393285476589</id><published>2005-08-22T12:46:00.003-05:00</published><updated>2008-02-15T21:51:48.098-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jsp'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>CSS as JSP</title><content type='html'>&lt;h4&gt;The Problem&lt;/h4&gt;
&lt;p&gt;
I've been working on refactoring a project from tables to a table-less design with CSS.  The stated benefit (with which I agree wholeheartedly) is that using tables for layout of non-tabular data (that is, using tables to position blocks of text) is improper because it is using the wrong tool for the job.  Any artisan (woodworker, metalsmith, sculptor) would tell you this is a huge no-no, but in web design, it's gone unchallenged for virtual centuries (i.e. a few years).  But the "it's-just-bad-art-and-bad-zen" argument isn't the whole story: alternative browsers (cell phones, audiobrowsers for the deaf, etc) have no idea what these tables mean, and will therefore confuse their users.
The problem is that though CSS is &lt;a href="http://www.w3.org/Style/CSS/"&gt;standardized&lt;/a&gt;, some broswers (most notoriously, IE) don't conform to the standard.
&lt;/p&gt;

&lt;h4&gt;The Established Solution&lt;/h4&gt;
&lt;p&gt;
So far, people have been adding hacks to their CSS to get around browser differences.  Things like the &lt;a href="http://www.info.com.ph/%7Eetan/w3pantheon/style/starhtmlbug.html"&gt;star html hack&lt;/a&gt; and the &lt;a href="http://www.sam-i-am.com/work/sandbox/css/mac_ie5_hack.html"&gt;mac backslash hack&lt;/a&gt; are ingenious, but they impede development.  They're hard for future programmers to understand (even with liberal comments), and they're logically messy.  (No self-respecting C++ programmer would write
&lt;code&gt;&lt;pre&gt;  width = 100;
  callBackSetWidth(120);  //Linux platforms before
                          //1997 don't support this,
                          //so they get the value 100
&lt;/pre&gt;&lt;/code&gt;
It's just ugly.)
&lt;/p&gt;

&lt;h4&gt;My Solution&lt;/h4&gt;
&lt;p&gt;
I came upon my solution by accident.  I have been using the .jsp extension for my CSS files for a while now for the sole purpose of being able to use the &amp;lt;c:url&gt; tag.  If I use an image for a background, I don't want the link to have to reference my project name - epecially since the context may change to root at deployment.
&lt;p&gt;
&lt;/p&gt;
Because the CSS files were already dynamically generated, I thought of doing browser dependency with &lt;c:if&gt; tags.  I've got
&lt;pre&gt;&lt;code class='jsp'&gt;&amp;lt;c:set var="user_agent" value="${headerValues['user-agent'][0]}" /&gt;

&amp;lt;c:choose&gt;
  &amp;lt;c:when  test="${fn:startsWith(user_agent, 'Mozilla/5.0')}"&gt;
    &amp;lt;%-- Firefox 1.0, Gecko, etc --%&gt;
    &amp;lt;c:set var="firefox" value="${true}" /&gt;
    &amp;lt;c:set var="ie" value="${false}" /&gt;
    &amp;lt;c:set var="app_width" value="760" /&gt;
  &amp;lt;/c:when&gt;
  &amp;lt;c:otherwise&gt;
    &amp;lt;%-- IE 6 --%&gt;
    &amp;lt;c:set var="firefox" value="${false}" /&gt;
    &amp;lt;c:set var="ie" value="${true}" /&gt;
    &amp;lt;c:set var="app_width" value="762" /&gt;
  &amp;lt;/c:otherwise&gt;
&amp;lt;/c:choose&gt;
&lt;/code&gt;&lt;/pre&gt;
at the top of the file.  You could easily have more cases if you need to support more browsers.  Notice first the "ie" and "firefox" variables.  These can be used by &lt;c:if&gt; tags later for browser-specific settings.  Also notice the global variable app_width; this is a nice way of promoting reuse (constants are our friends - it'd sure be nice to be able to make 'em &lt;code&gt;final&lt;/code&gt; in the page scope, though) while allowing differences between browsers.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-112473393285476589?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/112473393285476589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=112473393285476589' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112473393285476589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112473393285476589'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2005/08/css-as-jsp.html' title='CSS as JSP'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-112472636701464872</id><published>2005-08-22T10:39:00.001-05:00</published><updated>2008-02-15T21:55:17.848-05:00</updated><title type='text'>The Dangers of Globalization</title><content type='html'>&lt;h4&gt;The Premise&lt;/h4&gt;
&lt;p&gt;
&lt;a href="http://www.wamu.org/programs/dr"&gt;The Diane Rehm Show&lt;/a&gt; hosted Barry Lynn today to discuss his book, &lt;a href="http://www.randomhouse.com/doubleday/catalog/display.pperl?isbn=9780385510240"&gt;End of the Line: The Rise and Coming Fall of the Global Corporation&lt;/a&gt;.  Lynn was a globalization consultant for many business, and, over the years, came to believe that as our economy has become more global for the sake of efficiency (which all economists will agree is a benefit), this efficiency has come with increased risk.  He gives examples such as computer manufacturers relying on chips from Taiwan, and we are thus importing their political instability in the form of component-reliance.  Lynn's solution is to use the US Government to force diversification and backup, such as a law stating "no one foreign country can supply more than 25% of a given product."
&lt;/p&gt;

&lt;h4&gt;My criticism&lt;/h4&gt;
&lt;p&gt;
Such a law would probably have the intended benefit - political disturbances in Taiwan would have less of an effect on our economy because businesses would be forced to also use Brazil.
&lt;/p&gt;
&lt;p&gt;
(Opponents who still accept that this is a problem would argue that the US Government should be giving tax credits to companies doing manufacturing and sourcing within our borders so as to decrease dependence on foreign goods and services overall.  This has some merit, but strikes me as a little heavy-handed.  It's basically substituting tax money for efficiency, which smacks of socialism.  This &lt;a href="http://en.wikipedia.org/wiki/Ussr"&gt;doesn't work&lt;/a&gt;.)
&lt;/p&gt;
&lt;p&gt;
I, however, like to think of Government as the solution only when we can't come up with a free-market solution.  Therefore, I began to brainstorm some ideas that will help alleviate future problems due to dependence on unstable resources.  (By the way, people who study computer science will be smacking their foreheds and saying, "duh," throughout this whole article, because we're constantly trying to limit dependence upon unstable resources.)
&lt;/p&gt;
&lt;p&gt;
&lt;h4&gt;Some ideas&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;A company that offers foreign-instability-insurance.  If you've got a $10B business that relies on information stored in Bangalore, we'll give you money when Bangalore falls into the ocean or erupts into civil unrest . . . for a price.  This has the benefit of being immediately profitable (we're not making payouts until something bad happens, and we're taking in premiums from the get-go), but the actuaries are going to complain a lot because they've never seen a problem like this.
&lt;li&gt;A company that offers goods/services backups.  Creating domestic copies of Dell's offshore data is quite easy, but how do you create a backup chip manufacturing or chemical processing plant?  A backup textile factory?  Perhaps the company could have a branch that specializes in really fast construction and buy up land in cheap areas to be used at a moment's notice.  Clearly location isn't important, since the plants are now 8000 miles away.
&lt;li&gt;(as a little bonus, Company #1 could offer discounts to businesses that employ the services of Company #2 - now we've got a risk-reducing empire on our hands!)
&lt;li&gt;A company that stops natural disasters.  You'd just call them up and say, "hey, in case there's an earthquake about to hit India, I'd rather it didn't."  Technical specs to be hashed out later.
&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-112472636701464872?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/112472636701464872/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=112472636701464872' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112472636701464872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112472636701464872'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2005/08/dangers-of-globalization.html' title='The Dangers of Globalization'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-112421054397514360</id><published>2005-08-16T11:34:00.001-05:00</published><updated>2008-02-15T21:55:51.175-05:00</updated><title type='text'>The Business Experiment</title><content type='html'>&lt;p&gt;
&lt;a href="http://www.thebusinessexperiment.com/"&gt;The Business Experiment&lt;/a&gt; is trying to create an open-source-style business.  I like the idea (and am a member), but I have some reservations.  Some critics worry that people won't be willing to share their ideas for fear of losing out on the rewards.  I'm perfectly happy to take that risk, because from all the startups I've tried to start, I know that the odds of actually getting your idea going is close to nil, so it's a worthwhile trade.  I love the idea of collective wisdom (which is oddly kind of the opposite of groupthink) - the anecdote that really hits home with me is that of the M&amp;Ms in the jar:
&lt;/p&gt;
&lt;p&gt;
If you put out a jar of M&amp;Ms and ask everybody to guess how many there are in the jar, with the person guessing closest getting a prize, the average guess will be very close to dead-on, even if no single guess is.
&lt;/p&gt;
&lt;p&gt;
So I really like the idea, but I do have some worries.  One of them is how to split up revenues among those "running" the business.  Also, are the people signed up on the site employees?  Or one collective CEO?  If the former, we'll need to have some sort of payscale.  For either, there will have to be some determination of how much each person contributed (or simply divide by #users, which, to some, would seem very unfair).
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-112421054397514360?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/112421054397514360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=112421054397514360' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112421054397514360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112421054397514360'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2005/08/business-experiment.html' title='The Business Experiment'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-112391254507586660</id><published>2005-08-13T00:48:00.001-05:00</published><updated>2008-02-15T21:56:14.185-05:00</updated><title type='text'>Consumating</title><content type='html'>&lt;p&gt;
"Tell me about your mother," &lt;a href="http://www.consumating.com"&gt;Consumating&lt;/a&gt; asked.  And so I responded, but, as mentioned in the postscript, I told a lie.  My mother has, in fact, never climbed Mt. Kilimanjaro.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-112391254507586660?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/112391254507586660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=112391254507586660' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112391254507586660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112391254507586660'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2005/08/consumating.html' title='Consumating'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-112379056625904542</id><published>2005-08-11T14:48:00.001-05:00</published><updated>2008-02-15T21:56:35.565-05:00</updated><title type='text'>Businesses are Foolish</title><content type='html'>&lt;p&gt;
So many eBusinesses out there subscribe to the same, dumb model.  They make you create an account to do the smallest thing, like email them a question.  &lt;a href="http://www.buy.com"&gt;Buy.com&lt;/a&gt; just lost a sale because I could not email them a question.  (Granted, the question was whether they would match, or even come close to a competitor's price.)
&lt;/p&gt;
&lt;p&gt;
I imagine companies require all sorts of registration so they can collect information on their customers in order to better market.  If I want specials emailed to me, though, I would just want to submit my email address to a "specials newsletter" form.  I still wouldn't want to go through the whole signup process.  If I don't end up purchasing from them, my account is just wasting space on their server; if I do end up purchasing, they've got all that information from the order form.
&lt;/p&gt;
&lt;p&gt;
There is another possible reason for all these registrations: the programmers aren't smart enough to figure out a way to do what the business analysts want without logins.  Just a tiny bit of thinking outside the box (and not all that outside the box) yields elegant solutions for many of these issues.  Let's say you want to make sure that the email address submitted to the "specials newsletter" wasn't somebody else's; you simply send them a confirmation email first.  Now, what about when the person wants to unsubscribe?  Simply having an email daemon (they're FREE from Apache's Jakarta project, for goodness' sake) that listens for "unsubscribe" emails accomplishes this.
&lt;/p&gt;
&lt;p&gt;
Now, don't get me wrong: sometimes, an account on a site - even an eMarketplace - can be a Good Thing(TM).  (Side note: I'm really not sure why we say "Good Thing(TM)," but I'm pretty sure that's how it's done now.)   If I want to view order history, view order tracking, not have to reenter my billing address, ... I'm all for it.  But what if I don't want any of that?
&lt;/p&gt;
&lt;p&gt;
So in the end: making people sign up for accounts that don't really do anything just pushes customers away.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-112379056625904542?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/112379056625904542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=112379056625904542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112379056625904542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112379056625904542'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2005/08/businesses-are-foolish.html' title='Businesses are Foolish'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-112310890553916540</id><published>2005-08-03T17:34:00.001-05:00</published><updated>2008-02-15T21:57:09.418-05:00</updated><title type='text'>Being understood</title><content type='html'>&lt;p&gt;
I just reread my Plea 1, and was reminded of what happened this weekend.  I had asked my friend &lt;a href="http://www.livejournal.com/users/abstract_me"&gt;Chelsey&lt;/a&gt; to come over and help me clean.  She agreed, but by "help" she meant "heckle."  This actually was fine, since just having someone around to keep me on task works wonders.  Bonus point one for CMR.
&lt;/p&gt;
&lt;p&gt;
But to the point: at one point I had mentioned that I tend to listen to music without listening to the lyrics (much to the annoyance of an ex girlfriend).  Later, I tried to explain Schenkerian theory of pivot chords and pivot notes (hence the relevence to Plea 1) and my music thesis.  After twenty minutes of doing complete injustice to the theory, Chelsey says, simply, "now I see why you don't pay attention to lyrics."  It was the highlight of my summer; I haven't felt &lt;span style="font-style:italic;"&gt;understood&lt;/span&gt; in a long time.  So bonus point two to CMR.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-112310890553916540?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/112310890553916540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=112310890553916540' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112310890553916540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112310890553916540'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2005/08/being-understood.html' title='Being understood'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-112310787700476083</id><published>2005-08-03T17:17:00.002-05:00</published><updated>2008-02-15T22:02:01.500-05:00</updated><title type='text'>Java notes</title><content type='html'>&lt;h4&gt;The best way to iterate (pre java 1.5)&lt;/h4&gt;
&lt;pre&gt;&lt;code class='java'&gt;for (final Iterator iter = myCollection.iterator(); iter.hasNext(); ) {
  //code
}&lt;/code&gt;&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;
Benefits:
&lt;ul&gt;
  &lt;li&gt;forces iter to have the right scope
  &lt;li&gt;puts looping logic on one line (unlike while, or wose yet, do...while)
&lt;/ul&gt;
&lt;/p&gt;

&lt;h4&gt;A gripe&lt;/h4&gt;
&lt;p&gt;
javadoc should be able to translate &amp;lt; and &amp;gt; into &amp;amp;lt; and &amp;amp;gt; automatically. For actual html tags, you can just write &amp;lt;li&amp;gt; or whatever, but you can't put &lt;code class='java'&gt;List&amp;lt;Dog&amp;gt;&lt;/code&gt; in a javadoc comment. Javadoc should be able to tell the difference between html tags and parameterized types (not to mention mathematical logic, like myNum &amp;lt; .5). I just think "&lt;code class='java'&gt;@param dogs a List&amp;amp;lt;Dog&amp;amp;gt; that are available for sale&lt;/code&gt;" looks ugly.
&lt;/p&gt;

&lt;h4&gt;Use Business-Level Helpers&lt;/h4&gt;
&lt;p&gt;
In &lt;a href="http://half.ebay.com/cat/buy/prod.cgi?cpid=1227352348"&gt;Better Faster Lighter Java&lt;/a&gt;, Tate and Gehtland discuss breaking dependencies (pp 54 ff).  They describe the "train wreck" that can happen when you have things like "&lt;code class='java'&gt;store.getAddress().getCountry().getState().getCity()&lt;/code&gt; or ... &lt;code class='java'&gt;address.country.state.city&lt;/code&gt; ... [especially when the code] reaches into many different packages."  They suggest adding helper methods that do the reaching for you from the top layer so that clients of Store don't need to know about the intermediary classes.
&lt;/p&gt;
&lt;p&gt;
I suggest an alternate solution: the use of very specialized helper classes.  Such a class might have only one method: &lt;code class='java'&gt;City getCity(Store store)&lt;/code&gt;.  They are even more useful when doing calculations rather than simple accesses.  A class like this allows you to change the internal structure of Store without affecting its clients.  If you later want to use database lookups or web-service lookups, or send an SMS to a guy that sits in your office to do lookups, you can simply replace the code for the helper.  (Note that these helpers should &lt;strong&gt;NOT&lt;/strong&gt; be Singletons, or you're going to create quite the bottleneck!)
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-112310787700476083?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/112310787700476083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=112310787700476083' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112310787700476083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/112310787700476083'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2005/08/java-notes.html' title='Java notes'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-111807420149416169</id><published>2005-06-06T10:49:00.001-05:00</published><updated>2008-02-15T22:02:59.426-05:00</updated><title type='text'>Plea 1</title><content type='html'>&lt;p&gt;An excerpt from an email I sent my father this morning: "Could you tell me a little bit about Histrionic Personality Disorder? A friend had mentioned she thought she suffered from it and asked me to do some reading. I would tend to agree, except that I find it's easy to fit anyone to any disorder; I hear people of my generation overdiagnose themselves and each other quite often."
&lt;/p&gt;
&lt;p&gt;
If anyone has any comments on HPD or overdiagnises, I'd be happy to hear about them, but that isn't what I want to discuss in this essay.  What I want to discuss is  subtlety of language.  Reread that last phrase - the one after the semicolon. It took me a second as well.  My original meaning was "I hear my friends doing this," not, "I hear that my friends do this."  After writing and rereading the sentence, I thought about changing it to add clarity, but I realized that I in fact wanted to imply both meanings.
&lt;/p&gt;
&lt;p&gt;
Having noticed this, I have several questions:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Is this an example of very good or very bad writing?  I love the fact that I can say two things with one sentence, but there are those who argue in favor of clarity, which this decidedly is not.  (See also two of my favorite parts of music theory: “pivot chord” and “pivot note.”)
&lt;li&gt;Would anyone else have noticed this sentence if I had put it in some widely-read journal?  Is it appropriate or boastful to publicly dissect my own sentence in this way?
&lt;li&gt;Do other people choose their words this carefully?  (Note that I did not initially choose my words here, but rather noticed them afterwards.)  Do I overanalyze what others say?  On the other hand, maybe I miss subtlety.
&lt;/ul&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-111807420149416169?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/111807420149416169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=111807420149416169' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/111807420149416169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/111807420149416169'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2005/06/plea-1.html' title='Plea 1'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-111807214747766893</id><published>2005-06-06T10:34:00.001-05:00</published><updated>2008-02-15T22:06:11.564-05:00</updated><title type='text'>Admission 1</title><content type='html'>&lt;p&gt;
On the train back from Chicago, I read a passage from a David Sedaris book that got me thinking.  I had just had a conversation with Luciana wherein she revealed that my correcting her grammar bothered her.  I pointed out that I truly did not do it in order to make myself appear or feel superior, but, rather, because I thought she would want to learn (or already knew, but had simply slipped up).  Sedaris was comparing his repeated and unsuccessful cleanings of his sister’s apartment to a missionary proffering Jesus to worshipers of Tiki Gods.  This makes me think I am perhaps proselytizing a more formal manner of speaking English. (Wait a second: is the object of proselytize the subject matter or the person whom you are trying to convince? That is, am I "proselytizing a ... manner of speaking" or am I "proselytizing Luciana in favor of a ... manner of speaking"?)
&lt;/p&gt;
&lt;p&gt;
Perhaps now is the time to start making an effort to no longer correct people’s grammar.  (Note that I’ve always thought the no-splitting-your-infinitives rule is bogus since it stems from English teachers analyzing Latin, in which such a rule is moot.)  As if the fact that it bugs people weren't a good enough reason.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-111807214747766893?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/111807214747766893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=111807214747766893' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/111807214747766893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/111807214747766893'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2005/06/admission-1.html' title='Admission 1'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-111401874788116056</id><published>2005-04-20T12:36:00.001-05:00</published><updated>2008-02-15T22:15:53.856-05:00</updated><title type='text'>Inductum Administratione: de Aggerando Auxilii Barbaribus</title><content type='html'>&lt;p&gt;
Here I make a very quick analysis of some points made by our current federal administration (that of George Walker Bush). All quotes and numbers come from &lt;a href="http://cfrterrorism.org/policy/foreignaid.html"&gt;http://cfrterrorism.org/policy/foreignaid.html&lt;/a&gt;          
&lt;/p&gt;

&lt;h4&gt;First, I combine two statements&lt;/h4&gt;
&lt;p&gt;
 &lt;strong&gt;"Do Americans understand how much of the U.S. budget goes to foreign aid?"&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
 "No. A 2001 poll sponsored by the University of Maryland showed that most Americans think the United States spends about 24 percent of its annual budget on foreign aid—more than 24 times the actual figure."
&lt;/p&gt;

&lt;p&gt;
 &lt;strong&gt;"Do Americans support increasing foreign aid?"&lt;/strong&gt;
&lt;/p&gt;
    
&lt;p&gt;
 "Yes. A University of Maryland poll, which was conducted in July 2002, indicated that 81 percent of Americans support increasing foreign-aid spending to fight terrorism. According to the poll’s findings, the typical American would like to spend $1 on foreign aid for every $3 spent on defense; the real ratio in the proposed budget for fiscal year 2003 is $1 on aid for every $19 spent on defense."
&lt;/p&gt;

&lt;p&gt;
 If Americans think we’re spending 24% and even that isn’t enough, certainly 1% can’t be anywhere near enough, right?
 I understand that the US is a republic, not a democracy.  With that understanding comes an understanding that most
 Americans do not have an appreciation for the nuances of foreign politics, including foreign aid.
 Though leaders shouldn’t bow to every whim of the public (if they did, they wouldn’t be leaders, would they?
 See also Alexandre Ledru-Rollin: "There go my people. I must find out where they are going so I can lead them."),
 they should certainly listen to their constitutents (or else they can't be representative).
&lt;/p&gt;

&lt;h4&gt;Then, a comparison to other nations&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;"How do U.S. aid levels compare with those of other contries?"&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;
 "The U.S. foreign-aid budget as a percentage of gross national product (GNP) ranks last among the world’s
 wealthiest countries (at about 0.1 percent). In raw dollars, however, the United States is now the world’s
 top donor of economic aid, although for more than a decade it was second to Japan, which is far smaller and
 has been beset by economic woes. In 2001, the United States gave $10.9 billion, Japan $9.7 billion, Germany
 $4.9 billion, the United Kingdom $4.7 billion, and France $4.3 billion. As a percentage of GNP, however,
 the top donors were Denmark, Norway, the Netherlands, Luxembourg, and Sweden. The tiny Netherlands (pop.
 16.3 million) gave $3.2 billion in 2001—almost a third of what America contributed."
&lt;/p&gt;

&lt;p&gt;
 I don’t want Japan or Denmark to drive our foreign (or domestic) policy, but it’s always a good idea to
 see what your friends are doing.
&lt;/p&gt;

&lt;p&gt;
 Neither statement is conclusive, but they both suggest that the US should increase its
 current foreign aid spend.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-111401874788116056?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/111401874788116056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=111401874788116056' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/111401874788116056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/111401874788116056'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2005/04/inductum-administratione-de-aggerando.html' title='Inductum Administratione: de Aggerando Auxilii Barbaribus'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-111401859258567394</id><published>2005-04-20T11:23:00.001-05:00</published><updated>2008-02-15T22:17:13.903-05:00</updated><title type='text'>Inductum Administratione: de Causibus Auxilii Barbaribus</title><content type='html'>&lt;p&gt;
 At some point, I should like to write an essay on why no action is truly altruistic (short version: you wouldn't do it if you didn't feel good about doing it - there's your reward), but today I am going to discuss a specific action that has even more self-interest at heart: foreign aid. In this essay, I show that self preservation is one of the foremost reasons for offering such aid. I shall loosely follow the scientific method, brainstorming some possible reasons, then evaluating the probability of each being the primary reason for offering foreign aid.
(inline note 1: see &lt;a href="http://eduweb.brandonu.ca/~science/zen.htm"&gt;excerpts&lt;/a&gt; from "Zen and the Art of Motorcycle Maintenance" regarding the scientific method, or better yet, &lt;a href="http://half.ebay.com/cat/buy/prod.cgi?cpid=919551&amp;domain_id=1856&amp;amp;meta_id=1"&gt;read the book&lt;/a&gt;)
(inline note 2: it is not my purpose to say that offering foreign aid out of a sense of self preservation is morally superior or inferior to offering it out of a sense of equality. Or pity, for that matter. My object here is to address the likelihood of each underlying cause, not the value of the underlying cause.)
(inline note 3: I specifically address the case of the United States of America offering foreign aid.)
&lt;/p&gt;

&lt;h4&gt;Outline&lt;/h4&gt;
&lt;ol&gt;
  &lt;li&gt;state the requirements for a motive to be considered
  &lt;li&gt;brainstorm a list of possible motives
  &lt;li&gt;evaluate each possible motive
  &lt;li&gt;order the possible motives in terms of likelihood of importance
&lt;/ol&gt;

&lt;h4&gt;Step 1: state the requirements for a motive to be considered.&lt;/h4&gt;
The motive must have a reasonable possibility in resulting in causing the US to provide foreign aid. By "The US," I mean the federal government of the United States of America. My reasons are as follows:
&lt;ul&gt;
  &lt;li&gt;Individual states are prohibited from forming treaties with foreign governments. See The United States Constitution (USCON) I.10. This doesn't prohibit them from offering foreign aid, but it makes the necessary negotiations more difficult.
  &lt;li&gt;Individual states have less money than the US as a whole, and can thus make less of an impact on a foreign nation.
  &lt;li&gt;Even more so for individual people or corporations
  &lt;li&gt;Whereas the federal foreign aid budget for 2004 was $11.4B plus $4.3B in peacekeeping operations to improve foreign armed forces (see &lt;a href="http://cfrterrorism.org/policy/foreignaid.html"&gt;here&lt;/a&gt;).  The foreign aid budget of Missouri during the same period was, as far as I can tell, $0.
&lt;/ul&gt;

&lt;h4&gt;Step 2: brainstorm a list of possible motives.&lt;/h4&gt;
&lt;ul&gt;
  &lt;li&gt;Pity
  &lt;li&gt;Desire for economic equality
  &lt;li&gt;Self preservation
  &lt;li&gt;Image improvement
  &lt;li&gt;Promote trade for our goods
  &lt;li&gt;Adherence to Judaic value of helping another when you are in good fortune
  &lt;li&gt;Adherence to Christian value of sacrificing for the sake of others
  &lt;li&gt;Promote good karma
&lt;/ul&gt;

&lt;h4&gt;Step 3: evaluate each possible motive.&lt;/h4&gt;

At this point, I got bored.  Maybe someone else can contribute to this essay.  Mostly I just wanted to brainstorm...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-111401859258567394?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/111401859258567394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=111401859258567394' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/111401859258567394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/111401859258567394'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2005/04/inductum-administratione-de-causibus.html' title='Inductum Administratione: de Causibus Auxilii Barbaribus'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7819623.post-109133464619279708</id><published>2004-07-31T23:27:00.000-05:00</published><updated>2004-07-31T23:33:37.783-05:00</updated><title type='text'>Introduction</title><content type='html'>I mentioned to my cousin Richmond this evening that he should start a blog since he has some strong opinions regarding the running of our country.

One must be prepared to takes one's own advice, I've always thought, so here goes...
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7819623-109133464619279708?l=100essays.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://100essays.blogspot.com/feeds/109133464619279708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7819623&amp;postID=109133464619279708' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/109133464619279708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7819623/posts/default/109133464619279708'/><link rel='alternate' type='text/html' href='http://100essays.blogspot.com/2004/07/introduction.html' title='Introduction'/><author><name>Gaius</name><uri>http://www.blogger.com/profile/03947488223866692407</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
