Signs that you're getting old

Lennie was born on June 24, less than two weeks before July 4. As happens with new parents, we hadn’t been sleeping very well, and though we expected your standard whistley firecrackers in our neighborhood, some neighborhood kids had more in store. Sometime late on the night of the 4th, we began to hear great reverberating booming sounds issuing from the cul-de-sac a few doors down. As in our windows rattled. There was definitely no ignoring these sounds, and as we had finally gotten Lennie to sleep, it was time for us to rest some. I angrily tossed on some clothes and stomped down to the cul-de-sac to see what was going on, and the son of my retired-military neighbor began hastily packing up whatever gear he and his buddy had been using. I confronted them and asked if they were making all the racket, and they denied it, looking rather panicked. I suppose I probably did come off as a little deranged. I glared at them and told them that if I heard the noises again, I’d — I’m a little embarrassed at both the fact and the wording of this statement — “call the law.” Then I stomped back to my house and got back in bed and probably was awakened shortly by my crying child. We later reflected on the incident and giggled over my phrasing and the picture I must have made, all but shaking my fist at the good-for-nothing whippersnappers who had robbed me of my sleep. That, over three years ago, was the first sure sign for me that I was beginning to show some age.

Fast forward to this evening for sign number two. Since before we had Lennie, we’ve done Halloween at our friends Dave and Karen’s neighborhood. The neighborhood we moved into last November has its own big Halloween bash, though, and we wanted to participate in that this year, as we’re trying to do better about letting Lennie out of the basement during daylight hours so that she can interact with neighborhood kids near her age. So our neighborhood has a cookout for Halloween, and everybody runs around with their kids for a while and hands out candy for a while and eats hot dogs at some point, and it’s all very hectic and disorganized, which is fitting for a holiday like this. With two small children and with three mouths to get fed, we had at some point to leave our Halloween candy unattended, which seemed safe enough from where we sat in the dark outside our next-door neighbor’s house. Oh, we figured there’d be some overzealous kids who’d take more than two or three pieces of candy, but the abuse we discovered after dark was really shocking.

At one point, I went over to check our candy level and found some teenagers sifting through the bowl to find the good stuff, which they were taking liberal helpings of. They scattered as I approached. Even after this pilfering, the bowl was nearly full, and full of good stuff (it hadn’t been too long since we had set some more out). Satisfied that we weren’t going to be short-changing the neighborhood kids, I went back over to eat another hot dog. A few minutes later, we packed up to bring Lennie home for bed, and as we approached, I saw a couple more teenagers hovering around our bowl. I could see in silhouette that they were each taking multiple great big handfuls of candy. I made some noise as we approached and they scattered, and I couldn’t help saying something snide to the effect of “try to leave some candy for the little kids” as I passed. Even having witnessed the greed in silhouette, I thought surely there would be some good candy left to hand out to honest trick-or-treaters, but the bowl was empty save for a few cheapo suckers.

Later, I was stewing over this a bit and found myself thinking things like “what could you possibly do with all that candy anyway,” for surely even as a teenager with unfetterable desires, I would have known that double-handfuls of candy times a few dozen houses would be more than I could be up to glutting myself on in any reasonable amount of time. And from this bit of retrospection, I thought about greed generally and supposed to myself that perhaps part of growing up was learning to balance greed vs. what’s reasonable (though I think this is probably flawed, as there are plenty of grown-ups who can’t seem to do this). And from there I got to thinking about it in terms of empathy and how maybe that was the actual defining characteristic of maturation, for while I was a little personally miffed that there weren’t a couple of sleeves of Whoppers and a Reese’s cup or two left over for me to enjoy, what really bothered me was the fact that any more trick-or-treaters I had to face for the evening would get the filler candy because a bunch of teenagers couldn’t see far enough past their own desires to understand that they’d really be as happy with 5 pieces of my candy as with two dozen at no cost to the pleasure of little kids who would come behind them.

There was no shaking of fists, but I can’t help seeing this series of thought processes as sign number two that I’m getting old. In fact, I wonder if becoming introspective about the nature of greed and maturity isn’t itself a sign of maturity into a different phase of adulthood. Surely sleep deprivation had something to do with my previous fist-shaking, but perhaps a certain general hot-headedness was at play as well; I was assuredly more hot-headed about other things when I was a slightly younger adult. Of course, the most famous of fist-shakers are the real old-timers, and if my brief history to date as an old-timer in training is any indication, I’ll be a righteous fist-shaker indeed. This is fitting enough if the old cliche about starting and ending life in similar states of mind and body is true. As I was born and will die incontinent and toothless, it appears that the beginning and end of my adult life may be book-ended by mirrored behaviors as well.

