<?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-8499998</id><updated>2012-01-13T11:42:34.659-07:00</updated><category term='mapReduce'/><category term='cost'/><category term='rackspace'/><category term='javascript'/><category term='s3'/><category term='mongoDB'/><category term='cloud files'/><title type='text'>leifw</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://leifw.wickland.net/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default?start-index=101&amp;max-results=100'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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>209</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8499998.post-1922661054705552335</id><published>2012-01-13T11:37:00.004-07:00</published><updated>2012-01-13T11:42:11.529-07:00</updated><title type='text'>JavaScript's encodeURIComponent and character sets</title><content type='html'>The&lt;a href="http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf"&gt; EcmaScript 5 standard&lt;/a&gt; (section 15.1.3.4) and the Mozilla Developer Network page on &lt;a href="https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/encodeURIComponent"&gt;encodeURIComponent&lt;/a&gt; both say that the string will be encoded to UTF-8, regardless of the underlying page's character set.  That seemed entirely too convenient to believe, so I wrote a page that would let me exercise it.  I hit it with modern browsers as well as Firefox 2 and Internet Explorer 5.5 and 6.  Amazingly, they handled it correctly, even for pages in obscure character sets like &lt;a href="http://en.wikipedia.org/wiki/GBK"&gt;GBK&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;Sleep well tonight in the knowledge that your characters are safe in hands of encodeURIComponent.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-1922661054705552335?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/1922661054705552335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=1922661054705552335' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/1922661054705552335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/1922661054705552335'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2012/01/javascripts-encodeuricomponent-and.html' title='JavaScript&apos;s encodeURIComponent and character sets'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-2814003080361561204</id><published>2011-10-20T23:05:00.004-06:00</published><updated>2011-10-21T08:43:55.841-06:00</updated><title type='text'>How I spent my summer vacation</title><content type='html'>&lt;h2&gt;
Backpacking!&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Stillwater Valley (4 days, 26 miles)&lt;/li&gt;

&lt;li&gt;Granite Peak Attempt (2 days, 20 miles)&lt;/li&gt;

&lt;li&gt;Glacier National Park Transit (6 days, 70 miles)&lt;/li&gt;

&lt;li&gt;Lava Lake Family Trip (2 days, 7 miles)&lt;/li&gt;

&lt;li&gt;Garnet Peak Lookout (2 days, 8 miles)&lt;/li&gt;

&lt;/ul&gt;

&lt;b&gt;Total: 16 days, ~120 miles&lt;/b&gt;&lt;p&gt;&lt;/p&gt;
&lt;a href="https://picasaweb.google.com/lh/photo/79SQheOO1odaFtFwIFYBfQ?feat=embedwebsite"&gt;&lt;img src="https://lh5.googleusercontent.com/-fzXQcJpfAMc/TqD4kPesw7I/AAAAAAAAGWo/kMxjpCLgWXQ/s800/LWW_7724.jpg" height="800" width="533" /&gt;&lt;/a&gt;
&lt;a href="https://picasaweb.google.com/lh/photo/omlPty-MCJ6l5d9xWqOcwg?feat=embedwebsite"&gt;&lt;img src="https://lh4.googleusercontent.com/-159HhGSVwuE/TqD56jl9pcI/AAAAAAAAGW4/qYc1IEAfzuc/s800/LWW_7864.JPG" height="531" width="800" /&gt;&lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
It was a good summer.

(Apologies for the painfully white guy in the pictures.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-2814003080361561204?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/2814003080361561204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=2814003080361561204' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2814003080361561204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2814003080361561204'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2011/10/how-i-spent-my-summer-vacation.html' title='How I spent my summer vacation'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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='https://lh5.googleusercontent.com/-fzXQcJpfAMc/TqD4kPesw7I/AAAAAAAAGWo/kMxjpCLgWXQ/s72-c/LWW_7724.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8499998.post-9794621630217696</id><published>2011-07-18T10:21:00.002-06:00</published><updated>2011-07-18T10:21:58.223-06:00</updated><title type='text'>What Stuck with Me from GlueCon</title><content type='html'>I recently gave a &lt;a href="http://j.mp/pmYDmB"&gt;tech talk&lt;/a&gt; reflecting on some of the highlights of &lt;a href="gluecon.com/2011/"&gt;GlueCon&lt;/a&gt;.  It covered the failure of SOAP, a survey of NoSQL data models, and a brief introduction to node.js.&lt;br&gt;&lt;br&gt;
&lt;iframe src="https://docs.google.com/present/embed?id=dc9spn43_224f7mx7mmt&amp;size=l" frameborder="0" width="700" height="559"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-9794621630217696?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/9794621630217696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=9794621630217696' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/9794621630217696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/9794621630217696'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2011/07/what-stuck-with-me-from-gluecon.html' title='What Stuck with Me from GlueCon'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-2960581920467732888</id><published>2011-06-07T19:14:00.003-06:00</published><updated>2011-06-07T21:09:54.597-06:00</updated><title type='text'>Mastered</title><content type='html'>The ol' postal service delivered the diploma cover for my master's in computer science today.  This was after receiving my diploma rolled up tightly in a cardboard tube a couple weeks back with a postcard voucher for a diploma cover.  That was after skipping (sorry, Mom) the six hour graduation ceremony I wasn't keen to sit through at the beginning of May.  That was after actually finishing up last December.  That was after taking (cough) 9 (eh hem) years to finish it while working full-time, being married, moving a few times, throwing away 9 credits due to transfer, throwing away another pile of credits after abandoning my first thesis, finishing a basement, designing and building another house, and raising a baby to a pre-schooler.  
&lt;p&gt;
I am far prouder of this degree than I ever was my bachelor's.  I was raised with the expectation of getting a college degree.  It was always a foregone conclusion in my mind that I would finish that one.  I struggled a bit with my bachelor's (I'm looking at you &lt;a href="http://www.letu.edu/academics/catalog/index.htm?cat_type=tu&amp;cat_year=2002&amp;course=301"&gt;Electric Circuits I&lt;/a&gt;), but I never had reason or occasion to consider quitting.  I can't count the times I wanted to give up on the master's.  
&lt;p&gt;
Special thanks to my wife and daughter for putting up with me during all that, to my adviser, Rocky Ross, for helping me finish, to Neal Richter for nagging my butt into gear more than once, and to Erich Hannan, my boss through most of that interval, for supporting me doing work and school.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-2960581920467732888?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/2960581920467732888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=2960581920467732888' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2960581920467732888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2960581920467732888'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2011/06/mastered.html' title='Mastered'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-4449056258957103458</id><published>2011-04-17T01:02:00.002-06:00</published><updated>2011-04-17T01:11:11.591-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cost'/><category scheme='http://www.blogger.com/atom/ns#' term='s3'/><category scheme='http://www.blogger.com/atom/ns#' term='rackspace'/><category scheme='http://www.blogger.com/atom/ns#' term='cloud files'/><title type='text'>The Cost of Small Files in the Cloud</title><content type='html'>I've been working with a friend on a little project that generates a mound of small files.  Specifically, we'd like to serve 12 million files of less than 4 KB with an average size of 500 bytes.  It's only 6 GB.
&lt;br/&gt;&lt;br/&gt;
I thought Amazon S3 might be a reasonable way to do it, so I did the math.  I'm not expecting the project to get a lot of usage, so I initially only cared about the cost of getting the files out there.  &lt;a href="http://aws.amazon.com/s3/pricing/"&gt;Amazon S3 charges&lt;/a&gt; $0.01 per 1000 PUTs, $0.14/GB/month for storage, and $0.10/GB for input bandwidth.  For one month that's 12M/1000 * 0.01 + .14 * 6  + .1 * 6 = &lt;a href="http://www.wolframalpha.com/input/?i=12000000%2F1000+*+0.01+%2B+%28.14+*+6%29+%2B+%28.1+*+6+%29"&gt;$121.44&lt;/a&gt;, of which $120 comes from the cost of PUTs alone.  That quickly dissuaded me from considering S3.
&lt;br/&gt;&lt;br/&gt;
Then I remembered that Rackspace has a cloud file storage product, too.  &lt;a href="http://www.rackspace.com/cloud/cloud_hosting_products/files/pricing/"&gt;Rackspace's Cloud Files pricing&lt;/a&gt; is based only on bytes stored and incoming and outgoing bandwidth.  My 6 GB would cost $0.15/GB/month to store and $0.08/GB to upload, for a total of &lt;a href="http://www.wolframalpha.com/input/?i=%286+*+.15%29+%2B+%286+*+.08%29"&gt;$1.38&lt;/a&gt;.  Now we're talking.
&lt;br/&gt;&lt;br/&gt;
I was a little dubious about the pricing, so I contacted Rackspace to double check my numbers.  The rep told me I was doing the math right and claimed that you only pay for reported file size, not size rounded up to the nearest block and not HTTP header overhead.
&lt;br/&gt;&lt;br/&gt;
The cost winner if you want to store a bunch of small files in the Cloud is clearly Rackspace.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-4449056258957103458?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/4449056258957103458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=4449056258957103458' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4449056258957103458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4449056258957103458'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2011/04/price-of-files-in-cloud.html' title='The Cost of Small Files in the Cloud'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-6529044453575310387</id><published>2011-04-17T00:30:00.003-06:00</published><updated>2011-04-18T08:03:56.331-06:00</updated><title type='text'>How HTML5 geolocation works in Firefox, Chrome, and Internet Explorer</title><content type='html'>HTML5 introduces (will introduce?, will have introduced once it's approved?) the &lt;a href="http://dev.w3.org/geo/api/spec-source.html"&gt;Geolocation API&lt;/a&gt;, which enables a web page to ask your browser to ask you if the page can be told &lt;a href="http://html5demos.com/geo"&gt;where on earth you are&lt;/a&gt;. &amp;nbsp;For example, when composing a tweet, Twitter includes an "Add Your Location" link that uses this new API.&lt;br /&gt;
&lt;br /&gt;
Of course, your web browser doesn't just know where you are; it has to ask something else. &amp;nbsp;On a device like your mobile phone which includes a GPS receiver, the operating system can tell it. &amp;nbsp;However, on a notebook without GPS, your browser's not so lucky. &amp;nbsp;&lt;i&gt;Enter the might power of Google.&lt;/i&gt;&amp;nbsp; In this circumstance both browsers fire off a request to http://google.com/lat/json. &amp;nbsp;If your computer has a WiFi device turned on at the time, both browsers send along the name, hardware ID, and signal strength of every WiFi base point that your little lappy can see. &amp;nbsp;When I was sitting at work, the data sent looked like this:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;{
    "version": "1.1.0",
    "request_address": true,
    "wifi_towers": [{
        "mac_address": "xx-xx-xx-xx-xx-01",
        "ssid": "XXXXXXXXXXXX",
        "signal_strength": -81
    }, {
        "mac_address": "xx-xx-xx-xx-xx-00",
        "ssid": "XXXXXXXX",
        "signal_strength": -83
    }, {
        "mac_address": "xx-xx-xx-xx-xx-02",
        "ssid": "XXXXXXXXXXX",
        "signal_strength": -83
    }, {
        "mac_address": "xx-xx-xx-xx-xx-30",
        "ssid": "XXXXXXXX",
        "signal_strength": -62
    }, {
        "mac_address": "xx-xx-xx-xx-xx-62",
        "ssid": "XXXXXXXXXXX",
        "signal_strength": -82
    }, {
        "mac_address": "xx-xx-xx-xx-xx-a0",
        "ssid": "XXXXXXXX",
        "signal_strength": -75
    }, {
        "mac_address": "xx-xx-xx-xx-xx-a1",
        "ssid": "XXXXXXXXXXXX",
        "signal_strength": -74
    }, {
        "mac_address": "xx-xx-xx-xx-xx-61",
        "ssid": "XXXXXXXXXXXX",
        "signal_strength": -81
    }, {
        "mac_address": "xx-xx-xx-xx-xx-a2",
        "ssid": "XXXXXXXXXXX",
        "signal_strength": -75
    }, {
        "mac_address": "xx-xx-xx-xx-xx-32",
        "ssid": "XXXXXXXXXXX",
        "signal_strength": -57
    }, {
        "mac_address": "xx-xx-xx-xx-xx-31",
        "ssid": "XXXXXXXXXXXX",
        "signal_strength": -65
    }, {
        "mac_address": "xx-xx-xx-xx-xx-58",
        "ssid": "XXXXXXXX",
        "signal_strength": -76
    }, {
        "mac_address": "xx-xx-xx-xx-xx-60",
        "ssid": "XXXXXXXX",
        "signal_strength": -75
    }]
}
&lt;/pre&gt;
Google then ships back coordinates for where they think you are based on that WiFi data.  The response also includes city, state, street address, and an estimate of accuracy.
&lt;br/&gt;&lt;br/&gt;
When I was at work, their guess of accuracy was spooky good.  Not only did the Big G put me in the right building, but they also correctly discerned that I was on the south side of that (not terribly large) building.
&lt;br/&gt;&lt;br/&gt;
I also gave it a go from home.  There the accuracy was a little less impressive, but still pretty good.  Google's guess was off by about 250 meters, but that's probably because I live in a relatively newly built up part of a subdivision.  Google put me on the side of the neighborhood that's been around for a few more years.
&lt;br/&gt;&lt;br/&gt;
If your WiFi adapter is turned off, you're not in range of any networks, or your PC doesn't have WiFi, then the request to google.com/lat/json sends an empty set for the WiFi data and Google appears to just use your IP address to determine where you are, returning a city-accurate location.  The returned accuracy was reported as 22 km when I tried it.
&lt;br/&gt;&lt;br/&gt;
Internet Explorer 9 uses a similar trick; when asked for geolocation, it sends a request to https://inference.location.live.net/inferenceservice/v21/Pox/GetLocationUsingFingerprint containing WiFi data.  IE's request doesn't include network name, interestingly.  Microsoft's API is much uglier, relying on XML written in that pedantic way that gives XML a bad name, filled with disgustingly repetitive xmlns junk.  In my very small sample size, Microsoft's data was much lower quality.  From home, my location was misjudged by about 5 km with a reported uncertainty of 16 km.  At work, Microsoft just gave up and said it didn't know where I was.  I wonder if MS just fell back on geo-IP locating for the location it provided when I was at home because when I removed all of the WiFi data from the request and resubmitted it, the returned location was identical.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-6529044453575310387?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/6529044453575310387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=6529044453575310387' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/6529044453575310387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/6529044453575310387'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2011/04/how-html5-geolocation-works-in-firefox.html' title='How HTML5 geolocation works in Firefox, Chrome, and Internet Explorer'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-4965754946927705881</id><published>2011-04-05T21:36:00.016-06:00</published><updated>2011-06-30T14:49:50.012-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mongoDB'/><category scheme='http://www.blogger.com/atom/ns#' term='mapReduce'/><title type='text'>11 Buggy Disappointments in MongoDB</title><content type='html'>I've been exploring MongoDB primarily for its map-reduce functionality lately.  I've found a few shortcoming that I'm not crazy about.
&lt;br /&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;If you &lt;a href="http://www.mongodb.org/display/DOCS/Import+Export+Tools#ImportExportTools-mongodump"&gt;dump&lt;/a&gt; (i.e. export to BSON format) a document containing an array with undefined elements, then when you import that data, the undefined elements are lost, changing the indexes of the values.  For example, exporting a document that contained a member that was created like
&lt;br /&gt;&lt;span style="font-family: monospace;"&gt;var a = [];&lt;br /&gt;a[0] = "a";&lt;br /&gt;a[2] = "c";&lt;/span&gt;
&lt;br /&gt;when imported will result in an array like ["a", "c"], with "c" moved from spot 2 to 1.&lt;/li&gt;
&lt;li&gt;If you &lt;a href="http://www.mongodb.org/display/DOCS/Import+Export+Tools#ImportExportTools-mongoexport"&gt;export&lt;/a&gt; data from a sharded collection, only data from one of the shards is actually output.&lt;/li&gt;
&lt;li&gt;I've had strange, inconsistent problems where mapReduce would fail with no reasonable explanation after &lt;a href="http://www.mongodb.org/display/DOCS/Import+Export+Tools#ImportExportTools-mongoimport"&gt;importing&lt;/a&gt; a large amount (~10GB) of data into a sharded collection. &amp;nbsp;Bouncing the cluster's mongods has fixed the problems.&lt;/li&gt;
&lt;li&gt;Mongo's &lt;a href="http://www.mongodb.org/display/DOCS/Server-side+Code+Execution#Server-sideCodeExecution-Using%7B%7Bdb.eval%28%29%7D%7D"&gt;db.eval()&lt;/a&gt; is much more dangerous than the documentation lets on.  If you do something moderately dumb in there that uses a lot of memory, you can cause the server to run out of memory, which causes it to segfault and leaves the data store in a state that requires recovery.&lt;/li&gt;
&lt;li&gt;The JavaScript map and reduce function passed to &lt;a href="http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-Overview"&gt;mapReduce&lt;/a&gt; don't pull in variables or functions from their scope as one would normally expect of JavaScript.  The mongo solution is the scope argument passed to mapReduce.  Unfortunately, scope can't be used to pass functions.  As far as I can tell, the Mongo approach is to add other function into the &lt;a href="http://www.mongodb.org/display/DOCS/Server-side+Code+Execution#Server-sideCodeExecution-Storingfunctionsserverside"&gt;db.system.js collection&lt;/a&gt;, which is a pretty poor solution because it hinders code maintenance.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;For reasons I can't explain, I've had mapReduce jobs fail a couple of time after running for hours and going through both the map and reduce phases entirely then reporting that a function defined in db.system.js was undefined.  If it was undefined, it should've been reported as undefined before it was called 50 million times. &amp;nbsp;The same mapReduce jobs ran successfully on smaller samples of data in&amp;nbsp;unsharded collections.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mongodb.org/display/DOCS/MapReduce#MapReduce-Parallelism"&gt;Mongo's mapReduce is single threaded&lt;/a&gt;.  &lt;i&gt;shudder&lt;/i&gt;  No, really.  No matter how many mapReduce jobs you throw at it at once, the CP utilization will hover in the 100% range.  If you want Mongo to use more than one core for mapReduce, you need multiple shards on the same box, but in practice that's a rather ineffective approach; Mongo doesn't always shard when I want it to shard, even if I set the chunk size stupidly low.  &lt;/li&gt;
&lt;li&gt;If you do shard to try to get multiple cores running mapReduce, you may find that the primary eats all the memory, starving the secondary shard servers.&lt;/li&gt;
&lt;li&gt;The VM I was playing with Mongo in only had a 100 GB partition.  I ran quite a few different mapreduce jobs which output into different tables, eating up lots of disk space.  One of the mapreduce jobs hung.  I realized that the partition had less than 2 GB of free space left, so Mongo couldn't allocate another slab.  No message was returned to the client explaining this, unfortunately.&lt;/li&gt;
&lt;li&gt;I went around removing all the documents from collections and then dropping them, trying to free disk space.  For whatever reason, Mongo didn't actually free any disk space after I did that.  I tried bouncing the cluster to see if that would allow the servers to reclaim the freed space to no avail.  Although frustrating, that makes sense given that the &lt;a href="http://www.mongodb.org/display/DOCS/Excessive+Disk+Space#ExcessiveDiskSpace-DeletedSpace"&gt;Mongo docs say&lt;/a&gt;, "This [deleted] space is reused but never freed to the operating system."&lt;/li&gt;
&lt;li&gt;The mongo docs say if you want it to return the freed space to the operating system, you should &lt;a href="http://www.mongodb.org/display/DOCS/Excessive+Disk+Space"&gt;repair the DB&lt;/a&gt;.  So I tried &lt;pre&gt;db.repairDatabase()&lt;/pre&gt; Unfortunately, if your disk is full-ish, Mongo won't have space to repair.  When I tried, I got the following error.&lt;br&gt;
&lt;pre&gt;Cannot repair database &lt;i&gt;X&lt;/i&gt; having size: 21415067648 (bytes) because free disk space is: 887955456 (bytes)&lt;/pre&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
There's still plenty to like in Mongo, but at this point, I feel like Mongo's mapReduce functionality is better suited to running queries which are too big to fit in memory, rather than serious data crunching.  Perhaps my difficulties have been due to getting sharding involved with mapReduce. &amp;nbsp;It's also possible I've made a crucial mistake in configuring sharding, but I think I followed the &lt;a href="http://www.mongodb.org/display/DOCS/Configuring+Sharding"&gt;directions&lt;/a&gt; pretty closely.&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-4965754946927705881?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/4965754946927705881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=4965754946927705881' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4965754946927705881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4965754946927705881'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2011/04/weird-buggy-and-disappointing-behavior.html' title='11 Buggy Disappointments in MongoDB'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8499998.post-2754135321886596452</id><published>2011-04-05T14:09:00.005-06:00</published><updated>2011-04-05T15:20:43.202-06:00</updated><title type='text'>Comments in PHP source code for calling a user defined function</title><content type='html'>&lt;div&gt; A co-worker asked me if it was possible to get PHP 5.3 to search other namespaces when it failed to find a function in the global namespace, so we went off to the PHP source code to the place that the virtual machine calls user defined functions.  We found the following comments:&lt;/div&gt; &lt;ul&gt; &lt;li&gt; &lt;span style='font-family:monospace;'&gt; /* Never reached */&lt;/span&gt; &lt;/li&gt; &lt;li&gt; &lt;span style='font-family:monospace;'&gt; /* FIXME: output identifiers properly */&lt;/span&gt;&lt;/li&gt; &lt;li&gt; &lt;span style='font-family:monospace;'&gt; /* Not sure what should be done here if it's a static method */&lt;/span&gt; &lt;/li&gt; &lt;/ul&gt; &lt;div&gt; In turn my colleague quipped, PHP 5.3?  More like PHP 0.5. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-2754135321886596452?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/2754135321886596452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=2754135321886596452' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2754135321886596452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2754135321886596452'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2011/04/comments-in-php-source-code-for-calling.html' title='Comments in PHP source code for calling a user defined function'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-2869888607771648534</id><published>2011-04-04T17:04:00.003-06:00</published><updated>2011-04-04T17:05:34.525-06:00</updated><title type='text'>Proud Moment</title><content type='html'>The help system on my wife's smartphone uses the product I worked on for a few years.  I never would've known it if somebody hadn't pointed it out to me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-2869888607771648534?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/2869888607771648534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=2869888607771648534' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2869888607771648534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2869888607771648534'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2011/04/proud-moment.html' title='Proud Moment'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-7182097785459922411</id><published>2011-03-23T16:53:00.010-06:00</published><updated>2011-03-24T15:06:07.681-06:00</updated><title type='text'>How Google Analytics Works</title><content type='html'>Google is &lt;a href="http://www.google.com/support/conversionuniversity/bin/request.py?hl=en&amp;contact_type=indexSplash&amp;rd=1"&gt;forthcoming with details of how analytics works&lt;/a&gt;, but they don't present it in a nerd friendly way.  The data is wrapped up inside of videos instead of dumped as text.  I may have been able learn this by watching the videos, but it was more fun figure it out by playing with it.
&lt;h3&gt;Summary of Google Analytics' Design&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;All user data is stored in cookies on the visited site.&lt;/li&gt;
&lt;li&gt;No cookies are set on any Google Analytics Domain.&lt;/li&gt;
&lt;li&gt;Each user has a unique ID on each domain they visit.&lt;/li&gt;
&lt;li&gt;User data is transmitted back to Google Analytics in the query string when requesting a 1x1 GIF.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;UML Sequence Diagram of Google Analytics' Design&lt;/h3&gt;
&lt;img src="http://1.bp.blogspot.com/-QPrnPYVzaxc/TYp8eae_qdI/AAAAAAAAGRY/bjxXIuWnGwE/s1600/cdraw.png" /&gt;
&lt;h3&gt;Analyzing the pieces of Google Analytics Data&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Definitions of each of the &lt;a href="http://www.godspeed23.com/analytics/2010/02/google-analytics-cookies/"&gt;&lt;i&gt;utm*&lt;/i&gt; cookies&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Descriptions of the pieces of data in &lt;a href="http://www.analyticsmarket.com/blog/__utmgif-data"&gt;query string for utm.gif&lt;/a&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/8499998-7182097785459922411?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/7182097785459922411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=7182097785459922411' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/7182097785459922411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/7182097785459922411'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2011/03/how-google-analytics-works.html' title='How Google Analytics Works'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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/-QPrnPYVzaxc/TYp8eae_qdI/AAAAAAAAGRY/bjxXIuWnGwE/s72-c/cdraw.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8499998.post-6897915986269479470</id><published>2011-03-21T15:01:00.001-06:00</published><updated>2011-03-21T15:02:39.467-06:00</updated><title type='text'>Weekend Hacking Failure: .NET parser for YAML in ANTLR</title><content type='html'>Useless information: I tried to write a decent .NET parser for YAML over the weekend.  I failed, but learned a few things

