So, I was thinking about this game I'm writing. I mostly only have vague ideas at this point, but it's going to be one of those games where you control a human and explore the world and fight various enemies. And maybe you'll find various equipment – different weapons and armor that you can switch around.

I'm a mathematician, so I love generalizing things. So I looked at the switching-around system and said “How much can I generalize this?” And so I immediately thought of allowing you, the player, to switch off your arms and legs and replace them with robot arms and legs, or use cool bio-technology to give yourself tentacles instead. And you can't really have a “switch one thing for another” system unless you can switch one thing for nothing. Maybe you could take off your arms and sell them in a shop? Sounds ridiculous, but I've definitely played games where you can do things like that!

But anyway, the real thing I want to talk about isn't taking off your arms, it's just taking off your clothing, which has a lot of different social implications, for some damn reason.

So I've got a choice. Do I allow the player to have zir character take off all zir clothes,1 or don't I?

Suppose I do. Then I take a nice walk into the [...]

Continue reading...

C++ vs. Haskell: ROUND ONE: What's a programming language, anyway?

This post is intended to be accessible to people who don't know anything about computer programming. If you already know a lot about computer programming, you might want to skip to the last section of this post where I talk about what I'm doing now.

Computers calculate things. They're very good at it. But to get a computer to calculate something, you need to know how to control the computer. If you're a computer programmer, that means having a program called a “compiler” or “interpreter” that takes things you write in “programming languages” and converts them into a form that the computer can use. C++ and Haskell are both programming languages, but they work in significantly different ways.

I can't just say “Computer, tell me all the prime numbers between 2 and 100”, because the computer doesn't understand English. But I CAN open up a Haskell prompt and say:

[x | x <- [2..100], not . any (\y -> x `mod` y == 0) $ [2..(x-1)]]

That's valid Haskell code. It says “Get me the list of all numbers between 2 and 100 which are not divisible by any of the numbers less than them”, and it pretty much says it in that order, too. This is a really short program because [...]

Continue reading...

This is a child-friendly website

Ahem. This will be a policy of my website. I intend to make my website appropriate for all ages of viewers, or at least, all ages that are likely to be able to use a web browser. That implies a lot of different things, so I'm making this post to outline the most important ones.

#1. Words like “fuck” and “shit”1 are totally acceptable here, because nothing's worse for children than censorship.

This is hardly the most important rule, but it's a good one to set the tone of this post. Being child-friendly means treating children with respect. It means treating them as independent human beings. When an adult tells you not to say certain words, that adult is not respecting you. Ze is saying that zir own opinion is more important than your freedom to say what you feel like saying.

This can take subtler forms, too. Some adults try to [...]

Continue reading...

Minor progress on the Haskell exercise and stuff

I've been sleepy all day. Maybe I shouldn't have stayed up until 4:00 AM last night to write my last post? Heh heh.

Also, I should have mentioned this yesterday: I did go on to rewrite my little exercise in Haskell. The exercise takes an image, messes with it, saves it to a file, draws it on the screen thirty times over the course of fifteen seconds, and exits. You can look at my C++ source code and Haskell source code. They're almost exactly the same. Both consist of a quick wrapper around the SDL_Surface manipulation and a list of SDL commands to execute. Neither does much error checking. The Haskell one has significantly fewer lines, but they're about the same in file size. When I ran them, I used my avatar image from this site as the image to mess with. It looked pretty cool.