Peas and Carrots

Well, Finn is an eater now. About a month ago, I wrote that he’d nibble on a carrot if one was offered, but at the time, he still wasn’t very much into eating spooned food. The last couple of weeks have seen a lot of progress on that front. At first, I could jam a spoon of rice cereal into his mouth and he’d sort of gag but keep most of it down. This past weekend, he really turned a corner and started opening up his little bird mouth and even moving his head (like a cobra?) to get to the disgusting purees I offered. So far, his favorites are brown rice with peas (shudder) and sweet potatoes. He’ll eat a medium jar of the former in two meals, which still doesn’t represent too hearty an appetite, but it’s a big step forward. We also have these barley teething biscuits that are, post-teething, the nastiest thing I’ve ever voluntarily touched. They dissolve pretty quickly into a light brown sludge that coats his chest and hands. I’m not terribly squeamish, but even I wince a little to pick one of these slimy things up for him when he drops it. Once we’re through this box, I think we’re switching to Zwieback toast.

Finn is also a full-on crawler now. Mleeka and others wanted to allow that he was crawling long before I would accept his movements as crawling (I mean, c’mon, wallowing and spinning around on your butt to get to things within a 3-foot radius is impressive for a little tyke, but crawling it ain’t). Finally, a couple of weeks ago, he started doing real crawling, and now he gets around without any trouble, often making a bee-line for the cat’s water dish, which he delights in turning over. He also pulls himself up on things and can stand up assisted. This weekend, he woke up and crawled out of our bed and fell to the floor (which is a 3-foot-plus drop). We installed a gate at the top of our stairs and are trying to decide now what to do about his out-of-bed crawling, whether we can think up some sort of preventive measures or whether to see how long it takes him to learn a valuable lesson on his own about depth perception and exploring a bit more carefully.

Counting leaves

I forget how it came up, but Mleeka was telling me the other day that she was trying to explain to an inquisitive neighbor what it is I do for a living. She knows I do computer stuff and that it’s most often web-related or system-admin-related, but these are still pretty amorphous things to somebody who doesn’t actually perform the tasks they entail. While raking leaves today, I was thinking about how I might have answered the question, which is a hard one for me to answer in a way that would be very meaningful to non-developers.

In a nut-shell, I call myself a web and analytics programmer, though I devote a lot of time to systems administration as well. The web part is fairly easy to explain. If you look at my company’s web site, you’re looking at my work. I don’t make the pretty pictures that compose the web site, but I take care of the parts that make it behave as it does, from sending emails to letting you post to the forums to displaying various types of content. I’m like the mechanic for the web site.

The analytics part I think can be a little harder to capture. At a very high level, I help facilitate the collection of statistics about our product and our web sites. At a lower level, I try to help coalesce these bits of data into meaningful, actionable numbers. For example, if we know that we have X users and Y monetizable actions performed in the product daily, then we can track Y divided by X on a daily basis and watch the curve to see what kind of money we’re making per user per day on average. If a given monetizable action begins to trend flat or downward, we might consider trying to make it easier to use the feature so that we make more money off of it.

The thing I’ve learned over the last year or so is that as you get more and more data, it gets really hard to do anything useful with it on demand. Imagine that each day, 100,000 users’ products phone home to check for a product update (I’m just making that number up). You know then that you have 100,000 users per day. If you want to track this over time, it only takes 10 days before you’ve got a million pieces of data to try to extract something meaningful out of. If you’re tracking more than one piece of data per user, your data volume increases at an alarming rate as your user base grows. The more data you have, typically the longer it takes to cull through it. And yet you have executives trying to make decisions based on this data who don’t want to sit and wait a long time for reports to run. The trick is to aggregate the data as it comes in, and as I was raking leaves this morning, I came up with what I think is a useful way of explaining how scale affects the ability to report and how aggregation helps. It’s easy to accept propositions about scale and aggregation abstractly, but concrete examples are often useful.

