Tuesday, November 19, 2013

Walkie-Talkie - The Ultimate Phone Experience?

The trouble with smart phones is that its hard to input text. I seem to be especially bad at this.
First on Android, and now iOS, they have built-in a microphone button on the on-screen keyboard to enable voice-to-text (dictation). I think this is the future I want to live in, but the thing is, I'm not very good at this dictating either.

I wonder if future generations will become very good at dictating or if its so socially unacceptable that our race is destined to be typing on these screens forever.

In any event, my issue with this voice-to-text button on the keyboard is that its buried on the keyboard. What I really want is something I can do without looking at the screen at all.  Like "touch-typing" on a keyboard.

For instance, in the car, I can't afford to look down at my phone. And don't even get me started on our Ford Escape with Microsoft Sync...

Anyway, it turns out that holding the iPhone button to get to Apple's Siri gets me 'close' to what I want, but I think there's lots of room for improvement. I don't want to hold the button for a second before I can start talking. And I don't want Siri to listen for a while until she thinks I'm done...only to tell me that my request didn't make sense to her.

On my friend's new Android, the phone is "always listening".  This is kinda cool (and kind of creepy), but you need to wake it up by saying something like "OK Google" which makes you feel a bit ridiculous in public (and maybe even in private).

On my ideal phone, I would instead have a physical button on the side that is devoted to voice input.  This button would work like a walkie-talkie (or, perhaps less antiquated, something like that Sprint/Nextel "push to talk" feature).  Only, instead of talking to a friend or a group of co-workers, I would push the button to talk to my digital assistant on the phone (Siri or Google Now). When I push the button, the phone listens.  When I release the button, the phone stops listening. Its that simple. Why has no one done this?!

Aside from the physical button, I think we need all-around better conversational AI (or even just better screen-reader technology).  Its really sad to me that GOOG-411 was actually better for in-car use that my JellyBean Android phone.

First one to make a phone like this will get my $.
*kshhhhh* Over *kshhhhh*

Thursday, November 14, 2013

The real hype cycle

According to Gartner, all technology goes through a hype cycle in the marketplace as it matures.  It may be one of their most popular analysis pages (that or their 'magic quadrant' work).

But this isn't quite right.  Everyone that's been in IT long enough knows that almost every technology (no matter how innovative) has its roots in some other idea/technology years before. It may have a new name. A new use case. A new distribution channel. But the technology just isn't that new.

So, I conjecture that the 'true' hype cycle doesn't end in the "Plateau of Productivity" but instead it is truly a cycle...with each iteration feeding into a NEW technology trigger (anywhere from 5-20 years down the line):

The Federal Internet Identity Service

I have been doing some learning about Trust and Identity on the internet recently, particularly the new web-style standards like OpenID, Information Cards, etc. This got me thinking (dangerous, I know)...

What if the US Government acted as trusted 3rd party? They could assign a public/private key pair to every citizen (almost like a social security number) in order to provide verification services.
Maybe they could even offer something like an OpenId server as well.

If every citizen had a secret private key, that would enable you to digitally sign anything and anyone could verify it with a high degree of trust. In fact, verifying someone's identity would be as simple as checking their signature with the government service.

Then again, pretty sure no one trusts the government except me...

Pasting sample code into Eclipse

I recently discovered a very cool feature of the Package Explorer in the Eclipse IDE. Namely, if you copy the source for some class (say from a tutorial website), you can simply paste it directly into the Package Explorer view.  It doesn't even have to be a full class.  If its a snippet of code, Eclipse will create a new class file called snippet and add the code into it.  Very cool.

The Cancel Cancer

Few things in computer program usage irk me the way a broken/unresponsive cancel button does. When I click "cancel" in a dialog, the dialog should instantly respond (preferably by just going away) and all the resources/jobs should be finished/closed in the background. I understand that this can be a tricky feat to pull off in some cases, especially with long-running processes, atomic transactions which require some sort of rollback, or processes that require external communication (i/o or remote requests), but I believe that every effort should be made to create a compelling and responsive experience for your users.
  • windows hardware manager...update/search for driver
  • eclipse jobs framework
  • many others that I meant to put here but don't have the time to go find

Know some other culprits?  List 'em below in the comments:

Copyright Infringement and Google Notebook

I was surprised to see that my quote links weren't working at the bottom of this blog. When I investigated, I discovered that my shared notebooks had the following warning:

This notebook was flagged as violating Google Notebook Program Policies. If you feel it was flagged incorrectly, let us know.

Admittedly, when you follow the dialog to share a notebook, Google does a fair job of warning you this might happen:

When publishing a notebook that contains content from websites, please remember to respect the hard work (and legal rights) of the people that created the content. Publishing a notebook is the same as creating your own web page — don't include content in your notebook that you couldn't legally publish on your own webpage. For more information on our program policies, click here.

But what I wonder is how to avoid this? My primary use of Google Notebook is to store relevant quotes/quips from websites for future reference. This has a couple advantages over bookmarks...
  1. It cuts away the cruft of webpages so that I only see my notes, while still allowing me to store a simple link to the original reference for context
  2. It allows me to tag/organize my notes/thoughts and provides a nice search to make them retreivable
  3. Using the Google Notebook Firefox Extension makes all this a breeze
I could do something similar using the Delicious Bookmarks Add-on, by using the summary text for the relevant quotes, but I honestly doubt that is any more/less legal.

When I was at EclipseCon this Spring, I had the privilege to hear Cory Doctorow talk about copyright law and the possible societal repercussions of laws which make the majority of its population criminals.

