Cult of the Bound Variable

The International Conference for Functional Programming sponsored an interesting competition over the weekend of July 21st in 2006. I was a member of The Bobcat Hackers

The Bobcat Hackers consisted of:

  • Jeff Craig
  • Heath Fudge
  • Stephen Schultz

I learned of the competition two days before it went live because I decided to check Slashdot while bored at work, which I hadn’t done in years. The competition looked interesting, even though we had no information, so I asked Heath, and then we asked Steve, and we when for it.

As we had about two days warning this year, we all had plans for this weekend, and thus worked on it over IRC whenever we could. Usually we’d be alone. We were further hampered by not having a CVS or SVN repository to share, and the only system we all shared shell access on belonged to the Computer Science Department at our alma mater, Montana State University. Needless to say, that system is configured not to allow processes to consume huge amounts of memory or processor time, as student code is constantly run on it. This led to some interesting issues.

As a result, the majority of the development on our Virtual Machine was done on my home Linux machine, which unfortunately I was not able to configure for remote access. Friday was largely lost, as I had to work until five o’clock, had dinner with the girlfriend’s family, and Heath and Steve has plans as well. However, I was able to get together a basic VM in C that could run the Universal Machine code, albeit with some difficulty. For some reason, the NAND operator proved to be more difficult to implement than it should have been. Memory issues were also rampant, and the UM would seem to have trouble with properly releasing memory, plus there was no easy way to turn off debugging messages, which slowed the system down to an excruciatingly painful, but ultimately useful rate.

Finally, on Saturday afternon, I decided to rewrite the VM from scratch, which I was able to do in less than an hour, but I still couldn’t get it to run. This was apparently a memory issue, as when I woke up, and my system memory usage had gone to almost nil, I had no trouble decoding our codex.

General Files:

guest

Finally, I could load up the UMIX binary. Of course it was still slow. By this time it was Sunday, and Steve was driving from Las Vegas back to Bozeman. So it was down to only Heath and I, and our painfully slow VM, which wouldn’t run on the Computer Science Server due to it’s resource demands.

Regardless, we were in. Heath and I worked through the QvickBasic on the guest account. It is really hard to count in Roman Numerals when you haven’t done it in years. After some false starts, I got this version of the password cracker up and running. It allows you to chain together all the usernames on the system, so you don’t need to bother with running the command more than once. Unfortunately, the code wasn’t useful at the end of the contest, because we didn’t have enough time to run it. However, the limited cracker, had netted us two passwords, ohmega and howie.

guest Files:

ohmega

2d is the most bizarre idea for a programming language I’ve ever been subjected to. However, after reading the spec, it because clear it worked in a similar fashion to LISP in many respects. By the time we were really working on the 2d problems, it was getting late on Sunday, and we were unable to get a working solution together for any of these. I almost have a solution to Mult, but I was approaching the problem from reverse of the direction I should have been (using plus before mult), and it made the module needlessly complex, and functionally incorrect. I’ve since corrected that, and have completed mult.2d, which was worth 35 points. My understanding is that some have managed to get 38, but I’m more interested right now at working out the other problems than maximizing that score.

ohmega Files:

Currently, that’s as far as I’ve gotten, though I intend to keep working, and trying to solve the problems. I have downloaded another UM implementation, which is about 95 times faster than ours, and I am studying it to see how to better implement my own. We plan to compete next year.