Be Aware Of What Analytics Don't Tell You

The web community lives in a world of numbers. Tools like Google Analytics, Mint, Campaign Monitor and others do a wonderful job of helping put concrete numbers in the hands of site owners allowing them to make informed decisions about their business.

Last week ReadWriteWeb had an article The Death of the Pageview which provided an overview of some ways the industry has moved from simple “clicks” or “views” into more meaningful metrics. While it is great that we can now measure campaign conversion rates or watch the cow paths form through the sites we build we must always ask ourselves if the analytics are measuring the correct things, or if numbers or trends can even help answer a particular question.

Sometimes what is measured isn’t what you need

It’s long been a pet peeve of mine that statistic packages report on computer screen resolution in the context of viewing a web site. Some generic hardware information like color depth might be [or may have once been] useful, but there is such a variety of how users manage windows on their computers, how many toolbars they have as party of their browser application, and other similar features that you can’t make assumptions about how much screen real estate is being used for a web page based on the dimensions of a screen.

Google Browser Size does an excellent job at visualizing the broad range of viewing scenarios in the wild. The description of the tool reads in part:

The sizes represented in this contour are client area sizes, not browser window sizes. This means they represent the size of the browser without the title bar, toolbars, status bars, etc., and thus give a true representation of how much content can be seen by a particular segment of the Web-using population.

Unfortunately, to date, Google Analytics does not track this viewport size or “true representation” and I’ve seen undue weight placed on the tracked “Screen Resolutions” report.

“Using” can be passive

In recent weeks Netflix has undergone a few design changes and in the process deemphasized a feature called “Netflix Friends” in which you could pass notes on movies to your listed contacts as well as view the ratings of movies by your friends in a prominent area of a movie listing page. There’s been some community dust up over which has prompted Netflix VP of Product Management, Todd Yellin to make an appearance on their company blog defending the changes. Every service makes changes and there’s always a segment of the community that rebels against change so this face off isn’t unique, but this point by Yellin intrigued me:

Friends is a feature on the Netflix Web site that’s been used by less than two percent of all subscribers since we added the feature in 2004.

He’s gotten a lot of push back and cries of disbelief about that number. Being a long time Netflix user who has enjoyed that feature I can see that number meaning one of two things — either that only 2% of users have ever added a friend [sending or receiving an email based invite] or that 2% of users use Friends based features like sending personalized recommendations. If the former, then yes, it is a dead feature and put it in the dirt. Killed by lack of interest or never given a chance to grow could be grounds for debate, but at this point the feature is dead.

So why mention it in this article? Because the later case, true or not, can illustrate the exact case where the use of a feature can be incredibly difficult to track without AB testing, eye tracking or user surveys. In 5 or 6 years of using Friends myself while maintaining a small set of under 20 or so close contacts I don’t know if I’ve ever actively used Friends to discuss, share or recommend movies on the Netflix web site. Those discussions take place elsewhere, either in face to face conversations or other places on the net where we congregate.

The strength and huge benefit I saw in the Netflix Friends system was that whenever I browsed movies — particularly in specific genres like foreign films or horror movies — I’d see the ratings of friends who saw the movie prominently displayed as my own personal staff of movie reviewers. Nobody had to do anything social or submit extra information to make it work, they just went about their normal activity of rating movies and driving the recommendation engines that Neflix is built on and the Friends features I used were a happy side effect.

But the side effect of that lack of action is that there is a lack of action to measure. The setting of ratings and contribution to Friends data pool is piggy backing on existing ratings actions. And on the consumption side the ratings were displayed in a few places and in particular right at the forefront of the movie details page so there was no action needed, often not even scrolling, to read the information. So when all was said and done after being an active Netflix user [and still am] for the 6 year life of the Friends program, including a visit or 5 to the web site a week, I may have only performed 20 or 25 total traditionally measurable actions even though I “used” the feature every time I browsed to a movie details page.

Hmm, yeah

Well that was a bit long winded, but I think you get my point. There’s a ton of great metrics out there & we’re always looking at them be it to make technical decisions, business decisions, or to evaluate the success of previous decisions. But the hardest decision will remain to be picking what metrics to use or not to use when making those decisions.

Things That 'Just Work': Nikon D90 Sensor Cleaning

Often the goal of a new technology or new feature for an exiting technology is to lead a silent existence while making the owner’s life easier. Rather then being in your face forcing you to notice it, or worse, not working as intended and doubly frustrating the device’s owner it hums merrily along unnoticed.

