I’ve put together a portfolio of some of my work below… (And yes, I’m painfully aware of visual defects on this very page, something I’d like to remedy when time allows. The problem is that elements normally present on the right are missing on pages (versus blog posts), but the same template is being used… So it’ll be an involved fix, not a simple CSS tweak.)
Websites
bsgo.org | Website for the Bentley Student Gaming Organization
I served as President of the club from 2007 through 2008. In addition to growing the club, petitioning for–and receiving–record funding, greatly raising our name recognition on campus, and training new leadership in preparation for my graduation, I instituted the following:
- Development of a new website based on an open-source template. (Kyle did plenty of the webmaster work, too!)
- Registration of bsgo.org for the website
- Creation of a Mailman-based mailing list for over 100 members, as well as a discussion list for outgoing and incoming club leaders.
- (In progress pending discussion with new leadership) Porting the site to a SilverStripe-based CMS. Thus far the theme has been ported and a sandbox site established.
blogs.n1zyy.com/n1zyy | My personal blog here
- Customized site theme
- Tried my hand at photojournalism, covering a series of events in the 2008 New Hampshire primaries, including MA Gov. Deval Patrick’s visit to Merrimack, the 100 Club Dinner, and even Obama’s July 2007 visit to Manchester.
- Authored a number of technology-related articles
- Experimentation with WordPress as a Content Management System (with favorable results!)
blogs.n1zyy.com | Multi-user blog system
- Set up WPMU (WordPress Multi-User) site with multiple users
- Optimized WordPress performance with a variety of methods, including tweaking MySQL performance and enabling the MySQL query cache, use of APC, and use of the WP Super Cache module. This resulted in a 100-fold performance improvement in benchmarking, with the site now able to handle hundreds and hundreds of page views per second on low-end hardware.
- Created a custom front page interface, built on a group of functions for interacting with the WordPress database and implementing memcache to cache generated pages.
- Performed significant tweaking of established template, including changes to HTML and CSS, as well as cross-browser, cross-platform testing. (The Firefox Web Developer extension was invaluble in debugging a CSS bug.)
- Assembled a complement of tools to almost entirely eradicate spam from the blogs, bringing the spam volume from a historic volume of 500+ messages a day to the present level, with one spam comment in the past three days.
- Maintain dedicated Linux server (Gentoo), including Apache, PHP, and MySQL, as well as ensuring site security and backups.
blogs.n1zyy.com/tools | Set of WordPress Tools
I developed a set of tools for interacting with the WordPress database. The link is public because the scripts cannot do any ‘harm,’ but don’t yet have a sophisticated interface as they remain a work in progress.
- A script to automatically run SQL queries on the tables of each blog, such as changing the timezone and, as well as marking all comments on a ‘honeypot’ blog as spam.
- A script to purge all spam comments older than three days and optimize affected tables.
- An interface showing statistics for all public blogs allowing an easy overview of the system status.
- A listing of all IP addresses used for spamming, including the ability to resolve them to hostnames and use GeoIP code to determine their location, as well as the ability to build a set of iptables rules to ban the hosts from port 80.
ttwagner.com | Personal webpage
- Custom-built interface employing server-side includes of header, navigation menu, and footer.
- Houses a number of projects, including an analysis of the world’s IP allocations and an analysis of each of the world’s ccTLD nameservers and the country in which it is located.
- Web interface (with backend PHP) to my public NTP servers (servicing 5-10,000 users daily)
- As the page serves up a number of very large HTML files, I’ve turned on gzip compression of Apache output, as discussed in this blog post.
BentleyDemocrats.com | Bentley College Democrats
- Created initial site layout based on open-source template, after adapting HTML and CSS layout to conform to our layout needs.
- Assisted new webmaster in care and feeding of site at the conclusion of my term as webmaster.
- Created experimental WordPress-powered blog, although members opted against using a blog at the time.
- Created and hosted Mailman-powered mailing lists for group discussions.
bentley.edu/ghana | Bentley College-Mmofra Trom Parternship
After my August 2007 visit to Ghana, I developed a site at Bentley describing the partnership with Mmofra Trom, a primary school in the Somanya region of Ghana. Bentley has contributed business expertise in planning and running the school, as well as technological guidance.
Creating the site required working the Serena Collage CMS and integrating the site with the school’s established web template. In addition to writing and formatting most of the site text, I worked on adapting various photographs and optimizing them for the web, as well as defining the structure and layout of information. The final step was training others at the school on how to maintain the site and use Collage.
Unavailable & Unreleased Projects
first.bghs.org | FIRST Robotics Team Website
In high school, my FIRST Robotics team was using a mailing list hosted at Yahoo, which was fraught with problems, including frequent downtime and spam. After proposing the idea to team leaders, I was given permission to commission an old desktop system (with a lackluster 300 MHz CPU and 128MB RAM), which I transformed into a “LAMP” setup: a RedHat Linux system, Apache webserver, MySQL database, and PHP for dynamic pages. Among other things, I:
- Launched a PostNuke-based community website, intended primarily for an external audience, and trained members on its usage.
- Launched (and moderated) a phpBB-based forum for team discussions, integrated into PostNuke.
- Launched a PHP-based photo album (based on Gallery), eventually growing to encompass several gigabytes of photos.
- Implemented backup policies for both the webserver and team desktop machines.
- Worked with school officials on IT policy requirements.
- Inspired the school to adopt Gallery for its own photo requirements (on an IIS machine, no less).
- Created and moderated several Mailman-based mailing lists, including announce-only mailing lists and sub-team discussion lists, maintaining web-based archives.
- Performed security auditing of mailserver, webserver, and hosted applications.
Note that the current first.bghs.org website is no longer maintained by me, nor is it based on my work. While it most likely lives on in a backup sitting somewhere, the website I maintained is not currently online.
Unreleased | Optimized Interface to Steelcase’s RoomWizard System
My school spent something like $10 million renovating its library, including the construction of about two dozen small conference rooms, or “group studies.” They were managed by a whiz-bang RoomWizard system, which suffered horrible performance. Increasingly frustrated, I probed through the system and reverse-engineered its workings, where I discovered that each room’s touchscreen interface was its server, and that the room-booking page used JavaScript to contact each of the 20+ rooms to retrieve their system. The system was clearly intended for small offices, not for a campus of 5,000 students, and it was crushed under the load, with mots page loads taking 30+ seconds (if they didn’t time out first), and four or five pages being needed to book a room.
I discovered that the pages had an API, but the location was not mentioned in the API documentation. As chronicled here, I downloaded a firmware image the company provided, extracted it, and eventually found a configuration file for the webserver, where I found the default API interface URL, and verified that it was the same as on the units here.
I then worked on writing various functions to ‘walk’ the units and retrieve an XML listing of reservations for a 24-hour period from each, storing them in a MySQL database. Unfortunately, classwork grew in volume, forcing me to put the project aside as soon as I’d written code to book a reservation. If time had allowed, I intended to create a web interface to retrieve all the listings from the MySQL database using a query that would benefit tremendously from MySQL’s query cache, allowing even a low-powered PC to serve as a webserver to the whole campus, in lieu of the hacked-together system in place. The interface would have taken reservations and used a script to push them out to the appropriate RoomWizard device, acting as a sort of front-end cache, giving near-instantaneous page loads.
I recently learned that the school has purchased a commercial solution that does exactly what my script does, rendering my incomplete code unnecessary.
Intranet Applications
Timeclock Appliance Management Console
After a teammate developed a timeclock (dubbed the “Stomatron 3000″) for our FIRST Robotics team that logged to a MySQL database, I developed a PHP-based Intranet application to present team leaders with various data, including a list of members currently on site, total time worked per member, and an aggregate of the total manhours spent on the project. The statistics were instrumental in recognizing the most dedicated members, and in determining who was qualified to attend our national conference. I also created pages showing ‘anomolies’ in the system, such as people who had been logged in for more than 10 hours, or people who had been logged in overnight, making it easy to maintain the integrity of data even when members inevitably forgot to sign out. (As I discuss when reminiscing here, the system left room for improvement: if I were to do it over again, I’d have made a number of changes to the system to cache data, ranging from page elements to queries.)
Lego League Scoring
Our FIRST Robotics team held a tournament for middle schoolers in the Lego League, the middle-school equivalent of FIRST. The day before the tournament, my Computer Science teacher and FIRST mentor casually mentioned that he’d wished we had the time to write a Visual Basic application to put on a projector as a ‘digital scoreboard’ of sorts.
Realizing that the scoring was very simiple, and that no technology team could use a whiteboard for scoring, I assembled a mockup HTML interface showing the scores in gigantic numbers. It was well-received, so I coded it as a PHP site, retreiving entered scores from each round from a MySQL interface and calculating score. Because it was displayed in full-screen mode, and because we had the luxury of coding it for a specific resolution and specific application, it had a professional appearance, looking more like a tailor-built scoring system than a webpage. (I wish I had a copy of the code!)
We hosted it on the team’s webserver in the school, so that it was only traversing a LAN and thus very quick to load, and used a 30-second auto-refresh in a full-screen web browser displayed on the projector in front of the gym. Because of the short time required, we didn’t ever get to write an interface for entering scores, so instead we gave the judges a 5-minute crash course in using phpMyAdmin and stayed on site for tech support.
The application alone was not particularly notable, although the system got great reviews, including remote family members who couldn’t make the tournament but were able to watch the scores online. What I’m most proud of with this project is that, halfway through the tournament, one astute parent approached the judges and pointed out that the scoring was wrong. The verbal design specs we’d been given were wrong!
Somewhere in server backups from our website sits a photograph of my friend Andy and I in our makeshift office under the bleachers frantically re-coding the system to accomodate a new scoring algorithm. In short order, we pushed out an update to the code correcting scoring. Talk about working under pressure: debugging an application on display in front of a gym filled with people!