What do you think?

Wednesday, November 13, 2013

Clearing the backlog

At the behest of one of our awesome interns at work, I've decided to open the floodgates of draft posts which I've created over the past few years.  The original plan was to research each one, flush them out, and provide some thoughtful commentary to my corner of the web.  But, seeing as these posts have sat in draft mode for over 2 years, I think it's safe to say that that is not going to happen.

So if you're one of my two subscribers (I'm looking at you +Jason Melbye), then I apologize for the stream of half-baked posts that I'm about to release on your stream.  That said, after browsing for a few minutes, I do think that much of the content is as relevant now as it was when I first wrote it (for better or worse).  Now the only decision left is how to do it...should I back-date them to their original draft date?  Release them all at once or 1-per-day?

Here goes nothing...

Tuesday, March 26, 2013

One Laptop Per Baby

The Background

A while back I participated in the One Laptop Per Child program's "Give One, Get One" campaign in order to do some good and also give a cool/interesting Christmas gift to my little brother and sister. Well, needless to say, the spoiled adolescent of suburbia was not the intended user of an XO-1 and so the laptop was seldom used (what, no YouTube?!). So, a couple years ago when my wife and I were expecting our first child, I asked for the laptop back with the idea that our baby could grow up with this computer (and I would get a fun toy along the way).

The Project

Well, my daughter is 18 months now and I finally sat down to do my first project: Turning the $100 laptop into a $100 baby toy!

I remember when my little sister was very young, she got a toy that was a large plastic slate with a calculator-like screen and protruding keys that were shaped like the letters of the alphabet (capital and lowercase)...what was that thing called!? Anyway, it was pretty awesome and I'm relatively sure that, because of it, my sister knew all her letters at a very early age. So, the question is, could I turn the XO-1 into something like that? Shouldn't be too hard, right?

I began to think about what I wanted to create and here's what I came up with:

  • Laptop should boot directly into my program (fullscreen) with no way out except for ctrl+alt+f2 (or similar) which should still bring up a tty terminal so that I can login and restore Sugar/whatever at a later date.
  • Application should let you mash on the keys and do something fun/educational. For instance, when the user hits a letter key, the system should show an image of something that starts with that letter, pronounce the word (and the letter?), and maybe also print the word in big letters to the screen (with the first letter capitalized/underlined for emphasis).
  • Preferably, power management still works so that the laptop goes to sleep when the lid is closed (and wakes up in the program). There should be some kind of inactivity timeout as well.


I updated the laptop with the latest software release from laptop.org and browsed through the apps, but the only one that jumped out at me was the activity called "Speak".

In this activity, a user tells the face on the screen what to say, and the face says it. It's not too far from what I was thinking...only in my version the user would only hit a single letter and the application would generate and speak a word that starts with that letter (and preferably show a picture as well).

Aside from playing with the fun espeak library on which it is based (and making it say things I wouldn't want my daughter to hear!), I moved on to google some other things I could use for my project. One promising thread was from a note I left myself while listening to a podcast at some time in the past (http://hanselminutes.com/ I believe). It is a simple .NET demo app called babysmash. I didn't want to mess with .NET/Mono for my simple project, so I looked for a simple equivalent for Linux.The first thing I found was http://jaredforsyth.com/projects/baby-tux/ and it seemed promising.

After learning how to boot the XO-1 into GNOME (gotta get something lighter on there...), I installed git on the terminal and cloned the project from github. Unfortunately, from what I could tell, the python libraries it sits on (Pyglet and Rabbyt) weren't in the olpc package repo. No worries, we've got "easy_install":
[olpc@xo]$ sudo easy_install Pyglet


[olpc@xo]$ sudo easy_install Rabbyt

error: No gcc (or something like that)

[olpc@xo]$ yum install gcc


[olpc@xo]$ sudo easy_install Rabbyt

error: Missing some python header file

[olpc@xo]$ sudo yum install python-devel


[olpc@xo]$ sudo easy_install Rabbyt

fatal error: GL/gl.h: No such file or directory

compilation terminated.

[olpc@xo]$ sudo yum whatprovides gl.h

No Matches found

Ugh, not so "easy_install" after all. I did some OpenGL stuff in college but I really didn't feel like chasing down the OpenGL story on the XO.

A Different Tack

One google search later and I found another babysmash clone done in python: https://github.com/karel1980/babyslam

It seems a bit old/defunct, but I tried it anyway. Git cloned to the laptop, ran setup.py install, and voila!
Its not exactly what I wanted, but it does come with some customization points and seems simple enough to hack...woohoo!

Next up was my attempt to boot into this program. This proved WAY easier than I was expecting (a welcome change from the usual). The XO comes with a single default user named "olpc" (with auto-login already set up and no GDM to mess with) and the user home directory already has a .xsession-example file sitting there:
# Copy this file to ~/.xsession to customize your X session

I added a single line to the file (to invoke babyslam) and rebooted. After a fairly slow boot process, I was greeted with an all-black screen which displayed numbers and letters when you press them and randomly showed animal pictures with sounds.  A great start.

Things left to do/possible next steps:

  1. Let Emily try it out and see if she likes it!
  2. Improve the boot time. System takes over a minute to boot. Maybe it would improve with XOpup (Puppy Linux for the XO)?
  3. Maybe disable the mouse/pointer?
  4. Customize the app by adding my own images and sounds.  Note to self:  The XO uses ALSA so you can record and playback wav files with the 'arecord' and 'aplay' commands.  You can also save wav files from espeak by passing the -w switch.
  5. Edit the python app to approach my original design?