Thad Starner was working on proactive computing a long time ago, being able to build this kind of interaction is why I moved to Android

The port to Android is now over the hump and the new rig is MUCH smaller and more tractable as a daily wearable. OpenCV facial detection working, recognition is working (but I haven’t hooked up training and proper set selection based on context yet, hopefully tonight), and voice recognition is working for control. Have to hook up the WiMM One again for the touch screen control. We’ll see how far I can get tonight!

DIY GlassDIY Glass 2 DIY Glass 3

There are two guiding principals I’m using for building wearable computer applications (Google Glass, EyeTap, etc.):

  1. Focus on applications where the machine’s strengths can play in concert with the human’s strengths, or conversely, where each is filling in for the other’s weaknesses. Perfect memory, perfect recall, perfect computation, precise sensors, and 24/7 real time communication with rest of the world are a few examples of the machine’s strengths.
  2. Many things can be achieved with a smart phone, but it usually requires user initiated action, and with push notifications it at least requires pulling the phone out of the pocket and looking at it. I’m focusing on applying the above strengths proactively without making the user have to pull out the phone. The challenge is determining what information is needed, and when, while not being overwhelming.

I’m calling this pattern proactive computing, and I see it starting to appear more often. The Washington Post launched TruthTeller, a real time video analysis doing speech to text and searching for known fallacies in political videos. Truth Goggles does a similar trick as a browser plugin that leverages PolitiFact data. LazyTruth does the same as a Gmail plugin. These three examples monitor what the user is doing and apply data to inform the user proactively. The Google Glass concept video is of course full of proactive computing, schedule reminders, weather updates, public transit updates, etc.

For someone that has been building GUI apps for a long time the verb and noun UX approach is all wrong, or at least it may as well be done on a phone. Proactive computing is more like building a spell checker or the Awesome Bar in Firefox where the goal is to watch the user, attempt to figure out what the user is trying to do and then see how you can help them. This is half of the problem that search engines must solve, so it should come as no surprise that Glass is coming out of Google.


Brought out the EyeTap / Google Glass I built in 2006 again for the 4th of July. More tearing in the video as I’m messing with the software to increase frame rate, should be better in next version. I’m also updating the CPU to something newer for performance and improved connectivity (Bluetooth)

In 2006 I built an EyeTap which is essentially Google Glass but with 2006 level technology. After the Google I/O 2012 keynote it was clear I needed to wear it to the second day of the conference so I rewrote the software stack in about 24 hours on OpenCV (not an option in 2006). It now does facial detection and records every face I see… more on that later. A video composed of samples of what I saw in the display:

Much of this talk has resonated with me in the past and now again as I find myself once again thinking about Applied Minds, various types of organizations and how to build them, and how Bran approaches product development. His discussion of requirements driven organizations is particularly interesting.

The effects of latency variability across a horizontally scaled service.

libeblob is an append-only low-level IO library, which saves data in blob files.

Following features are already supported:

  • fast append-only updates which do not require disk seeks
  • compact index to populate lookup information from disk
  • multi-threaded index reading during startup
  • O(1) data location lookup time
  • ability to lock in-memory lookup index (hash table) to eliminate memory swap
  • readahead games with data and index blobs for maximum performance
  • multiple blob files support (tested with single blob file on block device too)
  • optional sha256 on-disk checksumming
  • 2-stage write: prepare (which reserves the space) and commit (which calculates checksum and update in-memory and on-disk indexes). One can (re)write data using pwrite() in between without locks
    usuall 1-stage write interface
  • flexible configuration of hash table size, flags, alignment
  • defragmentation tool: entries to be deleted are only marked as removed, eblob_check will iterate over specified blob files and actually remove those blocks
  • off-line blob consistency checker: eblob_check can verify checksums for all records which have them enabled
  • run-time sync support – dedicated thread runs fsync in background on all files on timed base

Next Page »