<?xml version="1.0" encoding="utf-8"?>
<!-- If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/ -->
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:lj="http://www.livejournal.com">
  <id>urn:lj:livejournal.com:atom1:dacut</id>
  <title>David Cuthbert</title>
  <subtitle>David Cuthbert</subtitle>
  <author>
    <name>David Cuthbert</name>
  </author>
  <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/"/>
  <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom"/>
  <updated>2008-06-30T01:00:02Z</updated>
  <lj:journal username="dacut" type="personal"/>
  <link rel="service.feed" type="application/x.atom+xml" href="http://dacut.livejournal.com/data/atom" title="David Cuthbert"/>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:198902</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/198902.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=198902"/>
    <title>The Rock</title>
    <published>2008-06-30T01:00:02Z</published>
    <updated>2008-06-30T01:00:02Z</updated>
    <content type="html">I haven't been posting my open water workouts -- too many to list this year, and I just haven't had the time -- but this morning's workout was notable:  I finally make it to &lt;a href="http://www.flickr.com/photos/twleung/38832273/"&gt;Blakely Rock&lt;/a&gt; today!&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.kanga.org/~dacut/etc/Workout-20080629.png" width="415px" height="253px" /&gt;&lt;br /&gt;&lt;br /&gt;This is about a mile off-island; since we start in &lt;a href="http://www.48north.com/nov_2006/bainbridge_2.htm"&gt;Blakely Harbor&lt;/a&gt; this makes the trip just under 2&amp;nbsp;miles one-way).  You feel like you're in the middle of Puget Sound standing on the rock.  I hope to get some pictures soon.  In the meantime, here's an overview map to give you an idea where this is in relation to Seattle:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.kanga.org/~dacut/etc/Workout-20080629-overview.png" width="415px" height="245px" /&gt;&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/06/rock.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:198548</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/198548.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=198548"/>
    <title>It's the year 2008...</title>
    <published>2008-06-16T07:00:02Z</published>
    <updated>2008-06-16T07:00:02Z</updated>
    <content type="html">Forget my flying cars.  Why the heck can I &lt;i&gt;still not print from Linux&lt;/i&gt; (more specifically, &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu 8.04&lt;/a&gt;)?&lt;br /&gt;&lt;br /&gt;I threw together a little applet to stitch together a Puget Sound navigation chart from NOAA (check out &lt;a href="http://ocsdata.ncd.noaa.gov/OnLineViewer/PacificCoastViewerTable.htm"&gt;chart number 18449&lt;/a&gt;).  This isn't acceptable for navigation, they say, but hey: I just want something to look at.  I don't own a yacht, boat, or even a kayak; the extent of my water vessel ownership is owning a swimsuit and goggles...&lt;br /&gt;&lt;br /&gt;It was a success; you can download it &lt;a href="http://kanga.org/~dacut/etc/noaa-18449.png"&gt;here&lt;/a&gt;, if you're so inclined.  Anyway, now to print it.&lt;br /&gt;&lt;br /&gt;Oh, god, the agony.&lt;br /&gt;&lt;br /&gt;I tried &lt;a href="http://www.gnome.org/projects/eog/"&gt;Eye of Gnome&lt;/a&gt; first.  I tweaked my printer settings a bit (I'm printing this to 13"x19" glossy paper instead of the normal letter paper) and hit print.  The system starts puzzling over this for a bit (at least if the CPU usage bar is any indication) and then... nothing.&lt;br /&gt;&lt;br /&gt;I open up the printer jobs viewer.  It says the job is stopped with no indication at to why.  That's strange.  I cancel it and try again.  Same result.&lt;br /&gt;&lt;br /&gt;Ok, maybe EOG is flaky.  I cancel the second job and start up &lt;a href="http://www.gimp.org/"&gt;Gimp&lt;/a&gt; (which, incidentally, is an exceedingly dumb and potentially offensive name for an image editing program, but I digress...).  I change the settings again, hit print... and, again, minutes of thinking followed by nothing.  I do the cancel/reprint/cancel/print a test page/reprint shuffle a few times, but all to no avail.&lt;br /&gt;&lt;br /&gt;Hrm.  Something is amiss.  I check out the &lt;a href="http://www.cups.org/"&gt;CUPS&lt;/a&gt; logs:&lt;br /&gt;&lt;pre&gt;E [15/Jun/2008:23:11:10 -0700] PID 28099 (/usr/lib/cups/filter/pstoraster) stopped with status 1!&lt;br /&gt;E [15/Jun/2008:23:11:11 -0700] [Job 226] Job stopped due to filter errors.&lt;/pre&gt;&lt;br /&gt;Well, that's interesting.  But why is this &lt;tt&gt;pstoraster&lt;/tt&gt; program failing?  Any logs?&lt;br /&gt;&lt;br /&gt;Nope, can't find them.  But it turns out that pstoraster is a shell script which does attempt to print some logs out -- they're probably just going to &lt;tt&gt;/dev/null&lt;/tt&gt;.  I write a wrapper to send its output to &lt;tt&gt;/var/log/cups/pstoraster.log&lt;/tt&gt;, try printing again, and see what I get.&lt;br /&gt;&lt;br /&gt;Oh, joy.  It's failing somewhere deep in the bowels of &lt;a href="http://gimp-print.sourceforge.net/"&gt;Gutenprint&lt;/a&gt; and &lt;a href="http://pages.cs.wisc.edu/~ghost/"&gt;Ghostscript&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;DEBUG: Running /usr/bin/gs -dQUIET -dDEBUG -dPARANOIDSAFER -dNOPAUSE -dBATCH -dNOMEDIAATTRS -sDEVICE=cups -sstdout=%stderr -sOUTPUTFILE=%stdout -c -&lt;br /&gt;&lt;i&gt;... many lines of garbage deleted ...&lt;/i&gt;&lt;br /&gt;Error: /rangecheck in --image--&lt;br /&gt;Operand stack:&lt;br /&gt;&lt;br /&gt;Execution stack:&lt;br /&gt;   %interp_exit   .runexec2   --nostringval--   --nostringval--&lt;br /&gt;   --nostringval--   2 %stopped_push   --nostringval--   --nostringval--&lt;br /&gt;   --nostringval--   false   1  %stopped_push   1905   1   3   %oparray_pop&lt;br /&gt;   1904   1   3   %oparray_pop   1888   1   3   %oparray_pop   1771   1&lt;br /&gt;   3   %oparray_pop   --nostringval--   %errorexec_pop    .runexec2&lt;br /&gt;   --nostringval--   --nostringval--   --nostringval--   2   %stopped_push&lt;br /&gt;    --nostringval--   1809   1   3   %oparray_pop&lt;br /&gt;Dictionary stack:&lt;br /&gt;   --dict:1149/1684(ro)(G)--   --dict:0/20(G)--   --dict:126/200(L)--&lt;br /&gt;Current allocation mode is local&lt;br /&gt;Last OS error: 2&lt;br /&gt;GPL Ghostscript 8.61: Unrecoverable error, exit code 1&lt;br /&gt;DEBUG2: cups_close(0x685378)&lt;/pre&gt;&lt;br /&gt;Catch all that?  This will be on tomorrow's quiz.&lt;br /&gt;&lt;br /&gt;How did I end up printing this?  I fired up Windows XP in &lt;a href="http://www.vmware.com/products/player/"&gt;VMware Player&lt;/a&gt;, opened the image using an old copy of &lt;a href="http://www.jasc.com/"&gt;Paint Shop Pro 5&lt;/a&gt; (which works well for 99% of my image editing needs), and hit print.  Pretty map came out a few minutes later.&lt;br /&gt;&lt;br /&gt;Seriously, folks: this is an embarrassment.  You're making Vista look like a dream.&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/06/its-year-2008.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:198293</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/198293.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=198293"/>
    <title>Fly Derrie-Air</title>
    <published>2008-06-06T22:30:02Z</published>
    <updated>2008-06-06T22:30:02Z</updated>
    <content type="html">Skinny?  Flying to Philadelphia?  Check out &lt;a href="http://flyderrie-air.com/"&gt;Derrie-Air&lt;/a&gt;:&lt;blockquote&gt;The magic comes from our one of a kind "Sliding Scale"—the more you weigh, the more you'll pay. After all, it takes more fuel—more energy—to get more weight from point A to point B. So we will charge passengers based on how much mass they add to the plane.&lt;/blockquote&gt;Yes, it is a joke.  Nonetheless, the media company behind this spoof actually did buy full-page adverts in Philly papers this morning.&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/06/fly-derrie-air.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:197892</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/197892.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=197892"/>
    <title>Seals, coming unglued...</title>
    <published>2008-06-06T21:30:04Z</published>
    <updated>2008-06-06T21:30:04Z</updated>
    <content type="html">First, the coming unglued part: &lt;a href="http://apnews.myway.com//article/20080606/D914PCPOI.html"&gt;this&lt;/a&gt; was not my fault.  (Actually, it wasn't anyone's fault, though working around the issue took a lot longer than it should have.)&lt;br /&gt;&lt;br /&gt;But the more interesting part: I apparently have a new pet.  There's a seal in Manzanita Bay, where we often swim, who has decided that I'm fun to play with.  It was pouring on Tuesday, so we didn't have a support craft; instead, I had one of those &lt;a href="http://www.swimoutlet.com/product_p/7625.htm"&gt;lifeguard rescue tubes&lt;/a&gt; dragging behind me on a strap.  The seal thought it would be hilarious to play with it and tug on the straps.  Spooked me out the first time the came around.  Eventually, it just got annoying.&lt;br /&gt;&lt;br /&gt;Wednesday was another swim day, this time with a support craft.  To my surprise, the seal still wanted to play even though I didn't have the tube with me.  This time, it was mostly in the form of bumping against my feet and swimming below me (face up, just to show that he was a better swimmer or somesuch).&lt;br /&gt;&lt;br /&gt;I am a bit worried that he's getting too comfortable with humans.  That's usually not a good thing for wildlife.  Ah well... all of our attempts to scare him off have proven unsuccessful.  I guess we'll just have to live with him.&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/06/seals-coming-unglued.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:197643</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/197643.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=197643"/>
    <title>I've been busy.</title>
    <published>2008-05-26T21:30:03Z</published>
    <updated>2008-05-26T21:30:03Z</updated>
    <content type="html">It amazes me that using the Internet, which used to be a fun, diversionary pastime, is now a lot like &lt;i&gt;work&lt;/i&gt;.  When I do get a free moment -- which is sadly becoming a rare occurrence these days -- jacking in to the matrix (errr, surfing the web, that is) is down at the bottom of the list of things I want to do.&lt;br /&gt;&lt;br /&gt;As a result, updating my journal falls by the wayside, too.&lt;br /&gt;&lt;br /&gt;So... let's see.  Last update was 18 April.  Since then, I've:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Gone to Maker Faire&lt;/b&gt; with Tamara and our friend Julie.  It was a &lt;i&gt;lot&lt;/i&gt; of fun.  A few pictures I took of the gizmos are &lt;a href="http://www.flickr.com/photos/dacut/sets/72157604924234408/"&gt;online&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Started open water swimming&lt;/b&gt; in Puget Sound again.  We've mostly been swimming in Manzanita Bay (here's an &lt;a href="http://www.kanga.org/~dacut/Workout-20070523.png"&gt;overview of a typical workout there&lt;/a&gt;), and there's a seal which loves to swim with us.  Actually, it's the ladies he seems to like.  Don't ask me &lt;i&gt;how&lt;/i&gt; he can tell the difference (or even if it's a male -- apparently, his/her ability to determine interspecial gender is better than mine), but he definitely goes up next to them instead of the guys.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;Gone to &lt;a href="http://www.makah.com/hobuck.html"&gt;Hobuck Beach&lt;/a&gt;&lt;/b&gt; a couple times.  No pictures, sorry; I felt more like wandering than thinking about taking photos.  I did get a nasty tire puncture hitting a sharp rock on highway 112 when returning from my first trip.  That also prompted me to get my tires replaced; when putting the spare on, I noticed that the treads were much more pronounced.  Oops.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Built a BlackBerry application to make &lt;b&gt;oncall life easier&lt;/b&gt; at work, called Sur Appels Sans Frontières (i.e. "On Calls Without Borders" -- yes, I know the French is atrocious, but it translated forward and back properly in Google Translator, so I'm sticking with it).  This was part of a competition to build tools for others in the company to make their lives easier.  The upside: I won the "Best Tool For Builders" category.  The downside: They want me to roll this baby out (in my copious spare time, of course :-).  I did get a nifty hard hat helmet/trophy (in keeping with our internal system builder website's &lt;a href="http://www.creativelearning.ca/images/toys/Bob_Builder_large.jpg"&gt;Bob the Builder&lt;/a&gt; theme).  I'll have to take a picture of that.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Gotten &lt;b&gt;completely inundated with operational issues at work&lt;/b&gt;.  Ironically, while I was giving the demo of Sur Appels, my team was in the middle of dealing with a Sev-1.  It also seems that the new database hardware we're getting has a bad issue with the storage controllers which causes the database to completely hang from time to time.  In usual Amazon tradition, the engineers are being told to just deal with it, it's your problem, not provisioning's.  That is, we'll spend a few million to work around the problem rather than a few thousand to deal with it directly.  &amp;lt;sigh&amp;gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Been &lt;b&gt;househunting off and on&lt;/b&gt;.  More off than on in the last few weeks.  I hate the whole process.  That's all I'll say for now lest this become an angsty rant.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;And there you have it, in executive summary PowerPoint bullet form.  Next slide please.&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/05/ive-been-busy.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:197505</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/197505.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=197505"/>
    <title>It is snowing.</title>
    <published>2008-04-19T00:15:03Z</published>
    <updated>2008-04-19T00:15:03Z</updated>
    <content type="html">Which wouldn't be unusual in and of itself except (a) it's mid-April, and (b) this is Seattle.&lt;br /&gt;&lt;br /&gt;We're supposed to have our first open water swim in a couple weeks.  I'm beginning to wonder about this.&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/04/it-is-snowing.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:197134</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/197134.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=197134"/>
    <title>Maker Faire</title>
    <published>2008-04-18T20:30:04Z</published>
    <updated>2008-04-18T20:30:04Z</updated>
    <content type="html">Anyone reading this going to &lt;a href="http://makerfaire.com/"&gt;Maker Faire&lt;/a&gt; at the San Mateo Fairgrounds next month?&lt;br /&gt;&lt;br /&gt;After two years of wanting to go but doing nothing about it, I'm finally plunking down the money to fly down and go.  I'm usually reluctant to spend money on trips like this for myself without some other attached event (e.g., someone else is going, is getting married, etc.).  I don't really know &lt;i&gt;why&lt;/i&gt; I'm that way; I just am.&lt;br /&gt;&lt;br /&gt;I'll be there on Saturday, May 3rd.  If you'll be there, get my contact info and come say hi!&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/04/maker-faire.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:196886</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/196886.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=196886"/>
    <title>I spent my weekend mostly naked.</title>
    <published>2008-04-14T07:00:02Z</published>
    <updated>2008-04-14T07:00:02Z</updated>
    <content type="html">&lt;p&gt;Probably more information than you wanted to know.  But I was at the &lt;a href="http://www.swimpna.org/index.htm"&gt;PNA/NW Zone swim meet&lt;/a&gt;, so I had an excuse this time.  This was my first ever swim meet that I've actually swum in (I've spent others timing and running the computer).&lt;/p&gt;&lt;p&gt;The &lt;a href="http://www.metrokc.gov/Parks/KCAC/"&gt;King County Aquatic Center&lt;/a&gt; is &lt;i&gt;nice&lt;/i&gt;.  The competition pool is an LCM (long course (50) meter), dividable into various arrangements; for this meet, it was divided into two SCY (short course (25) yard) pools.  It's 9&amp;nbsp;feet deep throughout -- no worrying about hitting your head turning in the shallow end -- and has waveless gutters.  You could warm up during the meet in the dive tank -- 25&amp;nbsp;yards square and 17.5&amp;nbsp;feet deep.  When you jump into it, you feel like you're just going to float forever downward.&lt;/p&gt;&lt;p&gt;Anyway, I did the 1000 and 1650 ("swimmer's mile") freestyle events, and a relay event where I swam another 50 freestyle.  I learned that I'm faster than I think I am, but still nowhere near as fast as I'd like to be.  I managed a 15:13 in the 1000 (vs. expected 18:00), and 25:08 for 1650 (expected 29:00).  However, I &lt;i&gt;know&lt;/i&gt; that I was faster here than I am in my normal pool -- all those niceties plus the adrenaline rush add up.&lt;/p&gt;&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/04/i-spent-my-weekend-mostly-naked.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:196762</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/196762.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=196762"/>
    <title>A decent web framework?</title>
    <published>2008-04-08T19:30:05Z</published>
    <updated>2008-04-08T19:30:05Z</updated>
    <content type="html">I've been playing with a combination of &lt;a href="http://www.cherrypy.org/"&gt;CherryPy&lt;/a&gt;, &lt;a href="http://genshi.edgewall.org/"&gt;Genshi&lt;/a&gt;, and &lt;a href="http://dojotoolkit.org"&gt;Dojo&lt;/a&gt; to put together a website for a friend.  So far, I've been quite pleased.&lt;br /&gt;&lt;br /&gt;CherryPy is the request router -- it's responsible for cracking open the HTTP message and deciding how to process it.  I have a few nits about it -- mainly documentation related -- but getting a webserver set up which did something along the lines of, "Route everything through Genshi except this path, which you should serve from the filesystem," was very straightforward.&lt;br /&gt;&lt;br /&gt;Genshi is the first page framework which evoked a response from me of, "Hm, this could work," instead of, "God, I feel like I'm going to throw up."  It uses an interesting approach: you write everything in XML and embed the programmatic constructs in the attributes.  The rendering phase takes care of the transformation to HTML (or text, or &lt;insert format="format" here="here"&gt;).  For example, here's how you might render a table full of sliders for every integer or floating-point parameter:&lt;br /&gt;&lt;pre&gt;&amp;lt;tr py:for="param in parameters"&amp;gt;&lt;br /&gt;  &amp;lt;td py:if="param.valueType in ('int', 'float')"&amp;gt;&lt;br /&gt;    &amp;lt;div dojoType="dijit.form.HorizontalSlider"&lt;br /&gt;         id="${param.name}Slider"&lt;br /&gt;         py:attrs="param.sliderAttributes"&lt;br /&gt;         intermediateChanges="true"&lt;br /&gt;         onChange="onNumericSliderChange('${name}')" /&amp;gt;&lt;br /&gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I'm used to the frameworks which require you to escape any code.  Genshi lets you do that, if you &lt;i&gt;absolutely&lt;/i&gt; insist upon it:&lt;br /&gt;&lt;pre&gt;&amp;lt;?python&lt;br /&gt;for param in parameters:&lt;br /&gt;?&amp;gt;&amp;lt;tr&amp;gt;&amp;lt;?python&lt;br /&gt;    if param.valuetype in ('int', 'float'):&lt;br /&gt;?&amp;gt;&amp;lt;div dojoType="dijit.form.HorizontalSlider"&lt;br /&gt;         id="${param.name}Slider"&lt;br /&gt;         py:attrs="param.sliderAttributes"&lt;br /&gt;         intermediateChanges="true"&lt;br /&gt;         onChange="onNumericSliderChange('${name}')" /&amp;gt;&lt;br /&gt;  &amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Dojo is a set of widgets.  Not quite &lt;a href="http://code.google.com/webtoolkit/"&gt;Google Web Toolkit&lt;/a&gt;, but it's simple and gets the job done.&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/04/decent-web-framework.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:196455</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/196455.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=196455"/>
    <title>SpamAssassin's multiple personality disorder</title>
    <published>2008-04-04T23:15:03Z</published>
    <updated>2008-04-04T23:15:03Z</updated>
    <content type="html">SpamAssassin has become a bit overly aggressive in its filtering as of late.  A few of my friends' e-mails are getting sucked up in there, so I've had to monitor it a bit more closely.&lt;br /&gt;&lt;br /&gt;Today, however, I found this gem in there.  Clearly, it was conflicted as to whether the e-mail was spam or not, though ultimately it decided it was (and was correct in this determination).  What amazes me is that, even with 12.3 positive points subtracted, this e-mail &lt;i&gt;still&lt;/i&gt; scores as spam.&lt;br /&gt;&lt;pre&gt;Content analysis details:   (8.6 points, 5.0 required)&lt;br /&gt;&lt;br /&gt; pts rule name              description&lt;br /&gt;---- ---------------------- --------------------------------------------------&lt;br /&gt; 1.0 NO_REAL_NAME           From: does not include a real name&lt;br /&gt; 0.1 FORGED_RCVD_HELO       Received: contains a forged HELO&lt;br /&gt; 0.1 HTML_90_100            BODY: Message is 90% to 100% HTML&lt;br /&gt; 0.0 HTML_MESSAGE           BODY: HTML included in message&lt;br /&gt; 0.5 BAYES_99               BODY: Bayesian spam probability is 99 to 100%&lt;br /&gt;                            [score: 1.0000]&lt;br /&gt; 0.0 MIME_HTML_ONLY         BODY: Message only has text/html MIME parts&lt;br /&gt;-4.3 RCVD_IN_BSP_TRUSTED    RBL: Sender is in Bonded Sender Program (trusted&lt;br /&gt;                            relay)&lt;br /&gt;                            [Return Path SenderScore Certified (formerly]&lt;br /&gt;                      [Bonded Sender) - &amp;lt;http://www.senderscorecertified.com&amp;gt;]&lt;br /&gt; 1.6 URIBL_SBL              Contains an URL listed in the SBL blocklist&lt;br /&gt;                            [URIs: selleis.com]&lt;br /&gt; 3.8 URIBL_AB_SURBL         Contains an URL listed in the AB SURBL blocklist&lt;br /&gt;                            [URIs: selleis.com]&lt;br /&gt; 4.1 URIBL_JP_SURBL         Contains an URL listed in the JP SURBL blocklist&lt;br /&gt;                            [URIs: selleis.com]&lt;br /&gt; 2.1 URIBL_WS_SURBL         Contains an URL listed in the WS SURBL blocklist&lt;br /&gt;                            [URIs: selleis.com]&lt;br /&gt; 3.0 URIBL_OB_SURBL         Contains an URL listed in the OB SURBL blocklist&lt;br /&gt;                            [URIs: selleis.com]&lt;br /&gt; 4.5 URIBL_SC_SURBL         Contains an URL listed in the SC SURBL blocklist&lt;br /&gt;                            [URIs: selleis.com]&lt;br /&gt; 0.0 MIME_HTML_ONLY_MULTI   Multipart message only has text/html MIME parts&lt;br /&gt;-8.0 AWL                    AWL: From: address is in the auto white-list&lt;/pre&gt;&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/04/spamassassins-multiple-personality.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:196264</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/196264.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=196264"/>
    <title>Office/cubicle location</title>
    <published>2008-04-04T21:30:03Z</published>
    <updated>2008-04-04T21:30:03Z</updated>
    <content type="html">I've decided that it's not the size of the office which matters; it's the location.  While I wouldn't pass up a posh corner window office on the penthouse floor, that's not what I'm thinking of.  I need an office deep within a maze of twisty passages, all alike.  The effort required to find me would place a high premium on interrupting me, and hopefully I could get more done.&lt;br /&gt;&lt;br /&gt;Then again, maybe this will ensure that I only get determined idiots bugging me.  Hm.&lt;br /&gt;&lt;br /&gt;Tamara and I went down to Sacramento to visit a friend for an extended weekend.  It was fabulous -- we spent a few days at her family's cabin in the Sierras, got together with a bunch of college buddies in the Bay Area, and otherwise just hung out.&lt;br /&gt;&lt;br /&gt;Remember that fitness challenge I was doing in February?  Well, &lt;a href="http://www.barracudas.org/pool/febfitness/ffc.htm"&gt;the results have been posted&lt;/a&gt;; I came in second in my age group again.  The guy who beat me won't beat me next year, though -- if only because I'll move up to the next age group. :-)&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/04/officecubicle-location.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:195699</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/195699.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=195699"/>
    <title>Value of a dollar?</title>
    <published>2008-03-17T19:00:04Z</published>
    <updated>2008-03-17T19:44:58Z</updated>
    <content type="html">If you are paid in or have bank accounts valued in U.S. dollars, the &lt;a href="http://biz.yahoo.com/ap/080317/jpmorgan_bear_stearns.html"&gt;news that Bear Stearns was sold for $2 per share&lt;/a&gt; -- in a deal backed with $30&amp;nbsp;billion [edit: I originally mistyped "million" here] of your tax dollars -- should be &lt;i&gt;extremely&lt;/i&gt; worrying.&lt;br /&gt;&lt;br /&gt;This means that Bear Stearns is valued at $236&amp;nbsp;million.  Last Monday, when it was &lt;a href="http://finance.yahoo.com/q/hp?s=BSC&amp;amp;a=02&amp;amp;b=1&amp;amp;c=2008&amp;amp;d=02&amp;amp;e=17&amp;amp;f=2008&amp;amp;g=d"&gt;trading at $70/share&lt;/a&gt;, it was valued at $8.26&amp;nbsp;&lt;b&gt;billion&lt;/b&gt;.  In the span of a week, $8&amp;nbsp;billion dollars effectively vanished into thin air -- in other words, investors overvalued BSC by 3500%.&lt;br /&gt;&lt;br /&gt;If we were talking about Moe's Junkyard and Hot Dog Stand and other places with shoddy or non-existent accounting, nobody would care.  But we're talking about a &lt;i&gt;bank&lt;/i&gt;, whose finances were tracked by other &lt;i&gt;banks&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;This is like going to the ATM, withdrawing $20, and then trying to buy lunch -- only to find you can't afford it because there's only 57¢ in your wallet.  Or going to the gas station and finding that the price of gas has risen from $3.50/gallon to $122.50/gallon.  All stuff which is &lt;i&gt;supposed&lt;/i&gt; to be unthinkable.&lt;br /&gt;&lt;br /&gt;Yet it's here.  And I'm worried.&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/03/value-of-dollar.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:195364</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/195364.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=195364"/>
    <title>Mirroring blog entries from Blogger to LiveJournal</title>
    <published>2008-03-15T09:45:02Z</published>
    <updated>2008-03-15T09:45:02Z</updated>
    <content type="html">&lt;p&gt;I've gotten a few questions on how I'm using Blogger while having posts mirrored to LiveJournal.  The magic is a little Python script I wrote, which I've sanitized (that is, I got rid of my hard-coded and tossed up &lt;a href="http://www.kanga.org/~dacut/blogger2lj.py"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;It's not for the faint of heart in its current form.  You'll need:&lt;ul&gt;&lt;li&gt;&lt;b&gt;A Unix-ish computer.&lt;/b&gt;  MacOS X is probably sufficient, but I don't have a Mac to test it on.  Sorry, porting this to Windows is just too much effort.&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;a href="http://www.python.org/download/releases/2.5.2/"&gt;Python 2.5&lt;/a&gt;.&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;The &lt;a href="http://code.google.com/p/gdata-python-client/downloads/list"&gt;GData API for Python&lt;/a&gt;&lt;/b&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;You'll probably want to install it as a cron job.  My crontab runs this every 15 minutes:&lt;pre&gt;# m h  dom mon dow   command&lt;br /&gt;*/15 * * * * /home/dacut/bin/blogger2lj.py&lt;/pre&gt;&lt;/p&gt;&lt;p&gt;Why would you want to do this?  In my case, I'm getting &lt;a href="http://news.livejournal.com/106909.html"&gt;weary of the goings-on with the suits&lt;/a&gt; over in LJ land, but still have a bunch of folks who read the version over there.  I guess we got settled in before LJ became the platform for emo tweens.  Heh, live and learn.&lt;/p&gt;&lt;p&gt;Anyway, I'm not saying that others &lt;i&gt;should&lt;/i&gt; move to a new blogging platform.  This just gives you the option to move without having to cut ties with your existing social circle.  Could you imagine what real life would be like if decisions like this dictated your social circle?  "Bob, Linda, Jake: It's been great hanging out with you guys, and I'm going to miss you.  But I'm changing mobile phone companies, and the new one doesn't take phone calls from you.  Sorry."&lt;/p&gt;&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/03/mirroring-blog-entries-from-blogger-to.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:195139</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/195139.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=195139"/>
    <title>Oracle Poetry</title>
    <published>2008-03-13T23:00:03Z</published>
    <updated>2008-03-13T23:00:03Z</updated>
    <content type="html">It's interesting what you can stumble across when you turn stones over while walking along a path.  Or, in my case, when you snoop on network traffic.  Worry not; I was doing this for a good cause: to track down a problem with the Oracle database driver.&lt;blockquote&gt;&lt;center&gt;@"Oracle&lt;/center&gt;&lt;br&gt;Everybody follows&lt;br&gt;Speedy bits exchange&lt;br&gt;Stars await to gl@ow"&lt;br&gt;The preceding key is copyrighted by Oracle Corporation.&lt;br&gt;Dupl@ication of this key is not allowed without permission&lt;br&gt;from Oracl1e Corporation. Copyright 2003 Oracle Corporation.&lt;/blockquote&gt;&lt;br /&gt;It looks like this is a creative way of making sure nobody else writes their own software for talking to Oracle databases -- to do that, you would have to copy the poem, which is a violation of Oracle's copyrights.&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/03/oracle-poetry.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:195068</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/195068.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=195068"/>
    <title>Either I'm losing my edge....</title>
    <published>2008-03-09T03:44:41Z</published>
    <updated>2008-03-09T03:44:41Z</updated>
    <content type="html">&lt;p&gt;... or the jargon beast has eaten the Eclipse folks and changed their website.&lt;/p&gt;&lt;p&gt;Granted, I'm only develop in Java because it's the &lt;i&gt;langue du jour&lt;/i&gt; in software circles today and am not overly enamored of it (or its fanboys), but I do have a reasonably deep understanding of the lingo.  But I can't make heads or tails of the &lt;a href="http://www.eclipse.org/equinox/"&gt;Eclipse Equinox mission statement&lt;/a&gt;:&lt;/p&gt;&lt;blockquote style="font-size:8pt"&gt;&lt;p&gt;From a code point of view, Equinox is an implementation of the OSGi R4 core framework specification, a set of bundles that implement various optional OSGi services and other infrastructure for running OSGi-based systems.&lt;/p&gt;&lt;p&gt;More generally, the goal of the Equinox project is to be a first class OSGi community and foster the vision of Eclipse as a landscape of bundles. As part of this, it is responsible for developing and delivering the OSGi framework implementation used for all of Eclipse. In addition. the project is open to:&lt;ul&gt;&lt;li&gt;Implementation of all aspects of the OSGi specification (including the MEG and VEG work)&lt;/li&gt;&lt;li&gt;Investigation and research related to future versions of OSGi specifications and related runtime issues&lt;/li&gt;&lt;li&gt;Development of non-standard infrastructure deemed to be essential to the running and management of OSGi-based systems&lt;/li&gt;&lt;li&gt;Implementation of key framework services and extensions needed for running Eclipse (e.g., the Eclipse Adaptor, Extension registry) and deemed generally useful to people using OSGi&lt;/li&gt;&lt;/ul&gt;As a peer of the Platform, JDT and PDE projects, the Equinox OSGi code is managed by the Eclipse PMC and ships with the Eclipse project major releases. The various other bundles developed here may ship independently and on different schedules.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;On the other hand, I think I'd be more worried if I &lt;i&gt;did&lt;/i&gt; understand this...&lt;/p&gt;&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/03/either-im-losing-my-edge.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:194739</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/194739.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=194739"/>
    <title>February is over...</title>
    <published>2008-03-01T20:14:44Z</published>
    <updated>2008-03-01T20:14:44Z</updated>
    <content type="html">&lt;p&gt;And that means the &lt;a href="http://www.barracudas.org/pool/febfitness/ffc.htm"&gt;February Fitness Challenge&lt;/a&gt; is done.  Which is good, because my body desperately needs a day off.&lt;/p&gt;&lt;p&gt;I'm rather pleased with how I did.  I swam 121,000 yards (68¾ miles/110 kilometers), beating my goal of 100,000 yards.&lt;/p&gt;&lt;p&gt;In pictorial form:&lt;br /&gt;&lt;center&gt;&lt;a href="http://www.kanga.org/~dacut/Fitness%20Challenge%202008.png"&gt;&lt;img src="http://www.kanga.org/~dacut/Fitness%20Challenge%202008%20Small.png" /&gt;&lt;/a&gt;&lt;/center&gt;&lt;/p&gt;&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/03/february-is-over.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:194395</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/194395.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=194395"/>
    <title>Am I radiant?</title>
    <published>2008-02-25T21:14:49Z</published>
    <updated>2008-02-25T21:14:49Z</updated>
    <content type="html">If you're going to steal something from an abandoned building, I recommend choosing something other than &lt;a href="http://community.livejournal.com/deadmachinery/235925.html"&gt;the old, radioactive X-ray source&lt;/a&gt;.  It's also probably not a great idea to &lt;a href="http://cgi.ebay.com/eureka-x-ray-tube_W0QQitemZ160211662775QQihZ006QQcategoryZ61598QQssPageNameZWDVWQQrdZ1QQcmdZViewItem"&gt;sell it on eBay&lt;/a&gt;.&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/02/am-i-radiant.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:194073</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/194073.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=194073"/>
    <title>Vista -- sorry, it's my bad...</title>
    <published>2008-02-22T09:14:51Z</published>
    <updated>2008-02-22T09:14:51Z</updated>
    <content type="html">&lt;p&gt;At least according to Slashdot, &lt;a href="http://slashdot.org/article.pl?sid=08/02/21/1853257"&gt;Amazon caused Vista to ship before it was ready&lt;/a&gt; by stealing a key Microsoft SVP, Brian Valentine.  He's the SVP of my org at Amazon now.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;They also point out that we're paying him something like $33M over four years; for once, though, I'll say it's money well spent.  He's probably saved the company that much already by cutting out crap.  Very effective leader in my book.&lt;/p&gt;&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/02/vista-sorry-its-my-bad.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:193994</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/193994.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=193994"/>
    <title>I wax statistical...</title>
    <published>2008-02-12T07:29:54Z</published>
    <updated>2008-02-12T07:29:54Z</updated>
    <content type="html">&lt;p&gt;I'm watching "&lt;a href="http://www.nbc.com/Deal_or_No_Deal/"&gt;Deal or No Deal&lt;/a&gt;" -- they have a new gimmick where they're putting up multiple cases with $1 million (12 of 26 for the current contestant), replacing the other high dollar amounts on the board.  However, I'm not sure it actually changes the gameplay at all.&lt;/p&gt;&lt;p&gt;Computing the &lt;a href="http://mathworld.wolfram.com/ExpectationValue.html"&gt;expected value&lt;/a&gt; at any point is straightforward.  The bank's offers, however, are &lt;i&gt;not&lt;/i&gt; solely dependent on the expected value; the number of turns appears to be a factor.  A comment on &lt;a href="http://nslog.com/2005/12/20/deal_or_no_deal_algorithm"&gt;this blog post&lt;/a&gt; suggests &lt;i&gt;offer&lt;/i&gt; = &amp;lt;&lt;i&gt;value&lt;/i&gt;&amp;gt; * &lt;i&gt;turn&lt;/i&gt; / 10 (where &amp;lt;&lt;i&gt;value&lt;/i&gt;&amp;gt; is the expectation value).  The offers the bank is making in the early rounds of the 12 $1 million case version, however, seem low -- almost as if the values on the board were &lt;i&gt;not&lt;/i&gt; $1 million but the previous values.  The episode ended before the contestant finished, so I'm left wondering at this point.&lt;/p&gt;&lt;p&gt;One thing which strikes me, however, is that the endgame is probably the same.  If he/she makes it to the final round, in all likelihood (though I have yet to confirm this statistically) the choice will be between a low dollar amount and a $1 million suitcase.  Maybe it's somehow easier to get to this endgame?  Hm.  You know, I'm going to have to do the math on this one.&lt;/p&gt;&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/02/i-wax-statistical.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:193546</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/193546.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=193546"/>
    <title>Oof...</title>
    <published>2008-02-10T06:29:55Z</published>
    <updated>2008-02-10T06:29:55Z</updated>
    <content type="html">&lt;p&gt;Silly me.  Silly &lt;a href="http://www.barracudas.org/pool/febfitness/ffc.htm"&gt;fitness challenge&lt;/a&gt;.  I swam just over 6 miles today (10,600 yards).  That's the most I've done in a single day and my arms are complaining like crazy.&lt;/p&gt;&lt;p&gt;I'm currently at 23.8 miles for the month; my goal is 56.8 miles (100,000 yards), so I'm a good part of the way there.  Let's hope my muscles don't fall apart.&lt;/p&gt;&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/02/oof.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:193339</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/193339.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=193339"/>
    <title>Early results from Washington</title>
    <published>2008-02-09T23:44:55Z</published>
    <updated>2008-02-09T23:44:55Z</updated>
    <content type="html">&lt;p&gt;At least if the precincts in my caucus were anything to go by, it looks like Obama will have a solid lead in Washington.  The breakdown in my precinct was 188 (12 delegates) for Obama, 55 (3 delegates) for Clinton, and 19 (1 delegate) undecided.  Other precincts split similarly.  Turnout was heavy, as one might expect.&lt;/p&gt;&lt;p&gt;This is the first time I've ever participated in a caucus -- my previous experiences were voting in lame duck primaries in California and Pennsylvania.  I quite like Washington's system; you don't register for a particular party, so you can go to either of the caucuses.  Since McCain has the Republican nomination pretty much locked up, it made far more sense to attend a Democratic caucus.  Listening to people campaign makes for a far more lively atmosphere; participating in the political process is more fun this way.&lt;/p&gt;&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/02/early-results-from-washington.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:193085</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/193085.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=193085"/>
    <title>When work intrudes on your personal life...</title>
    <published>2008-02-04T01:14:58Z</published>
    <updated>2008-02-04T01:14:58Z</updated>
    <content type="html">&lt;p&gt;I just saw the Super Bowl ad for &lt;a href="http://www.pepsistuff.com/"&gt;Pepsi Stuff&lt;/a&gt;.  Unremarkable, except they flashed the Amazon.com logo for a fraction of a second.  It's so &lt;i&gt;weird&lt;/i&gt; seeing that.  I forget just how big Amazon is sometimes.  It's unusual, because the work I do often has a direct impact on the website.&lt;/p&gt;&lt;p&gt;At every other big company I've worked (IBM, Seagate, Cadence), my work usually ends up being a footnote for some minor offshoot project which never made it into a real product.  Until now, it's only been the startups (AstroTerra, Neolinear) where my contributions actually have had a measurable impact for a customer.&lt;/p&gt;&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/02/when-work-intrudes-on-your-personal.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:193007</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/193007.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=193007"/>
    <title>The Fed's big 75 point mistake</title>
    <published>2008-01-29T01:00:00Z</published>
    <updated>2008-01-29T01:00:00Z</updated>
    <content type="html">&lt;a href="http://www.fool.com/investing/international/2008/01/23/why-bernanke-was-wrong.aspx?source=iflfollnk0000003"&gt;This article&lt;/a&gt; in the Motley Fool is, IMNSHO, spot-on.  The Fed's recent 75 point cut in interest rates is a crazy mistake.&lt;br /&gt;&lt;br /&gt;Remember that the Fed's job is to tame inflation, not try to correct the economy.  The economy simply cannot be corrected by central planning like this -- time has shown again and again that this &lt;a href="http://www.econreview.com/events/wageprice1971b.htm"&gt;produces results counter to the effect desired&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;What does reducing the interest rate do?  It makes the dollar a less attractive investment for foreigners -- who wants to buy dollars when the return is lower?  Then basic supply and demand kicks in: a decrease in demand means the price (or exchange rate) goes down.  Since a lot of our goods are imported -- including and especially oil -- their prices will go up.&lt;br /&gt;&lt;br /&gt;The net result?  &lt;a href="http://en.wikipedia.org/wiki/Stagflation"&gt;Stagflation&lt;/a&gt;.&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/01/feds-big-75-point-mistake.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:192602</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/192602.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=192602"/>
    <title>OOXML bad?  Try iTunes.</title>
    <published>2008-01-25T02:00:02Z</published>
    <updated>2008-01-25T09:36:21Z</updated>
    <content type="html">Technical folks like to wail about &lt;a href="http://ooxmlisdefectivebydesign.blogspot.com/"&gt;how defective OOXML&lt;/a&gt; (Microsoft's "open" format for Office) is.  I agree -- with instructions like &lt;a href="http://www.robweir.com/blog/2007/01/guillaume-portes-redux.html"&gt;"render this table in the quirky way Word 95 did it"&lt;/a&gt;, it's an impossible standard to implement.&lt;br /&gt;&lt;br /&gt;However, that is nothing compared to the travesty that is &lt;a href="http://www.apple.com/itunes/"&gt;iTunes&lt;/a&gt;.  I've been having problems with my iPod; whenever I plug it in, iTunes spits up a DOS-like dialog box: "There is no disk in the drive.  Please insert a disk into drive E:.  Abort/Try Again/Continue."  Googling suggests a possible fix: &lt;a href="http://forums.ilounge.com/showthread.php?t=50799&amp;amp;highlight=disk"&gt;delete your iTunes preferences and reinstall&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ugh.  I'd rather &lt;i&gt;not&lt;/i&gt; delete my license key and preferences, thankyouverymuch.  So I decided to see what was in this file and if I could fix it myself.&lt;br /&gt;&lt;br /&gt;I open up &lt;tt&gt;iTunesPrefs.xml&lt;/tt&gt; in XEmacs and am presented with:&lt;pre&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&amp;gt;
&amp;lt;plist version="1.0"&amp;gt;
&amp;lt;dict&amp;gt;
    &amp;lt;key&amp;gt;EQ Preferences&amp;lt;/key&amp;gt;
    &amp;lt;dict&amp;gt;
        &amp;lt;key&amp;gt;EQPresets:129&amp;lt;/key&amp;gt;
        &amp;lt;data&amp;gt;
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
        ....
    &amp;lt;/data&amp;gt;
    &amp;lt;/dict&amp;gt;
    &amp;lt;key&amp;gt;HTTP&amp;lt;/key&amp;gt;
    &amp;lt;dict&amp;gt;
        &amp;lt;key&amp;gt;Cookies&amp;lt;/key&amp;gt;
        &amp;lt;data&amp;gt;
        PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPCFET0NU
        WVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUgQ29tcHV0ZXIvL0RURCBQTElT
        ...
        &amp;lt;/data&amp;gt;
    &amp;lt;/dict&amp;gt;
    &amp;lt;key&amp;gt;Keychain&amp;lt;/key&amp;gt;
    &amp;lt;dict&amp;gt;
        &amp;lt;key&amp;gt;Keychain&amp;lt;/key&amp;gt;
        &amp;lt;data&amp;gt;
        WqtWpl9/8NLX0QgFWU4ogEh/7aKP4SbSBd7LRQZ6G8NBJ8dt+AjSv4fs6UOK
        qZQ1PkuO6SqRct7r67XozEPbT8LIyXCZsHZe3w5qcvBQyWOzOTUVOJXT74ZC
        ...
        &amp;lt;/data&amp;gt;
        &amp;lt;key&amp;gt;iTunes Library XML Location:1&amp;lt;/key&amp;gt;
        &amp;lt;data&amp;gt;
        QwA6AFwARABvAGMAdQBtAGUAbgB0AHMAIABhAG4AZAAgAFMAZQB0AHQAaQBu
        AGcAcwBcAGMAdQB0AGgAYgBlAHIAdABcAE0AeQAgAEQAbwBjAHUAbQBlAG4A
        ...
        &amp;lt;/data&amp;gt;
    &amp;lt;/dict&amp;gt;
&amp;lt;/dict&amp;gt;
&amp;lt;/plist&amp;gt;
&lt;/pre&gt;&lt;br /&gt;And so forth.&lt;br /&gt;&lt;br /&gt;Ok, so I can understand wanting to obfuscate things like my DRM keys (presumably what's behind the Keychain bit). But equalizer settings? Application paths? Huh?&lt;br /&gt;&lt;br /&gt;If you're going to store things in a locked down, proprietary format, why go through the lengths to format and parse it in an interchange format like XML?&lt;br /&gt;&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://www.blogger.com/comment.g?blogID=7759848&amp;amp;postID=255599434834883626"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <id>urn:lj:livejournal.com:atom1:dacut:192386</id>
    <link rel="alternate" type="text/html" href="http://dacut.livejournal.com/192386.html"/>
    <link rel="self" type="text/xml" href="http://dacut.livejournal.com/data/atom/?itemid=192386"/>
    <title>Ah, PL/SQL</title>
    <published>2008-01-17T23:15:03Z</published>
    <updated>2008-01-17T23:15:03Z</updated>
    <content type="html">Ah, the idiocies of Oracle's database language, PL/SQL.&lt;br /&gt;&lt;br /&gt;Let's say you're trying to fix things for a few thousand customers who have managed to create duplicate accounts.  You want to delete the duplicate accounts, which are listed in a driver table called &lt;span style="font-family:courier new;"&gt;DUPLICATE_ACCOUNTS&lt;/span&gt;.  Knowing that committing a few rows at a time is a good thing on a running database, you might try something like the following:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;DECLARE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CUSTOMER_ID NUMBER;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CURSOR CDEL_CUR IS SELECT CUSTOMER_ID&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FROM ADMIN.DUPLICATE_CUSTOMERS;&lt;br /&gt;BEGIN&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OPEN CDEL_CUR;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LOOP&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FETCH CDEL_CUR INTO CUSTOMER_ID;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;EXIT WHEN CDEL_CUR%NOTFOUND;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DELETE FROM CUSTOMERS&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WHERE CUSTOMERS.CUSTOMER_ID = CUSTOMER_ID;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;COMMIT;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;END LOOP;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CLOSE CDEL_CUR;&lt;br /&gt;END;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Note the boldfaced delete clause.  One might expect this to find the row where the &lt;span style="font-family:courier new;"&gt;CUSTOMER_ID&lt;/span&gt; is the same as the &lt;span style="font-family:courier new;"&gt;CUSTOMER_ID&lt;/span&gt; we just fetched from the driver table.  But no!  Oracle interprets this the same as:&lt;br /&gt;&lt;span style="font-family:courier new;font-weight: bold;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DELETE FROM CUSTOMERS&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WHERE CUSTOMERS.CUSTOMER_ID = CUSTOMERS.CUSTOMER_ID;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;In other words, those rows whose &lt;span style="font-family:courier new;"&gt;CUSTOMER_ID&lt;/span&gt; is equal to itself -- which (since there are no null &lt;span style="font-family:courier new;"&gt;CUSTOMER_ID&lt;/span&gt;s) is &lt;i&gt;every single freaking row in the database!&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Yes, I did this (well, something similarly disasterous) at work today.  Yes, it was a production database.  No, thankfully nothing crashed -- our databases are so busy that this immediately got hung up waiting for locks that we were able to kill it once we realized what was happening.&lt;br /&gt;&lt;br /&gt;I'm not a DBA.  I just play one on TV.&lt;p&gt;&lt;font size="-4"&gt;&lt;a href="http://dacut.blogspot.com/2008/01/ah-plsql.html"&gt;Entry converted from Blogger&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;</content>
  </entry>
</feed>
