Miscellaneous Accomplishments

These are not guarenteed to be organized in any way whatsoever. This is just a list of things employers might be interested in.

Took PSU-CS's first and second term graphics classes. Alas the person who was teaching these classes was more knowledgeable about the low level bit blasting. Though I passed, I'm somewhat doubtful of the relevance of these in today's environment. On my own time I've done some exploration on my own, though I do not feel I have complete command of the OpenGL API though I'm familiar enough to do useful work with it (note I've been accused, rightfully, of exposing everything to very high standards, so others might claim command of the API with my level of knowledge).

The program was called "Pascal", after "Pascal's Pyramid", one of several of fractals it drew. Pascal was a fun little program. On my list of projects to do at some point is to add a proper parser on to Pascal so it can draw a much greater variety of fractals without recompilation (one of the fractals was a plant which required fairly complex code to do, but with a proper parser it would of been simple, although it would of needed to handle general 3D L-systems).

One can be forgiven for guessing that one particular PSU professor (Bart Massey) is nuts about combinatorial stuff. I took and passed the "Combinatorial Games", and "Advanced AI" classes. The games focused on adversary search and all the funkyness you get to do. Advanced AI was kind of misnamed, it was more about artificial stupidity than artificial intellegence. Unless you're dealing with some special class of problem, you don't make the computer smarter, you focus on dumbly testing the right thousand future possibilities. Anyway I'm aware of the wackyness of how you guess at NP problems to get good enough solutions.

Ah Cryptography. Wonderful fun. And disasters waiting to happen if you get it wrong. Took it. Passed it. Enough said. Well, I know how to implement cryptographic algorithms. I also know enough to use existing libraries rather than implement my own.

Parallel Programming, another area of wonderful insanity. Boy, shared memory is wonderful stuff. I'm familiar with various parallel architectures, and how to deal with them. It looks increasingly likely that low-end systems will be parallel at some point in the future, due the problems of increasing clock speed. ccNUMA looks like a nice architecture, but we've yet to see it on systems with less than 16 processors (low end SGI hardware). It looks like it might be reasonable to implement a HyperTransport to gigabit ethernet chip, and then ccNUMA might even be pretty cheap. Failing that I wonder if it would be possible to implement cache-coherence in software. AGP 3.0 has enough bandwidth to support 8 full-duplex gigabit ethernet channels so it might be possible (the question is whether the performance would be useful).

CS departments tend to be fought over by engineering and mathematics. The CS department at Portland State University requires taking (and passing) a two term compiler course. Given that elsewhere you can see I got the degree you would be safe in concluding I managed to pass it.

I think I've got full command of at least 98% of the C programming language. I suspect I've got full command of 99%, and I might even know the entirety of the language at this point. I can't quite deny the possibility of some minor rarely used operator, or some rare quirk of surprising me, but it has been quite some time since the last one (I'm familiar with bitfields, are most CS grads?).

I've found security holes or at least weaknesses in a number of places. I do not feel I should discuss the two most recent of these I feel I should hold off for now; though they were merely weaknesses not actual holes.

I'm scared by what professors sometimes write. At one point they were running a class on CGI. For homework submission they were supposed to setup a directory with the CGI working, and include a professor written CGI that would return the raw contents of a file (Perl), rather than executing it. Interesting idea, there was some attention to security, it would give an error if a target file began with '.' or '/'. Does work as long as there aren't any subdirectories, however if there are any subdirectories it is game over (get foo/../../../../../../var/mail/warren).

On AquaMOO (mentioned elsewhere), they've got a MOO wide @shout system. This thing had the ability for players to stop listening to them. The function ("verb" in MOO terminology), modified the value of the on/off switch according to the argument given. Works fine, until you write a function which leaves the second argument intact and takes the player to target as part of the name of the function (interesting ability of functions in LambdaMOO). This got closed pretty quickly when I pointed it out, but it was an interesting hole I found.

Ah, way back the BBS days... The ole pure turn based multiplayer games. One such was "Piggy", whoever managed to be on top of the pile got to have double their normal online time until someone pushed them off the top. Sounds nice and innocuous. There was also the "Time Bank" for days when you were on for really short period and wanted to save time for days when you were on for a really long time (ah yes, good ole Perihelion!). Well it becomes interesting when you read between the lines of the Piggy explanation. I discovered that it did double your online time, it did this by simply retrieving the online time left and doubling it. This worked well for those long stretches when one person was forever on top, because this was done during the sign-on process. Thing is this doubling took place immediately when a person tookover the top slot, and if one withdrew a lot of time from the time bank then out got significantly more than double one's normal online time. I believe the BBS program used unsigned 32-bit numbers to keep track of current online time. I eventually discovered that the time bank program used signed 32-bit numbers to keep track of time. I notified the appropriate parties of this weakness.

I'm good with computers (real surprise here, right?). If needed I can bring up people to confirm this. Even if you slim down the comparison to those who are good, I am good, very good. If needed the world is littered with people who can confirm this.

The Portland State University CS department regularly sends teams of students to the ACM Programming Contest. In 1999 I was almost amoungst them. I participated in a number of the practice sessions (during which I tended to be the person, or part of the group that was furthest along). After a number of sessions I was advised by a member of the faculty to concentrate on my degree and not participate in the contest, at some future point I might well participate as a graduate student.

Ah yes the bad ole days of MU*s. One server in this catagory is LambaMOO. As of my last contact it had around 5000 players, 100-150 online at a time, and more than 100,000 objects. I did some original programming on this MOO, the MOO was ruled by a quota system because space was at a premium. I managed to get reimbursed for the full space used, which given the scarcity of space was was an accomplishment. AquaMOO was another MU*s I believe I had a noticable impact on. If you happen upon it you're very likely to find things I've done. There was quite a bit of original work done there, which got copied elsewhere. My first experience with object oriented programming was on LambdaMOO. LambdaMOO is a good example of where OO is very powerful, the one lack was the absence of something like Java's "interfaces."

Hmm, something about libX11.so... Well, I've gotten things to work directly on top of Xlib I'm under the impression this is suposed to be near impossible, but I did it. I wouldn't care to talk directly to the user using Xlib, but I certainly managed to draw stuff using Xlib.

Ah yes thinking of Xlib, I've also done stuff with the XForms library (useful library, but given that GTK is taking over...).

Hmm, I'm unsure why Tcl/Tk is not on my main resume. Probably because though I've conquered it (both as a scripting language, and adding stuff on to do interesting things), I've found it very annoying.

I've also managed to write a small set of tools to directly talk to disks via /dev. Using these I managed to retrieve 95% of a failing disk. After transfering the retrieved data all of the user data on the drive was successfully recovered. Man the days before dd_rescue and parted(?) were tough.

I've been meaning to work on conquering PalmOS, but I haven't gotten to it yet (also been wondering what I need on my PDA).

I've read a book on the topic of compression. The book is a couple years old so what it covered is not current. This includes knowledge of Huffman, LZ77, and LZ78 (as well as their close cousins RLE, RZSS, and LZW).

I hope to gain some more knowledge of hardware, getting comfortable with building interfaces to computers, and getting them to do what I want. I've certainly got the logic needed, I'm just not comfortable with how the wiring is done and what chips are needed.