CS476 Represent!
Heh, this is a Friday shout out to my project group for CS476–Ed (Myung) Kim, Roger Chang, and Craig Lichtenstein. These guys were a great group to work with as everyone really took responsibility for their parts of the project and helped to deliver, what I felt, was a pretty cool application.
First, a little abstract. In college computer science courses, even though you’re told that you’re supposed to work on programming assignments yourself, I think that no one really ever did. If I may opine, this is a poor idea to begin with as no programmers in the real world work in isolation. Now keep in mind, there are different working relationships. In some cases, people are just moochers and just want to copy your code or steal your solution ideas. In others, it’s really a relationship where each of the students feeds off of the others to arrive at the solution together. I had such a relationship with one Lew Fernandez, a fellow computer science major who was my roommate for half of the semester (a rocky freshman year). I’ve always been one of those guys that could figure things out better if I had to discuss and explain different aspects with other people.
At some point, the idea occurred to me that it would be cool if we could work on the same codebase, collaboratively and interactively, even from remote locations (for example, if he was on one campus, and I was in our dorm room) without having to install any software. Basically, you could work on code collaboratively from anywhere that you had access to a web browser. Thus was born the idea of what would eventually turn out to be WebEdit, the project I designed for my CS476 Advanced Web Applications course.
This application popped back into my head recently as I was browsing a post on Web 2.0. I came across the application Writely and it clicked, immediately, that what we had built was eerily similar to the idea behind Writely. Admittedly, the implemenation and polish is very different (ours was slapped together in what I would say was roughly a week’s worth of development time). But it’s nice to know that we had some good ideas back then.
WebEdit (aka JavaCVS3), utilized a Java applet frontend embedded in a web page that could communicate with a central server using Java RMI. Chat was also in there, but that required a socket connection between the applet and the server, so it was limited somewhat depending on the networks and the firewalls sitting between any given client and the server. The really cool part was that we didn’t explicitly use the file system to manage files; everything was done through CVS. Projects had to be imported to a CVS repository after which, different group members could check out a working copy by simply selecting the project from a drop down (projects were associated with groups). As you’re working on your working copy, you can update your copy if another user commits (you are notified interactively) and, using CVS merge, we were able to automatically merge your changes to those that were checked in by the other user.
While I’m here, I’d just like to take a moment and thank the guys for doing such a great job on the project and really working like a team (we pulled at least one 10 hour programming session topped off by celebratory coffee and doughnuts from DD). As I was digging through some of the old documentation while trying to get everything set up again (to be clear, it was lacking in that respect), I was just amazed by the level of detail and attention in the documentation, especially by Ed; it made the process a bit easier for me.
So in any case, all this nostalgia made me want to see it up and running again. The original application was designed to run on the Unix platform (including all of the sub-systems like CVS, Apache, and MySQL). I know that at some point, after I graduated, I had tried to port our work over to a Windows platform quite unsuccessfully and gave up. I was somewhat saddened as it was great work, but just not enough documentation/information to set it up and make it work on a different platform…until today.
After a lot of digging, prodding, and trial and error, I finally got it working again! I had to substitute CVS with CVSNT, not knowing whether CVSNT would work exactly like the version of CVS we were running at Rutgers (no one ever wrote down the version). It took me a few tries, but I finally figured out the version of Java that we originally compiled the source with (or at least the highest version without issues). I also had to reverse engineer the database from the codebase (the database documentation was very high level and I didn’t have any sample data to work from) and change the code to work with SQL Server instead of MySQL. After a whole day of fidgeting, I finally got it working again! Joy! Particularly enjoyable since I haven’t worked with Java in so long (roughly 2.5 years now).
So this post is for you guys, if you should ever happen to stumble across this blog π
Well i worked on my code projects in RU by myself. Oh good old times in school huh? Oh where have you goneth? However, i agree about the rest of the stuff – "code parasides" and "idea sniffers" where everywhere. I even remember some people hanging out by the printers waiting for others to print their code only to grab it and run away π
"I even remember some people hanging out by the printers waiting for others to print their code only to grab it and run away"
Wow. Now *that’s* shameful, but I wouldn’t put it past some of the low-lifes that ended up in CS.
For most of the classes, I pretty much worked with one guy I roomed with my freshman year or worked solo. During the years that I was in CS, we had several 300-400 level courses which required teamwork. And for good reason too, as in the real world, most projects are completed by a team.
I really miss those days when everyone in the group just loved to sit down and write code, play a couple rounds of games, and write more code π Fun times indeed! I think that because I mostly work with people in their late 20’s to late 30’s, I don’t meet many who really have that kind of time to commit to programming for fun.