Tuesday, December 29, 2009

No New Languages In 2010; New Businesses Instead

Last year I posted No New Languages In 2009; New Habits Instead. This is the same thing. I'm not doing the Pragmatic Programmer thing of learning a new language every year; this year I'm going to launch a bunch of small businesses, just like I did earlier this month.

Some links in this blog post are affiliate links, which pay small sales commissions.

Technically, in fact, I launched a secret micro-business in November as well. Imagine if I go so freaking crazy with this that I aim to launch a new business every month. If I do, so far I'm two for two.

Monday, December 28, 2009

Tweet Tweet, Bitch! Tweet Tweet

Sunday, December 27, 2009

Schneier Yes, TSA No

I wish that, just once, some terrorist would try something that you can only foil by upgrading the passengers to first class and giving them free drinks.

Book Review: Ruby Best Practices

This is an excellent book.

Some links in this blog post are affiliate links, which pay small sales commissions.

Ruby Best Practices is a book I wish I had been able to read back in 2005 and 2006, when I started learning the language. Ruby gives you near-absolute freedom; with all those options, finding your feet can take some time. "Best practices" might carry a corporate overtone in some ears, but this book comes straight from the heart of the Ruby community (unlike some of O'Reilly's other Ruby books).

Highy recommended.

1938, Chicago; Duesenbergs, Ocelots, And Silver Nail Polish

Here's a Duesenberg:

Here's an ocelot:

Here's silver nail polish:

And here's a memory of Chicago in summertime 1938:

I climbed into the chair. The dwarf was slapping polish on my Stepsons. A thin stud with at least a half a grand in threads on his back took the other chair. He was wearing silver nail polish. He was reeking with perfume.

A gleaming black custom Duesenberg eased into the curb in front of me. The top was down. My peepers did a triple take.

A huge stud was sitting in the back seat. He had an ocelot in his lap dozing against his chest. The cat was wearing a stone-studded collar. A gold chain was strung to it.

He was sitting between two spectacular high-yellow whores. His diamonds were blazing under the street lights. Three gorgeous white whores were in the front seat. He looked exactly like Boris Karloff in black-face.

Some links in this blog post are affiliate links, which pay small sales commissions.

Iceberg Slim pimped, hustled, stole, lied, tricked, got tricked, and spent time in prison. When he was young he did a lot of reading in prison and when he was old he did a lot of writing in prison. For all his crimes, he was a good man, and I say that because he hardly ever used an adverb, and adverbs are wicked things.

Just kidding. Like everything Slim wrote, Pimp is amazing, yet there are parts more horrifying than anything by Stephen King, because the horror in Iceberg Slim is all stuff that really happened to people. Iceberg Slim lived in the ghetto as a black American before our civil rights movement took place. It was not a good place to be. He rose above the ghetto, from time to time, for very short periods, but he didn't do it by being nice. It was a less a matter of rising above the ghetto than one of lifting the ghetto itself higher up.

However, it's one hell of a read.

Friday, December 25, 2009

Does Paul Graham Read Hacker News?

This post is an excerpt from the much longer post "Blogs Are Godless Communist Bullshit." I'm posting it seperately so that I'll be able to refer to its ebook research with distinct links. The "Godless Communist" blog post is a little too big for that purpose.

Paul Graham recently wrote:

Publishers of all types, from news to music, are unhappy that consumers won't pay for content anymore. At least, that's how they see it.

In fact consumers never really were paying for content, and publishers weren't really selling it either. If the content was what they were selling, why has the price of books or music or movies always depended mostly on the format?

The emphasis is mine.

I emphasize those sentences because of a recurring theme discussed on Hacker News: downloadable ebooks. One interesting thing about downloadable ebooks is that price has nothing to do with format. Another interesting thing about downloadable ebooks is that people have been discussing the hell out of them on Hacker News, Paul Graham's news site.

I believe the discussion first came up with regards to an ebook on parrots - parrot care, parrot feeding, making your parrot happy, and training your parrot to talk - which pulls in $700,000 a year for a guy in India who doesn't even own a parrot and hired somebody else to write the book. Since that first post, the theme keeps popping up again.

Polly want some Benjamins

Of course part of the interest is in the simplicity of the business model. Consider JavaScript Performance Rocks! and Getting Real. If you've done well on the Web, there's probably an ebook worth writing in the story of that. You build a web page, you write a book, you add a shopping cart, you're done. But the ebook discussion on Hacker News mostly centers around the money, and there's a lot of money.

People pay astounding amounts for ebooks and other similar downloadable information products. Gamblers will pay $97 for a 20-page ebook on somebody's allegedly foolproof gambling system (although they shouldn't). Video courses run to four and five figures - all for the ability to watch a small number of online videos. There is absolutely no connection between price and format in that field.

Which begs the question, does Paul Graham read Hacker News?

He asks, why has the price of books or music or movies always depended mostly on the format? - but it just ain't so.

He goes on:

There have always been people in the business of selling information, but that has historically been a distinct business from publishing. And the business of selling information to consumers has always been a marginal one. When I was a kid there were people who used to sell newsletters containing stock tips, printed on colored paper that made them hard for the copiers of the day to reproduce. That is a different world, both culturally and economically, from the one publishers currently inhabit.

People will pay for information they think they can make money from. That's why they paid for those stock tip newsletters, and why companies pay now for Bloomberg terminals and Economist Intelligence Unit reports. But will people pay for information otherwise? History offers little encouragement.

Again: does anybody believe that they will make money by training their parrot to talk? The sheer number of compelling counter-examples to Graham's argument boggles the mind. The information product marketplace Clickbank.com reports its current client earnings at well over $1.4 billion. Fuck history; Clickbank offers all the encouragement anybody could need. No matter how insecure you might feel, $1.4B will help you get over it.

To get an idea how big the blind spot is here, understand: there isn't just a market for ebooks. There's a market for ebook businesses. People set up these businesses, turn a profit, and then sell them on sites like Flippa.com. Then they write ebooks about it.

Here's search results on Flippa.com for web sites about Mafia Wars (the Facebook game). The listing includes a web site which sells an ebook about winning Mafia Wars. This web site was netting $7,000 per month when it sold for $50,000.

Guess how much effort it takes to maintain?

The ad for the site's sale answers that question:

I can honestly say I spend less than an hour a week on this site.

The site has been hosted on Hostmonster, along with all my other domains, which costs me $4.95 a month. Bandwidth for the site is about 50 GB/month. The two videos are hosted on Amazon Web Services. The cost for video hosting was $47 in August and $79 so far in September.

And Paul Graham seriously believes that "history offers little encouragement" for the existence of content markets? The history of September 2009 kills his argument! How far into history was this guy looking? People have been successfully marketing information since at least 1928, when Napoleon Hill launched the Law of Success home study course with Andrew Carnegie. That's 81 years of historical encouragement.

