May 2013
1 post
1 tag
View this repository in my editor, and I don't...
My current job has me doing a lot of node.js. The documentation story in most of the community is very much “read the source”. This is a little bit of a contrast to the Rails community, where, even in Rails 1.2.3 (when I entered the scene) I rarely had to dig through source code to find an answer to a question. Anyway, I find myself reading a lot of node package code. Viewing the...
May 14th
April 2013
1 post
Open Source
I often find myself doing open source work. Mostly this is small improvements to already existing projects, but sometimes there are projects I’ll open source from scratch. However, most of my work is using an open source project, and find a way to improve it. This improvement could be a bug fix, or better error messages, or improvements I’ve needed to get my job done. Sometimes clients even pay...
Apr 10th
1 note
March 2013
1 post
1 tag
(natural) Handwriting Recognition on your iOS...
Goal: Creeping towards the paperless lifestyle I’m trying to get into the paperless lifestyle this year. I’m making small changes to facilitate this. I keep a paper notebook for scratch writing while I work. Mostly the notebook contains things I need to remember for the next 5 minutes, but can forget afterwards. Sometimes it contains more permanent notes: TODO times, thoughts,...
Mar 23rd
January 2013
1 post
We need to celebrate those with 20 years...
A recent tweet by a SF tech recruiter put down those with 20 years experience as “[it]… only means you’re forty” Instead of decrying 20 years experience (“Go home, old man!”) we should celebrate it. Because 20 years experience as a computer programmer means: 20 years of too much stress (At least once a year or so I’m on projects that require me to work at...
Jan 25th
December 2012
1 post
Dec 18th
November 2012
1 post
1 tag
Nov 2nd
October 2012
2 posts
Will Programmers continue to have such high wages?...
Yes, because there’s always some new thing that’s super hard. No matter how much we advance the craft there’s always a new challenge in front of us, no matter if we conquered the previous challenges or not. Take a flip answer to that question from various eras of computing: 1970s: “Yes, because structured programming” 1980s: “Yes, because event loop and/or...
Oct 28th
Why "just teach the unemployed to program" isn't a...
I hear this argument a lot: Oh, you’re unemployeed or can’t find a job? Just learn computer programming - I hear Microsoft is gagging for people. As a professional computer programmer, let me weigh in: I spent 2 years during high school learning to program after school. I started consulting part time during my freshman year of college for a local programming consulting shop....
Oct 2nd
September 2012
4 posts
1 tag
Replicating Github Launch with Launchbar (well,...
Github Launch is pretty cool - a command line interface for Github. There are two things bad about it: It’s dog slow on Firefox It’s entirely Javascript based - I can’t build a tool that sends a command to Github launch outside the browser. I worked around issue one by typing my command in another window, pasting the result into Github Launch, then hitting return. This kind...
Sep 28th
2 tags
Embedding images into Github Tickets
It’s hard and annoying to embed images into Github Markup renders. The great thing is that since everything in Github is markdown, this trick will work everywhere. The trick is to use an external host to host your images, then link to them by putting a ! in front of a normal Markdown link statement. But, ugh, external host, right? NO Here’s how to do it step by step: Put...
Sep 27th
1 tag
Sep 27th
1 note
1 tag
Searching your Mutt mail on OS X
I switched to Mutt about a year ago. Mutt is pretty good, but there are a lot of convenience that you give up. One of these conveniences that you give up with out-of-the-box Mutt is really good, inter-mailbox searching. Sure, you can use a quick search feature to find messages in the current mailbox, but sometimes I’m not sure which mailbox I put my mail. (You see, I organize my mail in...
Sep 17th
August 2012
42 posts
1 tag
Forwarding sitename.dev to a remote host (for...
I do all my Ruby on Rails development with Vagrant, keeping separate virtual machines for each project I may be working on. I use SSH magic to forward the proper ports up to my server. I’ve been using this setup for 18 months now, typing in localhost:3001 to visit my Rails server on my development machine. Enter pow: pow’s goal is to make it really easy to visit a project server on...
Aug 20th
1 note
Sorry for blowing away history...
Today I decided to tag my blog posts, so I could find them later. Unfortunately that had an side affect: all the posts look like they were posted today. But they weren’t. Posts from today onward will be tagged so I can find them, so this shouldn’t happen again.
Aug 9th
2 tags
Creating a new Python Package (and putting it up...
Creating a new Python package OMG this is easy, why haven’t I done this before? NOTE: you can ignore github-tools — really that is meant to only help the gh_pages documentation generating. And, in fact, we have some pretty awesome tools without it!!! $ paster create -t basic_package PACKAGE_NAME * hack hack hack* * hack hack hack * Test install it somewhere with: $ pip -e...
Aug 9th
2 tags
Creating a new Ruby Package (and putting it up on...
So, in the sprit of the previous article on this blog, I’m going to document how to make a Ruby package and put it up on RubyGems. Create your project. You can use Jeweler for this, or newgem. I like newgem, because I’m familiar with it. The instructions in this article assume newgem infrastructure * hack hack hack* * hack hack hack * $ rake check_manifest. Your manifest...
Aug 9th
2 tags
Lessons learned over the last 72 hours
My current project is crunching hard towards a release. This weekend was release weekend. I learned the following things: It’s important to know when you’ve hit 0 productivity. Sign of this: looking at your Skype windows, then switch Spaces to GitHub, then switch spaces back to your Skype windows, then switch Spaces back to Github…. and repeat. Congrats - you’ve reached...
Aug 9th
2 tags
Churn
I believe I have stumbled upon the very definition of churn: The Story For a certain project of mine, I originally implemented the system to support many “legal letters per case”. Fast forward a month later, where we are told by business to only support one letter per case. After questioning them explicitly and incessantly about “are you sure you’ll only ever send one...
Aug 9th
2 tags
Expectational Debt
I was listening to 5by5’s Back to Work’s latest “Expectational Debt” episode. One great way to get a lot of expectational debt? Work 60 hour weeks for 8-10 weeks straight. And this expectational debt, in my case, involves stupid stuff that I’d be able to do with a normal 40 hour week. Like “hang out with my wife more”, or “answer personal email better”. It’s...
Aug 9th
1 tag
How do you know if you have a good programmer?
So there’s this question is management: “How do I know if this coder I have is any good?”. The answer is simple: Perform a 360 degree review. Get opinions on this guy from other developers, manager the programmer works with, etc etc. Now that you have that baseline of information, and have many opinions from technical peers / team members, sit down with the coder and watch...
Aug 9th
1 tag
What makes a good programmer?
So, I guess this is part II to my previous article “How do you know if you have a good programmer?” On Hacker News there was an interesting comment: - Can they get things done? - Can they act on their own initiative? - Can they think 2 steps or more ahead? - Can they code? Can they code well? - Can they think and think well? Can they think *independently*? I...
Aug 9th
2 tags
Fighting with Ajax
I just had a very frustrating day fighting with Ajax. I thought I’d document some of these things. Does your GET or POST hit the server but you see no response data come back? I saw this because I was debugging this in a separate file (using Open File in my browser), outside my (Rails) project. WTF I thought Turns out that even though I thought it hit the server, it was returning no data...
Aug 9th
2 notes
2 tags
My mobile setup - Rails development on the Road
Introduction The last two weeks I’ve been on my honeymoon. However, there is a disadvantage of going on vacation when you’re self employed - that means no money is coming in either. To keep some small amount of money coming in I put in 2-3 hours a day of work, during downtime. This happened to work for the clients involved, so it all worked out. However, I knew I didn’t want to lug my main...
Aug 9th
1 note
2 tags
Fighting with Ajax, Redux
My previous blog post was about me tearing my hair out with a JSONP request. All afternoon, acutally. Want to avoid that same level of pain? Take a look at a sample repo I just put up on Github that uses (the very helpful) Roberto Decurnex’s Rack JSONP Middleware. Which, once Roberto told me how to set it up, worked great Ahh yes, the sample repo: Rack JSONP example. Look through the...
Aug 9th
2 tags
Sometimes you ARE going to need it
So one of my clients is a typical “iPhone app with a web backend” type project. I ask one of my guys to give me a web backend. If I had done it, I would have implemented the web backend in Padrino, for Ruby, and had everything return JSON I like Padrino in this case because it’s a very small framework, for writing small web apps - like APIs. I believed that A bunch of views...
Aug 9th
3 tags
Creating a gem that works on both Rails 3.0.x and...
Today I was trying to create a Rubygem that can be used with Rails 3.0.x or Rails 3.1.x. I bundle gem created the gem, and got busy figuring out how to specify my dependency on two version numbers. Introducting the spermy operator The Spermy operator in a .gemspec file lets you specify a dependancy where you don’t care about certain levels of version numbers. For example,...
Aug 9th
3 tags
SASS variables and the Rails 3.1 Asset Pipeline
I’ve been playing with Rails 3.1 lately, and ran across a leaky abstraction in the way the new Asset Pipeline handles SASS, variables and mixins in particular. In my project I wanted to create a SASS file with global settings. For example: $tip_background_color: #AFFFCB; $border_style: thin black solid; $shaded_background: gray; These SASS variables I could then reference from other...
Aug 9th
6 notes
1 tag
Presenter Pattern, Rails 3 and html_safe
I’ve been playing with the Presenter pattern lately, and ran across an issue: it felt like I was writing a lot of HTML in a .rb file. First off: there doesn’t seem to be any real resources into getting into Presenter patterns in Rails. Or rather, there are a few from 2008, but nothing modern. (Except draper, which I think is too complex. Or I don’t yet understand why it needs...
Aug 9th
2 notes
1 tag
The 99%
Megan McArdle’s piece on the 99% has an excellent graph of jobs vs unemployeed. I have two questions Where did these numbers come from? Are they the official unemployment numbers (U-3), or the (probably more accurate) U-5? Why does the “Number of Unemployeed” graph go up so steeply in 2008 to (about) mid 2009? These are the things I’d like to know
Aug 9th
1 tag
Presenter Pattern and rails: my workflow, gemified
In the Presenter Pattern, Rails 3 and html_safe I made a promise: I need to spend some time and talk more about my structure for Presenters, but that’s fodder for another article. Today I started a new Rails app for a client, and wanted to pull in my work with presenters. So, the answer was either copy and paste all my code into this new app, or write a gem. So, gem it was:...
Aug 9th
1 tag
Using Foreman to manage your (development only)...
Often developing Rails apps I need several things running at the same time. Rails server, beanstalkd, background processor etc. This is not a new problem, and the Foreman gem handles this very well. Most of my deployments are on Heroku. Heroku gives me easy scaling for early stage startups, letting my customers defer the harder deployment problems until they really have to. Heroku gives my...
Aug 9th
2 tags
How to get people to work for free on your project
A post on Reddit’s r/forhire has gotten some attention in that community over the last day or so. The basic premise is: “Some people don’t want to look at jobs offering only equity compensation”. Including me. I’ve written about this before, but I am Not your perfect elephant. I’m probably not going to work crazy hours and be super first-love passionate about...
Aug 9th
1 tag
A brief history of homosexuality in the UK (and...
My wife brought this clip to my attention today: Little Britain: The only gay in the village It’s a clip from the BritCom Little Britain. The plot is that one man thinks he’s the only homosexual man in the village, but lo and behold, there’s a new person in town - a homosexual male hairdresser. Wow. To me this seems to be on par with a German sitcom bit about the only Jew...
Aug 9th
3 tags
Writing tests
Sometimes I feel bad when writing tests for a bit of functionality ends up taking “so much time”. Then I think about how long it would have taken to get right without tests. Not just time as in hours to implement, but calendar time involved. You do it once, submit it. The client says “this doesn’t work”, and you fix it. And usually you do this pattern at least once. Now, each...
Aug 9th
3 tags
Writing behaviors
I’m a big fan of behavior driven development. I like getting a vague ticket, sitting down in front of the product manager and having a conversation. Say we are building a banking application: Me: “It says here the system should find duplicate records. What do you mean by duplicate?” Them: “Any record with the same amount and made on the same date” Me:...
Aug 9th
2 tags
Using Mutt on OS X - tips and tricks
Introduction A few months ago I switched to Mutt as my email client. I used my previous email client for 14 years, and had accumulated 150,000 messages. Yes, I had been using the same email client since 1997. Since then a lot has changed in the online world: the rise of IMAP, Gmail making webmail a viable first option for a lot of people, etc. Some of these changes my old email client...
Aug 9th
2 tags
1Password Hint (Because I'm not just about...
I like to complain about things, but I have to do a tip today. Quickly. I use 1Password a lot. I’ve used 1Password since 1970 on my AT&T Unix machine. Ok, maybe not that long. But really long. Some websites have acquired multiple passwords that I’ve stored in 1Password. Maybe because some website’s policy is to make you change you passwords once every 6 months,...
Aug 9th
2 tags
Ryan's Tech Tools for newborns
On Twitter I mentioned that being a parent of a newborn has shown me how many iOS devices I actually need in my life, and that the answer is “3-4”. In this entry I’m going to (quickly) explain what I mean. My current “happy baby” make up, hardware wise is: 4 iOS devices (2 iPhone 3GSes, 1 iPad, 1 iPod Touch 2nd Gen) 1 iHome radio/speaker set. The iPod Touch is...
Aug 9th
2 tags
An interesting property of Story Points (vs hour...
I’ve moved as much of my consulting terminology away from the word “estimate” as I can. Why? Because “estimate” is often conflated with “a guarantee of how long it will take”. Imagine this conversation: Me: “I estimate it will take 4 hours to implement this feature” Them: OK (Me goes and does the work. It’s harder than I...
Aug 9th
2 tags
Definitions matter: on "Agile" and "Quality"
I was reading Waterfall’s Demise and Agile’s Rise, and it made me think about the definition of words. I’d wagger that if a developer goes on 100 interviews, that 98 of those companies will say they are Agile. The other two companies will remain silent on the matter, because Agile “what developers crave”. (Like Brawndo: It’s got what plants crave) What is important...
Aug 9th
1 tag
The Talent Crunch: Not where you expect it
The Talent Crunch - not where you expect it There’s a talent crunch in technology today, that much is true. Everyone says they can’t find enough rockstar/ninja coders for their San Francisco based startups, paying slightly less (or a lot less) than market rate for some percentage of equity, where engineering is expected to work 60-80 hours a week. All while non-technical cofounders...
Aug 9th
1 note
1 tag
The talent crunch, again (or: employeers - think...
I’ve written about the talent crunch before talent crunch: not where you expect it, but today I had another thought. Employeers: Be. Flexible. I had a call from a company today that started out with, “Want to move to NYC?”. I declined and they ended the interview 2 minutes later. I partially feel bad - I try to work with people as much as I can, and maybe I gave a false...
Aug 9th
1 tag
It's hard to install Rails (on OS X)
Recently the Rails community got their panties in a wad about the Kickstarter for Rails.app. I disagree with Yehuda’s methods, but I do agree that there’s a problem. Follow me down the path of installing Rails on an OS X machine, in the eyes of a newbie: Hmm, I need Ruby 1.9. OS X comes with Ruby 1.8. Ok, umm, how do I build 1.9 on OS X? Oh, people are pointing me at ruby-build or...
Aug 9th
1 note
2 tags
Shipping software on a crunch schedule (One of my...
AFter the post about Scaling Draw Something, well it’s your typical story about startup crunch. On Twitter, @qrush says: “…why is this a badge of honor?” I’ve been in those places before, and I’d like to write about one such experience here: Management/the customer set a hard deadline of Valentine’s Day, 2011 to roll out the completely rewritten version...
Aug 9th
2 tags
Story of Rickey
Let me get political for a moment. The political landscape has been transformed with talk about the character Julia For those of you who don’t think it’s bad out there for grads, let me present another character, Rickey. Rickey, a young lady just graduating high school, decides to go to college for management. The economy’s starting to get poor, but a solid business degree...
Aug 9th
2 tags
The Three basic Startup Salary Ranges
This was originally going to be a comment on Hacker News on this thread, but there’s too much cognitive dissidence to overcome so I’m posting it here. It seems to me there are three basic “startup salary ranges”: Very Good. Less than market rate, but with equity No pay, but with equity. The Very Good is an interesting market force right now. You expect the best...
Aug 9th
2 tags
Every Startup is Bootstrapped (or: raising, and...
In one way every startup is bootstrapped - everyone has a number of hours they can afford to bet on the company before something else comes in the way. You can see this to the extreme in early days, sweat-equity based, startups, but it’s not just a symptom of that method of work. Be that “Well, I really need some money this month to pay rent”, or “I’m doing this...
Aug 9th
1 tag
You don't have to learn how to code (but you can...
There’s a blog entry called: Please don’t learn to code that has caused quite a stir. The basic point is the author disagrees with the latest fad, calling “2012 the year to learn code”. Some responses to the entry: Please don’t become anything, especially a programmer JEG2: “[The mayor]… said he was going to learn something new” JEG2: “that...
Aug 9th
1 tag
May 31, 2075 - Victory Wilcox, journal entry
A vision of what San Francisco looks like in 2075, when Big Startup leaves SV like Big Auto (effectively) left the Rust Belt Today I discovered that my grandfather kept a diary. Not a very big one, and not very often. Files encrypted with consumer grade encryption of the day, but the house computer cracked it easily enough. Interesting stuff. The entries in the middle were the most interesting...
Aug 9th
1 tag
Interesting startup math
I did the math today. If I entertain 12 pre-funded startups a year, and give each 30 hours free of work, and do this every year for 10 years… I’ll have worked on 120 projects and given away in the neighborhood of $300,000 to $500,000 worth of work. That suddenly sounds like a *lot* of risk. It’s also about $30,000 to $50,000 worth of income per year that I’m not making....
Aug 9th