<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Codeulate.</title>
	
	<link>http://codeulate.com</link>
	<description />
	<lastBuildDate>Sun, 08 Aug 2010 21:23:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/Codeulate" /><feedburner:info uri="codeulate" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Show respect for your users. Let them skip the easy stuff.</title>
		<link>http://feedproxy.google.com/~r/Codeulate/~3/96uW7t3FQdY/</link>
		<comments>http://codeulate.com/2010/08/respect-your-users/#comments</comments>
		<pubDate>Sun, 08 Aug 2010 21:23:59 +0000</pubDate>
		<dc:creator>Ben Orenstein</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://codeulate.com/?p=188</guid>
		<description><![CDATA[I wish games with multiple rounds would notice that I mastered the easy levels, and let me skip them. This comes up in games like Plants vs Zombies, or Doodle Jump, where the first two minutes of each are nearly no challenge at all. I&#8217;d like to pass a certain checkpoint (something fairly hard) and [...]]]></description>
			<content:encoded><![CDATA[<p>I wish games with multiple rounds would notice that I mastered the easy levels, and let me skip them.</p>
<p>This comes up in games like <a href="http://www.popcap.com/games/pvz">Plants vs Zombies</a>, or <a href="http://itunes.apple.com/app/doodle-jump-be-warned-insanely/id307727765?mt=8">Doodle Jump</a>, where the first two minutes of each are nearly no challenge at all.</p>
<p>I&#8217;d like to pass a certain checkpoint (something fairly hard) and never have to play the easy stuff again. You&#8217;d just start right at the hard part. Multiple checkpoints at increasing difficulty might be even better.</p>
<p>Blizzard seems to agree with this: in Starcraft 2, all players start with six worker units already built. No one has to prove they can sit there for two minutes building drones to get to the interesting stuff.</p>
<p>Apps that do this show respect for my time, which helps me love them.</p>
<img src="http://feeds.feedburner.com/~r/Codeulate/~4/96uW7t3FQdY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeulate.com/2010/08/respect-your-users/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://codeulate.com/2010/08/respect-your-users/</feedburner:origLink></item>
		<item>
		<title>Mistakes A Noob Makes In Vim</title>
		<link>http://feedproxy.google.com/~r/Codeulate/~3/siELk00tkrA/</link>
		<comments>http://codeulate.com/2010/06/mistakes-a-noob-makes-in-vim/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 02:25:11 +0000</pubDate>
		<dc:creator>Ben Orenstein</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://codeulate.com/?p=158</guid>
		<description><![CDATA[A noob uses the arrow keys. The First Commandment of vim is &#8220;Thou shalt not use the arrow keys, for they be too far from thy holy home row. Use instead the blessed h, j, k and l.&#8221; A noob does not know his motions. When a noob deletes a word, he holds &#8216;x&#8217;. When [...]]]></description>
			<content:encoded><![CDATA[<h2>A noob uses the arrow keys.</h2>
<p>The First Commandment of vim is &#8220;Thou shalt not use the arrow keys, for they be too far from thy holy home row. Use instead the blessed h, j, k and l.&#8221;</p>
<h2>A noob does not know his motions.</h2>
<p>When a noob deletes a word, he holds &#8216;x&#8217;.</p>
<p>When a master deletes a word, he taps &#8216;dw&#8217;.</p>
<p>A noob should learn the motions granted him by w, i, t, f, and a. His practice would be guided well by the writings in &#8216;:help motion.txt&#8217;</p>
<h2>A noob does not know the &#8216;.&#8217; command.</h2>
<p>And great is his needless suffering.</p>
<h2>A noob does not record macros.</h2>
<p>A master&#8217;s q key is well-worn.</p>
<h2>A noob writes Rails code with vim, unaware of <a href="http://www.codeulatescreencasts.com/products/vim-for-rails-developers">this screencast</a>.</h2>
<p>A master does not hesitate to share his awesome content.</p>
<img src="http://feeds.feedburner.com/~r/Codeulate/~4/siELk00tkrA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeulate.com/2010/06/mistakes-a-noob-makes-in-vim/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://codeulate.com/2010/06/mistakes-a-noob-makes-in-vim/</feedburner:origLink></item>
		<item>
		<title>Too Many Software Updates on OS X?</title>
		<link>http://feedproxy.google.com/~r/Codeulate/~3/c57yEGw7QhE/</link>
		<comments>http://codeulate.com/2010/06/too-many-software-updates-on-os-x/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 01:51:25 +0000</pubDate>
		<dc:creator>Ben Orenstein</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://codeulate.com/?p=152</guid>
		<description><![CDATA[You can tell OS X to only check for updates monthly:]]></description>
			<content:encoded><![CDATA[<p>You can tell OS X to only check for updates monthly:</p>
<p><a href="http://codeulate.com/wp-content/uploads/2010/06/monthly_updates.png"><img src="http://codeulate.com/wp-content/uploads/2010/06/monthly_updates.png" alt="Set updates to monthly" title="monthly_updates" width="667" height="396" class="alignnone size-full wp-image-153" /></a></p>
<img src="http://feeds.feedburner.com/~r/Codeulate/~4/c57yEGw7QhE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeulate.com/2010/06/too-many-software-updates-on-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://codeulate.com/2010/06/too-many-software-updates-on-os-x/</feedburner:origLink></item>
		<item>
		<title>How To Land a Rails Job with No Experience</title>
		<link>http://feedproxy.google.com/~r/Codeulate/~3/JhW5bJbtWTk/</link>
		<comments>http://codeulate.com/2010/06/land-a-rails-job-with-no-experience/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 02:00:26 +0000</pubDate>
		<dc:creator>Ben Orenstein</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://codeulate.com/?p=127</guid>
		<description><![CDATA[Summary: eighteen months ago I landed a great Rails job with no previous Ruby experience. Here are three tips to help you to do the same. 1. It&#8217;s all about your portfolio app It&#8217;s important to build a Rails app that an interviewer can access and play with. The best way to prove you understand [...]]]></description>
			<content:encoded><![CDATA[<h3><strong>Summary: eighteen months ago I landed a great Rails job with no previous Ruby experience. Here are three tips to help you to do the same.<br />
</strong></h3>
<h3>1. It&#8217;s all about your portfolio app</h3>
<p>It&#8217;s important to build a Rails app that an interviewer can access and play with. The best way to prove you understand something is with working code. <strong>Even a simple Rails app demonstrates that you&#8217;ve grasped a whole host of technologies and concepts</strong>: databases, Ruby, Rails, ERB, HTML, CSS, deployment, and others.  If you&#8217;re brand new to Ruby and Rails, I recommend the following path:</p>
<ol>
<li><a href="http://www.railstutorial.org/">Read this book</a>; I think it&#8217;s the best out there. However, like most programming texts, you shouldn&#8217;t only read it. Instead, follow along and actually create the example application. Along the way, think of some simple exercises and do them. You will learn and retain vastly more this way.</li>
<li>After you&#8217;ve read a good chunk of the book, choose your portfolio app. Pick something small, as even basic applications will provide plenty of challenge at this point.</li>
<li>Once your new app is working, use it as your experimenting ground. Try out a bunch of plugins and gems. Switch from <a href="http://www.ensta.fr/~diam/ruby/online/ruby-doc-stdlib/libdoc/test/unit/rdoc/classes/Test/Unit.html">Test::Unit</a> to <a href="http://rspec.info">RSpec</a>. Try out a fixture replacement like <a href="http://github.com/thoughtbot/factory_girl">factory_girl</a>. Tinker with a variety of code.</li>
<li>Now, grab a couple of job descriptions for Rails gigs that you might want. Each should have a list of technologies they use. Go down these lists and note which topics are both popular and unfamiliar to you. This list will include things like <a href="http://jquery.com">jQuery</a>, TDD, and <a href="http://git-scm.com">git</a>. Spend some time implementing/adding these to your app. You don&#8217;t need deep mastery of these topics, just familiarity. Your goal should be the ability to have an exchange like this &#8212; Interviewer: we have a whole bunch of jQuery, have you used it much?  You: well, not a lot, but I did implement drag and drop and a few visual effects in my FooBar application.  You&#8217;re trying to convince the interviewer that you&#8217;re capable of teaching yourself new things. If you can do this, they&#8217;ll think you&#8217;ll be fine with their guidance.</li>
</ol>
<h3>2. Get thee to github</h3>
<p>If there were an official tool for sharing Ruby code, <a href="http://github.com">Github</a> would  be it. You should absolutely have an account there and should  aggressively publish code you write. At the very least, the code for  your portfolio app should live there (in a public repo). You should also  &#8216;watch&#8217; a few repostories and &#8216;follow&#8217; a few programmers that interest  you. Reading commits made by others will expose you to common Ruby idioms  and style.</p>
<h3>3. Start attending a Ruby meetup</h3>
<p>This is the best way to hear about opportunities. They&#8217;re guaranteed to be local, and you&#8217;ll know your future coworkers attend Ruby meetings, which is a great sign. Not only will you hear about more jobs this way, but when you do apply, your resume will be coming through an employee that has already met you. This is the best way for your resume to reach a company.</p>
<p>Beyond hearing about open jobs, Ruby groups are a great way to <strong>find a mentor</strong>. Most people are quite willing to help new Rubyists with their questions, and getting your code reviewed by an experienced programmer will quickly improve your chops. To start, simply ask someone to point out the worst parts of your code, and outline how they&#8217;d fix them.</p>
<h3>Questions I&#8217;ll Pretend Are Frequently Asked:</h3>
<p><strong>Is the Rails market really that hungry for talent?</strong></p>
<p>Absolutely. At my last <a href="http://bostonrb.org">Boston.rb</a> meeting I heard of 4+ open gigs. The position I hold now had been open for months before they decided to take a junior guy and train him. Everybody seems to be hiring.</p>
<p><strong>Is it worth trying to break into the Rails?</strong></p>
<p>Definitely!</p>
<p>Ruby is a wonderful thing to work with every day. I love my language.</p>
<p>You&#8217;ll also be joining a wonderful community.</p>
<p><strong>So will these tips work for me?</strong></p>
<p>Maybe. They did for me! I managed to land a Rails job that I love after only a few months&#8217; hard work. You gotta put the work in, but if you focus it in the areas above you should get a great return on that investment.</p>
<p>As an anecdote, I recommended the steps above to a close friend. After a few months of hard work, he landed the first Rails job he interviewed for. He&#8217;s now working for a great startup in Harvard Square and loving it.</p>
<p><strong>How can I increase my chances even further?</strong></p>
<p>Well, if you like, you can hire me to coach you. Here&#8217;s what we&#8217;ll do:</p>
<p>1. <strong>Two one-hour coaching sessions.</strong> (All sessions take place on Skype or phone). We&#8217;ll chat and find out where you are technically and how you well you&#8217;re marketing yourself (what do I see when I google you?) If you need to brush up on your Rails knowledge, I&#8217;ll point you to great resources to ensure your fundamentals are solid. If you&#8217;re lacking a public presence, I&#8217;ll help you with that too.</p>
<p>2. <strong>Two one-hour code reviews.</strong> I&#8217;ll review any Ruby code you like and we&#8217;ll discuss over the phone. We&#8217;ll make sure your portfolio app uses the framework correctly and contains good, Rubyish code. Most importantly, I&#8217;ll make sure you really understand all the changes I suggest so that the code stays &#8220;yours.&#8221;</p>
<p>3. <strong>A one-hour resume review.</strong> It&#8217;s a tricky thing to write a good resume when you lack relevant experience. You&#8217;ve got to emphasize things you&#8217;ve done while gracefully acknowledging areas you&#8217;re still improving. I&#8217;ve got some great tricks for this, and we&#8217;ll edit your resume together. When we&#8217;re done, we should have something that will make people pick up the phone and call you.</p>
<p>4.<strong> A one-hour mock interview.</strong> Finally, I&#8217;ll run you through a standard phone screen for a Rails position. After, I&#8217;ll give you the honest feedback that you&#8217;d never hear from a real hiring manager who&#8217;s afraid of litigation. We&#8217;ll talk about any red flags or questions you botched, and how to handle them better in the future.</p>
<p>If you&#8217;re willing to put in the work, the end result should be an offer letter (or two, or three!) for your first Rails job.</p>
<p><strong>Why should I hire you?</strong></p>
<p>I love teaching! (And I&#8217;m good at it). I&#8217;ve sold hundreds of <a href="http://www.codeulatescreencasts.com">Rails-related screencasts</a>, given a <a href="https://training.thoughtbot.com/courses/12-vim-for-rubyists/registrations/new">training class with thoughtbot</a>, and had the <a href="http://en.oreilly.com/rails2010/public/schedule/detail/11284">sixth-highest-rated RailConf talk</a> this year.</p>
<p><strong>How much?</strong></p>
<p>You&#8217;ll see the sessions above total up to 6 hours. Now my normal hourly rate is $150, which gives a price of $900 for everything. However, I&#8217;m going to be offering a discount from my normal rate because, frankly, I think this is going to be a lot of fun: I LOVE helping bring new Rubyists into the fold, and I really get a thrill out of teaching. As such, the program will cost you only $599. A small amount when you consider how much impact a new job can have on your happiness.</p>
<p>Now $599 is a pretty steep discount off my normal rate, but it&#8217;s still a decent chunk of change. I don&#8217;t want cost to be prohibitive, so let&#8217;s do this: you can start the program for just $199. I&#8217;ll trust you to pay the remainder when you can, and not until you&#8217;ve seen that our relationship and program are worth it to you. If at any point you don&#8217;t feel like you&#8217;re getting good value, I&#8217;ll refund your $199 with my apologies and absolutely zero hassle.</p>
<p>Let me tell you, working with Ruby and Rails is a TON of fun. The technology is first-rate, and the community is second-to-none. It&#8217;s really a blast to be a Rails programmer. If you&#8217;re stuck in some lame programming backwater, or are having trouble landing a programming job at all, this could be a great investment in your career.</p>
<p>Now this program will be time-intensive, so I&#8217;m going to limit the number of mentees I&#8217;ll take on. One slot has sold already, leaving only 3 at the reduced price, so sign up soon!</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input name="cmd" type="hidden" value="_s-xclick" />
<input name="hosted_button_id" type="hidden" value="233RJLDRMWCG8" />
<input alt="PayPal - The safer, easier way to pay online!" name="submit" src="https://www.paypal.com/en_US/i/btn/btn_buynowCC_LG.gif" type="image" /> <img src="https://www.paypal.com/en_US/i/scr/pixel.gif" border="0" alt="" width="1" height="1" /><br />
</form>
<img src="http://feeds.feedburner.com/~r/Codeulate/~4/JhW5bJbtWTk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeulate.com/2010/06/land-a-rails-job-with-no-experience/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://codeulate.com/2010/06/land-a-rails-job-with-no-experience/</feedburner:origLink></item>
		<item>
		<title>Two Halves of Apple</title>
		<link>http://feedproxy.google.com/~r/Codeulate/~3/NEa5Rvzwsh8/</link>
		<comments>http://codeulate.com/2010/04/two-halves-of-apple/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 02:29:41 +0000</pubDate>
		<dc:creator>Ben Orenstein</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[apple]]></category>

		<guid isPermaLink="false">http://codeulate.com/?p=122</guid>
		<description><![CDATA[On the one hand, you have people starting blogs just to study the tiny trickle of Steve&#8217;s public emails.  This is an act of yearning.  Steve Jobs&#8217; blog would be an instant sensation. On the other, you have this: Steve Jobs is Willy Wonka.  He won&#8217;t let you inside his chocolate factory and he is [...]]]></description>
			<content:encoded><![CDATA[<p>On the one hand, you have people starting blogs just to study the tiny trickle of Steve&#8217;s public emails.  This is an act of yearning.  Steve Jobs&#8217; blog would be an instant sensation.</p>
<p>On the other, you have this: Steve Jobs is Willy Wonka.  He <em>won&#8217;t</em> let you inside his chocolate factory and he<em> </em>is <em>unreachable</em> from the outside world.  The factory is cloaked in secrecy.</p>
<p>And then come demo days, when we all get to see something delightful.There&#8217;s something a little bit special about this experience, and I&#8217;m not sure I want it to change.  A commenter on Hacker News mentioned that he was disappointed to have seen the 4G prototype before its official release, and I know what he means.</p>
<p>I think I&#8217;d like to see a more-open Apple, but I can&#8217;t help but enjoy a helping of the big reveal.</p>
<img src="http://feeds.feedburner.com/~r/Codeulate/~4/NEa5Rvzwsh8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeulate.com/2010/04/two-halves-of-apple/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://codeulate.com/2010/04/two-halves-of-apple/</feedburner:origLink></item>
		<item>
		<title>A thought on public speaking</title>
		<link>http://feedproxy.google.com/~r/Codeulate/~3/vEDpr2SltYg/</link>
		<comments>http://codeulate.com/2010/04/a-thought-on-public-speaking/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 18:41:24 +0000</pubDate>
		<dc:creator>Ben Orenstein</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://codeulate.com/?p=119</guid>
		<description><![CDATA[From Benjamin Zander&#8217;s effervescent TED talk: &#8220;I&#8217;m not going to go on until every single person in this room [has] come to love and understand classical music. Now you notice that there is not the slightest doubt in my mind that this is going to work. It&#8217;s one of the characteristics of a leader that [...]]]></description>
			<content:encoded><![CDATA[<p>From <a href="http://www.ted.com/talks/lang/eng/benjamin_zander_on_music_and_passion.html">Benjamin Zander&#8217;s effervescent TED talk</a>:</p>
<blockquote><p>&#8220;I&#8217;m not going to go on until every single person in this room [has] come to love and understand classical music. Now you notice that there is not the slightest doubt in my mind that this is going to work.<strong> It&#8217;s one of the characteristics of a leader that he not doubt for one moment the capacity of the people he&#8217;s leading to realize whatever he&#8217;s dreaming</strong>.</p></blockquote>
<p>I&#8217;m going to be weaving this idea into <a href="http://en.oreilly.com/rails2010/public/schedule/detail/11284">my upcoming talk at RailsConf</a>.</p>
<p>I have a goal for my audience, and will show no doubt that they can achieve it.  Then, I&#8217;ll make sure they do by giving them the means in my talk.</p>
<img src="http://feeds.feedburner.com/~r/Codeulate/~4/vEDpr2SltYg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeulate.com/2010/04/a-thought-on-public-speaking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://codeulate.com/2010/04/a-thought-on-public-speaking/</feedburner:origLink></item>
		<item>
		<title>How to Sell a Hundred Screencasts</title>
		<link>http://feedproxy.google.com/~r/Codeulate/~3/7YNK-mTN3PI/</link>
		<comments>http://codeulate.com/2010/03/how-to-sell-a-hundred-screencasts/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 05:47:54 +0000</pubDate>
		<dc:creator>Ben Orenstein</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://codeulate.com/?p=94</guid>
		<description><![CDATA[On February 1st I released a screencast for sale called Vim for Rails Developers.  It was the first and only product of my new company, Codeulate Screencasts. Since then, I&#8217;ve sold 148 copies of that screencast at $9 each.  After expenses I&#8217;ve been left with over $1,200 of profit.  Honestly I&#8217;m extremely pleased.  For my [...]]]></description>
			<content:encoded><![CDATA[<p>On February 1st I released a screencast for sale called <a href="http://www.codeulatescreencasts.com/products/vim-for-rails-developers">Vim for Rails Developers</a>.  It was the first and only product of my new company, <a href="http://www.codeulatescreencasts.com">Codeulate Screencasts</a>.</p>
<p>Since then, <strong>I&#8217;ve sold 148 copies of that screencast at $9 each</strong>.  After expenses I&#8217;ve been left with over <strong>$1,200 </strong>of<strong> profit</strong>.  Honestly I&#8217;m extremely pleased.  For my first crack at this, this feels great.</p>
<p>I was inspired to try this venture thanks to the inspiring and informational writings of others.  As such, I feel compelled to share the little I&#8217;ve learned, so that other entrepreneurs might enjoy the same benefits I did.</p>
<p>Be warned: the title of this post is admittedly a false promise.  I&#8217;m not sure if doing what I did will let you sell a hundred screencasts (or any, for that matter).  I only know it worked for me, and that I hope it will work for you too.</p>
<h2>Things (I think) I did right</h2>
<h3>I chose a topic in which I was already an expert.</h3>
<p>On my product page, I tell people &#8220;I spend every day writing Rails code in vim, and I’ve optimized the heck out that process. The screencast contains the best of what I’ve learned for creating and editing Rails code at top-speed.&#8221;</p>
<p>That stuff is true!  I work full-time as a Rails developer, and I&#8217;ve been a vim user for several years.  I&#8217;m also a nearly compulsive optimizer (I&#8217;ve aliased &#8216;ls&#8217; to &#8216;a&#8217; because it saves me a keystroke).  After a year of honing, my editor and environment are extremely customized to support the sort of programming I do.  I&#8217;ve shared these tips with others, and seen the subsequent boost in productivity they had.  When I was brainstorming possible screencast topics, this was an easy choice.</p>
<h3>I let someone else worry about the infrastructure.</h3>
<p>My site runs on <a href="http://www.shopify.com/?ref=codeulatescreencasts">Shopify</a>, accepts payments through PayPal and Google Checkout, and handles digital delivery with Fetch.  I set the entire thing up in maybe three hours, and it requires literally no action from me to process orders&#8211;I just get the best email ever when it&#8217;s complete.  Using these services let me focus on what was important: getting my product out the door.  You ain&#8217;t done jack until they can pay for it.</p>
<h3>I made the best damn product I could.</h3>
<p>I probably spent 50 hours creating my first screencast.  I dragged myself to the office on weekends so I could focus better.  I tried really, really hard to make something useful.  So far, it looks like I did: feedback has been overwhelmingly positive.  I have no doubt this was the most important element of my success.</p>
<h2>Things I screwed up (an extremely incomplete list)</h2>
<h3>I didn&#8217;t realize how valuable other peoples&#8217; reviews were.</h3>
<p>My first attempts at marketing involved sending emails about my screencast to ruby group mailing lists.  This got me my first handful of sales from several different lists.  In one of the them, a member replied that he had bought the screencast and found it well worth $9.  I made ten times as many sales to this list as the others.</p>
<p>Through dumb luck, <a href="http://www.petercooper.co.uk/">Peter Cooper</a> (really nice guy, by the way) saw a tweet about  my screencast and offered to write <a href="http://www.railsinside.com/screencasts/405-vim-for-rails-developers-screencast.html">a  review on Rails Inside</a>.  I figured this would be good for sales,  but wouldn&#8217;t have guessed that 40% of my people purchasing my screencast  would come from this review.  Oh, and another 30% from <a href="http://dalibornasevic.com/posts/11-vim-for-rails-development">this  other review</a>, published a short time later.</p>
<p>I&#8217;m starting to think <strong>the second-best thing someone can do for me is to buy my product</strong>; the best is to write a review of it.</p>
<h3>I didn&#8217;t show an early draft to anyone.</h3>
<p>Several reviewers and survey respondents felt the very first section of the screencast went on too long.  The consistency with which people mention this suggests that I could have gotten this feedback by soliciting just a few reviews before launching.</p>
<h2>Things that surprised me</h2>
<p>I&#8217;m surprised by just how good it feels to get &#8216;new order&#8217; emails.  I&#8217;m surprised by how bad it feels on days when I don&#8217;t get any.</p>
<p>I&#8217;m surprised by how many non-Americans are buying my screencast.  Overall, 59% of my orders have been outside the US, primarily to Australia, Brazil, Germany and Great Britain.</p>
<p>I&#8217;m surprised by exactly how much work is involved with <em>actually shipping, </em>and how it all feels worth it when I do.</p>
<h2>The next thing<span style="text-decoration: underline;"><br />
</span></h2>
<p>Inspired by my success so far,<strong> I&#8217;ve released <a href="http://www.codeulatescreencasts.com/products/build-an-app-with-rails-and-s3">my second screencast</a>!</strong> It&#8217;s called <a href="http://www.codeulatescreencasts.com/products/build-an-app-with-rails-and-s3"><strong>Building a File-Upload App with Rails and S3</strong></a>, and I&#8217;m extremely pleased with how it came out.  I&#8217;ve used everything I&#8217;ve learned from my first screencast to make this one even better, and overall I think it&#8217;s quite polished.</p>
<p>Speaking of learning from the past: if you&#8217;re a blogger willing to write a review, <a href="mailto:ben@codeulatescreencasts.com">email me</a> and I&#8217;ll send you a <strong>free copy</strong>.</p>
<img src="http://feeds.feedburner.com/~r/Codeulate/~4/7YNK-mTN3PI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeulate.com/2010/03/how-to-sell-a-hundred-screencasts/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://codeulate.com/2010/03/how-to-sell-a-hundred-screencasts/</feedburner:origLink></item>
		<item>
		<title>Installing fuzzyfinder_textmate: Textmate’s Cmd+T in Vim</title>
		<link>http://feedproxy.google.com/~r/Codeulate/~3/o_U_tOkP33A/</link>
		<comments>http://codeulate.com/2010/02/installing-fuzzyfinder_textmate-textmates-cmdt-in-vim/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 00:37:11 +0000</pubDate>
		<dc:creator>Ben Orenstein</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://codeulate.com/?p=80</guid>
		<description><![CDATA[When Jamis Buck switched from TextMate to vim, he found he missed one bit of functionality above all others: TextMate&#8217;s file finder, Cmd+T. Being a capable programmer, he &#8220;took an evening&#8221; and wrote up a Ruby library to replicate this functionality.  Then he extended vim with a plugin called fuzzyfinder_textmate that called out to this [...]]]></description>
			<content:encoded><![CDATA[<p>When <a href="http://twitter.com/Jamis">Jamis Buck</a> <a href="http://weblog.jamisbuck.org/2008/10/10/coming-home-to-vim">switched from TextMate to vim</a>, he found he missed one bit of functionality above all others: TextMate&#8217;s file finder, Cmd+T.</p>
<p>Being a capable programmer, he &#8220;took an evening&#8221; and wrote up a Ruby library to replicate this functionality.  Then he extended vim with a plugin called fuzzyfinder_textmate that called out to this Ruby library.</p>
<p>The results were terrific, and fuzzyfinder_textmate is my go-to solution for opening files in vim.  I almost never type &#8220;:e &#8230;&#8221; anymore.  I&#8217;ve yet to see anything faster at grabbing a file buried somewhere in a directory tree. This plugin is <em>particularly </em>useful for me when working on Rails projects, where vim&#8217;s &#8216;current directory&#8217; is Rails.root, and everything I want to open is down at least one level.  If you&#8217;re not familiar with the plugin, here&#8217;s a <a href="http://s3.amazonaws.com/buckblog/videos/fuzzyfinder_textmate.mov">silent-movie-style screencast</a> Jamis put together when he released it.</p>
<p>Sadly, this terrific plugin has a bit of a problem: it&#8217;s a pain in the ass to install.</p>
<p>Jamis&#8217; fuzzyfinder_textmate relies on a second plugin, called fuzzyfinder.vim.  The author of this plugin makes frequent changes, which usually end up breaking fuzzyfinder_textmate.  This got to be too much for Jamis, and he officially <a href="http://weblog.jamisbuck.org/2009/1/28/the-future-of-fuzzyfinder-textmate">dropped the project</a> a year ago.  Today, the latest versions of these plugins won&#8217;t work together.</p>
<p>However, thanks to several contributors and github&#8217;s forking, you can get this big mish-mash of libraries and plugins to work&#8230;provided you install exactly the right versions of each.  It&#8217;s a trifle annoying, but fortunately I&#8217;ve done the homework for you.  Follow the steps below and enjoy my <em>favorite</em> bit of vim functionality.<br />
<strong><br />
Installing fuzzyfinder_textmate:</strong></p>
<ol>
<li>Make sure you&#8217;re using vim 7.2 (the latest, as of this writing).  It&#8217;s possible earlier versions work as well, but I can&#8217;t confirm these steps will apply.</li>
<li>Make sure the vim you installed was compiled with ruby support.  Check this by running <em>vim &#8211;version | grep ruby</em> at the command line.  A result of <em><strong>+</strong>ruby</em> means you&#8217;re good, <em><strong>-</strong>ruby</em> means you DON&#8217;T have ruby support.  Debian/Ubuntu users can get a ruby-capable vim by running <em>sudo apt-get install vim-ruby</em>.  Another test to make sure you&#8217;ve got ruby support: type <em>:ruby</em> in vim.  <em>Argument required</em> is good.  <em>Not an editor command: ruby</em> is bad.</li>
<li>Install Jamis&#8217; fuzzy_file_finder Ruby library <a href="http://github.com/jamis/fuzzy_file_finder">from here</a>.  This is installable as a gem, but I strongly recommend simply <em>git clone</em>ing this repo, creating a ruby directory in your .vim folder, and placing the lib/fuzzy_file_finder.rb inside there.   This keeps this dependency in your .vim directory (rather than on a system gem you&#8217;ll forget about when you change servers), and enables keeping your vim configuration in a git repository (HIGHLY recommended).</li>
<li> Install <a href="http://www.vim.org/scripts/download_script.php?src_id=10718">vim-fuzzyfinder version 2.22.3</a>.  IMPORTANT: you MUST use this exact version.  Other versions (particularly anything NEWER than this one) will NOT work.  After installing, confirm it works by running <em>:FuzzyFinderFile</em> in vim.  You should get a pop up box with a list of files.  If you do you&#8217;re almost there.</li>
<li> Install fuzzyfinder_textmate, but use <a href="http://github.com/sethbc/fuzzyfinder_textmate">sethbc&#8217;s fork from github</a>.  Don&#8217;t use the version from Jamis&#8217; repo as it will NOT work with the version of fuzzyfinder.vim we installed.  <em>git clone </em>again, and simply put fuzzyfinder_textmate.vim in your .vim/plugin folder. To test that everything worked, run <em>:FuzzyFinderTextMate</em> in vim.  If you get a popup box, you&#8217;re done!</li>
</ol>
<p>If you&#8217;re having trouble, the most common culprit is that you&#8217;ve mucked up the versions.  This collection of files is quite finicky, and if you&#8217;re using the wrong version of any one things fall apart quickly.  After that, double-check you&#8217;ve got Ruby support.</p>
<p>If you&#8217;re still having trouble, do a <em>git clone</em> of <a href="http://github.com/r00k/dotfiles">my dotfiles</a>.  My setup is confirmed working, so you can diff your copies of the library/plugins against mine.  Any differences mean you&#8217;ve got the wrong version.</p>
<p>If you still have issues, leave a note in the comments and I&#8217;ll try to get you sorted out.</p>
<p>Finally, if you found this post useful, I&#8217;d urge you to check out my screencast: <a href="http://www.codeulatescreencasts.com/products/vim-for-rails-developers">Vim for Rails Developers</a>.  In it, I&#8217;ll teach you the best plugins, external tools, and editing tricks for writing Rails code at top-speed.  If you write Rails code in vim, it&#8217;s sure to save you time.</p>
<img src="http://feeds.feedburner.com/~r/Codeulate/~4/o_U_tOkP33A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeulate.com/2010/02/installing-fuzzyfinder_textmate-textmates-cmdt-in-vim/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
<enclosure url="http://s3.amazonaws.com/buckblog/videos/fuzzyfinder_textmate.mov" length="604727" type="video/quicktime" />
		<feedburner:origLink>http://codeulate.com/2010/02/installing-fuzzyfinder_textmate-textmates-cmdt-in-vim/</feedburner:origLink></item>
		<item>
		<title>New In factory_girl: Callbacks</title>
		<link>http://feedproxy.google.com/~r/Codeulate/~3/SFDYrPBF-Nw/</link>
		<comments>http://codeulate.com/2009/11/factory_girl-callbacks/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 23:59:45 +0000</pubDate>
		<dc:creator>Ben Orenstein</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://codeulate.com/?p=64</guid>
		<description><![CDATA[Thoughtbot&#8216;s factory_girl has recently gotten a terrific new feature: callbacks. They look like this: Factory&#40;:user&#41; do &#124;u&#124; &#160; u.after_create &#123; &#124;user_instance&#124; do_something_to&#40;user_instance&#41; &#125; &#160; end Now, when you use Factory(:user) in your tests, the do_something_to method will be called after the user is saved in the database.  Also notice that you&#8217;ll be passed the instance [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.thoughtbot.com">Thoughtbot</a>&#8216;s <a href="http://github.com/thoughtbot/factory_girl">factory_girl</a> has <a href="http://github.com/thoughtbot/factory_girl/commit/6e35bf92071f4b34763e6d0d12ebef8f7eab4d4b">recently gotten</a> a terrific new feature: callbacks.</p>
<p>They look like this:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">Factory<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:user</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>u<span style="color:#006600; font-weight:bold;">|</span>
&nbsp;
  u.<span style="color:#9900CC;">after_create</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>user_instance<span style="color:#006600; font-weight:bold;">|</span> do_something_to<span style="color:#006600; font-weight:bold;">&#40;</span>user_instance<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Now, when you use <em>Factory(:user)</em> in your tests, the <em>do_something_to </em>method will be called after the user is saved in the database.  Also notice that you&#8217;ll be passed the instance of the user as block parameter.</p>
<p>There are two other callbacks now available: <em>after_build</em> and <em>after_stub</em>.  Their callbacks fire pretty much where you&#8217;d expect them to.</p>
<p>You can mix and match these callbacks on the same factory.  Multiple definitions of the same callback will be executed in the order you provide them:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">Factory<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:user</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>u<span style="color:#006600; font-weight:bold;">|</span>
&nbsp;
  u.<span style="color:#9900CC;">after_build</span> <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#006600; font-weight:bold;">|</span>user_instance<span style="color:#006600; font-weight:bold;">|</span> do_something_to<span style="color:#006600; font-weight:bold;">&#40;</span>user_instance<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
&nbsp;
  u.<span style="color:#9900CC;">after_create</span> <span style="color:#006600; font-weight:bold;">&#123;</span> do_this_after_create <span style="color:#006600; font-weight:bold;">&#125;</span>
&nbsp;
  u.<span style="color:#9900CC;">after_create</span> <span style="color:#006600; font-weight:bold;">&#123;</span> then_do_this <span style="color:#006600; font-weight:bold;">&#125;</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>I&#8217;m excited about this addition because of how much more flexibility this gives factory_girl.  There are some kludgy parts of my <em>factories.rb</em> files that will be more elegantly accomplished with these tools.</p>
<p>Accepting these little lambdas to be run later feels very lispy, something I take as a great sign.</p>
<p>For more usage details, check out the &#8216;callbacks&#8217; section of the <a href="http://github.com/thoughtbot/factory_girl/blob/master/README.rdoc">README</a>.</p>
<p>And, if you&#8217;d like to read more about using Ruby&#8217;s blocks this way, Greg Brown has an <a href="http://blog.rubybestpractices.com/posts/gregory/009-beautiful-blocks.html">excellent article on the topic</a> (excerpted from his <a href="http://www.amazon.com/gp/product/0596523009?ie=UTF8&amp;tag=codeulate-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0596523009">also-excellent book</a>).</p>
<img src="http://feeds.feedburner.com/~r/Codeulate/~4/SFDYrPBF-Nw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeulate.com/2009/11/factory_girl-callbacks/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://codeulate.com/2009/11/factory_girl-callbacks/</feedburner:origLink></item>
		<item>
		<title>Making Github’s Code Readable</title>
		<link>http://feedproxy.google.com/~r/Codeulate/~3/jeQddnEM5VA/</link>
		<comments>http://codeulate.com/2009/11/making-githubs-code-readable/#comments</comments>
		<pubDate>Sun, 01 Nov 2009 15:45:15 +0000</pubDate>
		<dc:creator>Ben Orenstein</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://codeulate.com/?p=46</guid>
		<description><![CDATA[I love Github.  We recently decided to become paid customers at work, and I&#8217;m tickled. I also can&#8217;t stand reading code on the site. Why?  Frankly, the text is plain old ugly: Those italicized comments look like faintly-etched glass.  And the bolded bits look clumsy as well (check out the &#8216;m&#8217; on &#8216;module&#8217;)! What&#8217;s with [...]]]></description>
			<content:encoded><![CDATA[<p>I love Github.  We recently decided to become paid customers at work, and I&#8217;m tickled.</p>
<p>I also<em> </em>can&#8217;t stand reading code on the site.</p>
<p>Why?  Frankly, the text is plain old ugly:</p>
<p><img class="alignnone size-full wp-image-51" title="before" src="http://codeulate.com/wp-content/uploads/2009/10/before1.png" alt="before" width="614" height="621" /></p>
<p>Those italicized comments look like faintly-etched glass.  And the bolded bits look clumsy as well (check out the &#8216;m&#8217; on &#8216;module&#8217;)!</p>
<p>What&#8217;s with the ugly?  Let&#8217;s ask Firebug:</p>
<p><img class="alignnone size-full wp-image-52" title="firebug" src="http://codeulate.com/wp-content/uploads/2009/10/firebug.png" alt="firebug" width="504" height="98" /></p>
<p>&#8216;Bitstream Vera Sans Mono&#8217;?  Never heard of it.  Haven&#8217;t got it installed.  If you&#8217;re on Windows or OS X, <a href="http://en.wikipedia.org/wiki/Bitstream_Vera">you probably don&#8217;t either</a>.</p>
<p>Okay, so I haven&#8217;t got Bitstream, so it looks like we&#8217;re falling back t&#8211;oh my GOD it&#8217;s COURIER.</p>
<p>Yes, <a href="http://en.wikipedia.org/wiki/Courier_%28typeface%29">Courier</a>.  Invented in the 1950s.  For typewriters.  I think I last used this font while editing <a href="http://www.jefflewis.net/archive/programming/gorilla.bas">GORILLA.BAS</a> to mess with the speed and gravity.  No one should be using Courier anymore (<a href="http://www.empirecontact.com/readability/Courier_font.html">unless you&#8217;re writing a screenplay</a>).</p>
<p>Fortunately, there are two easy ways to fix this.  The first, you and I can do.  The second will have to be done by the Github guys.</p>
<p>What we can do: <strong>install Bitstream Vera Sans Mono.</strong></p>
<p><a href="http://www.dafont.com/bitstream-vera-mono.font">Download it here.</a></p>
<p>Installation is OS-specific, but I bet you can <a href="http://www.lmgtfy.com/?q=&quot;install+font&quot;+linux+OR+os+x+OR+windows">figure it out</a>.</p>
<p>Here&#8217;s how things look after the install:</p>
<p><img class="alignnone size-full wp-image-53" title="after" src="http://codeulate.com/wp-content/uploads/2009/10/after.png" alt="after" width="599" height="731" /></p>
<p>Sweet mystery of life at last I&#8217;ve found you!  This is about&#8230;a billion times more readable.</p>
<p>Now, the experience of not having their first-choice font shouldn&#8217;t have been so painful.  If you&#8217;re going to lead with a talented but fragile rookie, make sure you have a dependable second-string something something sports analogy.</p>
<p>Anyway, the Github guys <strong>should change &#8216;Courier&#8217; to &#8216;Courier New&#8217; in their stylesheet. </strong><a href="http://en.wikipedia.org/wiki/Courier_%28typeface%29#Courier_New">Courier New</a> is an updated and refreshed grand-child of Courier, and it&#8217;s far more readable, especially when bolded or italicized.  Plus it&#8217;s just as widely installed as Courier.</p>
<p>Little change on our side.  Little change on their side.  Code looks beautiful; everyone&#8217;s happy.</p>
<p>Github &#8212; no longer a butterface.</p>
<img src="http://feeds.feedburner.com/~r/Codeulate/~4/jeQddnEM5VA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://codeulate.com/2009/11/making-githubs-code-readable/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://codeulate.com/2009/11/making-githubs-code-readable/</feedburner:origLink></item>
	</channel>
</rss>
