Getting Comfortable with Spaces in Leopard

Last night Bridget and I got to talking about some of our favorite things on OS X. The conversation came around to Spaces, as I think it usually does when you are talking about Leopard. Spaces and I have had an on-and-off relationship ever since the first developer’s seed hit my hard drive. I’m very anal and the idea of organizing the vast number of windows I have open appealed to me.

When I first gave Spaces a go I was really excited. I had briefly tried a few free apps, but they had some bugs and it wasn’t feeling right. Spaces was quick, smooth, and cool. But I think I approached it in the wrong way. I started putting apps in their own space so that I wouldn’t be distracted. Pretty soon, I found myself flying around trying to figure out where the hell I put that text editor. That was when I threw up my hands and gave up.

It is a year or so later and I’ve been reading The Productive Programmer, which extols the virtues of virtual desktops. I wasn’t totally convinced, but I gave it another go. This time, though, I thought about how I wanted to use Spaces before I actually set it up. So far, it is working out pretty well. There are a few more features I’d like to see in Spaces to help round things out, but I think I’ll stick with it for a bit.

The trick seems to be to really think about how you work and figure out what tasks belong with others. Some things—like checking e-mail, instant messaging, and Twitter—naturally go together. I’ve got a “space” designated for communication and it includes Mail.app for work e-mail, Gmail (a Fluid app) for personal e-mail, Syrinx, and NetNewsWire. Growl lets me know, briefly, what’s coming in so I can either ignore it or respond to it. To make that process even easier, I’ve added all of my work contacts to Address Book with photos. Now, when Growl pops up to tell me there’s an e-mail, I know at a glance if the message is from my boss or from a co-worker who only forwards jokes.

Coding is something that I much prefer to isolate from everything else. So, TextMate gets its own space. The only other things allowed in that space are a Fluid app that I use to browse internal documentation, AppKiDo, and Preview with PDF documentation.

Testing gets a space as well. There I have a saved configuration of Terminal windows that I use to upload, compile, and watch logs. I also have Firefox here because I’m testing web applications.

The testing space is located directly below the coding space, so it is really simple to bounce between the two. I thought moving back and forth would bother me, but it really doesn’t. These are actually two different states of mind for me, so having a visual change is good.

Another space is designated for research. This is where I keep EagleFiler and Safari.

I have six spaces configured altogether. One of the last two spaces has Curio with brainstorming and test scripts (really more checklists) and the last one is just a utility one. Usually, I put Photoshop and InDesign there when I’m working on graphics.

I highly recommend using the Preference Pane for Spaces and specifically assigning applications to individual spaces. I also highly recommend that you make some applications available in all of the spaces. I have both Finder and Adium in all spaces. I originally put Adium in the communications space, but I found it annoying to have to “carry” a chat window with me when I switched around.

You should also learn the keyboard shortcuts. You can use the defaults or change them, but whatever you do use them. Using that little menu-bar thing to switch is just not productive.

So far, this is all working out pretty well. I have noticed some applications don’t play too well with Spaces and that can get annoying. I don’t know if that is a problem with the apps or with Spaces, though. But, on the whole it is working well.

There are two things that I am really, really hoping for in Snow Leopard. First, the ability to name spaces. I’d like to see those names pop up briefly as I’m switching between spaces, and when I view all of my spaces. I’d also like to be able to set different desktop backgrounds for different spaces. Even if it is just different colors, so I know coding is blue and communications is green, etc.

One feature I really dislike and wish I could turn off is the diagonal navigation. If I’m in the top left-hand space and I accidentally hit the ctrl-left arrow, it will swoosh me to the bottom, right-hand space. This is confusing and annoying. I’d much prefer that it just didn’t switch at all, like it does if you are on the top row and you hit ctrl-up arrow.

Spaces and I are still working on our relationship, but this time around things seem to be going well.

And now for something completely different…

This post is purely mommy, so if you aren’t interested, please move on. Something geeky will come along soon.

Okay. If you’re still reading this, you are a Mommy or you are actually interested in my mommyish side at least. I read lots of great mommy blogs and many of them inspire me. I comment sometimes, but mostly, I’m a lurker. Imagine my complete and utter shock when I got this from Christy at Paul Newman Shirt Days:

I Love Your Blog award

Dang. I’m humbled. I hardly ever post and when I do it is usually something geeky. But this is a great chance for me to give some blog-love to the great Mommy-ish blogs that I love to read as often as I can. There are rules to this thing and I need to nominate seven of my own favorites. Oh, joy!!