Law of Success was about making money - fair enough. But people pay for lots of information that they can't make money from - everything from parrot care to psoriasis cures. I myself bought an ebook on making gold in World of Warcraft and learned a trick that made me Warcraft rich almost instantly. The ebook cost me less than an expansion pack and added a lot more fun to the game.

Some links in this blog post are affiliate links, which pay small sales commissions. Polly want some Benjamins.

I guess that technically qualifies as buying information which can make me money, although it's a stretch, but consider another niche: people who want to get back together with their ex. So many ebooks exist on this topic that review sites exist which compare them all. And it's not hard to see why. Some relationship problems are difficult to solve.

Does this seem like an easy problem to solve? It sure looks like a doozy to me. Faced with trouble like this, you might well resort to an ebook. You might need more than one. (And in fact, if you're looking to decide which one you need, there's a profitable business model in just assisting that decision-making process.)

A note for Warcraft fans: I would love to give you an affiliate link to sell the awesome ebook that got me my ducats. The original "Godless Communist" blog post saw over 15,000 visitors, and a good ad for a Warcraft product might have made me a bunch of cash. But I have no idea which ebook it was. I bought it in like 2005; I don't have that computer any more. I've googled the hell out of this thing and I can't find it anywhere. I do however plan to start playing Warcraft again and review a ton of these ebooks to find out which the best ones are, and if you want to know about that when it happens, just click here to let me know.

Tuesday, December 22, 2009

For Disqus, not a real blog post

Sorry real readers, it's just an easy place to put it.

You e-mail me when I post a comment through your system. I complained about this and you bothered me on Twitter about it. I don't appreciate that - that's two interruptions. But I responded and told you what was up - and you did nothing.

For weeks, even months, I avoided commenting on blog posts that used Disqus. But eventually, I made the mistake of commenting on one. I got the stupid e-mail again, so I set up a filter in Gmail to automatically trash anything from your domain. I tweeted about it, deliberately not using @disqus so I wouldn't get yet another interruption from you.

But I got that interruption anyway, so when you asked me what was up, I said "same thing as last time," and you said nothing.

So I marked you as a spammer on Twitter and you're blocked from contacting me.

Nothing personal but I value my time and I don't want to deal with a web app that fails to.

You offer the option to unsubscribe by doing nothing, but not the option of systemtically unsubscribing by clicking an unsubscribe link. I should be able to systematically unsubscribe from all your spams, and the law may even require that. I am not a lawyer, but I know one thing for sure: I'm not hearing from you any more.

Cop Admits To Pulling Gun In A Snowball Fight

Sunday, December 20, 2009

Friday, December 18, 2009

Thursday, December 17, 2009

Mouse Guard

Highly recommended.

affiliate link

Yes It Has

the auteur tradition has been fused with the industrial approach to film-making that was common practice in Hollywood before the war

DEPRECATION WARNING: require "activesupport" is deprecated and will be removed in Rails 3

You might see this from time to time. Here's the ActiveRecord variant:

DEPRECATION WARNING: require "activerecord" is deprecated and will be removed in Rails 3. Use require "active_record" instead.. (called from /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/activerecord.rb:2)

For instance, in context:

<imac of doom:gilesgoatboy> [12-17 09:27]
↪ ruby helpers/browsers_helper_test.rb
DEPRECATION WARNING: require "activerecord" is deprecated and will be removed in Rails 3. Use require "active_record" instead.. (called from /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/activerecord.rb:2)
Loaded suite helpers/browsers_helper_test

Finished in 0.000193 seconds.

0 tests, 0 assertions, 0 failures, 0 errors

The culprit's easy to find, partly because I highlighted it. /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/activerecord.rb:2 means line 2 of /opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/activerecord.rb. So you open up that file with sudo and comment out line 2.

1 require 'active_record'
2 # ActiveSupport::Deprecation.warn 'require "activerecord" is deprecated and will be removed in Rails 3. Use require "active_record" instead.'

You need to do this with ActiveSupport too - in fact, until I do some hacking, this is the only way to use my password gem without ActiveSupport driving you crazy (assuming you're a neat freak). In my opinion this is overzealous - if you, in your external code, do the right thing and require 'active_support', you still see a message warning you to require 'active_support'. You also can't disable it with ruby -W0, the way you can with regular Ruby warnings. However, it's very easy to fix, and it definitely gets the message out.

By the way, if you're wondering why on earth I have my Ruby gems in /opt/local, even though it's 2009, it's not actually my machine, and I'm going to fix that at some point. Likewise, my password gem predates 1password, which is probably a superior option today. However, it's just an example; any Ruby file which uses ActiveSupport as a gem (as opposed to via rip) will encounter the same phenomena.

Tuesday, December 15, 2009

30 Rock = The Muppet Show

Tina Fey is Kermit.

The guy with the hat is Animal.

Jenna is Miss Piggy.

Tracy is Fozzie.

Kenneth is Scooter.

After that the pattern breaks down a little. Jack Donaghy is the biggest exception, a hybrid of Scooter's old man and the two old guys in the back who make fun of the show. The bald guy is a hybrid of Rolf and Scooter.

Saturday, December 12, 2009

Wednesday, December 9, 2009

One Blog Post, Five Business Models

My recent post Blogs Are Godless Communist Bullshit used five different business models. All five succeeded to some degree.

1. Ruby Row Ads

I'm kind of surprised nobody called me on this one. Even the unusually lucid criticism on Reddit didn't call me out explicitly on this obvious ploy. The upper right-hand corner of my blog showcases a small ad from Ruby Row, which uses a traditional model of cost-per-impression (CPI) advertizing.

If you're selling CPI ads, you want traffic. I explained in the post how this compromises TechCrunch's coverage, and then used TechCrunch's tactic to skyrocket my traffic. The post got over 13,000 pageviews, which is a lot for me. The best part was, I named the post after a Penny Arcade comic (included in the post) about trolling for traffic, and then trolled for traffic by condemning people for trolling for traffic. (All in the context of a blog post about why people shouldn't write or read blog posts, which more than 12,000 people decided to read.)

This is probably what inspired one Reddit commenter to say "this one quite possibly is right at that triple point of blog matter where awesome, bullshit, and satire all meet."

2. Affiliate Ads (Links)

I packed the post with affiliate links to ebooks, to Amazon.com, and to the diet/health program that enabled me to lose 75 pounds, improve my blood pressure, yadda yadda yadda. The funny thing is that the Reddit coverage did spot this, and went all ballistic/hateful about it, as if it's impossible to want to help people and make money at the same time. I suppose the counter-argument is that no man can serve two masters, and any altruism mixed with profit will inevitably have to choose one or the other as its primary purpose, but I think that's kind of a moot point. The primary purpose of the blog post was entertaining me, and both profit and altruism were already playing second banana to entertainment value.