So imagine that you’re tasked with counting leaves. Further, imagine that on any given day, you might be tasked with reporting how many leaves there had been on some past day. Or more specifically, how many red leaves vs. yellow vs. orange. If you recount every time somebody asks you, it’ll take more time than is reasonable. The first step naturally would be to group your leaves by day (grant that this is physically possible). So on Monday, you count all the leaves and put them in a pile with a sign stuck in the ground that says “Monday: 45,031 leaves.” On Tuesday, you do the same for any other leaves that have fallen, and so on. On Friday, if somebody wants to know how many leaves you raked on Monday, you just look at the sign and tell them rather than re-counting. But what about leaf color? Well, you do the same thing, but you make a Monday pile for red leaves, a Monday pile for yellow, and a Monday pile for orange, each with a sign noting how many leaves of each color for that day. Then you add the sums and post a sign with the total for all colors for the day. If you do this as you go, then you can very quickly get back to the counts for any given day and report without having to recount. The general idea is that it’s much easier to add sums than it is to recount. The tricky part is defining in advance what sorts of information you want to know about your leaves before you ever do the counting; else you have to recount everything for all time, sorting into different piles to get counts per organizational criterion.

Being a sysadmin

My sleep is seldom affected by being one of a few people at my company who spends part of his time doing system administration, but this week has been a sure exception. We moved our whole public server infrastructure to a new section of our data center (complete with new IP addresses and routing), implemented load balancing of two separate clusters of web front-end machines, migrated two database servers to new hardware, and set up database replication for our web-facing databases. And we did it in sort of a last-minute, pre-product-launch scramble with what shoestring planning we could cobble together, while working on other high-priority projects and with very limited down time and, as far as I can tell, very little in the way of experience among our staff with implementing any of these things in a production environment. I’m not sure it could have gone more smoothly had we planned it for three months. It’s inexplicable, really. Of course, helping to make all this happen necessitated my putting in long hours over the weekend and waking up at times like 1:00 a.m. or 4:30 a.m. before or after an otherwise full workday to minimize the impact of down time. We coordinated this with sysadmins in Germany, California, and Tennessee and a data center in Texas. With my dad coming into town this weekend and a pumpkin-carving planned for tonight, I aim to take off around lunchtime (having started work at 4:30 this morning after staying up late to watch the Red Sox take the second game of the World Series) unless somebody threatens to fire me for doing so.

Money does not have mouths or eyes

A brief conversation I had with Lennie while going to the drive-through ATM today:

Lennie: Daddy, the bank is sort of like our house.

Me: How’s that?

Lennie: Well, it has bricks like our house.

Me: Do you think it has beds like our house?

Lennie: Yes, probably so.

Me: Do you think the money sleeps in the beds?

Lennie: No, money does not have mouths or eyes, so it does not sleep in beds.

Beerfest

This year, I went to the Knoxville Brewer’s Jam for the first time in my nearly nine years in Knoxville (this was its 13th year). I can’t help calling it the beerfest, thanks to that movie I didn’t have an adequate pain threshold to watch. I’m usually too cheap to spring $25 to go drink beer, my general philosophy being that I could get a lot more beer to drink in the comfort of my own home for $25 than I’d get milling about like a cow with a bunch of other drunken cows for the same price. And all in all, I think my instinct has been more or less right, except that you can find beers at this event that you won’t find on a daily basis, and I’m less likely to see a guy in lederhosen in my house unless I’ve drunk really entirely too much beer and chased it with some hallucinogens.

I was on a mission today to try stout beers, and I was really disappointed that there weren’t more. I’ve been turned on lately to the Highland Brewery’s oatmeal porter, which I can get at my local Kroger, and I had high hopes for their stout, but they didn’t bring any. I had their Gaelic ale instead, and it was good but was no stout. I was delighted to find that Rogue Ales had a booth, and I had two glasses of their Shakespeare Stout (which I had previously had and really liked at Barley’s here in Knoxville), but I was disappointed that they didn’t have any of their Chocolate Stout, which would have been a new one to me. Probably my most memorable beer of the day was the Duck-Rabbit Craft Brewery’s milk stout, which is brewed with highly toasted hops and lactose, which gives the beer a slightly milky smell (unless my olfactory sense was tricked by my reading the blurb) and a very slight sweetness that balances the toasted hops very nicely (that’s how Dave put it, at least, and it sounded about right to me). I liked this one enough that I wrote the brewer a quick note when I got home.

I tried a number of pale ales and IPAs and one ESB, and I was generally pretty cold to them. Some were decent, but a number of them had a flatness to them that just made them not very interesting to me.

