Reading from a queue in an Azure WebJob

posted by Jeff | Sunday, April 13, 2014, 10:52 PM | comments: 0

A few months ago, Microsoft introduced something called a WebJob in Azure. It's essentially a "thing" that can run as a background task to do "stuff." The reason this is cool has a lot to do with the way you would do this sort of thing in the pre-cloud days.

Handling some background task in the old days usually meant writing a Windows Service. It was this thing that you had to install, and it was kind of a pain. The scope of background tasks is pretty broad, ranging from image or queue processing to regularly doing something on a schedule to whatever. For those of us who have focused on the Web and services, they're definitely a weird thing to think about.

Azure made this more interesting with worker roles (or cloud services, which also include web roles), which are essentially virtual machines that do just one thing. Those are pretty cool, but of course the cost involves spinning up an entire VM. They start at $14 a month, per instance right now, but still, it's not like your Azure Websites are running at full utilization, so it makes sense to use that resource since you’re already paying for it.

That's where WebJobs are awesome, because they run on the VM that's already running your sites. If you have something to do that isn't going to overwork that VM, a WebJob is perfect. They run pretty much any flavor of code you can think of, but for the purpose of this post, I'm thinking C#. For added flavor, you can bind these jobs to the various forms of Azure storage, and do it without having to wire stuff up. See Scott Hanselman's intro for more info.

I just happen to have a use case where this totally makes sense. I have a project where I'm using, a port of the Java text search engine, to search tags and titles for various pieces of content. I'm also using the AzureDirectory Library with it, which allows me to use blob storage for the index. Updating the index happens when a user creates or edits content. Infrequent as that might be, it is time consuming, and it's a crappy user experience to make them wait. The solution then is to queue a message that says, "Hey, this content is updated, so update the index, please." Firing off a message to the queue is super fast, and the user is happy.

This is a pretty common pattern when you have to break stuff up into components, and a little latency is OK. In this case, it's not a big deal if the search index isn't updated instantly. If it doesn't happen even for a few minutes, that's probably good enough (even though it likely happens within a second or two).

As with the other examples out there, the code to set up the WebJob as a C# console app is really straight forward. In my case, I have some extra stuff in there to take care of the StructureMap plumbing, resolving dependencies between different assemblies and such.