Anyway, the affiliate ads worked great. Also, the blog post did a great job at entertaining me. And honestly, as somebody who probably owes his life to this health program, I can't even describe how good it feels to see people buying it.

3. Consulting

The post also sold membership in a career coaching program. I've blogged before about how I believe consulting is a terrible business model, but I think this particular bit of consulting is going to be very interesting and rewarding. It also kinda hits that profitable altruism paradox point, in that I'm showing people how to have a better career, so there's a certain feeling of helping others.

I'm going to keep details of my career consulting program private, on the whole, but I will say that some of the responses I got were better than I could have asked for.

4. Subscription Blog

This comes free with the coaching program membership, and I also sold it separately for a lower fee. No comment, again, on how many people are involved or who - privacy here I think is important - but I'm not complaining.

5. Ebook

The post directed people to a site where I collected info about who might be interested in reading an ebook on programming career strategy, if and when I write it up and start selling it. No money yet, but I now have sales leads.

Lessons Learned

This whole thing served as a fun experiment in internet "publishing" business models. I had the fun of poking the beehive, I made a few nickels and dimes, and I collected some data. So, a little about the data.

First, the TechCrunch blog-drama gambit works. I set out to get good traffic and lots of retweets, and I got them. Seeing as I've been blogging about that for a while, and I learned it by getting involved in all kinds of little blog wars, that shouldn't be a huge surprise.

Second, in the post, I attacked Paul Graham's assertion that people will only buy information products that show them how to make more money. The affiliate marketing results confirm my skepticism. I included several affiliate links to products with information about how to make more money; I sold one. People who paid for information about how to lose weight far outnumbered that solitary purchaser. Likewise for people who bought stuff on Amazon.


A couple weird things about Amazon affiliate links: first, if somebody clicks your Amazon affiliate link, looks at what you're linking to, and then decides to buy something else, you still get paid - so the smart thing is to always link to Amazon for some reason or another. Especially during the holidays.

Second, I got better results with Amazon in one day than Peter Cooper tells me Ruby Inside made in months or weeks or something like that. I think the key is a combination of strong opinions and verbose posts. You're not going to get people spending time on huge verbose posts unless they enjoy reading, and if you want to sell books, it makes sense to start with people who enjoy reading. Meanwhile, strong opinions convey sincerity and inspire trust.

Also, a caveat about my better results: I spent months on this blog post. I blog mostly to figure out what I think about stuff, and it took me a while to decide. The blog post was a goal in and of itself; if I had set about to do it for the sake of making Amazon affiliate sales, that would have been foolish. I made about $65 from Amazon; if you spend months to make $65, that's not a good hourly rate. It's likely, I think, that Ruby Inside didn't spend as much time on their Amazon experiment, and I wouldn't advise spending months on an experiment like this if your goals were purely financial.

Anyway, if all this interests you, check out Blogs Are Godless Communist Bullshit. Even if you've already read it, you might see it in an entirely different light. This time, check out the links instead of focusing on the words.

Update: $65 is no longer accurate. The Amazon earnings on this are still small, but also going up pretty consistently.

Tuesday, December 8, 2009

Many Internet Startups Are Too Small To Fund Or Even See

This is not entrepreneurship. It is neurosis shared by a whole class of people.

This is entrepreneurship.

The trouble with venture capital is it made itself obsolete. Commodity hardware, open source software, and globalized paperless offices grew out of the world the VCs made, and make it easy for entrepreneurship on the Web to operate with minimal upfront investment.

these hard-nosed businessmen feel equally judgmental of the VC-backed masses in their corporate parks and glass-walled conference rooms. Why, they argue, would anyone accept VC funding and give away a portion of his business when he can start minting cash for little investment? “Guys that take funding, buy nice cars and throw company parties,” remarked one Maverick. “We call that ‘playing business.’”

Saturday, December 5, 2009

Real Palin Supporters, Not Actors

Monday, November 30, 2009

Hacker News Mashups

Update: This started as a musing about three Hacker News mashups - Hacker Newspaper, Hacker Top, and Hacker Hacker News - but has turned into a list of HN mashups. The list is long and growing. The HN community makes a lot of mashups.

Mobile apps and Chrome extensions.
Helvetica restyling.
hnvue / Remix HN - framesets version.
Ajax-y Real-time version.
Hacker News Twitter Feeds with Hashtag Metadata
Dave Winer's firehose approach.
Hacker News, automagically organized.
Hacker Newsers, a way to connect with other readers of the site locally.
Hacker Slide. Hacker News with a slider, showing the leaderboard's change over time.
Hacker Follow. It's like Twitter for Hacker News.
Alternative UI. Similar goal to Hacker Newspaper, but I believe with less background in typography.
Print version.
E-mail newsletter version.
Droid app.
iPad version.
iPhone app
Hacker Polls turns polls on Hacker News into graphs.
I don't even get what this one does, but it looks cool.
SearchYC adds search to Hacker News.
HN Summary summarizes links from HN (apparently only some, not sure what the selection criteria are).
Reddit users discussing the Hacker News Headline Generator
Reddit-like Collapsible Threads for Hacker News (bookmarklet)
Ruby library for accessing HN
HN Trends, data stored and charted
I used a hack to make arbitrary domains invisible on Hacker News for a while.
Simpler Hacker News for Greasemonkey/Greasekit
HN Books, a blatant affiliate marketing play. Maybe useful though.
Personalized version with Summify (not actually a hack per se).
hnsh - Hacker News Shell
HN Toolkit provides the same functionality as well as several other features.

Update: I should mention, Hacker Newspaper actually runs on a combination of Ruby and Python, and the Python component is a cool Hacker News mashup in its own right: HNRSS.

Original Post:

In April I built a Hacker News mashup called Hacker Newspaper. I did it because I was reading Hacker News every day and wanted a superior interface. Since that time, two things have happened: one is that I read Hacker News much less than I used to, including Hacker Newspaper; the other is that I have a much clearer idea what stories do well on Hacker News.

The Hacker Newspaper interface adds a visual hierarchy, in a newspaper style, to the Hacker News feed.

It uses this visual hierarchy to emphasize the popularity of stories.

Hacker Hacker News keeps the same essentially flat information hierarchy of Hacker News, but re-sorts the headlines (and prunes them) based on a Bayesian classifier tuned to exclude TechCrunch-y stories, and emphasize stories with technical content. I planned to create something similar, but never got around to it.

Hacker Top also keeps the flat information hierarchy, but gives you a command-line interface in the style of top. It has a default refresh rate of every three minutes, which I think would wreck my productivity, and a nice little syntax for specifying alternate values.

As I said, after switching to Hacker Newspaper, I started reading Hacker News less often, and I became more aware of which stories were most popular. Very often, the few stories I cared about never made it to the top "headline" in the interface, and it just drew my attention to how much the interests of the Hacker News community differ from my own interests. Also, the much greater ease of scanning headlines on Hacker Newspaper made me realize how low on content the average "issue" of Hacker Newspaper is for me.