Even with pre-purchased tickets, we had to wait in a 45-minute line to get into the event, and though I didn’t have to wait in line for my first beer, lines got harder to manage as more people arrived and especially as brewers started running out of beer and the choices narrowed. After about three hours, it became unpleasant to weave through the crowd and stand in line with increasingly glazed-eyed people jockeying for positions in the decreasingly available queues. I’m glad I went, and I enjoyed it (in spite of a near-altercation in the porta-potty line the end result of which was my basically sprinting to get to the john before a guy in what can properly be called nothing other than a non-event-sanctioned stealth line got there, enough to his chagrin that I emerged from the potty prepared thankfully in vain both to receive and administer a punch, my alternative after negotiating the 20-minute bathroom line being to stand there a grown man and piss my corduroy pants, which dire straits made running to the potty no small feat, let me tell you). Chances are good that I’ll go again. But honestly, I’d probably rather spend $25 on micro-brews and invite a few friends to bring $25 worth of microbrews apiece over and sit in the comfort of my own home to try them out.

Tags:

Lackluster

The Cubs just didn’t seem to be in the game last night. Zambrano was pitching well, and I guess there wasn’t much reason to be fired up until the game got interesting later. Heck, Zambrano had just about the best hitting of the game as well. It’s easy to sit here and Wish Piniella hadn’t pulled Z out for Marmol, but Lou and the commentators are right: Marmol has been a great resource late in games, and last night just wasn’t his night. Changing pitchers late in the game always freaks me out a little if the guy on the mound is throwing the ball well, but I can’t say it was really a rash move. The Cubs play in Arizona again tonight with Lilly starting, and then they head home on Saturday for the next two games (here’s hoping there are two games at home, at any rate!). You can bet I’ll be glued to the TV.

Linux in the 21st Century

For years now, I’ve been an avid Linux user. I (half) joke about how crummy Windows is, and I hate when I have to support Windows, though I’m really not as much of a Linux zealot as you might think. I have to confess that there’s a part of me that likes knowing how to do arcane things that lots of other people don’t know how to do. See all that text scrolling by in my simple terminal window? That’s me installing software, bucko. No graphical installers with smiling paperclips for me. I really do like understanding how my system works (more or less), being able to look under the hood to troubleshoot things. I like not having to understand how a registry works in order to tweak software (though I do have to know how to edit a text configuration file, which might be as scary to others as a registry is to me). But some of my old school willingness to dispense usability in favor of a dumb sense of pride and configuration simplicity is wearing off. More and more, I’m finding that there are tools it’d be nice to have that aren’t best implemented in a terminal application. Sure, I could write a program to read a text file I store meeting requests in and send me an email when I’m about to have a meeting, but that takes work and seems not terribly reliable. More and more, I’m looking for tools to handle these sorts of tasks for me, and I’m finding that I like them. I’m emerging from my self-imposed prison of command line solutions and testing out tools that just might help me work like a normal human being, and with some surprisingly good results.

One such tool is Korganizer, the KDE desktop manager’s calendar and organizer tool. In recent months, I’ve been required to attend many more meetings than in the past, and trying to keep them all straight has been a pain. I had tried using Mozilla’s Sunbird calendar program at various times in the past, and it’s a fine piece of software, but it clutters up my workspace. In addition to my mail window, my browser, my irc client, and my tabbed terminal window, I also had to have Sunbird running, and it just irritated me. So I recently tried Korganizer, which it turns out will hide in your system tray and pop up alerts reliably. I’ve been using it for a couple of months now and really have no complaints. It’s a little sluggish on my system, but not so bad that it keeps me from using it. I can tolerate a little UI lag when adding events if the trade-off is reliable notification of upcoming events, the ability to suspend or dismiss events, reasonable handling of recurrence, and a view of my day or week (or month) that lets me see at a glance what’s on my schedule. And Korganizer has all of these things. It also handles todo lists and journals, which I guess are like meeting minutes. I started using todo lists but found that having to open the app to see them made them less useful. I haven’t played with journaling. There are a bunch of buttons at the top that I haven’t done much with, though I’m sure they’re useful. The system tray utility seems to use up no appreciable resources, and that’s a big win on a system that runs dev mysql and apache servers in addition to all my desktop software. I’m sure there are things that Korganizer could do a lot better (I wish I could see our executive calendars, kept on a remote groupware server; as it is, I’m an island), but it beats holy hell out of hacking together something using text files and output from the “cal” command, and it has become a must-have tool for me.

