The Best Cable is the One You Have

In the age of smartphones with great cameras, we often hear “The best camera is the one you have with you.” I think there’s a parallel for data transfer: “The best cable is the one you have.” Or, the extended version: “The best cable is the one you have, so that you don’t have to order another from Amazon or Monoprice.” Here’s the scenario where this occurred to me.

My test machine is an iMac (24-inch, Early 2008) with a 480GB SSD, which I installed several years ago to extend its useful life. Sierra doesn’t support it. I needed to replace it before WWDC brings us macOS 10.13, when I’ll have to install Sierra and probably 10.13 on my test machine.

The replacement is a MacBook Pro (Retina, 15-inch, Late 2013). I also have Boot Camp on this machine for testing TextExpander for Windows.

In an ideal world, I would:

  1. Put the MacBook Pro into Target Disk Mode
  2. Connect the MacBook Pro to the iMac
  3. Mount empty volumes from the MacBook Pro on the iMac
  4. Copy volumes from the iMac to the MacBook Pro
  5. There is no step 5

Unfortunately, step 2 requires a Thunderbolt 2 to Firewire adapter, and I don’t have one of those. This led me to examine which, if any, adapters I did have. I found a Thunderbolt 2 to Gigabit Ethernet adapter. That was promising. If I had a crossover cable, I’d be able to connect the two machines directly. I checked briefly and realized I had permanently lent my crossover cable some years ago.

In order to connect my iMac and MacBook Pro via Ethernet, I’d need a switch. I checked my closet, and I found an old NetGear 8-Port Gigabit Ethernet Switch among Smile’s Macworld supplies (I did mention it was old, right?).

NetGear GS608 Gigabit Ethernet Switch to Connect Your Cable

My go-to cloning software, SuperDuper from Shirt Pocket doesn’t appear to support cloning to a remote volume. This led me to recall Carbon Copy Cloner and give it a fresh look.

Carbon Copy Cloner has come a LONG way from the last time I used it many years ago. Hats off to Bombich Software for a throughly evolved, fantastically capable product. Carbon Copy Cloner includes support for cloning to a “Remote Macintosh”. This involves creating a small installer, copying that to the remote machine, running it, then enabling Remote Login. The process was easy as could be. The software looks great and was very easy to use. Anyone thinking of producing indie software for macOS should consider Bombich Software a role model.

When I finished copying my Mavericks, Yosemite, and El Capitan test volumes, I immediately paid my $39 for Carbon Copy Cloner. I may not use it again any time soon, but it saved me the cost of an additional cable, and it allowed me to do what I needed immediately. I sell software for a living, so I’m quite sensitive to paying folks for software which performs a necessary task for me or saves me a good chunk of time. In this case, Carbon Copy Cloner, did both. Thanks!

Storage: Everything’s Amazing & Nobody’s Happy

Storage is another area where everything’s amazing and nobody’s happy. I only have to think about storage once or twice a year. When that rolls around, I fire up DaisyDisk, which helps me visualize where I’m wasting space on outdated iOS emulators, leftover disk image downloads, and the like. I delete them, and I’m back to 100GB or more of free space. If you’re doing audio or video production, or if you’ve got a MacBook Air with 64 or 128GB of solid state storage, storage management is probably still a pain point, though a comparatively manageable one. Storage no longer takes significant time away from computing.

Old School Storage: Stack of Floppy Disks

Let’s think back some years. The permanent storage on my first computer was via cassette tape, which was slow and unreliable. This led to floppy disks, at first 5¼ inch floppy disks which were easy to bend or damage. Those gave way to 3½ inch disks with a hard outer shell and the floppy part contained inside. Storage was the constant, overriding concern when engaged in personal computing during the floppy disk era. It wasn’t uncommon to have to swap floppy disks many times in the course of what we’d consider a simple computing session today.

Hard Drives

Hard drives really changed the game, though at first they were insanely expensive and relatively low in capacity. At first, hard drives eliminated disk swapping during boot or when using a complex application. Most data file storage was still done on floppy disks, as this was the only practical way to transport data from one computer to another. Everyone who used floppies for data storage has at least one horror story of data loss. The most creative one I encountered was a PhD student who put both a 3½ disk and a banana in his backpack only to find that the banana got into his disk, destroying his only electronic copy of his thesis. Such a situation is almost unimaginable today.

Hard drives got bigger and less expensive. Email, online storage, and backup programs came on the scene, and folks began to store data files on hard drives. Storage became less intrusive to computing, but storage was still finite, limited, and unreliable. Backups became the replacement intrusion. The revolutionary and short-lived Zip and Jazz drives from Iomega provided high capacity external media. These gave way promptly to cheaper and more convenient writable CDs then read/write DVDs. It became easy to transport large amounts of data and to back up high capacity hard drives. Time Machine and cheaper, more reliable external hard drives practically eliminated backups as a computing intrusion.