I'm very curious what changes I might have experienced if I had switched to Hacker Hacker News or Hacker Top instead. I don't have time to run this experiment, but I'd be interested in the results if anybody ran it. It could be there's a strong argument here for building your own tools for consuming media.

Monday, November 23, 2009

Personal Git Punch Card Grapher

Say you like GitHub's punch card graphs, but you want more info. This hack, based on blatantly stolen code, allows you to generate punch card graphs from the command line.

Here's the command to generate these two punch cards, comparing commit activity in the past week on branch A to commit activity in the past week on branch B:

ruby timecard.rb . branch_a a && ruby timecard.rb . branch_b b

(Names changed, of course, but this command produces two pngs, a.png and b.png, and they show you the commits on branch_a and branch_b, respectively.)

Here's the code for it. I found some good code and hacked a few argument vector calls into it. (Comments in the gist can direct you to the original.) Command-line args control everything except the date of the earliest commit to consider. That's hard-coded: Monday the 16th at 3am.

EARLY_MONDAY = 1258370000

If you fork this and add the ability to specify dates in a cleaner way, ping me, I think that would make this very handy.

Update: Gavin Stark forked and improved:

Thanks, this is really handy. I wrote something similar to parse my company's mail log to generate a punch card of when people check mail. VERY telling for some employees. ;-)

I added a few more features and use the chronic gem for date parsing:


Only real problem left is that the google chart API seems to barf if you have too many points on the graph. You get a 414 URI too large error if the URL is over 2000 or so bytes. I guess google giveth and taketh away.


Saturday, November 21, 2009

Holocaust Victim, 1700 Facebook Friends

A young boy in shorts and a white T-shirt, with black hair, dark eyes, and a mischievous grin - that is how Henio looks to his friends on his Facebook page.

"My name is Henio Zytomirski. I am seven-years-old. I live on 3 Szewska Street in Lublin," he writes on his profile. His birthday is March 25, 1933. He is no more than seven or eight years old. As a young Jewish boy, he was killed by the Nazis in a concentration camp.

Young Holocaust victim has over 1,700 friends on Facebook

Tuesday, November 17, 2009

"Your branch is ahead by X commits" - But It Isn't

If git tells you this, the solution is git fetch.

Basically, git loses track of its remotes from time to time, and git fetch refreshes its memory.

Thursday, November 12, 2009

Virtual Windows

Recently I bought a 24" iMac, instead of a MacBook Pro. I justified it to myself like this: in a few years, when it's out of date, a MacBook Pro becomes a doorstop, while an iMac becomes a wall-mountable TV.

Now the 27" iMacs are out, and I am definitely going to get one.

Now watch this video by Joi Ito. He talks about how Warcraft guilds leave TeamSpeak on all day, whether they're raiding or not, to keep in touch with their virtual tribe at all times.

Sound familiar?

Now let me tell you about my crazy parents. They were using Skype before I was. I don't get certain Internet cliches, like the perennial riddle of how to tell your mom what a web browser is. My mom's on Firefox. I don't get what the problem is there.

So: say for the sake of argument I go and get a 27" iMac any day now. I could mount the 24" on a wall in my apartment as planned. But what if I had two? I could take the other one to my parents' place, put it up on their wall, fire up Skype on both machines, open a call from one iMac to the other, set it on video, and leave it on video 24/7 for years. Throw away the keyboards and the mice and call it a wormhole in the fabric of spacetime, or a virtual window.

I'm not actually sure I'll do this. Those new 27" iMacs aren't cheap, I only have one 24", and of course 24/7 wouldn't really be 24/7. I don't need to see my parents gargle their mouthwash, for instance, and I'm sure you can think of plenty of times you might not want your parents peering in on your adult life.

But it doesn't have to be your parents, for that matter. This is just an example. The point is, as handy as Skype and a nice big screen are now, think how much handier they will become in a few years, when you've got them in such abundance that you're trying to figure out how to get rid of the extras. A technology really comes into its own when the street finds its own use for it.

Seriously, Skype has no clue what Skype actually is. Who wants to use the Internet to replicate the experience of a phone call? A virtual window's much more interesting. People have been telling stories about that for almost as long as people have been telling stories at all.

It's funny, though, because not even the cyberpunks wrote about this - not about the actual imminent reality of it. The time is very very near when we will be able to keep 24/7 virtual windows on each other. How tribal will that be? What will happen to the structure of our society? You can find a gazillion examples in the cyberpunk canon of lifecasters and reality stars, some of them dating before the advent of reality TV. Where do you find the group of friends who have been in the same room for thirty years together, despite travelling the world separately? That's a very near, very likely future. It's the inevitable result of a pair of very basic, well-entrenched technologies - IRC and the webcam.

One consequence: we're going to live longer. Researchers find strong family connections and community obligations as a basic characteristic in every community on Earth where people live an unusually long time. However, you can give "family connections" and "community obligations" a lot of different definitions, and that's what might transform society in unpredictable ways. Some of the definitions that will work are as yet undiscovered.

Internet Marketing: Yanik Silver = Meh

So last week or something like that I blogged about an internet marketing guy who uses shareware and freeware to drive traffic for his affiliate programs, and soon after I blogged a tiny little code library to generate affiliate program blog ads. So I might as well admit it, I'm getting interested in this whole internet marketing thing.

It reminds me of the time right before I left San Francisco. It was before the dot-com crash. I had discovered that the only businesses making money online were porn sites, and I told all my friends that we should be making porn sites. Unfortunately, I wasn't a blogger back then, and I smoked a lot of pot, too, so I didn't really always present my ideas in the most coherent manner possible. For instance, I often left out the part that the only businesses making money online were porn sites, and jumped right to the conclusion, that we should all quit our jobs and make porn instead. The result: my friends were giving me some really weird looks for a while. I also learned a little bit about the importance of explaining every part of your idea, and the dangers of being taken too literally.

The dot-com crash has come and gone. However, the presence of VC money gives high-tech an ever-present "house of cards" feeling, for me at least, and I'm always wondering if our entire industry might just be BS, start to finish. So I like to investigate unusual avenues, and I do have to say, even though I abandoned that whole porn idea, a year after I started babbling about it, all my friends were on unemployment, and I was still working. (The dot-com crash hit hard.)

Anyway, I bring all this up because of a story in TechCrunch about what sounds like the most enjoyable blatant douchery any group of grown men ever indulged themselves in. Since a lot of my readers might also have seen this thing in TechCrunch, they might be thinking, "hey look, this internet marketing thing is something - TechCrunch is talking about it, Giles is talking about it, I mean this guy Yanik Silver is hanging out with Richard Branson!"

