Pop Music and Vocal Range

This morning while walking the kids to school, I had Simon & Garfunkel’s “Only Living Boy in New York” running through my head and, since I have no filter between them, out of my mouth. As I reached for the low note at the end of a phrase, it occurred to me that the range of the song’s melody — an octave and a perfect fourth — seemed unusually large. That got me to thinking about vocal range in pop music and wondering whether Paul Simon is more ambitious than most in that regard.

While mulling this over and considering various examples, I decided it would be fun to enlist my musical friends to see what the most extreme examples of melodic range — both large and small — we could think of in popular music are. So, musical friends, let’s play! Here are the rules:

  1. Your entry can include a maximum range song and a minimum range song. (Figuring out the range is helpful, but not strictly required.)
  2. You can’t repeat a song someone else has already mentioned in the comment thread already.
  3. The song must be common enough that most people would have heard it. Thus, either major record labels or something with a comparable degree of exposure.
  4. Note to especially talented friends, and corollary to rule #3: you may not write a song just for this purpose.
  5. Multiple entries are encouraged.

I’ll throw my hat in the ring with an initial entry that should be easy to beat:

  • Large Range: Only Living Boy in New York, Simon & Garfunkel — an octave and a perfect fourth
  • Small Range: Johnny B. Goode, Chuck Berry — a perfect fifth

In order to make this a bit more interesting, I’ll buy the winner their album of choice in digital format. The winner will be determined entirely by me, and my decision is final. Anyone who disputes it will be beset by my army of trained flying monkeys.

Magnolia Conference 2009 Report

This is a lightly tweaked version of the report I submitted to the University after returning from Magnolia’s first-ever conference, in Basel, Switzerland. I realize I need to write up a more general-interest trip report, but have been dreadfully short on time since our return. I have, however, recounted our adventures often enough now that it should be a straightforward bit of writing; I’ll do it soon!

In September, my friend and coworker Jeff Snider and I attended the 1st conference for the Magnolia CMS, on which our Gato system is based, in Basel, Switzerland.

We presented two talks at the conference: Case Study: Magnolia at Texas State University (mostly Jeff’s work) and Surfacing External Data through Magnolia (mostly my work). Our talks were well received; people seemed to particularly enjoy the window into our implementation experiences.

Other presentations covered various open-source Magnolia modules that may be of use to us, Apache Sling (which looks like a great foundation for building web-service-based content applications), some basic details on clustered instances that will serve as a good starting pointing for setting up a clustered editing environment, and the new UI and architecture for the upcoming Magnolia 5. (We were unable to attend the last, since it was opposite our own, but the slides cover the information fairly well.)

The most valuable thing for us, however, was to get to meet the Magnolia staff and community. We were able to put faces to many of the names that pass across the user support list, and to discuss lots of aspects of Magnolia with the folks who are directly responsible for implementing it. (And one of them saved Sean during his presentation when he made a mistake in my data entry — thanks, Philipp!)

While the conference itself was not without the occasional hiccup — to be expected, given that this was the first time it had been held — the chance to build relationships within the community, learn from the other presentations, and to present Texas State’s experiences made the trip a worthwhile one.

Honor Roll

