<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>

  var _gaq = _gaq || [];
  _gaq.push([‘_setAccount’, ‘UA-11878107-3’]);
  _gaq.push([‘_trackPageview’]);

  (function() {
    var ga = document.createElement(‘script’); ga.type = ‘text/javascript’; ga.async = true;
    ga.src = (‘https:’ == document.location.protocol ? ‘https://ssl’ : ‘http://www’) + ‘.google-analytics.com/ga.js’;
    var s = document.getElementsByTagName(‘script’)[0]; s.parentNode.insertBefore(ga, s);
  })();</description><title>h4ck3r+=boi v 2.0</title><generator>Tumblr (3.0; @rwilcox)</generator><link>http://rwilcox.tumblr.com/</link><item><title>View this repository in my editor, and I don't care about keeping it</title><description>&lt;p&gt;My current job has me doing a lot of node.js. The documentation story in most of the community is very much &amp;#8220;read the source&amp;#8221;.&lt;/p&gt;

&lt;p&gt;This is a little bit of a contrast to the Rails community, where, even in Rails 1.2.3 (when I entered the scene) I rarely had to dig through source code to find an answer to a question.&lt;/p&gt;

&lt;p&gt;Anyway, I find myself reading a lot of node package code. Viewing the code directly on Github is OK for a simple package, but I usually want to be in my editor.&lt;/p&gt;

&lt;p&gt;I also want these packages I download to go away, eventually. I could use &lt;a href="http://www.noodlesoft.com/hazel.php"&gt;Hazel&lt;/a&gt;, or I could shove things in &lt;code&gt;/tmp/&lt;/code&gt; and let the system clean it up eventually.&lt;/p&gt;

&lt;p&gt;So I wrote a script:&lt;/p&gt;

&lt;script src="https://gist.github.com/rwilcox/5577120.js"&gt;&lt;/script&gt;&lt;p&gt;This script is great coupled with &lt;a href="http://www.obdev.at/resources/launchbar/help/RunningUnixExecutables.html"&gt;LaunchBar&amp;#8217;s Unix Executable support&lt;/a&gt;. I can select this script from my Launchbar, SPACE, paste a git clone path, option-return and half a second later I have the project in my editor (BBEdit).&lt;/p&gt;

&lt;p&gt;If the package means my needs I may add it to my node project. Once I do that viewing the code is just a &lt;code&gt;node edit&lt;/code&gt; away, but when trying to choose between 2 different-but-providing-similar-functionality packages, making a temporary clone is great.&lt;/p&gt;</description><link>http://rwilcox.tumblr.com/post/50428099132</link><guid>http://rwilcox.tumblr.com/post/50428099132</guid><pubDate>Tue, 14 May 2013 12:58:09 -0400</pubDate><category>node</category></item><item><title>Open Source</title><description>&lt;p&gt;I often find myself doing open source work. Mostly this is small improvements to already existing projects, but sometimes there are projects I’ll open source from scratch.&lt;/p&gt;

&lt;p&gt;However, most of my work is using an open source project, and find a way to improve it. This improvement could be a bug fix, or better error messages, or improvements I’ve needed to get my job done. Sometimes clients even pay me to implement some features in an open source projects.&lt;/p&gt;

&lt;p&gt;For the last 4 years or so most of my contributions have been via &lt;a href="http://www.github.com"&gt;Github&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Github works by people “forking” (copying) an open source repo to their own user account, making changes, then submitting those changes back to the main project repository. This works great, except sometimes people fork projects to their user account simply to have a copy of the code.&lt;/p&gt;

&lt;p&gt;So, you could have an account with a ton of forks - as a person browsing the account you don’t know if they’ve made contributions to the project or if they just want a copy of the code for their own.&lt;/p&gt;

&lt;h1&gt;Projects I&amp;#8217;ve contributed to&lt;/h1&gt;
&lt;p&gt;I don’t know how to solve this problem, but I do know that I can list projects that I’ve made non-trivial contributions to, and where my code was accepted:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/carlhuda/bundler/commits?author=rwilcox"&gt;Bundler, a Ruby gem&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/libgit2/libgit2/commits?author=rwilcox"&gt;libgit2, a C library implementation of Git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/libgit2/objective-git/commits?author=rwilcox"&gt;objective-git, a Cocoa framework over libgit2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/paver/paver/commits?author=rwilcox"&gt;Paver, a Python package&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/pusewicz/twitter-bootstrap-markup-rails/commits?author=rwilcox"&gt;twitter-bootstrap-markup-rails, a Ruby gem&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;My &lt;a href="https://github.com/rwilcox"&gt;Github page&lt;/a&gt; shows other contributions to the open source community in large: examples, tools, things for text editors, and some original libraries of code. However, I really do enjoy the times when I can contribute a small change to an open source project that makes everyone&amp;#8217;s life a little better.&lt;/p&gt;

&lt;h1&gt;My own projects that I&amp;#8217;ve worked on&lt;/h1&gt;
&lt;p&gt;In addition to improving other people&amp;#8217;s projects, Github also lets you publish your own projects. Most of mine are small projects, but I have published a few larger projects:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/rwilcox/school_days"&gt;the school_days gem&lt;/a&gt;: because some days you need to know if &lt;code&gt;Date.today.school_night?&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rwilcox/delegate_presenter"&gt;the delegate_presenter gem&lt;/a&gt;: a gem based on Avdi Grimm&amp;#8217;s thoughts on presenters. This was before the release of Objects on Rails.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rwilcox/running_balance"&gt;RunningBalance&lt;/a&gt;: a checkbook example app with API and mobile browsing considerations&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/rwilcox/chatchat"&gt;ChatChat, a Meteor play project&lt;/a&gt;: woh, I played with Meteor once&lt;/li&gt;
 &lt;/ul&gt;</description><link>http://rwilcox.tumblr.com/post/47625737953</link><guid>http://rwilcox.tumblr.com/post/47625737953</guid><pubDate>Wed, 10 Apr 2013 12:04:38 -0400</pubDate></item><item><title>(natural) Handwriting Recognition on your iOS device</title><description>&lt;h1&gt;Goal: Creeping towards the paperless lifestyle&lt;/h1&gt;

&lt;p&gt;I&amp;#8217;m trying to get into the paperless lifestyle this year. I&amp;#8217;m making small changes to facilitate this.&lt;/p&gt;

&lt;p&gt;I keep a paper notebook for scratch writing while I work. Mostly the notebook contains things I need to remember for the next 5 minutes, but can forget afterwards. Sometimes it contains more permanent notes: TODO times, thoughts, things to research&lt;/p&gt;

&lt;p&gt;I want to be able to make these thoughts paperless. Yesterday I stumbled on a workflow that works for me.&lt;/p&gt;

&lt;h1&gt;My Workflow&lt;/h1&gt;

&lt;p&gt;Use &lt;a href="http://www.visionobjects.com/en/webstore/myscript-memo/description/"&gt;MyScript Memo&lt;/a&gt; - this will do handwriting recognition and give you the text to be copied.&lt;/p&gt;

&lt;p&gt;Send it over to the Mac via &lt;a href="http://tapbots.com/software/pastebot/"&gt;PasteBot&lt;/a&gt;, or save it via a Dropbox editor&lt;/p&gt;

&lt;p&gt;But it can not do handwriting recognition on pictures&lt;/p&gt;

&lt;p&gt;So when get idea need to save grab my iPad and stylus and enter it!!&lt;/p&gt;

&lt;h1&gt;Questions and Answers&lt;/h1&gt;

&lt;h2&gt;Q: Why not Evernote?&lt;/h2&gt;

&lt;p&gt;A: I want to get the translated text, so I can make corrections to it. Evernote translates the text but I can&amp;#8217;t go back and edit the guessed at text. I can&amp;#8217;t even export the text: exporting the image gives me an XML document with the image data and each translated word in it&amp;#8217;s own XML element with coordinates. I can see why this (for highlighting the text on the image), but seriously I don&amp;#8217;t care.&lt;/p&gt;

&lt;p&gt;Between my bad handwriting and all the technical terms I use, I really need to be able to go back and correct my text.&lt;/p&gt;

&lt;p&gt;Also, with this workflow, the only thing that matters is the text: I don&amp;#8217;t care about the &lt;code&gt;.jpg&lt;/code&gt; of a picture of my writing. Evernote sees the picture as the thing that has text metadata - I want the text as the thing, with the image being metadata.&lt;/p&gt;

&lt;h2&gt;Q: Why MyScript Memo?&lt;/h2&gt;

&lt;p&gt;A: I want to be able to handwrite my notes THEN trigger recognition. I don&amp;#8217;t want to fight with computers when I&amp;#8217;m taking notes in a meeting.&lt;/p&gt;

&lt;p&gt;I also want a full page to write on - not just some small 3&amp;#8221;x3&amp;#8221; space at the bottom of the screen. I want a notebook page that works like a notebook page in the real world.&lt;/p&gt;

&lt;h2&gt;Q: What sucks about MyScript Memo?&lt;/h2&gt;

&lt;p&gt;A: I want a bigger digital canvas. &lt;a href="http://infinite-sketchpad.com/"&gt;Infinite Sketchpad&lt;/a&gt; is &lt;em&gt;awesome&lt;/em&gt; at this, but there&amp;#8217;s no recognition. But Myspace Memo I can get about half a page of physical notepaper (I rewrote some notes I had laying around) so I guess that&amp;#8217;s OK.&lt;/p&gt;

&lt;p&gt;I believe some of these concerns are addressed in another MyScript product: &lt;a href="http://www.visionobjects.com/en/webstore/myscript-notes-mobile/android/"&gt;MyScript notes mobile&lt;/a&gt;. While I get a new iPad I&amp;#8217;ll try it out (I have an iPad 1).&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ll probably still use Infinite Sketchpad when I&amp;#8217;m mapping out processes or code or something.&lt;/p&gt;

&lt;p&gt;MyScript Memo seems a little slow on my iPad 1, but is quite snappy on my iPhone 4S. I&amp;#8217;m looking forward to when I upgrade my work iPad.&lt;/p&gt;

&lt;h2&gt;Q: But why do this in the first place? Why &lt;em&gt;write&lt;/em&gt; something?&lt;/h2&gt;

&lt;p&gt;A: when I&amp;#8217;m in a formal and scheduled meeting I will often take notes on my computer. I have a special document for these notes so this has become second habit to me. However there are two places where I want to use handwriting:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Random thoughts I have while working on something. I normally put these ideas in my scratch notebook - a 8.5x11 school notebook - but now I can put them in my iPad without swithving modes from &amp;#8220;writing with pens on paper&amp;#8221; to &amp;#8220;pull up my notes file and start typing.&amp;#8221; I&amp;#8217;m aiming for low friction data entry.&lt;/li&gt;
&lt;li&gt;I can write faster than I can type on the iOS keyboard&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;I&amp;#8217;ve recently purchased a Bluetooth keyboard to try and fix issue 2, but that&amp;#8217;s useful when I&amp;#8217;m writing an important email on my phone or writing text longer than a tweet.&lt;/p&gt;

&lt;p&gt;It&amp;#8217;s still early in the process - it&amp;#8217;ll be another week before I know if I can stick with this workflow. I use my iPad to read technical books/PDFs, sometimes as a fourth screen, and as a tool when I&amp;#8217;m brainstorming at my whiteboard. I look forward to seeing how handwritting turned into searchable text changes how I work&lt;/p&gt;</description><link>http://rwilcox.tumblr.com/post/46077337301</link><guid>http://rwilcox.tumblr.com/post/46077337301</guid><pubDate>Sat, 23 Mar 2013 11:44:07 -0400</pubDate><category>paperless</category></item><item><title>We need to celebrate those with 20 years experience</title><description>&lt;p&gt;A recent &lt;a href="https://twitter.com/mm/status/294179421462609920"&gt;tweet by a SF tech recruiter&lt;/a&gt; put down those with 20 years experience as &amp;#8220;[it]… only means you&amp;#8217;re forty&amp;#8221;&lt;/p&gt;

&lt;p&gt;Instead of decrying 20 years experience (&amp;#8220;Go home, old man!&amp;#8221;) we should celebrate it.&lt;/p&gt;

&lt;p&gt;Because 20 years experience as a computer programmer means:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;20 years of too much stress (At least once a year or so I&amp;#8217;m on projects that require me to work at 150% capacity for 3-5 months).&lt;/li&gt;
&lt;li&gt;20 years of late projects being &amp;#8220;solved&amp;#8221; by &lt;a href="http://en.wikipedia.org/wiki/Brooks%27s_law"&gt;adding more people&lt;/a&gt;, or (better yet) adding &lt;em&gt;more&lt;/em&gt; features.&lt;/li&gt;
&lt;li&gt;20 years of weekly or biweekly drama, either in your &lt;a href="http://rubydramas.com/"&gt;development community of choice&lt;/a&gt;, or internal company drama.&lt;/li&gt;
&lt;li&gt;20 years of explaining to your new manager (who used to be a secretary, long haul truck driver, or sales person) how software development works and how to manage a dev team.&lt;/li&gt;
&lt;li&gt;20 years of trying to follow &amp;#8220;just make it work&amp;#8221; orders from a manager, when the technical debt of the codebase fights you every step of the way (while said manager breaths down your neck for status updates).&lt;/li&gt;
&lt;li&gt;20 years of blame.&lt;/li&gt;
&lt;li&gt;20 years of fighting bugs that happened when you &lt;a href="http://stevelosh.com/blog/2012/04/volatile-software/"&gt;upgrade from one version of something to the next&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;20 years of dealing with ever changing (potentially contradictory!) demands.&lt;/li&gt;
&lt;li&gt;20 years of software cycles (server -&amp;gt; desktop -&amp;gt; server -&amp;gt;…)&lt;/li&gt;
&lt;li&gt;20 years of refining requirements into something that can be implemented.&lt;/li&gt;
&lt;li&gt;20 years of too many deadlines.&lt;/li&gt;
&lt;li&gt;20 years of job requirements that boil down to &amp;#8220;want 25 year old willing to work for peanuts and move to San Francisco&amp;#8221;.&lt;/li&gt;
&lt;li&gt;20 years of explaining things and getting rebuffed because the manager &amp;#8220;knows better&amp;#8221;/thinks you are just being cranky/is &amp;#8220;willing to take that chance&amp;#8221;/tuned out after you said the word &amp;#8220;problem&amp;#8221;.&lt;/li&gt;
&lt;li&gt;20 years of explaining that &lt;a href="http://folklore.org/StoryView.py?story=Negative_2000_Lines_Of_Code.txt"&gt;lines of code is not a good productivity measure&lt;/a&gt; (nor is individual completed agile story points per iteration, or &lt;a href="http://stackoverflow.com/questions/324399/what-is-a-fair-productivity-measurement-technique-for-programmers"&gt;pretty much anything else&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;20 years of dealing with cranky nerds (who are sometimes cranky at you)&lt;/li&gt;
&lt;li&gt;20 years of learning to dealing with, and questioning, recruiting pitches.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;If you&amp;#8217;ve been programming for 20 years you&amp;#8217;ve seen all of these things and probably much more. Even if you&amp;#8217;ve been working away in some state&amp;#8217;s IT department, migrating some legacy system from Cobol to Java for the last 6 years &lt;strong&gt;your experience is still valuable&lt;/strong&gt;. Because you&amp;#8217;ve seen it all before, and picked up programming languages like normal people pick up how to use &lt;em&gt;applications&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Managers and recruiters: if you can keep your ego in check a little bit, these people can be awesome to have on your team. Why? Because:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;They know what&amp;#8217;s going to happen &lt;em&gt;after&lt;/em&gt; that &amp;#8220;crunch&amp;#8221; weekend of people pulling 20 hour days for 3 days straight&lt;/li&gt;
&lt;li&gt;They know that your application internally is &lt;a href="http://en.wikipedia.org/wiki/Greenspun%27s_tenth_rule"&gt;a buggy version of half of a 50 year old programming language&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;They can sometimes take a super hard problem, solve it and &lt;strong&gt;prove&lt;/strong&gt; the solution by relational calculus, or graph theory, or other really hard math.&lt;/li&gt;
&lt;li&gt;They are probably more willing to speak up than the young guns on your team.&lt;/li&gt;
&lt;li&gt;They&amp;#8217;ve seen many things before: &amp;#8220;Oh, &lt;a href="http://nodejs.org/"&gt;reactor pattern framework&lt;/a&gt;? Oh, been there done that, 15 some years ago!&amp;#8221;&lt;/li&gt;
&lt;li&gt;They can &lt;em&gt;sometimes&lt;/em&gt; manage working on projects with 3 near-simultaneous deadlines.&lt;/li&gt;
&lt;li&gt;They probably have fulfilled more roles than just developer: product development person, client relations, recruiting, evaluating new hires, coach, manager, QA tester, conference organizer, salesman.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;While years of experience isn&amp;#8217;t a great measure of how good a programmer a person is, you know the person has been around the block and (probably) experienced the majority of things on this list &amp;#8212; they certainly deserve better than, &amp;#8220;get off my lawn, old man!&amp;#8221; that the recruiting/startup community seems to exude.&lt;/p&gt;</description><link>http://rwilcox.tumblr.com/post/41396748170</link><guid>http://rwilcox.tumblr.com/post/41396748170</guid><pubDate>Thu, 24 Jan 2013 19:06:52 -0500</pubDate></item><item><title>My new IPad stand.

Yes those are eraser covers. Works pretty...</title><description>&lt;img src="http://24.media.tumblr.com/04d5c62a0cdb05236ccc752d8f8e2a43/tumblr_mf8obkoBmV1qbuaiqo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;My new IPad stand.&lt;/p&gt;

&lt;p&gt;Yes those are eraser covers. Works pretty well. My iPad case has good landscape support but not portrait. Yet I was reading a portrait document.&lt;/p&gt;</description><link>http://rwilcox.tumblr.com/post/38237412064</link><guid>http://rwilcox.tumblr.com/post/38237412064</guid><pubDate>Tue, 18 Dec 2012 13:21:20 -0500</pubDate></item><item><title>Why Divvy
Sometimes I want a set of windows regularly across the...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_mcvguvgUPq1qbuaiqo1_r1_400.png"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;h1&gt;Why Divvy&lt;/h1&gt;
&lt;p&gt;Sometimes I want a set of windows regularly across the screen, and sometimes I want the ability to resize my windows in arbitrary (but common) sizes.&lt;/p&gt;
&lt;p&gt;With &lt;a href="http://mizage.com/divvy/"&gt;Divvy&lt;/a&gt; if I really want to create a 1 row size window in the middle of the screen, for Bog knows what reason I can. I have yet to see this ability in other “tiled window managers”.&lt;/p&gt;
&lt;p&gt;With Divvy I can reposition and resize a window with a simple drag. I like it.&lt;/p&gt;
&lt;h1&gt;So, what do you want to do now?&lt;/h1&gt;
&lt;p&gt;Title my windows so there is no space left on the screen. This is partially so I can see everything at one time and be efficent. It’s also partially a work around around OS X’s fucked up desktop picture “management”, but whatever. (Seriously, try setting a desktop picture across spaces and with a 2+ monitor setup. It’s impossible.)&lt;/p&gt;
&lt;h1&gt;My Divvy Setup&lt;/h1&gt;
&lt;p&gt;Pictures of my Divvy setup are here.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Divvy image 1" height="274" src="http://www.wilcoxd.com/uploads/1351879643.png" width="377"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Divvy Image 2" height="301" src="http://www.wilcoxd.com/uploads/1351879698.png" width="377"/&gt;&lt;/p&gt;
&lt;p&gt;I have a Microsoft 4000 with a full size keypad so I’ve set up these Divvy shortcuts to be activated via the numpad.&lt;/p&gt;
&lt;p&gt;I also have enough oddball shortcuts to remember on my system, so these are &lt;strong&gt;not&lt;/strong&gt; global shortcuts. I first bring up Divvy (Control-Shift-Space for me) then hit 9 on my numpad. Namespaces are good - let’s do more of those!&lt;/p&gt;
&lt;h1&gt;What this results in&lt;/h1&gt;
&lt;p&gt;I can quickly take two windows and tile them side by side down the full length of my screen.&lt;/p&gt;
&lt;p&gt;I can quickly take a window and resize it to take up the top or bottom, left or right, side of my screen. I can go from “two full length side by side” windows to “four quadrant windows” in 3 seconds.&lt;/p&gt;
&lt;p&gt;I can also mix it up: I often have 2 half length windows open on the left and one, full length, window open on the right.&lt;/p&gt;
&lt;h1&gt;Why Not?&lt;/h1&gt;
&lt;p&gt;&lt;a href="https://github.com/jigish/slate"&gt;Slate&lt;/a&gt;? When someone writes a 100 page PragProg book on it I’ll look into it. Trying to understand Slate I’m reminded of the last time I tried to look at X11 configure files.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.irradiatedsoftware.com/sizeup/"&gt;Size-Up&lt;/a&gt;? I like to have the option to create arbitrary sizes. While my standard sizes are (now) 80% of my window management needs sometimes I want something custom.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://itunes.apple.com/us/app/moom/id419330170?mt=12"&gt;Moom&lt;/a&gt;? Same thing: no arbitrary sizes.&lt;/p&gt;</description><link>http://rwilcox.tumblr.com/post/34840125238</link><guid>http://rwilcox.tumblr.com/post/34840125238</guid><pubDate>Fri, 02 Nov 2012 14:04:00 -0400</pubDate><category>osx</category></item><item><title>Will Programmers continue to have such high wages? (TL; DR: YES)</title><description>&lt;p&gt;Yes, because there&amp;#8217;s always some new thing that&amp;#8217;s super hard. No matter how much we advance the craft there&amp;#8217;s always a new challenge in front of us, no matter if we conquered the previous challenges or not.&lt;/p&gt;

&lt;p&gt;Take a flip answer to that question from various eras of computing:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;1970s: &amp;#8220;Yes, because structured programming&amp;#8221;&lt;/li&gt;
&lt;li&gt;1980s: &amp;#8220;Yes, because event loop and/or graphical interfaces&amp;#8221;&lt;/li&gt;
&lt;li&gt;1990s: &amp;#8220;Yes, because networking&amp;#8221;&lt;/li&gt;
&lt;li&gt;2000s: &amp;#8220;Yes, because pointers&amp;#8221;&lt;/li&gt;
&lt;li&gt;2010s: &amp;#8220;Yes, because concurrency and or asynchronicity&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;I can imagine the following answers for the next few decades:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;2020s: &amp;#8220;Yes, because gestures/motions&amp;#8221;&lt;/li&gt;
&lt;li&gt;2030s: &amp;#8220;Yes, because genetic programming&amp;#8221;&lt;/li&gt;
&lt;li&gt;2035: &amp;#8220;Yes, because maintenance programming&amp;#8221;&lt;/li&gt;
&lt;li&gt;2040s: &amp;#8220;Yes because damn stupid AIs&amp;#8221;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;So yes, I see the learning curve of programming continuing to be a hocky-stick like curve. Yes, it&amp;#8217;s relatively easy to teach yourself some HTML and Javascript and build something, then things get harder and harder as you learn more and more. Even if your able to do more and more with a lower and lower skill level there will always be hard problems to solve that need an experienced programmer, and that means well paid.&lt;/p&gt;

&lt;p&gt;And this just rounds up the technical reasons. We&amp;#8217;ll always have people who want software built but don&amp;#8217;t know what they want; processes that - once you dig into them - become more and more complex; and companies that want to &amp;#8220;push the edge of what tech can do&amp;#8221;. These people problems - that have been the same since the early days of computing - won&amp;#8217;t be going away.&lt;/p&gt;</description><link>http://rwilcox.tumblr.com/post/34516551391</link><guid>http://rwilcox.tumblr.com/post/34516551391</guid><pubDate>Sun, 28 Oct 2012 17:49:20 -0400</pubDate></item><item><title>Why "just teach the unemployed to program" isn't a good answer</title><description>&lt;p&gt;I hear this argument a lot:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Oh, you&amp;#8217;re unemployeed or can&amp;#8217;t find a job? Just learn computer programming - I hear Microsoft is gagging for people.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As a professional computer programmer, let me weigh in:&lt;/p&gt;

&lt;p&gt;I spent 2 years during high school learning to program after school. I started consulting part time during my freshman year of college for a local programming consulting shop. The first year or two at that job I knew &lt;em&gt;very&lt;/em&gt; little (looking back on things now), struggling to learn the trade. I&amp;#8217;m glad my employers were OK with that.&lt;/p&gt;

&lt;p&gt;Fast forward 4 years, and I started my own consultancy business out of college. Doing computer programming consultancy is &lt;strong&gt;hard&lt;/strong&gt;: in addition to having technical chops you also have to do project management, manage cash flow, deal with clients who fight you about money, know basic accounting, you name it. In my own practice there were a lot of years that were &amp;#8220;famine&amp;#8221; years, and only a few that were &amp;#8220;feast&amp;#8221; years.&lt;/p&gt;

&lt;p&gt;So maybe you think that you can get a job as a programmer with a startup, because startups are what everyone thinks about now. In my experience you need two things going for you to get a job at a startup: 1) living in SF or NYC and 2) having 2-3 years of professional experience in their language of choice. If you don&amp;#8217;t have &lt;em&gt;both&lt;/em&gt; of those things the pickings are pretty slim.&lt;/p&gt;

&lt;p&gt;The thing about startups is because the team size is so small they can&amp;#8217;t (or don&amp;#8217;t think they can) deal with bringing on a newbie programmer and the slower output they will have.&lt;/p&gt;

&lt;p&gt;Please don&amp;#8217;t do DevBootcamp or CodeAcademy and think that you can put our your consultancy shingle, working for clients directly. If you really want to go that route find a more experienced freelancer to subcontract with for a year or two, and learn from them.&lt;/p&gt;

&lt;p&gt;In one way, the world of web development is easier than the programming world I grew up in (writing C and C++ programs for desktop computers), and perhaps with laser focus on web development you could be a good developer in 6 months. HungryAcademy thinks it can train people to do that, and I have seen amazingly talented people go far with very little (comparatively) training. Then again, there&amp;#8217;s at least 4 languages to any moderately complex website (CSS, HTML, JS, and a server-side language), so there&amp;#8217;s a &lt;em&gt;lot&lt;/em&gt; to cover.&lt;/p&gt;

&lt;p&gt;But certainly it&amp;#8217;s not a matter of just picking up &amp;#8220;Learn Web Development in 24 hours&amp;#8221; and a day later being able to charge clients $100/hour for websites. Your looking at half a year at least, if not 2 years at least before companies take you seriously. And probably 3 or 4 years before you really &lt;em&gt;should&lt;/em&gt; be taking on clients yourself.&lt;/p&gt;

&lt;p&gt;And this is assuming you have the personality and passion for programming. Having tried to train a number of people to be programmers…. it takes a certain type of person to be really good. I&amp;#8217;m sure this is as true of other fields as it is of say the Marines.&lt;/p&gt;

&lt;p&gt;So sure &amp;#8212; certainly if your unemployeed and looking to get an edge up and make a long-term investment in yourself (or just learn something fun!) maybe spending 10-30 hours a week learning programming (between job searching) is a good idea. Maybe in 6-12 months you can make something interesting that people like or think shows enough potential that they&amp;#8217;re willing to take a chance on you. But it&amp;#8217;s not a panacea.&lt;/p&gt;

&lt;p&gt;Especially not when applying to Microsoft, where they want the best of the best.&lt;/p&gt;</description><link>http://rwilcox.tumblr.com/post/32717268263</link><guid>http://rwilcox.tumblr.com/post/32717268263</guid><pubDate>Mon, 01 Oct 2012 23:29:48 -0400</pubDate></item><item><title>Replicating Github Launch with Launchbar (well, almost)</title><description>&lt;p&gt;&lt;a href="https://github.com/blog/1267-github-launch-page"&gt;Github Launch&lt;/a&gt; is pretty cool - a command line interface for &lt;a href="http://www.github.com"&gt;Github&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There are two things bad about it:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;It&amp;#8217;s dog slow on Firefox&lt;/li&gt;
&lt;li&gt;It&amp;#8217;s entirely Javascript based - I can&amp;#8217;t build a tool that sends a command to Github launch outside the browser.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;I worked around issue one by typing my command in another window, pasting the result into Github Launch, then hitting return. This kind of sucked, but whatever.&lt;/p&gt;

&lt;p&gt;Today I realized that mostly the Github launch commands were mostly just a clean interface around the RESTful URL structure of Github.&lt;/p&gt;

&lt;p&gt;So I wrote a search Template for &lt;a href="http://www.obdev.at/products/launchbar/index.html"&gt;LaunchBar&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The search template looks like:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;&lt;a href="http://www.github.com/*"&gt;http://www.github.com/*&lt;/a&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;It does require a slightly different syntax than Github launch, but it&amp;#8217;s also super easy.&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s how I use it:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Type: &amp;#8220;Github&amp;#8221; in Launchbar&lt;/li&gt;
&lt;li&gt;Press spacebar to trigger the text input field&lt;/li&gt;
&lt;li&gt;type &lt;code&gt;rwilcox/github_my_activites&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Press return, be taken to the appropriate repository.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Now, this doesn&amp;#8217;t provide tab completion like the Github Launch bar, but tab completion didn&amp;#8217;t work for me anyway (dog slow on Firefox).&lt;/p&gt;</description><link>http://rwilcox.tumblr.com/post/32458982707</link><guid>http://rwilcox.tumblr.com/post/32458982707</guid><pubDate>Fri, 28 Sep 2012 11:23:03 -0400</pubDate><category>github</category></item><item><title>Embedding images into Github Tickets</title><description>&lt;p&gt;It&amp;#8217;s hard and annoying to embed images into &lt;a href="http://www.github.com"&gt;Github&lt;/a&gt; Markup renders.&lt;/p&gt;

&lt;p&gt;The great thing is that since everything in Github is markdown, this trick will work everywhere.&lt;/p&gt;

&lt;p&gt;The trick is to use an external host to host your images, then link to them by putting a &lt;code&gt;!&lt;/code&gt; in front of a normal Markdown link statement.&lt;/p&gt;

&lt;p&gt;But, ugh, external host, right?&lt;/p&gt;

&lt;p&gt;NO&lt;/p&gt;

&lt;p&gt;Here&amp;#8217;s how to do it step by step:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Put the image for Github inclusion in your Dropbox&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;Finder&lt;/strong&gt; (not PathFinder) right click the file and choose Dropbox -&amp;gt; Share File&lt;/li&gt;
&lt;li&gt;Close the share web dialog that your browser opens and copy the URL&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lifehacker.com/5680956/make-dropbox-public-links-download-files-instead-of-viewing-them-in+browser"&gt;Add &lt;code&gt;?dl=1&lt;/code&gt; to the resulting link&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;I like to keep my things out of the public folder, so I just use this basic sharing feature. However, I can&amp;#8217;t script away the annoying part as apparently part of the link is &lt;em&gt;link&lt;/em&gt; specific, not &lt;em&gt;user&lt;/em&gt; specific. Source: &lt;a href="https://www.dropbox.com/help/167/en"&gt;Scroll down to the &amp;#8216;for our advanced users&amp;#8217; section of this Dropbox tech note&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;Alternative Way&lt;/h1&gt;

&lt;p&gt;If you have your own web space there&amp;#8217;s the awesome &lt;a href="https://github.com/lorenzoferrarajr/Automated-Transmit-Uploader"&gt;Automated Transmit Uploader&lt;/a&gt; on Github. Although part of me would rather use Dropbox for this… MAN this workflow is really easy.&lt;/p&gt;</description><link>http://rwilcox.tumblr.com/post/32380435558</link><guid>http://rwilcox.tumblr.com/post/32380435558</guid><pubDate>Thu, 27 Sep 2012 18:15:22 -0400</pubDate><category>github</category><category>dropbox</category></item><item><title>BBEdit has this useful feature: it will strip whitespace added...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_mb0folj8fc1qbuaiqo1_500.png"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://25.media.tumblr.com/tumblr_mb0folj8fc1qbuaiqo2_500.png"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;p&gt;BBEdit has this useful feature: it will strip whitespace added to end of lines OR it will remove all the whitespace from lines that are *just* whitespace.&lt;br/&gt;&lt;br/&gt;This setting is at BBEdit -&gt; Preferences -&gt; Text Files -&gt; Strip trailing whitespace.&lt;br/&gt;&lt;br/&gt;Most of the time I have this turned on because most of the time I’m writing code in BBEdit. &lt;br/&gt;&lt;br/&gt;Except, there are some languages (programming languages and markup languages like &lt;a href="http://daringfireball.net/projects/markdown/" title="Markdown"&gt;Markdown&lt;/a&gt; where whitespace is significant.&lt;br/&gt;&lt;br/&gt;We can customize BBEdit’s behavior per language via the Languages preferences item. Select your language from the Custom Language preferences, as shown in the image.&lt;br/&gt;&lt;br/&gt;You can set language level defaults for pretty much everything text related. What we’re interested in is the Files tab and the Strip trailing whitespace checkbox.&lt;/p&gt;
&lt;p&gt;Now, as long as your language in the BBEdit document is set to Markdown it will no longer strip whitespace&lt;/p&gt;</description><link>http://rwilcox.tumblr.com/post/32392054547</link><guid>http://rwilcox.tumblr.com/post/32392054547</guid><pubDate>Thu, 27 Sep 2012 09:19:00 -0400</pubDate><category>long</category></item><item><title>Searching your Mutt mail on OS X</title><description>&lt;p&gt;I &lt;a href="http://rwilcox.tumblr.com/post/15025043556/using-mutt-on-os-x-tips-and-tricks"&gt;switched to Mutt about a year ago&lt;/a&gt;. Mutt is pretty good, but there are a lot of convenience that you give up.&lt;/p&gt;

&lt;p&gt;One of these conveniences that you give up with out-of-the-box Mutt is really good, inter-mailbox searching. Sure, you can use a quick search feature to find messages in the current mailbox, but sometimes I&amp;#8217;m not sure which mailbox I put my mail.&lt;/p&gt;

&lt;p&gt;(You see, I organize my mail in an old-school one-folder-per-topic method)&lt;/p&gt;

&lt;h1&gt;Prerequisite: Use Maildir, not mbox&lt;/h1&gt;

&lt;p&gt;For any of the techniques I talk about to work you&amp;#8217;ll need to be using Maildir, and not &lt;code&gt;.mbox&lt;/code&gt; files. Here&amp;#8217;s how you do that:&lt;/p&gt;

&lt;p&gt;Use a tool like &lt;a href="http://batleth.sapienti-sat.org/projects/mb2md/"&gt;mb2md&lt;/a&gt; to do this.&lt;/p&gt;

&lt;p&gt;You&amp;#8217;ll also want to strip the leading dot from the generated file names (well, at least I did). See &lt;a href="http://stackoverflow.com/questions/4763041/strip-leading-dot-from-filenames-bash-script"&gt;a bash script that does this&lt;/a&gt; OR make &lt;a href="http://infrablue.tripod.com/maildir.html"&gt;the change to mb2md directly&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The leading dot is not just annoying (&amp;#8220;Where did all my mail go!!!&amp;#8221; inducing) but Spotlight won&amp;#8217;t index files that begin with a dot.&lt;/p&gt;

&lt;p&gt;Wait, Spotlight?!! Yes&lt;/p&gt;

&lt;h1&gt;Search the OS X way: Spotlight&lt;/h1&gt;

&lt;p&gt;Now that you&amp;#8217;ve used maildir to categorize these messages you can search for it via Spotlight.&lt;/p&gt;

&lt;p&gt;The bad thing is that Mutt saves its mail messages with not-human-readable names, so when you do find some messages you&amp;#8217;re looking for you don&amp;#8217;t really know which exact message is the one you&amp;#8217;re looking for.&lt;/p&gt;

&lt;p&gt;Enter &lt;a href="https://github.com/whomwah/qlstephen"&gt;QLStephen&lt;/a&gt;: a QuickLook plugin that allows you to look at plain text documents.&lt;/p&gt;

&lt;h2&gt;I want to find only email messages, not my search term in other documents!!!&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://www.houdah.com/houdahSpot/"&gt;HoudahSpot&lt;/a&gt; lets you save a search template. Thus you can create one for email. Here&amp;#8217;s mine:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Text Content contains (whatever)
Where: ~/Mail
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;HoudahSpot is now what I use for searching mail.&lt;/p&gt;

&lt;h1&gt;Search the Unix Way: notmuch&lt;/h1&gt;

&lt;p&gt;If you don&amp;#8217;t like Spotlight, or run your mail on Linux, great. There&amp;#8217;s a tool called &lt;a href="http://notmuchmail.org/"&gt;notmuch&lt;/a&gt; that is a mail indexer which may work for you.&lt;/p&gt;

&lt;p&gt;There&amp;#8217;s an awesome blog post: &lt;a href="http://upsilon.cc/~zack/blog/posts/2011/01/how_to_use_Notmuch_with_Mutt/"&gt;Mutt mail indexing on steroids!&lt;/a&gt; that I was working through before I found that Spotlight works.&lt;/p&gt;

&lt;p&gt;Regardless, notmuch doesn&amp;#8217;t support &lt;code&gt;.mbox&lt;/code&gt; files, something I ran into early in my testing.&lt;/p&gt;</description><link>http://rwilcox.tumblr.com/post/31700030649</link><guid>http://rwilcox.tumblr.com/post/31700030649</guid><pubDate>Sun, 16 Sep 2012 21:03:32 -0400</pubDate><category>mutt</category></item><item><title>Forwarding sitename.dev to a remote host (for Rails)</title><description>&lt;p&gt;I do all my Ruby on Rails development with &lt;a href="http://vagrantup.com/"&gt;Vagrant&lt;/a&gt;, keeping separate virtual machines for each project I may be working on.&lt;/p&gt;

&lt;p&gt;I use &lt;a href="http://rwilcox.tumblr.com/post/4314237560/my-mobile-setup-rails-development-on-the-road"&gt;SSH magic to forward the proper ports up to my server&lt;/a&gt;. I&amp;#8217;ve been using this setup for 18 months now, typing in &lt;code&gt;localhost:3001&lt;/code&gt; to visit my Rails server on my development machine.&lt;/p&gt;

&lt;p&gt;Enter &lt;a href="http://pow.cx/"&gt;pow&lt;/a&gt;: pow&amp;#8217;s goal is to make it really easy to visit a project server on your local machine: type &lt;code&gt;myproject.dev&lt;/code&gt; into the browser and Pow finds &lt;code&gt;myproject&lt;/code&gt;, boots the Rails stack and serves you a page.&lt;/p&gt;

&lt;p&gt;The URL looks awesome and can give everyone a unified URL for development that looks great.&lt;/p&gt;

&lt;p&gt;So, today I set up my machine to have Pow-like abilities: forwarding &lt;code&gt;myproject.dev&lt;/code&gt; to my development server.&lt;/p&gt;

&lt;h1&gt;Step 1: Edit /etc/hosts&lt;/h1&gt;

&lt;p&gt;Edit &lt;code&gt;/etc/hosts&lt;/code&gt; and add this line:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;127.0.0.1   myproject.dev
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Note that there&amp;#8217;s a tab between 127.0.0.1 and myproject.dev&lt;/p&gt;

&lt;h1&gt;Step 2: Turn off any web server you&amp;#8217;re running on your machine&lt;/h1&gt;

&lt;p&gt;We want to use Port 80, so nothing else can.&lt;/p&gt;

&lt;h1&gt;Step 3: Forward port 80 to port 3000 on remote machine&lt;/h1&gt;

&lt;p&gt;The &lt;code&gt;/etc/hosts&lt;/code&gt; entry lets us go to &lt;code&gt;myproject.dev&lt;/code&gt; and be taken to our local machine. We want to go to port 80 on our local machine and magically be taken to port 3000 on the remote machine. This is easy with some SSH magic!&lt;/p&gt;

&lt;p&gt;Here is the SSH command to make that magic happen:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo ssh -F ~/.ssh/config -l vagrant my_remote_host.com  -L 80:my_remote_host.com:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The &lt;code&gt;sudo&lt;/code&gt; is here because port 80 is a privileged port and we need root access to forward it.&lt;/p&gt;

&lt;h1&gt;Everything all together&lt;/h1&gt;

&lt;p&gt;Here&amp;#8217;s how everything works:&lt;/p&gt;

&lt;p&gt;When you visit &lt;code&gt;myproject.dev&lt;/code&gt; in the browser it will make a request for port 80 on your local machine. SSH will see that connection and forward it to port 3000 the remote machine&lt;/p&gt;

&lt;h1&gt;Conclusion&lt;/h1&gt;

&lt;p&gt;There are some massive annoyances using this approach, which could be solved by making the remote development machine responsible for translating port 80 into port 3000. I might look into this: having two SSH connections open (one opened for my normal work and one opened via `sudo ssh) is annoying. I&amp;#8217;ll post an update here when I find a better solution to this problem.&lt;/p&gt;

&lt;p&gt;Even if you want to swap out Step 3 with some other step, you still need to do steps 1 and 2.&lt;/p&gt;</description><link>http://rwilcox.tumblr.com/post/29827397349</link><guid>http://rwilcox.tumblr.com/post/29827397349</guid><pubDate>Mon, 20 Aug 2012 10:06:10 -0400</pubDate><category>rails</category></item><item><title>Sorry for blowing away history...</title><description>&lt;p&gt;Today I decided to tag my blog posts, so I could find them later.&lt;/p&gt;

&lt;p&gt;Unfortunately that had an side affect: all the posts look like they were posted today.&lt;/p&gt;

&lt;p&gt;But they weren&amp;#8217;t.&lt;/p&gt;

&lt;p&gt;Posts from today onward will be tagged so I can find them, so this shouldn&amp;#8217;t happen again.&lt;/p&gt;</description><link>http://rwilcox.tumblr.com/post/29057789379</link><guid>http://rwilcox.tumblr.com/post/29057789379</guid><pubDate>Thu, 09 Aug 2012 12:17:52 -0400</pubDate></item><item><title>Creating a new Python Package (and putting it up on PyPi)</title><description>&lt;h1 id="creating_a_new_python_package"&gt;Creating a new Python package&lt;/h1&gt;
&lt;p&gt;OMG this is easy, why haven’t I done this before?&lt;/p&gt;
&lt;p&gt;NOTE: you can ignore &lt;a href="https://github.com/dinoboff/github-tools"&gt;github-tools&lt;/a&gt; — really that is meant to only help the gh_pages documentation generating.&lt;/p&gt;
&lt;p&gt;And, in fact, we have some pretty awesome tools without it!!!&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ paster create -t basic_package PACKAGE_NAME&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;* hack hack hack* &lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;* hack hack hack *&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Test install it somewhere with:    &lt;code&gt;$ pip -e hg+/path/to/package#egg=PACKAGE_NAME&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;* does the package work now? Yes? Awesome *&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;back in your development directory…&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ python setup.py register&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; # ^^^^ this will automatically upload package to PyPi&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ python setup.py sdist upload&lt;/code&gt;&lt;/p&gt;</description><link>http://rwilcox.tumblr.com/post/2516744196</link><guid>http://rwilcox.tumblr.com/post/2516744196</guid><pubDate>Thu, 09 Aug 2012 12:14:47 -0400</pubDate><category>python</category><category>django</category></item><item><title>Creating a new Ruby Package (and putting it up on Rubygems) with newgem</title><description>&lt;p&gt;So, in the sprit of the previous article on this blog, I&amp;#8217;m going to document how to make a Ruby package and put it up on RubyGems.&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Create your project. You can use Jeweler for this, or &lt;a href="http://newgem.rubyforge.org/"&gt;newgem&lt;/a&gt;. I like newgem, because I&amp;#8217;m familiar with it. The instructions in this article assume newgem infrastructure&lt;/li&gt;

&lt;li&gt;&lt;em&gt;* hack hack hack*&lt;/em&gt;&lt;/li&gt;

&lt;li&gt;&lt;em&gt;* hack hack hack *&lt;/em&gt;&lt;/li&gt;

&lt;li&gt;&lt;code&gt;$ rake check_manifest&lt;/code&gt;. Your manifest declares what files are in your package. If you have confidence there is no cruft, you could generate this via &lt;code&gt;$ rake manifest&lt;/code&gt; I think will generate this for you.&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Test your gem. With newgem try &lt;code&gt;rake install_gem&lt;/code&gt;. 
&lt;/p&gt;&lt;blockquote&gt;It&amp;#8217;s possible (if you&amp;#8217;re using RVM) that this isn&amp;#8217;t going to work, and if so just redo the sudo command that failed, but without sudo. Then try to use the gem somewhere (shove it into a test Rails app, for example).&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;* does the package work now? Yes? Awesome *&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;&lt;p&gt;back in your development directory&amp;#8230;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;$ gem install gemcutter&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ rake release_sanity VERSION=1.0.0&lt;/code&gt; (or whatever version number &lt;em&gt;you&lt;/em&gt; expect&amp;#8230; knowing that the computer might have other ideas)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ rake release_to_gemcutter VERSION=1.0.0&lt;/code&gt; (or whatever version you want to push&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;And we&amp;#8217;re done.&lt;/p&gt;</description><link>http://rwilcox.tumblr.com/post/2949902211</link><guid>http://rwilcox.tumblr.com/post/2949902211</guid><pubDate>Thu, 09 Aug 2012 12:14:42 -0400</pubDate><category>ruby</category><category>rails</category></item><item><title>Lessons learned over the last 72 hours</title><description>My current project is crunching hard towards a release. This weekend was release weekend. I learned the following things:

&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;em&gt;It&amp;#8217;s important to know when you&amp;#8217;ve hit 0 productivity&lt;/em&gt;. Sign of this: looking at your Skype windows, then switch Spaces to GitHub, then switch spaces back to your Skype windows, then switch Spaces back to Github&amp;#8230;. and repeat. Congrats - you&amp;#8217;ve reached 0 productivity. I hope you&amp;#8217;ve noticed this before you spent too much time literally doing nothing.&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;ve hit this point more than once, and tried to fix it with breaks, coffee, pairing and magic, but you still find yourself here&amp;#8230; it&amp;#8217;s time to go home&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;em&gt;After 17 hours in an office chair, half remembered ygoa techniques help&lt;/em&gt;&amp;#8230; and give about another 1-2 hours of energy&lt;/li&gt;
&lt;li&gt;When your &lt;em&gt;own personal perception of reality gets&amp;#8230; &amp;#8220;interesting&amp;#8221;&amp;#8230;&lt;/em&gt;, it&amp;#8217;s time to go home&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Notice&lt;/em&gt; when you&amp;#8217;re about to literally fall down&lt;/li&gt;
&lt;li&gt;The &lt;em&gt;worse thing in the world&lt;/em&gt; is saying &amp;#8220;I&amp;#8217;m about to drop&amp;#8221;, and a manager saying &amp;#8220;Before you go, can you do these three things that would take 30 minutes to an hour?&amp;#8221;&amp;#8230; at 4 am.&lt;/li&gt;
&lt;li&gt;People who have hit the wall are slightly crankier than they normally should be. I&amp;#8217;m sorry.&lt;/li&gt;
&lt;/ul&gt;</description><link>http://rwilcox.tumblr.com/post/3292254172</link><guid>http://rwilcox.tumblr.com/post/3292254172</guid><pubDate>Thu, 09 Aug 2012 12:14:38 -0400</pubDate><category>personal</category><category>history</category></item><item><title>Churn</title><description>&lt;p&gt;I believe I have stumbled upon the very definition of churn:&lt;/p&gt;
&lt;h1&gt;The Story&lt;/h1&gt;
&lt;p&gt;For a certain project of mine, I originally implemented the system to support many &amp;#8220;legal letters per case&amp;#8221;.&lt;/p&gt;
&lt;p&gt;Fast forward a month later, where we are told by business to only support one letter per case. After questioning them explicitly and incessantly about &amp;#8220;are you sure you&amp;#8217;ll only ever send one letter per case?!&amp;#8221;, and getting the answer &amp;#8220;We&amp;#8217;ll only ever ever send one&amp;#8221;. We did the work to make the system less flexible and support only one letter per case.&lt;/p&gt;
&lt;p&gt;Fast forward another month later, where we are told by business that we want to keep track of multiple letters per case.&lt;/p&gt;
&lt;h1&gt;The lesson: Specify Behavior, not Implementation to programmers&lt;/h1&gt;
&lt;p&gt;And this is exactly what happens when your clients specify implementation instead of behavior: you have programmers/consultants make and remake expensive changes. If you had specified behavior, your consultant might have understood the scenario (as I did here), made the correct choice and avoided expensive churn.&lt;/p&gt;</description><link>http://rwilcox.tumblr.com/post/3526739371</link><guid>http://rwilcox.tumblr.com/post/3526739371</guid><pubDate>Thu, 09 Aug 2012 12:14:33 -0400</pubDate><category>history</category><category>personal</category></item><item><title>Expectational Debt</title><description>&lt;p&gt;I was listening to 5by5’s Back to Work’s latest “Expectational Debt” episode. One great way to get a lot of expectational debt? Work 60 hour weeks for 8-10 weeks straight.&lt;/p&gt;
&lt;p&gt;And this expectational debt, in my case, involves stupid stuff that I&amp;#8217;d be able to do with a normal 40 hour week. Like &amp;#8220;hang out with my wife more&amp;#8221;, or &amp;#8220;answer personal email better&amp;#8221;. It&amp;#8217;s not expectational debt like &amp;#8220;start and finish this project I told people I was going to do&amp;#8221;.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;m used to intense schedules - one of the reasons why I went to RIT was because of their 10 week quarter system. (My thought? &amp;#8220;WTF are you going to do in 15 weeks?&amp;#8221;) But I feel the expectational debt creep back into my life&lt;/p&gt;
&lt;p&gt;Since January, my normal schedule: up at 9:00 check email etc, start work at 9:30. Work until noonish, an hour (sometimes) for lunch. Work until 5:30 or 6. Back at 8:00 or 8:30, work until midnight, 12:30, or 1:00 AM.. essentially until I collapse&amp;#8230;. and all this work is for the same project.&lt;/p&gt;
&lt;p&gt;Which is insanity that we&amp;#8217;re expected to work this hard. This isn&amp;#8217;t motivation, it&amp;#8217;s slave-driving.&lt;/p&gt;
&lt;p&gt;Let me reiterate that point: it&amp;#8217;s all for the same project. When I make myself busy with too many side projects at the same time, that&amp;#8217;s my fault, my own bad management. When it&amp;#8217;s on project taking up all that time, it&amp;#8217;s bad project management.&lt;/p&gt;</description><link>http://rwilcox.tumblr.com/post/3601059227</link><guid>http://rwilcox.tumblr.com/post/3601059227</guid><pubDate>Thu, 09 Aug 2012 12:14:19 -0400</pubDate><category>personal</category><category>agile</category></item><item><title>How do you know if you have a good programmer?</title><description>So there&amp;#8217;s this question is management: &amp;#8220;How do I know if this coder I have is any good?&amp;#8221;. The answer is simple:

&lt;ol&gt;&lt;li&gt;&lt;p&gt;Perform a &lt;a href="http://en.wikipedia.org/wiki/360-degree_feedback"&gt;360 degree review&lt;/a&gt;. Get opinions on this guy from other developers, manager the programmer works with, etc etc.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;Now that you have that baseline of information, and have many opinions from technical peers / team members, sit down with the coder and watch him work. You could be detached, or you could actively pair with him on a part of the system you know something about.
&lt;p&gt;Now ask yourself the following questions:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;p&gt;How often does the coder google something, find a code snippet, and paste it directly into your codebase?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Hint: this should not happen very often, with a good programmer&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Do they write tests, or at the least documentation about his code?&lt;/p&gt; &lt;p&gt;&lt;em&gt;Hint: he should be doing both. Having said that, some parts are just hard to test, or involve legacy code (also hard to test). Bonus: ideally these tests should describe the business behavior of the system.&lt;/em&gt;&lt;/p&gt;

&lt;/li&gt;&lt;li&gt;&lt;p&gt;Does he make this look easy or does he make it look super complicated (&amp;#8220;change this thing here, that thing over there, oh and gotta make sure I switch this thing&amp;#8221;). Unless it&amp;#8217;s a refactoring, ideally it should look easy.&lt;/p&gt; &lt;p&gt;&lt;em&gt;Hint: Having to change many things to get one smaller ticket done might be a symptom of your codebase, not that this guy sucks. The 360 degree review may reveal this to you.&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;How much care / attention to detail do they have? How much care do they exhibit?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How often do they ask for help to the rest of the team?&lt;/p&gt;
&lt;p&gt; &lt;em&gt;Hint: this is tricky, because &amp;#8220;asking a lot&amp;#8221; could mean you have someone who&amp;#8217;s not pulling their weight&amp;#8230; or someone who asks questions because they know someone else on the team has the answer. That&amp;#8217;s why the 360 degree review before this is important&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;&lt;li&gt;&lt;p&gt;Do they have time/space to concentrate, or does someone come by every 5 minutes to interrupt the programmer?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Hint: High amounts of concentration are important for programming. The more they get interrupted, the less work they can do&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;If you ask a question of the programmer, does he answer &amp;#8220;it&amp;#8217;s much too complicated&amp;#8221;, or does he go off and explain this highly technical thing for 5 minutes? &lt;p&gt;&lt;em&gt;Hint: You want the latter. And yes, those tears in your eyes after 5 minutes? Those &lt;strong&gt;are&lt;/strong&gt; tears of boredom&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Notice things about the environment. How many hours per week / days per week is this person working?&lt;/p&gt; &lt;p&gt;&lt;em&gt;Hint: long hours and long days = your highly paid programmer taking longer to do things (and making more mistakes) then normal.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Super hint: you want efficiency in your organization (especially for people who may be getting paid by the hour)&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Are you giving your entire team the time they need to do a quality job? Or is it one &amp;#8220;can&amp;#8217;t miss it&amp;#8221; deadline after another? This is demoralizing, and could actually lead to your programmers getting &lt;em&gt;worse&lt;/em&gt;&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;Does the programmer take time during &amp;#8220;work time&amp;#8221; to take care of personal matters? &lt;p&gt;&lt;em&gt;Hint: maybe this is not because &amp;#8220;he sucks&amp;#8221;, but maybe that he&amp;#8217;s been worked too hard for too long, and personal stuff can&amp;#8217;t be pushed off any more. Again, see the answer for #3. Or maybe &amp;#8220;work time&amp;#8221; is unreasonable (conference calls at 9:00 PM on a Sunday night, for example) and not allowing time they need to get personal stuff done.&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;&lt;/ol&gt;</description><link>http://rwilcox.tumblr.com/post/3702442847</link><guid>http://rwilcox.tumblr.com/post/3702442847</guid><pubDate>Thu, 09 Aug 2012 12:14:13 -0400</pubDate><category>development</category></item></channel></rss>