So yes, it's true, this guy is hanging out with Richard Branson, and I have to tell you, he also comes endorsed by this guy Dan Kennedy, who wrote a bunch of great books, but I can't endorse him. I bought one of his PDFs and it really just didn't seem to contain anything I couldn't have guessed. Not only that, it took real effort to get my refund, when I decided to do it (and I decided almost instantly). Dan Kennedy, in one of his books, says he lets his employees do everything they do any way they want, except for one thing: refunds are processed first, before anything else. I really wish Yanik Silver took the same approach. For a day or two I wondered if the money was coming back at all.

Tuesday, November 10, 2009

iGhost iRide iThe iWhip

Monday, November 9, 2009

Peepcode On jQuery Features Snippet Of My Music

Plus it looks awesome.

Saturday, November 7, 2009

Time Management: Two Pics, Two Books, One App

Lots of people are into David Allen's Getting Things Done. I discovered it in 1998, about ten years before it became a programmer fad, when it was a mail-order tape course that cost $100 instead of a best-seller on Amazon that cost $10. I liked the ideas, but in practice it was too complicated; there was no way in hell I was going to get from as disorganized as I was, to following a system that complicated, without becoming an organized person first. A system for becoming organized which requires you to already be organized in the first place was no use to me at all.

I've read a few books on time management since then, but they all seem to suck. These two books are the only two I've really liked:

No B.S. Time Management for Entrepreneurs (NO BS)

Time Management for System Administrators

Everything I'm doing now revolves around pen and paper (or felt-tipped marker and calendar). I've tried a lot of different software, including Things and RescueTime, but I only ever found one piece of time management software which was useful for me at all: Streaks.

However, even Streaks didn't really do it for me. I kept creating new calendars for all the new habits I wanted to cultivate - eat healthier food, work out every day, remember to wash the dishes, etc., etc. - and some of these things, I wanted weekly frequencies for, not daily. I couldn't solve the weekly problem with Streaks, and I solved the many habits problem with many calendars. Pretty soon I had more than 20 calendars, which was way more than Streaks was even designed to hold in memory, and performance nose-dived. So I bought a physical calendar and wrote on it.

It worked but it looked like crap. I soon upgraded to color.

Vertical lines represent weekly habits; horizontal lines represent daily habits. It's pretty great because you can see at a glance how you're doing. You can only track about ten daily habits with this, though.

I wanted to buy ten or fifteen calendars and put them all up on a wall, one calendar per habit, to make it much easier to read, but you can really only buy 2009 calendars in 2009 if it's January. The calendar publishing industry is so insane about promoting new releases that they make the car industry, which will have people buying 2011 model cars by June 2010, look reasonable. I realize I'm raising this complaint in November, but I started looking in August.

Anyway, come 2010, I might go for a wall of calendars. I've reserved wall space for at least ten calendars, just in case, but I might go for something simpler instead. I have some other ideas that might work better. I'd like to go into more detail, but I only have nine more minutes budgeted for this, and I have to take an unscheduled leak.

Full disclosure: The Amazon links in this post are affiliate links, which pay small sales commisions.

Thursday, November 5, 2009

New Ads By Ruby Row

My blog's now sporting ads from Ruby Row, an ad network which also sponsors blogs by Thoughtbot, Jamis Buck, Geoffrey Grosenbach, Obie Fernandez, and loads of other great programmers. Cool beans.

Wednesday, November 4, 2009

Training Your Inner Monkey

Training monkeys on a two-choice visual task, researchers found that the animals’ brains kept track of recent successes and failures. A correct answer had impressive effects: it improved neural processing and sent the monkeys’ performance soaring in the next trial. But if a monkey made a mistake in one trial, even after mastering the task, it performed around chance level in the next trial — in other words, it was thrown off by mistakes instead of learning from them.

“Success has a much greater influence on the brain than failure,” says Massachusetts Institute of Technology neuroscientist Earl Miller, who led the research. He believes the findings apply to many aspects of daily life in which failures are left unpunished but achieve­ments are rewarded in one way or another—such as when your teammates cheer your strikes at the bowling lane. The pleasurable feeling that comes with the successes is brought about by a surge in the neurotransmitter dopamine. By telling brain cells when they have struck gold, the chemical apparently signals them to keep doing whatever they did that led to success. As for failures, Miller says, we might do well to pay more attention to them, consciously encouraging our brain to learn a little more from failure than it would by default.

A nice little article, but guess what? The article's conclusion is ridiculous:

Success has a much greater influence on the brain than failure...we might do well to pay more attention to [failures], consciously encouraging our brain to learn a little more from failure than it would by default.

That's some of the worst logic I've ever seen. To find worse logic than that, you have to get a teenager to read Plato. "You learn more from success than failure; therefore, pay more attention to failure." Or to rephrase again, "Your brain is bad at a particular type of activity; invest more of your energy and time in that activity."

Obviously, if you want to learn something, and the brain responds to failure without learning anything, but it responds to success by learning, then focusing on failure is not a good learning strategy.

But what should you do? Does this mean that, if you don't score a home run the first time at bat, then the people who do will learn more than you, and be at a huge advantage the next time you compete with them?

Yes, it does.

So if you don't score a home run your first time at bat, you're doomed?


The reason why not:

To learn, all you have to do is succeed.

Notice what that doesn't say. It doesn't say what you have to succeed at.

Let's say you're a tennis player. Somebody beats you at tennis. You revamp your tennis practice to focus on the tiny details of how you play. Why? Because you might not be able to win the games you want, but if you set yourself a tiny goal to win at serving, or to win at backhand form, or to win at aiming the ball, you can win there, and every time you win, you learn.

There's some powerful neuroscience supporting this and a great book which goes into exquisite detail. I have a blog post coming about that book. I'm aiming for tomorrow. It's a hell of a book, though, and it deserves more writing than I have time to finish at the moment, so for now I'm just going to leave you in suspense about it.

Watch Out For The Torpedoes

Cory Doctorow damns every torpedo. If there's a law he disagrees with, its proponents are insane, or morons, or evil, and usually all three. If there's a book he likes, it's an amazing work of genius, untarnished by a single flaw. It makes buying books off recommendations on BoingBoing an insane crapshoot: every book is a work of staggering genius, yet only one out of three turns out to be any good. I often wish his praise was more specific.

Here's Doctorow damning the torpedoes in another way:

Every writer has a FAQ—Frequently Awkward Question—or two, and for me, it’s this one: “How is it possible to work as a science fiction writer, predicting the future, when everything is changing so quickly? Aren’t you afraid that actual events will overtake the events you’ve described?”

It’s a fresh-scrubbed, earnest kind of question, and the asker pays the compliment of casting you as Wise Prognosticator in the bargain, but I think it’s junk. Science fiction writers don’t predict the future (except accidentally), but if they’re very good, they may manage to predict the present.

