<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>iamthewalr.us</title>
	<atom:link href="http://iamthewalr.us/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://iamthewalr.us/blog</link>
	<description>by Colin Barrett</description>
	<lastBuildDate>Thu, 18 Feb 2010 03:26:59 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The User</title>
		<link>http://iamthewalr.us/blog/2010/02/the-user/</link>
		<comments>http://iamthewalr.us/blog/2010/02/the-user/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 02:25:50 +0000</pubDate>
		<dc:creator>Colin Barrett</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://iamthewalr.us/blog/?p=275</guid>
		<description><![CDATA[Let&#8217;s talk about users. This user is, seemingly, a mythical creature; commonly believed to be a slow, lumbering creature grazing the Internet, credit card in hand, clicking on things essentially at random. Occasionally users are captured and studied in a lab by people who graduated from prestigious universities with a degree in the important-sounding field [...]]]></description>
			<content:encoded><![CDATA[<p>Let&#8217;s talk about users. This user is, seemingly, a mythical creature; commonly believed to be a slow, lumbering creature grazing the Internet, credit card in hand, clicking on things essentially at random. Occasionally users are captured and studied in a lab by people who graduated from prestigious universities with a degree in the important-sounding field of &#8220;Human-Computer Interaction&#8221;. In most cases, these users are released back into the wild unharmed.</p>

<p>It is also commonly believed that the user is a creature of such low intelligence that it either cannot (or worse, refuses to) understand how a computer works. There are several opinions on what to do about this. Some believe users completely unfit to actually use computers and clap their hands over their ears at the first mention of the beasts. Others, recognizing the revenue potential of building a product for use by people other than computer professionals (also called &#8220;geeks&#8221; or &#8220;nerds&#8221;), declare a sort of fealty to the user and try their hardest to help the user by writing things like manuals, documentation and FAQs and staying up all night &#8220;optimizing the user workflow to improve our first-run funnel&#8221;.</p>

<p>Still others, observing the fact that users seem to be multiplying at an alarming rate, wring their hands day and night about a future where there aren&#8217;t any more programmers, geeks or nerds and the entire planet is covered by nothing but drooling, stammering <em>users</em>. &#8220;Who will create content for the users if there&#8217;s nothing but users?&#8221; they cry. Shouts of &#8220;Our entire civilization will fall apart if there aren&#8217;t Atari 2600s to learn to program on!&#8221; are followed by breast-beating, hemming, hawing and more handwringing.</p>

<p>Reader, I have some startling news for you. It has recently been discovered that users are in fact, <em>people</em>. In case you&#8217;re unfamiliar with the term, people are human beings who are generally very busy. How did this happen? How could we have mistaken people, especially very busy, very smart people like doctors, lawyers, auto mechanics and baseball umpires, for slow, dimwitted users?</p>

<h3>Sauropods, swamps and Sam Neill</h3>

<p>To answer that question, we need to make a short detour into history of paleontology. In the latter half of the 19th century, <a href="http://en.wikipedia.org/wiki/Bone_Wars">the Bone Wars</a> were raging, and <a href="http://en.wikipedia.org/wiki/Illiad#The_major_characters">the Achilles and Hector</a> of the Bone Wars were Othniel Charles Marsh and Edward Drinker Cope. This was a time when wealthy men raced to out do one another on the field of scientific combat and careful scientific study took a backseat to egos and sensationalism. Many, many mistakes were made. One of the most famous is poor <em>Brontosaurus</em>, discovered by Marsh in 1877.</p>

<p>You may remember <em>Brontosaurus</em> if you grew up obsessed with dinosaurs, like I did. At age 8 I was absolutely captivated by anything that had been extinct for at least 65 million years. <em>Brontosaurus</em>, meaning &#8220;thunder lizard&#8221;, was truly an impressive animal to imagine. Up to 80 feet long, it had a massive body, huge legs and an unbelievably long neck and tail. <em>Brontosaurus</em>, like the other sauropods, was said to live in marshy swamps. After all, an animal that massive needs a tremendous amount of energy to simply hold itself up, and there&#8217;s no way it could get enough with a small mouth with which to chew food. Clearly, <em>Brontosaurus</em> needed the buoyancy of water simply to live.</p>

<p>It turns out this was all terribly wrong. Firstly, there wasn&#8217;t any animal quite like the <em>Brontosaurus</em> that Marsh described. What Marsh found was an adult <em>Apatosaurus</em> skeleton with the head of a <em>Camarasaurus</em>. Secondly, it turns out that sauropods had plenty of energy. Like birds, they didn&#8217;t chew their food at all; they swallowed it whole and mashed it up in a part of their stomach called <a href="http://en.wikipedia.org/wiki/Gizzard#Dinosaurs">the gizzard</a>; the size of their mouth wasn&#8217;t a limiting factor. In reality, they were probably quite active animals &#8212; <em>Jurassic Park</em> depicts one standing on its hind legs to munch on some leaves. Thirdly, it turns out that sauropods didn&#8217;t live in the water at all &#8212; in fact, <a href="http://en.wikipedia.org/wiki/The_Dinosaur_Heresies">analysis by Robert T. Bakker</a> showed that sauropods hated it, and would move out as an area became wet.</p>

<h3>Whither users</h3>

<p>If you haven&#8217;t already guessed it, Reader, the point of that aside was that just like Marsh, we nerds created users out of thin air by making a lot of quick, baseless assumptions. Marsh assumed sauropods chewed their food, and so he saw a water-bound reptilian sloth instead of an unmasticating lizard with a gizzard. We assumed that users were incapable of comprehending computers, and so we saw a blithering idiot instead of a busy person too focused on completing a task to take the time to learn how the internet works.</p>

<p>As more and more people depend on computers for every day things, the products that succeed are going to be ones that figure this out. People don&#8217;t want to mess with multiple windows or command lines because they want to &#8220;just do&#8221; whatever one thing that they&#8217;re doing. People click on the first link on Google &#8212; even if it&#8217;s &#8220;clearly&#8221; a news article &#8212; because they&#8217;re trying to get to Facebook and that&#8217;s how they&#8217;ve gotten there the past 50,000 times.</p>

<p>Trying to understand the behavior of people solely through metrics, usability lab studies and surveys is like trying to figure out the habits of creatures that lived hundred of millions years ago based a on handful of fossilized bone fragments. When you have limited data it&#8217;s very easy to get an assumption wrong. And one wrong assumption can lead you down a very long rabbit hole.</p>
]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2010/02/the-user/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Annus Mirabilis</title>
		<link>http://iamthewalr.us/blog/2010/01/annus-mirabilis/</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>
]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2010/01/annus-mirabilis/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>UISearchDisplayController and UILocalizedIndexedCollation</title>
		<link>http://iamthewalr.us/blog/2009/12/uisearchdisplaycontroller-and-uilocalizedindexedcollation/</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>
]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2009/12/uisearchdisplaycontroller-and-uilocalizedindexedcollation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Introducing guess-renames</title>
		<link>http://iamthewalr.us/blog/2009/09/introducing-guess-renames/</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>
]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2009/09/introducing-guess-renames/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Tale of &#8220;The Tale of Dog Poop Girl Is Not So Funny After All&#8221; Is Pretty Funny After All</title>
		<link>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/</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>
]]></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>
		</item>
		<item>
		<title>Mac Developer Roundtable #17</title>
		<link>http://iamthewalr.us/blog/2009/04/mac-developer-roundtable-17/</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>
]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2009/04/mac-developer-roundtable-17/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Financial news sucks</title>
		<link>http://iamthewalr.us/blog/2009/03/financial-news-sucks/</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>
]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2009/03/financial-news-sucks/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Getting Organized</title>
		<link>http://iamthewalr.us/blog/2009/03/getting-organized/</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>
]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2009/03/getting-organized/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>&#8220;Never been done before on The Web&#8221; doesn&#8217;t mean anything</title>
		<link>http://iamthewalr.us/blog/2009/02/never-been-done-before-on-the-web-doesnt-mean-anything/</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>
]]></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>
		</item>
		<item>
		<title>Mercurial and Dropbox</title>
		<link>http://iamthewalr.us/blog/2009/02/mercurial-and-dropbox/</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>
]]></content:encoded>
			<wfw:commentRss>http://iamthewalr.us/blog/2009/02/mercurial-and-dropbox/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.719 seconds -->
<!-- Cached page served by WP-Cache -->