Kathy and I are just back from a 10 day trip to Switzerland which was alternately the most amazing and the most harrowing experience of our recent lives. I’ll write more on the trip itself later, but wanted to post immediately about the extraordinary kindness and care we were shown by a variety of people over the course of this trip and to publicly thank the folks involved:

  • Thank you to my brother Chris, who stayed with our kiddos for the first half of the week, and to his wife Becky for being willing to share him!
  • Thank you to my mother Diane, who took several days off from her pediatric private practice to care for our kids the remainder of the time we would be gone. When we missed our flight out of Switzerland, she  stayed another night to make sure the young people got off to school OK the next morning.
  • Thank you to Karl, the proprietor of Transcom Accommodation, who came in after hours to check us into our rental apartment and was extraordinarily friendly, patient and helpful when the B&B where we were supposed to be staying lost our reservation. Thanks also to Eva, his neighbor, who invited us into her kitchen while she called around and found Karl after hours.
  • Thank you to Boris, the CTO of Magnolia, and his family. Not only did they make us feel very welcome in Basel and give us some great ideas for things to see and do, but they also had us over for dinner and treated us to a delightful evening of excellent food and conversation. It was one of the high points of our time away.
  • Thank you to Daniel and again to my brother Chris, who surreptitiously did an entire garden installation in our backyard while we were gone. We were astounded to find two large raised beds and an irrigation system (complete with a new water supply line) installed, with Bok Choy, lettuce, and Swiss Chard (appropriate!) already sprouting, where the remnants of our pool had been when we left. Amazing!
  • Thank you to Mike McGinnis for picking us up from the airport when we came in a day later than anticipated and bringing us home.
  • Thank you to all the friends who offered thoughts, prayers, and words of reassurance while we were on the road. They meant more than you can imagine!
  • Thank you to Leslie for staying with the kids after school on the day we were returning and greeting us with a big hug and a bigger Mexican food meal — just the thing to make us feel well and truly back home. (Thanks also to Charles & Lydia, Faith, my Dad, and the other folks who offered to help out that afternoon!)

We are amazingly humbled and grateful to have friends who are far better than what we deserve. Thank you all for your love and your very concrete support.

An Open Letter to Wake The Dead Coffee House

Hi Julie,

I saw the other day that some folks in the neighborhood are petitioning to have your beer & wine license revoked, due to a perceived negative impact on the neighborhood. As a resident of the same neighborhood, I wanted you to know that I’m against that action for a variety of reasons.

I’m a big proponent of walkable neighborhoods, since more foot traffic means less car traffic, less pollution, and better health. Our neighborhood, unfortunately, is not a particularly walkable one. Until Wake the Dead opened, there was no place to be able to meet friends, enjoy a drink, or get a bit to eat within reasonable distance. Having the shop within a few blocks of our home has been a boon to our family, as we all enjoy going by regularly — usually on foot.

When our family visited England a few years ago, we fell in love with the pub culture there. The opportunity to bring the whole family and for the adults to have a beer and a sandwich while the kids played was terrific, and somewhat unique for us, since so few places in the U.S. combine those pleasures. Since our return to San Marcos after that trip, we were delighted to see Tantra open, which brought that same spirit (albeit with a patchouli-scented style) to San Marcos. We were further thrilled when Wake the Dead opened down the street, as it brought more of that open, inviting atmosphere to our city, this time within walking distance of our house!

So it’s a rare week indeed when some of our family isn’t down there. My wife and I enjoy slipping down the road for a quiet place and a cuppa or a brew. My 13 year old daughter loves to go down and have a frappe with one of her friends. My 10 year old will happily while away a half hour taking on any willing opponents at ping-pong. And, of course, we come visit frequently for the Irish music session and for movies.

I’m honestly a bit baffled by the hostility some of our neighbors have shown, since each time I know of that concerns about noise levels, handicapped access, etc. have been brought to you, you’ve been receptive to the concerns. Further, none of the issues the neighbors cite seem to have much to do with the beer & wine license, so it surprises me that they would come out so strongly against that particularly. And while I certainly don’t want people driving drunk through our neighborhood (or at all), it is my experience that those who want to get sloshed aren’t likely to seek out a coffee shop for that purpose.

So, in summary, I do hope the shop remains open and busy for many years to come. It is currently one of my favorite features of our neighborhood, and I would be inclined to pay more for any house with a coffee shop of its quality within walking distance.

Best wishes,
Sean McMains
940 239 4202

Family Update: The Back to School Edition

Hi folks! We’re wrapping up our first week of back-to-school now. Highlights so far have included a badly mangled toe (Abigail), a badly ripped pair of shorts (Liam), and a badly stained neck (Maggie). In spite of these bits of trauma, everyone seems to be settling back into the rhythms of academe without too much difficulty. Kathy is also jumping back into classes. This semester, she’s doing her fieldwork, taking another class that dovetails nicely with that, and enrolled for a ropes challenge course class. Her fieldwork is at AlzCare where she has been working for several months now, and which she enjoys the heck out of most days.

