A few recommended books, movies, games, and albums. If you want to look for more recommendations, feel free to look at the larger selection over at Amazon or my Amazon Store with more recommendations.

  • Cryptonomicon
    by Neal Stephenson
  • DreamCypher
    Dancing Ferret
  • Tron: Legacy (Amazon MP3 Exclusive Version) [+Digital Booklet]
    Tron: Legacy (Amazon MP3 Exclusive Version) [+Digital Booklet]
    Walt Disney Records
  • The Moon Is a Harsh Mistress
    The Moon Is a Harsh Mistress
    by Robert A. Heinlein

Entries in mac (26)


Switching iPhoto Libraries

It used to be that if you had lots and LOT of pictures, iPhoto would slow down, and you'd be told by some well-meaning soul to start a new iPhoto library.  The problem being that to switch from one library to another required you to either dig up an app like iPhoto Buddy, or to learn the timing of holding down the "option" key as you started up iPhoto, so that you could select an alternate library.

In short - while less of a pain than dealing with iPhoto taking forever to do anything, it was still painful to do it manually.

It turns out hte latest updates to iPhoto 11 now allow you to switch to another library from within iPhoto.


 While I still use iPhoto Buddy, it's nice to be able to switch on the fly without restarting iPhoto. 


Custom Keyboard Shortcuts - and Making It Easier to Rate Songs in iTunes 

I recently started going back through my music library to rate and clean up a number of new songs that had been added over time, and old songs that I just never quite sorted out by category or genre. 

Changing album names, or other information on a group of songs requires using the "Get Info" panel. Changing ratings for groups of songs requires the same, or using an awkward multi-level menu.

This article is about how to make a convenient, intuitive shortcut for rating the selected song(s) in iTunes.

One little-known feature of the Mac OS is the ability to define arbitrary keyboard shortcuts, or change the existing system shortcuts. These shortcuts can be defined for everything the user does, or for just one program or "App". Since the ratings exist as a menu item, we can create a shortcut to use while we are in iTunes.

Starting Point: System Preferences

We'll be working on the "Language and Text", and "Keyboard" system preferences, located below in OSX 10.7

Step One: The Character Palette

Most menu items don't use custom characters, but the ratings menu options are a "black star" character, so we'll have to enable the input menu so we can easily access the character and keyboard viewers. Both are useful tools to play around with, and to have around.  

As shown below, go to Language & Text, select the Input Sources tab (1), and check the "Keyboard & Character Vewer" and "Show Input Menu in menu bar" (2 and 3).

Unless you really need to specify keyboard layouts for other languages, you don't need to check any of the other languages.

At this point, a new menu item should show up in your menu bar. 

Step Two: The Keyboard Preferences

Now we go to the Keyboard system preferences pane. Choose "Keyboard Shortcuts", select "Application Shortcuts", and click the "plus" symbol to add a new shortcut.

A sheet will slide down. Select iTunes as the application (1), and put the cursor in the "Menu Title" field (2). This field must exactly match the name of the menu item that you are creating a shortcut for. Capitals, spaces, and special characters like Ellipses count. 

Here's where you go back to the input menu and select "Show Character Viewer." In the window that pops up, Select "Bullets/Stars" on the left, and the "Black Star" character as shown - the name will show up on the right. Once you have the right one selected, double-click on it, and a star will be added to the Menu Title field. 

