What’s Been Happening
So, what’s been happening with me? Time for an overdue update…
Class Projects
Today I turned in all of my final projects for the semester. I had one of these for each class and they were all, of course, due on the same day.
NinjaBoggle
In my Concurrent Programming course we had to demonstrate our knowledge of concurrent techniques and applications of parallel algorithms by developing a multiplayer Boggle game in Java. The concurrent part comes from the server having to handle many games and many players simultaneously without slowdown. The parallel part comes from solving Boggle: In order for the game to score your answer it needs to know whether the randomly generated board contains the word you guessed. So thus it has to solve the Boggle board before players are allowed to guess. This is a parallelizable problem (a stupidly simple one, admittedly) and we had to develop an algorithm which would solve the board on a computer with more than one processor efficiently. E.g., if you had a 8 processor computer it should solve it in roughly 1/5th the time of a single processor computer.
NinjaBoggle meets that requirement with flying colors. It solves a 4×4 boggle board in ~30 milliseconds on a 8 processor computer or about 300 milliseconds on my desktop computer, Resmiranda.
At the project demos last week NinjaBoggle was the unchallenged ruler.
NinjaBoggle was a collaborative project with my friend Mikel. Together we developed a slick GUI client, a robust server which has been tested with hundreds of simultaneous players and games and, well, a fun game. I’ll be releasing the source code shortly, but if anyone wants to challenge me to a game of NinjaBoggle, just let me know. I can put the server online. ![]()
Chord
For my Operating Systems course we had a very ill-defined final project. It took me all three weeks it was assigned to complete, partly because the project description contained many, many English and factual errors. The amount of incompetence demonstrated in the project’s description is nothing short of hideous. Anyway… The project itself was to implement a peer-to-peer network, in particular the Chord distributed hash table protocol. Only, slightly different.
This project just counts as evil. I finally got my implementation to work on Saturday night after throwing away the project description and simply reading all of the original papers which describe the protocol. I put more than 38 hours into simply debugging this project and about 10 or 12 more doing the actual code writing. Again, simply evil.
On the plus side, I’ve now implemented a reasonably complicated and very robust peer-to-peer application. With a few more hours of coding I could add file transfers to it and make my own Gnutella or Kazaa-like peer to peer network…
One other piece of amusement: If I were still living on campus I would have gotten banned from the network for testing this project as it would have violated the Dept. of Housing’s no-server / no peer-to-peer policy.
Remote Key-logger
And in my Network Security class my group decided to do a cop-out project and develop a Windows-based key-logger with remote log transfer abilities. The majority of my work on this project went into making Microsoft Visual Studio 2005 work in my Windows install in VMWare.
For your reference, yes, the key-logger works rather well. It has some advanced filtering features like only logging keys and mouse-clicks in windows or text boxes that involve words like “password”, “social security number” and “account number”. It also, as the name implies, transfers its log in a obfuscated format to a remote web server every couple of hours to simplify the task of retrieving this possibly-compromising data. I wrote the remote-transfer routines, the standalone log reader and tweaked a bunch of other stuff.
Yes, it shows up in the process list in Windows — we didn’t do anything really nasty with it. We’re not black-hats, after all.
Finals
Now that those three projects are turned in all I have to do for the next week and a half is study for my final exams. I have one this coming Friday, one next Wednesday and one next Thursday. I’m ready already, but I’ll be studying, no worries.
ACM Election
Tonight was the officer election for the local Association for Computing Machinery chapter. No, I didn’t run for anything (the job of managing/coaching the programming team is too time-consuming in the fall already), but I did print up signs saying “VOTE FOR TIM! Invest in oil!” and “The Flying Spaghetti Monster votes for Tim!”. Tim is one of our top members of the Programming Team and was the current ACM Treasurer. He’s fiercely devoted to the club and with 12 signs scattered throughout the meeting room I figured that Tim would be a shoe-in for the presidential position. I was wrong. He lost to a guy named David that I’ve only seen once before. How disappointing.
On the plus side of things, we ordered 10 pizzas and 10 2-liter bottles of soda for this meeting. 11 people showed up. I managed to fit two 2-liter bottles of soda into my backpack and acquire them for the good of my apartment. There was much rejoicing. I’d have nicked a few boxes of pizza but I couldn’t figure out a way to strap them to my bicycle…
Civ IV and computer components failing
I got my copy of Civilization IV last week, much to my excitement. I haven’t had much time to play it due to all of my projects but I’ve been looking forward to the coming reading days as excellent opportunities to intersperse study with building an empire to stand the test of time. However, much to my annoyance my periodic hardware problems in my computer came to a head tonight: my SIIG ATA IDE controller I use for my second hard drive fully failed at around 8 pm tonight. No longer will Resmiranda boot with the card installed, so it’s destined for my trash can. Without this card I can’t use my second hard drive and without that drive I cannot operate my RAID0 array which has Civilization IV installed. My RAID1 array is still operating without that hard drive but I’ll have to wait on the replacement before I can get back to my new game. I’ve ordered a new card (with 2 Serial ATA ports on it in addition to the IDE port) but it won’t be arriving until Saturday at the earliest.
Ah well, that just means I’ll be doing more reading and less hard resetting of Resmiranda since that card won’t be locking up the system anymore.
I’ve also had to order a new battery for my UPS: During a routine demonstration of what a UPS does (yanking the power cord from the wall) a most unexpected thing happened: my computer lost power. The whole point of a UPS is to keep the computer running from its battery even after power has been lost to the building… but if the battery’s dead then that’s difficult to accomplish.
The stupidest part about all of this is my UPS is connected to my computer. On the 11th of January it started alerting my computer daily that its battery was dead and needed immediate replacement but I never bothered to look at that log file. Whoops. Lessons learned…
Linux Users Group
Last week I organized a GnuPG/PGP key-signing party with the local Linux Users Group. A key-signing party is a meeting where several people who use public key encryption get together and authenticate each other in person and then sign each others’ encryption keys to build a “web of trust.” This is important because without some sort of trust mechanism it’s impossible for anyone to look at an encryption key purporting to be mine and be certain that it’s not fake. If you’re interested in seeing the initial GatorLUG Web of Trust (includes a graphic), look at this page on the GatorLUG website.
In addition to organizing that key-signing party I also was at the last minute drafted to give a presentation on GnuPG, encryption and privacy at the meeting. And when I say “last minute” I mean it — the person who was supposed to give the talk cancelled during the meeting, so I was volunteered to stand up with the mic and blindly explain public key cryptography, the whole “web of trust” thing and why all of it mattered. I know I didn’t do all that well, but nobody complained, booed or threw Cuban food so I wasn’t terribly offensive. Chalk that up under “acceptable impromptu presentations…”
Summer Prospects
Summer is nearly upon us! Or me, at least. I’ve got several things lined up. First, my school schedule for the summer looks like this:
- Tuesday: Programming Language Principles, 2pm - 5pm
- Thursday: Programming Language Principles, 3:30pm - 5pm
- Whenever: Individual Research with Prof. Paul Fishwick, the Aesthetic Computing guy
Beyond that I’m applying to the Google Summer of Code and considering a part time job with the University’s Bureau of Economic and Business Research with a bunch of Gentoo Linux hackers. I’m going to do at least one of these two things, possibly both… I might end up busy for the next few months. ![]()
6 Comments so far
Leave a reply
Busy seems to be how you like it, son. Thanks for the update!
Lego Ninja!!
Hm. “I couldn’t connect to the server you specified. maybe it’s not up?”
What must I do to Boggle with ninjas?
“…if anyone wants to challenge me to a game of NinjaBoggle, just let me know. I can put the server online.”
Doh.
We tried teaching her to read, but once they figured out how to speak over the Internet on WoW, she was a goner. Now she can only read l33t (and sometimes 13-year-old girl IMSpeak).