Over the summer, I got to play hooky from work and take each of the kiddos out for a day on the town. This is a tradition we do each summer, and which I love, as it gives me a chance to both enjoy our kids individually, rather than in the whirling maelstrom that is our home, and to spoil them a bit. Emily and I caught a movie and did some shopping. I took Abigail down to San Antonio for a day’s ramble around the Riverwalk. Liam and I drove down to Port Aransas for a lovely day at the beach, and I took Maggie out to Schlitterbahn. Good times all around.

Kathy and I are also gearing up for our trip to Switzerland. We’ll be spending the majority of our time in Basel, since that’s where the conference I’m attending is located, though we plan to buzz down to Geneva for a couple of days as well. We’re both excited about our first grown-up vacation of any magnitude together in 13 years. I also made the happy discovery today that I can download free community-produced maps for my GPS, providing navigation help without needing to plunk down the $150 or so that commercial map-sellers charge for such things. If anyone has any must-see sights we should know about, please leave a comment!

We’re also getting into festival season around here, and are making plans for the Austin Celtic Festival and the Texas Renaissance Festival. (Anybody know when Maker Faire is coming back to Austin?) We always have a great time at these, even though the kiddos don’t allow me to sit and listen to music quite as much as I’d like.

Best wishes for a pleasant end of your summer!

XBox Live Gold and a Pet Peeve

WARNING: Nerdy, kvetchy, juvenile rant ahead. Those of a sensitive disposition may wish to avert their eyes. You must be at least 48″ tall to read this post. Pregnant women or visitors with neck or back problems should sit this one out. Please consult your physician before proceeding. Do not read while under the influence of alcohol or medication. This post has been shown to cause cancer in laboratory animals. 4 out of 5 dentists surveyed believe you should read something else instead. Still here? Ok, but don’t say I didn’t warn you.

You know what I hate? Businesses that will  let you sign up easily for their service on their web site, but when you want to cancel said service, require you to call their support line, wait on hold, get hung up on, call back, get transferred to their outsourced support center, punch your account number into the phone, talk to “Bob” from somewhere that’s definitely not mid-America, tell “Bob” your account number, tell “Bob” your account number again because he wasn’t ready the first time, tell “Bob” why you want to cancel the service, endure “Bob’s” sales pitch on the many virtues of the service, assure him that yes you still want to cancel, endure another sales pitch with the promise of a temporary discount, assure him that yes you still want to effing cancel, wait on hold again, get transferred to another representative who doesn’t know anything about the conversation that’s already transpired, tell the new representative your account number, and write down the “cancellation confirmation number” so that when they charge you again next month you can provide the number and be told they have no record of it.*

Which is why I won’t be buying another XBox Live Gold subscription.

Bad enough that, even though I’ve already paid for the XBox, for the game I want to play, and for my Internet connection, I still have to pay an additional fee for the privilege of playing on-line. But add the fact that they won’t let you cancel your Gold membership online — a fact which they don’t actually make clear anywhere except by not giving you a cancel option in any of the dozen places on their website and subscription management screens on the XBox you might reasonably think a cancel button might lurk — and it pushes me well over the threshold of nonsense tolerance.

My favorite part of the whole experience was asking “Bob” why there’s no online option to cancel my account. He assured me initially that it was for security reasons. “Let me get this straight,” I said to him. “You guys consider your systems secure enough that I can enter my personal credit card information and incur debt, but not secure enough to stop doing that?” He then said there were also technical reasons that prevented it. Bollocks. If they can cancel an account on his computer, they can do it on mine.

So, adios, XBox Live Gold. I liked the service well enough to pay a few bucks a month for it, but not enough to endure Microsoft’s account management shenanigans.

* This is not actually what happened when I called Microsoft, but a pastiche of bad customer service experiences I’ve had, exaggerated for comic effect. Take that, lawyers.

On Software Testing

