My HTC One Review

I've been an iPhone user for the past five years, except for a few weeks in 2011 when I used an Android phone to see how good it was. At that time, my evaluation was that Android was a second-rate knock-off of iOS.

But, with the releases of Android 4.0 "Ice Cream Sandwich" and 4.1 "Jelly Bean", Android got a lot less ugly, and hardware is finally fast enough that it doesn't feel so slow. Because I make about half my income from Android app development, I decided it was time to give Android another try as my personal phone. I vowed to put the iPhone away, buy a top-of-the-line Android phone, and use it for at least 12 months. My goal was to immerse myself in the Android ecosystem and learn how "regular people" use their Android phones.

When I made this purchase in July, the two top-tier Android phones were the Samsung Galaxy S4 and the HTC One. I've hated the two Samsung devices I've owned (Samsung Galaxy S and a Samsung Galaxy Tab 2 7.0), so it was an easy choice.

I won't re-hash the things that all the other HTC One reviews say. These are my personal impressions, and what I do and don't like about the HTC One may not match your preferences.

Air Display vs. MaxiVista

Most of the time, I work at the Windows 7 computer in my home office with a dual-monitor setup. A lot of non-geeks have never used a dual-monitor setup: you will just have to trust me when I tell you that, for a programmer or any other person who needs to look at a lot of information all at once, it is much more productive than a single-monitor setup. It's not a luxury—it's a necessity.

When I have to leave the home office and go into the office office, I take a Windows laptop. This is less productive, due both to the small screen size and the fact that I have only one screen. So I decided to try out a couple of apps that allow one to use an iPad as a second monitor.

My iPad Review

So, I've had an iPad for about a month and a half. Here are my impressions:

Overall, it's really nice. It fills the need for a little Internet-connected device that lets me watch video, read books, read online news, and browse the web. I used to keep my old 13-inch MacBook next to the couch for these purposes, but that MacBook is now in a closet. I've also put away my Sony Reader that I kept on the nightstand.

Objectified: Great Documentary

I just finished watching Objectified, and can wholeheartedly recommend it to audiences of all ages.

Objectified is about industrial designers. Those are the people who design all the stuff we buy. Look around you: that desk you're sitting at was designed by somebody. The mouse and keyboard were designed by somebody. That lamp was designed by somebody. The chair you're sitting in was designed by somebody.

We often think that consumerism and mass production takes the human element out of life, but Objectified will make you look at all those little works of art that surround us. Sure, there may be ten million copies of each thing, made by people in sweatshops, but somewhere there was a person who thought about it and made a lot of decisions. What shape should it be? What color should it be? What texture should it have? Should the edges be sharp or rounded? What should it be made of? How will it be manufactured? How much will people pay for it? What should the packaging look like? How can it be disposed of?

Objectified presents interviews with the people who do that. It may be a little geeky (how many people really care?), but it will give you a new appreciation for all that stuff you buy.

I rented it from iTunes. Next I'm going to watch Helvetica, which was directed by the same guy.

Switched from Firefox to Safari

For the past week, I've been using Safari instead of Firefox, and I've decided to make the change permanent.

Why? Firefox is just too slow. Remember the good old days when Firefox was the leaner, faster, less-bloated alternative to Netscape Navigator? Those days are in the past. Firefox now takes over ten seconds to show a window after I launch it, whereas Safari is up immediately. Safari is also faster at rendering pages, and at just about everything else. It takes up a fraction of the memory of Firefox, and has not yet started using 100% CPU for no reason at all, as Firefox tends to do.

The thing that Firefox has that other browsers can't match is the huge set of add-ons (extensions, themes, etc.). While many of these are really cool, there are really only two that I consider must-haves:

The lack of Adblock Plus is noticeable right away. Web sites that I visit frequently are suddenly awash in ads. It's very distracting. There are a couple of Safari extensions that supposedly work like Adblock Plus on Firefox, but they don't work as well. Most Safari users seem to be happy with simply blocking Flash ads with ClickToFlash, but I'm not satisfied with that. I've just started a trial of GlimmerBlocker, which seems pretty good so far.

