Leigh L. Klotz, Jr.

Wednesday, October 22, 2008

Google / T-Mobile G1 Report

Like many others, I received my T-Mobile G1 yesterday. I was a Hiptop / Sidekick user, so early in fact that I got interviewed twice.

I stuck with the Hiptop platform up through the Microsoft acquisition, and beyond, but the initial happiness I felt with the device was eventually overshadowed by the business model of T-Mobile and Danger, which was an insidious kind of walled garden.

Like some other developers, I called for more openness, and eventually abandoned the idea of doing any software development for the Hiptop platform.

So, when Andy Rubin, Brian Swetland, and others left Danger and formed Android, I was intrigued, and quite happy when Google announced their plans for open spectrum, open devices, and open markets. Clearly Andy wanted to do (at least what I considered to be) the right thing, and perhaps this time he'd found his mettle.

So, when the G1 was announced, I pre-ordered, and was treated with a package yesterday, the day before the official launch. So I've had a few hours to use the device, and wanted to write my impressions here.

I'm uninterested in comparing the device to the iPhone, as I don't need Steve Jobs telling me what I can put in my pocket, and I'm utterly uninterested in phone calls or call quality (as you can see from The Inquirer article. I really want to say I'm quite happy to have the G1. It shows an incredible amount of promise, and I mean what I say below in the nicest way. But what I have to say below does need to be said. I'll leave to others the task of reviewing the device overall, talking about its great features or comparing it to other mobile devices on the market now, and just focus here on a few things that I strongly need to cheer as very rightm and the unfortunate few things that I find very wrong.

