<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Planetaki Planet Ruby on Rails</title>
  <link rel="alternate" href="http://www.planetaki.com/ror"/>
  <updated>2008-05-28T09:16:25+01:00</updated>
  <id>planetaki.com:905</id>
  <author>
    <name>Planetaki - Planet Ruby on Rails</name>
    <email>hello@planetaki.com</email>
  </author>
  <entry>
    <title>#322 RABL</title>
    <updated>2012-02-09T05:32:10Z</updated>
    <published>2012-02-08T08:00:00Z</published>
    <id>planetaki.com:905:post:184480763</id>
    <link rel="alternate" href="http://railscasts.com/episodes/322-rabl"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/184480763"/>
    <content type="html">RABL - Ruby API Builder Language - provides a DSL for generating JSON or XML responses in a Ruby application. Learn how to share and configure complex JSON data in this episode.</content>
    <source>
      <id>rabl</id>
      <link rel="alternate" href="http://railscasts.com/episodes/322-rabl"/>
      <title>#322 RABL</title>
      <updated>2012-02-09T05:32:10Z</updated>
    </source>
  </entry>
  <entry>
    <title>How to (REALLY) Run Your Biz While Traveling the World &amp;amp; Not Go Broke or Crazy</title>
    <updated>2012-02-05T11:42:16Z</updated>
    <published>2012-02-05T07:21:55Z</published>
    <id>planetaki.com:905:post:183764546</id>
    <link rel="alternate" href="http://feedproxy.google.com/~r/slash7/rss/~3/fHx9cu8CJPU/"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/183764546"/>
    <summary type="html">&lt;p&gt;&lt;img src="http://farm8.staticflickr.com/7148/6792245007_c8b8b671f6.jpg" onload="resizeImage(this)"&gt;&lt;/p&gt;&lt;p&gt;If you &lt;a href="http://twitter.com/amyhoy" rel="nofollow" target="_blank"&gt;follow me on Twitter&lt;/a&gt;, then you know where I am right now: New Zealand. For a month.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;&lt;img src="http://farm8.staticflickr.com/7148/6792245007_c8b8b671f6.jpg" onload="resizeImage(this)"&gt;&lt;/p&gt;

&lt;p&gt;If you &lt;a href="http://twitter.com/amyhoy" rel="nofollow" target="_blank"&gt;follow me on Twitter&lt;/a&gt;, then you know where I am right now: New Zealand. For a month.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Yep, that&amp;rsquo;s me, obnoxiously tweeting pictures of the creamy white sand and dreamy turquoise ocean. And the &lt;a href="http://www.flickr.com/photos/spiffariffic/6821175863/in/photostream" rel="nofollow" target="_blank"&gt;regrettable novelty taxidermy&lt;/a&gt;.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It all sounds pretty exotic (and it is). But for me &amp;amp; &lt;a href="http://mir.aculo.us" rel="nofollow" target="_blank"&gt;my partner in crime&lt;/a&gt; (and biz), it&amp;rsquo;s a kind of normal. We travel a lot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There have been years where we literally spent spent half the year abroad.  At this point, it&amp;rsquo;s old hat.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This isn&amp;rsquo;t even our longest trip &amp;mdash; no, that honor goes to a 2.5-month around-the-world &amp;ldquo;workcation,&amp;rdquo; a genuine circumnavigation of the globe including one 36-hour travel day with two back-to-back 12-hour flights, over 12 domestic and 4 international flights, 6 weeks of road tripping, 5 major cities on 2 continents, 2 conferences we worked (1 training/presenting, 1 running an exhibit), 1 major new project from scratch, and 3 seasons.&lt;/p&gt;

&lt;p&gt;(Ahh, the trip that nearly killed us!)&lt;/p&gt;

&lt;p&gt;So I think it&amp;rsquo;s safe to say that I&amp;rsquo;ve learned just about everything there is to know about traveling while running a business. The hard way, of course.&lt;/p&gt;

&lt;p&gt;And it&amp;rsquo;s not what you think.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;h1&gt;The Heartbreaking Myth of the Workcation&lt;/h1&gt;

&lt;p&gt;I do so love a good portmanteau and &amp;ldquo;workcation&amp;rdquo; is a great one. It means a &amp;ldquo;working vacation&amp;rdquo; &amp;mdash; also known as the juicy dream of enjoying the beach while working on it, Pi&amp;ntilde;a Colada in hand, complete with umbrella.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm8.staticflickr.com/7165/6821070467_466638732c.jpg" height="375" width="281" style="padding:15px; background: white; border: 0px;" align="right" onload="resizeImage(this)"&gt;&lt;/p&gt;

&lt;p&gt;Also known as &amp;ldquo;rarer than unicorn tears and twice as hard to come by.&amp;rdquo;&lt;/p&gt;

&lt;p&gt;The problem is this: working requires great attention. So does being present on that beautiful beach.&lt;/p&gt;

&lt;p&gt;If you&amp;rsquo;re any good at what you do &amp;mdash; and you are, &lt;em&gt;right??&lt;/em&gt; &amp;mdash; then you know what it&amp;rsquo;s like to really get shit done. You sit at the computer, and it sucks you in. You may nominally exist in your physical body, but your brain and your senses are somewhere else&amp;hellip;  in The Land Inside the Screen. Workland.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And when you&amp;rsquo;re in Workland, you can&amp;rsquo;t truly be in Beachland.&lt;/strong&gt; You can work in Workland and commute to Beachland at night, but you can&amp;rsquo;t bi-locate. Physical impossibility and all that. Sorry.&lt;/p&gt;

&lt;p&gt;The good news, such as it is? Working on the beach actually sucks. Even before you consider the sand-in-the-keys-underwear-and-nostrils factor.&lt;/p&gt;

&lt;p&gt;The net result is this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;when you&amp;rsquo;re focused on working, you might as well be in a room with no view, and &lt;/li&gt;
&lt;li&gt;when you&amp;rsquo;re not working (and you are enjoying that beach), there&amp;rsquo;s that little nagging thought in the back of your head that you should be working &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;It&amp;rsquo;s actually a subtle form of torture. Whatever joy you might have extracted from working on the beach was always, and would ever be, a fantasy.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm8.staticflickr.com/7035/6792236517_e59d42d3fa.jpg" onload="resizeImage(this)"&gt;&lt;/p&gt;

&lt;p&gt;But you don&amp;rsquo;t have to take my word for it. Try it yourself, and you&amp;rsquo;ll find that that:&lt;/p&gt;

&lt;p&gt;You&amp;rsquo;ll return from your trip feeling like you never were really, 100% there.&lt;/p&gt;

&lt;p&gt;Or you&amp;rsquo;ll have achieved just barely a fraction of what you planned to, with all the guilt &amp;amp; self-recrimination that comes with.&lt;/p&gt;

&lt;p&gt;Take your pick. Which will it be?&lt;/p&gt;

&lt;h2&gt;Take the Green Pill: the Hidden Option C&lt;/h2&gt;

&lt;p&gt;Or choose the hidden option C: dump Fantasy by the roadside for being incorporeal and utterly unreasonable&amp;hellip; and beg Reality to come home and bitchslap you with her wisdom, the harsh but steady mistress she is.&lt;/p&gt;

&lt;p&gt;Without further ado, here&amp;rsquo;s how to best long-term travel instead of allowing it to best you:&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;h1&gt;Travel Like a Snail: Stay Put for Several Days&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Stay in a location least 3 days if you want to get solid work done.&lt;/strong&gt; Yes, really. Three days &lt;em&gt;minimum&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Constant moving around&amp;nbsp;is a huge drain on your mental &amp;amp; physical resources. It&amp;rsquo;s also the dread enemy of routine (and routine is necessary for flow).
&lt;img src="http://farm8.staticflickr.com/7021/6821074809_fe08d3f6fc.jpg" style="padding: 15px;" width="350" height="263" align="right" onload="resizeImage(this)"&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&amp;ldquo;But I&amp;rsquo;ve gone on vacation and slept in a different bed every night and that didn&amp;rsquo;t tire &lt;strong&gt;me&lt;/strong&gt; out!&amp;rdquo;&lt;/em&gt; I hear you cry.&lt;/p&gt;

&lt;p&gt;Yes, of course you did. So had I. Long, around-the-world trips aren&amp;rsquo;t just short trips plus extra days&amp;hellip; they&amp;rsquo;re different. Long-term travel has a lot of emergent properties, and the exhaustion of constant motion is one of them.&lt;/p&gt;

&lt;p&gt;Travel for 3+ weeks while trying to get shit done, and you&amp;rsquo;ll soon find out for yourself. You need that time to catch your breath, adjust, to create what little routine and ritual you can.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So give up whirlwind tours and adopt a more stately pace.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you stay in a place for a while, you also get the benefit of enjoying it when you&amp;rsquo;re not trying to work. You don&amp;rsquo;t end up feeling like you missed out because you had to do some email. (And you get to develop a deeper understanding &amp;amp; enjoyment of it, which is the stuff long-term travel is made of.)&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;h1&gt;Segregate Work / Fun Times with an Iron Fist&lt;/h1&gt;

&lt;p&gt;You probably love your work. That&amp;rsquo;s why you started your own business in the first place, right? Me, I&amp;rsquo;m a workaholic. There&amp;rsquo;s little I&amp;rsquo;d rather think about or do. I love my work.&lt;/p&gt;

&lt;p&gt;But even so, I love a good vacation. And so do you.&lt;/p&gt;

&lt;p&gt;There&amp;rsquo;s a very special frisson you get from saying  &amp;ldquo;fuck it, I&amp;rsquo;m on the beach!&amp;rdquo; Deactivate global roaming, forget what&amp;rsquo;s on Twitter, leave your inbox to handle itself for a few days, and get gone. &amp;ldquo;Fuck it!&amp;rdquo; is the alluring bumpersticker of freedom.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This is the irresistible urge you have to conquer if you want to have a successful work-around-the-world experience.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It&amp;rsquo;s great to let loose and take a break for a few days. But if you plan to work, and you say &amp;ldquo;fuck it, I&amp;rsquo;m on the beach!&amp;rdquo; &amp;mdash; where will your business be?&lt;/p&gt;

&lt;p&gt;Then again, if you never get to say &amp;ldquo;fuck it, I&amp;rsquo;m on the beach!&amp;rdquo; &amp;mdash; what&amp;rsquo;s the point of going on a trip in the first place?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The trick is to give yourself both experiences:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plan to work every 2nd, 3rd or 4th day. Then work &lt;em&gt;all&lt;/em&gt; day.&lt;/strong&gt; You know as well as I that when you work for just an hour or two, you can&amp;rsquo;t even escape the gravitational pull of Shit That Piled Up, much less Do New Stuff.&lt;/p&gt;

&lt;p&gt;The solution is to work all day. But not every day. Otherwise, where&amp;rsquo;s the fun?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On the days you don&amp;rsquo;t plan to work&amp;hellip; &lt;em&gt;don&amp;rsquo;t work&lt;/em&gt;.&lt;/strong&gt; Don&amp;rsquo;t check your email just for 5 minutes. Don&amp;rsquo;t do any &amp;ldquo;fun&amp;rdquo; internet stuff that resembles or leads to work &lt;em&gt;*cough*Twitter*cough*&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm8.staticflickr.com/7031/6821068909_0df9600e5b.jpg" width="300" height="300" align="left" style="padding: 15px;" onload="resizeImage(this)"&gt;&lt;/p&gt;

&lt;p&gt;You may &lt;em&gt;think&lt;/em&gt; there are alternatives. I ask you: are you, in fact, superhuman? No? Then there really aren&amp;rsquo;t alternatives.&lt;/p&gt;

&lt;p&gt;Here are two strategies which I&amp;rsquo;ve tried, and which I&amp;rsquo;ve seen others try. They always fail:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Myth:&lt;/strong&gt; I&amp;rsquo;ll just do a little work in the morning and then we&amp;rsquo;ll enjoy the rest of the day!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reality:&lt;/strong&gt; It&amp;rsquo;s 1pm and you&amp;rsquo;re still doing email.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Myth:&lt;/strong&gt; I ought to get that done&amp;hellip; but it&amp;rsquo;s sunny out and the beach/markets/mountains/4&amp;times;4 adventure is calling. I&amp;rsquo;ll do it when we get back. Before/after dinner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reality&lt;/strong&gt;: You have fun. You end up going to a bar or restaurant with your friends/loved ones/new acquaintances you picked up on the side of the road. You tell yourself, &amp;ldquo;I WILL get that work done later.&amp;rdquo; But when you get back to your hotel/motel/yurt, you don&amp;rsquo;t want your yay-I&amp;rsquo;m-on-vacation feelings to end. You want to bask. Or you&amp;rsquo;re exhausted in that very special, luxuriating-in-a-day&amp;rsquo;s-adventure way. Either way, shit does not get done. Then you feel guilty. Which sucks the enjoyment out of, well, your enjoyment.&lt;/p&gt;