&lt;ol&gt;
&lt;li&gt;I didn't have a good handle on what YAML was.  For example, I didn't realize that whitespace was significant.&lt;/li&gt;
&lt;li&gt;YAML is a full superset of JSON.&lt;/li&gt;
&lt;li&gt;YAML defines all kinds of stuff to support strongly typed serialization that I didn't want and didn't need.&lt;/li&gt;
&lt;li&gt;The grammar presented in the YAML standard isn't particularly well suited for copying because it ends up with all sorts of useless rules that the lexer or parser doesn't like and you have to manually eliminate.&lt;/li&gt;
&lt;li&gt;One of the main YAML guys apparently tried to built a parser for YAML on top of ANTLR (which is what I was trying to use) a few years back.  It looks like he gave up fairly early on.&lt;/li&gt;
&lt;li&gt;I probably should've started by copying SnakeYaml, which is a pretty good Java implementation.&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/8499998-6897915986269479470?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/6897915986269479470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=6897915986269479470' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/6897915986269479470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/6897915986269479470'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2011/03/weekend-hacking-failure-net-parser-for.html' title='Weekend Hacking Failure: .NET parser for YAML in ANTLR'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-5789924250327480005</id><published>2011-03-08T14:33:00.005-07:00</published><updated>2011-03-08T15:55:39.954-07:00</updated><title type='text'>What I learned about git today: reverting, ignoring, diffing, and vimming</title><content type='html'>I learned a few things about git today:
&lt;ol&gt;
&lt;li&gt;I wanted to see what I'd added to the index, but not committed.  There may well be a better way to do it, but here are the two commands I &lt;a href="http://stackoverflow.com/questions/2657935/checking-for-a-dirty-index-or-untracked-files-with-git/2659808#2659808"&gt;discovered&lt;/a&gt; and aliased:&lt;br&gt;
&lt;pre&gt;
    di = diff-index --color=auto --cached --patch --relative HEAD    # shows the actual differences
    dfi = diff-index --color=auto --cached --name-only --relative HEAD   # shows just the files which are changed
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;I wanted to remove changes from index.  The Git Book has an excellent &lt;a href="http://book.git-scm.com/4_undoing_in_git_-_reset,_checkout_and_revert.html"&gt;page&lt;/a&gt; on all manner of undoing.  Specifically, I needed the "git reset" command to revert staged but uncommitted changes.
&lt;/li&gt;
&lt;li&gt;
Git kept telling listing files whose mode had been changes in the list of diffs.  While those are technically diffs, I didn't care.  I found the &lt;a href="http://stackoverflow.com/questions/1580596/how-do-i-make-git-ignore-mode-changes-chmod"&gt;solution&lt;/a&gt; on Stack Overflow.  "git config core.filemode false" changes the config with a repo to ignore file mode changes.
&lt;/li&gt;
&lt;li&gt;
I've long enjoyed seeing side-by-side diffs of pending CVS changes in vim.  I've been using the &lt;a href="http://www.vim.org/scripts/script.php?script_id=58"&gt;CVSMenu&lt;/a&gt; plugin for as long as I can remember.  Of course, it doesn't work with git, but there's an even cooler plugin for vim these days, &lt;a href="http://www.vim.org/scripts/script.php?script_id=90&amp;rating=life_changing"&gt;VCS Command&lt;/a&gt;, which gives you similar functionality for many version control systems, including git.  
&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/8499998-5789924250327480005?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/5789924250327480005/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=5789924250327480005' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/5789924250327480005'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/5789924250327480005'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2011/03/what-i-learned-about-git-today.html' title='What I learned about git today: reverting, ignoring, diffing, and vimming'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-3566594846482971156</id><published>2011-02-03T16:46:00.002-07:00</published><updated>2011-02-03T16:58:53.172-07:00</updated><title type='text'>Creating a bare git repo and avoiding the no master branch problem</title><content type='html'>I was creating a bare git repo today that would serve as the pristine copy that all others would clone from.
&lt;p&gt;
I was doing something like:
&lt;ol&gt;
&lt;li&gt;umask 0000 # Because I wanted the pristine copy to be world writable&lt;/li&gt;
&lt;li&gt;git init --bare --shared=all ~/reponame.git&lt;/li&gt;
&lt;li&gt;cd somewhere&lt;/li&gt;
&lt;li&gt;git clone ~/reponame&lt;/li&gt;
&lt;li&gt;cd reponame&lt;/li&gt;
&lt;li&gt;touch foo&lt;/li&gt;
&lt;li&gt;git add foo&lt;/li&gt;
&lt;li&gt;git commit -m test foo&lt;/li&gt;
&lt;li&gt;git push&lt;/li&gt;
&lt;/ol&gt;
Unfortunately, my push attempt was rebuffed with the following error message:
&lt;pre&gt;
No refs in common and none specified; doing nothing.&lt;br&gt;
Perhaps you should specify a branch such as 'master'.&lt;br&gt;
fatal: The remote end hung up unexpectedly&lt;br&gt;
error: failed to push some refs to '/path/to/reponame.git&lt;br&gt;
&lt;/pre&gt;
What I had to do was at that last step was 
&lt;ol start="9"&gt;
&lt;li&gt;git push origin master&lt;/li&gt;
&lt;/ol&gt;
That created the master branch in the pristine repo.  Subsequent clones didn't have to go to that trouble.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-3566594846482971156?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/3566594846482971156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=3566594846482971156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3566594846482971156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3566594846482971156'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2011/02/creating-bare-git-repo-and-avoiding-no.html' title='Creating a bare git repo and avoiding the no master branch problem'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-2537250531939301336</id><published>2011-01-14T16:14:00.002-07:00</published><updated>2011-01-14T16:24:42.776-07:00</updated><title type='text'>PHP Opcode Caching for CGI</title><content type='html'>I recently completed my master's degree in Computer Science at &lt;a href="http://montana.edu/"&gt;Montana State University&lt;/a&gt;.  As a keystone project for the degree, I wrote about the project I did at work to cache PHP PHP opcodes in a CGI environment.  If you're interested, you can read my long academic writeup, which is verbosely titled &lt;a href="http://www.cs.montana.edu/files/techreports/1011/Wickland.pdf"&gt;PHP ACCELERATION IN THE CLOUD: Caching PHP Virtual Machine Opcodes for Reuse in a Secure, Multi-User, Enterprise Programming Environment&lt;/a&gt; or for a slightly more accessible take on things, you can view my &lt;a href="https://docs.google.com/present/view?id=dc9spn43_164nfq77vgb"&gt;presentation on PHP opcode caching&lt;/a&gt;.
&lt;iframe src="https://docs.google.com/present/embed?id=dc9spn43_164nfq77vgb&amp;interval=5&amp;size=m" frameborder="0" width="555" height="451"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-2537250531939301336?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/2537250531939301336/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=2537250531939301336' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2537250531939301336'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2537250531939301336'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2011/01/php-opcode-caching-for-cgi.html' title='PHP Opcode Caching for CGI'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-2672133636516553743</id><published>2010-06-24T17:15:00.006-06:00</published><updated>2010-06-24T17:41:43.146-06:00</updated><title type='text'>What jobless recovery?</title><content type='html'>I'm headed home from &lt;a href="http://en.oreilly.com/velocity2010"&gt;the Velocity 2010 Conference&lt;/a&gt;, which was great again.  This was the jobs board at the conference:&lt;p&gt;
&lt;a href="http://picasaweb.google.com/lh/photo/zQV4xXxc14VoFxF5c6tlRA?feat=embedwebsite"&gt;&lt;img src="http://lh4.ggpht.com/_mnjY4i4rmCg/TCPmz5oxinI/AAAAAAAAGK0/J_YAL8SvJDU/s800/2010-06-24%2010.17.00.jpg" /&gt;&lt;/a&gt;&lt;p&gt;
It was overflowing.  More than one posting had been knocked off the board onto the floor.  &lt;p&gt;
In addition roughly 10 companies paid to have career booths at the conference.  At least in web tech, it appears companies are seriously hiring.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-2672133636516553743?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/2672133636516553743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=2672133636516553743' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2672133636516553743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2672133636516553743'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2010/06/what-jobless-recovery.html' title='What jobless recovery?'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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://lh4.ggpht.com/_mnjY4i4rmCg/TCPmz5oxinI/AAAAAAAAGK0/J_YAL8SvJDU/s72-c/2010-06-24%2010.17.00.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8499998.post-7575770229970669406</id><published>2010-05-05T09:49:00.003-06:00</published><updated>2010-05-05T09:53:43.398-06:00</updated><title type='text'>Equality is Supposed to be Transitive</title><content type='html'>Equality is one of those operators that you expect to be transitive.  In general, we expect that 
&lt;blockquote&gt;
&lt;i&gt;if&lt;/i&gt;&lt;br&gt;
a=b&lt;br&gt;
&lt;i&gt;and&lt;/i&gt;&lt;br&gt;
b=c&lt;br&gt;
&lt;i&gt;then&lt;/i&gt;&lt;br&gt;
a=c&lt;br&gt;
&lt;/blockquote&gt;
Sadly that's not always the case in PHP.
&lt;blockquote&gt;
(1 == true) =&gt; true&lt;br&gt;
(true == "true") =&gt; true&lt;br&gt;
(1 == "true") =&gt; false&lt;br&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-7575770229970669406?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/7575770229970669406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=7575770229970669406' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/7575770229970669406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/7575770229970669406'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2010/05/equality-is-supposed-to-be-transitive.html' title='Equality is Supposed to be Transitive'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-3604194254560371486</id><published>2010-03-27T20:50:00.005-06:00</published><updated>2010-03-27T22:03:17.926-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;
I’m convinced that we’re living in a global meta-culture badly damaged by future shock.
&lt;p&gt;
The Tea Partiers are a symptom of this. So are the Young-Earth Creationists and the Biblical literalists.
&lt;p&gt;
Complexity hurts, and many people can’t handle it, so they retreat into comfortingly comprehensible certainties.
&lt;/blockquote&gt;
&lt;p&gt;
--&lt;a href="http://firedoglake.com/2010/03/21/fdl-book-salon-welcomes-charlie-stross-the-trade-of-queens-book-six-of-the-merchant-princes/#comment-2106863"&gt;Charles Stross in a book salon&lt;/a&gt; about his recent &lt;a href="http://www.amazon.com/Trade-Queens-Book-Merchant-Princes/dp/0765316730"&gt;&lt;i&gt;Trade of Queens&lt;/i&gt;&lt;/a&gt;
&lt;p&gt;
I grew up with Biblical literalist and Young-Earth Creationist views.  I have strong sympathies with aspects of the Tea Partiers complaints.  However, I have to agree with Stross that comprehensible certainties often appear to be refuges from peevish perplexities.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-3604194254560371486?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/3604194254560371486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=3604194254560371486' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3604194254560371486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3604194254560371486'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2010/03/quote-o-day.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-2172083100598799582</id><published>2010-03-08T14:10:00.001-07:00</published><updated>2010-03-08T14:10:00.238-07:00</updated><title type='text'>PHP Internals Presentation</title><content type='html'>I'll be presenting this to MSU's Compilers class today.
&lt;iframe src="http://docs.google.com/present/embed?id=dc9spn43_102f6hcspg4&amp;interval=10&amp;size=l" frameborder="0" width="700" height="559"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-2172083100598799582?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/2172083100598799582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=2172083100598799582' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2172083100598799582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2172083100598799582'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2010/03/php-internals-presentation.html' title='PHP Internals Presentation'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-4352910814396339369</id><published>2009-12-13T22:15:00.002-07:00</published><updated>2009-12-13T22:26:57.092-07:00</updated><title type='text'>NPR Sunday Puzzle Plus</title><content type='html'>The &lt;a href="http://www.npr.org/templates/story/story.php?storyId=121382258"&gt;NPR Sunday Puzzle&lt;/a&gt; this week was a fun one to solve.  

&lt;blockquote&gt;
Name five two-digit numbers that are evenly spaced out — like 32, 34, 36, 38 and 40 — in which all 10 digits from 0 to 9 are used once each. What numbers are these?
&lt;/blockquote&gt;