Next up is Komodo Edit. I’ve taken comfort in the simplicity of the command line and the non-GUI text editor since I became used to editing files in pico and reading mail using pine back in college. When I began doing a lot of programming and learned a lot of the cool things you can do using the vi editor, I couldn’t imagine I’d ever go back to an IDE that would require mouse moves and menu navigation. My fingers are hard-wired to do vi commands now. I can do text replacement in my sleep (want to add a tab to the beginning of lines 23 – 47? type: “<ESC> :23,47s/^/\t/”; oops, wanna undo it? just type “u”; then “:wq” to save and close), and I have trouble editing in any other way. One of my few beefs with vi has always been that it’s hard to do operations that span more than one vertical span of screen real estate. To delete a line range, you have to count lines or look for line numbers and then delete or cut. If you’re trying to move a hundred lines around, this can be a minor pain. A few years ago, I tried out ActiveState’s Komodo IDE. It’s built on top of Mozilla’s code and so is a cross-platform solution. At the time, it was very sluggish and didn’t offer much that interested me. Sure, there was code completion and syntax highlighting, but I can get the latter in vi, and the former almost always winds up irritating me more than it helps me. Plus it cost money to use the non-evaluation version. Recently, ActiveState and Komodo have been in Mozilla news. They’re starting a project to open up parts of their source, it turns out. In reading about this, I learned about Komodo Edit, which is the light-weight version of their pay-to-play editor. It’s free and pretty responsive (probably because it’s doing a lot less junk behind the scenes). Most importantly for my use, it has vi key-bindings. So I can fire up Komodo Edit, avail myself of what scrolly and selection capabilities are useful to me, and still do the weird “:23,47s/^/\t/” sort of commands that my fingers are so used to. What’s more, I can define projects and view select files in a sidebar, so I do a lot less typing to navigate my file system when working on projects that require me to edit a number of files. I’ve also discovered that the find and replace helps out sometimes when there’s some regex that I can’t quite work out by hand (e.g. when I want to replace with newlines). I probably use a tiny subset of Komodo Edit’s feature set, but they’re pretty useful. I find that if I’m doing one-off edits or will be staying in one file and toggling to the command line to test (e.g. when working on a perl script to parse a log and display summary info), I do better to stay at the command line, but Komodo Edit is fast becoming not a “must have” but a solid “nice to have when I want it” tool.

My latest interest is in launchers. I never really caught on to Mac OSX’s Quicksilver launcher. Or it’s not that I didn’t get it at some level as that I didn’t see that it was a killer feature for most Mac users, who I think of as people who like to draw pretty pictures more than as people who tend to want to remember abstruse key combinations needed to make a launcher behave in useful ways. But as I find myself more and more trying to get back to documents or applications that are buried in the file system or in menus, I find myself wishing I could just type a couple of keys to pull up the apps or docs. KDE’s Katapult looks very slick and promising, but it’s geared toward KDE applications and interactions, and I can’t seem to pull myself away from the Gnome desktop manager. Although I’ve read that Katapult is easy to extend, documentation seems poor at best, and I suspect you have to drink the KDE Koolaid and know a bit about working with KDE frameworks in order to make much headway. Gnome has an app named gnome-launch-box that is sort of like Katapult, but it’s very ugly. Although you can run it without the window initially on top of other apps, I can’t figure out how to then provoke it (in Katapult, you press CTRL-space and the slick interface appears instantly). It’s pretty responsive in terms of finding and launching folders and applications, and it handles multiple matches (e.g. a list pops up displaying both Korganizer and Komodo Edit if you type “ko”) and seems to be wired for extensibility, but by the developers’ own admission, it’s just not ready for prime time yet. Ubuntu ships with a tool called Deskbar that is a sort of launcher, but it hasn’t worked very well for me so far. It’s hard to predict what results it’ll return and in what order, and though it appears to be fairly extensible, a plugin I wrote for it (actually, I just modified the bugzilla plugin to point to my bugzilla install) is quirky at best. So while I’m on the hunt for a good launcher, none of the options I’ve found to date quite cut the mustard yet.

Of course I use Flock and Thunderbird. In the next few weeks, Flock will be making a big step toward its original vision for the browser as a social tool. Thunderbird is pretty low-frills but has served my email needs very well for roughly five years now. But these apps are old news for me, so they don’t really fit into this post, which outlines a recent foray into a broader set of GUI apps. In the same category are xchat and OpenOffice.org.

So, there you have it. Back into my dork cave I go. All this time out in the land of the first-class user has instilled in me a craving for a darkened room and the glow of a terminal window flickering up at me in a chunky Courier font.

:wq