So, here they are:

Christy • Paul Newman Shirt Days

Right back at ya, Babe! Christy is creative and sweet and shy, but so very brave. I can identify with a lot of what she posts and I wish I had half the nerve she has. She’s real and I love that about her. I imagine she writes exactly the way she talks, which makes her posts incredibly easy to read.

Fern • Candle at Both Ends

Fern is eloquent, brave, intelligent, funny, sincere, truthful, and everything I could ever aspire to be as a blogger. She writes the posts I wish I were fearless enough to write, because I’ve identified with just about everything there. She’s going through some tough times right now, but she keeps her sense of humor and even turns her trials into something good for others. Visit her blog and read the articles she’s written at Examiner.com.

Melissa • Chasing Cheerios

Melissa’s blog is so full of fun activities! I’ve already gotten some great projects from there and pointers to other great projects. I don’t have the patience or the expertise to home-school my babies, but I am pretty crafty and having educational projects to do with the kids is so much fun. We all look forward to them. Bonus: the adorable pictures she posts of her own daughter doing each project.

Mrs. Chicken • Chicken and Cheese

Mrs. Chicken is another great writer. She, too, is brave and real. I identify with almost every post she writes. She’s just had her second child and through her writing I relive those stressful transition months where the oldest clamors for attention over the cries of a newborn. Chin up, Mrs. Chicken. It gets better!

Jodie • A Mom and Her Camera

Jodie takes simply gorgeous photos. I love seeing them and I wish I lived closer to her so I could hire her for a family portrait. I especially love the newborn pics. She’s inspiring me to pull the camera out much more and to capture every moment I can because they just go by so freaking quickly. She’s also so much fun to read.

Erin • Mama Said No!

I found Erin’s blog when she did a guest post for Mrs. Chicken. She’s so fun and her son is the same age as mine, so there are many times that I feel her pain. She writes just the way I imagine she talks and she has such an incredible sense of humor.

Allie • No Time For Flash Cards

This is another great site for projects to do with the kiddies. We’ve already done some and I’ve bookmarked others for the future. Allie was a preschool teacher and I love how she gives ideas for working with different ages for each project. She provides step-by-step instructions illustrated with pics of her adorable son. Great resource!

So, there they are! These are my favorite mommy-ish blogs. Go read, laugh, cry, and enjoy them as much as I have.

My App Has Been Named!

I know you thought you’d never hear from me about this again, but I have finally Named My App. Thanks again to all for the great suggestions. They were so much better than I could have come up with.

And the winner is…

Moviesaurus Rex from Brendan Cullen.

I really liked every suggestion, but as soon as I saw this one I pictured a fat purple dinosaur with big googly eyes tossing DVDs down his gullet with abandon.

Thanks, Brendan! You have won…absolutely nothing! Well, not true. Your idea of a name will go on, your name will forever appear in the credits for the application, and you will have my eternal gratitude. Sorry I can’t afford a real prize.

Now, don’t anyone expect this thing to show up anytime soon. My husband (for some reason) insists that I get paid work done before I work on my personal project. Hmph. Need I lament again about how hard it is to fit my job (well, the one I actually get dough for doing) done?

BUT, that doesn’t mean that this will sit around forever. And I really doubt anyone else will have much interest in it anyway. I’d actually be surprised if there is anyone even reading this far. If you are, here are the features I plan to include.

  • Track movie collection (DVDs, VHS, digital downloads for when I get an iPod that will handle video)
  • Print filtered/unfiltered shopping list
  • Print filtered/unfiltered wish lists
  • Track movies I want to see
  • Track movie release dates (iCal/Google Calendar integration?)
  • UPC/ISBN entry of inventory (lookup through Amazon?)
  • AIR app
  • E-mail reminders (movie release dates)
  • Track movies loaned to people (Address Book/Gmail contact integration?)
  • Track purchase price and provide total investment reports
  • Provide net worth based on median price on Half.com and Amazon Marketplace
  • Updates on wish list items available at Amazon, eBay, and/or Half.com
  • Wish list import from Amazon and Half.com
  • Multiple users
  • Pretty pie charts by genre, price, format (useless eye candy)
  • Search by title, format, keyword, actor
  • Personal ratings and reviews/comments
  • Critic information from Rotten Tomato
  • Ratings from Amazon
  • Images (hosted on Flickr or picasa)
  • Suggest movies to friends or warn them of duds
  • Look up title at library and place a hold
  • Share wish lists with others to provide gift suggestions
  • Series movies linked together somehow
  • Similar movie suggestions

This is not a definite list by any means; just the result of brainstorming and a lot of “Gee, I wish there was an app that would do that” and “Wow! I could use the API to do this” kind of things. As you can see, this is quickly growing bigger than simply tracking what DVDs I have. I’m hoping to track a lot of things. For me it will be really helpful to be able to take a list of movies that I want to see with me to the video store, or a list of movies I have on VHS and I want to get on DVD to Half Price Books. I think there are lots of opportunities here to integrate with other applications and services out there, too. I can’t wait to get started.

Accessing VPN from Parallels

I ran into a rather annoying problem with my virtual PCs tonight. I am trying to test a web application running on my staging box in the office. I’m connected to the corporate network via VPN and using the dev box’s private URL. This all works great, until I tried to get there from PC in Parallels.

When I was running my own DNS server, I didn’t have this problem, because I just copied the corporate domain into mine and served as a secondary provider. However, I got tired of updating it manually and started using OpenDNS (which is great, BTW). Now when I fire up the craptastic IE 6 and type in the dev box’s URL, it goes right to OpenDNS’s “not loading” error page. Damn.

I had nightmarish visions of messing with registry entries to wrangle the DNS server order into something that would work. Or rebooting my MacBook Pro repeatedly until the PC’s NIC got a connection (anyone familiar with that fun little bug?). However, the fix turned out to be exceedingly simple: edit the hosts file on the PC. I added an entry for the dev box and voila! I can now run tests in the favorite of all favorite browsers (known in our office as Stupid IE).

Where has my focus gone?

Just a short post because I have an incredibly busy day ahead of me. But, I’d like to know where my focus has gone. Does somebody have it? Can they please return it? I’ve looked everywhere: under the bed, in the couch cushions, all the closets, in the garage. It’s nowhere and I desperately need it back.

I remember being able to get into the zone in a nice quiet office. I remember coding away, finishing a module and looking up to find it was time to go home.

* sigh *

Now I’m lucky to get four hours strung together to just work. Even then, there are constant interruptions. Except at one in the morning. Then there are no interruptions. Heh.

I’m getting burned out working this way. An hour here, an hour there. Trying to get back into what I was doing and figure out where I left off. It’s hard, folks. Anyone who tells you that working from home is easy probably also has a bridge to sell you.

* sigh *

And the thing is, even when I have a Sunday with Ray home and I’m holed up in my bedroom office, I still have a hard time focusing. It seems that with the constant interruptions and scattered working hours I have lost my ability to focus. I can’t seem to get to that point where I’m thinking about the code and only the code, and progress feels incredibly slow.

So, please keep an eye out for me. My focus has to be around somewhere. If you see it, can you please let me know? I’ll keep looking.

Name that App!

In my day job, I have the extreme pleasure of coding in Objective-C. Eventually, I will be tasked with porting our web applications over to a language and framework stack that is a bit more web-application-friendly. Naturally, my first thought is Ruby.

In order to learn Ruby, I would like to start a pet project. Now, this isn’t something that I intend to publish or sell or anything like that. This is strictly a learning project for me. What is it?

I want to build a web application that will track movies. Yup, I know. Delicious Library and all that. But, remember, the purpose for me is to learn Ruby. To that end, I have a laundry list of features that I want to include. These are a mixture of features I’d love to have in an application and features that will allow me to learn new things, such as working with APIs from other sites.

The problem is that I just can’t think of a good name for it. If I’m left to my own devices, it will be called something like MediaTracker or MediaKash (get the pun? neither did anyone else). This, dear reader (I do have readers, right?), is where I need your help.

Name My Application

There are lots of really creative types out there and I’m asking you to come up with a name for my application. I have nothing for you to win, other than my sincere thanks. I can include your name in the credits somewhere so that everyone else can give you their sincere thanks as well.

Please post any suggestions you have in the comments. I will post the winner and it will be forever immortalized in my application and the domain it inhabits.

Entering Dates: Use Fewer Options, Not More

A few weeks back the CWSA held a roundtable discussion about form design and development. You were there, weren’t you?

One of the topics brought up was how to enter in dates. Date pickers can be clumsy and ugly, with a host of browser compatibility issues. Providing a blank text field is confusing for the user. Several comboboxes can work, but they get long and there’s lots of mousing involved.

