Archive for January, 2005

Flickr and Good URI Design

Tuesday, January 18th, 2005

I noticed that Flickr had some pretty sweet URIs, but I wanted to find out exactly what it was that made them good. To brush up on URI design, I scoured this great list of resources compiled by Tanya Rabourn:

The essence of what I found is that well designed URIs:

  • don’t change
  • are human guessable
  • are logical (no need to mirror a filesystem)
  • help visualize the site structure
  • are short
  • use lowercase
  • don’t use unexpected punctuation
  • lack query parameters
  • allow public linking
  • are stateless
  • dont expose technology

Next, I catalog the URIs used by Flickr to see how they hold up to the above criteria. It turns out, most of their URIs are quite well designed. Except for the last few in this list, Flickr URIs satisfy all the above criteria.

URIs of publicly accesible features (You can try all of these)

My photos:
http://www.flickr.com/photos/eakes/
One photo of my photos:
http://www.flickr.com/photos/eakes/2733127/
My sets:
http://www.flickr.com/photos/eakes/sets/
One of my sets:
http://www.flickr.com/photos/eakes/sets/68865/
One of my sets as slide-show:
http://www.flickr.com/photos/eakes/sets/68865/show/
My profile:
http://www.flickr.com/people/eakes/
My photos (archive view):
http://www.flickr.com/photos/eakes/archives/
My photos (calendar view):
http://www.flickr.com/photos/eakes/date-posted-calendar/
My contacts:
http://www.flickr.com/people/eakes/contacts/
My favorites:
http://www.flickr.com/photos/eakes/favorites/
My tags:
http://www.flickr.com/photos/eakes/tags/
One Group:
http://www.flickr.com/groups/geekdinner/
One Group’s Photo Pool:
http://www.flickr.com/groups/geekdinner/pool/
One Group’s tags:
http://www.flickr.com/groups/geekdinner/pool/tags/
One Group’s Photos as slide-show:
http://www.flickr.com/groups/geekdinner/pool/show/
Global Tags:
http://www.flickr.com/photos/tags/

URIs that have private access:

My reverse contacts:
http://www.flickr.com/people/eakes/contacts/rev/
My most viewed photos:
http://www.flickr.com/photos/eakes/popular-views/
My most favorited photos:
http://www.flickr.com/photos/eakes/popular-faves/
My most commented photos:
http://www.flickr.com/photos/eakes/popular-comments/

URIs where the user is implied from server-state

My contacts’ photos:
http://www.flickr.com/photos/friends/
Comments on my photos:
http://www.flickr.com/recent_comments.gne?days=1001
Comments I’ve made:
http://www.flickr.com/photos_comments.gne
My groups:
http://www.flickr.com/groups/

Those last four URIs in the list don’t quite measure up to the others. They expose technology choices, use query parameters, and are not stateless. The user that is acted upon in the feature comes from server state, not from the URI, and so do not conform to RESTian web architecture design principles. Except for those, however, Flickr has done a great job with URI design.

Clean URIs in JSP

Monday, January 17th, 2005

Yes, it *is* in fact possible to have clean, well-designed, query-parameter free URIs with JSP.

Expose the public URI:

/tag/foo/

Then you can use Apache to re-write it to:

/index.jsp?tag=foo

With the following directives:

RewriteEngine on
RewriteRule ^/tag/([^/]*)/ /index.jsp?tag=$1 [PT]

Breaking the Megaperson Barrier

Sunday, January 9th, 2005

The idea of making photographs that are vastly more detailed than humans can perceive is fascinating. Max Lyons broke the gigapixel barrier by stitching together 196 six-megapixel images, and then later researchers in the Netherlands pushed it further by producing a 2.5 Gigapixel image

Now that gigapixel images exist, its only a matter of time before they are printed appropriately. Imagine a billboard sized print that had the same granularity of a high-quality magazine, but throughout the whole giant print. From a distance, it would appear like any other billboard, but as you go in for closer and closer inspection, you would find more and more detail.

What if the 2.5 gigapixel image taken by TNO was instead a photo of a massive, tightly-packed crowd? How many recognizable people would we be able to fit in a photo like that?

Just for estimation, let’s say that it is possible to recognize a person with only a 40×60 image (2400 pixels) like the one below:

megaperson

The 2.5 gigapixel image could fit 1,036,345 people. (2,487,227,305 / 2400)

One megaperson fits in a 2.5 gigapixel image!

I wonder if the entire population of Trinidad and Tobago would pose for a photo?

Lunch with Rojo

Friday, January 7th, 2005

Rojo is hosting a lunch:

We are hosting a lunch with a select group of Rojo users at our offices in San Francisco on Wednesday, January 12th at noon. If you’d like to participate and help Rojo be the best it can be, please let us know by emailing us at feedback@rojo.com. Space is limited and participation is by RSVP only.

The Berkeley Lower Extremity Exoskeleton (BLEEX)

Saturday, January 1st, 2005

Berkeley Lower Extremity Exoskeleton (BLEEX)

“We set out to create an exoskeleton that combines a human control system with robotic muscle,” said Homayoon Kazerooni, professor of mechanical engineering and director of UC Berkeley’s Robotics and Human Engineering Laboratory. “We’ve designed this system to be ergonomic, highly maneuverable and technically robust so the wearer can walk, squat, bend and swing from side to side without noticeable reductions in agility. The human pilot can also step over and under obstructions while carrying equipment and supplies.”

The full press release.