I overheard it while trying to get back to sleep.  Drifting in and out of consciousness I figured it out in about 10 minutes.  For fun (seriously), I coded a solution to the problem.  It turns out there are 4 correct answers, all of which begin or end with a multiple of 10.
&lt;br&gt;&lt;br&gt;
Then I figured out the same thing for 5 four digit numbers in which the digits from 0 to 9 appear twice.  I found 618 solutions.  My favorites used 1111 as the increment,  three of which contained the solution to the first puzzle.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-4352910814396339369?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/4352910814396339369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=4352910814396339369' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4352910814396339369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4352910814396339369'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/12/npr-sunday-puzzle-plus.html' title='NPR Sunday Puzzle Plus'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-3724974835244195253</id><published>2009-12-06T10:22:00.003-07:00</published><updated>2009-12-06T13:24:20.237-07:00</updated><title type='text'>Chrome extensions for more compact, netbook friendly Gmail and Google Reader</title><content type='html'>Earlier I posted &lt;a href="http://leifw.wickland.net/2009/11/user-scripts-for-more-compact-netbook.html"&gt;user scripts for making Gmail and Google reader a more compact&lt;/a&gt;.  It appears that Google Chrome no longer likes user scripts, so I repackaged them as Chrome Extensions.  As before, let me clearly state that these are built on the hard work of others; I just tweaked them a bit to my taste.&lt;p&gt;&lt;a href="http://wickland.net/lwgrcm.crx"&gt;Leif Wickland Google Reader Clean and Mean&lt;/a&gt;&lt;p&gt;&lt;a href="http://wickland.net/lwgmar.crx"&gt;Leif Wickland Google Reader Ad Remover&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-3724974835244195253?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/3724974835244195253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=3724974835244195253' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3724974835244195253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3724974835244195253'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/12/chrome-extensions-for-more-compact.html' title='Chrome extensions for more compact, netbook friendly Gmail and Google Reader'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-5996044167001134694</id><published>2009-11-29T12:28:00.002-07:00</published><updated>2009-11-29T12:38:00.535-07:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;
Google Wave was a program built to show younger people how older people feel when they attempt to use the internet.
&lt;/BLOCKQUOTE&gt;
-- &lt;a href="http://twitter.com/jeff_phillips/statuses/6038154206"&gt;jeff_phillips&lt;/a&gt;  (Although he &lt;a href="http://www.reddit.com/r/AskReddit/comments/a7rrh/seriously_what_do_i_do_with_google_wave_now_that/c0g8ttv"&gt;may not&lt;/a&gt; have been the originator.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-5996044167001134694?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/5996044167001134694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=5996044167001134694' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/5996044167001134694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/5996044167001134694'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/11/quote-o-day.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-1837469723673054941</id><published>2009-11-17T22:40:00.005-07:00</published><updated>2009-11-17T22:40:00.325-07:00</updated><title type='text'>User Scripts for more compact, netbook friendly Gmail and Google Reader</title><content type='html'>My wife has a netbook that I occasionally swipe to browse the web, which usually consists of at least peeking at Gmail and Google Reader.  On the netbook's tiny screen, both feel like they could afford to have some of their cruft removed.  I went searching and found scripts that I could hack up into what I wanted.
&lt;br&gt;&lt;br&gt;
&lt;h3&gt;Gmail&lt;/h3&gt;
This just removes the right column when you view a conversation.  That means that you lose ads and Gmail's smart parsing of your email to offer to help you track packages and schedule events.
&lt;pre&gt;
 // borrowed from http://userscripts.org/scripts/show/43495&lt;br&gt;
 var css = "table[class='Bs nH iY'] tr td[class='Bu']:last-child {display:none !important;}";&lt;br&gt;
&lt;br&gt;
 if (typeof GM_addStyle != "undefined") {&lt;br&gt;
  GM_addStyle(css);&lt;br&gt;
 } else if (typeof addStyle != "undefined") {&lt;br&gt;
  addStyle(css);&lt;br&gt;
 } else {&lt;br&gt;
  var heads = document.getElementsByTagName("head");&lt;br&gt;
  if (heads.length &gt; 0) {&lt;br&gt;
   var node = document.createElement("style");&lt;br&gt;
   node.type = "text/css";&lt;br&gt;
   node.appendChild(document.createTextNode(css));&lt;br&gt;
   heads[0].appendChild(node); &lt;br&gt;
  }&lt;br&gt;
 }&lt;br&gt;
&lt;/pre&gt;
&lt;br&gt;&lt;br&gt;
&lt;h3&gt;Google Reader&lt;/h3&gt;
This is a bigger change.  It smashes together many elements at the top of the page above the item list, violating a host of aesthetic principals, making graphic designers everywhere weep.  It also reduces the whitespace inside the display of individual items.  Finally it removes the bar at the bottom of the item list.  I believe that my changes from the original were primarily around restoring a few things the original hid and fiddling with the styling.
&lt;pre&gt;
// From: Google Reader Compact &amp; Clean&lt;br&gt;
(function() {&lt;br&gt;
var css = "/* Hide all the elements that take up space */ #logo-container, #gbar, #global-info, .gbh, #lhn-add-subscription-section, #viewer-footer, #chrome-view-links, #viewer-refresh, #viewer-details-toggle, #chrome-header, #chrome-lhn-toggle, .scroll-tree .icon, .entry .entry-title .entry-title-go-to, #entries.list .collapsed .entry-main .entry-original { display: none !important; } /* move the main window up to the top to fill in leftover space */ #main, #settings-frame, #settings { top:0 !important; margin: 0 !important; } /* tighten up the vertical padding on header bars */ #viewer-top-controls, #chrome-header { padding: 2px 0 2px 5px !important; } /* right-justify the \"Loading...\" and other messages so they don't obscure other elements */ #loading-area, #message-area-outer { width: auto !important; left: auto !important; right: 0 !important; top: 26px !important; } /* right-align search bar and hide buttons until hovering */ #search { left: auto !important; right: 10px !important; top: 1px !important; width: 210px !important; height:23px !important; overflow: hidden !important; } #search:hover { width: 403px !important; height:323px !important; overflow: visible !important; } #search-restrict-button .goog-menu { left: auto !important; right: 0 !important; } #chrome.search-stream #viewer-search-parent { text-align: left !important; } /* shrink the navigation sidebar */ #nav, #nav * { max-width: 200px !important; } #chrome { margin-left: 200px !important; } .lhn-hidden #chrome { margin-left: 1px !important; } #entries .entry-body { max-width: none !important; } /* remove icons from navbar and tighten the left margin for folder/subscription entries */ .scroll-tree .expanded .toggle { background-position: 3px -58px !important; } .scroll-tree .collapsed .toggle { background-position: -20px -58px !important; } #lhn-subscriptions .scroll-tree li a { padding-left: 0 !important; } #lhn-subscriptions #sub-tree ul ul li a { padding-left: 10px !important; } #lhn-subscriptions .scroll-tree .toggle { width: 16px !important; } /* shrink titles, but add underlining for visual identification */ .entry /*.entry-title { font-size:100% !important; background-color: #FFFFFF !important;}*/ /*REMOVING UNDERLINE*/ /* tighten up spacing around entries */ /* expanded view */ #entries .entry { padding: 5px !important; margin: 0 !important; background-color: #FFFFFF !important; } #entries .card-content { padding: 2px !important; } #entries .card-common { padding: 0 !important; margin: 0 !important; border-width: 2px !important; } #entries .collapsed { padding: 0px !important; border: 0 !important; } /* list view */ #entries .collapsed .entry-date { margin: 0 2px 0 0 !important; } /*CHANGING BACKGROUND COLOR*/ #entries #current-entry .collapsed { background-color: #FCFCFC !important; } #entries.list .collapsed .entry-icons, #entries.list .collapsed .entry-main .entry-original { top: 1px !important; } #entries.list .collapsed .entry-secondary { top: 0px !important; margin-right: 7em !important; background-color: #FFFFFF !important;} #entries.list .collapsed { text-decoration: none !important; background-color: #FFFFFF !important;} #entries.list .collapsed .entry-source-title { top: 0px !important; background-color: #FFFFFF !important;} #entries.list .collapsed .entry-title { text-decoration: none !important; background-color: #FFFFFF !important;} /* make entries borders square for consistency with new design */ .entry .card, .card .card-bottom { -moz-border-radius: 0 !important; } /* Hide Like feature */ /*#entries .entry-author { display: none !important; }*/";&lt;br&gt;
if (typeof GM_addStyle != "undefined") {&lt;br&gt;
 GM_addStyle(css);&lt;br&gt;
} else if (typeof addStyle != "undefined") {&lt;br&gt;
 addStyle(css);&lt;br&gt;
} else {&lt;br&gt;
 var heads = document.getElementsByTagName("head");&lt;br&gt;
 if (heads.length &gt; 0) {&lt;br&gt;
  var node = document.createElement("style");&lt;br&gt;
  node.type = "text/css";&lt;br&gt;
  node.appendChild(document.createTextNode(css));&lt;br&gt;
  heads[0].appendChild(node); &lt;br&gt;
 }&lt;br&gt;
}&lt;br&gt;
})();&lt;br&gt;
&lt;/pre&gt;
&lt;br&gt;&lt;br&gt;I like both of these enough that I ended up using them on systems with decent sized monitors, too.  They're particularly handy for making my favorite Google apps fit getter when I'm trying to put two windows side-by-side on a widescreen monitor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-1837469723673054941?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/1837469723673054941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=1837469723673054941' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/1837469723673054941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/1837469723673054941'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/11/user-scripts-for-more-compact-netbook.html' title='User Scripts for more compact, netbook friendly Gmail and Google Reader'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-9199829335070957142</id><published>2009-11-14T22:06:00.003-07:00</published><updated>2009-11-14T22:39:18.360-07:00</updated><title type='text'>Google Wave</title><content type='html'>I've had a Google Wave account for a month or two and I've just now found some value in it.  All of the playing around I'd done to explore it really turned me off to the product.  It was too rough and very annoying to use.  Those negatives weren't offset by obvious utility that it offered over my existing channels (IM, email, phone, wiki, and blog).  &lt;br&gt;&lt;br&gt; However, twice at work recently I've found it to be the best tool for a job.  We're talking about a major new feature for our product that we really don't understand.  Wave has given us a nice place to dump ideas, meeting notes, and research as we flail to comprehend what we're getting ourselves into.  As new entries are added, team members will occasionally stop by the wave and comment on what's been added.  Wave's threading is handy for that.  At the same time, Wave allows you to edit entries written by others, thereafter attributing the block to both of you.  &lt;br&gt;&lt;br&gt; I see that as enormously advantageous over email which tends to branch into multiple threads.  Once an email chain has branched or reached adequate length, it's hard and time consuming to reconstruct a coherent view of the conversation.  &lt;br&gt;&lt;br&gt; I think wave is also more useful than a wiki in this context because it essentially merges a wiki page's content and its discussion page.  On Wikipedia that would be annoying, but for the purpose of our collaboration which doesn't need to produce a final document, but rather a documented, researched consensus, it's really nice to be able to get a quick overview or drill into the spiraling discussion on the same document.  &lt;br&gt;&lt;br&gt; I also found Wave to be the best channel when, while I was working from home, a coworker asked how to solve a sticky problem.  I needed to show her the rough code outline of my solution while talking on the phone.  Wave's continuously updating content allowed us to both edit and see what the other meant very quickly.  Short of some sort of fancy screen sharing or collaboration software that neither of us had installed or were signed up for (e.g., &lt;a href="https://bespin.mozilla.com/"&gt;Bespin&lt;/a&gt; or the reviled LiveMeeting) I don't have another channel in my toolbox that would've worked nearly as well.  &lt;br&gt;&lt;br&gt; The greatest shortcoming of Wave is that it lacks undo.  Yes, it has the fancy timeline, but that's mostly useless.  Firstly, loading the timeline takes forever for a moderately large document.  Secondly, when I fat finger something and delete most of my thread, I don't want to go to the timeline; I want to hit Ctrl-Z and see my prodigal content return.  &lt;br&gt;&lt;br&gt; So, yeah, I like Wave, but it's not going to be replacing any tool that I was particularly happy with anytime soon.  It's a specialized tool that I'll pull out occasionally.  &lt;br&gt;&lt;br&gt; I have a few invitations to give out.  Let me know if you'd like one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-9199829335070957142?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/9199829335070957142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=9199829335070957142' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/9199829335070957142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/9199829335070957142'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/11/google-wave.html' title='Google Wave'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-3988499534153627387</id><published>2009-11-11T10:40:00.004-07:00</published><updated>2009-11-11T10:48:53.475-07:00</updated><title type='text'>Puzzle solving with regular expressions.</title><content type='html'>The &lt;a href='http://www.npr.org/templates/story/story.php?storyId=120183101'&gt;puzzle this week&lt;/a&gt; from NPR's &lt;i&gt;Weekend Edition&lt;/i&gt; is&lt;br&gt;
&lt;blockquote&gt;If you write "WOW" in capital letters and hold up a mirror at the side of the word, you'll see "WOW" perfectly reflected in the mirror. Here's the puzzle: Think of a nationality and write it in capital letters. If you remove one stroke from the first letter, and one stroke from the last letter, and hold up a mirror at the side, the name of the nationality will be perfectly reflected in the mirror. What nationality is it?&lt;/blockquote&gt;
&lt;br&gt;&lt;br&gt;
The steps to my solution were:
&lt;ol&gt;
&lt;li&gt;Grab a &lt;a href="http://en.wikipedia.org/wiki/Lists_of_people_by_nationality"&gt;list of nationalities&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Delete all entries which consisted of multiple words.&lt;/li&gt;
&lt;li&gt;Make the remaining words singular and all upper case letters.&lt;/li&gt;
&lt;li&gt;Search for items which matched the regular expression /^.[AHIMOTUVWXYZ]+.$/&lt;/li&gt;
&lt;li&gt;Pick the obvious answer out of the six matches.&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/8499998-3988499534153627387?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/3988499534153627387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=3988499534153627387' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3988499534153627387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3988499534153627387'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/11/puzzle-solving-with-regular-expressions.html' title='Puzzle solving with regular expressions.'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-1928732365251097472</id><published>2009-10-12T08:57:00.003-06:00</published><updated>2009-10-12T09:04:56.620-06:00</updated><title type='text'>Quote 'o the Day</title><content type='html'>&lt;blockquote&gt;
A hunter was taken to St. Vincent Hospital in Billings Saturday for a gunshot wound and mauling injuries, stemming from a grizzly bear attack near Cooke City.
&lt;p/&gt;
...
&lt;p/&gt;
When the bear began mauling one hunter, the other hunter attempted to shoot the bear, but shot the hunter being mauled instead.
&lt;/blockquote&gt;
&lt;a href="http://bozemandailychronicle.com/articles/2009/10/12/news/300briefs.txt"&gt;That&lt;/a&gt; is yet another good reason to take pepper spray.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-1928732365251097472?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/1928732365251097472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=1928732365251097472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/1928732365251097472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/1928732365251097472'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/10/quote-o-day_12.html' title='Quote &apos;o the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-3617207601813826686</id><published>2009-10-02T21:03:00.004-06:00</published><updated>2009-10-02T21:14:31.758-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>The number one entry in this list of "&lt;a href="http://www.collegecrunch.org/entertainment/15-podcasts-that-will-make-you-smarter/"&gt;15 Podcasts That Will Make You Smarter&lt;/a&gt;" suggested that the venerable "&lt;a href="http://thislife.org"&gt;This American Life&lt;/a&gt;" is
&lt;blockquote&gt;one of the most listened podcasts of our generation&lt;/blockquote&gt;
It made me laugh.  "Podcast" is, of course, a portmanteau owing half its heritage to the iPod, which wasn't introduced until &lt;a href="http://en.wikipedia.org/wiki/IPod"&gt;
2001&lt;/a&gt;.  I'm fairly certain that if the &lt;i&gt;TAL&lt;/i&gt; podcast is one of the most listened to podcasts of our generation, it is also the most listened to of all time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-3617207601813826686?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/3617207601813826686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=3617207601813826686' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3617207601813826686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3617207601813826686'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/10/quote-o-day.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-3070420840599786196</id><published>2009-09-17T20:51:00.002-06:00</published><updated>2009-09-17T20:59:42.653-06:00</updated><title type='text'>I will never buy from Tiger Direct again</title><content type='html'>I recently bought a &lt;a href="http://reviews.cnet.com/mp3-players/sandisk-sansa-clip-2gb/4505-6490_7-32588380.html"&gt;Sansa Clip 2GB&lt;/a&gt; from &lt;a href="http://tigerdirect.com"&gt;Tiger Direct&lt;/a&gt;.  It stopped working after 3 days.  I called Tiger Direct.  Twice I navigated the voice menu to get to the warranty/return representatives.  The first guy acted like he couldn't hear me and hung up on me.  The second guy put me on hold for 3 minutes and then hung up on me.  Wow.  I can't remember being treated that badly in a while.&lt;p&gt;Conveniently, SanDisk, the maker of the Sansa, recently put up a &lt;a href="http://kb.sandisk.com"&gt;new support website&lt;/a&gt;.  Their old one was awful.  The new one helped me find me directions on &lt;a href="http://kb.sandisk.com/app/answers/detail/a_id/188"&gt;resetting the Sansa Clip&lt;/a&gt;, which fixed the problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-3070420840599786196?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/3070420840599786196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=3070420840599786196' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3070420840599786196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3070420840599786196'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/09/i-will-never-buy-from-tiger-direct.html' title='I will never buy from Tiger Direct again'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-2964979022269447278</id><published>2009-08-19T11:16:00.006-06:00</published><updated>2012-01-06T10:35:22.239-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><title type='text'>Oddities of Boolean evaluation in JavaScript</title><content type='html'>I had some naive notions about how JavaScript evaluated certain Boolean expressions.  For example, I assumed that code like&lt;blockquote&gt;&lt;pre&gt;if (x) { ... }&lt;/pre&gt;&lt;/blockquote&gt;would always evaluate like &lt;blockquote&gt;&lt;pre&gt;if (x == true) { ... }&lt;/pre&gt;&lt;/blockquote&gt;
I was wrong.  For example, &lt;blockquote&gt;&lt;pre&gt;if ([]) { ... }&lt;/pre&gt;&lt;/blockquote&gt;evaluates to true, but &lt;blockquote&gt;&lt;pre&gt;if ([] == true) { ... }&lt;/pre&gt;&lt;/blockquote&gt; evaluates to false.  
&lt;br&gt;&lt;br&gt;
I wrote the following test to help me identify other perilous JavaScript irregularities.  &lt;br&gt;Read the squares as:&lt;blockquote&gt;&lt;pre&gt;if (y)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;green&lt;br&gt;else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;red&lt;br&gt;&lt;/pre&gt;&lt;/blockquote&gt;
    &lt;style&gt;
      .exp { width: 30%; float: left; }
      .val { width: 70%; float: left; }
      .true { background-color: green; color: white; }
      .false { background-color: red; color: white; }
    &lt;/style&gt;

    &lt;script&gt;
      var values = [
      "[]",
      "[0]",
      "[1]",
      "0",
      "1",
      "''",
      "'1'",
      "'0'",
      "false",
      "true",
      "'false'",
      "'true'",
      "null",
      "undefined"
      ];
      var conditionSets = {
        "Most Interesting": [
        "",
        " == true",
        " != undefined"
        ],
        "Double equal false things": [
        " == undefined",
        " == null",
        " == false"
        ],
        "Not equal false things": [
        " != undefined",
        " != null",
        " != false"
        ],
        "Double equal true" : [
        "",
        " == true",
        " != true"
        ],
        "Triple equal true" : [
        " === true",
        " !== true"
        ],
        "Triple equal false things": [
        " === undefined",
        " !== undefined",
        " === null",
        " !== null",
        " === false",
        " !== false"
        ]
      };

      for (var s in conditionSets) {
        var conditions = conditionSets[s];
        var widthPixels = Math.round(1200 / conditions.length);
        var openDiv = "&lt;" + "div style='float: left; width: "  + widthPixels + "px' class='";
        document.write("&lt;" + "h2&gt;" + s + "&lt;" + "/h2&gt;&lt;" + "div style='width: 1200px'&gt;");
        for (var v in values) {
          var value = values[v];
          for (var c in conditions) {
            var condition = conditions[c];
            eval("var result = (" + value + condition + ") ? 'true' : 'false'");
            var html = openDiv + result + "'&gt;" + value + condition + "&lt;" + "/div&gt;\n";
            document.write(html);
          }
          document.write("&lt;div/&gt;");
        }
        document.write("&lt;/div&gt;&lt;br&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;");
      }
    &lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-2964979022269447278?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/2964979022269447278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=2964979022269447278' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2964979022269447278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2964979022269447278'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/08/oddities-of-boolean-evaluation-in.html' title='Oddities of Boolean evaluation in JavaScript'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-5937128513785314245</id><published>2009-08-19T10:11:00.003-06:00</published><updated>2009-08-19T10:31:40.209-06:00</updated><title type='text'>Performance of converting an integer to a string in PHP</title><content type='html'>We had a discussion at work about the fastest way to convert an integer to a string in PHP.  The options were:&lt;ul&gt;&lt;li&gt;&lt;b&gt;Casting:&lt;/b&gt; e.g. (string)$i&lt;/li&gt;&lt;li&gt;&lt;b&gt;String concatenation:&lt;/b&gt; e.g. $i . ''&lt;/li&gt;&lt;li&gt;&lt;b&gt;String interpolation:&lt;/b&gt; e.g. "$i"&lt;/li&gt;&lt;li&gt;&lt;b&gt;Conversion with strval()&lt;/b&gt; e.g. strval($i)&lt;/li&gt;&lt;/ul&gt;

To test the theories I ran each of those conversions a million times on PHP 5.2.8 CGI without any sort of accelerator.  Casting was the fastest.  Concatenation and interpolation were about same.  Calling strval() took twice as long as casting.  

The results were:&lt;ol&gt;&lt;li&gt;stringCasting: 0.744 s (e.g. (string)$i)&lt;/li&gt;&lt;li&gt;stringConcatenation: 0.971 s (e.g. $i . '')&lt;/li&gt;&lt;li&gt;stringInterpolation: 1.005 s (e.g. "$i")&lt;/li&gt;&lt;li&gt;strvalConversion: 1.443 s (e.g. strval($i))&lt;/li&gt;&lt;/ol&gt;

Here's the code I ran to get that output:

&lt;div class="php" style="white-space: nowrap;border: 1px dotted #a0a0a0; font-family: 'Courier New', Courier, monospace; font-size: 110%; background-color: #f0f0f0; margin: 0; line-height: 110%; padding: 0;color: #000099;"&gt;&lt;ol&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="sy1"&gt;&amp;lt;?&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;function&lt;/span&gt; timeTrial&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$functionName&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt; &lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$start&lt;/span&gt; &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="kw3"&gt;microtime&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw4"&gt;true&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$functionName&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$totalTime&lt;/span&gt; &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="kw3"&gt;sprintf&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;&lt;span class="es6"&gt;%0.3f&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt; &lt;span class="kw3"&gt;microtime&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw4"&gt;true&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="sy0"&gt;-&lt;/span&gt; &lt;span class="re0"&gt;$start&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;echo&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;&amp;lt;h3&amp;gt;&lt;span class="es4"&gt;$functionName&lt;/span&gt;: &lt;span class="es4"&gt;$totalTime&lt;/span&gt; s&amp;lt;/h3&amp;gt;&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw3"&gt;flush&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;function&lt;/span&gt; stringConcatenation&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$j&lt;/span&gt; &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;span class="re0"&gt;$j&lt;/span&gt; &lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt; &lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;span class="sy0"&gt;++&lt;/span&gt;&lt;span class="re0"&gt;$j&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$j&lt;/span&gt; &lt;span class="sy0"&gt;.&lt;/span&gt; &lt;span class="st_h"&gt;''&lt;/span&gt; &lt;span class="sy0"&gt;===&lt;/span&gt; &lt;span class="re0"&gt;$i&lt;/span&gt; &lt;span class="sy0"&gt;.&lt;/span&gt; &lt;span class="st_h"&gt;''&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;echo&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;This should never happen&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;function&lt;/span&gt; strvalConversion&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$j&lt;/span&gt; &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;span class="re0"&gt;$j&lt;/span&gt; &lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt; &lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;span class="sy0"&gt;++&lt;/span&gt;&lt;span class="re0"&gt;$j&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw3"&gt;strval&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$j&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="sy0"&gt;===&lt;/span&gt; &lt;span class="kw3"&gt;strval&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;echo&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;This should never happen&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;function&lt;/span&gt; stringInterpolation&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$j&lt;/span&gt; &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;span class="re0"&gt;$j&lt;/span&gt; &lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt; &lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;span class="sy0"&gt;++&lt;/span&gt;&lt;span class="re0"&gt;$j&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;&lt;span class="es4"&gt;$j&lt;/span&gt;&amp;quot;&lt;/span&gt; &lt;span class="sy0"&gt;===&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;&lt;span class="es4"&gt;$i&lt;/span&gt;&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;echo&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;This should never happen&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw2"&gt;function&lt;/span&gt; stringCasting&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$j&lt;/span&gt; &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;span class="re0"&gt;$j&lt;/span&gt; &lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt; &lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;span class="sy0"&gt;++&lt;/span&gt;&lt;span class="re0"&gt;$j&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;if&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;string&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="re0"&gt;$j&lt;/span&gt; &lt;span class="sy0"&gt;===&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;string&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="re0"&gt;$i&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;echo&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;This should never happen&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="kw1"&gt;for&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$k&lt;/span&gt; &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="nu0"&gt;0&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;span class="re0"&gt;$k&lt;/span&gt; &lt;span class="sy0"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nu0"&gt;4&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt; &lt;span class="sy0"&gt;++&lt;/span&gt;&lt;span class="re0"&gt;$k&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="re0"&gt;$iterations&lt;/span&gt; &lt;span class="sy0"&gt;=&lt;/span&gt; &lt;span class="nu0"&gt;1000000&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="kw1"&gt;foreach&lt;/span&gt; &lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="kw3"&gt;array&lt;/span&gt;&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="st0"&gt;&amp;quot;stringConcatenation&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;strvalConversion&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;stringInterpolation&amp;quot;&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt; &lt;span class="st0"&gt;&amp;quot;stringCasting&amp;quot;&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="kw1"&gt;as&lt;/span&gt; &lt;span class="re0"&gt;$test&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt; &lt;span class="br0"&gt;&amp;#123;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; timeTrial&lt;span class="br0"&gt;&amp;#40;&lt;/span&gt;&lt;span class="re0"&gt;$test&lt;/span&gt;&lt;span class="sy0"&gt;,&lt;/span&gt; &lt;span class="re0"&gt;$iterations&lt;/span&gt;&lt;span class="br0"&gt;&amp;#41;&lt;/span&gt;&lt;span class="sy0"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp; &amp;nbsp; &lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&lt;span class="br0"&gt;&amp;#125;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li class="li1"&gt;&lt;div class="de1"&gt;&amp;nbsp;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-5937128513785314245?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/5937128513785314245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=5937128513785314245' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/5937128513785314245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/5937128513785314245'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/08/performance-of-converting-integer-to.html' title='Performance of converting an integer to a string in PHP'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-4711265936804598714</id><published>2009-08-12T22:40:00.002-06:00</published><updated>2009-08-12T22:48:01.947-06:00</updated><title type='text'>Backpacking Loop In the Crazies: Cottonwood, Glacier, Moose, and  Campfire Lakes; Day 1</title><content type='html'>&lt;div&gt;In mid-July, I and three friends went on a four day backpacking trip in Montana&amp;#39;s Crazy Mountains.  Originally, we&amp;#39;d wanted to head to Glacier Park, but bailed on that idea when we realized what a hassle getting the back country camping permits was.    Instead, I went googling and found &lt;a href="http://ultralightbackpacking.blogspot.com/2008/09/crazy-mountains-diad.html"&gt;this guy&lt;/a&gt; who proposed a &lt;a href="http://www.everytrail.com/view_trip.php?trip_id=175209"&gt;loop in the Crazies&lt;/a&gt;.  It looked fantastic.&lt;div&gt;  &lt;br&gt;&lt;/div&gt;&lt;div&gt;Sadly, &lt;a href="http://www.beartoothpublishing.com/"&gt;Beartooth Publishing&lt;/a&gt; hasn&amp;#39;t released a map of the Crazies yet, so we ordered a custom topo from&lt;a href="http://www.mytopo.com/"&gt; mytopo.com&lt;/a&gt;, which was high quality and beautiful and huge for about $30.  If you buy from them, remember to click through a &lt;a href="http://www.mytopo.com/index.cfm?promo=primal&amp;amp;"&gt;discount link&lt;/a&gt;, such as the ones at &lt;a href="http://www.ecoprimalquest.com/"&gt;Primal Quest&lt;/a&gt;.&lt;a href="http://lh4.ggpht.com/_mnjY4i4rmCg/SmVtHZShbUI/AAAAAAAAEw8/eyOJrCrVZJs/s800/DSC_8739_40_41_42_43-without-align-or-ripples.jpg"&gt;&lt;/a&gt;&lt;br&gt;  &lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;We left work about noon and began the two hour drive to the Cottonwood Creek trail head.  You might not expect that the drive from Bozeman would take two hours, but the last few miles of the road are in pretty rough shape and are best taken around 10 MPH.  The parking lot was empty when we arrived.  As we were unloading our packs, a car from Utah pulled up, two folks got out, and headed up the trail, which of course disappointed us as we expected to be alone.  &lt;/div&gt;  &lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;In the parking lot, we weighed our packs.  The lightest was just under 40 pounds; the heaviest, mine, was just over 50 pounds, including 3 liters of water.&lt;/div&gt;&lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;As we headed out of the parking lot, we met the the folks from Utah who were headed back to their car.  About three miles later we ran into this waterfall on Cottonwood Creek.  Just before the waterfall, the trail becomes poorly defined and follows an old stream bed.  We found that while the water was relatively high, it&amp;#39;s best to stay on the downhill side of the creek and follow it upstream to a big log jam just downstream of the waterfall, which seems to be the easiest place to cross.&lt;/div&gt;  &lt;div style="text-align: center;"&gt;&lt;img src="http://lh5.ggpht.com/_mnjY4i4rmCg/SmVr3wGIGUI/AAAAAAAAEtw/PQb4AeyM9LY/s800/DSC_8719.JPG" alt="DSC_8719.JPG" title="DSC_8719.JPG"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br&gt;&lt;/div&gt;  &lt;div style="text-align: center;"&gt;&lt;img src="http://lh3.ggpht.com/_mnjY4i4rmCg/SmVr6tvjWRI/AAAAAAAAEt0/BqRLTHTpUJI/s800/DSC_8727.JPG" alt="DSC_8727.JPG" title="DSC_8727.JPG"&gt;&lt;br&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;From the waterfall, the terrain ramps up and the trail hopscotches upward through an odd combination of exposed rocks and thick trees.  There was still a fair amount of snow at places in the trees.  As we neared the elevation of Cottonwood Lake, we came to a wide spot in the creek that I call Fake Cottonwood Lake since it had fooled me on a previous trip to Cottonwood Lake.  The snow was still many feet thick in places there and where there wasn&amp;#39;t snow, there was standing water or really spongy, soggy soil.  Getting through there wasn&amp;#39;t much fun. We got to Cottonwood Lake proper about 5:30.  Originally, we&amp;#39;d hoped to make it over the ridge between Cottonwood and Glacier on the first day, but decided it was too late and set up camp at Cottonwood.&lt;/div&gt;  &lt;div style="text-align: center;"&gt;&lt;img src="http://lh5.ggpht.com/_mnjY4i4rmCg/SmVtJ6iwNUI/AAAAAAAAExA/Jv_z-qK_WKU/s800/DSC_8771_67_68_69_70.jpg" alt="Cottonwood Lake"&gt;&lt;br&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;  &lt;br&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh4.ggpht.com/_mnjY4i4rmCg/SmVtHZShbUI/AAAAAAAAEw8/eyOJrCrVZJs/s800/DSC_8739_40_41_42_43-without-align-or-ripples.jpg" alt="Cottonwood Lake"&gt;&lt;br&gt;  &lt;/div&gt;
&lt;br&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://lh6.ggpht.com/_mnjY4i4rmCg/SmVsF4Qdf3I/AAAAAAAAEuw/dYViLwUeMVg/s800/DSC_8778.JPG" alt="Cottonwood Lake" &gt;&lt;br&gt;  &lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-4711265936804598714?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/4711265936804598714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=4711265936804598714' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4711265936804598714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4711265936804598714'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/08/backpacking-loop-in-crazies-cottonwood.html' title='Backpacking Loop In the Crazies: Cottonwood, Glacier, Moose, and  Campfire Lakes; Day 1'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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://lh5.ggpht.com/_mnjY4i4rmCg/SmVr3wGIGUI/AAAAAAAAEtw/PQb4AeyM9LY/s72-c/DSC_8719.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8499998.post-1593649620834369433</id><published>2009-08-02T13:41:00.003-06:00</published><updated>2009-08-12T22:50:35.921-06:00</updated><title type='text'>Reflections on America</title><content type='html'>I enjoyed this &lt;a href='http://news.bbc.co.uk/2/hi/programmes/from_our_own_correspondent/8176448.stm'&gt;piece&lt;/a&gt; by former BBC North America editor Justin Webb reflecting on what America is as he departed after 7 years in the States.

&lt;blockquote&gt;
In more than seven years of life in America, I have come to value - to love, actually - the stolid, sunny, unchallenging, simple virtuousness of the American suburban psyche.
&lt;br&gt;...&lt;br&gt;
When selling a home in America, you have to pretend that you do not live there.
No, you have to pretend that no-one lives there. Or ever 
&lt;br&gt;...&lt;br&gt;
The English understand that we are all falling down. Dust to dust, we intuit. Americans do not. They have not got there yet.
&lt;br&gt;...&lt;br&gt;
And yet for all the ugliness, the deadening tawdriness of much of the American landscape and the tinny feebleness of many of its politicians - for all that nastiness and shallowness and flakiness - there is no question in my mind that to live here has been the greatest privilege of my life.
&lt;br&gt;...&lt;br&gt;
But if Sonia Sotomayor is to make it big, there must be something creating the drive, and part of that something is the poverty of the alternative, the discomfort of the ordinary lives that most Americans endure and the freedom that Americans have to go to hell if that is the decision they take.
This is the atmosphere in which Nobel Prize winners are nurtured
&lt;br&gt;...&lt;br&gt;
I feel crazy going back to the old world. My five-year-old daughter Clara, who is the proud owner of an American passport, agrees.
She says she intends to leave home, at around 12-years-old, and return to her native land. I do not blame her.
If you are willing to chance your arm, if you back yourself, if you want to live the life, America is still the place to be. 
&lt;br&gt;...&lt;br&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-1593649620834369433?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/1593649620834369433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=1593649620834369433' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/1593649620834369433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/1593649620834369433'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/08/reflections-on-america.html' title='Reflections on America'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-3739521282750102719</id><published>2009-08-01T11:52:00.003-06:00</published><updated>2009-08-01T11:57:12.455-06:00</updated><title type='text'>Project Euler Problem 5 One Liner</title><content type='html'>After sitting stumped for a while on &lt;a href="http://projecteuler.net/index.php?section=problems&amp;id=5"&gt;Project Euler Problem 5&lt;/a&gt;, I came up with this &lt;a href="http://www76.wolframalpha.com/input/?i=lcm%281%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%29"&gt;one liner&lt;/a&gt;.  That's probably cheating.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-3739521282750102719?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/3739521282750102719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=3739521282750102719' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3739521282750102719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3739521282750102719'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/08/project-euler-problem-5-one-liner.html' title='Project Euler Problem 5 One Liner'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-792509170316445287</id><published>2009-04-07T10:37:00.002-06:00</published><updated>2009-04-07T10:40:01.615-06:00</updated><title type='text'>Quote 'o the Day</title><content type='html'>While I suspected that would be the case, it's interesting to see it reported, even off the record.

&lt;blockquote&gt;The [US] officials also noted that while Obama gets more threats than usual as the first African-American U.S. president&lt;/blockquote&gt;

-- Two US officials speaking off the record in conjunction with an &lt;a href="http://www.cnn.com/2009/POLITICS/04/06/turkey.assassination.plot/index.html"&gt; assassination plot in Turkey&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-792509170316445287?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/792509170316445287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=792509170316445287' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/792509170316445287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/792509170316445287'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/04/quote-o-day.html' title='Quote &apos;o the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-2633108636882671699</id><published>2009-03-05T08:50:00.002-07:00</published><updated>2009-03-05T08:55:43.990-07:00</updated><title type='text'>Cow Town</title><content type='html'>Of the 8 items that made the &lt;a href="http://bozemandailychronicle.com/police_reports/"&gt;police/sheriff reports&lt;/a&gt; in today's paper (which will be unavailable tomorrow), two concerned cows on the loose.  Really, I like living in a small town where bovines are among the authorities' highest concerns.

Here's the entire list:
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
A ladder in the middle of South 23rd Avenue was causing a traffic hazard around 8 a.m.
&lt;/li&gt;&lt;li&gt;
Police could not find a black cow that was reportedly out of its pasture off Stucky Road.
&lt;/li&gt;&lt;li&gt;An 86-year-old Bozeman woman was cited for shoplifting and released after she left a store on North 19th Avenue without paying for some items.
&lt;/li&gt;&lt;li&gt;Dog feces were left on the porch of a home on Sanders Avenue.
&lt;/li&gt;&lt;li&gt;A man who appeared to be passed out in a vehicle on North Seventh Avenue was just taking a nap between making deliveries.
&lt;/li&gt;&lt;li&gt;A reportedly vicious dog ran away when he heard the man he was threatening on Shadow Circle cock his shotgun. The dog was also vicious towards deputies. Its owner was warned.
&lt;/li&gt;&lt;li&gt;Two cows in a driveway on Norris Road were headed for the road around 9:30 a.m.
&lt;/li&gt;&lt;li&gt;The driver of a large semi-truck tried to run another driver off the road at the Logan interchange and flipped the man off.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-2633108636882671699?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/2633108636882671699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=2633108636882671699' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2633108636882671699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2633108636882671699'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/03/cow-town.html' title='Cow Town'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-1837505513122679115</id><published>2009-03-03T19:32:00.002-07:00</published><updated>2009-03-03T19:35:55.031-07:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;All your downside are belong to us&lt;/blockquote&gt;
-- Nobel Prize winning economist Paul Krugman gave that title to a recent &lt;a href='http://krugman.blogs.nytimes.com/2009/03/03/all-your-downside-are-belong-to-us/'&gt;post about taxpayers' and AIG&lt;/a&gt;.  I love the fact that Krugman wins his field's highest prize and groks &lt;a href='http://en.wikipedia.org/wiki/All_your_base_are_belong_to_us'&gt;ancient Internet memes&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-1837505513122679115?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/1837505513122679115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=1837505513122679115' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/1837505513122679115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/1837505513122679115'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/03/quote-o-day.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-2786271997677478557</id><published>2009-03-03T13:08:00.004-07:00</published><updated>2009-03-03T13:16:42.870-07:00</updated><title type='text'>Gallatin County Montana Recycling Colle­ction Locations</title><content type='html'>I had trouble finding the recycling drop off locations around Bozeman and Belgrade, so I created this map.
&lt;iframe width="640" height="480" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.com/maps/ms?ie=UTF8&amp;amp;hl=en&amp;amp;t=h&amp;amp;s=AARTsJpwj1Zog-JqMTKph1eB-JIXAdLMPw&amp;amp;msa=0&amp;amp;msid=115996078874531046964.0004643be0bb170d755b7&amp;amp;ll=45.590978,-111.382141&amp;amp;spn=0.922556,1.757813&amp;amp;z=9&amp;amp;output=embed"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://maps.google.com/maps/ms?ie=UTF8&amp;amp;hl=en&amp;amp;t=h&amp;amp;msa=0&amp;amp;msid=115996078874531046964.0004643be0bb170d755b7&amp;amp;ll=45.590978,-111.382141&amp;amp;spn=0.922556,1.757813&amp;amp;z=9&amp;amp;source=embed" style="color:#0000FF;text-align:left"&gt;View Larger Map&lt;/a&gt;&lt;/small&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-2786271997677478557?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/2786271997677478557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=2786271997677478557' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2786271997677478557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2786271997677478557'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/03/gallatin-county-montana-recycling.html' title='Gallatin County Montana Recycling Colle­ction Locations'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-4363938231620290873</id><published>2009-02-17T12:08:00.000-07:00</published><updated>2009-02-17T12:08:00.285-07:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;If people can't think clearly about anything that has become part of their identity, then all other things being equal, the best plan is to let as few things into your identity as possible.&lt;p/&gt;...&lt;p/&gt;But there is a step beyond thinking of yourself as x but tolerating y: not even to consider yourself an x. The more labels you have for yourself, the dumber they make you.&lt;/blockquote&gt;

--Paul Graham on &lt;a href="http://www.paulgraham.com/identity.html"&gt;small identities&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-4363938231620290873?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/4363938231620290873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=4363938231620290873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4363938231620290873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4363938231620290873'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/02/quote-o-day.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-3049812173838715452</id><published>2009-02-15T11:54:00.002-07:00</published><updated>2009-02-15T12:06:06.934-07:00</updated><title type='text'>Bullet Dodged</title><content type='html'>In 2007 Australian conglomerate Babcock and Brown wanted to buy the main supplier of power to Montana, Northwestern Energy.  Eventually, the Montana Public Service commission &lt;a href="http://billingsgazette.net/articles/2007/07/25/news/state/25-nwe_s.txt"&gt;prevented the deal&lt;/a&gt;, basically on the grounds that they couldn't imagine BBI doing anything other than squeezing capital out of NWE hurting consumers.  Recently, BBI has been forced to &lt;a href="http://www.bloomberg.com/apps/news?pid=20601087&amp;sid=aKZ6HpRiioSw"&gt;sell off all its assets&lt;/a&gt; to pay off its debts.  Its market capitalization fell from many billions to effectively zero.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-3049812173838715452?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/3049812173838715452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=3049812173838715452' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3049812173838715452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3049812173838715452'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/02/bullet-dodged.html' title='Bullet Dodged'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-8927874593214102511</id><published>2009-02-03T16:35:00.005-07:00</published><updated>2009-02-04T09:52:46.076-07:00</updated><title type='text'>Removing C# #regions</title><content type='html'>I hate C#'s #region directive.  Far too many folks abuse it.  Even when it's not abused, Visual Studio's default settings (at least once upon a time) didn't allow you to search in a closed region, which drove me crazy.  Jeff Atwood had a &lt;a href="http://www.codinghorror.com/blog/archives/001147.html"&gt;thorough piece about #region's evils&lt;/a&gt;.
&lt;p/&gt;
A coworker of mine was about to go postal after dealing with some highly #regioned code, so I offered to fix it up for him.  There are probably a bajillion ways to remove regions already, but here's another.  This assumes you've got a Unix environment at your disposal.
&lt;ol&gt;
&lt;li&gt;Get a fresh check out of your source code&lt;/li&gt;
&lt;li&gt;Change to a directory that you want to fix recursively.&lt;/li&gt;
&lt;li&gt;Get a list of all the files that contain regions and store it for later. &lt;br/&gt;&lt;code&gt;grep --include='*.cs' -lRP '#region|#endregion' * | tee files&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ensure that grep found approximately the expected number of files.&lt;/li&gt;
&lt;li&gt;Remove all of lines with regions.  &lt;br/&gt;&lt;code&gt;for $i in `cat files`; do sed -ibak -r '/#region|#endregion/d' $i; done&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ensure your code builds and your unit tests pass.&lt;/li&gt;
&lt;li&gt;Remove whitespace from lines which contain only whitespace.&lt;br/&gt;&lt;code&gt;for i in `cat files`; do sed -i -r 's/^[ \t]+$//' $i; done&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ensure your code builds and your unit tests pass.&lt;/li&gt;
&lt;li&gt;Remove consecutive blank lines, leaving a single blank line.  &lt;br/&gt;&lt;code&gt;for i in `cat files` ; do sed -i '$!N; /^\(\)\n\1$/!P; D' $i; done&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Ensure your code builds and your unit tests pass.&lt;/li&gt;
&lt;li&gt;Commit!&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/8499998-8927874593214102511?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/8927874593214102511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=8927874593214102511' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/8927874593214102511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/8927874593214102511'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/02/removing-c-regions.html' title='Removing C# #regions'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-1929768967408379019</id><published>2009-01-31T15:25:00.004-07:00</published><updated>2009-01-31T15:51:35.765-07:00</updated><title type='text'>The Earth and Moon at True Separation</title><content type='html'>A while back, NASA released a beautiful image from the &lt;a href="http://en.wikipedia.org/wiki/HiRISE"&gt;HIRISE satellite&lt;/a&gt;, which was orbiting Mars at the time, that showed the Earth and the Moon in a single shot.&lt;p/&gt;
&lt;a href="http://picasaweb.google.com/lh/photo/lWKnZBaF_TY66uyEzsRqVA?feat=embedwebsite"&gt;&lt;img src="http://lh3.ggpht.com/_mnjY4i4rmCg/SYTQZY01UvI/AAAAAAAADwI/EF3lZT3LnYM/s800/PSP_005558_9040_cut_b.jpg" /&gt;&lt;/a&gt;  &lt;p/&gt;It occurred to me that the apparent separation of the bodies was probably significantly less than actual, so I did the math to calculate the number of pixels that ought to separate them based on their sizes in the image.  In case you're interested, the ratio of the Moon's average distance from Earth to its diameter is about &lt;a href="http://en.wikipedia.org/wiki/Moon"&gt;110&lt;/a&gt;.  Then I created a new image that showed how far apart they ought to be to reflect reality.&lt;p/&gt;  
&lt;a href="http://picasaweb.google.com/lh/photo/9tgAeXRPAxVU-iyGXeE_YA?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_mnjY4i4rmCg/SYTQZScYo4I/AAAAAAAADwA/iMBeztjKTRU/s800/earth-moon-real.jpg" /&gt;&lt;/a&gt;&lt;p/&gt;
The corrected image makes me think a few things.
&lt;ol&gt;
&lt;li&gt;There is an awful lot of nothing out there.&lt;/li&gt;
&lt;li&gt;Those Apollo missions were astonishing.&lt;/li&gt;
&lt;li&gt;When somebody tells you that &lt;i&gt;x&lt;/i&gt; of &lt;i&gt;y&lt;/i&gt; lined up end to end would reach to the moon and back, it's probably further than you think.&lt;/li&gt;
&lt;li&gt;Gravity is a wacky, wacky force.  It seems unintuitive that any attractive force could hold two bodies together at that distance.  (There must be a really cheese declaration of devotion to be derived from that.)&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/8499998-1929768967408379019?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/1929768967408379019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=1929768967408379019' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/1929768967408379019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/1929768967408379019'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/01/earth-and-moon-at-true-separation.html' title='The Earth and Moon at True Separation'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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://lh3.ggpht.com/_mnjY4i4rmCg/SYTQZY01UvI/AAAAAAAADwI/EF3lZT3LnYM/s72-c/PSP_005558_9040_cut_b.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8499998.post-5504844408505571283</id><published>2009-01-26T11:06:00.000-07:00</published><updated>2009-01-26T11:06:00.751-07:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;The hardest thing I ever did was to be an honest man, to accept my responsibilities.&lt;/blockquote&gt;

-- Tony, homeless single father of 6 who has &lt;a href="http://bozemandailychronicle.com/articles/2009/01/25/news/000tony.txt"&gt;chosen&lt;/a&gt; to turn to charity instead of crime to support his family.  He hopes to study to become a phlebotomist.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-5504844408505571283?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/5504844408505571283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=5504844408505571283' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/5504844408505571283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/5504844408505571283'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2009/01/quote-o-day.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-8734414039126510162</id><published>2008-11-11T21:35:00.006-07:00</published><updated>2008-11-14T21:09:10.275-07:00</updated><title type='text'>Why I didn't vote for Barack Obama</title><content type='html'>My friend Tim unknowingly &lt;a href="http://www.inessentials.com/blog/archive/2008/10/29/15_58_22"&gt;extended his sympathy&lt;/a&gt; to me for my failure to vote for Barack Obama.  Somehow that has compelled me to explain why I didn't vote for Obama.
&lt;p&gt;
My primary reason was that he didn't need my vote.  Even when I filled in my absentee ballot two weeks ahead of time, it was pretty obvious that Obama was going to win.  Some people watch sports;  I read &lt;a href="http://www.electoral-vote.com/"&gt;electoral college&lt;/a&gt; &lt;a href="http://www.fivethirtyeight.com/"&gt;prediction&lt;/a&gt; drivel.  Regardless of whether I desired him as president, I was convinced my vote wasn't going to decide who sat at 1600.  Consequently, I decided to spend my vote to send a message.
&lt;/p&gt;&lt;p&gt;
I abhor the Bush administration and all other Republicans who speak of limited government, fiscal conservatism, and personal rights, yet have supported or claimed &lt;a href="http://en.wikipedia.org/wiki/Unitary_executive_theory#The_Jefferson_administration"&gt;unitary executive power&lt;/a&gt;, have overseen the increase of the &lt;a href="http://uspolitics.about.com/od/thefederalbudget/ig/Political-Economic-Measures/Debt-GDP-by-President.htm"&gt;national debt to GDP ratio&lt;/a&gt; through the last 20 years of Republican presidency, and supported the &lt;a href="http://en.wikipedia.org/wiki/USA_PATRIOT_Act"&gt;USA PATRIOT&lt;/a&gt; Act.  &lt;/p&gt;&lt;p&gt;
It was clear that the Republicans would be the minority party for a while.  I cast a vote to say to them, when you come back, please stick to the ideals that you claim.  The Democrats will do a fine job of being a big government party that socializes.  They will tax and spend.  The nation does not need a borrow-and-spend party.   The nation needs a conservative party that's actually conservative and does not lead the way in nationalizing industries.  I expect the Democrats to do that.  I expect them to do it in a competent, punitive way.  I am embarrassed of a Republican President and his Treasury Secretary demanding 5% of our GDP be borrowed and given to one man to spend without oversight.  I am shamed that he would spend that money to nationalize in a way that effectively gave those recklessly self-destructive corporations handouts equal in size to the equity stake required of them.  Shame.
&lt;/p&gt;&lt;p&gt;
I am appalled by conservatives who see education as elitist, learning as suspect, and science as untrustworthy.  They extol the virtues of our Founding Fathers, but they reject the life-long-learning ethic of those men.  (c.f. &lt;a href="http://www.amazon.com/1776-David-McCullough/dp/0743226720/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1226216256&amp;amp;sr=8-1"&gt;1776&lt;/a&gt;) The Bush-Palin wing of the party seems to value ignorance, instead.  They seem to believe that current events have a clear liberal bias and should, therefore, not be understood.  They value technology and its wealth-building, military-power-extending, nation-glorifying, life-preserving benefits, but revile as wasteful and immoral the basic research which produces those innovations.&lt;/p&gt;&lt;p&gt;
While Obama did not need my vote, the Republican party desperately needed what little guidance I could offer by voting for a member of their party who is actually a conservative; who believes in listening to those with whom he disagrees in order to be informed; who defends balanced budgets as fervently as other Republicans clung to spending more than a bailout's worth on spreading Democracy in the Middle East.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-8734414039126510162?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/8734414039126510162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=8734414039126510162' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/8734414039126510162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/8734414039126510162'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/11/why-i-didnt-vote-for-barack-obama.html' title='Why I didn&apos;t vote for Barack Obama'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8499998.post-8449890093297171329</id><published>2008-11-08T21:41:00.000-07:00</published><updated>2008-11-08T21:46:39.007-07:00</updated><title type='text'>Recommended: Absentee Voting</title><content type='html'>I voted absentee this year for the first time. It was fantastic.
&lt;p/&gt;
In the past I’ve dug around, found a sample ballot, researched the issues, filled in my sample appropriately, taken the sample to the polls, waited in line, and copied from the the sample to the actual.
&lt;p/&gt;
This year I sat down at the kitchen table with my notebook, the Google, and my actual ballot.  Then I researched, filled, and mailed.
&lt;p/&gt;
Montana lets you check a box on your absentee ballot that causes the clerk to send you an absentee ballot for all future elections.  Of course, I checked it.
&lt;p/&gt;
The only downside of voting absentee in Montana is that you can only request such a ballot in the window of 75 days before to 0.5 days before an election.  Now that you too may want to vote absentee, you'll just have to wait until the next election to remember to apply.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-8449890093297171329?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/8449890093297171329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=8449890093297171329' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/8449890093297171329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/8449890093297171329'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/11/recommended-absentee-voting.html' title='Recommended: Absentee Voting'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-4436027537972574670</id><published>2008-11-08T21:26:00.002-07:00</published><updated>2008-11-08T21:32:57.975-07:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;This is a crisis spawned, in large part, by our own delusion.
&lt;p/&gt;
We wanted to believe in ever-rising stocks, in a shop-till-the-terrorists-are-defeated foreign policy and homes that were worth whatever our mortgage broker told us.
&lt;p/&gt;
For eight years, our government borrowed to pay for wars, tax cuts and prescription drugs, while we borrowed to pay for HDTVs, iPhones and Xboxes. Buy now, pay later wasn’t just a sales pitch, it was fiscal policy.
&lt;p/&gt;
Later is now. To fix our economy we first must change our views of debt and savings.
&lt;p/&gt;
That will take sacrifice, the one word from the president-elect’s speech that we must hear before all others.&lt;/blockquote&gt;

-- Loren Steffy &lt;a href="http://www.chron.com/disp/story.mpl/hotstories/6099726.html"&gt;opining&lt;/a&gt; for the Houston Chronicle.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-4436027537972574670?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/4436027537972574670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=4436027537972574670' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4436027537972574670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4436027537972574670'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/11/quote-o-day.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-4472414856678500643</id><published>2008-10-19T22:07:00.000-06:00</published><updated>2008-10-19T22:07:00.989-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;Men, it has been well said, think in herds; it will be seen that they go mad in herds, while they only recover their senses slowly, and one by one.&lt;/blockquote&gt;
-- &lt;a href="http://en.wikipedia.org/wiki/Charles_Mackay"&gt;Charles Mackay&lt;/a&gt; in his 1841 book, &lt;a href="http://en.wikipedia.org/wiki/Extraordinary_Popular_Delusions_and_the_Madness_of_Crowds"&gt;Extraordinary Popular Delusions and the Madness of Crowds&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-4472414856678500643?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/4472414856678500643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=4472414856678500643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4472414856678500643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4472414856678500643'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/10/quote-o-day_19.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-3624093045978383914</id><published>2008-10-17T08:17:00.000-06:00</published><updated>2008-10-17T08:17:00.838-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;I defy anyone to give a coherent explanation of what today's Republican Party, under George Bush and now John McCain, wants to do except perpetuate itself in power.
&lt;p/&gt;
When a political party reaches the point of lurching incoherence, the most effective cure is a good, long spell in the wilderness.&lt;/blockquote&gt;
-- Eugene Robinson in an op-ed for the &lt;a href="http://www.washingtonpost.com/wp-dyn/content/article/2008/10/13/AR2008101302172_pf.html"&gt;WaPo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-3624093045978383914?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/3624093045978383914/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=3624093045978383914' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3624093045978383914'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3624093045978383914'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/10/quote-o-day_17.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-1767992621257069067</id><published>2008-10-15T08:11:00.002-06:00</published><updated>2008-10-15T08:17:19.152-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;I no longer have any clear idea what, exactly, the modern conservative movement stands for.&lt;p/&gt;
Eight years of 'conservative' government has brought us a doubled national debt, ruinous expansion of entitlement programs, bridges to nowhere, poster boy Jack Abramoff and an ill-premised, ill-waged war conducted by politicians of breathtaking arrogance. As a sideshow, it brought us a truly obscene attempt at federal intervention in the Terry Schiavo case.&lt;/blockquote&gt;
-- Christopher Buckley, the son of conservative icon William F. Buckley, after &lt;a href="http://politicalticker.blogs.cnn.com/2008/10/15/buckley-leaves-national-review-after-obama-endorsement-2/"&gt;resigning&lt;/a&gt; from the conservative "National Review" magazine, which his father founded.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-1767992621257069067?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/1767992621257069067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=1767992621257069067' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/1767992621257069067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/1767992621257069067'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/10/quote-o-day.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-7766952637260455356</id><published>2008-09-23T14:09:00.003-06:00</published><updated>2008-09-23T14:12:16.903-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;It's a fiesta in my arteries.&lt;/blockquote&gt;
-- My office mate, referring to his microwaved chimichanga and its formerly molten, then coagulated Monterey Jack cheese.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-7766952637260455356?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/7766952637260455356/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=7766952637260455356' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/7766952637260455356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/7766952637260455356'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/09/quote-o-day_23.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-971994419951853755</id><published>2008-09-20T21:48:00.001-06:00</published><updated>2008-09-20T21:51:23.362-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;I do not believe that history is going to be very kind to this president. I think that most of the time history is about a presidency, and a president. And the vice president is almost always a footnote in that story. But I believe that in this case the history is going to treat both the president and vice president unkindly almost in equal part.&lt;/blockquote&gt;

-- Former Republican House majority leader Dick Armey, who &lt;a href="http://www.nytimes.com/2008/09/16/books/16kaku.html?em"&gt;feels&lt;/a&gt; he was most likely misled by his old friend Mr. Cheney in the walk-up to the Iraq war.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-971994419951853755?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/971994419951853755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=971994419951853755' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/971994419951853755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/971994419951853755'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/09/quote-o-day_20.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-4076693992795058836</id><published>2008-09-16T12:33:00.002-06:00</published><updated>2008-09-16T14:37:36.037-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;Bush lands in Texas; Residents urged to leave&lt;/blockquote&gt;
-- Headline from cnn.com's main page linking to &lt;a href="http://www.cnn.com/2008/US/weather/09/16/hurricane.ike/index.html"&gt;this story&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-4076693992795058836?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/4076693992795058836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=4076693992795058836' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4076693992795058836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4076693992795058836'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/09/quote-o-day.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-4732300758634500733</id><published>2008-08-27T00:23:00.002-06:00</published><updated>2008-08-27T00:25:35.918-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;If you look at the list, you can see that anyone who's ever shot a gopher's got a speaking engagement here.&lt;/blockquote&gt;

--Montana Governor Brian Schweitzer &lt;a href="http://www.billingsgazette.net/articles/2008/08/26/news/state/18-theguv.txt"&gt;downplaying&lt;/a&gt; the significance of his being invited to speak at the Democratic National Convention.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-4732300758634500733?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/4732300758634500733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=4732300758634500733' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4732300758634500733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4732300758634500733'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/08/quote-o-day_27.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-3196972140537471101</id><published>2008-08-03T23:18:00.001-06:00</published><updated>2008-08-03T23:24:10.835-06:00</updated><title type='text'>Splash</title><content type='html'>It's not great, but this is the best I got in my first attempt to catch a splash.
&lt;a href="http://picasaweb.google.com/leifwickland/TryingToCatchASplashForTheFirstTime/photo#5230527557343410786"&gt;&lt;img src="http://lh4.ggpht.com/leifwickland/SJaRGdNYemI/AAAAAAAACrM/PQGZsuVaWEQ/s800/dsc_3338.jpg" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-3196972140537471101?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/3196972140537471101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=3196972140537471101' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3196972140537471101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3196972140537471101'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/08/splash.html' title='Splash'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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://lh4.ggpht.com/leifwickland/SJaRGdNYemI/AAAAAAAACrM/PQGZsuVaWEQ/s72-c/dsc_3338.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8499998.post-5551367096559775848</id><published>2008-08-03T12:41:00.002-06:00</published><updated>2008-08-03T12:46:48.967-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;The cost of shipping a 40-foot container from Shanghai to the United States has risen to $8,000, compared with $3,000 early in the decade, according to a recent study of transportation costs. Big container ships ... have shaved their top speed by nearly 20 percent to save on fuel costs, substantially slowing shipping times.&lt;p&gt;
The recent surge in shipping costs is on average the equivalent of a 9 percent tariff on trade.
&lt;/blockquote&gt;
A &lt;a href="http://www.nytimes.com/2008/08/03/business/worldbusiness/03global.html"&gt;NYT article&lt;/a&gt; on how the high price of oil also has benefits to the North American economies, bringing back to the Western Hemisphere work that had gone to the Eastern.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-5551367096559775848?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/5551367096559775848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=5551367096559775848' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/5551367096559775848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/5551367096559775848'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/08/quote-o-day.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-2325701005002565327</id><published>2008-07-07T22:01:00.003-06:00</published><updated>2008-07-07T22:08:22.082-06:00</updated><title type='text'>Almost</title><content type='html'>We took a road trip to Yellowstone yesterday.  Yeah, it's nice to be able to decide spur of the moment to drive to Yellowstone.  We filled up at Costco (let's hear it for 5% back on gas!) as we were leaving. I knew we were making pretty good mileage when we were better than 50 MPG when we got to the park.  It just got better as the day went on.  I was hoping to make it to 58 MPG by the time we got home.  I did better than that.  &lt;a href="http://picasaweb.google.com/elizabethwickland/YellowstoneInJulyPartII/photo#5220487806737114066"&gt;&lt;img src="http://lh5.ggpht.com/elizabethwickland/SHLmADrS49I/AAAAAAAADkA/Dh-tJVTECbA/s400/DSC_9182.JPG" /&gt;&lt;/a&gt;