The Cloud

Enter “the Cloud” and reliable, always-on Internet connections. These obviated the need for physical media to share your own data among multiple devices or multiple locations, to share data with others, and to store backups of critical data. Add cloud-based offsite backup solutions, such as Backblaze, and backups are now nearly 100% reliable. Data loss is no longer an overriding concern in daily computing.

Today, we have fast local storage in the form of high capacity solid state drives (SSDs). We have local backup to inexpensive spinning hard drives managed seamlessly by Time Machine. Offsite backup to the cloud ensures that we’re protected from failure of our Time Machine drives. We share data with our other devices and other people via the cloud.

Storage has shifted from the overriding concern of daily computing to a background task, which for the most part stays out of our way and lets us get the job done. Considering the path to get here, this is completely amazing (yet still some are not happy).

Everything’s Amazing & Nobodys Happy: Part I

I really enjoy this brief appearance “Everything’s Amazing & Nobody’s Happy” by comedian Louis CK on the Conan O’Brien show from 2008:

The piece is not without flaws, as I don’t believe the fault lies with a spoiled generation.

For me, it does a perfect job of skewering our lack of wonder and joy – our complacency – at the truly amazing things we experience every single day in our modern lives.

I think we have a lot of the this in the tech world. It’s easy to forget how far we’ve come in such a short period of time and how amazing that is. It’s easy to lose the joy in long term progress amid current frustrations, which always seem more significant because they’re in the present tense.

I thought it might be fun to explore some examples. I realize the relevance of these examples will vary with the age of the reader. At the time I’m writing this, I’m 44 years old – double death in Cantonese. This colors my experience, as readers who are significantly younger started their tech lives with newer and better stuff. Readers who are older will shake their heads at how I belong to a spoiled generation and ought not complain. And so it goes.

Amazing Networking

For my first example where everything’s amazing and nobody’s happy, let’s take networking. Just this week, I read an article about Comcast offering gigabit Internet in four cities. My first thought was disappointment that I can only get 100 megabits in my neighborhood. My second thought was: only?!? It’s absolutely amazing that I do have 100 megabit Internet. I realize that there are many in the US and elsewhere who still run on slow DSL and have less to be grateful for than I.

When I first got started with computers, I was fortunate enough to skip the acoustic coupler and start directly with a 300 baud Volksmodem. This had three distinct disadvantages versus today’s broadband connections:

  1. It was 349,525 times slower than my current connection
  2. Modem connect sounds
  3. Mom could pick up the phone and blow away my download at any moment

Sure, I still pine for a gigabit connection, and when I get that I’ll pine for even more. But at least now, Mom can share my internet connection without wrecking my downloads.

Dark Mode on iOS: DIY Details

With a few Accessibility twiddles, you can have system-wide dark mode on iOS today. There’s no need to wait for iOS 11 or 12 or whenever.

Dark Mode must be one of the most common feature requests for iOS. Open Radar is littered with requests such as this, this, and this which cites an original bug number of 15453121. The first request for system-wide Dark Mode must have originated between November 2013 and March 2014, based on my own bug report numbers.

I expect that most folks would like a Control Center toggle for a system-wide dark mode, rather like the toggle for Do Not Disturb. Only Apple can help with that.

Set Up DIY Dark Mode

Do the following to enable “do it yourself” / DIY Dark Mode:

  1. Tap Settings -> General -> Accessibility
  2. Tap Display Accommodations
  3. Tap Invert Colors
  4. Tap Color Filters -> On

If you’ve played with the color filters for color blindness or tint, then you’ll also need to tap Grayscale in step 4. Once you’ve selected Grayscale, it will remain the selected filter in the future.

Display Accommodations for Dark ModeColor Filters for Dark Mode

Sure, it’s a fair bit of tapping, but if you want to use your iPhone in bed without subjecting your bedroom to a bright glow, it’ll do the job.

Let’s hope Apple addresses bug 15453121 in a future update to iOS. In the meantime, with a bit of tap patience, you can have what you need.

(In writing this, I learned that display accommodations are not applied to screen shots, as you can see above.)

UPDATE: Reader Mark Igloliorte (@markiglo) notes that you can set your Accessibility Shortcut so that triple tapping the home button makes it easier to engage DIY Dark Mode. To do that:

  1. Follow the instructions above to enable DIY Dark Mode
  2. Tap Settings -> General -> Accessibility
  3. Scroll all the way down to Accessibility Shortcut and tap it
  4. Check both Invert Colors and Color Filters

Now, when you triple tap the home button, you’ll be able to tap Invert Colors or Color Filters. You’ll have to repeat the process a second time to enable / disable the other item.

Get Your Next Year of Apple Music for 30% off

I just got my next year of Apple Music for $84, which works out to US $7/month rather than $9.99, a 30% discount. Here’s how I did it:

