Steve Klabnik

“The most violent element in society is ignorance.” - Emma Goldman

Page 2

Why I’m partnering with Balanced

My next venture will be joining up with Balanced, an API for marketplace payments, and I’m really excited about it. To the tax man, of course, the title of this post is “Why I’m going to be an employee of Balanced,” but I like to think about it as a partnership.

Why I Balanced

I first heard of Balanced almost exactly a year ago. You see, my friend Chad had started this project called Gittip. He was using Stripe to handle payments, but Gittip is a marketplace, and Stripe didn’t support marketplaces. So they gave Gittip a month to find another processor. So a Balanced employee came along and submitted a pull request. I thought this was super awesome. So much so, that I tweeted it:

Continue reading →

On Leftist Infighting

There used to be a post here:

After having some conversations on Twitter, I was made aware of some context around ‘infighting’ that made it problematic. I decided that the post was unworkable, as I certainly didn’t mean some of the things it implied, and so decided it was better to simply delete it.

I’ve been told that some people have been trying to cite this post as me saying that I believe any and all dissent should not be public, or that I believe in covering up incidents of wrongdoing because they may 'harm the movement’ or something. This is wrong. I wrote this post after trying a number of different tactics to get other men to stop tone policing several women, specifically Shanley. “If you don’t like the way she says things, why not...

Continue reading →

Abstract vs. Concrete

When I talk to people about systemic inequalities, one of the hardest things for them to understand is the concrete nature of how these relations affect the day-to-day lives of others. For many, this topic is an abstract discussion. For many others, this is life, day to day.

In the interest of helping bridge this gap, I want to share a story with you from a few weeks ago. The setting: the West Village, Manhattan. The night: Halloween. In the early morning hours of All Saint’s Day, I got a text message from someone I care about. Here’s some screenshots of the conversation. She has seen this post and said it’s okay to share, for the same reasons I’m interested in sharing this with you. Also, if reading a story about a bad situation or a slur or two will make you upset, you may want to read another blog post.

I’m not sure how to convince random people on...

Continue reading →

Pointers in Rust: a guide

Rust’s pointers are one of its more unique and compelling features. Pointers are also one of the more confusing topics for newcomers to Rust. They can also be confusing for people coming from other languages that support pointers, such as C++. This tutorial will help you understand this important topic.

(This guide was written around the Rust 0.8 release.)

You don’t actually need pointers

I have good news for you: you probably don’t need to care about pointers, especially as you’re getting started. Think of it this way: Rust is a language that emphasizes safety. Pointers, as the joke goes, are very pointy: it’s easy to accidentally stab yourself. Therefore, Rust is made in a way such that you don’t need them very often.

“But tutorial!” you may cry. “My co-worker wrote a function that looks like this:

fn succ(x: &int) -> int...

Continue reading →

Keep Saturdays Sacred

There are obviously a lot of factors that have contributed to my career as a programmer, but I think the most important one can be summed up in this sentence: Keep Saturdays sacred.

You see, in college, my friends and I were moderately obsessed with writing software. We sorta stumbled onto a tradition of making sure that every Saturday, we got together and wrote code. At some point, we realized that this was the formula:

  1. If none of us set our alarms, we’d all wander into the computer lab at 1pm Saturday.
  2. We then went and got some burritos from Chipotle.
  3. Once we were appropriately stuffed, we’d go back to the lab and hack on whatever.
  4. In our town, food was half off at certain restaurants after 11pm. So we’d code until then, and then go get some food, and then go home later.

Many people sifted in and out of this group over time, but a core was always there. Every...

Continue reading →


I recently attended GoGaRuCo, which was a great conference. My favorite part, however, wasn’t directly attatched to the conf itself: it was a few moments of thankfulness.

A lot of what I’ve been experiencing lately has been profoundly negative. That is what it is; there’s a lot of realy negative things in the world. But I’ve been a bit… overloaded lately.

The two moments tie into each other:

I’m at the speaker dinner. I bumped into someone I hadn’t met or said hi to yet. “Oh hey Steve, I’m Sam.” “Oh hi! You don’t know how many times in the last few weeks I’ve said ‘Sam Saffron makes me so happy.’” You see, Sam works on Discourse, and it’s a Rails app. Sam’s work on Discourse has identified some bugs and performance regressions in the Rails codebase, and Sam has been submitting...

Continue reading →

Just the regularly scheduled apocalypse

Every once in a while, I unfollow EVERYONE on Twitter. I did it again last night. Feels good, like a fresh start.

Part of the problem is that I feel like I should be following everyone who I know in real life. This causes Twitter to be absolutely unmanageable, as I’m following far too many. So then I just dip into the stream every so often, but then I miss some people’s tweets entirely. So why follow them all in the first place?

So, if I’ve unfollowed you, don’t worry, I still <3 you. And even as I start following people back, I’m doing it slowly, and at semi-random. Trying to get some people I hadn’t seen in a while. People from outside my own community. People that’ll make me a little less caremad.

Yeah, like that’ll last.

Continue reading →

The CLOSURE Companion

Today is the fourth _why day. So I thought I’d say a few words about his final gift to the rest of us, CLOSURE.

Be Skeptical

First, a few words about the words I’m about to write. Software developers (though you don’t have to be one to read this) love meta, so surely you’ll indulge me for these next few paragraphs. Don’t worry, it’s only a little bit of meta-data.

And if you don’t understand some of my language, things like “Open GL” and “fighting NULL” and so on, you can skip it and be fine I think. - _why, CLOSURE

Nowadays people are actually somewhat jaded by the term “postmodern”. Well, perhaps jaded is an understatement. Nauseated might be more like it. - Larry Wall, “Perl, the first post-modern programming language”

I define postmodern as incredulity toward meta-narratives, - Lyotard,...

Continue reading →

Emoji licensing: :cry:

I recently decided to make an emoji gem. Of course, as with any project, I first look into the relevant licensing issues. What I found made me :cry:. Here’s the low-down on emoji and intellectual property law.

A history

So what are emoji, anyway? The Japanese spelling is 絵文字: 絵 (e) means ‘picture’ and 文字 (moji) means 'letter.’ Picture letters. Simple.

Back in the day, three different Japanese phone carriers created their own versions of these smilies: docomo, au, and SoftBank. Codes would be sent down the (nonexistant) wire, which would then be turned into the final character. However, the three carriers used different characters and different codes.

Google and Apple petitioned the Unicode Consortium to include a number of these characters, and version 6.0 of the Unicode Standard ended up with 722 emoji.

The font

Apple ended up implementing a font named...

Continue reading →

Beware subclassing Ruby core classes

TL;DR: Subclassing core classes in Ruby can lead to unexpected side effects. I suggest composition over inheritance in all these cases.

Subclassing Review

If you’re familiar with the concept of subclassing, skip down to “The Problem.”

In Ruby, you can make your own classes:

class List end 

You can also make subclasses of those classes:

class OrderedList < List end puts # => true 

Now, subclassing represents an “is a” relationship. This means that our OrderedList should be a List in every respect, but with some added behavior. The Liskov Substitution Principle is one formulation of this idea.

The Problem

Ruby has two major bits of code that it provides for your use: the core library and the standard library. The core library can be found here, and contains cllasses that you know and love, like String, Hash, and Array....

Continue reading →