&lt;p&gt;You could, of course, maintain regular working hours and only &amp;ldquo;vacate&amp;rdquo; in the evenings. Like you had a job. But where&amp;rsquo;s the fun in that? You&amp;rsquo;re the boss. With great power comes a great ability to say &amp;ldquo;fuck it!&amp;rdquo; (Sorry, Peter Parker.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Much better to keep your work/fun totally separate&lt;/strong&gt; &amp;mdash; since they can&amp;rsquo;t really be together, anyway &amp;mdash; and to devote a full day to each, to wring the last drop of enjoyment, or last drop of focus, out of each and every day.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;h1&gt;Hoard Executive Function As If Your Life Depended On It&lt;/h1&gt;

&lt;p&gt;Because it does.&lt;/p&gt;

&lt;p&gt;Every little decision you make drains your Executive Function, that part of your brain that helps you make good choices and exert self-control. Research shows that simply walking down a city street with lots of visual stimuli cuts your self-control to pieces.&lt;/p&gt;

&lt;p&gt;Executive Function is the thing you rely on to help you crack open your laptop when you&amp;rsquo;d much rather be dirt-biking or learning all the different ways to say &amp;ldquo;I&amp;rsquo;m drunk&amp;rdquo; in the local language. And the thing that prevents you from telling an irritating customer &amp;ldquo;fuck it, I&amp;rsquo;m on the beach!&amp;rdquo;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In short: You need spare Executive Function. Badly. And traveling is the equivalent of pouring your Executive Function out on the concrete and lighting it on fire.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;How many decisions to you have to make when you travel? Let&amp;rsquo;s see&amp;hellip;&lt;/p&gt;

&lt;p&gt;Where do we go next? When do we have to leave to get there in time? Should we trust the GPS or break out the map? Should we take the cheaper room in the nicer motel, or the less fancy more expensive room with the jacuzzi tub? Should we take the scenic route or the direct route? Which suitcase should I put this in? Where should we eat for dinner? Should I have the burger with the egg, beet root, onion rings, hash brown, and pickles, or without the pickles? Is this taxi safe? How much do I tip? What do I enter as the code in the motel room safe? Should we buy tickets just for the liliputbahn, or the combo ticket with the beer garden musuem? How many Mai Tais can I drink before walking back becomes a hazard? And where are we staying, again?&lt;/p&gt;

&lt;p&gt;Shit, just &lt;em&gt;writing&lt;/em&gt; that paragraph made me unable to resist the urge to eat a donut. Luckily there aren&amp;rsquo;t any in arm&amp;rsquo;s reach.&lt;/p&gt;

&lt;p&gt;Since Executive Function is so critical, and long-term travel seems designed to piss it away, you have to take action.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm8.staticflickr.com/7172/6821177149_acd1e46ee2.jpg" style="padding:5px;" onload="resizeImage(this)"&gt;&lt;br&gt;&lt;span style="font-size: 11px; font-style: italic;"&gt;Nothing quite as fun as a foreign grocery store&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Save Executive Function by streamlining, simplifying, and deciding in advance.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Eat &amp;amp; live simply.&lt;/strong&gt; Give up the idea that you have to eat at a different restaurant every time you go out. Rent rooms with kitchenettes, shop at the grocery store, and cook and eat at &amp;ldquo;home.&amp;rdquo; (This also saves gobs of money and is infinitely healthier.) (Plus you get to experience things &amp;lsquo;like a local&amp;rsquo; which is always fun &lt;em&gt;and&lt;/em&gt; illuminating.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stay in the one place for a while.&lt;/strong&gt; (Gee, that sounds familiar.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Book attractions and places to stay in advance&lt;/strong&gt;  &amp;mdash; or if you prefer to live fast &amp;amp; loose, settle on a max 2 or 3 possibilities in most places you will visit. Front-load your Rough Guide-reading, Tripadvisor-surfing and motel-benefit-weighing to save yourself hours of thinking and sheer buckets of Executive Function on the day of.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Drive a car instead of taking trains and buses everywhere.&lt;/strong&gt; Again with the saving buckets of Executive Function by avoiding all the repacking, shuffling, stations, tickets, time tables.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm8.staticflickr.com/7157/6821054649_db3ae76053_m.jpg" align="right" style="padding: 15px; background: white; border: 0px;" onload="resizeImage(this)"&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Develop a system for rolling in &amp;amp; out: Always pack things in the same bag, in the same place.&lt;/strong&gt; Have separate zipper or velcro bags for things like &amp;ldquo;all electronics cables&amp;rdquo; and &amp;ldquo;all bathroom products&amp;rdquo; and &amp;ldquo;all receipts/paperwork&amp;rdquo;. Have a checklist for things you can&amp;rsquo;t stand to lose. For things you are likely to lose because they blend into the room (e.g. a pillow), choose a bright color or otherwise make them stand out. When you travel with a companion, divvy up responsibilities so there&amp;rsquo;s no &amp;ldquo;Did I pack it? I thought YOU packed it&amp;rdquo; fiascos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Plan your next bit of work in advance, so you&amp;rsquo;re always ready to dive in&lt;/strong&gt;. This will save you &amp;ldquo;set up and break down&amp;rdquo; time when it comes to starting work, and will help you make the most of surprise grey, nasty days when you don&amp;rsquo;t particularly want to be outside.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pay out the nose, if necessary, for a prepaid wireless cellular modem&lt;/strong&gt; instead of always hunting around for a cafe, restaurant, or motel with decent wifi. In some countries, this time-consuming hunt can waste &lt;em&gt;days&lt;/em&gt; of your trip in total.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Always arrive in the city the day before your flight/train/bus/llama caravan.&lt;/strong&gt; Even if your departure is late in the evening. This will guard you against so much last-minute panic.&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;/p&gt;

&lt;h1&gt;Finally: Enjoy the Hell Out of Your Trip&lt;/h1&gt;

&lt;p&gt;Yes, that&amp;rsquo;s a step!&lt;/p&gt;

&lt;p&gt;I know that right about now, the romantic in you is screaming, &lt;em&gt;&amp;ldquo;But&amp;hellip; where&amp;rsquo;s the magic?!&amp;rdquo;&lt;/em&gt; A lot of these fixes, habits, and tips are, well&amp;hellip; not romantic or magical at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Staying in one place? Working all day? Eating at home? Cutting your decisions? Driving a car?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src="http://farm8.staticflickr.com/7145/6821087463_9fd1cd18ba.jpg" height="300" width="300" align="right" style="padding: 15px; background: white; border: 0px;" onload="resizeImage(this)"&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are these the ingredients for a rip roaring good time??&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In a very real way, yes.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m not giving you this advice because I&amp;rsquo;m a boring old dried up travel-hater who loves to stab dreams in the eye til they bleed rainbows and glitter. (I love travel! And hate being bled on by dreams. Glitter is so hard to wash out.)&lt;/p&gt;

&lt;p&gt;No, I&amp;rsquo;m simply telling you what I wish someone had told me before I thoroughly botched several very expensive, could-have-been-lifechangingly-awesome trips. And futzed up my business while doing so.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The ideal case is to not work &lt;em&gt;at all&lt;/em&gt; on a long trip.&lt;/strong&gt; That&amp;rsquo;s more achievable than you might think, but not always possible. (And that&amp;rsquo;s another essay in the works.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But if you have to work, my advice will help you get good work done and enjoy your trip.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Follow my prescription, and you won&amp;rsquo;t find yourself home once more, saddled with that pitiful feeling that &amp;ldquo;you were never really there.&amp;rdquo; Nor will your business fall apart while you&amp;rsquo;re gone because you can&amp;rsquo;t seem to get anything done.&lt;/p&gt;

&lt;p&gt;And&amp;hellip; that&amp;rsquo;s it for now. Travel well!&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Want more unicorn-free advice about traveling&amp;rsquo; around the world while running your biz? &lt;a href="http://unicornfree.com/subscribe" rel="nofollow" target="_blank"&gt;Get my future posts by email&lt;/a&gt; (for free!) and &lt;a href="http://twitter.com/amyhoy" rel="nofollow" target="_blank"&gt;follow me on Twitter&lt;/a&gt;, cuz I&amp;rsquo;ve got more posts planned: how to prepare your biz for your trip, what to buy, sign up for, or cancel before you go, and how to deal with the whole &amp;ldquo;money&amp;rdquo; situation (traveling around the world gets expensive!). Seeya on the flip side!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Related posts:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href="http://unicornfree.com/2011/dont-let-the-bastards-grind-you-down/" rel="nofollow" title="Dear Startup World: Chill the Fuck Out" target="_blank"&gt;Dear Startup World: Chill the Fuck Out&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/unicornfree/~4/1bFcZa72Qak" height="1" width="1" onload="resizeImage(this)"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slash7/rss?a=fHx9cu8CJPU:XsNE2MwzdEk:yIl2AUoC8zA" rel="nofollow" target="_blank"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slash7/rss?d=yIl2AUoC8zA" border="0" onload="resizeImage(this)"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slash7/rss?a=fHx9cu8CJPU:XsNE2MwzdEk:7Q72WNTAKBA" rel="nofollow" target="_blank"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slash7/rss?d=7Q72WNTAKBA" border="0" onload="resizeImage(this)"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/slash7/rss/~4/fHx9cu8CJPU" height="1" width="1" onload="resizeImage(this)"&gt;</content>
    <source>
      <id>http://unicornfree.com/?p=1531</id>
      <link rel="alternate" href="http://feedproxy.google.com/~r/slash7/rss/~3/fHx9cu8CJPU/"/>
      <title>How to (REALLY) Run Your Biz While Traveling the World &amp;amp; Not Go Broke or Crazy</title>
      <updated>2012-02-05T11:42:16Z</updated>
    </source>
  </entry>
  <entry>
    <title>#320 Jbuilder</title>
    <updated>2012-01-31T11:41:39Z</updated>
    <published>2012-01-30T08:00:00Z</published>
    <id>planetaki.com:905:post:182820511</id>
    <link rel="alternate" href="http://railscasts.com/episodes/320-jbuilder"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/182820511"/>
    <content type="html">Jbuilder provides a DSL for generating JSON. It includes a template engine which allows you to create complex responses with helpers and conditions.</content>
    <source>
      <id>jbuilder</id>
      <link rel="alternate" href="http://railscasts.com/episodes/320-jbuilder"/>
      <title>#320 Jbuilder</title>
      <updated>2012-01-31T11:41:39Z</updated>
    </source>
  </entry>
  <entry>
    <title>Rails 3.2.1 has been released</title>
    <updated>2012-01-27T05:01:02Z</updated>
    <published>2012-01-26T23:32:00Z</published>
    <id>planetaki.com:905:post:182111945</id>
    <link rel="alternate" href="http://weblog.rubyonrails.org/2012/1/26/rails-3-2-1-has-been-released"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/182111945"/>
    <content type="html">&lt;p&gt;Rails 3.2.1 is out, with some fixes and doc improvements. Please check the &lt;a href="https://gist.github.com/1685812" rel="nofollow" target="_blank"&gt;CHANGELOGs gist&lt;/a&gt; for details. &lt;/p&gt;</content>
    <source>
      <id>tag:weblog.rubyonrails.org,2012-01-26:30057</id>
      <link rel="alternate" href="http://weblog.rubyonrails.org/2012/1/26/rails-3-2-1-has-been-released"/>
      <title>Rails 3.2.1 has been released</title>
      <updated>2012-01-27T05:01:02Z</updated>
    </source>
  </entry>
  <entry>
    <title>#318 Upgrading to Rails 3.2</title>
    <updated>2012-01-24T13:08:21Z</updated>
    <published>2012-01-23T08:00:00Z</published>
    <id>planetaki.com:905:post:181529238</id>
    <link rel="alternate" href="http://railscasts.com/episodes/318-upgrading-to-rails-3-2"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/181529238"/>
    <content type="html">Rails 3.2 sports many new features including automatic explain queries, tagged logging, key-value store in Active Record, improve migration generator and more. Learn all about these new features in this episode.</content>
    <source>
      <id>upgrading-to-rails-3-2</id>
      <link rel="alternate" href="http://railscasts.com/episodes/318-upgrading-to-rails-3-2"/>
      <title>#318 Upgrading to Rails 3.2</title>
      <updated>2012-01-24T13:08:21Z</updated>
    </source>
  </entry>
  <entry>
    <title>Modularized Association Methods in Rails 3.2</title>
    <updated>2012-01-20T23:05:43Z</updated>
    <published>2012-01-20T19:03:07Z</published>
    <id>planetaki.com:905:post:180954203</id>
    <link rel="alternate" href="http://blog.hasmanythrough.com/2012/1/20/modularized-association-methods-in-rails-3-2"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/180954203"/>
    <summary type="html">&lt;p&gt;Happy Friday! It's Rails 3.2 day! The &lt;a href="http://weblog.rubyonrails.org/2012/1/20/rails-3-2-0-faster-dev-mode-routing-explain-queries-tagged-logger-store" rel="nofollow" target="_blank"&gt;official release announcement&lt;/a&gt; mentions a few of the big changes, but I'd like to take a moment to highlight a relatively &lt;a href="https://github.com/rails/rails/pull/3636" rel="nofollow" target="_blank"&gt;small change&lt;/a&gt; I was responsible for, one that I hope may make your life a little easier.&lt;/p&gt;&lt;p&gt;From the ActiveRecord &lt;a href="https://github.com/rails/rails/blob/712b0b99a273c49fb4fad48ae61b4ce252ec0562/activerecord/CHANGELOG.md" rel="nofollow" target="_blank"&gt;CHANGELOG&lt;/a&gt;:&lt;/p&gt;&lt;p&gt;The point of this change is to allow more flexibility in working with associations in your model classes. When you define an association, ActiveRecord automagically generates some methods for you to work with the association. For example, a &lt;code&gt;has_many :patches&lt;/code&gt; association generates the methods &lt;code&gt;patches&lt;/code&gt; and &lt;code&gt;patches=&lt;/code&gt; (and a few others).&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Happy Friday! It's Rails 3.2 day! The &lt;a href="http://weblog.rubyonrails.org/2012/1/20/rails-3-2-0-faster-dev-mode-routing-explain-queries-tagged-logger-store" rel="nofollow" target="_blank"&gt;official release announcement&lt;/a&gt; mentions a few of the big changes, but I'd like to take a moment to highlight a relatively &lt;a href="https://github.com/rails/rails/pull/3636" rel="nofollow" target="_blank"&gt;small change&lt;/a&gt; I was responsible for, one that I hope may make your life a little easier.&lt;/p&gt;

&lt;p&gt;From the ActiveRecord &lt;a href="https://github.com/rails/rails/blob/712b0b99a273c49fb4fad48ae61b4ce252ec0562/activerecord/CHANGELOG.md" rel="nofollow" target="_blank"&gt;CHANGELOG&lt;/a&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Generated association methods are created within a separate module to allow overriding and
composition using `super`. For a class named `MyModel`, the module is named
`MyModel::GeneratedFeatureMethods`. It is included into the model class immediately after
the `generated_attributes_methods` module defined in ActiveModel, so association methods
override attribute methods of the same name. *Josh Susser*
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The point of this change is to allow more flexibility in working with associations in your model classes. When you define an association, ActiveRecord automagically generates some methods for you to work with the association. For example, a &lt;code&gt;has_many :patches&lt;/code&gt; association generates the methods &lt;code&gt;patches&lt;/code&gt; and &lt;code&gt;patches=&lt;/code&gt; (and a few others).&lt;/p&gt;

&lt;p&gt;Previously, those association methods were inserted directly into your model class. This change moves those methods into their own module which is then included in your model class. Your model gets the same methods through inheritance, but also gets to override those methods and still call them using &lt;code&gt;super&lt;/code&gt;. Let's take a look at two ways this makes things easier for you.&lt;/p&gt;

&lt;p&gt;Sometimes you want to replace the standard generated association methods. That's always been easy to do simply by defining new methods in your model class. The only wrinkle was that you had to make sure you defined your method &lt;em&gt;after&lt;/em&gt; you set up the association, or calling &lt;code&gt;has_many&lt;/code&gt; would overwrite your method, since last writer wins. That was usually not a problem, but sometimes plugins or other monkey patching extensions could add an association after your model's class was defined, which wouldn't give you a chance to add your method afterwards. With this change, you don't have to worry about those order dependencies anymore. Since those methods are generated in their own module, the order doesn't matter. This is a pretty small issue all told and I doubt it affected many people, but it's still worth mentioning.&lt;/p&gt;

&lt;p&gt;The real reason for this change is being able to compose your own methods with the standard generated methods. Before this change, you'd have to use &lt;code&gt;alias_method_chain&lt;/code&gt; or some other fancy footwork to layer your own logic on top of the standard association functionality. Either that or you'd have to somehow duplicate the standard behavior in your own method. Ick. Now you can compose methods using inheritance and &lt;code&gt;super&lt;/code&gt;, the way Alan Kay intended you to. Here's the example from the docs:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;class Car &amp;lt; ActiveRecord::Base
  belongs_to :owner
  belongs_to :old_owner

  def owner=(new_owner)
    self.old_owner = self.owner
    super
  end
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you're familiar with ActiveRecord it's probably fairly obvious what's going on there, but I'll spell it out for the new kids. When you define the &lt;code&gt;belongs_to :owner&lt;/code&gt; association, that generates a standard &lt;code&gt;owner=&lt;/code&gt; method, and puts it in the module named &lt;code&gt;Car::GeneratedFeatureMethods&lt;/code&gt;, which is the closest ancestor of class &lt;code&gt;Car&lt;/code&gt;. If you're curious what this looks like, fire up the rails console and type &lt;code&gt;Car.ancestors&lt;/code&gt; to see the class's inheritance chain. (Or use your own app and model, since that will be much easier than making up a new app just to see that one thing.)&lt;/p&gt;

&lt;p&gt;In this Car class, you can see that changing owners keeps track of the old owner, so the new owner knows who to call when he can't figure out how to open the trunk. The generated &lt;code&gt;owner=&lt;/code&gt; method does a fair amount of stuff including managing counter caches, running callbacks, setting inverse associations, etc. Skipping that could break a number of things, so after saving the old owner, you also want to run the generated method. Since it's in a module that Car inherits from, you only have to call &lt;code&gt;super&lt;/code&gt; to get that to run. No muss, no fuss!&lt;/p&gt;

&lt;p&gt;One more step towards simpler OOP in Rails! Thanks to my fellow Ruby Rogues &lt;a href="http://about.avdi.org/" rel="nofollow" target="_blank"&gt;Avdi Grimm&lt;/a&gt; and &lt;a href="http://blog.grayproductions.net/" rel="nofollow" target="_blank"&gt;James Edward Gray II&lt;/a&gt; for complaining about the old state of things enough to motivate me to finally go fix this.&lt;/p&gt;</content>
    <source>
      <id>tag:blog.hasmanythrough.com,2006-02-27:Article/140</id>
      <link rel="alternate" href="http://blog.hasmanythrough.com/2012/1/20/modularized-association-methods-in-rails-3-2"/>
      <title>Modularized Association Methods in Rails 3.2</title>
      <updated>2012-01-20T23:05:43Z</updated>
    </source>
  </entry>
  <entry>
    <title>Rails 3.2.0: Faster dev mode &amp;amp; routing, explain queries, tagged logger, store</title>
    <updated>2012-01-20T23:05:08Z</updated>
    <published>2012-01-20T17:22:00Z</published>
    <id>planetaki.com:905:post:180954134</id>
    <link rel="alternate" href="http://weblog.rubyonrails.org/2012/1/20/rails-3-2-0-faster-dev-mode-routing-explain-queries-tagged-logger-store"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/180954134"/>
    <summary type="html">&lt;p&gt;So we didn&amp;rsquo;t quite make the December release date as we intended, but hey, why break a good tradition and start hitting release targets now! In any case, your patience has been worldly rewarded young grasshopper: Rails 3.2 is done, baked, tested, and ready to roll!&lt;/p&gt;&lt;p&gt;I&amp;rsquo;ve been running on 3-2-stable for a few months working on &lt;a href="http://37signals.com/basecampnext/" rel="nofollow" target="_blank"&gt;Basecamp Next&lt;/a&gt; and it&amp;rsquo;s been a real treat. The new faster dev mode in particular is a major step up over 3.1.&lt;/p&gt;&lt;p&gt;Do remember that this is the last intended release series that&amp;rsquo;s going to support Ruby 1.8.7. The master git branch for Rails is now targeting Rails 4.0, which will require Ruby 1.9.3 and above. So now is a great time to start the work on getting your app ready for the current version of Ruby. Let&amp;rsquo;s not hang around old versions forever and a Sunday like those Python guys :).&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;So we didn&amp;rsquo;t quite make the December release date as we intended, but hey, why break a good tradition and start hitting release targets now! In any case, your patience has been worldly rewarded young grasshopper: Rails 3.2 is done, baked, tested, and ready to roll!&lt;/p&gt;


	&lt;p&gt;I&amp;rsquo;ve been running on 3-2-stable for a few months working on &lt;a href="http://37signals.com/basecampnext/" rel="nofollow" target="_blank"&gt;Basecamp Next&lt;/a&gt; and it&amp;rsquo;s been a real treat. The new faster dev mode in particular is a major step up over 3.1.&lt;/p&gt;


	&lt;p&gt;Do remember that this is the last intended release series that&amp;rsquo;s going to support Ruby 1.8.7. The master git branch for Rails is now targeting Rails 4.0, which will require Ruby 1.9.3 and above. So now is a great time to start the work on getting your app ready for the current version of Ruby. Let&amp;rsquo;s not hang around old versions forever and a Sunday like those Python guys :).&lt;/p&gt;


	&lt;p&gt;There&amp;rsquo;s a &lt;a href="https://github.com/rails/rails/tree/v3.2.0" rel="nofollow" target="_blank"&gt;v3.2.0 tag on Github&lt;/a&gt; and we of course we still have the &lt;a href="https://github.com/rails/rails/tree/3-2-stable" rel="nofollow" target="_blank"&gt;3-2-stable branch&lt;/a&gt; as well. You can see all the glorious details of everything that was changed in our &lt;a href="https://gist.github.com/1648523" rel="nofollow" target="_blank"&gt;&lt;span class="caps"&gt;CHANGELOG&lt;/span&gt; compilation&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;For documentation, we have the &lt;a href="http://guides.rubyonrails.org/3_2_release_notes.html" rel="nofollow" target="_blank"&gt;3.2 release notes with upgrade instructions&lt;/a&gt;, both &lt;a href="http://api.rubyonrails.org/" rel="nofollow" target="_blank"&gt;the &lt;span class="caps"&gt;API&lt;/span&gt; docs&lt;/a&gt; and &lt;a href="http://guides.rubyonrails.org/" rel="nofollow" target="_blank"&gt;the guides&lt;/a&gt; have been generated for 3.2 as well, and there&amp;rsquo;s a brand new &lt;a href="http://pragprog.com/book/rails4/agile-web-development-with-rails" rel="nofollow" target="_blank"&gt;3.2-compatible version of Agile Web Development with Rails&lt;/a&gt;. A sm&amp;ouml;rg&amp;aring;sbord indeed!&lt;/p&gt;


	&lt;p&gt;Note: If you&amp;rsquo;re having trouble installing the gems under Ruby 1.8.7, you&amp;rsquo;ve probably hit a RubyGems bug with &lt;span class="caps"&gt;YAML&lt;/span&gt; that&amp;rsquo;s been fixed in RubyGems 1.8.15. You can upgrade RubyGems using &amp;ldquo;gem update&amp;mdash;system&amp;rdquo;.&lt;/p&gt;


	&lt;p&gt;If you can&amp;rsquo;t be bothered with the full release notes, here&amp;rsquo;s a reprint of a few feature highlights from when we did the first release candidate:&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Faster dev mode &amp;amp; routing&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;The most noticeable new feature is that development mode got a ton and a half faster. Inspired by &lt;a href="https://github.com/paneq/active_reload" rel="nofollow" target="_blank"&gt;Active Reload&lt;/a&gt;, we now only reload classes from files you&amp;rsquo;ve actually changed. The difference is dramatic on a larger application.&lt;/p&gt;


	&lt;p&gt;Route recognition also got a bunch faster thanks to the &lt;a href="https://github.com/rails/journey" rel="nofollow" target="_blank"&gt;new Journey engine&lt;/a&gt; and we made linking much faster as well (especially apparent when you&amp;rsquo;re having 100+ links on a single page).&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Explain queries&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;We&amp;rsquo;ve added a &lt;a href="http://weblog.rubyonrails.org/2011/12/6/what-s-new-in-edge-rails-explain" rel="nofollow" target="_blank"&gt;quick and easy way to explain quieries generated by ARel&lt;/a&gt;. In the console, you can run something like &lt;code&gt;puts Person.active.limit(5).explain&lt;/code&gt; and you&amp;rsquo;ll get the query ARel produces explained (so you can easily see whether its using the right indexes). There&amp;rsquo;s even a default threshold in development mode where if a query takes more than half a second to run, it&amp;rsquo;s automatically explained inline&amp;mdash;how about that!&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Tagged logger&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;When you&amp;rsquo;re running a multi-user, multi-account application, it&amp;rsquo;s a great help to be able to filter the log by who did what. Enter the TaggedLogging wrapper. It works like this:&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;Logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))