Like many science fiction authors working today, Doctorow isn't telling us anything that William Gibson hasn't said before, and better - and if you don't believe me, check out Doctorow's post on Gibson saying this back in 2007. One of the superiorities in Gibson's way of putting it: he doesn't deny that science fiction is also good at predicting the future. Doctorow damned that torpedo, saying it only ever happens by accident.

Doctorow says:

Orwell didn’t worry about a future dominated by the view-screens from 1984, he worried about a present in which technology was changing the balance of power, creating opportunities for the state to enforce its power over individuals at ever-more-granular levels.

Gibson said, two years before:

1984 is a powerful book precisely because Orwell didn't have to make a lot of shit up. He had Nazi Germany and the Soviet Union under Stalin as models for what he was doing. He only had to dress it up a little bit, sort of pile it up in a certain way to say, "this is the future."

But the reason it's powerful is that it resonates of history. It doesn't resonate back from the future, it resonates out of modern history. And the power with which it resonates is directly contingent on the sort of point-for-point mimesis, like sort of point-for-point realism, in terms of what we know happened.

Note the absence of any sweeping generality equating the ability to predict the future with some kind of random luck. To quote the article Doctorow linked to in 2007:

Gibson's elaborate vision of the internet - before it existed - and Reality TV - before it existed - has led many to call his work prophetic.

Since Gibson owes a lot of his success to his prescience, you're not going to see him writing off that vision as luck. It could have been just luck, but when you check out the sheer literary density of Gibson's interview, you'll understand why I opt for a different explanation. I think Gibson thought hard about the future, and came to conclusions which were correct.

Doctorow's assertion that predicting the future is only a matter of luck would come off as a lot more plausible, and a lot more respectful of his peers in science fiction, if he (like Gibson) had an actual track record of successful and accurate predictions. I also find it hard to believe that he ever even hears this alleged Frequently Awkward Question in the first place. His last book, Little Brother, was set only a few years in the future, and his current book, Makers, appears to either follow the same model or to be set in the present.

On top of that, I don't think anybody even thinks of Doctorow as a science fiction author at all. I think of him as a blogger, and most other people I know (who have heard of him) think of him the same way. Long story short, I'm calling shenangians on this nonsense. Doctorow's posted a Cliff's Notes rewrite of a great William Gibson interview. Rewriting Gibson is like rewriting Hemingway or Shakespeare. Don't waste your time. Just read the interview.

Sunday, November 1, 2009

Blog Ads: Experiment On GitHub


From the Readme:

I wrote this to generate ads on my blog. It's a lazy Sunday morning hack, finished before 10am, and that includes all the time I spent tweaking the ad text and choosing the sites to link to.

The way to use it is simple: choose affiliate programs to promote, write an ad, and hard-code all the data in the generator script. (Obviously there are more elegant ways to do that part, but this is still less than 50 lines of code.) Run the generator script, and then copy/paste the output into a widget in the sidebar on your blog. Boom, you have ads.

Now instead of Google paying you three cents every time somebody clicks a link, you have some independent business paying you $20 or $50 every time somebody buys something. The win here isn't just the money, it's also the ethics. You were supporting a corporation; now you're supporting independent business. You were selling meaningless clicks; now you're bringing someone actual customers. It doesn't hurt that the earnings potential is orders of magnitude better, but the win is pure ethics win.

Epic Graffiti Artist DAIM On Skinizi

I can't tell you how thrilled I am about this.

The German graffiti artist DAIM is known for pieces with three-dimensional styles so realistic, people driving by in their cars have thought the shapes coming out of the walls were real.

He's one of a growing number of graffiti artists receiving recognition in the formal art world.

His new skins on Skinizi fit on iPods, iPhones, MacBooks, MacBook Pros, non-Apple hardware, netbooks, PSPs, and all kinds of nifty gadgets.

Tuesday, October 27, 2009

TinyMCE: Nothing In Textarea

If you want to get the value of the <textarea> through some method other than just hitting "Submit", you're dealing with some kind of <iframe> jiggery-pokery. A good old-fashioned Prototype $(editor_id).value won't get the job done; in this instance, you need tinyMCE.get(editor_id).getContent().

Monday, October 26, 2009

How To Use Bundler With Rails

gem rails, :only => :bundler

via @carllerche and @patmaddox

Saturday, October 24, 2009

Alternate Programming Business Model: Driving Affiliate Traffic With Shareware

I've written recently about how I think consulting is a terrible business model. Given that it's basically the business I've always been in, I started to look into other business models and find out what my alternatives might be. Out of curiousity, I bought an ebook on affiliate marketing.

Since Ruby programmers love meta crap, I'll introduce affiliate marketing the meta way: if you click this link and buy the PDF, I'll get a commission. That's affiliate marketing - basically, driving traffic, selling stuff, and getting a commission. (I'm not actually expecting to see a lot of people buy this thing, but a) if I'm going to link, I might as well use an affiliate link, and b) the FTC set up some new rules about that, so I'm mentioning it out of legal paranoia.)

Anyway, most of these things are pretty cheesy. This one was written by some kind of surfer guy, so I thought what the hell. I know a woman who does Internet marketing full-time - she gets paid to blog about yoga - and another who offers an affiliate program for her business, where she teaches actors how to be financially self-sufficient. So I've seen a little bit of this affiliate marketing world, and by its standards, this surfer guy seems unusually chill. He also gives away a lot of detailed information, which I took to be a "good karma" type thing. Anyway if I get into explaining it I'll want to do a whole review, and I'm too tired for that right now. Maybe later.

What surprised me, and why I'm blogging this: a chapter on the guy's "secret weapon" for generating lots of traffic (traffic is a big deal to affiliate marketers). Basically, the secret weapon is downloadable applications. This includes shareware, freeware, and Web apps repurposed to run within dedicated browsers and thereby become equivalent, as far as a nontechnical user is concerned, to downloadable desktop apps.

On the one hand, this struck me as a weird potentially-revolutionary business model for programmers: building stuff for people to give away to drive traffic to their affiliate marketing programs. On the other hand, there's nothing that revolutionary about it. It's essentially what many of us already do for a living. We build stuff for entrepreneurs to give away to drive traffic to their "hey Mr. VC, buy me out" programs. But it's scaled down much, much smaller than is usually the case.

It matches the thing I said in my Archaeopteryx presentations: that Internet startups can be not only too cheap to fund - from the traditional VC perspective, where any business launch requires millions upfront - but also too small to see. If I make some shareware, license it to somebody in exchange for a portion of their affiliate marketing earnings, I have in a sense successfully launched an Internet startup, even though it's not at all what people mean when they use the term. This is an "Internet startup" that you could in theory launch with one programmer in his or her spare time, although I have no idea if there's any real money there.

When you look at the fiction people have generated about robots, a lot of it revolves around the idea of giant robots. What's the reality? The reality is that tiny robots can do a lot, and robot price gets out of control quickly if you make the robot big. A robot the size of a computer mouse costs about as much; a Lego Mindstorms NXT kit costs around $300; a Lynxmotion hexapod costs around $700, not counting brains or sensors; and anything bigger than a hexapod gets you into crazy money really fast. Technology tends toward miniaturization.