PasswordMaker is a nifty little Firefox extension that automatically fills in password fields with passwords that are unique to each site, generated by hashing a master password with the site's name. This is great, because I haven't had to remember any passwords with Firefox, but it's bad in that I now have to teach Safari all those passwords, and I have to do a lot of manual copying and pasting.

With my new foray into web technologies, maybe I'll devote some time to trying to get these essential Firefox extensions ported over to Safari.

Aside from the missing add-ons, I also miss Firefox's keyword search functionality. There is a Safari extension, Keywurl, that supposedly provides this functionality, but it is not yet compatible with Snow Leopard. (If you search hard enough, however, you can find some unofficial 64-bit builds.)

Unfortunately, Safari does not actually have a supported plug-in/extension mechanism, so most of these extensions are hacks that can crash Safari or which suddenly stop working whenever there is a system update. It's a shame that so many products today are not designed to be extensible or user-programmable.

Aside from those little missing features, I'm happy with Safari. (For now, anyway.)

JavaScript: The Good Parts

As a result of the recent hubbub about web apps, I decided to get myself up to speed on JavaScript and CSS. Knowing Douglas Crockford's reputation as the JavaScript guru, I read his book, entitled JavaScript: The Good Parts.

It's a good book. The basic idea is that while JavaScript is actually a pretty cool little programming language, it has a lot of features that are best not used, and it has many outright flaws, so Crockford presents a recommended subset of the language.

The most valuable parts of the book are appendices A and B, entitled "Awful Parts" and "Bad Parts", respectively. These appendices list the gotchas of JavaScript and present rationale for leaving certain constructs out of the recommended subset.

My only gripe with the book is that, while it is presented as an introductory book, it seems to assume some previous knowledge and experience with JavaScript. I got a bit lost in some parts, particularly those regarding prototypes, the new keyword, and how this gets bound in various situations. (I was able to eventually figure these things out with a bit of Googling.) It also assumes some experience with functional programming, which is OK with me, but which will probably confuse a lot of introductory readers.

So, while I can enthusiastically recommend the book, I think I'd recommend it as a second JavaScript book.

MINI Cooper S Convertible Review

My wife and I bought a MINI Cooper S convertible almost a year ago. These are my thoughts about it:

The MINI Cooper convertible is the Apple Macintosh of cars. It's very expensive in comparison to other models with similar performance and features, and it has a lot of annoying flaws, but people who own them absolutely love them. It is the only car I've owned that has delighted me.

First, I'll note that I am not a "car guy." I won't say anything about horsepower, torque, zero-to-60, how it handles on a race course, or how it compares to any of the bazillion other cars on the road.

I'll start with what I don't like. It's small. Two adults fit in the front seats fine, but the rear seat is basically unusable. The trunk is almost unusable as well. We've had to cut shopping trips short because we knew we were carrying more shopping bags in our hands than would fit in the car. A full-size suitcase won't fit in the trunk, so think "duffel bags" if you want to do any traveling.

While it's small, you don't get a lot of the advantages of a small car. We only get about 26 MPG, in mostly highway driving. It's short nose-to-tail, but is about as wide as a typical car, so you can't squeeze into those parking spaces that other cars have to pass by. The turning radius is a lot wider than you would expect.

With the convertible top up, visibility is terrible. You can't see much out the rear window, due to the roll-bar thingees on top of the rear seats, and the blind spots in the rear quarters are huge. I often have to put my chin down on the steering wheel to see traffic signals, due to the low ceiling.

The GPS system sucks.

But with all those problems, I'm still thrilled with it.

Despite its small size and tiny engine, it feels more like a mid-size car. It's very stable, and takes corners well. The automatic transmission works pretty well in most circumstances, and switching into the semi-automatic mode is great when driving on twisty mountain roads like the one that goes up to my house.

And it has this magical aura that makes people smile. People come up to me in parking lots and ask about it. Other MINI drivers wave at me on the road.