I was so close to 60 MPG.  I probably could've made it if I'd gone and slowly cruised around the subdivision for a while, but it was 3 minutes to midnight and I was tired, so that can be a challenge for another day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-2325701005002565327?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/2325701005002565327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=2325701005002565327' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2325701005002565327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2325701005002565327'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/07/almost.html' title='Almost'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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://lh5.ggpht.com/elizabethwickland/SHLmADrS49I/AAAAAAAADkA/Dh-tJVTECbA/s72-c/DSC_9182.JPG' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8499998.post-4534391747441779756</id><published>2008-06-27T12:29:00.003-06:00</published><updated>2008-06-27T23:45:55.602-06:00</updated><title type='text'>The Worst 10 Years, Part 2</title><content type='html'>A few years back I &lt;a href="http://leifw.blogspot.com/2005/04/worst-10-years.html"&gt;figured out&lt;/a&gt; how badly the stock market would have to perform for 2000-2010 to be the worst 10 years on record for the American stock market.  At that time, it didn't have to do particularly well to avoid making the record books.&lt;p/&gt;

With the market's recent downswing, the possibility has become much more likely.  We're almost exactly 1.75 years from the 10 year anniversary all time high of the S&amp;P 500 index, &lt;a href="http://finance.yahoo.com/q/hp?s=%5EGSPC&amp;amp;amp;a=02&amp;b=24&amp;c=2000&amp;d=02&amp;e=24&amp;f=2000&amp;g=d"&gt;1527.46 on March 24, 2000&lt;/a&gt;.  Today the S&amp;P 500 is around 1282.  To avoid being the worst 10 year span, the S&amp;P needs to stand at 1715 in 21 months.  That's a gain of 33.8% and an annualized gain of 18.1%.&lt;p/&gt;

