Steve Klabnik

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

Page 2


Is npm worth $2.6MM?

Yesterday, npm, Inc. announced that it had closed a $2.6MM round of funding. This was met with a bunch of derision on Twitter. I feel this is not only unwarranted, but backwards: I think this investment signals a nascent trend within the VC community, and a more honest view of how open source actually works.


Disclaimer: I’m just some random dude. I don’t have any privileged information about this investment or any of the others I’ll discuss in this post. I haven’t talked to any VCs to actually see if this is what they’re doing, and if I tried, they probably wouldn’t tell me anyway. That said, it doesn’t really matter: what they do is more important than what they intend.

Further disclaimer: I work for a company which has received investment from people mentioned in this article. I have never talked to those firms directly either, and I have no privileged information as to why they...

Continue reading →


A 30 minute introduction to Rust

I recently gave a proposal for Rust’s documentation. An important component of my overall proposal is a short, simple introduction for people who may have heard of Rust, so that they can figure out if Rust is right for them. The other day, I saw this excellent presentation, and thought it might serve as a great basis for this introduction. Consider this an RFC for such an introduction. Feedback very welcome on the rust-dev mailing list or on Twitter.

This tutorial has now become the official one.

Rust is a systems programming language that focuses on strong compile-time correctness guarantees. It improves upon the ideas other systems languages like C++, D, and Cyclone by providing very strong guarantees and explicit control over the life cycle of memory. Strong memory guarantees make writing correct concurrent Rust code easier than in other languages. This might sound very complex,...

Continue reading →


Rust is surprisingly expressive

Do you remember the first time you saw Rails’ ActiveSupport library? I do: it totally blew my mind. The only dynamic language I had used up to that point was Perl, and it had a similarly mind-blowing effect on my young self. I thought that dynamic typing was mostly a requirement towards making this kind of expressiveness possible, but it turns out Rust can be just as expressive, while retaining type safety and static dispatch.

There was a time in the early days of Rails when its evangelists would show off snippets of what it let you do. These were often ActiveSupport extensions to the core language itself. It’d go something like this:

Hey, have you tried Rails? Check this out:

irb(main):002:0> Time.now - 2.days => 2009-12-26 09:57:02 -0800 irb(main):003:0> 2.days.ago => 2009-12-26 09:57:04 -0800 

Did I just blow your mind???

At the time, I enthusiastically replied “Yes,...

Continue reading →


How Dogecoin changed my perspective on cryptocurrency

I have long been a Bitcoin hater, for many reasons. But then, a fortnight ago, something happened. Dogecoin came into existence, and for some reason, I just couldn’t get mad about it. After some thoughtful self-evaluation this week, I’ve realized that Dogecoin has actually reversed my position on cryptocurrency. Here’s why: basically, I’ve come to see Dogecoin as an absurdist art project, mocking the entire global financial system.

Investment Disclaimer: This webpage is provided for general information only and nothing contained in the material constitutes a recommendation for the purchase or sale of any security. Although the statements of fact in this report are obtained from sources that I consider reliable, I do not guarantee their accuracy and any such information may be incomplete or condensed. Also views expressed in this Report are based on research materials available from...

Continue reading →


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. For an updated version of this post, please see the official documentation here: http://doc.rust-lang.org/guide-pointers.html)

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...

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 →