So, if you just want practical inexpensive transportation, stay away from the MINI. But if you want to be happy when you're driving, give it a try.

P.S. Don't buy a MINI or any other car from Global Imports BMW in Atlanta. Those guys suck.

Netgear ReadyNAS Duo 2000 Setup and Review

I have previously written about my backup strategy. I've never really worried about backups too much. In the 30 years I've been using computers, I've never lost a hard drive.

...until last weekend. My wife's MacBook Air was displaying some funny behavior, so I ran Disk Utility on it. Disk Utility said the drive had problems, so I clicked Repair Disk, and it would not boot thereafter. I called Apple, and their expert told me I'd have to erase the drive and reinstall the operating system. We had no backups for that machine. My wife was not happy to lose everything. And of course, it is my fault she had no backups. (I've told her about Time Machine, but she didn't believe it could really be that easy to set up, so she never did.)

So, better late than never, I decided to get some network storage and start backing up everything to it. A friend was happy with his Netgear ReadyNAS, so I ordered a Netgear ReadyNAS Duo 2000 from Amazon, along with two 1-TB Western Digital Caviar Green hard drives. Total price came out to about $400.

The ReadyNAS has two drive bays. Most models come with a drive included, but I bought the "bare" one that has no preinstalled drives, assuming that it would be cheaper to buy my own drives. Upon reading the manuals, I immediately hit a problem: the manuals explain how to add a second hard drive to a ReadyNAS that comes with a single drive, but nothing about what to do if you have an empty ReadyNAS.

Hoping for the best, I installed the two Caviar drives in the NAS, plugged it into the network, plugged it into power, and hit the power button. It turned on, but the slowly blinking LED didn't give me a warm fuzzy feeling.

I installed the RAIDar software, which one uses to manage the device, and it told me I had bad disks.

After about half an hour of Googling, registering the product, registering for the Netgear forums, and registering for the ReadyNAS forums (each of which required separate sign-up forms and e-mail confirmations), I finally found a current ReadyNAS FAQ (after hitting a few old FAQs that were created before my model existed). There was nothing specific about my situation, but I decided I would try the "factory reset". That worked: RAIDar enabled its Setup button, and I was able to initialize everything.

I was initially worried about the fan noise. When the ReadyNAS boots up, the fans are incredibly loud for something that small. After 30 seconds or so, the noise drops a little, but it was still really loud. A Google search for "readynas loud fan" indicated that lots of users have replaced their ReadyNAS fans, due to the noise. But after the drives got formatted, the fan noise dropped to a barely detectable level. It's not as quiet as my Macs, but it's not loud enough to be annoying.