You can now close the character viewer, and return to the keyboard settings. Click inside the "Keyboard Shortcut" field, and type "Command-1" (⌘1 or Apple-1) exactly as you would type Command-P (⌘P) to print. Then, when it the panel appears as shown below, select and copy the star character (make sure you don't grab any empty space) for re-use, and click "Add".

Now, click "+" again, and paste in the star twice (again, make sure there are no spaces in between), and this time for teh shortcut select Command-2 (⌘2). Repeat for three, four, and five stars. You can also add a menu shortcut for "None" (Capitals count in menus and Menu shortcuts) - and I use Command-0 (zero) as the designated shortcut.

When done, you should be able to go under the file menu, and look under Ratings to see the following in iTunes (make sure you have a song selected)

How to use the shortcuts:

Simply have one or more selected in iTunes, and type the desired shortcut. All selected songs will now have the assigned rating. Note that the song being played is not necessarily the selected (hilighted) song, so Command-L (⌘L) will select the currently playing song, allowing you to then use these new shortcuts.


Configuring For a Better Gmail Experience, Pt. 1

  1. Configuring For a Better Gmail Experience, Pt. 1
  2. Configuring For a Better Gmail Experience, Pt. 2 Junk Mail
  3. Configuring For a Better Gmail Experience, Pt. 3 Advanced Junk Mail
  4. Configuring For a Better Gmail Experience, Pt. 4 Smart Folders

 If you’re running Snow Leopard or Lion, adding a gmail based email account to your mail application may seem trivially easy. Go to the accounts tab of the preferences and add a new account, and let configure itself.

The problem of course lies in the fact that while Gmail may pretend it’s an IMAP service, it isn’t, quite. One of the largest differences is that Gmail uses “labels” instead of folders. The advantage to this is that if a message belongs in several categories, you can actually effectively file it under multiple labels without having to make copies. While Google makes an effort to bridge this very different view of how mail should be organized, it means that Gmail can behave very differently than typically expected. As a result they have a knowledge base article on recommended IMAP settings, and an article mapping out how certain actions in a mail program translate to Google.

IMAP, for those who are wondering, is one of the two most common systems for retrieving mail. POP3, the older standard, downloads the mail to your machine just like recovering it from the cubby in a mail room, and now your computer has the only copy.  IMAP allows easy web access because the master copy always stays online. Whenever you log in via the web or a mail program and read new mails, delete mail, or move mail, those changes are also made to the original copy so that the next time you check your mail, no matter what you check it on, you see the same view. 

I’ll address one other issue right up front: Why bother using a separate mail program?

I don’t mind Google’s web interface. On those occasions where my laptop is unavailable or inconvenient (I’m working at another computer that I need to access email from) I’ll gladly use the web interface. That said, I also have several email accounts (work, Gmail, and an older personal account that I’ve had for years that isn’t Google-based), so being able to get to all of my mail from one place is a necessity. Factor in some nifty keyboard shortcuts courtesy of Mail Act-On and better integration and handling of attachments with the rest of my computer, and it’s a done deal.

The problem of course lies in the conflict between how every other IMAP mail service talks to (or Outlook, etc.), and how Google does. I don’t want to treat one account differently from the others. 

So here’s a guide to tweaking both Google, and, to work the way you want it to . Some of these hints have parallels in Outlook or Thunderbird, especially the ones dealing with online Google settings.

Stop Checking Your Mail

First things first, turn off all automated, scheduled email checks if you can. Google (and Mobileme/iCloud, and many other IMAP mail services) use a feature of IMAP that allows them to  get email as soon as it lands in your inbox without having to ask the server if anything new is in. Not only do you not need it in most cases, but if you are using the web service, or a phone to check your email as well, this can result in enough simultaneous connections (the desktop mail programs can make a lot of connections) to trigger Google into blocking access to your account as a potential spammer, and you won’t be able to download new mail.

In this is found under the general tab of the mail preferences. The applies to Thunderbird and Outlook as well, though Outlook does give you the ability to isolate some accounts to check for new mail, but not others. 

If you must update your inbox on a schedule, set it to hourly, or even less often.


Recommended Settings

Let’s walk through the recommended settings for Google, and see why each of them exists. Before we do that, let’s look at how sets up a Gmail account by default:


  • Do NOT save sent messages on the server. If your client is sending mail through Gmail's SMTP2 server, your sent messages will be automatically copied to the [Gmail]/Sent Mail folder.

This one is plain enough, but not mentioned here is that since Google automatically copies all outgoing mail to “sent”, if you copy all sent messages to the online sent folder as well, you get duplicates of everything ever sent. You also waste time uploading a second copy of your message just to park a copy in “Sent Items”.

If you look at the earlier screen shot, you’ll see that Apple doesn’t set it the way Google recommends. I strongly recommend unchecking it.

The only downside is that your default “sent” folder in may not reflect any messages sent via the web, or from your phone or another computer. That said, if you look at the list of IMAP folders (usually to the left), under the folder “[Gmail]” you will find a folder called “Sent Mail” that contains every email sent, no matter where it was sent from.

Since I have multiple accounts, I still want one place I can go to and check for sent messages that may not have been sent via That’s where smart folders come in and I’ll cover those later.

  • DO save draft messages on the server. If you want your drafts in your mail client to sync correctly with Gmail's web interface, set your client to save drafts to the [Gmail]/Drafts folder.

This is generally good advice, and Apple sets this by default. Unfortunately, there’s a known “bug” in how deals with Google and drafts that results in two wonky side effects. First, when you finally finish a draft and send it off, it doesn’t always clear the draft out of the drafts folder. Second, there is an auto-save behavior of the drafts that can result in dozens of draft copies being saved as you keep the draft open and keep working on it. I generally recommend to follow Google’s guidance here, but people who don’t care about accessing the same drafts folder no matter where they are may consider unchecking this.

  • Do NOT save deleted messages on the server. Messages that are deleted from an IMAP folder (except for those in [Gmail]/Spam or [Gmail]/Trash) only have that label removed and still exist in All Mail. Hence, your client doesn't need to store an extra copy of a deleted message.
  • Do NOT save deleted messages to your [Gmail]/Trash folder because this will delete a message in all folders.

You’ll notice that Apple doesn’t follow this by default, and personally, I prefer the way Apple sets it by default.

Google wants you to actually drag a message to the trash to delete it. “Deleting” the message by using the delete button or key merely hides it and is treated like archiving a message that hasn’t had a label/folder applied to it - and it is still available in “All Mail”. Given that email programs don’t differentiate between “Archive” and “Delete” like the web interface does, this is a reasonable compromise, and if I was using only Google accounts, I would probably do it their way. 

The problem is that it makes Google based accounts behave differently from the non-Google ones I use. As a result, I DO save mail on the server, and DO move deleted messages to the trash folder. I want the messages I delete to actually be deleted. I don’t even use “All Mail” - even in the web interface, since I figure if I want to keep the message, I’ll file it under a label/folder, even one as generic as “other.”

  • Do NOT save deleted messages to your [Gmail]/All Mail folder as some clients will try to empty this folder and ultimately fail. This can lead to delayed mail access or excessive battery consumption on a mobile device

Solid advice. Though the only harm in doing so is duplicate messages, why waste space?

  • Do NOT enable your client's junk mail filters. Gmail's spam filters also work in your IMAP client, and we recommend turning off any additional anti-spam or junk mail filters within your client. Your client's filter will attempt to download and classify all of your existing messages, which may slow down your client until the process is complete.

In short - turn off junk mail filtering entirely if you can, and just look in Google’s “Spam” folder for anything that may have been misfiled. If you can’t turn off all junk filtering (say, you use it for an iCloud or other account), there are some advanced settings I’ll show you in a bit that allow you to selectively filter some accounts but not others. You can also use smart folders so that you can still look at all of your junk mail folders in one place.

As a result, my “Mailbox Behaviors” under Preferences > Accounts tends to look like this:


Before we settle in to email friends and family, we need to do one more thing - designate our drafts and trash folders. Otherwise, Mail will end up creating its own folders, and you’ll end up with the confusion of duplicate folders to sort through whenever you look at your mail elsewhere.

In the folder list to the left, expand out the folder named “[Gmail]” and select the folder named “Drafts”. Then go to the Mailbox menu , then select “Use This Mailbox For”, and choose “Drafts”. Then select [Gmail]/Trash on the left, and go to Mailbox > Use This Mailbox For > Trash.

The next articles will cover setting up smart folders, advanced Junk Mail settings, and how to manage junk filtering in Gmail.


OSX 10.7 "Lion" - Not Quite Linux on the Desktop. Yet.....

Courtesy of the guys at Minimal Mac, I took a look at the new information available on OSX 10.7, aka "Lion."

There are three features that interest me here that I'll discuss, outside of the "mission control" revamp to finding your open windows. All three features, at first glance, appear to be opaque to non-geeks, yet, like Time Machine, I see them at least two of them becoming nearly indispensable, with the third a huge boost to smaller businesses. 

The first is "Auto Save." If I understand the verbiage here, Lion will get automated saving of open documents without you ever having to remember to do it yourself. Say goodbye to working on something for 30 minutes or an hour, and losing it all in a software crash, because the computer will take care of it for everything you have open, not just the few programs that explicitly go to the trouble of auto-saving. It's unclear if this is a feature that software will have to deliberately allow use of, or if any and all programs inherit this ability.

The second is "Versions." Sortof like Time machine for individual documents, the OS will now keep all previous iterations of a document that you can flip back to.

The last is the fact that there will no longer be a separate "Server" version of the OS. It's unclear at this time if the license will be unlimited, but from now on, the server administration panels will just be a more advanced set of options for every Mac running OSX 10.7.

The overall impact of this is as follows. Apple is making sure that at a system level, just like Time Machine made backups transparent for the standard home user, that the computer will also act to protect the integrity of your work no matter where you are doing it. 

They are also expanding on the concept they started with the Mac Mini "servers" pre-loaded with OSX server. Even before that plenty of companies (like Delicious Monster, the makers of the Delicious Library book/media inventory app) had already settled on using several cheap Mac Minis as servers because you could lose one or two and still end up ahead compared to the cost of a full XServe. Now, any mac can be set up with as many, or few, server features that you need without paying a premium for a separate OS.

In some ways, this reminds me of the ongoing quetion on when Linux will be popular on the mainstream desktop. One highlight of the free-to-install Linux OS's has always been the ability to install any feature from basic user programs to the most complex web and network software without having to obtain a separate version for the more advanced features. You just install and setup the features you want. 

Now, that's going to be true of the Mac. From iPhoto to office user administration, and everything in between.

I do wish they had some form of rack-mount hardware in place, but that's not a necessity for the typical home or small office user.

Interesting times.


Learning to Program

Programming is an art form where we ask a question, and then write out very detailed instructions on how to answer that question. The instructions are written in a very limited subset of words, with a very precisely defined grammar. From this foundation, we can eventually end up at Microsoft Office or the latest XBox game.

Of course, there is a long, long road from writing out your first “hello world” tutorial to the latest word processor or Portal adventure from Valve. On this road, the byways will include a bewildering array of languages, options, tools, and a seemingly insurmountable mountain of functions, libraries, and bizarre vocabulary you’ve never seen before.

It’s very easy to get discouraged if you allow yourself to. The trick is to break the process down into chunks that you can manage, that give you some feedback, that let you go “Yes, I succeeded!” so you don’t feel like you’re churning away without making any progress whatsoever. This comes under the header of “Choosing your projects wisely.”

Actually, the first trick is to remember that trying to program gets you nowhere. You’ve actually got to do it.

What Have I gotten Myself Into?

A challenge. Like all worthwhile challenges, it will not be easy. The good news? You don’t have to invest a lot of time or money to get started. So first choose a goal - a mid-term one. 

What are you interested in creating? An iPhone app? An android app? A web-based app? The next Twitter? That will determine your starting point, your choice of starting languages, and what tools you need to pick up.

The path is not straight.

Keep in mind that programming, like math, depends on you learning concepts and then building on them. Programming as a process though, is not the same as programming as a language. Don’t get hung up on mastering PHP first if you really want to develop in Ruby “on Rails,” for the web. You don’t have to master HTML to start learning scripting languages for web programming, but you do need to know enough to build a webpage using those languages. Learn enough of the current toolset to start being proficient, and advance to the next one. Once you’ve learned the basics of a couple languages, the rest is mostly a matter of syntax and available functions. It’s how you learn to think about the problem, and break it down, that’s important.

For the web

For web-based applications, the baseline is to learn HTML. No, its not a programming language, but it IS a structured language that defines what kind of information you’re putting on the page, and where. It is used in combination with CSS: stylesheets that allow you to separately define how that information looks once it is on the screen. Since any programming for the web will involve manipulating and modifying HTML and CSS, you need to know these. HTML is also a subset of XML - which is used as a document and information storage format by many programs.

The next layer to add once you’ve become comfortable with basic tags would likely be Javascript as it’s easily integrated into any web page and required to handle any interaction after the page is loaded. 

For more advanced programming - the next step is learning how to change and construct what HTML, Javascript, etc. web server delivers to the user dynamically. PHP is a common language that is easily integrated into web pages and allows you to do this, while MySQL is a database language so you can store and recover data for later use. From there, you can pick up Java, Perl, Python, Ruby, or even C for more advanced programming.

Mobile and Desktop

Unless you’re building low-level driver code, this will eventually require you to learn a set of daunting “API’s” that allow you to open windows and otherwise graphically manipulate data. For Macs and iPhones, you need to learn Objective-C. For Windows, check other people’s recommendations, but you’ll end up learning some variant of C, C++, or C# and the .net libraries. For Android based devices, and a number of other applications, you will need to learn Java. 

Again, the real trick is to learn to think like a programmer. All else is syntax, and understanding what will happen when you type out any given command. The choice of languages here determines what types of features are already wrapped up for you, which ones you have to program yourself, and how quickly and flexibly you can write down the concept you’re thinking. 

There are arguments for starting in Java. If you’re planning on making a living outside of the Mac or Windows world, you definitely need to learn it. That said, I personally prefer Python as a starting point. It comes pre-loaded on Macs, it’s easily available for Windows, it has a very clean syntax, and it easily bridges the gap from simpler, “procedural” languages to learning object oriented ones. While relatively slow performance wise, it has been repeatedly used by experienced programmers to prototype out software for later optimization, or even tackle projects they never would have dreamed of in high-performance languages like “C”.

Either way, there are plenty of good sources of information and starting tutorials. Once you get your feet wet, you can start progressing into more complex languages that require more attention to details like memory allocation, but give you better performance in the tradeoff, or start learning the basics of creating Mac, Windows, Android, or iPhone apps.