Steven Pearlstein seems to think we may be headed for the record books, judging based on the headline, "&lt;a href="http://www.washingtonpost.com/wp-dyn/content/article/2008/06/26/AR2008062604030_2.html?hpid=topnews"&gt;This Recession, It's Just Beginning&lt;/a&gt;," of his WaPo column.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-4534391747441779756?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/4534391747441779756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=4534391747441779756' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4534391747441779756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4534391747441779756'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/06/worst-10-years-part-2.html' title='The Worst 10 Years, Part 2'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-2376587361048489267</id><published>2008-06-25T21:38:00.006-06:00</published><updated>2008-06-26T15:31:11.504-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;Epic. I almost died three times but I’d do it again.&lt;/blockquote&gt;
-- An anonymous racer in &lt;a href="http://www.ecoprimalquest.com/wp-primal/"&gt;Primal Quest Montana&lt;/a&gt; commenting on the Gallatin River after having been &lt;a href="http://www.ecoprimalquest.com/wp-primal/2008/06/24/overheard-on-the-course/"&gt;rescued&lt;/a&gt; from its raging, overflowing waters.  The river was so high that race organizers decided to cancel the Gallatin section midday and to truck the racers who hadn't completed the section to its end.  Based on that experience, the organizers also &lt;a href="http://www.ecoprimalquest.com/wp-primal/2008/06/25/day-3-brings-course-changes/"&gt;canceled&lt;/a&gt; the 70 mile kayaking of the Yellowstone River, which is also flooding.
&lt;p/&gt;
The race's nearly 600 mile long course is &lt;a href="http://www.ecoprimalquest.com/leaderboards-and-tracking/map.php"&gt;currently&lt;/a&gt; being run, biked, swam, climbed, etc. over a big chunk of southwestern Montana.  The leading teams are performing shockingly well, fundamentally outclassing the bottom two thirds of the pack, which I find truly amazing because I suspect anyone who would pay $12,500 to race under their own power for 600 miles is a superlative athlete.  That the leading teams seem to completing the course twice as fast as the other teams is astonishing.
&lt;p/&gt;
I really don't have much respect for the physical abilities of the players in many of the widely-viewed sports.  I really don't see much athleticism demonstrated in swinging a stick at a sphere and standing around in a grassy field for quarters of an hour at a time.  These folks, I respect.  I've hiked short sections (at most 14 miles at a time) of the course they're following and I was really tired afterward.  I've kayaked the Yellowstone, which is tamer than the Gallatin, and I was scared.  They're good and they're crazy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-2376587361048489267?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/2376587361048489267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=2376587361048489267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2376587361048489267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2376587361048489267'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/06/quote-o-day_25.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-3188584266997997332</id><published>2008-06-23T08:54:00.002-06:00</published><updated>2008-06-23T09:26:28.358-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;The PSC says homeowners and businesses should do all they can now to insulate their homes and offices.&lt;/blockquote&gt;

-- The Montana Public Service Commission &lt;a href="http://www.kxmb.com/News/250372.asp"&gt;attempting&lt;/a&gt; to &lt;a href="http://www.greatfallstribune.com/apps/pbcs.dll/article?AID=/20080616/OPINION/806160304"&gt;get out&lt;/a&gt; the word that natural gas heating expenses will be "significantly higher" this winter than last.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-3188584266997997332?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/3188584266997997332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=3188584266997997332' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3188584266997997332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3188584266997997332'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/06/quote-o-day_23.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-6495147388445905633</id><published>2008-06-22T21:07:00.003-06:00</published><updated>2008-06-23T08:54:03.784-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;It is hard for me to find the words to express what a massive, fraudulent, pathetic excuse for an energy policy this is...&lt;p/&gt;
This from a president who for six years resisted any pressure on Detroit to seriously improve mileage standards on its gas guzzlers; this from a president who’s done nothing to encourage conservation...&lt;p/&gt;
This deadline is from a president who hasn’t lifted a finger to broker passage of legislation that has been stuck in Congress for a year, which could actually impact America’s energy profile right now — unlike offshore oil that would take years to flow — and create good tech jobs to boot.
&lt;/blockquote&gt;
--Thomas Friedman in the NYT &lt;a href="http://www.nytimes.com/2008/06/22/opinion/22friedman.html?partner=rssnyt&amp;emc=rss"&gt;regarding&lt;/a&gt; President Bush's demand that Congress allow drilling offshore and in ANWR by July 4.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-6495147388445905633?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/6495147388445905633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=6495147388445905633' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/6495147388445905633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/6495147388445905633'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/06/quote-o-day_22.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-4046694097961911189</id><published>2008-06-19T08:05:00.002-06:00</published><updated>2008-06-19T08:09:13.525-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;Even if tomorrow we opened up every square mile of the outer Continental Shelf to offshore rigs, even if we drilled the entire state of Alaska and pulled new refineries out of thin air, the impact on gas prices would be minimal and delayed at best.&lt;/blockquote&gt;

--Bryan Walsh for Time magazine &lt;a href="http://www.time.com/time/business/article/0,8599,1815884,00.html?cnn=yes"&gt;explaining&lt;/a&gt; why President Bush's proposal to open drilling on the continental shelf and in ANWR to lower gas prices is somewhat disingenuous.  Interestingly, Bush's father approved one of those bans.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-4046694097961911189?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/4046694097961911189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=4046694097961911189' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4046694097961911189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4046694097961911189'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/06/quote-o-day_19.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-3446935895044698353</id><published>2008-06-13T08:58:00.003-06:00</published><updated>2008-06-13T10:01:30.555-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;He made some poor choices last night.&lt;/blockquote&gt;
-- Bozeman Police Sergent Colton Schumacher &lt;a href="http://bozemandailychronicle.com/articles/2008/06/13/news/50chase.txt"&gt;referring&lt;/a&gt; to a local man who is charged with speeding, driving under the influence, eluding officers, failing to obey a traffic control device, reckless driving, obstructing a peace officer and felony theft after stealing a car, driving 80 in a 25 MPH zone, and leading police on a three hour chase.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-3446935895044698353?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/3446935895044698353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=3446935895044698353' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3446935895044698353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3446935895044698353'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/06/quote-o-day_13.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-631132362820153508</id><published>2008-06-11T23:36:00.002-06:00</published><updated>2008-06-11T23:41:28.272-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;It would not be an exaggeration to say that the Democrats’ nomination of Obama as their candidate for president has done more to improve America’s image abroad — an image dented by the Iraq war, President Bush’s invocation of a post-9/11 “crusade,” Abu Ghraib, Guantánamo Bay and the xenophobic opposition to Dubai Ports World managing U.S. harbors — than the entire Bush public diplomacy effort for seven years.&lt;/blockquote&gt;

--Thomas Friedman in a recent &lt;a href="http://www.nytimes.com/2008/06/11/opinion/11friedman.html?_r=1&amp;partner=rssnyt&amp;emc=rss&amp;oref=slogin"&gt;editorial&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-631132362820153508?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/631132362820153508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=631132362820153508' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/631132362820153508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/631132362820153508'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/06/it-would-not-be-exaggeration-to-say.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-2883085367167364259</id><published>2008-06-02T14:14:00.002-06:00</published><updated>2008-06-02T14:17:20.163-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;There is no shame in recognizing your failings or getting help if you need it. The tragedy comes when we fail to take responsibility for our weaknesses and surrender to them.&lt;/blockquote&gt;-- President G. W. Bush &lt;a href="http://ap.google.com/article/ALeqM5gdwENUZz-T8uVKlWfz3wcL0ao0NwD9111G4G0"&gt;speaking&lt;/a&gt; the the graduating class at Furman University.


&lt;hints id="hah_hints"&gt;&lt;/hints&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-2883085367167364259?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/2883085367167364259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=2883085367167364259' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2883085367167364259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2883085367167364259'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/06/quote-o-day.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-1877208749908120352</id><published>2008-05-28T22:46:00.001-06:00</published><updated>2008-05-28T22:47:53.820-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;
I was visiting my local Toyota dealer in Bethesda, Md., last week to trade in one hybrid car for another. There is now a two-month wait to buy a Prius, which gets close to 50 miles per gallon. The dealer told me I was lucky. My hybrid was going up in value every day, so I didn’t have to worry about waiting a while for my new car. But if it were not a hybrid, he said, he would deduct each day $200 from the trade-in price for every $1-a-barrel increase in the OPEC price of crude oil. When I saw the rows and rows of unsold S.U.V.’s parked in his lot, I understood why.
&lt;/blockquote&gt;
--Thomas Friedman in a recent &lt;a href="http://www.nytimes.com/2008/05/28/opinion/28friedman.html?partner=rssnyt&amp;emc=rss"&gt;editorial&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-1877208749908120352?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/1877208749908120352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=1877208749908120352' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/1877208749908120352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/1877208749908120352'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/05/quote-o-day.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-3285413544262058692</id><published>2008-04-20T19:03:00.002-06:00</published><updated>2008-04-20T19:13:58.218-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;Unless physical things can be explained by mechanical laws, God cannot, even if he chooses, reveal and explain nature to us.&lt;/blockquote&gt;

Excerpted from a fictional letter from &lt;a href="http://en.wikipedia.org/wiki/Gottfried_Leibniz"&gt;G. W. Leibniz&lt;/a&gt; to &lt;a href="http://en.wikipedia.org/wiki/Daniel_Waterhouse"&gt;Daniel Waterhouse&lt;/a&gt; in &lt;a href="http://en.wikipedia.org/wiki/Neal_Stephenson"&gt;Neal Stephenson&lt;/a&gt;'s &lt;a href="http://en.wikipedia.org/wiki/The_Baroque_Cycle"&gt;Baroque Cycle&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-3285413544262058692?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/3285413544262058692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=3285413544262058692' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3285413544262058692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3285413544262058692'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/04/quote-o-day.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-3177465397026127272</id><published>2008-03-10T21:03:00.007-06:00</published><updated>2008-03-11T00:11:58.680-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>NPR's ATC &lt;a href="http://www.npr.org/templates/story/story.php?storyId=87991791"&gt;interviewed&lt;/a&gt; Montana's Governor about Montana's refusal to play nicely with the federal mandate for &lt;a href="http://en.wikipedia.org/wiki/REAL_ID_Act"&gt;REAL ID&lt;/a&gt;.  If you have the time, listen to it instead of settling for my poor transcription.  If nothing else, at least make it through the first paragraph.

&lt;blockquote&gt;Schweitzer: Well, we’re putting up with the Federal government on so many fronts, and nearly every month, they come out with another harebrained scheme, an unfunded mandate, to tell us that our life is going to be better if we’ll just buckle under on some other kind of rule or regulation.  We usually just play along for a while and we ignore them for as long as we can. We try not to bring it to a head, but if it comes to1 a head, we’ve found that it’s best to just tell them to go to hell and run the state the way you wanna run your state.
&lt;p/&gt;
Unfortunately this time around they've really got a hare-brained scheme.  This is the way it works.  This REAL ID that congress has come up with was supposed to help us with immigration, homeland security, and stop identify theft.  Come on.  These REAL IDs won't be available for another 7 or 8 years.  Come on.  There is no REAL ID.  So they're telling the states that you're going to have to take your first step toward these IDs and the first step is to send us a letter to say that you're going to accept our provisions sometime in the future when we figure out what they're going to be.
&lt;p/&gt;
Interviewer: Do you understand the national security concerns here?  [etc.]
&lt;p/&gt;
Schweitzer: Almost all those hijackers on 9/11 would have qualified to have a Real ID.  This is the way the system works.  You walk into a drivers license bureau somewhere and present them with a birth certificate.  The problem is we don't have a standardized process of birth certificates across this country.  You give me a half a dozen high school students and a Kinko’s, and I’ll show you a bunch of birth certificates that looks very, very real.
&lt;p/&gt;
[...]
&lt;p/&gt;
Schweitzer: So that everyone understands, the Montana legislature passed a bill that instructs the Governor and the Attorney General not to implement any provisions of the Real ID [Act].  And this is the only thing that I know of that has united the farthest Left to the farthest Right in Montana politics.
&lt;p/&gt;
There was not one dissenting vote out of 150 legislators.
They simply said that they were fed up with the federal government coming up with kooky IDs that do not make us any more secure.  This is the federal government telling a state you must do something and you must pay for it.  Well, thanks for playing.  Montana's not in. 
&lt;p/&gt;
[...]
&lt;p/&gt;
Interviewer:  Well Governor Schweitzer, what happens in May [Real ID Act “deadline” for state announcing intent to comply] if somebody from your state wants to get on a commercial flight?
&lt;p/&gt;
Schweitzer: They’re gonna show them their Montana driver’s license and they’re gonna get on that commercial flight and nothing’s gonna happen.
&lt;p/&gt;
Interviewer: But that’s supposed to be the deadline.
&lt;p/&gt;
Schweitzer: Blah, blah, blah, “supposed to be the deadline.”  There’s nothing in the Constitution that tells Homeland Security that they’re supposed to do this or they must do this.
In fact there isn't even any actions by Congress that says this is the specific letter you must have.  This is another bluff by some bureaucrats in Washington DC and thank God we live a long ways from Washington DC.
&lt;p/&gt;
Interviewer: Well, Governor Schweitzer, it's great to talk to you.
&lt;/blockquote&gt;

I think the governor and legislature are right to be up in arms about the REAL ID Act if for no other reason than the federal government placing a requirement on the states they the feds estimate will cost $14.6 billion and they've only offered $90 million, i.e. less than 1%, help to pay for the changes.  The roughly $8 million that &lt;a href="leg.mt.gov/content/publications/fiscal/interim/financecmty_mar2008/REAL_%20ID.pdf"&gt;Montana estimates&lt;/a&gt; it would have to spend each year to support the REAL ID requirements is on the same order as the amount the state spent acquiring new parks and recreation lands in the most recent &lt;a href="http://governor.mt.gov/news/pr.asp?ID=401"&gt;budget&lt;/a&gt;.
&lt;p/&gt;
My hat tips to &lt;a href="http://www.boingboing.net/2008/03/07/montana-governor-exp.html"&gt;BoingBoing&lt;/a&gt; and &lt;a href="http://blacknell.net/dynamic/2008/03/08/three-cheers-for-gov-brian-schweizter/"&gt;Blacknell&lt;/a&gt; for having partial transcripts that I built on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-3177465397026127272?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/3177465397026127272/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=3177465397026127272' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3177465397026127272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3177465397026127272'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/03/quote-o-day_10.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-3583855389735680151</id><published>2008-03-09T22:13:00.001-06:00</published><updated>2008-03-09T22:18:36.599-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;Success consists of going from failure to failure without loss of enthusiasm.
&lt;/blockquote&gt;
--Winston Churchill&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-3583855389735680151?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/3583855389735680151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=3583855389735680151' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3583855389735680151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3583855389735680151'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/03/quote-o-day.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-438945320935308545</id><published>2008-03-01T14:38:00.003-07:00</published><updated>2008-03-01T20:17:31.341-07:00</updated><title type='text'>Pascal's Wager for Climate Change</title><content type='html'>Reading an email thread arguing about the reality of human caused climate change I accidentally analogized the situation to &lt;a href="http://en.wikipedia.org/wiki/Pascal%27s_Wager"&gt;Pascal's Wager&lt;/a&gt;.  Both are premised on the probability and risk-reward ratio of unknowable situations.
&lt;blockquote&gt;
If there is anthropogenic global warming but we continue in our current energy consumption patterns, we continue to enrich petro-states and lead our economy teetering toward an economic precipice of short supply, high priced oil.  If there is no anthropogenic global warming but we switch to carbon neutral energy sources, then we become more economically stable and self sufficient while paying ourselves to develop new energy infrastructure.&lt;/blockquote&gt;

Of course, I'm &lt;a href="http://www.google.com/search?&amp;amp;q=pascal%27s%20wager%20global-warming%20%7C%20climate-change"&gt;not the first&lt;/a&gt; to think of think of such a thing.  Apparently the idea goes by the name &lt;a href="http://en.wikipedia.org/wiki/Global_Warming_Wager"&gt;Global Warming Wager&lt;/a&gt; or the &lt;a href="http://en.wikipedia.org/wiki/Precautionary_principle"&gt;Precautionary Principle&lt;/a&gt;.
&lt;p&gt;
It looks like the arguments against the idea run along the lines of:
&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;This proves that environmentalism is a religion.&lt;/li&gt;
&lt;li&gt;This is yet another convenient excuse for the government to take your money and liberty.&lt;/li&gt;
&lt;li&gt;The cost of switching energy infrastructure is too high given the possibility that it's unnecessary.&lt;/li&gt;
&lt;li&gt;It &lt;a href="http://www.acton.org/commentary/commentary_286.php"&gt;overstates&lt;/a&gt; the current damage and understates the ability of future technology to reverse that damage.  Pascal's wager works because the costs of modifying a finite life are always overwhelmed by the possibility (regardless of likelihood) of eternal damnation.  The environmental argument doesn't work because the risk-reward ratio is nearer parity.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I think my statement differs from the normal formulation because it intertwines the political aspect.  Our current course has resulted in a trade imbalance and a reliance on countries with which we often find ourselves at odds.
&lt;/p&gt;&lt;p&gt;
What do you think?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-438945320935308545?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/438945320935308545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=438945320935308545' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/438945320935308545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/438945320935308545'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/03/pascals-wager-for-climate-change.html' title='Pascal&apos;s Wager for Climate Change'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-1626317590531929420</id><published>2008-03-01T14:29:00.002-07:00</published><updated>2008-03-01T14:38:00.767-07:00</updated><title type='text'>Mortgage Mess Meets Montana</title><content type='html'>The Billings Gazette is carrying a &lt;a href="http://www.billingsgazette.net/articles/2008/03/01/news/state/55-mortgagefraud.txt"&gt;story&lt;/a&gt; about a borrower and a mortgage broker conspiring to fraudulently obtain loans.  The story's spin is that the borrower will get to keep the houses and loans that he obtained on the sly, which seems somewhat appropriate considering that he's paid consistently on them.  