I’ve been shooting steadily with the Nikon D90 dSLR since November of 2008. It struck me only last week in part because I was shooting some sky photos — which are notorious for making dust apparent1 — that in all that time I hadn’t had to do a manual sensor cleaning like I had often with my previous camera. The built in sensor shake/cleaning that Nikon has added to some of its recent camera bodies, and that triggers automatically each time the camera turns off or on, just works.

Nikon D90 Cleaning Menu

For those who don’t live and breathe camera tech, digital cameras have a sensor in the back of the device that records the light coming in to make a picture. This sensor replaces the film that once served as the capture medium. With lens changes, weather & static electricity, dust and other small particles can get inside the camera and create little spots in the recorded image. With film cameras this dust would attach itself to the film and be taken away when the film advances or is changed. With digital cameras, because the sensor is fixed and doesn’t get replaced like film, the dust accumulates over time and can degrade the quality of images coming from the camera.

Dust Spot Example

Camera manufacturers have been working on ways to solve this problem, mostly by having some type of material in front of the light capturing sensor that shakes, discharges static buildup or does other magical things to try and keep the area directly in front of the sensor free of dust.

I won’t say Nikon has already perfected the technology, but I’m more then happy to say that what they’ve done so far seems to “just work” for me. And that makes me happy.

Though now that I’ve said all this out loud I’m bound to not get hit with a splash of water in my camera as I change lenses near a waterfall or something.)

1 The small apertures associated with shooting bright objects like the midday sun create a narrower beam of light which can accentuates the specks of dust near a camera sensor. These dots also have a hard time hiding in an otherwise solid area of color like the sky.

CSS Generation With JavaScript – An Underutilized Content Management Tool

There are some interesting new things going on the world of web site layouts with CSS and JavaScript all the time. Tricks and tools to add to a client side developer’s arsenal for making flexible, content accommodating navigation, layouts and presentations. Though I wouldn’t give away any of our progress, I can’t help but wonder if sometimes the amount of work we ask a visitor’s browser to do is overkill. One way to shift this workload off the browser — without placing undo burden onto the site management staff or its budget by requiring a high level of technical expertise with each site update — is to move the it to an offline or backend CMS tool creating static code for publication. This is particularly useful when doing multiple site deployments with a similar theme or building different localized site versions where the need for flexibility in type doesn’t change from user to user, but from content update to content update or deployment to deployment.

Through the use of fairly simple to create build tools we can create ‘static’ CSS for deployment and consumption and trim the amount and complexity of layout code sent with each page.

Example – Sizing Large Headings

On a site I worked on last summer I had the following scenario: Sectional headings on the web site should by default be a large fixed size, allowing for 8 or 10 characters to fill the given horizontal space. This worked 80% of the time when the site was in English, but as the site sections got translated it was clear that the default font size was too large.

What were our options at that point? We could guess at the smallest font size needed to fit the longest probable section name and then set all section headers to that resulting in a smallish feeling most of the time. We could write some client side JavaScript code to send to every visitor and resize the type on the fly [or use a tool like sIFR which does this type of thing as part of its text replacement]. Or we could create a tool that is used once as part of the deployment process or CMS to set the various heading sizes.

Defining the Rules and Constraints

Whether you’re putting the logic on the public web server for download, the CMS, or in some developer or designers brain you need to determine the contraints and parameters for setting the type size. For this section header example lets work as follows:

  • Headers fill a 600px wide column and in a 120px high block
  • 100px Georgia, Bold is the base font spec
  • When a header doesn’t fit it should be the largest font size possible but still fit inside the box

screenshot of sample header sizes

Applied to the phrases our site uses for each section we see that the base font size works in most cases, but for the one outlier ‘Privacy Policy’ we need to drop the size down to 82px or so.

Deciding on the Desired CSS

If we did the above exercise to a static site that would never get updated or translated we’d probably use some type of page or header ID to apply the one exception as well as other header style changes like color or background. Even though this isn’t the case we still need to plan what the static CSS we will generate looks like and what the HTML ‘hooks’ will be.

HTML
<div class="headerBox" id="hdr-blog">
    <h2>Blog</h2>
</div>
<div class="headerBox" id="hdr-archives">
    <h2>Archives</h2>
</div>
<div class="headerBox" id="hdr-calendar">
    <h2>Calendar</h2>
</div>
<div class="headerBox" id="hdr-privacy">
    <h2>Privacy Policy</h2>
</div>
CSS
.headerBox {
    width: 600px;
    height: 120px;
    border: 1px dashed #444;
}
.headerBox h2 {
    margin: 0;
    font-family: Georgia;
    font-weight: bold;
    font-size: 100px;
    white-space: nowrap;
}
/* section specific color themes */
#hdr-blog h2 {
	color: #f0f;
}
/* deployment specific font sizes */
#hdr-privacy h2 {
	font-size: 82px;
}

