Monday, November 30, 2009

Subversion background (leather w/ punched holes ala Betts)

When preparing my presentation for this year's SubConf conference, I was looking for a background that wasn't so … run-of-the-mill. I stumbled upon a post at "The Art of Adam Betts" (at http://www.artofadambetts.com) that advertised a really cool background graphic. After checking the site over to make sure that I could in good conscience make a derivative work from his piece of art, I snagged the sucker and did exactly that:

(Adam, I seriously hope you're cool with this. If not, a thousand pardons and I'll certainly pull this post and any related graphics.)

Wednesday, November 25, 2009

Reflections of a Newbie Youth Soccer Coach

This past weekend, my sons' youth soccer seasons ended. My oldest practiced and played in a division for 5- and 6-year-old kids, and I assisted his head coach. My youngest practiced in a division for 3- and 4-year-old kids, and I was the head coach of his team. I wanted to write up some thoughts about the seasons from a coach's point of view. As you read these, if they sound more like parenting advice, there's a reason for that: many times over the course of the season, I noticed (and noted to others) parallels between coaching to parenting. I found that many of the basic principles commonly applied in one role remain valid and useful in the other. Mind you, I'm certainly no expert coach. Not by a long shot. (For that matter, I'm no expert parent, either.) But these are some of my observations, and I'm hoping that perhaps something here resonates with other folks who — like me at when this year began — have never coached at all.

Teams are best built atop friendship

An observation I made at during the Spring soccer season was that by the middle of the season, the players on the team I was helping to coach (which, as in the Fall season, consisted of 5- and 6-year-old boys and girls) still didn't know each others' names. This bothered me deeply, because at a minimum it meant that the players couldn't communicate effective to or about each other. But it also meant that somewhere between showing how to dribble a soccer ball and how to perform a proper throw-in, we as coaches had overlooked the simple fact that children are social beings. My son has a distinct “cautious observer" personality type. Until he's comfortable around his peers, he'd rather just watch to see if it's safe to engage. Not even knowing your peers' names does not encourage comfortability.

This season, we as coaches worked to remedy this problem up front. A helpful parent took a team photo, and we labeled it with each child's name, had Wal-mart print up enough copies for everyone, and distributed them. During practices we often encouraged the players to cheer for each other by name. The result was noticeable (to me, at least). There was much more of a team spirit on the field and off, and sometimes it was actually difficult to get my son away from the fields because he was having so much fun playing stuff other than soccer with his friends after practices and games.

What's my point? People matter — more so than winning, more so than ball control skills, more so than anything else at all. (Unfortunately, I fail to remember this critical truth myself sometimes — both on and off the field of play — much to my own embarrassment and the detriment of valued relationships.)

"Fundamentals" begins with "fun"

The assistant coaches on my youngest boy's team were amazing. One of them was introduced to me as a guy with a ton of soccer-related creds. Quite honestly, I was a bit intimated by this fact. But if there's one thing that he and the other coach taught me this year, it was that if the kids aren't having fun, it doesn't matter how well they can kick and throw a ball. What good is teaching good dribbling if at season's end the kids say, "Soccer's a drag — count me out"? For kids at this age, fun is closely tied to many things:

  • avoiding repetition — no child can tolerate doing the same thing for long periods of time. Mix it up a bit, Coach.
  • avoiding down-time — It only takes a few moments of waiting in line before a young child times out. You can almost watch as their attention span threshold is reached, and then away their little minds go, off to La-la Land. If you can, avoid line waits and repetition by splitting the team into smaller groups at various stations of differing activities.
  • simple rewards, oft-given — I was introduced last season to these little 1" iron-on motivational patches with pictures of soccer balls in various colors, stars, etc. We gave each kid that showed up at practice and stayed for the duration one of these patches. Kids respond positively to the promise of even simple rewards like that, or the promise of playing a favorite game at the end of practice. As it turns out, they don't mind trying harder when trying harder is fun.
  • team spirit — This season the teams were allowed to choose their own team names. My oldest boy's team chose the "Soccer Monsters". I wasn't so thrilled by the name, but nonetheless spent a few evenings designing a team logo just for kicks. The other coaches and parents loved it, and by the end of the season that logo showed up on 3" iron-on embroidered patches, stickers, a vinyl signboard for the parental cheering section, and even a sheet cake! Everyone loved the "brand" we built around the Soccer Monster name. And repeatedly the coaches and parents reinforced not just the value of individual contributors, but also the value of the team as a whole. The stereotype of the coach's kid who gets all the attention was completely absent — every child took his or her turn on the bench in every game; every child got a chance to play every position on the field over the course of the season; and every child gracefully dealt (most of the time) with being asked to do something that wasn't their favorite thing because it would benefit the team.

I owe a deep debt of gratitude to the other coaches and parents who routinely helped to make soccer fun for my kids and their peers.

Never underestimate a child's potential

If you had told me what I would be seeing some of my 5- and 6-year-old players doing at game time at the beginning of the season, I would have laughed in disbelief. While many other teams were playing "bunch ball" (all the kids swarming around the ball like so many angry bees), ours entered even their first games with an understanding of the various positions, their roles in those positions, and the importance of performing in their roles instead of just roaming around the field without a purpose. By season's end, I was finding that the kids could handle some game play maneuvers that I thought were pretty complex, such as one defender falling back to help the goalie when the other needed to head off an approaching attacker. I found myself often saying in disbelief things like "But these kids are only six years old!" and "But this is his/her first season of soccer!"

One of the other teams had a kid who, despite being one of the smallest players in the division, had amazing ball control and the sweetest little slide tackle you ever saw. And you didn't see many, because I think he's the only kid who attempted them in this age group. Every time he did (our team played against his team twice) I smiled a huge smile and thought (or said aloud) "That's awesome!" His dad was his coach, too, but when asked him about his kid's skill, he indicated that it was self-developed. Call me naïve, but that's amazing to me.

Now maybe these are just exceptionally talented children. But I have to believe that the key to this phenomenon is to never stop asking more of the players. At any given moment, a particular player is going to have a great grasp of some concepts and skills, a pretty good approach to others, be relatively weak at still more, and have never been introduced to the rest. Keep a sliding window of instruction with those kids so that they are always trying stuff they are likely to fail at along with the stuff that they do with grace and ease. What other self-developed skills are hiding inside our children just waiting for us to affirm them into the mainstream? What other skills are they ready to learn but can't because we underestimate their chances of success? This leads me to my next point.

Failure can be the best instruction

Instruction is extremely important. There is always something else to learn, develop, or improve, so ideally instruction never stops. The Harrisburg Youth Soccer program is a decidedly instructional league, favoring instruction to competition in an attempt to develop well-rounded players who love the game enough to play competitively at older ages (when they can emotionally handle serious competition). But instruction without the freedom to try and fail is stifling.

If every time one of my sons reaches for a glass of water on the table I criticize how fast he's reaching, whether he's planning to use one or both hands, whether he looks to be picking up the glass or sliding it between all the other obstructions on the table surface, and so on — if I micromanage his every move, he learns exactly one thing: the way Dad wants stuff done. Not taught in those moments is the most valuable lesson of all: why Dad prefers that approach. My son doesn't understand that it's Dad's experience with the physics of our Universe that leads him to prefer a particular approach to drinking from a glass. And he never will until he experiences some of that physics himself.

Now, I'm not saying that there's no value in that type of instruction. Certainly the opposite extreme of never sharing your own experiences with kids and leaving them to learn solely from their own experiences is just an abdication of parental responsibility — inefficient, unloving, and sometimes downright dangerous. But an absolutely critical aspect to any learning situation is experience, and specifically experience failing. Kids don't need protection from everyday failures because everyday failures teach some of the strongest lessons more quickly and more thoroughly than constant hand-holding ever can. Kids need a safe place to experience those failures, reassurance that in failing at a task they haven't failed as people, and encouragement to get up and try again.

By the end of our soccer season, the majority of our kids knew how to perform nearly any action that would likely be asked of them during a game. Early in the season, we hand-held. We did our jobs as coaches and taught them the finely detailed mechanics of these actions. But as the season progressed, we gradually shifted to a model of letting the kids make their own decisions and deal with the consequences. And if one of them messed up and did something incorrectly, both the player and the attempt were affirmed as valuable.

In the free software world, this is similar to way that new project members are often brought on board. First, a would-be project member submit patches for the software — technical descriptions of how the software should be changed to add a feature or fix a bug. The patches are reviewed by existing project members for accuracy and efficient, for attention to the rules of the project, and so on. If the patch meets the standards, it is committed (by an existing member) as a change to the software itself. If it doesn't, the patch is sent back with recommendations on doing it better. Over time, a talented developer will submit better and better patches the first time around, earning the trust of his or her mentors. And at some magical point, the mentors realize that it's no longer worthwhile for them to pay both the cost of reviewing the work and of then actually committing it on behalf of the patch submitter when instead they could let the submitter commit his or her changes first and then receive review afterwards. As coaches, our goal should be to progressively transition each child from a model of pre-emptive review (at significant cost in valuable time) and into one of post-facto review (which is far more efficient and allows the kids to celebrate victories they've earned for themselves).

Friday, November 20, 2009

Revisionist History


Remember the Subversion 1.0 celebration T-shirts? Alas, there are no `svnadmin dump' and `svnadmin load' for cottonware.
As you might have read elsewhere, the Subversion project has recently been accepted in the Apache Software Foundation's Incubator. As part of the process, we'll be migrating all kinds of goodies off of Tigris.org — which has been the project's home (and a good one at that) for the past near-decade — and onto Apache-hosted servers. Last weekend we took the first of those steps by migrating our version control history. I managed the Subversion side of this migration, prepping the data for delivery into the ASF Infrastructure team's able hands.

But I wanted to do more than simply move our Subversion history from one place to another. See, when Subversion began, it was a bunch of source code living in a CVS repository. When the source code compiled into something trustworthy, we let Subversion hold it own source code. (For the record, we were never given cause to regret that decision.) But at the time we made that change, there was no reliable and simple way to convert CVS history into Subversion history like there is with cvs2svn today. So we just exported the latest snapshot of our main development line, imported that into Subversion, and dealt with the severed history. However, this repository migration — which was going to be disruptive anyway — presented an opportunity to stitch together our old CVS history and our Subversion history. So I did. Here's how:

  1. Using cvs2svn, I converted all CVS history to Subversion and deposited it into a temporary repository, svn-from-cvs.
  2. Now, the CVS repository data contained some trailing changes that were created after the switch to Subversion back in 2001. Most of those were commits to www/ (which we manually mirrored for a while based on our Subversion commits to trunk/www/). A couple of them were things like system-wide automated tweaks to www/robots.txt made by CollabNet folk. Also, we had real tags and branches in our CVS repos that we didn't bring with us into Subversion. So I dumped the first 3654 revisions from svn-from-cvs — the pre-switchover changes only — and loaded that into the stitch repository, svn-complete.
  3. To historically preserve the fact that apparently we didn't care too much about those old CVS tags and branches, I committed their deletion from svn-complete (but left the branches/ and tags/ top-level directories themselves).
  4. Since the first revision of our project's Subversion history (in the main svn repository) was a massive import into trunk, that would have clashed mightily being loaded atop already-existing files and directories in svn-complete. So instead checked I out svn-complete/trunk@HEAD, then exported svn/trunk@1 atop it. The local mods were the small delta between what we got outta CVS on August 31, 2001, and what we put into Subversion. They were mostly the result of $Date$ keyword formatting differences. I committed those local mods, which now brought svn-complete into sync with svn@1' except that svn-complete still had empty tags/ and branches/ directories (which were added in r532 and r1237, respectively).
  5. I dumped -r2:531 of svn, loading the result into svn-complete.
  6. I skipped r532 (the revision in which we created our tags/ directory) from svn, instead adding a no-op placeholder revision to svn-complete.
  7. I then dumped -r533:1236 of svn, loading the result into svn-complete.
  8. Once again, I skipped r1237 (the revision in which we created our branches/ directory) from svn, instead adding another no-op placeholder revision to svn-complete.
  9. Finally, I dumped the rest of the svn history (r1238:r40515), loading those revisions into svn-complete.

The result was a single repository (svn-complete) of 44170 revisions (3654 from CVS, 40515 from Subversion, and 1 cleanup revision) that contained all of the Subversion project's version control history, starting with the inception of the project. It's this data that I handed off to the ASF Infrastructure team.

The ASF Infrastructure team took this repository's data and loaded it into the ASF repository (with external commits disabled to prevent interleaved commit history). At the time that this history was loaded into the ASF repository, that repository already had 836419 revisions in it. The next 3655 revisions represent the Subversion CVS history (plus a fixup revision). This means that any historical references found in Subversion's source code, issue trackers, mailing lists, etc. that refer to pre-migration revisions (which are easy to spot, as they are all quite a bit smaller than 800000!) may be found in the ASF repository by adding 836419 + 3655 = 840074 to the revision number.

We as a project are still really finding all the places that this change of address (and revision numbers) will affect us. I can assure you that the last place I expected it to hit was my clothes closet, though!

Friday, November 13, 2009

Name-dropping Jesus

Don't you just love it when you personally benefit just by knowing someone else? Maybe (just maybe) you're considering an order of some trophies for your eldest son's soccer team, and one of the other dads on your youngest son's soccer teams says, "Oh, you should check out Awards Express — I always get my stuff from them. They turn around high-quality orders quickly and professionally. Tell 'em Tray sent you!" And instantly, you feel like some kind of V.I.P., empowered to trade on someone else's good name and reap the benefits of their relationships with a mutual contact.

That's kinda the way prayer works for Christians. I was thinking tonight about how I was taught that prayers are supposed to end. You know, some variation of "In Jesus name, Amen." This isn't merely the result of some ancient meaningless ritual passed down through the generations. It's the way Jesus told us to pray. In John 14:12-14, He tells us that after He returns to His Father (which, if you haven't noticed, He already did), He will do whatever we ask in His name. We find similar statements in John 15:16 and later again in John 16:23-26. Basically, Jesus is hearing our complaints and concerns and needs and desires, and He tells us, "Hey, I know exactly who you should talk to about this stuff. My Father is the best in the business. He can hook you up. Tell him I sent you."

Now, if ever there was a name worth dropping, the Son of God's is the one. But sometimes I wonder if the following happens when I pray:

[Tinkling sounds of bells rapping against the closing door.]

God: Yes, can I help you?

Me: Uh, yeah. I'm looking for solutions to some of Life's problems.

God: Oh, well then you've come to exactly the right spot. I designed Life — nobody knows how it works better than I do. Now, I could take a small bit of offense that you would claim the product is flawed. I can assure you that it isn't. But as it turns out, I'm also really good at forgiving, so let's just move past that. What did you have in mind.

Me: Well, I was kinda thinking that maybe you could cause X to happen. That would really work out well for me.

God [clearly uncomfortable]: Hrm. Well, that's not really how I had things planned for you, but...

Me: Yeah, I know. See, something tells me that there's a purpose for my life that's bigger than just me, but I really, really want to just get X. I just think that makes the most sense for me.

God: You seem pretty confident about this request. Are you sure you've come to the right spot? I'm usually pretty picky about making sure that the work I do is for everyone's benefit.

Me: Oh, yeah, I'm sure. Your Son sent me; told me you were the best in the business.

God: Oh! You know my Son?! Well that changes everything. You two are close? Good friends? Maybe you guys work together?

Me: [clearly uncomfortable] Well ... I wouldn't exactly say we're close, really. I met Him some years ago, and we see each other from time to time. He's good friends with my wife's grandparents, so, you know, practically part of the family, sorta, I mean, not that we ask Him over for Thanksgiving or anything, but...

[Extended silence. Awkwaaaaard.]

Maybe I should strengthen my friendship with Christ before using His name for my gain, huh?

Go back and read John 15:16. Better yet, check out some more of the context by looking at John 15:14-17:

14 You are my friends if you do what I command. 15 I no longer call you servants, because a servant does not know his master's business. Instead, I have called you friends, for everything that I learned from my Father I have made known to you. 16 You did not choose me, but I chose you and appointed you to go and bear fruit — fruit that will last. Then the Father will give you whatever you ask in my name. 17 This is my command: Love each other. — John 15:14-17 NIV (emphasis added)

Think my fictitious scenario above exaggerates too much? I'm not so sure. See what Jesus says in Matthew about folks trading on his good name without the fruit to justify it:

18 A good tree cannot bear bad fruit, and a bad tree cannot bear good fruit. 19 Every tree that does not bear good fruit is cut down and thrown into the fire. 20 Thus, by their fruit you will recognize them. 21 "Not everyone who says to me, 'Lord, Lord,' will enter the kingdom of heaven, but only he who does the will of my Father who is in heaven. 22 Many will say to me on that day, 'Lord, Lord, did we not prophesy in your name, and in your name drive out demons and perform many miracles?' 23 Then I will tell them plainly, 'I never knew you. Away from me, you evildoers!' — Matthew 7:18-23 NIV

Are you just name-dropping Jesus? Man, sometimes I do. I've witnessed the power of prayers made in His name and in a spirit of obedience, but I confess that many times my name-dropping is just bogus. I need to work on that — need to work on my friendship with Christ, need to work on my obedience to His commands, need to work on bearing fruit, and need to work on loving my neighbor — because I definitely don't want to experience any awkward encounters with God. How about you?

Thursday, November 12, 2009

Harrisburg Area Land Use Planning kick-off meeting

Tonight I attended my very first civic community meeting, a kickoff meeting focused on the Harrisburg Area Land Use Planning effort. The meeting was a couple of hours in length, and drew what I would guess to have been about 150-200 people (though I'm really bad at estimating such things). I thoroughly enjoyed myself there — enjoyed seeing other folks in attendance that I know, enjoyed meeting some new folks (including our town's mayor), and enjoyed feeling like I was participating in something of value to my community. I learned several things about my town that I didn't know beforehand. And overall, it was a good opportunity to just listen to what others in my community think about the direction our town is heading.

Harrisburg, NC has in recent years been at odds with itself about land use. Our residents are fortunate to have some of the highest personal income levels in the area, and the town offers some of the lowest tax rates in the area. But we're growing like mad, and that necessarily has town planners busy, you know, planning to accommodate that growth. But how that growth happens has become a bit of a sticking point. It's easy to find folks with extreme opinions about the matter. Many oppose "big-box" commercial development, citing concerns about increased traffic, crime, and low-paying jobs probably filled by folks that can't afford to live in the town itself. Many others are begging for the entrance of large-scale commercial development, hoping that tax revenues from such places will fund the town's growth so that increased personal property taxes don't have to. Some read the phrase "bedroom community for Charlotte" with disdain; some with delight. Reconciling these viewpoints will certainly prove challenging for those tasked with doing so.

I look forward to the next meeting in this series, though I'm more than a little concerned that as the presentations and discussions progress from the general to the specific, these will devolve into battles of opposing viewpoints. Tonight's meeting intentionally cast absolutely no direction, at all, for the town. And yet there were already plenty of folks willing to voice strong opinions about how things ought to be, some of which were definitely assuming a defensive position. That's really not helpful. If you are a Harrisburg resident and happen by some misfortune to have wound up on this blog post, please, please do your fellow citizens the courtesy of not assuming that they want to ruin your quality of living — while a perfect solution that pleases everyone might not be possible to achieve, you can be pretty sure that forsaking honest communication for bickering will hinder the creation of even a tolerable solution.

(Oh. And no, Mom and Mom-in-law, my attendance at this meeting does not mean that I'm gearing up for a bid on a Harrisburg Town Council seat. It was just another way to connect with our community. Sorry to disappoint.)

Wednesday, November 4, 2009

ApacheCon: Where Subversion, Apache, and 100% Cotton intersect

Today during the opening ceremonies of the U.S. ApacheCon 2009 conference, Hyrum Wright (President of the Subversion Corporation) and Brian Behlendorf (a representative of both Apache and CollabNet's Board of Directors) made a joint announcement that the Subversion project was immediately seeking acceptance in the incubation process at the Apache Software Foundation.

Thanks to CollabNet's generosity (and my wife Amy's general coolness about my occasional business-related travel), I was able to be present for this historical event. Also, I was fortunate to have been given the opportunity to design the official commemorative T-shirt of the event:

It's not the cleanest thing I've ever done graphically. I really, really like the striped front. But I was tasked with conveying an awful lot of information (the 10-year anniversary of the ASF, Subversion's fit into the mix of other Apache projects, CollabNet's history as founder and primary corporate sponsor of the project, and so on), and the resulting busy-ness of the back's design unfortunately conveys that fact. Still, not too shabby for short-deadline (like, three days) work.

Tuesday, November 3, 2009

SubConf/Munich 2009

As I compose this, I'm 38,000 feet above sea level and somewhere between Charlotte and Denver, en route (ultimately) to this year's U.S. Apachecon event. Seems it was just yesterday that I was flying home from my last conference event. Perhaps that's because it was just a few days ago that I passed through Customs in Charlotte after the lengthy flight home from Munich, Germany. I'd been in Munich for the third SubConf Subversion user conference. I've had the pleasure of attending the prior two years as well, and this year's event was again a enjoyable one.

After helping to coach Gavin's soccer team to an 8-1 victory last Saturday, I hurried home, grabbed my bags, and was off to the airport. My direct flight from Charlotte to Munich landed Sunday morning around 8:30am local time. A couple of train rides and a short walk later, I was checking into the B & B Hotel, where (I was told) "all the cool kids" — that is, some fellow Subversion developers — were staying. I spent Sunday afternoon getting settled into the hotel and resting, then met up with Hyrum Wright for the express purposes of reprising last year's trip to Berni's Nudelbrett and to plan how we'd invest our time on Monday.

Hyrum and I decided on a trip to Salzburg, Austria for our Monday outing. It was two hours away by train, so we caught the earliest one we could manage. While in Salzburg, we visited the Hohensalzburg Fortress (an 11th-century fortress that overlooks the city), the Residenz State Rooms, Mozart's birthplace, and some other spots in the city. Afterwards, we took a bus out to the town of Grönig, where we rode the Untersberg Cable Car up into the mountains. Wow! Suspended above the earth by a wire the thickness of my forearm, watching as rocky crags passed underneath, I was overwhelmed by the novelty of it all. This was not a normal day in the life of Mike Pilato, to say the least. Our train back to Munich got us in town in time for dinner, which we took at one of the city's many beerhouses. (Thankfully, the locals don't take it too personally when we tourists opts for Coke and Fanta.)

I returned to the hotel around 10:00pm, where two things were waiting for me: a group of Subversion developer colleagues, and a nasty surprise from the SubConf event organizers. It seems that an employee of Polarion who was slated to present an all-day Subversion workshop the following day (Tuesday) fell ill, and then made the poor decision to use email — nice, asynchronous, non-interrupting, unacknowledged email — as his medium for telling the event organizers that he had to bail on the workshop. By the time they realized that they had no one to present the workshop, the organizers had to scramble for assistance. They found me online and asked if I could present the workshop instead. I was completely unprepared to do so, but offered to help as best as I could.

Fortunately, things took a turn for the better when I then went down to the lobby to meet up with my colleagues. While I was bemoaning this situation and my lack of preparedness, the angel Michael — no, not that one; Michael Diers (from Elego) — offered to assist me for the first half of the day-long workshop and to take over entirely in the latter half. And as if that wasn't great enough, I was then presented with the finished results of the T-shirt I designed for the conference:

Tuesday's workshop went pretty well, actually, thanks largely to Michael's familiarity with the topic and ready-on-hand materials. After lunch I was finally able to meet up with several other Subversion developers in a room the conference organizers had arranged for us to occupy for hackathon purposes. We worked for a few hours before heading over to participate as a panel in a Developer Roundtable event — an hour and a half of face-to-face interaction with Subversion users and administrators interested in learning more about Subversion's upcoming features or in solving particular Subversion problems they were having. I love these events for the fact that they serve to remind me that at the other side of every bug report or feature request is another human being who isn't just trying to make work for us as developers but is merely trying to get stuff done.

Wednesday morning, I delivered my keynote presentation, The Subversion Legacy (So Far...). I took the attendees on a brief walk through Subversion's history, beginning with its instantiation as an open-source project by CollabNet and continuing through to the current day, and focusing on aspects of the community and of key events and decisions which have contributed to Subversion's success. Despite the language challenge (most of the attendees were more comfortable communicating in German), I got positive feedback. And with that completed, I was in the clear in terms of obligations to the conference, and joked that I was now able to return to my typical 40% stress level.

I spent the rest of Wednesday and most of Thursday working on Subversion itself in the hackathon room with the other developers. We had occasional breaks to take in presentations by our peers, but mostly spent the time trying to improve the very software that the conference existed to celebrate. Thursday night those of us that remained went to dinner in Munich, sharing a final last few minutes together. A casual onlooker would never guess that we live scattered across the globe, only occasionally seeing each other in person. (In fact, I met one of my CollabNet colleagues for the first time on this trip!)

I traveled to the airport Friday morning with Greg Stein, hopped onto my plane bound for Charlotte, and was fortunate to sleep two-thirds of the flight away. I was greeted in Charlotte on Friday afternoon by my incredible, amazing wife and children. The opening theme of my keynote was about gratitude, and gratitude for good friends and a loving family served as the bookend to that week-long trip to Germany.

Monday, October 5, 2009

Soccer Monsters

I don't know why, but my oldest son's soccer team chose the name "Soccer Monsters". I have trouble prioritizing how I spend time, so for kicks, I whipped up (with the assistance of Amy's valuable feedback and suggestions) a team logo:

The coaches liked the result. Now our little 5- and 6-year-old soccer stars are sporting embroidered patches of the logo on their jerseys (thanks, Patches4Less), and slappin' stickers of the logo all over the place (thanks, Contagious Graphics).

Sunday, October 4, 2009

Review: Main Street Steak & Seafood, Harrisburg, NC

At the core of every pessimist's belief system is a simple truth: if you expect the worst, you'll only get pleasant surprises. At the core of every realist's belief system is another: if you expect the worst, and consistently receive it, pessimism might just be warranted.

Long ago, 4351 Main Street, Suite 111 — located in Harrisburg's Town Center — held Ciro's Italian Restaurant. Amy and I lived in Chicagoland at the time, and were only able to visit that establishment once. I recall enjoying it and remarking that it was much like having an Olive Garden in Harrisburg, but without the cookie-cutter chain restaurant feel. But eventually Ciro's moved out of that space, making way for a new tenant: Parma Ristorante. Now, my understanding is that Parma was actually a reincarnation of a separate restaurant (Roma's) which had previously occupied a location on the outskirts of the town. We had friends who swore by Roma's pizza, but our own experiences there were mediocre at best. Sadly, mediocre took a turn for awful when Parma opened up. This isn't a review of Parma, and perhaps it isn't kind to speak of the dead, but suffice it to say that despite multiple opportunities to impress us during visits to that shop — even across its various management and ownership changes — it not only failed to impress, but it failed to even remotely please. Parma was, quite simply, a monumental culinary disaster.

When Main Street Steak & Seafood opened its doors a few weeks ago in the old Ciro's/Parma location, we looked forward with cautious optimism to trying it out. That optimism was quickly crushed by the terrifying review of the establishment that we received from some good friends. Their nightmare-ish experience at the place — which ultimately resulted in them having to cancel subsequent plans for their evening — was one for the storybooks. If I recall correctly, the only positive thing that could be said was that the dessert tasted good. And even that was bittersweet, as said dessert was delivered in unrequested take-home boxes! So, as you can probably imagine, it was with justifiable pessimism that my wife, Amy, and I wandered into Main Street Steak & Seafood last night.

Our first impression of the restaurant was not exactly ideal, though in fairness, only some of that could be helped. The orientation of Suite 111 in that building is such that the restaurant doors are on what could arguably be considered the back side of the restaurant. I've got a whole set of opinions about the design of Harrisburg's Town Center that aren't particularly relevant here, but again, this is just what Main Street S & S has to work with. What can be improved is not allowing a number of staffers to sit in a bench near the hostess stand with their backs to the window awaiting incoming customers. Even if there isn't always something to be done in a restaurant, the customers need to think there is.

The restaurant was busy, but not crowded. Several staff members were bustling about, doing their thing. One got the sense that the place was alive — not quite abuzz, but definitely alive — with activity. Gone were the old Tuscan tones of Ciro's and Parma. New cuisine demands new decor, and MSS&S has opted for a more contemporary blue and silver look, sparsely accented with iron works and some somewhat out-of-place looking fish caricatures. Modern jazz music added to the ambience, playing at appropriate levels — even though we were seated directly beside the kitchen, we heard more of each other than of the music, and more of the music than of shuffling pots and pans. As this was a rare chance for Amy and I to have a dinner without our kids, "more of each other" was a big plus for us.

Soon after we were seated, our server, Chad, greeted us and took our drink orders. While the wine list appeared to be about a page long, we opted for soft drinks on this evening instead. Chad returned with the drinks (served in unassuming glassware) a short while later, bringing a basket of breadsticks as well. We needed some extra time to decide on our orders, and Chad granted us that without disappearing into that abyss that often consumes other waitstaff in similar situations. Amy and I eventually decided to opt out of an appetizer, hoping to save some room for dessert. Chad took our dinner orders, and then set off to register them with the kitchen while we set off to munch on the rather tasty breadsticks.

Our salads were delivered quickly, and were much larger than we expected for the $2 paid for them. Amy went the garden-salad-with-balsamic-vinaigrette route, and she was pleased by the thick dressing and (again) the large portion. My Caesar salad was good, too, but even though I could see that the dressing was thoroughly mixed throughout the greens, I wasn't able to taste it in my first several bites. I suspect it was mixed when the lettuce leaves were still wet from washing, which watered the taste down below the threshold of detectability. But as I settled into the salad, that Caesar dressing taste began to appear. In the end, it was largely forgettable as salads go. But forgettable is actually quite fine when you've every reason to expect much, much worse.

Our entrees arrived just as Amy (who is a slower eater than I am) was finishing her salad. We had chosen entrees that we were familiar with so that we could have some point of reference for comparison. Amy's filet mignon was cooked properly and accompanied by smashed potatoes and mixed vegetables. We were surprised to see yellow carrots amongst the mixed vegetables — those aren't common in area restaurants. Amy had positive things to say about her entree's taste, the portion sizes of the sides, and the cool plate all of this was served on. Her only negative comment was that she felt the veggies might have been improved with some seasoning. My oscar-style grilled salmon was also properly cooked, flaking apart as I expected without any detectable dryness save for a small, thinner corner section. It was topped by asparagus that, too, was well prepared — al dente enough to remain crisp and encourage knifework, but soft enough to drape across the salmon fillet. I, too, had the smashed potatoes, which weren't the garlic mashed I'd hoped were available, but which served their starchy purpose.

The main course came to a close much as it often does: my plate empty, and Amy's only halfway so. Here we learned the downside of those "cool" plates: those suckers are heavy. We asked Chad for a take-home box for Amy's leftovers, but the restaurant should strongly consider having the servers perform the transfer of food to boxes instead of leaving the customers to deal with those heavy plates themselves. Once the leftovers were boxed, Chad gave us the dessert selection. The options were fairly straightforward — no fancy dessert names evoking imagery of volcanoes, tropical destinations, or one's own demise. "Chocolate cake" was the first mentioned, and I'm not sure were even paid much attention to the rest of the list because clearly (to my wife, anyway) it was a night for chocolate. They were out of ice cream, so we ordered a coffee accompaniment. Chad returned shortly thereafter with a whopping chunk of 3-layer cake, drizzled with chocolate and raspberry sauce (and, of course, our coffee). Here Amy's and my opinions diverged. That the cake was served chilled was to her a great thing, somehow balancing out with the hot coffee in her universe. Me? I want soft, moist, and warm cake. I want the chocolate to ooze, the icing to drip, and to feel like I need to keep a spoon on standby when the fork can't keep up with the whole lot of the liquefying mess that ensues. This fact, however, did not prevent me from performing my husbandly duties and eating 49% of the cake. Warm, cold, or otherwise, it was a tasty cake. Then upon our request, Chad provided us with the bill, and that was that.

Overall, our visit to Main Street Steak & Seafood was nothing like what we expected. In stark contrast to the experiences of our friends, the service we received was outstanding. Food-wise, I can't say that anything we had was unique or inspirational, but perhaps that's okay right now. Maybe playing it safe and establishing a client base is wise given the disappointing track record of the previous establishment. I would certainly encourage the management to consider some more creative options, though, perhaps offering the entrees with choices of cooking styles and/or sauces. As for Amy and I, we welcome this new addition to Harrisburg's foodscape, and look forward to returning for another visit some time.

UPDATE 01/18/2010: Amy and I visited Main Street Steak & Seafood multiple times after this first visit. Perhaps as expected, our opinion of the place plateaued quickly. I guess that after being flatly shocked not to hate the place on our first visit, we eventually realized that there wasn't really much to love, either. The food was fine — and just fine. We never had a single dish that tasted like the chef had tried to personalize it. We never left upset, mind you — just a bit underwhelmed. And now Main Street Steak & Seafood has joined the ranks of the many restaurants to have bit the dust at 4351 Main Street in Harrisburg.

Thursday, August 27, 2009

A new generation of Jedi

George Lucas haunts my dreams as of late.

Many months ago, my oldest son, Gavin, got into robots. Wall-E was his world. In a moment of parental weakness and nostalgia, I guess, I showed him a YouTube clip of the Hoth battle sequence from The Empire Strikes Back, with the goal of introducing him to AT-AT walkers. Oh, dear. What a can of worms I opened that day. What were these laser cannon things? Those sweet snowspeeders? And what, pray tell, is that gloriously glowing sword of light, Dad?! PLEASE TELL ME NOW!!

Gavin (6) and his brother Aidan (4) fashioned out of paper and string masks for themselves — Darth Vader, and a Storm Trooper — to wear while playing. Their dollar-store foam swords were swords no more, but light sabers. Gavin's thirst for Star Wars grew insatiable. Without my knowledge, he got his grandpa to spend an evening on YouTube cruising movie clips. There he learned of such unsavory characters as General Grievous and Darth Maul. Indeed, he appears to have already begun embracing the way of the Dark Side of the Force (at least, that's what his mother says when her patience is tried).

In fairness to him, I have admittedly fed his interest somewhat. Star Wars was fascinating to me as a kid, too. I was his age when The Empire Strikes Back was released, and I have a vague memory of seeing the film in the theater — quite possibly my first theater experience ever. (This fact is not lost on Gavin when I tell him he's too young to watch the movie himself.) When I asked some friends for suggestions on new games for our Wii console, I was advised to look into the Lego game series. Naturally, I settled on Lego Star Wars: The Complete Saga. My whole family has loved playing this game, which is challenging enough to be enjoyable to the adults while still being great fun for the kids, too.

It didn't stop there, though. It couldn't. The music in that game — most notably "The Imperial March (Darth Vader's Theme)" — stirred my own Star Wars desires. I purchased a CD of orchestral recordings of various songs from the original Star Wars trilogy, as well as the DVDs of all six of the films. Those arrived a week or so ago. The CD is now near-daily fuel for my sons' imaginations; the DVDs have provided my wife and I with some late-night entertainment, too.

But now the Star Wars connection is appearing outside the family, too. Yesterday on Facebook, a good friend posted a status message about watching Episode 2, and the following thread (edited for brevity) ensued:

Ben Collins-Sussman: Star Wars episode 2 is truly one of the worst movies ever made. Why can't I stop watching? It's like rubbernecking a car wreck.

C. Michael Pilato: I just watched that last night! … But look on the bright side -- it's still better than Episode III.

John Bourdeaux: There are few things more disappointing than episodes 1-3.

C. Michael Pilato: @John: Agreed. Though Episode 6 is a close call. It's like some kind of interplanetary smash-up of Fraggle Rock and Willow.

Greg Kirkpatrick: I can't wait for lucas to finally make episodes 1-3 …

Brian W. Fitzpatrick: What are you guys talking about? I always thought it was a shame that they never made any Star Wars movies after Return of the Jedi back in the 80s.

C. Michael Pilato: "Comes first, denial does. When clears the haze, reality you see. Six films there are: three of worth, three of the Dark Side. Now sets in, pain. Afraid not are you of poor storytelling? You will be. You wiiiiiiiill be." -- Master Yoda

Greg Kirkpatrick: noooooooooooooooooooooooooooo…!

And the references show up lately even when not talking directly about Star Wars. Yesterday, I also learned that one of my and my wife's favorite musicians, Jennifer Knapp, appears to have returned from obscurity. But when glancing at comments made on an article announcing this fact, I see:

I hope she doesn’t George Lucas her career up.
— buffalo Buffalo buffalo · Aug 27, 12:13 PM ·

Can Pandora's box be shut? And, all joking aside, do I really want it shut? I mean, isn't it better to have two young boys whose imaginations are bursting with activity and whose play involves clearly defined ideas of right and wrong than to have kids whose eyes are glazed over from watching too much Dora the Explorer and Spongebob? (That's a rhetorical question — I'm confident in my own answer.)

Tuesday, August 25, 2009

Harrisburg-area "Kids Eat Free/Cheap" schedule

[Since my first post of this blog item, I've been contacted by folks associated with a really cool site, Kids Eat For (http://kidseatfor.com/), which tracks similar information, uses a voting system to keep data fresh, and even offers related iPhone and Android apps! When last I checked, the site was lacking many of the deals listed here, but thanks to the way it is set up, that's a problem you or I can solve. Click here to search that site for Harrisburg-area stuff.]

[Last Updated 08/31/2009]

I like to save money. The businesses near my home like to make money. Some of those businesses are smart enough to realize that if they give a little, I give a little, and we all wind up happy. I'm hear to talk about businesses near Harrisburg, NC that offer "Kids Eat Free" or discounted kids meals on certain nights. If you own a restaurant and offer these types of programs, my family (and others, too) will patronize your business, and will do so in preference to others that don't woo us through our children's bellies.

But since I've failed to find a reliable source of organized information about such offering in my area, I've decided to try to collect as much right here on this blog post. So, what follows is what I've found. You should assume that the definition of "kids" used here is "humans 12 years of age or younger".

Sunday
Dickey's Barbecue Pit (6189 Bayfield Pkwy, Concord, 704-262-3337) — kids eat free
Firehouse Subs (8111 Concord Mills Blvd. Ste 670, Concord, 704-979-9900) — kids eat free after 4pm with adult combo
Firehouse Subs (7712 Sossaman Lane Suite 100, Concord, 704-979-3737) — kids eat free after 4pm with adult combo
IHOP (230 E Wt Harris Blvd, Charlotte, 704-717-9600) — kids eat free 4-10pm
Zapata's Mexican Cantina (8927 J M Keynes Dr., Charlotte, 704-503-1979) — kids eat free with paying adult
Monday
IHOP (230 E Wt Harris Blvd, Charlotte, 704-717-9600) — kids eat free 4-10pm
Supper (4435 Hwy 49 Suite 100, Harrisburg, 704-454-7120) — kids eat free after 4:30pm
Tuesday
Denny's (8031 Concord Mills Blvd, Concord, 704-979-7474) — kids eat free 4-11pm
IHOP (230 E Wt Harris Blvd, Charlotte, 704-717-9600) — kids eat free 4-10pm
McAlister's Deli (8599 Concord Mills Blvd, Concord, 704-979-0600) — kids eat free
Texas Roadhouse (7801 Gateway Lane, Concord, 704-979-3090) — kids eat free 4-8pm
Wednesday
Firehouse Subs (8111 Concord Mills Blvd. Ste 670, Concord, 704-979-9900) — kids eat free after 4pm with adult combo
Firehouse Subs (7712 Sossaman Lane Suite 100, Concord, 704-979-3737) — kids eat free after 4pm with adult combo
Foster's Grille (8520 Pit Stop Rd. Suite 10, Concord, 704-979-3663) — kids eat free
IHOP (230 E Wt Harris Blvd, Charlotte, 704-717-9600) — kids eat free 4-10pm
Shane's Rib Shack (199 Ken Hoffman Dr., Charlotte, 704-503-3113) — kids eat free
Thursday
IHOP (230 E Wt Harris Blvd, Charlotte, 704-717-9600) — kids eat free 4-10pm
Friday
IHOP (230 E Wt Harris Blvd, Charlotte, 704-717-9600) — kids eat free 4-10pm
Saturday
Denny's (8031 Concord Mills Blvd, Concord, 704-979-7474) — kids eat free 4-11pm
IHOP (230 E Wt Harris Blvd, Charlotte, 704-717-9600) — kids eat free 4-10pm
Texas Land & Cattle (7779 Lyles Lane, Concord, 704-510-0021) — kids eat free 11am-4pm

Do you have something to add to this list? A correction to offer? Leave a comment, and let me know about it. Cost-conscious Harrisburgian parents, unite!

Are you a business owner in the Harrisburg, NC area who is not on this list? Perhaps it's time to get with the program.

Here are some other sites with similar collections of information, though perhaps not focused specifically on the Harrisburg area:

DISCLAIMER: I assume no responsibility for this information being incomplete, misleading, or downright wrong. While I'll try to keep it fresh and accurate, the onus is on you, the Reader, to verify this information before packing up your Suburban-full of hungry little monsters and heading off to terrorize one of these fine local establishments with an eye on saving a few bucks. Ya dig?

NOTE: Some of the information in updated versions of this post has come via the comments associated with the post. So if you read a comment that appears to suggest something already present in my post, chances are pretty good that the comment was there before I made the change/addition. Not that you should care anyway — we're here to discuss free food, not reading comprehension.

Thursday, August 6, 2009

The Internet is weird

WARNING: Some of the content linked from this post contains, shall we say, unnecessarily strong language.

Through a series of links traversed today, I was reminded of a cheesy rendition of a song I did some time ago (and posted on this blog). But it wasn't my song rendition that prompted me to write a blog post today. It was watching somebody I've never met lip-syncing to it that did the trick.

Man, the Internet is weird.

Monday, August 3, 2009

SubConf 2009 is in my future

I'm in the process of booking travel and lodging for my October trip to Munich. Yep, it's almost time for the annual SubConf Subversion conference, again. This year, I get to do something new: the keynote! In addition to that, I and some other Subversion developers will be hosting another Subversion roundtable discussion. We did this at last year's conference, and — at least according to the conference organizers — it was a wildly successful opportunity for Subversion's users to talk directly with the folks that write the software they use. If you are a Subversion user or developer who'll be in or around Munich on October 26th, I hope you'll consider joining us for this roundtable discussion. And of course, if you can attend the full conference (October 27-29), I'm sure you'll find it immensely beneficial to you and your organization's understanding, appreciation, and use of Subversion.

Speaking of that keynote presentation, I'd like to offer you the opportunity to help me out with it. (Did you like how I made that sound like it was actually you that would benefit from this?) Check out my post on the Submerged blog about this topic: http://blogs.open.collab.net/svn/2009/08/how-has-subversion-changed-your-world.html

Wednesday, July 29, 2009

Encouraging openness at Intuit

Yesterday, Intuit (the company that brings you such well-known software products as Quicken, TurboTax, and QuickBooks) announced the launch of code.intuit.com, their new open source community for "developers interested in creating connected online applications for small businesses". While the company isn't opening up any of its own software right now, the goal of the new community is to rally folks around its Intuit Partner Platform. I can't boast any experience with this platform, but from what I've read and seen about its various key components, it looks pretty slick!

You might be wondering why — given my lack of personal experience with these products and platforms — I'm writing about this at all. What's the connection between code.intuit.com and me? Two words: "open source". The Intuit folks were discerning enough to recognize that while they wanted to create and nurture a true, viable open source community, this was a new venture for them. So they've assembled an advisory board consisting of open source veterans to help guide them as they develop their new community. I am a grateful recipient of the invitation to participate (along with Jay Sullivan of Mozilla, Michael Coté of Redmonk, and Jason van Zyl of Apache Maven) on that initial advisory board.

I'm really looking forward to being a part of this, not so much for what I can bring to the table but for what I can learn from the others in the process. It will be interesting for me to see how the experiences I've had with the Subversion and other open source software projects — and even with my employer's own community site — will apply here. One thing's for sure: I definitely need to re-read Karl Fogel's Producing Open Source Software book!

For more information, read the full Intuit public announcement at http://ippblog.intuit.com/blog/2009/07/announcing-codeintuitcom-ipp-open-source-community.html.

Thursday, July 23, 2009

If your first flush won't succeed...

Upon dealing (again) with the temperamental handle on the men's restroom toilet at the Rocky River Coffee Co., I was reminded of another such beast that I was privileged to visit daily when I was working with CollabNet's Subversion development team in a small office in Chicago's centenarian Old Colony Building. The building doesn't offer bathrooms on every floor — we had to travel a couple of floors (from our 10th floor office space) to use it. It's diva-esque disposition was such that only precise manipulation would convince it to function properly. My co-workers and I, having reverse-engineered the requisite love this bowl thrived on, one day decided to share our results with other building tenants by way of a posted, poetic sign above the tank:

If your first flush won't succeed, A second flush this bowl may need. (The most effective second flush Comes while the first is in mid-gush.)

We were thankful, of course, that the thing could be forced to work at all. There was a more convenient urinal which lived in a tiny closet halfway up the stairs between the 9th and 10th floors — a men's toilet with no women-targeted counterpart (reflecting the realities of the workforce balance 100 years ago) — which at some point simply stopped flushing altogether.

I'm not sure which particular quirk of my psyche compelled me to share this story. But there ya go. (Karl, Ben, Fitz: I miss you guys.)

Saturday, May 23, 2009

Review: Forty Six, Kannapolis, NC

Next door to the historic Gem Theatre in Kannapolis, NC is a restaurant that I've been dying to try out. There, on West 1st Street, nestled between the old-school Cannon Village retail strip and the quite new North Carolina Research Campus, lies Forty Six (www.restaurantfortysix.com), an upscale establishment focused on promoting a "culture of healthy food". Thanks to Amy's parents offering their childsitting services tonight, we were finally able to try this place out. For you impatient readers who interpret "healthy food" to mean "nasty food" — as might our four-year-old son — let me simply summarize our experience by saying that your interpretation would be completely wrong.

Forty Six presents a visual theme consistent with the research angle of the NCRC. As the first of what will hopefully be many new restaurants there near the campus, the establishment — which takes its name from the number of chromosomes in the human genome — is decorated with science-y things: beakers serve as vases on the tables; molecular diagrams of edible atoms (caffeine, chocolate, etc.) line the walls; the ceiling is crowned by famous quotes about knowledge and its pursuit; and (my personal favorite) the bathrooms are labeled "XY" and "XX". This is all done tastefully, of course. The first impression of a trendy big-city restaurant gives way only gradually and never completely to the geeky stuff, the theme providing fodder for discussion without distracting from the all-too-rare experience (for us, anyway) of feeling like you're at least a thousand miles away from fast food.

Amy and I had reservations for the first time slot (Forty Six opens at 5:30pm on Saturdays), and were promptly greeted and seated upon our arrival. This was just the beginning of over an hour of quality service from the staff of this restaurant. Our server, Mallory, maintained the ideal distance: we never had to wait for her to visit, and we never found ourselves waiting for her to go away. Keeping my water glass filled without my even noticing? That's the target, folks, and Mallory nailed it.

We began by ordering a "safe" glass of red wine — a Mondavi Cabernet — and the Duck Quesadilla appetizer. We enjoyed prompt delivery of both, plus a basket of bread with accompanying bean-and-tomato-based dipping sauce. The quesadilla — which was served with a black bean tapenade and a salsa featuring cucumbers and pineapple — was tasty, but unfortunately didn't last long between the two of us.

Salads were next. Amy ordered a half portion of the Warm Walnut Encrusted Goat Cheese Salad. She's a huge fan of apples in salads, and was not disappointed by the Granny Smith slivers in her selection. We hadn't really studied the menu with an intent to memorize it, so it was cute to watch her uncover tasteful surprises as she navigated the Balsamic-dressed greens. ("Ooh! Is that bacon?!") Only a chunk of goat cheese survived her appetite. I had a half portion of the considerably simpler Forty Six Salad: mixed greens, mandarin oranges, and chickpeas with a green goddess dressing. There was no exciting progression through my salad, but its taste and presentation made it worthwhile.

Forty Six offers several seafood dishes, but that's not really Amy's thing. She was eying the lamb, instead. Upon consultation regarding entree portion sizes, Mallory reminded us of Forty Six's healthy dining focus. However, she was confident that we could happily split an entree if we so desired. As it turns out, we so desired. Now, in our marriage, the proper cooking temperature of meat is always a point of contention. Amy's a "medium-to-medium-well" kinda girl; I'm a "rare-to-medium-rare" kinda guy; and there's not much overlap there. But this presented no problems for us tonight: the chef was cool enough to divide the chop prior to preparation and cook each half to order. Our bone-in New Zealand lamb chops arrived cooked to perfection, wading in a pool of Balsamic Demi Glaze, with roasted red potatoes, zucchini, and yellow squash cheering from the sidelines. The lamb was simply divine. Amy is a sucker for a good potato, and was thoroughly pleased by hers. I was looking forward to those squash sides, which I found good but perhaps a little more al dente than preferred. As we wrapped up the entree course, we were glad we had decided to share one. Apparently, the term "moderate portion sizes" as employed by Forty Six is open to some varying interpretations.

As any decent, God-fearing woman will attest, a delicious meal such as we were enjoying cannot be considered complete without dessert. Mallory presented the options: triple-layer chocolate cake; red velvet cake; banana pudding; and some others, all of which had much more interesting descriptions than what I can recall now. Amy rightly noted that "we always go for the chocolate-y stuff", and encouraged a different tack tonight: the red velvet cake (and a pair of cappuccinos). Mallory delivered all of this promptly (she was aware that we were trying to make the 7:00pm movie next door at the Gem). This cake was the absolute reddest red velvet cake I've ever seen; multi-layered, with a cream cheese icing between the layers, and a dollop of whipped cream on the top. Unfortunately, it was also considerably less moist than I'd hoped. The cake's components were all good, but those components shouldn't require me to hit my cappuccino as often as they did. (Alas, the cappuccino itself was unremarkable.) Overall, not the best finish to the meal.

Despite not being wowed by the dessert, Amy and I both left Restaurant Forty Six tonight feeling comfortably full yet immeasurably happier having shared this experience. I sincerely hope we have the opportunity to return there in the future.

Thursday, May 14, 2009

Green church growth

In my previous post, I ranted a little bit about today's raging green hype. But as implied there, Christians are not without some responsibility in all this business. So I'll turn this around on those of us who do claim to understand the purpose of Creation.

Green thoughts were fresh in my mind yesterday when a pastor friend of mine (Paul Batson) and I were driving toward a meeting in Charlotte. (We were off to meet with a couple of area pastors about church real estate.) So I found it interesting that Paul brought up the topic of how church properties tend to be some of the foremost examples of underutilization around. It's a reasonable claim, actually: a building big enough to hold hundreds of people in one giant space, plus additional classroom space, but actually used for, what, maybe six hours a week? Church, how do we deal with this monumental waste of resources?

I'll go further, and personalize this. My church has just entered into a building program because we're having trouble fitting people into the temporary accommodations currently in use after outgrowing the previous worship and educational space. (Did you follow that?) Was this the right decision? I mean, I understand the desire to avoid multiple worship services and multiple small group periods in the name of keeping all the membership together with that comfy feeling of unity. But might better use of existing space — and money — demand the opposite approach?

I'm no social scientist, but I've noticed that almost every time I check the number of friends that someone I know has on the social networking site Facebook, the number tends to hover between 200 and 300. This caused me to recall something I'd heard long ago about some theoretical maximum number of social connections that a person could maintain stably. I did some Googling around, and I think Dunbar's Number was that figure. British anthropologist Robin Dunbar theoretized (based on the physical size of a region of the brain) that folks could keep about 150 such connections. (A more recent and more directly derived estimate of about 250 came out of research by anthropologists H. Russell Bernard and Peter Killworth.)

What does Dunbar's (or Bernard-Killworth's) Number mean for large churches? Does it explain why many people start to get antsy when their congregrations grow too large — why they start to feel disconnected? Does it allow an interpretation that having more moderately-attended church services benefits the sense of Christian community better than holding fewer gatherings of humongous crowds? And how does this all play into better use of church resources?

Green

Everywhere I look I see the green. It's Spring, so my green lawn needs a bi-weekly whacking with my John Deere green lawn tractor (which is complicated by the low-hanging green-leafed limbs of some of the trees on our property). But if that was the only green I was seeing, that'd be okay. Unfortunately, it isn't.

"Going green" or "being green" or "living green" almost wholly consumes the mass media and the consumer marketplace. Right now, over half of the top results from a simple Google search for a word as common as "green" are about environmentalism, eco-friendliness, and so on. Green is the new black, or something like that.

Climate change (née global warming), carbon offsets, renewable energy, reduce/reuse/recycle, are worthy topics all. And as a Christian who believes that mankind was entrusted with wise stewardship of God-created, God-provided resources, I don't think I or anybody else holds a get-out-of-responsibility-free card. But I detect two big, green problems with much of the hype:

Man sees green — in financial opportunity. I honestly do not know who to turn to for trustworthy information about the state of the world; its climate and related trends; which problems are real, predicted, or flatly imagined; which solutions are viable; and so on. Part of the problem is that there's too much money in the eco-this-that-or-the-other trend right now. Do I really believe that every producer of goods is concerned about the world when they release some fascinating new eco-conscious version of their product? Hardly. Seems sex is getting a run for its money in the "marketing tools" arena these days.

God sees green — with envy. We have a jealous God who demands that all things be done for His glory. Not mine, not yours, and not Earth's, but God's glory. I think far too many people have traded being caretakers of creation (as a form of worshiping the Creator) for worship of the creation (Earth, humanity, Self, money, ...). That's busted.

There must be a better, more divinely-inspired way of exploring this problem space and its solutions, because being green — that is, naïve — enough to worship this rock or anything or anyone on it is a horrific non-starter.

Wednesday, May 13, 2009

ViewVC 1.1.0 (finally) released.

Today, I finally got around to releasing ViewVC 1.1.0.

I know. And you're right — that's not the most uplifting lead-off line ever written for a technical blog. Sounds mostly positive (new release?!), with a hint of exasperation, and all shrouded in a mysterious cloud of why-should-i-care. Sorry about that. But allow me to explain.

ViewVC 1.1.0 represents — maybe misrepresents — three years of development on features introduced since 1.0.0 came out. I'm pretty pleased with the features, many of which were contributed by and/or willingly tested by volunteers. Here's an overview, taken from the official release announcement:

  • Extensible path-based authorization w/ Subversion authz support
  • Subversion versioned properties display
  • Unified markup and annotation views
  • Unified, hassle-free Pygments-based syntax highlighting
  • Subversion svn:mime-type property value honoring
  • Support for full content diffs
  • Standalone server improvements
  • Commits database management and query enhancements
  • Support for per-root configuration overrides
  • Optional email address obfuscation/mangling
  • Pagination improvements
  • ... plus many bug fixes and additional enhancements!

"That's it? After three years' time, that's all we get?!"

It's okay. I've asked myself that a hundred times, too. It's a bummer, but I think I'm learning another hard lesson about open source projects: when a piece of software reaches a certain level of maturity, the developers-to-users ratio tends toward nil.

Before I ever started working on ViewCVS (which was what ViewVC was called at the time), it was already a well-established, widely used piece of software. CollabNet used it to display version control repositories in its CollabNet Enterprise Edition software suite. SourceForge.net was doing the same. It seemed that everybody had a copy of ViewCVS. The software was ubiquitous, worked well, and CVS wasn't changing significantly. And ViewCVS's developer participation reflected this plateau of innovation, too — I think there might have been two or three folks active at the time, mostly just fixing the occasional bug.

Seven years ago, I was tasked by CollabNet to add support for Subversion to ViewCVS. Subversion hadn't even released its 1.0 version at the time. Subversion was still this young, exciting, rapidly developing new entry into the version control world. I (with the help of others) did get Subversion support added to ViewCVS, and along the way I inherited primary maintainer-ship of the project. The project was renamed to ViewVC later to reflect the fact that it was no longer CVS-only, and I began focusing on fixing outstanding bugs and tracking changes in Subversion's new releases.

Fast-forward a few years. Now Subversion's rate of change — at least, in terms of what's of interest to a repository browser tool — is starting to plateau, too. And ViewVC's contribution rate is again reflecting that. Fewer active committers (< 2), investing less time (< 1 day/month), and with fewer volunteer contributions.

It's lonely here.

But it doesn't have to be. There still remain opportunities for improvement in ViewVC. Off the top of my head, I'd say adding support for other version control systems — Mercurial, Git, etc. — is a place where your expertise and effort would be not only appreciated, but required, if only because I don't use those systems myself. Scalability and performance improvements are always welcome. And I'd love to see ViewVC's MySQL integration expanded — why not use the database as a glorious cache of information that takes too long to harvest at runtime from the VC system?

So, while I might casually kick myself in the backside for finally and barely eeking out a new release of ViewVC, I do so understanding now that this may just be the way things go for mature software, thankful for ViewVC's many users, and happy to be working on free code.

Take ViewVC 1.1.0 for a spin. Kick the tires. Send feedback — positive and negative — to the mailing lists. I might be slow to respond, but "I'm not dead!", and neither is ViewVC.

.o O ( "I think I'll go for a walk … I feel happy." )

Tuesday, April 21, 2009

On hymns and praise songs

Yep, this pretty much sums it up.

Liz, I know this doesn't count as "writing more on my blog", but at least I've given you something to read via my blog. Close enough?

Thursday, March 26, 2009

I am a worship leader. (And so are you.)

While contemplating God's love letter to artists, and directly on the heels of a message at church last night about the ways in which Satan attacks Christians, I find myself staring directly into the eyes of some of the same old insecurities that have haunted me over the past few months. I'm ready to 'fess up about those now.

I have some musical talent. I think I can even offer a pretty objective evaluation of that talent:

  • I sing, but my voice is thin in higher registers and can suffer pitch control problems in lower ones. And, probably due to vocal abuse, the clean tone I could produce ten years ago is giving way to something more crackly.
  • I play guitar, but am self-taught, and have never invested enough into learning either the acoustic or electric guitars to move beyond competence and into proficiency.
  • I'm not such a fine songwriter. I'm lyrically uninspired, and melodically challenged. But I'm really good at taking another person's song foundation and enhancing it (with neat arrangements, harmonies, counter-melodies, motifs, and so on).
  • I can wield digital audio software skillfully, and have even developed some pretty neat sonic "tricks" that have served me well. But I can't seem to produce output that sounds quite like I envision. (A recent attempt at something Counting Crows-ish was referred to — behind my back, mind you — as "yacht rock", with an apparent Air Supply influence. Ouch.)

I think it's healthy for folks to be able to recognize what they truly can and can't do. Wouldn't you agree?

Then here come the demons. "Why, again, are you helping to lead worship at yet another church? You don't fit the mold. Real worship leaders have hip haircuts; wear trendy clothes; are 10 lbs. underweight (instead of 20 lbs. over); have at least eight stomp boxes and a sound engineer devoted solely to their rockstar groove; sing with perfect pitch, tone, and timbre; and can spew God-honoring utterances while ripping fingers-of-fury blazing guitar solos. With their eyes closed and both hands raised to the heavens. You are no worship leader. You are, at best, background noise."

Oh, man, that stuff stabs. Plunge. Twist. Gush. (It hurts even now, just thinking about it.) But that's okay — I figured out some time ago how to protect myself from those barbs. See, I've dealt with this in the past by simply denying that I was (or was attempting to be) a worship leader. I was "just trying to help with the music program", or something like that. After all, the Enemy can't beat me in a race I refuse to run, right?

Sadly, I was wrong: I am defeated because I refuse to run. My responsibility as a created being — the tax on my very existence — is to worship the Creator. But my responsibility as a human is to lead (by encouragement, example, or otherwise) my fellow humans to do the same. My roles as a husband and father, especially, demand this service to my wife and children. And how can I be seeking loopholes in the Covenant when I've failed to lead those who I would consider some of my closest friends to worship God with me? No, whether I accept the label of "worship leader" or not, the responsibility is mine. God's will begins with thanksgiving and worship.

I appreciate the perspective Geoff Janes provides on the search for God's will at http://geoffreyjanes.blogspot.com/2009/03/what-is-gods-will-for-my-life.html. I should consider myself fortunate to have discovered — through the talents God has given me and the discernment of trustworthy others — a piece of God's extended will for me at this time: demonstrating that thanksgiving and worship with a guitar in hand at Providence Baptist Church. It may only be for a season — that is not mine to know. But at any cost, I must therefore seek only to do that will, and waste neither energy nor emotion chasing the unattainable stereotype constructed by the Enemy. My skills are not worthy of renown. Fortunately, they weren't fashioned for that purpose.

So today, I reject as invalid the notion that leading worship isn't my job. I accept as valid criticism that I've not been particularly good at this in the past. I apologize to my family and friends for not living a life that consistently and convincingly compels you to worship, too — love demands better than that. And as for that background noise I'm ever-so-capable of? I'm cool with that. But may it be a joyful noise from this day forward.

Tuesday, March 24, 2009

God's love letter to artists

Jon Acuff (of Stuff Christians Like) writes today about God's love letter to artists. Like Jon, I've overlooked multiple times the Artist Ordination Ceremony there in the book of Exodus. I especially appreciate Jon's challenge to those gifted artistically to use their gifts to "rebuilt the temple" — to improve the physical, spiritual, and emotional lives of our fellow man. What better way to bring glory to God than to use the tools He has given to edify the objects of His greatest affection?

Monday, March 23, 2009

"Copying Isn't Theft", re-thunk

Over at QuestionCopyright.org, I noticed an interesting public challenge: take one woman's little ditty about how copying isn't actually theft (because it doesn't result in the loss of the original item), and play around with it musically. So this afternoon, I spent a couple of hours doing just that.

Here are the lyrics of the song, originally by Nina Paley, with minor tweaks to fit the cadence of my version of the song:

Copying isn't theft. Stealing a thing leaves one less left. Copying it makes one thing more. That's what copying's for. Copying isn't theft. If I copy yours, you'll have it too That's one for me and one for you. That's what copies can do. If I steal your bicycle right out from under you, You'd have to take the bus. But if I just copy it, making one into two, There's one for each of us! Making more of a thing — That is what we call copying Sharing ideas with everyone That's why copying's fun. That's why copying's fun. Copying is fun.

And here's the recording, in a couple of different formats:

Monday, March 16, 2009

Heaven and hell

I came across the following joke today in the comments section of a particularly good post on Jon Acuff's Stuff Christians Like blog. (Thanks Helen, whoever you are.) It's … er … something to chew on.

A man spoke with the Lord about heaven and hell. The Lord said to the man, "Come, I will show you hell." They entered a room where a group of people sat around a huge pot of stew. Everyone was famished, desperate and starving. Each held a spoon that reached the pot, but each spoon had a handle so much longer than their arms that it could not be used to get the stew into their own mouths. The suffering was terrible.

"Come, now I will show you heaven," the Lord said after a while. They entered another room, identical to the first - the pot of stew, the group of people, the same long-handled spoons. But there everyone was happy and well-nourished.

"I don't understand," said the man. "Why are they happy here when they were miserable in the other room and everything was the same?"

The Lord smiled, "Ah, it is simple," he said. "Here they have learned to feed each other."

Thursday, March 5, 2009

Today, I feel like a successful husband

Determining if you are succeeding as a husband probably involves some pretty unruly psychological calculus, but today I feel like a successful husband. Why? Did my wife express her love and devotion in some particularly convincing way? Was I presented a trophy etched with "Best Hubby 2009"? Is the Internet community hanging on my every tweet to find some sage advice on being an ideal mate? Not hardly. It's for much less obvious reasons that I feel this way.

Last night, as Amy and I left church, she had a huge smile on her face and she said, "I think I've found my place".

This was the first Wednesday evening service we've attended at our new church. After the service last night, Amy and I participated in practice sessions with the church's music team for the first time. The music director and pastor have graciously agreed to let us try to work to bring a slightly more contemporary flavor to the worship music of the church. So I added my guitar to the piano and keyboard sound already present, and Amy is donating her voice to the praise music and to the choir. It was the participation with the choir that had Amy so thrilled last night.

What has Amy's happiness as a musician to do with my success as a husband? Everything. I can rest well at night knowing that I have encouraged her to serve the church in any capacity she desires and feels gifted to serve. I have worked to arrange meetings with the pastor and music director so we can research this area of service. And I have consistently recognized, praised — and even constructively criticized, when necessary — Amy's wielding of her God-given musical talents. And someday, when God blesses her obedience and service to Him in this matter, I will be able to both share in her joy (three-point shot, nothing but net) and claim some of it for myself (the assist).

Could success as a husband really just boil down to using unconditional love to guide my wife toward the likeness and service of Christ?

Thursday, February 26, 2009

Subversion desktop wallpaper

I admit that I can be easily distracted into any number of time-swallowing tasks of dubious universal benefit. The last time I had an airport layover, I succumbed to another such distraction — designing Subversion desktop wallpaper for my new-at-the-time laptop. I didn't have a long enough layover to do anything graphically groundbreaking, and I'm not quite distracted enough right now to bother generating fifteen images of various sizes and resolutions. But here's what I have — do with them what you will:

Monday, February 23, 2009

meme — a bogus etymology

The American Heritage® Dictionary of the English Language defines the word "meme" like so

meme (mēm)
n. A unit of cultural information, such as a cultural practice or idea, that is transmitted verbally or by repeated action from one mind to another.

The word apparently finds its origins in the same sorts of places as the words "mimic" and "mime" (meaning "to copy; to imitate"). But I couldn't help but notice that it looks like "me me" without the intervening space. "me me" … two "me's" … "me too!" (sometimes represented as <aol/>). When it comes to Internet memes, I suspect my bogus etymology of the word reveals more about the motives behind these information transmissions than the Greek can offer.

Sunday, February 15, 2009

The year change came to America

[If you think this post is about Barack Obama, you'll be sadly mistaken. This is my blog, by golly; Barack has his own.]

For Christmas, I got Amy something I'd wanted to get her for years: a couples devotional guide. We've each had our private times of Biblical study and prayer, but had never really formally had a dedicated daily time of joint reflection and discussion. So she was as thrilled as I expected when she unwrapped Moments Together for Couples (by Dennis and Barbara Rainey). This is a 365-day devotional. The entries are short — one page per day — with suggested discussion topics and a prayer guide. That seemed to me to be just about the right amount of effort to keep us interested without exhaustion, especially knowing that it would be at day's end when we'd likely be reading this thing.

On January 1, 2009, we read the first entry together. When we got to the suggested discussion topic, we got a lot more than we bargained for. What resulted was a two-hour long conversation that was really hard to have, but ultimately uncovered hidden expectations, disappointments, and wounds that we had no idea were present in our marriage.

Amy and I have always had a great marriage, but somewhere over the course of the past eleven years, small fissures had begun to form in the foundation of our relationship. The added weight of parenting and relocating from Chicagoland and stress caused by our church situation had exacerbated the problem. Fissures were becoming cracks of the worst kind — the kind that can't be immediately recognized on the surface. I don't believe we were at that moment at risk of catastrophe, relationship-wise. Our commitment to one another is non-negotiable and permanent. But it's a terrible thing to settle for "I do" or "I will" when "I will, and I really really want to" is within reach.

And so on January 1, 2009, the healing that comes from honesty, from openness, and from renewed devotion to one another and to God came to my marriage and, by extension, to America. I am having the very best year of my entire life. I feel like an entirely new man. I have immeasurably lower levels of stress, higher allotments of patience, and am finally learning to love as God wants me to love. I'm learning to trust God in ways I've never been able to before. And all those in my sphere of influence reap the benefits, too! How awesome is that?

Amy and I have faithfully attended to our devotional book every day of this year. We learned quickly that if we read and discussed immediately after putting the boys to bed (instead of just before we planned to go to sleep), we were much more likely to have enough energy to engage the discussion topics. We actually look forward to this time of our evening — it's one of the highlights of our daily routine.

Are there fissures, cracks, or full-fledged crumbling in the foundation of your marriage? I urge you — no, I beg you as a firm believer that a strong family is a strict prerequisite of a strong world — to invest dedicated attention to that problem. Talk to your spouse. Don't be afraid to lay everything on the line; to be completely vulnerable. Read books. Watch movies (such as the surprisingly fantastic Fireproof). And if your spouse won't talk to you, then talk to someone who truly understands the seriousness of the marriage commitment and can help you repair yours.