Background image

Steve Klabnik

Posts

  • March 08, 11:55 AM

    Create a more compelling experience for your users through game mechanics

    Ever wonder why some websites are so addictive? Certain sites always keep you going back, time after time after time. Well, I can't speak for all of them, but there's a subtle reason that some sites draw your attention on such a repeated basis: They're actually games.

    Wait, games?

    Try a little thought experiment: If I say, "Yeah, he's a ______ addict," what are the first few things that pop into your mind? For me, top two are "heroin" and "World of Warcraft." I'm not sure what that says about me as a person, but ignore that for now. What makes these two things so addicting? Why are they basically synonymous with the word "addict"? Lots of people smoke pot. Lots of people play Call of Duty. Lots do both, and in copious amounts. So why don't they get the same label?

    Heroin: it's a hell of a drug

    Yeah, that reference is to cocaine, another famously addictive substance. Oh well.

    Heroin is the poster child for addiction because it's got a built-in viral loop. That sentence sounds ridiculous, but it's true. It's very easy to start out with, as it's snorted. No scary needles or anything. You get high really quickly, due to its chemical properties combined with the fact that your nose is already close to your brain. It gives a really intense high that is also fairly short. As you do it, you develop both a psychological addiction as well as a tolerance. You simultaneously develop a deep desire for more of the drug as you need a larger quantity of the drug to get the same high. Eventually, it becomes more and more difficult, but you're so addicted that you get over your fear of needles and start mainlining.

    World of Warcraft works the same way. It's easy to try, as there are mechanisms to invite your friends, and the system requirements are fairly low for a video game. The first few quests are super easy, and so you hit that quick reward. You get addicted to "Ding!" but it takes longer and longer every time you do it. Eventually, you max out on levels and have to start doing other things to get your fix. It may sound funny, but it's absolutely true. People talk about "relapsing." They speak of "craving." That's why WoW has so many subscribers.

    How to replicate this success

    I can't guarantee that you'll be able to make your site as addictive as heroin is, but many sites use the same basic psychology to keep you coming back. Game mechanics are one of the tools they use to develop that psychological addiction. This is something we've been seeing more and more of lately, but it isn't really being talked about explicitly as a major trend. I really think that this stuff is really important and useful.

    There are a couple of different mechanisms that web sites can incorporate that fall under the realm of "game mechanics:"
    • Collectibles: Any sort of item you can accumulate. Sometimes comes in "sets," which are finite lists.
    • Points: A concrete number that lets you compare two people. 
    • Levels: A target number of points, you gain the "level" when you go over that number.
    • Trophies: A special kind of level that's unrelated to points. You get it for some other arbitrary reason.
    • Rankings: A place where you can go to see how many points, levels, and trophies others have
    • Tournaments: A competition between people.
    We've all heard these terms used in games. But in web sites? Okay, let's try those things again:
    • Collectibles: Gowalla items. Facebook "Gifts"
    • Points: Twitter followers. Facebook friends. Number of feedbacks. Reddit Karma.
    • Levels: eBay "Power Sellers." Foursquare "Super Users."
    • Trophies: Badges, of any kind. "Achievements"
    • Rankings: FourSquare's Leaderboard. Klout. Listorious. Hacker News' top list.
    • Tournaments: I actually can't come up with a good example of this. Thoughts?
    The same feedback loop happens on these websites. You say something interesting on Twitter, you gain another follower or two. You say something else, another follower. You check in, oh look, you're the mayor! You sell an extra hundred things and get your Power Seller discount.

    That's the hard stuff. It'll get you hooked, and coming back for more.

    Where's all of this going?

    This is the current stuff that's being done with game mechanics. But where could we go, in the future?

    A while back, there was a huge debacle over ReadWriteWeb and Facebook connect. To give you the basic idea, ReadWriteWeb is a blog that talks about everything Web2.0. They wrote an article entitled "Facebook Wants to be your One True Login." Read the comments. Notice something funny? Due to some Google magic, if you were to Google "Facebook login" the day that was posted, that article would appear at the top under the "Google News" results. Now, RWW uses Facebook Connect for their commenting system, and a ton of people apparently don't know how to use the Internet. So when they said, "Hey, I think I'll go to Facebook today," they Googled "facebook login," clicked the news story, and went to RWW. They then ignored that RWW is a blog completely covered in red that looks nothing like Facebook, scrolled until they found the Facebook icon, clicked it, logged in, and then said "wtf, this isn't my facebook? Why'd they change the interface again???" This happened a week after a middle-sized interface upgrade on Facebook, for extra hilarity.

    Now, I won't comment on those people or that situation directly. But one of my favorite Hacker News posters, patio11, posted a really interesting comment about the situation. I'm linking to the person he's responding to, for context:

    Pyre: Facebook can't improve their interface to make users not type "facebook login" into Google as a way of accessing their site.

    patio11: That is a failure of the imagination. They certainly could -- whether it is worth doing or not is another question, but hey, that is what God gave us A/B testing to figure out. 
    "Hey user, it looks like you came to us today from Google searching for [Facebook login]. Did you know that there is a better way? Type facebook.com into [blah blah blah]. Try it now and we'll give you 5 free credits for [without loss of generality: FarmVille]!" 
    Great job! You should do that every time. If you do that to log into Facebook the next five days you use the service, we'll award you a Facebook Diploma and give you another 10 free credits for [without loss of generality: FarmVille]!" 
    On the back end, you show the above prompts to N% of your users who you detect coming to the login page from Google search results (this is trivial -- check the referer). You then compare any user metric you want for the "Was Shown Facebook Login Course" population and "Complete Facebook Login Course" population with the population at large. Kill the test if it hurts your metrics, deploy it sitewide if it helps them. 

    How cool would that be? Now the game mechanics aren't being used just to increase engagement, but to actually teach people how to use your site or service. It's classical conditioning; reward people for doing the right thing, and they'll keep doing the right thing.

    Game mechanics are your MVP

    So how's this stuff relevant to your startup? Well, I think this idea ties in really well with the concept of a Minimum Viable Product. Here's the idea: Build your MVP, and then build game mechanics in. Unlock new features based on game mechanics. This gives you a few advantages:
    1. Your new users only get the most basic experience, which is still useful. It's a simplified, streamlined experience.
    2. Users only get the new features added that are relevant to how they use the site itself.
    3. You can "fake it till you make it" by implementing the features that are most useful to your users. Is everyone getting Badge A and not Badge B? Implement Feature A Level 2 first!
    I think that this makes for a really strong experience, if done right. Foursquare kind of does this already in a crude way with their Super User features. But I think it could be taken to a whole new level.

    Think about this:  Facebook, where you can only friend people, update your profile, and send messages at first. Soon you unlock the ability to use applications. Then the ability to create pages and groups. The interface slowly unfolds in front of you. What about Reddit, where posting comments is all you can do at first? A hundred upvotes gives you the ability to downvote. Ten comments lets you post stories. (Hacker News sort of does this already, with a minimum karma before downvoting is enabled.)

    If you could pull it off, I think it'd make for a really compelling user experience. It does bring one extra design skill that many people may not have, though: balance. Game designers are used to this already, but your potential "Power Users" might not like having to wait to get more advanced features. Then again, this might also solve some issues, like spam. If you had to have 100 positively moderated comments before posting a story on Digg, it'd be much harder to just sign up for spam accounts to submit bogus stories.

    This idea can be taken in a lot of different directions. I'm sure I'm only barely scratching the surface with this idea, but I think it'll go really far. What do you think? Any interesting mechanics I've missed? Any really interesting thoughts for how services can incorporate game mechanics? I've decided to re-open comments, but if nobody uses them, I'll just shut them off again. Let me know what you think.

    Permalink | Leave a comment  »

  • March 05, 01:15 PM

    Writing a "su" feature with Authlogic

    Sometimes, when responding to a support request, it's nice to see what your users see. At the same time, you don't want to ask your users for their passwords, out of respect for their privacy. So what do you do?

    Well, *NIX systems have a program called su.  Here's what man su has to say:

    NAME
           su - run a shell with substitute user and group IDs

    SYNOPSIS
           su [OPTION]... [-] [USER [ARG]...]

    DESCRIPTION
           Change the effective user id and group id to that of USER.

    su can be thought of as "substitute user" or "switch user." It's a command system administrators use to assume the identity of one of their users, or a way for someone with the root password on the system to switch to the root account itself. So how can we incorporate this into a web application?

    Well, we want to first log ourselves out, and then log in as the user we're su-ing to. That's it. The tricky part, however, comes in when we're logging in: as we said before, we don't want to ask for their password. Luckily, Authlogic provides a way to create our UserSession object directly from a User object by just passing it to create.

    This lets us write a controller method to do this pretty easily:

      def su
        @user = User.find params[:id]
        current_user_session.destroy
        UserSession.create!(@user)
        flash[:notice] = "You've been su-d to that user."
        redirect_to dashboard_path
      end

    Add in a route:

    map.admin_su "/admin/su/:id", :controller => "admin", :action => "su"

    And to a view somewhere in your administrative tools:

    <%= link_to "log in as this user", admin_su_path(@user) %>

    And we're good to go!

    One last thing about this, though: You don't want to let anyone who's not an administrator do this, for obvious reasons. My administrative controllers always include a block like this:

      access_control do
        allow :admin
      end

    acl9 makes this really easy, but it's really important.

    So there you have it. Easy as pie.

    Permalink | Leave a comment  »

  • March 03, 03:19 PM

    Why bother creating?

    Kanye West posted something interesting about the nature of creativity today. I'm going to make a copy of it here, because I find the presentation also interesting. Here's his post, for reference.

    I'm not the biggest Kanye fan. I go back and forth. But I think that this is an interesting, personal look into the creative process of someone whose work is at least widely known and recognized.

    Goood quotes from unlikely sources

    I agree with charlesju on Hacker News, I think this line is my favorite:

    I never feel like I'm not the underdog. I never felt completely comfortable. I'm tormented by the need to create.

    I've basically felt that same itch for large parts of my life. Sometimes, I haven't paid it much attention, but that need has been the source of some of the more interesting things I've done. I talked a little bit about this in my post last week about the gift of creation. That post was more about recognizing the surface signs of the creative itch than examining the underlying motivations that drive the creative process.

    "Why" is the harder question, of course. It's something I've been thinking a lot about lately. One of the fundamental tenets of capitalism is the incentivisation of behaviors. Some jobs are paid more simply because we want to encourage people to do them. Garbage collectors, for instance, get paid pretty well for the relative level of difficulty their duties entail. Even though it's an unskilled job, nobody wants to do it, so they make well over minimum wage. Some of the socialist literature I've been examining lately basically posits that monetary incentives aren't the only kind of incentives, and that even if the monetary incentives no longer existed, people would still do "undesirable" things. I'm not sure that I buy it on a wide scale, but when I look at myself, this is absolutely true. Even when I didn't pay my rent via code, I still coded. I wasn't as fulfilled as a person, but I managed to exist, and still create. That's what caused that thought to tumble around in my brain for the last month or two... why bother creating?

    Haters gonna hate

    It's really amazing that people still continue to create at all, when there's so much criticism out there. Al3x, a Twitter engineer, is shutting down his blog. For now. Part of his reason is related; he's writing for himself, and he feels the responses of others take away more than they contribute:

    Lately, I’ve found the cathartic returns from blog-format writing to be diminishing. The ideas I’m trying to express never really get put to rest in my head when I write, now. Instead, they spark whole conversations that I never intended to start in the first place, conversations that leech precious time and energy while contributing precious little back. Negative responses I can slough off, but the sense that I’m not really crystalizing my unset thoughts by writing here is what bothers me.

    I sort of felt the same way when my blog got linked to by Reddit a few weeks back; there was a lot of bullshit. And it's frustrating. My initial motivations are similar to Al3x's; I find that writing helps me to fill out my thoughts. I've been trying to make writing a habit, and it's been hard to find both the time and topics that are fleshed out enough for me to finish them off by writing about them. But pushing myself is part of the challenge, and I expect to get better at it as time goes on. Hopefully, this means that in the future, I'll be able to synthesize more fully thought-through opinions at a faster rate than before. I'll also have examined my own thoughts, opinions, and convictions more closely, and made sure that they're in line with what I truly believe is right. What I'm trying to get at is this: creation is always incredibly personal. An author puts some of himself into every work that he makes. So criticism against a work is extremely easy to consider as an attack against the author itself. So it's difficult to create and put stuff out there, only to get it criticized by everyone is frustrating.

    And the verdict is...

    ... I'm still not sure. This is a topic I'll continue to write about, as my feelings become more clear. There has to be something more fundamental involved here. I haven't found it yet, I just know that I can't sit around and watch TV. I can't work a 'normal' job and toil away on some reporting system that helps just a few people do their jobs a little bit better. I've gotta do something more important than that, change the world, keep pushing.

    And I'll keep telling you about it. So that I can figure it out for myself.

    Permalink | Leave a comment  »

  • March 01, 02:28 PM

    Reddit drama: an interesting look at community values

    I bet social psychologists are having a field day with the Internet. I know nothing about the field, so I don't know if there are thousands of papers about it already written or not, but there should be. I can't image that we've ever had a period in history when more communities are being formed; they're also being formed out in the open.

    I've been involved in many different online communities over the years. I've already written before about the seeming decline of Reddit's content... but this past week, something really interesting has happened. Reddit has had two major events occur that have caused it to be increasingly self-reflexive on the values and norms that the community desires for itself. This is particularly interesting because normally, cultural norms have to be observed, not codified. But here, we're seeing completely open discussion about "The community says this is not okay." It's really interesting stuff.

    Speed Issues

    I won't comment on the technical details involved, but Reddit has gotten significantly slower over the past few months. This is normal, as the community is growing. But it's caused quite a bit of a stir lately. Many users are seeing increased loading times, error messages, missing posts, and various other problems.

    What's a user to do in this situation? Post about it. See the posts about the search feature, or posts about the slowdown.

    For example, as I look for the links to these posts, I get this:

    Our search machines are under too much load to handle your request right now. :( Sorry for the inconvenience.

    Amusing. But unfortunate. The interesting part, though, is the backlash against the complaints. See this thread, "Reddit, fix your fucking users. They are unbearably bitchy." (The cursing is emulating the posts made complaining about Reddit's lack of speed.)

    There's a huge discussion about what it means to be part of a free online community. There's a contingent of people who say that people aren't entitled to complain, because Reddit is free. Another points out that complaining is better than silently leaving the site, and that while people don't pay for Reddit accounts, the eyeballs Reddit users provide enable the site to make money.

    Some choice comments:

    Hey, my incredibly expensive Reddit subscription fees entitle me to 100% perfect service! LEAVE ME ALONE!

    Man, I've been loving this particular strawman for over a decade now. Thanks for breaking out the classics. 
    The reality is that Reddit is a business. The owners get paid because the users keep coming back to the site. Having users bitch and moan is not a problem for the admins - this isn't their personal blog, they're not mopy teenagers who are gonna cut themselves when they see how mean people are being to them on the interwebs. 
    The problem for the admins is when users stop visiting Reddit altogether because of constant technical problems, or fishy administrative decisions about deleting threads, or too many spammers, or etc. They would much rather have us bitch about these things on the front page, create giant threads about them that keep thousands of posters and tens of thousands of readers engaged and on the site, and provide catharsis and a public forum to address the issues. 
    tl;dr: Reddit is a business, they'd rather have us complain than have us leave.

    Meta-bitching about bitching time

    The OP posted a well thought out comment simply suggesting that Reddit's users should be polite and respectful when addressing each other and the people that make using this site possible, and 90% of the responses here just prove his point. It seems like people are more concerned with gaining comment karma by posting bad one-liners than actually participating in intelligent conversation. 

    Is anyone else absolutely done with the reddit user base? I mean... I was told that reddit was this great intellectual news aggregator that through the use of 'karma' was able to bad submissions off the front page.
    Over the past few months I've been here all that has been up on the front page has been Glen Beck, Conan O'Brian, Tiger Woods, weekly "Reddit is slow" posts and now this Saydrah BS.
    I'll say what I said when Conan O'Brian was on the front page for a week longer then Haiti ever was: I DON'T CARE. The Reddit admins don't think Saydrah has abused her power as a moderator. At the very least (I personally don't think she is a spammer) go flame some of the other 1000000000000000 spammers on reddit FFS. This is boring uneducated dribble.

    KEEP THIS TRASH OFF THE FRONT PAGE. 

    And more. Interesting stuff, overall. There's still quite a few trash comments, though.

    The Saydrah Situation

    The other event involves a user named Saydrah. She's been accused of promoting links on Reddit for money, and abusing her moderator powers in conjunction with those offenses. This has spawned a huge amount of discussion on if these actions were inappropriate or not. Here's the first big thread. Then an AMA with moderators about their opinions. Lastly, Saydrah does an AMA herself and explains her side of the story.

    I won't show you a bunch of comments, only one. And it echoes my opinion on the matter:

    Two things: Frankly, I don't care if people are paid to submit links...if they're interesting, I upvote. If not, I ignore them.
    Second, I have lurked around AR and RA a fair amount, and consistently find myself thinking, "That's a helpful and well-reasoned response! Oh, it's Saydrah again!" Whatever else people may say, I feel that you at least do try to contribute positively to this site.
    ...I guess I don't have a question, so I'll just leave my un-asked-for opinion here.

     

    There's a lot more, on both sides of the conflict. Regardless, people are hashing it out.

     

    Growth Hurts

     

    There's a reason they're called "growing pains." Change is always a painful time in any organism's life, and even though there's a lot of drama, the current Reddit staff can take pride that they've created something that's so important to people that they feel the need to scream about it for hours. It's unfortunate that their baby is being embroiled in a flamewar, but these things happen.

    We'll see what the community ends up deciding is acceptable. I've managed to not get involved in these particular conflicts, but it sure is interesting to watch!

     

    Edit: Jen added some interesting links on my facebook feed: http://j.mp/baRqdy

    Permalink | Leave a comment  »

  • February 26, 05:35 PM

    Respect your Customers

    I ran across something really cool today, so I figured I'd share.

    Code Quarterly is a new publication for the hacker crowd that's just beginning:

    We believe there’s a niche waiting to be filled by someone publishing well-written technical pieces longer than the average blog article but shorter than books and making them available in a variety of formats. We are aiming at depth more than absolute timeliness; there are already plenty of outlets for the latest tech buzz.

    I also believe that this niche is currently under served. The more blogs I subscribe to in my feed reader, the fewer books I end up getting around to reading. It's not just because books cost money, though that is part of it. Books tend to feel really out of date, considering the necessary lead time that's involved with creating a print publication. I think a long-form periodical makes quite a bit of sense. Blogs can be criticized in the same way that I've criticized television reporting in the past: they're just too short to do anything but oversimplify the details. In-depth understanding is needed to make an informed decision in many cases. I'm really hoping that Code Quarterly fits right in that gap in my reading. 

    The other really neat thing that Code Quarterly is doing is in the business model:

    Readers will be able to read them on the web or buy DRM-free PDFs, Kindle and iPad versions, and print-on-demand paper copies. Subscribers to our print journal will receive a beautifully typeset quarterly containing all the articles from the past three months.

    This is good stuff! A publication that's going to actually respect its readers. The DRM issue is only getting more and more hotly contested as time goes by. Just today, another discussion was spawned around the draconian DRM scheme being employed for Assasin's Creed 2. Jeff Vogel, whose opinions on the game industry I really trust, wrote a blog post yesterday, "The Awful Anti-Pirate System That Will Probably Work". I actually disagree with his conclusions about the effectiveness of the system, but he sums up how the game abuses its users well:
    So, when I read that Assassin's Creed 2 for the PC would fight piracy by requiring a live internet connection all the time when you were playing, I thought it was a joke. Sort of a dry, post-modern satire of the whole idea of DRM. Then I learned that, if your internet connection broke while playing it, the game would freeze. What's more, if the connection didn't return soon enough, the game would quit and your progress would be unsaved. This convinced me that the whole thing was a joke.  
    Then I learned, as explicity confirmed by Ubisoft representatives, no. Not a joke. Not at all.
    This is really unfortunate. Firstly, because it's not even going to do its job, and secondly because I really wanted to play Assasin's Creed 2. Oh well.
    The video game industry is getting to be as bad as the film industry. This picture was floating around last week, and sums up some of my feelings on the subject nicely:
    This is why most people (at least online) are happy to see the music and film industries falling apart. Very few industries have been as abusive towards their customers as those two have. And it's really lamentable. I love to watch movies. I love listening to music. I love playing video games. But I can't stay in an abusive relationship. I've had too many of those already, and I'm only 24.
    I'd like to say that this is a trend that's changing. I know that the businesses that I run take a philosophy that's diametrically opposed to Big Content: respect your paying customers, and you'll reap the rewards. I'm glad that Code Quarterly seems to be taking this same stand, and I'll probably get a subscription because of it.

    Permalink | Leave a comment  »

  • February 24, 01:34 PM

    Appreciating the Gift of Creation

    I've always enjoyed extremes. This particularly manifests itself in my choice of software tools. I like software that takes a philosophy and runs with it, as far and as fast as possible. It's why I enjoy both Ruby and Haskell, even though they're about as opposite as languages can get.

    Assembly language: piece of cake!

    A few years back, someone asked me why I enjoyed one of these extremes, assembly language. For you non-technical people. assembly language is one of the most fundamental languages, very close to the actual ones and zeros the machine uses to operate. Here's an example:

    global start32
    start32:
    ; disable interrupts 
    cli 
    ; enable SSE 
    mov ecx, cr0 
    btr ecx, 2 
    bts ecx, 1 
    mov cr0, ecx 
    mov ecx, cr4 
    bts ecx, 9 
    bts ecx, 10 
    mov cr4, ecx
     
    This is some of the code that XOmB, my pet operating system project, uses to start up the computer. What it does is not important, but you can see how this is pretty extreme. It's almost unintelligible to someone who doesn't speak the language.

    Programming and Religion

    In any case, they wanted to know why I liked using this particular tool. The answer I gave is this:

    Working on operating systems and programming in assembly language makes me feel like the high priest of the world's largest religion. Or maybe a shadowy cult. Regardless, I get to play gatekeeper between man and machine. If you want to talk to God, you've got to go through me, because I'm one of his chosen ones.

    I tend to get a little overly dramatic at times. But I really like this particular analogy. Even though I'm in no way religious, I tend to make comparisons between programming and religion often. The head of the CS program at Pitt asked me why I enjoyed programming, and this is what I told him:

    Programming gives me the feeling of having a divine touch. I animate dust into life; nothing into something. It's alchemy. It's creation. I'm my own little demigod of my own little world.

    I may or may not have megalomania issues. That's not the point. 

    This Power Should be Appreciated

    Programmers have the ability to create, like many other crafting professions. It's really easy to lose sight of this, but it's the best part about writing programs! This joy of creation is one of the pieces of being a Hacker. That playful curiosity is a fundamental motivation for all that we do. The means are the end. The journey is the destination. Without a deep appreciation for one's ability to create, coding becomes boring. It's a series of hoops to be jumped through, deadlines to be met, handles to turn

    The sheer joy of creation is the reason I'm able to code for hours all day on CloudFab, and then come home and work on personal projects. If it wasn't fun, I wouldn't be able to do it, and I'm incredibly lucky to be able to do something that I enjoy so deeply.

    I was reminded of how lucky I truly am yesterday. I was talking with our business intern about a new side project website, and he said, "That's what you were doing with your weekend? I wish I was able to program. I can have good ideas, but then I still have to find someone, convince them it's a good idea, and trust they'll do it well." It'd been so long since I'd been able to will programs into existence that I'd forgotten what that's like. I'd taken my abilities for granted, and I feel like a lot of other programmers do. This seems to be part of the human condition; many parables have been written about the dangers of forgetting how good you have it.

    So, if you sling some code now and again... are you using your power wisely? Do you appreciate your abilities? Just take a minute to reflect on that.

    Permalink | Leave a comment  »

  • February 22, 08:12 PM

    Morality and Software

    On Friday, Richard Stallman came to speak at Pitt to give a talk entitled "Copyright vs Community in the Age of Computer Networks." It was a pretty popular talk. Roughly 200 people were there.

    For those of you who don't know, rms (as he's affectionately referred to) started the Free Software Foundation. Free Software, in short, is software that gives its users the four essential freedoms:

    • Freedom 0: The freedom to run the program for any purpose.
    • Freedom 1: The freedom to study how the program works, and change it to make it do what you wish.
    • Freedom 2: The freedom to redistribute copies so you can help your neighbor.
    • Freedom 3: The freedom to improve the program, and release your improvements (and modified versions in general) to the public, so that the whole community benefits.


    The opposite of Free Software is 'proprietary software.' Software that violates any of these four freedoms is proprietary. The position that rms takes is that Free Software is the only software that is ethical to use, since it's made in an ethical manner.

    Wait, ethical software?

    Yes, that's right, basically any action that you take fits into your ethical framework somewhere, and using software is no different. Using Free Software is ethical in the same way that buying Free Trade Coffee is ethical, or not eating animals is ethical. You're acknowledging that your actions affect others around you. I personally eat steak and buy whatever coffee is on sale at Giant Eagle, but I do try to use as much Free Software as possible.

    Within the framework Free Software creates, the user is in charge of their computer. That's the basis for freedoms 0 and 1. If you can't run the program as you wish, or study and modify it as you desire, you're not in charge of your computer. I've said this before, "If I wanted my computer to tell me what to do, I'd use Windows. I use Linux because I tell my computer what to do." "Help your community," is the basis for rules 2 and 3. When you change a program to make it more useful, it wouldn't be good for you to be unable to help others in a similar situation.

    Copyright vs. Community

    Free software was not the topic of his talk, however. It was about copyright law. He believes (as I do) that copyright was something that's been perverted from its original intent. The assumptions that held at the time of it's creation are no longer true, and so the law needs to be reexamined. He also proposed several ways that society could operate if copyright terms were to be either severely reduced or eliminated.

    I've discussed this once or twice before. Here's the video of the #ipdebate.

    http://blip.tv/play/AYGt%2BnYC

    In any case, there are two things interesting about this: Copyright is wrong because it harms community; the law needs to be reexamined. I think the second part is something we've really lost sight of, if we ever really were thinking about it in the first place. Our lawmakers never repeal laws; they keep making more and more. Sometimes, a good purge is needed to eliminate complexity, bring a project back to it's roots, and get a handle on things. We don't do that, however. I'm not sure any law system really has. We only add more and more rules. It's impossible to know about them all. This is why "don't talk to the police" is good advice.

    The real strength of his argument comes from the charge against copyright on the grounds of harm. I've never managed to frame the argument so succinctly before, even when I made arguments around similar lines. If you bother to watch the #ipdebate video, Nick will have invariably mentioned something about how copyright is intended to benefit society. This is something we've forgotten about. We forget that (theoretically) we make the rules. We gave copyright to companies in return for more content. But by now, copyright is used to deter the creation of many new works. The entire Remix culture is threatened by copyright. We also forget that the allmighty dollar isn't everything. Horse-drawn carriage makers can't make any money nowadays, but no one cries out for legislation to save their profits. The world has moved on, and certain businesses are no longer viable. It's how the world works. Our culture is more important than money. That's a message that gets lost in the current arguments over intellectual property law.

    rms had one really good quip during his talk. Someone asked what would happen in a world without copyright, where one could take the Illiad, change a few details, and repackage and sell it. Stallman replied "Like Disney does?" That's possibly one of the best examples of how copyright is threatening our culture. Most Disney stories are based off of fairy tales that are in the public domain, then repackaged and kept held hostage under copyright law. Then Disney lobbies for laws like the Mickey Mouse Protection Act, which increases the number of years that they can hold onto the work. They rob the public domain, and never give back. If we're not careful, all parts of our culture will eventually be held this way. That would be incredibly unfortunate.

    Some Primary Texts

    If you're interested in reading more about this topic, you should check out the essays and articles section of the GNU project's website. Many of them are on software, but there are a lots of good ones about other things, as well. Also check out http://defectivebydesign.org/ . It's a sub-project of the Free Software Foundation concerned with DRM.

    Also, take a look at the Creative Comons. This is a 'copyleft' license for non-software works that would also be covered by copyright law.

    But the best thing that you can do is something akin to civil disobedience. Disregard copyright law. Share with others. Contribute to your community. Prefer free software, books, music, and other works. Encourage others to do the same. If more people experience a world without copyright laws, maybe someday we can get the laws changed. I'm not hopeful. We the people are up against some of the largest companies in the world, and if America's recent court cases have shown us anything, it's that those companies call the shots.

    Permalink | Leave a comment  »

  • February 16, 11:16 AM

    I'm all a-flutter about Flattr

    Peter Sunde from The Pirate Bay has a new venture, Flattr. In a nutshell, I'm really excited.

    A lot of people have tried micropayments before, and they've all failed. The main problem is twofold: the mental gap from paying nothing to paying one cent is huge, and the amount of a transaction decreases, the relative cost of processing it increases. Flattr tackles both of these problems.

    The gap from free to paid

    I've been very opposed to all previous micropayment solutions. The reason? I don't have a lot of money. You'd think that the smaller payment amount would mitigate this, but in reality, it actually makes it worse. It's much harder to budget for these kinds of payments... I'd always be concerned about paying too much, and remembering "I have $10 in the budget for media this month, I've made 240 payments so far, but it's the third week, so I can splurge" is just too much work. Free, however, is super easy. No paperwork, no filling out forms... just consume. Nice and easy. I never have to worry about going over my monthly amount when I'm consuming stuff that's free.

    Flattr solves this problem by making paying people feel like not paying them. It taps into the same mechanism we've been using on the internet for a while now: karma. I've been upvoting other people's posts and comments for years now, and it hasn't cost me a dime. Flattr doesn't make me worry about how much I'm giving, and never lets me go over on the amount.

    Monthly transactions vs. instant transactions

    Because Flattr only charges you once a month, they'll have to pay much less in credit card fees. If you've never been on the receiving end of a credit card payment, generally, there's two components: a fixed charge of something like $0.25, and a percentage charge of something like 3%. These numbers are highly variable, and can be renegotiated based on volume, etc. The point is, until you go over $0.27, you don't even get any money, it's entirely eaten by the fee. This is why you'll see gas stations with $10 minimums on card purchases, the fees eat up too much of the cost. Traditionally, this has made micropayments hard. But since Flattr is only charging you at the beginning of the month, they're being charged for only one transaction. 

    Now, some of the details are still hazy, but I'd imagine that Flattr will give you the option of applying the money you made this month to your charge for next month. This means they then also won't get hit for paying out small amounts. In addition, they could solve the problem this way: Flattr only lets you take money out if it's larger than your next month's subscription cost, or you can only take out money once you've accumulated something like $10 or $20. I'm interested to learn exactly how this will work.

    Upvote me... for cash?

    Another key strength of Flattr is something I've already touched upon: the similarity to the 'karma' system most news aggregators have been using for a while now. Everyone is used to the concept of 'upvoting.' We have arrows on Reddit and HN, favorite stars on Twitter, moderation on Slashdot, the little 'like' thumbs up on Facebook. Flattr ties into that same mechanism. It feels familiar. It's easy to use.

    This aspect is really important, because Flattr will only be truly useful if lots of people sign on. If you can only use it on one site or two, nobody will bother to Flattr anyone. I can't possibly imagine this not gaining a lot of traction, though. "Put this button on your site for free money" sounds like a winner to me.

    Fraudulent Flattring

    Some people have expressed concerns about Flattr buttons being put on pages where the content is not theirs. The "Google is a Vampire" people. Frankly, my opinion on this is pretty straightforward: I think that curation of content is valuable in and of itself. Let's suppose Flattr was hooked into Twitter's favorite button, and you tweet a link to the New York Times. Do you deserve to get a Flattr? I'd click favorite and then also click the button on the page. Finding the content is just as valuable as making it.

    The other possibility for problems is with fraudulent clicks. A page could theoretically make a bunch of calls to Flattr via a fake button and take a bunch of your Flattrs. This is a problem that may or may not come up, depending on the exact details of the system. We're not even sure if you are able to Flattr a source more than once. If that's the case, the worst the site could do is steal one of your Flattrs. This is still a problem, but of a much less serious nature.

    Closed Beta

    We'll find out more about the details once more people get in the beta and start talking about it, or once it gets out of beta. We don't really have that much information yet, even if the information we do have is exciting. You can sign up to get in on http://flattr.com/, but who knows how long it'll take? I'll probably write up something more if and when I get into said beta.

    Permalink | Leave a comment  »

  • February 14, 04:24 PM

    Logic Isn't Everything

    Rails 3 is almost upon us. It's been a year in the making, and an interesting year at that. I've been reading a lot about it, and I've also been digging through older articles as well as all of the newer ones. As part of this, I recently re-watched DHH's talk at RailsConf '09, entitled "Rails 3 ... and the secret to high productivity."

    Check out the first 7 minutes. He talks about the last 5 years of Rails, and the long path that the framework has taken to get to where it is today. 

    Rails isn't enterprise ready

    One of the first points he makes is this, regarding early criticisms about Rails:

    My first reaction to that was to fight it on an intellectual or logical level. What I realized is that that's useless. It doesn't really work. that's not how technology gets adopted in the early times. For some things, it's just a function of time. ... You are not going to win over everybody in the world just by having better arguments.

    When you discover something new and interesting, wheather it's in Ruby or it's git...don't be disillusioned early on just because people aren't getting your logically superior arguments. 

    Programmers are an exceedingly meritocratic bunch. We deeply believe that things that are "better," by some objective measure, will {gain traction, make money, save the world, win in the end}. It's a pretty standard fantasy plot... the far superior Good always defeats the seemingly stronger, but deeply flawed Evil.

    I'm extremely guilty of this myself. Deep down inside, I really and truly believe that the best man wins, that people get what they deserve, and that technically correct is the best kind of correct.

    Unfortunately, I'm wrong.

    It's not really my fault that I'm wrong. It's what we teach our kids. Part of growing up is realizing that most of what our parents told is us a lie to try and shield us from the fact that the world is actually a pretty terrible place. It's a well-intentioned lie, but a lie nonetheless. And this is one of those lies that I'm still struggling with.

    The main problem is that people aren't rational actors. If we could rely on people being rational, we could use logic to convince them. Unfortunately, even people who are exceedingly rational are still colored by their life experiences and collective knowledge. And even opinion. Someone on Reddit recently provided a great example of this:

    Differences in time-preference cannot be resolved with a calculator. If some of the workers want to eat the seed for food today, and others want to plant the seed for more food in the future, neither side is correct. The seed-planters in particular cannot win the argument by showing the seed-eaters that they'll have more food in the future. The seed-eaters can fully accept that prediction, agree with it, and still prefer some food today to more food later on.

    It's an unfortunate part of reality. Even two completely intelligent, reasonable individuals can disagree on something as simple as this! One can't even make a utilitarian argument in this case, as it's partially referential. Won't the eaters be upset if the planters get their way? How would that get factored in? It's self referential. And this is a simple example. Making value judgements gets mind-boggingly complex really, really quickly.

    So where does that leave us?

    An advisor is always mentioning to me that, as an entrepreneur, one is constantly called upon to make "high risk, low information decisions." The only thing worse than making a bad decision is making no decision at all. So think about it, go with your gut, and roll the dice. The worst thing that will happen is that you'll fail.

    It's becoming increasingly evident to me that, as unfortunate as it seems, a small amount of doublethink is required when making decisions. On one hand, blindly making decisions with no guide would be insane. On the other hand, it's a guide, and not a rulebook. Moral frameworks are great and all, but that's just it; they're frameworks. They still need to be built upon. And sometimes, rules need to be bent. But basing them entirely on what's logical just won't work. I wish it did.

    Permalink | Leave a comment  »

  • February 11, 10:50 PM

    4chan, moot, and TED

    TED is a pretty amazing thing. For those of you who aren't aware, TED is a conference where the slogan is "Ideas worth spreading." Essentially, some of the greatest people alive today get up and talk for roughly ten minutes, sharing with us their thoughts on a particular topic. If you've never watched a TED talk, you should go check one out. They're generally of extremely high quality, and quite thought provoking. In fact, the quote that started my first blog post was from Neil Gershenfeld's TED talk.

    Today, a talk happened that was of particular interest to me. moot, founder of 4chan, gave one.

    Sorry for the poor quality, when TED releases their recording, I'll replace it.

    It pretty much just recaps what 4chan is, but regardless, I found it interesting anyway. Take this comment by camccann on Hacker News:

    Ahh, 4chan.
     
    I don't think 4chan, and /b/ in particular, get enough credit for being the... unique sociological artifact that they are.
     
    There are many that extoll the virtue of "free speech", but how many are able to gaze unflinching at its unrestrained exercise? The teeming, faceless horde that is 4chan's population is perhaps the truest, purest exemplar of the free exchange of ideas; unshackled from the restraints of purpose, propriety, coherence, and even (at times, on /b/, at least until the moderators notice) legality.
     
    It is likely impossible, in the course of normal social situations, to escape certain limitations; be they social, cultural, or even biological. Reputations are built or destroyed, relationships formed, a complex and pervasive network of interconnections. A person may be taller than you, or shorter; younger, or older; attractive or ugly; hesitant or confident; wealthy or poor; or any of countless factors that subtly, deeply, and inevitably color the way people interact.
     
    But in an environment like 4chan, all that is stripped away. No status games, no authority, no obligations, no expectations. What you say one minute matters not at all the next, crude obscenity and pearls of wisdom alike slipping into the seething, aimless morass. Cloaked in anonymity, where even the flimsy identity of a pseudonym is cause for mockery, what emerges is a shocking sort of honesty. Revolting, yet oddly beautiful; an ever-shifting, ephemeral monument to every embarrassing thought, guilty pleasure, squelched impulse and repressed desire--in short, an expression of humanity, in basest form.
     
    ...well, either that, or it's just about porn and cat macros. I'm not entirely sure.
     

    This is a really good point, one which I've made before. Many people say things like, "I believe in free speech," but what they really mean is, "I believe in letting people speak about whatever they want, as long as it doesn't make me uncomfortable." 4chan, and the Internet in general, however, do not care what makes you comfortable. The Internet embraces freedom in its purest form. It's a beautiful thing.

    And that's the point, isn't it? Let others go about their business, don't judge them for whatever it is that they do? Treat other people the way you want to be treated.

    Ironically, years of having that said to me made me able to regurgitate the saying, but it didn't really make me believe it. /b/ did.

    Permalink | Leave a comment  »

  • February 05, 11:39 PM

    Rails 3 gotcha: bundler 0.9 and 0.8

    Just a quick note for all of you trying out the Rails 3 beta...

    The Rails blog says to run this command to get the dependencies for rails:

    gem install tzinfo builder memcache-client rack rack-test rack-mount erubis mail text-format thor bundler i18n

    When installing this, you get this nice little message:

    Due to a rubygems bug, you must uninstall all older versions of bundler for 0.9 to work
     
    "Okay," I thought. I'll just uninstall 0.8 then.

    $ gem uninstall bundler -v 0.8.1
    /home/steve/.rvm/gems/ruby/1.9.1/gems/bundler-0.8.1/lib/rubygems_plugin.rb:2:in `require': no such file to load -- bundler/commands/bundle_command (LoadError)
            from /home/steve/.rvm/gems/ruby/1.9.1/gems/bundler-0.8.1/lib/rubygems_plugin.rb:2:in `<top (required)>'
            from /home/steve/.rvm/gems/ruby/1.9.1/gems/rubygems-update-1.3.5/lib/rubygems.rb:1136:in `load'
            from /home/steve/.rvm/gems/ruby/1.9.1/gems/rubygems-update-1.3.5/lib/rubygems.rb:1136:in `block in <top (required)>'
            from /home/steve/.rvm/gems/ruby/1.9.1/gems/rubygems-update-1.3.5/lib/rubygems.rb:1134:in `each'
            from /home/steve/.rvm/gems/ruby/1.9.1/gems/rubygems-update-1.3.5/lib/rubygems.rb:1134:in `<top (required)>'
            from <internal:gem_prelude>:235:in `require'
            from <internal:gem_prelude>:235:in `load_full_rubygems_library'
            from <internal:gem_prelude>:334:in `const_missing'
            from /home/steve/.rvm/ruby-1.9.1-p376/bin/gem:15:in `<main>'

    Oops! So, I had to move the bundler-0.8.1 directory out of the folder:

    $ mv ~/.rvm/gems/ruby/1.9.1/gems/bundler-0.8.1/ ~

    But gem list still shows it as installed:

    $ gem list

    *** LOCAL GEMS ***

    abstract (1.0.0)
    activesupport (2.3.5)
    builder (2.1.2)
    bundler (0.9.2, 0.8.1)

    So, run that uninstall command again...

     $ gem uninstall bundler -v 0.8.1 
    Successfully uninstalled bundler-0.8.1

    And you're good to go!

    Permalink | Leave a comment  »

  • January 28, 10:05 AM

    The iPad is better than a faster horse.

    Yesterday, we all didn't work for a solid hour or two while Steve Jobs introduced the iPad. We were all waiting for it, but nobody could deny the level of hype and buzz surrounding the fabled Apple Tablet.

    And so, Jobs came down from upon high and gave us what we wanted.

    Well, what some of us wanted, anyway.

    The device doesn't live up to a lot of people's expectations. But a lot of people are also idiots.

    If I’d asked my customers what they wanted, they’d have said a faster horse

    That's Henry Ford about the Model T. But Steve Jobs also says this quote all the time. And while paying attention to customers is important... you can't listen too much.

    Here's the thing: every argument I've heard from people feels just like the arguments that I heard when Asus put out the first Eee PC. And now, nobody questions that Netbooks are a huge hit. It also feels like what people were saying about Google's Chrome OS. That's not even out yet, so the jury is still out, but we'll see.

    Just last night, I was at the bar, and this girl told me "Yeah, I'm thinking about getting one of those little Netbooks, because all I use my laptop for is browsing the web and reading email anyway. And they're cheap and light." She's the person who Apple's selling the iPad to, not /r/programming. But even among us hardcore nerds, Apple has made inroads. And that's because even I, C programmer and hardware tinkerer, sometimes don't feel like tinkering. I use appliances, just like everyone else. And lots of 'normal' people think of their computer as just another appliance, albeit a complicated one. My grandparents may not need another computer, but if they do, this'll be in the running for sure.

    All other arguments are variations of that argument. It doesn't have Flash, because Flash is taxing on hardware, uses too much battery, flash interfaces aren't built for touch input, and flash needs to die. It doesn't have a DVD drive for the same reasons that netbooks don't. The name is very similar to 'iPod,' and even though lots of people are making 'iMaxiPad' jokes, there's no such thing as bad press. "It only has an app store" gets a "How often do you compile packages from source? App stores are simple." Multitasking? The iPhone works just fine without it.

    Yes, the device has limitations. No, for the use case, those limitations don't matter.

    Permalink | Leave a comment  »

  • January 19, 05:11 PM

    Unicorn mailing list: Awesome

    So, I've started using Unicorn instead of Passenger lately.

    Unicorn is pretty cool. It's really fast. It has 0 downtime redeploys. It's UNIX.

    But I had a problem with it today, and the mailing list was super responsive. Since I couldn't find the error via Google, I figured I'd throw it up here.

    Here was my email:

    Hello all. I've run into a strange problem with Unicorn, and Google
    couldn't help me out. Basically, I'm going to switch from Passenger to
    Unicorn for the next release of my Rails app. I installed it on my
    local machine, and it ran great. But then, as I was building my new
    server to deploy on, I ran into a snag.

    When I run 'unicorn_rails', I got a strange error. Here's the output
    of 'unicorn_rails -d' :

    $ unicorn_rails -d
    {:daemonize=>false,
     :unicorn_options=>{:listeners=>[]},
     :app=>
     #<Proc:0x000000000216dad0@/opt/ruby-enterprise-1.8.7-2009.10/lib/ruby/gems/1.8/gems/unicorn-0.96.0/bin/unicorn_rails:124>}
    Exception `Errno::EEXIST' at
    /opt/ruby-enterprise-1.8.7-2009.10/lib/ruby/1.8/fileutils.rb:243 -
    File exists - tmp/cache
    Exception `Errno::EEXIST' at
    /opt/ruby-enterprise-1.8.7-2009.10/lib/ruby/1.8/fileutils.rb:243 -
    File exists - tmp/pids
    Exception `Errno::EEXIST' at
    /opt/ruby-enterprise-1.8.7-2009.10/lib/ruby/1.8/fileutils.rb:243 -
    File exists - tmp/sessions
    Exception `Errno::EEXIST' at
    /opt/ruby-enterprise-1.8.7-2009.10/lib/ruby/1.8/fileutils.rb:243 -
    File exists - tmp/sockets
    I, [2010-01-19T21:25:09.748670 #30184]  INFO -- : listening on
    addr=0.0.0.0:8080 fd=3
    Exception `LoadError' at
    /opt/ruby-enterprise-1.8.7-2009.10/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31
    - no such file to load -- Win32API
    Exception `LoadError' at
    /opt/ruby-enterprise-1.8.7-2009.10/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:38
    - no such file to load -- Win32API
    I, [2010-01-19T21:25:09.758670 #30184]  INFO -- : worker=0 spawning...
    I, [2010-01-19T21:25:09.768670 #30184]  INFO -- : master process ready
    I, [2010-01-19T21:25:09.768670 #30185]  INFO -- : worker=0 spawned pid=30185
    I, [2010-01-19T21:25:09.828670 #30185]  INFO -- : Refreshing Gem list
    Exception `Gem::LoadError' at
    /opt/ruby-enterprise-1.8.7-2009.10/lib/ruby/site_ruby/1.8/rubygems.rb:280
    - can't activate rack (~> 1.0.0, runtime) for ["actionpack-2.3.5",
    "rails-2.3.5"], already activated rack-1.1.0 for ["unicorn-0.96.0"]
    Missing the Rails 2.3.5 gem. Please `gem install -v=2.3.5 rails`,
    update your RAILS_GEM_VERSION setting in config/environment.rb for the
    Rails version you do have installed, or comment out RAILS_GEM_VERSION
    to use the latest version installed.
    Exception `Errno::EAGAIN' at
    /opt/ruby-enterprise-1.8.7-2009.10/lib/ruby/gems/1.8/gems/unicorn-0.96.0/lib/unicorn.rb:436
    - Resource temporarily unavailable
    I, [2010-01-19T21:25:09.918670 #30184]  INFO -- : reaped
    #<Process::Status: pid=30185,exited(1)> worker=0
    Exception `Errno::ECHILD' at
    /opt/ruby-enterprise-1.8.7-2009.10/lib/ruby/gems/1.8/gems/unicorn-0.96.0/lib/unicorn.rb:454
    - No child processes

    And then it just repeats.

    I'm using ree both locally and on the server (as you can see), but I'm
    using it through rvm locally.

    Any idea what this might be?

    Thanks,
    Steve

    5 minutes later, I get a response: Unicorn doesn't work with rack 1.1.0. It causes and error, and Rails misreports the problem. Uninstalling 1.1.0 and installing 1.0.1 did the trick.

    Getting a quick response that fixes your problem: awesome. I'm really looking forward to continuing to use Unicorn.

    Permalink | Leave a comment  »

  • January 14, 10:38 PM

    Demographics and Discussion

    As I've said before, I love both Reddit and Hacker News. I feel that both are flawed, but we have nothing better yet. And even if the discussion gets out of hand sometimes, it's still generally interesting, and an overall net positive.

    But having that focus be on something I wrote? Pretty interesting.

    Both Hacker News and Reddit (twice) ended up covering my very first post. This was pretty cool. What a spike in Google Analytics! They reported about 3,000 people on the 10th, and about 1,000 on the 11th. Posterous keeps track of page views, and it's almost at 7,000. All pretty neat stuff. Thanks to @himanshuc for the submission. I'm glad that people found it interesting.

    What's really interesting, though, is the difference in discussion between the two communities.

    Some background, as to the post itself, and its motivations. I had watched Neil Gershenfeld's TED talk a few days before, and was pretty inspired. The Center for Bits and Atoms is doing a lot of really cool stuff, and we're just starting to tap into the potential that computers have to offer. So I wrote up that post, even though it was a bit hand-wavy (as I mentioned), because I'd like to get in the blogging habit. Writing helps me to organize what I'm thinking, and provide a reference to it later. Every time I've saved some of my writing, years later I've been interested in reading it, and remembering back when I thought like that. So I typed some things up, and didn't think much about rigor.

    What's most interesting to me is that Hacker News tended to actually discuss the point of my post. Most of the comments were about the nature of art and how it relates to science. Good stuff. Reddit, on the other hand... well, one discussion focused on how Computer Science is based in math, and has a pretty strong foundation. The other pretty much focused on random details in my post, without considering the overall point. One comment suggested I must be a hipster, another got upset because I don't sacrifice design for performance unless absolutely necessary. Which is all fine and good. You can't satisfy everyone all the time.

    But Hacker News seemed to "get it," and proggit seemed to not. I'm not entirely sure if that's because I'm a poor writer, that they have different audiences, or if I just caught proggit on a bad day. But it was certainly an interesting experience overall.

    Permalink | Leave a comment  »

  • December 31, 09:30 AM

    Punk is Dead, and so is 2010

    Inevitably, end of the year musings are marred by what's happened in the last year or so. It's just the way things work; what's just happened is fresh in our minds. But for me, it's also because this has been a really crazy decade.

    I've come a long way
    To put this in some perspective: I turn 25 next month. This decade has been almost half my life. In 2000, I was entering my freshman year of high school. My life was completely different. There is one thing that I can say about the last decade, though. It's been a good ride.

    In the Aughts, I've went from living with my parents, going to all of high school, moving out, going to all of college, and then starting with CloudFab. I've dated three different girls for over two years each, and some more for less. I've gone from Neo-con to right Libertarian to 'possibly somewhere in the middle libertarian.' I've gone from wearing lots of black, to dressing like a punk and spiking my hair, to wearing other colors, to wearing all black again. I started reading Slashdot, then Digg, then Reddit, now Hacker News. I went from no Internet, to dial up, to cable, to FIOS. I've gone from home phone, to cell phone, to smart phone (almost.) I've gone from no driving, to three cars, to biking. Playstation 2, to Nintendo DS, to XBox 360, to PC, to no time for video games.

    There's been a lot of stuff.

    As for the rest of the world...

    The one thing, though, that the end of the decade makes me think about: revolution. Remember that bit about recent events? Yeah, the G20. I've become very cynical about politics, and the ability to effect actual change, because I've realized something: every generation thinks it's going to change the world. The 60s had hippies, the 70s had rockers, the 80s had punk, the 90s had grunge, the Aughts, well, I'm not sure. But, each time, authority has managed to hold on, by co-opting the revolution. By accepting change gradually, while putting up a fight, each generation has slowly petered out. None of these movements really changed the world. They did, a little. You don't get beat up for dressing funny, or being gay, or smoking pot. The world is growing more tolerant in some ways, but less so in others. But go to a mall. each of these movements is now being sold, as fashion. A million twelve year old kids still buy punk albums. But it's a fashion, now. Nobody 'is punk,' they dress punk. It's not just punk. Every generation has had their own way of saying "Fuck the man."

    Yet, the man endures. Revolution is an illusion.

    So now, I'm not so involved with politics. I don't vote. I don't pay super close attention, I don't debate others like I used to. (Those of you who've only known me recently are probably scratching their heads... yes, I used to debate politics more than I do now.) Now, I'm going to try to change the world the same way the big guys do; influence. Large scale change just doesn't work. But if I can positively impact you, then I'm doing a good job. If Hackety Hack can teach kids to program, and it changes their lives, great. If the (almost) 700 people that read my bullshit on Twitter find what I say worthwhile, and though provoking, then awesome.

    But there will be no revolution. 

    Punk is dead. So is 2010.

    Permalink | Leave a comment  »

  • December 31, 09:07 AM

    The Hackety Mainfesto

    Here's the second article about Hackety Hack, the Hackety Mainfesto. This lays out the founding principles of the project.

    The Hackety Manifesto

    Nearly four years ago, I wrote an essay called The Little Coder’s Predicament. It’s not too unusual. Lots of others like it have been written. The point is: programming just isn’t available to people like it was with the Commodore 64. I also outlined my requirements for a new cross-platform programming environment for beginners.

    The essay was widely linked on Slashdot, Reddit, Lambda, etc. I got lots of mail from people who both agreed and disagreed. Great. Nice. Good people all of them! And yet, nothing has changed. Not really!

    I’ve been told of the Xbox development kit and possible programming of Wii channels. The Playstation actually had a language. But none if it has met my criteria for a proper coding platform.

    An Aside: We Care, But Not Enough

    So, why has nothing been done about this? Maybe our interpreters and IDEs (ewww…) are good enough? Lots of people wrote in to say that HTML and JavaScript are the new BASIC. NO!!! You can’t be serious!!! So people have to write two languages now, which are intertwined in an almost inexplicable and unfathomable way? This doesn’t do it.

    Hello world should be one line.

    In fact, downloading an MP3 should be one line!!

    We just don’t care right now, do we? Programmers have a paid gig. So business is happily slurping them up. Look at our books. Look at the programming sites. Programming is tightly coupled to business. Often the first example is an e-commerce site! Our books are like FIFTY DOLLARS!! For crying out loud.

    This diatribe isn’t about business being bad. Of course you need to feed your family and drive an Audi.

    This diatribe is about adding some balance to the world of programming. Okay, so, let’s take things into our own hands and bring hacking to the young folks.

    The Bylaws of Hackety

    Here are the rules by which Hackety Hack was established:

    • Beginners should be greeted to Hackety Hack by a cartoon character. (For the sake of argument, let’s call this character: Hacky Mouse.)
    • Also, helpful sentences. Preferably short and with a period.
    • Hackety Hack is fundamentally a browser and a programming language. For now, Gecko and Ruby.
    • I’m only using Ruby because I know it. Hopefully, more languages can be added!
    • Again, this isn’t about Ruby, it’s about simply offering a place for plainspeople to tinker with code.
    • IDEs are a disaster. Newbs should see only one non-scary window free of tree controls and pinned windows and toolbars.
    • As such, we want to stay away from project files and makefiles, the trappings of an IDE.
    • Hackety Hack also adds simple libraries for common things.
    • Common things are one-liners.
    • Keep args and options to a minimum.
    • In Ruby, blocks should be used to open up a method to more advanced possibilities.
    • Help files are clean, short, simple. Lots of short examples. No frames.
    • While all bug tickets are helpful and great, I just value tickets from beginners to a greater degree.
    • Hackety Hack is free and will remain free henceforth.

    Beyond that… anything which makes life easy and fun for Hackety Hackers is definitely encouraged, even demanded.

    Permalink | Leave a comment  »

  • December 28, 11:07 PM

    The Little Coder's Predicament

    For those of you that don't know, I've taken over a project by someone named _why. He dropped off of the face of the Internet back in March, and the community has picked up his works. Because I'll be writing about the project in the future, and because I feel these words are still relevant, I'm reprinting the two of his essays that led up to the creation of the project, Hackety Hack, here on my blog.

    Enjoy.

    The Little Coder’s Predicament

    Okay, then, children of the modern age (where we live in a world so tied together with wires that Pangaea ain’t goin’ nowhere!), you tell me if this is a predicament or not.

    In the 1980s, you could look up from your Commodore 64, hours after purchasing it, with a glossy feeling of empowerment, achieved by the pattern of notes spewing from the speaker grille in an endless loop. You were part of the movement to help machines sing! You were a programmer! The Atari 800 people had BASIC. They know what I’m talking about. And the TI-994A guys don’t need to say a word, because the TI could say it for them!

    The old machines don’t compare to the desktops of today, or to the consoles of today. But, sadly, current versions of Windows have no immediately accessible programming languages. And what’s a kid going to do with Visual Basic? Build a modal dialog? Forget coding for XBox. Requires registration in the XBox Developer Program. Otherwise, you gotta crack the sucker open. GameCube? GameBoy? Playstation 2?

    Coding Just Isn’t Accessible

    Yes, there are burgeoning free SDKs for many of these platforms. But they are obscure and most children have no means of actually deploying or executing the code on their own hardware! This is obvious to us all and likely doesn’t seem such a big deal. But ask yourself what might have happened had you not had access to a programming language on an Atari 800 or a Commodore. You tell me if this is a predicament.

    It turns out, most of the kids in my neighborhood are exposed to coding through the TI calculator. A handful of languages are available on the TI and its processor is interesting enough to evoke some curiousity. But this hasn’t spread to its PDA big brothers, where young people could have more exposure to programming. And undoubtedly the utility of a language on the Palm, Pocket PC and others would be useful to many.

    So what’s the problem here? We have no shortage of new languages, but they become increasingly distanced from the populace. Are the companies behind these platforms weary of placing the power of a programming language in the hands of users? Is there not a demand any longer? It’s got to be some kind of greed, power, money thing, right?

    Perhaps this is just another reason to push Linux and BSD on consumer systems. Still, are scripting languages easily accessible to beginners on those systems? OSX has made several scripting languages available (including Ruby and Python), but most users are unaware of their presence.

    I should mention that Windows is equipped with its own scripting host for developing in JScript and VBScript. But the use of the scripting host is (I believe) under-documented and limited for beginners. Try doing something useful in a script without using Server.CreateObject. Let’s not let kids touch the COM objects, please!

    The Christmas List

    I’m thinking a toy language for consoles and desktops alike could be monumental. I’m ot saying it needs to be cross-platform. A language for GameCube that took advantage of platform-specific features could be more appealing to GameCube users than a language that used a reduced featureset, but could execute on a handheld. Really, we live in a world where both choices should be available.

    As for essential features:

    1. Transportable code.

    On my TI-994A, I could make a little, animated Optimus Prime from pixels. Insert cassette. Record. Pass around to friends. Receive high fives from friends. Put on wraparound shades. Thank you, TI! Thank you, Optimus Prime!

    A little language for the consoles could be wildly popular if combined with the good ature of sharing code. This could be done by trading memory cards, but would be more effective if code could be easily obtained and posted on the Web. Learning would accelerate and collaborative development could take place.

    A suitable language should give coders access to I/O devices, to allow experimentation with network devices and the ability to enhance one’s connectivity with others. For the consoles, games could provide hooks for user mods. This has long proven a successful staple of the desktop gaming world.

    2. Simplicity.

    You’ve got to be able to write a single line of code and see a result. We need some instant results to give absolute beginners confidence. Simple methods for sending an e-mail, reading a web page, playing music. Demonstrable in a one-liner.

    Admittedly, as our systems have grown complex, it is difficult to balance simplicity and capability. Most users will be unimpressed by code that emits beeps and bloops from a PlayStation 2. If Ruby were available on the PS2, then I would hope that I could hear rich symphonic sounds from a wee bit of code.

    Orchestra.play( "A:2", "C:4", "E:1", "G:1" )

    Access to the graphic engine might require more complex code. But simple drawing methods could be provided for beginners. Or images could be stored alongside code and accessed programmatically.

    ImageLibrary.load( "GolfingOldMan" ).drawAt( 12, 10 )

    The trick would be to uncover what small applications might entice novices and still provide the ability to write large applications that would drive developers to master the language and not limit their growth.

    3. Sensible environment.

    Considering that many won’t want to purchase a keyboard for their gaming unit, let’s make sure that a reasonable environment is provided for entry of text. Controllers could be worked like the Twiddler. Or code could be transferred via IR, TCP/IP. (Dare I say cassette? :D)

    4. Give it away!

    It used to be that programming was practically an inalienable right for users. Include a language with the system, situated in a friendly spot. Each of the game consoles I’ve mentioned has launchers. (With the exception of Game Boy and its successors.) Provide a development prompt from the launcher. From desktop software, provide shortcuts for both the command prompt and a development prompt.

    Remember, we’re looking for a language that requires no system hacks. No obscure links. No warranty violation. We’ve become so used to these techniques that it seems to be an essential part of getting our way.

    And in many ways it is essential. Tinkering with hardware is learning. Lobotomizing and renovating is meaningful, magical. On behalf of those who prefer to code, I make these wishes. Not to take away jobs from the Phillips screwdriver.

    The Ultimatum

    My challenge is to Sony, Nintendo, Microsoft, Apple, and to those who manufacture and develop our interactive technology. Let us interact with these machines more deeply. Provide us a channel for having a dialogue with the entertainment boxes we nurture and care for. I swear to you, the relationship between the public and your product will assuredly blossom. That box will become more of a chest for our personal works.

    In addition, if your developers start putting out crap, then you have a whole world of people to pick up the slack.

    My challenge is for you to bundle a useful programming language with your product. Ruby, Squeak, REBOL, Python. Take your pick. It will be inexpensive to add any of these languages to your systems. And people will seriously pray to you. You know how geeks get when they pledge allegiance to something. But, yes, Ruby is preferable.

    Permalink | Leave a comment  »

  • December 18, 02:45 PM

    A quick note about installing rjb

    When installing rjb on my Arch Linux system today, I ran into a little snag...

    $ gem install rjb
    Building native extensions.  This could take a while...
    ERROR:  Error installing rjb:
            ERROR: Failed to build gem native extension.

    /home/steve/.rvm/ree-1.8.7-2009.10/bin/ruby extconf.rb
    *** extconf.rb failed ***
    Could not create Makefile due to some reason, probably lack of
    necessary libraries and/or headers.  Check the mkmf.log file for more
    details.  You may need configuration options.

    Provided configuration options:
            --with-opt-dir
            --without-opt-dir
            --with-opt-include
            --without-opt-include=${opt-dir}/include
            --with-opt-lib
            --without-opt-lib=${opt-dir}/lib
            --with-make-prog
            --without-make-prog
            --srcdir=.
            --curdir
            --ruby=/home/steve/.rvm/ree-1.8.7-2009.10/bin/ruby
    extconf.rb:36: JAVA_HOME is not directory. (RuntimeError)


    Gem files will remain installed in /home/steve/.rvm/gems/ree/1.8.7/gems/rjb-1.2.0 for inspection.
    Results logged to /home/steve/.rvm/gems/ree/1.8.7/gems/rjb-1.2.0/ext/gem_make.out

    Yes, I'm using rvm. It's awesome. In any case, this is strange, because...

    $ echo $JAVA_HOME
    /usr/lib/jvm/java-1.6.0-openjdk

    And

    $ ls $JAVA_HOME
    bin  demo  include  jre  lib  sample

    So... yeah.

    As it turns out, what you have to do is this:

    $ export JAVA_HOME=$JAVA_HOME/

    Yes, that's right. Now rjb installs:

    $ gem install rjb
    Building native extensions.  This could take a while...
    Successfully installed rjb-1.2.0
    1 gem installed
    Installing ri documentation for rjb-1.2.0...
    Installing RDoc documentation for rjb-1.2.0...
    $

    .... yeah. Silly. 

    I guess openjdk doesn't set up the environment variable in the way rjb likes...

    Permalink | Leave a comment  »

  • December 13, 04:24 PM

    The Problem with News Aggregators

    I've always enjoyed reading news aggregation sites. I read Slashdot religiously in high school, then moved to Digg, then Reddit, and then Hacker News. Each time, the community jumped the shark. I can't point at the exact point at which Slashdot no longer became relevant, nor Digg, exactly. And while Reddit is still mostly worth reading, it's certainly been in a decline for a while now. Why is this?

    The problems News Aggregators face

    How to properly display comments is an unsolved problem.

    Reddit tries to improve on previous moderation systems by displaying comments in a 'hot' order. When comments are displayed chronologically, you'll often see people respond more often to the first comments made, as nobody reads all 357 comments on any given story, and the first few comments get read more often, and replied to more often. Because of this, even if readers do read to the bottom, they're less likely to reply, because there's a smaller chance of sparking discussion. This is the problem that 'hot' ordering attempts to solve. If a conversation is active, it gets moved upward in the discussion. However, by abusing the fact that early on, there are only a few comments, if an early comment is of a high quality, it'll still end up at the top of the pile anyway, and since it's existed longer, it'll naturally get more eyeballs and hence discussion. Which makes it the hottest comment, which keeps it at the top... it's hard to dethrone the king of the hill.

    The other issue with comment displays is the 'karma' concept. While people voting things up and down is very democratic, it tends to encourage groupthink. People who post unpopular opinions get discouraged by regular downmods, and stop posting, and the site becomes an echo chamber. This is what happened to Slashdot, and what's currently happening to Reddit.

    The Reddit Effect: Witty one liners _destroy_ conversation

    I love pun threads as much as the next guy. They make me chuckle. But then they get upvoted everywhere, and a huge comment tree gets in the way of the actual discussion below. Slashdot was especially bad, with the "I, for one, welcome our grit covered, petrified Natalie Portman overlords (posted by kdawson)" articles get legions of "frosty piss!!!1" comments. With penisbird, goatse, and Soviet Russia jokes.

    The Digg Effect: none of us are as stupid as all of us.

    These kinds of ridiculous comments are popular for the same reason MTV is still popular: pandering to the lowest common denominator always wins. You can't build a massive audience unless the content is dumb enough for over half the population to understand it. Pop culture always wins in the end. Digg blew up, and then ceased to be useful. You see people talking about this on Reddit now, too. Hacker News is fighting it pretty hard, and doing a fairly good job. But it's only if the community stays small and tight-knit that that happens. Hacker News will fall eventually too, it's just taking a lot longer, due to the users trying to stem the tide. But you can already see "Welcome to HN. Please, read 'Hacker News Guidelines.' We take them seriously." getting posted every once in a while.

    And it's this large community that reinforces the 'quick one liner' pop culture. Or the 'We hate religion/iPhones/Microsoft/whatever" groupthink. It only takes a relatively small amount of bad apples to gradually ruin things over time.

    An example

    Here's a comment I recently made to Reddit on C++.

    The one on C++ took advantage of several of these factors. Basically, I saw the topic posted when there were only 4 or 5 comments on the story, so I posted this response, and got more upvotes than the story itself. It is by far my highest rated comment ever. It also got more replies than almost the rest of the thread combined, by my rough estimate. It has these qualities:

    1. Got in on the ground floor. My comment got in early, so lots of people saw it, and remained at the top of the 'hot' list.
    2. Substantial size without being too long. My comment was meaty enough that it appealed to those looking for an actual answer, rather than just saying "yes" or "no"...
    3. Included a joke. ... yet still included some smaller chunks that stick out and are easy to read, including the joke and the list of other languages. It was long enough that some people still didn't read all of it, though.
    4. Aligned with groupthink. The opinion expressed in my posting jives with the generally accepted wisdom on the topic.
    5. Critical without obviously trolling. My opinion sided with the general "C++ sucks" vibe, but wasn't worded in such a way that I was obviously trolling C++ lovers. Many people that agree with that general sentiment would be hesitant to vote up a "C++ is teh worst lulz!!1" comment, but would vote up mine.
    All of these factors combined for massive upvotes.

    Where to go from here

    Unfortunately, I don't really have an answer on how to fix this. If I did, I'd have built the site already! It's not an easy problem by any means, but I think it all boils down to this:

    Large scale discussions aren't very productive.

    Someone is gonna crack this nut, and make some money. Or at least, help out humanity. But until then, we're all doomed to slog through tons of crap to find the gold.

    Permalink | Leave a comment  »

  • December 06, 01:52 PM

    I <3 ruby-warrior

    Every Saturday, I take some time out from my normally crazy schedule and work on XOmB, the operating system my friends and I have been working on. It's usually a really nice break from my usually crazy schedule, hanging out with good friends and working on something completely different from what I'm normally working on. Pitt's finals are coming up soon, and so most of the team is preparing. So rather than work on XOmB, I decided to take the week off and play around with something I heard about at the Pittsburgh Ruby Brigade's meeting this week: ruby-warrior.

    ruby-warrior is a little project by Ryan Bates, producer of the awesome Railscasts screencasts. The premise is pretty simple: the game gives you a very basic class, with one method: play_turn. You then write an AI for your warrior, and when you're ready, tell ruby-warrior to send your little avatar out on an expedition to search the dungeon for the fair maiden Ruby, and save some other captives along the way.

    The game is text-based, and fairly simple. You can use your senses to percieve the world around you, and attack enemies, rescue captives, and walk up stairs. The game includes some hints, if you'd like, to help put you on the right track. Each level gets progressively harder, but gives you more abilities to navigate the dungeon with as you go along. Finally, after finding the princess, you unlock epic mode, where you have full abilities, and your warrior must run through the entire dungeon in one go. There are also beginner and intermediate difficulty levels.

    It took me just a few hours to eventually beat the game the first time, but epic mode is awesome. The levels are well-designed, and tend to pick out flaws in your implementation, causing lots of YASDs. All part of the fun, though! I managed to improve my score over 100 points, but I still have quite a large amount of room for improvement.

    I'm not sure when I'm going to get another chance to play around with it again, but I'm certainly gonna give it a shot. Thanks, Ryan. ruby-warrior is awesome.

    Permalink | Leave a comment  »

Computer Scientist, budding citizen journalist, @cloudfab CTO, maintainer of Hackety Hack.

Upgrade Flash to view this site properly