<?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>Hi, I’m Jeremy McAnally.  I founded Arcturo (we do web + mobile) and tweet at @jm and get my open source on at http://github.com/jm and write run-on sentences.</description><title>omgbloglol</title><generator>Tumblr (3.0; @omgbloglol)</generator><link>http://omgbloglol.com/</link><item><title>On a positive note: I'm starting a positive newsletter.</title><description>&lt;p&gt;I love surfing Twitter, checking Facebook, and hanging out on Reddit/Hacker News/etc. as much as the next person, but I&amp;#8217;ve got to be honest: you guys can kind of be douchebags.  Pair that with the constant cycle of terrible news being pumped out of CNN, FOXNews, and friends, it makes me feel pretty bad about the world when I go through my morning reading cycle.&lt;/p&gt;

&lt;p&gt;Of course, the solution is easy: give it up.  Right.  So, I&amp;#8217;ll unplug from the world, stop associating with most people, and simply live in a silent bubble of limited information for the rest of my life.  That works great for some people (the Information Diet is a &amp;#8220;thing,&amp;#8221; remember?), but that&amp;#8217;s not how I roll.  I love absorbing information.  Learning is exciting for me.  But, the (seemingly) recent trend of Twitter arguments, crappy news, fear-driven reporting, and general crappery and loud-mouthiness associated with a lot of non-traditional news outlets (e.g., TechCrunch) has really started to affect my mood.  I&amp;#8217;m more on edge.  I&amp;#8217;m quicker to get grumpy.&lt;/p&gt;

&lt;p&gt;So, I&amp;#8217;m forcing myself to do some Happiness Therapy™ everyday.  I&amp;#8217;ve started a newsletter called &lt;a href="http://goodmorninginterwebs.com" target="_blank"&gt;Good Morning, Interwebs&lt;/a&gt;, which will drop a little packet of positive into your inbox every morning.  By making myself seek out positive news, good things going in the world, and other stuff that will generally make me smile, I&amp;#8217;m thinking it&amp;#8217;ll make me feel better about things in general.  I&amp;#8217;ve tried things like this before, but I quit quickly.  &amp;#8220;OK I&amp;#8217;ve had a few days of this, great, OK, done.&amp;#8221;  But with the added pressure of &amp;#8220;people expect this in their inbox tomorrow morning,&amp;#8221; I can&amp;#8217;t skip out on it quite as easily.&lt;/p&gt;

&lt;p&gt;You can subscribe with this form:&lt;/p&gt;

&lt;form action="https://madmimi.com/signups/subscribe/51519?mimi2=1" method="post" id="mad_mimi_signup_form"&gt;
 &lt;fieldset&gt;&lt;div class="mimi_field text email required"&gt;
   &lt;label for="signup_email"&gt;Email&lt;/label&gt;
   &lt;input id="signup_email" name="signup[email]" type="text" placeholder="you@example.com" class="required"&gt;&lt;span class="mimi_field_feedback"&gt;&lt;/span&gt;&lt;span class="mimi_funk"&gt;&lt;/span&gt;
  &lt;/div&gt;
  &lt;div class="mimi_field action"&gt;
   &lt;button type="submit" class="submit" data-default-text="Sign up!" data-submitting-text="Sending…" data-invalid-text="↑ You forgot some required fields"&gt;
    &lt;span&gt;Sign up!&lt;/span&gt;
   &lt;/button&gt;
  &lt;/div&gt;
 &lt;/fieldset&gt;&lt;/form&gt;

&lt;p&gt;So, go forth and enjoy.  I&amp;#8217;m not sure how this is all going to take shape, but hopefully it&amp;#8217;ll add a bit of positivity to your morning before you wander out into the vast wasteland of negative, attention-hungry (ZOMG DID YOU KNOW ANOTHER PERSON GOT SHOT IN YOUR CITY?  YOU DO NOW.  BE AFRAID), and frankly exhausting media. :)&lt;/p&gt;</description><link>http://omgbloglol.com/post/20910498717</link><guid>http://omgbloglol.com/post/20910498717</guid><pubDate>Wed, 11 Apr 2012 13:29:12 -0400</pubDate></item><item><title>On Railcar: an isolated Rails environment</title><description>&lt;p&gt;Ever since launching &lt;a href="http://github.com/arcturo/Railcar" target="_blank"&gt;Railcar&lt;/a&gt;, I&amp;#8217;ve been getting a lot of questions about why I&amp;#8217;m building it, how I&amp;#8217;m approaching things, how people can help, and so on, so I thought I&amp;#8217;d take a few minutes and share some things with you.&lt;/p&gt;

&lt;h4&gt;Why?&lt;/h4&gt;

&lt;p&gt;The main reason is that the Kickstarter pointed to a real need that I didn&amp;#8217;t realize still existed.  I&amp;#8217;ve become so separated from what it means to be &amp;#8220;new to Rails&amp;#8221; that I didn&amp;#8217;t realize it was still a problem to get a Rails setup going on your machine, but thinking back on it, it was and still is a bit of a nutty process.  It&amp;#8217;s not just the installation of stuff, but the whole environment around the application.  How do you start it up?  Why can&amp;#8217;t I just stick it in my Apache root and let it go?  Why do I have to configure a database file?  Migrations?  What is all this?  I forgot how much cognitive friction really exists there that things like Locomotive removed when I was first starting out.  I had some spare time, experience building desktop apps, and some ideas about how it should work, so why not hack on something?&lt;/p&gt;

&lt;p&gt;Now, as I&amp;#8217;ve learned more about Tokaido&amp;#8217;s approach, I&amp;#8217;m really glad that I started building something else.  Statically linking everything is good for the tools to get started (for example, we&amp;#8217;re going to make it such that you don&amp;#8217;t have to compile anything to get started with Rails and SQLite), but offering &lt;em&gt;everything&lt;/em&gt; statically linked is just going make things difficult.  There&amp;#8217;s a reason that Apple doesn&amp;#8217;t like you to statically link things on OS X (go ahead, try it; there&amp;#8217;s no crt0.o for a reason).  You can find their reasoning through a quick Googling (unfortunately, the original page explaining it appears to be gone now), but essentially they force you to dynamically link to the system libraries and kernel (even in static mode).  Their position is that purely static linking is a Bad Thing because things can change and break under your code (e.g., moving a piece of functionality from the Mach kernel to userland).  Plus, if part of the reason you don&amp;#8217;t want people to have to compile things is the file size of the GCC package, you&amp;#8217;re not going to help that with statically linking everything.  Locomotive was about 100MB, and I think that&amp;#8217;s probably the absolute minimum file size you&amp;#8217;ll be able to pull off if you go that route.  Why not have them download ~150MB and be able to install &lt;em&gt;anything they want&lt;/em&gt;?&lt;/p&gt;

&lt;p&gt;Which leads to my second issue: discouraging people from using the tools they will be using in the &amp;#8220;Real World&amp;#8221; is a bad thing.  Yes, it&amp;#8217;s great to have a one click thing that you can develop in and really learn with, but your team will not work that way.  No matter how good you make it, I seriously doubt that experienced developers will use a GUI tool for something that can live and work better with a CLI.  Rails developers use homebrew.  Rails developers use compilers.  Rails developers encounter problems with installing gems sometimes.  After a certain point (i.e., once they move beyond their first few learning apps), attempting to hide these details from people learning isn&amp;#8217;t helping them learn.  This issue is especially controlled thanks to homebrew and their extensive list of patches and OS X-specific fixes for many libraries.  And these are not problems you will solve, unless you think you&amp;#8217;re more talented than the thousands of developers from the past 20+ years who have attempted to solve it in every programming language ever used in a *nix environment.&lt;/p&gt;

&lt;p&gt;Look, I don&amp;#8217;t think what Yehuda&amp;#8217;s doing is wrong or that Yehuda is wrong.  That&amp;#8217;s not what this is about.  I see this as the exact same situation as bundler/isolate, Merb/Rails, Sinatra/Ramaze, whatever/whatever else.  There are alternative ways to approach the same problem.  My philosophy is that I want people to use Railcar until it doesn&amp;#8217;t work for them anymore, at which point they can click the forthcoming &amp;#8220;install to system&amp;#8221; button and go about their merry way. His approach is probably different.We appear to be taking two valid approaches, and I&amp;#8217;m sure different people will gravitate to one or the other.  That&amp;#8217;s fine.&lt;/p&gt;

&lt;h4&gt;What?&lt;/h4&gt;

&lt;p&gt;So, what am I doing exactly?  Currently, I have a usable isolated app environment living in the repository.  It&amp;#8217;s written in MacRuby using XCode and Interface Builder (I don&amp;#8217;t have any interest in using HotCocoa because I like pretty interfaces and it&amp;#8217;s incredibly hard to build those in HotCocoa).  On the first run, it will install Homebrew, RbEnv (Why RbEnv?  I could quickly figure out how it worked and its flexibility will make it easier to drop binary installs in.  I&amp;#8217;m not opposed to using RVM at all, but RbEnv was just easier to figure out and easier to hook with my code.  Patches accepted :)), Ruby, and some default packages.&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.skitch.com/20120404-1jbg4uy7ditap25p2acn4dtxth.jpg" alt="Railcar"/&gt;&lt;/p&gt;

&lt;p&gt;Once it&amp;#8217;s bootstrapped, you can install popular packages in Homebrew, install various Ruby versions, generate (or drag in existing) applications and launch them with various options.  It&amp;#8217;s a little rough, some things aren&amp;#8217;t quite wired up, but it&amp;#8217;s definitely a good MVP build right now I think.&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.skitch.com/20120404-nk1qaj81wrta45r46bj9ct5bya.jpg" alt="Railcar"/&gt;&lt;/p&gt;

&lt;p&gt;Currently everything builds from source, but I&amp;#8217;m working on a setup for binary installations for Ruby and SQLite.  I&amp;#8217;m also setting up (later today, hopefully) a repository for a very, very small collection of statically compiled gems for SQLite, RMagick, and a few others.  Basically, I want to put the most popular gems in there so that in their initial learning, there won&amp;#8217;t be a ton of issues.  I&amp;#8217;m also going to invest some time (or invest some money in having someone else) in converting a few gems to rake-compiler to make a lot of things with respect to compilation that much easier.&lt;/p&gt;

&lt;p&gt;&lt;img src="https://img.skitch.com/20120402-cus363c7td4qmqdhws6ta8sxkp.jpg" alt="Railcar"/&gt;&lt;/p&gt;

&lt;p&gt;Once the binary installs are in place, I want to polish up the whole UI, put some nice icons in (those are in the works!), and get it really released as a product unto its own.  Then, I want to get to work on an educational piece that will either be part of the Railcar app itself or a separate application.  Basically, I want to make the documentation accessible, provide a number good on boarding tutorials, help with common errors, offer a &amp;#8220;help search&amp;#8221; that will search the mailing list, Stack Overflow, etc. to help find the best answer, and so on.  I haven&amp;#8217;t decided the best place for that; I&amp;#8217;m gravitating towards a second app so that you don&amp;#8217;t &lt;em&gt;have&lt;/em&gt; to use Railcar, but we&amp;#8217;ll see.&lt;/p&gt;

&lt;h4&gt;How can I get involved?&lt;/h4&gt;

&lt;p&gt;You can contribute code, for sure!  I&amp;#8217;m going to work on adding some tickets &lt;a href="http://github.com/arcturo/Railcar" target="_blank"&gt;to Github&lt;/a&gt; today for some things that need to be done, but you&amp;#8217;ll find a few &lt;code&gt;TODO:&lt;/code&gt; type things sprinkled throughout the code.  There are also a few rough areas that I&amp;#8217;d like to smooth out that don&amp;#8217;t really conform 100% to the Cocoa way of doing things (e.g., I should be binding the per-application settings using Core Data probably), but those issues are minor.  Feel free to refactor/add/improve anything that you see.  I know MacRuby pretty well, but I&amp;#8217;m not the most expertest expert.  I know some people were saying things like ARC were creating issues for them, so if I have a weird build setting in XCode, please feel free to correct it and send me a pull request.  Oh, and tests.  We need some of those.&lt;/p&gt;

&lt;p&gt;Secondly, if you&amp;#8217;d like (and don&amp;#8217;t feel compelled at all), you can contribute monetarily.  While everyone likes money (and it would be amazing to get a little boost around tax season), I don&amp;#8217;t really care about it, I&amp;#8217;m not &amp;#8220;seeking&amp;#8221; it, I don&amp;#8217;t need it to keep working on the project, but I&amp;#8217;ve gotten a number of requests for a PayPal button or whatever, so here you go:&lt;/p&gt;

&lt;form action="https://www.paypal.com/cgi-bin/webscr" method="post"&gt;
&lt;input type="hidden" name="cmd" value="_s-xclick"&gt;&lt;input type="hidden" name="hosted_button_id" value="EUPXCZ5XKWX86"&gt;&lt;input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!"&gt;&lt;img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1"/&gt;&lt;/form&gt;

&lt;p&gt;Depending on the amount I gather, I plan on investing part of the money back into paying others to improve things like rake-compiler, Rails documentation, and so on.  I&amp;#8217;ll send you a sticker for contributing if you don&amp;#8217;t mind providing your address on the page after you finish with PayPal.  Please pardon the payment going to my business&amp;#8217;s PayPal account.  My wife uses my &amp;#8220;main&amp;#8221; PayPal account extensively for her business, and I don&amp;#8217;t want to risk PayPal freaking out and locking it up.  If you&amp;#8217;d prefer not to use PayPal, I can figure out something else if you&amp;#8217;ll e-mail me.&lt;/p&gt;

&lt;h4&gt;Where do we go from here?&lt;/h4&gt;

&lt;p&gt;Well, I&amp;#8217;m going to keep hacking.  Getting people to help finish up a few loose ends would be great so we can get it into the hands of people to use.  Anything you can do to contribute to that (even filing a Github ticket with a great idea), would be really helpful.  I&amp;#8217;m available via e-mail or Twitter if you wan to chat about any ideas/issues you can foresee.&lt;/p&gt;</description><link>http://omgbloglol.com/post/20783445544</link><guid>http://omgbloglol.com/post/20783445544</guid><pubDate>Mon, 09 Apr 2012 12:29:19 -0400</pubDate></item><item><title>Recruiters: why I'm kind of rude to them, why they deserve it, and how to fix it (IMHO)</title><description>&lt;p&gt;I&amp;#8217;ve been dealing with recruiters for a long time.  Not the good kind that offer you awesome jobs, but the crappy kind that mailbomb you with irrelevant positions.  I&amp;#8217;ve been receiving their e-mails and such for years and years now, and eventually I decided I&amp;#8217;d afford them the same courtesy they afford me and simply write a &lt;a href="https://gist.github.com/1962484" target="_blank"&gt;form response&lt;/a&gt; for the ones that annoy me.  I &lt;a href="http://twitter.com/jm/status/175729680161320961" target="_blank"&gt;posted it on Twitter&lt;/a&gt; yesterday after using it to respond to a recruiter who offered me a junior PHP/C# position (tech I haven&amp;#8217;t worked with for 5+ years) that required relocating to a crappy area for terrible pay.  The response has been one of three things:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;General amusement at the contents&lt;/li&gt;
&lt;li&gt;Sharing of their own form responses or experiences with recruiters (some worse than mine!)&lt;/li&gt;
&lt;li&gt;Anger at the contents/the fact that I&amp;#8217;d be rude to a recruiter&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The first two I expected, but I must admit, I didn&amp;#8217;t expect the latter from anyone but recruiters (and trust me, three recruiters felt it their duty to let me know what they thought via e-mail; I can&amp;#8217;t express how hard it was to not respond with my form response but I was civil :)).  So, I felt like maybe I should explain some things about recruiting, because I&amp;#8217;m not sure many of the people who were upset by it have actually experienced what a lot of people experience with recruiters.&lt;/p&gt;

