<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><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>Mettaprogramming</title>
	
	<link>http://mettadore.com</link>
	<description>Mettaprogramming Super Rocket Dinosaur Fun Monkeys!</description>
	<lastBuildDate>Fri, 27 Aug 2010 17:51:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Mettadore" /><feedburner:info uri="mettadore" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Hover: Domain names without the vampires</title>
		<link>http://feedproxy.google.com/~r/Mettadore/~3/y_L5kpVO95w/</link>
		<comments>http://mettadore.com/analysis/hover-domain-names-without-the-vampires/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 17:42:36 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Miscellany]]></category>

		<guid isPermaLink="false">http://mettadore.com/?p=499</guid>
		<description><![CDATA[
			
				
			
		
Okay, first things first: I wrote this article on August 25th. That&#8217;s important.1
Now the disclaimer: I woke up on August 26th and found out that I won an iPad from Hover.
Now the clarity: I don&#8217;t get paid to blog. I&#8217;ve never been shy about writing articles about software and expecting nothing in return. I&#8217;ve written posts about desktop software such as Scrivener, web apps such as Posterous, and even web-based &#8220;service-like&#8221; companies such as Iterasi. I&#8217;ve even written about how amazing the Microsoft Visual Studio system is… and I freakin&#8217; ...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmettadore.com%2Fanalysis%2Fhover-domain-names-without-the-vampires%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmettadore.com%2Fanalysis%2Fhover-domain-names-without-the-vampires%2F&amp;source=JohnMetta&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Okay, first things first: I wrote this article on August 25th. That&#8217;s important.<sup><a href="http://mettadore.com/analysis/hover-domain-names-without-the-vampires/#footnote_0_499" id="identifier_0_499" class="footnote-link footnote-identifier-link" title="My plan was to polish the grammar, test out the jokes again, and publish it this morning. I wish I&amp;#8217;d done it last night, but I didn&amp;#8217;t, shame.">1</a></sup></p>
<p>Now the disclaimer: I woke up on August 26th and <a href="http://help.hover.com/2010/08/26/and-the-winner-of-the-gnomedex-10-hover-ipad-contest-is">found out that I won an iPad</a> from <a href="http://hover.com">Hover</a>.</p>
<p>Now the clarity: I don&#8217;t get paid to blog. I&#8217;ve never been shy about writing articles about software and expecting nothing in return. I&#8217;ve written posts about desktop software such as <a href="http://positivelyglorious.com/easy-listening/scrivener-the-best-writing-software-full-stop/">Scrivener</a>, web apps such as <a href="http://positivelyglorious.com/software-media/posterous-proves-why-twitter-works-for-customer-service/">Posterous</a>, and even web-based &#8220;service-like&#8221; companies such as <a href="http://positivelyglorious.com/software-media/why-cuil-should-buy-iterasi-no-seriously/">Iterasi</a>. I&#8217;ve even written about how amazing the <a href="http://positivelyglorious.com/software-media/microsoft-sex-slave/">Microsoft Visual Studio system</a> is… and I freakin&#8217; hate Microsoft <em>anything</em>.  If I see something I like, I write about it. Hover is no different.</p>
<p>Hopefully, that&#8217;s enough evidence that I don&#8217;t write for return. I write because I love writing. If you don&#8217;t believe that, then you might want to move on.</p>
<h3>Now the post</h3>
<p><a href="http://hover.com">Hover</a> rocks. Full stop.</p>
<p>I have a lot of domain names. I don&#8217;t have a lot of them because I sit on them hoping they will be worth something, I have <em>working</em> domain names. Everything from this site and <a href="http://johnmetta.com">johnmetta.com</a> to organizational sites like <a href="http://rubygorge.org">RubyGorge</a> to halfway joking web applications like <a href="http://kwisatz.hadera.ch">kwisatz.hadera.ch</a>.</p>
<p>Dozens of working domains, all pointing different places.</p>
<p>Anyone who has a lot of domains, or even many people that have a single domain, know that domain management can be a pain. For years, I&#8217;ve used GoDaddy.</p>
<p>Why? Because I love sticking needles in my eyes.</p>
<h3>GoDaddy is run by vampires</h3>
<p>GoDaddy has the tools I need. The problem with GoDaddy is that it&#8217;s worse than MySpace. I&#8217;ve had super savvy tech folks ask me how the hell to find simple DNS management tools on the GoDaddy website&#8211; and I&#8217;ve actually had to ask GoDaddy tech support myself. The answer is invariably something like this:</p>
<blockquote><p>&#8220;You go here, click this link, go here, go there, oh, watch out for the minotaur, then go here… Now you&#8217;re on the Accounts front page, okay from there go here and…&#8221;</p></blockquote>
<p>Trying to finding anything on the GoDaddy site is like trying to find a contact lens that you dropped on the dance floor of an 80&#8242;s throwback disco dance party… in a basement… with vampires.</p>
<p>Ugh.</p>
<p>I actually think that GoDaddy is run by vampires. And not those emo-goth-pussy-I-really-don&#8217;t-want-to-drink-your-blood-honest-I-don&#8217;t Twilight vampires either. GoDaddy people are violent-ass-Lost-Boys-bite-into-your-skull-with-fangs-and-throw-your-carcass-off-a-cliff vampires.</p>
<p>Or, rather, bite into your wallet with fangs. Whatever.</p>
<p>The main problem with that is that GoDaddy <em>does it right</em>. Their purpose is not to let you buy and manage domains. Their purpose is to make you buy everything else: &#8220;Would you like to add a personalized monkey voice to your new GoDaddy &#8216;email to fax to voicemail™&#8217; service for an extra $9/month?&#8221;</p>
<p>To GoDaddy, management of domains is not a feature, it is an interesting byproduct of their vampire disco dance party sales strategy.</p>
<h3>Laughter at a party</h3>
<p>I first heard of Hover while at the <a href="http://gnomedex.com">Gnomedex</a> conference. They were among the sponsors and one of the many announcements was &#8220;Go to Hover.com and register a domain name, use the code Gnomedex for a 50% discount and a chance to win an iPad.&#8221;<sup><a href="http://mettadore.com/analysis/hover-domain-names-without-the-vampires/#footnote_1_499" id="identifier_1_499" class="footnote-link footnote-identifier-link" title="Ugh. I hate those stupid sweepstakes. Whenever I see &amp;#8220;&hellip;chance to win an iPad&amp;#8221; I loose interest completely. I&amp;#8217;m not going to win, I don&amp;#8217;t have time for your stupid sweepstakes, leave me alone and let me get the hell out of this stupid 80s vampire disco dance party!">2</a></sup> I didn&#8217;t think about them again until a bunch of us were chatting about funny stories of their childhood that all arose because no-one talked to us about sex.</p>
<p>I know, interesting topic, right. Wow, no possible negative ramifications there!</p>
<p>We were all laughing and telling stories about awkward things that happened to us as kids and Chris Pirillo said something like &#8220;this would make such a funny website: Stupid things I would <em>not</em> have done if someone had just told me what sex was.&#8221;<sup><a href="http://mettadore.com/analysis/hover-domain-names-without-the-vampires/#footnote_2_499" id="identifier_2_499" class="footnote-link footnote-identifier-link" title="Interestingly, this is all up in the air now. Why? Because if you just have anyone writing these stories&amp;#8211; well. Look, I was thinking of something that would be educational, enlightening and tasteful, while still being just roll-on-the-floor funny as hell. Not sure that&amp;#8217;s so easy to pull off. You need really good writers for that.">3</a></sup> Because we&#8217;re all laughing and drinking, I decided to grab my Android and go to the hover.com site and register a domain- after some wine infused suggestions, we all came up with<a href="http://wankmylife.com"> wankmylife.com</a> as the funniest name.<sup><a href="http://mettadore.com/analysis/hover-domain-names-without-the-vampires/#footnote_3_499" id="identifier_3_499" class="footnote-link footnote-identifier-link" title="we actually went and consulted with Violet Blue, who was a Gnomedex speaker, because we wondered if the word &amp;#8220;wank&amp;#8221; translated well enough to&amp;#8211; well, nevermind. Anyway, it was a joke, honestly, but I immediately thought that it could be a pretty funny-yet-illuminating illustration of why sex education is A Good Thing&trade;.">4</a></sup></p>
<h3>Waking up to Hover</h3>
<p>I only used Hover because we were at the Gnomedex party, and I did want to try to support Chris Pirillo by supporting the sponsors. It wasn&#8217;t until the next morning that I realized what Hover really was.</p>
<p>Remember 1996? Remember going to Yahoo! to try to search for something?</p>
<p>&#8220;Is that the search box, or is that another blinking HTML tag telling me how to get a stupid monkey voice for my answering machine?&#8221;</p>
<p>Then you found Google. And you suddenly realized that you could breath again.</p>
<p>Google did one thing: Search.</p>
<p>It was beautiful.</p>
<p><a href="http://mettadore.com/files/2010/08/Screen-shot-2010-08-26-at-8.03.01-AM.png"><img class="size-medium wp-image-500 alignright" title="Screen shot 2010-08-26 at 8.03.01 AM" src="http://mettadore.com/files/2010/08/Screen-shot-2010-08-26-at-8.03.01-AM-300x246.png" alt="" width="300" height="246" /></a>Going from GoDaddy to Hover was much the same experience. It was like a breath of fresh air. I&#8217;d registered the site on my phone, but don&#8217;t like squatter sites and those stupid announcements like &#8220;blahblah hasn&#8217;t created a webpage, but until they do, would you like to have a vampire monkey singing on a great email to fax to voicemail service?<sup><a href="http://mettadore.com/analysis/hover-domain-names-without-the-vampires/#footnote_4_499" id="identifier_4_499" class="footnote-link footnote-identifier-link" title="Honestly, Hover has the nicest &amp;#8220;this isn&amp;#8217;t a real page&amp;#8221; yet site I&amp;#8217;ve ever seen. It&amp;#8217;s simple and clean, like the rest of their site.">5</a></sup> I wanted to point it to my home page as soon as possible, so woke up the next morning, opened my laptop, and went to <a href="http://hover.com">Hover.com</a>.</p>
<p>There were no sales, there were no tantalizing pictures of Danika Patrick unzipping her leather GoDaddy jacket. There were no vampires or monkey voice email services.</p>
<p>Nothing.</p>
<p>There was a minimalistic white page with a big button that said &#8220;Manage DNS.&#8221; I clicked that big button expecting Danika Patrick and a monkey, but was brought immediately to- as unexpected as it sounds- a DNS management pane.</p>
<p>Suddenly, I realized that I could breath.</p>
<p>Hover&#8217;s site let&#8217;s you manage your domains. Full stop. In fact, there&#8217;s not actually much else on this site that you <em>can</em> do. When you go to hover, you don&#8217;t have many options. You can register a domain, or you can quickly manage the domain you have. That&#8217;s it.</p>
<p>Wow.</p>
<p>I love Hover. While so many other registrars are trying to upsell you everything they possibly can, Hover just wants to do one thing, and do it well. I&#8217;ve pretty much decided to move all my domains to Hover.<sup><a href="http://mettadore.com/analysis/hover-domain-names-without-the-vampires/#footnote_5_499" id="identifier_5_499" class="footnote-link footnote-identifier-link" title="I say &amp;#8220;pretty much&amp;#8221; because they don&amp;#8217;t seem to offer offsite DNS, which means my non-US domains are still on the dance floor in a basement being stepped on by vampires dressed like Flock of Seagulls">6</a></sup> The time spent moving them all will be more than made up by the time saved by never having to tell Danika Patrick that I don&#8217;t want monkey voices.</p>
<p>If you have a single domain, check out Hover. I&#8217;m pretty sure you&#8217;ll be pleasantly surprised.</p>
<ol class="footnotes"><li id="footnote_0_499" class="footnote">My plan was to polish the grammar, test out the jokes again, and publish it this morning. I wish I&#8217;d done it last night, but I didn&#8217;t, shame.</li><li id="footnote_1_499" class="footnote">Ugh. I hate those stupid sweepstakes. Whenever I see &#8220;…chance to win an iPad&#8221; I loose interest completely. I&#8217;m not going to win, I don&#8217;t have time for your stupid sweepstakes, leave me alone and let me get the hell out of this stupid 80s vampire disco dance party!</li><li id="footnote_2_499" class="footnote">Interestingly, this is all up in the air now. Why? Because if you just have anyone writing these stories&#8211; well. Look, I was thinking of something that would be educational, enlightening and tasteful, while still being just roll-on-the-floor funny as hell. Not sure that&#8217;s so easy to pull off. You need really good writers for that.</li><li id="footnote_3_499" class="footnote">we actually went and consulted with <a href="http://tinynibbles.com/">Violet Blue</a>, who was a Gnomedex speaker, because we wondered if the word &#8220;wank&#8221; translated well enough to&#8211; well, nevermind. Anyway, it was a joke, honestly, but I immediately thought that it could be a pretty funny-yet-illuminating illustration of why sex education is A Good Thing™.</li><li id="footnote_4_499" class="footnote">Honestly, Hover has the nicest &#8220;this isn&#8217;t a real page&#8221; yet site I&#8217;ve ever seen. It&#8217;s simple and clean, like the rest of their site.</li><li id="footnote_5_499" class="footnote">I say &#8220;pretty much&#8221; because they don&#8217;t seem to offer offsite DNS, which means my non-US domains are still on the dance floor in a basement being stepped on by vampires dressed like Flock of Seagulls</li></ol><img src="http://mettadore.com/?ak_action=api_record_view&id=499&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/Mettadore/~4/y_L5kpVO95w" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mettadore.com/analysis/hover-domain-names-without-the-vampires/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://mettadore.com/analysis/hover-domain-names-without-the-vampires/</feedburner:origLink></item>
		<item>
		<title>WordCampPDX in 0… 15… 30…</title>
		<link>http://feedproxy.google.com/~r/Mettadore/~3/lBtpkdYEYvw/</link>
		<comments>http://mettadore.com/wordpress/wordcamppdx-in-0%e2%80%a6-15%e2%80%a6-30%e2%80%a6/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 00:37:11 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://mettadore.com/?p=488</guid>
		<description><![CDATA[
			
				
			
		
Today, I created an outline, but more on that later. Right now, I want to talk about WordPress.
I love WordPress.
WordPress is a dream come true. It&#8217;s a great writer&#8217;s platform, it&#8217;s a great programmer&#8217;s platform, it&#8217;s a great tinker&#8217;s platform…
It&#8217;s also a total and complete pain in the ass.
Like many great things, it&#8217;s virtually perfect. And, like many great things, it can be finicky, sometimes contemptible, and often frustrating as hell.
Why?
Because it attracts tinkerers, and tinkerers break things, and breaking things is frustrating.
Honestly, not all the frustration that people have ...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmettadore.com%2Fwordpress%2Fwordcamppdx-in-0%25e2%2580%25a6-15%25e2%2580%25a6-30%25e2%2580%25a6%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmettadore.com%2Fwordpress%2Fwordcamppdx-in-0%25e2%2580%25a6-15%25e2%2580%25a6-30%25e2%2580%25a6%2F&amp;source=JohnMetta&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Today, I created an outline, but more on that later. Right now, I want to talk about WordPress.</p>
<p>I love WordPress.</p>
<p>WordPress is a dream come true. It&#8217;s a great writer&#8217;s platform, it&#8217;s a great programmer&#8217;s platform, it&#8217;s a great tinker&#8217;s platform…</p>
<p>It&#8217;s also a total and complete pain in the ass.</p>
<p>Like many great things, it&#8217;s virtually perfect. And, like many great things, it can be finicky, sometimes contemptible, and often frustrating as hell.</p>
<p>Why?</p>
<p>Because it attracts tinkerers, and tinkerers break things, and breaking things is frustrating.</p>
<p>Honestly, not all the frustration that people have with WordPress is the WordPress team&#8217;s fault. It&#8217;s the fault of the <em>system</em>. It&#8217;s a function of a system and philosophy that allows people to have as many options as they can.</p>
<p>That&#8217;s a problem.</p>
<p>WordPress is almost infinitely customizable, totally hackable and utterly configurable. That&#8217;s the beauty and the curse. Whenever something has that many buttons to press and levers to pull, something is <em>always</em> going to break… eventually</p>
<h3>I&#8217;m Speaking at WordCamp Portland</h3>
<p>This year, I have been honored by being invited to speak at <a href="http://www.wordcampportland.org/">WordCampPDX</a>. Actually, &#8220;honored&#8221; is a bit of an understatement. I&#8217;m overjoyed. Getting up in a room full of people who love WordPress in order to talk about WordPress is pretty damn exciting. It might even be the most exciting speaking engagement I&#8217;ve ever had, and I&#8217;ve spoken a <em>lot</em>.</p>
<p>What will I talk about?</p>
<p>Well, there&#8217;s that whole &#8220;double-edged&#8221; sword aspect of WordPress that I&#8217;ve just been describing. How you can do anything you want to with it, but how that means that it will <em>always</em> break. That&#8217;s really the most interesting thing to me. But, that&#8217;s just a description of a problem. That&#8217;s a complaint.</p>
<p>So, I&#8217;m talking about a solution.</p>
<h3>WordPress &amp; Source Control</h3>
<p><a href="http://en.wikipedia.org/wiki/Source_Code_Management">Source control management</a> (SCM) is a concept that is as natural as breathing to most developers. But it&#8217;s not something that WordPress users often think of.<sup><a href="http://mettadore.com/wordpress/wordcamppdx-in-0%e2%80%a6-15%e2%80%a6-30%e2%80%a6/#footnote_0_488" id="identifier_0_488" class="footnote-link footnote-identifier-link" title="despite the fact that there is a revision control system built into the WordPress editor">1</a></sup> Hovever, anyone who has ever modified a theme, fiddled with a plugin, or wanted to change the way WordPress works for them in any way could find it valuable.</p>
<p>It&#8217;s strange to me that more WordPress users don&#8217;t actually use an SCM system, but then again, I&#8217;m a programmer. SCM may be as natural as <em>breathing</em> to a developer, but it&#8217;s about as natural as breathing <em>underwater</em> to a non-programmer.</p>
<p>But it doesn&#8217;t have to be like breathing underwater.</p>
<p>So I&#8217;m speaking on ways to integrate Source Control and WordPress, to make your life easier and make it much safer to play around and tinker. Hopefully, after my talk, even non-programmers who want to tinker in the WordPress code will feel confident that they won&#8217;t break things.</p>
<p>Or, rather, that they <em>will</em> break things, but that breaking things is <em>okay</em> and a good way to learn&#8211; assuming you can fix them.</p>
<h3>Getting Excited</h3>
<p>Today I created an outline.</p>
<p>It&#8217;s day zero of the first of my three WordPressPDX countdown timers. Today was &#8220;outline&#8221; day.</p>
<p>15 days from now is &#8220;Presentation&#8221; day- the day I need to be done with my presentation (so that I have enough time to test it, tweak it, and maybe break it)</p>
<p>30 days from now is WordCampPDX!</p>
<p>Today I created an outline, and it&#8217;s a pretty good one. We&#8217;ll look at messing about with WordPress themes and plugins, we&#8217;ll create <a href="http://github.com">Github</a> repositories, and we&#8217;ll break things.</p>
<p>We&#8217;ll even&#8211; <em>crazy thought</em>&#8211; <a href="http://twitter.com/gchaix/status/18642674660">hack the WordPress core</a>!!</p>
<p>But it&#8217;ll all be okay, because we&#8217;ll have a safety net.</p>
<p>You don&#8217;t need to know PHP, you don&#8217;t need to know about source control. All you need is the desire to fiddle with stuff and see if it breaks.</p>
<p>And you need a love of WordPress, but if you&#8217;re coming to WordCampPDX, you already have that base covered.</p>
<p><strong>Yay for WordCampPDX!!</strong></p>
<ol class="footnotes"><li id="footnote_0_488" class="footnote">despite the fact that there is a revision control system built into the WordPress editor</li></ol><img src="http://mettadore.com/?ak_action=api_record_view&id=488&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/Mettadore/~4/lBtpkdYEYvw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mettadore.com/wordpress/wordcamppdx-in-0%e2%80%a6-15%e2%80%a6-30%e2%80%a6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://mettadore.com/wordpress/wordcamppdx-in-0%e2%80%a6-15%e2%80%a6-30%e2%80%a6/</feedburner:origLink></item>
		<item>
		<title>Unparsed aapt and Eclipse’s XML Build problem</title>
		<link>http://feedproxy.google.com/~r/Mettadore/~3/rxZ5vHZAHCU/</link>
		<comments>http://mettadore.com/analysis/unparsed-aapt-and-eclipses-xml-build-problem/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 20:57:19 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Miscellany]]></category>

		<guid isPermaLink="false">http://mettadore.com/?p=484</guid>
		<description><![CDATA[
			
				
			
		
This is mostly a post for my memory and to aid the searches.
Say you&#8217;re building an Android application using Eclipse, and you screw up your XML file, and then you FIX your XML file and try to run your app, but get an error window with Eclipse telling you that you have an error in your application and that it can&#8217;t launch and that you should check your console.
But there&#8217;s nothing in the console, and you have no errors.
Look in your Problems window and you&#8217;ll probably see an error that ...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmettadore.com%2Fanalysis%2Funparsed-aapt-and-eclipses-xml-build-problem%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmettadore.com%2Fanalysis%2Funparsed-aapt-and-eclipses-xml-build-problem%2F&amp;source=JohnMetta&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>This is mostly a post for my memory and to aid the searches.</p>
<p>Say you&#8217;re building an Android application using Eclipse, and you screw up your XML file, and then you FIX your XML file and try to run your app, but get an error window with Eclipse telling you that you have an error in your application and that it can&#8217;t launch and that you should check your console.</p>
<p>But there&#8217;s nothing in the console, and you have no errors.</p>
<p>Look in your Problems window and you&#8217;ll probably see an error that says something like this:</p>
<blockquote><p>Unparsed aapt error(s)! Check the console for output.</p></blockquote>
<p>It took me a while to figure this out, with a couple re-starts of Eclipse, before I accidentally stumbled onto the fact that <strong>if you simply delete the error message, you can build and run like normal.</strong></p>
<p>WTH?</p>
<p>Inexplicable;</p>
<p>Looking to figure out if this was my problem or Eclipse&#8217;s, I found <a href="http://code.google.com/p/android/issues/detail?id=10012">Issue 10012 on the Android Google Code site</a>.</p>
<p>I&#8217;ll check out the Eclipse bug system when I get a chance, because it seems like it might be an Eclipse issue rather than an Android SDK issue- could be wrong, but it seems like the aapt is fine from the Android Dev issue text.</p>
<p>Not sure this&#8217;ll help someone else, but it&#8217;ll at least help me remember.</p>
<img src="http://mettadore.com/?ak_action=api_record_view&id=484&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/Mettadore/~4/rxZ5vHZAHCU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mettadore.com/analysis/unparsed-aapt-and-eclipses-xml-build-problem/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://mettadore.com/analysis/unparsed-aapt-and-eclipses-xml-build-problem/</feedburner:origLink></item>
		<item>
		<title>So you want to hire a ninja, do you?</title>
		<link>http://feedproxy.google.com/~r/Mettadore/~3/y3KbIJiLV_I/</link>
		<comments>http://mettadore.com/ruby/so-you-want-to-hire-a-ninja-do-you/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 22:36:33 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Miscellany]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[jobs]]></category>
		<category><![CDATA[ninja]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[rockstar]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[zombie]]></category>

		<guid isPermaLink="false">http://mettadore.com/?p=437</guid>
		<description><![CDATA[
			
				
			
		
I took a trip to Portland recently to traipse through OSCON. I was mostly in the exhibition hall with all the great schwag and company booths&#8211; many which had posted job announcements. While there, I was once again frustrated by a trend I keep seeing. The trend can be described as an &#8220;arms race of job announcements,&#8221; and has gotten to the point where it&#8217;s difficult to find a development job listed by a company that is not seeking a &#8220;ninja,&#8221; or a &#8220;rockstar,&#8221; or some similarly absurdly described candidate.
Smart ...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmettadore.com%2Fruby%2Fso-you-want-to-hire-a-ninja-do-you%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmettadore.com%2Fruby%2Fso-you-want-to-hire-a-ninja-do-you%2F&amp;source=JohnMetta&amp;style=normal&amp;service=bit.ly&amp;hashtags=jobs,ninja,PHP,programming,python,rails,rockstar,ruby,zombie" height="61" width="50" /><br />
			</a>
		</div>
<p>I took a trip to Portland recently to traipse through OSCON. I was mostly in the exhibition hall with all the great schwag and company booths&#8211; many which had posted job announcements. While there, I was once again frustrated by a trend I keep seeing. The trend can be described as an &#8220;arms race of job announcements,&#8221; and has gotten to the point where it&#8217;s difficult to find a development job listed by a company that is not seeking a &#8220;ninja,&#8221; or a &#8220;rockstar,&#8221; or some similarly absurdly described candidate.</p>
<h3>Smart and Gets Things Done</h3>
<p>As best I can tell, this trend really took off&#8211; even if it didn&#8217;t start&#8211; with Joel Spolsky&#8217;s blog article titled &#8220;<a href="http://www.joelonsoftware.com/articles/fog0000000073.html">The Guerrilla Guide to Interviewing</a>.&#8221; In that article, he stated that there was one primary requirement for working at Fog Creek Software: &#8220;Smart, and gets things done.&#8221;</p>
<p><a href="http://mettadore.com/files/2010/07/dwight.jpg"><img class="size-medium wp-image-441 alignright" title="dwight" src="http://mettadore.com/files/2010/07/dwight-218x300.jpg" alt="" width="218" height="300" /></a></p>
<p>His basic argument, with which I tend to agree, is that it doesn&#8217;t really matter what your past qualifications are as much as it matters that you can do to things: 1) Learn shit, and 2) Actually do shit.</p>
<p>His point? If you can&#8217;t learn, you&#8217;ll be stuck trying to write software in Visual Basic and someone will eventually shove you off of a roof out of frustration. Furthermore, if you don&#8217;t actually DO anything, but rather just talk about it, or think about it, or tell others why you could do it better&#8211; then you won&#8217;t even write software in Visual Basic. You won&#8217;t write any software at all, and someone will eventually shove you off of a roof out of frustration.</p>
<p>But if you can learn, it doesn&#8217;t matter what you come into the job knowing, because that&#8217;s merely a starting point. It&#8217;s how your knowledge and skills translate over time that&#8217;s important. You can learn &lt;insert whatever you need to do your job here&gt; quickly. I say quickly because you are a DOER, and doers always learn new stuff, so they can DO more stuff.</p>
<p>The most important thing here: The job will probably change, and when it changes, it&#8217;s the people who can LEARN, ADAPT and DO that will help the company succeed. The person who came to the job with one incredible skill but can&#8217;t learn probably has that one incredible skill in a stupid technology like Visual Basic, and someone will eventually shove&#8211;</p>
<p>well, you get the idea.</p>
<h3>The problem with catchy words</h3>
<p>So, herein lies a bit of the problem. Joel also talks about hiring the best people, treating them like &#8220;rockstars,&#8221; etc. Again, I think he has a point, but that there are a great deal of people who are stupidly picking up the hot new terms like &#8220;rockstar&#8221; and &#8220;ninja&#8221; and using the words, basically, without using their brains.</p>
<p>I see them a lot. Those posting that sound all hip and cool: &#8220;Are you a Python Guru?&#8221; or &#8220;We&#8217;re looking for a Ruby Rockstar for-&#8221; or &#8220;We want a PHP ninja to-&#8221; Everytime I see one of them I want to slap them in the head with the nearest O&#8217;Reilly book and then vomit.</p>
<p>This type of job posting proves one thing to the very people that you want hire: That they don&#8217;t want to work for you.</p>
<p>Why?</p>
<p>Because the very people you want to hire are the ones who describe themselves as &#8220;hard working&#8221; or &#8220;with a lot to learn&#8221; or even &#8220;not as good as many, but loyal, friendly and likes to learn new things.&#8221;</p>
<h3>Do you really want to hire a ninja?</h3>
<p>What&#8217;s a ninja?</p>
<p>It&#8217;s such a stupid, overused buzzword! Do you even know  what it means? It&#8217;s either an assassin or a stupid 14 year old jumping  out of a dumpster brandishing a medieval sword.</p>
<p>You don&#8217;t want either  of those things!</p>
<div id="attachment_438" class="wp-caption alignleft" style="width: 310px"><a href="http://mettadore.com/files/2010/07/GirlNinjas.jpg"><img class="size-medium wp-image-438" title="GirlNinjas" src="http://mettadore.com/files/2010/07/GirlNinjas-300x240.jpg" alt="" width="300" height="240" /></a><p class="wp-caption-text">Ninja: It&#39;s a word that&#39;s THIS overused</p></div>
<p>Yes, there&#8217;s some evidence that a well trained ninja was, if absolutely nothing else, a competent assassin (though the Samurai made fun of them). A ninja is basically a person who does one single thing really well, they kill people, and the rest of life- including the whole &#8220;getting along with people&#8221; part- they could give a rat&#8217;s ass about.</p>
<p>Human interaction to a ninja is &#8220;kill them!&#8221;</p>
<p>Conflict resolution to a ninja: &#8220;Kill them!&#8221;</p>
<p>For those who miss my subtly: A ninja programmer&#8217;s response to pretty much anything is going to be this: &#8220;Do it my way and no-one gets stabbed in the face with my medieval sword.&#8221;<sup><a href="http://mettadore.com/ruby/so-you-want-to-hire-a-ninja-do-you/#footnote_0_437" id="identifier_0_437" class="footnote-link footnote-identifier-link" title="No, don&amp;#8217;t ask your ninja programmer why they have a European weapon, you&amp;#8217;ll get stabbed in the face.">1</a></sup></p>
<p>Think about it. Do you really want to hire someone who does <em>one single thing</em> really well? To the exclusion of things like &#8220;showering&#8221; and, say &#8220;talking to other human beings?&#8221;</p>
<h3>Ninjas are Zombies!</h3>
<p>Here&#8217;s a neat trick: think of another stupid, overused buzzword: Zombie. What if I told you that ninjas are just zombies with black bags over their heads?</p>
<p>They do one thing really well: kill people (eating their brains- mostly the brains of your team if you hire them), and they could give a rat&#8217;s ass about things like &#8220;human interaction&#8221; and &#8220;conflict resolution.&#8221; What&#8217;s their solution to everything? &#8220;Kill them! (and, since we&#8217;re here, we could maybe snack on their brains too&#8230;)&#8221;</p>
<p>Ninjas are zombies! They&#8217;re mindless idiots going around trying to do one thing.</p>
<p>That&#8217;s it.</p>
<p>When you say &#8220;I want a ninja&#8221; you&#8217;re saying &#8220;you can be a complete asshole, refuse to learn anything new, refuse to respond to other human needs or the needs of the business, and also be a social trainwreck. Oh, and you don&#8217;t really need to know, or care, about 90% of programming or computer work, but if you can sit in your hole and &lt;do that one thing well&gt; and not talk to anyone, you&#8217;re the guy for us!&#8221;</p>
<p>You want a ninja-zombie as your lead developer, don&#8217;t you? Admit it.</p>
<h3>Rockstars: They go to 11</h3>
<p>Alright, I think you get my point, but let me touch upon rockstars for a moment. Here&#8217;s another place where I think Joel&#8217;s point was completely missed by a lot of people. Joel says &#8220;hire the best people you can find and treat them like rockstars&#8221; and in pure politician-like &#8220;I don&#8217;t really want to put any actual cognitive thought into this process, so I&#8217;ll just pull a buzzword&#8221;-style, job announcements start popping up for undefinable qualities such as &#8220;Ruby Rockstar.&#8221;</p>
<div id="attachment_440" class="wp-caption alignright" style="width: 310px"><a href="http://mettadore.com/files/2010/07/spinal-tap.jpg"><img class="size-medium wp-image-440" title="spinal-tap" src="http://mettadore.com/files/2010/07/spinal-tap-300x201.jpg" alt="" width="300" height="201" /></a><p class="wp-caption-text">You want these guys in your company?</p></div>
<p>The mistake here is that all the corporate bozos think &#8220;Hey, &#8216;Rockstar&#8217; is the current buzzword, so I&#8217;ll use that too!&#8221; without stopping to think about one thing: &#8220;Rockstars don&#8217;t usually make the best employee material.&#8221;</p>
<p>Think of the words &#8220;punctual&#8221; and &#8220;hardworking.&#8221; Okay, now, keep those words in your head, and think of the word &#8220;rockstar.&#8221;</p>
<p>Yeah, your neck hurts doesn&#8217;t it?</p>
<p>See what happens when you take things out of context? Joel&#8217;s statement was &#8220;<em>treat</em> them like rockstars.&#8221; In otherwords, treat them like they mean something, like they matter, like the company depends on their happiness… so they will be happy… and do really good work… and make you more money.</p>
<p>The line was emphatically NOT &#8220;Make them <em>into</em> rockstars.&#8221;</p>
<p>Seriously! Think about your average caricature of a rockstar.<sup><a href="http://mettadore.com/ruby/so-you-want-to-hire-a-ninja-do-you/#footnote_1_437" id="identifier_1_437" class="footnote-link footnote-identifier-link" title="which is all we&amp;#8217;re really talking about in either case- neither Joel or you are talking about Dar Williams, here.">2</a></sup> They show up late, drunk, stoned, with a 16 year old&#8217;s bra stuck to their belt, and give you a loud, shitty performance of something they don&#8217;t feel like playing before hopping back into the bus for more sex, booze, and food.</p>
<p>Okay people, repeat this after me:</p>
<p><strong>&#8220;I don&#8217;t want to hire a Rockstar!&#8221;</strong></p>
<p>A rockstar is probably worse than a ninja, because at least a ninja- or a zombie, for that matter- can do <em>one</em> freakin&#8217; thing well. The only thing the rockstar can do is pray to god that the sound team can mix together the shit they call a studio performance, and that the stage crew can hit blow the fireworks early to cover the guitarist tripping and falling because they&#8217;re too freakin stoned to remember that there&#8217;s a drumset behind them.</p>
<p>They think of themselves as the best thing that&#8217;s ever happened to you, and if you tell them otherwise, they&#8217;ll freak out.</p>
<p>Rockstars <em>look</em> good. Full stop.</p>
<p>You know who the rockstar is? It&#8217;s the young programmer I met at the <a href="http://opensourcebridge.org">Open Source Bridge conference</a> who immediately berated me for using a different database strategy than him&#8211; without ever stopping to listen to the problem I was solving, to hear about my application&#8217;s design, or to learn <em>why</em> I would choose one over the other.</p>
<p>I was wrong, they were right, and I should really just stop being stupid and do it their way.</p>
<p>Yeah, that&#8217;s who I want on <em>my</em> team.</p>
<p>Fucking rockstars.</p>
<h3>Are you an incompetent programmer with an overblown sense of self-worth?</h3>
<p>Here&#8217;s the part that bugs me the most: The people posting these job announcements are actively selecting for people with a tendency to overstate their abilities while understating their faults.<br />
<a href="http://mettadore.com/files/2010/07/cat.jpg"><img class="alignleft size-medium wp-image-444" title="cat" src="http://mettadore.com/files/2010/07/cat-265x300.jpg" alt="" width="265" height="300" /></a><br />
It&#8217;s called the <a href="http://en.wikipedia.org/wiki/Dunning-Kruger_effect">Dunning-Kruger effect</a> and it&#8217;s well documented in both the scientific literature and<a href="http://en.wikipedia.org/wiki/Dunning-Kruger_effect">popular journalism</a>.</p>
<p>The basic Gist is this: Incompetent people tend to overstate their abilities and think they are amazing, while highly competent people tend to downplay their skills and think that they are less than amazing.</p>
<p>And you know it&#8217;s true.</p>
<p>Go pick the first male rockstar-ninja-zombie programmer you can find and I&#8217;ll pick the first quiet, understated female programmer I can find. Then we&#8217;ll see which one can actually shut the hell up about how great they are and get something done.</p>
<p>The best people for the job are not the ones who are going to feel comfortable applying for the &#8220;Amazing Rockstar!!1!&#8221; position for the very reason that <em>they are the ones that you want to hire</em>: because they are too busy being amazed at all the stuff they <em>don&#8217;t</em> know to be rockstars who tell you everything that they <em>do</em> know.</p>
<p>They don&#8217;t think they know everything. In fact, with everything there is out there, they realize that they know basically <em>nothing</em>. Most importantly: They know that there&#8217;s a lot to learn, and they are trying to learn it.</p>
<p>The rockstars? The ninjas? They already know it, and they&#8217;ll tell you.</p>
<p>In fact, They&#8217;re more than happy to tell you <em>how much</em> they know.</p>
<p>Every single time you interact with them.</p>
<h3>Folk Developer: Will learn and be nice for food</h3>
<p>I don&#8217;t apply to any of these positions because, while there are a lot of things that I <em>am</em> and <em>can</em> do, there are certain things that I am emphatically <em>not</em>. A partial list of the things that I&#8217;m not is:</p>
<ul>
<li>Rockstar</li>
<li>Ninja</li>
<li>Zombie</li>
<li>Best person in the world at &lt;fill in whatever you want here&gt;</li>
</ul>
<p>Me, I&#8217;m not any of that. And that makes me think, from the majority of jobs I see lately, that I won&#8217;t be good enough to make the cut. And let&#8217;s face it, if they&#8217;re advertising for a rockstar, then I am probably not, because I do a lot of things competently, not one thing <em>better than everyone else including you</em>.</p>
<p><a href="http://mettadore.com/files/2010/07/ad-tiger.gif"><img class="alignleft size-full wp-image-465" title="ad-tiger" src="http://mettadore.com/files/2010/07/ad-tiger.gif" alt="" width="251" height="243" /></a>See here&#8217;s the thing: I&#8217;ve been programming for 25+ years, I&#8217;m competent in at least 10 different languages, and really good in at least 4.<sup><a href="http://mettadore.com/ruby/so-you-want-to-hire-a-ninja-do-you/#footnote_2_437" id="identifier_2_437" class="footnote-link footnote-identifier-link" title="5 if we count Ruby, which I&amp;#8217;m learning more about every day">3</a></sup> I&#8217;ve built everything from robotic control systems to mathematical models, from spatial applications to social web applications. I&#8217;ve <em>taught</em> programming, and am about to do so again, and I do other things like start a <a href="http://rubygorge.org">Ruby users group</a>.</p>
<p>By many-if-not-all accounts, I&#8217;d be one hell of a developer to have on a team; yet many teams are seeking rockstars.</p>
<p>I am not a rockstar.</p>
<p>I&#8217;m not the guy on stage with lights and explosions and a screaming electric guitar.</p>
<p>I&#8217;m the guy who goes to a party and sits on the couch singing a song on a guitar. A really fun song, with really good guitar work, but not anything that needs lights and explosions. I may also pick up a banjo or back someone up on a number of other instruments, but mostly I just stay at the party and hang out with people.</p>
<p>No lights. No explosions.</p>
<p>I&#8217;m a folk developer.</p>
<p>I&#8217;m a seeker, I&#8217;m a learner. I&#8217;m a hard worker who will spend his free time coming up to speed on a technology for curiosity as well as success. I&#8217;m loyal, I&#8217;m friendly, I&#8217;ve got a sense of humor and would much rather laugh at myself than at anyone else. I spend my off time programming, like lots of people who love programming, but I also spend my off time playing the Irish flute and banjo, cycling, brewing cider and mead, working in community theater, and lots of other social pursuits.</p>
<p>Despite this (or, rather, because of it) I see myself as little more than &#8220;a decent programmer who&#8217;s probably not as good as most, but might be better than some.&#8221; In fact, I don&#8217;t have enough fingers to count the number of jobs I&#8217;ve actually <em>turned down</em> because I thought that I was probably not good enough&#8211; only to find that someone else was hired whom I actually know that I can outperform.</p>
<p>I am not going to apply for a job as a Python ninja or a Ruby Rockstar, because I&#8217;m not a ninja or a rockstar. I&#8217;m a person who knows a heck of a lot less about Ruby than many other Ruby programmers.</p>
<p>I&#8217;m a person with a lot to learn.</p>
<p>Exactly zero of my qualities describe a rockstar.</p>
<h3>Are you an incompetent company with an overblown sense of  self-worth?</h3>
<p>And I know that&#8217;s also true of many of my developer friends and colleagues. Companies select for people who are not them.</p>
<p>Here&#8217;s the clincher. Most of those companies who are hiring ninjas and rockstars are probably doing so because they see themselves as ninja and rockstar companies.</p>
<p>They are the companies that say things like &#8220;do you want to work in our cool-ass company where everything is better than any other company you&#8217;ve ever worked for, where we have foosball all day and are all awesome and badass about everything we do?&#8221;</p>
<p>Sound familiar? I&#8217;ll bet it does.</p>
<p>It sounds like a rockstar of a company.</p>
<ol class="footnotes"><li id="footnote_0_437" class="footnote">No, don&#8217;t ask your ninja programmer why they have a European weapon, you&#8217;ll get stabbed in the face.</li><li id="footnote_1_437" class="footnote">which is all we&#8217;re really talking about in either case- neither Joel or you are talking about Dar Williams, here.</li><li id="footnote_2_437" class="footnote">5 if we count Ruby, which I&#8217;m learning more about every day</li></ol><img src="http://mettadore.com/?ak_action=api_record_view&id=437&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/Mettadore/~4/y3KbIJiLV_I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mettadore.com/ruby/so-you-want-to-hire-a-ninja-do-you/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://mettadore.com/ruby/so-you-want-to-hire-a-ninja-do-you/</feedburner:origLink></item>
		<item>
		<title>Stop being stupid about belongs_to!</title>
		<link>http://feedproxy.google.com/~r/Mettadore/~3/m2u2NN98Pzo/</link>
		<comments>http://mettadore.com/ruby/stop-being-stupid-about-belongs_to/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 20:38:19 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[belongs_to]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[screwhead]]></category>

		<guid isPermaLink="false">http://mettadore.com/?p=429</guid>
		<description><![CDATA[
			
				
			
		
This is just a post that may help me stop being stupid. Writing it may help carve it into the permanent portion of my memory instead of the &#8220;forget about it and then periodically have to think twice and remember that you did something stupid&#8221; portion.
It&#8217;s a small thing, more of an annoyance than a real problem. Something like my tendency to forget &#8220;end&#8221; after blocks (a Python holdover) and to assume that zero equals false (a sort of &#8220;everything else&#8221; holdover).
It boils down to this:
belongs_to is singular,  you stupid ...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmettadore.com%2Fruby%2Fstop-being-stupid-about-belongs_to%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmettadore.com%2Fruby%2Fstop-being-stupid-about-belongs_to%2F&amp;source=JohnMetta&amp;style=normal&amp;service=bit.ly&amp;hashtags=belongs_to,rails,screwhead" height="61" width="50" /><br />
			</a>
		</div>
<p>This is just a post that may help me stop being stupid. Writing it may help carve it into the permanent portion of my memory instead of the &#8220;forget about it and then periodically have to think twice and remember that you did something stupid&#8221; portion.</p>
<p>It&#8217;s a small thing, more of an annoyance than a real problem. Something like my tendency to forget &#8220;end&#8221; after blocks (a Python holdover) and to assume that zero equals false (a sort of &#8220;everything else&#8221; holdover).</p>
<p>It boils down to this:</p>
<p><span style="font-size: large;">belongs_to is singular,  you stupid dipshit! Stop being a mindless screwhead and remember that for a change, John!</span></p>
<p>Honestly, it only takes me a second once I get the ever familiar error, but it&#8217;s just better to not get the error at all, right? Efficiency and correctness.</p>
<p>If anyone reads this and runs into me later, I wouldn&#8217;t mind if you repeat that statement to me.</p>
<p>More reminders couldn&#8217;t hurt.</p>
<img src="http://mettadore.com/?ak_action=api_record_view&id=429&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/Mettadore/~4/m2u2NN98Pzo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mettadore.com/ruby/stop-being-stupid-about-belongs_to/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://mettadore.com/ruby/stop-being-stupid-about-belongs_to/</feedburner:origLink></item>
		<item>
		<title>Quick, “random records” module</title>
		<link>http://feedproxy.google.com/~r/Mettadore/~3/x_tOSBXCGcs/</link>
		<comments>http://mettadore.com/ruby/quick-random-records-module/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 23:46:10 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[ActiveRecord]]></category>
		<category><![CDATA[gems]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[random]]></category>
		<category><![CDATA[ungems]]></category>

		<guid isPermaLink="false">http://mettadore.com/?p=420</guid>
		<description><![CDATA[
			
				
			
		
There are plenty of times when I want to grab either one or many random records from a database in Rails. For instance, one random user, one random post, 5 random items, etc. Honestly, it&#8217;s one of those things I do in nearly every app I&#8217;ve written, so a while ago I created a module to add to any ActiveRecord class that gave me one() and some() methods. This way, I can just include Randomizer and have the methods. Everyone probably already has their method&#8211; I actually got this from ...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmettadore.com%2Fruby%2Fquick-random-records-module%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmettadore.com%2Fruby%2Fquick-random-records-module%2F&amp;source=JohnMetta&amp;style=normal&amp;service=bit.ly&amp;hashtags=ActiveRecord,gems,plugins,random,ungems" height="61" width="50" /><br />
			</a>
		</div>
<p>There are plenty of times when I want to grab either one or many random records from a database in Rails. For instance, one random user, one random post, 5 random items, etc. Honestly, it&#8217;s one of those things I do in nearly every app I&#8217;ve written, so a while ago I created a module to add to any ActiveRecord class that gave me one() and some() methods. This way, I can just include Randomizer and have the methods. Everyone probably already has their method&#8211; I actually got this from somewhere else and modified it a bit&#8211; I figured I&#8217;d post mine in case someones searching the innerwebs.<sup><a href="http://mettadore.com/ruby/quick-random-records-module/#footnote_0_420" id="identifier_0_420" class="footnote-link footnote-identifier-link" title="It&amp;#8217;s one of those things that could be in a plugin or gem, but I&amp;#8217;m getting really sick of gems and plugins that carry all the infrastructure to support being gems or plugins when they are really simply a wee bit of code in one small file. Thus, I&amp;#8217;m starting to just publish Gists and add them manually to my lib directory. They&amp;#8217;re not really gems&amp;#8211; they&amp;#8217;re more like ungems. Maybe shards.">1</a></sup></p>
<script src="http://gist.github.com/450723.js"></script>
<ol class="footnotes"><li id="footnote_0_420" class="footnote">It&#8217;s one of those things that could be in a plugin or gem, but I&#8217;m getting really sick of gems and plugins that carry all the infrastructure to support being gems or plugins when they are really simply a wee bit of code in one small file. Thus, I&#8217;m starting to just publish Gists and add them manually to my lib directory. They&#8217;re not really gems&#8211; they&#8217;re more like ungems. Maybe shards.</li></ol><img src="http://mettadore.com/?ak_action=api_record_view&id=420&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/Mettadore/~4/x_tOSBXCGcs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mettadore.com/ruby/quick-random-records-module/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://mettadore.com/ruby/quick-random-records-module/</feedburner:origLink></item>
		<item>
		<title>Secure password generator-as-manager without single-point failure</title>
		<link>http://feedproxy.google.com/~r/Mettadore/~3/y8uDwvaAec0/</link>
		<comments>http://mettadore.com/ruby/secure-password-generator-as-manager-without-single-point-failure/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 00:34:08 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[passfish]]></category>
		<category><![CDATA[password generators]]></category>
		<category><![CDATA[password managers]]></category>
		<category><![CDATA[passwords]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://mettadore.com/?p=412</guid>
		<description><![CDATA[
			
				
			
		
Ahh, security. It&#8217;s it&#8217;s like flossing and using condoms. We all know we should do it but… well, it&#8217;s business time!
We&#8217;ve all got the same issues. &#8220;Use strong passwords!&#8221; which means &#8220;don&#8217;t use just words&#8221; is something we all try to take seriously, but it just ends up being something like &#8220;c00lp455&#8243; with even the most basic cracker program would handle easily&#8211; replacing letters with numbers was maybe a good strategy in 1988, but you might as well just use &#8220;coolpass&#8221; today, because that&#8217;s not any easier than using numbers ...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmettadore.com%2Fruby%2Fsecure-password-generator-as-manager-without-single-point-failure%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmettadore.com%2Fruby%2Fsecure-password-generator-as-manager-without-single-point-failure%2F&amp;source=JohnMetta&amp;style=normal&amp;service=bit.ly&amp;hashtags=passfish,password+generators,password+managers,passwords,security" height="61" width="50" /><br />
			</a>
		</div>
<p>Ahh, security. It&#8217;s it&#8217;s like flossing and using condoms. We all know we <em>should</em> do it but… well, it&#8217;s business time!</p>
<p>We&#8217;ve all got the same issues. &#8220;Use strong passwords!&#8221; which means &#8220;don&#8217;t use just words&#8221; is something we all try to take seriously, but it just ends up being something like &#8220;c00lp455&#8243; with even the most basic cracker program would handle easily&#8211; replacing letters with numbers was maybe a good strategy in 1988, but you might as well just use &#8220;coolpass&#8221; today, because that&#8217;s not any easier than using numbers for any attack.</p>
<p>&#8220;Don&#8217;t use the same password often,&#8221; &#8220;Use passwords with enough entropy (randomness),&#8221; &#8220;Use passwords longer than 8 characters with upper and lower case letters, numbers AND PUNCTUATION!!&#8221;</p>
<p>Whatever.</p>
<p>It basically comes down to this: We all have one password we use for freakin&#8217; everything, and that password is probably something like &#8220;mysillyp455.&#8221;</p>
<p>Sigh.</p>
<p>I&#8217;ve been wanting to get away from this lately, but have been generally disappointed at the options.</p>
<p>There are dozens of password managers out there, and hundreds or thousands of password generators. I have issues with all of them, and recently decided to address them in a bit of a crazy way: By completely re-thinking how I handle passwords.</p>
<h3>Password generators suck</h3>
<p>You know it&#8217;s true. They come up with the most ridiculous passwords that you&#8217;ll ever see. Who the hell is gonna remember &#8217;5+b(*|$1e8+8@&#8217; is their password?</p>
<p>Oh, right you want <em>pronounceable</em> passwords, because &#8216;m4k1tw0rk&#8217; is going to work better than &#8216;makeitwork.&#8217; Right. See above.</p>
<p>I mean, they do their job, sure, but password generators generating random strings are not really very useful to me, because I&#8217;ll never be able to recreate the password, which means I have to write it down somewhere or store it in a password manager…</p>
<h3>Password managers suck</h3>
<p>Yeah, I know, you&#8217;re a dedicated 1password user and you think I&#8217;m an idiot. It&#8217;s a decent solution<sup><a href="http://mettadore.com/ruby/secure-password-generator-as-manager-without-single-point-failure/#footnote_0_412" id="identifier_0_412" class="footnote-link footnote-identifier-link" title="or at least it would be if they&amp;#8217;d make a freakin&amp;#8217; Android app!">1</a></sup> but it, like any manager, still suffers from some serious flaws.</p>
<p>One is, of course, that if you&#8217;re somewhere or somehow don&#8217;t have that manager available, it&#8217;s absolutely impossible to get your password. This has recently happened to me while trying to use an app called LastPass, which generated really nice, ridiculously hard passwords for all kinds of stuff, that I could then never remember and I couldn&#8217;t get later when I screwed up my master password.</p>
<p>Reminder emails galore!</p>
<p>Here&#8217;s another problem: My passwords are stored on somebody else&#8217;s webapp database. Oh, sure, they&#8217;re stored &#8216;securely,&#8217; but how the hell do I know that&#8217;s true (read the TOS people, they limit their liability for a reason).</p>
<p>If the pentagon can get hacked, some 24 year old start-up geek is certainly vulnerable.</p>
<h3>Single points of failure suck</h3>
<p>The biggest things about all of these is the &#8216;single point of failure&#8217; issue. Password managers store passwords in encrypted files, so that&#8217;s nice. But what if someone gets your all important 1password that secures all your other passwords? You are, in a word, <a href="http://en.wikipedia.org/wiki/Fsck">fscked</a>.</p>
<p>So, the basic problem with all of these is that they are not actually as secure as we think, and when they are, they&#8217;re not easy. So we either have secure and hard as hell, or we have easy and fundamentally flawed, right?</p>
<p>Maybe not.</p>
<h3>Password generation <em>as</em> password management</h3>
<p>Okay, no lie, this came to me while somewhat tipsy and pouring down beer at a local pub:</p>
<p>What if your password wasn&#8217;t stored anywhere, ever. What if you could simply have a way to securely <em>recall</em> those ridiculous passwords that generators come up with out of thin air?</p>
<p>Think about it. 5+b(*|$1e8+8@ is probably a pretty damn secure password&#8211; if you used that for anything, you&#8217;d be pretty safe, but you&#8217;d never remember it. But what if that was, in a way, mnemonically generated?</p>
<p>Enter <a href="http://github.com/mettadore/passfish">Passfish</a>.<sup><a href="http://mettadore.com/ruby/secure-password-generator-as-manager-without-single-point-failure/#footnote_1_412" id="identifier_1_412" class="footnote-link footnote-identifier-link" title="Disclaimer: this is a proof of concept. A crazy scheme. It needs work, so I wouldn&amp;#8217;t jump into using it. At least not yet.">2</a></sup></p>
<p>Passfish is a program (actually, it&#8217;s an idea)<sup><a href="http://mettadore.com/ruby/secure-password-generator-as-manager-without-single-point-failure/#footnote_2_412" id="identifier_2_412" class="footnote-link footnote-identifier-link" title="actually-actually, it&amp;#8217;s planned to be an algorithm, but right now it&amp;#8217;s simply a quick hack as a proof of concept">3</a></sup> that generates passwords from the combination of words, a secret key file, and (optionally) name and passphrase parameters. Using this combination of items, Passfish will generate a high entropy password.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ passfish <span style="color: #ff0000;">'name@email.com'</span>
 <span style="color: #000000;">9</span><span style="color: #000000; font-weight: bold;">!</span>b<span style="color: #000000; font-weight: bold;">%</span>e+<span style="color: #000000;">70</span></pre></div></div>

<p>Now, that password is not stored anywhere, not in any encrypted file, nowhere.</p>
<p>Furthermore, if you use the Bash shell&#8217;s ability to ignore certain commands, that won&#8217;t even be in your Bash history. No-one can get it in a file, no-one can see what you&#8217;ve typed. It&#8217;s ephemeral. You call it up, and then it goes away.</p>
<p>But it&#8217;s still insecure as hell, right? I mean, anyone can figure out that name@email.com turns into SOMETHING.</p>
<h3>Generation and modification of hashes on the fly</h3>
<p>Keyfiles solve this. When you have a private keyfile, the string name@email.com is combined with the contents of this file, a hash is generated from that combined string, and the hash is modified in a repeatable way. This means that you can have super simple &#8220;passwords&#8221; (e.g. name@email.com) and even write them down on your forehead, and no-one will be able to generate your actual password without having your same keyfile.</p>
<p>But wait, there&#8217;s more!</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ passfish <span style="color: #ff0000;">'email'</span> <span style="color: #660033;">--name</span> <span style="color: #ff0000;">'work'</span>
<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">|@</span>+<span style="color: #666666; font-style: italic;">#^7b</span>
$ passfish <span style="color: #ff0000;">'email'</span> <span style="color: #660033;">--name</span> <span style="color: #ff0000;">'home'</span>
$1e8+<span style="color: #000000;">8</span><span style="color: #000000; font-weight: bold;">@</span></pre></div></div>

<p>You can specify an additional parameter, a name. This allows you to increase the security because you could have the same &#8220;password&#8221; for multiple accounts. You can also have passphrases:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ passfish <span style="color: #ff0000;">'email'</span> <span style="color: #660033;">--passphrase</span> <span style="color: #ff0000;">'I hate Dirty Dancing!'</span>
$1e8+<span style="color: #000000;">8</span><span style="color: #000000; font-weight: bold;">@</span></pre></div></div>

<p>This allows even more security!</p>
<p>There&#8217;s also a length parameter:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ passfish <span style="color: #ff0000;">'email'</span> <span style="color: #660033;">--name</span> <span style="color: #ff0000;">'work'</span> <span style="color: #660033;">--length</span> <span style="color: #000000;">13</span>
$1e8+<span style="color: #000000;">8</span><span style="color: #000000; font-weight: bold;">@</span>$1e8+<span style="color: #000000;">8</span></pre></div></div>

<h3>Simple mnemonics for complex passwords</h3>
<p>One of the things many people do when thinking of passwords, is create devices that they use in ALL of their passwords. For instance, start with an @ and end with a $, then capitalize the first letter, so a password could be something like &#8216;@Email$&#8217;.</p>
<p>What Passfish allows you to do is to create similar mnemonics, but use them wisely to create <em>truely</em> complex passwords. For instance, it&#8217;s a <em>website</em> that I use at <em>work</em> called &#8220;<em>workstuff.com</em>&#8221;</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ passfish <span style="color: #ff0000;">&quot;workstuff.com&quot;</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;website&quot;</span> <span style="color: #660033;">-p</span> <span style="color: #ff0000;">&quot;at work&quot;</span>
$1e8+<span style="color: #000000;">8</span><span style="color: #000000; font-weight: bold;">@</span></pre></div></div>

<p>Thus, the password is not stored anywhere, but I have an easy way to remember it.</p>
<h3>No single points of failure</h3>
<p>This way, even if someone steals my computer, they can&#8217;t get my passwords unless they have ALL of the following:</p>
<ol>
<li>The password identifier</li>
<li>The understanding that I&#8217;m using some stupid geeks weird Passfish program</li>
<li>Access to my private key file (which could be any file I choose)</li>
<li>Knowledge of the name, passphrase and password length</li>
</ol>
<p>Rather than a single point of failure, there are multiple points for each password, because even if someone got your private key file figured out, they&#8217;d still have to spend considerable time getting each password&#8211; <strong>and access to one password makes it no easier to access another password!</strong> It&#8217;s not an all-or-nothing proposition.</p>
<h3>The Status &amp; Future</h3>
<p>So, what&#8217;s the status? Well, it&#8217;s currently an <a href="http://github.com/mettadore/passfish.git">open source application on Github</a>, and it&#8217;s little more than a proof of concept. All it does now is combine all the parameters together into a string, hash it, and modify the hash. Pretty stupid, I know. (The plan is to do things better, like use the passphrase parameter to strengthen or change the hashing, etc.)</p>
<p>And as for the &#8220;but that&#8217;s stupid and hard&#8221; people, the other plan is to create apps that tie in with this underlying generator for things like Android and LaunchBar. For instance, a LaunchBar plugin that lets you type the identifier, name and passphrase, and then automatically copies the generated password to the clipboard, so that you don&#8217;t have to even see it, much less go to a terminal window to use Passfish.</p>
<p>So, it&#8217;s new, it&#8217;s still pretty dumb, but as a proof of concept, I throw it out there as an idea, knowing that&#8211; because it&#8217;s open source&#8211; any serious vulerabilities or blindspots will be illuminated.</p>
<p>Check it out, fork, modify, correct. Throw me ideas and comments or ignore it altogether.</p>
<ol class="footnotes"><li id="footnote_0_412" class="footnote">or at least it would be if they&#8217;d make a freakin&#8217; Android app!</li><li id="footnote_1_412" class="footnote">Disclaimer: this is a proof of concept. A crazy scheme. It needs work, so I wouldn&#8217;t jump into using it. At least not yet.</li><li id="footnote_2_412" class="footnote">actually-actually, it&#8217;s <em>planned</em> to be an <em>algorithm</em>, but right now it&#8217;s simply a quick hack as a proof of concept</li></ol><img src="http://mettadore.com/?ak_action=api_record_view&id=412&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/Mettadore/~4/y8uDwvaAec0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mettadore.com/ruby/secure-password-generator-as-manager-without-single-point-failure/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://mettadore.com/ruby/secure-password-generator-as-manager-without-single-point-failure/</feedburner:origLink></item>
		<item>
		<title>The @TwitterAPI kids say “size doesn’t matter”</title>
		<link>http://feedproxy.google.com/~r/Mettadore/~3/T_kj8iHh6m4/</link>
		<comments>http://mettadore.com/analysis/the-twitterapi-kids-say-size-doesnt-matter/#comments</comments>
		<pubDate>Wed, 09 Jun 2010 00:30:38 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Miscellany]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[metrics]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[url shortener]]></category>

		<guid isPermaLink="false">http://mettadore.com/?p=406</guid>
		<description><![CDATA[
			
				
			
		
It looks like the folks on the Twitter API team have built their own URL shortener and will soon wrap all URLs to protect against fishing and collect stats:
Additionally, as we mentioned at our Chirp developer conference in  April, if you want to share a link through Twitter, there currently  isn&#8217;t a way to automatically shorten it and we want to fix this. It  should be easy for people to share shortened links from the Tweet box on  Twitter.com.
To meet both of these goals, we&#8217;re taking ...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmettadore.com%2Fanalysis%2Fthe-twitterapi-kids-say-size-doesnt-matter%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmettadore.com%2Fanalysis%2Fthe-twitterapi-kids-say-size-doesnt-matter%2F&amp;source=JohnMetta&amp;style=normal&amp;service=bit.ly&amp;hashtags=API,metrics,Twitter,url+shortener" height="61" width="50" /><br />
			</a>
		</div>
<p>It looks like the folks on the Twitter API team have <a href="http://blog.twitter.com/2010/06/links-and-twitter-length-shouldnt.html">built their own URL shortener</a> and will soon wrap all URLs to protect against fishing and collect stats:</p>
<blockquote><p>Additionally, as we mentioned at our Chirp developer conference in  April, if you want to share a link through Twitter, there currently  isn&#8217;t a way to automatically shorten it and we want to fix this. It  should be easy for people to share shortened links from the Tweet box on  Twitter.com.</p>
<p>To meet both of these goals, we&#8217;re taking small  steps to expand the link service currently available in Direct Messages  to links shared through all Tweets. We&#8217;re testing this link service now  with a few Twitter employee accounts.</p></blockquote>
<p>The title of this post is what I find most interesting: &#8220;Links and Twitter: Length Shouldn&#8217;t Matter.&#8221; It harkens back to the old saying &#8220;it&#8217;s not the size of your wand that counts, it&#8217;s the magic you can perform with it.&#8221;<sup><a href="http://mettadore.com/analysis/the-twitterapi-kids-say-size-doesnt-matter/#footnote_0_406" id="identifier_0_406" class="footnote-link footnote-identifier-link" title="We&amp;#8217;ll leave out the joking about who says that&hellip; but it&amp;#8217;s not my wife!   ">1</a></sup></p>
<p>In this case, it <em>is</em> the magic. I ran a URL shortener for a while, mostly as an experiment, and the thing that makes them great is the stats and pre- and post-processing you can perform on the URLs. They could get those links if they wanted to. Twitter already has every link we send to them in their database&#8211; their  in the status messages after all&#8211; but this is subtly different.</p>
<p>Just like with any URL shortener, someone will hit http://t.co/y4d4 and be instantly redirected to the shortened URL. But prior to that redirect, Twitter can filter phishing attempts or scams (effectively nullifying any attempt). More importantly, hits on that URL will be tracked, just like bit.ly tracks stats on URLs so that you know how many people clicked the link to the latest photo of Sarah Palin in a mini-skirt.</p>
<p>And there&#8217;s the magic.<sup><a href="http://mettadore.com/analysis/the-twitterapi-kids-say-size-doesnt-matter/#footnote_1_406" id="identifier_1_406" class="footnote-link footnote-identifier-link" title="no, not Sarah Palin&amp;#8217;s legs! (though they are&hellip; nevermind) ">2</a></sup></p>
<p>There&#8217;s a lot of data going through Twitter, and building a system that effectively injects links and stats <em>directly</em> into a database is sauce.<sup><a href="http://mettadore.com/analysis/the-twitterapi-kids-say-size-doesnt-matter/#footnote_2_406" id="identifier_2_406" class="footnote-link footnote-identifier-link" title="Spicy sauce, as spicy as Sarah Palin&amp;#8217;s&amp;#8211; nevermind.">3</a></sup> It not only allows them to say &#8220;That&#8217;s a link to a Nigerian phishing scam,&#8221; it allows them to say &#8220;Hey, New York Times, we have a record of 75 thousand visitors per hour to your article on Sarah Palin&#8217;s legs… you wanna talk about a strategic partnership?&#8221;</p>
<p>See? Magic.</p>
<p>Who said Twitter didn&#8217;t have a monetization strategy?</p>
<ol class="footnotes"><li id="footnote_0_406" class="footnote">We&#8217;ll leave out the joking about <em>who</em> says that… but it&#8217;s not <em>my</em> wife! <img src='http://mettadore.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </li><li id="footnote_1_406" class="footnote">no, not Sarah Palin&#8217;s legs! (though they are… nevermind) </li><li id="footnote_2_406" class="footnote">Spicy sauce, as spicy as Sarah Palin&#8217;s&#8211; nevermind.</li></ol><img src="http://mettadore.com/?ak_action=api_record_view&id=406&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/Mettadore/~4/T_kj8iHh6m4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mettadore.com/analysis/the-twitterapi-kids-say-size-doesnt-matter/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://mettadore.com/analysis/the-twitterapi-kids-say-size-doesnt-matter/</feedburner:origLink></item>
		<item>
		<title>Placeholder text with flair! Introducing The Kwisatz Haderach</title>
		<link>http://feedproxy.google.com/~r/Mettadore/~3/WAz_dY0ZWFI/</link>
		<comments>http://mettadore.com/ruby/placeholder-text-with-flair-introducing-the-kwisatz-haderach/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 18:54:58 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Miscellany]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Dune]]></category>
		<category><![CDATA[lorem ipsum]]></category>
		<category><![CDATA[placeholder]]></category>

		<guid isPermaLink="false">http://mettadore.com/?p=399</guid>
		<description><![CDATA[
			
				
			
		
It&#8217;s pretty silly, and wasted more time than I needed to, but I&#8217;m really very incredibly &#8220;oh my god I&#8217;m so sick of this I could puke&#8221; bored with Lorem Ipsum text. You know what I&#8217;m talking about, that placeholder text you use when you just need to fill a paragraph with something, and don&#8217;t feel like typing shaesthstnsahoestha?
This:
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod  tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim  veniam, quis nostrud exercitation ullamco laboris nisi ...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmettadore.com%2Fruby%2Fplaceholder-text-with-flair-introducing-the-kwisatz-haderach%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmettadore.com%2Fruby%2Fplaceholder-text-with-flair-introducing-the-kwisatz-haderach%2F&amp;source=JohnMetta&amp;style=normal&amp;service=bit.ly&amp;hashtags=Dune,lorem+ipsum,placeholder" height="61" width="50" /><br />
			</a>
		</div>
<p>It&#8217;s pretty silly, and wasted more time than I needed to, but I&#8217;m really very incredibly &#8220;oh my god I&#8217;m so sick of this I could puke&#8221; bored with <a href="http://en.wikipedia.org/wiki/lorem_ipsum">Lorem Ipsum</a> text. You know what I&#8217;m talking about, that placeholder text you use when you just need to fill a paragraph with something, and don&#8217;t feel like typing shaesthstnsahoestha?</p>
<p>This:</p>
<blockquote><p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod  tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim  veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea  commodo consequat.</p></blockquote>
<p>It&#8217;s a damn useful thing to developers and programmers, but it&#8217;s just so freakin boring!</p>
<p>Well, recently I was reading (for about the 7th time) the Dune series and saw words like Jacurutu and Muad&#8217;dib and thought &#8220;That would make fun Lorem Ipsum text.&#8221; Then, because Ruby and Rails makes building a web application about as easy as making a peanut butter and jelly sandwich, I got to work.</p>
<h3>Kwisatz Haderach</h3>
<p>Instead of Lorem Ipsum, I created <a href="http://kwisatz.hadera.ch">Kwisatz Haderach</a>.<sup><a href="http://mettadore.com/ruby/placeholder-text-with-flair-introducing-the-kwisatz-haderach/#footnote_0_399" id="identifier_0_399" class="footnote-link footnote-identifier-link" title="for those who don&amp;#8217;t know Dune, here&amp;#8217;s a reference.">1</a></sup> Unbelievably, the domain hadera.ch was free, which is cool, because with a subdomain it becomes <a href="http://kwisatz.hadera.ch">http://kwisatz.hadera.ch</a>.</p>
<p>Instead of random latin-looking text that doesn&#8217;t mean anything, the site generates paragraphs of text from words in various Science Fiction and Fantasy universes. Here&#8217;s a sample pulling from the Dune and Doctor Who universes:</p>
<blockquote><p>Suk 		 			hajra 		 			Bela Tegeuse 		 			liban 		 			maula 		 			TARDIS 		 			Tabr 		 			Harkonnen 		 			plasteel 		 			butlerian 		 			suk sadus crysknife 		 			fai 		 			caid 		 			Poritrin 		 			gom jabbar dalek		 			Faufreluches 		 			crysknife 		 			sirat 		 			baradye. Minimic Film Palimbasha Arrakeen Irulan Panoplia Propheticus kitab al-ibar wali kulon Lankiveil Alia Muad&#8217;dib.</p></blockquote>
<h3>Nothing Special</h3>
<p>It&#8217;s nothing spectacular, barely worthy even of a blog post. It&#8217;s nothing that an experienced Rails developer couldn&#8217;t do in about 30 minutes, and a novice Rails developer in about 2 hours.</p>
<p>But it&#8217;s one of those cool ideas that you think about, and might never get around to actually building. It&#8217;s just for fun. Much more fun than stupid Lorem Ipsum.</p>
<p>So go <a href="http://kwisatz.hadera.ch">check it out</a>, and if you want to, you can <a href="http://kwisatz.hadera.ch/wordlist">throw together a quick wordlist</a> for a universe of your choosing. Some great ones to have would be Harry Potter, Star Wars, Star Trek, even things like Fraggle Rock. Wikipedia even has a great <a href="http://en.wikipedia.org/wiki/List_of_fictional_universes">List of Fictional Universes</a><sup><a href="http://mettadore.com/ruby/placeholder-text-with-flair-introducing-the-kwisatz-haderach/#footnote_1_399" id="identifier_1_399" class="footnote-link footnote-identifier-link" title="Thanks to @wajiii for that pointer!">2</a></sup> if you want to see some fun ones you may have forgotten about.</p>
<ol class="footnotes"><li id="footnote_0_399" class="footnote">for those who don&#8217;t know Dune, here&#8217;s a <a href="http://en.wikipedia.org/wiki/Kwisatz_Haderach">reference</a>.</li><li id="footnote_1_399" class="footnote">Thanks to <a href="http://twitter.com/wajiii">@wajiii</a> for that pointer!</li></ol><img src="http://mettadore.com/?ak_action=api_record_view&id=399&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/Mettadore/~4/WAz_dY0ZWFI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mettadore.com/ruby/placeholder-text-with-flair-introducing-the-kwisatz-haderach/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://mettadore.com/ruby/placeholder-text-with-flair-introducing-the-kwisatz-haderach/</feedburner:origLink></item>
		<item>
		<title>4th, 4, and 5: Why I Don’t Start At The Front</title>
		<link>http://feedproxy.google.com/~r/Mettadore/~3/sL2LbAvp6FY/</link>
		<comments>http://mettadore.com/analysis/4th-4-and-5-why-i-dont-start-at-the-front/#comments</comments>
		<pubDate>Sun, 28 Mar 2010 22:53:22 +0000</pubDate>
		<dc:creator>John</dc:creator>
				<category><![CDATA[Miscellany]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[workflow]]></category>

		<guid isPermaLink="false">http://mettadore.com/?p=395</guid>
		<description><![CDATA[
			
				
			
		
This post is mostly a whiny diatribe on how I&#8217;m a stupid idiot.
Mostly, when I code, I focus on logic: algorithms, object models and other back-end stuff. All the stuff that&#8217;s hard and doesn&#8217;t give any sort of gratification to the front-end developers or users because, well, it&#8217;s not on the front-end. The stuff I like to code are the elegant binary-keyed dictionary structures that route water in multiple simultaneous directions in a hydrologic model. It&#8217;s the stuff no-one sees.
Consequently, because I hate the design side,1 my apps generally look ...]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fmettadore.com%2Fanalysis%2F4th-4-and-5-why-i-dont-start-at-the-front%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fmettadore.com%2Fanalysis%2F4th-4-and-5-why-i-dont-start-at-the-front%2F&amp;source=JohnMetta&amp;style=normal&amp;service=bit.ly&amp;hashtags=design,rails,workflow" height="61" width="50" /><br />
			</a>
		</div>
<p>This post is mostly a whiny diatribe on how I&#8217;m a stupid idiot.</p>
<p>Mostly, when I code, I focus on logic: algorithms, object models and other back-end stuff. All the stuff that&#8217;s hard and doesn&#8217;t give any sort of gratification to the front-end developers or users because, well, it&#8217;s not on the front-end. The stuff I like to code are the elegant binary-keyed dictionary structures that route water in multiple simultaneous directions in a hydrologic model. It&#8217;s the stuff no-one sees.</p>
<p>Consequently, because I hate the design side,<sup><a href="http://mettadore.com/analysis/4th-4-and-5-why-i-dont-start-at-the-front/#footnote_0_395" id="identifier_0_395" class="footnote-link footnote-identifier-link" title="I don&amp;#8217;t actually hate it. I just take 7 hours playing around with 2 px changes in CSS files and then finally give up">1</a></sup> my apps generally look extremely rough, almost unusable, but <em>damn</em> do they do some cool shit. If it&#8217;s something that needs a front-end, I either do that last, or get the back-end working and then ship it out.</p>
<p>Recently, I took on a project for a fellow who&#8217;d been working for months with a developer. I pretty much thought I was going to &#8220;parachute in&#8221; and take this developer&#8217;s code and bring it to launch. Well, it turned out that the previous developer didn&#8217;t actually write <em>any</em> code. None. Zip. Instead, what they did was create long &#8220;what we should do&#8221; lists and emails.</p>
<p>And, they got a design.</p>
<p>So, the &#8220;code&#8221; I was given was not code at all. Rather, it was a really nice design from a third-party designer. Thus, rather than build the back-end to the site, I had a design that I just had to plug into. I decided to break up that design into views and plug them into my new Rails app directory before I started build models.</p>
<p>This, as it turns out, was a very serious mistake.</p>
<p>Because it seems that I have a certain workflow, and that workflow is to develop an object model based on the logic that is needed, and that logic is based on the function that the application is to perform. That&#8217;s why I work so well on the backend without a design. The bare scaffolding allows me to think about the <em>object</em> and not the <em>layout</em>.</p>
<p>In this case, I made the mistake of applying this design before creating even my first model. That was bad. Very bad.</p>
<p>The thing is, designs have all kinds of embedded assumptions. Usually, when the design is based on the logic, the assumption is &#8220;it has to provide an interface for this logic.&#8221; However, when the design is created in absence of the logic, then the assumption is something more along the lines of &#8220;well, hell, I guess it might need one of these.&#8221;</p>
<p>I didn&#8217;t ever realize it until very recently, but I now know that what I was doing was some weird, disconnected hybrid of design reasoning. It was something between &#8220;This is the most robust-yet-simple object model that I can start with and build from&#8221; and &#8220;well, the design says it has an X button, so I guess I&#8217;d better build an X model.&#8221;</p>
<p>Yeah, I know it&#8217;s stupid. The thing was, it all happened so subtly that I didn&#8217;t even realize it! I guess that, in other projects, by time the design is applied, the object model is solidified. Thus, if there&#8217;s a button, you can be damn sure it needs to be hooked up. In this case, there are buttons that pretty much everyone sees and thinks &#8220;Yeah, I don&#8217;t know why that&#8217;s there.&#8221;</p>
<p>So, today I was trying to work around 7 polymorphic models and at the same time I was thinking &#8220;this would be easier if I didn&#8217;t have to scroll past all the glitzy site images to see this whenever I look at it.&#8221;</p>
<p>That was when it hit me. I don&#8217;t. And more than that, the 7 polymorphic models I have are really only there because there&#8217;s this navigation bar, immediately above the glitzy site images, that says they should be.</p>
<p>So, believe it or not, I did the crazy thing. New repository, new Rails scaffold. Start over.</p>
<p>So now, it&#8217;s 4th down in the 4th quarter, there&#8217;s like 5 minutes to play until this prototype is due, and I&#8217;m dropping back to punt with a new Rails app that doesn&#8217;t have a design applied.</p>
<p>And I&#8217;m hopeful, because it&#8217;s actually a fairly simple app, just with a complicated design. But as a simple app, I know it&#8217;ll be simple for me to whip out, now that I have a clean understanding of the object model, and no design cluttering my thoughts.</p>
<p>Damn, it&#8217;s late in the game to come to this play, but at least I know better now.</p>
<ol class="footnotes"><li id="footnote_0_395" class="footnote">I don&#8217;t actually hate it. I just take 7 hours playing around with 2 px changes in CSS files and then finally give up</li></ol><img src="http://mettadore.com/?ak_action=api_record_view&id=395&type=feed" alt="" /><img src="http://feeds.feedburner.com/~r/Mettadore/~4/sL2LbAvp6FY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://mettadore.com/analysis/4th-4-and-5-why-i-dont-start-at-the-front/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://mettadore.com/analysis/4th-4-and-5-why-i-dont-start-at-the-front/</feedburner:origLink></item>
	</channel>
</rss>