The more interesting angle on the story, I think, is that the borrower will be spending a year in jail for his role and the broker will be spending on the order of five years in the pokey.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-1626317590531929420?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/1626317590531929420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=1626317590531929420' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/1626317590531929420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/1626317590531929420'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/03/mortgage-mess-meets-montana.html' title='Mortgage Mess Meets Montana'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-546010294339928580</id><published>2008-02-21T22:30:00.005-07:00</published><updated>2008-02-21T23:34:46.950-07:00</updated><title type='text'>Recommended: "Class C: The Only Game in Town"</title><content type='html'>&lt;table&gt;&lt;tr&gt;&lt;td&gt;
This fantastic, independent film recently won the &lt;a href="http://bigsky.bside.com/?_view=_filmdetails&amp;amp;filmId=46611320"&gt;Big Sky Film Festival&lt;/a&gt;.  I was lucky enough to catch a screening of it tonight in Bozeman.  In a word, it was poignant.  I actually shed a tear and laughed very hard.&lt;p&gt;
&lt;span style="font-style: italic;"&gt;Class C&lt;/span&gt; follows five girls basketball teams from the smallest category of Montana high schools.  The film's narrative is driven by their pursuits of a state championship, but the movie is rarely about basketball.  Defeat, victory, ruin, possibility, humility, pride, place, and self-discovery all play much larger.
&lt;/p&gt;&lt;p&gt;
Beautiful cinematography featuring Montana's sweeping vistas give the film a wonderful flavor.  An original soundtrack provides rich texture.
&lt;/p&gt;&lt;p&gt;
I was very impressed with the balance that the film's young directories demonstrated.  Often with such movies, I cringe more than I emote.  The directors successfully walked a fine line, exploring racial tensions, broken homes, and dying towns in a way that hurt just enough.  Then they'd backhand me with a finely juxtaposed knee-slapper.
&lt;/p&gt;&lt;p&gt;
The girls, of course, are the stars of the movie.  With a few exceptions, they're very impressive, grounded individuals who know exactly how much and simultaneously how little basketball matters.  They articulate with compassion the struggle and joy of rural livelihoods.
&lt;/p&gt;&lt;p&gt;
I think the show has wide appeal, despite being set in Montana.  I watched the film next to a woman who grew up in New York City; she enjoyed it very much.
&lt;/p&gt;&lt;p&gt;
I highly recommend trying to catch &lt;span style="font-style: italic;"&gt;&lt;a href="http://www.montanapbs.org/ClassC/"&gt;Class C&lt;/a&gt;&lt;/span&gt;.  It airs on Montana PBS Wednesday, Feb 27 at 8pm and Monday, March 3 at 7pm.&lt;/td&gt;&lt;td&gt;&lt;img src="http://www.montanapbs.org/images/pressroom/ClassC/thumb_ClassCcover.jpg"/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-546010294339928580?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/546010294339928580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=546010294339928580' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/546010294339928580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/546010294339928580'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/02/recommended-class-c-only-game-in-town.html' title='Recommended: &quot;Class C: The Only Game in Town&quot;'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-7443382565027159714</id><published>2008-02-06T08:25:00.000-07:00</published><updated>2008-02-09T17:13:03.319-07:00</updated><title type='text'>Quote o' the Day</title><content type='html'>The Gallatin County Republicans held their Presidential nominating caucus at a local bar.  The biggest name in attendance was Kansas Senator Sam Brownback, who was there to stump for John McCain.  According to the &lt;a href="http://dailychronicle.com/articles/2008/02/06/news/000gallatin.txt"&gt;local paper&lt;/a&gt;, Brownback approved of the choice of venues.
&lt;blockquote&gt;“I love the Montana style of holding this at a bar with cheap beer.”
&lt;/blockquote&gt;The caucus coincided with happy hour at the bar, during which beers were $1.
&lt;p/&gt;
On a slight unrelated note, &lt;a href="http://www.missoulian.com/articles/2007/12/30/news/local/news05.txt"&gt;Montanans spend the most per capita at bars&lt;/a&gt;.  Amazingly, the average spending is nearly 5 times the national average.  Combined with  Montana's bar prices tending to be lower than elsewhere, well, that's a lot of drinking.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-7443382565027159714?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/7443382565027159714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=7443382565027159714' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/7443382565027159714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/7443382565027159714'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/02/quote-o-day.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-7892509043657392812</id><published>2008-02-03T22:45:00.000-07:00</published><updated>2008-02-03T23:09:07.850-07:00</updated><title type='text'>Are you one of the smartest 60 million people?</title><content type='html'>Are you one of the smartest 60 million people?  For that matter, are you among the top 60 million at anything?  60 million is a lot of folks.  The &lt;a href="http://en.wikipedia.org/wiki/List_of_U.S._states_by_population"&gt;two largest &lt;/a&gt;of the United States, California and Texas, total roughly that number.   It's 100 times the number of folks in Vermont.
&lt;p&gt;
60 million is one percent of the world's 6 billion people.  &lt;a href="http://en.wikipedia.org/wiki/Mensa_International"&gt;Mensa&lt;/a&gt; members are required to be in the top two percent of intelligence.  To say that you're one of the smartest 60 million is to say that you're not just eligible, but you'd be one of the smarter members.
&lt;p&gt;
I mention this not to put anyone down, but just to give scale to the gigantic numbers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-7892509043657392812?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/7892509043657392812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=7892509043657392812' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/7892509043657392812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/7892509043657392812'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/02/are-you-one-of-smartest-60-million.html' title='Are you one of the smartest 60 million people?'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-7597003555829442593</id><published>2008-02-03T22:13:00.000-07:00</published><updated>2008-02-04T17:50:56.310-07:00</updated><title type='text'>Inversion</title><content type='html'>&lt;a href="http://www.biblegateway.com/passage/?book_id=47&amp;amp;chapter=25&amp;amp;verse=29&amp;amp;version=31&amp;amp;context=verse"&gt;Matthew &lt;/a&gt;&lt;span id="en-NIV-24035" class="sup"&gt;&lt;a href="http://www.biblegateway.com/passage/?book_id=47&amp;amp;chapter=25&amp;amp;verse=29&amp;amp;version=31&amp;amp;context=verse"&gt;25:29&lt;/a&gt; reads in part, "&lt;/span&gt;For everyone who has will be given more, and he will have an abundance..."   This is the same principle upon which modern consumer banking operates.  The rich have something to offer for collateral, or better still have a reputation for handling money well, so banks are willing to loan to them.    The poor have nothing to offer to secure a loan.  They're "obviously" bad with money; why else would they be poor?
&lt;p&gt;&lt;span id="en-NIV-24036" class="sup"&gt;&lt;/span&gt;
With this in mind &lt;a href="http://en.wikipedia.org/wiki/Muhammad_Yunus"&gt;Muhammad Yunus&lt;/a&gt; founded &lt;a href="http://en.wikipedia.org/wiki/Grameen_Bank"&gt;Grameen Bank&lt;/a&gt; to make very small loans to the poor.  The initial round of loans averaged around $0.50 apiece.   His position was that the least qualified should be given priority for loans.  A woman who claimed she didn't know how to handle money because she'd never even touched it was their prime loan candidate, according to Yunus.  The bank has grown to 2,100 branches, nearly 25,000 employees, and 7.4 million borrowers.  For his trouble Yunus and the bank were awarded the Nobel Prize in 2006.
&lt;/p&gt;&lt;p&gt;
My favorite anecdote from listening to the podcast of &lt;a href="http://www.commonwealthclub.org/archive/08/08-01yunus-audio.html"&gt;Yunus' address to the Commonwealth Club&lt;/a&gt; involved his work with Dannon.  The giant yogurt company wanted to work with him to produce an inexpensive, nutritional-supplement yogurt.  He said they needed to find a way to package the yogurt that was biodegradable, instead of using plastic.  Dannon searched far and wide and returned with plans to use a corn starch substance for the container.  Yunus asked if the container could be eaten.  They said no.  He said it was no good to sell the poor something they couldn't eat.  "When I buy ice cream, I can eat the package it comes in," he said.&lt;/p&gt;
I hadn't thought of a cone quite that way before.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-7597003555829442593?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/7597003555829442593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=7597003555829442593' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/7597003555829442593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/7597003555829442593'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/02/inversion.html' title='Inversion'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-4894542493629057934</id><published>2008-01-28T22:40:00.000-07:00</published><updated>2008-01-28T23:06:06.107-07:00</updated><title type='text'>Not even your two cents?</title><content type='html'>I find it oddly ironic that all of the blogspot.com blogs I could find which have names related to the phrase "in my opinion" seem to be effectively abandoned after at most three posts.
&lt;p&gt;
These inclue:
&lt;ul&gt;&lt;li&gt;inmy&lt;/li&gt;&lt;li&gt;inmyopinion&lt;/li&gt;&lt;li&gt;inmyhumbleopinion&lt;/li&gt;&lt;li&gt;imho&lt;/li&gt;&lt;li&gt;justmyopinion&lt;/li&gt;&lt;li&gt;justmyhumbleopinion&lt;/li&gt;&lt;li&gt;jmho&lt;/li&gt;&lt;li&gt;youropinionplease&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Many of these have no posts.  Do you suppose this sample is reflective of the overall rate of abandonment at blogspot or is starting a blog explicitly about one's opinions a recipe for having none?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-4894542493629057934?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/4894542493629057934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=4894542493629057934' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4894542493629057934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4894542493629057934'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/01/not-even-your-two-cents.html' title='Not even your two cents?'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-8429240922710620205</id><published>2008-01-19T21:55:00.000-07:00</published><updated>2008-01-19T22:15:09.644-07:00</updated><title type='text'>Who Won?</title><content type='html'>Go look at the headlines tonight.  They proclaim that on the Democratic side Clinton won &lt;a href="http://www.cnn.com/ELECTION/2008/primaries/results/state/#NV"&gt;Nevada&lt;/a&gt;.  Look a little closer.  You'll see Clinton won the count of state delegates with better than 50%.  Unfortunately, Presidential candidates are not nominated based on the count of state delegates; they're nominated based on the number of delegates to the national convention.  By that metric Obama got 13 and Clinton received 12.  Who won?   Who won the &lt;a href="http://en.wikipedia.org/wiki/U.S._presidential_election,_2000"&gt;2000 Presidential election&lt;/a&gt;?  It wasn't the candidate who received the most votes.
&lt;p&gt;
On the Republican ballot in &lt;a href="http://www.cnn.com/ELECTION/2008/primaries/results/state/#SC"&gt;South Carolina&lt;/a&gt;, the media declares it a close contest with McCain garnering 33% of the vote and Huckabee 30%.  However, on the metric that actually matters, convention delegates, McCain got 19 delegates and Huckabee only 5.  What appears at first to be a 10% difference is nearly a 300% difference.
&lt;p&gt;
Yes, it's easy to snipe at the media.  Yes, I'm going to do it anyway. 
&lt;p&gt;
Journalists: lazily reporting elections for at least &lt;a href="http://en.wikipedia.org/wiki/Dewey_Defeats_Truman"&gt;half a century&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-8429240922710620205?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/8429240922710620205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=8429240922710620205' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/8429240922710620205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/8429240922710620205'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2008/01/who-won.html' title='Who Won?'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-456929025510211286</id><published>2007-12-28T12:50:00.000-07:00</published><updated>2007-12-28T14:09:38.578-07:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;"We would like to return to work with our writers. If we cannot, we would like to express our ambivalence, but without our writers we are unable to express something as nuanced as ambivalence."&lt;/blockquote&gt;Steven Colbert and John Stuart &lt;a href="http://www.cnn.com/2007/SHOWBIZ/TV/12/21/writers.strike.ap/index.html"&gt;announced&lt;/a&gt; that their shows would be returning to production without their striking writers.  What pained me was CNN reporting that statement as if it was just another press release, not as the punchline it was.  Then again, I suppose that's why the reporters are at CNN, not Comedy Central.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-456929025510211286?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/456929025510211286/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=456929025510211286' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/456929025510211286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/456929025510211286'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2007/12/quote-o-day.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-7227448825895172433</id><published>2007-12-28T10:17:00.000-07:00</published><updated>2007-12-28T11:55:51.737-07:00</updated><title type='text'>Math Works...Sometimes</title><content type='html'>Driving back from my hometown with my wife and daughter on Christmas Eve, the Prius started reporting that it was low on gas.  I wasn't too worried about it because I knew that the Prius has a 10 gallon gas tank and the car was reporting that it was getting about 45 miles per gallon since I'd filled up.  That should've meant that I could go 450 miles on that tank of gas.  I knew that I only needed to travel a total of 415 miles to get home.  My wife trusted me and we made it home safely to dream of sugar plums.&lt;p/&gt;
We stayed home on Christmas and the following day.&lt;p/&gt;
By the 27th, we needed to go out for groceries.  It was basically 10 miles to the store we needed to go to.  No problem: the math says that we should have another 35 miles on that tank of gas.  We headed out on the interstate and a few miles in ran out of gas, which was a first for me in any vehicle.&lt;p/&gt;
The 2004-2008 Prius has a &lt;a href="http://www.vfaq.net/FAQ-fuel.html#bladder"&gt;bladder&lt;/a&gt; in its fuel tank to reduce evaporative fuel loss.  In cold weather, it's &lt;a href="http://www.vfaq.net/FAQ-fuel.html#guessgauge"&gt;reported&lt;/a&gt; to allow less than a full 10-gallon fill.&lt;p/&gt;
Thankfully, one of our friends was just returning from the store.  We called them when they were about 2 miles from us headed the other direction on the interstate.  I ran across traffic, jumped in with them, got a ride home, grabbed the lawn mower's gas can, and drove our other car off to the rescue.&lt;p/&gt;
To my wife's enduring credit, she did not make fun of me and my misplaced faith in math.  All of her laughter was directed at the irony of situation.  Moments before the car dropped out of cruise control and started flashing lights at us, I had said, "I'm pretty sure there's one more notch to go on the gas gauge."&lt;p/&gt;
I'm extremely thankful that we ran out when we did.  Had we run out a few miles earlier, we would've been stranded on the interstate on very nasty roads on Christmas Eve.  She may not have been so kind.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-7227448825895172433?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/7227448825895172433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=7227448825895172433' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/7227448825895172433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/7227448825895172433'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2007/12/math-workssometimes.html' title='Math Works...Sometimes'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-5031413108611830365</id><published>2007-11-13T13:52:00.000-07:00</published><updated>2007-11-13T14:07:13.785-07:00</updated><title type='text'>Under Reported News: Chinese Submarine Stumbles into US Naval Exercise</title><content type='html'>I've seen very few US news sources reporting &lt;a href="http://www.dailymail.co.uk/pages/live/articles/news/worldnews.html?in_article_id=492804&amp;in_page_id=1811"&gt;this story&lt;/a&gt;.  A Chinese submarine surfaced within shooting distance of a US aircraft carrier during a naval exercise.  Chinese officials "dismissed the affair as coincidence."

&lt;blockquote&gt;
The lone Chinese vessel slipped past at least a dozen other American warships which were supposed to protect the carrier from hostile aircraft or submarines.&lt;P&gt;
The incident, which took place in the ocean between southern Japan and Taiwan, is a major embarrassment for the Pentagon.&lt;P&gt;
Analysts believe Beijing was sending a message to America and the West demonstrating its rapidly-growing military capability to threaten foreign powers which try to interfere in its "backyard".
&lt;/blockquote&gt;