1. Wait for a good iTunes Gift Card discount offer and go for it. Follow me on micro.blog, as I post when I see them.

2. Redeem your code on your Mac with iTunes open. This prompts the following offer or something similar:

Apple Music Offer

I’m not sure how long Apple will continue this offer. Let me know if they discontinue it, and I’ll update this post.

Finally, the math:

  • Purchase $100 iTunes Gift Card for $85
  • Purchase annual Apple Music subscription for $99 using that credit
  • Get $99 annual Apple Music subscription for $84
  • Have $1 left of iTunes Store credit

Now, it’s time for me to fire up some tunes in my heavily discounted Apple Music.

Fruit Skewers: Quick, Easy, and Delicious

Fruit skewers are an amazingly easy crowd-pleaser. They’re quick to make. They’re colorful, and they’re tasty. They’re an appetizer and/or a dessert. What more could you want for simple party food?

Fruit Skewers

Fruit Skewers Recipe

Here’s what you need:

Here’s the prep:

  • Wash the grapes and strawberries
  • Cut the tops off the strawberries
  • Ball the melons

For each skewer, I recommend this order:

  1. Melon (alternate green and orange)
  2. Red grape
  3. Strawberry
  4. Melon (alternate green and orange)
  5. Red grape

Hint: Melon balls don’t always come out perfectly round. Skewer the melon so that the flat side is toward the grape, and it will be less obvious.

My mother suggests a light drizzle of honey as a finishing touch. I suspect that’s important if the fruit isn’t at its peak of ripeness / sweetness. I didn’t find it necessary for the platter pictured here. We’re getting fantastic melon and strawberries right now in Northern California, so your milage may vary.

Debugging Tip: Saving NSData to a File

Saving NSData when debugging is easier to do now for specific data types but helpful to know how to do in general. Xcode 5.1 introduced graphical Quick Looks for variables a long time ago, but I hadn’t experimented with that until today. I’ll talk about it below, but first the old way of doing things…

It’s easy to save a chunk of NSData to a file from the debugger, and it can be really helpful when debugging. Here’s an example I encountered when chatting with another Smile engineer yesterday. We were discussing a method which returns a UIImage. We were seeing an artifact in the image, and we wanted to determine the origin of that artifact. We fired up the app in the Simulator and put a breakpoint at the end of the method which generates the UIImage. Then, we did this in the Debugger.

p [UIImagePNGRepresentation(keyBackgroundImage) writeToFile:[NSTemporaryDirectory()
	 stringByAppendingPathComponent:@"image.png"] atomically:NO]
po NSTemporaryDirectory()

The first line writes the data to a file (in the guise of printing the result of the writeToFile:atomically: method). The second line tells you the path of the folder in which the “image.png” file is saved. It’s handy to use NSTemporaryDirectory() because that works easily for sandboxed applications on macOS.

It was easy to open the resulting image file in Acorn (for me) and Photoshop (for the other engineer) to verify that the background image was not the source of the artifact.

Xcode’s graphical Quick Look for variables obviates this technique for images. All you need to do is:

  1. Hover over the variable name in your source code
  2. Click the Quick Look icon
  3. Click the Open button to open your file in its default file viewer

Xcode showing Quick Look variable view

This also works well for small amounts of proprietary NSData, as Xcode includes a Quick Look viewer to show 512 byte pages in HexFiend style. If you’re looking for something at the 100,000 byte mark, you’ll really want to save off the data and open it with HexFiend. In that case, it’s handy to know the above technique as well.

You can also write your own Quick Look display for your custom types, as Apple notes. I suspect that’s overkill in many cases.

I don’t claim to have originated this technique. I’d love to give credit (or a beer) to whomever I learned it from, but I simply don’t recall. I wouldn’t have posted about it, but for the fact that it was new to the engineer with whom I discussed it. Therefore I figure it’s worth a post after all. Hopefully, it will prove helpful to someone trying to extract NSData to a file while debugging.

Ratatouille Lasagna

Ratatouille Lasagna was the fifth of my 2015 Resolution:

This began as a collaboration with Éric Trépanier during his visit to California in the summer of 2015. He’d been watching a French Canadian cooking show, Qu’est-ce qu’on mange pour souper focused on making healthy meals in 30 minutes. This “Lasagne à la Ratatouille” got rave reviews in his household, so we decided to make it together. I’ve made it many times since.

Here is the recipe in French, and here’s the English translation. Helpful hints:

  • 30ml is two tablespoons
  • 300g is 10.5 ounces
  • 250ml is roughly a cup, so:
  • 500ml is roughly two cups
  • For crème champètre, use Half & Half or light whipping cream

