<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>iamthewalr.us</title>
	
	<link>http://iamthewalr.us/blog</link>
	<description>by Colin Barrett</description>
	<lastBuildDate>Thu, 28 Jan 2010 02:49:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Iamthewalrus" /><feedburner:info uri="iamthewalrus" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Annus Mirabilis</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/qZ4oiFtttAE/</link>
		<comments>http://iamthewalr.us/blog/2010/01/annus-mirabilis/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 02:46:50 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=269</guid>
		<description><![CDATA[All signs point to 2010 being Apple&#8217;s annus mirabilis.

The introduction of the iPad is only the beginning. WWDC10 looks like it&#8217;s going to be fantastic; typical release cycles seem to point where we&#8217;re likely going to see the release iPhone OS 4.0 along with a new iPhone, and the first tidbits of Mac OS X. [...]]]></description>
			<content:encoded><![CDATA[<p>All signs point to 2010 being Apple&#8217;s <a href="http://en.wikipedia.org/wiki/Annus_mirabilis">annus mirabilis</a>.</p>

<p>The introduction of the iPad is only the beginning. WWDC10 looks like it&#8217;s going to be fantastic; typical release cycles seem to point where we&#8217;re likely going to see the release iPhone OS 4.0 along with a new iPhone, and the first tidbits of Mac OS X. Additionally, while we have seen <a href="http://www.apple.com/ipad/app-store/#iwork">something from the iWork team</a> this year, we haven&#8217;t seen anything from the iLife team yet.</p>

<p>It&#8217;s also worth noting that Snow Leopard featured very few new features and interface changes; I highly doubt that Apple&#8217;s designers were paid to do nothing for the entire Snow Leopard cycle. I&#8217;m geared up for all kinds of crazy Mac OS X stuff this WWDC.</p>

<p>There&#8217;s also the usual array of new hardware announcements; a brief glance at <a href="http://buyersguide.macrumors.com/">the numbers</a> makes me think we&#8217;re in for a wild, wild year on that front as well.</p>

<p>I&#8217;ve been following Apple news since the early &#8217;90s<sup id="fnref:life"><a href="#fn:life" rel="footnote">1</a></sup> and I can&#8217;t recall ever being as excited about what&#8217;s coming next as I am right now.</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:life">
<p>Basically, as soon as I was old enough to follow news.&#160;<a href="#fnref:life" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=qZ4oiFtttAE:WZBYIop35UM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=qZ4oiFtttAE:WZBYIop35UM:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/qZ4oiFtttAE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2010/01/annus-mirabilis/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2010/01/annus-mirabilis/</feedburner:origLink></item>
		<item>
		<title>UISearchDisplayController and UILocalizedIndexedCollation</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/MU0M_9bCuPE/</link>
		<comments>http://iamthewalr.us/blog/2009/12/uisearchdisplaycontroller-and-uilocalizedindexedcollation/#comments</comments>
		<pubDate>Fri, 01 Jan 2010 01:12:06 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=266</guid>
		<description><![CDATA[Over the years, I have been, for the most part, pleased with Apple&#8217;s documentation for Cocoa, and its documentation for Cocoa Touch has been no different. However, there are always some some cases where two things jut up against each other in odd ways.

I recently encountered an example of this: How do you build a [...]]]></description>
			<content:encoded><![CDATA[<p>Over the years, I have been, for the most part, pleased with Apple&#8217;s documentation for Cocoa, and its documentation for Cocoa Touch has been no different. However, there are always some some cases where two things jut up against each other in odd ways.</p>

<p>I recently encountered an example of this: How do you build a <code>UITableView</code> combining the powers of both <code>UISearchDisplayController</code> and <code>UILocalizedIndexedCollation</code>? The documentation for each is excellent &#8212; particularly the <a href="http://developer.apple.com/iphone/library/samplecode/TableSearch/index.html">TableSearch</a> and <a href="http://developer.apple.com/iphone/library/samplecode/TableViewSuite/index.html">TableViewSuite</a> code samples &#8212; but I noticed no mention of how to combine the two à la the Contacts application.</p>

<p><img src="http://farm3.static.flickr.com/2749/4231826145_01089881ce.jpg"/></p>

<p>The non-obvious bits are:</p>

<ol>
<li>How to display the small magnifying glass symbol.</li>
<li>How to scroll the <code>UISearchBar</code> in to view when the magnifying glass symbol is tapped.</li>
<li>How this integrates with <code>UILocalizedIndexedCollation</code>. </li>
</ol>

<p>The first one is relatively simple: <code>UITableView.h</code> declares an <code>NSString</code> constant <code>UITableViewIndexSearch</code>. The second one takes a little thinking, but isn&#8217;t hard:</p>

<pre><code>CGRect searchBarFrame = self.searchDisplayController.searchBar.frame;
[tableView scrollRectToVisible:searchBarFrame animated:NO];
</code></pre>

<p>Since a view&#8217;s <code>frame</code> is in the coordinates of its superview and since <code>UISearchBar</code> is inserted as a subview of <code>UITableView</code> (a subclass of <code>UIScrollView</code>), we can use this <code>UIScrollView</code> method to scroll the <code>UISearchBar</code> into place.</p>

<p>The last one is a little trickier, and is best explained with some code up front:<sup id="fnref:dotsyntax"><a href="#fn:dotsyntax" rel="footnote">1</a></sup></p>

<pre><code>// in sectionIndexTitlesForTableView:
return [[NSArray arrayWithObject:UITableViewIndexSearch] arrayByAddingObjectsFromArray:
        [[UILocalizedIndexedCollation currentCollation] sectionIndexTitles]];

// in tableView:sectionForSectionIndexTitle:atIndex:
if (title == UITableViewIndexSearch) {
    CGRect searchBarFrame = self.searchDisplayController.searchBar.frame;
    [tableView scrollRectToVisible:searchBarFrame animated:NO];
    return -1;
} else {
    UILocalizedIndexedCollation *currentCollation = [UILocalizedIndexedCollation currentCollation];
    return [currentCollation sectionForSectionIndexTitleAtIndex:index-1];
}
</code></pre>

<p>In <code>sectionIndexTitlesForTableView:</code> we construct an array that starts with <code>UITableViewIndexSearch</code> and is followed by the section index titles from the current collation.</p>

<p>In <code>tableView:sectionForSectionIndexTitle:atIndex:</code> we check the special case of <code>UITableViewIndexSearch</code>, handle it with a call to <code>scrollRectToVisible:animated:</code> as noted above. Returning <code>-1</code> isn&#8217;t the greatest idea but for now <code>UITableView</code> seems to ignore it and in the future, if that changes, this will (hopefully) crash in a predictable way.<sup id="fnref:oob"><a href="#fn:oob" rel="footnote">2</a></sup></p>

<p>If the user has in fact tapped on one of the letters, we subtract one from the index passed in and return the corresponding section. If that&#8217;s a little confusing, remember that we inserted <code>UITableViewIndexSearch</code> at the beginning of the section index titles array, so our indexes are off by one.</p>

<h3>Sample code</h3>

<p>It always helps me to see code in action, so <a href="http://iamthewalr.us/blog/wp-content/uploads/2009/12/TableSearch-with-index.zip">I&#8217;ve modified the TableSearch code sample to include a section index</a>.</p>

<p>It&#8217;s a real testament to the skill of the guys designing these APIs that this was that easy. Neither of these two APIs are fighting each other but instead are standing far enough apart that a developer can bridge the gap with clever bits of glue.</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:dotsyntax">
<p>I normally don&#8217;t use dot syntax, but the TableSearch sample code does.&#160;<a href="#fnref:dotsyntax" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:oob">
<p>I would expect an <code>NSRangeException</code> to be thrown.&#160;<a href="#fnref:oob" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=MU0M_9bCuPE:pKOiR0Xtn7w:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=MU0M_9bCuPE:pKOiR0Xtn7w:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/MU0M_9bCuPE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2009/12/uisearchdisplaycontroller-and-uilocalizedindexedcollation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2009/12/uisearchdisplaycontroller-and-uilocalizedindexedcollation/</feedburner:origLink></item>
		<item>
		<title>Introducing guess-renames</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/V7wVbpp7fQA/</link>
		<comments>http://iamthewalr.us/blog/2009/09/introducing-guess-renames/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 01:32:33 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bazaar]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[guess-renames]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=257</guid>
		<description><![CDATA[Today I&#8217;m letting the world know about a little something I&#8217;ve been working on. It&#8217;s called guess-renames.

guess-renames solves a simple problem: Rename several files, either by hand or with a refactoring tool, and your version control system gets horribly confused and you have to spend 20 minutes running the same commands over and over again.1

No [...]]]></description>
			<content:encoded><![CDATA[<p>Today I&#8217;m letting the world know about a little something I&#8217;ve been working on. It&#8217;s called <a href="/projects/guess-renames">guess-renames</a>.</p>

<p>guess-renames solves a simple problem: Rename several files, either by hand or with a refactoring tool, and your version control system gets horribly confused and you have to spend 20 minutes running the same commands over and over again.<sup id="fnref:cvs"><a href="#fn:cvs" rel="footnote">1</a></sup></p>

<p>No more. Now, just run guess-renames and presto, you&#8217;re up to date. No more commands to run, just commit. guess-renames is even smart enough to identify renamed files <em>even if their contents differ slightly</em>.</p>

<p>I&#8217;ve written a brief <a href="/projects/guess-renames#algorithm">description of the algorithm</a> &#8212; originally designed by <a href="http://code.aaronbentley.com/">Aaron Bentley</a> for <a href="http://bazaar-vcs.org">Bazaar</a> &#8212; and I won&#8217;t reprint it here, but I do want to note just how smart this thing is: Aaron ran a test on the entire Launchpad source tree. First, he rewound the contents of each file 300 revisions; and then he renamed <em>every single one</em>. Except for empty files<sup id="fnref:emptyfiles"><a href="#fn:emptyfiles" rel="footnote">2</a></sup>, guess-renames was right 100% of the time. Maybe I&#8217;m just a dork, but to me that&#8217;s <em>so incredibly huge</em>.</p>

<p>This is seriously really cool stuff. I encourage you to <a href="/projects/guess-renames">take guess-renames for a spin</a>.</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:cvs">
<p>I mean, you&#8217;re using a version control system that tracks file renames, right? Right?&#160;<a href="#fnref:cvs" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:emptyfiles">
<p>guess-renames works by looking at file contents, so empty files (in this case &#95;_init__.py files) don&#8217;t factor in to its algorithm.&#160;<a href="#fnref:emptyfiles" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=V7wVbpp7fQA:KVokYj6-8lI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=V7wVbpp7fQA:KVokYj6-8lI:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/V7wVbpp7fQA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2009/09/introducing-guess-renames/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2009/09/introducing-guess-renames/</feedburner:origLink></item>
		<item>
		<title>The Tale of “The Tale of Dog Poop Girl Is Not So Funny After All” Is Pretty Funny After All</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/rYV3T4FNWjI/</link>
		<comments>http://iamthewalr.us/blog/2009/05/the-tale-of-the-tale-of-dog-poop-girl-is-not-so-funny-after-all-is-pretty-funny-after-all/#comments</comments>
		<pubDate>Tue, 12 May 2009 09:10:56 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[blogs]]></category>
		<category><![CDATA[news]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=210</guid>
		<description><![CDATA[I at first didn&#8217;t know how to respond to this piece of stale Weird News fluff. I think it deserves more than 140 or 280 or 420 characters though.

(For the lazy man: the article, circa 2005, is discussing the internet, specifically privacy implications, and gives the last word to an extended quote from a pseudonymous [...]]]></description>
			<content:encoded><![CDATA[<p>I <a href="http://twitter.com/cbarrett/status/1771696158">at first</a> didn&#8217;t know how to respond to <a href="http://www.cjr.org/behind_the_news/the_tale_of_dog_poop_girl_is_n.php">this piece of stale Weird News fluff</a>. I think it deserves more than 140 or 280 or 420 characters though.</p>

<p>(For the lazy man: the article, circa 2005, is discussing the internet, specifically privacy implications, and gives the last word to an extended quote from a pseudonymous comment on the WaPo&#8217;s article on the incident which goes straight to drawing parallels to Hitler, do not pass $200.)</p>

<p>On the surface, this is yet another in a sad instance of Traditional Media à la mode du aging boomer uncle &#8212; trying to email you links but just sending you blue underlined text &#8212; but there&#8217;s something more going on.</p>

<p>Looking a little deeper, the site it&#8217;s posted on, Columbia Journalism Review, is a fine fat goose of potential irony. <a href="http://www.cjr.org/about_us/mission_statement.php">From its bio slash mission statement</a>:</p>

<blockquote>
  <p>Both online and in print, Columbia Journalism Review is in conversation with a community of people who share a commitment to high journalistic standards in the U.S. and the world.</p>
</blockquote>

<p>So an Old Media group dedicated to Good Journalism has an intern post on a blog an entry about the privacy implications of anonymous speech on the internet, and the intern manages to not just observe and report but actually become a participant in the very proliferation of anonymous hate speech she&#8217;s panning in the article. <em>Heavy</em>.<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup></p>

<p>I still don&#8217;t know what the take away here is except a headache. Aspirin, anyone?</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:1">
<p>One big, obvious source of hope is that this incident is from 2005. I know nothing about CJR and couldn&#8217;t tell you if they&#8217;ve improved or not.&#160;<a href="#fnref:1" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=rYV3T4FNWjI:MkB6Lek4tWM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=rYV3T4FNWjI:MkB6Lek4tWM:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/rYV3T4FNWjI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2009/05/the-tale-of-the-tale-of-dog-poop-girl-is-not-so-funny-after-all-is-pretty-funny-after-all/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2009/05/the-tale-of-the-tale-of-dog-poop-girl-is-not-so-funny-after-all-is-pretty-funny-after-all/</feedburner:origLink></item>
		<item>
		<title>Mac Developer Roundtable #17</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/QmuU64dwSSg/</link>
		<comments>http://iamthewalr.us/blog/2009/04/mac-developer-roundtable-17/#comments</comments>
		<pubDate>Sun, 05 Apr 2009 09:39:02 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[mac developer roundtable]]></category>
		<category><![CDATA[mdr]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=208</guid>
		<description><![CDATA[Recently I had the opportunity to participate in an episode of the Mac Developer Roundtable. The topic was a quite general: object-oriented programming. I think it&#8217;s a pretty good episode: plenty of spirited debate, minimal talking over each other, and lots of good information.

I&#8217;m not much of a podcast person myself; I can&#8217;t listen to [...]]]></description>
			<content:encoded><![CDATA[<p>Recently I had the opportunity to participate in <a href="http://www.mac-developer-network.com/shows/podcasts/mdr/mdr017/">an episode of the Mac Developer Roundtable</a>. The topic was a quite general: object-oriented programming. I think it&#8217;s a pretty good episode: plenty of spirited debate, minimal talking over each other, and lots of good information.</p>

<p>I&#8217;m not much of a podcast person myself; I can&#8217;t listen to people talk and work at the same time. Still yet, I highly recommend joining the <a href="http://mac-developer-network.com">Mac Developer Network</a>. Scotty produces some great content for Mac (and iPhone) developers. It&#8217;s just another example of how wonderful the Objective-C community is.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=QmuU64dwSSg:v253HWZXtMw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=QmuU64dwSSg:v253HWZXtMw:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/QmuU64dwSSg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2009/04/mac-developer-roundtable-17/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2009/04/mac-developer-roundtable-17/</feedburner:origLink></item>
		<item>
		<title>Financial news sucks</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/mKfG1Dur87Q/</link>
		<comments>http://iamthewalr.us/blog/2009/03/financial-news-sucks/#comments</comments>
		<pubDate>Fri, 13 Mar 2009 21:12:16 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[CNBC]]></category>
		<category><![CDATA[daily show]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=198</guid>
		<description><![CDATA[If you haven&#8217;t seen Jon Stewart&#8217;s interview with Jim Cramer, you can watch parts one, two and three on Comedy Central&#8217;s website. It&#8217;s an interesting interview.

One of the things that struck me the most about this interview was how Cramer kept talking about how people had &#8220;lied&#8221; to him, and lied to his network, and [...]]]></description>
			<content:encoded><![CDATA[<p>If you haven&#8217;t seen Jon Stewart&#8217;s interview with Jim Cramer, you can watch parts <a href="http://www.thedailyshow.com/video/index.jhtml?videoId=221516&amp;title=Jim-Cramer-Unedited-Interview-Pt.-1">one</a>, <a href="http://www.thedailyshow.com/video/index.jhtml?videoId=221517&amp;title=Jim-Cramer-Unedited-Interview-Pt.-2">two</a> and <a href="http://www.thedailyshow.com/video/index.jhtml?videoId=221518&amp;title=Jim-Cramer-Unedited-Interview-Pt.-3">three</a> on Comedy Central&#8217;s website. It&#8217;s an interesting interview.</p>

<p>One of the things that struck me the most about this interview was how Cramer kept talking about how people had &#8220;lied&#8221; to him, and lied to his network, and that is somehow an excuse for their pathetic excuse for &#8220;journalism&#8221;. Softballing CEOs who have run the biggest corporations in the world into the ground and made billions doing it is not journalism.</p>

<p>Journalism is asking real questions, and when you (astonishingly) don&#8217;t get answers from the people involved, <em>you go digging</em>. Woodward and Bernstein didn&#8217;t blow open Watergate in a 6 minute interview with Nixon on Bloomberg.</p>

<p>I worry that with the popularity of The Daily Show<sup id="fnref:sole"><a href="#fn:sole" rel="footnote">1</a></sup> and the rise of blogs, we&#8217;re losing a generation of investigative reporters. Shouting from the sidelines doesn&#8217;t stop cover ups. Stewart and bloggers (like yours truly) adroitly fill the role of <em>observer and commentator</em><sup id="fnref:msnbc"><a href="#fn:msnbc" rel="footnote">2</a></sup>, but the world is full of all sorts of chicanery. We need <em>investigators</em> in these trying times.</p>

<p><a href="http://www.amazon.com/Bob-Woodward/e/B000APXDGS">Does Woodward really have to be the Woodward of our time?</a> Are we that bad off? Seriously, if you know of (young) people doing solid investigative journalism, leave a comment.</p>

<p><strong>Update:</strong> <a href="http://iamthewalr.us/blog/2009/03/13/financial-news-sucks/#comment-43938">Great comment from Jay O&#8217;Conor</a> on how the newspaper business failing is driving this trend.</p>

<p>As I understand it, the revenue model for newspapers was almost entirely based on classified ads &#8212; reporting itself doesn&#8217;t bring in a lot of direct money, and subscription fees &amp; news stand revenue are largely negligible.</p>

<p>So, to put it in the most oversimplified and pithy way possible, who do we have to thank for the paucity of good journalism? <a href="http://craigslist.org">A guy from San Francisco named Craig</a>.</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:sole">
<p>It&#8217;s the primary news source for plenty of people.&#160;<a href="#fnref:sole" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:msnbc">
<p>I&#8217;d put Olbermann and Maddow in this category too.&#160;<a href="#fnref:msnbc" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=mKfG1Dur87Q:vRF8pY7jRQg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=mKfG1Dur87Q:vRF8pY7jRQg:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/mKfG1Dur87Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2009/03/financial-news-sucks/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2009/03/financial-news-sucks/</feedburner:origLink></item>
		<item>
		<title>Getting Organized</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/dq9neizP3fE/</link>
		<comments>http://iamthewalr.us/blog/2009/03/getting-organized/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 22:18:46 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[organizing]]></category>
		<category><![CDATA[unions]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=178</guid>
		<description><![CDATA[It&#8217;s become commonplace for big companies to to use employment agencies to fill in headcount cheaply. These agencies employ workers, often called &#8220;temps&#8221; or &#8220;contractors&#8221;, but in reality they are full time employees (i.e. they receive W2s) of the employment agency.

This is a really shitty set up for the workers, and this recent 10% rate [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s become commonplace for big companies to to use employment agencies to fill in headcount cheaply. These agencies employ workers, often called &#8220;temps&#8221; or &#8220;contractors&#8221;, but in reality they are full time employees (i.e. they receive W2s) of the employment agency.</p>

<p>This is a really shitty set up for the workers, and <a href="http://www.msratecuts.org/site/?p=33">this recent 10% rate cut by Microsoft</a> is a perfect example why:</p>

<p>Let&#8217;s pretend you&#8217;re a temp at Microsoft. Every day you go to work at a building that says &#8220;Microsoft&#8221; on the side. You sit around with other Microsoft employees and do Microsofty things. But in reality, you don&#8217;t work for Microsoft at all. You work for Volt Workforce Solutions, an employment agency. You&#8217;re vaguely aware of this &#8212; after all they pay you and you fill in their time card, but this is a pretty common practice (you hear) so you&#8217;re not too worried about it.</p>

<p>Then one day, Volt sends you an email saying &#8220;Agree to this rate cut.&#8221; What happens if you don&#8217;t agree? To be blunt, you will be likely terminated &#8212; after Volt follows the procedure in the employee handbook, natch. There is a chance you&#8217;ll be reassigned to another contract, but it&#8217;s likely that you&#8217;ll just go.</p>

<p>And the best part is there&#8217;s jack shit you can do about this.</p>

<p>In at-will states (like Washington), it is perfectly legal to fire any employee for <em>any</em> reason, bar a couple of exceptions: discrimination, for taking medical leave, and for refusing to commit an illegal act. All the employer has to do is not do any of those things and follow their own procedure (usually outlined in their employee handbook).<sup id="fnref:atwill"><a href="#fn:atwill" rel="footnote">1</a></sup></p>

<p>The comments on the post I linked to above break my heart. There are so many people in my industry that are completely clueless and have been suckered in by the promise of a good job and the chance to get ahead. Rugged individualism is rampant in the tech industry &#8212; there&#8217;s this myth that if you&#8217;re smart enough, or do a job esoteric enough, you&#8217;re somehow magically protected from being fired.</p>

<p>This isn&#8217;t a dating sim. You can be fired <em>for any reason <strong>at any time.</strong></em> Here&#8217;s an anecdote for you:</p>

<p>I once worked at an employment agency for a big tech company. Two weeks before my contract was up, I told my bosses that I wouldn&#8217;t be renewing with them, but that I&#8217;d had a good run and no hard feelings. And that was the truth: I was tired of the corporate cube farm life and wanted to do something else.</p>

<p>A few days later, before I head in to work, I get a call. It&#8217;s from my employment agency. I&#8217;m told not to go into work, and to instead box up any property and ship or deliver it to some address out in the sticks.</p>

<p>I eventually learn that all of the contractors on my group had been dismissed as well. Speculations were made that it was for cost reasons, but nobody had a good answer.<sup id="fnref:management"><a href="#fn:management" rel="footnote">2</a></sup></p>

<p>This is reality. This is how the system works. No puppies. No sunshine. No rainbows. No magical job security because you&#8217;re awesome.</p>

<h3>Reasons for optimism</h3>

<p>It&#8217;s not all bad news. The site I linked to at the beginning of this entry, <a href="http://www.msratecuts.org/">msratecuts.org</a>, was set up as a result of the recent 10% reduction. The first step towards fixing this situation is to realize that there is incredible power in numbers.</p>

<p>There&#8217;s also <a href="http://www.thenation.com/doc/20080623/sirota">this David Sirota piece in The Nation last year</a> that talks specifically about about Microsoft&#8217;s temps and the efforts of WashTech to organize them.</p>

<h3>A note on comments</h3>

<p>Consider this list before commenting:</p>

<ul>
<li>Unions aren&#8217;t bad. Neither are they good. A union is a type of organization, like a corporation or boy scout troop. Some unions are bad. Some unions are good.</li>
<li>Spare us all the rugged individualism, please. Think through the implications of what you&#8217;re saying and watch <a href="http://www.imdb.com/title/tt0119177/">Gattaca</a> a few times before you start ranting about Social Darwinism.</li>
<li>Sit still for five minutes and think deeply about this: &#8220;There are other people in this world who are less fortunate and talented than I am. It&#8217;s possible that their situation might be different from my own, and my comment should reflect that.&#8221; </li>
</ul>

<div class="footnotes">
<hr />
<ol>

<li id="fn:atwill">
<p>Of course, the worker gains the benefit of being able to leave their job at anytime, too. Using that in a bargaining situation is a bit like threatening to nuke your own country and cackling as you describe the fallout to your (nonplussed) downwind neighbor.&#160;<a href="#fnref:atwill" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:management">
<p>FYI: I hold no grudges against my direct managers or coworkers there. In fact, they&#8217;re quite awesome. The project was a lot of fun and they did the best job they could in a really hellish corporate environment. Hats off to them.&#160;<a href="#fnref:management" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=dq9neizP3fE:f_PafUIdZro:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=dq9neizP3fE:f_PafUIdZro:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/dq9neizP3fE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2009/03/getting-organized/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2009/03/getting-organized/</feedburner:origLink></item>
		<item>
		<title>“Never been done before on The Web” doesn’t mean anything</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/6mPHiZ9RQsA/</link>
		<comments>http://iamthewalr.us/blog/2009/02/never-been-done-before-on-the-web-doesnt-mean-anything/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 09:03:01 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=176</guid>
		<description><![CDATA[Mozilla released this thing called Bespin. It&#8217;s a web-based text editor, rendered with Canvas. As part of the release, Mozilla put out a screencast introducing the product.

The wisdom of creating yet another text editor &#8212; much less one inside the browser &#8212; aside, the one thing I wanted to point out was that in the [...]]]></description>
			<content:encoded><![CDATA[<p>Mozilla released this thing called <a href="http://bespin.mozilla.com">Bespin</a>. It&#8217;s a web-based text editor, rendered with Canvas. As part of the release, Mozilla put out <a href="http://vimeo.com/3195079">a screencast</a> introducing the product.</p>

<p>The wisdom of creating yet another text editor &#8212; much less one inside the browser &#8212; aside, the one thing I wanted to point out was that in the video, the authors keep mentioning that this feature or that feature &#8220;has never been done before on the web.&#8221;</p>

<p>Who cares? Unlike most web &#8220;applications&#8221;, you&#8217;re not in uncharted territory anymore. The text editor is an absolutely ancient type of computer program &#8212; and one which has not really moved to the web at all so far. When you write a web-based text editor, not just competing against other in-browser offerings developed in the last three years, you&#8217;re competing against <a href="http://en.wikipedia.org/wiki/O26_%28text_editor%29">40+ years</a> of history!</p>

<p>I&#8217;m very interested in the possibilities that Bespin presents &#8212; especially since they&#8217;re doing everything in canvas, which frees them from the absolutely sinful state of the text editing most browsers provide natively. But come on guys, recognize your market. &#8220;On the web&#8221; isn&#8217;t a feature in and of itself. If you want browser-based apps to be thought of as playing on the same field as desktop apps <em>that&#8217;s how you have to market them</em>.</p>

<p>Drop this &#8220;never been done before on the web&#8221; song and start singing about how your application has all the features of other text editors <em>plus</em> some that are (actually) new and unique features.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=6mPHiZ9RQsA:lePlPQfvfEE:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=6mPHiZ9RQsA:lePlPQfvfEE:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/6mPHiZ9RQsA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2009/02/never-been-done-before-on-the-web-doesnt-mean-anything/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2009/02/never-been-done-before-on-the-web-doesnt-mean-anything/</feedburner:origLink></item>
		<item>
		<title>Mercurial and Dropbox</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/a3GEw1axTXI/</link>
		<comments>http://iamthewalr.us/blog/2009/02/mercurial-and-dropbox/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 09:20:09 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[mercurial]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=172</guid>
		<description><![CDATA[I was reading the back issues of the excellent blog Cocoa Is My Girlfriend and noticed this entry on using Git and Dropbox. Currently, I&#8217;m a Mercurial user, and I wondered if this trick (keeping a repository on Dropbox and pushing to it locally) would work with Mercurial.

Turns out it does. From the directory of [...]]]></description>
			<content:encoded><![CDATA[<p>I was reading the back issues of the excellent blog <a href="http://cimgf.com">Cocoa Is My Girlfriend</a> and noticed <a href="http://www.cimgf.com/2008/06/03/version-control-makes-you-a-better-programmer/">this entry on using Git and Dropbox</a>. Currently, I&#8217;m a Mercurial user, and I wondered if this trick (keeping a repository on Dropbox and pushing to it locally) would work with Mercurial.</p>

<p>Turns out it does. From the directory of the project you want to share, do:</p>

<pre><code>hg clone --noupdate . ~/Dropbox/Shared/Code/MyProject
</code></pre>

<p>The <code>--noupdate</code> parameter tells Mercurial not to create a working copy on disk, which is good because we&#8217;ll never be interacting directly with this particular repository directly.</p>

<p>This will create a seemingly empty directory <code>MyProject</code>. The actual repository files and data are stored in <code>MyProject/.hg</code> which is invisible in the Finder. I created a text file titled &#8220;These directories are hg repos. It&#8217;s normal for them to be empty&#8221; to remind myself, in case I forget.</p>

<p>To update Dropbox, run <code>hg push ~/Dropbox/Shared/Code/MyProject</code>.<sup id="fnref:hgrc"><a href="#fn:hgrc" rel="footnote">1</a></sup> You&#8217;ll then see Dropbox&#8217;s menu item indicate it&#8217;s syncing, and when it&#8217;s done, all should be well!</p>

<h3>Why not use a hosting service?</h3>

<p>There exist hosting services for Mercurial (similar to <a href="http://github.com">Github</a> in the git world). Personally, I&#8217;m a fan and user of <a href="http://bitbucket.org">Bitbucket</a>. On top of hosting my code, the free issue tracker and wiki are boss as well. Sadly though, both Github and Bitbucket&#8217;s pricing plans are deficient for my particular use case.</p>

<p>Most of the time when I use this technique, I&#8217;m the only other person who will ever see the code, and I&#8217;m only using Dropbox to keep things in sync between my two machines. Dropbox&#8217;s pricing structure is pretty reasonable &#8212; I can have hundreds of &#8220;private&#8221; repositories, as long as I stay within disk space limitations.</p>

<p>Both Github and Bitbucket make you pay <em>per private repository</em>. This makes sense if I&#8217;m going to be sharing the code with a number of other people and want to utilize additional features like issue tracking, but doesn&#8217;t really make sense when it&#8217;s just me. Furthermore, I create a number of these one off, private projects &#8212; I don&#8217;t want to be paying monthly for code I wrote (potentially) years ago and will never touch again.</p>

<h3>The solution is archiving</h3>

<p>I wish that these services would allow me to archive a project &#8212; that is, mark it as inactive and unused. I&#8217;d be unable to pull or push from the repository and all of the other metadata would be in read-only mode. Only the number of <em>active</em> private projects would be limited. Incidentally, the excellent time tracking site <a href="http://letsfreckle.com">Freckle</a> uses this technique to awesome effect.</p>

<p>With the ability to archive I would be able to better estimate the total cost of a service like Bitbucket or Github, as the cost would be stable over time, instead of (likely) rising to unaffordable levels. Instead of feeling like I&#8217;m paying a fair price for a service I could run myself,<sup id="fnref:runymysef"><a href="#fn:runymysef" rel="footnote">2</a></sup> I&#8217;m worried about costs rising in the future and generally feeling very apprehensive.</p>

<div class="footnotes">
<hr />
<ol>

<li id="fn:hgrc">
<p>You can also set the <a href="http://www.selenic.com/mercurial/hgrc.5.html#paths">default-push option</a> in the per-repo config file, located in <code>.hg/hgrc</code>, so that by default you&#8217;ll push to Dropbox when pushing from that repo.&#160;<a href="#fnref:hgrc" rev="footnote">&#8617;</a></p>
</li>

<li id="fn:runymysef">
<p>The Mercurial distribution comes with a tool called <a href="http://www.selenic.com/mercurial/wiki/index.cgi/PublishingRepositories#multiple">hgwebdir</a> that allows you to publish repositories via a webserver, similar to Bitbucket or Github.&#160;<a href="#fnref:runymysef" rev="footnote">&#8617;</a></p>
</li>

</ol>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=a3GEw1axTXI:hjD4Updv6Qs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=a3GEw1axTXI:hjD4Updv6Qs:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/a3GEw1axTXI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2009/02/mercurial-and-dropbox/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2009/02/mercurial-and-dropbox/</feedburner:origLink></item>
		<item>
		<title>Ask me about my Address Book</title>
		<link>http://feedproxy.google.com/~r/Iamthewalrus/~3/tdH6P1U3FhI/</link>
		<comments>http://iamthewalr.us/blog/2009/02/ask-me-about-my-address-book/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 21:02:56 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[address book]]></category>
		<category><![CDATA[keyboard shortcuts]]></category>
		<category><![CDATA[mail.app]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=170</guid>
		<description><![CDATA[I ran into an issue where Apple&#8217;s Mail.app was adding contacts to Address Book, seemingly at random. After a call with the very helpful Apple Support folks, I think I&#8217;ve tracked it down to this:



Add Sender to Address Book is, by default, aliased to Command-Shift-Y. When you press this shortcut or select the menu item, [...]]]></description>
			<content:encoded><![CDATA[<p>I ran into an issue where Apple&#8217;s Mail.app was adding contacts to Address Book, seemingly at random. After a call with the very helpful Apple Support folks, I think I&#8217;ve tracked it down to this:</p>

<p><img src="http://iamthewalr.us/blog/wp-content/uploads/2009/02/add-sender.png" alt="add-sender.png" border="0" width="305" height="30" /></p>

<p>Add Sender to Address Book is, by default, aliased to Command-Shift-Y. When you press this shortcut or select the menu item, seemingly nothing happens. No dialog asking you if you&#8217;re sure, no confirmation that the sender was added. Address Book doesn&#8217;t even open.</p>

<p>This is a pretty awful behavior, especially for a menu item with a keyboard shortcut. I&#8217;m betting that I&#8217;ve pressed this by accident many times, likely when trying to mark as unread (Command-Option-U). I had no idea that menu item was even <em>there</em>, much less that it was bound to a keyboard shortcut I might be hitting.</p>

<p>It&#8217;s super important to always provide some sort of feedback after an action is taken, especially when they&#8217;re invoking a keyboard shortcut, and doubly especially when dealing with their data.</p>

<p>I&#8217;ve filed <a href="rdar://problem/6577578">bug 6577578</a> about this. Hopefully we&#8217;ll see a fix in an upcoming version of Mac OS X.</p>

<p>For now though, you can use this handy <code>defaults</code> command to remove the offending keyboard shortcut:</p>

<pre><code>defaults write com.apple.mail NSUserKeyEquivalents -dict-add "Add Sender to Address Book" "nil"
</code></pre>

<p>Hopefully this was actually the root cause of my issue, and not some kind of crazy Mail.app bug.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/Iamthewalrus?a=tdH6P1U3FhI:WDvoav7k7uM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/Iamthewalrus?i=tdH6P1U3FhI:WDvoav7k7uM:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/Iamthewalrus/~4/tdH6P1U3FhI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2009/02/ask-me-about-my-address-book/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://iamthewalr.us/blog/2009/02/ask-me-about-my-address-book/</feedburner:origLink></item>
	</channel>
</rss>
