Skip to content

Archive for

7
Sep

Duck Creek Village

A few weeks ago, our family spent a few days at a cabin in Duck Creek Village, UT with Cheryl’s family. We rode ATVs, visited some cool cliffs, hiked around several lakes and rented a boat somewhat spontaneously. And we took advantage of the gathering to take family pictures.

Dan and Cheryl

I think the kids really liked riding the ATVs. It was scary for them at fist as they learned. By the end, the level of fear (and caution) had dropped noticeably. The boys both liked the motorboat too. They each took a turn steering.

Steering the Motorboat

Of course the best thing was playing with their cousins, aunts, uncles and grandparents while exploring the forest, discovering stuff and having new experiences.

Twins

Island in a Lake

Cousins on a Log

I Found a Rolly Polly

Getting Her Feet Wet

See more pictures in our picture gallery.

27
Aug

How to Create an Alias Programmatically

First, a disclaimer. Apple will warn you not to do this. The only supported way of creating an alias is to use the Finder. If you must do it programmatically, you will be told to use AppleScript. But if AppleScript won’t work for you, and a simple Cocoa method is what you want, read on.

Mozy’s Mac client doesn’t create aliases, but our customers do. We want to make sure our software backs them up correctly. So we added some unit tests to our build process that create aliases and check to see that Mozy handles them correctly.

We first used AppleScript, but ran quickly into two issues:

  1. Our build server runs as the root user, which doesn’t have a UI context. AppleScript doesn’t work without a UI context.

  2. Even running as a normal user, AppleScript cannot access the system temporary files location (/tmp) which is where we wanted to create our aliases.

That’s when the fun began.

I spent quite a bit of time failing to find the right bit of magic to create an alias that functioned properly in Finder. It turns out that an alias is a data structure inside another data structure stored in the resource fork of an empty file. Those structures need to have the correct record types for everything to work.

Having gone to the trouble of figuring this out, I thought I’d share. This code creates an alias for a folder, but it should serve as a good template if you need to create another type.

- (void)makeAliasToFolder:(NSString *)destFolder inFolder:(NSString *)parentFolder withName:(NSString *)name
{
    // Create a resource file for the alias.
    FSRef parentRef;
    CFURLGetFSRef((CFURLRef)[NSURL fileURLWithPath:parentFolder], &parentRef);
    HFSUniStr255 aliasName;
    FSGetHFSUniStrFromString((CFStringRef)name, &aliasName);
    FSRef aliasRef;
    FSCreateResFile(&parentRef, aliasName.length, aliasName.unicode, 0, NULL, &aliasRef, NULL);

    // Construct alias data to write to resource fork.
    FSRef targetRef;
    CFURLGetFSRef((CFURLRef)[NSURL fileURLWithPath:destFolder], &targetRef);
    AliasHandle aliasHandle = NULL;
    FSNewAlias(NULL, &targetRef, &aliasHandle);

    // Add the alias data to the resource fork and close it.
    ResFileRefNum fileReference = FSOpenResFile(&aliasRef, fsRdWrPerm);
    UseResFile(fileReference);
    AddResource((Handle)aliasHandle, 'alis', 0, NULL);
    CloseResFile(fileReference);

    // Update finder info.
    FSCatalogInfo catalogInfo;
    FSGetCatalogInfo(&aliasRef, kFSCatInfoFinderInfo, &catalogInfo, NULL, NULL, NULL);
    FileInfo *theFileInfo = (FileInfo*)(&catalogInfo.finderInfo);
    theFileInfo->finderFlags |= kIsAlias; // Set the alias bit.
    theFileInfo->finderFlags &= ~kHasBeenInited; // Clear the inited bit to tell Finder to recheck the file.
    theFileInfo->fileType = kContainerFolderAliasType;
    FSSetCatalogInfo(&aliasRef, kFSCatInfoFinderInfo, &catalogInfo);
}

I consider this code to be in the public domain. Please feel free to copy and paste. And let me know if you find any problems or have suggestions.

If you need a complete solution, Nathan Day wrote a nice set of classes called NDAlias. We didn’t want to import 9 classes for just a handful of unit tests.

I later found some of Apple’s sample code from 1999 demonstrating a similar approach. I think our Objective-C example is much easier to use.

25
Aug

WordPress After 8 Months

Early this year, I switched from Movable Type to WordPress for my blog. I’ve been very happy with that decision. So I thought I’d give an update on how I feel after using WordPress for eight months.

First, I should say that the speed issue hasn’t bothered me like I thought it would. I haven’t added caching, but may still do so at some point. Let me know if things feel slow.

