Monthly Archives: March 2010

Holy crap!

How was I not aware that one of the Millenium Prize Problems—specifically, the Poincaré Conjecture—just got officially solved three days ago?

OK, so it was actually solved like seven years ago, but Grigori Perelman just got awarded the million dollar prize on March 18, 2010.

That’s it; I’m tackling P versus NP.


Sady Doyle, David Karp, and Akira Kurosawa

Tonight I want to diverge a bit from my usual subject matter of choice*. Specifically, I want to talk about two people I know almost nothing about: Sady Doyle of Tiger Beatdown, and David Karp, founder of Tumblr. Doyle is a blogger whose site gets a lot of traffic and has a fair amount of cred among the feminist community (as far as I can tell, anyway—I’m not exactly an insider or anything); Karp’s site might be described as an online media-sharing/blogging service.

How it came to be that I even have anything to say about these two involves uninteresting backstory that I won’t bother writing about. But the basic situation is this: Karp posted on his Tumblr account the question “Can I use the word ‘n####’ if I’m quoting a song?” (censored by yours truly). Doyle responded** with an extended discussion explaining, basically, why the answer is no. (That’s a huge oversimplification of what Doyle said; I highly encourage you to read her entire post for yourself.)

These are the facts, as best I can present them in an unbiased way. Now, before continuing, I want to talk about the 1950 movie Rashomon, directed by Akira Kurosawa. I’ll explain why in just a moment.

At its core, Rashomon is a movie about a grisly crime: the rape of a woman, and the murder of her husband. But actually, it’s not really about the crime itself; rather, it’s about the telling of this story by four different observers, each of whom gives an account of what happened which completely contradicts that of every other’s. The point of the film (as I understand it, anyway) is that different people can have vastly different perceptions of an event, and that these perceptions can lead to drastically different versions of the truth in these people’s recollections.

After seeing Rashomon, many viewers feel confused and often frustrated. “How is this possible?” they ask. “How could these individuals witness the same thing and come out with such incompatible memories of it?” To these viewers, the movie feels far-fetched, and its premise seems somewhat baffling.

The assumption underlying this feeling of bafflement lies in these four simple words: witness the same thing. Did the four storytellers in Rashomon really witness the same thing, or did each see different bits and pieces, and fill in the blanks as best they could? I suggest the latter. This actually happens in real life all the time. It’s similar psychologically to what happens when, upon hearing someone you know tell a story for the thousandth time, you actually start to remember the events as if you were there yourself, even if you weren’t (even if, in fact, you weren’t even born yet—this often happens when children become intimately familiar with stories their parents tell of the past).

Let me tell you a quick story. Actually, two stories.

Story 1: The Ignorant White Guy Who Tries To Make An Offensive Point

A bunch of friends were at a party. Everyone was drinking and having a good time. But there was this one dude—I’ll call him David—who, in the midst of a conversation with some other (white) dudes, started getting agitated as the conversation veered into the topic of “hip hop” or “rap” music. Some guys were talking about artists they liked; others were talking about artists they hated, etc. Feeling increasingly annoyed as he thought on the subject, suddenly David blurted out what he felt would get some attention: “Can I use the word ‘n####’ if I’m quoting a song? I mean, seriously, I get that I’m not supposed to say it in general—which is so hypocritical, by the way, because I mean, black people use that word all the time, and yet it’s not OK if I say it? But whatever: what if I’m just quoting some black rapper? Then is it OK? You guys ever thought about that?” David’s comment was followed by some half-hearted nods as well as a disdainful look or two, but mainly just general disinterest. This didn’t take away David’s smug feeling of satisfaction at having vocalized what was eating away at him.

Story 2: The Oblivious White Guy Who Ends Up Being Offensive By Accident***

