In case you're curious: here's what you'll see if you rescue your iPhone from a hot car:

Appel d'urgence indeed!
In case you're curious: here's what you'll see if you rescue your iPhone from a hot car:

Appel d'urgence indeed!
Most programmers know that having functions with too many parameters can be confusing. However, fixing such problems requires some intelligence. A programmer once saw some code like this:
SetObjectParams(obj, foo, bar, baz, quux, xyzzy, abra, cadabra, hocus, pocus, presto, shazam);
Finding a stylistic rule somewhere that said a function should have no more than five parameters, the programmer “refactored” it to this:
SetObjectParams1(obj, foo, bar, baz, quux);
SetObjectParams2(obj, xyzzy, abra, cadabra, hocus);
SetObjectParams3(obj, pocus, presto, shazam);
No, that's not how one resolves this problem. You fix this problem by defining functions that each do something simple, give each function a name that describes what it does, and let them take however many parameters make sense.
Menubar Countdown is a simple countdown timer that displays itself on the right side of the Mac OS X menu bar.
Version 1.2 has these new features:
To download the application or get more information, see the Menubar Countdown product page.
When I released Menubar Countdown 1.1, I whipped up an application icon by simply taking a screenshot of the menu bar and cropping it. The application icon looked like this:
![]()
Fugly, eh? Not only is it ugly, but the narrow shape makes it hard to recognize as an icon, and makes it hard to click.
For version 1.2, I wanted a better icon. I thought an hourglass would be a good symbol, so after a few hours of looking at images on the web and dinking around in Photoshop Elements, I wound up with this:
![]()
I'm was very happy with it. Unfortunately, the hourglass image is based upon a photo I licensed from iStockphoto. iStockphoto considers an application icon to be the same as a logo or trademark, and such usage is expressly prohibited by their licenses. I'm not a lawyer, but I assume this is to prevent someone from putting a stock image into a logo and then suing all the other users of that image for trademark infringement.
So, I again went to the web, to look for public-domain images I could use. I eventually wound up with this:
![]()
I don't like it as much as the last one, but I've decided I've spent too much time on my application icon, and not enough time on making the application better, so this will be the icon for version 1.2. Maybe I'll revisit it for the next version.
I remember the good old days when a Macintosh application icon was a 32x32 black-and-white bitmap. Those were pretty easy for a non-artist like me to create, using simple tools like ResEdit. Now, this stuff is better left in the hands of professional designers, but Menubar Countdown is free, so I trust users will be satisfied with my amateurish effort.
If there are any real designers out there who would like to give me a better icon, I'd definitely appreciate it.
One of my clients, whose e-mail system I have to use, uses a product called ESATInformer to filter spam. I don't understand exactly what the benefit of this system is.
When the system receives suspected spam, it keeps that spam message on the server, but it sends me an e-mail saying "We've received a message that might be spam. What do you want to do with it?" So my inbox still gets filled with unwanted e-mail about suspicious e-mail.
If I want to read the suspicious messages (and I usually do), then I have to send an e-mail request back to the system, which will then send them to me. It would be a whole lot easier if they would just let the suspicious messages through in the first place.
If your spam-filtering system is more annoying than spam is, then you've really screwed up.
I am sometimes asked by non-programmers how they can get into programming. They want to know what programming language they should learn, which programming tools to use, and so on. These are hard questions to answer. It's like asking "I'd like to be a musician. Which instruments and which pieces of music should I learn?"
Here is my advice:
Programming is a big field. Choosing a concrete goal narrows it to something manageable. Once you know exactly what you want to make, it is a lot easier to decide upon a programming language and tools.
Professional programmers don't "learn how to program" and then just apply that knowledge for the rest of their careers. Every day, we learn new things: programming languages, tools, libraries, operating systems, and so on. We pick it up as we go, learning what we need to know as it's needed. If you want to be a programmer, you need to learn how to do the same.
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:
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:
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.)

Twitter is getting a lot of attention from the mainstream media. A lot of people are trying it out, but they don't understand what they are supposed to do with it, they don't see any value in it, and they give up quickly.
Many people fall into the trap of thinking of Twitter as a "social network," and so they just follow their real-world friends and people they would like to meet. Unless you have exceptionally interesting friends, this is not going to give you a good Twitter experience. Steve Lawson explains it better than I can: Twitter sucks, so change your friends.
Don't think of Twitter as being like Facebook, or like an instant messenger. Think of it more like YouTube. It is a place where you go to consume content, 140 characters at a time.
Be very selective about who you follow. Don't just follow your friends or celebrities. Follow good writers, especially those skilled at brevity. Comedians and comedy writers are often great tweeters, as jokes fit well in this format. However, don't count on your favorite comedian being a good twitterer: many use Twitter only to plug their appearances or DVDs.
Note that if you follow too many people, other Twitter users will assume you are a spammer or other not-really-serious user, and will ignore you. Being selective is an important part of finding the right "community" within Twitter.
Many Twitter users complain because nobody is following them. Don't expect people to follow you, unless you create really interesting tweets. Nobody cares what you had for breakfast or how long your flight has been delayed. And don't expect celebrities to respond to your messages: they have so many followers that they can't possibly pay attention to what the followers say to them.
For suggestions about how to recognize and create good tweets, see this Washington Post article: Short(est) Stories: The Art of Twitterature Means Making 140 Characters Count.
If you have a group of friends or co-workers who keep in touch via Twitter, that's great. But for most of us, Twitter is best used as a read-only medium. Leave the writing to the people who have something to say, and otherwise just enjoy it.