Second, I’ve changed the which plugins I use, so let me give you the current list.

  1. NEWTwitter Friendly Links let’s me use my own domain for short URLs instead of Bit.ly or TinyURL.com
  2. NEWRF Twitter Post will update Twitter when I write a new post. I’m testing this one and hoping the next version adds support for Twitter Friendly Links
  3. NEWSexyBookmarks makes it easy for readers to share things they find interesting
  4. Aksimet filters comments from spammers of which there are many
  5. All in One Adsense and YPN handles the ads on my site though I have them turned off now
  6. FD Feedburner Plugin lets me use FeedBurner for my RSS feeds
  7. Google Analyticator adds the Google Analytics tracking code
  8. KB Robots.txt allows me to add my sitemap to my robots.txt file
  9. Markdown allows me to write using Markdown syntax
  10. Recently Popular highlights what posts people find interesting
  11. Simple Google Sitemap automatically creates a sitemap for me
  12. Twitter lets you know exactly what I’m up to at all times
  13. WP-DB-Backup makes it easy to back up the content on my site
  14. Yet Another Related Posts Plugin suggests additional posts that relate to the one you’re reading

Since January, I’ve stopped using Automatic Timezone because putting WordPress 2.8 and PHP 5 together makes the daylight savings time magic work.

Third, I was able to find several WordPress themes that I liked and get them installed fairly easily. And switching between them is simple.

Overall, I’m still very happy.

2009-12-05: I spent some time optimizing WordPress which you can read about here.

3
Aug

Changes in Mozy for Mac 1.4

The Home and Pro versions of Mozy for Mac 1.4 are out. We’ve been working on this since January, and it feels great to finally get it out the door.

The major change in this release is the new file scanner. We’ve greatly improved how Mozy looks for and keeps track of files that need to be backed up. The release has been enabled this afternoon for new customers and existing customers which manually upgrade using the links above. Auto-update will be turned on for all existing Home and Pro customers shortly.

Since we don’t have an official place for showing our Home users a list of what’s changed, I’m including the full list here.

Enhancements

  • Improved overall performance and stability for file selections and backups
  • Added menu option to automate the collection of log files
  • Moved Preferences to global System Preferences
  • Improved sorting of the Files and Folders Configuration window
  • Improved the behavior of saving and canceling in the Configuration window
  • Added a new icon to indicate partially backed-up folders in the Configuration window
  • Added menu item to start a backup from the Configuration window
  • Added the ability to create backup sets to exclude files
  • Added the ability to sort by column in the Backup Sets window
  • Updated online guides
  • Added menu item to send product feedback or suggestions
  • Improved appearance of menu bar icons and other graphics
  • Improved speed of file preparation
  • Added the ability to use the escape (ESC) key to close the Configuration window

Bug Fixes

  • Fixed rare case of file changes not included in backup
  • Fixed several “database is locked” and “database disk image is malformed” errors
  • Fixed memory leaks
  • Increased the accuracy of the bandwidth throttle
  • Fixed creation date issue for restored files
  • Fixed problem with excluded folders being backed up
  • Fixed an issue limiting the amount of custom backup sets
  • Fixed an issue when the user restarts the computer before completing installation
  • Removed redundant column in the Backup Sets window
  • Fixed an issue restoring a file with a resource fork
  • Fixed an issue restoring a file with identical copies being backed up
  • Fixed the occasional “ClientError15” error caused by stopping a backup in progress
  • Fixed “no files selected for backup” message from mistakenly being displayed in the Configuration window
  • Fixed some Snow Leopard compatibility issues

UPDATE: We’ve got an official announcement on Mozy’s blog. I updated the links to point to the 1.4.3 release, which has fixes for OS X 10.4 and Time Capsule.

2
Jul

Mozy Coupon for July

Mozy is offering 10% off new annual and bi-annual subscriptions for MozyHome Unlimited and MozyPro this month. Just type JULY into the referral box when you sign up.

If you’re interested in Mozy’s free 2GB of online backup, just sign up for a MozyHome Free account. I’d recommend using someone’s referral code as you’ll both get an extra 256MB of space. If you can’t find a referral code online, you can use mine which is 56EEVL. But Mozy employees get free accounts so try to hook someone else up if possible.

And if you’re a Mac user interested in helping us beta test the Mozy for Mac 1.4 release, please drop me a line at dan at mozy dot com.

20
Jun

Review: AppleTV

I’ve been using an TV (also known as AppleTV for those who lack Shift-Option-K goodness) for about a year now. It’s a great little device with a couple of really annoying flaws.

The Good

I like that It’s small, about an inch tall and eight inches on each side. It has an HDMI video output, and both optical and analog sound outputs. It can play almost anything in my iTunes library.

The best thing is probably the screensaver where pictures from your iPhoto library float up the screen. We hardly ever look through our “digital albums” on the computer, and it’s nice to have an easy way to see all those pictures.