A white dude named David sat in his college dorm room, working on a research paper for his anthropology class. As part of his paper he was planning to include an excerpt from the lyrics of “Gold Digger” by Kanye West, this excerpt providing strong support, he felt (rightly or wrongly), for one point of his thesis. However, as David sat writing, he suddenly found himself experiencing a great deal of indecision about how to handle the particular lyrics he wanted to quote. As luck would have it, at that moment, David’s roommate John walked in. Since John was African-American, David felt that John could provide some helpful input on the particular issue that was troubling him. “Hey John,” he said, “Can I use the word ‘n####’ if I’m quoting a song?” John, somewhat taken aback by these words leaving David’s mouth, hesitated. “Uh…”****

I certainly don’t want to oversimplify things here. And to be clear: my point is not that Karp was totally innocent in all this, or that Doyle overreacted. (Nor am I trying to say the opposite: that Doyle was right, and Karp is a jerk.) That is to say, I’m not proposing that “Story 2” reflects reality better than “Story 1” or vice versa. My point is simply this: the exact same question (or sentence), worded exactly the same way, could be uttered in two completely different contexts, and reflect completely different attitudes. My point is that, if you were to ask me whether Karp’s question was racist, or reflected a certain level of racism, or even if Karp himself just flat-out is a racist, I would have to say: I have no idea. My point is that, when all you have to go on is the question itself, you could imagine that it was asked in a scenario like Story 1 above, or you could imagine it was asked in a scenario more like Story 2, or anywhere in between.

In other words, there is a pretty big blank to fill in. This applies not just to Doyle, who seemed to read a great deal into Karp’s short Tumblr post, but also to Karp, who clearly made judgments about Doyle’s intentions without (or presumably without) being particularly acquainted with her body of writing. It also applies to me, and to anyone who forms an opinion on this subject, an act itself requiring plenty of blanks-filling-in—Karp’s and Doyle’s true characters, their personal experiences leading up to the exchange, their attitudes and general interpretations of different words and phrases, etc.

Case in point: I’d wager these two have pretty different default definitions of the word “academic.” In the back-and-forth that ensued after Karp’s initial post and Doyle’s initial response to it, Karp made at least two problematic remarks. One came in a comment on Doyle’s first post, in which Karp said, “Let me direct you to Hanlon’s Razor. If clarification is the difference between suggesting someone is racist or empathizing with them, don’t open your mouth.” The other came in another post, where Karp defended himself by saying, “I was asking a fair academic question.”

Doyle’s follow-up called Karp out on this first remark by rightly protesting the specific words “don’t open your mouth” as falling right in line with the stereotypically oppressive male attitude of desiring to silence women. She called him out on his second remark by centering on his use of the word “academic” and its implication that Karp viewed himself as intellectually superior to Doyle or anyone else who would question him.

Maybe Doyle’s right on. I might even be inclined to interpret Karp’s remarks the same way she did—in particular the first one, since “don’t open your mouth” is a pretty horrible way to word something by accident. But that doesn’t mean that other interpretations aren’t possible, or even plausible. Karp may very well be capable of making such a blunder. And as for the word “academic,” it can just as easily mean “simple” or “trivial” as “intellectual.” Allow me to suggest, in broad strokes, the kind of Story 1/Story 2 contrast I might use to illustrate my take, as I did before.

In Story 1, David is a sexist man who responds to a woman accusing him of sexism by spouting a reference to some obscurely named principle (primarily to make himself sound well educated), followed by the completely chauvinistic imperative: “You don’t know me, nor do I have time to explain myself to you; so shut your mouth.” In Story 2, on the other hand, David is just a regular guy who finds himself called a sexist for something he said a little too carelessly; he responds: “Hold on, it may have seemed mean-spirited to you, but I just honestly didn’t know what was right. Don’t accuse me of something when you don’t know where I’m coming from.”

The point is the same as before. You may feel strongly one way or the other, and I’d be lying if I pretended not to have a certain opinion myself; but at least ask yourself this: what makes you so sure? Are the dual stories above not similarly plausible to you? Is there really enough information here for you to distinguish whether Karp is more like the first or the second David?