internal class Program
	private static void Main(string[] args)
		ObjectFactory.Initialize(x =>
				x.Scan(scan =>
		var host = new JobHost();

	public static void ProcessProjectSearchQueue([QueueInput("searchindexqueue")] ProjectSearchQueueMessage message)
		var indexer = ObjectFactory.GetInstance<IProjectSearchIndexer>();
		indexer.Processor(message.ProjectID, message.ProjectSearchFunction);

The ObjectFactory stuff is the StructureMap container setup, and right after that is the WebJob magic from the SDK. I’m pretty sure what those two lines are doing is saying, “Hey Azure, you’ve gotta run this stuff, so just hang out and don’t let the app close.”

The ProcessProjectSearchQueue is where the magic wireup to Azure storage takes place. The QueueInput attribute is looking for a queue to monitor, in this case “searchindexqueue.” The connection string, as mentioned in the other articles you can Google on Bing, show you how to put the storage account string in the Azure administration portal. In the case of this code, when a message hits that queue, this function reads it from the queue and acts on it. It’s like magic.

As of the time of this writing, WebJobs are in preview, so the documentation is a little thin. On the other hand, the product itself is really robust at this point. The monitoring stuff and ability to get a stack trace when something is broken is really awesome.

Here are the bumps I hit in implementing this:

  • My calling code has to talk to SQL via Entity Framework. The app.config for my WebJob did not have the EF configuration section that specifies to use System.Data.SqlClient, so it choked until I had that in place.
  • At first I had my StructureMap initialization after the RunAndBlock call, which was pretty silly because that method is pretty descriptive about what it’s doing.
  • I went down an ugly dependency hole of despair at first, where the WebJob required a ton of assemblies from a core library. In this case, I just needed to pull out the SQL data access to its own project in my solution. DI containers like StructureMap help with this (duh).
  • The deployment is a little ugly because there’s no tooling for it, but it’s still just a matter of zipping up the build and uploading via the Azure portal.
  • You can’t run it locally. I hope they’re going to figure out a way to simulate this, because having to test with real Azure can be a little awkward when you need to share your code (and connection strings) with other developers. To compensate, I took the two lines in the above method and put them in an MVC action to call at will by viewing the action in a browser.
  • If your code fails, the queue message is gone forever. I haven’t used Azure queues in awhile, but I do recall the mechanism that restores a message in the event you can’t process it. Normally you would have some retry logic, so I’m not sure what to do here.

This is a really exciting piece of technology, and I’m planning to use it next to pull out the background stuff in POP Forums, which currently runs on Timers out of an HttpModule. Ditching that ugly hack after more than a decade means finally getting the app to a multi-instance place. That makes me very happy.

Revisiting membership cards

posted by Jeff | Wednesday, April 9, 2014, 7:23 PM | comments: 0

I wrote recently about the options around doing membership cards for CoasterBuzz Club. Basically I'm going to do... nothing different. Obviously a lot has changed in a dozen years, but there are almost no compelling reasons to go plastic and many to stay where I am.

The thing is, my printer was fully depreciated years ago, and I don't want to buy a new one for plastic card stock. The difference in cost between the paper punch-out cards and plastic is about 12 cents compared to almost $1.10 when spreading out the cost of the printer over three years. That's not worth it. The margin on memberships is already taking a hit from the credit card discount rates, which keep getting worse.

The other thing is that there are all kinds of electronic means that I'm thinking about as a secondary means of distribution (or primary, if certain parks will take the lead). As you might imagine, thinking about how you do things like this is part of my daily routine, working for a theme park company. I've got some ideas that I might look into over the next year.

The end of the napping era

posted by Jeff | Tuesday, April 8, 2014, 8:22 PM | comments: 0

It's hard to believe, but Simon took his last regularly scheduled afternoon nap last week. He was starting to resist even lying down, and nap time was becoming dramatic. In the event that he would actually sleep, he would be too wired to go to bed in the evening, causing more drama. We were resistant to skipping naps entirely because a tired Simon in the evening was a bad scene.

To my surprise, things are actually going better than expected. He's fairly used to staying up all day, and when evening comes along, he's really ready to turn in. Before he was calling out at regular intervals between 8:30 and 10. Now, we get him to bed often before 8, and we don't hear a peep.

There are pros and cons for us as parents, of course. We don't get a short break in the afternoon, but we do get a longer evening, and it's a lot easier to go out and do stuff with him. That's a net win, I think.

Rolling with this is part of a bigger pattern of constantly trying to balance giving in to what he wants to do, because it's easier, and telling him what to do for a longer-term win. For example, he's terrible about staying on task for anything, whether it's brushing teeth, putting on shoes or eating. As is the case with many different behaviors, we never know how much of it is him being 4, having ASD or SPD. Tonight he wanted to open the garage door for Diana (coincidentally going to a seminar on behavior issues) while eating, and we told him no. It's slightly heartbreaking to see him react, because the optimist in me sees that he really just wants to help, but at some point we have to break the pattern of letting him get his way.

No telling yet on what happens when Daddy wants to take a nap on the weekend.

My experimental well-being

posted by Jeff | Monday, April 7, 2014, 10:59 PM | comments: 0

I think that one of the things that keeps people in technology at the top of their game is a certain willingness to experiment. I don't mean potentially lethal combinations of Mt. Dew and energy drinks, but rather with new technology that they're not already familiar with.

For me, in my career stage, I also think it's critical because I do a lot less hands-on, in-the-weeds work, but I do often work with others to lead them down the path of better software development. In that situation, I think it's important to be able to walk the walk and talk the talk, with a high degree of credibility. For me, that means building real things both in work when the situation allows, and also on my own time.

My brain bandwidth has been pretty thin the last few months, due to some combination of work, buying a house, and a great many other things that add up. The house part has largely been resolved, which has lifted enough psychic weight to let some of that experimentation desire to come back in, and it's amazing what that does for my enthusiasm. If that weren't enough, this is the time of year where all kinds of new and interesting stuff gets announced, especially with Microsoft-related stuff, so that helps too.

What have I been up to? I've been looking at pushing more of my sites to the cloud, I've been messing with (a search engine) for one of my projects, spending more time with client-side frameworks, exploring C# code written for iOS and Android... there is so much to learn and play with right now.

If working in technology isn't fun, you're doing it wrong. At no time in history has there been more opportunity.

When a cloudy future is good

posted by Jeff | Thursday, April 3, 2014, 11:12 PM | comments: 0

I'll never forget when I first flipped over to having a dedicated server of my own, I think it was in 2000. PointBuzz (then Guide to The Point) and CoasterBuzz could no longer live in a shared environment, on a server with a bunch of other sites, so I bit the bullet and started renting one. It was hundreds of dollars monthly at the time, and the cost of bandwidth was insane. It got to the point where I had to get a T-1 to my house where I could host my own server. That cost a grand a month, but it was all I could do! Things got a little cheaper after a few years, and you could get a dedicated server for "only" $300 or so.

I think I was at, when we were growing and not imploding, that I was first exposed to virtualized servers, probably in 2008. I don't specifically remember what they were used for, but already they were using networked storage for the databases, so my perception that you needed bare metal hardware to run stuff was already eroding. The tech press was gushing over virtualization, and at that point, I had been running Windows in virtual machines on my personal Macs for two years. This was the foundation for what we would later start calling "the cloud."

When I got to Microsoft to work on the MSDN and TechNet community apps, specifically the forums, we had an enormous pool of servers. Granted, the forums were in something of a disastrous state, but they required something like 50 servers to run, and it still didn't scale well. (And yes, we reduced that quite a bit in relatively short order.) In 2010 they were spinning up something called Azure, which at the time was mostly a platform-as-a-service offering where you would run stuff in virtualized instances that mostly hid the operating system from you. It was a little rough because the product wasn't fully baked, but it wasn't long before me and two and a half other dudes built the reputation system that was baked into the forums, and ran it all in Azure. I was sold... what used to take racks full of equipment we deployed to stuff we provisioned in minutes.

I went on to work briefly in the cloud services team before making the poor decision to move back to Cleveland to be with my unsold house (yes, I can't let that go). I've always kind of hated messing with infrastructure and maintaining it, and the promise of cloud resources have been with me ever since. Last year I did the live blog for PointBuzz, and overkill built it for Azure just because I could. (Open sourced the code, too.) Ever since I was involved in that reputation system in 2010, I was looking forward to the day when I could finally move all of my stuff off of a dedicated server, and into the cloud. The problem has been that the math didn't quite favor the cloud, but that is just about at the tipping point.

Amazon, Google and Microsoft have been in something of a price war, and the last round of price cuts are at a place where I think I can finally move my stuff. Google doesn't run .NET stuff, and Amazon doesn't have the sweet PaaS options, so it's going to be Azure. The real trick will be figuring out if some of the older stuff can run in SQL Azure. There might be some exotic things going on there.

One of the things I've talked about in my talk that I've given recently about cloud resources is how it greatly expands your toolbox. The idea that you can spin up a "server" to do some interesting thing in isolation for under fifteen bucks per month is pretty exciting. In fact, I've been looking at hosting a search app for one of my projects in just such an environment.

Assuming I can find the time, it's time to start moving stuff over to Azure. The cloud's time has come even for the enthusiast side business crowd. Now only if I could drag along the old school enterprises...

Five-year anniversary

posted by Jeff | Thursday, April 3, 2014, 10:06 PM | comments: 0

You know life is full when you see that you're celebrating a five-year wedding anniversary, and it feels both impossibly brief and impossibly long. I can't wrap my hear around that. Diana and I met just 7 years ago this May 31.

The reason it's so odd to think about is that we've packed a record amount of adventure into that amount of time. I can't think of any portion of my life, not even college, that is as dense with memories. There are the obvious things like having a child, which certainly dominates the story, to the 6,000 miles of moving we've done across five different houses.

I think I can generally say that being married to Diana has been easy. It's certainly not unicorns and puppies at all times, but I wouldn't characterize our relationship as difficult. We're susceptible to stress like anything else, and being parents would certainly wear us down even if Simon didn't have issues related to ASD or SPD. However, at the end of most any particular day, we can go to bed content with each other after six years of cohabitation.

Our roles have changed so much since we had Simon and moved to Seattle. Sometimes it feels very 1940's, where I'm the "breadwinner" and Diana is the "housewife." I hate those terms, but it has been hard at times, especially for Diana, to adapt to our current state. She worked her entire life prior to having Simon, and I never really had to be accountable for other people. It works though, because we both have provider personalities to some extent.

I love that Diana has been so open to the somewhat radical changes around location and work. I say that if it were all my idea, but she's the one who has been something of the world traveler prior to meeting me. She lived in New York, and went to school in exotic places like England and Cincinnati. I credit her with opening my eyes to what is possible.

What I love about Diana is how much she evolves. She never stops being interesting because there's always something new about her. She starts to listen to new music that I also like, she takes on new hobbies, and even her appearance changes in subtle ways over time. Boring she is not.

The truth is, I could not have predicted the future we now have, and that's pretty exciting. I have no idea how things will go in the future, but it's more exciting than scary with Red Delicious around!

5 Ways to surround yourself with awesome

posted by Jeff | Monday, March 31, 2014, 10:44 PM | comments: 0

I'm surprised at how often it comes up, the issue of creating a "culture of awesome" where you work. And honestly, as much as I think of it in terms of the software profession, the path to getting there likely applies to most any business. I've been fortunate to be a part of some awesome teams, and they don't happen by accident. Some would argue you can't create it, but I disagree.

1. Lead by listening

Yes, you probably reach a certain career band because you're good at managing people, process or product. That's awesome, and that's why you get paid the big bucks. Your wisdom is what makes you stand out. Still, my hope is that the wisdom comes with the acknowledgment that you do not in fact have all of the answers. It took me awhile to realize this.

A lot of things motivate us to not listen to people (which when you think about it, doesn't inspire a lot of confidence in our own staffing decisions). We often want to demonstrate control, we fear failure, or we just don't trust other people. But if we insist on having a hierarchy, then the one thing we can be sure of is that we don't have all of the answers because there aren't enough hours in the day to take all of the input. A lot of the time, others know better than we do. Strong leadership involves listening, and acting, on the information and opinions of others.

2. Challenge, and be challenged

There is some feeling in our line of work that toxic conflict helps us arrive at a better place. I don't agree with this at all. That doesn't mean that there isn't a whole lot of room for people to challenge each other. This has the nice side effect that egos are kept in check.

Leaders create a framework that fosters these challenges. You have to make sure that people are free to express their concerns and different views without the threat of negative repercussions. It doesn't matter if someone is new or bordering on retirement. Good ideas come from all over. The worst thing that can happen is that someone takes a ridiculous position, and learns why it's ridiculous. The best thing that can happen is you save time and money, and deliver something better.

3. Remember that you get what you pay for

While some organizations will scrutinize the strangest little expenses, many never think much about the money they spend on humans. This is a catastrophic error. In software circles, many believe that people are interchangeable, ignoring the very wide range of capability and domain knowledge that travels with the person. As it turns out, people like to be recognized for their ability to do good work, but they also want to be paid for that work.

Know your market. In most places in the US right now, software is a sellers market. The good people will chase the money not because they're greedy, but because the basics of supply and demand drive them there. Hiring "C" players won't get you the results that "A" players will.

4. Never be afraid to experiment and make radical changes

"We've always done it this way" is the innovation equivalent of ebola. It attacks quickly and turns you into a pile of goo in short order. It's not uncommon to be in a situation where everyone knows something isn't working, but no one does anything to change the outcome. What's that cliché about doing the same thing over and over and expecting a different result?

Sometimes things aren't working, and you need to make a serious change to right the ship. It might mean tossing aside a process, reorganizing people, a totally new approach, and sometimes even letting go of people. Aside from the letting go of people part, there's a good chance that the big changes you need to make aren't that risky if you're already in the midst of a tragedy. The worst thing that can happen is you continue to be tragic, but more than likely, you'll end up a little more awesome.

5. Find the awesomesauce that's already there

I've been fortunate (or not, if you consider the layoffs and flameouts I've been in) to have worked in a really diverse set of companies, large and small. There isn't one that I can name that didn't have little hints and glimmers of greatness just begging to get out.

We often focus a great deal on roles and responsibilities, and try to put everyone in a neat little box with a clear and well defined label. This breeds a lot of "not my job" precedent, and it hides that fact that some people are really good at a lot of different things. Enable those people. Not everyone is a born leader, but almost everyone does have something meaningful to contribute. Find it! Figure out how to make it fit into what you need.

Nesting in the palm trees

posted by Jeff | Saturday, March 29, 2014, 11:47 PM | comments: 1

It's hard to believe that we've been in the new house now for three weeks. There really hasn't been any sense of routine or settlement yet, because we've had house guests, spring break and a lack of school, and of course the piles of boxes. We haven't even 100% vacated the rental yet, as we have a few things there and some cleaning to do.

Still, the nesting process is well under way, and it is starting to feel like a home. Today we cracked open some boxes, full of books and framed photos, that we haven't seen since July. I put up the canvas photos of Mt. Rainier, and some things in my office. It feels a little more comfortable every day, though we've been so active that we haven't really enjoyed it much.

Some things were ready right away, most notably the kitchen. Stuff keeps migrating between cabinets, but Diana had that room functional almost immediately. We still desperately need a light fixture in there, but we'll find something. Her sewing room is mostly functional, too. Simon's room is really comfortable, and I love the ceiling fan we bought him. Our room needs a fan, and some stuff on the walls and windows (and I want a big round rug to put under the end of the bed), but it's also comfortable.

I think the important thing is that I'm allowing myself to feel a sense of home, which is really not something I've had since probably before Stephanie and I split. I've equated that feeling with stagnation and some lesser state, for no really rational reason. There were so many years of uncertainty. Now the only thing that feels uncertain is my next job (since I'm doing contract work), but hopefully I can land something that is not contract, and very long-term. That would definitely put me at ease.

We had a stormy afternoon, but it was around 80 degrees. When I was out at the grocery store, I remembered how much better life feels when you're not messing with snow and cold. Then sprinkle in things like train whistles, water skiers on the lake behind your house, great neighbors, a zip line, and you know, it ain't all bad. Settling into a place to live is not a bad way to go.

The return of the Disney animated musical

posted by Jeff | Monday, March 24, 2014, 10:41 PM | comments: 0

I went through a slight Disney phase in college. Not super hardcore (contrary to the understanding of my former mother-in-law), but there was a series of films that were really great, in my view: Little Mermaid, Beauty & The Beast, Aladdin and The Lion King. These all seemed like they were written for the stage and made into animated movies. There was a part of me that was really moved by musical theater, even though at the time I had not seen very much of it, and the soundtracks for those movies really reminded me of the "big" shows at the time, like Phantom or Les Mis, only you could watch them on VHS tape.

I remember the summer before my senior year going to a theater in Mansfield one afternoon, before my radio shift at WYHT, to see Lion King. That opening scene completely blew my mind. To this day, it's so visually overpowering, and the music is brilliant. It seemed like Disney could do no wrong, and the formula certainly wasn't getting old.

But the machine definitely fell into decline after that. Mulan, Hercules, Hunchback, Tarzan... none of them did much for me. It was kind of sad even. By that time, my film interest had drifted more into the "indie blockbuster" realm, including stuff like Pulp Fiction, and anything by the Coens. But I still loved a good musical.

When Pixar delivered the first Toy Story, it was clear that animated story telling was not only viable, but ready for a new generation. Most of the Pixar films, even after it was wholly acquired by Disney, were completely awesome. But they also weren't musicals.

Then Frozen was released. Honestly, it wasn't even on my radar, because even though I love movies, I've had to deemphasize them due to time constraints in my post-childbirth life. I had seen the title, but didn't know anything about it. Then I noticed that the princesses were drawing enormous crowds at Epcot. Friends on Facebook were going to see it multiple times, voluntarily. My niece was appearing in Facebook videos performing the big song. Clearly something was up here... this was not a failure.

Finally, I ordered it on BluRay and got it the day it was released. After more than 19 years since Lion King, Disney finally made another musical that was an instant classic. It really is impressive. The music is completely amazing. I didn't even know that Kristen Bell, one of my favorite actresses, was one of the two leads, and that she totally has the pipes.

Even though we tend to visit the theme parks once a week, I'm not sure I would consider myself a Disney nerd these days. Still, there's no denying, they really have a phenomenon on their hands this time.

Giving back is what moves us forward

posted by Jeff | Saturday, March 22, 2014, 11:24 PM | comments: 0

When I was in college, my advisor had on occasion done some favors for me, usually at minor cost, and made sure I understood that there was no need to pay him back. His logic was sound: "Eventually, you'll do the same for others."

A decade later, I found that he was right. Whether it was the kids I was coaching or my younger friends, it never seemed like a big deal to buy someone a meal or help them out with some kind of time consuming favor. It made sense that if I'm in a position where I can help someone, I should. Many others did the same for me. In a general sense, looking out for other people feels good, whether it's in the most serious of relationships or casual acquaintance. And frankly, it's feels good to receive help, too.

It's not purely a social thing, either. Professionally, this is critical in almost any line of work. It was a lot more common when most people were doing a lot of blue collar trade work, but somewhere along the line we reduced the transfer of knowledge in most other professions. I don't know if this is the result of people thinking it reduces their competitive edge or what, but it's totally counter to what, in my experience, yields higher success (working with smarter people should almost always work in your favor).

Today I did a couple of talks at a fantastic event run by the local user group. The event was totally free, and attended by more than 800 people. Sure, this kind of thing is always good for your reputation and networking, but to me it's also an investment in your profession. I complain a lot that it's hard to find good people to hire, so I'm obligated to help people get better at what they do.

Yeah, it all sounds very circle-of-life, but giving back something really is the thing that moves us forward. As I said, sharing knowledge or helping younger people out is critical, because at some point in your life, others did the same for you. The world gets better.

The membership card problem

posted by Jeff | Wednesday, March 19, 2014, 10:40 PM | comments: 0

It's hard to believe CoasterBuzz Club is over a dozen years old (and the site is older than that). While it was really born out of a difficult situation, where I lost the big money ad provider after committing to a T-1 contract to my house for hosting, in the long run it has helped because of the unpredictable ad market in general.

But from the start, being a software developer and not wanting to be ghetto about the way I run things, I always wanted to automate the production of the membership cards. My solution was to get card stock with a custom die-cut punch in them. I've only ordered them twice, in quantities of thousands. I'm down to a few hundred, and while I still have the die, I don't know if I can find a local printer to use it to rattle off thousands more.

Believe it or not, the cost on those damn things was a little high, just over a dime I think, but I've been able to use the same laser printer for a dozen years to print on them. I have a slightly crappy Access front end where I just push a button and print. So now I have to ask myself if I keep this up or explore a new solution.

At first I entertained the idea that there should be some kind of print-at-home option, with a simple online verification for those worried about fraud. Oddly enough, some of the parks complained that it was fraud prone. I don't really agree with that, and certainly the only one who has something to lose is me.

I've also thought about doing plastic cards. This could in theory be the most elegant solution. The cards cost under a dime a piece in volume, which is less than I paid for the cards, but of course they require a special printer, and those start at a grand. I can play all kinds of games with the numbers to figure out a cost per card, but even once you get the printer paid for, the "ink" is expensive. Over the course of five years, I arrive at a cost per card of around 85 cents.

There is one other problem though, and that's the fact that I would have to write new code for printing. As anyone who has ever had to do that knows, coding to print is the single worst task you could have. It just sucks. That's a serious draw back.

I wish I had a staff to worry about this stuff. I'm in a career stage where delegating is better. :)

It's all in the lighting

posted by Jeff | Friday, March 14, 2014, 11:28 PM | comments: 0

When we moved back to Cleveland, the first thing we did is replace all of the shitty faux-brass lighting and cheap fixtures in the house. I'm not sure why I lived there for eight years before and didn't do it, but it changed the look of the house dramatically. Here in the OC, we built the house with no lighting upgrades at all (because they were mostly a rip-off). Yes, that means that we've got some work to do.

There are a total of five super cheap fixtures in various hallway locations. I knew they would suck, but wow, as I sit here looking at one, they're hideous. They're good candidates for what everyone calls the "boob lights" at Home Depot. They have a brushed nickel base, and there's a "nipple" that caps them. I think they're under $30 for a pair, and we put up I think four or five of them in Cleveland.

We're struggling to find what we think we want for our kitchen. We got a pendant mount over the sink instead of more recessed cans (there are already five), but haven't found something to put there. We think we want a monorail-style set of pendants, two or maybe three, and probably red, so we can light the entire area from the sink to the end of the prep surface. We'll probably have to go to a lighting store. In the mean time, we scored some LED lighting to put under the cabinets on one side, and they're awesome. Well done, Ikea.

We did get most rooms pre-wired for fans (the bedrooms, office, loft and living room), but didn't actually get fans installed. Our thinking was that the wiring alone adds value to the house, but not knowing how the house heats and cools, it would be silly to just prematurely start putting fans in every room (though this seems like a common practice in Florida). After a few days, we learned that Simon's room got very warm starting in the afternoon, which makes sense since he's on the west side of the house and gets the afternoon sun. We bought him a fan right away, and I installed it this evening. Our bedroom may need one, but we want to find the right one. So far, I'm not sure the downstairs rooms need them.

I'm actually thinking a little about exterior lighting. I saw some neighbors had some epic pendant lights on their front porch, something I never considered. Maybe I should rethink that for the inevitable day we get a real tropical storm or hurricane, but they look cool. We'd like to do something interesting on the patio, too. I also think it might be neat to accent the exterior with a low voltage system of flood lights, but that's totally non-functional.

At this point, the optional stuff all has to wait, because I have spending fatigue. The cost of moving, a new fridge, a couch, paint, etc., is burning me out, and we have a lot of lingering medical bills to pay (individually purchased health insurance tends to suck). But since we hopefully are here for the long haul, there will be plenty of time for these projects. For now, I mostly want to enjoy what we've got.

Hesitant to embrace home

posted by Jeff | Wednesday, March 12, 2014, 10:55 PM | comments: 0

We haven't quite been in the new house for a week yet, but I do feel myself gradually getting comfortable with it. We have unfinished painting projects, and we've yet to get any photos on the wall, but we're heading in the right direction. While there's still work to do there, I'm really happy with my office/mancave.

The weird thing is that I feel a certain reluctance to really embrace this as my home. Home is a different concept than where you live. For many years, home is what I associated with safety and stability. In 2009, I threw out that association when we moved to Seattle. Discovering how awesome Seattle was, I started to feel that the sense of home, and the associated perception of safety and stability, had tied me down in a way that made me feel embarrassed and ashamed. I really felt like I missed out on something I can't quite describe. I still carry that with me, especially after going back to the house I couldn't sell (even if that was not motivated by "home" at all).

Settling in here, finally, after five moves in the last four and a half years, means accepting some level of stability, and I have to work out in my head that it doesn't mean stagnation. A little bit of consistency is good for Simon. I'm mostly confident that there's enough work around here, and even if there isn't, remote work is getting to be more common. For at least the next few years, it's unlikely I'll face a negative equity or depreciation slide, so we could move if there was a really good reason. Perhaps most obviously, it took some nuts to move down here for a contract gig in the first place, and that's about as non-safe as it gets.

I'm trying though. I think as the weeks go on, I'll be able to embrace the sense of home. We seem to have a lot of engaging neighbors, we hear train whistles, there's a zip line down the street and we have our very own palm trees. It's a pretty cool place to live, not a weakness.

The blessing and burden of social contracts

posted by Jeff | Wednesday, March 12, 2014, 10:38 PM | comments: 0

One of the most fascinating aspects of our culture to me is implied social contracts. These vary wildly in scope and application, from potentially good things like basic manners to extremely toxic things like racism. Take the breadth of these social contracts as applied to a "normal" person, and then look at them through the eyes of someone who falls in the autism spectrum, and you may even find yourself questioning the value of some of these arrangements yourself.

I think the hardest thing to explain to people about autism is that many kids (and indeed adults) don't process things in the same way that everyone else does. Social contracts in particular become tricky, because there's little interest in adhering to them if they don't obviously serve a purpose. For example, even at a very young age, a child will typically throw a tantrum and look for a response from the caregiver, because that's socially the interaction that is expected. An "autism meltdown" isn't cured by the response, and has to run its course.

I can relate. As an adult, for example, I find chit chat about the weather with strangers as completely unnecessary. Psychologically, I understand that it often happens because people aren't always comfortable sharing silence.

There's a double edged sword, for sure. I think we can all agree that manners and being polite to people is a good thing. But think about some of the more obsolete social contracts, like looking down on people of a different color, or even the classic aristocratic required respect arrangements. The problem is that someone who is wired differently may reject both varieties.

One weekend to start them all (at home)

posted by Jeff | Sunday, March 9, 2014, 10:44 PM | comments: 0

Friday was the big moving day, and by big I mean we moved five miles from our rental to our actual house. It's so strange to have a house again that I'm not renting. I'm still a little nervous about tying up equity in a house, but at least for now it seems to make sense.

First though, the financial hilarities continue, even though we've closed on the house. The first lender that the builder had us apply with, you may recall, wouldn't loan us money. But guess what, they bought the loan within days of closing. It is nice from a cash flow standpoint to be spending hundreds of dollars less on where we live, that is for sure.

The movers were, as I've come to expect now, total asshats. They scratched stuff up, lost parts of lamps, threw the mattress of our guest bed on the frame without actually assembling it. Diana has the fun task of trying to get some money back from them. But at least the whole thing was done, start to finish, in four hours. We've had car loads of stuff that we moved ourselves before and after, and honestly Diana did most of that.

The only real drama we had started after the movers left. The gas guy got here late in the afternoon, making us kind of nervous. The cable guy was on time, but was completely useless when my cable modem wouldn't connect. He made the excuse that he couldn't support it because it wasn't the cable company's which is bullshit, and I wonder if there aren't actually FCC rules that prohibit that as an excuse. I talked to someone on the phone who got me half way, but no connection. I called the next morning, and the person I talked to got us up and running. Strangely, the neighbors have a big box on the side of the house covering the connections, we don't. Going to have to call about that.

We made an Ikea run to try to cover some loose ends... curtains for Simon's room, hand towel hooks, etc., but were shocked to find most stuff we really wanted was not in stock. That's unusual for Ikea. We did get some new shelves to house the DVD collection, which seems weird to unbox after having it be essentially hidden the last eight months. We got out for a nice lunch, too.

Diana had the kitchen operational almost immediately, as well as Simon's room. I got my office ("The Lab") mostly functional by late Saturday night. The living room TV stuff didn't see setup time until Sunday morning. Diana has a ways to go in her sewing room. Our bedroom is functional, but we're making a painting detour. The secondary color looks too baby blue, so we're going to eat the cost of the paint (like we have a choice) and go with the darker blue we already have on the one wall (and two of the walls in my office).

Probably the biggest thing to make the place feel like a home is all of the photos and stuff, which have also been in boxes since the move to Florida. We're planning to get all kinds of additional photos printed and framed as well. I want to have a wider variety of photos in my office.

I dug in and got the irrigation system set right, because the installers had it running every night, and without regard to the rain sensor. That could have been expensive, and there's a restriction to one day a week anyway. I adjusted a few sprinkler heads that were pointing in suboptimal directions (including my office window). It's so strange to have sprinklers.

Last night we did a family walk to the somewhat disjointed area that is the house models and some recreation areas, including the pool and clubhouse. They just installed a zip line over there, and let me tell you, it's the most awesome thing ever. Simon likes it, but when it hits the end, for some reason he kind of just lets go with his noodle arms and falls off. We'll need to practice.

We already have guests, as my in-laws are here doing a Florida tour. Fortunately the guest room is good enough for guests. It's nice to have some people around, even if they have to dodge some boxes here and there.

I'm still thinking a lot about what it means to have a home, which may sound kind of weird, but it has been awhile since I've felt that I was somewhere not transient. I hope we're here for a good many years, but I honestly don't know what the future looks like. A part of me might even be hesitant to commit to the idea of committing to a place to live. I'm not sure why. Still working that out.

I need to buy a grill now.

Simon's 4th year, in pictures

posted by Jeff | Saturday, March 8, 2014, 3:35 PM | comments: 0

I did this last year, and it's the closest thing to a virtual annual photo book I could do. (The actual photo books are insanely time consuming to make.) So from March 5, 2013, to March 4, 2014, here's a quick look around at Simon's big year.

He wouldn't be my kid if he didn't get to visit Cedar Point in the middle of winter.

Diana was on the moms panel for Great Wolf Lodge, and we had many adventures there, learning to swim and play in the water.

Snow in late March? Yep, and our house in Brunswick, Ohio had a great hill in the back for sledding.

We had some indoor water park fun at Cedar Point's Castaway Bay as well. We took a break in the action for some snacks.

We were members of the Cleveland Metroparks Zoo, and definitely got our money's worth.

Once Cedar Point was finally open, we did the media event for GateKeeper, where Simon added to his collection of many lanyards.

Simon's first ride on Sky Ride, or as Mom calls it, "The Buckets!"

Jr. Gemini was Simon's first exposure to roller coaster addiction.

Once we moved to Florida, the boy found theme park ecstasy, living a few miles from Walt Disney World. This day, it was lunch at Pizza Planet at Disney Hollywood Studios.

Simon's new BFF and favorite babysitter took us to see the ducks at the former Peabody Hotel.

Thumbs up to fun times!

Reading about trucks is exhausting! Simon brought this book everywhere for awhile.

Finally, Simon met a real Blue Man at his first Blue Man Group show at Universal Orlando.

When Halloween came around, Diana put together this amazing pirate costume.

The fall and holiday season meant lots of visits to "the construction house." This is one of Simon's first photos in his new room.

One of Simon's favorite rides at Magic Kingdom is the People Mover.

Simon attended his first IAAPA trade show. Here he's sitting in one of the Gravity Group's sweet cars.

Right after Thanksgiving, Simon took Grammy to Magic Kingdom and the other parks to see the lights.

Simon is too young to volunteer at Give Kids The World Village, but he's the right age to help Kara marathon the carousel for a fundraiser.

Back at Magic Kingdom, we caught a ride on a beautiful January day on Goofy's Barnstormer roller coaster.

February brought Simon's second cruise, where he learned the joys of ice cream. Lots and lots of ice cream!

We finally made it out to the Kennedy Space Center, where we saw the Space Shuttle Atlantis.

Night out with Daddy at Epcot, means sitting in China for dinner.

We ended his year finally closing on the new headquarters for Team Puzzoni.


Simon, 4

posted by Jeff | Tuesday, March 4, 2014, 10:32 PM | comments: 0

Four years ago tonight, Diana and I were sitting in the Coho Cafe in Issaquah, Washington, facing the very real condition that we were going to be parents in a little more than 12 hours.

The day of Simon's birth was such a sleep-deprived birth, which is one of the reasons I wrote it down as fast as possible. In the four years since, being his parents has been easier and harder at the same time.

As with any aspect of your life, it's easy to get bogged down in being a parent. In recent months, we finally got the formal information around Simon's diagnosis for Sensory Processing Disorder and Autism Spectrum Disorder. Neither problem is for sure necessarily a long-term detriment, but it definitely adds extra layers of complexity to helping him develop.

That said, the difficulty does not outweigh the joy that Simon brings on most days. I love the way this kid loves to be outside and moving (a "symptom" of SPD, actually). Being in Florida has been good to a boy who preferred to walk as soon as he could, and he hasn't seen a stroller in more than a year. He has no problem dragging his Grammy around Disney World, walking more than 8 miles in a day.

Simon's sense of discovery is developing as fast as his language skills. Right now he wants to describe everything he encounters no matter how mundane it might be, even if he doesn't have all of the words. The biggest leap he has made in the last year, and really just the last few months, is his transformation into a conversationalist. He wants to talk to anyone who will listen and converse.

And what comes with conversation? Personality. Simon is loaded with personality. He loves to giggle over all kinds of things, and he's developing his own catch phrases, like, "What's going on here?" and, "That's OK, Dad." The best part though is that when he's sleepy and happy, he's quite the cuddle monkey. It's another thing that he didn't do as much in his early years, but now he'll be perfectly happy to crash with you in the beanbag chair or spread out on the couch under a blanket with you.

More than anything, it's his capacity to love that makes him a great contributor to the world. There's nothing more awesome than meeting up with him somewhere, and he runs with excitement to greet you. And it's not just family, but even new people he meets, especially kids. While he certainly has more than his share of defiant moments, he's also quite the warm soul.

And as of tomorrow, Simon is 25% of the way toward driving age. Yikes.

The train whistle

posted by Jeff | Saturday, March 1, 2014, 11:09 PM | comments: 0

I've been really stressed out the last few weeks. A lot of it had to do with the final weeks and days of getting the financing done for the house. Some had to do with the issues, most of them minor, with the house construction. I've found myself frustrated and short with Simon, as his behavior has been difficult every few days and I'm not dealing with it in an effective manner. I think I'm also dreading the June end of my contract, not because I won't be able to find work, but because I kind of like what I'm doing and the people I work with.

All of that negative energy takes its toll. When I stop to gain a little perspective, I always realize that these are not really big problems, but I infrequently have that perspective in the moment. I've been trying to find a little peace, though I haven't really looked in any particular place for it. Today, it found me.

We were at the new house this evening, doing a little bit of work. I went out to the patio, which is currently inhabited by a couple of cheap camp chairs, and I sat down. It was the first time I really got a feel for the neighborhood noise, which is fairly natural most of the time. Then I heard the distant sound of a steam train whistle, obviously from Magic Kingdom.

My brain tripped like a scene from The Matrix, rushing me squarely in one of the deck chairs on the patio of a Lighthouse Point cottage, at Cedar Point. I could feel the breeze off of Sandusky Bay. I could almost see Mean Streak, and hear its trains climbing the lift. It was so rich and vivid of a memory, and it was filled with so many friends, lovers, wives and even my little boy. The sound of the CP&LE Railroad, as it turns out, connects me to my new home where I can hear the Walt Disney World Railroad.

It's so easy to get bogged down by life sometimes. While I'm often critical of people who are so tied to the past that they can't move forward, there's no question that memories and familiarity can provide great comfort. Today I got all of that from the sound of a train whistle. It makes me happy that I might hear it every day.

Converting to homeowner enthusiasm

posted by Jeff | Thursday, February 27, 2014, 5:14 PM | comments: 0

Earlier this week, I wrote about the hell that was financing our f'ing house. Just putting it that way should imply that much of the joy of building a house was completely sucked from my being. But now that it's behind me, the angst is slowly subsiding, and I'm starting to look forward to living there.

From a strategic standpoint, it still made sense to build. The market is still pretty solid around here, and there's a surprising amount of growth. Interest rates of course certainly aren't going down. Also a bonus, the house already appraised at almost $4k more than we bought it for. I'm in no hurry to leave Central Florida, but at least if I did, I'm comfortable that we could unload the house and get the equity back. Also a bonus, the mortgage is way less than the rent was, and only slightly higher than what I had in Cleveland, for far more house and zero snow.

More to the point, I think it will be fun to make it home. I joke about "McMansions" and what not, and it does seem like a little more space than we really need, but there's something kind of neat about walking into the finished structure and see all of those white walls and new carpet. It's like a blank canvas. Between the rentals and that cursed house I couldn't sell, this one is ours to mold and change. I am slowly and cautiously allowing myself to become slightly attached to it.

Last weekend we moved some of the loose boxes of stuff that we never unpacked. I also spent a few hours (too many) installing hardware on the kitchen cabinets. We had a new couch delivered. Diana painted one bedroom wall, and almost two walls of my office. The fridge comes this weekend.

I'm trying not to go nuts, because I would like to restore some of our savings, but there are a few more minor things we would like to do soon. We need a lighting fixture for over our kitchen sink. We had it wired, but we're choosing what to put there. I have something in my mind that I haven't seen anywhere yet. We're also considering a backsplash around the kitchen, and honestly, we'll probably just pay someone to do it. Thinking stainless now, which I swear is not us just copying my brother-in-law Joe. It really just looks pretty sweet. A couple of fans for our room and Simon's are also in order (again, wired for it). I would like to think of some kind of cool patio lighting, too, but still exploring options.

I want to decorate my office, too. I want to put up some photos, spanning life beyond the last seven years. I love my life since meeting Diana, but I feel disconnected from the ups and downs of my previous years. College might be a little more challenging unless I get some film scanned!

I'm coming around to being excited about the house. It's going to be fun having our own, never-before-lived-in space.

Enough with putting down the kids

posted by Jeff | Tuesday, February 25, 2014, 9:35 PM | comments: 0

The spectacular flameout of a woman who runs an email job list in Cleveland after replying to a LinkedIn request with massive toxicity has been interesting to read about. It's funny because I'm not sure I quite get the value of LinkedIn, but sad because someone who seemed to be doing a community some good managed to show everyone what a jackass she really is.

My bigger issue, however, is that she took anonymous contact, described how trivial it was, and made it non-trivial by spending a lot of time on it, and then made far too many generalizations and personality assessments about someone she didn't know. Specifically, I grow tired of people dissing and generalizing about the kids and 20-somethings just coming out of college. Enough.

As a bona fide Gen-X'er, we largely were given the problems of the Boomers with very little in the way of mentoring or guidance from the sub-generation in between. The world was changing rapidly, and we weren't very well prepared for it, at least at first. We were labeled slackers, but as you well know, we've managed to wiggle our way into a lot of places once reserved for people 10 to 20 years our senior.

I'm sure that a subset of Millennials are everything that people claim they are, but as they've advanced into adults, I'm impressed with what they're becoming. They're practical and ambitious. They don't seem as likely to fall into the trap of SUV's, McMansions and status. They definitely seem more philanthropical (especially compared to my generation).

The point is, they're going to have your job if you're not careful, so stop discounting them. They need to be mentored and guided, as every generation does. Trying to tear them down serves no one.