You can play music on a locked Mac OS X

At some point today my Macbook Pro, running Mac OS X 10.6.8, locked my screen due to inactivity yet I was still able to control the audio via helper keys on the top row of the keyboard. That’s pretty cool. It made me think of my Android phone, and how that too offers audio controls when locked. It made me think of how designing a product requires attention to the most subtle of details.

When beginning a new project, I often start off in total ignorance at the amount of work that will ensue. I think to myself, “sashimi slices, it’ll all work out” and then I plug away at writing some code, designing some views, and seeing it all come together. At some point I find myself customizing the little pieces of the Application: the footer. Woah, seriously the footer is valuable real estate but I rarely look at it that way. Yet, in it’s tiny form it can hold some of the most important links and people naturally go there. We actually expect a footer on the pages we frequent; we expect it has worthwhile resources that we may need. And what goes into this footer is exactly what I’m talking about: subtle features.

I’ve tried to come up with a name for these features and I think I’ll stick to unoriginality and call them Core Application Functionality – CAFs.

Apple loves their CAFs and it shows. My Macbook Pro understands me. It knows that just because I’m not logged into my computer I still may need to adjust the volume. It knows that physical components of my machine, like sound, need physical controls.

Mac OS X reminds me of how CAFs can make or break an (web) application. For example, looking at user authentication we have a baseline rubric for what we need to use a service. We expect a web application to let us register, login, and logout. That’s the basics. Of course we are missing one very important feature: password reset. Unfortunately, not all web apps are created equally and some fail to provide a password reset mechanism. A missing CAF like this highlights the little attention to detail in core functionality of the Application. That’s pretty bad and what’s worse is how the user is left feeling helpless. A negative experience such as this will have the Application failing — what a silly way to break the bank!

CAF gaps happens. Trust me. As an avid user of new web applications I find myself stuck more often than I’d like. These gaps creep up on start-ups as well as medium-to-large sized companies. They just happen. And they suck. So my advice is to take a moment and ask yourself this, “does my application get me?”

Wrapping text in a jQuery jqGrid cell

I’ve been using jqGrid now for about a year and I’m relatively satisfied. I use jqGrid to prettify, ajaxify, and make more functional pre-generated reports for our customers. The first thing you might notice about the grid is that it uses Alt text to display full cell content. This is nice, for sure, but it cuts off a lot of content depending on the amount. At times I’d like to be able to display the full amount of data in a row and not have to make the width of a column overly wide! So I’m employing CSS to do the trick.

To wrap a cell’s text (non header) include this CSS after all of the jquery & jqgrid css has loaded:

.ui-jqgrid tr.jqgrow td {
    white-space: normal !important;

And to wrap a column cell’s text:

.ui-jqgrid .ui-jqgrid-htable th div {
    white-space:normal !important;

jqGrid can be customized to add classes onto elements but not the parent of elements in the table thus we’re unable to set the parent td or div element to have the correct white-space CSS property. That’s why we have to add our own CSS in, after the fact, to get the effect we want.