Logger.tagged("BCX") { Logger.info "Stuff" } # Logs "[BCX] Stuff" 
Logger.tagged("BCX") do
  Logger.tagged("Jason") do
    Logger.info "Stuff" # Logs "\[BCX\] \[Jason\] Stuff" 
  end
end&lt;/code&gt;&lt;/pre&gt;


	&lt;p&gt;&lt;strong&gt;Active Record Store&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Key/value stores are great, but it&amp;rsquo;s not always you want to go the whole honking way just for a little variable-key action. Enter the Active Record Store:&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;class User &amp;lt; ActiveRecord::Base
  store :settings, accessors: [ :color, :homepage ]
end&lt;/code&gt;&lt;/pre&gt;


	&lt;pre&gt;&lt;code&gt;u = User.new(color: 'black', homepage: '37signals.com')
u.color                          # Accessor stored attribute
u.settings[:country] = 'Denmark' # Any attribute, even if not specified with an accessor&lt;/code&gt;&lt;/pre&gt;</content>
    <source>
      <id>tag:weblog.rubyonrails.org,2012-01-20:29824</id>
      <link rel="alternate" href="http://weblog.rubyonrails.org/2012/1/20/rails-3-2-0-faster-dev-mode-routing-explain-queries-tagged-logger-store"/>
      <title>Rails 3.2.0: Faster dev mode &amp;amp; routing, explain queries, tagged logger, store</title>
      <updated>2012-01-20T23:05:08Z</updated>
    </source>
  </entry>
  <entry>
    <title>#316 Private Pub</title>
    <updated>2012-01-17T08:42:40Z</updated>
    <published>2012-01-16T08:00:00Z</published>
    <id>planetaki.com:905:post:180179847</id>
    <link rel="alternate" href="http://railscasts.com/episodes/316-private-pub"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/180179847"/>
    <content type="html">Private Pub makes it easier than ever to publish and subscribe to real-time events in a Rails app. You can use publish_to with a block of JavaScript or supply a hash for use with JSON.</content>
    <source>
      <id>private-pub</id>
      <link rel="alternate" href="http://railscasts.com/episodes/316-private-pub"/>
      <title>#316 Private Pub</title>
      <updated>2012-01-17T08:42:40Z</updated>
    </source>
  </entry>
  <entry>
    <title>#314 Pretty URLs with FriendlyId</title>
    <updated>2012-01-10T12:40:58Z</updated>
    <published>2012-01-09T08:00:00Z</published>
    <id>planetaki.com:905:post:178893987</id>
    <link rel="alternate" href="http://railscasts.com/episodes/314-pretty-urls-with-friendlyid"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/178893987"/>
    <content type="html">If you are tired of model ids in the URL, overriding to_param can only get you so far. The friendly_id plugin can help by making it easy to generate a URL slug and maintain a history.</content>
    <source>
      <id>pretty-urls-with-friendlyid</id>
      <link rel="alternate" href="http://railscasts.com/episodes/314-pretty-urls-with-friendlyid"/>
      <title>#314 Pretty URLs with FriendlyId</title>
      <updated>2012-01-10T12:40:58Z</updated>
    </source>
  </entry>
  <entry>
    <title>My Command Line Prompt</title>
    <updated>2012-01-06T03:54:15Z</updated>
    <published>2012-01-05T21:00:00Z</published>
    <id>planetaki.com:905:post:178193677</id>
    <link rel="alternate" href="http://blog.peepcode.com/blog/2012/my-command-line-prompt"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/178193677"/>
    <summary type="html">&lt;p&gt;&lt;strong&gt;This article is heavily styled and is best viewed at &lt;a href="http://blog.peepcode.com/blog/2012/my-command-line-prompt" rel="nofollow" target="_blank"&gt;PeepCode&lt;/a&gt;!&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;
        by Geoffrey Grosenbach &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Paula Lavalle
      &lt;/p&gt;&lt;p&gt;One hour video.&lt;br&gt;Only &lt;sup&gt;$&lt;/sup&gt;12!&amp;nbsp;&lt;a href="http://peepcode.com/products/advanced-git" rel="nofollow" target="_blank"&gt;More Info&amp;hellip;&lt;/a&gt;&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;&lt;strong&gt;This article is heavily styled and is best viewed at &lt;a href="http://blog.peepcode.com/blog/2012/my-command-line-prompt" rel="nofollow" target="_blank"&gt;PeepCode&lt;/a&gt;!&lt;/strong&gt;&lt;/p&gt;&lt;div id="commandline"&gt;
  &lt;div class="row notations"&gt;
    &lt;div class="column"&gt;
      &lt;p id="by"&gt;
        by Geoffrey Grosenbach &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Paula Lavalle
      &lt;/p&gt;
      &lt;div id="buy"&gt;
&lt;h2&gt;Advanced Git!&lt;/h2&gt;
&lt;p class="small"&gt;One hour video.&lt;br&gt;Only &lt;sup&gt;$&lt;/sup&gt;12!&amp;nbsp;&lt;a href="http://peepcode.com/products/advanced-git" rel="nofollow" target="_blank"&gt;More Info&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div id="description"&gt;
  &lt;div class="row"&gt;
    &lt;div class="column"&gt;
      &lt;h2&gt;Your Command Line Dashboard&lt;/h2&gt;
      &lt;p&gt;In 10 years you&amp;rsquo;ll probably be writing code in a different language, building web apps with a different framework, and wearing a different pair of underwear.&lt;/p&gt;
      &lt;p&gt;But the command line prompt you use today could still be serving you well.&lt;/p&gt;
      &lt;p&gt;Many of the elements of my command prompt were snitched from other developers (&lt;a href="https://github.com/chneukirchen" rel="nofollow" target="_blank"&gt;Christian Neukirchen&lt;/a&gt;, &lt;a href="https://github.com/freelancing-god" rel="nofollow" target="_blank"&gt;Pat Allan&lt;/a&gt;, and &lt;a href="https://github.com/benhoskings" rel="nofollow" target="_blank"&gt;Ben Hoskings&lt;/a&gt;). Here are my goals for my command prompt.&lt;/p&gt;
      &lt;h3&gt;Goals&lt;/h3&gt;
      &lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fast&lt;/strong&gt;: If I can tell there&amp;rsquo;s a pause when I open a window or change directories, it&amp;rsquo;s too slow.&lt;/li&gt;
      	&lt;li&gt;
&lt;strong&gt;Terse&lt;/strong&gt;: Only show information that will change frequently between projects or between commands. If I always used the same version of Ruby, I would probably remove the Ruby version from my prompt.&lt;/li&gt;
      	&lt;li&gt;
&lt;strong&gt;Mine&lt;/strong&gt;: I don&amp;rsquo;t hesitate to customize a script that I copied from someone else. The prompt is not the place to worry about reusable or generalized code. It &lt;em&gt;should&lt;/em&gt; be easy to read and change when I need to.&lt;/li&gt;
      &lt;/ul&gt;
&lt;h3&gt;Why &lt;span class="caps"&gt;ZSH&lt;/span&gt;?&lt;/h3&gt;
      &lt;p&gt;I switched to &lt;code&gt;zsh&lt;/code&gt; after receiving a one-on-one tutorial from &lt;a href="https://github.com/chneukirchen" rel="nofollow" target="_blank"&gt;Christian Neukirchen&lt;/a&gt;. It has some nice features:&lt;/p&gt;
      &lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Separate prompt&lt;/strong&gt; for the right and left side of the screen.&lt;/li&gt;
      	&lt;li&gt;
&lt;strong&gt;Inline completion&lt;/strong&gt; of directories, Git branch names, Rake task names, etc.&lt;/li&gt;
      	&lt;li&gt;
&lt;strong&gt;Easy loop syntax&lt;/strong&gt;: &lt;code&gt;for f (`ls`) echo $f&lt;/code&gt;
&lt;/li&gt;
      &lt;/ul&gt;