&lt;h2&gt;What &amp;#8220;recruiters&amp;#8221; do&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Disclaimer:&lt;/em&gt; The following doesn&amp;#8217;t describe &lt;strong&gt;every&lt;/strong&gt; recruiter on the planet.  It does describe at least 90% of the ones I&amp;#8217;ve interacted with, but I talk about some of the good ones later on.&lt;/p&gt;

&lt;p&gt;I put &amp;#8220;recruiters&amp;#8221; in quotes there because the modern day recruiter is little more than a spammer who has legal authority to spam you.  I&amp;#8217;m almost surprised some of them haven&amp;#8217;t taken to appending male enhancement ads to their job e-mails to make a little side cash.  Essentially, they have big databases of resumes that I&amp;#8217;m guessing are usually purchased rather than built given how out of date some of the information is in there (we had an &lt;em&gt;old&lt;/em&gt; cell phone number that we kept around for a while and we&amp;#8217;d still get calls on it 2 years after I&amp;#8217;d taken it off my resume).  They&amp;#8217;re probably tagged somehow or searchable by some means.  Recruiters take a job listing, search for keywords in their resume database, and e-mail everyone who could possibly match those keywords.  Everyone.  Even &lt;a href="http://twitter.com/dhh/status/175658131429400576" target="_blank"&gt;people like DHH&lt;/a&gt;, who obviously isn&amp;#8217;t looking for a job.&lt;/p&gt;

&lt;p&gt;So, why am I so offended by this practice?&lt;/p&gt;

&lt;h3&gt;It&amp;#8217;s invasive&lt;/h3&gt;

&lt;p&gt;Never has a single industry disrupted the general flow of my life so much as recruiting.  That&amp;#8217;s probably an exaggeration, but honestly, it&amp;#8217;s a bit much sometimes.  Here are some examples:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;My wife now has my &amp;#8220;old&amp;#8221; cell phone number (I got an iPhone 4, she kept the 3GS and my number). Unfortunately for her, that number is still on my resume (and there&amp;#8217;s no legitimate reason to change it; anyone who actually needs to reach me still can since, you know, she&amp;#8217;s my wife).  But she gets several daily calls from really pushy recruiters.  Once, a recruiter called at 9:30p.m., was told &lt;em&gt;not&lt;/em&gt; to call again because I wasn&amp;#8217;t interested.  The &lt;em&gt;same guy&lt;/em&gt; called at &lt;em&gt;8:20a.m.&lt;/em&gt; the next morning about the &lt;em&gt;same&lt;/em&gt; position.  Again, he was rebuffed, and he called back &lt;em&gt;again&lt;/em&gt; at 4p.m. that day.  Who else would do that?&lt;/li&gt;
&lt;li&gt;More recently, my wife told a recruiter that the number he was calling was hers but even if it wasn&amp;#8217;t, I wasn&amp;#8217;t interested anyhow.  This recruiter proceeds to try to strongarm my wife into putting me on the phone, give him my new number, give him a time he could call back, and any manner of things to try to get in contact with me.  He was already told I&amp;#8217;m simply &lt;em&gt;not&lt;/em&gt; interested in anything he has right now, yet he felt it was imperative that he talk to me.  I&amp;#8217;ve never even had a debt collector be that adamant.&lt;/li&gt;
&lt;li&gt;My inbox is pretty consistently invaded by just utter crap from recruiters.  It&amp;#8217;s pretty easy to identify junk (&amp;#8220;MYSQL/PHP/SCALA/JAVA/C__ - $36k SALARY - NYC &amp;#8212;-&amp;#8221; is the most recent subject line I&amp;#8217;ve received), but sometimes I get e-mail like &amp;#8220;Hey I&amp;#8217;d like to chat with you about work.&amp;#8221;  OK, great.  I&amp;#8217;m totally fine with &amp;#8220;networking&amp;#8221; with recruiters who actually care, but inevitably, this turns out to be a &amp;#8220;Oh, he actually reads his e-mail&amp;#8221; situation where they start firebombing me with &amp;#8220;leads&amp;#8221; every day.  I try to be charitable to most of those introductory e-mails because I always hope it&amp;#8217;s a recruiter really trying to do it right, but &lt;em&gt;every time&lt;/em&gt; I&amp;#8217;ve &amp;#8220;fallen for it&amp;#8221; it&amp;#8217;s turned out badly.&lt;/li&gt;
&lt;li&gt;Typically I&amp;#8217;ll send my response, mark as spam/block the sender, and move on.  But on a few occasions, I&amp;#8217;ve had someone else in the same agency start spamming me.  So, I block one person, they simply toss my address to another e-mail within their company, and start sending from that.&lt;/li&gt;
&lt;li&gt;In one case, I&amp;#8217;d tried to be nice to a recruiter, told her I wasn&amp;#8217;t interested, but she continued to send &amp;#8220;leads&amp;#8221; my way (of the &amp;#8220;you&amp;#8217;d have to relocate to the middle of Tennessee or South Carolina and be paid $22k for a position requiring 5 years of Java experience&amp;#8221; variety).  Finally, I bluntly but civilly told her to never contact me again (this was pre-The Response™) and blocked her.  She proceeds to e-mail me from her personal Yahoo! account yelling at me for blocking her other address, telling me I&amp;#8217;m helping to put her out of business, and all this other crap that I can&amp;#8217;t be hassled to remember right now.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;You can point to those and say &amp;#8220;oh, those are the bad ones!&amp;#8221; but frankly that&amp;#8217;s how most of my interactions with recruiters go, &lt;em&gt;especially&lt;/em&gt; when it comes to phone pushiness.  The point is that this boorish behavior isn&amp;#8217;t really abnormal.&lt;/p&gt;

&lt;p&gt;The worst part is that 3 for 3 yesterday in the recruiter responses, they all blamed me.  &amp;#8220;Well if you wouldn&amp;#8217;t post your resume on your website, we wouldn&amp;#8217;t e-mail you.&amp;#8221;  &amp;#8220;If you didn&amp;#8217;t mark yourself as &amp;#8216;for hire&amp;#8217; on LinkedIn or WorkingWithRails, we couldn&amp;#8217;t call you.&amp;#8221;  Are you kidding me?  &lt;strong&gt;PROTIP:&lt;/strong&gt;  I am for hire.  I run a consulting business.  I&amp;#8217;ve actually gotten 2 contracts from people pinging me from those mechanisms.  I&amp;#8217;m not going to act as if I&amp;#8217;m full up on work just so you won&amp;#8217;t spam me.  That&amp;#8217;s just ridiculous, self-absorbed martyrdom.  Even further, just because I post some information publicly that doesn&amp;#8217;t give you the right to spam with tenuously related information.  I mean, what if I spammed &lt;em&gt;you&lt;/em&gt; with some recruiter related product?  Or what if I started a recruiter recruiting firm and just totally bombed you with e-mails about positions in it?  I guarantee you&amp;#8217;d cry foul then.&lt;/p&gt;

&lt;h3&gt;It&amp;#8217;s not very effective&lt;/h3&gt;

&lt;p&gt;Recruiting as it&amp;#8217;s currently practiced can&amp;#8217;t possibly work very well.  Maybe it does.  Maybe they have enough resumes built up that they&amp;#8217;ll get a few hits that are actually viable.  I doubt that happens most of the time given the amount of repeat job spam I get, but it&amp;#8217;s always possible.&lt;/p&gt;

&lt;p&gt;But even so, they&amp;#8217;re not doing their job as it&amp;#8217;s supposed to be done at all.  Part of the job of a recruiter is (theoretically) screening candidates on some surface level.  I did an experiment a couple of years ago by responding to 3 job spams I totally wasn&amp;#8217;t qualified for: one was a position using R or SAS or something like that at a financial firm, one was a C++ position at a games company, and one was a low-level network engineer position at some MegaCorp™.  &lt;em&gt;Every time&lt;/em&gt; the recruiter merrily passed on my information to the client, selling me up as a great candidate, and so on.  My resume said &lt;em&gt;nothing&lt;/em&gt; about any of this stuff.  No experience, no education.  Nothing.  So, not only are these people not good at screening candidates to spam, they&amp;#8217;re also terrible at even telling whether a candidate is legitimate.  I felt bad telling the firms they&amp;#8217;d been duped into accepting a lead on a crappy candidate.  Two of the companies never responded at all, but the MegaCorp™ HR person told me they never expected high calibre candidates from recruiters anyhow.&lt;/p&gt;

&lt;h3&gt;It&amp;#8217;s a useless industry&lt;/h3&gt;

&lt;p&gt;The way it&amp;#8217;s currently done, recruiting is totally useless.  What do recruiters offer beyond what a job board posting would offer?  I&amp;#8217;d even venture to guess that a job board posting would have a &lt;em&gt;better&lt;/em&gt; return since the people looking at it and applying are actually looking for another gig.  Spam recruiters are simply leeches, middle(wo)men who take a big slice for being a reverse job board.&lt;/p&gt;

&lt;h4&gt;What recruiting is supposed to be&lt;/h4&gt;

&lt;p&gt;Recruiting isn&amp;#8217;t always like this, though.  In Real Recruiting™, recruiters actually spend time evaluating candidates (not just e-mailing anyone who matches some keywords), searching out people who fit the position they&amp;#8217;ve been tasked with filling using information gathered from their own experience and their network (not just doing a Google search for a resume and passing it on), getting to know the candidates (not just merrily passing them along after the first response), and then making an &lt;em&gt;informed&lt;/em&gt; and &lt;em&gt;pointed&lt;/em&gt; recommendation to their client.&lt;/p&gt;

&lt;p&gt;That&amp;#8217;s how it works in corporate America.  Do you think when a big corporation decides they want to hire a new CEO that their recruiter mailbombs everyone who has CEO experience?  No, they have an informed process to make educated recommendations to the board.  For example, when Apple recruited &lt;a href="http://en.wikipedia.org/wiki/John_Sculley" target="_blank"&gt;John Sculley&lt;/a&gt; to be their new CEO, they spent a lot of time evaluating his effects on the company, what he would bring to the table, how it could shape Apple, help tame Steve Jobs, and so on.  Now, granted most developer positions don&amp;#8217;t carry that much gravity in a company, but a &lt;em&gt;little&lt;/em&gt; consideration of the position and background of the candidate would be nice.&lt;/p&gt;

&lt;h4&gt;But&amp;#8230;but&amp;#8230;but!&lt;/h4&gt;

&lt;p&gt;When I&amp;#8217;ve shared some of these thougts with recruiters, I often get back, &amp;#8220;But that&amp;#8217;s not sustainable!  I don&amp;#8217;t get paid enough for that!&amp;#8221;  Then let me be clear: &lt;strong&gt;Maybe you don&amp;#8217;t have a real business.&lt;/strong&gt;  It&amp;#8217;d be great if I could sit on the side of the road and sell small carvings I make from the rinds of watermelons, but hey that&amp;#8217;s not sustainable either.  The hard truth is that you don&amp;#8217;t make enough to do that because you don&amp;#8217;t offer any value beyond a job board, and job boards are cheap.  I posted a job on one job board, got 20&amp;#160;&lt;em&gt;credible&lt;/em&gt; leads (and about 10-15 not-so-credible ones).  Would a recruiter have turned that around for less than $300?  I doubt it.&lt;/p&gt;

&lt;p&gt;In this Era of the Internet, a lot of &amp;#8220;connector&amp;#8221; businesses are finding themselves replaced by websites these days.  &lt;a href="http://webcache.googleusercontent.com/search?q=cache:KRMau_vHKUUJ:www.rep-am.com/articles/2011/12/18/business/606833.txt+phone+operator+staff+reductions&amp;amp;cd=1&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;gl=us&amp;amp;client=safari" target="_blank"&gt;Phone companies are finding stiff competition requiring staff reductions&lt;/a&gt; for things like directory assistance, driving directions, and so on.  The Internet has democratized information access and inter-personal connections to the point that middle(wo)men like recruiters are a fading industry.  Want to save yourself some cash?  Want a programmer that does Java?  Post the job on a board and do some searching on a community site.  You&amp;#8217;ll find people who are doing interesting things and probably looking for work.&lt;/p&gt;

&lt;h2&gt;Doin&amp;#8217; it right&lt;/h2&gt;

&lt;p&gt;So, I hate blog posts that just complain the whole time and offer no concrete solutions.  How can recruiters start actually offering value?&lt;/p&gt;

&lt;h3&gt;Learn the industry&lt;/h3&gt;

&lt;p&gt;Anyone can do what I just described above (Google and e-mail someone).  The CTO, the team manager, the little HR lady who always offers you a peppermint when you visit her office, they all know how to do that.  The value a recruiter can offer in knowing the tech, &lt;em&gt;actually&lt;/em&gt; being able to evaluate candidates, talk intelligently with the client and candidates, and so on is nearly immeasurable.  I really think a firm of tech-educated recruiters who have real chops (or at least some knowledge), who can connect with both sides, and can actually make educated recommendations would be a real winner.&lt;/p&gt;

&lt;p&gt;Don&amp;#8217;t have the time or inclination?  OK, understood, but then &lt;em&gt;hire someone&lt;/em&gt;.  I tell you what: &lt;a href="http://arcturo.com" target="_blank"&gt;Arcturo&lt;/a&gt; will pre-screen all your candidates for $500 (i.e., toss out actual crap) and technical screen them for $100 a pop.  I&amp;#8217;m sure a number of other firms would do the same.  Even better, talk to the client&amp;#8217;s current team or leadership about people and things they&amp;#8217;re looking for outside the job description.  I talked to a recruiter at Square who was totally doing it right.  She had dug up a few people to talk to, and then she went to the team there (who would know who has good technical chops) and said, &amp;#8220;What do you guys think?&amp;#8221;  They helped her narrow her list down, and she contacted each of these people personally.  &lt;em&gt;That&lt;/em&gt; is doing it right.&lt;/p&gt;

&lt;h3&gt;Contact me like a human&lt;/h3&gt;

&lt;p&gt;Don&amp;#8217;t form e-mail bomb me.  It&amp;#8217;s just offensive that you can&amp;#8217;t be hassled to at least compose at least a semi-personal e-mail.  That carelessness was the genesis of my form response: they&amp;#8217;re taking less than a second to compose a message to me, so I&amp;#8217;ll afford them the same courtesy while also registering my displeasure.  I&amp;#8217;ve only gotten a single response to my form e-mail, and that was simply &amp;#8220;OK.&amp;#8221;  Usually they don&amp;#8217;t respond, which, to be fair, is the intended effect.&lt;/p&gt;