The Bad

In order to play properly on the TV, movies have to be below a certain quality. iTunes will play high-quality movies that the TV ignores. The TV handles most mainstream movie formats, including H.264. But it is not upgradable unless you’re willing to tinker a bit. I’d like to see support for Netflix, Hulu and others built-in.

The parental controls option prevents purchases, but does not hide anything nor prevent previews. I assume the only reason to include that feature is for kids, so why not just hide filtered content completely? If I want to watch something else, I’d be happy to put in my passcode to see the filtered content. Since the filtered content is not hidden, the whole feature seems nearly useless for me.

The Ugly

The TV never sleeps. Which means it always seems hot enough to roast an egg. I would really like an option to “sleep after so many minutes.” Or at least have it turn off the hard drive. It’s hard on the drive and wastes energy. Unlike the TV, I do sleep at night.

The worst thing is how slow the navigation feels on occasion. Even with the most recent software update, there is way too much stuttering and jumping. I suspect this occurs because I am streaming content from my iTunes library on another computer.

I could avoid streaming if the hard drive in the device was bigger. Or if it was semi-easy to put in a new one. Or if it supported external drives connected via the USB port. It doesn’t happen all the time, but waiting even 3 seconds for it to respond is really annoying.

Conclusion

Overall, I like my TV. It’s really easy to setup, and gives me a simple way to watch or listen to media stored on my computer. A Mac mini would work too, but is more expensive. It also lacks an HDMI output. And I worry that my kids would be confused if it ever dropped out of Front Row, the TV-like software that comes with Macs.

On the other hand, a mini is a computer which makes it easy to customize. It would allow me to watch streamed movies and rented DVDs (the TV lacks a DVD player). I wonder why Apple doesn’t allow the TV to play DVDs that are in another computer sort of like they do with the Macbook Air.

If I had my purchase to do over again, I’d certainly get an TV or a mini. Just not sure which one. What I’d like is a mini with an HDMI port.

14
Jun

Pictures: Winter 2009

I’ve uploaded some new pictures to our gallery. The first album is from the trip my wife and I took to Park City this winter. Thanks for babysitting, Mom and Dad.

Park City 2008

The next album is one of our sledding trips to the nearby elementary school. Grandpa came with us on this trip, and I think he ended up doing most of the work. :)

Sledding 2008

Next is our trip to the nearby dinosaur museum at Thanksgiving Point. They claim it’s the largest dinosaur museum in the world. I believe it.

Dinosaur Museum 2009

Last is one from my son’s T-ball game. He’s having a great time, though he still prefers jumping on the trampoline over playing catch.

Dinosaur Museum 2009

25
May

Mac vs PC

My aunt is in the market for a new computer and asked me for a recommendation. She said she was really tempted by the new Macs and wanted to know why I liked them. Since I wrote out my reasons for her, I thought I’d share them here too.

Stability

The thing I like most is that I no longer think about the operating system. Crashes, viruses, security software, instability caused by service packs — all have pretty much gone away. I just don’t worry about that stuff anymore.

I used to look forward to reinstalling Windows on my computer about every six months. I loved the feeling of having a fast computer again. Now I can’t imagine what I was thinking. With Mac OS X, I hardly even think about the OS anymore.

Included Software

The second thing is that Macs come with lots of included software. There is software for managing pictures, editing home movies, making DVDs, recording and mixing songs, publishing web pages, chatting, email, playing music, calendaring, local backup and more.

Some of that comes with Windows, though I don’t find it as easy to use. All of it is available with Linux, but getting it all set up is not for the faint of heart. With a Mac, it’s all there ready for immediate use.

Plug and Play

Another thing I like is that, if you limit yourself to their supported hardware, everything works without any setup or drivers required. When I plug in my camera, iPhoto launches and takes me to the import screen. When I plug in a new printer, it just shows up and can be used immediately. That sort of thing.

The list of supported hardware is pretty long. I just check the list of cameras, video cameras and printers before buying stuff. Given how nice things are when using the supported hardware, that’s one concession I’m okay with.

Windows

One of the best thing for Mac newcomers is that if you decide you don’t like OS X, you can just install Windows, which runs perfectly. I reboot into Windows to play computer games a few times a month but am happy to go back to OS X when I’m done.

Momentum

Over the last two years my company has become predominantly Mac. Most people still use Windows too, either virtually or by rebooting when necessary. Even a couple of our Windows programmers use Macs.

Of course, Apple has their own reasons you should buy a Mac. And I highly recommend watching Apple’s ads, which are hilarious. My favorites are Elimination, Bean Counter and Out of the Box.

I’ve been using Macs for five and a half years now and have never found myself looking back.

2
May

Boot Camp and Snow Leopard at the Same Time

