Found Portfolio

I see my photos in the oddest places – but it was funny see one show up on my employer’s website. Here’s the shot of Japanther from Aug 8th in downtown Troy.

@font-face in Firefox 5

I always thought my tests with @font-face looked a little crunchy in FF. We’ll, they look great in FF5.

FF4 -- rendering fonts all crappy

FF5 -- rendering fonts all awesome

Getting out of Google Maps

I have an interest in the curatorial and way-finding possibilities made possible by GPS and web enabled mobile devices. Over the winter I investigated attaching data produced in a CMS to a map by adding latitude and longitude fields to Drupal.  I wrote a custom template to spit out data as KML so it could be consumed by a Google map embedded in a Drupal page. As a demontration, I made a couple Drupal articles linking to images of the Erie Canal and pinned those images to the map.

In April, Google announced changes to its API that made it less attractive to deploy for my clients. Today, I experimented with openstreetmap and openlayers. Google’s map service consumes KML and produces  markers and handlers for generating popup info balloons when a marker is clicked. The openlayers library also easily consumes KML and automatically produces markers (good thing the Drupal instance spits out KML instead of writing directly to the Google Maps API).  Openlayers does not automatically generate handlers for map events, instead, you must define them. While this is initially slower, it allows for much greater control and flexibility.

OpenLayers Screen Shot

Google Maps Screenshot

Web Systems Development at RPI

This semester, the weather got nice just as we started exploring HTML5. I’d also noticed that about half my students had smart phones – the only reasonable thing to do was design a phone-based location logger lab. I had the students get things working inside and then they went out to collect data by walking around.
I had students form groups with people who had phones and author a HTML5/JS application that got the phone’s location using navigator.geolocation and post it to a PHP service every couple seconds. They hosted this in their public RPI webspace (so it was accessible by their phones).
The students retrieved their data during the next class and used it to generate a Google Map. What’d we learn?

  • You must enable high accuracy in the HTML5 geo object if you want to visualize the data collected
    You must to set the cache/timeout for geo object if you want to visualize the data collected
  • You should toss out any bad data before using it to construct a line as we’ve done below. Inspecting the geolocation’s accuracy property and only accepting points within a certain threshold is probably the way to go
  • By default the iphone rejects cookies set by 3rd parties (the php webservice was setting a device ID in a cookie it set during an AJAX request … probably not the best)

Things look pretty noisy here: these points in town adjacent to campus are phones returning their location by IP or tower lookup rather than using the more expensive GPS look up.

Zoomed in, you can see lots of points in (well, almost in) our classroom in the Lally Building. Are all the phones wrong or did Google get the location of our building off by a few feet?

Here is some data of a student walking along a road.

Menands Bridge Connection

Menands Bridge

The new connection from S. Troy to the Albany bike trail is a huge win. We went down to Albany today and it was nice to avoid doubling back through Watervliet and fighting with the Congress St. Bridge.

JSON output in Drupal 7

I need to expose some nodes in Drupal 7 as JSON for downstream consumers. I spend about 45 minutes Googleing for a Drupal 7 module with functionality like “views datasource” in Drupal 6 – found nothing – wrote this instead:  (created mytheme/page–json.tpl.php)

<?php
header(“HTTP/1.0 200 OK”);
$uri_parts = explode(‘/’, $_SERVER['REQUEST_URI']);
$input = intval($uri_parts[count($uri_parts)-1]);
if(is_int($input) && $input>0){
echo drupal_json_encode(node_load($input));
}
exit();
?>

When called like http://mysite/json/5, it checks that the last argument of in the URI is an int (or can be turned into one as the URI is natively a string), loads that node, and then outputs it as JSON. Exit() is called to stop any templates from being applied later(cheap, I know but I’m in a rush here).

Railroad Photography

I’ve been trying some railroad photography inspired by the 1950′s stuff.

Oddly enough, I’ve found the mainline style stuff far harder than getting photos of the people who make the whole operation work (people complain that a number of factors make it impossible to shoot people and trains at the same time).

Next up: some bigger flashes and capturing some RR image at night.

Model Railroad Photography

My father wrote an article on creating period fonts for the October 2010 Model Railroad Craftsman. I took the model photos for him.

I tried something new on this shot and was pretty pleased with the results. I created a sky-like canopy over the entire area included in the shot with umbrellas. The thought was that this arrangement might better simulate light from the nature sky than trying to fill in shadows with a few spot lights.

By the end of this shoot, the umbrellas were practically enveloping the building and surrounding scenery. There was just enough room for the camera (which was unfortunately still on a tripod as I was firing the flashes multiple times to get enough light on the scene.) The room lights are off to avoid the ugly colors created by two different types of light source.

Deploying a Website for Pioneer Market

Pioneer Market is a Food Coop in Troy, NY. In October, the market opened its storefront, at which point the marketing team needed a means to edit and expand the website. We deployed a Drupal instance to replace the mainly flat site that Ola and I built during the coop’s member recruitment phase. Ola managed the Amazon EC2 slice and built a Zen-based theme to meet mockups provided by the coop. I handled the Drupal configuration and staff training.

troy food coop's website screenshot

Pioneer Market's Site in Dec. '10

Your Crush, On the Big Board

I just noticed likealittle and thought what they were doing was pretty awesome. And then I thought: this would be so much more awesome if the notices were somehow posted in the location where they were made.

Here is a first pass

likealittle mashup

likealittle mashup

likealittle mashup

likealittle mashup

I wrote a script to search for images of RPI and to screen scrape the messages off the flirting site. Messages and photos are randomly mashed and displayed as a slideshow. The result was pushed up to some digital signage.

I think the most reasonable next step would be to grab a twitter feed during an event and layer those messages over images being collected live (either of the web or the building’s security system)