&lt;p&gt;But had they reached out to me like a person, made me feel like they had done any degree of research at all, had actually evaluated whether I would even fit the position at all, I would respond differently.  If a recruiter has any familiarity with me at all (even &amp;#8220;I saw your Github account&amp;#8221; is passable in some cases), I&amp;#8217;d be a lot more civil.  The CTO at Mixbook did a great job with this.  He&amp;#8217;d looked over my blog, seen my Github, and contacted me because he thought I&amp;#8217;d be a good fit (I&amp;#8217;m guessing he didn&amp;#8217;t have much success because they&amp;#8217;ve now hired a recruiter who is spamming people like DHH).  But even so, I thought that was a great approach, and were I looking for a job and to relocate, I&amp;#8217;d have definitely responded to him.&lt;/p&gt;

&lt;h3&gt;Use common sense&lt;/h3&gt;

&lt;p&gt;If my resume says nothing about SAS or SAP, then why are you e-mailing me leads dealing with those technologies?  If my experience listing tells you that I haven&amp;#8217;t touched C# in any real capacity in years, then why are you e-mailing me about a &amp;#8220;C# Expert&amp;#8221; position (well, I&amp;#8217;ll you why, because they&amp;#8217;re not reading the resume, but still).  Evaluate the information you have available to you before you even reach out.  It&amp;#8217;ll pay off for you.&lt;/p&gt;

&lt;p&gt;I also can&amp;#8217;t tell you how irritating it is to get an e-mail with something like &amp;#8220;We need a developer for a Rails project.  It pays $27,000 a year with no benefits and requires at least 4 years experience with Rails and 6 in web development.  Oh and you&amp;#8217;ll need to be in (Atlanta|NYC|San Francisco|Seattle)&amp;#8221; (not an exaggeration).  Who would take that position?  Sometimes recruiters need to learn to say &amp;#8220;NO&amp;#8221; to crappy companies trying to hire like that.  Candidates would respect you a lot more if you wouldn&amp;#8217;t toss this utter crap our way.  I know right now the economy is still pretty unstable and some people would be happy to have that job, but if the requirements and the compensation don&amp;#8217;t match up &lt;em&gt;at all&lt;/em&gt;, then that&amp;#8217;s a huge red flag for candidates.&lt;/p&gt;

&lt;h2&gt;OK&lt;/h2&gt;

&lt;p&gt;So, that&amp;#8217;s my speel on recruiters.  I&amp;#8217;m sure I&amp;#8217;ll be &amp;#8220;blacklisted from [another recruiter&amp;#8217;s] extensive network&amp;#8221; as I was yesterday.  I&amp;#8217;m totally sure I&amp;#8217;ll &amp;#8220;regret saying such things in public.&amp;#8221;  OK, not really.  I feel like I&amp;#8217;m being fairly reasoned here given the amount of stupidity and abuse I&amp;#8217;ve put up with over the years.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;By the way:&lt;/strong&gt;  I&amp;#8217;m on vacation right now (thanks Tumblr post-queue!).  If you e-mail, comment, tweet, etc. and I don&amp;#8217;t respond, I&amp;#8217;m not ignoring you.  Well, I sort of am, but only because I&amp;#8217;m probably on the beach or floating in the middle of the Caribbean.  Sorry, the Internet reception&amp;#8217;s not real good out here.&lt;/p&gt;</description><link>http://omgbloglol.com/post/18791070151</link><guid>http://omgbloglol.com/post/18791070151</guid><pubDate>Mon, 05 Mar 2012 10:00:05 -0500</pubDate><category>recruiters</category><category>work</category></item><item><title>Let me work on-site for you! (For a few days...)</title><description>&lt;p&gt;I&amp;#8217;ve been tossing this idea around for a while, but now I&amp;#8217;m at a point where I can actually do it thanks to things in life and business stabilizing a bit.  I like to travel, I like work, and I&amp;#8217;ve been wanting to hang out with more people in person (sitting in my office alone is great most of the time but other times it bites!), so I figure why not combine the three?&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lyb4cdZ2OI1qz4tvk.gif" alt="ON SITE LIKE A BAWSS"/&gt;&lt;/p&gt;

&lt;h2&gt;The deal&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;I come to your office and work for you for any number of days (up to 5) at a flat rate.&lt;/strong&gt;  I&amp;#8217;ll hack on code, train your developers, pair program, fold your laundry, up vote all your Hacker News posts, make coffee, conduct dramatic readings from the Gang of Four book, whatever you want me to do.  The options are (nearly) limitless.&lt;/p&gt;

&lt;p&gt;If you want just 1 day, that&amp;#8217;s OK.  I plan on giving everyone a good chunk of time before hand to familiarize myself with the code, their business, what they&amp;#8217;ll be needing, and so on.  I&amp;#8217;m not going to walk in on the first day with no clue about your business, spend 6 hours learning stuff, 1 hour contributing, and another hour telling jokes about airline peanuts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The fee right now will be $2,000 per day, which is basically what I charge for 2 days of time right now at $125/hour.&lt;/strong&gt;  To be clear: I give you a (basically) a day&amp;#8217;s worth of time off-site reading documentation, talking to your team, looking at your code, getting familiar with your needs and a day on-site actually doing the work.  So, basically you&amp;#8217;ll be paying what I charge for remote work, except, you know, on-site.  This rate might go up in the next round, I don&amp;#8217;t know, but since this is sort of an experiment, I figured I&amp;#8217;d just stick with what works right now.&lt;/p&gt;

&lt;h2&gt;When and how?&lt;/h2&gt;

&lt;p&gt;Well, I don&amp;#8217;t know when exactly.  My plan is to go to San Francisco for a week sometime soon and work at least 4 of the days of the week.  I&amp;#8217;m also considering a run in New York City.  If you want 4-5 days, we can work something out where I make a special trip just for you (possibly even to places not in NYC or SF, but we&amp;#8217;ll have to talk about that :)), but if you want fewer, we&amp;#8217;ll have to try to coordinate dates with others who want fewer also.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, if you&amp;#8217;re a company in San Francisco or New York City and could use a little extra Ruby, Rails, iPhone, or whatever muscle, then &lt;a href="mailto:jeremy@arcturo.com" target="_blank"&gt;get in touch&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description><link>http://omgbloglol.com/post/16407479562</link><guid>http://omgbloglol.com/post/16407479562</guid><pubDate>Tue, 24 Jan 2012 10:04:00 -0500</pubDate></item><item><title>Bad (or, my unfortunately unfavorable review of Bob Martin's Ruby Midwest keynote)</title><description>&lt;p&gt;Uncle Bob Martin has had a lot of influence on the software development industry over his career.  His books are heralded as &amp;#8220;landmark&amp;#8221; and &amp;#8220;essential tome[s].&amp;#8221;  He is credited as &amp;#8220;legendary&amp;#8221; (ugh) in his author biography on Amazon.  I don&amp;#8217;t doubt that he&amp;#8217;s an incredibly smart guy from what I&amp;#8217;ve read from him.  Some of his &lt;a href="http://butunclebob.com" target="_blank"&gt;articles&lt;/a&gt; are fantastic reads.  But I think perhaps either I haven&amp;#8217;t read enough to get a real impression of him, or the conference talk I recently had a chance to watch is significantly more dishonest than his writing for some reason.&lt;/p&gt;

&lt;p&gt;I was wandering down a rabbit hole of Twitter/Hacker News discussion, and I kept seeing people linking to &lt;a href="http://confreaks.net/videos/759-rubymidwest2011-keynote-architecture-the-lost-years" target="_blank"&gt;his keynote video from Ruby Midwest 2011&lt;/a&gt; as a &amp;#8220;very important talk to watch.&amp;#8221;  I&amp;#8217;d sat through at least one (possibly more) of his conference talks before without paying much attention (I unfortunately often find it hard to focus on conference talks), really liked what I heard at his RailsConf 2009 keynote (missed his 2010 one), and since this particular talk was relevant to what I was reading at the time, I figured I&amp;#8217;d give it a more attentive watch.&lt;/p&gt;

&lt;p&gt;I realize I&amp;#8217;m probably going to tick off a lot of people here, but what I heard was seriously troubling.  (There&amp;#8217;s that and he took time to correct everyone else&amp;#8217;s talks at the start of his talk, so I figured turnabout is fair play. :))&lt;/p&gt;

&lt;p&gt;I&amp;#8217;d heard his talks described as &amp;#8220;sermons&amp;#8221; before, but I never realized how hand wavey they could be at times (at least this particular one).  I had to watch it 3 times to get at his main point, which still (to my ears) doesn&amp;#8217;t really have any evidence behind it or meat to it outside of &amp;#8220;Uncle Bob says.&amp;#8221;  Even worse, as I was listening, I kept getting angrier by the minute at the gross mischaracterizations or downright mistruths he was spouting.  The following list is just a collection of things I caught on my first couple of listens.  Maybe there are more in there, but these were glaring enough to catch my attention.&lt;/p&gt;

&lt;h4&gt;Assertion: Architecture is about intent, and intent should be evident when looking at a software project, so the Rails directory layout sucks. (around 11:00)&lt;/h4&gt;

&lt;p&gt;He led everyone to this point by showing them blueprints of buildings, indicating that a building&amp;#8217;s purpose should be and is evident by how it is architected.  From this, he then makes the logical leap that this should absolutely be true of software, and that when you look at the top level directory of a project, the architecture should be evident, not the framework.  His criticism is that when you look at a Rails application&amp;#8217;s directories and files, you can readily see it&amp;#8217;s a Rails application but not what the application actually does.&lt;/p&gt;

&lt;p&gt;Disregarding the fact that having standardized file placement driven by the framework is one of the biggest wins for development teams when using a framework, that&amp;#8217;s one of the most bizarre criticisms I have ever heard in a conference talk.  I have never in my career worked on a project where I could simply glance at the file layout and discern exactly what the application does.  Heck, even in things like XCode or Visual Studio, where one can have a logical layout of the files with smart groupings, I haven&amp;#8217;t been able to do that.&lt;/p&gt;

&lt;p&gt;The better question is: why would you need to?  You&amp;#8217;re a developer.  You&amp;#8217;re going to be building the project out, so you&amp;#8217;ll figure out what the app does soon enough.  What is more convenient for you: a gangly file layout/&amp;#8221;architecture&amp;#8221; that is non-standardized, annoying to navigate, and requires documentation for others to navigate or something standard that makes your locating files and important logic in those files that much easier?  And even so, as his argument indicates even, file layout doesn&amp;#8217;t speak to the functionality of the application.  You could just as easily follow his suggestions but put different, unrelated code in the files, and you&amp;#8217;d be in a worse position.  It&amp;#8217;s a foolish, silly criticism that probably sounded better on paper than when it came out in the talk.&lt;/p&gt;

&lt;p&gt;The worst part was that at around 28:00 he advocates an alternative directory structure based on the architecture he&amp;#8217;s describing in the talk, which has names that are just as or even more opaque: interactors, entities, and so on.  He also suggests you&amp;#8217;d have interactor files named after use cases (e.g., &lt;code&gt;create_order.rb&lt;/code&gt;, &lt;code&gt;fill_order.rb&lt;/code&gt;, etc.); I would personally kill myself if I had to navigate a huge project in this structure.  I get the idea here, but is the ability to quickly sort of discern what an application does worth making your developer&amp;#8217;s life a miserable existence during the other 99.9% of the project?   Who would want to figure out in which of the 500 use case files that this particular piece lived in?  Nobody, that&amp;#8217;s who.  This point was one part of the talk where he totally lost me in terms of what he was actually trying to say other than &amp;#8220;I needed 5 more minutes of material and this seems like a good place to start the rest of my arguments from.&amp;#8221;&lt;/p&gt;

&lt;h4&gt;Assertion: Views should know nothing about the business objects. (Around 32:15)&lt;/h4&gt;

&lt;p&gt;Perhaps that&amp;#8217;s his opinion on things, but if we&amp;#8217;re going to appeal to MVC&amp;#8217;s origins and go by standard, accepted definitions, that assertion is just patently false according to much of the authoritative MVC documentation.  For example, in the paper where the terminology is finalized for MVC dated December 10, 1979, Reenskaug writes in reference to views and how they get or update data in models:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;A view is attached to its model (or model part) and gets the data necessary for the presentation from the model by asking questions. It may also update the model by sending appropriate messages.  All these questions and messages have to be in the terminology of the model, the view will therefore have to know the semantics of the attributes of the model it represents. (It may, for example, ask for the model&amp;#8217;s identifier and expect an instance of Text, it may not assume that the model is of class Text.)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the original vision of MVC, the model, view, and controller were separated but communicative.  A view can ask request data (or update a model (Heaven forbid!), an action which he derides at about 31:45) as needed for its functionality (so long as it doesn&amp;#8217;t violate its role in the triad).  Acting as if a view should be and always has been a &amp;#8220;stupid piece of tiny code&amp;#8221; that is simply feed flat data that it renders is false.&lt;/p&gt;

&lt;h4&gt;Assertion: You should have &amp;#8220;hundreds&amp;#8221; of views, not just one view. (Around 30:30)&lt;/h4&gt;

&lt;p&gt;Again, he harkens back to MVC&amp;#8217;s roots and asserts that the Rails way of having one view (the page) is wrong, and according to the original plan, you should have hundreds of views, so MVC is a flawed model for doing things on the web.  And again, he is incorrect.&lt;/p&gt;

&lt;p&gt;Quoting from &lt;em&gt;How to Use Model-View-Controller&lt;/em&gt;, a paper describing the original implementation of MVC in Smalltalk:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;Views are designed to be nested. Most windows in fact involve at least two views, one nested inside the other. The outermost view, known as the topView is an instance of StandardSystemView or one of its subClasses.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In the original Smalltalk environments, having an overarching, top-level view for the M-V-C slice you were working with was common (and likely required in most situations).  If we envision the page to be the same &amp;#8220;object&amp;#8221; as a window in the original implementation (which I believe is how it should be viewed), then the pattern fits quite well, especially since partials (and cells if we want to follow his assertion that all views should have an M-C piece to them) provide the same subview functionality.  This fact is especially true if we get over the whole notion that the MVC pattern is a totally defined, prescribed Pattern™ that you must adhere to religiously and unwaveringly and instead take it for what it is, which is a loosely defined pattern that describes a way to reduce and manage complexity in systems (post coming about that attitude tomorrow&amp;#8230;).&lt;/p&gt;

&lt;h4&gt;Assertion: Point of writing tests first is to avoid coverage gaps (or just about anything else he said about TDD in the talk).&lt;/h4&gt;

&lt;p&gt;A lot of his tangent into TDD starting at around 58:00 was silly.  First, he asserts that writing tests after the fact is &amp;#8220;a waste of time.&amp;#8221;  Granted, you&amp;#8217;re more likely to miss some coverage if you do &lt;em&gt;only&lt;/em&gt; that, but who doesn&amp;#8217;t write quite a few tests after the implementation?  Lay down a solid, basic set of tests covering what you&amp;#8217;re writing, then go back and cover the edge cases when you have a clearer picture of the logic and its interactions with other pieces of the system.  It&amp;#8217;s stupid to act as if writing &lt;em&gt;any&lt;/em&gt; tests after the implementation is useless.&lt;/p&gt;

&lt;p&gt;Secondly, he asserts that the reason everyone TDD&amp;#8217;s is to avoid coverage gaps.  Now, I don&amp;#8217;t know what sort of Magic Double Dream Hands TDD™ he&amp;#8217;s doing, but the only &amp;#8220;coverage&amp;#8221; gains you&amp;#8217;re making by TDD&amp;#8217;ing are the kind that don&amp;#8217;t matter (i.e., numbers not quality).  That&amp;#8217;s great that you have 100% coverage, but are your tests actually robust?  And, even further, if you&amp;#8217;re requiring 100% coverage, are you over-testing things?  (If I see a unit test for the existence of an &lt;code&gt;attr_accessor&lt;/code&gt; or a constant value one more time, I will scream)  These questions don&amp;#8217;t seem to faze him however.  TDD&amp;#8217;ing leads to perfect coverage, which, of course, means impeccable quality tests! &lt;code&gt;&amp;lt;/sarcasm&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;Assertion: MVC is meant to be used in the small, so Rails does it wrong. (Around 31:30)&lt;/h4&gt;

&lt;p&gt;This was probably the most frustrating point in the whole talk.  He twists and contorts MVC&amp;#8217;s role in a Rails application and then muddles the terms of architecture pattern and design pattern to forge a point that Rails usage of MVC is inherently flawed according to how the inventor intended the pattern to be used.&lt;/p&gt;

&lt;p&gt;Yes, as he asserts, MVC is meant to be used &amp;#8220;in the small&amp;#8221; in the sense that it takes one slice of your application, separates its concerns, and then lets you independently manage the complexity of those concerns.  He is correct in that it is not &lt;em&gt;necessarily&lt;/em&gt; an architecture pattern.  But his diagram of how a Rails app looks versus this architecture he&amp;#8217;s discussing in the talk is just simply disingenuous.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://WTF" target="_blank"&gt;&lt;a href="https://img.skitch.com/20111231-n9qswtxgswfmmb1qq1qgj6c75y.jpg" target="_blank"&gt;https://img.skitch.com/20111231-n9qswtxgswfmmb1qq1qgj6c75y.jpg&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not only does he conveniently rearrange the pieces so that it seems disjointed, he also completely pulls it out of the proper place in the architecture diagram to make it seem sloppier than it really is.&lt;/p&gt;

&lt;p&gt;Even further, Rails uses MVC in the &lt;em&gt;exact&lt;/em&gt; way that the original creator of the pattern intended it to be used.  It doesn&amp;#8217;t use MVC to handle the entire cycle of interaction in the applicatio (f.e., it doesn&amp;#8217;t treat the web as part of the MVC mechanism).  When a request comes in (i.e., user input), the input is passed to the controller, which decides what should be done with it, how models should be updated, and which views should be rendered for that particular input from a view.  This is nearly &lt;em&gt;exactly&lt;/em&gt; how it&amp;#8217;s done in Smalltalk, &lt;em&gt;exactly&lt;/em&gt; how it&amp;#8217;s been done in nearly every other implementation of MVC, and this is &lt;em&gt;exactly&lt;/em&gt; the &amp;#8220;small&amp;#8221; that it&amp;#8217;s meant to be used in.  It&amp;#8217;s not being used to build the framework (i.e., your app isn&amp;#8217;t treated as some weird model plugged into one giant MVC mechanism or something), it&amp;#8217;s not used as the framework/application &amp;#8220;architecture&amp;#8221; (that&amp;#8217;s actually something akin to a Model2 architecture pattern), and it&amp;#8217;s not being shoved somewhere it doesn&amp;#8217;t belong.  It&amp;#8217;s exactly where it&amp;#8217;s supposed to be.&lt;/p&gt;

&lt;p&gt;In reality, Rails is fairly close to the architecture he discusses.  It&amp;#8217;s not as decoupled and interface driven as he&amp;#8217;d like it to be, but that&amp;#8217;s the real rub with this entire talk: &lt;em&gt;he&amp;#8217;s complaining about Rails &amp;#8220;flaws&amp;#8221; that aren&amp;#8217;t part of its DNA&lt;/em&gt;.  It&amp;#8217;s like complaining about how a sweater isn&amp;#8217;t a very good conversationalist.  He ends the talk by harping on the fact that good architecture lets you defer decisions for as long as possible.  But here&amp;#8217;s a &lt;strong&gt;PROTIP&lt;/strong&gt;: if you&amp;#8217;re using Rails, you&amp;#8217;ve already let someone else make a lot of decisions for you.  That&amp;#8217;s kind of the point since Rails is largely a curated set of Rack extensions that help you build web applications.  They&amp;#8217;ve decided your app layout.  They&amp;#8217;ve decided you&amp;#8217;re going to be using MVC.  They&amp;#8217;ve decided you&amp;#8217;re going to be piping things through a router of some sort and dispatching those requests to objects.  All of these decisions and many, many more are already made.  So, why waste the effort to whine and complain and hand wave that it&amp;#8217;s bad, when you&amp;#8217;re doing it to yourself?  Pick a different framework or build your own, problem solved.&lt;/p&gt;

&lt;h4&gt;Seriously, wtf?&lt;/h4&gt;

&lt;p&gt;Those are just the major points I had issue with.  There were several other minor things that grated me:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;At 17:00, he makes the remark that only classes derived from &lt;code&gt;ActiveRecord::Base&lt;/code&gt; go in &lt;code&gt;app/models&lt;/code&gt;, not the business objects he&amp;#8217;s describing.  I know he was making a sarcastic remark since that&amp;#8217;s a general practice he disagrees with, but it (a) fell flat because a bunch of people yelled &amp;#8216;models&amp;#8217; when he asked the baiting question and (b) is a fairly well known fact these days you can put anything in there that&amp;#8217;s a business object.&lt;/li&gt;
&lt;li&gt;Around 25:00, he takes issues with &amp;#8220;web stuff&amp;#8221; like session id&amp;#8217;s and so on getting into your business logic.  The problem with that is that sometimes you &lt;em&gt;need&lt;/em&gt; that stuff.  There are many times where I need to know how to handle some logic because of a header or some other payload information from the web.&lt;/li&gt;
&lt;li&gt;Around 33:00 he makes a snide argument that &amp;#8220;You gotta know a ton of languages to write a web app.&amp;#8221;  Seriously?  You really only have to know one programming language.  If you want your pages to look decent, you need to know one markup language (and optionally know a second programming language if you want some fanciness).  What about desktop apps?  You need to know a form designer or a mark up like XAML/WPF or how to manage frames and such in code (which isn&amp;#8217;t any easier than just learning a stupid mark up language).  The criticism is weird because the best part of the web is that we have standard, interpretable languages/mark up usable by clients that don&amp;#8217;t require client knowledge of any specific programming language.  I can write a web app in Java or Rails and the client, which could be a mobile phone, desktop computer, mainframe in the tundra of Russia, or whatever, doesn&amp;#8217;t give a crap which one it is.  That&amp;#8217;s &lt;em&gt;awesome&lt;/em&gt; not annoying.&lt;/li&gt;
&lt;li&gt;Around 40:00, someone mentions they have &amp;#8220;too many tests.&amp;#8221;  He goes on to dismiss that attitude (2 or 3 times actually) as a symptom of slow tests, and continues to point out that you should never get rid of tests, just write faster ones.  I hope he&amp;#8217;s kidding.  I can tell stories of many apps I&amp;#8217;ve inherited apps that were way overtested.  I&amp;#8217;m talking 5,000 Cucumber scenarios for an internal, non-mission critical application over-tested.  I mean 22,000 unit tests for 30 models over-tested.  I mean if I tweak the content of a constant array, the right tests fail, but I also have to clean 5 other tests where they simply tested the content of the array.  That&amp;#8217;s over-testing.  I could rant about this for a while, so I&amp;#8217;ll stop. :)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;So, seriously, what happened?  I think I&amp;#8217;m just so disappointed because I&amp;#8217;ve seen better stuff from him, but how have people been pointing to this talk as a really important talk that everyone should watch?  I get he wants us to &lt;strong&gt;DECOUPLE ALL THE THINGS&lt;/strong&gt;, but do we look past all this crap to get to a point he could have made much more directly and honestly (and in only about 10 minutes)?  Or am I missing some grand overarching sarcasm that has placed me in the unenviable position of being part of the conference session equivalent of Punk&amp;#8217;d?&lt;/p&gt;</description><link>http://omgbloglol.com/post/15190003367</link><guid>http://omgbloglol.com/post/15190003367</guid><pubDate>Mon, 02 Jan 2012 12:52:00 -0500</pubDate></item><item><title>Introducing gem_git: tiny tools for working with gems' code via Git</title><description>&lt;p&gt;We&amp;#8217;ve all been there.  You&amp;#8217;re plowing through your app, in your groove, then you notice an issue with a gem you&amp;#8217;re using.  In some cases you can work around it (or if you&amp;#8217;re desperate/crazy, just monkey patch over it and move on), but more often than not, you want to fork and fix it and/or send a pull request back to the original author.  Likewise, I&amp;#8217;ve been hankering to hack on some open source stuff lately, and while browsing Github for stuff to hack on is cool, more usually I&amp;#8217;m doing something and think, &amp;#8220;Hey, it would be cool if this gem did (x)!&amp;#8221;&lt;/p&gt;

&lt;p&gt;Tracking down a gem&amp;#8217;s source usually isn&amp;#8217;t terribly difficult, but it&amp;#8217;s kind of annoying to go find the URL for the repository, pop that into my Terminal, clone it, and so on.  The friction is even more irritating if after hacking a bit I decide to fork it and keep my changes separate.  So I decided I&amp;#8217;d make things a bit easier.&lt;/p&gt;

&lt;p&gt;I hacked out &lt;a href="http://github.com/jm/gem_git" target="_blank"&gt;gem_git&lt;/a&gt;.  Right now it&amp;#8217;s just a couple of &lt;code&gt;gem&lt;/code&gt; commands to help with hacking on gems.  The first one is &lt;code&gt;gem clone&lt;/code&gt;, which hits the RubyGems API to find the gem&amp;#8217;s source and clones it.  So, if you want to clone &lt;code&gt;paperclip&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ gem clone paperclip
Cloning paperclip from &lt;a href="https://github.com/thoughtbot/paperclip..." target="_blank"&gt;https://github.com/thoughtbot/paperclip...&lt;/a&gt;
Cloning into paperclip...
remote: Counting objects: 5231, done.
remote: Compressing objects: 100% (2292/2292), done.
remote: Total 5231 (delta 3582), reused 4377 (delta 2822)
Receiving objects: 100% (5231/5231), 798.34 KiB | 1.25 MiB/s, done.
Resolving deltas: 100% (3582/3582), done.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The next one builds on that and lets you actually create a Github fork.  So if I wanted to create a fork of &lt;code&gt;pakyow&lt;/code&gt;, I&amp;#8217;d do this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ gem fork pakyow
Forking pakyow from &lt;a href="https://github.com/metabahn/pakyow..." target="_blank"&gt;https://github.com/metabahn/pakyow...&lt;/a&gt;
Repository forked, now cloning...
Cloning into pakyow...
remote: Counting objects: 1109, done.
remote: Compressing objects: 100% (461/461), done.
remote: Total 1109 (delta 730), reused 977 (delta 598)
Receiving objects: 100% (1109/1109), 139.93 KiB | 230 KiB/s, done.
Resolving deltas: 100% (730/730), done.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now I have a shiny fork of pakyow for my own hacking.&lt;/p&gt;

&lt;p&gt;Right now there are no tests and pretty poor error handling, but I&amp;#8217;ll be hacking on it over the next few days to improve that sort of stuff.  Please file any bugs you find on Github Issues and I&amp;#8217;ll get around to them.&lt;/p&gt;

&lt;p&gt;Also, be sure to clone/fork the gem and send me patches.  That would be awesome. :)&lt;/p&gt;</description><link>http://omgbloglol.com/post/13112129116</link><guid>http://omgbloglol.com/post/13112129116</guid><pubDate>Mon, 21 Nov 2011 10:11:28 -0500</pubDate></item><item><title>Attention API Provider: How to make people using your API love you </title><description>&lt;p&gt;At &lt;a href="http://arcturo.com" target="_blank"&gt;Arcturo&lt;/a&gt;, we&amp;#8217;ve been working with a lot of remote API&amp;#8217;s and big data lately.  The more API&amp;#8217;s from all over the web I work with, the more I realize how much some companies &lt;em&gt;really&lt;/em&gt; get how to build an API that developers love and use all the time, but at the same time, I&amp;#8217;m beginning to realize how little thought some teams really put into their API and how it will be used.  I rant about this often to &lt;a href="http://twitter.com/erebor" target="_blank"&gt;Ryan&lt;/a&gt;, so I thought I&amp;#8217;d go ahead write up a little list of things that API consumers would really appreciate if you&amp;#8217;re providing an API.&lt;/p&gt;