Lynxmotion hexapod

A corporation is kind of like a robot, although that's a huge separate topic. Point is, a lot of people think the Internet is here to make our corporate overlords more powerful than ever before, and give them even more gigantic empires. (And by "a lot of people" I mean those corporate overlords themselves, and their minions.) But I think long-term, it's going to have the opposite effect, and that (among other things) the Internet may make software businesses much, much smaller than they are (and they're already smaller than they've been in the past).

This is the other reason I find affiliate marketing interesting. Every indication is that these businesses are extremely small. But that's another rant, and I'm tired. Anyway, if you're curious, here's the ebook link again. It's an interesting read, even if it isn't free (assuming you find these sort of micro-entrepreneurial phenomena interesting).

Friday, October 23, 2009

Doctor McNinja

In the glorious tradition of Scud The Disposable Assassin and Rex Mantooth, Kung-Fu Gorilla.

Friday, October 16, 2009

ignoring attempt to close foo with bar




It's pretty easy, when running a ton of specs or tests, to see giant strings of dots interrupted by bizarre, enigmatic shit like this:

ng attempt to close form with br
opened at byte 12093, line 245
closed at byte 13454, line 282
attributes at open: {"class"=>"new_piece", "action"=>"/p", "method"=>"post", "id"=>"new_piece"}
text around open: "loader'></iframe>\n <form action=\"/p\" cl"
text around close: "x\" value=\"1\" />\n </br>\n <input nam"

It never tells you where it came from and never interferes with a spec completing. For years I thought it came from Hpricot. Nope. It comes from here:


In this arcane back alley there lurks a parser from the dark days before Treetop, just waiting for the day when a lazy blogger will quit talking shit and write some fucking code. (Or, alternatively, waiting for the day when an inspiring blogger will motivate one of his heroic readers to learn Treetop (which is awesome) and replace the old Rails HTML parser with a better one.) Until that day, you have to deal with its idiosyncrasies, one of which is overzealous warnings about HTML (indeed I think even XHTML) correctness.

It's easy to kill those warnings. Either use the verbosity special variable $-v as in this example, or run your test like this:

ruby -W0 test/whatever_test.rb

Obviously however this breaks with rake test:whatevers, and I have no idea if it works in any sense at all with RSpec. So the short-term hack: $-v reassignment FTW.

(Update: of course, the smart thing is to couch these hacks in before(:each) blocks, for RSpec, or setup and shutdown methods, for test/unit.)

Wednesday, October 14, 2009

Wednesday, October 7, 2009

Attempting Blog Hiatus

I've written a lot of negative posts lately, and I'm not enjoying it. I'm going to see how long I can restrain my alleged graphomania. I'm going to attempt similar restraint on Twitter, with the exception of my daily mp3 @djgoatboy account.

Douglas Crockford Is The Pope, Apparently

YUI sits in judgement over us all.

You can find multiple examples of Yahoo using the term evil as if it were an agreed-upon technical term with a firmly defined meaning. I believe it's very unwise for programmers to blur the line between opinion and fact, but this goes beyond unwise. This moves into the territory of those crazy religious fanatics who won't let their kids read Harry Potter because it contains images of witchcraft.

Photoshop making boobs bigger? That's magic! Photoshops worship Satan!

It's one thing to say "I disagree with this design decision" and a whole different ball of wax to say "our official corporate policy is that particular language features are evil."

Unfortunately, I can't put any real weight behind a call to civility, at this point. I've spent too much time telling Obie to shut the fuck up and trying to summon an angry mob to lynch Chad Fowler. But declaring something evil implies a claim to moral authority, and I think Yahoo's claim has no real weight to it either. YUI, as a framework, is already kind of unfriendly to newbies; damning us for our heathen ways doesn't do a whole lot to roll out the welcome mat.

Against my better judgement, I'm using YUI for a project right now. If you're wondering about my experience with it, I'm going to say check with some more knowledgable client-side people, but my personal opinion is that as a YUI newbie, you should show YUI the same friendly, open mind that YUI shows you.

Tuesday, October 6, 2009

Here's What Annoys Me The Most

The thing I hate about being a programmer is the endless parade of flaky entrepreneurs and clueless middle managers. I've worked for so many companies - more than 30 - and seen so many people making the same mistakes. These companies out there, they're looking for programmers? That's all they want? Sticking me in a box and having me churn out monkey code that anybody could do is a ridiculous waste of my time, and a foolish thing to pay me for. If I'm charging by the hour, why not have me tell you if I've ever seen more than 10 companies go under after doing exactly what you're doing? I mean it's your hour, one way or the other, you paid for it.

Wednesday, September 30, 2009

Miniapp: Variance

Unfortunately my latest monthly miniapp is yet another tale of fail, yet another unfinished good idea. However, at least it looks cool.

In theory Variance was going to be a tool for tracking the difference between how long I think it'll take me to do something and how long it actually takes. I didn't finish it because I didn't realize how long it would take to do.

I present it not because it's any good but because I said I'd do a miniapp each month, so I might as well do a miniapp each month.

Friday, September 25, 2009

Thursday, September 24, 2009

One Reason Pair Programming Is Not For The Elite

I hate to do this, because I love pair programming, but I'm going to call bullshit on Obie's 10 Reasons Pair Programming Is Not For The Masses.

A piece on pair programming in the New York Times put Hashrocket in the public eye of Reddit and Hacker News, and it's pretty hard to keep your head clear when the Reddit monkeys swarm you. No doubt the unwashed masses came up with a whole bunch of reasons they didn't like pairing, or didn't respect it, and Obie wanted to answer them. That's why his blog post basically reads like an attempt to rephrase "you're just a bunch of fucking idiots" in very patient, reasonable terms.

I've been at the epicenter of that moron whirlwind many many times, and let me tell you, it's never worth the bother to pay it any mind. So let's skip this boring question, of why exactly all these idiots disagree with Hashrocket. Idiots are never very interesting. What about all the smart people who disagree with Hashrocket?

The interesting question here is: if pair programming is so fantastic, why doesn't every "elite" Rails company use it? It's huge at Hashrocket and Pivotal, but I've never heard DHH talking about it, for example. We didn't do it at all when I was building a very very successful Rails site which I'm not supposed to mention by name, for fear of tarnishing its otherwise pristine brand with the near-Tourette's-syndrome language of this blog.

I tried once or twice to tell people at ENTP to give pairing a shot, and I wasn't completely alone in that - there's an ex-Thoughtworker there, for instance - but I also got a lot of resistance. The main source of resistance: people were so tired of hearing Obie talk about how pairing made his company superior to every other company out there that they weren't even willing to take the idea seriously at all.

