Google Chrome preferences interface is insanely bad

Following recent news about flaws in Java, I decided to disable it in my browsers.

For Google Chrome, I couldn’t figure it out, so I found a web page that describes it.

The first thing that happens in you open preferences, which opened in a new tab (hiding the web page I was using as directions, nice.) Then you have to click three different things. One is blue text labeled “Advanced settings…” which expands as if displaying a previously hidden block of HTML. The next is a button, which displays a pop-up. The third is another piece of blue text, which opens another tab. And only then, are you presented with a list of plugins that you can enable or disable.

It’s not like there isn’t a lot known about how to do preferences in applications. Amazingly crappy, Google.

IPad Music App gripes – podcasts

It used to be the case that the iPad was great for listening to podcasts. You could quickly see which podcasts you hadn’t listened to, and you could play a whole bunch of podcasts at once.
I’m not sure when this changed, but nowadays, the interface doesn’t include any indicator of which entries you’ve already played, and no longer plays multiple podcast entries in order.
Finally, there is no way to access the longer description of a podcast, as far as I can tell.
Altogether, this makes listening to podcasts somewhat infuriating when you have a backlog. Say I have a backlog of ten “NPR Sunday Puzzle” episodes. I’d love to play them in order, but to do so, I have to start each on in sequence. By the time I get to the seventh, I have to remember which number I am on (since the interface gives me no clue which episodes I’ve watched.) in some cases, I can scan the titles, but, really, shouldn’t the interface be easier?
The failure to play podcasts in sequence automatically also makes listening to podcasts on a long drive impossible without either fussing with the iPad while driving oe stopping after every episode.
Maybe I’m missing something in the interface. I looked in all the places for preferences, but didn’t find anything.

Java interfaces and implicit contracts

While working on a project using Apache Flume to write data to Hadoop, we implemented our own Flume OutputFormat class to write compressed data in a particular format. What we didn’t realize was that the Flume OutputFormat interface came with an implicit contract.

The main interface method in an OutputFormat is:

  public void format(OutputStream o, Event e) throws IOException;

Now, the reality of the way Flume uses this interface is that it repeatedly calls the method on the same OutputStream with the same OutputFormat. For any period of time, the OutputFormat is only used with one OutputStream, and visa versa. For the lifetime of the OutputStream, it is only used with one OutputFormat object.

So you might think that you could buffer some output inside the OutputFormat. The problem here is that we only partially understood the usage of the OutputFormat interface in Flume.

In particular, Flume has an end-to-end reliability mode, which needs to know for sure if an Event has been written to a destination. If your OutputFormat buffers any data, then Flume has no way of knowing whether a particular Event got written to an OutputStream.

This means that any compression must be at best a per-record compression – the compression Codec must not have any buffered unwritten data when format() returns.

Interestingly, this was implicit in the interface, on some level – the fact that the format() method takes an OutputStream parameter would implicitly seem to imply that you shouldn’t buffer data. But the implementations generally assume the usage pattern above, keeping a reference to the current OutputStream for the duration. They just also did an internal “flush()” call which we tried to remove in our implementation.

See: https://issues.apache.org/jira/browse/FLUME-983

IMDB gripe – episode searches

One of the most common IMDB  use cases, for me, is: While watching an episode of, say, Law & Order, I wonder, “Who is that actor?”

If I go to the IMDB site, or use the iPad or Android app, a search for the episode title fails. I have to search for the show, navigate to the correct season (which is a guess, because I usually only know the year of broadcast,) and then browse the list to find the episode.

The workaround to this is to Google it. Add “site:imdb.com” to your Google search, as well as episode title and series name.

Another deficiency of the IMDB apps (but not the web interface,) is that if I find an actor, and his credits include, say, an episode of House, selecting that credit doesn’t take me to the episode, but to the House front page. That is hardly ever what I want.

Android Market Gripe

Why does the Android Market app frequently tell me that an app update is available, but when I click on the app, it only gives me the option to open or uninstall the app?
It often lists an app as having an update right after I’ve installed an update.  Irritating.

Android “Silent Mode” Language Gripe

Silent Mode Text
Not sure if this is particular to Samsung Android devices or Android devices in general, but when I press and hold the Power/Lock button, the first item on the list of possible actions is the text “Silent Mode” in big letters, and then in smaller letters, “Sound is ON.”

This is bad, because I see the word “ON,” which is in all-caps, and I think that “Silent Mode” is “ON,” when that is not what it means at all. The header and the secondary line are contradictory, leading to confusion. (Yes, it turns out that if the phone is actually in “Silent Mode,” the icon changes, but that’s not obvious to the new user, and it’s very easy to make this mistake.)

Also, why are “Silent” and “Airport” modes listed as “ON” or “OFF,” but “Data Network Mode” is “activated?” (I suspect the reason for this that Data Network Mode” costs the user money, but it’s not clear why the text is lower case, when “ON” and “OFF” are upper case.

Google Listen Gripes

I’d love to use Google Listen to listen to my favorite podcasts, but it has a number of irritations. The number one irritation is that when it is done playing a podcast, it immediately starts playing the next one in my queue, or, if the queue is empty, it starts playing a recently downloaded subscribed poodcat. That is very, very, annoying. When I navigate down to a particular podcast, say, Scientific American’s “60 Second Science,” and I request a particular episode to play, I certainly don’t expect, when it is done, that Listen will jump to the most recent “This American Life” or whatever. I expect it will either (1) stop, or (2) play the next unplayed “60 Second Science” entry. This is really bad user interface behavior.