Over the past several years at the University, we’ve had to hire for a variety of programming and programming-related positions. One of the interviewing practices we’ve adopted is to give candidates a programming assignment which they can complete at home, at their own pace using any resources they can muster. Because these conditions approximate the conditions under which they would normally be working, we find this to be a really good indicator or what sort of work they’ll do if hired. (Besides, it’s one of the practices from The Joel Test! We currently score about 8.5/12.)

One of the jobs we’ve been hiring for is what I refer to as the “Quality Assurance Czar” — someone who will spearhead and organize our efforts to make sure the code we’re fielding is as awesome as we want it to be. The programming test for this includes both writing a small program to compare two hands in poker and, more importantly, writing a suite of tests to verify that the program works correctly. (This is not the exact programming challenge we use. It was actually one we considered, but it’s a thornier problem than one would guess at first glance, and there are a number of published algorithms out there already. We decided to make up our own problem so that applicants couldn’t just google for an answer.)

A few months back, one of my good friends — let’s call him Larry — interviewed for this position. He did a fine job in the interview, and while his code was very good, it didn’t include the comprehensive testing we were looking for. He wrote a small PHP application that generated a couple of random hands and then compared them, relying on the person running the program to verify that the winning hand the program chose was correct. His solution was 100% accurate, but didn’t include any automated tests, as he had a hard time imagining what sort of testing would have been useful in that case. Here’s a note he sent after the position had been filled:

I was real proud of my [Poker] app, the one that was supposed to include a testing approach.  Now I’ve tried Selenium, and I still don’t see how to test my app, because it has no user inputs.

What did you guys ever have in mind?

Okay, I can see these tests:

  • entering the URL brings up the page.
  • A refresh causes a change to the page (a new checkers arrangement).

But that don’t seem adequate.

He is, of course, completely correct. While this would test a few trivial aspects of the application’s functioning, it would leave the important and juicy bit of code, analyzing the poker hands, completely untested. (This is called “incomplete code coverage” in the argot.)

There are several things one can do to make this application more testable. First off, one needs to create a mechanism to feed the program a specific input. Once you can do that, you can give it a couple of predetermined hands and verify that it chooses the correct one. Doing this with a variety of different hands will demonstrate that the program is working correctly in those cases.

There are, however, about 2,400,000,000,000,000,000 combinations of two 5 card hands. For obvious reasons, we can’t test all of those. How do we choose which ones to check?

Let’s start with easy ones. Verify that a flush beats a pair. Verify that a full house beats a flush. Verify that four of a kind beats three of a kind. Verify that a pair of 8s with hearts and spades beats a pair of 8s with clubs and diamonds.

Once you have the basics covered, we want to look for “edge cases”. These are where our data bumps up against boundaries of some kind. They’re very important because “off by one” errors are very common in programming, and these tests help to expose those errors. In poker, for example, we would want to check that an “A2345” hand would count as a straight, and that a “10JQKA” would also count as a straight, but that “QKA23” would not.

By this point, we’ve accumulated perhaps a few dozen tests — a miniscule percentage of the possible total, but strategically enough chosen that we have confidence that things are working as they should be. If we later discover that we’ve missed something and that our program is inaccurate in some cases, we simply add another test that demonstrates the failure, and then work on our algorithm until all the tests are once again succeeding.

Next, it’s important to try invalid data and make sure that our program handles the error condition as we would expect. Asking the program to evaluate a hand with 5 aces of spades is meaningless, and should generate an appropriate message for the user. (Something like “You’re a dirty cheating dog” might be appropriate.) Having the 17 of acorns as one of the cards in your hand is similarly out of bounds, and should also trigger an appropriate error.

In Larry’s program, all of the logic was stored in a single PHP file. Though it’s a bit more work to set up, I would recommend using a Model-View-Controller design pattern, and splitting the “evaluate the poker hand” portion of the program from the “show the poker hand on screen” portion and the “handle user input” section. By doing so, we can test these portions of the code independently. If we know that the code that evaluates the hand does so correctly, but it’s showing the wrong answer on the screen, we have immediately narrowed the code that might contain the bug to just the bit that’s responsible for presentation.

