Love’s Lonely Offices

Sundays too my father got up early
and put his clothes on in the blueblack cold,
then with cracked hands that ached
from labor in the weekday weather made
banked fires blaze. No one ever thanked him.

I’d wake and hear the cold splintering, breaking.
When the rooms were warm, he’d call,
and slowly I would rise and dress,
fearing the chronic angers of that house,

Speaking indifferently to him,
who had driven out the cold
and polished my good shoes as well.
What did I know, what did I know
of love’s austere and lonely offices?

- Robert Hayden, “Those Winter Sundays” (via Bob Fischer)

My father and I had a contentious relationship during my growing-up years. He and my mother divorced when I was six, and weekends with him devolved over the years from fun to difficult to dreadful.

There were some good times: discovering Doctor Who together. Going down to Brackenridge Park where he showed my brother and me how to trigger the crossings for the miniature trains, slowing baffled motorists. Building small wooden boats out of scrap and chasing them down the gutters during a rainstorm. Eating imprudent amounts of Taco Bell after church. Afternoons at Lake McQueeney with my step-mother and her family.

But those good times were too often overshadowed by conflict. When I was young, the stakes were fairly small and our battles correspondingly benign. My refusal to try three bites of everything on my plate resulted in long hours at the dinner table (and late night surreptitious runs, often intercepted, to the kitchen for crackers and tuna). My reluctance to help around the house brought loss of Star Trek privileges. And my arguments with my step-mother over the utility and value of dish soap caused difficulty for him as he tried to support his wife while attempting to keep a straight face.

When I graduated to my teenage years, things got tougher. Though he didn’t impose a curfew, I thought it absurd and unreasonable that he would require me to call to let him know where I was. I balked with a mule’s stubbornness at lending any kind of help with household chores. I was loudly exasperated and petulant whenever he planned something for the family that interfered with what I wanted to do.

These bigger battles resulted in more substantial casualties. For a period of time, I got into a shouting match with my dad nearly every weekend my brother and I went to visit. When those arguments escalated enough, I would stalk out of the house, walking miles to stay with friends, dodging behind dumpsters to keep my dad from spotting me as he scoured the neighborhood in his blue pickup truck. One memorable time, my dad pinned me to the floor with enough vigor that my retainer popped out of my mouth and sat on me until my defiance was temporarily exhausted. Even when quiet descended on the house, it was a Cold War, with the threat of explosion hanging heavy over us all.

At the time, the only way I knew how to interpret my dad’s actions were as a tyrannical dictator, only interested in keeping his power unchallenged. (And with the zeal of a misguided freedom fighter, I rose to challenge it at every opportunity.) But as time has passed and I’ve had kids of my own, I’ve gained some perspective on those difficult times. While his approach wasn’t always optimal, I now understand how much of what he did during that span was motivated by love; not a sentimental sort, but a hard-edged, steely desire for my ultimate goodness and well-being. As C.S. Lewis said, “Love is not affectionate feeling, but a steady wish for the loved person’s ultimate good as far as it can be obtained.”

With that additional perspective, I want to thank my dad for arguing with me when I was wrong. For making me sit at the table for eight hours until I finished my zucchini. For having my brother and I over every other weekend when I gave him every reason not to. For disabusing me of the notion that I was the most important and smartest person in the world. For miles driven in that blue pickup looking for me (again). For disconnecting the TV when I was being an ingrate (also again). For sticking around when there must have been no small temptation to disappear across the country. For never giving up on me even when it would have been the far easier course. For being more interested in giving me what I needed than what I wanted. And for all the other lonely offices of love that I still, to this day, haven’t recognized.

Thanks, in short, for being a father, and for teaching me something of how to do the same.

A Belated Mother’s Day Reflection

I think it was seventh grade when I told my mom that I wasn’t very fond of classical music because I felt like it was too repetitious and predictable. This was the same year that I spent hours in the car on the way to or from school repeatedly listening to Toni Basil’s “Hey Mickey”.

The fact that I lived to eighth grade is ample evidence of my mom’s character and restraint.

iBeacons Lessons Learned

I recently published an article covering our experiences with iBeacons at Mutual Mobile on the Mutual Mobile Engineering Blog. I was excited to see this morning that it was picked up by iOS Dev Weekly. Thanks for the enthusiasm and the link, Dave!