It was very easy to set up Time Machine with the ReadyNAS. (First thing I did was back up my wife's Air, of course.)

The ReadyNAS has a lot of other features that I am not yet using. $400 for a backup solution seems a little pricey, when one can buy a 1-TB drive and enclosure for about $100, but having storage available on the network means we're more likely to actually do backups. We'll see how things go.

A complete description of all the features can be found here:

Review: Core Animation for Mac OS X and the iPhone, by Bill Dudney

Either I’m stupid, or Apple’s developer documentation sucks. Whenever I try to enter a new area of Cocoa development, I am presented with simplistic tutorials and detailed reference information, with little in between to bridge the gap between newbie and expert. Often, the only way to learn an API is to hack on the example programs until enlightenment occurs, or do a lot of Googling.

This is exactly what happened with Core Animation. Most OS X developers don't need to know much about Core Animation, as it is a relatively new feature of OS X, and Mac users don't expect fancy animations in every application's UI. However, on iPhone, users do expect things to bounce and zip around the screen, so an iPhone developer really needs to know this stuff.

I started reading Apple’s Core Animation Programming Guide several times, and each time, I got lost in Chapter 2. Skipping forward to subsequent chapters didn't get me anywhere. I was presented with architectural diagrams and abstract discussions of geometry and transforms and layers and timing and so forth, but there was nothing concrete that I could grasp.

Bill Dudney’s Core Animation for Mac OS X and the iPhone filled in the gaps perfectly. It doesn't contain much information that is not in Apple's docs, but it presents it in a way that makes sense to me. Dudney leads you by the hand through actual working code that does cool stuff. After reading this book, I now understand what Apple was trying to tell me in the Core Animation Programming Guide.

I read the PDF-formatted version. I also tried reading the epub-formatted version using Stanza on the iPhone, but that didn't work so well: the diagrams and code examples aren't readable. So I recommend sticking to the PDF or paper formats.

My only gripe is that I'd like to see more iPhone-specific information. The majority of the book covers Core Animation on OS X, and then there is a single chapter at the end about the iPhone. I would prefer to have an iPhone-centric book with an oh-by-the-way-this-works-on-OS-X-too chapter. But that's a minor quibble; I think I understand the material well enough now that I can learn the iPhone-specific aspects of Core Animation on my own.

OmniFocus Review

I've written before about my Ultimate To-Do List Application for iPhone. I was pretty happy with what I wound up with, but it still wasn't helping me much. Writing down your desired actions is only one part of Getting Things Done (GTD); you also need to organize and process things, and a simple list of lists wasn't helping me do that.

So, I've decided to give OmniFocus a try. So far, I'm very impressed. It truly is the ultimate to-do list application for iPhone.

I won't go over the basics of what it does or how to use it. Watch these videos if you want a taste of its functionality:

What makes OmniFocus better than a simple to-do list is that it organizes next actions in two dimensions: by project and by context. A project is some list of actions. For example, if I want to take my wife out for dinner and music this weekend, I might create this project:

  • Take Pebble out
    • Find out what bands are playing this weekend
    • Check with Pebble to see which band is her favorite
    • Buy tickets
    • Make dinner reservations
    • Get directions to restaurant
    • Get directions to venue
    • Call babysitter

That's a lot to do, and this is only one of dozens of projects that are active at any time. But what makes all this stuff manageable is assigning the actions to contexts:

  • Online
    • Find out what bands are playing this weekend
    • Buy tickets
    • Get directions to restaurant
    • Get directions to venue
  • Phone
    • Check with Pebble to see which band is her favorite
    • Make dinner reservations
    • Call babysitter

So, the next time I'm at my computer and bring up OmniFocus, I'll see "Find out what bands are playing this weekend" as the next available action for this project, and I'll (I hope) take care of it. Then the next time I open OmniFocus on my phone, I'll see "Check with Pebble..." and take care of that.

You plan using projects, but you execute using contexts. Contexts are the key to actually getting things done, rather than just leaving those actions languishing in dozens of lists you never look at.

The killer feature of OmniFocus is the synchronization between the desktop application and the iPhone application. I like that I can do all my planning at my desktop, then when I get in my car, I can quickly bring up the Errands list on my iPhone to see what I can pick up on the way to wherever I'm going. Or while in a meeting, I can quickly enter items into the phone and then process them later at my desk.

The downside of synchronization is that it is sometimes slow. My iPhone sometimes takes several minutes to complete a synchronization through MobileMe. You can use the app while it is synching, so the synchronization delay is more of a minor annoyance than a major source of frustration.

OmniFocus is designed to support the GTD system, and while it is adaptable to other productivity systems, adherents of other systems may not like it. For example, it does not give a way to prioritize tasks in the way that Franklin-Covey devotees would like.

It is important to understand what OmniFocus does not do. It is not a calendar or scheduling application (use iCal or Entourage for that). It is a personal organization system; it is not suitable for managing teams. It is not a project-tracking system. It is not a communication tool. It is just a tool for keeping track of all the things you want to do, and helping you do them with minimal fuss.

OmniFocus is powerful, but also pretty complicated. You definitely need to watch the tutorial videos and read the Getting Things Done book to figure out what the hell this thing does. The effort pays off.

OmniFocus is a little pricey ($100 to get it for both desktop and iPhone), but I'm very happy with it.

(Note: This review is based upon version 1.6.1 of the OmniFocus desktop app, and version 1.2.3 of the iPhone app.)

Syndicate content