&lt;h4&gt;Keep it consistent.&lt;/h4&gt;

&lt;p&gt;The number one most annoying thing I&amp;#8217;ve encountered is inconsistent treatment of API calls.  For example, let&amp;#8217;s say I&amp;#8217;m working with an API to a library.  If I pull a book from the main collection and then a book from the reserve collection, both should contain the same citation information.  If both of them, from my end, look like a book but contain different information (or annoyingly differently formatted information), that&amp;#8217;s a big usability problem.&lt;/p&gt;

&lt;p&gt;Much like we obsess over the user experience on the client side, investing time in your API&amp;#8217;s user experience will yield big results in terms of adoption and engagement from developers.  Think about what they will be doing and make the path from where they are to where they want to be as frictionless as possible.  Giving me inconsistent data is a huge blocker to actually getting things done because not only am I wrestling with the data itself, I&amp;#8217;m also trying to figure out what your assumptions about the data are and how they may affect something else I&amp;#8217;m doing.&lt;/p&gt;

&lt;h4&gt;Make it general.&lt;/h4&gt;

&lt;p&gt;I can&amp;#8217;t count how many times I&amp;#8217;ve talked to teams who are building an API for internal use and are &amp;#8220;just going to give people access to that.&amp;#8221;  While that turns out well sometimes, in general your internal product, case-specific logic will end up being more annoying to someone attempting to adopt it.&lt;/p&gt;

&lt;p&gt;I was working with an API once that kept returning boolean data in different ways among the different calls, and when I inquired as to why that was, I was told that their iPhone app interpreted the data one way, their internal web services another way, and the Ajax calls they were making a different way.  Of course, I was building something that cross-cut all the calls used by these services, so it made my life incredibly difficult (I literally eventually built a &lt;code&gt;BooleanParser&lt;/code&gt; class or some such silliness to handle all the different states).  If you&amp;#8217;re building an API for something internal, then keep it internal; just because you can offer an API based on some internal thing doesn&amp;#8217;t mean you should!&lt;/p&gt;

&lt;h4&gt;Keep your information up to date.&lt;/h4&gt;

&lt;p&gt;Please.  &lt;em&gt;Please.&lt;/em&gt;  I&amp;#8217;m begging you.  The first thing you should do after changing &lt;em&gt;anything&lt;/em&gt; in your API is to ask &amp;#8220;Has then been documented and/or covered in our client libraries?&amp;#8221;  Having your API documentation being out of sync with your actual running API is a death sentence.  This situation is becoming more and more of a problem as more sites are adding API&amp;#8217;s as a second thought rather than a core functionality.  Go ahead and compare your average web application&amp;#8217;s API documentation to someone like Twitter who have made their API a core competency (though I could offer them as a counter-example to that about 2 years ago&amp;#8230;).&lt;/p&gt;

&lt;p&gt;Even more important is to make sure that the code developers are running and working with jives with what you&amp;#8217;ve got running on your servers.  If the documentation is wrong, that&amp;#8217;s not such a &lt;em&gt;huge&lt;/em&gt; deal if I can dig around in your client&amp;#8217;s source and figure out what changed.  But if the client is wrong and the documentation is right (or both are wrong), you&amp;#8217;re going to drive me to Bedlam before I figure out you haven&amp;#8217;t updated something.  Keeping your API releases synced with documentation and client releases will go a &lt;strong&gt;LONG&lt;/strong&gt; way to keeping your API users very happy.&lt;/p&gt;

&lt;h4&gt;Don&amp;#8217;t gimp it.&lt;/h4&gt;

&lt;p&gt;If you offer an API feature, offer to your clients evenly.  I understand &amp;#8220;premium API features&amp;#8221; and all that jazz make total business sense.  I&amp;#8217;m all about people monetizing their API&amp;#8217;s as much as it makes sense.  Where I think you, as a provider, cross a line is offering certain API&amp;#8217;s only to your in-house, product bound clients and no others.  Not only is it sort of gratingly protectionist to the point of turning off a lot of potential developers, it just doesn&amp;#8217;t make any sense.  If you&amp;#8217;re going to arbitrarily limit the ability to which I can engage your product via the API, you obviously don&amp;#8217;t want my competition or my contribution to your ecosystem very badly.&lt;/p&gt;

&lt;p&gt;I understand limits in terms of not allowing blatant scraping of data or something that&amp;#8217;s core to the viability of your business, but disabling convenient features and neat additions in the name of arbitrary limits is a problem.  Twitter, while being fantastically open in a lot of respects, really put a bad taste in developers&amp;#8217; mouths with the whole OAuth/XAuth split for example.  Limits like that can easily build up a lot of bad press and kill developer goodwill for very little benefit.&lt;/p&gt;