Christmas Letter 2013

(This is the non-illustrated semantic HTML edition. Also available: the fancy photos-included PDF edition.)

Dear family and friends,

It has been quite a year for our family. We’ve enjoyed some great times together  with family and friends, a few promotions, a terrific (though slightly bittersweet) family vacation, a visit with alligators, an eviction from our house, a repatriation, and a new addition to the family. Read on for all of the details!

Kathy began the year working at Horizon Bay, an elder care facility around the corner from our house, as a caretaker. While she has a fantastic affection and gift for interacting with older folks, this was not a completely ideal appointment: it demanded a fair number of overnight shifts and other times that were inconvenient for her and the family, and it didn’t make much use of Kathy’s Therapeutic Recreation degree. After proving her worth and presenting her case to her boss, he appointed her Program Director for Clare Bridge, the Alzheimer’s community at Horizon Bay — a role that hadn’t existed before. She has received a number of accolades in her new position and, more importantly, loves it.

Emily continued her schooling, taking a few more art classes at ACC where she turned in some excellent work and continued to expand her artistic skills. In the middle of summer, she completed a long-planned move to Baltimore, which has the dual attractions of an art school that she’s interested in and portions of her family that she wanted to spend more time with. Her first few weeks there were a trifle rough: her car was broken into the first day she was there and the rougher sections of the city had her feeling a bit ill at ease. After selling the car and moving to a better section of town, she began to feel much more comfortable with the city, and is now enjoying it a great deal. She’s taking classes there and has been working a job at The Pratt Street Ale House for several months now, and has enjoyed the opportunities to visit with family and friends up in that part of the country.

Abigail is now in her Senior year at the high school. She’s taken up swim team this year, and has done quite well. She is turning in solid times on her events and enjoying her team and teammates a good deal. She has also been learning ukulele (it’s easier on her fingers that guitar was) and continuing to do some singing. One of her favorite classes at school has been a Special Education PE class, where she helps the kids there to stay fit and engage with others. Her plans for next year are still a bit murky, but we’re talking about and weighing the advantages and expenses of work, travel, college, etc.

Liam is halfway through his Freshman year. He has found the transition to High School easier than he expected, though the demands of marching band came as something of a surprise to him. In the month before school started, the band would arrive at 7:30, march until noon, and then practice inside until 5:00. During the first week of that, he would come home, eat a bit, sit in a chair in the living room answering questions in monosyllables, and stumble off to bed around 8:00. His playing is excellent, and he earned second chair among all the French Horn players at his school, beaten out only by one senior. He’s pulled straight A’s so far, and has also been learning some programming in his spare time, writing a few iPhone apps with a little coaching from Dad.

Maggie is now in 7th grade. She continues be a great favorite of her teachers thanks to her sweet nature, generosity, and willingness to work hard. She loves animals, and was delighted at the opportunity to have a lengthy horse riding lesson over the summer thanks to some friends of ours. (It was accompanied by a shooting lesson as well, at which she did startlingly well.) She also continues to enjoy art a great deal, and created several lovely pieces for family members at Christmas. Stories are also a favorite of hers. She’s enjoyed reading and rereading Maximum Ride and Harry Potter this year, in addition to reading through Jurassic Park, Terry Pratchett’s Dodger, and All Creatures Great and Small with her Dad.

Sean is finishing up his second year at Mutual Mobile, where he has been writing iPhone and iPad apps. He recently moved to an Associate Director role, which means less day-to-day programming and more strategic work and caring for people there. He’s also playing music with O’Malarkey, a local Irish band, whenever he can squeeze in the time, and has been enjoying cooking for family and friends more this year. The building of a 25′ tall trebuchet, some delightful long hikes, and a train trip to Chicago with Liam and Sean’s brother rounded the year out nicely.

Over the summer, knowing that Emily was planning her move to Baltimore, we pulled together a last big family trip: a week in New Orleans, where we had spent a day as a family a few years back and all really enjoyed. The vacation was terrific. We stayed on the edge of the Vieux Carré, and enjoyed rides around town on the streetcars, trips to the botanical gardens, aquarium and insectarium, and one of the most memorable meals we have ever enjoyed. (At Jacques Imo’s — “Warm Beer, Lousy Service” and highly recommended.) A particular highlight of the trip was a boat tour through Honey Island swamp, where we met a family of friendly warthogs and saw a number of alligators up close.

