Eli status: August 2016

Here's a quick update on how things are going for me right now.

My hands

I've been having various problems with using my thumbs for years, since I injured them through overuse. However, 6 weeks ago, I finally figured out the cause of most of my current issues. It seems that my adductor pollicis was going completely unused (in both hands). That meant my other hand muscles had to do extra work to compensate.

For the last 6 weeks, I've been deliberately exercising the adductor pollicis, and my problems have gotten MUCH better. If I'm lucky, I'll be able to draw again within [...]

Continue reading...

A little update

I still haven't been doing much for a while - mostly playing online games, watching videos, and so forth. Oh, and running a quirky Mafia variant on an internet forum - you can check it out over here on the XKCD forums if you're into that sort of thing. My inactivity has a lot to do with the fact that it's late in the summer, it's hot all the time, and I haven't been talking to other people too much. (Getting at least a little interaction with other people helps me, because it stimulates my mind and gives me new ideas.) I'm going to be going back to college relatively soon, too, and that's discouraging me from getting into projects a bit, even though I still have about three weeks left.

That said, I've still got a couple of projects running. I'm working on them occasionally, it's just that they're not taking the majority of my time.

One of them is that I'm learning more Javascript, so that I can make cool online games and utilities. Check out this extremely-unfinished game for an example of what I'm messing with.

The other is this: Since I'm blocked on the graphics editing software project, I've started just drawing stuff in an existing graphics program (namely GIMP). Here's something I randomly sketched [...]

Continue reading...

Tired of coding


I'm ready to post the novella that I mentioned in my first post here. I did some last editing earlier today. But before I can post it, I have to make some changes to the website, because I don't want to just copy the text into a blog post. And I can't make those changes right away because I'm tired of doing computer programming (colloquially, “coding”).

I don't know why it happened. It's not because I'd been doing a lot of it, because I can sometimes code for weeks on end without getting tired. And it's not because I was failing to make progress, because I had been making progress on my drawing program when the tiredness hit me a week and a half ago. I suppose I could make an analogy to [...]

Continue reading...


(This post is mostly a long rant about my computing woes. Feel free to skim over it.)

The linuxwacom project website says most modern Linux distributions come with Wacom tablet input drivers already enabled. Ubuntu is supposed to be included in this. So I look around on my system, and sure enough, there's already a package installed that's called xserver-xorg-input-wacom. So I plug in my tablet and try using it. Does it work? Nope!

So I download the linuxwacom drivers manually. I have to install a lot new stuff that they rely on. That's pretty normal. One of the things they need is the latest version of xorg-macros. I check on my system, and I have 1.3. I check my package manager, and sure enough, there's an update available, so I update to 1.5. Wait a minute... linuxwacom needs 1.8! And Ubuntu's “current version” is 1.5!


  1. Ubuntu

So I download and install that, manually, which isn't very difficult, just annoying. And I finish installing linuxwacom, and then restart my computer and... YES! The tablet actually works at giving input equivalent to mouse cursor input. So I go and open up some graphics-editing programs that I know are supposed to accept tablet input – GIMP and Inkscape – and sure enough, they also accept tablet input for themselves. Nice!


  1. linuxwacom

And then I spend about 15 minutes messing around in GIMP.

A stylized drawing of a person charging with a sword or something, out of a bright, open doorway.

Messing around in GIMP is pretty nice. GIMP is a bit like a canvas: You can draw on it with a variety of “tools”, and you have the extra advantage of being able to undo your actions, but [...]

Continue reading...

C++ vs. Haskell: ROUND TWO: But I want it to be fast!

(Note from the future: This post was about an older version of this game.)

In the last two days, I've entirely rewritten my game from Haskell into C++! As much as I love the expressive power of Haskell, it just isn't a suitable language for writing things that need to push the boundaries of computers' processing power. This is partially because of the way the languages are designed, and partially because a lot more work has gone into optimizing C++ compilers because it's a more popular language. On the plus side, by writing my game in Haskell first, I feel like I understand the structure of the program a lot better.

On my computer, this version runs smoothly at 100 frames per second, even when you have hundreds of bullets (laser bullets?) flying around in the infinite(!) world.

I've also added a few new features - there's now an infinite, randomly generated cave system, and the bullets last forever instead of disappearing when they leave the screen. I'd post a new screenshot, but it doesn't look much different than before... it's just that it's FIVE TIMES AS AWESOME when you play it.

As before, you can download the C++ source code.

– Eli

Release early, release often

(Note from the future: This post was about an older version of this game.)

Yesterday, I spent all day working hard on my Haskell game – I was so busy that I didn't have time to blog about it!

Luckily, this has been very productive. If you can compile Haskell code, check out the current version of my game!

Right now, the game is about flying around as a green circle in an infinitely large world, and shooting out the walls. Use the arrow keys to move, and click (and hold) the mouse to shoot lasers.

A screenshot of the Haskell game: a green circle drilling a hole in green walls with green lasers

So far, the trickiest part of this project was making an infinite world that would remember all the changes you made to it, without making the game get really slow as the world got bigger.

Amusingly, after I said I wasn't going to keep working on my collision detection stuff, most of the work of this project has been on collision detection stuff. There's a lot of things that could be improved about it (like the fact that I've duplicated a lot of work between ZOrderCollisions.hs and ZTree.hs), but there you go; I'm going to make those improvements next, anyway!

I've released the game under the GNU General Public License (GPL), which means that you can freely copy it, modify it, and release modified versions, as long as you make all the code you add to it available under the same license.

– Eli

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

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

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