Zampus

November 8th, 2008

The reason it’s been so quiet around here lately is because I’ve been doing something I swore I’d never do: working at a non-freelance full time salaried job.

I started working at Zampus (a local web development start-up) in August. At the beginning I worked four days a week (I had a few freelance projects I wanted to finish up) but I quickly moved to doing full time work. The hours are flexible, which is nice. I started out coming in at 11 and leaving around 7 but I soon got tired of not having much free time in the evenings, so I slowly worked my way earlier towards my current 9ish start time. I’m not much of a morning person, so it took some time to adjust my internal clock, but now waking up early is much easier.

The transition from having so much freedom in the ways that I work into a more structured environment was less challenging than I expected. Part of this I can attribute to the casual and flexible nature of Zampus. Being a small start-up lacking all of the overhead of a traditional corporate bureaucracy, we can focus more on what we need to do and let individuals complete tasks on their own terms. Training my attention span to last 7-8 hours and adapting my work habits accordingly were the most difficult parts. Doing freelance projects, I usually didn’t work for more than an hour or two at a time, and I’ve adapted this style to Zampus work by switching tasks about that often to keep myself from getting stuck in ruts. Trying to find a middle ground between all of the developers’ different coding styles and skills has been tough as well, but now I’m starting to feel like we’re finally becoming a well-rounded and cohesive team.

When I started this job, we were spread across a few projects, but since then we’ve focused all of our efforts on our namesake, Zampus.com. It’s an “insider’s guide” to college life. Part review site, part forum, part video sharing site, and much more. The site is built around “entries,” which can be anything from local restaurants to TV shows to fraternities to whatever else college students have on their minds. Instead of encouraging users to create certain types of content, we provide a basic structure and let the content evolve naturally. Users can attach photos, videos, maps, and more to entries, and categorize them with tags. Entries may have one or more “definitions” (this term might not stick) that can be provided by any user. This usually amounts to reviews or personal opinions of whatever the entry happens to be about. Right now we’re Cornell-only, but we’ll soon begin work making the site expandable to other colleges and universities, without losing the community feel for each school.

The site currently runs off a Fedora server and is coded in PHP. Our data lives in a MySQL database (except for images and videos). The frontend makes heavy use of AJAX to provide a dynamic and free-flowing user experience. Unfortunately, this means javascript is required to do anything except basic actions—which goes against my progressive-enhancement instincts—but I’ve been justifying this by keeping our target market in mind (who almost always browse the web from a javascript-enabled browser) and making sure that accessibility sacrifices are only taken where real usability gains can be had.

Since starting, I’ve moved up to a CTO/CIO position, which puts me in charge of two full-time developers and several part-timers. Being in a managerial position is a big change for me, and I’ve learned a lot about how to mediate different development styles and skill sets. I still spend most of my day coding, but I also have to keep track of what everyone else is working on and the state of individual features/bugs/modules/etc. It’s crazy to think of how quickly I went from working for myself to having other people work for me.

Anyways, we’ve just finished up our alpha version, and are starting user testing. We’re using this cool program called Morae that captures on-screen actions and uses a webcam to record facial expressions of the tester. The first round of testing is 20 people and isn’t quite feature-complete. We’re going to use the results of the test to improve usability and decide how to implement the missing features, and then do two more test/development cycles first with 100 then 1000 users. Hopefully by the end of all this we’ll have a polished and intuitive application.

If you go to Cornell and want to help us with testing or anything else, the first step is to take our user survey.


OuterHTML for the Masses

September 15th, 2008


// add the outerHTML setter/getter to browsers that don't support it
if(!document.documentElement.outerHTML) {
	HTMLElement.prototype.__defineGetter__('outerHTML', function() {
		var wrapper = document.createElement(this.parentNode.tagName);
		wrapper.appendChild(this.cloneNode(true)); // thanks Cristi
		return wrapper.innerHTML;
	});
	HTMLElement.prototype.__defineSetter__('outerHTML', function(value) {
		Element.replace(this, value); // requires prototype (http://prototypejs.org)
	});
}


AJAX: Not Greek to Me

March 19th, 2008

UPDATE: Finally after switching gears for awhile to catch up on some of my schoolwork (because it would suck to fail my senior year), I had some time to go back and make the Moving Box portfolio work more or less the way I wanted it to. Then I did it all over again for IE (everyone’s favorite part of web design), and now it’s finally live. You can check it out here.

I taught myself AJAX yesterday. It’s something I’ve been wanting to do for a long time, but I finally had an excuse thanks to the Moving Box portfolio page (I’ll put up a link when it’s finished). Basically, I needed to load a bunch of different flash movies from a menu, and it seemed like a waste having to reload the whole page just to do it. I briefly considered using (gasp) an iframe, but soon decided that it probably wasn’t a good idea.

Thanks to Prototype, I went from ideas to having a working page in about an hour. They’ve got a bunch of nifty AJAX objects for most common needs, and even a nice tutorial-style article that helped me get started. I’d recommend it to anyone who wants to learn the technique but doesn’t want to get too bogged down with details.

Since the Moving Box site runs Silk, I did everything as a plugin. I’m working on making it more general-purpose to try and expose pretty much all of the features of the framework via AJAX calls (Silk’s architecture actually makes this pretty easy). Soon it might be possible to run an entire site from one page load.

First thing’s first, though; I need to make things more accessible. A well known problem with AJAX is that it breaks bookmarking, the back button, and history. I’ve found a few useful articles that talk about ways to get around this, but haven’t started implementing anything yet. I’m definitely going to do so before unleashing this beast into the tubes, though.