The bulk of the time spent making the dish is chopping then sautéeing vegetables. I really like the thin cheese sauce versus the mounds of shredded cheese used in a typical lasagna. I don’t think we did it the first time, but using Trader Joe’s Diced & Fire Roasted Organic Tomatoes with organic green chiles, rather than plain canned tomatoes, adds nicely to the dish.

Here’s what it looks like just prior to assembly:

Lasagna Ingredients

And here’s what it looks like half eaten:

Ratatouille Lasagna Cooked

This is a great dish to make for vegetarian friends. I suspect they tire of eggplant parmesan or traditional spinach and mushroom lasagna. This dish is much more of a celebration of vegetables, and it’s less heavy on the cheese. I’ve found it pleases nearly everyone, and a great added bonus is that it’s able to delight vegetarians.

Ratatouille Epilogue

It was really fun to make a meal together with Éric. If you have friends visiting who also like to cook, I’d definitely recommend setting aside an evening to cook something together. I think we opened the wine before we began cooking, which I’d also recommend.

Goat Cheese and Fig Jam Tartlets

Tartlets with goat cheese and fig jam on puff pastry were the fourth of my 2015 Resolution:

Tartlets

These are great for when it’s your turn to bring food to an organization, club, potluck, etc. They only take about 30 minutes to make from start to finish. They’re also a huge crowd-pleaser. The hardest part is remembering to move the puff pastry box from the freezer to the fridge the night before. Here’s how to make these delicious treats.

Tartlets Recipe

  • Move puff pastry from freezer to fridge the night before you want to make these
  • Preheat oven to 400°F
  • Flour a flat surface such as a large cutting board or clean countertop
  • Flour your rolling pin, then roll out the puff pastry, extending it about one third in each direction
  • Use a 2 or 2.5 inch cookie cutter to cut circles of puff pastry
  • Place the circles on a sheet pan lined with silpat or parchment paper
  • Using a paring knife, cut X’s into each circle so that the outer portion rises more than the inner
  • Bake at 400°F for 10 minutes, and remove from oven
  • Place a dollop of goat cheese followed by a dollop of fig jam onto each circle of puff pastry
  • Return sheet pan to oven for an additional 10 minutes to melt the goat cheese
  • Move tartlets from sheet pan to cooling rack and let stand for a few minutes
  • Enjoy!

You can definitely use other flavors of jam. Try to avoid ones which have high liquid content.

I suspect you could also do a savory version of this, perhaps with a blue cheese and cooked bacon mixture. If I experiment with that in the future, I’ll try to come back and update this post.

If you make these, let me know how they come out.

Simple Sous-vide

I’m a convert to cooking meat sous-vide. I enjoy a perfectly-cooked, medium rare steak on occasion. I don’t eat red meat often, so when I do I really want it to be great. I don’t enjoy overcooked meat. I’ve also never liked the fact that there’s usually a certain gray, overcooked portion on the outside of a steak, while the inside is at perfect temperature.

Cooking sous-vide is fairly straightfoward. You seal the meat in a plastic baggie with the air evacuated. You cook it at its perfect temperature for long enough to kill bacteria. You sear it at the end for exterior texture (and for show).

Vacuum Seal

Archimedes taught the world how to displace volume by submerging objects in water, and the same principle applies in your kitchen:

  • Fill a deep pan with water
  • Place the meat in a sealable plastic baggie
  • Submerge the baggie nearly to the seal
  • Close the seal, submerging the sealed portion as you go

There are some debates on the Intertubes about whether or not this technique is inferior to mechanical vacuum sealers. My experience says this technique works perfectly well, and it helps avoid an additional kitchen gadget.

Water Bath at Temperature

There are a lot more Sous-vide gadgets on the market now than there were three years ago, and the immersion circulators look like a pretty cool option. For my setup, I use a simple, dumb slow cooker which just has Off / High / Low for settings in concert with a temperature controller. My Dorkfood Sous-Vide Temperature Controller (DSV) includes a temperature probe, which goes into the water bath, and a pass-through into which I plug the slow cooker. When the temperature is too low, the controller turns the slow cooker on, and when it’s too high, it turns the slow cooker off.

I cook my steaks at 137 degrees for one hour per inch of thickness. Note that you don’t start the clock on your cooking time until the water bath has achieved temperature with the steaks in. Keep in mind that it takes some time for the water bath to re-heat after you’ve dumped cold, vacuum-sealed steaks into it. When there’s about 20 minutes left, I’ll put the outdoor grill on high heat to prepare for the finishing touch.

Brown the Exterior

Cooking Sous-vide does not brown the exterior of the meat. It’s nice to have that texture and color for presentation, and you can do it by searing the steaks on a very hot grill or cast iron pan. You only need less than a minute on each side, and you’ll find that’s enough time to brown the exterior but not enough time to start overcooking the exterior of your steak.

I’ve also used this technique to cook beautiful hamburgers and incredibly moist chicken breast. For chicken, you’ll use a different temperature and time. Enjoy!