I was a little surprised at how easily I could write the Haskell code, although maybe I shouldn't have been so surprised, since I've been studying it for a while (not to mention that I'm a very fast learner). Since I love Haskell so much, I'm probably going to stick to it.

Sometime when I'm not so tired, I'm going to write a programming-101 post about C++, Haskell, and why Haskell is so much more awesome. When I say “programming 101”, I mean that I hope it will be accessible to people who don't do computer programming – but as with my posts about gender, I believe that introducing basic concepts before expanding on them is also the most effective way to communicate even with people who are already feminists / computer programmers. It makes what I'm saying be more grounded, more clear, and more precise.

Oh, and also – I have shipping information on my tablet now. The best estimate is that it will arrive June 21, which gives me an entire week to get used to Haskell programming. I think I'm going to try to port my 2D collision-detection library from C++ to Haskell. Or maybe write a cute Haskell/OpenGL game. Or both. Watch me.

– Eli

Scrutinized words: man, woman, boy, girl

“Man”, “woman”, “boy”, and “girl” are scrutinized words on this website. You're allowed to use them, but if you do, they will be marked like this: man, woman, boy, girl, men, women, boys, girls.

I encourage you to use gender-neutral alternatives, like “adult”, “child”, or just “person”, as I do. When I'm specifying someone's gender on purpose, I do it explicitly, as in “male person”.

Womyn and wymyn1 are also included for completeness, because I've seen people use them on the Internet. I wanted to include “guy” in the list, but “guy” also means a lot of other things.


Because they lump together a lot of different concepts, and lumping those concepts together is sometimes harmful to people.

Now I'm going to take a step back and explain that. The trouble is, it's not easy to do that. So I'm going to take another five steps back and [...]

Continue reading...

First progress!

I just finished the task from my last post - I wrote a C++ program to open, modify, display, and save an image file. I'm using SDL for all the image operations, which means that I can only save in .bmp format, but that doesn't really matter, and I can always go and find a better image-file-handling library later.

Now that I know I can do that, I don't really have any immediate tasks left for before I receive the tablet. Maybe tomorrow I'll figure out how to write a Haskell program that does the same thing.

While I'm talking about programming, here's a question for all you present-day readers: I know some of you are pretty tech-savvy and know exactly what I'm talking about, while some of you are not tech-savvy at all and haven't a clue what I'm talking about. I haven't really decided how much knowledge I'm going to assume. So the question is this: If you're not tech-savvy, would you be interested in me writing posts that break this stuff down into the basic concepts so you can follow along? And if you are tech-savvy, would you be interested in me writing posts that get into the details of what I'm doing?

– Eli

I ordered a tablet; now what?

So, I asked the Internet how to shop for tablets. The internet told me, “Get a Wacom tablet. Get the cheapest Wacom tablet you can find.” So I did. I hunted around for a while and then ordered a Wacom Bamboo CTL460 pen tablet for around $50.

Wacom is notable not just for being, essentially, the name in graphics tablets, but also for the fact that they're the only [...]

Continue reading...

Introducing the graphics editing project

This is going to be one of those posts that make me think “Why am I writing a post about this instead of doing it?!”. But it's late at night and I'm not really going to get anything done before the morning, so I might as well go ahead and write this up.

So, I wrote a graphic short st– No, wait, I'm going to tell this in chronological order, starting from way back in the beginning. We could have a long argument about where the beginning really is, and whether it's really a net or lattice rather than a linear story that starts at a single beginning point, but we're not going to do that, because I'm the one telling this story, and I've picked one beginning point that I like best.

It begins with me dorking around with the images from an old computer RPG called Sword Dream. Or maybe it was Yipe!. How old am I – ten? Anyway, it was basically me taking images and drawing over them or [...]

Continue reading...

Scrutinized words: she, he

“She” and “he” are scrutinized words on this website. You're allowed to use them, but if you do, they will be marked like this: She, he, her, him, hers, his, herself, himself.

I encourage you to use the singular “they” or the gender-neutral pronoun “ze”, as I do. You use it the same way as “she”, “he”, or “they”:

Subject Object Possessive


When you call a person “she” or “he”, you explicitly assign a gender to them. Gender is important to lots of people, but these words are very short and common, so you usually read past them without thinking about them. By marking them, I make it more obvious how important they are.

Since “she” and “he” are structural components of the language, it's very hard to avoid using them unless you're willing to modify the language itself. And because they're so hard to avoid, they force you to divide all humans into two classes: The “she”-humans and the “he”-humans.

That division is called “the gender binary”. I don't like it.

If you include the gender binary in every sentence you write, speak, or think, then it becomes part of your [...]

Continue reading...

the epic first post

It is the year 2013, or later. You have just navigated to the earliest post of Eli Dupree's wildly popular website, which has over 100,000 regular readers. Eli has released at least one full graphic novel here, as well as dozens of short stories, songs, games, and other cool things, and is currently in the midst of an even more massive project, which ze is hoping to finish within a month or two.

That's right, I'm talking to you – you, the reader. Usually, when someone writes “now”, or uses present-tense verbs, they mean the time at which they're speaking. But in this post, the present is the time when you're reading it, which I have just claimed is the year 2013 or later. People who write blogs usually talk to the other people from the present, and I'm going to go back to doing that with my second post, but I thought it would be fun to talk to you people from the future instead, just for once. Of course, I'm making a lot of assumptions here, but it's a lot more fun to just assume I'm right than to stick a phrase like “I'm guessing that” in front of everything.

First posts weren't a thing that I thought I liked writing, back when I wrote this post in the middle of 2011. Usually, when I started to get involved in a new thing, I would try to do it a little at a time, rather than make a big, flashy entrance. After all, people usually get more skilled, not less, over time, so how can a first post, or first performance, or first musical album, ever hope to live up to what will come after it? But a good challenge is always fun, so here, the challenge was this: Make a first post that is so awesome that it will still be awesome now that you've seen everything that comes after it.

Since part of the point of this website is to advance the cause of social justice, I did consider the idea of ignoring the issue of awesomeness for this post, and dedicating it to some specific cause instead. On the other hand, I didn't want the symbolic nature of a first post to imply that I was setting up one issue as more important than the other. I wouldn't have been able to consider anything thoroughly, because I would have felt obligated to make everything perfect and even-handed, which is impossible – exactly the issue that made me reluctant to write an epic first post originally. I did make a lot of posts about various social issues soon after this one, but this one was completely dedicated to awesomeness; I didn't even bother to advocate on my own behalf by explaining the gender-neutral pronoun I used in the first paragraph!

Instead, I decided to make a bunch of ambitious claims about my future success!

It's at least 2013

The first question I had to ask myself was this: Who are you? Who will be reading this post? And that led me to a very interesting series of conclusions.

First, the way this website is set up, it is easy to go back to the beginning and read the first post. And there was really only a very short window of opportunity for this post to have been displayed on the first page; therefore, it's almost certainly true that you've deliberately looked back to read it, rather than reading it at the time it was posted.

Second, a good website's readership tends to increase exponentially over time, as more people hear about it, post links to it, and so on. What this means is that there are always a lot more late joiners than early joiners. However, the number of posts I make in that time doesn't increase exponentially, so the late joiners won't have a much harder time reading all the way back to the first post, even ignoring the readers who deliberately jump back to the beginning. This inevitably leads to the conclusion that more late joiners will read this post than early joiners. And what that means is that, assuming I keep producing this website through, say, 2016, you are almost certainly arriving after 2013, regardless of how effectively I publicized it in 2011.

That raises some interesting issues. It means that I'm talking to the majority, while the people who read my posts within a few days are the minority. Most blog posts, by using present-tense verbs to refer to the writer's time, subtly privilege their present-day audience, by placing them in the present; they allow later readers to view the record of events, but do not directly address those readers. Or worse, the present tense refers only to the author's present, ignoring the readers entirely! When a person writes something, and another person reads it, there are two people involved; why should the language establish the time of one event, the writing, while ignoring the time of the other event, the reading, entirely? When I wrote the next few posts after this one, it was only linguistic convention that made me write for the minority of readers from the present, or the even smaller minority of myself. What justification did I have for mentally privileging the present-day minority over the silent majority of onlookers from the future? Or was the future truly so limited that it was right for me to have valued my influence on my present-day readers more highly?

Let's move on.

I have 100,000 readers

Okay, this one was a bit more of a gamble. I didn't actually know for sure that my website would become this popular. But when I made that gamble, the outcomes were skewed in my favor, for two reasons: First, if I was right, then lots of people would know I was right, while if I was wrong, relatively few people would know I was wrong. Second, if I was right, then it would be very impressive that I had accurately claimed such a large readership, while if I was wrong, it wouldn't have been that much of a disappointment, since it's such a high number I was aiming for in the first place. (True, if I've ended up with ten million readers by now, the 100,000 looks like a pittance, but I don't think you'll fault me for claiming only 100,000!) And by the same logic from the last section, if I ever have that many readers, then in the long run, most of the people who read this post will read it when my claims are true!