&lt;h4&gt;Be prepared for customer service.&lt;/h4&gt;

&lt;p&gt;As API usage grows, developers will inevitably have questions, requests, problems, and want to chat about their favorite beers from this really cool microbrewery in South Carolina that you just &lt;em&gt;have&lt;/em&gt; to try when you get a chance ZOMG.  Many API providers simply tell a couple of their developers to answer all of these inquiries just sort of as they have time between all the Real Important Work™.  E-mails and support tickets pile up, people get upset, and things explode.  No one wants that.&lt;/p&gt;

&lt;p&gt;Instead, be prepared to offer actual customer support.  Even if it&amp;#8217;s one developer whose primary workload is flipped (answer support inquiries first, fix bugs and add features second), then that&amp;#8217;s better than treating your existing developers as second class to building stuff.  Your developers will thank you and sing the praises of your API team all over.  Look no further than &lt;a href="http://twilio.com" target="_blank"&gt;Twilio&lt;/a&gt; to see this in action; these guys really get it in terms of working with developers directly to make sure they succeed.&lt;/p&gt;

&lt;h4&gt;TL;DR&lt;/h4&gt;

&lt;p&gt;Your API developers will appreciate you at least considering their sanity in how you build and operate your API.  Thanks.&lt;/p&gt;</description><link>http://omgbloglol.com/post/12971574299</link><guid>http://omgbloglol.com/post/12971574299</guid><pubDate>Fri, 18 Nov 2011 12:03:00 -0500</pubDate></item><item><title>The Hoedown 2011 Experience, Part 1: Lodging</title><description>&lt;p&gt;Well, it&amp;#8217;s that time of year again: another &lt;a href="http://rubyhoedown.com" target="_blank"&gt;Ruby Hoedown&lt;/a&gt; coming at you.  &lt;strong&gt;Registration is open&lt;/strong&gt;, so &lt;a href="http://rubyhoedown.eventbrite.com" target="_blank"&gt;head over and register now before we sell out (we&amp;#8217;re not THAT far from doing it&amp;#8230;)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When I started planning this year, I honestly didn&amp;#8217;t know if I wanted to do it.  This is the fifth year in a row that I&amp;#8217;ve done this conference (and the seventh conference I&amp;#8217;ve had a hand in planning over the past few years), and it had become a bit of rote repetition for me.  So, like a few years ago when I got bored with charging people, I decided to change it up again.  I started pondering a few things.  First, what makes a great conference?  Secondly, what makes a great &lt;em&gt;regional&lt;/em&gt; conference?  These aren&amp;#8217;t easy questions to answer, especially for someone so close to the experience as I&amp;#8217;ve been for the past few years.  So this year I sat out all conferences save for RailsConf (and that was because I was speaking) and &lt;a href="http://magic-ruby.com" target="_blank"&gt;MagicRuby&lt;/a&gt; (for obvious reasons).  This distance gave me some time to think about it a bit, and I&amp;#8217;ve come up with a couple of core things (if you don&amp;#8217;t really give a crap about what I think about conferences in general, you can slide down to the part about the hotels).&lt;/p&gt;