A lot of "elite" programmers don't see any point in Agile practices. But "Agile" is a buzzword today, and like any technology buzzword, most people using it don't even know what it means. This has always been a fundamental problem with the tech culture, but Obie's PR is not making things better.

Let's think about the bigger picture. It's not actually very mysterious why the Rails community has a bad reptuation compared to other programming communities. If we're not showing pr0n at our conferences, we're busy measuring our wieners.

Think how much nicer it would be to read a blog post like "10 Surprising Reasons You're Going To Love Pair Programming." And not just nicer - more useful. One very consistent feature of pair programming across organizations is that it really does surprise people who are new to it with just how productive it is, and how much fun.

Obviously the pot is calling the kettle black. For me to call somebody out for wasting time arguing with Reddit and/or Hacker News readers is hypocritical. I admit it. But let me just say it. Here's my open letter to Obie: the reason your first instinct is to write a blog post explaining to these people that they're just a bunch of fucking idiots is because they're just a bunch of fucking idiots.

And it's not even that. They're not only just a bunch of fucking idiots. They're also just a bunch of fucking idiots who are reading your blog because they're too lazy to work and too dumb to win at Desktop Tower Defense or the eyeballing game. I can't blame you for talking down to them. They suck. But the thing is, they're not the only people reading your blog.

There are a lot of other people reading your blog, people who are as smart as you or smarter, and as accomplished as you or more so. And when you tell that vast army of barely literate dipshits that the reason they don't pair program is because they're not as smart as you are, you are saying something true - but you are also telling these other people, these smart people, that the reason they don't pair program is because they are not as smart as you - and let me tell you something: they are. And they know it.

Speaking on behalf of everybody who has ever tried to sell pair programming to a highly skilled, highly intelligent developer who was reluctant or disinterested, I really wish you would shut the fuck up. You're only making good ideas harder to sell. (And that goes double for Haml.)

You're never going to get anywhere telling idiots that they're stupid. Trust me, I've tried it. I have to hope I'm not trying it now. But you can do a lot of damage by saying that anyone who disagrees with you is an idiot, and believe me, I speak from experience there as well. All it takes is one person in the crowd who everybody knows isn't an idiot, and your whole argument becomes bullshit.

Apart from anything else, there's a much simpler explanation. Maybe the big reason more people don't do pair programming is because they've never tried it.

For anyone reading this, if you're in that category, listen to me for a second. As far as Obie's argument that you can't do pair programming at a cubicle, I've done it at a cubicle. Fuck a cubicle, I've done it in a hotel shuttle van in a sleep-deprived delirium in the middle of a goddamn forest in Pennsylvania. He says you need fancy hardware, you don't need fancy hardware. He says it requires great programmers with great personalities, it's not true. I've done it with people I liked and people I didn't like and people I didn't even know. I've done it with brilliant programmers and clueless newbies. I've even done it with hardworking people and lazy people and it all turned out just fine.

Pair programming is for anybody who likes writing good code. Hashrocket didn't invent it, you don't have to pay them any licensing fees, and if you're not a Super Rock Star Ninja Samurai, you can still do it. It doesn't make you better than anybody. It's just a useful technique with beneficial side effects. All you have to do to get started is get started.

Likewise, if you're not pulling our legs, and you seriously think you can't do unit tests because you don't have time to slow down, you have no idea what unit tests are, and you are in for a very pleasant surprise when you finally find out.

Wednesday, September 23, 2009

Neurosonics Audiomedical Labs, Inc.

Monday, September 21, 2009

All-Time Most Entrails And Disembowelments In Music Videos Award

This was an easy win for the Yeah Yeah Yeahs.


Thank you Kanye.

Wednesday, September 16, 2009

Unit Tests: The Mainstream Will Never Catch Up

Many people who write blog posts about unit testing don't even know what it is; however, NASA used unit tests FIFTY YEARS AGO.

Rails Code Quality Checklist Here

I mentioned on Twitter using a Rails code quality checklist to screen companies, and have since gotten tons and tons of requests for the checklist, all of which I have answered. I don't get how so many people see the tweets about the checklist, yet so few see the tweets indicating where to find it.


Sometimes I miss the <blink> tag.

For the record, I'm not calling it perfect. I say this to stave off the inevitable minor disagreements with item number 7, section b, 12th paragraph. This is like that FizzBuzz whatnot - it's not perfect for inspecting your own code to see if Giles Bowkett likes it or not. It's not even good for that. What it is good for is asking questions about a company's development philosophy. It covers a lot of ground.

However, what it is not great for, or at least not as great as it could be, is getting companies to answer. I've used it on three companies so far. Only one has simply answered via e-mail as requested. Two out of three have dodged the question by asking if they could call me. Apparently, people think that if they call me, I'm not going to just bring the checklist up on my screen and read all the questions to them.

Update: I brought the checklist up on my screen and read all the questions to them. They were surprised.

We're Out To Get Them

Lots of smart people, including Reg Braithwaite, think Kanye's dick move was part of some conspiracy. Nobody seems to notice that this violates Occam's Razor and YAGNI.

If you stick to strict rules of logic, you have to throw out anything which violates Occam's Razor. If you want good code, you have to throw out anything which violates YAGNI. Occam's Razor and YAGNI are basically the same thing viewed from different angles. Why are so many smart people disregarding these important rules?

One thing that's important to realize is that it's not a generic group of smart people. It's programmers, and it's only programmers. I know smart people in entertainment. None of them are crying conspiracy. Is it possible Kanye wanted attention? Duh, of course it's possible. But anything beyond that is just silly.

Conspiracy theories fall into two categories: theories with evidence and pure mythology. Mythologies exist to share important stories between generations of a culture. But what's important about this story? The "staged" idea is implausible to me - but given that I think Occam's Razor / YAGNI are pretty important, I wouldn't believe it even if was plausible.

Reg even went further and hinted at a dark, shadowy Nipple Conspiracy (which presumably includes dark, shadowy Nipple Overlords). Paris Hilton's allegedly unintentional ascension to infrared porn stardom also came into the discussion. Here's what I don't get. If we can presume conspiratorial motives in all these cases, absent evidence, why aren't there rumors of a Batshit Britney Conspiracy? Why doesn't anyone suggest that she was faking it too?

If you're going to believe in a conspiracy theory, at least choose a cool one. I only heard one conspiracy theory cool enough to consider at all: Obama put Kanye up to it, so that Obama could call him a jackass, and thereby imply that Joe Wilson is a jackass too, without having to actually say so in public.

That is a conspiracy theory I can buy into. If we're going to throw logic out the window and build a new mythological worldview on magical thinking, let's start by declaring ourselves the winners. Because if I can't have a world where Obama uses his magic puppet powers to manipulate MTV behind the scenes, all just to give an ignorant douchebag the metaphorical finger, then I'd rather just live in reality and be governed by logic.