But that paragraph makes it sound like I wasn't actually that confident about my ability to acquire a large reader base. On the contrary, I definitely was! I had lots of reasons to believe that I would gain a wide following:

1) I went into this task with the specific intention of making my posts easy to read, engaging, and thought-provoking. I wanted this to be a website that all kinds of people could both enjoy and learn from. Thus, I had reason to hope that it would spread both among people who enjoyed reading it for its own sake, and also among people who were serious activists and liked the ideas it was expressing.

2) Remember that graphic novel I mentioned in the first paragraph? I released it one page at a time, in a serial format – i.e. as a webcomic. It's a well-known fact that publishing a webcomic with a regular update schedule brings readers back over and over again. And the e-mail notification system is also an effective way to keep up with the website without having to actively reload the page, for people who have e-mail addresses that they check regularly.

3) This should probably have been the first item on this list, because it's the most important: The stuff I do is really cool. That's why my website was able to spread so quickly by word of mouth (or word of blog, or word of instant message): Lots of people read it and wanted to tell their friends about it – people just like you! Sadly, doing really cool stuff isn't always enough to become popular. History, up to and including the present, is full of examples of marginalized people who did really cool things and weren't recognized for it. But in my case, my cool abilities combined favorably with my societal privileges to bring you a product that can hopefully work towards demolishing the very injustices that created this situation in the first place!

(Yeah, I was an optimist when I wrote this post. You'd better hope I still am.)

I've done lots of massive projects

I'm afraid I went for a bit of a cop-out on this one. Of course I'm working on a massive project... I'm always working on a massive project!

Writing this website was a massive project. Just before that, I finished up a semester of college by writing a novella (which I posted on this website later in 2011). Before I wrote the novella, I was working on writing my own music composition software, and in the middle of all that, I was acting in a full-length play. And a day or two after I wrote this post, I started working in earnest on my next massive project, where I wrote my own graphics editing software – the same software I went on to use to write the graphic novel I mentioned.

So, in short, I had this very clear knowledge: I would have been walking on treacherous ground if I had claimed that I wasn't working on a massive project right now.

So keep an eye on the website, whatever year you're viewing it in, because... you know that massive project I'm doing? I'm hoping to finish it within a month or two.

– Eli