&lt;p&gt;Try the source to a &lt;a href="https://github.com/topfunky/zsh-simple" rel="nofollow" target="_blank"&gt;simple version of my prompt on GitHub&lt;/a&gt;. Or read the explanation below and build your own.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div class="implement"&gt;
  &lt;div class="row"&gt;
    &lt;div class="column"&gt;
      &lt;h2&gt;
        Implementation
      &lt;/h2&gt;
      &lt;h3&gt;Setup&lt;/h3&gt;
      &lt;p&gt;The following configuration directives should be in &lt;code&gt;~/.zshrc&lt;/code&gt;. See the &lt;a href="https://github.com/topfunky/zsh-simple" rel="nofollow" target="_blank"&gt;full source&lt;/a&gt; for the complete setup.&lt;/p&gt;
      &lt;p&gt;Run these commands to load zsh&amp;rsquo;s color variables. You&amp;rsquo;ll be able to use readable values like &lt;code&gt;$fg[black]&lt;/code&gt; instead of cryptic ones like &lt;code&gt;\e[0m&lt;/code&gt;.&lt;/p&gt;
      &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;# Colors&lt;/span&gt;
autoload -U colors
colors
setopt prompt_subst&lt;/pre&gt;&lt;/div&gt;
      &lt;a id="status" rel="nofollow" target="_blank"&gt;
        &lt;h3&gt;Last Command Status&lt;/h3&gt;
      &lt;/a&gt;
      &lt;p&gt;I first saw this technique in Pat Allan&amp;rsquo;s shell. If the last command exited with a nonzero value, it will print a red Unicode frown: &lt;span style="color: red;"&gt;&amp;#9785;&lt;/span&gt;. Successful commands will show a green smiley: &lt;span style="color: green;"&gt;&amp;#9786;&lt;/span&gt;&lt;/p&gt;
      &lt;p&gt;It&amp;rsquo;s a nice way to quickly see if tests failed or a compilation aborted.&lt;/p&gt;
      &lt;p&gt;And you&amp;rsquo;re not limited to &lt;span class="caps"&gt;ASCII&lt;/span&gt;! Use the Unicode snowman, a skull and crossbones, or any other &lt;a href="http://en.wikipedia.org/wiki/Dingbat" rel="nofollow" target="_blank"&gt;dingbats character&lt;/a&gt;.&lt;/p&gt;
      &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;# Save a smiley to a local variable if the last command exited with success.&lt;/span&gt;
&lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;smiley&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"%(?,%{$fg[green]%}&amp;#9786;%{$reset_color%},%{$fg[red]%}&amp;#9785;%{$reset_color%})"&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
      &lt;a id="currentpath" rel="nofollow" target="_blank"&gt;
        &lt;h3&gt;Current Path&lt;/h3&gt;
      &lt;/a&gt;
      &lt;p&gt;On my local machine I want to show only what&amp;rsquo;s necessary. So I don&amp;rsquo;t show the current user, hostname, or anything other than the relative path that I&amp;rsquo;m currently in.&lt;/p&gt;
      &lt;p&gt;In zsh, that&amp;rsquo;s &lt;code&gt;%~&lt;/code&gt;.&lt;/p&gt;
      &lt;p&gt;Assign it to &lt;code&gt;PROMPT&lt;/code&gt; to set the left-hand part of the prompt. It occupies two lines: the path is on one line and the previously saved &lt;code&gt;smiley&lt;/code&gt; is on the next. &lt;code&gt;$reset_color&lt;/code&gt; is a &lt;code&gt;zsh&lt;/code&gt; variable that restores your default text color.&lt;/p&gt;
      &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;# Show the relative path on one line, then the smiley.&lt;/span&gt;
&lt;span class="nv"&gt;PROMPT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt;
&lt;span class="s1"&gt;%~&lt;/span&gt;
&lt;span class="s1"&gt;${smiley}  %{$reset_color%}'&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
      &lt;a id="gitbranch" rel="nofollow" target="_blank"&gt;
        &lt;h3&gt;Git Branch, SHA &amp;amp; Dirty Status&lt;/h3&gt;
      &lt;/a&gt;
      &lt;p&gt;It&amp;rsquo;s surprisingly difficult to get Git to tell you what branch it&amp;rsquo;s on. I&amp;rsquo;ve tried several scripts, including the multi-&lt;span class="caps"&gt;SCM&lt;/span&gt; &lt;a href="http://vc.gerg.ca/hg/vcprompt/" rel="nofollow" target="_blank"&gt;vcprompt&lt;/a&gt; (which worked well).&lt;/p&gt;
      &lt;p&gt;My current favorite is a Ruby script that prints all kinds of useful information about your Git setup:&lt;/p&gt;
      &lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Current branch name&lt;/strong&gt;&lt;/li&gt;
      	&lt;li&gt;
&lt;strong&gt;The current &lt;span class="caps"&gt;SHA&lt;/span&gt;&lt;/strong&gt; (7 characters of it). Useful for anytime you need to get out of trouble with &lt;code&gt;git reset --hard&lt;/code&gt;. See the PeepCode &lt;a href="https://peepcode.com/products/advanced-git" rel="nofollow" target="_blank"&gt;Advanced Git&lt;/a&gt; video for this and other Git tips.&lt;/li&gt;
      	&lt;li&gt;
&lt;strong&gt;Rebase status&lt;/strong&gt; (to know if you&amp;rsquo;re in the middle of a rebase)&lt;/li&gt;
      	&lt;li&gt;
&lt;strong&gt;Dirty status&lt;/strong&gt; Have any tracked files been edited? A Unicode &amp;#10007; is displayed if changes have been made but not committed.&lt;/li&gt;
      &lt;/ul&gt;
&lt;p&gt;The &lt;a href="https://github.com/benhoskings/dot-files/blob/master/files/bin/git_cwd_info" rel="nofollow" target="_blank"&gt;original script&lt;/a&gt; is from Ben Hoskings(requires Ruby 1.9). I edited it to work on Ruby 1.8 and used a brief &lt;code&gt;git-current-branch&lt;/code&gt; script (&lt;a href="https://github.com/topfunky/zsh-simple/blob/master/bin/git-cwd-info.rb" rel="nofollow" target="_blank"&gt;source&lt;/a&gt;). The relevant edit is on the last three lines where it specifies a format and colors for the final display.&lt;/p&gt;
      &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="nv"&gt;RPROMPT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'%{$fg[white]%} $(~/.rvm/bin/rvm-prompt)$(~/bin/git-cwd-info.rb)%{$reset_color%}'&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
      &lt;p&gt;I chose to make the more important metadata stand out more. The Git branch name and dirty status are more important to me than the Ruby version or the current &lt;span class="caps"&gt;SHA&lt;/span&gt;, so they are a darker shade of grey. Ben uses an &lt;code&gt;@&lt;/code&gt; sign before the &lt;span class="caps"&gt;SHA&lt;/span&gt;, but I replaced it with whitespace.&lt;/p&gt;
      &lt;img src="http://blog.peepcode.com/blog/2012/my-command-line-prompt/img/git-detail.png" alt="Ruby &amp;amp; Git metadata." title="Ruby &amp;amp; Git metadata." onload="resizeImage(this)"&gt;&lt;p class="caption"&gt;Ruby &amp;amp; Git metadata.&lt;/p&gt;
      &lt;a id="rvmconfig" rel="nofollow" target="_blank"&gt;
        &lt;h3&gt;RVM Config&lt;/h3&gt;
      &lt;/a&gt;
      &lt;p&gt;The name of the current Ruby version as configured by &lt;acronym title="Ruby Version Manager"&gt;&lt;span class="caps"&gt;RVM&lt;/span&gt;&lt;/acronym&gt; is actually in the previous snippet. It calls &lt;code&gt;~/.rvm/bin/rvm-prompt&lt;/code&gt; and displays it at the left side of the right hand prompt.&lt;/p&gt;
      &lt;h2&gt;Put it Together&lt;/h2&gt;
      &lt;p&gt;The combined prompt looks like this.&lt;/p&gt;
      &lt;div class="highlight"&gt;&lt;pre&gt;&lt;span class="c"&gt;# Combined left and right prompt configuration.&lt;/span&gt;
&lt;span class="nb"&gt;local &lt;/span&gt;&lt;span class="nv"&gt;smiley&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"%(?,%{$fg[green]%}&amp;#9786;%{$reset_color%},%{$fg[red]%}&amp;#9785;%{$reset_color%})"&lt;/span&gt;

&lt;span class="nv"&gt;PROMPT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt;
&lt;span class="s1"&gt;%~&lt;/span&gt;
&lt;span class="s1"&gt;${smiley}  %{$reset_color%}'&lt;/span&gt;

&lt;span class="nv"&gt;RPROMPT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'%{$fg[white]%} $(~/.rvm/bin/rvm-prompt)$(~/bin/git-cwd-info.rb)%{$reset_color%}'&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;
      &lt;p&gt;The important thing is to customize your own prompt and make it work the way you want it to!&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div id="buyscreencast"&gt;
  &lt;div class="row"&gt;
    &lt;div class="column"&gt;
      &lt;h2&gt;
        Learn the command line, Git, and other great stuff!
      &lt;/h2&gt;
      &lt;p&gt;Check out our &lt;a href="https://peepcode.com/products/meet-the-command-line" rel="nofollow" target="_blank"&gt;Meet the Command Line&lt;/a&gt; and &lt;a href="https://peepcode.com/products/advanced-command-line" rel="nofollow" target="_blank"&gt;Advanced Command Line&lt;/a&gt; screencasts, plus our newest &lt;a href="http://peepcode.com/products/advanced-git" rel="nofollow" target="_blank"&gt;Advanced Git&lt;/a&gt; tutorial.&lt;/p&gt;
      &lt;div id="buy"&gt;
&lt;h2&gt;Command Line&lt;/h2&gt;
&lt;p class="small"&gt;Get started.&lt;br&gt;Only &lt;sup&gt;$&lt;/sup&gt;12!&amp;nbsp;&lt;a href="http://peepcode.com/products/meet-the-command-line" rel="nofollow" target="_blank"&gt;More Info&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
      &lt;div id="buy"&gt;
&lt;h2&gt;Adv Command&lt;/h2&gt;
&lt;p class="small"&gt;Master it.&lt;br&gt;Only &lt;sup&gt;$&lt;/sup&gt;12!&amp;nbsp;&lt;a href="http://peepcode.com/products/advanced-command-line" rel="nofollow" target="_blank"&gt;More Info&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
      &lt;div id="buy"&gt;
&lt;h2&gt;Advanced Git&lt;/h2&gt;
&lt;p class="small"&gt;One hour video.&lt;br&gt;Only &lt;sup&gt;$&lt;/sup&gt;12!&amp;nbsp;&lt;a href="http://peepcode.com/products/advanced-git" rel="nofollow" target="_blank"&gt;More Info&amp;hellip;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;</content>
    <source>
      <id>tag:blog.peepcode.com,2012-01-05:/blog/2012/my-command-line-prompt</id>
      <link rel="alternate" href="http://blog.peepcode.com/blog/2012/my-command-line-prompt"/>
      <title>My Command Line Prompt</title>
      <updated>2012-01-06T03:54:15Z</updated>
    </source>
  </entry>
  <entry>
    <title>Rails 3.2.0.rc2 has been released!</title>
    <updated>2012-01-05T04:39:30Z</updated>
    <published>2012-01-04T21:01:00Z</published>
    <id>planetaki.com:905:post:177997129</id>
    <link rel="alternate" href="http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/177997129"/>
    <summary type="html">&lt;p&gt;Hi everyone,&lt;/p&gt;&lt;p&gt;Rails 3.2.0.rc2 has been released!&lt;/p&gt;&lt;p&gt;Extract your vendor/plugins to their own gems and bundle them in your Gemfile. If they're tiny, not worthy of the own gem, fold it into your app as &lt;code&gt;lib/myplugin/*&lt;/code&gt; and &lt;code&gt;config/initializers/myplugin.rb&lt;/code&gt;.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Hi everyone,&lt;/p&gt;

&lt;p&gt;Rails 3.2.0.rc2 has been released!&lt;/p&gt;

&lt;h2&gt;What to update in your apps&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Update your Gemfile to depend on rails ~&amp;gt; 3.2.0.rc2&lt;/li&gt;
&lt;li&gt;Update your Gemfile to depend on sass-rails ~&amp;gt; 3.2.3&lt;/li&gt;
&lt;li&gt;Start moving any remaining Rails 2.3-style &lt;code&gt;vendor/plugins/*&lt;/code&gt;. These are finally deprecated!&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Extract your vendor/plugins to their own gems and bundle them in your Gemfile. If they're tiny, not worthy of the own gem, fold it into your app as &lt;code&gt;lib/myplugin/*&lt;/code&gt; and &lt;code&gt;config/initializers/myplugin.rb&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;Changes since RC1&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;ActionMailer&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No changes&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;em&gt;ActionPack&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Add font_path helper method &lt;strong&gt;Santiago Pastorino&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Depends on rack ~&amp;gt; 1.4.0 &lt;strong&gt;Santiago Pastorino&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add :gzip option to &lt;code&gt;caches_page&lt;/code&gt;. The default option can be configured globally using &lt;code&gt;page_cache_compression&lt;/code&gt; &lt;strong&gt;Andrey Sitnik&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;em&gt;ActiveModel&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No changes&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;em&gt;ActiveRecord&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No changes&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;em&gt;ActiveResource&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No changes&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;em&gt;ActiveSupport&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ActiveSupport::Base64 is deprecated in favor of ::Base64. &lt;strong&gt;Sergey Nartimov&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;em&gt;Railties&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Rails 2.3-style plugins in vendor/plugins are deprecated and will be removed in Rails 4.0. Move them out of vendor/plugins and bundle them in your Gemfile, or fold them in to your app as lib/myplugin/* and config/initializers/myplugin.rb. &lt;strong&gt;Santiago Pastorino&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Guides are available as a single .mobi for the Kindle and free Kindle readers apps. &lt;strong&gt;Michael Pearson &amp;amp; Xavier Noria&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allow scaffold/model/migration generators to accept a "index" and "uniq" modifiers, as in: "tracking_id:integer:uniq" in order to generate (unique) indexes. Some types also accept custom options, for instance, you can specify the precision and scale for decimals as "price:decimal{7,2}". &lt;strong&gt;Dmitrii Samoilov&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h2&gt;Gem checksums&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;MD5 (actionmailer-3.2.0.rc2.gem) = 118c83b2cddaa935d1de7534cfb6c810&lt;/li&gt;
&lt;li&gt;MD5 (actionpack-3.2.0.rc2.gem) = 6b18851bc26d5c8958672f27adda05ca&lt;/li&gt;
&lt;li&gt;MD5 (activemodel-3.2.0.rc2.gem) = d82f4eed949dcff17f8bf2aed806679a&lt;/li&gt;
&lt;li&gt;MD5 (activerecord-3.2.0.rc2.gem) = d07806fd5fc464f960200d20ceb2193a&lt;/li&gt;
&lt;li&gt;MD5 (activeresource-3.2.0.rc2.gem) = f51af240ff4623b0b6f8a4293ffa50dc&lt;/li&gt;
&lt;li&gt;MD5 (activesupport-3.2.0.rc2.gem) = 01380240c12e0380c9e61c97dd45f2f1&lt;/li&gt;
&lt;li&gt;MD5 (rails-3.2.0.rc2.gem) = 134f923f7d821f514abf6bdf4af62ca7&lt;/li&gt;
&lt;li&gt;MD5 (railties-3.2.0.rc2.gem) = 4b3ac0f9c5da16b90a1875e8199253d2&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;You can find an exhaustive list of changes on &lt;a href="https://github.com/rails/rails/compare/v3.2.0.rc1...v3.2.0.rc2" rel="nofollow" target="_blank"&gt;github&lt;/a&gt;. Along with the &lt;a href="https://github.com/rails/rails/issues?milestone=3&amp;amp;state=closed" rel="nofollow" target="_blank"&gt;closed issues marked for v3.2.0&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can also see issues &lt;a href="https://github.com/rails/rails/issues?milestone=3&amp;amp;state=open" rel="nofollow" target="_blank"&gt;we haven't closed yet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thanks to everyone!&lt;/p&gt;</content>
    <source>
      <id>tag:weblog.rubyonrails.org,2012-01-04:29804</id>
      <link rel="alternate" href="http://weblog.rubyonrails.org/2012/1/4/rails-3-2-0-rc2-has-been-released"/>
      <title>Rails 3.2.0.rc2 has been released!</title>
      <updated>2012-01-05T04:39:30Z</updated>
    </source>
  </entry>
  <entry>
    <title>Yak Shaving</title>
    <updated>2012-01-04T20:55:08Z</updated>
    <published>2012-01-04T16:23:22Z</published>
    <id>planetaki.com:905:post:177929846</id>
    <link rel="alternate" href="http://blog.hasmanythrough.com/2012/1/4/yak-shaving"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/177929846"/>
    <content type="html">&lt;p&gt;As coders, most of us are not only familiar with the term &lt;a href="http://en.wiktionary.org/wiki/yak_shaving" rel="nofollow" target="_blank"&gt;yak shaving&lt;/a&gt;, but spend many of our days doing nothing but. I often struggle to explain to non-technical folks what I actually spend my time doing when I'm working and what it feels like. This is the most accessible explanation I can come up with.&lt;/p&gt;

&lt;p&gt;Say you want to go see a movie with your friend Joe. You can't get away with leaving the house when the kitchen is such a mess, so you have to load and run the dishwasher before you go. Unfortunately you're out of detergent, which means you have to run to the store to pick some up. You want to ride your bike or it will take too long to get to the store. But your bike's front tire is kind of low, so you have to pump it up first. However, your roommate borrowed your tire pump and you don't know where it is, so you have to go find your roommate and ask him about it. He's over at a neighbor's place having band practice, but it's just a short walk. When you get there they are in the middle of practice so you have to wait for a few minutes. The only place to sit is on that ratty old sofa, right next to the drummer's sister, Monica, who will only let you sit there on the condition you smoke a joint with her. But before you can do that you have to dig around in the seat cushions to find the lighter she just realized she lost. You manage to find the lighter, and before too long you are smoking out with Monica. The band finishes the number and your roommate comes over to see what's up. You take another hit off the joint and say "Hey, we should order a pizza."&lt;/p&gt;</content>
    <source>
      <id>tag:blog.hasmanythrough.com,2006-02-27:Article/139</id>
      <link rel="alternate" href="http://blog.hasmanythrough.com/2012/1/4/yak-shaving"/>
      <title>Yak Shaving</title>
      <updated>2012-01-04T20:55:08Z</updated>
    </source>
  </entry>
  <entry>
    <title>#312 Sending HTML Email</title>
    <updated>2012-01-02T13:55:35Z</updated>
    <published>2012-01-02T08:00:00Z</published>
    <id>planetaki.com:905:post:177494076</id>
    <link rel="alternate" href="http://railscasts.com/episodes/312-sending-html-email"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/177494076"/>
    <content type="html">HTML email can be difficult to code because any CSS should be made inline. Here I present a few tools for doing this including the premailer-rails3 and roadie gems.</content>
    <source>
      <id>sending-html-email</id>
      <link rel="alternate" href="http://railscasts.com/episodes/312-sending-html-email"/>
      <title>#312 Sending HTML Email</title>
      <updated>2012-01-02T13:55:35Z</updated>
    </source>
  </entry>
  <entry>
    <title>#310 Getting Started with Rails</title>
    <updated>2011-12-27T11:51:10Z</updated>
    <published>2011-12-26T08:00:00Z</published>
    <id>planetaki.com:905:post:176570417</id>
    <link rel="alternate" href="http://railscasts.com/episodes/310-getting-started-with-rails"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/176570417"/>
    <content type="html">Learning Ruby on Rails can be overwhelming, especially if you are new to programming. Here I will take you on a tour through various resources to help get started with Rails.</content>
    <source>
      <id>getting-started-with-rails</id>
      <link rel="alternate" href="http://railscasts.com/episodes/310-getting-started-with-rails"/>
      <title>#310 Getting Started with Rails</title>
      <updated>2011-12-27T11:51:10Z</updated>
    </source>
  </entry>
  <entry>
    <title>Rails/master is now 4.0.0.beta</title>
    <updated>2011-12-22T17:46:42Z</updated>
    <published>2011-12-20T15:33:00Z</published>
    <id>planetaki.com:905:post:175790570</id>
    <link rel="alternate" href="http://weblog.rubyonrails.org/2011/12/20/rails-master-is-now-4-0-0-beta"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/175790570"/>
    <summary type="html">&lt;p&gt;The &lt;a href="http://weblog.rubyonrails.org/2011/12/20/rails-3-2-rc1-faster-dev-mode-routing-explain-queries-tagged-logger-store" rel="nofollow" target="_blank"&gt;forthcoming 3.2.x release series&lt;/a&gt; will be the last branch of Rails that supports Ruby 1.8.7. There&amp;rsquo;s a new &lt;a href="https://github.com/rails/rails/tree/3-2-stable" rel="nofollow" target="_blank"&gt;3-2-stable branch&lt;/a&gt; in git to track the changes we need until 3.2.0 final is release and for managing point releases after that.&lt;/p&gt;&lt;p&gt;So for now you should stop floating on rails/master if your application is not compatible with Ruby 1.9.3. We have updated the version numbers to indicate this backwards incompatibility to be 4.0.0.beta. This doesn&amp;rsquo;t mean that 4.0 is anywhere close to being released, mind you. We&amp;rsquo;re simply doing this now because we&amp;rsquo;re dropping support for Ruby 1.8.7 in rails/master and people should know what&amp;rsquo;s up.&lt;/p&gt;&lt;p&gt;Major versions of Rails has been on about 2-year release cycle since 1.0 (&lt;a href="http://weblog.rubyonrails.org/2005/12/13/rails-1-0-party-like-its-one-oh-oh/" rel="nofollow" target="_blank"&gt;released in 2005&lt;/a&gt;, &lt;a href="http://weblog.rubyonrails.org/2007/12/7/rails-2-0-it-s-done" rel="nofollow" target="_blank"&gt;followed by 2.0 in 2007&lt;/a&gt;, &lt;a href="http://weblog.rubyonrails.org/2010/8/29/rails-3-0-it-s-done" rel="nofollow" target="_blank"&gt;followed by 3.0 in 2010&lt;/a&gt;) and we intend to continue this pattern. The current internal target for Rails 4.0 is sometime in the Summer of 2012 &amp;mdash; but we have blown every major release estimate in the past, so don&amp;rsquo;t bet your farm on it.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;The &lt;a href="http://weblog.rubyonrails.org/2011/12/20/rails-3-2-rc1-faster-dev-mode-routing-explain-queries-tagged-logger-store" rel="nofollow" target="_blank"&gt;forthcoming 3.2.x release series&lt;/a&gt; will be the last branch of Rails that supports Ruby 1.8.7. There&amp;rsquo;s a new &lt;a href="https://github.com/rails/rails/tree/3-2-stable" rel="nofollow" target="_blank"&gt;3-2-stable branch&lt;/a&gt; in git to track the changes we need until 3.2.0 final is release and for managing point releases after that.&lt;/p&gt;


	&lt;p&gt;So for now you should stop floating on rails/master if your application is not compatible with Ruby 1.9.3. We have updated the version numbers to indicate this backwards incompatibility to be 4.0.0.beta. This doesn&amp;rsquo;t mean that 4.0 is anywhere close to being released, mind you. We&amp;rsquo;re simply doing this now because we&amp;rsquo;re dropping support for Ruby 1.8.7 in rails/master and people should know what&amp;rsquo;s up.&lt;/p&gt;


	&lt;p&gt;Major versions of Rails has been on about 2-year release cycle since 1.0 (&lt;a href="http://weblog.rubyonrails.org/2005/12/13/rails-1-0-party-like-its-one-oh-oh/" rel="nofollow" target="_blank"&gt;released in 2005&lt;/a&gt;, &lt;a href="http://weblog.rubyonrails.org/2007/12/7/rails-2-0-it-s-done" rel="nofollow" target="_blank"&gt;followed by 2.0 in 2007&lt;/a&gt;, &lt;a href="http://weblog.rubyonrails.org/2010/8/29/rails-3-0-it-s-done" rel="nofollow" target="_blank"&gt;followed by 3.0 in 2010&lt;/a&gt;) and we intend to continue this pattern. The current internal target for Rails 4.0 is sometime in the Summer of 2012 &amp;mdash; but we have blown every major release estimate in the past, so don&amp;rsquo;t bet your farm on it.&lt;/p&gt;


	&lt;p&gt;There&amp;rsquo;s not a lot of details about what we&amp;rsquo;re going to include in Rails 4.0 yet as the primary purpose for bumping the major version number is to drop Ruby 1.8.7 support. But unlike Rails 3.0, we intend for it to be a much smoother transition. The intention is not for this to be a &lt;span class="caps"&gt;REWRITE EVERYTHING&lt;/span&gt; release in the same way 3.0 was to some extent.&lt;/p&gt;


	&lt;p&gt;But we&amp;rsquo;re getting ahead of ourselves. First mission is to get Rails 3.2 out!&lt;/p&gt;</content>
    <source>
      <id>tag:weblog.rubyonrails.org,2011-12-20:29722</id>
      <link rel="alternate" href="http://weblog.rubyonrails.org/2011/12/20/rails-master-is-now-4-0-0-beta"/>
      <title>Rails/master is now 4.0.0.beta</title>
      <updated>2011-12-22T17:46:42Z</updated>
    </source>
  </entry>
  <entry>
    <title>Rails 3.2 RC1: Faster dev mode &amp;amp; routing, explain queries, tagged logger, store</title>
    <updated>2011-12-22T17:46:42Z</updated>
    <published>2011-12-20T00:46:00Z</published>
    <id>planetaki.com:905:post:175790586</id>
    <link rel="alternate" href="http://weblog.rubyonrails.org/2011/12/20/rails-3-2-rc1-faster-dev-mode-routing-explain-queries-tagged-logger-store"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/175790586"/>
    <summary type="html">&lt;p&gt;Once you&amp;rsquo;ve boarded the Rails train, you just know that every stop along the way is going to be a good time. This release candidate is no different and we&amp;rsquo;ve packed it with loving goodies without making upgrading a hassle.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Faster dev mode &amp;amp; routing&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The most noticeable new feature is that development mode got a ton and a half faster. Inspired by &lt;a href="https://github.com/paneq/active_reload" rel="nofollow" target="_blank"&gt;Active Reload&lt;/a&gt;, we now only reload classes from files you&amp;rsquo;ve actually changed. The difference is dramatic on a larger application.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;Once you&amp;rsquo;ve boarded the Rails train, you just know that every stop along the way is going to be a good time. This release candidate is no different and we&amp;rsquo;ve packed it with loving goodies without making upgrading a hassle.&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Faster dev mode &amp;amp; routing&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;The most noticeable new feature is that development mode got a ton and a half faster. Inspired by &lt;a href="https://github.com/paneq/active_reload" rel="nofollow" target="_blank"&gt;Active Reload&lt;/a&gt;, we now only reload classes from files you&amp;rsquo;ve actually changed. The difference is dramatic on a larger application.&lt;/p&gt;


	&lt;p&gt;Route recognition also got a bunch faster thanks to the &lt;a href="https://github.com/rails/journey" rel="nofollow" target="_blank"&gt;new Journey engine&lt;/a&gt; and we made linking much faster as well (especially apparent when you&amp;rsquo;re having 100+ links on a single page).&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Explain queries&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;We&amp;rsquo;ve added a &lt;a href="http://weblog.rubyonrails.org/2011/12/6/what-s-new-in-edge-rails-explain" rel="nofollow" target="_blank"&gt;quick and easy way to explain quieries generated by ARel&lt;/a&gt;. In the console, you can run something like &lt;code&gt;puts Person.active.limit(5).explain&lt;/code&gt; and you&amp;rsquo;ll get the query ARel produces explained (so you can easily see whether its using the right indexes). There&amp;rsquo;s even a default threshold in development mode where if a query takes more than half a second to run, it&amp;rsquo;s automatically explained inline&amp;mdash;how about that!&lt;/p&gt;


	&lt;p&gt;&lt;strong&gt;Tagged logger&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;When you&amp;rsquo;re running a multi-user, multi-account application, it&amp;rsquo;s a great help to be able to filter the log by who did what. Enter the TaggedLogging wrapper. It works like this:&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;Logger = ActiveSupport::TaggedLogging.new(Logger.new(STDOUT))
Logger.tagged("BCX") { Logger.info "Stuff" } # Logs "[BCX] Stuff" 
Logger.tagged("BCX") do
  Logger.tagged("Jason") do
    Logger.info "Stuff" # Logs "\[BCX\] \[Jason\] Stuff" 
  end
end&lt;/code&gt;&lt;/pre&gt;


	&lt;p&gt;&lt;strong&gt;Active Record Store&lt;/strong&gt;&lt;/p&gt;


	&lt;p&gt;Key/value stores are great, but it&amp;rsquo;s not always you want to go the whole honking way just for a little variable-key action. Enter the Active Record Store:&lt;/p&gt;


	&lt;pre&gt;&lt;code&gt;class User &amp;lt; ActiveRecord::Base
  store :settings, accessors: [ :color, :homepage ]
end&lt;/code&gt;&lt;/pre&gt;


	&lt;pre&gt;&lt;code&gt;u = User.new(color: 'black', homepage: '37signals.com')
u.color                          # Accessor stored attribute
u.settings[:country] = 'Denmark' # Any attribute, even if not specified with an accessor&lt;/code&gt;&lt;/pre&gt;


	&lt;p&gt;These are just a few of the highlights. The &lt;a href="https://gist.github.com/1472145" rel="nofollow" target="_blank"&gt;full release notes&lt;/a&gt; detail every loving change.&lt;/p&gt;


	&lt;p&gt;Given that this is a release candidate, we&amp;rsquo;re ever so eager to hear your feedback. We hope it&amp;rsquo;ll be a quick RC phase, but please do spoil that plan by &lt;a href="https://github.com/rails/rails/issues" rel="nofollow" target="_blank"&gt;reporting bugs&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;As always, you install a release candidate by doing &lt;code&gt;gem install rails --pre&lt;/code&gt;.&lt;/p&gt;</content>
    <source>
      <id>tag:weblog.rubyonrails.org,2011-12-20:29697</id>
      <link rel="alternate" href="http://weblog.rubyonrails.org/2011/12/20/rails-3-2-rc1-faster-dev-mode-routing-explain-queries-tagged-logger-store"/>
      <title>Rails 3.2 RC1: Faster dev mode &amp;amp; routing, explain queries, tagged logger, store</title>
      <updated>2011-12-22T17:46:42Z</updated>
    </source>
  </entry>
  <entry>
    <title>What To Do When AllThis Steals Your Photo &amp;amp; Bio</title>
    <updated>2011-12-19T20:19:26Z</updated>
    <published>2011-12-19T17:15:49Z</published>
    <id>planetaki.com:905:post:175673642</id>
    <link rel="alternate" href="http://feedproxy.google.com/~r/slash7/rss/~3/eTG1wROrsXA/"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/175673642"/>
    <summary type="html">&lt;p&gt;There&amp;rsquo;s a terrible new web site out there engaging in, at best, copyright infringement, and at worse, fraud. It&amp;rsquo;s called AllThis.&lt;/p&gt;&lt;p&gt;&lt;img src="https://img.skitch.com/20111219-banj1fncr7n67cp2qh19icsep9.png" onload="resizeImage(this)"&gt;&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;There&amp;rsquo;s a terrible new web site out there engaging in, at best, copyright infringement, and at worse, fraud. It&amp;rsquo;s called AllThis.&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.skitch.com/20111219-banj1fncr7n67cp2qh19icsep9.png" onload="resizeImage(this)"&gt;&lt;/p&gt;

&lt;p&gt;If AllThis targets you, they will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;steal your photo &amp;amp; bio off Twitter&lt;/li&gt;
&lt;li&gt;slap it on an AllThis page, to make it look as if you endorse their system&lt;/li&gt;
&lt;li&gt;put up a big yellow &amp;ldquo;BUY&amp;rdquo; button on it&lt;/li&gt;
&lt;li&gt;and a teensy weensy greyed out notice, for the eagle-eyed, which admits (indirectly) that you&amp;rsquo;re not actually endorsing it&amp;hellip; YET&lt;/li&gt;
&lt;li&gt;tweet about you with @allthisfeed, claiming your time is for sale&lt;/li&gt;
&lt;li&gt;argue with you when you tell them to stop stealing people&amp;rsquo;s stuff&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;img src="https://img.skitch.com/20111219-tn3qmibkc9iypn1m3pktnr5ecd.png" onload="resizeImage(this)"&gt;&lt;/p&gt;

&lt;p&gt;They &lt;em&gt;will&lt;/em&gt; remove you from their site if you threaten them &amp;mdash; &lt;strong&gt;however&lt;/strong&gt;, they will pretend to not &amp;ldquo;understand&amp;rdquo; why you are &amp;ldquo;upset&amp;rdquo; &amp;mdash; &lt;strong&gt;and go on thieving from other people.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So, the best way to stop this is to enforce our copyrights. If they steal from you, don&amp;rsquo;t bother telling them to remove the profile.&lt;/p&gt;

&lt;h3&gt;Send a takedown notice to their DNS service and web host&lt;/h3&gt;

&lt;p&gt;Here&amp;rsquo;s who to write:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Web Host:&lt;/strong&gt; GoGrid. Their email is &lt;a href="mailto:abuse@gogrid.com" rel="nofollow" target="_blank"&gt;abuse@gogrid.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DNS Service:&lt;/strong&gt; Dyn.com. Their email is &lt;a href="mailto:abuse@dyndns.com" rel="nofollow" target="_blank"&gt;abuse@dyndns.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here&amp;rsquo;s what you can send:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;SUBJECT: Abuse Report &amp;ndash; Copyright Infringement&lt;br&gt;&lt;br&gt;
  I am the copyright owner of the photograph being infringed at:
  &lt;strong&gt;(insert URL here)&lt;/strong&gt; &lt;br&gt;&lt;br&gt;&lt;strong&gt;A screenshot of my image being infringed is included&lt;/strong&gt; to assist with its removal from the infringing Web sites.&lt;br&gt;&lt;br&gt;
  Moreover, this web site claims to represent me, has a &amp;ldquo;BUY&amp;rdquo; button listed on my profile, and is tweeting that people can &amp;ldquo;buy time&amp;rdquo; to talk with me on their site. I never gave them permission, signed up for an account, or anything that would constitute permission or endorsement.&lt;br&gt;&lt;br&gt;
  This letter is official notification under the provisions of Section 512(c) of the Digital Millennium Copyright Act (&amp;ldquo;DMCA&amp;rdquo;) to effect removal of the above-reported infringements. I request that you immediately issue a cancellation message as specified in RFC 1036 for the specified postings and prevent the infringer, who is identified by its Web address, from posting the infringing photographs to your servers in the future. Please be advised that law requires you, as a service provider, to &amp;ldquo;expeditiously remove or disable access to&amp;rdquo; the infringing photographs upon receiving this notice. Noncompliance may result in a loss of immunity for liability under the DMCA.&lt;br&gt;&lt;br&gt;
  I have a good faith belief that use of the material in the manner complained of here is not authorized by me, the copyright holder, or the law. The information provided here is accurate to the best of my knowledge. I swear under penalty of perjury that I am the copyright holder.&lt;br&gt;&lt;br&gt;
  Please send me at the address noted below a prompt response indicating the actions you have taken to resolve this matter.&lt;br&gt;&lt;br&gt;
  Sincerely,&lt;br&gt;&lt;br&gt;
  Your Name&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;Is this justified?&lt;/h2&gt;

&lt;p&gt;Yes, it is.&lt;/p&gt;

&lt;p&gt;I and several others have tweeted with the @AllThis account to try to get them to change their ways, but they don&amp;rsquo;t &amp;ldquo;understand&amp;rdquo; that what they are doing is wrong. Nor will they stop doing it to other people.&lt;/p&gt;

&lt;p&gt;More importantly, copyright infringement (and borderline fraudulent representation) like this is certainly against the acceptable use policies for both GoGrid and Dyn.com.&lt;/p&gt;

&lt;p&gt;So, this is our last and best resort.&lt;/p&gt;


&lt;p&gt;Related posts:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href="http://unicornfree.com/2011/dont-follow-your-passion/" rel="nofollow" title="Permanent Link: Don&amp;rsquo;t Follow Your Passion" target="_blank"&gt;Don&amp;rsquo;t Follow Your Passion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://unicornfree.com/2010/preach-it-george-bernard/" rel="nofollow" title="Permanent Link: Preach It, George Bernard" target="_blank"&gt;Preach It, George Bernard&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://unicornfree.com/2011/fuck-glory-startups-are-one-long-con/" rel="nofollow" title="Permanent Link: Fuck Glory &amp;ndash; Startups are One Long Con" target="_blank"&gt;Fuck Glory &amp;ndash; Startups are One Long Con&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/unicornfree/~4/Va-UNsp3DI0" height="1" width="1" onload="resizeImage(this)"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slash7/rss?a=eTG1wROrsXA:SKpd1IWzJmg:yIl2AUoC8zA" rel="nofollow" target="_blank"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slash7/rss?d=yIl2AUoC8zA" border="0" onload="resizeImage(this)"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slash7/rss?a=eTG1wROrsXA:SKpd1IWzJmg:7Q72WNTAKBA" rel="nofollow" target="_blank"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slash7/rss?d=7Q72WNTAKBA" border="0" onload="resizeImage(this)"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/slash7/rss/~4/eTG1wROrsXA" height="1" width="1" onload="resizeImage(this)"&gt;</content>
    <source>
      <id>http://unicornfree.com/?p=1481</id>
      <link rel="alternate" href="http://feedproxy.google.com/~r/slash7/rss/~3/eTG1wROrsXA/"/>
      <title>What To Do When AllThis Steals Your Photo &amp;amp; Bio</title>
      <updated>2011-12-19T20:19:26Z</updated>
    </source>
  </entry>
  <entry>
    <title>#308 Oh My ZSH</title>
    <updated>2011-12-19T12:29:49Z</updated>
    <published>2011-12-19T08:00:00Z</published>
    <id>planetaki.com:905:post:175595132</id>
    <link rel="alternate" href="http://railscasts.com/episodes/308-oh-my-zsh"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/175595132"/>
    <content type="html">As Rails developers, we frequently use the command line. Here I will show how to switch to Z Shell using Oh My ZSH including how to make your own theme and plugins.</content>
    <source>
      <id>oh-my-zsh</id>
      <link rel="alternate" href="http://railscasts.com/episodes/308-oh-my-zsh"/>
      <title>#308 Oh My ZSH</title>
      <updated>2011-12-19T12:29:49Z</updated>
    </source>
  </entry>
  <entry>
    <title>Dealing with the Emotional Turbulence of your Launch</title>
    <updated>2011-12-15T01:39:04Z</updated>
    <published>2011-12-14T16:58:17Z</published>
    <id>planetaki.com:905:post:174858508</id>
    <link rel="alternate" href="http://feedproxy.google.com/~r/slash7/rss/~3/YNjFisBeLls/"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/174858508"/>
    <summary type="html">&lt;p&gt;&lt;a href="http://www.scottmcdowell.us" rel="nofollow" target="_blank"&gt;&lt;img src="http://unicornfree.com/wp-content/uploads/2011/12/Guest-Post-header-template.png" alt="Guest Post header template" border="0" width="596" height="132" style="float:left;" onload="resizeImage(this)"&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The voices in my head have reached a fever pitch. It must be launch time.&lt;/strong&gt;&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;&lt;a href="http://www.scottmcdowell.us" rel="nofollow" target="_blank"&gt;&lt;img src="http://unicornfree.com/wp-content/uploads/2011/12/Guest-Post-header-template.png" alt="Guest Post header template" border="0" width="596" height="132" style="float:left;" onload="resizeImage(this)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The voices in my head have reached a fever pitch. It must be launch time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Launching is an emotional game.&lt;/p&gt;

&lt;p&gt;It&amp;rsquo;s so easy to construct elaborate stories about how this or that detail will lead to terrible failure or runaway success. It&amp;rsquo;s constant. Fully detailed worlds erected by nothing but imagination.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m in the midst of launching &lt;a href="http://www.scottmcdowell.us/hiring-gold/" rel="nofollow" target="_blank"&gt;Hiring Gold&lt;/a&gt;. Hiring Gold is an &lt;a href="http://unicornfree.com/2010/make-an-infoproduct/" rel="nofollow" target="_blank"&gt;infoproduct&lt;/a&gt; that teaches founders &amp;amp; small business owners an 8-week system for hiring awesome people.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My official ship date is December 19th.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It feels like I&amp;rsquo;ve been working on this forever, but it&amp;rsquo;s been about four months in reality.&lt;/p&gt;

&lt;h2&gt;Self-Sabotage, the Launcher&amp;rsquo;s Lament&lt;/h2&gt;

&lt;p&gt;I&amp;rsquo;m confident that Hiring Gold is a great product. I know it works because it&amp;rsquo;s a process I&amp;rsquo;ve used a bazillion times.&lt;/p&gt;

&lt;p&gt;And yet&amp;hellip; I keep sabotaging my progress. It&amp;rsquo;s like I have a secret hope for failure so I can go back to my humdrum existence!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here&amp;rsquo;s an example of a boneheaded thing I did last week. I nearly published a &lt;a href="http://www.scottmcdowell.us/hiring-gold/" rel="nofollow" target="_blank"&gt;landing page&lt;/a&gt; written in the &amp;ldquo;royal we.&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You know that thing, when micro-business owners try to pretend they&amp;rsquo;re bigger by saying &amp;ldquo;we&amp;rdquo;? I almost pulled that douchebaggy move myself. &amp;ldquo;We&amp;rdquo; did this and &amp;ldquo;we&amp;rdquo; did that, so listen to &amp;ldquo;us.&amp;rdquo;&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m embarrassed to even mention this. I don&amp;rsquo;t know what I was thinking. My business is me. It&amp;rsquo;s just a lie to make it seem like anything different.&lt;/p&gt;

&lt;p&gt;And here&amp;rsquo;s where I have to thank Amy for pointing out the big giant unicorn in the room.  This is what she wrote to me:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Little companies don&amp;rsquo;t get anywhere by pretending to be big companies. There&amp;rsquo;s little worse than deciding to go with a little guy only to be treated as if you were going with a big guy&amp;hellip;impersonal language, posturing, etc. &lt;br&gt;&lt;br&gt; Most people WANT to buy from people they can &lt;em&gt;know&lt;/em&gt; and understand. So by shielding yourself behind fake &amp;ldquo;we&amp;rdquo; you are undermining your message.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And you know what? She&amp;rsquo;s right. I KNOW this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I &lt;em&gt;wasn&amp;rsquo;t&lt;/em&gt; thinking, after all. That poor decision I almost made? ALL ABOUT FEAR.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Fear of taking the full responsibility for what I&amp;rsquo;m putting out into the world. Fear of the failure or success of Hiring Gold being on my shoulders alone. Fear of letting people down. Fear of being vulnerable. Fear of playing too small.&lt;/p&gt;

&lt;h2&gt;The Lizard Brain at Work&lt;/h2&gt;

&lt;p&gt;This is why launching is such an emotional game.&lt;/p&gt;

&lt;p&gt;It&amp;rsquo;s so &lt;em&gt;easy&lt;/em&gt; to construct elaborate stories about how this or that detail will lead to terrible failure or runaway success. Fully detailed worlds erected by nothing but imagination.&lt;/p&gt;

&lt;p&gt;When you&amp;rsquo;re pinning your livelihood on a product, the &lt;a href="http://sethgodin.typepad.com/seths_blog/2010/01/quieting-the-lizard-brain.html" rel="nofollow" target="_blank"&gt;lizard brain&lt;/a&gt; rears its ugly head. The lizard brain pleads for the safer option. It tells you to forget all this launch stuff and go take a nap.&lt;/p&gt;

&lt;p&gt;But then where would you be? Without a launch. Without a product. Without a business.&lt;/p&gt;

&lt;h2&gt;A Plea for Balance&lt;/h2&gt;

&lt;p&gt;I&amp;rsquo;m learning that the trick to keeping an even keel is keeping those conversations with myself to a murmur.&lt;/p&gt;

&lt;p&gt;Here are three things that are keeping me sane, tips I have to repeat to myself:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Persevere.&lt;/strong&gt; It sounds simple but just keep going. Don&amp;rsquo;t abandon your product. You&amp;rsquo;ll want to stop and go hide in a hole somewhere at least once a week. Be methodical about ticking off small to-dos, one at a time, and keep going even when you really really REALLY don&amp;rsquo;t want to.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep good people around.&lt;/strong&gt; Value people who tell you the truth (like Amy). Keep them close throughout the launch process. Having people you trust who are forthcoming (even if it hurts) helps to prevent self-sabotage and will hold you accountable. As soon as you tell others your plans, it is exponentially more likely that they&amp;rsquo;ll actually get done.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ignore the muck.&lt;/strong&gt; Know that all the emotional stuff flying around your brain is just that: stuff. It&amp;rsquo;s meaningless. What matters is the doing. Getting your product out there will be different than any scenario you can imagine, good or bad, so put a cap on the dreams and get to work on your launch!&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;As I launch &lt;a href="http://www.scottmcdowell.us/hiring-gold/" rel="nofollow" target="_blank"&gt;Hiring Gold&lt;/a&gt;, and as I get started on my next product for founders, The Underground Lab, the conversations in my head are beginning to feel less urgent. As things go on, I find it easier to resist the imaginary trip my ego is leading me on.&lt;/p&gt;

&lt;p&gt;Does this mean I&amp;rsquo;ll have less emotional muck to contend with as I get more comfortable with the launch process?&lt;/p&gt;

&lt;p&gt;Probably not. After all, you can&amp;rsquo;t run a meaningful business without actual meaning.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Editor&amp;rsquo;s note: This is a great cliffhanger! But from my experience, launching definitely gets easier. Thanks, Scott!&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;This guest post by &lt;a href="http://www.scottmcdowell.us/" rel="nofollow" target="_blank"&gt;Scott McDowell&lt;/a&gt;, an expert on designing organizations and a &lt;a href="http://unicornfree.com/30x500" rel="nofollow" target="_blank"&gt;30&amp;times;500&lt;/a&gt; alum (Summer 2011). His first product, &lt;a href="http://www.scottmcdowell.us/hiring-gold/" rel="nofollow" target="_blank"&gt;Hiring Gold&lt;/a&gt;, is designed to help you hire awesome talent&amp;hellip; and not have to learn the (very very) hard way.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;p&gt;Related posts:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href="http://unicornfree.com/2010/the-deal-30x500-launch-class-splained/" rel="nofollow" title="Permanent Link: The deal: 30&amp;times;500 Launch Class, Splained" target="_blank"&gt;The deal: 30&amp;times;500 Launch Class, Splained&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://unicornfree.com/2011/dont-follow-your-passion/" rel="nofollow" title="Permanent Link: Don&amp;rsquo;t Follow Your Passion" target="_blank"&gt;Don&amp;rsquo;t Follow Your Passion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://unicornfree.com/2011/stacking-the-bricks/" rel="nofollow" title="Permanent Link: The Truth about Success &amp;ndash; Brick by Brick" target="_blank"&gt;The Truth about Success &amp;ndash; Brick by Brick&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/unicornfree/~4/eFpXS-TBHtc" height="1" width="1" onload="resizeImage(this)"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slash7/rss?a=YNjFisBeLls:Bn8H3cimCOU:yIl2AUoC8zA" rel="nofollow" target="_blank"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slash7/rss?d=yIl2AUoC8zA" border="0" onload="resizeImage(this)"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slash7/rss?a=YNjFisBeLls:Bn8H3cimCOU:7Q72WNTAKBA" rel="nofollow" target="_blank"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slash7/rss?d=7Q72WNTAKBA" border="0" onload="resizeImage(this)"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/slash7/rss/~4/YNjFisBeLls" height="1" width="1" onload="resizeImage(this)"&gt;</content>
    <source>
      <id>http://unicornfree.com/?p=1456</id>
      <link rel="alternate" href="http://feedproxy.google.com/~r/slash7/rss/~3/YNjFisBeLls/"/>
      <title>Dealing with the Emotional Turbulence of your Launch</title>
      <updated>2011-12-15T01:39:04Z</updated>
    </source>
  </entry>
  <entry>
    <title>Geek Gift Guide 2011</title>
    <updated>2011-12-14T02:20:42Z</updated>
    <published>2011-12-13T21:00:00Z</published>
    <id>planetaki.com:905:post:174650199</id>
    <link rel="alternate" href="http://blog.peepcode.com/blog/2011/geek-gift-guide-2011"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/174650199"/>
    <summary type="html">&lt;p&gt;&lt;strong&gt;This article is heavily styled and is best viewed at &lt;a href="http://blog.peepcode.com/blog/2011/geek-gift-guide-2011" rel="nofollow" target="_blank"&gt;PeepCode&lt;/a&gt;!&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;We&amp;rsquo;ve all seen the geek gift guides put out by major publications. Somehow &lt;em&gt;all&lt;/em&gt; geeks, regardless of their connection to technology, like star wars legos, rubix cubes, and light-up keychains. Seriously? Not here. Not us.&lt;/p&gt;&lt;p&gt;Many geeks appreciate well-designed, thoughtful products. We know this because it&amp;rsquo;s our bottom line. So here&amp;rsquo;s our gift guide for classy geeks.&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;&lt;strong&gt;This article is heavily styled and is best viewed at &lt;a href="http://blog.peepcode.com/blog/2011/geek-gift-guide-2011" rel="nofollow" target="_blank"&gt;PeepCode&lt;/a&gt;!&lt;/strong&gt;&lt;/p&gt;&lt;div id="geek-gift"&gt;
  &lt;div class="row"&gt;
    &lt;div class="column grid_12"&gt;
      &lt;p&gt;We&amp;rsquo;ve all seen the geek gift guides put out by major publications. Somehow &lt;em&gt;all&lt;/em&gt; geeks, regardless of their connection to technology, like star wars legos, rubix cubes, and light-up keychains. Seriously? Not here. Not us.&lt;/p&gt;
      &lt;p&gt;Many geeks appreciate well-designed, thoughtful products. We know this because it&amp;rsquo;s our bottom line. So here&amp;rsquo;s our gift guide for classy geeks.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="row"&gt;
    &lt;div class="column align-center"&gt;
      &lt;div class="price-range"&gt;
        &lt;div class="left-round-border"&gt;
          Filter:
        &lt;/div&gt;
        &lt;a class="active" href="#all" rel="nofollow" target="_blank"&gt;
          All
        &lt;/a&gt;
        &lt;a href="#1-20" rel="nofollow" target="_blank"&gt;&lt;sup&gt;$&lt;/sup&gt;1&amp;ndash;20
        &lt;/a&gt;
        &lt;a href="#20-60" rel="nofollow" target="_blank"&gt;&lt;sup&gt;$&lt;/sup&gt;20&amp;ndash;60
        &lt;/a&gt;
        &lt;a href="#60-100" rel="nofollow" target="_blank"&gt;&lt;sup&gt;$&lt;/sup&gt;60&amp;ndash;100
        &lt;/a&gt;
        &lt;a href="#100-200" rel="nofollow" target="_blank"&gt;&lt;sup&gt;$&lt;/sup&gt;100&amp;ndash;200
        &lt;/a&gt;
        &lt;a class="right-round-border" href="#200-800" rel="nofollow" target="_blank"&gt;&lt;sup&gt;$&lt;/sup&gt;200&amp;ndash;800
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="row gifts"&gt;
    &lt;div class="column grid_12"&gt;
      &lt;h2&gt;
        Gifts from
        &lt;a id="1-20" rel="nofollow" target="_blank"&gt;&lt;sup&gt;$&lt;/sup&gt;1-20
        &lt;/a&gt;
      &lt;/h2&gt;
    &lt;/div&gt;
    &lt;div class="column feature"&gt;
      &lt;a href="http://peepcode.com/gifts" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/peepcode-gift-single.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://peepcode.com/gifts" rel="nofollow" target="_blank"&gt;
          Single PeepCode Gift Card
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;12
        &lt;/span&gt;
        A single screencast for your developer friends or that up-and-coming youngster in your family who wants to get started with programming.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://www.amazon.com/Crowd-Complete-Season-One/dp/B001NOMOS8/" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/it-crowd.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://www.amazon.com/Crowd-Complete-Season-One/dp/B001NOMOS8/" rel="nofollow" target="_blank"&gt;
          The IT Crowd, Season 1
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;10
        &lt;/span&gt;
        Unfortunately, this is about stereotypical nerds. Fortunately, it&amp;rsquo;s awesomely hilarious.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="https://www.canoeonline.net/shop/inspect/worther-shorty-mechanical-pencil/2021" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/mechanical-pencil.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="https://www.canoeonline.net/shop/inspect/worther-shorty-mechanical-pencil/2021" rel="nofollow" target="_blank"&gt;
          Worther Shorty Mechanical Pencil
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;14
        &lt;/span&gt;
        Writing is much more fun with a beautiful pencil. Available in black, grey, or yellow.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="https://www.canoeonline.net/shop/inspect/field-notes-notebooks-state-fair-edition/2646" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/field-notes.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="https://www.canoeonline.net/shop/inspect/field-notes-notebooks-state-fair-edition/2646" rel="nofollow" target="_blank"&gt;
          Field Notes
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;10
        &lt;/span&gt;
        Now that smartphones have abandoned the stylus, there's nothing like paper and pen for brainstorming. Whether your field is a coffee shop or a bus, Field Notes are convenient and stylish.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://www.amazon.com/Wisdom-Crowds-James-Surowiecki/dp/0385721706/" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/wisdom-of-crowds.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://www.amazon.com/Wisdom-Crowds-James-Surowiecki/dp/0385721706/" rel="nofollow" target="_blank"&gt;
          The Wisdom of Crowds
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;11
        &lt;/span&gt;
        Both a classic and a quick read, this entertaining book is for entrepreneurs, sociologists, and deep thinkers of all kinds.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://www.theghostlystore.com/collections/goods/products/bluelounge-milo" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/milo.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://www.theghostlystore.com/collections/goods/products/bluelounge-milo" rel="nofollow" target="_blank"&gt;
          Milo
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;15
        &lt;/span&gt;
        An elegant stand for any smartphone with a smooth, hard surface.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="https://www.momastore.org/webapp/wcs/stores/servlet/ProductDisplay_Branch%20Earphone%20Splitter_10451_10001_111827_-1_26663_26666_111856" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/branch-splitter.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="https://www.momastore.org/webapp/wcs/stores/servlet/ProductDisplay_Branch%20Earphone%20Splitter_10451_10001_111827_-1_26663_26666_111856" rel="nofollow" target="_blank"&gt;
          Branch Earphone Splitter
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;10
        &lt;/span&gt;
        Split your music between three people. Useful for those cramped international plane flights to the next tech conference.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://www.surlatable.com/product/PRO-667766/Whisky-Stones,-Set-of-Nine" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/whisky-stones.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://www.surlatable.com/product/PRO-667766/Whisky-Stones,-Set-of-Nine" rel="nofollow" target="_blank"&gt;
          Whisky Stones
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;20
        &lt;/span&gt;
        These bad boys will keep your whisky chilled without watering it down? Oh, buddy.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://www.amazon.com/How-Booze-Exquisite-Cocktails-Unsound/dp/0061963305" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/how-to-booze.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://www.amazon.com/How-Booze-Exquisite-Cocktails-Unsound/dp/0061963305" rel="nofollow" target="_blank"&gt;
          How to Booze
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;20
        &lt;/span&gt;
        &lt;em&gt;Exquisite Cocktails and other Unsound Advice&lt;/em&gt; humorously suggests matching beverages for any social situation.
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="row gifts"&gt;
    &lt;div class="column grid_12"&gt;
      &lt;h2&gt;
        Gifts from
        &lt;a id="20-60" rel="nofollow" target="_blank"&gt;&lt;sup&gt;$&lt;/sup&gt;20-60
        &lt;/a&gt;
      &lt;/h2&gt;
    &lt;/div&gt;
    &lt;div class="column feature"&gt;
      &lt;a href="http://peepcode.com/gifts" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/peepcode-gift-5pack.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://peepcode.com/gifts" rel="nofollow" target="_blank"&gt;
          5-Pack Gift Card
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;55
        &lt;/span&gt;
        Give five screencasts to anyone, redeemable at any time.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://shop.peepcode.com/products/coffeescript-t-shirt" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/peepcodeshirt-coffeescript.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://shop.peepcode.com/products/coffeescript-t-shirt" rel="nofollow" target="_blank"&gt;
          CoffeeScript T-Shirt
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;26
        &lt;/span&gt;
        For that friend who loves CoffeeScript, or even just coffee.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://shop.peepcode.com/products/chris-wanstrath-t-shirt" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/peepcodeshirt-wanstrath.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://shop.peepcode.com/products/chris-wanstrath-t-shirt" rel="nofollow" target="_blank"&gt;
          Chris Wanstrath T-Shirt
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;26
        &lt;/span&gt;
        This one's a bit niche, but that's what makes the best gifts, right? A t-shirt featuring Chris Wanstrath, co-founder of GitHub.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://www.amazon.com/dp/B0042X8XQE/?tag=svpply01-20" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/powercup-mobile-inverter.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://www.amazon.com/dp/B0042X8XQE/?tag=svpply01-20" rel="nofollow" target="_blank"&gt;
          PowerCup Mobile Inverter
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;26
        &lt;/span&gt;
        Until Apple makes a power adapter for your car, this is the best way to stay energized on the road.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://www.mophie.com/product-p/2025_jpu-reserve-2.htm" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/juice-pack.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://www.mophie.com/product-p/2025_jpu-reserve-2.htm" rel="nofollow" target="_blank"&gt;
          Juice Pack Reserver
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;35
        &lt;/span&gt;
        We don't mind a keychain when it's this useful! Carry an extra charge for your portable Apple products.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://www.blessthisstuff.com/stuff/technology/computers/uboard-smart/" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/uboard-smart.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://www.blessthisstuff.com/stuff/technology/computers/uboard-smart/" rel="nofollow" target="_blank"&gt;
          UBoard Smart
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;49
        &lt;/span&gt;
        Keeping your desk orderly isn't quite as important as having a place for your phone, coffee, tea, and three USB devices.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://www.conranshop.co.uk/609968/MOSHI-MOSHI-POP-BLACK/Product" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/moshi-moshi-pop-black.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://www.conranshop.co.uk/609968/MOSHI-MOSHI-POP-BLACK/Product" rel="nofollow" target="_blank"&gt;
          MOSHI MOSHI Pop Black
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;40
        &lt;/span&gt;
        Make those serious business calls even more official. Also available in red, pink, green, and yellow.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://www.tortoisegeneralstore.com/online_store/index.php/by-category/crafts/braid-wood-puzzle.html" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/wood-puzzle.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://www.tortoisegeneralstore.com/online_store/index.php/by-category/crafts/braid-wood-puzzle.html" rel="nofollow" target="_blank"&gt;
          Braid Wood Puzzle
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;34
        &lt;/span&gt;
        A brain teaser in 6 or 12 pieces.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://www.lovescotch.com/p/pigs-nose-5-year-old" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/pigs-nose.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://www.lovescotch.com/p/pigs-nose-5-year-old" rel="nofollow" target="_blank"&gt;
          Pig's Nose 5 Year Scotch
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;44
        &lt;/span&gt;
        Not all scotch has to be serious. Recommended by our marketing department.
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="row gifts"&gt;
    &lt;div class="column grid_12"&gt;
      &lt;h2&gt;
        Gifts from
        &lt;a id="60-100" rel="nofollow" target="_blank"&gt;&lt;sup&gt;$&lt;/sup&gt;60-100
        &lt;/a&gt;
      &lt;/h2&gt;
    &lt;/div&gt;
    &lt;div class="column feature"&gt;
      &lt;a href="http://peepcode.com/gifts" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/peepcode-gift-10pack.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://peepcode.com/gifts" rel="nofollow" target="_blank"&gt;
          10-Pack Gift Card
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;99
        &lt;/span&gt;
        This gift won't collect dust in the bottom drawer!
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://coolmaterial.com/tech/wood-ipad-2-cases/" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/wood-case.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://coolmaterial.com/tech/wood-ipad-2-cases/" rel="nofollow" target="_blank"&gt;
          Wood iPad 2 Case
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;79
        &lt;/span&gt;
        Nothing goes together like machined aluminum and solid wood.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://www.etsy.com/listing/69589092/4-letter-pillows-inserts-included" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/scrabble-pillows.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://www.etsy.com/listing/69589092/4-letter-pillows-inserts-included" rel="nofollow" target="_blank"&gt;
          Four Scrabble Letter Pillows
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;98
        &lt;/span&gt;
        With letters in solid black felt.
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="row gifts"&gt;
    &lt;div class="column grid_12"&gt;
      &lt;h2&gt;
        Gifts from
        &lt;a id="100-200" rel="nofollow" target="_blank"&gt;&lt;sup&gt;$&lt;/sup&gt;100-200
        &lt;/a&gt;
      &lt;/h2&gt;
    &lt;/div&gt;
    &lt;div class="column feature"&gt;
      &lt;a href="http://peepcode.com/gifts" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/peepcode-gift-unlimited.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://peepcode.com/gifts" rel="nofollow" target="_blank"&gt;
          Unlimited Subscription Gift Card
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;199
        &lt;/span&gt;
        This one will keep a friend or family member occupied (and maybe even employed) until next year!
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://shop.creaturesofcomfort.us/yuetetrisl-shapepouch-red.aspx" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/tetris-pouch.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://shop.creaturesofcomfort.us/yuetetrisl-shapepouch-red.aspx" rel="nofollow" target="_blank"&gt;
          Tetris L-Shape Pouch
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;165
        &lt;/span&gt;
        "Extremely supple leather" and "lined in red velvet" should be all you need to know.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://www.unicahome.com/p23982/kikkerland/to-ca-wood-led-clock-by-kouji-iwasaki.html" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/wood-clock.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://www.unicahome.com/p23982/kikkerland/to-ca-wood-led-clock-by-kouji-iwasaki.html" rel="nofollow" target="_blank"&gt;
          To:Ca Wood LED Clock
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;150
        &lt;/span&gt;
        A natural contrast to all the stainless steel, titanium, and adamantium in your home.
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="row gifts"&gt;
    &lt;div class="column grid_12"&gt;
      &lt;h2&gt;
        Gifts from
        &lt;a id="200-800" rel="nofollow" target="_blank"&gt;&lt;sup&gt;$&lt;/sup&gt;200-800
        &lt;/a&gt;
      &lt;/h2&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://www.revo.co.uk/digital-radio/revo-heritage.php" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/heritage-radio.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://www.revo.co.uk/digital-radio/revo-heritage.php" rel="nofollow" target="_blank"&gt;
          Revo Renaissance Radio
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;357
        &lt;/span&gt;
        The ceiling of the Sistine Chapel may have turned out differently if Michaelangelo had access to thousands of Internet radio stations (plus a docking port).
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://store.apple.com/us/product/TX584ZM/A" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/bowers-wilkins-headphones.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://store.apple.com/us/product/TX584ZM/A" rel="nofollow" target="_blank"&gt;
          Bowers &amp;amp; Wilkins P5 Headphones
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;300
        &lt;/span&gt;
        Soft and cushy on the ears, tiny for travel, beautiful looking, and noise isolating. Yes, yes, and yes.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://www.dwr.com/product/link-task-lamp-small.do" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/led-lamp.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://www.dwr.com/product/link-task-lamp-small.do" rel="nofollow" target="_blank"&gt;
          Link LED Task Lamp
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;350
        &lt;/span&gt;
        Move this guy anywhere. With 360&amp;deg; swivel, 15 high-power LED lights, and only 7.5 watts.
      &lt;/p&gt;
    &lt;/div&gt;
    &lt;div class="column item grid_6"&gt;
      &lt;a href="http://www.williams-sonoma.com/products/breville-espresso-machine-with-integrated-burr-grinder/" rel="nofollow" target="_blank"&gt;
        &lt;img src="http://blog.peepcode.com/geek-gift-guide-2011/imgs/espresso-maker.png" onload="resizeImage(this)"&gt;&lt;/a&gt;
      &lt;p class="title"&gt;
        &lt;a href="http://www.williams-sonoma.com/products/breville-espresso-machine-with-integrated-burr-grinder/" rel="nofollow" target="_blank"&gt;
          Espresso Machine with Integrated Grinder
        &lt;/a&gt;
      &lt;/p&gt;
      &lt;p&gt;
        &lt;span class="price"&gt;&lt;sup&gt;$&lt;/sup&gt;800
        &lt;/span&gt;
        Run it on automatic for a cup in the morning and graduate to manual for an evening sip. An integrated grinder means maximum flavor every time.
      &lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;div id="ribbons-bg"&gt;
  &amp;nbsp;
&lt;/div&gt;</content>
    <source>
      <id>tag:blog.peepcode.com,2011-12-13:/blog/2011/geek-gift-guide-2011</id>
      <link rel="alternate" href="http://blog.peepcode.com/blog/2011/geek-gift-guide-2011"/>
      <title>Geek Gift Guide 2011</title>
      <updated>2011-12-14T02:20:42Z</updated>
    </source>
  </entry>
  <entry>
    <title>#306 ElasticSearch Part 1</title>
    <updated>2011-12-13T10:48:44Z</updated>
    <published>2011-12-12T08:00:00Z</published>
    <id>planetaki.com:905:post:174496693</id>
    <link rel="alternate" href="http://railscasts.com/episodes/306-elasticsearch-part-1"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/174496693"/>
    <content type="html">Add full text searching using ElasticSearch and Tire. Here I will show the steps involved in adding this search to an existing application. This is the first part in a two part series.</content>
    <source>
      <id>elasticsearch-part-1</id>
      <link rel="alternate" href="http://railscasts.com/episodes/306-elasticsearch-part-1"/>
      <title>#306 ElasticSearch Part 1</title>
      <updated>2011-12-13T10:48:44Z</updated>
    </source>
  </entry>
  <entry>
    <title>Great Software Requires Continuous Transgression</title>
    <updated>2011-12-07T23:54:38Z</updated>
    <published>2011-12-07T17:07:31Z</published>
    <id>planetaki.com:905:post:173561865</id>
    <link rel="alternate" href="http://feedproxy.google.com/~r/slash7/rss/~3/nM7I3DBhuso/"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/173561865"/>
    <summary type="html">&lt;p&gt;[W]hen you are doing something in a recurring way to diminish risk or doing it in the same way as you have done it before, it is clear why professionalism is not enough. After all, what is required in our field, more than anything else, is continuous transgression.&lt;/p&gt;&lt;p&gt;Professionalism does not allow for that because transgression has to encompass the possibility of failure, and if you are professional, your instinct is not to fail, it is to repeat success. So professionalism as a lifetime aspiration is a limited goal.&lt;/p&gt;&lt;p&gt;&amp;ndash; &lt;em&gt;Milton Glaser, 2001, at a talk given in London&lt;/em&gt;&lt;/p&gt;</summary>
    <content type="html">&lt;blockquote&gt;
  &lt;p&gt;[W]hen you are doing something in a recurring way to diminish risk or doing it in the same way as you have done it before, it is clear why professionalism is not enough. After all, what is required in our field, more than anything else, is continuous transgression.&lt;br&gt;&lt;br&gt;Professionalism does not allow for that because transgression has to encompass the possibility of failure, and if you are professional, your instinct is not to fail, it is to repeat success. So professionalism as a lifetime aspiration is a limited goal.&lt;br&gt;&lt;br&gt;&amp;ndash; &lt;em&gt;Milton Glaser, 2001, at a talk given in London&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When you sit down to design a piece of software, your instinct is not to fail, it is to repeat success.&lt;/p&gt;

&lt;p&gt;That&amp;rsquo;s why software everywhere is plagued by the disease of sameness.&lt;/p&gt;

&lt;p&gt;All to-do apps act the same. All calendar apps act the same. All email clients act the same &amp;mdash; nearly identical to the first serious command-line apps from over 20 years before. Outlook and Elm don&amp;rsquo;t look that different.&lt;/p&gt;

&lt;p&gt;Sidebars. Playlists. Table views. Folders. Threads.&lt;/p&gt;

&lt;p&gt;Select lists which hide options instead of bulleted lists which lay them out, or live search/autocomplete fields which let the typing, keyboard-savvy user keep typing and savvying.&lt;/p&gt;

&lt;p&gt;These are things we use without thinking, in many many places where they are inappropriate.&lt;/p&gt;

&lt;p&gt;We need continuous transgression.&lt;/p&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slash7/rss?a=nM7I3DBhuso:d8CkbXmEv2Y:yIl2AUoC8zA" rel="nofollow" target="_blank"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slash7/rss?d=yIl2AUoC8zA" border="0" onload="resizeImage(this)"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slash7/rss?a=nM7I3DBhuso:d8CkbXmEv2Y:7Q72WNTAKBA" rel="nofollow" target="_blank"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slash7/rss?d=7Q72WNTAKBA" border="0" onload="resizeImage(this)"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/slash7/rss/~4/nM7I3DBhuso" height="1" width="1" onload="resizeImage(this)"&gt;</content>
    <source>
      <id>http://cheerfulsw.com/?p=106</id>
      <link rel="alternate" href="http://feedproxy.google.com/~r/slash7/rss/~3/nM7I3DBhuso/"/>
      <title>Great Software Requires Continuous Transgression</title>
      <updated>2011-12-07T23:54:38Z</updated>
    </source>
  </entry>
  <entry>
    <title>What's new in Edge Rails: EXPLAIN</title>
    <updated>2011-12-07T00:36:07Z</updated>
    <published>2011-12-06T21:20:00Z</published>
    <id>planetaki.com:905:post:173361339</id>
    <link rel="alternate" href="http://weblog.rubyonrails.org/2011/12/6/what-s-new-in-edge-rails-explain"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/173361339"/>
    <summary type="html">&lt;p&gt;There are some new features related to EXPLAIN in the forthcoming Ruby on Rails 3.2 we'd like
to share:&lt;/p&gt;&lt;p&gt;As of this writing they are available for the adapters &lt;code&gt;sqlite3&lt;/code&gt;, &lt;code&gt;mysql2&lt;/code&gt;, and
&lt;code&gt;postgresql&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;You can now run EXPLAIN on the SQL generated by a relation this way:&lt;/p&gt;</summary>
    <content type="html">&lt;p&gt;There are some new features related to EXPLAIN in the forthcoming Ruby on Rails 3.2 we'd like
to share:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Running EXPLAIN manually&lt;/li&gt;
&lt;li&gt;Automatic EXPLAIN for slow queries&lt;/li&gt;
&lt;li&gt;Silencing automatic EXPLAIN&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;As of this writing they are available for the adapters &lt;code&gt;sqlite3&lt;/code&gt;, &lt;code&gt;mysql2&lt;/code&gt;, and
&lt;code&gt;postgresql&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;Running EXPLAIN Manually&lt;/h2&gt;

&lt;p&gt;You can now run EXPLAIN on the SQL generated by a relation this way:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;User.where(:id =&amp;gt; 1).joins(:posts).explain
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The result of that method call is a string that carefully imitates the output of
database shells. For example, under MySQL you get something similar to&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;EXPLAIN for: SELECT `users`.* FROM `users` INNER JOIN `posts` ON `posts`.`user_id` = `users`.`id` WHERE `users`.`id` = 1
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
| id | select_type | table | type  | possible_keys | key     | key_len | ref   | rows | Extra       |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
|  1 | SIMPLE      | users | const | PRIMARY       | PRIMARY | 4       | const |    1 |             |
|  1 | SIMPLE      | posts | ALL   | NULL          | NULL    | NULL    | NULL  |    1 | Using where |
+----+-------------+-------+-------+---------------+---------+---------+-------+------+-------------+
2 rows in set (0.00 sec)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;and under PostgreSQL the same call yields something like&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;EXPLAIN for: SELECT "users".* FROM "users" INNER JOIN "posts" ON "posts"."user_id" = "users"."id" WHERE "users"."id" = 1
                                  QUERY PLAN
------------------------------------------------------------------------------
 Nested Loop Left Join  (cost=0.00..37.24 rows=8 width=0)
   Join Filter: (posts.user_id = users.id)
   -&amp;gt;  Index Scan using users_pkey on users  (cost=0.00..8.27 rows=1 width=4)
         Index Cond: (id = 1)
   -&amp;gt;  Seq Scan on posts  (cost=0.00..28.88 rows=8 width=4)
         Filter: (posts.user_id = 1)
(6 rows)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Please notes that &lt;code&gt;explain&lt;/code&gt; &lt;strong&gt;runs&lt;/strong&gt; the query or queries and asks the
database for their respective query plan afterwards. This is because due to eager loading a relation may trigger several queries to fetch the records and their associations, and in such cases, some queries need the result of
the previous ones.&lt;/p&gt;

&lt;p&gt;If the relation triggers several queries the method still returns a single
string with all the query plans. This is an output meant for human consumption so we preferred to present
everything as a string in a format which is familiar right away rather than a structure.&lt;/p&gt;

&lt;h2&gt;Automatic EXPLAIN For Slow Queries&lt;/h2&gt;

&lt;p&gt;Rails 3.2 has the ability to help in detecting slow queries.&lt;/p&gt;

&lt;p&gt;New applications get&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;config.active_record.auto_explain_threshold_in_seconds = 0.5
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;in &lt;em&gt;config/environments/development.rb&lt;/em&gt;. Active Record monitors queries and if
they take more than that threshold their query plan will be logged using &lt;code&gt;warn&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That works for anything running &lt;code&gt;find_by_sql&lt;/code&gt; (which is almost everything, since
most of Active Record ends up calling that method). In the particular case of
relations, the threshold is compared against the total time needed to fetch the
records, not against the individual time taken by each involved query. Because
conceptually we are concerned with the cost of the call&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;User.where(:id =&amp;gt; 1).joins(:posts).explain
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;rather than the cost of the different queries that call may trigger due to the
implementation.&lt;/p&gt;

&lt;p&gt;By default the threshold is &lt;code&gt;nil&lt;/code&gt; in the test and production environments, which
means the feature is disabled.&lt;/p&gt;

&lt;p&gt;The value of that parameter is &lt;code&gt;nil&lt;/code&gt; also if the threshold is not set, so
existing applications will need to add it by hand if they migrate to 3.2 to be
able to enable automatic EXPLAIN.&lt;/p&gt;

&lt;h2&gt;Silencing Automatic EXPLAIN&lt;/h2&gt;

&lt;p&gt;With automatic EXPLAIN enabled, it could still be the case that some queries are
just slow and you know they have to be. For example, a heavyweight report in the
backoffice.&lt;/p&gt;

&lt;p&gt;The macro &lt;code&gt;silence_auto_explain&lt;/code&gt; allows you to avoid having EXPLAIN run
repeatedly in those areas of code:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;ActiveRecord::Base.silence_auto_explain do
  # no automatic EXPLAIN here
end
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Interpreting Query Plans&lt;/h2&gt;

&lt;p&gt;The interpretation of the query plans is another topic, these are some pointers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQLite: &lt;a href="http://www.sqlite.org/eqp.html" rel="nofollow" target="_blank"&gt;EXPLAIN QUERY PLAN&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;MySQL: &lt;a href="http://dev.mysql.com/doc/refman/5.6/en/explain-output.html" rel="nofollow" target="_blank"&gt;EXPLAIN Output Format&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;PostgreSQL: &lt;a href="http://www.postgresql.org/docs/current/static/using-explain.html" rel="nofollow" target="_blank"&gt;Using EXPLAIN&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Happy debugging!&lt;/p&gt;</content>
    <source>
      <id>tag:weblog.rubyonrails.org,2011-12-06:29687</id>
      <link rel="alternate" href="http://weblog.rubyonrails.org/2011/12/6/what-s-new-in-edge-rails-explain"/>
      <title>What's new in Edge Rails: EXPLAIN</title>
      <updated>2011-12-07T00:36:07Z</updated>
    </source>
  </entry>
  <entry>
    <title>#304 OmniAuth Identity</title>
    <updated>2011-12-05T16:50:17Z</updated>
    <published>2011-12-05T08:00:00Z</published>
    <id>planetaki.com:905:post:173086298</id>
    <link rel="alternate" href="http://railscasts.com/episodes/304-omniauth-identity"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/173086298"/>
    <content type="html">With the release of OmniAuth 1.0 there is a new Identity strategy which allows users to register/login with a password if they don't want to use an external provider.</content>
    <source>
      <id>omniauth-identity</id>
      <link rel="alternate" href="http://railscasts.com/episodes/304-omniauth-identity"/>
      <title>#304 OmniAuth Identity</title>
      <updated>2011-12-05T16:50:17Z</updated>
    </source>
  </entry>
  <entry>
    <title>Terry Pratchett&amp;rsquo;s Witches and Your Business (Biz Book Friday)</title>
    <updated>2011-12-03T01:47:19Z</updated>
    <published>2011-12-02T22:06:56Z</published>
    <id>planetaki.com:905:post:172726852</id>
    <link rel="alternate" href="http://feedproxy.google.com/~r/slash7/rss/~3/z12ufqg4xjA/"/>
    <link rel="full" href="http://www.planetaki.com/ror/posts/172726852"/>
    <summary type="html">&lt;p&gt;&lt;em&gt;Hello, and welcome to yet another &lt;a href="http://unicornfree.com/category/biz-book-friday/" rel="nofollow" target="_blank"&gt;Biz Book Friday&lt;/a&gt;! This one&amp;rsquo;s a bit late because I&amp;rsquo;m feeling under the weather. Hope you enjoy it nonetheless. There are, of course, many more to choose from &amp;mdash; on, admittedly, more serious, actionable topics. Today I&amp;rsquo;m feeling philosophical.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.amazon.com/Wee-Free-Men-Discworld/dp/0060012382" rel="nofollow" target="_blank"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/51gdrgMY1yL._BO2,204,203,200_,22_AA300_SH20_OU01_.jpg" border="0" onload="resizeImage(this)"&gt;&lt;/a&gt;&lt;/p&gt;</summary>
    <content type="html">&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Hello, and welcome to yet another &lt;a href="http://unicornfree.com/category/biz-book-friday/" rel="nofollow" target="_blank"&gt;Biz Book Friday&lt;/a&gt;! This one&amp;rsquo;s a bit late because I&amp;rsquo;m feeling under the weather. Hope you enjoy it nonetheless. There are, of course, many more to choose from &amp;mdash; on, admittedly, more serious, actionable topics. Today I&amp;rsquo;m feeling philosophical.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://www.amazon.com/Wee-Free-Men-Discworld/dp/0060012382" rel="nofollow" target="_blank"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/51gdrgMY1yL._BO2,204,203,200_,22_AA300_SH20_OU01_.jpg" border="0" onload="resizeImage(this)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All my favorite authors are dyed-in-the-wool humanists. You get the feeling from their words that they&amp;rsquo;ve looked at all of humanity&amp;hellip; and they&amp;rsquo;ve seen the punchline.  They&amp;rsquo;re laughing, even while their hearts encompass the whole world.&lt;/p&gt;

&lt;p&gt;Terry Pratchett certainly fits that description.&lt;/p&gt;

&lt;p&gt;In the Discworld, witches stand for stalwartness, doing what needs to be done, thinking what needs to be thought &amp;mdash; and seeing what&amp;rsquo;s really there.&lt;/p&gt;

&lt;p&gt;And so, today&amp;rsquo;s Biz Book Friday, I present to you excerpts from &lt;a href="http://www.amazon.com/Wee-Free-Men-Discworld/dp/0060012382" rel="nofollow" target="_blank"&gt;Wee Free Men&lt;/a&gt;, wherein our young hero (a 9-year-old dairy maid named Tiffany Aching) finds herself to be a witch.&lt;/p&gt;

&lt;p&gt;But really, the lessons she learns apply to everything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On the way that the world looks at competent, successful people:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;People tended to leave Tiffany alone. There was nothing particularly cruel or unpleasant about this, but the farm was big and everyone had their jobs to do, and she did hers very well and so she became, in a way, invisible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I truly believe that one of the biggest diseases infecting smart, competent people today is the belief that being smart and competent and good at your job is good enough to get you noticed. That they are, somehow, expecting &lt;em&gt;more&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On the magical school for witchcraft:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&amp;ldquo;Can I go there by magic? Does, like, a unicorn turn up to carry me there or something?&amp;rdquo;&lt;br&gt;&lt;br&gt;&amp;ldquo;Why should it? A unicorn is nothing more than a big horse that comes to a point, anyway. Nothing to get so excited about,&amp;rdquo; said Miss Tick.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I swear this is not wear my slay-the-unicorns ideology comes from&amp;hellip; but I wouldn&amp;rsquo;t mind if it did. (In a way, this awesome series of books is the anti-Harry Potter. I know which &lt;em&gt;I&amp;rsquo;d&lt;/em&gt; read to any innocent, unsuspecting child in my care.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On the way that life tests you before you&amp;rsquo;ve got any business being tested:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&amp;ldquo;The thing about witchcraft,&amp;rdquo; said Mistress Weatherwax, &amp;ldquo;is that it&amp;rsquo;s not like school at all. First you get the test, and then afterward you spend years findin&amp;rsquo; out how you passed it. It&amp;rsquo;s a bit like life in that respect.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As in life, so in business.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On the necessity of first principles for survival:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The one thing in her bag that might have made anyone suspicious was a very small, grubby booklet entitled An Introduction to Escapology, by the Great Williamson. If one of the risks of your job is being thrown into a pond with your hands tied together, then the ability to swim thirty yards underwater, fully clothed, plus the ability to lurk under the weeds breathing air through a hollow reed, count as nothing if you aren&amp;rsquo;t also amazingly good with knots.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As in life, so in the marketplace.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On writing benefits into your marketing copy:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;THE WONDERS OF PUNCTUATION AND SPELLING: &lt;br&gt;&lt;br&gt;1. ABSOLUTE CERTAINTY ABOUT THE COMMA!&lt;br&gt; 2. I BEFORE E COMPLETELY SORTED OUT!&lt;br&gt; 3. THE MYSTERY OF THE SEMICOLON REVEALED!!! &lt;br&gt;4. SEE THE AMPERSAND! (SMALL EXTRA CHARGE) &lt;br&gt;5. FUN WITH BRACKETS!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Although, if you&amp;rsquo;re a student of mine, you know that even &lt;em&gt;this&lt;/em&gt; enlivening take on grammar doesn&amp;rsquo;t go far enough.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On (not) giving people what they want:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;em&gt;Footnote on &amp;lsquo;misfortune telling&amp;rsquo;:&lt;/em&gt; Ordinary fortune-tellers tell you what you want to happen; witches tell you what&amp;rsquo;s going to happen whether you want it to or not. Strangely enough, witches tend to be more accurate but less popular.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The thing about business is that it is, primarily, about business. When you try to sell something people don&amp;rsquo;t want, well, you&amp;rsquo;re shit outta luck. That doesn&amp;rsquo;t mean you should, for example, go tell lies instead of true fortunes. It means that maybe you&amp;rsquo;re not cut out for the fortune telling business in general.&lt;/p&gt;

&lt;p&gt;Til next time!&lt;/p&gt;

&lt;p&gt;Read deep and enjoy.&lt;/p&gt;

&lt;h3&gt;Previous Biz Book Fridays:&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://unicornfree.com/2011/petting-the-junkyard-dog-of-startup-risk/" rel="nofollow" target="_blank"&gt;Startups &amp;amp; Risk: Petting Puppies with Peter Drucker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://unicornfree.com/2011/startups-are-a-boy-band/" rel="nofollow" target="_blank"&gt;Startups Are a Boy Band&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://unicornfree.com/2011/will-low-prices-sell-more/" rel="nofollow" target="_blank"&gt;Will Low Prices Help You Sell More?&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://unicornfree.com/2011/when-customers-bitch-about-your-price-biz-book-friday/" rel="nofollow" target="_blank"&gt;When Customers Bitch About Your Price&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://unicornfree.com/2011/biz-book-friday-cost-plus-pricing-price-obsession/" rel="nofollow" target="_blank"&gt;The Hazards of Cake and Icing Pricing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Related posts:&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;&lt;a href="http://unicornfree.com/2011/when-customers-bitch-about-your-price-biz-book-friday/" rel="nofollow" title="Permanent Link: When Customers Bitch About Your Price (Biz Book Friday)" target="_blank"&gt;When Customers Bitch About Your Price (Biz Book Friday)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://unicornfree.com/2011/will-low-prices-sell-more/" rel="nofollow" title="Permanent Link: Will Low Prices Help You Sell More? (Biz Book Friday!)" target="_blank"&gt;Will Low Prices Help You Sell More? (Biz Book Friday!)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://unicornfree.com/2011/startups-are-a-boy-band/" rel="nofollow" title="Permanent Link: Startups are a Boy Band (Biz Book Friday!)" target="_blank"&gt;Startups are a Boy Band (Biz Book Friday!)&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/unicornfree/~4/CROKedEYKLc" height="1" width="1" onload="resizeImage(this)"&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/slash7/rss?a=z12ufqg4xjA:oNjOQ1-Xdjo:yIl2AUoC8zA" rel="nofollow" target="_blank"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slash7/rss?d=yIl2AUoC8zA" border="0" onload="resizeImage(this)"&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/slash7/rss?a=z12ufqg4xjA:oNjOQ1-Xdjo:7Q72WNTAKBA" rel="nofollow" target="_blank"&gt;&lt;img src="http://feeds.feedburner.com/~ff/slash7/rss?d=7Q72WNTAKBA" border="0" onload="resizeImage(this)"&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/slash7/rss/~4/z12ufqg4xjA" height="1" width="1" onload="resizeImage(this)"&gt;</content>
    <source>
      <id>http://unicornfree.com/?p=1444</id>
      <link rel="alternate" href="http://feedproxy.google.com/~r/slash7/rss/~3/z12ufqg4xjA/"/>
      <title>Terry Pratchett&amp;rsquo;s Witches and Your Business (Biz Book Friday)</title>
      <updated>2011-12-03T01:47:19Z</updated>
    </source>
  </entry>
</feed>

