Enso Developer Prototype
Today Humanized released the Enso Developer Prototype. This lets people write their own Enso commands, using any language they want (that supports XML-RPC). It's completely free. We've also set up a wiki for sharing tutorials, examples, and coding tips. Here's my page on the wiki.
The evil secret of the blinky NES power light
"Aleksa has discovered Zelda", said the message from Mom. "Do you think we should get her a Game Boy?"
Sunday I went to the suburbs to squeeze in a last visit with Aleksa before the start of a very busy few weeks that are coming up. (the Ubuntu Developer's Summit in Boston this weekend, then the Hackers conference, then I'm giving a talk at BayCHI.)
(I also had an ulterior motive for going to the suburbs, which was to visit Fry's Electronics in order to get a power transistor for a gadget that I'm building in order to demo at one of said conferences. More about this later.)
Mom said she'd get my old video games out of the attic and asked if I could hook them up. "Wait a minute", I said, "If they haven't been hooked up, how did Aleksa "discover" Zelda?"
"She's been playing it online."
Hmmm, interesting. Playing Zelda "online"? Aleksa and Mom wouldn't have the patience to seek out emulators or ROMS. It had to be something that played in a web browser or they wouldn't have found it. Had some fan converted the original game, or one of its sequels, into a Flash applet? If so, why hadn't I heard of it, and why hadn't Nintendo shut them down?
"There's a lot of different Zelda games. Which one did you play?" I asked Aleksa, trying to get more info.
"It's the one with Tarsis as the end bad guy."
WTF? I've never heard of Tarsis. What was she playing? Was this adapted from one of the Game Boy games I'd never played? Or, (a horrible thought occured to me) was Aleksa maybe playing some kind of cheesy promo/demo mini-game provided for free on Nintendo's site?
"She's also been playing Super Mario Brothers".
"Yeah!" said Aleksa, "I played Halloween Super Mario Bros. and Super Mario Bros. Star Catcher and..." she listed off a bunch of titles which did not sound real. Exactly what was going on here?
We got back to the house and Aleksa ran to the computer to show me. Here's the game they were calling Super Mario Bros. and here's the game they were calling Zelda. As far as I can tell, somebody ripped all the artwork from Super Mario World and used it to create a completely unauthorized Flash game. The levels are single screens and the physics is all wrong.
The "Zelda" one is even weirder. As far as I can tell, it's got nothing to do with Zelda other than the swiped artwork of Link used for the main character. Somebody made up an unrelated RPG in Flash, called it "The Curse of Waterdeep: Fellowship of Kings", and used artwork from Zelda. And artwork from Shining Force. And the name "Waterdeep" comes from the Forgotten Realms D&D campaign setting. The word "Zelda" doesn't even appear in the Flash file, only on the surrounding page. To make things even weirder, the page hosting it appears to belong to a church or religious group of some kind. I don't know why they're hosting video games at all. The people hosting the game probably weren't the ones who made it; they may not even know who originated it. The instructions on the page are wrong, too.
Yet, this bizzare bricolage creation is on the first page of hits when you Google "play zelda online". Mom just remembered that I had wasted many hours of my youth playing something called "Zelda", but being unfamiliar with the details, she had no way of knowing this flash game apart from the real thing, and of course neither did Aleksa. I wonder how many other people have been fooled?
Anyway, this was clearly unacceptable, so I went digging through the box of old video games from the attic to find the real Super Mario Bros. and Zelda. Being asked to hook up the NES brought back memories. The only people in my family who ever learned how to hook up a video game system to a TV were me and my cousins Jacob and Bobby; everybody else seemed to think of it as some difficult feat of engineering, so various people were always asking me to hook up the Genesis or hook up the Super Nintendo or whatever. Even though I explained again and again that all I was doing was plugging one end of a wire into the TV and the other end of the wire into the console, it seemed like everybody would rather get me to do it than take five seconds to learn how to do it themselves. It was excellent preparation for a future in tech support.
I found the "Super Mario Bros. 3" cartridge and put it in, offering as I did prayers to the spirit of Shigeru Miyamoto for creating this, one of the pinnacles of human achievement, a profound and life-enriching experience I was about to pass on to the next generation. If you ever had a Nintendo Entertainment System, you know exactly what's coming up next. I knew the cartridge was in right because I could see the curtains that make up the opening screen, but the damn power light wouldn't stop blinking on and off.
I performed the time-honored ritual of taking out the cartridge and "blowing the dust off the contacts", but I knew that this never actually worked; it was always just a superstition that we kids had come up with because we couldn't understand the random cruelty of the blinky power light. Like prehistoric farmers trying to summon the rain, we had to believe there was something we could do to influence our fate.
Back then, I always thought the infamous fritziness of the NES (besides the blinky power light, there was also the Blank Grey Screen of Death; it felt like we spent more time getting the game to work than playing it) was the fault of its weird front-loading cartridge design; every other console in the universe had top-loading cartridges and they never seemed to have problems to the same extent. The re-designed NES2 with the top-loading cartridge slot didn't have these problems, and neither did the Super NES.
But a recent Wikipedia search turned up a horrifying truth: the blinky power light was a side-effect of the 10NES lockout chip. In order to enforce their absurdly restrictive licensing agreements, Nintendo put a lockout chip in the NES to prevent unlicensed third-party cartridges from working. If you wanted to make a cartridge for the NES, you had to sign a contract with Nintendo which said, among other things, that you would not produce the same game for any other video game console; that Nintendo would have the sole right to manufacture the cartridges, and would be the one to decide their sale price and how many to produce. This is how Nintendo enforced their near-monopoly. Maybe this even has something to do with why third-party developers are so reluctant to make games for Nintendo's more recent consoles. Worse, the 10NES lockout chip was flaky and would often incorrectly try to lock out a legitimate cartridge, resulting in the blinky power light. It's an earlier version of what would later happen with copy protection schemes on CD games that can backfire and prevent legitimate copies from working.
I knew most of this story beore, but I didn't know that the lockout chip was responsible for the blinky power light of doom! Dang yo! The bane of my childhood was the fault of a badly-implemented DRM chip put in to protect a Nintendo monopoly? I don't think even Microsoft ever did anything that bad. The Free Software guys are right: DRM is evil!
There are instructions on the net for disabling the lockout chip (cut pin 4). Not only will this solve the blinky power light problem, it also allows you to play European game cartridges, which are otherwise locked out. Because it's a form of copy-protection-breaking, cutting this pin may technically be illegal under the DMCA. BOO! I bought an NES, I own it, it's my property, I can cut all the pins I want, and down with any stupid unenforceable law that says otherwise.
...Although, now that I've seen those crummy bootleggy Flash "Zelda" and "Mario" games, I understand exactly the kind of stuff that Nintendo was trying to lock out with that chip. This is just one of those cases where the cure is worse than the disease.
The happy ending to this story is that I hooked up the SNES and "Mario All-Stars", so I got to teach Aleksa how to play Super Mario Brothers on the better-graphics, non-glitchy version. She's about the same age now as I was when I first played it, and she's equally enchanted by exploring the colorful landscapes of the Mushroom Kingdom and learning how to overcome its obstacles. Super Mario Brothers stands the test of time surprisingly well; even though I'd rather play number 2 or 3, the first game has remarkably ingenious level design, a nice smooth learning curve, and plenty of challenge in the later levels. I'm watching Aleksa retrace my own steps in learning how to play; for now she's just trying to walk and jump her way to the end of each level. It takes a while to master tricks like holding down the B button while running in order to get more distance on a jump, or checking every brick for hidden power-ups, or kicking a turtle shell into a row of enemies. But in alternating 2-player mode, I can go through each level before she does and show her how to do things: "So if you stand on top of the pipe and push down, sometimes it leads to a secret coin room!" I also continue to surprise myself with just how much I remember. "How did you know there was a mushroom in that block?" Aleksa often asks me. "I just... um... I guess I remember it from when I played before."
I'm so happy that Aleksa is at the age where I can share this experience with her. This must be the kind of pleasure traditionally felt by the stereotypical dad when he takes his son fishing for the first time.
Epilogue: Two days later, I was back at the family home again, and Aleksa ran up to me excited, to tell me that she had found the Warp Zone and gone to world 4-1 where the guy riding the flying tooth (she thinks the clouds look more like teeth) is throwing eggs at her that turn into spiky things. I was so proud. Also, she had played it with her father, and done much better than him. "Don't feel bad, Dad" she said. "I had a really good teacher."
Multitasking (A comic with a lot of text in it)
A New Comic Is Posted, Huzzah.
This one took a long time mainly because I had to design a lot of stuff before I could draw it, and designing stuff is time-consuming. Every time I introduce a new character, set, or prop, I need to do sketches first, and this comic has all three. It's the first appearance of Ubuntu-Tan, first appearance of the inside of Yuki's apartment, first appearance of the Mitsubishi MkII Mobile Power Suit, and first apperance of the kotatsu-with-integrated-multitouch-display. (I really want one of these. I wonder if anybody is working on such a thing? If not I might have to invent it myself.) Oh yeah, this was my first time coloring with PrismaColor markers instead of watercolor paints.
Also, this comic spurred me into doing a ton of internet research about traditional African cultures, about the Japanese Self-Defense Force (SDF), and about Bangladeshi geography.
Go read it and leave a comment!
I have resumed training
I had a horrible dream that I had killed two guys and hidden their festering corpses underneath the tatami in my apartment. It was an accident or in self defense or something -- it wasn't a dream about being a murderer, it was a dream about having incriminating evidence that I couldn't get rid of. I couldn't think of what to do with the corpses that wouldn't immediately get me found out and arrested, I didn't know who I could trust enough to talk to about the problem, and meanwhile the corpses just kept smelling worse and worse so that sooner or later my neighbors were going to investigate and get me arrested. I felt trapped. It sucked.
Usually I don't think my dreams mean anything, but this one felt like the festering corpses were a metaphor for some similarly festering problem in real life. Of course -- I hadn't been back to the aikido dojo in a month, but I hadn't called them to say I was revoking my membership either because I was dreading that conversation. It was a festering problem that I couldn't talk about. My subconscious was telling me it was way past time to do something.
It just so happened that the next day, I got an email from Chris at the Hyde Park Peace Dojo asking me if I could come down and teach a class on Monday, since Don-sensei was traveling and Chris couldn't teach it either. I said yes, since this was a good chance to do some Aikido at a different dojo.
But I hadn't practiced in a month. No way could I teach a class cold like that -- I would just embarrass myself and waste everyone's time. So I had to get in some practice somewhere first.
On Monday, I just so happened to find myself awake at 5:30 AM out of some old habit, so I decided to go into the 6:30 morning class at the Aikikai. I figured that I would get my practice in, then face up to Sensei and tell him that I was dropping out of the class. I just had to think of a plausible reason for dropping out that wasn't "I don't like you".
But the class went really well. The only weird thing that Sensei did was that while we were all practicing, he went off in the corner and practiced slumping down against the wall like a discarded rag-doll over and over again. He didn't say anything about what he was doing and he didn't ask us to do it, so I still don't know what that was about. This is an example of why I keep saying that he is a weirdo. But hey! It didn't get in the way of having a great practice session. So what the heck, maybe I was overreacting before and I should just start practicing again. I didn't tell sensei anything about dropping out.
It felt a little like I had broken up with a girlfriend and then found myself bck in her arms a month later. (Not that I've ever done that, mind you.) I was confused.
After work that same day, I biked the 13 miles down Lake Shore Drive to Hyde Park. A sudden cloudburst hit around 47th street and I sheltered under a bridge until it passed. Still got to the neighborhood club soaking wet.
I was the only one there. I waited until 7:40 (bow-in was supposed to be 7:45) and I was still the only one there. Great, the day I go to all this trouble to be the substitute teacher is the day nobody comes. I was about to give up and go home when one other student showed up. But he said he'd rather not train if he was going to be the only one there (he'd rather go do homework instead). I thought that was pretty lame.
I told him that I was at his disposal, so he could pick any technique he was having trouble with, and I'd just help him practice that for half an hour and then he could go. We got through a couple iterations of katate-dori-sankyo, and then about 8pm one more student showed up. This was enough to convince the first guy to stay for a aproper class, so everybody got suited up and we rolled out the mats and got started.
It was a great time! The other two students were studying for 6-kyu and 5-kyu, so they were very much beginners, i.e. they were in the range of ability where I can usefully teach them. I was able to help them out with a lot of stuff. It helped me regain some self-confidence. (I think my sensei would be horrified if he knew I was teaching anybody, because I'm pretty sure he thinks that I completely suck and would only lead newbies astray.) For the first time in a while, I was able to relax and practice in a "vibrant and joyful manner".
This is not to say that I let myself or anybody else slack off; we did some intense practice, I was strict about their technique, and even stricter about my own. I told them all the story about getting mugged in Lithuania, and the lessons I learned from that experience: he who hesitates is lost. Once you start a technique on somebody you can't change your mind. You gotta act immediately and decisively and follow through all the way, without doubt or fear. As several different people said in several different ways at the summer camp, you do not start doing the technique first and then try to "win": you have to win first, at the moment of first contact, and only then can you do the technique. This is how you avoid getting into a contest of strength or other useless forms of struggling. There's a certain feeling of leaping straight into the lion's mouth. I can't quite explain it, but I can sure feel the difference. I tried to impart this to the two students and get them to practice in that spirit.
I'm starting to understand that the hardest thing about teaching is making sure that people are doing uke correctly: that they are not merely going through the motions nor resisting excessively. The "honest attack" that is done without anticipation of the coming response. I think the reason my sensei was frustrated with me so often is because I wasn't doing uke nearly as well as he thought I should be able to. I need to focus on that.
Two days later, this Wednesday, was the day that Aza and I finally went to a Judo fundamentals class at the Tohkon dojo (the one two blocks from my apartment). "We gotta try out a class at that Judo dojo real soon now!" "Yeah!" That's what we'd been telling each other ever since January. Well, we finally did it.
(Man, Aza's chest is really hairy. I can't get over how hairy he is. He's like a rug. "My skin can't contain my manliness" is what he said.)
So, Judo! It's a relief to be back in a white belt again and not be expected to know anything. Also, it's a relief to not wear a hakama. Hakamas look cool, but they take forever to put on and take off and they do nothing but trip you up. The biggest difference in Judo is that it's fundamentally and explicitly competitive. They train people for competition at this dojo. Some of the instructors there have competed in the Olypics. (Dude!) In this respect it's quite the opposite of Aikido, which is emphatically anti-competitive. I have a hunch that this kind of competitive training might help me improve my ukemi for Aikido -- at least, it will help me to eliminate the bad habit of falling just because it's my turn to fall.
At the same time, because Judo is practiced for competition, it's a more controlled environment. There are rules. Nobody's ever going to stab me with a knife or kick me in the groin in Judo practice. In Aikido we need to be constantly aware of the possibility of these and countless other forms of possible attacks.
The practice itself was very genki! Bright cheerful dojo, great big class, friendly teacher, lots of energy. A solid half-hour first of strenuous and continuous "warm-up" exercises nearly had me winded -- I was able to handle them, but I was getting close to my limit. Doing that on a regular basis will surely help build up my endurance. Basic leg-sweeping practice, first alone, then in pairs. Ground-fighting techniques: arm-bars, pins and how to wriggle out of them. Finally, some randoori (free practice) which is the part that I really don't know how to do yet, since I have yet to learn Judo techniques per se.
I think I did pretty OK. The sensei said that I was picking it up very quickly. He made some comments like "Are you sure you've never done Judo before?". Heh heh heh. A lot of things are either similar to Aikido or are universal across martial arts: Keep your back straight and your knees bent, keep your balance in your hips, relax, and breathe. Most of the terminology is also identical, which makes things easy to pick up, and of course I already know how to take falls. People kept wanting to not throw me since I'm a newbie. I had to reassure them that they can go ahead, since I've been taking falls in Aikido for seven years now.
I'm feeling very good about these recent developments. This last month of not training gave me more free time, sure, but it made me feel lazy and unmotivated and uncomfortably comfortable (if that makes sense). I think the cross-training will be good for me. I'm going to try to do one Judo class and two Aikido classes a week for a couple of weeks and see how that goes, then maybe try to step it up from there.
I thought of a great new insult today
If you make a graph of the popularity of things, there's a big spike of a few things that are very popular, followed by a long, tapering tail of the many, many things that are less and less popular. The phrase "long tail" has been used a lot lately particularly in reference to selling things online. A physical store can only carry what it has room for, so it typically stocks only the most popular things. Think bookstores in airports that only sell bestsellers. This sucks for people who want things out of the long tail, e.g. if the bookstores are only selling Michael Crichton and Stephen King, but I want some obscure author like Cordwainer Smith, I'm outta luck. One of the reasons sites like Amazon, EBay, Netflix, etc. have gotten huge is that you can find just about anything there, no matter how obscure. People with weird taste can finally get what they want, and the internet store -- even if it only sells a few of each item -- is selling so many different items that they make a ton of money. Everybody wins, all because shelf space isn't a limiting factor anymore.
Anyway, you probably knew all that already. The reason I bring it up is because we were having a discussion at work today and this topic came up, and we needed a way to refer to the popular part of the graph, the part that's not the long tail, and at the same time two different people said "the Big Hump". It stuck immediately. Therefore, logically, people who mostly want things out of the big hump are called "Big Humpys". So the next time you want to make fun of somebody for having very boring, popular, mainstream tastes, you can call them a "Big Humpy". It's a great insult because it sounds vaguely obscene even though it's not. Especially useful if you are a hipster who hates everything popular and looks down on people who like it.
That's all. Just wanted to share that. "Big Humpy". Heh heh.
Ten ways to make more humane open source software
I posted an article today on the Humanized Weblog called Ten Ways To Make More Humane Open Source Software. A lot of user-level OSS GUI applications have horrid user interfaces. (I like to pick on OpenOffice, GIMP, and KDE as particularly bad high-profile examples, but there are a lot more.) On the other hand, I spend the vast majority of my workday using Firefox, Emacs, and Python. All three of these are open source. The reason I choose to use each of them over the many alternatives is precisely because I think their interfaces are superior. So there is some open-source software with great UI. The article is my attempt to analyze what leads some open-source projects to be easy to use while others are difficult to use. It's a huge topic, and even at around 7,000 words this article barely scratches the surface.
My most manga-esque comic strip yet
It's a new comic and it's only been a week since the last one? That sounds like what I would do if I had a regular update schedule or something! Well, here's hoping.
This strip features detailed drawings of food (name the dish Bucho-san is eating!), a 14-year-old girl in a school uniform, and a silent final panel with rain. I think that makes it the most manga-esque one I've drawn so far. I'm rather happy with how it came out.
Also: I want to draw more close-ups of old people. Drawing all those wrinkles is really fun.
Finally: I didn't know what MATZ's full name was until I looked it up to put into the caption in panel 3. That's when I discovered that Yuki's hero is named "Yukihiro". What a delightful coincidence!