Alas, when we returned to San Marcos, it was to a home with a broken toilet supply line which had flooded a good portion of the house. Some of our good friends were checking on the homestead while we were gone and discovered the problem before it got even farther along, but it still ended up causing tens of thousands of dollars of damage. We moved to a three bedroom apartment for “no more than 45 days.” That ballooned to three months before we finally got home. Fortunately, USAA (our insurance company) was very helpful, one of our church friends was gracious enough to build us a beautiful new built-in bookcase, Kathy was able to replace the abhorrent pink tile that has lurked in our bathroom since we moved in, and the house now looks better than when the whole ordeal began.

During our exile, Maggie got stuck sleeping on the couch for much of time time which, understandably, became tiresome for her partway through our stay. As a thank-you for her forbearance, we (perhaps rashly) promised her a kitten upon our return home. Hewing to the family tradition of absurdly named animals (“Fluffy” the hermit crab, “Llama” the gerbil, “Hasenpfeffer” the rabbit), she christened her new black kitten “Mayonnaise”. He’s quickly made himself at home, and has even won over Liam, the most pet-skeptical among us.

 

As we review our year, it is apparent how blessed we are to have such terrific family, such wonderful friends — what a different year it would have been without those of us who give us regular support, and those we know are further off in the wings, ready to offer friendship when it’s needed. Thanks for being a part of our lives, and for allowing us to be part of yours.

May all the joys of this blessed season be yours in full measure. Merry Christmas!

The Clan McMains

(San Marcos Chapter)

 

Article on Unit Testing in iOS

I’ve just had the first article in a series published over at the Mutual Mobile Engineering Blog. It’s all about making Unit Testing more efficient and less repetitious. The article is written with a focus on iOS, but the principles can be applied more broadly as well.

Part I is now available. And now, so is Part II.

Accessibility: What It Is, Why It Matters, and How to Do It

I did a presentation at CocoaConf Dallas today on how, as a developer, to make your iOS apps usable by people with visual impairments. It was a lot of fun, and seemed to be well-received by the conference attendees. If you’d like to see the slides, you can download them here:

Download Accessibility Presentation

In addition, I announced an open source component I wrote to make accessibility testing easier for developers. It’s called SMAccessibilityOverlay. By adding it to an app under development, you can temporarily display an overlay that quickly shows what areas of the screen have been marked as accessible, and what labels are associated with those regions:

Accessibility Overlay Screenshot

If you’d like to try it out in your app, you can download it from GitHub here. I’d also be delighted to have input on it, either in the form of suggestions (good) or code contributions (better) or encouraging beer purchases (best).

Pebble First Impressions

I was a fairly early backer of the much-publicized Pebble smart watch. After being wristwatch-free for years, I’ve been wearing mine for nearly a week now, and have some early first impressions I thought I’d share for the curious.

First off: it’s a good-looking timepiece. While the 144×168 screen resolution sounds almost absurdly low for those of us who have been spoiled by full-color retina displays, it look just fine in context. The high-contrast display technology is great, and is visible in a wide range of conditions. Being able to turn on the backlight with a quick wrist-flick is terrific, though it does make playing hide-and-seek in the dark more challenging (as my kids will attest).

The on-device software is solid and well thought-out, with a clear, usable interface a bit reminiscent of the original iPod. Scroll views show a shadow at the top or bottom if there’s more content to display. Controlling music works like a charm with the built-in music app or any others that use Apple’s media control APIs. (Combined with Pandora and Apple TV, I can control music streaming from the Internet through my home sound system from my wrist. It’s the future!)

The included watch faces are fairly varied and interesting, with the binary display being a favorite of mine, though it takes me 10 seconds to figure out the time when someone asks me. And thanks to the support for notifications, I’ve known what those incessant chirrups coming from my phone are about without having to fish it out of my pocket.

