Odopod acquired by Nurun

When I started Odopod with Tim and Jacquie, my personal intention was to do good work with great people. That was really it. I had just wrapped up an 18 month contract with Rare Medium after they aquired my first agency and I had a renewed respect for these critical aspects of work.

Over the past ten odd years, I’ve been able to live the dream. I’ve learned an incredible amount from our ever expanding team of incredibly talented and dedicated folks. Even at the most intense moments, I would not have traded this opportunity for any other — until now.

The Nurun deal is a great opportunity for both companies and you can read more about our special chocolate-and-peanut-butter combination on our blog.

The strategic match of experience and talent between Odopod and Nurun is huge, but it was the people and our shared values that sealed the deal for me. Over the past months, I’ve met people from several Nurun offices and they all share the friendly, ego-nuetral personalities that characterize the folks at Odopod. What’s more, they share a passion for strategy, design and technology working together to deliver innovative work that is useful and enjoyable.

I’m really looking forward to the next 10 years, working with our new global team, vendors and clients to do great work.

An incredible number of people have contributed to the success of Odopod success and I’m truly grateful for everyone’s help getting us to the point where we could make this deal happen. Thank you!

‪AIR for mobile remote camera app‬‏ – YouTube

AIR for mobile remote camera app – YouTube.

This video shows an AIR desktop app that is connected (peer-to-peer) with an AIR for mobile app running on 4 different devices.

The mobile apps stream video back to the desktop application and the desktop app can be used to send messages to the camera operators.

The devices tested all handle capturing and streaming 640×480 video at 15 fps. The wifi network is having a little trouble keeping up with 4 streams but works well with fewer streams (or when I’m alone on the network).

Arc Diagram of Mentions in @Odopod Tweets

Lately I’ve been collecting and analysing Twitter data. I’ve been looking at networks formed by friends and followers of a set of people, tracking the path of tweets and generally building on my python skills.

I’m working toward a pretty ambitious goal but, inspired by the arc diagrams in the NYTWrites project, I decided to take a short break and render out one of my own.

Arc Diagram of Mentions in @Odopod Tweets

Interactive Arc Diagram

The diagram shows all twitter users mentioned in tweets by @Odopod, sorted by the number of times they have been mentioned. The arcs link nodes that were mentioned in a tweet with other users and the width of the arc indicates the number of links. The size of the nodes represent the number of links a node has associated to it.

First attempt to control eggbot from Flash: halftone pictures

This weekend, I was able to get Flash talking to the EiBotBoard of my Egg Bot via Tinkerproxy 2.0. Fun stuff.

The trickiest part was finding the right file within /dev to point Tinkerproxy at. The EiBotBoard shows up as /dev/cu.usbmodemNNN which is quite different from the way an Arduino board shows up.

With the proxy in place, I set up a Flash file to load images, transform them into halftone dot patterns and then plot them onto eggs. Plotting is done with 3 different commands, one to raise and lower the pen, one to turn the egg (xaxis) and the last to move the pen (yaxis).

First attempt to control eggbot from Flash: halftone picturesFirst attempt to control eggbot from Flash: halftone pictures 2

Orbit multitouch

An Odopod Hack Days project that draws using simulated gravity forces, Orbit is a mobile web application using multi-touch events, canvas API and offline cache.

Orbit multitouch 6
screen capture from Orbit

The blank canvas includes two gravity wells. To start drawing, add orbiters by tapping or swiping the screen. Try different directions and speeds to get different paths. For a single orbiter, points and lines are drawn along the path. Once there are two or more orbiters, lines and fills will be drawn between the different paths.

Orbit multitouch 7
single orbiter (left) and multiple orbiters (right)

Settings are provided in the bottom left of the screen to pause the orbiters, turn different drawing layers on and off and to clear the drawing.

Try Orbit out for yourself.

Multiple canvases

Each layer in Orbit is rendered into a unique canvas. All together, there are five canvases. Using multiple canvases slows down the application; however, the ability to turn each layer on and off as the drawing progresses was important to me. Besides, even with five canvases, the application performs quite well.

Orbit multitouch 5
different drawing layers within Orbit

If you find the performance too slow, here’s a tip: the application will continue to draw into hidden canvases, but since rendering the pixels to the screen is the primary performance bottleneck it will run much more quickly when one or more canvases are hidden (especially connections and fills).

Handling multiple touches

Handling the touch events is relatively straightforward. The browser provides events for touchstart, touchmove and touchend. Since any of the canvases can be hidden, I bound the events to each one of them.

The touch events include an identifier which I use to associate touchmove and touchend events with the original object created on touchstart. Once the touch has ended, it is important to clear the identifier from the object. This is because any future touchstart event can use the same identifier (this actually happens quite often).

On iOS devices the browser will generate events for multiple touches at a time but Android browsers currently only recognize a single touch at any time. This code works for both cases.

jQuery Mobile

jQuery Mobile is used to create the settings and the about screens as well as the settings UI elements. The mobile framework organizes application screens into pages and dialogs. I included all pages for Orbit within the index.html file.

For the settings, I use different controls based on the size of the screen. For tablets, I have settings open on the main drawing page, but switch to a dedicated page on smaller devices. At first I had all devices using a separate page, but switching between pages is cumbersome and on tablet screens, there is enough room for my options on the main screen.

Orbit multitouch 3
iPad settings (left) and iPhone settings (right)

Incidentally, I used buttons with a non-breaking space as the text string rather than buttons without text because those buttons were too small to easily touch.

Orbit multitouch 4
text buttons (left) and icon only buttons (right). icons alone are hare to tap.

Offline mode

The last thing I had time to tackle before Hack Days came to a close was to create a cache manifest, startup screen and application icon so that Orbit would work well offline. The one trick I had to work out here was how to provide startup screens appropriately sized for both the iPhone and iPad. In the end, I did this by rewriting the link tag using JavaScript.

Orbit multitouch 2
add to homepage in mobile safari (left) and Orbit on iPad home page (right)

All-in-all I was impressed with the browser’s touch events and canvas performance.

Orbit multitouch
screen capture from Orbit