Finally, once we’re using MVC, it becomes practical to use one of the many excellent unit testing frameworks that encapsulate a lot of hard-won experience doing effective testing. Since Larry was working in PHP, PHPUnit and SimpleTest appear to be decent options. Using an established testing framework has a number of advantages: the code for common testing tasks (like logging into a site) will already be written, it becomes easier to integrate our tests with other systems, test output can be reported in succinct, attractive forms, and other programmers will have an easier time understanding how our tests work.

So, in summary, we’ve updated our program to accept input, fed it a number of test cases and verified that it’s returning the results we expect, adopted MVC and a standard test framework. We now have both a high degree of confidence that our current code is working as expected and a “safety net”: if we decide to refactor the program or change the algorithm we’re using to compare hands, we’ll know immediately if anything we’ve done has broken it.

For a more comprehensive introduction to testing and using it to drive development, see this article. And if you’ve followed this, want to learn more, and are interested in a job, our QA Czar position is open once again!

Miscellanea

Hi Folks! I’ve been a lousy blogger/family chronicler lately. As a partial and entirely inadequate penance for my laxity, here’s a high-level overview of some of what’s been up lately:

  • The end of school has come and gone, and we’re a third of the way through summer. The kids have been enjoying their break from school, taking good advantage of the opportunity to spend more time relaxing, swimming in the river, spending time with friends, building forts in the living room, playing games, etc. My sister Meara has generously planned a day out with each of the members of the junior set, hauling them off to SeaWorld, to see Wicked (the musical), Schlitterbahn, and more. What a treat!
  • Kathy and I celebrated our 14th anniversary. Much to her surprise, I had booked her a reservation to go skydiving as part of our day together. (I am not crazy in the special way required to jump out of a plane, so provided ground support.) She had a great time, even when I joked that I had paid extra to pack the parachute myself and that she should be careful when she pulled the rip cord because an anvil would pop out, Wile E. Coyote-style. After the skydiving (photos here), we enjoyed a terrific lunch at the Gruene Onion Grill and an evening together wandering around the Riverwalk. Delightful!
  • I have also been doing days out with each of the kids this summer — an annual tradition for our family. Emily and I spent a pleasant afternoon together watching the new Transformers movie, eating lunch, and shopping for her. Maggie and I are off to Schlitterbahn next week for a day of sun-drenched fun. Further plans are still sketchy, though Liam and I are considering an overnight campout at the beach.
  • We’ve bid a fond farewell to Will Atkinson, a student friend of ours who had lived in our garage room for the last year or so. We’ll miss having him around, as he has been a good friend, a sitter for our kids when Kathy and I have gone out on dates, and an adjunct family member. The departure, however, is for a good cause, as he’s getting married later this month. Congratulations, Will & April!
  • Kathy has been working about 3 days a week at AlzCare, an Alzheimer’s care facility in town. She has found the work extremely rewarding, and seems to really find a sense of mission in taking care of these elders who are no longer able to fully care for themselves. Unfortunately, she’d been unable to work for a bit when a slippery rock at the river resulted in a neck injury that had her out of service for about a week and a half, but that is now well on its way to being healed — a fact for which we’re all grateful.
  • I traveled to Marfa, Texas for the latest annual-ish Stupid Guy Trip. We had a crew of 8 this time around, including Marc Hadler, Chris McMains, Daniel Priest, Ben Mengden, Ross Richie, Mike Brack, Jason Young, and me. We enjoyed our weekend in this little west Texas art town quite a lot, taking things easier than we have on past trips, and dedicating large swaths of time to simply sitting and talking or ambling about the town together. We did make it to the McDonald Observatory, which was terrific for the nerds among us (8 out of 8), but never did quite manage to get out to see the famous Marfa lights. Photos from the trip are here.
  • I’m slated to speak, along with my friend and coworker Jeff, at a conference in Switzerland in September. (Topics: a case study on our experiences with content management software at Texas State University, and a presentation on how to use a CMS to publish data from other systems.) I’m excited about the trip for several reasons, not least of all because we plan to stretch it out to a week, allowing some sightseeing time, and to bring Kathy along. Unfortunately, getting the whole family over would be financially prohibitive, but thanks to my brother and mother’s extremely generous offers to come stay with the kids for several days each, Kathy and I will be able to enjoy our first week-long vacation together since our first anniversary.