(Why am I doing it here rather than posting in one of the many Android of G1 or Tmobile forums? One of the consequences of letting a thousand flowers bloom is quite a weedy garden, and at least for now, I can't see any one place that would be valuable to post.)


The keyboard sux. Really, really badly. It's not as bad as a Treo (sorry Karl) but it's very, very difficult for me to use. The Motorola T-900 series, the Sidekick 1, Sidekick 2, Sidekick 3, all had good keyboards. This one is decorative. It's not as bad as not having a keyboard and using a touch screen, but it's pretty bad. I'm hoping that some rev 2 hardware is available at a price I can afford, and that T-Mobile allows a secondary market to form so I can upgrade without paying a heinous penalty.

Application Navigation

I find application navigation, and in particular the various options and settings, to be a confusing maze. The Hiptop HCI design language was much easier to navigate, and although I occasionally got lost between types of settings. I get lost in the maze of secondary options, screen press-hold, trackball press holds, menu-keys, magnifying-glass keys, MENU button popups, "More" soft keys, and double lines of selectable items (Wifi, Wifi Settings, Bluetooth, Bluetooth setting) ad nauseum.

Android (Google, Tmobile, Andy, many others, can I call you Android?) can fix this in software, but the point is they must fix it.

Mail Program Morass

I hardly know where to begin. First off, there's two totally separate mail programs. One for POP/IMAP and one for Gmail. I set up both. I'll complain about the IMAP one, as I haven't used the Gmail one enough to complain.

IMAP Mail Program

It can't poll at more than 5 minute intervals. Danger polled at 30 minute intervals, but they provided a device address that you could re-send to, and let you specify the "from" field (after some initial hiccups). So that worked great: instant mail, your own non-device address in response. Maybe I can get that with Gmail, which at least in the browser version lets you specify a separate address, or maybe not.

The screen real estate usage is atrocious. You get maybe 4 messages on the screen at once, and then when you do get a message to read, 25% of the screen is taken up by Reply, Reply All and Delete buttons, which are all available as well when you presst the Menu key, with other options, and in a different order (see Application Navigation, above). How can I say this more clearly? Maybe if I say it in bold? It's incredible that I get a quarter of the number of messages on the 480x320 screen that I used to get on my Hiptop at 320x240.

Once you reply to a message, the fun really starts. Again, you get three huge buttons at the bottom of the Reply screen: Send, Save as draft, Discard. What! There's a huge Discard button that takes up 10% of the entire screen, begging you to accidently brush against it, and it discards your entire cooutgoing message with no confirmation and no way to recover! It reminds me of the Gary Larsen "Far Side" cartoon of the happy rodent family in the kitchen, while be-aproned Mom lovingly looks at the table as she reaches for the box of cereal, stored in the cupboard right next to the box of Rat Poison. "Hey, what do we have this stuff for anyways?" she realizes. Get those huge, ugly, and dangerous buttons off the screen! At this point, you've probably realized I've just lost a big message I laboriously typed on the keyboard (did I mention the keyboard sux?) and have come back to my desk to compose this. You're right. By the way, did I mention the keyboard sux?

Mail Notifications

The window shade for notifications is innovative, but again, the actual content there is confusing. I get a list that says "New Email" followed by "New Email." One has an @ icon. The other has a mail envelope with an "@" icon. I suppose I can suss out that one of these is gmail and the other is imap mail, but if that's really the case, the icons need be something really much more informative. They're the image equivalent of calling one program "mail" and the other "postage." I'm not even sure I'm right here...maybe one is threads and the other is individual messages. I'm totally confused.

Mail Navigation

There's no individuality to the screen displays of messages and headers and threads and I get absolutely no sense of place (so important for navigation, see Application Navigation above). Thunderbird has clearly defined areas of messaging: folders, message headers, messages, composition. Outlook has the same. So does just about everybody. Even the simple Danger mail client had a very clear indication of these different arenas of interaction. The Android IMAP client attempts to do everything inline with a long scrolling list, except when it doesn't (composition and replies) and the result is just muddy. And did I mention you can barely get five lines of text on the screen, even though it's much bigger than the 320x240 Hiptop? And the buttons are HUGE, and that they destroy your mail? And did I mention that the keyboard sux Maybe I already mentioned that...

HTML Messages

MIME messages formatted with inline HTML work very nicely. I like the layout and the "Show Images" button. It was a pleasant surprise to see this working well.

Battery Life and Charging

When the hiptop first came out, the battery life was terrible. Software revisions of the OS and modem made great improvements. I'm hoping that Android does the same, as this device really needs it. Even if you have GPS off and WiFi off, it draws the battery down. Clearly they know this, or they wouldn't have set the LCD backlight timeout to whatever it is, seems like about 5 seconds...

The package (smart looking box, by the way) contains a USB cable. Thanks for including it -- it's good to see that Android has left behind the Danger terror of someone actually using the device or writing an application that isn't a game. I initially thought it wasn't charging from the USB port, but apparently I was using either a disconnected or unpowered hub in a Dell monitor...hardly Android's fault. Now if I could only find the screen that shows me how the battery's doing (See Application Navigation, above).

I'm sure there's more things I'm annoyed about, and for now all I can do is complain.

Once I find the right forum or forums to join and the right way to contribute to fixing the things that annoy me, and given the purported openness of the OS and at least some of the applications, I'm hoping that I can help solve my own problems. That in and of itself is 102% of the reason I bought a G1.

Goodbye Danger, hello Android. Now let's talk.

Friday, March 14, 2008

Joe Weizenbaum

I was saddened to read of the passing of Joe Weizenbaum.

One of my MIT admission essays was on his book Computer Power and Human Reason.

As a student (through the graces of Profs. Hal Abelson, Andy diSessa, Gerry Sussman, and Seymour Papert) I had an office in Tech Square, right near Prof. Weizenbaum, so I saw him nearly every day.

After nearly ten years, everyone agreed it was time for me to graduate, but I had a few courses I need to take that hadn't, and a few I didn't need to take that I had. Joe was head of the curriculum committee, and it was his last semester before retiring. He heard my petition for substitution, thought a bit, and signed off with, "Ve should haf done zis years ago."

So, I got into MIT because of Prof. Weizenbaum, but I graduated because of Joe.

Thursday, February 07, 2008

Java error highlighting in Emacs

I read about this from credmp but it required JDE, which I don't use, and it had a few bugs. Here's what I'm currently using:
;;; -*-EMACS-LISP-*-
;;; Flymake for Java using Eclipse ECJ
;;; Adapted from 
;;; http://www.credmp.org/index.php/2007/07/20/on-the-fly-syntax-checking-java-in-emacs/
;;; and removed JDE requiresments.
;;; To use:
;;; (defun my-java-mode-hook ()
;;;   (define-key (current-local-map) "\C-c\C-f" 'flymake-mode))
;;; (add-hook 'java-mode-hook 'my-java-mode-hook)
;;; (require 'flymake-java)
;;; (add-hook 'flymake-mode-hook 'my-flymake-mode-hook)
;;; (defun my-flymake-mode-hook () 
;;;  (define-key (current-local-map) "\C-c\C-d" 'flymake-display-err-menu-for-current-line)
;;;  (define-key (current-local-map) "\C-c\C-n" 'flymake-goto-next-error)
;;;  (define-key (current-local-map) "\C-c\C-D" 'credmp/flymake-display-err-minibuf))

(require 'flymake)
(defconst ecj-jar-path "c:/path/to/ecj-3.4M4.jar")

(defvar flymake-java-version "1.5")

;;; If use you ant, try this target to determine the classpath
;;;  <target name="show_classpath" >
;;;    <pathconvert targetos="windows" property="classpath.string" refid="the-classpath-ref-from-javac-entry" setonempty="true" />
;;;    <echo message="classpath=${classpath.string}"/>
;;;  </target>
;;; This will convert the classpath to be in Windows OS format.  
;;; Doing it on Linux is no challenge, so it's not documented here.
(defvar flymake-java-classpath "c:/path/to/project/classes;c:/path/to/lib/foo.jar")

(defun flymake-java-ecj-init ()
  (let* ((temp-file (flymake-init-create-temp-buffer-copy
         (local-file (file-relative-name
                      (file-name-directory buffer-file-name))))
    (list "java" (list "-jar" ecj-jar-path "-Xemacs" "-d" "none" 
                       ;; "-warn:none"
                       "-source" flymake-java-version "-target" flymake-java-version "-proceedOnError"
                       "-classpath" flymake-java-classpath
                       ;; "-log" "c:/temp/foo.xml"

(defun flymake-java-ecj-cleanup ()
  "Cleanup after `flymake-java-ecj-init' -- delete temp file and dirs."
  (flymake-safe-delete-file flymake-temp-source-file-name)
  (when flymake-temp-source-file-name
    (flymake-safe-delete-directory (file-name-directory flymake-temp-source-file-name))))
(defun flymake-ecj-create-temp-file (file-name prefix)
  "Create the file FILE-NAME in a unique directory in the temp directory."
  (file-truename (expand-file-name (file-name-nondirectory file-name)
                                   (expand-file-name  (int-to-string (abs (random))) (flymake-get-temp-dir)))))
(push '(".+\\.java$" flymake-java-ecj-init flymake-java-ecj-cleanup) flymake-allowed-file-name-masks)
(defun credmp/flymake-display-err-minibuf () 
  "Displays the error/warning for the current line in the minibuffer"
  (let* ((line-no             (flymake-current-line-no))
         (line-err-info-list  (nth 0 (flymake-find-err-info flymake-err-info line-no)))
         (count               (length line-err-info-list)))
    (while (> count 0)
      (when line-err-info-list
        (let* ((file       (flymake-ler-file (nth (1- count) line-err-info-list)))
               (full-file  (flymake-ler-full-file (nth (1- count) line-err-info-list)))
               (text (flymake-ler-text (nth (1- count) line-err-info-list)))
               (line       (flymake-ler-line (nth (1- count) line-err-info-list))))
          (message "[%s] %s" line text)))
      (setq count (1- count)))))

(provide 'flymake-java)

Tuesday, February 05, 2008


I've created a new weblog to discuss shibumiscript, a declarative approach to dynamic web pages, forms, and applications which combines the big ideas of XForms with the fluidity of AJAX libraries.

Monday, January 15, 2007

Remove HTML Background Marklet

Have you ever come upon a web page that is unreadable because of the background image or color? Try this bookmarklet:
  1. Create a new bookmark in your browser
  2. Put this text in the URL for the bookmark, as one line
  3. Just click on the bookmark when you want to clear the page background.
javascript:(function() {a=document.getElementsByTagName('a'); for(b=0;b<a.length;b++){a[b]. removeAttribute('bgcolor');a[b]. removeAttribute('background');} a=document.getElementsByTagName('head'); for(b=0;b<a.length;b++){var newstyle = document.createElement('style'); newstyle.setAttribute('type', 'text/css'); newstyle.innerHTML='body { background: white; }'; a[b].appendChild(newstyle);}})();

Or, bookmark this


Monday, April 24, 2006

Wiki Talk

I am at the Ward Cunningham/John Gage talk on Wikis at the Computer History Museum. I ran into Ken Pier, formerly of PARC and now at SocialText, and we chatted about kids and computers. Ken pointed out Doug Engelbart who passed by.

Wednesday, September 07, 2005



Sunday, June 12, 2005

Photo 932Photo 931

Tuesday, June 07, 2005

Photo 911
Porta potty arrived.

Monday, June 06, 2005

Dumpster fire
There was a bad smell of smoke I turned on my VX-2 just in time to hear them report a Fdumpster fire in my parking lot. I went outside to get away from the burning plastic smell, and get an espresso on the way.

Tuesday, May 31, 2005


When we bought our house 14 years ago, I bought a Makita cordless drill, 9.6v. When the batteries wouldn't hold a charge any more and I couldn't find replacements, I priced a new Ryobi, but just happened to read that there was a "Tim Allen Home Improvement" line that was rebadged Ryobi for $30 less. I compared them at OSH and they were indeed the same, so I bought it, 12v.

Now we are renting a house while we remodel, and I tried to use the drill. I couldn't find the charger, so I lived with the low battery, but then I found it. I plugged it in and in 5 minutes the battery got really hot. I looked and the charger said 17v, not 12v. Ugh. So I can't find the charger and have toasted one of the batteries.

So I go to look on web sites, and can't find the Tim Allen battery. The Ryobi ones I can find have a gozinta where the Tim Allen one has a gozouta, so they won't fit. So I head to Target on the way to work and find a Black and Decker for $70, 18v. A stop across the street at Wal Mart turns up the same model, for $4 less, but with two batteries. So now I am charging it at work. It says it needs 9 hours for the initial charge.

Maybe I will put Anderson PowerPole connectors on the 12v one...

Test Post

This is my favorite post

Saturday, May 28, 2005

Anniversary dinner

Sunday, May 01, 2005

Photo 835
Lou, at the PARC / Xerox coffee bar.

Tuesday, March 29, 2005