I use Boot Camp to play computer games for Windows on my Mac. Recently, I decided to try out the new version of OS X, called Snow Leopard. It hasn’t been released yet, as it’s still under development, so I wanted to keep my existing installation. I had hoped to find a way to get all three systems (OS X 10.5, OS X 10.6, and Windows) installed at the same time. However, Boot Camp requires there be two and only two partitions on the disk. Initially, it looked like I had to choose between Boot Camp and Snow Leopard.

Then I ran across an application called Winclone that will backup and restore Boot Camp partitions. Since OS X supports resizing disk partitions without losing data (non-destructive partitioning), I came up with a solution that allows me to switch between Boot Camp and Snow Leopard fairly easily.

I use the following procedures to switch from Boot Camp to Snow Leopard and back again without losing data on my Boot Camp partition or my normal installation. If needed, I suspect Disk Utility could be used to backup and restore a Snow Leopard partition. For now, I’ll leave that as a homework assignment. I don’t mind a fresh install of Snow Leopard each time.

To Switch from Boot Camp to Snow Leopard

  1. Open Winclone
  2. Choose the Boot Camp partition as source
  3. Click the Image button
  4. Close Winclone
  5. Open Disk Utility
  6. Delete the existing Boot Camp partition
  7. Add an 8GB partition for the Snow Leopard installer (skip this step if you burn a DVD instead)
  8. Add a partition for Snow Leopard and name it something you’ll remember
  9. Use Disk Utility to restore the Snow Leopard installer disk image to the 8GB partition
  10. Reboot and hold down the Option key during the boot process
  11. Select the “Mac OS X Install DVD” partition
  12. Go through the Snow Leopard install process
  13. Install on the larger partition created earlier (be careful NOT to erase your current installation)
  14. Rebooting at the end of the installation will take you into Snow Leopard
  15. If desired, change your default partition in System Preferences under Startup Disk

To Switch from Snow Leopard to Boot Camp

  1. Open Disk Utility
  2. Delete the Snow Leopard partitions
  3. Change the remaining partition (your normal system) so that it fills the whole disk
  4. Close Disk Utility
  5. Open the Boot Camp Assistant
  6. Choose how big you want to make your Boot Camp partition (pick the same size each time)
  7. Click the Partition button
  8. Choose the option to Quit and Install Later
  9. Open Winclone
  10. Select the Restore tab
  11. Drag or select your Boot Camp backup
  12. The destination partition should be called BOOTCAMP (be careful NOT to erase your current installation)
  13. Click the Calculate button to verify that your backup size matches your partition size
  14. Click the Restore button
  15. Close Winclone
  16. If desired, reboot into Windows normally

I’ve gone back and forth now several times without any problems. It takes about 10 minutes to backup or restore a Boot Camp partition, but I don’t mind as I only switch a few times each month.

I do, however, highly recommend backing up your computer before trying this as it is easy to erase the wrong partition. Mozy (use code DANCHERYL for 15% off), Time Machine or SuperDuper! will all work. Because I’m paranoid, I use all three. :)

3
Apr

The Best Bread Recipe

A while back, Cheryl got the opportunity to do some taste testing at a neighbor’s house (thanks Marianne) and sampled some incredibly tasty bread that was made from scratch.

After making it once, Cheryl has had to endure me pestering her to make as often as she can. It’s probably the best bread I’ve ever tasted, especially with home-ground wheat flour.

My kids love it too. The bread rarely lasts an hour after it comes out of the oven. I have to beg them over the phone to save me some.

The recipe recommends a Kitchenaid or Bosch mixer, which I can understand as those are both pretty high-end mixers. We have a Kitchenaid. The real problem, for me at least, is that our wheat grinder is really messy and doesn’t grind much more than 1 cup at a time. I think we’re going to have to get a new grinder. :)

Whole Wheat Bread

  • 2 cups hot water
  • 3 Tbsp. oil
  • 3 Tbsp. honey
  • 7 cups whole wheat flour (approximately)
  • ¼ cup vital gluten flour
  • 1 Tbsp. dough enhancer
  • 1 rounded Tbsp. yeast
  • 2 scant tsp. salt

Mix water, oil, honey, salt and half of the flour. Then add yeast, gluten, and dough enhancer. Turn on mixer and mix; add ½ to 1 cup of flour at a time until dough starts to pull away from the bowl (note: you may not use all of the remaining flour). Knead in bowl for 5 minutes with bread dough hook. Grease pans and shape bread and set into the pans. Put bread into oven, turn on the oven, count to 10 and then turn off. Let bread rise 15 min. Turn the oven back on to 350 degrees and bake for 30 minutes. Take bread out and let sit for a few minutes, then tip out and let cool on a rack.