Funnily enough, my biggest beefs with the out-of-the-box experience have to do with iOS. Pebble is taking advantage of some newer features in iOS 6 that haven’t been widely used yet, and there are still some rough edges on Apple’s side of things. Notifications have to be reset whenever the Pebble and phone lose contact with each other (which includes restarting either device, using Airplane mode, rebooting your phone for a system update, etc). Additionally, when the watch talks to the phone and the Pebble app isn’t already running in the background, iOS throws up an obtrusive alert telling you that the watch is trying to talk to the phone. It then launches the Pebble app into the foreground if you give it the permission to communicate it’s asking for.

There are, however, a few knocks I can level at the Pebble itself. If one gets multiple notifications in rapid succession — for example, when the mail app finds a few new messages in your inbox — the first notification immediately gives way to the latter, with no way to rewind and see the initial information.

The battery life doesn’t seem near as long as the advertised week. I admittedly haven’t run it into the ground yet, and I’m not 100% sure I gave it a full charge, since there’s no indication of charge status when it’s plugged in*, but so far it seems to last closer to 4 days than the week the company cites. (Oops — it just expired. Looks like the 4 day figure’s about right, and the low battery warning seems to appear 12-18 hours before it gives up the ghost.)

The most egregious problem, however, is the SDK. Or more precisely, the gaping hole where it should be. As detailed on http://www.ispebblesdkshipping.com/ (a spoof of Pebble’s own http://www.ispebbleshipping.com/), the kit that would allow developers to create new apps and watch faces for the Pebble was promised first for August 2012, then by January 23, then when the watch shipped. As of today, it still hasn’t turned up, and the company has been tight-lipped about what is causing the delay.

Given that the hardware specs have actually been improved since the Kickstarter finished, my hope is that the programmers are simply hoping to deliver something higher-quality and more capable than they’d initially planned on. The lack of communication, however, is a bit worrisome since many folks who have bought one of the devices did so out of a desire to be able to develop for it.

But overall, I’m happy with this first version of the Pebble. The existing functionality seems solid, and the possibilities for future improvements will be exciting once the SDK is finally out. If the company has to choose between putting something out soon that’s half-baked, or taking longer to create something they’re really proud of, it’s clear they choose the latter — a decision I applaud.

But now I have to go charge my watch.

* UPDATE: There actually is an indicator that lets you know when the watch is fully charged, but until the Pebble folks graciously pointed out the help page, I hadn’t been able to sort out the iconography they are using.

Happy Thanksgiving, Y’All

Thankful for…

Why is Programming Fun?

One of the best explanations I’ve ever seen of the appeal of what I currently get to do as a profession.

Why is programming fun? What delights may its practitioner expect as his reward?

First is the sheer joy of making things. As the child delights in his mud pie, so the adult enjoys building things, especially things of his own design. I think this delight must be an image of God’s delight in making things, a delight shown in the distinctness and newness of each leaf and each snowflake.

Second is the pleasure of making things that are useful to other people. Deep within, we want others to use our work and to find it helpful. In this respect the programming system is not essentially different from the child’s first clay pencil holder “for Daddy’s office.”

Third is the fascination of fashioning complex puzzle-like objects of interlocking moving parts and watching them work in subtle cycles, playing out the consequences of principles built in from the beginning. The programmed computer has all the fascination of the pinball machine or the jukebox mechanism, carried to the ultimate.

Fourth is the joy of always learning, which springs from the nonrepeating nature of the task. In one way or another the problem is ever new, and its solver learns something: sometimes practical, sometimes theoretical, and sometimes both.

Finally, there is the delight of working in such a tractable medium. The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures. (As we shall see later, this very tractability has its own problems.)

Yet the program construct, unlike the poet’s words, is real in the sense that it moves and works, producing visible outputs separate from the construct itself. It prints results, draws pictures, produces sounds, moves arms. The magic of myth and legend has come true in our time. One types the correct incantation on a keyboard, and a display screen comes to life, showing things that never were nor could be.

Programming then is fun because it gratifies creative longings built deep within us and delights sensibilities we have in common with all men.

From The Mythical Man-Month, by Frederick P. Brooks, via Federico Grilli

Abigail’s Birthday List

Our dear Abigail’s birthday is just around the corner. If you’ve been looking for ideas, here’s her official illustrated gift-giving guide: