Crafty, Crafty Geek

So far, most of what I’ve blogged about is geeky stuff. This time, I’m blogging about a reawakened passion of mine.

A million years ago when I was a little kid (this is how my kids start all of their stories, so I’m borrowing the line), my Mom taught me how to crochet. I remember it seemed to take forever to get the hang of it. But once I did, I wanted more. I made some little baby toys, a block and a ball, for my cousin when he was born. I dropped it for a long time, then picked it back up in my early adulthood. Making afghans for myself and others got me through some really miserable years. I made a Christmas afghan for myself and one for my parents and these are still yuletide favorites in both houses. I plan to make more of them because the pattern is really lovely.

I’ve made a few regular afghans for my home, one of which Ray quickly dubbed his Blankie. When I was pregnant with Timmy, I made a set of stuffed Winnie-the-Pooh characters. The kids love these and play with them often.

With two babies, cramming in working hours, and being a housewife, my hobby got dropped by the wayside. I reluctantly packed all of my craft books, yarn, and everything last spring when we were preparing the house for showings.

This fall, however, the mania hit me and I just had to make something. I decided on a new blankie for Ray. I picked a super easy pattern, but the problem was it was too easy and boring. If not for the lovely colors of the yarn, I doubt I would have stuck with it.

Ray's new blankie

When I found out that Mom was going to have to start chemo again, and that she was having major surgery, I really wanted to make something that would be a comfort for her. Enter this lovely afghan.

Mom's Comfort Blankie

This pattern was so much more interesting, even though I hate granny squares. It went quite quickly, as I took it with me everywhere and worked on it whenever Ray was driving. I got a lot done at the hospital on the day she had her surgery, too. Kellie and I were finally able to take it over to her a week ago and she loves it.

Next up? KNITTING! I have started a few projects, but never finished anything. Mom didn’t teach me how to knit and I don’t remember ever seeing her with a pair of needles, although I did inherit a ton of them from her. I knew I had to pick an interesting pattern if I wanted to keep with it and I thought a strip afghan would be nice because it is portable. I found a bunch of mill ends bags at Pat Catan’s with this lovely yellow yarn that has very subtle shading in it. I’m convinced it is Homespun. This is the yarn I used on Ray’s blankie and, although a bit of a pain to work with, it ends up being warm and soft.

This blankie is for my mother-in-law, who constantly admires the work I do. I know she’d love something hand-made of her own. But, sshhhhhh! It is a surprise!

Mom K's Blankie

The pattern I’ve chosen (after lots of searching on Ravelry) is a very cool aran afghan with lots of braids and cables, and even vines! Can’t get bored with this! I am starting with the center panel because I’m not sure I actually like the end ones. I’m gonna wing it and probably make up my own strips for the sides. I’m actually very proud of myself because I’ve created charts for the patterns in the center panel. It took me a while to learn how to make them, but these are infinitely easier to follow than the written instructions. I don’t lose my place nearly as often.

Cable Chart

I wanted to protect my charts as I haul them here and there, so I bought some sheet protectors. I’m keeping my place using an old roll of painter’s tape. I’ve used sticky notes in the past, but they loose their stickiness really quickly and they don’t come in a wide form. The tape is working perfectly.

Once Mom K’s blanket is finished, I’ve queued up a Spiderman blankie for Timmy and a Princess one for Kellie. I also had an idea to knit up a bunch of interesting scarf patterns and then sew them together into an afghan. Hopefully, this mania won’t end until I’m finished with all of these!

Anyway, if you are crafty and you are on Ravelry, friend me up. I’d love to see what everyone else is making.

Git: Using a branch to hold unfinished work

I keep my company’s “static” web pages in version control. This has saved my bacon more than once. We used to use CVS, but we’ve recently switched to Git, which has worked out nicely so far. We were very happy with CVS, but several tandem projects had resulted in lots of branching and tracking all of those merge points was getting to be a big headache. Git tracks the merge points for you, basically.

I’ve been working on a humungous update to the corporate site which involves moving from static hand-coded HTML files to hand-coded php files. I’m only doing very simple stuff in php, but it is necessary to keep our files DRY. Basically, this has meant that every file on the site has been or will be touched and updated.

In the middle of this update we have a conference coming up. This conference gets its own section of the web site and its own pages. I needed to drop the update and start working on the conference section, but I had unfinished work in another section of the site that I didn’t want to commit yet. What to do?

Before you say it, yeah I know I could have simply committed everything. Commit early and commit often and all that. But this was work that was truly unfinished…like smack-dab in the middle of editing. So I was really uncomfortable with committing, even to my local repository. Don’t judge.

I decided that since branches are so cheap in Git, I’d use one to solve my problem. I created a new branch and checked it out:

git checkout -b unfinished_work

Then I did a mass commit of all modified files to this new branch. I didn’t comment the work, except to say that I was putting the changes in there because they were unfinished.

I went about my business on the new project on another new branch and, when it was ready, I merged that into the master branch and deleted it. So far, so good.

Now, how to get my unfinished files back? It was actually really easy. First, I merged the changes from that unfinished_work branch, but the important thing was to not commit them.

git merge --no-commit unfinished_work

Sweet! I have the unfinished work back on my master branch ready to move forward. The only problem (and this was nit-picky, I admit) was that the modifications from the unfinished_work branch were staged for commit. I didn’t want to accidentally commit, so I went through and un-staged the files. There were only a few, so it wasn’t a big deal, but if there were a lot I’ll bet there’s away to do a mass operation.

git reset HEAD <filename>

One of the features I really love about Git is that it is incredibly helpful. When you do a git status it tells you right there how to un-stage changes.

So, now I’m left back on the master branch with the same unfinished modifications I had before I dropped them to work on the conference section. Yay, Git!

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.