In closing, I’ll make a disclaimer. I am fully aware that it’s easy for me to make arguments like this, because I am a privileged male, and regardless of whether I judge another guy’s intentions correctly or not, it isn’t something I personally have to worry about one way or the other. I understand that basically any opinion I form is colored by my own privileged experiences and my privileged status. I know it’s less straightforward for any person who has experienced a significant amount of discrimination in his or her own life. But I contend that my point is not thereby invalidated. It’s harder to adopt a non-racist attitude for a white kid who grows up in an all-white neighborhood and whose first encounter with a black person comes in the form of a mugging. Or for a black kid who grows up in an all-black neighborhood whose first encounter with a white person comes in the form of a white police officer beating one of his friends for a crime he didn’t commit. People do face these circumstances, and they do form racial prejudices, and it’s easy for me to say, “You shouldn’t feel that way”; but that doesn’t make me wrong.

I guess at the end of the day, I would just say that we’ve all met that guy at the party from Doyle’s Tumblr post. And we all have these certain cues we recognize to help us identify that guy. And the “Can I use the N-word” question might be a pretty strong cue, in many people’s internal databases of that guy identifiers. And David Karp may be that guy. But he may not be.

*I like to refer to this blog as if it’s a long-running establishment with tons of followers who would be puzzled by this digression, hence my decision to address it explicitly. In reality I prefer not to even look at my web traffic stats because I suspect their resemblence to A Romance of Many Dimensions would be too great to bear.

**I’m basing this entire discussion off bits and pieces I was able to find through Google. It’s possible there were in-between bits that I’ve somehow missed, in which case, it’s inevitable that my perception of the whole situation is distorted and perhaps altogether invalid.

***This often describes me.

****OK, I have no idea how John would respond. Probably because John’s not an actual person, but also because I have absolutely no faith in my own ability to end that story in any convincing way that doesn’t make me feel incredibly weird for presuming to know what John would say if he were real.

Walks like a stream, talks like a stream

The whole reason I started this blog was to share my thoughts/ideas, and I almost never post to it. Well, that’s all going to change. Right now.

Here’s an idea I had: there are a lot of APIs out there (including parts of .NET) that involve saving/loading to/from files, and these APIs typically have functions like this:

public void Save(Stream stream);
public void Save(string filePath);

There’s something interesting here. If you are a developer using this API, you can either hand data (in the form of a Stream) directly to the API, or tell the API where to find the data. This seems like a perfectly suitable set of options in most cases, particularly when we’re talking about big, unwieldy files containing a lot of data. But occasionally you might be dealing with a small amount of data, and you don’t really want to go through the hassle of reading, writing, or otherwise dealing in any way with an actual file on your PC. For instance, you might prefer to call the API’s Save method and have it just write to a string. Why not? Or perhaps the API requires that you call some Load method, and you’d like to just put the important data in a string—not a file—to which I say, again: why not?

So this was the thinking behind two little classes I just wrote, ImmutableStreamEmulator and MutableStreamEmulator. From the names you can probably guess what they accomplish: an ImmutableStreamEmulator wraps a string and allows code to read it as if it were a Stream, while a MutableStreamEmulator wraps a StringBuilder and allows code to read/write to it, again, just like a Stream. Simple idea, right?

Source code:

The finishing touch on all this is to make these classes immediately accessible via extension methods on string and StringBuilder. Here they are:

public static Stream AsStream(this string @string) {
    return new ImmutableStreamEmulator(@string);

public static Stream AsStream(this StringBuilder stringBuilder) {
    return new MutableStreamEmulator(stringBuilder);

Now, remember that API that only let me call Save on a Stream or a string which pointed me to a file path? Check it out: now I could just make it save directly to my StringBuilder:

var data = new StringBuilder();

using (var emulatedFile = data.AsStream())

// behold! now I have the contents of the "file" in a string
string emulatedFileContents = data.ToString();

// I can therefore also load the "file" with the API
using (var emulatedFile = emulatedFileContents.AsStream())

Pretty handy, right? No?

Note that these classes are totally unnecessary in cases where the API allows you to save/load using a TextWriter and TextReader (typically in the form of a StreamWriter and StreamReader). That’s what the StringWriter and StringReader classes are for! These classes are specifically for when an API only wants to deal with Stream objects.


If this blog post exists, it’s because is pretty sweet and you should check it out.