It is that last section — ‘deployment specific font sizes’ — that we need to generate once for each deployment based on the length of the varied text.

Developing the Custom Editor

I had arrived at the 82 pixel font size for ‘Privacy Policy’ by trial and error and editing the CSS manually. It took about 30 seconds to land on the right size, but that task doesn’t scale well. It gets boring and tedious over the span of a single site, and requires someone manually editing CSS code over the life of the various site deployments, translations and updates. By writing a highly site specific admin tool to do this task we can move this maintenance work out of the coder’s hands and into that of a designer, content manager or translator. With great scripting libraries out there this shouldn’t take very long to do either. For our example I’m going to grab jQuery and jQuery UI to build a static & offline tool to generate the desired CSS that can then be copied to a file in our project by anyone on the team with access.

screenshot of header tool

The resulting tool is made up of three parts:

  1. Display of the content you’re adjusting or adding
  2. Interface for adjusting content parameters
  3. Generation of CSS code based on customizations

jQuery UI sliders were initialized based on the outlined parameters above [default to 100px, move inside a reasonable range] and adjustments are seen on the fly.

CSS is then generated in kind of a brute force fashion going through the hidden fields set by the sliders:

JavaScript
$("fieldset.headerWidget").each(function(i) {
	var hdr = $(this).attr("id");
	var css = "";
	// First Line
	css += "#hdr-";
	css += hdr;
	css += " h2 {n";
	// font size
	if ($(this).find(".hdrsize").val()) {
		css += "font-size: ";
		css += $(this).find(".hdrsize").val();
		css += "px;n";
	}
	css += "}n";
	css += "n";
	output.css += css;
});
CSS Output:
#hdr-blog h2 {
}
#hdr-archives h2 {
}
#hdr-calendar h2 {
}
#hdr-privacy h2 {
font-size: 82px;
}

Even including whitespace and comments the JavaScript written to make the tool work is under 50 lines. If the changes were more complex or more parameters were set the CSS could alternately be generated based on the current appearance of the item, however this may result in more verbose CSS code to publish.

Manual Sliders vs. Automatic Adjustments

In this example I’ve used manual sliders for resizing the text. The same could have been done automatically by resizing the text with JS until it measured to fit the constraints. Which way you build a depends on the project and who is doing the content management or setting up the deployment and a balance between automation and intervention. For the example I pulled from we wanted to give the manager a little room to play and use their own judgement.

Expanding on the Idea

For simplicity I’ve shown build a standalone offline editor here, this works if you have other manual tasks as part of a deployment or site build process, but sometimes you’ll need more. It would be quite easy to build a tool like this into a CMS project and have the CSS generated then saved to the proper location. Given the common markup patterns the list of headers could also be generated based on server side content. It all could flipped on its side and rather then edit all section headers at once this this could be part of a record editor where the font size [or other specs] are saved with the individual record. While that might take more infrastructure work it may be what best fits your project.

These custom tools are not limited to the font size example here either. Anything that needs some finessing when text changes, items get added, deactivated, etc can be a candidate for content management tools rather then complex client side code. For the same site referred to earlier each deployment or localized version also had a top navigation bar that varied — both in length of text of each section but also some site features [read; nav items] were optional. To take the tedious task of re-spacing the navigation for each version of the site out by hand &the need for the coder to do it we instead took 2 days to create a custom tool to space the navigation and position the submenus according to the length of the translated section names and which of the optional elements were activated.

At the end of the day where these build tools fit into your site’s deployment process will vary, but creating custom or one off tools can be an interesting and quick problem for a web developer to solve and the time spent doing so can pay great dividends over the life of a web site or product.

Geotagging Photos With The Apple iPhone 3GS

Meadowlands Flickr Map

A while back I posted instructions on geotagging photos with any GPS capable cell phone or device. Prompted by a question from one of my students (oh hey, I should talk about my new gig sometime!) and the fact the post is one of the more popular around here I thought the post deserved revisiting.

Since 2008 I’ve updated my camera body, gotten an iPhone, and streamlined both the number of devices I carry and the workflow for getting geographic data into my photos. Still, the premise of the old post hasn’t changed — you can encode any photo you take from any digital camera you have by syncing the photos timestamp with your saved GPS information.

Here’s how I’m currently tagging photos from my Nikon D90 with information saved on my iPhone using the RunKeeper Pro app.

Tracking everything with RunKeeper for iPhone 3GS