So that’s pretty much what’s been up with us. I hope summer is treating each of you (at least those in the Northern hemisphere) well, and that we’ll have a chance to cross paths soon.

Maggie the Entrepeneur

High Ed Web 2008 Talk (or “A Cure for Insomnia”)

Last October, a couple of my coworkers and I presented at [High Ed Web 2008]. The conference organizers have, at long last, posted the transcript and audio recording of our session. The quality of the transcript is fairly rough, and they didn’t include the visual aids (which, by the way, I put a good deal of time into converting to a format they’d asked for), but the audio quality is good. If you have an interest in our experiences with content management systems at Texas State University, give it a listen!

Planning Poker

One of the things about writing software for a living is that customers are rarely happy when you tell them “It will be done when it’s done.” Even though development is fraught with uncertainty, it’s still incumbent upon us who practice this craft to be able to give people some idea of what kind of effort will be involved to implement a particular feature.

One way to do this is to have a project manager or senior programmer sit down, think really hard about it, and come up with numbers. This has the advantage of being  expedient, but the disadvantage of being almost certainly wrong. The reasons for this are many: it’s hard to estimate a job accurately when you’re not the person doing the work. All of us as individuals possess blind spots. And programmers are notoriously optimistic about how hard it will be to do something. (Not as optimistic as marketing people are when faced with a programming task, but still…)

One of the approaches I’ve seen that seems to promise the best results over time is Evidence-Based Scheduling. By having programmers estimate the tickets they’ll be working on, then record how much time they actually spend on it, comparing one to the other, factoring in how much productive time they have during the day once meetings, email, and the ilk are all done, and doing a lot of math, one can come up with good quality estimations — especially as one accumulates data on which programmers tend to exaggerate and which think they can finish nearly anything before lunch today. This approach has the advantage of producing really good estimates, but requires detailed tracking both of estimates and actual work time to produce good results.

Somewhere in the middle is Planning Poker, an approach that allows teams to collaboratively create estimates with a minimum of fuss. The basic idea is that you get all your developers together, give each of them a deck of cards with a time estimates written on each card, and have everyone choose how long they think a given task will take by throwing the corresponding card on the table. If there’s not agreement, everyone discusses it, explains their reasoning, and then you do it again until there’s a consensus. (You can read more details here if you’re interested.)

When we’re planning what to do for the next phase of a project, we have to consider two things: how important an issue is, and how much work it will be to do the fix. The latter has, up to now, been done off the cuff by whomever of the developers happened to be in the room. But in the past week, we’ve added a field to our ticketing system for estimates and started doing Planning Poker sessions to capture estimates for the tasks ahead. These seem to be going well, and I’ve noticed some interesting things about them:

  • These sessions are actually pretty fun. Nobody has come away hating the process, and several of the devs involved have said they’ve really enjoyed them.
  • Because the rules of the game call for the people with the highest and lowest guesses to explain their reasoning, we hear from people who are sometimes a bit more reluctant to speak. Having their opinions respectfully listened to can be a very affirming, especially for new folks who may not have a history with the team yet.
  • We’ve actually been doing on-the-fly technical design as we discuss the issues, and have come up with some really good ideas and insights that we’ve then recorded in the ticket since we already had it open there. This was a pleasant surprise to me; I’d only been hoping to get estimates, but have also benefited from some terrific collaborative technical brainstorming.
  • It provides natural cross-training, since even programmers who aren’t involved in a particular project get to listen, ask questions, and vote on its tickets.

So after two sessions, I’m counting Planning Poker as a success, and have scheduled regular sessions to finish estimating our backlog of tickets and to handle new ones as they show up.  Many thanks to Mike Cohn for the great writeup that got me excited about it!