Someone asked about the possibility of a field that would be able to take a value such as “yesterday” or “last monday” and get the right date. There seemed to be some general agreement that this was a great way to go. Let me tell you about my experiences with that.

NSDateFormatter

In Cocoa, we have this really cool object called NSDateFormatter. This object has the sole purpose of taking user-entered date strings and converting them into NSDate objects. It can also take an NSDate object and present a string representation in the format you choose. Cool, right? Wait, it gets better.

With the allowNaturalLanguage option, your fancy-schmancy formatter will also take strings such as “yesterday” and “last monday”, parse it out, and provide the correct date in an NSDate object! We use this functionality all the time in our GUI applications. It really does work quite well.

Since we use an antique version of WebObjects to build our web applications, we are writing them in Objective-C, which means that we have NSDateFormatter available for our date fields on our web forms.

From the beginning, NSDateFormatters have been used to allow our users to enter dates in just about any way they wanted to. We thought it was so cool that a member could type in “today” and get the correct date. It would be great not to require a specific format and allow the user to enter the dates in whatever way came naturally to them. There would be no training required, no questions about how to enter the data. Users would love it!

User Understanding

Our users are constantly confused about how to enter dates. When they ask and we reply, “You can enter the date in any format you wish” they still don’t get it.

“Do I have to use dashes?”

“Yes, you can enter them that way. Or you can just type ‘today’ and it will get the right date.”

“What, the word ‘today’?”

“Yes, or ‘last week’ or ‘next monday’. However you want to enter the date, you can.”

“Okay, so dashes will work, right?”

“Yes, dashes will work.”

I’ve had that conversation over and over, and I know a few others I work with have, too.

Caveat

I do have a caveat to this. Our site was not designed for usability. It was created, written, and designed by developers. Admittedly, the site is complex and hardly user-friendly. Date entry is certainly not the only thing that confuses our users.

Going Forward

We have a port coming up of all of our web applications. Chances are, they won’t be written in Objective-C anymore, which means no more NSDateFormatter. I will not mourn its loss.

The next iteration of our site should be much more user-friendly, as it will be designed with usability in mind. Even so, I will provide a text field with a strictly enforced format. I have learned my lesson. For our users, at least, more choices = more confusion. While parsing out normal English, providing a text field with a strict format requirement will remove all questions about how to enter data.

Take aways

For me, I have more than the concrete takeaway of a strict date-entry format. It is a huge reminder to keep focused on the users and not on what I think is really cool. I’m a geek, my users are not. My users tend to be quite computer illiterate. I see this slowly changing as our oldest members retire and new, Internet-savvy members come in, but it will be a long process.

Lesson for others? Perhaps it is just to remember that even the coolest features might not be the most user-friendly features. Yes, they are a ton of fun for us to implement and they make our fellow developers “ooh” and “aahh”, but stay focused on your users. After all, they are the reason you’re building that site in the first place.

Of Going to the Park, Making New Friends, and Being Shy

We went to the park today. I haven’t been there since last year when a group of rowdy kids decided it would be fun to push then two-year-old Timmy around on the jungle gym. That experience made me a little nervous about going back, but the kids needed to burn off some energy. They don’t like playing outside at home, but give them slides and ladders and swings and they are very happy.

When we arrived I saw no one. I breathed an inward sigh of relief. Then a tiny little boy toddled over a hill, followed closely by his mother. Soon I spotted his big sister going down the slide. I stiffened a little bit, but the woman seemed nice and her daughter was Timmy’s age, so there didn’t appear to be any threat of bullying.

Timmy and this other little girl immediately hit it off. He ran right up to her and yelled, “Hi!” She yelled an enthusiastic “Hi!” right back at him. From that moment they chased each other, raced down the slides, and told jokes to each other that only three-year-olds get. Kellie and the baby brother did their best to keep up. All four children had a great time and us Moms relaxed. Then they left and the next family came.

This time it was a lady on a cell phone and three boys. The youngest was Timmy’s age, but the older two were quite a bit bigger. This made me worry and I prepared myself for the tantrums as I dragged my kids off the playground and to the safety of home.

But these kids were awesome. You’ve never seen two older boys who were more eager to play with little kids. Each boy had a bottle of bubbles. The youngest wasn’t interested in his and ran for the swings. Of course, Timmy came running over yelling, “I want bubbles, Mommy!”

The lady was really super nice and gave the youngest child’s neglected bottle of bubbles to Timmy. He happily blew soap solution all over himself while the older boys blew magical clouds of bubbles for Kellie to run through.

Watching my children interact with other kids and make new friends so easily, I couldn’t help but remember being a kid and the absolute dread I had of strangers. Still do. Seeing other kids on the playground would have been enough to make me beg my Mom to take me back home. Painfully shy, I’ve always had a rough time making new friends. To this day, I have a terrible fear of walking into a room of new people by myself and I make my husband promise to stay by my side if I don’t know anyone. (Lucky for me, he’s the understanding type)

So seeing my kids greet these new people without any reservations or fear just makes my heart soar. I can’t help by admire the reckless abandon with which they met these strangers. Kids so much want to be like their parents someday, but maybe someday I can be like them.

Listening

“Mommy, I got a burn in my eye.” says Timmy.

“That’s right, because you jumped on me when I had hot coffee.”

“Yeah.”

“That’s why Mommy tells you not to jump on me when I have hot coffee. Do you think you’ll listen now when Mommy tells you not to do something?”

“No.”

Well, at least he’s honest. BTW: he didn’t really get burned, just a drop splashed on his face.

Everything Broke!

Last night we had a pretty nice thunderstorm. It wasn’t as bad as some of the others we’ve had, but there was some spectacular cloud-to-ground lightning. One bolt took out our utility pole. Ray went out to take a look after we lost our power and found shrapnel in the back yard and some box or other smoking and hanging from the line.

Talk about horrible user experiences! I tried to call the electric company to notify them of the lightning strike, but all I could do with the stupid IVR was report that our electricity was out. I thought maybe I’d get a chance to speak with a person after that, but it refused to let me do anything else, politely informing me that they are now aware of the problem.

So, I tried the customer service number. Same infuriating IVR! Luckily, this one has an escape hatch for “Other Services”. I listened to musak and how important my call is for about 5 minutes, then finally got a very friendly, if slightly testy, customer service rep. I explained the situation to her. She said, “We already have your report that your electricity is out. Unfortunately, I can’t tell you when someone will be out because they are extremely busy due to the storm.”

“I understand. It is just that the smoking pole in the backyard is a bit worrying.”

(getting testier now) “I have added a note to your report about that. The technicians will be aware. Is there anything else I can do for you?”

It took all I had not to answer, ”You mean you actually did something for me? When? I missed it.”

Ray and I prepared for a long, hot, sticky night. The kids actually went to sleep quite quickly and didn’t seem to mind the heavy air. There was a bit of a breeze once the rain stopped, so we opened all the windows. Ray and I played cribbage until it got dark, then I actually got to go to bed. No electricity, no work! Yee, haw!

Around one in the morning I was awakened by the sound of the electric company’s truck out front. After another twenty minutes or so, we had power! Still no A/C, though. Luckily, I am married to a pipefitter and he soon found the problem. But, since the night was wearing on and everyone was fairly comfortable, he left the fix until this morning.

So, the night wasn’t actually that bad. I got to spend some quality time with my husband and I got to bed early. What I thought was really weird was this feeling of isolation that I just couldn’t shake. It was totally irrational, but I felt like I had just entered a Stephen King novel and I was going to find that there was no one else in the world; that we were alone and would have to permanently live without electricity. I was just waiting for the water to stop! The irrationality was amplified by the fact that I live on a street of very close houses and we could hear several of our neighbors barbecuing. What was up with that?

It could have been due to the amazing quiet that settled over the house. There was no chatter from the television, no alerts from the computer, the telephone couldn’t ring, and the A/C wasn’t kicking in. My house is always a cacophony of kids and dog and TV and computer; the silence felt so alien. Today things seem so much louder.

What was too funny was the kids’ reaction. They couldn’t understand why we weren’t putting TV on or why they couldn’t turn the lights on. Every time Timmy went to the bathroom, he angrily asked, “Why isn’t the light turning on?!”

Kellie asked me to put on a movie for her. I told her I couldn’t because the electricity was out. She said, “No, in the playroom.”

Later on, Timmy stomped into the living room and announced (gesturing grandly), “We have to buy all new big TVs! These aren’t working.”

When they had to go to bed, they were quite disappointed that there would be no Mozart: “The music is broken, too?”

This morning, the first thing Timmy said when he got up was, “Mommy! There’s light! Is everything fixed now?”