Go ahead, &lt;a href="http://news.google.com/news?q=chinese%20submarine%20exercise"&gt;search&lt;/a&gt; for this story.  I get 11 hits, many of which aren't about this incident.  Yeah, this sounds way less important than a has-been &lt;a href="http://news.google.com/news?ie=UTF-8&amp;q=spears+red+light&amp;btnG=Search"&gt;pop star running a red light&lt;/a&gt;, which gets hundreds of hits.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-5031413108611830365?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/5031413108611830365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=5031413108611830365' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/5031413108611830365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/5031413108611830365'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2007/11/under-reported-news-chinese-submarine.html' title='Under Reported News: Chinese Submarine Stumbles into US Naval Exercise'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-3395581591335974834</id><published>2007-11-10T21:21:00.000-07:00</published><updated>2007-11-10T23:37:46.788-07:00</updated><title type='text'>Experimenting with Gravity</title><content type='html'>One of our neighbors let me shoot pictures of their baby.  Here she is experimenting with gravity.  &lt;a href="http://picasaweb.google.com/leifwickland/Gravity/photo#5131433289350313314"&gt;&lt;img src="http://lh4.google.com/leifwickland/RzaDY6BW9WI/AAAAAAAAAbg/5lTstNR9HQM/s800/dsc_1417.jpg" /&gt;&lt;/a&gt;&lt;p/&gt;
Of course the shot was serendipity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-3395581591335974834?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/3395581591335974834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=3395581591335974834' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3395581591335974834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3395581591335974834'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2007/11/experimenting-with-gravity.html' title='Experimenting with Gravity'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-3287760324221495372</id><published>2007-11-03T14:39:00.000-06:00</published><updated>2007-11-03T16:49:30.526-06:00</updated><title type='text'>The FDIC shut down my bank and all I got was my lousy money</title><content type='html'>I have been a NetBank customer for a long time.  I've been very happy with the it.  I'd heard scattered reports that NetBank wasn't doing so well, but I wasn't worried about it.  I mean, really, what's the worst that could happen to my bank?  Besides, it would've been an enormous hassle to find a better bank and then set up all the cool automated bill payment and bill presentment stuff I had at NetBank.
&lt;p&gt;
Imagine my shock then when I tried to log into NetBank about a month ago and was abruptly greeted by a &lt;a href="http://www.ingdirect.com/netbank/"&gt;notice&lt;/a&gt; that NetBank had been shut down by &lt;a href="http://en.wikipedia.org/wiki/Office_of_Thrift_Supervision"&gt;OTS&lt;/a&gt;.  (Alright, so the title is misleading.  It's not actually the FDIC that shuts down banks.  They only provide the insurance.  But then again, nobody knows who OTS is.)  &lt;a href="http://ingdirect.com"&gt;ING Direct&lt;/a&gt; was taking over the FDIC covered deposits.  My money was suddenly frozen.  I felt like a nasty third world dictator against whom the US decided to take tough action.  Weird.
&lt;p&gt;
All turned out well.  Of course, all of my money was covered under the $100,000 limit.  I was liquid again in a few days.  The freeze happened smack in the middle of my house, car, power, and credit card bills being due.  All of them were paid without a hitch.  It's really sort of remarkable.  It's easy to think of government regulation being more trouble than it's worth.  This was certainly a case where I was thankful for government regulation and the oversight it provided.
&lt;p&gt;
Apparently, I can now say that I'm a victim of the subprime lending crisis.  NetBank's undoing was the &lt;a href="http://www.ots.treas.gov/docs/7/777071.html"&gt;result&lt;/a&gt; of "payment defaults on loans sold, weak underwriting, poor documentation, a lack of proper controls, and failed business strategies."  Sure, it's a pain to find and set up a bank with checking services as good as NetBank's, but I sure am thankful I got back my lousy money.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-3287760324221495372?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/3287760324221495372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=3287760324221495372' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3287760324221495372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/3287760324221495372'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2007/11/fdic-shut-down-my-bank-and-all-i-got.html' title='The FDIC shut down my bank and all I got was my lousy money'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-432704380582596649</id><published>2007-10-06T10:54:00.000-06:00</published><updated>2007-10-06T10:56:12.195-06:00</updated><title type='text'>In case you missed it</title><content type='html'>Researchers believe they've sussed out the &lt;a href="http://www.cnn.com/2007/HEALTH/10/05/appendix.purpose.ap/index.html"&gt;purpose of the appendix&lt;/a&gt;.  Essentially, it's a reserve of yogurt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-432704380582596649?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/432704380582596649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=432704380582596649' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/432704380582596649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/432704380582596649'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2007/10/in-case-you-missed-it.html' title='In case you missed it'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-2634651777097338034</id><published>2007-09-23T22:29:00.000-06:00</published><updated>2007-09-24T15:40:48.933-06:00</updated><title type='text'>What's the difference: hail vs. sleet</title><content type='html'>We were hiking today and the weather turned nasty.  We were set upon by frozen precipitation.  We desired to name our oppressor, but we unsure of the proper nomenclature.  Upon returning home, I looked up &lt;span style="font-style:italic;"&gt;&lt;a href="http://dictionary.reference.com/search?q=hail"&gt;hail&lt;/a&gt;&lt;/span&gt; and &lt;span style="font-style:italic;"&gt;&lt;a href="http://dictionary.reference.com/search?q=sleet"&gt;sleet&lt;/a&gt;&lt;/span&gt;.  According to the good folks who catalog our lexicon, the only difference between hail and sleet is in size.  The former includes globular frozen precipitation larger than 5mm in diameter; the latter is 5mm and smaller.
&lt;p&gt;
We were oppressed by sleet today.  Let me tell you, every one of those 5 millimeters hurt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-2634651777097338034?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/2634651777097338034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=2634651777097338034' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2634651777097338034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/2634651777097338034'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2007/09/whats-difference-hail-vs-sleet.html' title='What&apos;s the difference: hail vs. sleet'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-8954118933775056374</id><published>2007-08-07T22:51:00.000-06:00</published><updated>2008-12-09T06:56:51.063-07:00</updated><title type='text'>The Fly on My Desk</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mnjY4i4rmCg/RrlOkzikLHI/AAAAAAAAAB0/RWRLn8nYfl0/s1600-h/dsc_1231.resized.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_mnjY4i4rmCg/RrlOkzikLHI/AAAAAAAAAB0/RWRLn8nYfl0/s400/dsc_1231.resized.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5096190847563869298" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_mnjY4i4rmCg/RrlNITikLGI/AAAAAAAAABs/aHGgrKdkdZE/s1600-h/dsc_1211.resized.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_mnjY4i4rmCg/RrlNITikLGI/AAAAAAAAABs/aHGgrKdkdZE/s400/dsc_1211.resized.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5096189258425969762" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_mnjY4i4rmCg/RrlMPDikLFI/AAAAAAAAABk/Y24K4k_Yn4g/s1600-h/dsc_1207.resized.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_mnjY4i4rmCg/RrlMPDikLFI/AAAAAAAAABk/Y24K4k_Yn4g/s400/dsc_1207.resized.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5096188274878458962" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mnjY4i4rmCg/RrlMGzikLEI/AAAAAAAAABc/Ev9VnHjIKNI/s1600-h/dsc_1214.resized.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_mnjY4i4rmCg/RrlMGzikLEI/AAAAAAAAABc/Ev9VnHjIKNI/s400/dsc_1214.resized.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5096188133144538178" /&gt;&lt;/a&gt;
It turns out that a housefly will go around licking the stuff that sticks to your keyboard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-8954118933775056374?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/8954118933775056374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=8954118933775056374' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/8954118933775056374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/8954118933775056374'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2007/08/fly-on-my-desk.html' title='The Fly on My Desk'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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://3.bp.blogspot.com/_mnjY4i4rmCg/RrlOkzikLHI/AAAAAAAAAB0/RWRLn8nYfl0/s72-c/dsc_1231.resized.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8499998.post-4624499928390266878</id><published>2007-08-05T12:08:00.001-06:00</published><updated>2008-12-09T06:56:51.255-07:00</updated><title type='text'>Playing with depth of field</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_mnjY4i4rmCg/RrYSJDikLDI/AAAAAAAAABU/Qa8oaDIgY78/s1600-h/dsc_0373.resized.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_mnjY4i4rmCg/RrYSJDikLDI/AAAAAAAAABU/Qa8oaDIgY78/s400/dsc_0373.resized.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5095279975194700850" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-4624499928390266878?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/4624499928390266878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=4624499928390266878' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4624499928390266878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/4624499928390266878'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2007/08/playing-with-depth-of-field.html' title='Playing with depth of field'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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/_mnjY4i4rmCg/RrYSJDikLDI/AAAAAAAAABU/Qa8oaDIgY78/s72-c/dsc_0373.resized.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8499998.post-6529624705299448031</id><published>2007-06-29T00:00:00.000-06:00</published><updated>2007-06-29T00:05:32.660-06:00</updated><title type='text'>Quote o' the Night</title><content type='html'>We saw &lt;span style="font-style:italic;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Heartbreak_House"&gt;Heartbreak House&lt;/a&gt;&lt;/span&gt; by George Bernard Shaw tonight.  Wow.  I had no idea he was so good.  The quote of the night:

&lt;blockquote&gt;Give me deeper darkness. Money is not made in the light.&lt;/blockquote&gt;

That pretty much sums up how I feed about the ideal office place.  Blinds drawn?  Check.  Lights off?  Check.  Computer monitor the brightest point in room?  Check.  

Totally reinterpreting another era's social commentary for my own purposes?  Check.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-6529624705299448031?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/6529624705299448031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=6529624705299448031' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/6529624705299448031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/6529624705299448031'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2007/06/quote-o-night.html' title='Quote o&apos; the Night'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-664560337231979593</id><published>2007-06-05T20:51:00.000-06:00</published><updated>2007-06-05T22:04:13.725-06:00</updated><title type='text'>Write State Leaders About Montana's 529</title><content type='html'>&lt;p&gt;
Perhaps you saw my post about the &lt;a href="http://leifw.blogspot.com/2007/05/bum-deal.html"&gt;woes of Montana's 529 plan&lt;/a&gt;.  Would you be willing to consider writing state officials to let them know how you feel?
&lt;/p&gt;&lt;p&gt;
Here's a sample letter that you can use.
&lt;/p&gt;
&lt;blockquote&gt;Dear &lt;span style="font-style: italic;"&gt;[State Official]&lt;/span&gt;,
&lt;p&gt;
Montana has a 529 educational savings plan to help our families save for college.  Unfortunately, a recent report by SavingForCollege.com found Montana's plan has the highest fees in the country.  These fees add up in a major way, nearing $20,000 when saving enough for an MSU-Bozeman education.  It's hard enough to save for our children's educations without being hindered by one of the most expensive plans in the country.
&lt;/p&gt;&lt;p&gt;
Please encourage the Board of Regents to investigate why their plan has the highest fees in the country.
&lt;/p&gt;&lt;p&gt;
Currently contributions to Montana's 529 plan are deductible from state taxes. Please also consider supporting legislation to extend that tax benefit to contributions to any 529.
&lt;/p&gt;&lt;p&gt;
Finally, please consider how we can keep the Board of Regents accountable in the future.  Perhaps mandatory periodic reports comparing the fees and performance of Montana's plan to other plans are appropriate.
&lt;/p&gt;&lt;p&gt;
See http://montana529.info for more.
&lt;/p&gt;&lt;p&gt;
Thank you for considering this matter.
&lt;/p&gt;&lt;p&gt;
Sincerely,
&lt;/p&gt;&lt;p&gt;
&lt;span style="font-style: italic;"&gt;
[Your Name]&lt;br/&gt;
[Your Address]&lt;br/&gt;
[Your City, State  ZIP]&lt;br/&gt;&lt;/span&gt;
&lt;/blockquote&gt;
&lt;/p&gt;&lt;p&gt;
To write to the governor, please use &lt;a href="http://governor.mt.gov/contact/commentform.asp"&gt;this form&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;
The email addresses of the regents are listed on &lt;a href="http://mus.edu/board/BORmembers.asp"&gt;this page&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;
To find email addresses for your state legislators, please use &lt;a href="http://www.vote-smart.org/index.htm"&gt;Project Vote Smart&lt;/a&gt;.  On the left side of the page, you'll find a box to enter your zip code.  Provided that they'll give contact information for your legislators and a bunch of other folks.
&lt;/p&gt;&lt;p&gt;
Thanks for thinking about writing.  If you do, feel free to post a comment saying you did.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-664560337231979593?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/664560337231979593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=664560337231979593' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/664560337231979593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/664560337231979593'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2007/06/write-state-leaders-about-montanas-529.html' title='Write State Leaders About Montana&apos;s 529'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-8338328414134248575</id><published>2007-05-29T20:53:00.000-06:00</published><updated>2007-06-05T22:06:20.198-06:00</updated><title type='text'>A Bum Deal</title><content type='html'>Montana's families are getting a bum deal.
&lt;p&gt;
A &lt;a href="http://en.wikipedia.org/wiki/529_plan"&gt;529 plan&lt;/a&gt; is a college savings account that has a number of &lt;a href="http://www.johnhancockfreedom529.com/public/page/?pageid=64"&gt;tax advantages&lt;/a&gt;. Most significantly, earnings are untaxed if used for college education.  In Montana, another benefit is that contributions to the state's plan are deductible from income taxes.  Unfortunately, Montana's plan† suffers from fees so high as to more than offset the benefits.
&lt;/p&gt;&lt;p&gt;
A deduction against Montana income tax is worth at most 5.175%‡. The Montana plan charges a 5.5% fee* against each contribution, a larger percentage than the value of the deduction. Compare that to &lt;a href="https://flagship.vanguard.com/VGApp/hnw/accounttypes/college/ATS529CollegeOVContent.jsp"&gt;Vanguard's 529 plan&lt;/a&gt; which charges &lt;a href="https://flagship.vanguard.com/VGApp/hnw/FundsFeesMinimums?FundId=4511&amp;amp;FundIntExt=INT"&gt;no sales fee&lt;/a&gt;. If you contributed $1,000 to each plan, the Vanguard plan would have a $1,000 balance, while the Montana plan would have a balance less than the original contribution, even if you also contributed your tax deduction.  Sadly, the state is offering a tax break to encourage families to act against their best interest.
&lt;/p&gt;&lt;p&gt;
The Montana plan is also a bum deal in subsequent years. Mutual funds make money by charging a percentage of an account's balance each year. This percentage is called the fund's &lt;a href="http://en.wikipedia.org/wiki/Mutual_fund_fees_and_expenses#Expense_ratio"&gt;expense ratio&lt;/a&gt;. The funds in Montana's plan have ratios ranging from 1.18% to 1.44%*. The funds in Vanguard's plan have ratios ranging from &lt;a href="https://flagship.vanguard.com/VGApp/hnw/Funds529ByName?View=EF"&gt;0.5% to 0.7%&lt;/a&gt;, less than half that of Montana's funds.
&lt;/p&gt;&lt;p&gt;
To flesh out this comparison, I've published a &lt;a href="http://spreadsheets.google.com/pub?key=p3q4PU-uH7fx2LZ-brFFVcA"&gt;spreadsheet&lt;/a&gt; comparing the growth of a moderate risk fund from each plan. Despite the income tax deduction advantage Montana's plan enjoys, it has a lower balance in every year compared to the Vanguard plan. By the child's 18th birthday, Montana's plan has fallen nearly $20,000 behind. The difference is entirely due to the plan's excessively high fees.  For each 1% of Montana's population that uses the Montana-529 plan,
an out-of-state corporation earns nearly one million dollars in unnecessarily high fees.
&lt;/p&gt;&lt;p&gt;
Should we feel some fealty toward the plan because it is Montana's? Absolutely not. The plan is operated by a California company with &lt;a href="http://www.pacificlife.com/Resource/Contact+Us/Office+Location+and+Driving+Directions.htm"&gt;no offices in Montana&lt;/a&gt;. The state's government has essentially licensed Montana's good name to this company in exchange for a bad deal for its citizens.&lt;/p&gt;&lt;p&gt;I'm not the only one who's noticed the deficiencies of Montana's 529 plan. SavingForCollege.com published a report showing that Montana's plan had &lt;a href="http://www.savingforcollege.com/529_fee_study/"&gt;the highest fees&lt;/a&gt; in the country, fees that were usually double, if not triple, those of other states' plans. &lt;a href="http://www.savingforcollege.com/529_plan_details/index.php?page=plan_details&amp;amp;plan_id=135"&gt;Arizona dropped Pacific Life's plan&lt;/a&gt; last year in favor of plans with lower fees.  Montana is now the only state using that company's funds. &lt;font class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;SmartMoney&lt;/font&gt; &lt;a href="http://www.smartmoney.com/college/investing/index.cfm?story=5292004"&gt;singled out Montana's plan&lt;/a&gt; for having high fees. &lt;a href="http://quicktake.morningstar.com/529/overview.asp?PlanSymbol=5PUSA0001V"&gt;&lt;font class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;Morningstar&lt;/font&gt;&lt;/a&gt; also mentions the plan's high fees and that parents of relatively young children are better off going to another plan.  &lt;/p&gt;&lt;p&gt;
Clearly something should be done. I propose three changes.
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Montana should either find a new 529 plan with lower fees or should require Pacific Life to lower its sales load and expense ratios. We should fix what's broken.
&lt;/li&gt;&lt;li&gt;Montana should offer an income tax deduction for contributions to any 529 plan, not just the state's own. We should not use tax breaks to entice Montanans to settle for a bad deal. We should reward Montanans for saving for college even if our plan remains uncompetitive and they're forced to look elsewhere.
&lt;/li&gt;&lt;li&gt;We should prevent Montana from slipping into this situation again.  The legislature should order periodic reports of the competitiveness of our 529.  The &lt;a href="http://mus.edu/board/BORinfo.asp"&gt;Board of Regents&lt;/a&gt;, the government body &lt;a href="http://mus.edu/borpol/bor900/950-2.pdf"&gt;responsible&lt;/a&gt; for the plan, has been negligent.  Which of the &lt;a href="http://mus.edu/board/BORmembers.asp"&gt;Regents&lt;/a&gt; knows that their fund has the highest fees in the county? Hopefully, periodically shining a light on this dark, dusty corner of its duties will make the Board more mindful.
&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;&lt;/p&gt;
Please contact your state &lt;a href="http://nris.mt.gov/gis/legislat/2007/"&gt;legislators&lt;/a&gt; and the &lt;a href="http://governor.mt.gov/contact/commentform.asp"&gt;governor&lt;/a&gt; and complain about this sorry state of affairs for Montana's families.  You can find a sample letter and contact information &lt;a href="http://leifw.blogspot.com/2007/06/write-state-leaders-about-montanas-529.html"&gt;here&lt;/a&gt;.
&lt;p&gt;
&lt;font style="font-weight: bold;"&gt;Footnotes:&lt;/font&gt;
&lt;/p&gt;&lt;p&gt;
&lt;a name="bd-fn-1"&gt;†&lt;/a&gt; There are actually two 529 plans offered by Montana. The plan I'll refer to throughout is &lt;a href="http://www.collegesavings.pacificlife.com/"&gt;the Pacific Life plan&lt;/a&gt;. The &lt;a href="http://montana.collegesavings.com/"&gt;other plan&lt;/a&gt; is offered by College Savings Bank. That plan only offers stable-value investments, such as &lt;font class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;CDs&lt;/font&gt;. These investments &lt;a href="http://montana.collegesavings.com/images/online_chart.gif"&gt;yield less than the rate of college inflation&lt;/a&gt;. An investment in these options is essentially a money losing venture, as the purchasing power of the funds will be less at the time they're needed than at the time they were invested. Consequently, I consider plans like Pacific Life's, which invest in stocks and bonds, which can achieve average returns above the &lt;a href="http://www.finaid.org/savings/tuition-inflation.phtml"&gt;roughly 6% college inflation&lt;/a&gt; rate, the only option. Within the Pacific Life plan, three classes of shares can be purchased. I'm only considering the class A shares, as they're the best long term investment.
&lt;/p&gt;&lt;p&gt;
&lt;a name="bd-fn-2"&gt;‡&lt;/a&gt; The highest personal income tax rate in Montana is 6.9%. Any amount deducted from state taxes is taxed by the federal government. If a taxpayer qualifies for the 6.9% Montana bracket, then he will pay at least 25% in federal taxes. The net value of the state tax deduction is calculated by: (deductible amount) * (state rate) * (1-federal rate), or 6.9% * 75% = 5.175%. See this &lt;a href="http://www.archimedes.com/vanguard/stdc.phtml"&gt;tax deduction calculator&lt;/a&gt; for a better explanation.
&lt;/p&gt;&lt;p&gt;
&lt;a name="bd-fn-3"&gt;*&lt;/a&gt; Please see the &lt;a href="http://www.collegesavings.pacificlife.com/public/mutual_funds/prospectuses/pf/plf_prospectus_abcr_20070101.pdf"&gt;Pacific Life 529 Prospectus&lt;/a&gt; pages 21 through 23.&lt;/p&gt;
&lt;img src="http://c26.statcounter.com/counter.php?sc_project=2615507&amp;java=0&amp;amp;security=84da78b1&amp;amp;invisible=0" alt="blog counter" border="0"&gt;&lt;img src="http://wickland.net/webbug.gif" height="1" width="1"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-8338328414134248575?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/8338328414134248575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=8338328414134248575' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/8338328414134248575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/8338328414134248575'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2007/05/bum-deal.html' title='A Bum Deal'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-5427929516910275271</id><published>2007-05-26T13:28:00.000-06:00</published><updated>2007-05-29T22:47:11.957-06:00</updated><title type='text'>Random Linkage</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.neatorama.com/2007/05/21/the-strangest-disaster-of-the-20th-century/"&gt;The strangest disaster of the 20th century.&lt;/a&gt;  Absolutely fascinating.&lt;/li&gt;&lt;li&gt;&lt;a href="http://illusioncontest.neuralcorrelate.com/index.php?module=pagemaster&amp;PAGE_user_op=view_page&amp;amp;PAGE_id=109&amp;amp;MMN_position=45:45"&gt;Winning entries from a recent optical illusion contest.&lt;/a&gt;  The gradients and the twin towers of Pisa are my favorites.&lt;a href="http://www.neatorama.com/2007/05/25/a-bicycle-eaten-by-a-tree/"&gt;
&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.neatorama.com/2007/05/25/a-bicycle-eaten-by-a-tree/"&gt;What do you get when you cross a bike with a tree?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;High school students who fail standardized tests aren't allowed to graduate.  They picket.  Carefully &lt;a href="http://www.wfaa.com/sharedcontent/dws/wfaa/latestnews/stories/wfaa070524_wz_taksprotest.6fe879b.html"&gt;read the sign&lt;/a&gt; one carries.  Weep.
&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/8499998-5427929516910275271?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/5427929516910275271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=5427929516910275271' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/5427929516910275271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/5427929516910275271'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2007/05/random-linkage.html' title='Random Linkage'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-6267671826217692164</id><published>2007-05-08T21:46:00.000-06:00</published><updated>2007-05-08T22:08:03.301-06:00</updated><title type='text'>Oh, Silly Utah</title><content type='html'>Recently I've noticed that the good folks in Utah are acting a little silly.&lt;p&gt;

&lt;span style="font-weight: bold;"&gt;Exhibit A&lt;/span&gt;: The Utah GOP recently &lt;a href="http://www.sltrib.com/ci_5778186"&gt;debated&lt;/a&gt; whether Satan was behind illegal immigration.  Turns out there was support for causation, there just wasn't a quorum.&lt;p&gt;

&lt;span style="font-weight: bold;"&gt;Exhibit B&lt;/span&gt;: A man driving a dark red car had his &lt;a href="http://www.newsvine.com/_news/2007/03/17/619568-merlot-a-no-no-on-utah-license-plate"&gt;license plate revoked&lt;/a&gt;.  It read "merlot."&lt;p&gt;

&lt;span style="font-weight: bold;"&gt;Exhibit C&lt;/span&gt;: A while back Utah created the equivalent of a do-not-call registry for children's email addresses.  Other entities, including the &lt;a href="http://www.pianet.com/IssuesOfFocus/OngoingIssues/privacy/privacy-6-15-04.htm"&gt;FCC&lt;/a&gt;, have considered and rejected such proposals as being untenable and ineffective.  Undeterred, Utah created the list, forecasting that they'd generate millions of dollars in revenue.   Instead, they've &lt;a href="http://it.slashdot.org/article.pl?sid=07/05/06/1735225&amp;from=rss"&gt;reported a net loss&lt;/a&gt;.&lt;p&gt;

&lt;span style="font-weight: bold;"&gt;Exhibit D&lt;/span&gt;: So you want to sell a &lt;a href="http://arstechnica.com/news.ars/post/20070507-record-shops-used-cds-ihre-papieren-bitte.html"&gt;used CD in Utah&lt;/a&gt; (or Florida)?  I'm going to need to see some ID.  And get some finger prints.  Oh, and you'll have to endure a waiting period.  You'll never believe that the record industry, which has seen declining sales recently, would lobby for legislation to make it more inconvenient to sell used CDs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-6267671826217692164?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/6267671826217692164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=6267671826217692164' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/6267671826217692164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/6267671826217692164'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2007/05/oh-silly-utah.html' title='Oh, Silly Utah'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-7213706195924776173</id><published>2007-05-08T21:37:00.000-06:00</published><updated>2007-05-08T22:30:40.715-06:00</updated><title type='text'>Roomba</title><content type='html'>We bought a &lt;a href="http://store.irobot.com/product/index.jsp?productId=2172857"&gt;Roomba&lt;/a&gt; in the recent &lt;a href="http://woot.com/"&gt;Woot-Off&lt;/a&gt;.  It's great.  For $145, we have a vacuum that we use much more often than our much more expensive, but not that much more capable, Kirby.   It's great for cleaning up the mess that our infant daughter invariably creates when she eats.   Speaking of our daughter, she was terrified of the Roomba at first, but now she's on "only fleeing from it when it comes directly toward her" terms with it.   Otherwise, she happily pats it as it goes past her.
&lt;p&gt;
My only complaint about my Roomba is that it won't clean the rug in the center of our living room, which it detects as a drop off due to its dark color. &lt;span class="on down" style="display: block;" id="formatbar_CreateLink" title="Link" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-7213706195924776173?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/7213706195924776173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=7213706195924776173' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/7213706195924776173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/7213706195924776173'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2007/05/roomba.html' title='Roomba'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-116780118301803075</id><published>2007-01-02T21:57:00.000-07:00</published><updated>2007-01-02T22:13:03.030-07:00</updated><title type='text'>Quote o' the Day</title><content type='html'>In a recent episode of Discovery Channel's &lt;span style="font-style:italic;"&gt;&lt;a href="http://discovery.com/dirtyjobs"&gt;Dirty Jobs&lt;/a&gt;&lt;/span&gt;, host Mike Rowe assisted the "snake lady", a herpetologist who collects and studies the endangered &lt;a href="http://www.oplin.org/snake/fact%20pages/water_snake_lake_erie/water_snake_lake_erie.html"&gt;Lake Erie Water Snake&lt;/a&gt;.  The episode was quite outstanding, as an untrained TV personality wrangled 5 foot long snakes out from under rocks.  Naturally, he was bitten repeatedly, causing him to bleed profusely and drop to his knees wincing in pain.  Fortunately, the snakes weren't poisonous, but his fear and discomfort were quite real with him saying that he wanted to quit  early in the day, a first as far as I know.
&lt;p&gt;
In the show's outtakes, which played as the credits rolled, the following exchange played out:
&lt;blockquote&gt;
&lt;span style="font-weight:bold;"&gt;Rowe:&lt;/span&gt; I have a stupid question.&lt;p&gt;
&lt;span style="font-weight:bold;"&gt;Snake Lady:&lt;/span&gt; There are no stupid questions.&lt;p&gt;
&lt;span style="font-weight:bold;"&gt;Rowe:&lt;/span&gt; I have a book of stupid questions.&lt;p&gt;
&lt;span style="font-weight:bold;"&gt;Snake Lady:&lt;/span&gt; &lt;span style="font-style:italic;"&gt;(Sweetly.)&lt;/span&gt; What's that: your diary?
&lt;/blockquote&gt;
&lt;p&gt;
Ouch.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-116780118301803075?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/116780118301803075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=116780118301803075' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116780118301803075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116780118301803075'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2007/01/quote-o-day.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-116468695931726875</id><published>2006-11-27T20:16:00.000-07:00</published><updated>2006-11-27T21:44:51.866-07:00</updated><title type='text'>Quotes o' the Day</title><content type='html'>&lt;blockquote&gt;
&lt;em&gt;unnecessary risk upon the [NSTA] capital campaign, especially certain targeted supporters.&lt;/em&gt;&lt;/blockquote&gt;
Excerpt from a National Science Teachers Association letter rejecting a donation of 50,000 copies of &lt;span style="font-style:italic;"&gt;An Inconvenient Truth&lt;/span&gt; due to the displeasure acceptance of the gift would cause donors to the organization, such as Exxon Mobil, according to the &lt;a href="http://www.washingtonpost.com/wp-dyn/content/article/2006/11/24/AR2006112400789_pf.html"&gt;Washington Post&lt;/a&gt;.
&lt;p&gt;&lt;hr&gt;&lt;p&gt;
&lt;blockquote&gt;
&lt;em&gt;I've spent a week setting this thing up and using it, and the overall experience is about as pleasant as having an airbag deploy in your face.&lt;/em&gt;&lt;/blockquote&gt;
From a &lt;a href="http://www.suntimes.com/technology/ihnatko/147048,CST-FIN-Andy23.article"&gt;review of Microsoft's Zune&lt;/a&gt; by the Chicago Sun-Times.
&lt;p&gt;&lt;hr&gt;&lt;p&gt;
&lt;blockquote&gt;
&lt;em&gt;Cattle die, kindred die,&lt;br&gt;
Every man is mortal:&lt;br&gt;
But the good name never dies&lt;br&gt;
Of one who has done well.&lt;br&gt;&lt;/em&gt;&lt;/blockquote&gt;
To &lt;a href="http://daviddfriedman.blogspot.com/2006/11/mf.html"&gt;commemorate&lt;/a&gt; his recently passed father, Milton, David Friedman, a blogger and also a libertarian economist, quoted the &lt;a href="http://en.wikipedia.org/wiki/H%C3%A1vam%C3%A1l"&gt;Hávamál&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-116468695931726875?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/116468695931726875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=116468695931726875' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116468695931726875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116468695931726875'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2006/11/quotes-o-day.html' title='Quotes o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-116397557163378840</id><published>2006-11-19T15:20:00.000-07:00</published><updated>2006-11-19T15:38:19.856-07:00</updated><title type='text'>A Geek's Delight</title><content type='html'>I'm not so good at the word puzzles featured on NPR Weekend Edition Sunday's &lt;i&gt;Sunday Puzzle&lt;/i&gt; segment.  I think I've determined the answer about 4 times, including &lt;a href="http://www.npr.org/templates/story/story.php?storyId=6507508"&gt;this week's puzzle&lt;/a&gt;.
&lt;blockquote&gt;
Name a well-known American city, with 12 letters in its name, containing the letters of THANKS in left to right order, not necessarily consecutively.  A hint: This is a city of more than 100,000 people.
&lt;/blockquote&gt;
This challenge was great for a geek.
&lt;ol&gt;
&lt;li&gt;Find a &lt;a href="http://en.wikipedia.org/wiki/List_of_United_States_cities_by_population"&gt;list of US cities with at least 100,000 residents&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Paste that list into vi&lt;/li&gt;
&lt;li&gt;Search for the regular expression /t.*h.*a.*n.*k.*s/&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.npr.org/templates/contact/index.php?columnId=4473090"&gt;Submit answer&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
Yes, I still feel good about solving the puzzle even if I cheated.  In case you'd like a bigger hint, the answer is a city in California with a name composed of two words.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-116397557163378840?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/116397557163378840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=116397557163378840' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116397557163378840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116397557163378840'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2006/11/geeks-delight.html' title='A Geek&apos;s Delight'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-116353667734065770</id><published>2006-11-14T13:31:00.000-07:00</published><updated>2006-11-14T13:37:57.350-07:00</updated><title type='text'>Quote o' the Day</title><content type='html'>&lt;blockquote&gt;
I'm a moderate, and there is no room left in the Republican Party for moderates. I'm not leaving the Republican Party; it has basically left me.
&lt;/blockquote&gt;
State Sen. Sam Kitzenberg R-Glasgow, soon to be D-Glasgow, who was decided to &lt;a href="http://billingsgazette.net/articles/2006/11/14/news/state/25-control.txt"&gt;switch parties&lt;/a&gt;, giving Democrats a 26-24 majority in what had been a evenly divided Montana State Senate.  His move is laced with intrigue, as Kitzenberg was given an unadvertised job by the Democratic governor's administration.  Kitzenberg has said changing parties had nothing to do with his employment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-116353667734065770?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/116353667734065770/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=116353667734065770' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116353667734065770'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116353667734065770'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2006/11/quote-o-day.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-116228002071373170</id><published>2006-10-30T23:43:00.000-07:00</published><updated>2006-10-31T09:03:35.076-07:00</updated><title type='text'>Video Recommendations</title><content type='html'>&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://www.youtube.com/results?search_query=chad+vader+blamesocietyfilms+episode&amp;search=Search"&gt;&lt;span style="font-weight:bold;"&gt;Chad Vader: Day/Night Shift Manager&lt;/span&gt;&lt;/a&gt;.  These shorts chronicle the comic tales of Darth Vader's hapless cousin.  Chad begins as the day shift manager at Empire Grocery, but is demoted to working the night shift, separating him from his heartthrob.  Despondent at losing her and his former position to his nemesis, Lord Vader struggles to find the will to go on.  These episodes are worth watching simply for title montage in which the dark lord plucks an apple from a produce display with his force powers while a morose acoustic guitar lethargically thrums the &lt;a href="http://en.wikipedia.org/wiki/Imperial_March"&gt;Imperial March&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;
&lt;span style="font-weight:bold;"&gt;&lt;a href="http://www.mycountrymycountry.com/"&gt;My Country, My Country&lt;/a&gt;&lt;/span&gt;.  When I learned of this documentary about Iraq in the 6 months prior to the January 2005 election, I assumed that it would make a compelling case against the US's involvement.  I was wrong.  The film is a series of poignant scenes, such as a mother and grandmother encouraging a daughter to swat a fly, surreally immune to the ambient pounding of gunfire and mortars.  The candidacy and home life of a Baghdad doctor tie together these scenes.  Following Doctor Riyadh allows the viewer to see a rich cross section of the Iraq capital's life from the abduction for ransom of a fellow physician's son to supporting emotionally and financially a woman whose husband only leaves the house to consort with &lt;a href="http://en.wikipedia.org/wiki/Moqtada_Sadr"&gt;Muqtada al-Sadr&lt;/a&gt; and even a trip to &lt;a href="http://en.wikipedia.org/wiki/Abu_Ghraib_prison"&gt;Abu Ghraib&lt;/a&gt; to evaluate prisoner health.  The catch-22 of the America's position is subtly laid out: conditions are terrible for Iraqis and coalition troops and contractors, but clearly would be worse if the government fell.  While I offer kudos to &lt;a href="http://www.pbs.org/pov/pov2006/mycountry/"&gt;PBS for airing this work&lt;/a&gt;, I must admit this show is not for everyone: Elizabeth fell asleep watching.&lt;p&gt;
On an entirely separate level, the film is fascinating because its creator has been placed on the terrorist watch list with the &lt;a href="http://www.pbs.org/pov/pov2006/mycountry/update.html"&gt;highest possible threat rating&lt;/a&gt;.  According to Laura Poitras:
&lt;blockquote&gt;
Since finishing &lt;span style="font-style:italic;"&gt;My Country, My Country&lt;/span&gt;, I've been placed on the Department of Homeland Security's terror watch list. Returning to the U.S. in August 2006 after screenings in Europe, I was detained at two airports. In Vienna, I was escorted out of the terminal to a police inspection area and was notified by security that my 'threat rating' was 400 points — the highest the Department of Homeland Security assigns. Upon arrival at JFK airport, I was again escorted by security to a holding area until Homeland Security gave permission for me to enter the country.
&lt;/blockquote&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/8499998-116228002071373170?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/116228002071373170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=116228002071373170' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116228002071373170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116228002071373170'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2006/10/video-recommendations.html' title='Video Recommendations'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-116165839501799982</id><published>2006-10-23T20:36:00.000-06:00</published><updated>2006-10-23T20:57:34.046-06:00</updated><title type='text'>Credit where credit is due</title><content type='html'>Weird Al's new album, &lt;span style="font-style:italic;"&gt;&lt;a href="http://en.wikipedia.org/wiki/Straight_Outta_Lynwood"&gt;Straight Outta Lynwood&lt;/a&gt;&lt;/span&gt;, has &lt;a href="http://www.cnn.com/2006/SHOWBIZ/Music/10/23/music.yankovic.reut/index.html"&gt;landed on Billboard's top 10&lt;/a&gt;, with its premier song, &lt;a href="http://en.wikipedia.org/wiki/White_And_Nerdy"&gt;&lt;span style="font-style:italic;"&gt;White and Nerdy&lt;/span&gt;&lt;/a&gt;, getting number 9.  Both marks are the artist's highest showings in his 27 year career.  The &lt;a href="http://www.youtube.com/results?search_query=white+nerdy"&gt;&lt;span style="font-style:italic;"&gt;White and Nerdy&lt;/span&gt; music video&lt;/a&gt; &lt;a href="http://digg.com/music/White_and_Nerdy_AOL_Video_Premiere_cancelled"&gt;"world premier" on AOL was canceled&lt;/a&gt; because it was already widely distributed on YouTube and other video sharing sites.  Rather than being miffed, Weird Al gives the Internet credit for his greatest success, saying,
&lt;blockquote&gt;The ("Nerdy") video has gotten a lot of attention, and the proliferation of places like YouTube (has) been a big help.&lt;p&gt;
I'd kind of written off the chance of ever having another hit single, since record labels weren't really releasing commercial ones. As much as people are griping about the Internet taking sales away from artists, it's been a huge promotional tool for me.
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-116165839501799982?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/116165839501799982/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=116165839501799982' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116165839501799982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116165839501799982'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2006/10/credit-where-credit-is-due.html' title='Credit where credit is due'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-116140087265619394</id><published>2006-10-20T21:14:00.000-06:00</published><updated>2006-10-20T21:24:53.900-06:00</updated><title type='text'>It's not tool use, but...</title><content type='html'>Most impressive.  One or more crows in Japan have learned that an easier way to crack a nut is to drop it into traffic.  That left the subtle problem of having to retrieve the nut guts from amongst the wizzing cars.  Watch the video to see the amazing solution. 
&lt;embed style="width: 400px; height: 326px;" id="VideoPlayback" type="application/x-shockwave-flash" src="http://video.google.com/googleplayer.swf?docId=-7329182515885554944"&gt; &lt;/embed&gt;
&lt;P&gt;From &lt;a href="http://www.ursispaltenstein.ch/blog/weblog.php?/weblog/clever_raven/"&gt;Ursi's Blog&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-116140087265619394?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/116140087265619394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=116140087265619394' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116140087265619394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116140087265619394'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2006/10/its-not-tool-use-but.html' title='It&apos;s not tool use, but...'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-116113791349253800</id><published>2006-10-17T20:09:00.000-06:00</published><updated>2006-10-17T20:24:17.873-06:00</updated><title type='text'>Quote o' the Day</title><content type='html'>On today's &lt;span style="font-style:italic;"&gt;All Things Considered&lt;/span&gt;, NPR's Scott Horsley reported on &lt;a href="http://www.npr.org/templates/story/story.php?storyId=6284610"&gt;&lt;span style="font-style:italic;"&gt;Bargain-Hunting in San Diego's Real-Estate Slump&lt;/span&gt;&lt;/a&gt;.  He interviewed real estate auctioneer Bill Shepner, who offered this gem.

&lt;blockquote&gt;If you're looking for the next foreclosure, follow the Hummer.  A lot of these Hummers were paid for out of equity lines and refinances -- and the Lexuses and the Mercedes.
&lt;p&gt;
Their income maybe was never enough to afford the loans, and their adjustable-rate mortgages are kicking in, and there's going to be some blood flowing in the streets.
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-116113791349253800?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/116113791349253800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=116113791349253800' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116113791349253800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116113791349253800'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2006/10/quote-o-day_17.html' title='Quote o&apos; the Day'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-116097774025535043</id><published>2006-10-15T23:36:00.000-06:00</published><updated>2006-10-16T00:00:15.313-06:00</updated><title type='text'>Free the podcasts</title><content type='html'>Two of my favorite NPR shows just announced that they'd start offering free podcasts.  Previously, &lt;a href="http://www.thislife.org/pages/home_061016.html#pod"&gt;&lt;span style="font-style:italic;"&gt;This American Life&lt;/span&gt;&lt;/a&gt; and &lt;a href="http://marketplace.publicradio.org/RSS/"&gt;&lt;span style="font-style:italic;"&gt;Marketplace Money&lt;/span&gt;&lt;/a&gt; shows were available as podcasts from audible.com for a fairly hefty fee; to subscribe to &lt;span style="font-style:italic;"&gt;Marketplace Money&lt;/span&gt; for a year cost nearly $120, whereas becoming a member of my local NPR station cost $20.  Now they're available for the incredibly low price of "donate or feel guilty."  Interestingly, at least &lt;span style="font-style:italic;"&gt;TAL&lt;/span&gt; is following the &lt;span style="font-style:italic;"&gt;New York Times&lt;/span&gt; model of moving the free content to a &lt;a href="http://www.thislife.org/pages/faq.html#archive"&gt;fee-required archive&lt;/a&gt; after a bit.  I'll probably only use the &lt;span style="font-style:italic;"&gt;Marketplace Money&lt;/span&gt; feed because it publishes new content earlier than YPR streams it, while &lt;span style="font-style:italic;"&gt;TAL&lt;/span&gt; publishes after I've already created my own podcast of the content from YPR.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-116097774025535043?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/116097774025535043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=116097774025535043' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116097774025535043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116097774025535043'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2006/10/free-podcasts.html' title='Free the podcasts'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-116085122432263410</id><published>2006-10-14T12:21:00.000-06:00</published><updated>2006-10-14T12:40:24.336-06:00</updated><title type='text'>Memory about Storage</title><content type='html'>I remember that before serious Internet access reached the small town I grew up in, there was a  sundry electronic goods store there that would mail order computer parts.  For some reason, I stopped there one day and asked them about computer component prices, even though I had neither sufficient disposable income to purchase or a computer new enough to support such items.  I remember being shocked that they were charging in the neighborhood of $2.50 per MB of hard drive storage, when the going rate should've been closer to $1 per MB.&lt;p&gt;
I tell this "back in my day, uphill both ways" story only because I think it's wonderful that roughly 12 years later hard drive storage can be purchased at about $0.25 per GB, according to recent postings on &lt;a href="http://slickdeals.net"&gt;SlickDeals&lt;/a&gt;.  That's a 10,000 times increase in value compared to the price the local shop offered years ago, an annualized improvement of about 115%.  Of course, those numbers are at least as suspect as my "through two feet of snow, barefoot" memory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-116085122432263410?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/116085122432263410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=116085122432263410' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116085122432263410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116085122432263410'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2006/10/memory-about-storage.html' title='Memory about Storage'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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-8499998.post-116062056636444096</id><published>2006-10-11T20:34:00.000-06:00</published><updated>2006-10-12T08:42:39.000-06:00</updated><title type='text'>Integrating FxCop into CruiseControl.NET</title><content type='html'>Recently, I needed to integrate &lt;a
href="http://www.gotdotnet.com/Team/FxCop/"&gt;FxCop&lt;/a&gt; into our &lt;a
href="http://ccnet.thoughtworks.com/"&gt;CC.NET&lt;/a&gt; server.&amp;nbsp; I had a
few design goals for the integration.&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;I wanted the CC.NET project which built the code and the FxCop
project to break separately.&lt;/li&gt;
&lt;li&gt;I wanted the violated FxCop rules to appear on CC.NET dashboard.&lt;/li&gt;
&lt;li&gt;I didn't want the FxCop to checkout from version control or build
the code.&lt;/li&gt;
&lt;/ul&gt;
I found couple useful resources along the way:&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a
href="http://confluence.public.thoughtworks.org/display/CCNET/Using+CruiseControl.NET+with+FxCop"&gt;official
page on FxCop/CC.NET integration&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a
href="http://blogs.conchango.com/johnrayner/archive/tags/CC.Net/default.aspx"&gt;John
Rayner's posts on CC.NET&lt;/a&gt;, especially &lt;a
href="http://blogs.conchango.com/johnrayner/archive/2006/10/05/Getting-FxCop-to-break-the-build.aspx"&gt;&lt;span
style="font-style: italic;"&gt;Getting FxCop to break the build&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
I discovered fairly quickly that FxCop locks the assemblies that it's
analyzing, which meant that I had to make a copy of the assemblies that
FxCop was analyzing or else the build project would fail because it
couldn't copy to its output directory.&amp;nbsp; I also discovered that the
return value of FxCopCmd doesn't indicate
whether rule violations were found, rather whether a catastrophic
error was encountered.&amp;nbsp; That meant that to get the CC.NET build to
break, I had to run FxCop from another application to control the value
that was returned to CC.NET.&amp;nbsp; I decided to accommodate both of
those needs with &lt;a
href="http://msdn2.microsoft.com/en-us/library/wea2sca5.aspx"&gt;msbuild&lt;/a&gt;.&amp;nbsp;
I could've used &lt;a href="http://nant.sourceforge.net/"&gt;NAnt&lt;/a&gt; for
the same purpose.&amp;nbsp; Specifically, to break the CC.NET build I
needed msbuild to examine the FxCop output and return a failing error
code if any violations were found.&amp;nbsp; The ability to parse an XML
file isn't in the base functionality of msbuild; however,&amp;nbsp; the &lt;code&gt;&amp;lt;XmlRead&amp;gt;&lt;/code&gt;
task of &lt;a href="http://msbuildtasks.tigris.org/"&gt;MSBuild Community
Tasks Project&lt;/a&gt; does have that ability.
&lt;p&gt;The steps for my msbuild script are: &lt;br&gt;
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Copy the files to be analyzed, including assemblies they depend
on to a temporary folder.&lt;/li&gt;
&lt;li&gt;Run FxCop on the assemblies in question.&lt;/li&gt;
&lt;li&gt;Check the FxCop result and return an appropriate error code.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;pre&gt;&lt;font color="#ff0000"&gt;&amp;lt;?&lt;/font&gt;&lt;font color="#0000ff"&gt;xml&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;version&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"1.0"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font
color="#0000ff"&gt;encoding&lt;/font&gt;=&lt;font color="#ff00ff"&gt;"utf-8"&lt;/font&gt;&lt;font
color="#ff0000"&gt;?&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font
color="#0000ff"&gt;Project&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font
color="#0000ff"&gt;DefaultTargets&lt;/font&gt;=&lt;font color="#ff00ff"&gt;"RunCheck"&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;xmlns&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"http://schemas.microsoft.com/developer/msbuild/2003"&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#ff0000"&gt;&amp;lt;!&lt;/font&gt;&lt;font
color="#ff0000"&gt;-- Required Import to use MSBuild Community Tasks --&lt;/font&gt;&lt;font
color="#ff0000"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font
color="#0000ff"&gt;Import&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font
color="#0000ff"&gt;Project&lt;/font&gt;=&lt;font color="#ff00ff"&gt;"$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"&lt;/font&gt;&lt;font
color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font
color="#0000ff"&gt;Target&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font
color="#0000ff"&gt;Name&lt;/font&gt;=&lt;font color="#ff00ff"&gt;"RunCheck"&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;CallTarget&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;Targets&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"Copy"&lt;/font&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;CallTarget&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;Targets&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"Check"&lt;/font&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;CallTarget&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;Targets&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"Report"&lt;/font&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/Target&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;Target&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;Name&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"RunFxCopUI"&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;CallTarget&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;Targets&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"Copy"&lt;/font&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;Exec&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;Command&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"attrib +R $(FxCopProject)"&lt;/font&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;Exec&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;Command&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;'"$(FxCopExe)" $(FxCopProject)'&lt;/font&gt;&lt;font
color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&amp;lt;/Target&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;Target&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;Name&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"Copy"&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;Copy&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;SourceFiles&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"@(DllsAndPdbs)"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font
color="#0000ff"&gt;DestinationFolder&lt;/font&gt;=&lt;font color="#ff00ff"&gt;"$(FxCopWorkDirectory)"&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;SkipUnchangedFiles&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"true"&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/Target&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;Target&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;Name&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"Check"&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;Exec&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;Command&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;'"$(FxCopCmdExe)" /project:$(FxCopProject) /out:$(FxCopOutput) /directory:$(FxCopWorkDirectory) /forceoutput'&lt;/font&gt;&lt;font
color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&amp;lt;/Target&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;Target&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;Name&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"Report"&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;XmlRead&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;ContinueOnError&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"True"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font
color="#0000ff"&gt;XmlFileName&lt;/font&gt;=&lt;font color="#ff00ff"&gt;"$(FxCopOutput)"&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;XPath&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"string(count(//Issue[@Level='CriticalError']))"&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;Output&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;TaskParameter&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"Value"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font
color="#0000ff"&gt;PropertyName&lt;/font&gt;=&lt;font color="#ff00ff"&gt;"FxCopCriticalErrors"&lt;/font&gt;&lt;font
color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/XmlRead&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;XmlRead&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;ContinueOnError&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"True"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font
color="#0000ff"&gt;XmlFileName&lt;/font&gt;=&lt;font color="#ff00ff"&gt;"$(FxCopOutput)"&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;XPath&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"string(count(//Issue[@Level='Error']))"&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;Output&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;TaskParameter&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"Value"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font
color="#0000ff"&gt;PropertyName&lt;/font&gt;=&lt;font color="#ff00ff"&gt;"FxCopErrors"&lt;/font&gt;&lt;font
color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/XmlRead&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;XmlRead&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;ContinueOnError&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"True"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font
color="#0000ff"&gt;XmlFileName&lt;/font&gt;=&lt;font color="#ff00ff"&gt;"$(FxCopOutput)"&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;XPath&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"string(count(//Issue[@Level='CriticalWarning']))"&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;Output&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;TaskParameter&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"Value"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font
color="#0000ff"&gt;PropertyName&lt;/font&gt;=&lt;font color="#ff00ff"&gt;"FxCopCriticalWarnings"&lt;/font&gt;&lt;font
color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/XmlRead&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;XmlRead&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;ContinueOnError&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"True"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font
color="#0000ff"&gt;XmlFileName&lt;/font&gt;=&lt;font color="#ff00ff"&gt;"$(FxCopOutput)"&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;XPath&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"string(count(//Issue[@Level='Warning']))"&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;Output&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;TaskParameter&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"Value"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font
color="#0000ff"&gt;PropertyName&lt;/font&gt;=&lt;font color="#ff00ff"&gt;"FxCopWarnings"&lt;/font&gt;&lt;font
color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/XmlRead&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;Math&lt;/font&gt;&lt;font
color="#ff0000"&gt;.&lt;/font&gt;&lt;font color="#0000ff"&gt;Add&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;Numbers&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"$(FxCopCriticalErrors);$(FxCopErrors);$(FxCopCriticalWarnings);$(FxCopWarnings)"&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;Output&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;TaskParameter&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"Result"&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font
color="#0000ff"&gt;PropertyName&lt;/font&gt;=&lt;font color="#ff00ff"&gt;"FxCopRuleViolations"&lt;/font&gt;&lt;font
color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/Math&lt;/font&gt;&lt;font color="#ff0000"&gt;.&lt;/font&gt;&lt;font
color="#0000ff"&gt;Add&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;Error&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;Text&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"FxCop encountered $(FxCopRuleViolations) rule violation(s). Critical errors: $(FxCopCriticalErrors). Errors: $(FxCopErrors). Critical warnings: $(FxCopCriticalWarnings). Warnings: $(FxCopWarnings)."&lt;/font&gt;&lt;br&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;Condition&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"$(FxCopRuleViolations) &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;amp;&lt;/font&gt;&lt;font
color="#804040"&gt;gt&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;font
color="#ff00ff"&gt; 0"&lt;/font&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/Target&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;ItemGroup&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;DllsAndPdbs&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;Include&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"..\..\..\ThirdParty\lib\*.dll;bin\debug\*.dll;bin\debug\*.pdb;"&lt;/font&gt;&lt;font
color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&amp;lt;/ItemGroup&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;PropertyGroup&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;FxCopWorkDirectory&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;FxCop&lt;font color="#0000ff"&gt;&amp;lt;/FxCopWorkDirectory&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;FxCopProject&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;ProjectName.FxCop&lt;font color="#0000ff"&gt;&amp;lt;/FxCopProject&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;FxCopOutput&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;$(FxCopWorkDirectory)\ProjectName.FxCop.output.xml&lt;font
color="#0000ff"&gt;&amp;lt;/FxCopOutput&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;ItemGroup&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;OutputFiles&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;Include&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"FxCop\*.dll;FxCop\*.pdb"&lt;/font&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/ItemGroup&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;PropertyGroup&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;FxCopCriticalErrors&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;0&lt;font color="#0000ff"&gt;&amp;lt;/FxCopCriticalErrors&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;FxCopErrors&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;0&lt;font color="#0000ff"&gt;&amp;lt;/FxCopErrors&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;FxCopCriticalWarnings&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;0&lt;font color="#0000ff"&gt;&amp;lt;/FxCopCriticalWarnings&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;FxCopWarnings&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;0&lt;font color="#0000ff"&gt;&amp;lt;/FxCopWarnings&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;PropertyGroup&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;ExpectedFxCopCmdPath&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;C:\Program Files\Microsoft FxCop 1.35\FxCopCmd.exe&lt;font
color="#0000ff"&gt;&amp;lt;/ExpectedFxCopCmdPath&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;Choose&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;When&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;Condition&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"Exists($(ExpectedFxCopCmdPath))"&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#ff0000"&gt;&amp;lt;!&lt;/font&gt;&lt;font color="#ff0000"&gt;-- Hope that the expected version of FxCop is installed --&lt;/font&gt;&lt;font
color="#ff0000"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;PropertyGroup&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;FxCopCmdExe&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;$(ExpectedFxCopCmdPath)&lt;font color="#0000ff"&gt;&amp;lt;/FxCopCmdExe&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/When&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;Otherwise&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#ff0000"&gt;&amp;lt;!&lt;/font&gt;&lt;font color="#ff0000"&gt;-- Otherwise hope that FxCop is in the path. --&lt;/font&gt;&lt;font
color="#ff0000"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;PropertyGroup&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;FxCopCmdExe&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;fxcopcmd.exe&lt;font color="#0000ff"&gt;&amp;lt;/FxCopCmdExe&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/Otherwise&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/Choose&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;&amp;lt;/Project&amp;gt;&lt;/font&gt;
&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;br&gt;
To get the output of FxCop to appear on the CC.NET dashboard, I needed
to tell FxCop to write its output to a file.&amp;nbsp; Use the "&lt;code&gt;/out:&amp;lt;filename&amp;gt;&lt;/code&gt;"
switch for that.&amp;nbsp; The "&lt;code&gt;/forceoutput&lt;/code&gt;" switch is also
nice because it causes an output file to be written even if no rules
are violated.&amp;nbsp; Then I needed to merge that into the CC.NET build
log.&amp;nbsp; The &lt;a
href="http://confluence.public.thoughtworks.org/display/CCNET/File+Merge+Task"&gt;CC.NET
merge task&lt;/a&gt; is intended for that.&amp;nbsp; The gotcha I discovered is
that I needed to put the &lt;code&gt;&amp;lt;merge&amp;gt;&lt;/code&gt; task under the &lt;code&gt;&amp;lt;publishers&amp;gt;&lt;/code&gt;
tag, not the &lt;code&gt;&amp;lt;tasks&amp;gt;&lt;/code&gt; tag.&amp;nbsp; If it's under &lt;code&gt;&amp;lt;tasks&amp;gt;&lt;/code&gt;,
it's not executed if the build fails, which foils my goal of getting
the rule violations onto the CC.NET dashboard.
&lt;p&gt;That leaves only the question of how to cause the FxCop CC.NET
project
to run after the main project completes successfully.&amp;nbsp; CC.NET
includes a &lt;a
href="http://confluence.public.thoughtworks.org/display/CCNET/Project+Trigger"&gt;&lt;code&gt;&amp;lt;projectTrigger&amp;gt;&lt;/code&gt;&lt;/a&gt;,
which is perfect for this task.&amp;nbsp; Not only is the project trigger
able to run the dependent project only when the parent project
completes successfully, but it also is smart enough not to run the
dependent project multiple times if the parent project completes while
the child is still running.&amp;nbsp; Here's my ccnet.config:&lt;br&gt;
&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;cruisecontrol&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font
color="#0000ff"&gt;project&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font
color="#0000ff"&gt;name&lt;/font&gt;=&lt;font color="#ff00ff"&gt;"FxCop"&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;publishExceptions&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;true&lt;font color="#0000ff"&gt;&amp;lt;/publishExceptions&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;triggers&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;projectTrigger&lt;/font&gt;&lt;font
color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#0000ff"&gt;project&lt;/font&gt;=&lt;font
color="#ff00ff"&gt;"ParentProject"&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;triggerStatus&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;Success&lt;font color="#0000ff"&gt;&amp;lt;/triggerStatus&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/projectTrigger&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/triggers&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;tasks&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;msbuild&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;timeout&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;1800&lt;font color="#0000ff"&gt;&amp;lt;/timeout&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;executable&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;C:\Windows\Microsoft.NET\Framework\v2.0.50727\msbuild.exe&lt;font
color="#0000ff"&gt;&amp;lt;/executable&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;projectFile&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;ProjectFile.Fxcop.msbuild.xml&lt;font
color="#0000ff"&gt;&amp;lt;/projectFile&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;buildArgs&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;/noconsolelogger /v:diag&lt;font
color="#0000ff"&gt;&amp;lt;/buildArgs&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;logger&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;ThoughtWorks.CruiseControl.MsBuild.XmlLogger,ThoughtWorks.CruiseControl.MsBuild.dll&lt;font
color="#0000ff"&gt;&amp;lt;/logger&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/msbuild&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/tasks&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;publishers&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;merge&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;files&lt;/font&gt;&lt;font
color="#0000ff"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font
color="#0000ff"&gt;file&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;FxCop\ProjectName.FxCop.output.xml&lt;font
color="#0000ff"&gt;&amp;lt;/file&amp;gt;&lt;/font&gt; &lt;font color="#0000ff"&gt;&amp;lt;/files&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/merge&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#0000ff"&gt;xmllogger&lt;/font&gt;&lt;font
color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/publishers&amp;gt;&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;font
color="#0000ff"&gt;&amp;lt;/project&amp;gt;&lt;/font&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;&amp;lt;/cruisecontrol&amp;gt;&lt;/font&gt;
&lt;/pre&gt;
&lt;/blockquote&gt;
My biggest disappointment with the result is that I couldn't get the
detailed FxCop results to appear on the CC.NET web dashboard page for
each
build; rather they appear on the "FxCop Report" page, which I decided
was not worth the effort to change.&amp;nbsp; However, I really didn't
like
the look of the standard report, so I edited my &lt;code&gt;CruiseControl\webdashboard\dashboard.config&lt;/code&gt;
file to use &lt;a
href="http://blogs.sqlxml.org/bryantlikes/archive/2005/11/10/4480.aspx"&gt;Brian
Likes's XSL&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8499998-116062056636444096?l=leifw.wickland.net' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://leifw.wickland.net/feeds/116062056636444096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8499998&amp;postID=116062056636444096' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116062056636444096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8499998/posts/default/116062056636444096'/><link rel='alternate' type='text/html' href='http://leifw.wickland.net/2006/10/integrating-fxcop-into.html' title='Integrating FxCop into CruiseControl.NET'/><author><name>Leif Wickland</name><uri>http://www.blogger.com/profile/01820541736912004507</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></feed>
