Archive: April, 2013

The EST I needed

posted by Jeff | Tuesday, April 30, 2013, 11:36 PM | comments: 0

Diana went out right when I got home from work for a haircut, so I engaged in a little exclusive Simon time and took the boy to the Lizard for dinner. It was exactly what I needed.

Simon has really challenged us both lately, as he has constantly been testing us over every little thing. No matter how much you try to stay calm, he can really get under your skin. I think we're finally starting to keep our responses measured, fortunately, but it has been quite a journey. I needed him to be awesome tonight, and he delivered.

We went to the restaurant without a parachute... no toys, familiar snacks, etc. We started with a little popcorn, picked out letters on the kid menu word search, and before you knew it, our dinner arrived. Grilled cheese and mandarin oranges. He hasn't been a fast eater at restaurants, but he mostly goes the distance. Tonight he was chatty and physically affectionate, and a total saint.

When we got home, he quietly played with his cars without any freakouts (he gets pissed when he can't park them precisely), and then we went up for bath time. He volunteered to go, and did so enthusiastically. In the tub, he was totally cooperative, and didn't complain when I toweled him off.

Then we watched a little Sesame Street, while he snacked on the remainder of his grilled cheese. Lately his enthusiasm has led to jumping on us on the couch, but he was mostly good tonight. He climbed right up on my back, and we brushed teeth, read books, cuddled on the floor, and he crawled into bed, snuggling with Tiger. He was perfect.

Like I said, this was the kind of time that I needed with him, after all of his drama. I know every day won't be like that, but it's good to see him be sweet and well behaved. I worry about him lately, because his speech delays in some ways seem like they're getting worse. He's actually dropping syllables from words he knows. I'm not a speech therapist, so I don't know what to do with that. He has been reevaluated for the subsidized preschool, so hopefully that works out.

Tonight it felt good to be Simon's dad. I need more times like that with him.


Building a live blog app in Windows Azure

posted by Jeff | Sunday, April 28, 2013, 11:21 PM | comments: 0

If you're a technology nerd, then you've probably seen one technology news site or another do a "live blog" at some product announcement. This is basically a page on the Web where text and photo updates stream into the page as you sit there and soak it in. I don't remember which year these started to appear, but you may recall how frequently they failed. The traffic would overwhelm the site, and down it would go.

So I got to thinking, how would I build something like this? We've got a pretty big media day at Cedar Point coming up for GateKeeper, and it would be fun to post updates in real time. Ars Technica posted an article about how they tackled the problem a couple of months ago, and while elegant, it wasn't how I would do it.

My traffic expectations are lower. I don't expect to get tens of thousands of simultaneous visitors, but a couple thousand is possible. The last time we even had the chance to publish real-time from an event was 2006, for Skyhawk. Maverick got delayed the next year, and that event was scaled back to a few hours in the morning. Still, the server got stressed enough back in 2006 with a lot of open connections, in this case because I was serving video myself, and I didn't write the code that I write today. Regardless, I still wanted to build this using cloud services, as if I was expecting insane traffic. The resulting story, from a development standpoint, is wholly unremarkable, but I'll get to why that's important.

So the design criteria went something like this:

  • Be able to add instances on the fly to address rising traffic conditions.
  • Update in real-time with open connections, not a browser polling mechanism.
  • Keep as much stuff in memory as possible.
  • Serve media from a CDN or something not going through the Web site itself.
  • Not spend a ton of time on it.

The first thing I did was wire up the bits on the server and client to fire up a SignalR connection, and have an admin push content to the browsers. I won't go deeper into that, because there are plenty of examples around the Internets showing how to do it with a few lines of code. Later in the process, I added the extra line of code and downloaded the package to make SignalR work through Azure Service Bus. This means that if I ran three instance of the app, the admin pushing content out from one instance, will have the content go via the service bus to the other instances, where other users are connected via SignalR. It's stupid easy. Adding instances on the fly and make it real-timey, check.

Next, I needed a way to persist the content. Originally I toyed with using table storage for this, because it's cheaper than SQL. However, ordering in a range becomes a problem, because while you can take a number of entities in a time stamp range, and then order them in code, there's no guarantee you'll get that number of entities. After thinking about it, SQL is $5/month for 100 MB, and I was only going to be using it for a few days. Performance differences would likely be negligible, and since I was going to cache the heck out of everything, that was even less important. I used SQL Azure instead.

Instead of using the Azure Web Sites, I used Web roles, or "cloud services" as they're labeled in the Azure portal. These are the original PaaS things that I was originally drawn to. Sure, they're technically full blown VM's, you can even RDP into them, but I like the way they're intended to exist for a single purpose, maintained and updated for you. More to the point, they have Azure Cache available, which is essentially AppFabric spun up across every instance you have. So if you have two instances up, and they use 30% of the memory of these small instances, that adds up to around a gigabyte of distributed cache, for free. Yes, please! I had my data repositories use this cache liberally. The infinite scroll functionality takes n content items after a certain date, which means different people starting up the page at different times will have different "pages" of data, but I cache those pages despite the overlap. Why not? It's cheap! Keep stuff in memory, check.

The CDN functionality is pretty easy too. I probably didn't need this at all, but why not? Again, for a day or two, given the amount of content, it's not an expensive endeavor. The Azure CDN is simply an extension of your blob storage, so there's little more to do beyond turning it on, adding a CNAME to my DNS, and off we go. CDN, check.

I stole a bunch of stuff from POP Forums, too. Image resizing was already there, the infinite scrolling, the date formatting, the time updating... all copy and paste with a few tweaks. I didn't do the page design either. Granted, most of it wasn't used, but my PointBuzz partner Walt did that. Total time into this endeavor was around 10 hours. Not spend a lot of time, check.

Here's the Visio diagram:

As I said, if this sounds unremarkable from a development standpoint, it is, and that's really the point. I'm whipping up and provisioning a long list of technologies without having to buy a rack full of equipment. That's awesome. Think about what this app is using:

  • Two Web servers
  • Distributed cache (on the Web servers, in this case)
  • Database server
  • A service bus
  • External storage
  • A CDN

For the four days or so that I'll use this stuff, it's going to cost me less than twenty bucks. This, my friends, is why cloud infrastructure and platform services get me so excited. We can build these enterprisey things with practically no money at all. Compare this to 2000, when the most cost effective way to run a couple of quasi-popular Web sites was to get a T-1 to my house, where I ran my own box, and paid $1,200 a month for 1.5 mbits. Things are so awesome now.

I'll let you know how it goes after the live event on May 9!


The stuff no one teaches you

posted by Jeff | Thursday, April 25, 2013, 11:55 PM | comments: 0

After making some remark about my senior year of college, my roommate from that year made a comment about how much we benefited from seeing the campus counselor/therapist around that time. I think she and I started to see him now and then during our junior year. I don't recall either one of us thinking we were totally screwed up, but it didn't hurt to get a professional perspective on how we were living our lives.

I've often joked about how there should be a manual for life, because for some reason, the experience of our elders never gets passed down to us in a meaningful way. I'm not talking about stuff like how to change your oil or build an f'ing bird house, but the really important stuff about relationships and work.

Let me give you a perfect example of how clueless I was. At the start of my sophomore year, during RA training, there was this girl that I ended up making out with at camp. She was a senior. My sum total of intimate experience with women at that point was embarrassingly limited. This particular one was a cross country star, but with unusually ample frontal proportions for a runner. I don't know if others would find her cute, but there was no question that she was attractive.

The making out occurs every day, going into the first week of school, and generally involves her being on top of me. She's aggressive, but I don't know what she's really after. One night, after watching Letterman in her room, oops, a boob comes flopping out of the giant T-shirt she's wearing. I'm so stunned by this that I really have no idea what to do. I mean, I know how sex works, but I have no idea what I should be doing.

By the second week of school, we "break up," which might be an exaggeration since I'm not sure that we were a coulpe in the first place. I don't think there was much of an emotional connection. I get to be good friends with a guy on my hall staff, who happened to date this girl the entire previous year. They were pretty much together most of the time, and he shares that she may have had nymphomaniacal tendencies (he was a psych major). She wanted it on demand, and frequently. That's when I started to put it together that just a little bit of cooperation with her, and she would have likely been a great teacher of many things.

Yes, it seems completely obvious in retrospect, but why didn't anyone ever teach me that breasts don't randomly fall out of T-shirts? In fact, I had a series of even more intense encounters my junior year, and I still didn't get it. It really didn't matter that these were not long-term relationship opportunities. At that point in life, the emotional maturity we have is awful to poor at best, so we might as well start learning the physical skills.

Here's another story. I'm at my first real non-retail job after college, running a government and school cable access facility. Truth be told, I had a lot of flexibility to do as I saw fit, which is probably not the best thing for a 23-year-old know-it-all to have. Early on, while I was figuring out what equipment to buy and get rolling, I started to reach out to certain people around town, and took over the basic bulletin board channels. About six months in, the committee I had to report to called me out for being an arrogant dick and refusing to work with people. I couldn't figure out why they were accusing me of this.

Over the next few days, I started to put it together. The secretary in my office, who used to handle the bulletin board requests in her specific way, was sabotaging me at every turn. She was telling people who called that I wouldn't do things, and it was generally not me at all. She felt like she was being replaced, so she set out to destroy me. In the end, they moved her out to one of the schools and replaced her, but it took months to undo that damage.

Again, why didn't anyone ever tell me that sometimes people are easily threatened in the workplace? I mean, I've honestly seen it in almost every job, and now I can identify it and deal with it. I'm sure I'm not the first person to encounter it.

Ah, these are the lessons we learn. I'm just not convinced that it has to be that way. Someone should prepare us for life's weirdness.


Parental push-pull

posted by Jeff | Monday, April 22, 2013, 10:54 PM | comments: 0

I'm not sure how many times I've written about the push-pull cycle that Simon engages in. I think I first noticed it when he became adept at walking, and it gets more extreme every month. In fact, I don't know how anyone considers 2 "the terrible 2's," because 3 is much worse. So many tantrums and constant boundary testing!

What's more interesting at this stage is that we, as parents, are constantly pushing and pulling. On one hand, we often try to leave him to his own devices, to fail and be forced to figure stuff out. On the other hand, we want so much for him to be "our little boy" and need us and give us hugs. It's funny how that works.

I can see how being a parent is going to get harder before it gets easier. Sleep deprivation aside, the earlier years were pretty straight forward. If he's hungry, feed him. If he's tired, put him to bed. If his diaper is full of shit, change it. You don't need to be parent of the year to pull that off. Now it's harder, with challenges around eating, potty training, exposure to the right learning resources... there is a lot to consider. It's harder to decide when to intervene in his latest tragedy, or let him flail around a bit.

Personally, I also push and pull in other ways. In the general sense, I feel like I don't get to spend enough time with Simon, and it bothers me. On the other hand, sometimes I think what he's doing is so mundane that I just want to do anything else! I'm trying to see what the really important things are to him, and be engaged for those moments. If there's anything that bothers me about my early childhood, it's that no one really care that much when I built a pinball machine out of my Erector set, a cardboard box and a giant marble. I don't want him to ever feel like adults don't give a shit about what he's doing.


Somewhere around 25, bizarre becomes immature

posted by Jeff | Friday, April 19, 2013, 10:59 PM | comments: 0

Diana and I watched Singles again recently. Aside from having one of the best soundtracks in the history of music, I just found the movie to be brilliant when I bought it in 1994. It wasn't just the snapshot of grunge style in Seattle, but the struggle to meet and connect with people just struck me as something we can all identify with. It's one of my favorite movies.

There's a part early on where Janet is talking to the camera about the desire to really embrace your youth. She says:

"I think time is running out to do something bizarre. Somewhere around 25, bizarre becomes immature."

Cameron Crowe's script really grabbed me with that line. Second only to Steve's drunk speech near the end in awesomeness, that line sums up everything that we seem to lose as we grow up. It was profound to me when I was 20, and it kind of freaked my shit out to hear it 20 years later.

When we are 20, the thing that seems most wild, making us feel alive, is going out to party and get drunk. OK, not everyone thinks that, but as infrequently as I did it, I have to admit that it was one of the things that made me feel like I was living life. Even if you are the club rat type, you eventually start to grow out of that.

So what is the value of doing things you or others might consider bizarre? Is it really being immature? At the ripe young age of 32, I had adventures in body piercing, and another at 37. Heck, I'm still thinking about poking more holes in my body. Is that wild? Why would I want to do that?

Others jump off of tall structures with a rubber band tied to their feet. Some travel to remote places where they put their lives at risk. I suppose some people might even go to an open mic night and sing. Is that wild? Why would anyone want to do that?

I think being bizarre in some outwardly obvious way is something we do to combat boredom, and also to keep life interesting. I don't think most people do it for attention whoring reasons, as an outside observer might suggest. There's a broad spectrum of reasons to break out of your comfort zone, ranging from dissatisfaction with your life to a deep understanding that there isn't that much at stake or risk to try new things. The former might be a little destructive, but the latter is really healthy, I think. I hope I can be healthy in that way.


The rapid evolution of video technology

posted by Jeff | Friday, April 19, 2013, 10:21 PM | comments: 0

When I bought my first professional video camera back in 2006, it was kind of a big deal. It was a big deal because it cost less than $10k, it was high definition, and it recorded to solid state media. That was only seven years ago, and it sounds quaint when I describe it out loud.

After six years, last year, I finally replaced that camera. The replacement cost less than half of the original, recorded in more HD formats, and it was smaller. The compression is kind of high, but the media is dirt cheap. Last year at NAB, manufacturers were all showing various "inexpensive" cameras. For the hobbyist video nerd and full-time professional hired gun, it was like a dream come true.

Then at this year's NAB, Black Magic starts showing two impossibly awesome cameras. The first is a "4k for $4k" camera. All of a sudden, they're offering a camera that has four times the resolution of cinema standard 2k for a few grand. Remember, it wasn't that long ago that shooting in regular "old" HD required a camera that was close to $100k. If that weren't enough, they're also going to offer a tiny camera that shoots conventional HD, with micro-4/3 lenses, and a completely ridiculous 13 stops of dynamic range, for a grand. A grand!

I'm cautious to point out that tools don't make up for experience, and that even in the ugly old days of fake 24p NTSC video, one could get decent enough results out of a cheap camera if they knew what they were doing. Lighting, exposure theory and production knowledge still go a long way to getting high quality stuff. But my point is that the barrier to entry is practically gone. Christopher Nolan and his film snobbery can suck it. College kids hungry to tell a story are going to make great films, even if their distribution is largely on the Internet. That's really exciting.

I don't have any excuse for not having something in the can at this point. I've got the tools, and I have a little bit of talent at least. I just need to write something, or have someone else write something I want to make. I don't know how many years I can go before I'm just a do-nothing douche in that regard!


One interface to rule them all

posted by Jeff | Friday, April 19, 2013, 8:31 PM | comments: 0

Software nerd rant here... skip if this isn't you.

I'm not shy about telling people that I'm not much of a computer science kind of guy. It's not that I don't respect computer science or understand it, I'm just not one to get academic over it to the point of not building anything. And while I can't always remember what the hell SOLID stands for, I do remember that the "I" stands for the "interface segregation principle." It says, "Thou shalt not force everything to use one interface, because specific interfaces are better."

I've seen this principle violated many times, but twice in the last six months I've seen projects that just abuse it to death. The big problem for me is that trying to force everything into a particular interface leads to pain and suffering whenever you want to change something. While developers are in the general sense understanding what dependency injection is, I find that they're often doing it a way that violates the interface segregation principle.

For example, I've seen several instances where people are passing in the dependency resolver itself (for MVC, this is one of the IDependencyResolver interfaces) to various classes, and then those classes new up instances of whatever they need. This is bad for two reasons. For one, you're then coding on One Interface to rule them all, and for another, the overhead of mocking and verifying in testing gets bigger. That's no fun.

Another anti-pattern, related to the ISP, is the master do-it-all abstract class. These drive me nuts, too. While an abstract class isn't exactly an interface per se, it ends up being used as one. In an effort to keep the interface concise (as if it's easy to change when it's used in a thousand places), it ends up having one or two methods in order to conform to the base type. This is suboptimal because it keeps you from grouping similar functionality together, it abuses generics (which are fun when you have to bounce between value and reference types), and more to the point, that single interface isn't single for any really good reason. I would rather see you inject whatever functionality you need by way of a specific interface than force One Interface.

Think about it in terms of the mature frameworks that you've used. There aren't a lot of interfaces to be had that are widely used, because they would be hard to change, and force-feed members that don't need to be widely used. When there are widely used interfaces, they're pretty sparse (think IDisposable).

Specific is better. Don't try to cure cancer with an interface.


That summer vacation feeling

posted by Jeff | Thursday, April 18, 2013, 9:18 PM | comments: 0

While out for lunch today, with sun, 80 degree temperatures, and a healthy dose of humidity, I had what I could only describe as the "summer vacation feeling." You know what I'm talking about. It's that feeling you had right after school let out, when you didn't have to be anywhere in particular. It was probably one of the best feelings of being a kid.

Last summer, I found myself having that feeling a lot, and for a moment, I thought, "Gosh, I sure wish I could have this feeling whenever I wanted." After a little more reflection, I realized that I've actually been fortunate enough to have that feeling most of my adult life. I never really lost the ability or opportunity to have that feeling.

In adulthood, we measure freedom in completely different ways, and probably associate it with happiness to some degree. It was in last summer's reflection that I realized that the freedom actually has little to do with what you do for a living, and more how you do it. I've worked for companies large and small, and I've worked for myself during various times (deliberately and involuntarily). The freedom can exist in any of those situations, but it's predicated on three conditions:

  • You have to like what you're doing. This might seem obvious, but when you like what you're doing, it doesn't feel like work. There are a lot of people who will argue, especially from the Baby Boomer generation, that work can't be something you like, it's just something you have to do. Perhaps rejecting that makes me an idealist.
  • Whatever the situation you're working in, whether it's for a company directly, for yourself, or indirectly for a mass of customers, the freedom requires trust from your "boss." I say "boss" figuratively, because even if you're self-employed, you're still accountable to someone in order to make money. If that entity trusts you, then you're bound to results, not face time or something else unrelated to results. When it's a relationship of trust, you can use your discretion to have your summer vacation feeling.
  • You have the right amount of work. This part is a little trickier, but again, it doesn't matter if you work for The Man or for yourself. If there's so much on your plate that you can't schedule in a little time for something that makes the summer vacation feeling, you aren't really free.

When I look back at my work life thus far, there were only two times that I lacked the summer vacation feeling. One was in a job that I knew wasn't going anywhere, I wasn't learning, and I had no office window. They worried about face time. The other time was far more brief, when a job was starting to sour because the company was going down in flames. That was one of the times it just felt like work.

Maybe I've been lucky, but I have had quite a streak of work where I had lots of summer vacation feeling. I love that feeling.


Exciting times to develop Web stuff

posted by Jeff | Wednesday, April 17, 2013, 11:19 PM | comments: 0

I posted the latest version of my open source forum app today, which is to say I marked it as an "official" release (you could already download the source). I'm pretty excited about sharing this version, in part because it was more heavily influenced by CoasterBuzz users than any previous version. It was great to have such an awesome feedback loop.

This was a fun thing to build because it's mostly the real-time stuff that used to be hard. Now you can download a package, do a little wiring, and suddenly you're baking in neat features that people are totally in to. We in the Web world used to have to figure all of this stuff out on our own. Now we rely on open source developers. I think this is the reason that I've become so passionate about open source, and committed to running a project (even if it is "just" a forum app): You should give a little when you're taking so much.

We live in a pretty exciting time to develop Web stuff, because the gap between what we can imagine and what we build keeps getting smaller and smaller. If you build stuff for kicks in your spare time, you can appreciate the awesomeness of this condition. Even if you build boring internal stuff for Big Dumb Inc., it's great because you're not constrained the way you used to be.

My hope is that all of the awesome sauce dripping out of the series of tubes is making developers really want to dig in and learn about the very platform they write code for. We're finally getting to a point where we aren't trying to build abstractions around the Web itself, and we're instead embracing it for what it is. People not in my line of work have no idea what that means. :)

Now that the forum is done, it's time to move on to PointBuzz v3, and our quilting community site. Onward!


Open source composition

posted by Jeff | Wednesday, April 17, 2013, 5:15 PM | comments: 0

One of the fantastic things about software development right now is that you can compose solutions by combining a lot of different blocks to build an awesome block tower. I've noticed in the last few years that designing these solutions with all of these toys is actually something I enjoy more than in-the-weeds coding. Sometimes they involve a lot of bigger, connected moving parts, and sometimes they're a bunch of components all bundled into one thing.

I've said before that an important skill for a developer is to understand how to compose all of these free and open source pieces into something that is cohesive, maintainable and supportable. I value those skills over something that is hardcore, algorithmic computer science. It's great if a dude can write a device driver or a 3D rendering engine, but can he take a series of already invented wheels and build something great, quickly? More and more, I think that's where a developer can add the most value.

Let me be clear that I don't think you can just hack stuff together in a completely unmaintainable way and call it a day. Just the opposite, I'm suggesting that understanding basic design patterns and applying them to the composition of these fantastic tools is where it's at.

There are certainly some pitfalls associated with this. It's easy to simply copy what you've seen elsewhere, and assume that it's the "right" way to do something. That's the same problem you encounter with the in-the-weeds code. Conversely, it's easy to want to over-engineer or extend something that an open source developer came up with, and that can have unintended consequences with regard to complexity and leaky abstractions. Those problems can be just as painful as the copy-and-paste issues!

In the .NET development space, we've come a very long way as far as open source goes. There wasn't a lot of choice or really useful stuff out there even five years ago. I think we still have a little ways to go to make things easier, especially when it comes to the installation and configuration of these building blocks. I spent much of today swimming up stream, trying to make things work on a client project, and those are never fun days. Fortunately, things like NuGet are making life easier.

There will always be hard problems to solve, but we don't have to come up with giant, home-grown solutions for everything the way we used to. It's as exciting as ever to work in this profession, provided you hold on to your desire to keep learning.


What you do with what you can't explain

posted by Jeff | Monday, April 15, 2013, 10:38 PM | comments: 0

Today's violence in Boston is shocking and tragic. The weird thing about the Internet is that it gives people a voice, often unfiltered, to react to the tragedy. You never quite know what you'll see. Sometimes, you end up dropping them off of your social networks (I'm looking at anyone who made it a political issue within the first hour). Then you get things out of left field, like the Mr. Rogers meme around showing the good in the middle of the bad.

Most of us never deal with intense violence directly, but as human beings, we're certainly affected by it. It's far more likely, however, that we deal with extraordinary loss or tragedy on a more personal level. There is a broad category of events that we inevitably deal with that are difficult to explain, and often impossible to rationalize. There are different things that different people do to deal.

At one end of the spectrum, people might use their faith to write a bad thing off as, "God's plan," or a more agnostic credit to some kind of fate. I tend to just attribute something like this to, "Bad people sometimes do bad things." It's not particularly satisfying, but I try to base as much as I can in tangible facts. For me at least, I find comfort in what might be an uncomfortable reality.

At the end of the day, comfort is ultimately what we seek. That there are bad people sucks, but I'm always amazed to see what everyone else does when something bad happens. People help each other out. The fear is ultimately trumped by love. If that doesn't give you comfort, I don't know what will.


More video game time

posted by Jeff | Sunday, April 14, 2013, 3:33 PM | comments: 0

I recall there were several crusades against video games while I was growing up. What's amusing about this is that those were the days when games weren't exactly photo-realistic. They were more blocky pixels than anything. The state of the art when I graduated high school was the Super NES.

Regardless of the screen resolution, the case against video games usually centered around some aspect of them being "bad" for you. That seems completely strange in retrospect, and now there's even research that suggests video games make you better at a lot of things. It really does make sense, when you consider that there aren't many things that you engage at quite as intensely, maybe for several hours, out of the desire to master it. I think the problem when I was a kid was that people associated the games with TV, and TV is very much a passive experience where you can sit and drool and not interact.

I was thinking about this today, because Simon has discovered Angry Birds on our phones. He asks to play. He doesn't totally get it, but he knows that he launches birds and stuff happens. It's clearly a gratifying experience for him. I've had video games my entire life, and I don't see it being different for him (though the form factor certainly has evolved). I don't see any reason to arbitrarily keep them from him, but there will be some kind of balance that we'll have to require, like anything else. It's just interesting how our attitudes have changed.


Belly Breathe

posted by Jeff | Friday, April 12, 2013, 11:52 PM | comments: 0

The joys of having a 3-year-old come at a certain cost. You know, like the fact that you have a 3-year-old! I think it's best to describe Simon as going through a Jekyll and Hyde phase. One minute he's the sweetest kid ever, the next minute, holy terror. I think about how nice he was meeting one of our friends last weekend for the first time, and then a day later having some really quality meltdowns.

This is a more emotionally challenging time for parents. When he was much younger, sure, we would be driven to the brink at times by his behavior, but generally we could roll with it because it was easy to accept his babyness. Now it's more complicated, because there's a little personality in there that tends to understand right from wrong, and clearly pushes to see where your limits and boundaries are. That he "knows" better makes misbehavior feel intentional and personal. Now throw a big box of flip-outs on the fire, because at that age, you just don't know how to process intense emotions. Go ahead, think back to those tantrums you had, and how hard it was to calm down.

What makes this so hard for us isn't what we have to do with Simon. Sending him to timeout or invoking consequences isn't a big deal. There is enough research and advice on this to satisfy my understanding. The hard part is trying to keep our own feelings from flying off the handle. You start to wonder if you should abandon your rational position against spanking, you want to be visibly angry toward him so he can see it, and you want to yell at him.

I'm sure there's nothing special about Simon's behavior, and by that I mean the frequency of his negative shenanigans. We're just struggling right now to deal with them. And of course, there's always some component of, "What am I doing wrong?" My theory, however, is that we're likely to turn a corner soon, in the way that we have with any of his previous phases of difficult interaction. Once we know how he pushes our buttons, we stop allowing him to do so.

Still, tomorrow we're having a little grown up time away from him. We need it.


Over scienced!

posted by Jeff | Friday, April 12, 2013, 10:49 PM | comments: 0

One of my chief complaints about our culture lately is that people seem to wear a blatant disregard for science as a badge of honor. I don't know how it became cool to be ignorant, but it happens a lot, despite the broad availability of information. So science is cool, got it?

I will say that there are cases where we have too much science causing entirely new problems. For example, in medicine there is a compelling case being made that we're getting so good at fighting various illnesses that the causes, especially those of a viral or bacterial nature, are evolving so quickly that it's getting hard to keep up. That certainly makes sense to me. I mean, they used to dispense pink liquid stuff in my college health center like it was beer. Sore throat? Pink stuff. Broken leg? Pink stuff. Pregnant? Pink stuff. OK, not really, but I know I had it prescribed several times. If that was generally the case in the early 90's, do people have any natural immunity left to the things we were catching?

Even for basic hygiene issues I wonder if we go too far. Hand soap seems to universally have alcohol in it now, and the stuff in public restrooms seems to be the worst. It's like my hands are constantly dry, and I suppose the weakening immunity could be caused by that too (speculating, I wouldn't know). Now you need lotion to compensate for dry skin. Is that a win?

It's amazing what can happen when you back off the chemicals, or use the "right" things. About two months ago, Diana started following a "curly girl" regimen with her hair. The short version is that you avoid certain compounds that are in most shampoos, conditioners and other products, and the composition of your hair and follicles fundamentally changes in a way that allows your hair to be far curlier, naturally. The difference is remarkable. Even as she lets her hair grow longer, which normally causes it to flatten out a bit, it still looks fantastic.

We seem to be getting it right with some things. We're finding (or being reminded) that our food is a lot better when it hasn't been messed with. Enthusiasm for science is essential for our survival, and hopefully we continue to be wiser about how we use that enthusiasm.


Ready for Coasting For Kids donations

posted by Jeff | Tuesday, April 9, 2013, 10:07 PM | comments: 0

I keep forgetting to plug my donation page for this year's Coasting For Kids event, benefiting Give Kids The World Village. Hard to believe that the event is just two months away now!

I've been supporting this organization now since 2009, but between having a child of my own and visiting the village last October, I feel a lot more personally invested in it. It's an obvious charity for those of us who are roller coaster and theme park nerds, sure, but for me it seems like a way to also cheat the reality that many of these families have to endure. My kid is spoiled... he has been on more than 30 flights before he turned 3, and already has one Disney cruise under his belt. He has no idea just how well travelled he is, but we certainly have a great appreciation for all of the great memories we've made with him.

So imagine that your child's life is threatened by some illness. No one plans for that, it just happens. Having the chance to do all of that travel to create memories just isn't very likely. GKTW makes it real though, at no cost to the families. I think those families are entitled to the kinds of memories I take for granted. They need a week to just be happy, and not just be sick.

The overall cost to host a family at the village, in dollars and in-kind donations (i.e., stuff like food, theme park tickets and other donated objects) can be as much as $7,000. It may not seem like much, but if everyone I know via Facebook alone were to donate $20, that would pay for one family.

I sincerely appreciate any donation you can make, small or large. Please visit my donation page. Disney World isn't the only place in Central Florida where magic happens!


Listening is a useful skill for product development

posted by Jeff | Tuesday, April 9, 2013, 9:38 PM | comments: 0

I wrote previously about how awesome the feedback has been from the folks on CoasterBuzz with regard to the development of POP Forums. So useful, in fact, that it has really reinforced my desire to listen to the people who most use my stuff.

Keep in mind that this has always been something I've taken to heart. I briefly worked on one product team that was marching toward a big bang moment after a year with almost no validation from potential customers, and it drove me completely nuts. Still, I have to admit that there are also times when I felt like I knew better, and maybe I didn't.

Going in and out of product development roles (by development I mean the refinement of something, not so much the production of it) for many years, I'm always amazed at the balance you have to strike between trying to be visionary and listening to your customers or stakeholders. Most of us are not, and never will be, great arbiters of taste in the way that someone like Steve Jobs was. The best we can do is make real things and get them in front of people, because they'll let us know really quickly if we've taken a wrong turn. If you really think about it, that's a pretty low risk strategy. Even if you get it only half right, the feedback will get you on a clear path.

Once v11 of the forum is out the door, the next version will be a little harder. It will be time to finally address the legacy of search engine discoverability with modern user experience. The new version is all real-timey, in the way that Facebook has stuff magically appearing in the page, but there's still a lot of legacy stuff in the interface that is there mostly to keep stuff discoverable. It's the first hard problem I've had in years with that forum, but critical because stats from my own communities show that the long-tail SEO benefit of all of those conversations is fairly enormous.


Sick rant

posted by Jeff | Tuesday, April 9, 2013, 5:15 PM | comments: 0

I need to unleash one of those rare bitch-and-moan posts. I'm sick again and I want to whine about it. That's twice so far this year, which is exceptionally rare for me. I don't know if working remotely all last year weakened my immunity by anti-exposure or what, but this isn't fun. The first time, it was after time on a cruise ship and in airplanes, so maybe I can write that one off. This time, maybe it was exposure in an indoor water park. Blah.

The fever hit Sunday afternoon, and expanded to, uh, gastrointestinal symptoms yesterday. I felt reasonably human by this morning, and went to work. By 2, I left because I could barely sit up and stay awake. The fever went back up over 100. I can't remember the last time I was sick without respiratory symptoms, so maybe I was misjudging my state this morning.

What probably bothers me the most is that there really isn't anything you can do about being sick. No matter how awesome you feel, or how much you feel like you can achieve, a little virus will kick your ass. You can't work harder or manage your way out of it, it's just going to have to run its course. That's hard to accept when you feel like you've been winning at life.


Garbage, House of Blues, Cleveland, 3/31/13

posted by Jeff | Monday, April 8, 2013, 9:26 PM | comments: 0

We had the pleasure of seeing Garbage last fall while we were in Seattle, and while I wasn't fond of the venue (the ShowBox SoDo), I felt lucky to see them at all after their long disappearance. I almost didn't see them this time, but my friend Jeff sent me a text literally minutes before shutting off my phone on our cruise in February, asking if I wanted a ticket. Good timing, sir. This was my seventh time seeing them, I believe. Among the highlights was the announcement by Shirley Manson that they were headed into the studio in a few weeks, at the conclusion of the tour, to record again. What a relief that is!

First off, I should talk about the venue. I hated ShowBox. It sounded like shit, and it was just too much of a clusterfuck of a venue. I'm just not cut out for standing room shows anymore. That said, the Cleveland House of Blues actually has a lot of character, surprisingly enough. While I'm a little bitter that it essentially displaced the Odeon (which would have died with the flats anyway), it's nice. We managed to find a position just to the right of a VIP area with a nice clear view of the stage, maybe 40 feet away. I was not crushed. There were some asshats behind us talking much of the time, drinking PBR (fucking Ohio), but overall it wasn't bad. They do have some reserved seating, and I'd be all about that if I ever see something there again.

The opening band was IO Echo, and I have to admit that I liked what I heard. Lots of noise with a female vocal, yeah, hard to believe I'd like that as a fan of Garbage, Yeah Yeah Yeah's and Metric. What I believe is their first album just came out last week, so I definitely have to check them out.

The set list for Garbage was completely different from what they played in Seattle. They didn't even end on "Vow," which seemed to be their custom (they played it second to last before the encore). Only one song from Bleed Like Me again, and it was "Why Do You Love Me." Clearly they're very attached to the first two albums, as well as the newest one.

What I really like about Garbage live is that they're always springing new arrangements of songs on you. The big surprise this time was "The Trick Is To Keep Breathing." It's one of those songs I've always kind of been indifferent about, but the way they played it made me just love it. They also did that arrangement of "Only Happy When It Rains" that is slower and more stripped down, before it rocks out. I love that.

It was also a good night for their best ballads. They closed the main set with "Beloved Freak," which is a really wonderful song that appeals to everyone who has ever felt like an outcast. Really beautiful to hear it live. They closed the encore with "You Look So Fine," which as it turns out, is a really great song to make a lot of noise in.

The thing that came through even more than last time is just how much they love doing this. There's none of that pretentious rock star bullshit, in part I suspect because they're free of major label nonsense... it's all them. I can honestly say that there aren't many live acts I've seen that bring real joy to performance the way they do. It wasn't always the case for them, but it's like a second coming for them. I mean, Shirley is 46, and the dudes are in their 50's and 60's. Can you imagine that being your job at that stage of your life?


Surrounding yourself in awesomeness

posted by Jeff | Saturday, April 6, 2013, 10:15 PM | comments: 0

I was visiting a friend tonight, talking about our professional and personal lives. He's one of those people who kind of energizes you with awesomeness. More to the point, he makes it his business to ensure that he's around more awesome. To quote Mean Girls, you want to "soak up each others' awesomeness."

This is actually something of a theme for me in the last year. I've observed over and over again that the success and happiness of any individual is proportional to the number and quality of awesome people they choose to be around. As another friend pointed out to me, this is a rational conclusion that anyone would come to, but there are people who don't always see the value in a vat of awesome sauce.

Professionally, I've seen a lot of situations where there are not incentives to be around awesome people. At one end of the spectrum, you have companies that retain mediocre people just because they've been around a long time. The lack of new blood, or better blood, perpetuates a lack of awesomeness. At the other end of the spectrum, you have hyper competitive environments that create a disincentive toward lifting each other up and raising the game across the bar. And of course, some people just don't want to have better people show them up. Still others don't want to pay for really good people.

Similar problems can arise in our personal lives. We hang on to crappy relationships with people because we don't want to be lonely, or don't believe we can do better. It makes us less awesome. It's true with crappy friends and intimate relationships as well. What a difference it makes when you walk into a room of awesome people, or come home to an awesome spouse.

In all of these cases, the win is that awesome rubs off. Whether you're bringing together a group of people to do work or just trying to be around people who make you better, surrounding yourself in awesomeness makes you awesome. As individuals, we can bring a lot to the table, this is true. But we can never be so sure of ourselves as to believe we can't be better with the influence of others.


The sport of hypermiling

posted by Jeff | Friday, April 5, 2013, 10:45 PM | comments: 0

I will freely admit that my motivation to buy a Prius back in 2010 was equal parts gadget lust and smug tree-hugger desire. I was surprised to find that I could pretty easily push it to 56 mpg on my work commute, especially on the shorter drive with fewer hills. It probably didn't hurt that most of the road I traveled on was 35 mph.

When that car was totalled in The Great Christmas Eve Crash of 2011, we replaced it with the Prius V, the wagon variant that is "only" rated for 44 mpg city and 40 mpg highway. It has the same drivetrain as the regular Prius, but it's a little heavier, larger and has a "big ass" so there's a lot more drag.

The problem with a hybrid in winter is that it often doesn't make enough heat to keep you warm. During those times when the gas engine isn't running, the heat that bleeds off the coolant system seems to run off pretty fast. That means it has to fire up the engine not to propel the car, but to keep you toasty. It's either that, or the computer just prefers to keep the engine at a certain temperature. Regardless, the gas engine runs more when it's below freezing, and your fuel economy suffers.

Fortunately, it's getting warmer, and I have a commute with zero highway. Instead I have a series of country roads with speed limits generally around 45, and few stops. A sleepy town with one traffic light sits in the middle. This is pretty much the perfect environment to see how far I can push the car.

I ended the last tank of gas on 48 mpg, which is really fantastic. The first day after the fill-up, I did 52 mpg one-way (job site is lower elevation than home). It might have ended higher if I didn't go downtown over the weekend. I've theorized that I could get the car to do close to what a regular Prius does at lower speeds, since it's the same drive train and there's less aerodynamic drag at lower speeds. Yes, it has become kind of a sport for me.

There's a lot of discipline to follow. The first thing is to not be in a hurry. The second is to not use the "PWR" mode of the car. People don't realize that a Prius is actually a crazy peppy car (duh, it combines electric and gas motors!), but the software in standard mode is designed to keep you in check. Then you do what you can to coax the car into EV mode, which usually involves getting up to 40 or so in a 35, then dropping off the accelerator and back up to push the meter on the dash just below the gas engine threshold. Of course you coast anywhere you can. You don't floor it when you start from a stop. If no one is behind you, you coast even longer than usual.

The funny thing is that it's not about the cost of gas or the environment. It's more like the satisfaction you get from mastering a video game. You're going for the high score.


Leaky abstractions

posted by Jeff | Friday, April 5, 2013, 10:04 PM | comments: 0

I'm really not one to get deep into computer science as a topic of frequent discussion. Experience, practice and mentoring tend to teach you all of the computer science that matters for the purpose of building supportable and maintainable software.

But I always liked the term "leaky abstraction," because it sounds more like a personal problem than a computer science thing. In basic terms, it refers to the idea that abstractions that are intended to hide away complexity often have cracks in them that do require you to know something about the underlying implementation. That makes them a whole lot less useful. I would also argue that a lot of abstractions just replace one kind of complexity with another.

The example I never stop running into involves ORM (object-relational mapping) frameworks. I think I've now encountered four of them in the last four years as part of various projects. They all have their pros and cons, and they're all excellent for the purpose of rapidly banging out something functional. They also get to be a pain in the ass as soon as you need to do something complex with them. If you have to examine the underlying SQL, and then mess with the framework to produce the "right" SQL, what's the point?

I think I've reached a zen place, however, where I'm willing to accept that all abstractions are leaky to some degree, and that's OK. Now I know to use the abstraction to my advantage as much as I can, and let it go and do things the "hard" way if it's going to be easier than beating the abstraction into submission.


Diana is many things

posted by Jeff | Thursday, April 4, 2013, 12:08 PM | comments: 0

Diana is many things.

Diana is a theater nerd, a knitter, a quilter, a singer, a redhead, a leader, a masterful cook, a welder (so I hear).

Diana is fiercely independent and strong. She knows when to lean on me though, and encourages me to lean on her. She has seen her share of crap in life, and she remains optimistic and happy.

Diana is a problem solver. If something isn't working, or has room for improvement, she figures out a way to make it happen. Her organization skills are epic.

Diana is worldly, in the sense that her views are a great deal wider than my own, and she challenges me. Some of that is travel, some of it is living in different places, but she helps me remember that the center of the universe is constantly moving.

Diana is constantly evolving. She's never boring. She takes on new things and learns all about them.  She wants to try new things. She even changes her appearance in subtle ways from time to time. She's a body in motion.

Diana is kind and caring. She looks out for people. She loves animals (insert crazy cat lady joke here). She understands the importance of charity, and helps me with my charitable efforts.

Diana is a fantastic mother. I'm amazed at the balancing act that she has established between love, concern, discipline and provision. Simon is the luckiest kid ever. For me, she makes a great partner in parenting. Neither one of us ever has to be the bad guy.

But the thing that I like about her the most is that she's my wife. I'm every bit as in love as I was when we were getting to know each other. Here's to many, many more anniversaries!


Getting older is awesome

posted by Jeff | Monday, April 1, 2013, 10:30 PM | comments: 0

Last night's Garbage concert here in Cleveland was completely awesome. I'll write more about that show eventually, but what really sticks with me is a story that Shirley Manson told during the show.

If you aren't familiar with Garbage, you're missing out, but the short story is that they're composed of three talented music producers (one of whom arguably produced many of the best albums of the mid-90's) and one fantastic Scottish personality in Shirley Manson. The guys are in their 50's and 60's, and Shirley is 46. They were gone for 7 years between albums, in part because the record industry took the fun out of it all. They've returned on their own terms, self-releasing, and it shows they're having fun again.

In any case, Shirley told the story of some 20-something complaining to her that she didn't want to get old. Her comment was something along the lines of, "Why are young people so fucking scared of getting older?" She rattled off some obvious benefits of getting older... you typically have a bigger bank account, you have more credit available to you, you don't have to share a place to live, you have sex more, and most importantly, no one can tell you what to do. As she bluntly put it, "You can do whatever the fuck you want. Getting older is awesome."

She's absolutely right, and yet the obvious reality she points out is the opposite of the way we tend to view our voyage through adulthood. Age and experience bring all kinds of power, but it's easy to focus on the less real issues of risk and danger. We fear being obsolete when we have yet to peak. Why is that?

Shirley's pep talk really stuck with me. A lot of actions we might consider to be midlife crisis material may in fact be the actions of embracing the part of life we're in. She's right... getting older is awesome.