Introducing TimeoutOverride

The screen timeout for Android Wear is rather short, so I wanted to extend it for my app.  So I wrote a library to extend the screen timeout for an arbitrary number of seconds, and re-extend that timer automatically whenever the user touches the screen.  Usage is a one-line addition to your onCreate():

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    new ScreenTimeoutOverride(20, getWindow());
}

Clone TimeoutOverride on GitHub to get started.

Your Smartphone is the Brain, Everything Else is an Appendage

At their I/O conference, Google announced Android Wear, Android Auto, and Android TV.  As I watched the series of announcements, I was struck with this metaphor: your smartphone is the brain, and everything else is an appendage.  Your watch will give you notifications at a glance and take voice commands, but it’s really just funneling that data back to your phone. Android Auto will bring navigation and music control into your car’s dashboard, but it’s just mirroring the maps and music streams from your phone.  Android TV will play movies and search through IMDB, but your phone is the remote control.

All Five Senses (well, 3 out of 5 ain’t bad!)

Our brain doesn’t see or feel or move us directly.  It processes a signals from my nose that smell bacon, then sends signals back out to my legs that say “I want to go to there” and I start walking.  Likewise, my phone doesn’t track my steps, it’s using a sensor in an Android Wear device to log that info, then relay it back to the phone to make sense of it.  Then the phone/brain can say “well, it’s 6PM and you’ve only walked 6,000 steps today, it’s sunny and 75, so grab the dogs and go for a walk.”  It sends out a notification that interrupts me browsing Instagram and gets me moving.

We have virtually replicated three of the senses; we have cameras (sight), microphones (sound), and touchscreens (touch).  Our phones have sensors for all three, and these appendage devices tend to have at least two.

Input & Output

I got on board the Android train back with the G1, and I remember thinking how powerful this device was, even with that rough first-gen hardware.  In the office I was working on a simulator for a $25,000 drone platform for the Marine Corps, but for a couple hundred bucks I had just bought a computer fully integrated with a fast internet connection, location and orientation and acceleration sensors, hi-res E/O sensor (you’d call this a camera), proximity sensor, 2D touch sensor, and keyboard.  I could read the signals from all of these sensors, process them however I wanted, then feed signals back out using the display, LED lights, vibration, or sound.

Since then phones have added a few more inputs (fingerprint sensors, heart rate monitors, multiple cameras for 3D).  What we saw at I/O was a proliferation of these.  Android Wear adds inputs (voice, step counter, wrist motion, heart rate, touch) and outputs (display & vibration on your wrist).  Android Auto uses your car’s display and audio system for I/O.  Android TV uses your existing TV to add a 50″ display to your smartphone.

Why these new Appendages Matter

Some of these might seem like minor additions (why do I need a display on my wrist when my phone is right in my pocket?), but the power is in the context.  If I’m bored in the office, sure, I don’t mind pulling out my phone and reading through a stream.  But if I’m driving a car, looking down at my phone is a seriously dangerous distraction.  If, instead, I can tell my wrist “OK Google, navigate to my next meeting”, without taking my eyes of the road, we’ve enabled the brains of your smartphone to help in a new context where the smartphone itself can’t get the job done.

This may not be as life-changing as the jump from features phones to smart phones, but it is still an improvement.

Flipping the Network

I once worked in a lab where they wanted any user to be able to sit at any computer and start working.  So I was issued a hardware token (think of a smart card, or a USB plug – holding my private key) that I could plug into a computer; it would recognize me, load in my environment and preferences, and I could pick up working wherever I left off.  The central brain was in a server room, but I could use whatever computer was in front of me for I/O.  With Android, we’re flipping that around.  I can still use whatever device is handy for I/O, whether that’s my watch, my TV, my car; but now the central brain is sitting in my pocket with the phone, rather than in a server room.

So What

My point is that these new appendages shouldn’t be viewed on their own. They’re not replacements; you’re not going to get rid of your phone when you get a new watch.  Instead, the watch becomes additional input and output for your phone.  So don’t think of the watch’s utility as a watch, think of what it can do as extra I/O for your phone.

Jenkins CI broken on upgrade to Mac OS Mavericks

Putting this out there in case somebody has the same problem.  I upgraded my Jenkins box to OS X Mavericks, and Jenkins stopped responding; requests to localhost:8080 simply dropped.

After a bit of digging and dead ends, I found out that java wasn’t installed.  Running

javac -version

from the command line failed, and asked me to install Java.  I installed the lastest JDK, restarted jenkins with these commands:

sudo launchctl unload -w /Library/LaunchDaemons/org.jenkins-ci.plist
sudo launchctl load -w /Library/LaunchDaemons/org.jenkins-ci.plist

and everything seems to be back to normal.

End Of Life notice for Virginia Traffic apps

Four years ago, I got my first smartphone.  Being a commuter in Hampton Roads, one of the first websites I tried to visit was VDOT’s 511 traffic information site.  It wasn’t mobile-optimized at the time, so it was essentially unusable on a small touch device.  After weeks of hacking around, I built a server app to scrape their website for data and mobile apps to display that data.  Since then, I’ve slowly upgraded the app, adding features requested by users.

Unfortunately, two years ago I moved out of Virginia, so I no longer use the apps myself.   VDOT, whose data I rely on for the app, has occasionally made changes to their data feed which require significant rework on my part to keep the apps going.  Note: this is entirely VDOT’s prerogative, and I in no way criticize them for doing so.

The end result of these two factors is that my apps no longer provide an acceptable experience to the user, and I don’t have the time to spend on fixing them up.  So it’s with regret that I have removed my apps from sale in the App Store and the Play Store.  I will continue to leave the server running for now; if you already have the app installed on your phone, it should keep working, at least as well as it currently works, for the foreseeable future.

The good news is that last year VDOT published their own apps to get Virginia Traffic information.  I suggest you check out these apps as a replacement for mine.  You can find more information about VDOT’s mobile apps on their website.

I want to thank all of the users who provided encouragement, positive feedback, and suggestions, and to thank VDOT for allowing me to scrape their data for so long.  These apps were the first step on the journey that has led to my current role developing mobile apps full-time.

And as always, please only use your phone while you’re parked.  Don’t cause an accident by checking your phone while you’re driving.  There’s really no need.

Virginia Traffic outage

The Virginia Traffic app experienced an outage this weekend.  VDOT has changed their website significantly, which broke the Virginia Traffic’s app reading of their data.

I’ve mostly recovered, you should see incidents as before, though some incidents might not show up under the right regions.  I’m working on it.

The good news is that VDOT has added some very useful metadata to their data, so the app will be able to take advantage of this data in a future release.

Introducing JeuxDeux – an Android TeuxDeux client

Try JeuxDeux, the best way to use TeuxDeux on Android.

Are you the type who keeps your todo list as a simple list? You’ve tried other apps but you don’t want to waste time setting categories, priorities, color codes, and the like.

Try TeuxDeux. It’s a simple, designy, todo app that presents your todo list as just that. A list.

JeuxDeux

Changing the “due date” of an item is as simple as dragging it from today’s list, to tomorrow’s.  Changing “priority” is a simple as dragging your most important todo to the top of the list.

Drag an item to a new day, or a new order in today's list.

If you like TeuxDeux and you’re an Android user, try JeuxDeux, the best way to use TeuxDeux on Android.  Buy it from the Android Market today.

Scan this QR code from your Android phone to find JeuxDeux in the Market
[or click here to learn about QR codes]