In an effort to consolidate the number of gadgets I carry everywhere I broke down and got an Apple iPhone 3gs with built in GPS support. There are a few good GPS tracking apps in the app store but I’ve settled on RunKeeper Pro to track my bike rides, hikes and photowalks. If you want a free app that /just/ records location info to create tracks I hear that Instamapper is nice (and has apps for other phones as well).

RunKeeper Download Screenshot

As a side effect of tracking and publishing (even privately) this workout data to the RunKeeper service I have easy access to download GPX formatted tracks for each outing from their website. Whichever app you settle on the goal is to get a standard GPX file containing the tracks pointing to where you’ve been that outing. This combination retires the Sony device I had been using and kills the needed step of manually converting the data file outlined in my previous article.

Still syncing tracks with GPSPhotoLinker

Not everything is new. Once I have downloaded the GPX tracks file and the photos to my computer I’m still using GPSPhotoLinker to batch sync the GPS info to the photo metadata before importing those images into Adobe Lightroom.

The Whole Workflow

Without recapping each step of the process here’s a quick and dirty diagram of the updated workflow of getting geodata onto photos I take as I prep to import them into Lightroom.

Workflow Diagram with RunKeeper

Lightroom Plugin by Jeffrey Friedl

Though I haven’t change when in my workflow I sync the images with the geodata out of habit, Lightroom 2 users will be happy to know there’s a plugin to sync geodata with items already in your library so you don’t have to change your existing import from card (or device) process. Jeffrey Friedl’s GPS-Support Geoencoding Plugin does a graceful job of handling some of the various metadata issues that had driven me to my habit of adding this data before Lightroom imported the files. Instructions on his blog.

iPhone GPS Hints

The first few outings with the iPhone I was worried about battery life, keeping the signal, the lack of ability to run the GPS app in the “background”, etc.

  • You don’t need your iPhone out & “on” while you record for it to hold a signal. Just click the sleep button while the GPS app is the open app and stick it in your pocket.
  • Usually when I’m out taking photographs I’m not taking breaks to check mail or use the web so the lack of multitasking isn’t a big issue.
  • Don’t fret much if you need to make a call. You’re not moving much as you shoot and talk [unless you’re doing so out your car window, in which case I hope you’re not driving too!] so you’ll only miss a beat and can easily resume recording when you resume shooting.
  • Check the RunKeeper Forums which has a lot of people discussing best ways to track activity, hold onto signals, and use the many other app features.

A Best Camera: The Casio WQV-1 Wrist Camera

Commercial photographer and serial iPhone camera user Chase Jarvis has recently popularized the idea that “the best camera is the one that is with you” in a big way. Armed with a camera small enough that you’re willing to carry it everywhere you become free to capture moments, record mental notes, and other save images that would have otherwise passed you by. Though his weapon of choice is a cell phone camera my weapon has recently been an artifact of a decade ago picked up off of eBay — the Casio WQV-1 wrist watch camera. Though it only takes postage sized [120×120 pixels] black and white images it does so in a way that satisfies my bestcam needs.

Chase Jarvis Late Train Home new profile pic Enter

Ancient BUT Charming

Everything about the Casio Wristcam screams ancient technology — from the sub megabit images, to the slow slow buffer, to the infrared syncing of data from the watch to your desktop computer. (Remember Palm Pilot organizers?)

REMOTE SEND

Casio had made a few models of watch cameras in the 90s with this model being the first — later models had quicker buffers, longer lasting batteries and even color images, but the line didn’t seem to last very long. They can often be found on eBay, but fluctuate wildly in starting price.

With all its flaws and having been far surpassed by even the worst of camera phones, the images from this original spy style watch camera often capture the essence of the subject — and its this quick, sketchbook style documentation of an object that I’m looking for when I’m on the go and want to remember a moment for a later, more serious or deliberate photo session.

Following The Best Camera Idea Through

This “best camera” notion is something that I long ago realized and took to heart and has dictated a lot of the style and subjects of my photography a mix of landscapes, observational and local travel style photos. It is also why, on the morning of September 11, 2001, I was carrying a camera on my commute into Manhattan that historic and haunting morning.

Chase has taken so many photos with his iPhone camera that he put together a book of the snapshots, moments and saved images in a recent book entitled The Best Camera and has an iPhone app and photo sharing site of the same name.

Buy The Best Camera Is The One That's With You by Chase Jarvis on Amazon.com

Your own best camera doesn’t have to be a wristwatch or a camera phone — I carry a point and shoot digital camera or my DSLR with me quite often. But if your only camera is one that you leave behind more often then not consider buying something you’re willing to travel with as a compliment.

Related Links