&lt;p&gt;First, it needs to be an experience.  Not just an experience within itself (i.e., &amp;#8220;I went to RailsConf and it was what it was.&amp;#8221;), but a truly memory-creating, impact-enhancing, honest-to-goodness experience for attendees.  Too many regionals basically try to be a mini-(Ruby|Rails)Conf.  I was guilty of falling into that for sure: try to shove as many people in as possible, give them what you expect in a conference (a badge, a t-shirt, a piece of paper telling them what they&amp;#8217;ll hear over the next 2-3 days), and hope that you can at least muster a good review from the attendees.  I won&amp;#8217;t point fingers, because I doubt the organizers who I think have fallen into this trap even realize it as a problem, and that&amp;#8217;s OK.  If that&amp;#8217;s how their conferences want to roll and it&amp;#8217;s successful for them, that&amp;#8217;s awesome.  I&amp;#8217;m just tired of trying to do that.&lt;/p&gt;

&lt;p&gt;So instead, this year we&amp;#8217;re trying to create a really memorable experience for attendees.  The one conference that I think nailed this was Ruby Fringe.  I attended (and spoke) there, and from the very start, everything had a very nice handcrafted approach.  The organizers obviously put a lot of thought into how things progressed and the things that their attendees would see and do during the conference.  That sort of thoughtfulness really matters because people tweeted, blogged, and talked about that conference for years after (and still do at times).  We&amp;#8217;re trying to put that same degree of thoughtfulness into the conference this year, and we hope it shows.&lt;/p&gt;

&lt;p&gt;Second, I think regional conferences especially have to play up the &amp;#8220;flavor&amp;#8221; of their region.  I&amp;#8217;m always sort of disappointed when I go to a regional conference and I&amp;#8217;m not wrapped in the culture and experiences of the region it&amp;#8217;s representing.  I&amp;#8217;ve never put much effort into that.  The closest I&amp;#8217;ve come has been the general &amp;#8220;feel&amp;#8221; of the media (effusing the &amp;#8220;dirty south&amp;#8221; aesthetic that&amp;#8217;s popular in a lot of Southern art these days) and hosting at the OpryLand one year.  One conference that I think nails this year after year (I&amp;#8217;ve only been once but heard from others how great it is at this) is &lt;a href="http://goruco.com" target="_blank"&gt;GoRuCo&lt;/a&gt;.  From the badge (which is handwritten by a local graffiti artist) to the parties (which are held in totally NYC locales), everything &lt;em&gt;screams&lt;/em&gt; New York, and it&amp;#8217;s awesome.&lt;/p&gt;

&lt;p&gt;We&amp;#8217;re trying to capture that this year.  These few blog posts (today, tomorrow, and Friday) will layout some of the things we have in store for everyone this year.  We&amp;#8217;re going &lt;strong&gt;FULL NASHVILLE&lt;/strong&gt;, and everyone knows you &lt;em&gt;never&lt;/em&gt; go FULL NASHVILLE.  But we&amp;#8217;re doing it this year, from the food to the venue to the music (that&amp;#8217;s right!), it&amp;#8217;s going to steep you in the South like we&amp;#8217;ve never done before.  So, let&amp;#8217;s take a look at what we have in store so far&amp;#8230;&lt;/p&gt;

&lt;h1&gt;The Hotels&lt;/h1&gt;

&lt;p&gt;So in the past, we&amp;#8217;ve usually had the conference at a hotel or at the least picked a hotel as &amp;#8220;the&amp;#8221; conference hotel.  This year we&amp;#8217;re sort of doing both.&lt;/p&gt;

&lt;p&gt;First, the venue has lodging on-site that&amp;#8217;s nice and &lt;em&gt;super&lt;/em&gt; affordable.  Like, $40 a night and you won&amp;#8217;t get accosted by a hooker while staying there nice and affordable.  Now, the arrangements are sort of spartan (see photo below) and they were previously a dorm, so the bathroom sharing situation might not be ideal for everyone.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lob5wnhL0L1qz4tvk.jpg" alt="A standard guest room (they have upgraded rooms available, too)"/&gt;&lt;/p&gt;

&lt;p&gt;But, &lt;em&gt;they were a freaking dorm.&lt;/em&gt;  What does that mean?  Late night hackfests?  I think so.  Camaraderie not seen since your college days?  You betcha.  I&amp;#8217;m going to place a &lt;strong&gt;Dean of Nerds&lt;/strong&gt; in the dorms to plan activities and answer any questions you may have about the conference (I can&amp;#8217;t do this but if you&amp;#8217;d like to volunteer, ping me on Twitter or e-mail).  I think that people will not only enjoy the price point, but it&amp;#8217;ll create a great environment for cool stuff to happen.&lt;/p&gt;

&lt;p&gt;For those of you to whom that doesn&amp;#8217;t appeal, I plan on staying at the nearby &lt;a href="http://www.hotels.com/ho328157/hilton-garden-inn-nashville-vanderbilt-nashville-united-states/#description" target="_blank"&gt;Hilton Garden Inn&lt;/a&gt;.  It&amp;#8217;s only about half a mile away, only &lt;strong&gt;$89 a night&lt;/strong&gt;, and should prove to be a little more luxurious.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lob64tOogK1qz4tvk.jpg" alt="A typical Hilton Garden Inn - Venderbilt room"/&gt;&lt;/p&gt;

&lt;p&gt;Beyond that, there are more luxurious options if you&amp;#8217;d prefer to travel just a bit further.  Within a mile or so, there&amp;#8217;s a super nice &lt;a href="http://www.hotels.com/ho122733/loews-vanderbilt-hotel-nashville-united-states/#description" target="_blank"&gt;Loews&lt;/a&gt; hotel and a great boutique hotel named &lt;a href="http://www.hotels.com/ho278769/hutton-hotel-nashville-united-states/#description" target="_blank"&gt;Hutton Hotel&lt;/a&gt;.  My wife and I stayed there about 2 weeks after they opened and it was really chic and interesting (they used sustainable materials in the construction, so you have bamboo floors, etc.).  There are other hotels near that area, too, such as a Doubletree or Hotel Indigo, if those are you thing.&lt;/p&gt;

&lt;p&gt;So there you have it.  That&amp;#8217;s our lodging strategy for this year.  Stay tuned for tomorrow&amp;#8217;s post on the food and venue!&lt;/p&gt;</description><link>http://omgbloglol.com/post/7604560476</link><guid>http://omgbloglol.com/post/7604560476</guid><pubDate>Thu, 14 Jul 2011 01:38:18 -0400</pubDate></item><item><title>Authoring eBooks is on sale right now</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lmdq718Ylm1qz4tvk.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;I dropped the price of my eBook on writing eBooks &lt;a href="http://authoringebooks.com" target="_blank"&gt;Authoring eBooks&lt;/a&gt; &lt;strong&gt;to its lowest ever $19 today&lt;/strong&gt;.  Not sure how long I&amp;#8217;ll keep it there, so grab it while it lasts!&lt;/p&gt;</description><link>http://omgbloglol.com/post/6253414832</link><guid>http://omgbloglol.com/post/6253414832</guid><pubDate>Mon, 06 Jun 2011 13:35:48 -0400</pubDate></item><item><title>RubyRescue.tv - Answering Ruby questions live and on the air every Tuesday (submit a question and win $50 to Amazon)</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lkximfwXT61qz4tvk.png" alt=""/&gt;&lt;/p&gt;

&lt;p&gt;If you don&amp;#8217;t &lt;a href="http://twitter.com/jm" target="_blank"&gt;follow me on Twitter and hang on every word I tweet&lt;/a&gt;, you may not be aware of &lt;a href="http://rubyrescue.tv" target="_blank"&gt;RubyRescue.tv&lt;/a&gt; (ignore the inaugural episode language; we were too lazy this week to change it ;)).  &lt;a href="http://www.ustream.tv/recorded/14456532" target="_blank"&gt;We did an episode last week&lt;/a&gt; that went awesomely well.&lt;/p&gt;

&lt;p&gt;So awesome, in fact, that we want to make sure this one is super awesome.  &lt;strong&gt;Submit your questions today and tomorrow &lt;a href="http://rubyrescue.tv" target="_blank"&gt;using one of the methods on the website&lt;/a&gt; and you could win a $50 Amazon Gift Card.&lt;/strong&gt;  We&amp;#8217;ll announce the winner on air tomorrow at 2p.m. Eastern.&lt;/p&gt;</description><link>http://omgbloglol.com/post/5333355264</link><guid>http://omgbloglol.com/post/5333355264</guid><pubDate>Mon, 09 May 2011 08:58:55 -0400</pubDate></item><item><title>The Compleat Rubyist is coming to Boston real soon</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lirvj9FRAg1qz4tvk.png" alt="The Compleat Rubyist"/&gt;&lt;/p&gt;

&lt;p&gt;If you haven&amp;#8217;t seen it, the training set that I do with &lt;a href="http://rubypal.com" target="_blank"&gt;David A. Black&lt;/a&gt; and &lt;a href="http://www.rubymendicant.com/" target="_blank"&gt;Gregory Brown&lt;/a&gt; is called &lt;a href="http://thecompleatrubyist.com" target="_blank"&gt;The Compleat Rubyist&lt;/a&gt;.  Don&amp;#8217;t let the word &amp;#8220;training&amp;#8221; conjure up images of boring lectures and spurious example problems that take you 30 seconds to complete.  It&amp;#8217;s an intimate, interactive experience wherein we do lecture, but we also provoke discussions, debate amongst ourselves, and give you a one-on-one tour through some of the topics we discuss (which are not presented at a novice level for the most part).  No matter your skill level, you can get something out of it because due to the way we scale the content.&lt;/p&gt;

&lt;p&gt;So back to my point: we&amp;#8217;re coming to Boston soon, and we&amp;#8217;d love to see you there.  Head over to the signup page on &lt;a href="http://thecompleatrubyist.com" target="_blank"&gt;&lt;a href="http://thecompleatrubyist.com" target="_blank"&gt;http://thecompleatrubyist.com&lt;/a&gt;&lt;/a&gt; and &lt;strong&gt;use discount code FRIENDINBOSTON to get $50 off&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Hope to see you there!&lt;/p&gt;</description><link>http://omgbloglol.com/post/4159783100</link><guid>http://omgbloglol.com/post/4159783100</guid><pubDate>Mon, 28 Mar 2011 10:44:46 -0400</pubDate></item><item><title>FREAK OUT (or, I quit my job and what I'm doing next)</title><description>&lt;p&gt;It&amp;#8217;s my birthday today.  I am now 26, and I&amp;#8217;ve decided to have a &lt;a href="http://en.wikipedia.org/wiki/Quarter-life_crisis" target="_blank"&gt;quarter-life crisis&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Most people have these a little earlier in life, but I was too busy or missed out on some of the typical milestone triggers.  I don&amp;#8217;t drink, so I missed out on my first epic hangover at 21.  I haven&amp;#8217;t graduate college yet, so I missed out on that at 22.  I was already married for 5 years when 25 rolled around and some people decide they are sick being alone in their terrible, worthless existence and get married.  If I wait much longer, the moniker &amp;#8220;quarter-life&amp;#8221; won&amp;#8217;t make much sense probably, so I&amp;#8217;ve decided this year is the year.&lt;/p&gt;

&lt;p&gt;This birthday also marks the end of my first decade of employment in the software industry (that&amp;#8217;s weird to say I&amp;#8217;ve done anything for a decade straight!).  It&amp;#8217;s the only job I&amp;#8217;ve ever had.  I fudged my age to sign up for one of those remote contractor websites when I was 16, and I&amp;#8217;ve been hacking code for money ever since.&lt;/p&gt;

&lt;p&gt;So what does that mean?  Well, I quit my job, plan on moving to Belize to open a writer&amp;#8217;s commune/coffee shop/moped repair shop, and have adopted 13 Malaysian children that I will teach to tumble and spin plates in an effort to create &amp;#8220;Cirque du Soleil: Belize&amp;#8221; some day.&lt;/p&gt;

&lt;p&gt;You&amp;#8217;ll be glad to know I haven&amp;#8217;t given up sarcasm just yet.&lt;/p&gt;

&lt;p&gt;I &lt;em&gt;did&lt;/em&gt; actually quit my job, though.  March 25, 2011 will be my last day working at Intridea, and if all goes according to plan, my last day &amp;#8220;working at&amp;#8221; anywhere (aside: working at Intridea is pretty neat; if you&amp;#8217;re looking for a job, they&amp;#8217;re hiring).  But I&amp;#8217;ve decided that I&amp;#8217;m going to quit talking about doing what I&amp;#8217;ve always wanted to do, and instead, actually, you know&amp;#8230;do it.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve been working in and with consultancies for years now.  I&amp;#8217;ve had some great experiences (and some not so great), and every time I leave one, I come away with ideas about what a great business can look like and what could really be done better.  I&amp;#8217;ve also developed some pretty wild ideas, but nowhere I&amp;#8217;ve worked has been willing to experiment enough to test them out.&lt;/p&gt;

&lt;p&gt;So, I&amp;#8217;m doing two things.  I&amp;#8217;m spinning up my own business with a good friend (&lt;a href="http://twitter.com/erebor" target="_blank"&gt;Ryan Waldron&lt;/a&gt;, excellent Rails developer and killer biz dude), and we&amp;#8217;re going to &lt;strong&gt;change the world&lt;/strong&gt;.  OK, not actually, but we are going to try some interesting business practices and work processes.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://arcturo.com" target="_blank"&gt;&lt;img src="http://media.tumblr.com/tumblr_li9c9kYbAh1qz4tvk.png" alt="Arcturo logo"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We&amp;#8217;re named &lt;a href="http://arcturo.com" target="_blank"&gt;Arcturo&lt;/a&gt;, and you can see our &lt;a href="http://arcturo.com" target="_blank"&gt;quick cardfolio site&lt;/a&gt; I put together if you want to contact us about work (and you know you do); we&amp;#8217;re currently open to pretty much whatever sort of opportunity you have available (working directly for clients, working on your product, working with your consultancy, and so on).  Our full site is going to be awesome, but I&amp;#8217;m just waiting on our illustrator (&lt;a href="http://www.stevethomasart.com/travel.html" target="_blank"&gt;Steve Thomas&lt;/a&gt;) to finish up the graphics.&lt;/p&gt;

&lt;p&gt;Secondly, I&amp;#8217;m starting a blog to talk about our experiences/experiments and others like them.  The blog is &lt;a href="http://thebusinesshypothesis.com" target="_blank"&gt;The Business Hypothesis&lt;/a&gt;.  I&amp;#8217;m going to blog about what we&amp;#8217;re doing at Arcturo and what others are doing in their business.&lt;/p&gt;

&lt;p&gt;So, yes.  Keep an eye out.  I have some other fun things planned, but I don&amp;#8217;t want to talk about them until I know, you know, that I can actually do them. :)&lt;/p&gt;</description><link>http://omgbloglol.com/post/3940469845</link><guid>http://omgbloglol.com/post/3940469845</guid><pubDate>Fri, 18 Mar 2011 10:31:00 -0400</pubDate></item><item><title>My books are on sale today!</title><description>&lt;p&gt;&lt;a href="http://authoringebooks.com" target="_blank"&gt;Authoring eBooks&lt;/a&gt; is on sale for &lt;strong&gt;$15&lt;/strong&gt;, and it will finally reach its full $49 price this weekend.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://railsupgradehandbook.com" target="_blank"&gt;The Rails Upgrade Handbook&lt;/a&gt; is &lt;strong&gt;$6,&lt;/strong&gt; and it will return to its full price of $12 this weekend.&lt;/p&gt;

&lt;p&gt;These sales end TODAY, so you&amp;#8217;d better snap them up if you want them.&lt;/p&gt;</description><link>http://omgbloglol.com/post/3503211967</link><guid>http://omgbloglol.com/post/3503211967</guid><pubDate>Fri, 25 Feb 2011 09:51:39 -0500</pubDate></item><item><title>MagicRuby is nearly full and the group room rate goes away TODAY</title><description>&lt;p&gt;MagicRuby, the FREE Ruby conference at Walt Disney World Resort® on February 4-5, 2011, is nearly full!  If you want to hang out with over 300 other Rubyists and see talks by Chad Fowler, Dave Thomas, Kyle Neath (Github), Gregg Pollack (Ruby5, Envy Labs, Rails for Zombies), and a host of other great speakers, all at a convention center literally &lt;em&gt;steps&lt;/em&gt; from the Magic Kingdom park, then you&amp;#8217;d better run over to &lt;a href="http://magic-ruby.com" target="_blank"&gt;http://magic-ruby.com&lt;/a&gt; and grab a ticket right now.  They&amp;#8217;re going &lt;em&gt;very&lt;/em&gt; fast!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://magic-ruby.com" target="_blank"&gt;&lt;img src="https://img.skitch.com/20110103-ruaxdc14mfhechm4aei8u6pph4.jpg" alt="MagicRuby"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Also, if you plan to stay at the five-star resort that the conference is being held in for about 60% off the normal price, you need to book your room TODAY.  You can book your room using the number from reservations link on the website.    &lt;strong&gt;Usually they allow you to pay for one night up front and pay the balance when you arrive (I don&amp;#8217;t know if that holds true with group reservations or not&amp;#8230;).&lt;/strong&gt;  In any event, the rate expires today, so get those reservations in!&lt;/p&gt;

&lt;p&gt;Hope to see you in February!&lt;/p&gt;</description><link>http://omgbloglol.com/post/2581509096</link><guid>http://omgbloglol.com/post/2581509096</guid><pubDate>Mon, 03 Jan 2011 08:59:36 -0500</pubDate><category>magicruby</category></item><item><title>Holy crap!  I made $40,000 this year with my eBook.  And you (probably) can, too.</title><description>&lt;p&gt;&lt;strong&gt;Caution:  I am going to try to sell you something at the end of this post.  If that offends you, skip the last few paragraphs. :)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When Rails 3 RC1 hit earlier this year, I also released my &lt;a href="http://railsupgradehandbook.com" target="_blank"&gt;Rails 3 upgrade guide&lt;/a&gt; in its final form.  I had been shopping it to a few people since early alphas/betas of Rails 3, but I finally let it out of the bag in early January.  It&amp;#8217;s been about a year since I first released it, so I thought it&amp;#8217;d be neat to look at the sales numbers and see how far I&amp;#8217;ve come since then.  So, I popped the console open on the Rails app and ran a couple of queries.  &amp;#8220;That can&amp;#8217;t be right,&amp;#8221; I thought.  &amp;#8220;I made &lt;em&gt;how&lt;/em&gt; much?&amp;#8221;&lt;/p&gt;

&lt;p&gt;Holy crap.  &lt;strong&gt;I&amp;#8217;ve made $40,967.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;How does that break down?  Well, here are the numbers:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Direct sales - $34,017&lt;/li&gt;
&lt;li&gt;Peepcode sales - $5,950&lt;/li&gt;
&lt;li&gt;Other stuff - about $1,000&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;I&amp;#8217;ve been overwhelmed by the purchases and the great comments I&amp;#8217;ve gotten about the book.  Plainly, I was on to something here.  The sales from both avenues have been excellent (in my opinion), and the &amp;#8220;other stuff&amp;#8221; constitutes things like speaking gigs and so on that I&amp;#8217;ve gotten as a direct result of writing this book.&lt;/p&gt;

&lt;p&gt;You can see from this graph that sales have actually been fairly consistent month-to-month.  They ebb and flow, of course, but there haven&amp;#8217;t been any major crashes.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ldie83Ot9u1qz4tvk.png" alt="Graph of sales"/&gt;&lt;/p&gt;

&lt;p&gt;It should stay like that for some time since I think a lot of developers are just now actually getting confident enough in Ruby &amp;gt; 1.8.6 and Rails 3 to really make the leap.&lt;/p&gt;

&lt;p&gt;So, the question is: how did I do it?  Is the book really that good?  Or is it something else at work?  There was a recognition factor at play here for sure given my past work (my 2 books previous to this one, open source, speaking, and so on), but there are a few other things at play here I think&amp;#8230;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Timeliness&lt;/strong&gt;  The book hit right when the Rails 3 hype was starting to build substantially.  I managed to release the book early enough to catch everyone from early adopters to Johnny (or Jilly) Come-lately.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Niche target&lt;/strong&gt;  It&amp;#8217;s a very concentrated topic, but it&amp;#8217;s a topic with a huge audience.  There is a boatload of Rails 2 code out there now, and many of those projects will want to migrate to Rails 3 at some point in the near future.  That means they&amp;#8217;ll probably want to some help&amp;#8230;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Partnerships&lt;/strong&gt;  I built some great affiliate and sales partnerships with places like Peepcode.  They didn&amp;#8217;t constitute the bulk of my sales, but they certainly didn&amp;#8217;t hurt.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Audience monopoly&lt;/strong&gt;  No one else had even released a significant blog post at the time when I started writing about it, so the market was wide open for a guide like it.  Since then, many blog posts have come out, but none of them are as cohesive or exhaustive.  Even so, they&amp;#8217;re still excellent contributions to the literature on the subject and certainly have taught me a few things that I did not include in the book.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;There are, of course, more factors at play, but I think those are the big ones.  I&amp;#8217;ll be blogging more about this stuff soon because I think there are some interesting lessons.&lt;/p&gt;

&lt;p&gt;But enough about me.&lt;/p&gt;

&lt;p&gt;Would you like to make some excellent passive income while getting a few fringe benefits while you&amp;#8217;re at it (speaking gigs, consulting jobs, and so on)?  &lt;em&gt;*dons Matthew Lesko jacket*&lt;/em&gt;  &lt;strong&gt;I CAN HELP YOU WITH THAT!&lt;/strong&gt;  I&amp;#8217;ve been toiling on an eBook project for almost a year now; I&amp;#8217;ve written most of it, rewritten it, tore most of it out, changed the format, and written it again.  I think I finally have something good.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://authoringebooks.com" target="_blank"&gt;&lt;img src="http://media.tumblr.com/tumblr_ldieakK05D1qz4tvk.png" alt="The cover"/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve titled it &lt;a href="http://authoringebooks.com" target="_blank"&gt;&lt;em&gt;Authoring eBooks&lt;/em&gt;&lt;/a&gt;, a thorough eBook guide to (you guessed it) writing and marketing eBooks.  It takes you through the writing process from concept development to structuring your outline to actually writing the book and into the marketing and sales process.  It&amp;#8217;s structured as a discrete set of essays so you can pick and choose the topics that are relevant to you.  Some of them are short thoughts on a particular topic; others are multi-pages treatises on an in-depth topic.  You can &lt;a href="http://authoringebooks.com/images/sample.pdf" target="_blank"&gt;check out the sample pages&lt;/a&gt; to get a feel for how it&amp;#8217;s written, or &lt;a href="http://authoringebooks.com" target="_blank"&gt;jump over to the informational site&lt;/a&gt; to get more discussion of what&amp;#8217;s inside.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It currently costs $29&lt;/strong&gt; for over 100 pages of information with access to future bonus content (topics in the hopper so far: running a successful affiliate program, A/B testing, and more).  I&amp;#8217;m also in the process of setting up a private discussion forum for readers.  The price will be jumping up to $49 for the full package after the New Year, so if you want it cheap, you&amp;#8217;d better &lt;a href="http://authoringebooks.com" target="_blank"&gt;grab it now&lt;/a&gt;!  Unlike my other book project, you can pay via PayPal or Google Checkout thanks to e-Junkie!&lt;/p&gt;

&lt;p&gt;I hope to see tons of eBooks popping up as a result of readers using this information.  I also plan on starting an eBook &amp;#8220;coaching&amp;#8221; (crappy, overloaded, market droid term but it&amp;#8217;s the best I have right now) where I will work with a small group for 6 weeks to at least begin writing a tech book (doesn&amp;#8217;t have to be an eBook); it will include discussions, worksheets, one-on-one consulting, and so on.  If you&amp;#8217;d like more information on that, &lt;a href="https://spreadsheets.google.com/viewform?formkey=dGl0cVZHa1ZqUkYwZ3Y3eXRydTJTVmc6MQ" target="_blank"&gt;sign up on this form and I&amp;#8217;ll ping you when it&amp;#8217;s ready&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;(&lt;strong&gt;P.S.&lt;/strong&gt; If you&amp;#8217;re not into writing but still want to make some cash, I have &lt;a href="http://authoringebooks.com" target="_blank"&gt;an affiliate program&lt;/a&gt; also.  It pays 30%, so right now you&amp;#8217;d make about $10 per copy sold and about $15 a copy after the New Year.)&lt;/p&gt;</description><link>http://omgbloglol.com/post/2336867402</link><guid>http://omgbloglol.com/post/2336867402</guid><pubDate>Thu, 16 Dec 2010 10:08:00 -0500</pubDate><category>ebooks,</category><category>money</category><category>affiliates</category><category>writing</category></item><item><title>Road to MagicRuby: Getting Here </title><description>&lt;p&gt;I&amp;#8217;ve heard from a few people who&amp;#8217;d really like to make it to &lt;a href="http://magic-ruby" target="_blank"&gt;MagicRuby&lt;/a&gt;, but think that even though the conference is free, the travel might be killer.  I traveled a lot to Orlando before moving here and travel to and fro quite a bit now, so I thought it&amp;#8217;d be a great idea to put together a little guide for those who&amp;#8217;d like to come join us in February.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TLDR:&lt;/strong&gt; You can do it affordably.&lt;/p&gt;

&lt;p&gt;This post is about getting here, the next one is about what to do when you&amp;#8217;re here, and the last will be about things near-but-not-in Orlando that are cool if you have a few extra days.&lt;/p&gt;

&lt;h2&gt;Traveling to Orlando&lt;/h2&gt;

&lt;p&gt;If you&amp;#8217;re not driving, there are a few ways to get to Orlando (some you may not have thought of&amp;#8230;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fly&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Obviously, you can fly.  But what&amp;#8217;s the best deal?  Without question, if you can, catch one of these airlines domestically (ranked by usual price from lowest to highest):&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;AirTran&lt;/li&gt;
&lt;li&gt;Southwest&lt;/li&gt;
&lt;li&gt;US Airways&lt;/li&gt;
&lt;li&gt;Delta&lt;/li&gt;
&lt;li&gt;Frontier&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;a href="http://airtran.com" target="_blank"&gt;AirTran&lt;/a&gt; is usually the cheapest by far; I believe that Orlando is a fairly large hub for them, so they tend to have a lot of routes for really cheap.  I recommend if you do fly AirTran, that you spend the extra $20 and get an exit row seat.  If you&amp;#8217;re planning on business class, they don&amp;#8217;t typically fill it up, so if you wait until about 24 hours before and check-in online you can usually bag a biz class seat for about $50 rather than the $300 they want to add on if you purchase it with your ticket.&lt;/p&gt;

&lt;p&gt;If you&amp;#8217;re international, Orlando actually has a ton of good airlines to choose from.  For the UK, Virgin Atlantic has a route here, as do Aer Lingus and British Airways.  We also have routes from AirCanada, AeroMexico, AirFrance, and a few more.  You can check out the whole list of airlines (major ones; there are more smaller routes that aren&amp;#8217;t listed there if I recall correctly), on &lt;a href="http://www.orlandoairports.net/ops/airlines.htm" target="_blank"&gt;this page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Catch a bus&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not feeling the whole scan your junk/TSA Grope of Doom™ scenario?  No problem.  You have a few other options.&lt;/p&gt;

&lt;p&gt;Catching a bus is one option.  Of course, Greyhound probably goes from your city, but those tend to be sort of grimy and unpleasant to travel on (even if they are cheap).  If you don&amp;#8217;t mind the possibility of urination, crazy drunken homeless men attempting to grope you, arguments about smoking around babies, and other tomfoolery (these are all incidents my wife or I have experience, by the way), then grab a Greyhound.  They will be much cheaper than other bus lines.  If that doesn&amp;#8217;t sound like a wild party to you (and trust me, it is), there are a lot of other options, but you&amp;#8217;ll have to search for your city.  I know NYC has service via &lt;a href="http://gotobus.com" target="_blank"&gt;GotoBus&lt;/a&gt;, but I don&amp;#8217;t know who else has buses.  Many of these smaller bus lines are actually quite nice; my brother-in-law recently took a trip from NYC to D.C. to meet me during a conference via Megabus (who unfortunately does not go to Orlando) and claimed it was really clean and cushy.  Your mileage may vary, though.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Take a train&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My preferred way to travel sans aeroplane is definitely the train (&lt;a href="http://amtrak.com" target="_blank"&gt;AmTrak&lt;/a&gt; being the only option).  Orlando has a nice &lt;a href="http://www.amtrak.com/servlet/ContentServer?pagename=am/am2Station/Station_Page&amp;amp;code=ORL" target="_blank"&gt;train station&lt;/a&gt; and Amtrak offers robust service here.  You have two options:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;The Autotrain - Pack up your car and yourself and roll past all the sucky driving on the way down here.  You put your car on the train and they take you here.  Nice if you don&amp;#8217;t want to rent a car, but I don&amp;#8217;t know how expensive this service is.  You can find out more &lt;a href="http://www.amtrak.com/servlet/ContentServer?c=AM_Route_C&amp;amp;pagename=am%2FLayout&amp;amp;cid=1241245666320" target="_blank"&gt;on the route page&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;The Silver Service / Palmetto line - This is a standard train line that goes from NYC all the way to Miami, stopping in Orlando.  If you aren&amp;#8217;t on the line, you can catch it in D.C. or NYC, so you could transfer from another line.  &lt;a href="http://www.amtrak.com/servlet/ContentServer?c=AM_Route_C&amp;amp;pagename=am%2FLayout&amp;amp;cid=1237608339450" target="_blank"&gt;Get more info here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Both lines offer full rooming services, which is highly recommended.  If you can sleep in the coach area, by all means go for it.  But it&amp;#8217;s not too much more for a roomette or bedroom and you get a nice bed, a private restroom (no shower in the roomette), and, best of all, your meals are included.  If you elect to eat a steak every meal as I do when traveling by train, then you actually save money by getting the room (depending on the length of your route).&lt;/p&gt;

&lt;h2&gt;Staying in Orlando&lt;/h2&gt;

&lt;p&gt;So once you&amp;#8217;re here, where should you stay?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The conference hotel&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Of course I&amp;#8217;d prefer you stay at &lt;a href="http://mydisneymeetings.com/magicruby2011/" target="_blank"&gt;the conference hotel&lt;/a&gt;.  A lot of attendees will be there as it is.  It&amp;#8217;s ridiculously cheap for the hotel (like 55% off or something), &lt;strong&gt;crazy&lt;/strong&gt; nice (one of the nicest hotels I&amp;#8217;ve stayed in and I stay in a &lt;em&gt;lot&lt;/em&gt; of hotels), and will be really convenient for you while you&amp;#8217;re at the conference.  It&amp;#8217;s also extremely close to the Magic Kingdom.  How close?  &lt;a href="http://wikimapia.org/#lat=28.4155787&amp;amp;lon=-81.5765119&amp;amp;z=16&amp;amp;l=0&amp;amp;m=b" target="_blank"&gt;Check out this map&lt;/a&gt;; the conference hotel is that resort in the middle right (The Contemporary) and the Magic Kingdom is obviously in the middle left.  It&amp;#8217;s so close that I actually often park at The Contemporary and walk over to the Magic Kingdom because its parking lot is closer to the park than the one dedicated to the Magic Kingdom.  You can get rooms that overlook the park so that you can relax in the comfort of your room during the fireworks show for instance and get a killer view.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://mydisneymeetings.com/magicruby2011/" target="_blank"&gt;It&amp;#8217;s only $189 a night&lt;/a&gt; and you would be doing me a giant favor by booking a room so I don&amp;#8217;t have to pay for it.  We&amp;#8217;re currently still pretty far away from our room commitment, but we have until January 3rd, 2011 to hit it, so I&amp;#8217;m pretty sure we&amp;#8217;ll make it happen.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cheaper on-property options&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If that&amp;#8217;s still too much of a stretch for you, Disney offers some more affordable options.  Given the urban sprawl-y nature of Orlando (they built the city to be that way so it could accommodate the crazy amounts of tourists guaranteed by the presence of the Disney parks), I &lt;em&gt;highly&lt;/em&gt; suggest you stay somewhere within Disney World.  Otherwise you&amp;#8217;ll just be asking for a world of bus/taxi/transportation induced pain (unless you rent a car, but then you aren&amp;#8217;t saving much money are you? :)).  So what&amp;#8217;s available?&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Moderate resorts - Resorts in this tier include Coronado Springs, Port Orleans, and a couple of others.  I very much suggest &lt;a href="http://disneyworld.disney.go.com/resorts/coronado-springs-resort/" target="_blank"&gt;Coronado Springs&lt;/a&gt; if you go this route.  It is very recently renovated and the decor is almost on-par with the more expensive resorts.  Room rates in this tier will run slightly lower than the conference price.  &lt;/li&gt;
&lt;li&gt;Budget resorts - These resorts include the &lt;a href="http://disneyworld.disney.go.com/resorts/all-star-movies-resort/" target="_blank"&gt;All-Star Movies&lt;/a&gt;/&lt;a href="http://disneyworld.disney.go.com/resorts/all-star-music-resort/" target="_blank"&gt;Music&lt;/a&gt;/&lt;a href="http://disneyworld.disney.go.com/resorts/all-star-sports-resort/" target="_blank"&gt;Sports&lt;/a&gt; resorts and &lt;a href="http://disneyworld.disney.go.com/resorts/pop-century-resort/" target="_blank"&gt;Pop Century Resort&lt;/a&gt;.  Don&amp;#8217;t let the word budget turn you off: these places are actually pretty nice for the price.  They won&amp;#8217;t be as luxurious as the other resorts, but they will be a place to sleep that&amp;#8217;s really clean, has great service, and has bus links to all the parks and Disney stuff.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Most of the conference and surrounding time is in the &amp;#8220;value season&amp;#8221; so room rates should be rather affordable.  The only catch with these resorts is that you don&amp;#8217;t have Monorail access, which is sort of a bummer.  With the Monorail (which runs through tbe main concourse/lobby of the conference hotel&amp;#8230;so cool!) you can just hop on and go to Magic Kingdom and Epcot really easily.  The buses from the other resorts aren&amp;#8217;t too big of a hassle really (only about a 10-15 minute wait max and travel times aren&amp;#8217;t terribly bad), but you can easily get spoiled by the easy access of the Monorail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Off-Disney options&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you stay off-property, you have a &lt;em&gt;ton&lt;/em&gt; of options.  There are star ratings etc. to look for, but if you want to know what&amp;#8217;s really good and really close to Disney World, you only need to look for one thing: The Disney Good Neighbor Hotel rating.  This tells you a few important things:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;It&amp;#8217;s close to Disney World.&lt;/li&gt;
&lt;li&gt;It&amp;#8217;s super nice.  Disney has really high standards of quality and customer service that they check constantly.  You won&amp;#8217;t find a crappy hotel in this program.&lt;/li&gt;
&lt;li&gt;They offer free shuttle services to the Disney property.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;I would suggest picking one of these hotels if you go off-property.  I know that the &lt;a href="http://doubletree1.hilton.com/en_US/dt/hotel/MCOFHDT-Doubletree-Guest-Suites-in-the-WALT-DISNEY-WORLD-Resort-Florida/index.do" target="_blank"&gt;Doubletree&lt;/a&gt; and &lt;a href="http://www1.hilton.com/en_US/hi/hotel/ORLDWHH-Hilton-located-in-the-WALT-DISNEY-WORLD-Resort-Florida/index.do" target="_blank"&gt;Hilton&lt;/a&gt; in Lake Buena Vista are nice, as is the &lt;a href="http://www.radisson.com/orlando-hotel-fl-32836/fllabuvi" target="_blank"&gt;Radisson&lt;/a&gt; near Downtown Disney.  Outside of those, you&amp;#8217;re on your own to discern what&amp;#8217;s good from TripAdvisor and Yelp.&lt;/p&gt;

&lt;h2&gt;Soooo&amp;#8230;&lt;/h2&gt;

&lt;p&gt;When are you booking? :)  &lt;a href="http://magic-ruby.com" target="_blank"&gt;Get your conference ticket now!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have any more questions about travel, please do ping me via e-mail or Twitter.  I&amp;#8217;d be glad to answer anything (or find someone who can).&lt;/p&gt;</description><link>http://omgbloglol.com/post/1723982995</link><guid>http://omgbloglol.com/post/1723982995</guid><pubDate>Mon, 29 Nov 2010 00:29:53 -0500</pubDate><category>magicruby</category><category>travel</category><category>conferences</category><category>cheap</category></item><item><title>Pay no attention to the code behind the curtain: the tech behind tldr.it</title><description>&lt;p&gt;&lt;strong&gt;tl;dr: Thanks for helping me win the Solo Division of the Rails Rumble!  Also, the tech behind this is pretty sweet.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;My last post talked a bit about the story behind the application, but this time, I want to give you guys and gals a little bit of detail on the tech behind the application.&lt;/p&gt;

&lt;h2&gt;The app&lt;/h2&gt;

&lt;p&gt;The application is a Rails 3.0.1 application.  It has 3 controllers and 2 models, with almost 1000 lines of application code.  I&amp;#8217;m making use of about 10 third-party gems, mostly for fetching and parsing tasks.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lar0fpZ6LW1qz4tvk.png" alt="A diagram of the app's architecture"/&gt;&lt;/p&gt;

&lt;p&gt;The general architecture of the app centers around two distinct pieces. The Rails application really just kind of accepts and displays data: the real magic happens in the background jobs (currently powered by &lt;a href="http://github.com/collectiveidea/delayed_job" target="_blank"&gt;delayed_job&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;The background jobs&lt;/h2&gt;

&lt;p&gt;Once a job is fired off, a job runner grabs it and fetches the content.  If it&amp;#8217;s a feed, then the feed is fetched by &lt;a href="http://github.com/pauldix/feedzirra" target="_blank"&gt;Feedzirra&lt;/a&gt;, summarized down (more details on this in a bit), and stored back in the record.  I persist all 3 versions of the feed along with the original content.  I did that because I intended to show the length differences on the page (e.g., &amp;#8220;This feed is 70% shorter!&amp;#8221;), but I didn&amp;#8217;t have time.&lt;/p&gt;

&lt;p&gt;If it&amp;#8217;s a web page, then the content is fetched by &lt;a href="http://github.com/archiloque/rest-client" target="_blank"&gt;RestClient&lt;/a&gt;.  I then use &lt;a href="http://nokogiri.org/" target="_blank"&gt;nokogiri&lt;/a&gt; to extract the main content of the page out.  The algorithm I&amp;#8217;m using is pretty complex and clever, but since it&amp;#8217;s sort of half the &amp;#8220;secret sauce&amp;#8221; of tldr.it, I&amp;#8217;m not going to describe it in detail.  I will say that it uses some things from my own research, some refinements from the &lt;a href="http://lab.arc90.com/experiments/readability/" target="_blank"&gt;Readability&lt;/a&gt; bookmarklet&amp;#8217;s techniques, and some HTML-specific (and HTML5 specific) additions.  It&amp;#8217;s nowhere near perfect, but then again I did built it in 48 hours. :)&lt;/p&gt;

&lt;h2&gt;The summarizer&lt;/h2&gt;

&lt;p&gt;Next, it&amp;#8217;s passed to the summarizer.  The summarizer is largely powered by &lt;a href="http://libots.sourceforge.net/" target="_blank"&gt;libots&lt;/a&gt;, an open-source word-frequency powered text summarizer.  This library works quite well, but I hit the obstacle that it was written in C.  I had planned to just pipe out to its command line utility, but its utility doesn&amp;#8217;t take input from stdin very well (and by not very well, I mean it segfaulted every time).  So, at that point I wanted to just write a Ruby extension or use ffi.  Neither of those approaches worked out (good C programmer, I am not), so I just opted to write my own C shell app to pipe to and get info back from.  The way the summarizer works is to use the Ruby standard library&amp;#8217;s &lt;a href="http://ruby-doc.org/core/classes/Shell.html" target="_blank"&gt;Shell class&lt;/a&gt; (I bet you&amp;#8217;ve never heard of that one!) to pipe out the text content of the page (with some smart additions and such from my code) to my C summarizer with the summarization ratio as an argument to the utility.  It captures the output on stdout (if there&amp;#8217;s an error for any reason like encoding, then it just returns blank) and places that back in the record.  I do this 3 times for each web page and each feed.&lt;/p&gt;

&lt;p&gt;Once the summarized text is captured, then the record is updated by the background job and the action that&amp;#8217;s polled by the user&amp;#8217;s browser returns the right JSON and HTML to update the user&amp;#8217;s view to show that it&amp;#8217;s been fetched.&lt;/p&gt;

&lt;h2&gt;Places to improve&lt;/h2&gt;

&lt;p&gt;I want to replace libots with a library of my own creation.  I wanted to do this during the Rumble (or at least enhance ots&amp;#8217;s output with it), but I didn&amp;#8217;t have time at all.  I&amp;#8217;m still not totally sure which algorithm I&amp;#8217;m going to use, but word frequency doesn&amp;#8217;t work the best in every situation.  I also need to refine the content extraction algorithm, working on more special case parsers (currently there&amp;#8217;s only one for NYTimes and Blogspot blogs).  I see why many of the URL&amp;#8217;s people try aren&amp;#8217;t working, but I didn&amp;#8217;t have a chance to add a second pass algorithm if we miss the content on the first run.  I also want to make the extraction content-aware, since right now it just does some analysis on page structure and loose content detection.&lt;/p&gt;

&lt;p&gt;Anyhow, that&amp;#8217;s the technical background.  Feel free to ask any questions; I&amp;#8217;ll answer the best of my ability.&lt;/p&gt;</description><link>http://omgbloglol.com/post/1381385171</link><guid>http://omgbloglol.com/post/1381385171</guid><pubDate>Sat, 23 Oct 2010 11:03:00 -0400</pubDate><category>rails</category><category>ruby</category><category>delayed_job</category><category>libots</category></item><item><title>From tl;dr to Techcrunch: my Rumble app's story</title><description>&lt;p&gt;&lt;strong&gt;tl;dr - Go vote for &lt;a href="http://tldr.it" target="_blank"&gt;tldr.it&lt;/a&gt; on &lt;a href="http://railsrumble.com" target="_blank"&gt;&lt;a href="http://railsrumble.com" target="_blank"&gt;http://railsrumble.com&lt;/a&gt;&lt;/a&gt;!&lt;/strong&gt;&lt;/p&gt;

&lt;iframe src="http://player.vimeo.com/video/16076843" width="400" height="300" frameborder="0"&gt;&lt;/iframe&gt;

&lt;p&gt;(That&amp;#8217;s the screen cast I was going to post where the &amp;#8220;How it works&amp;#8221; section is now on the page, but I didn&amp;#8217;t have time.  &lt;a href="http://vimeo.com/16076843" target="_blank"&gt;View it on Vimeo&lt;/a&gt;, if you&amp;#8217;d like.)&lt;/p&gt;

&lt;p&gt;So, wow, it&amp;#8217;s really been a wild ride for my Rumble app so far.  I thought maybe I&amp;#8217;d share a little bit about the app&amp;#8217;s story today, and then maybe share a bit about how it works in another entry tomorrow-ish.&lt;/p&gt;

&lt;h2&gt;Idea cometh&lt;/h2&gt;

&lt;p&gt;I never really used RSS until last year.  I knew what it was, why people used it, and so on, but I just figured I&amp;#8217;d rather (a) read things in a visually attractive environment and (b) give ad revenue to the sites that I really like reading.  While I still hold the latter sentiment, I discovered two things.  As I expanded my reading list and started reading more and more blogs and news sites everyday, it became really time consuming to go to each site individually, and only about half of the sites I read are actually attractive (the other half are really ugly).  I also realized that most of the feeds that are worth my time and effort to support actually put ads in their feeds.  So my RSS usage ramped up.&lt;/p&gt;

&lt;p&gt;After using RSS for a while, I realized that while I could get to more information faster, a lot of it (a) wasn&amp;#8217;t worth my time or (b) said a little that was excellent but it was wrapped in a lot of crap.  After suffering with the annoyance for a while, I deleted a lot of feeds from my list, but that wasn&amp;#8217;t working for me either since I really did like reading some of the ones whose signal to noise ratio wasn&amp;#8217;t quite to my standards.  So it dawned on me: there must be a way to dig out what&amp;#8217;s good.  If you could summarize what&amp;#8217;s in the feed, you can see whether reading the full article is worth the effort.  I formulated some ideas about how it would work, played with a few names, and drew up some plans.&lt;/p&gt;

&lt;p&gt;And then that sat there for months.&lt;/p&gt;

&lt;p&gt;But one day when talking to &lt;a href="http://twitter.com/erebor" target="_blank"&gt;a good friend of mine&lt;/a&gt; about news and RSS and such, I shared the idea I had.  He thought it was such a good idea, he instantly bought the domain for me and threatened to lock me in his basement until I&amp;#8217;d finished building it.  Of course, I claimed I&amp;#8217;d try to do it soon, got wrapped up in the holidays and changing jobs, and then forgot about it.&lt;/p&gt;

&lt;p&gt;Until the Rumble this year.&lt;/p&gt;

&lt;h2&gt;The Rumble&lt;/h2&gt;

&lt;p&gt;So the &lt;a href="http://railsrumble.com" target="_blank"&gt;Rails Rumble&lt;/a&gt; rolled around this year, and this idea seemed prime for some 48-hour construction action.  I lost most of my notes from my previous planning, so I drew up new ones and phased everything out for 48 hours.  I made a few choices so that I could definitely fit it into two days:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Decided I would start with RSS feeds and add URL&amp;#8217;s if I had time.&lt;/li&gt;
&lt;li&gt;Picked libots for the heavy lifting on summarization unless I had time to write my own stuff.  &lt;/li&gt;
&lt;li&gt;Picked Apache and Passenger because a StackScript existed for it already.&lt;/li&gt;
&lt;li&gt;Picked MySQL because it was what I was used to.&lt;/li&gt;
&lt;li&gt;Picked Feedzirra for feed fetching because it was easy and worked well.&lt;/li&gt;
&lt;li&gt;I&amp;#8217;d leave optimization (caching, DB indexes, etc.) for last because this is a Rumble app.  It&amp;#8217;s not like you get tons of traffic, right?  RIGHT?&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Some of these decisions were great decisions (Feedzirra being a prime example of that), some of these ended up changing (I &lt;em&gt;did&lt;/em&gt; have time for URL&amp;#8217;s), and so some of them came back to bite me (more on that later).&lt;/p&gt;

&lt;p&gt;So, I built it.  I did not spend the whole 48 hours glued to my keyboard, but I spent a significant portion of my weekend working on it.  I think most people look at the app and think &amp;#8220;gee, that&amp;#8217;s really simple&amp;#8221; but they don&amp;#8217;t see all the code that goes into the content extraction, the preparations for summarization, the background processing, and so on.  So the front end code is quite simple, but the backend is pretty complex (I&amp;#8217;ll discuss it more in another post).&lt;/p&gt;

&lt;p&gt;So I launched the app about 5 minutes before the end of the competition.  I&amp;#8217;d have launched it sooner, but my dj runners were giving me fits and required some extra fiddling.&lt;/p&gt;

&lt;h2&gt;What does it do?&lt;/h2&gt;

&lt;p&gt;The app essentially summarizes text.  So, for example, let&amp;#8217;s say you&amp;#8217;re reading &lt;a href="http://www.guardian.co.uk/world/2010/oct/21/dont-ask-dont-tell-us-appeals-court-stay" target="_blank"&gt;this Guardian story on DADT&lt;/a&gt;.  It&amp;#8217;s fairly long and something I&amp;#8217;ve read a lot of articles on already.  It&amp;#8217;d be great if I could figure out if this says anything new without having to waste time reading a ton of text.  If you plug it in, you&amp;#8217;ll get this back as the medium summary:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;The lifting of a ban on gays serving openly in the US military proved shortlived after a federal appeals court ruled late on Wednesday in favour of granting the Obama administration a temporary delay.&lt;/p&gt;
  
  &lt;p&gt;Although President Barack Obama favours an end to the &amp;#8216;don&amp;#8217;t ask, don&amp;#8217;t tell&amp;#8217; policy in which gays could serve in the military, as long as their sexual orientation remained secret, his justice department went to the courts on Wednesday seeking a temporary delay to allow the military time to prepare for the end of the gay ban, and, possibly, allow Congress to legislate.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;OK, not bad, but nothing new.  Skipped!&lt;/p&gt;

&lt;p&gt;Now, imagine you can do that with almost any page or RSS feed.  With &lt;a href="http://tldr.it" target="_blank"&gt;tldr.it&lt;/a&gt;, you can.  It summarizes the text of articles down to 15%-30% of the original length.  Of course, the algorithms aren&amp;#8217;t perfect (they were built in 48 hours after all and word frequency isn&amp;#8217;t the best summarization algorithm), but that&amp;#8217;s the idea that the app hopes to build on.&lt;/p&gt;

&lt;h2&gt;Aftermath&lt;/h2&gt;

&lt;p&gt;I posted it on Hacker News (like any good Rumble competitor) and tweeted it.  A few people retweeted it, but then I noticed that Robert Scoble (&lt;a href="http://twitter.com/scobleizer" target="_blank"&gt;@scobleizer&lt;/a&gt;) favorited my tweet about it.  &amp;#8220;Hm.  Maybe people will be interested in it,&amp;#8221; I thought.  That was quickly followed by the app hitting the front page of Hacker News, and my first real technical problem.&lt;/p&gt;

&lt;p&gt;You see, we were given a 512MB Linode instance for use with the Rumble.  Serving up normal traffic and traffic from judging wouldn&amp;#8217;t even cause that sort of box to break a sweat.  Unfortunately, as it started getting tweeted around and featured in different places, Passenger and my background workers chewed through the RAM quite quickly, causing paging and serving things really, really slowly.  Once I adjusted those things around, I was finding that it was then hitting the CPU boundary because it was putting so much stress on so few workers.  So I decided to deal with the paging until I could get a bigger box setup.  I setup a 1024MB instance, copied the app over, and pointed the main domain over at that.  Crisis averted for the time being.&lt;/p&gt;

&lt;p&gt;Then &lt;a href="http://twitter.com/nickbilton" target="_blank"&gt;@nickbilton&lt;/a&gt; of the NYT was nice enough to tweet about it, causing another flood of traffic to hit the box.  It actually withstood that storm fairly well, but the way it handled it made me hope it didn&amp;#8217;t get hit with anything bigger.&lt;/p&gt;

&lt;p&gt;Then I got an e-mail from TechCrunch.  &amp;#8220;Great,&amp;#8221; I thought.  &amp;#8220;That&amp;#8217;ll be excellent press, especially when voting opens.&amp;#8221;  So I answered the questions and asked that they please, please hold the story for another day so I could get my box up to speed and fix my stack.&lt;/p&gt;

&lt;p&gt;They didn&amp;#8217;t.&lt;/p&gt;

&lt;p&gt;So, when the TechCrunch traffic came, the box went into total fail mode.  At first, the load overwhelmed it.  Then it seemed to just give up (no resources were being taxed but Apache wasn&amp;#8217;t serving; a restart of the box did nothing to fix this).  Unfortunately I was a Florida Creatives/ORUG meetup that night, so I couldn&amp;#8217;t do anything about it for a while.  Once I got home and realized Apache was being an epic pile of fail, a really nice fellow Rumbler (&lt;a href="http://twitter.com/vertis" target="_blank"&gt;@vertis&lt;/a&gt;) was nice enough to jump in and get nginx going for me in about 20 minutes (would&amp;#8217;ve taken me a few hours easily).  It started serving requests (&lt;em&gt;fast&lt;/em&gt;, might I add), and all was well.&lt;/p&gt;

&lt;p&gt;The app hit Techcrunch JP the next morning without even blinking, and it&amp;#8217;s served up nicely ever since.&lt;/p&gt;

&lt;p&gt;From there, it&amp;#8217;s been featured in a lot of places&amp;#8230;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;The hot list on Delicious&lt;/li&gt;
&lt;li&gt;&lt;a href="http://psfk.com" target="_blank"&gt;PSFK&lt;/a&gt; featured it on their home page&lt;/li&gt;
&lt;li&gt;It lived a little while on MetaFilter (unfortunately that was when I was having server trouble, so they killed the story)&lt;/li&gt;
&lt;li&gt;news.com.au featured it on their Facebook page&lt;/li&gt;
&lt;li&gt;A lot of blogs and such have written posts on it&lt;/li&gt;
&lt;li&gt;Probably a few more I&amp;#8217;m missing (and so sorry if I did miss it!)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;The attention has been incredible and humbling.  It&amp;#8217;s a little hack for me, and it seems a lot of people are interested in it.&lt;/p&gt;

&lt;h2&gt;The stats&lt;/h2&gt;

&lt;p&gt;So, what are the numbers.  Press is great, but if you aren&amp;#8217;t getting users, it doesn&amp;#8217;t matter, right?&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;600,000+ requests served through the app since switching to nginx (about 1,000,000 since the I released the app).  These include AJAX requests and feed requests.&lt;/li&gt;
&lt;li&gt;120,000 page views since switching to nginx (about 160,000 since I launched the app)&lt;/li&gt;
&lt;li&gt;Over 10,000 URL&amp;#8217;s summarized&lt;/li&gt;
&lt;li&gt;Over 3,000 feeds summarized&lt;/li&gt;
&lt;li&gt;Three venture capitalist inquiries&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;And they&amp;#8217;re still growing.  The attention and usage has been very exciting, and I hope moving forward it continues.&lt;/p&gt;

&lt;h2&gt;What&amp;#8217;s next?&lt;/h2&gt;

&lt;p&gt;I don&amp;#8217;t know what next steps are exactly.  I haven&amp;#8217;t quite decided.  Intridea has signaled that they would be open to continuing development on it and maintaining it as one of our products.  That option is attractive since I think it is a really cool product.  I have a lot of good ideas for monetization and further product development (including a battery of immediate fixes I need to get in&amp;#8230;) that could easily turn into a solid product roadmap.&lt;/p&gt;

&lt;p&gt;Then again, I may list it on Flippa and turn it over to a team that I know can really invest a lot of time and interest in it.  I don&amp;#8217;t know how much interest I would find there, but it is something I&amp;#8217;m thinking about.&lt;/p&gt;

&lt;h2&gt;Voting&lt;/h2&gt;

&lt;p&gt;So, &lt;a href="http://railsrumble.com" target="_blank"&gt;it&amp;#8217;s up to vote now&lt;/a&gt;.  The only problem is I&amp;#8217;m not doing so well!  I don&amp;#8217;t know if I&amp;#8217;m being trolled (I was at 3.4 and after one of the earliest refreshes in the competition, I obviously got a slew of 2/2/2/2 or lower votes for some reason) or (more likely) maybe the app isn&amp;#8217;t as good as I thought it was.  Either way, I&amp;#8217;d really appreciate your votes.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;ve been extremely humbled by how people have spoken of my app, and I hope people continue to use it.  Let me know if you have any ideas or feedback.  Next up is a post on the more technical aspects of the application.&lt;/p&gt;</description><link>http://omgbloglol.com/post/1373695996</link><guid>http://omgbloglol.com/post/1373695996</guid><pubDate>Fri, 22 Oct 2010 10:55:04 -0400</pubDate><category>tech</category><category>tldr.it</category><category>tldr</category><category>rumble</category><category>railsrumble</category><category>rails</category></item><item><title>$3 off The Rails Upgrade Handbook ENDS TODAY</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ky0xr8yGbA1qz4tvk.png" alt="The Rails Upgrade Handbook is on sale!"/&gt;&lt;/p&gt;

&lt;p&gt;In celebration of &lt;a href="http://weblog.rubyonrails.org/2010/8/29/rails-3-0-it-s-done" target="_blank"&gt;the release of Rails 3 stable&lt;/a&gt;, I&amp;#8217;m running a sale on my &lt;a href="http://railsupgradehandbook.com" target="_blank"&gt;upgrade handbook&lt;/a&gt;.  Be sure to get it soon because the sale ends &lt;strong&gt;today&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://railsupgradehandbook.com" target="_blank"&gt;Click here to get you some sweet, sweet discounted eBook action!&lt;/a&gt;&lt;/p&gt;</description><link>http://omgbloglol.com/post/1048093052</link><guid>http://omgbloglol.com/post/1048093052</guid><pubDate>Wed, 01 Sep 2010 10:45:56 -0400</pubDate></item><item><title>Ruby Hoedown MMX is open for business (and talk submission!)</title><description>&lt;p&gt;Maybe one of these I&amp;#8217;ll actually, seriously regularly blog.  I had a few entries almost finished for Rails 3, but they now require some revision, so I&amp;#8217;ll try to polish those up soon.  I also have a few in the hopper related to tech writing, which should prove fun and interesting for all parties involved (OK, they&amp;#8217;ll at least be informative!).&lt;/p&gt;

&lt;p&gt;But my lack of blogging isn&amp;#8217;t the reason that I am, in fact, blogging today.  No, my friends, today I am announcing that &lt;a href="http://rubyhoedown.com" target="_blank"&gt;Ruby Hoedown MMX&lt;/a&gt; (that&amp;#8217;s 2010 for those of you who don&amp;#8217;t follow Roman Numerals™ very closely or may still be running on a Pentium II) is open for &lt;a href="http://rubyhoedown.eventbrite.com" target="_blank"&gt;registration&lt;/a&gt; and &lt;a href="http://bit.ly/9jn1ec" target="_blank"&gt;talk submission&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://img.skitch.com/20100628-b49ppagjscn1x229ebcy4i6wtg.jpg" alt="Ruby Hoedown 2010"/&gt;&lt;/p&gt;

&lt;p&gt;We&amp;#8217;re holding the conference in Nashville at the &lt;a href="http://www1.hilton.com/en_US/hi/hotel/BNANSHF-Hilton-Nashville-Downtown-Tennessee/index.do" target="_blank"&gt;Downtown Hilton&lt;/a&gt; on September 3-4, 2010, and the price will be a wallet-shredding, budget-busting, GDP-increasing, third-world-country-enriching &lt;strong&gt;$0&lt;/strong&gt; (that&amp;#8217;s right, &lt;strong&gt;FREE&lt;/strong&gt;).  We had so much fun last year going free, we decided to go ahead and do it again this year.  But we&amp;#8217;re not just throwing old hat around this year; you&amp;#8217;ll have to keep your eyes and ears tuned for some new things we&amp;#8217;re adding and some old things that are coming back!&lt;/p&gt;

&lt;p&gt;So why not mosy on over to the &lt;a href="http://rubyhoedown.com" target="_blank"&gt;conference website&lt;/a&gt; and &lt;a href="http://rubyhoedown.eventbrite.com" target="_blank"&gt;register up&lt;/a&gt; or &lt;a href="http://bit.ly/9jn1ec" target="_blank"&gt;submit a talk&lt;/a&gt;?  &lt;strong&gt;The CFP closes on July 2, 2010, and talk selections will (probably) be made that weekend!&lt;/strong&gt;  And if you register now (and get one of the next few slots), you&amp;#8217;ll be able to have your say about the talks that we select (more on that soon).&lt;/p&gt;</description><link>http://omgbloglol.com/post/745751259</link><guid>http://omgbloglol.com/post/745751259</guid><pubDate>Mon, 28 Jun 2010 10:18:10 -0400</pubDate></item></channel></rss>

