Steve Klabnik

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

Page 2


Git, history modification, and libuv

There has been a recent kerfuffle over a pull request to libuv: it was rejected, applied, reverted, and re-applied. There was some question as to the authorship of that commit, and I wanted to show you why that was, because it illustrates how git handles history.

At first, the pull request was closed. Then, it was committed in 47d98b6. Then 804d40ee reverted that 47d98b6. But when you look at 804d40ee on GitHub, you’ll see no indication of which branch it’s on. That’s because it’s not on any branch. If you clone down libuv, and try to find the commit, you’ll see it’s not there:

~/libuv(master)$ git log 804d40e fatal: ambiguous argument '804d40e': unknown revision or path not in the working tree. 

What gives?

Let’s make a test repository:

$ mkdir test $ cd test $ git init Initialized empty Git repository in /home/action/test/.git/ $ touch HELLO.md $ git add HELLO.md $ git commit -m...

Continue reading →


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:

I still told people that...

Continue reading →


On Leftist Infighting

There used to be a post here: https://web.archive.org/web/20131118145002/http://words.steveklabnik.com/on-leftist-infighting

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 distract from the issue at hand and instead say...

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 Twitter that yes, in 2013, in...

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 { *x + 1 } 

So I wrote this code to try it out:

fn...

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 week. For two or...

Continue reading →


Thankfulness

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 some great pull requests upstream. Lately, I’ve been feeling like nobody who uses Rails actually cares how...

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, “The Postmodern Condition: a report on knowledge”

_why’s work has always taken on a strong...

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 Apple Color Emoji that...

Continue reading →