While my first programming experience was writing GUI (Graphical User Interface) programs as a hobby, my first professional computer experience was writing web-based programs (CGI). Web programming has gone on to be the majority of my programming, though I have also done a fair amount of sysadmin related programming. More recently, I've been doing mostly embedded development. The projects listed here are some of the more interesting projects that I've done or been involved with.
Solartech Platform
This ambitious project is still under way, but I'm responsible for designing and implementing the user interface and control software for Solartech's next generation of solar powered message sign controller. I'm also responsible for the design and implementation of the desktop interface software and the communications protocols. We are receiving some help in the implementation from an outside contractor, who I am supervising.
Nordea NY Intranet Web server
The main administrator for the NY branch of Nordea Bank (Scandinavia's largest bank, the NY branch has over 100 employees) wanted to move the branch to putting many of its documents on an intranet web server in html format. It would make finding documents easier and also allow auditors to have easy access without having to use many types of software. The ability to do text searches through all of the documents at once was another attraction.
The problem is that no one in the branch was familiar with HTML, and most of them had neither the time nor (understandably) the inclination to learn it. I designed the system, which we called InfoNetNY, so that people would be able to just export their documents to html format in a particular directory on the file server and software that I wrote would take care of the rest. They gave each file a descriptive name, and my CGI program would create the directory indexes and make them look nice. It would handle the creation of sub-folders, as well as allow people to insert documents on the top and bottom of the directory listings.
The software that I wrote went well beyond the traditional directory listing. It modified the names so that they were attractive (for example, removing extensions and adjusting capitalization) and sorted the documents by type. It also provided side navigation on a sidebar as well as navigation of the directories that the reader was in along the top. All of this was fully dynamic. As far as the people publishing content were concerned, all they had to do was create and name files and directories on the file server.
Eventually performance became more of an issue, and I rewrote the software as an Apache module. As time went on, it also became clear that the novell file server, and later the Microsoft file server, were too unreliable for the intranet server to trust. I added some scripts which checked every minute that everything was OK. If it detected any problems, it would take down the appropriate part of the system and restart it. This made InfoNetNY one of the most reliable systems in the branch, and also very easy for the network administrators to deal with, because they could just forget about it. No matter what they did, as soon as the file server was working, so was InfoNetNY.
The Alfred Student Organization Server (orgs.alfred.edu)
When I was an undergraduate at Alfred University, I was a member of several clubs. For at least some of these, I helped set up a website and more importantly, a mailing list. Typically the presidents of clubs would just maintain a list of the email addresses of the people in them and use that to communicate with them. It worked well enough in that direction, but it didn't allow members to communicate back efficiently. A full fledged mailing list was a substantial improvement.
When I joined the web team, it occurred to me that while clubs that I was a part of were getting these technological benefits, most of the clubs were not. I proposed a project to set up a server which would have a mailing list, web site, and some other benefits. It dovetailed very nicely with another proposed project to create a website template system for Alfred student organizations. Organizations which wanted an account would go a web page where they would fill out a request form. Once the form was entered, the people in charge of granting or denying the request — which was a different set of people depending on the sort of student organization — would be notified of the pending request. They would use a web interface to grant or deny the request, and the requester would be notified and instructed how to proceed.
After I got approval for the project, I developed it over the summer, coordinating with the person who was developing the website template software. The system took about two months working full time to develop, and it gave me a real appreciation for just how much of a program's source code is taken up by all of the checks for error conditions which the user will hopefully never notice. When it was done, I was very proud of the system, though. It carefully checked to make sure that everything was working at every stage, and would automatically email me with a full problem report in case anything did not go properly. If a user ever ran into a problem, they wouldn't have to submit a but report; I would automatically get it without full information for debugging purposes.
ElainesPhotography.Com
This site required a web interface to allow the photographer to showcase her work with minimal effort. The site allows titles, descriptions, allows both to be edited, and supports re-ordering of the pictures. It also automatically sizes the uploaded images to maintain a constant megapixel target.
Web Email Client
For a senior project in my computer science major at Alfred, I designed and implemented a web email client. It supported POP3, IMAP, attachments, and was highly configurable. It had a variety of frame and no-frame configurations, and had optional icons. The most difficult feature to implement was secure Perl hooks. There were a variety of places in the program where a user could upload Perl code to execute on the server side to better deal with his mail (for example, he could implement complex filtering rules to delete messages, or could change the From header based on the To field of the message that he was responding to). This code was run in a secure environment so that uploaded code did not pose a security risk to the server it was run on.
