Archive: October, 2013

Yay cloud, eventually

posted by Jeff | Thursday, October 31, 2013, 10:35 PM | comments: 0

As someone who works in software, I obviously have a fair amount of knowledge about servers, networks and what not. In an architecture role, especially these days, I honestly don't think a ton about the innards, because it largely doesn't matter to me. For example, I understand the idea of a "load balancer" and having a number of "servers" servicing whatever other things have to call them. I put those terms in quotes because I know that what I'm logically referring to is distributing the computing load across resources for the purpose of redundancy and scaleability.

But honestly, I don't care if these are physical servers and load balancers at all. These things can be virtual as well. In fact, if I can not think about them at all, even better. From a software standpoint, I'll design for this, and figure out ways to share state when necessary, make configuration something that's self-contained, etc. When designing a system, the general categories of components are important to understand, but whether they're virtual or physical is unimportant. There are people who are really good at understanding and building the physical building blocks that we run software on.

And that's where the world of cloud services makes life awesome. Just as we would prefer not to concern ourselves with why our smart phone works or what the parts are (compared to the PC's we had in the 90's), we don't really want to know about all of that infrastructure either. I've seen that progression even with my own Web sites. I once hosted them in my house, with a Cisco router on a T-1 line. Then I rented a server, which took a day to provision. Now I rented a server that took a half-hour to provision. Next time I move, it will be to a "server" that comes to be in about a minute.

Unfortunately, every place that I've worked, excluding Microsoft for obvious reasons, has been slow to embrace cloud infrastructure or platform (more on the latter in a minute). The concerns are generally around security, that since they don't own the physical components, they're more at risk. I would argue that the big cloud providers, like Amazon, Microsoft or Rackspace, are likely more physically secure than having a rack colocated somewhere, it's just that the stuff is configured in a different way. It will take time for that trust to be realized.

And then there's the whole platform as a service (PaaS) thing. While cloud infrastructure, that is, spinning up virtual servers to use as if they were regular servers, is a step in the right direction, it still comes with all of the baggage that involves administering the "box," patching it, etc. That's the boring pain in the ass stuff that I dread, and frankly hate wasting time thinking about. With platform components, you have a black box that does one thing. Web sites are just places you put stuff to run. Storage is just storage. A service bus, cache, database, etc., are all just what they are, without having to give thought to the underlying infrastructure. That's awesomesauce that nearly eliminates the need for the regular IT operations that we're all used to.

So when do I move all of my crap into the cloud? I think it will be soon. The pricing has come down to the point where it's getting comparable to where I would pay the same thing I do today for a server that I rent. Mind you, I would get less "machine" and bandwidth, but it would free me from a lot of the caring and feeding responsibility of my own server. I look forward to those days.


Health insurance rant

posted by Jeff | Tuesday, October 29, 2013, 10:57 PM | comments: 0

It seems like health insurance is all the rage to bitch and moan about, so why not, I'll do that too. I'm not sure why the 80% of people who get their insurance through work are bitching about Obamacare, because aside from the typical annual increases, it's business as usual.

I decided this year to do the contract thing for a number of reasons, most of which was the ability to bank a bunch of cash so we could move, and also afford to take a little time off in the spring. As it turned out, the job I got here in Orlando is also contract. Regardless, part of that extra money is always dedicated to buying your own health insurance. It comes with the territory.

The ACA has had the effect that the individual policies offered have to meet certain requirements, which is a load of crap because these kinds of policies are typically based on high deductibles. I learned quickly that these make the most sense for a family of three, including a toddler/preschooler. My existing policy will have to be replaced because it won't be offered, and that doesn't matter since my carrier doesn't write policies in Florida anyway. My preliminary shopping shows about a 25% increase, which blows. Even if the Healthcare.gov site worked (what a steaming pile of shit that is), there's little point to even trying because I make too much to qualify for subsidies.

While the consumer protection parts of the ACA are wins, I've never been a fan of the individual mandate. It was always a flawed idea. (A real "public option" should never have been taken off the table.) The bigger problem is that the ACA doesn't address several of the fundamental problems:

  • Health insurance is associated with healthcare.
  • Full-time employment is associated with health insurance.
  • Healthcare costs account for more of our GDP than any developed nation, and we spend more per capita than anyone else.
  • Nothing controls the costs because there is no incentive. It's not like you're gonna say, "Oh, that's OK, I'll treat that cancer next year."
  • You can't price shop between providers.

And if you've ever had any treatment of any kind, you can see the kind of stupidity that makes the cost worse. We had "the scare" this year with Diana. They saw something they didn't like on the mammogram, did the follow up high resolution scan, and eventually a biopsy. It turns out she's fine, after five figures of necessary care.

We'll hit our deductible, which I expected. We did it last year with Simon's pneumonia. Again, you just budget for it. But for Diana's treatment, the claims just sat around with no action, until the Cleveland Clinic was like, yeah, here's your bill. The insurance company wanted more information about whether or not Diana had some pre-existing condition, which is the provision of the ACA that doesn't kick in until next year (fuckers... that's completely immoral). So because it just sat there, the clinic hasn't been paid, and that kind of stupidity costs them money.

I don't mind paying for health insurance. I don't expect anything for free (unless it's something I get as a taxpayer). But the system is so fucked up that no one can think through it and lead us out of the broken system. Honestly I feel a little dirty sometimes having worked for an insurance company, because they're certainly part of the problem.


Four weeks of FitBitness

posted by Jeff | Monday, October 28, 2013, 11:43 PM | comments: 0

I've had the FitBit for about four weeks now. My goal in buying it was to be accountable for activity (or inactivity) and track how much I was eating. Not surprisingly, playing the numbers game means that I've been able to drop about six pounds in that time. It's pretty simple: burn 3,500 calories more than you take in during a week, and you'll lose a pound. You can do this by a combination of burning more calories (exercise) and eating less. So if I get that differential to 5,250 every week, I'll lose a pound and a half.

I'm essentially trying to get my behavior back to what it was in 2005-2006. Back then I was doing the same thing with Weight Watchers, only with their "points," which are an abstraction of calories, fat and some other factors in a formula. I like the FitBit way better, because it's more real. It doesn't demonize fat, but it still makes you think about your choices. At some point I hope to reach a good point to level off, at which point I'll learn how to maintain.

On the exercise front, I hate exercise for the sake of exercise. Nothing has changed there. However, I do like being outside. That's what living in a warm climate is all about. Walking is pretty low-hanging fruit, because an hour of brisk walking will knock out 300 calories. Do that every day, and that's 2,100 per week. More to the point though, I'm at an age where I just can't afford to be inactive, and that's hard when you sit most of the day. The little piece of wearable technology reminds me when I've been sitting too long because it has really low numbers.

On the food end, I'm not really eating all that differently, I'm just eating less. I've tried to avoid the really "bad" foods for years, the obvious stuff like excessive deep-fried food, mounds of packaged snacks and chips, etc. I'm probably a little high on sodium and cholesterol still, but at least there's less of it in my diet. I can't help myself but to have BWW at least every other week. I also try to plan, and yes, I had the buttery creamy goodness of the alfredo the local Italian joint has. It's delicious.

So far, it has been remarkably easy to roll with this, and I'm only hungry if I go really under budget for a day, say a 1,000 calorie differential. That's rare, but I have done it to offset some big eating days. It's just so easy to track it all on the FitBit site. When you distill it down to numbers, there's little room for interpretation or cheating.


Microsoft isn't getting retail right

posted by Jeff | Monday, October 28, 2013, 8:50 PM | comments: 0

A new Microsoft Store opened near us recently, so I figured I'd go check it out. I haven't been to one since we moved from Washington, where the location in Bellevue was the closest. That one had some amount of decent traffic to it, but that makes sense given the location.

The one in the Mall at Millenia (yeah, they spell it wrong) is smaller, and unlike Bellevue, dwarfed by the Apple Store in the same mall. I wanted to check out the new Surface Pro 2. It's a pretty cool device, very chunky for a tablet, or small for a laptop, depending on how you look at it. I'm not sure who the market is for that, but it's very cool.

That said, the place was a ghost town. I think there are a number of reasons for that.

  • There is no one brand, outside of the Surface and Xbox. That means they have to somehow mash together stuff from the likes of Nokia, Dell, Lenovo, Samsung, Asus, etc. How do you do that?
  • One way you don't do it is have a bunch of crap that's already last season. There are a lot of really cool laptops and tablets out now, none of which are shown in the store. How do you compete with Apple when they've got stuff the day it's announced? I want to see the new Lenovo Yoga 2 Pro, with it's crazy high resolution screen, but you won't see it there.
  • The stores have epic launches, with rock concerts and big PR splashes, and then nothing happens. And maybe that's because there is no story to tell there. Sure, they hired away Apple people to design the stores, but a lot of good it does you if the product isn't interesting.

I try to be a fan for my former employer, because I think that despite the nonsense problems, there really are good people there making great products. It's a shame that they can't seem to get them in front of real people who would be excited about them.


Finally, a weekend at home

posted by Jeff | Sunday, October 27, 2013, 10:34 PM | comments: 2

I'm not completely sure, but I think this is the first weekend since we moved here that we didn't go to any theme parks at all. That is, if you don't count Friday night as part of the weekend. That's crazy to think about, after nearly three and a half months.

But here's the thing... we're a few miles away from the Walt Disney World property, and when we move, we'll be less than two miles (line of sight) from the castle at Magic Kingdom. I suspect some of our neighbors will be able to see it, or the Contemporary, from their houses. So when you have a three-year-old that loves to walk, and you're exhausted on his behalf on toys, iPads, TV and other at-home activities, it's nice to get out. That, and you'd think that riding the monorail was quite possibly the best thing anyone could possibly do. He digs it.

There is another plus, and that is little bouts of what feels like a really short vacation. It's not entirely practical to take real time off until December or January, so spending three or four hours in a place that I associate with epic vacations past is a nice little escape for me.

This weekend though, I wanted to spend some time working on projects at home, and maybe even play some video games (Lego Marvel Super Heroes just came out, and we do love those Lego titles). It's really hard to stay home when almost every day is awesome. How do you stay home when it's 80 and sunny?

We did get out and about a little. We stopped by the new house to check out the progress there. It's really coming together quickly. We also walked through some new houses near us, just to compare. I think we got about 7 miles of walking knocked out between the two days. Our HOA had a little fall festival of sorts near the club house, which had some delicious food trucks, but we already ate.

Oh, and Diana snagged the "cluck curry" recipe from Raglan Road (a restaurant at Downtown Disney), and she made that on Saturday night. It was superdelicious. I mean really, really good.

With the weather being a little cooler, we've been able to turn off the air conditioning and open up the house a bit. Having the screened in porch has been excellent, because we can just open the sliding door and let the cats out there.

It was nice to not go anywhere for a change.


The closest thing to fall

posted by Jeff | Saturday, October 26, 2013, 11:04 PM | comments: 0

We've had some awesomely "cool" weather here in Orlando lately, which is to say that it hasn't been much over 80. Overnight lows have been in the 50's, and we have even busted out the jackets. Last night we braved the crowds at Epcot to say hi to a Cleveland friend, and ironically see Survivor do "Eye Of The Tiger," and it's the closest thing we've had to our beloved Halloweekends at Cedar Point (though obviously not with the many friends we would see there).

With traces of snow and slush last week in Cleveland, I giggle at the fact that those we've left behind have to deal with that mess, but honestly I do miss having a proper fall, with the jacket weather, cool leaves, and the general embrace of the season that is scarce at best here in Orlando. It will get a little cooler over the course of the winter, but it will still be lovely here. In the long run, that's awesome, but I do wish I could have a little taste of real fall.

I have to remember that the perfect days like today (mid-70's and sunny) are going to be pretty normal for us. While the days will be shorter, like anywhere else, I won't have to deal with weeks of flat gray skies and no sun, coupled with cold rain or snow.


The gelatinous blob that is my brain

posted by Jeff | Thursday, October 24, 2013, 10:21 PM | comments: 0

By the time I get home from work, especially near the end of the week, I feel like my brain is reduced to mush. Like I'm really reduced to grunts. I'm not physically tired, but mentally I feel like I've got nothing left.

I think there are two things going on. The first is that work does consistently challenge me. I'm involved in a ton of different things, so I'm context switching a lot, and at the same time, there are things that I have to devote time to for deeper thought. Don't get me wrong, I love this situation, because it appeals to my strengths. It's just that it can be mentally intense for long stretches of time.

The other thing is that I've been at it for more than three months without a break. Ordinarily I would just take some time off, as you just expect to do that as a contractor, but because of the timing with the house, I would really prefer not to do that. I just need to suck it up for awhile.

Of course, work isn't the only thing. I may not be actively working on my own projects, but I do think about them quite a bit, and I'm always trying to stay on top of the technology. I try to intellectualize the behavior of a 3-year-old, too, which is likely impossible.

It's funny how your mind can kind of regress into animal mode when you're tired of thinking. You get back to the basics of the instinctual needs. I don't think I'd make a good caveman, because I don't think I would be good at killing my food or demonstrating my dominance in the herd so I can have sex and procreate.

I need a break. Fortunately, the load at work comes in waves, so one week is exhausting while the next is pretty easy to roll with. Only a few more hours before I can switch off for the weekend.


Apple's (mostly) wild pricing

posted by Jeff | Tuesday, October 22, 2013, 10:50 PM | comments: 0

Lots of product announcements today from Cupertino, and they're all a little strange. Maybe. I'll get to that.

They've got a new iPad that's the latest hardware, but it's $500 for the base 16 gig model, and that doesn't include any cellular capability. The competition from Amazon and Google offers more storage and/or cellular, and the Amazon tablet even has a higher resolution screen. Granted, the UI on the Kindle totally sucks, but we're talking about Web surfing, Facebook, video and Angry Birds. Frankly the UI doesn't matter that much.

The iPad Mini gets a higher resolution screen now too, starting at $400, but again, it has the same problem with the competition and what they offer for the dollars. I mean, I bought a Kindle Fire HD two months ago for $159, and it has as much storage as the iPad Mini. Again, sucky UI, but is the Mini $240 better? Maybe, but given the Facebook, porn Web surfing and reading use cases, I'm skeptical.

Now, my theory is that maybe they can get away with the pricing, because as they've demonstrated with computers for the last decade or so, they're in no hurry to participate in a race to the bottom for commodity crap. Their goal was never to sell cheap stuff cheap, or sell software on thin margins. They've never had huge marketshare with computers, but if you can sell one and make $300 a pop, while Dell sells one and makes $30, you don't need to sell as many.

So combine that direction with a market that continues to expand, and you can lose market share while selling more units. Android phones collectively crush the numbers for iPhones, but the margins are enormous. If they can do that with tablets, maybe they'll continue to win. I'm just not convinced that the same theory will roll for tablets.

Speaking of computers, I was disappointed that they didn't roll out some kind of "retina" MacBook Air, but the 13" MacBook Pro retina model is very compelling, and unlike the last generation, priced right. I'm definitely thinking about it for next year. My concern is that there are a whole lot of other manufacturers making really nice laptops with even higher resolution (touch) screens. If they can get the track pad right, and cost less, I'll have to think really hard about sticking with the MBA.


Don't be that parent

posted by Jeff | Monday, October 21, 2013, 10:49 PM | comments: 0

Before I was a parent, I found myself judging a lot of other parents. "How could they let their kid do that? That kid is gonna be screwed up. Nice parenting, jackass!" These were not among my finer moments, for sure. As it turns out, raising a kid isn't that easy, and there is no magic formula.

Now I avoid being that person, since obviously I get it to an extent. I'm still amazed at how people can be. Like when you're queueing to board a plane, and some dickhead makes some comment about the woman traveling alone with a crying baby. That happened to me on my last trip to Seattle, and to balance the universe, I offered to carry the stroller for the woman to the end of the jetway. I mean, come on, the woman just gave the gift of life, cut her some slack.

And what's worse is that sometimes people have kids and they're really "that parent," so convinced that they have all of the answers and everyone is getting it wrong.  Sure, we can all agree that it's somewhat easy at first, because all babies cry, eat, poop and sleep. They might deprive you of sleep, but they're not usually very complicated. But within a year or so, they start to get really complicated, and they all do so in different ways.

I get this all the time, because I like to share stories about my parenting experience. Inevitably, someone has to chime in with cocksure advice that will solve all of your problems. I'm not really interested in that advice, I just need a little empathy. You don't have enough context about my issues because you don't live with the kid. Back off.

I think this really hit home for me when a couple of friends were recently kicked out of a Chipotle because their kid, with autism, was "making a scene." To the casual observer, or the parent with all of the answers, the reaction might be that those parents suck at life, but they don't have context. If your kid is wired differently, your advice isn't worth shit. (For the record, Chipotle apologized and admitted they had an obvious training problem.)

Living near Walt Disney World, and seeing all kinds of things as far as children go, I've learned to reserve judgment. My kid isn't a saint either, and the reality is that I don't know what's going on with a misbehaving kid or the parents. It's really none of my business. Live and let live really works for you in this case.


Our preschooler

posted by Jeff | Monday, October 21, 2013, 9:49 PM | comments: 0

Simon has been in preschool for a little over a month now. It's a bit different than the birth-to-3 program he was in last year, because it's five days a week instead of two. While he was hesitant to get out of the car for the first week or two, he definitely seems to enjoy it. He even randomly talks about his teacher.

The school is great about telling us how he's doing every day, and the worst we've seen is that he needs "reminders" about how to play with the other kids, particularly on the playground. It's hard to really know for sure how is development is affected by school, but I've noticed an acceleration lately in some areas, particularly his verbal skills.

For the three months we've been here, it has been clear that Simon has a lot to say, even if we couldn't understand it. That's changing very quickly. His vocabulary surprises me almost every day. For example, today we were walking down the street across one of the lakes, by the construction houses, and he pointed at one that was just the foundation and block and said, "The house is a brick wall." He's very into describing everything he sees in as much detail as possible (unless it's something with a door, in which case he just focuses on that). He's also reciting portions of stories from Chuggington, or his new favorite, the movie Cars.

The biggest change for us is to force Simon to have conversations with us. We don't let him off the hook with grunts. We ask him questions and expect answers. When he's tired that doesn't go well, but other times he'll just surprise us. Tonight I asked him about school and he said, "I have to play nice with others, sorry dad." His retention is obviously solid, because if you ask him for directions, he'll tell you at every intersection which way to go.

I don't get to see a lot of Simon's fine motor skills in action, compared to what he does in school, but I still see dramatic improvement. He can put his own shoes on, though he has a hard time pulling the velcro on tight. Getting undressed is easy provided he's motivated. A spoon with applesauce or yogurt is a piece of cake, but the fork is tricky with hard shapes (macaroni shells), and he doesn't like using it. His block construction seems less random. His magnetic toy that sorts little colored balls into the matching holes is one of the few things I've seen him be patient about. They send home a lot of things from school where he colors, but I've not seen him do it in person. His writing skills are probably the thing I worry about the most, and I look forward to hearing from his teacher about where to go with that.

Gross motor is getting better too. I see it mostly on playground equipment, where Simon just gets up and around it faster than he used to. His running was a gallop for awhile, presumably to compensate for the weaker side, but that has evened out. While he has to be reminded, his stair climbing is consistently in a nice left-right rhythm. Descending stairs is still hard with his left first. This is where I can't wait to move into the new house, so we have stairs again. Right now all he ever sees is stairs at Magic Kingdom and the hotels. As fun as it is for him, once a week is about all we can handle!

Potty training hasn't been great, but there are little victories. He mostly seems to understand what his body is releasing, and that he can control it, but he's still a little apprehensive about sitting on the toilet unless it's a stall tactic. He has successfully peed a couple of times, so that's a start. The breakthrough can't come soon enough.

I'm less anxious about his development than I used to be. I know Simon will eventually be functional in terms of language and skills, but I don't want him to be behind. He has two years before he starts real school, and if he keeps up this pace, I think he'll be in a good place.


Political activism vs. apathy

posted by Jeff | Sunday, October 20, 2013, 11:20 PM | comments: 0

One of my catch phrases (can I have catch phrases?) is that we get the government we deserve. I believe that democracy works, if only because the asshats we keep sending to Washington seem to reflect the way people operate. A recent study showed that just over half of Americans are politically somewhat centric, with subtle leanings, and only a small percentage sit on the fringe to the left or right. It still seems like a majority of people aren't politically content unless they pick a side, and go all in to hate the other side. I mean, why worry about policy when you can just detest the opposition, as if it were a pro sport?

The recent nonsense over the budget and debt ceiling were incredibly destructive when it comes to public faith in the system. I think the hardest thing for people to swallow was that it was the fringe element, a minority in numbers, who really caused the problem. If a majority of citizens actually do fall somewhere in the middle, that doesn't seem logical. But the bigger problem is that there is so little discussion of actual policy anymore. It has become a game of, "I'm for whatever the other guy is against." That's insane.

So if we really get the government we deserve, then the solution is to be more engaged. You have to get active in the system. By active, I don't mean liking and sharing some silly graphic on Facebook. I mean you try to understand the issues, let the asshats know what you think, and share it with others in a way that expresses a well thought out argument. It also helps to be open to the possibility that your perspective will change over time as you acquire more information.

I'll admit, my desire to get involved keeps getting smaller and smaller with time. The more ridiculous it gets, the less I want to even think about it. There is too much awesome going on around me, and life is too short, to get sucked into the nonsense. But then, I worry about what my kid will be left with, and I get drawn in a little. Some issues are more important than others. I still wonder if the limited amount of bandwidth I have is worth it. I can show up at GKTW and volunteer, and see that I'm helping to make the world better, instantly. I can stand in front of the US Capitol with a sign and no one will give a shit. It's hard not to be completely apathetic.

I can rationalize this to a degree. Some people are better suited for this kind of thing than others. We can't all be surgeons, and so we can't all be politicians either. There is still a bit of low-hanging fruit to tackle. Voting isn't hard (despite the efforts in many states to make it so). Local issues are super easy to get involved in. Heck, one of my friends is even on a school board.

I don't think I can feel good about bitching and moaning if I don't participate. It's like buying a McNugget and being pissed it doesn't taste like a deliciously marinated chicken breast at home. You do what you can.


A restaurant win

posted by Jeff | Sunday, October 20, 2013, 10:02 PM | comments: 0

I remember that soon after our move to Seattle, we quickly became frustrated looking for good local restaurants. That's crazy when I think about it, because there are so many out there. In retrospect, the problem was likely that we started too close to home. After some time passed, we found some pretty great places, we just had to travel a bit. There was a great place in neighboring North Bend that we loved, and one off the beaten path in Bellevue. Then we got into Seattle proper and found some good places too.

Orlando's first industry is tourism, so naturally the demand for good food is high. There is no shortage of good food here. You can start with the obvious places, like Epcot, or maybe a few of the places in Downtown Disney or City Walk. There are places on I-Drive, too. But you can't spend like a tourist every time you go out... that's not sustainable. (Exception: Epcot Food & Wine Festival... that's worth it.)

We had a couple of early misses, the greatest of which was a dive Irish pub kind of restaurant. Ended up being a lot of crappy food service stuff that was overpriced. It was the kind of dive that your feet stick the floor just so. Sadly, the atmosphere was tight, and the food shitty.

In our Seattle search, the biggest failure was in the Italian area. One place after another had "wet" pasta and bland sauces. Seriously, how can you screw up alfredo sauce... it's butter and cheese! We never did find one that was awesome, though Boxley's in North Bend did have a few Italian dishes that were great.

So a few weeks ago, we tried an Italian place that's in the little strip mall with the closest Publix, called Bella Tuscany. And what did we find? Live music, and plates of awesomesauce and flavortexture. I don't even know what that means, but the food is the tits. The service is pretty solid, too. I'm also crazy about the light fixture over the host stand.

Yes, they have an alfredo sauce that's probably the best I've ever had, but everything they have is great. Even the grilled cheese for Simon is awesome. They put a piece of mozzarella between two pieces of American! The pasta is made fresh by someone else in town, but it's not from a box. The sauces are rich and delicious. Even their iced tea is fancy. And they have live music.

The timing isn't great, since I'm trying to eat sensibly, but I think I can fit it in every few weeks. It's delicious.


Parental empathy

posted by Jeff | Sunday, October 20, 2013, 9:27 PM | comments: 0

One of the biggest things that I've learned as Simon's dad is the importance of empathy. I think early on I saw myself responding emotionally with aggregation at things he would do, and I realized that was absurd. Now that he's a little older and knows he can push buttons, this is even more important. I have to put myself in his shoes.

Let me make clear what this isn't. This is not feeling bad for a kid and engaging in that coddling participation trophy bullshit that seems to be so prevalent in our culture. Understanding the reasons your kid feels a certain way isn't reason to just bow in to whatever they need. That understanding is however key to how you react.

I'm surprised at how much of what he experiences that I can remember. The memories started coming back with the efforts Simon made to walk. These days it's more the intensity of feelings around common scenarios... not wanting to go to bed, wanting to play with cars, or in tonight's case, having a sleepy meltdown. I totally overthink a lot of those situations. I get what he's feeling, but then how do I respond in a way that helps him in the short and long term?

When he was really small, we definitely coddled a little. Helping him roll over when he couldn't do it was probably the biggest mistake that had long-term effects. Now we let him flail a bit if it means he'll learn from it. That's eventually how we got him undressing and getting shoes on. It was too easy to let his frustration be reason to help him through things he couldn't do, and that wasn't helping him.

Tonight we had one of those situations where he was tired out of his mind, and being combative toward his bedtime routine. Even brushing his teeth he couldn't keep it together. Eventually, to get him calm enough to go to bed, I had to crawl in with him a bit. I don't think I've ever done that before. Actually, I know I haven't, because he didn't even have a bed I could fit in until we moved here! The point is, I could tell via empathy that what he needed most was the comfort of his parents.

It can be tough at times, but I love being Simon's dad. It surprisingly makes me more self-aware.


Growing pains are real

posted by Jeff | Saturday, October 19, 2013, 11:54 AM | comments: 0

I think we're in for some interesting times with Simon. I'm very convinced that he's on a growing tear right now. There are so many things I've noticed just in the last week. His hands don't look like little sausages anymore. If he has food he even remotely likes, he f's it up in record time. Dude put away almost an entire box of Annie's Mac the other day. And while I don't know if this is scientifically proven, he has been clumsy lately, which allegedly is a sign of rapid growth. My boy isn't so little anymore. When I pick him up for "hugs!" it's like his legs are dragging on the floor.

That got me to thinking about "growing pains." I know I had them when I was a kid, and right in the age ranges the medical sites suggest (preschool and grade school/pre-teen). The same literature suggests it's not so much a symptom of the growing itself, but a result of intense athletic activity at those ages. It's just that we're more prone to it at certain ages. That makes sense to me. It stands to reason that if a kid has a big day of play, he or she is going to feel it.

If Simon gets the pains, that's going to suck for him. All you want is for someone to rub your legs and be there, and that still doesn't really make it entirely better.


Pondering an arcade machine project

posted by Jeff | Wednesday, October 16, 2013, 10:34 PM | comments: 0

Some days I really miss having the Jurassic Park pinball machine. Even though we can play video games on our phones these days, there was something about the tactile experience of pinball. Similarly, there was always something special about arcade machines, even though we've had home systems going back to pong.

The fiscally irresponsible part of me wants to call Stern Pinball, the last pinball manufacturer standing, and buy one of their floor models at the forthcoming IAAPA expo here in Orlando. Fortunately my better judgment will prevent that, though a new machine would be pretty incredible.

The machine I really would like to obtain, and it would certainly take less space, is the cocktail model of the Namco Class of 1981 machine, which has Ms. Pac-Man and Galaga. Namco doesn't appear to make it anymore, but I see vendors online claim to be selling them new. I have a lot of fear that most of these are unlicensed, not authentic parts, but I really don't know. I saw a lot of scary stuff in the local pinball shop back in Cleveland. If I get one of those, I want it to be a real, Namco-made machine. Namco is making a brand new machine with 13 games and an LCD screen, but it looks more like furniture than the classic cocktail machines.

There is another alternative, and that's to build an actual cabinet and make one myself. With emulators, you can run all of these ancient games on your computer. Not legally, but it's not hard to do or obtain. Plenty of people have posted plans online to build a cabinet, and the controller hardware isn't hard to come by either.

That said, I'm incredibly unsure of myself. I'm not confident that I can cut wood and do it all right to the extent that I'll end up with something nice. Still, I've wanted to do some kind of project with wood for years, maybe as a hole punch for my man card or something, but starting with a bird feeder seems lower risk.

It's something to think about more after things settle down and we've moved (again). Because I totally have time for another project!


The weird state of feminism

posted by Jeff | Wednesday, October 16, 2013, 9:18 PM | comments: 0

Maybe it's because I started coaching high school girls early in my 20's, maybe it's because women have simultaneously frightened and amazed me, but I've always been something of a "girl power" kind of guy. I mean, if I had to pick a superior gender, it would probably be women for a lot of reasons. Their cultural expectations are ridiculous, and they often have the responsibility of growing a human life then squeezing something the size of a watermelon out of an opening as big as a lemon at best. All love and respect, ladies.

In my college years, and much of the next decade, I thought of feminism as something that ultimately was supposed to bring women to an equal place as men. In other words, they would be astronauts, presidents, executives, etc., and make just as much as their high-testosterone counterparts. I remember meeting a girl in college who said she hoped to get married and have lots of kids after school was done, and she had no desire to enter the workforce. I thought, wow, that's f'd up. Way to dream big.

Today I think differently, because my own perception of what success is has changed so radically over the years. I completely reject the type-A definition. After all, part of the thing I always thought made women powerful was their childbearing ability. In fact, that's where feminism has made an interesting (and rightful) turn. The stay-at-home mom is no longer a relic of the stereotypical 40's housewife, but a positive and respectable occupation. Generations of parents were absent. Now it's balancing out again, and often one parent, if they can afford it, is staying at home.

Meanwhile, the Internet has brought misogyny to a new level. I mean, it's outright scary, and it seems more in the open than racism or other more classic isms. But women are taking more prominent and powerful positions in the world, and I would say that's progress. At the same time, the sexual angle has changed a bit. It used to be that a woman's sexuality, when demonstrated, was a sign of weakness. Now the sexuality is part of the power that's inherently female. Still, it causes controversy, as the recent spread with Yahoo CEO Marissa Mayer showed.

I think the evolution of feminism is interesting to observe. It seems willing to admit that women and men are different, but that the difference doesn't indicate weakness or superiority. And at the end of the day, I'm still willing to declare women the "winning" gender.


Three months under da sea (world)

posted by Jeff | Tuesday, October 15, 2013, 11:33 PM | comments: 0

Today was the three month anniversary of my start date at SeaWorld Parks & Entertainment. Coincidentally, I also went to the mothership park with my boss and another coworker for lunch. It really helps to visit the park, because it gives context about what I do. Since I'm on contract, not an FTE, I can't just drop in any time, unfortunately. While taking a lap on Kraken, I wondered how many of my colleagues realize the awesome product that they're a part of for millions of people every year.

Obviously I can't talk about what I do in detail, but it's a pretty wide variety of stuff that ranges from administrative to compliance to design to strategic work. It's software architecture from every angle. What I really dig about it is the constant context switching, which would probably drive certain personality types nuts, but it gives me opportunities to really expand my experience. Hopefully the gig will renew or convert three months from now.

Meanwhile, Florida life in The OC is pretty solid. It's hard to not have a traditional October (and I'm sure I'll have a little bit of that in May, too), but in 90 days we've only had one completely absent of sun. It's remarkable that I never feel any weather induced funk. The hardest thing is to not be outside for any extended period of time. I never want to stay home.

We're getting to know the west side of the county pretty well. In vacation central, there's certainly no shortage of things to do. We do visit WDW quite a bit, and especially now during the Food & Wine Festival at Epcot, there is always good food and live music. Diana is regularly volunteering at GKTW. I'm trying to get involved in the local user group, though admittedly haven't found a good time to hit any of their events. We don't have a wide social circle yet, but it's slowly evolving.

Simon seems to be really flourishing as well. Certainly the kid is a little spoiled that he gets to visit Disney at least once a week, but it has been interesting to see how a kid with speech delays is so eager to talk about the things he sees there. Preschool is really working for him, too. And with all of the great weather, he has plenty of chances to get out walking.

I think we're still working on balancing things out, and we're also a bit transient still since we'll be moving again by February. But after four moves in four years, I have to say that this transition (for me at least) has been the easiest. Even though there is a fair amount of uncertainty in our future, I never question the decision. There's no doubt we did the right thing.


The politicians care about the wrong things

posted by Jeff | Monday, October 14, 2013, 10:44 PM | comments: 0

I happened to see a senator on the news tonight, a Republican no less, who said that the biggest mistake his party has made in all of this budget nonsense is that they should have been focusing on ways to cut spending instead of harping on this one thing, the ACA ("Obamacare"), that is the law.

That's the thing with most of the GOP right now. Nothing is about policy, it's about the opposite of anything that Obama supports. There's a bizarre hate for the person himself, not his policy, that I don't understand. Republicans have been clinging to that, and it's a complete waste of time. There are so many legitimate policy issues of the president that have logical and excellent positions. It annoys me to no end that the party can't focus on those instead. All I see is that they don't like the black guy with a funny name.

Meanwhile, the Democrats' big box of stupid with pursuing the ACA was that it really has nothing to do with making anything affordable unless you're poor. They focused on the "healthcare for all" when what they really meant was health insurance for all. It does nothing to fix the insane cost per capita that the US spends on healthcare. Think about it... we're almost to the point where one in five dollars of the GDP is spent on this nonsense. Even more disturbing is that we pay more taxes toward healthcare but don't get anything for it. I love this very matter-of-fact view about why it costs more here. Why couldn't the Dems focus on the real problems?

But I still don't entirely blame the politicians. You've seen Facebook, so you know that people will be asshats and post the same stupid shit that isn't true if it means aligning with whatever they already believe. If the people will be asshats, then so will the people they elect. For the people, by the people, after all.


What I want to be when I grow up

posted by Jeff | Thursday, October 10, 2013, 10:56 PM | comments: 0

A friend of mine has been deep into exploring a big job change, and in the process really thinking about how it fits into a long-term career plan. This isn't a career change situation, mind you, but more of a job change that aligns with advancing goals. I've seen people do it countless times, but never thought much about what the motivation is.

I usually associate these kinds of things with very Type-A people who have no work-life balance, but my friend is mostly not that kind of person. Having a career path in mind is probably a good idea no matter what your personality tendencies are, because it helps guide your potential into something tangible.

I'm very classically Type-B, though I definitely borrow from the other category in some ways (primarily the desire for people to communicate efficiently). This implies that I'm very go-with-the-flow, and in terms of career, I think that maybe I have been to some degree. There were a couple of years, from 2002 to 2006, where I wasn't thinking about career in any serious way at all, and drifted from one thing to another in a non-deliberate fashion. Some good things came out of that, not the least of which was my book and an intense season of coaching high school volleyball.

When I was in college, I had it all figured out. I was going to be a superstar DJ and own a radio station. It took me less than a year to realize how awful that business was, and then I spent three years doing (and enjoying) local government cable TV. When the Internet came calling, that was the start of the transition to software development (1999), and I've been at it ever since.

But I never had a plan, a long-term goal, or any real sense of what I wanted to be when I grew up. And really, why would I? Not counting the crappy on and off employment years (2004, 2008, 2009), I was still managing to double my income every few years. I always thought about what I would enjoy doing, but never thought of it much in the context of job titles or scope of responsibility.

Then I ended up at Microsoft. As much as I have certain issues with their angle on career development, I still ended up having to think a lot about what I wanted to do. It was clear at that point that I did not want to be a heads-down code monkey, and going down the path toward technical fellow (like the dudes who write entire languages) was not something I felt capable of. I did, however, enjoy more of the technical design work, managing people, prototyping stuff and improving process. These were all things I was very good at in the short-term consulting gigs I had. Finding something at Microsoft that allowed me to do that variety of things was shockingly hard, in part because of a recurring theme of "how we do it at Microsoft." There was one gig I interviewed for in the Xbox org that was all of these things, but while I "passed" the interview loop, the other guy who applied was just slightly more experienced than me, so they gave it to him.

At Humana I got to use a lot of these skills in a role that wasn't technically the domain of software architecture, but because that company lacked a lot of experience (and had its own bubble problems), it's largely what I got to do. It was the first time in my post-broadcast life that I understood what I was really good at, and what the job looked like.

Once we were ready to move on from Cleveland, finally able to sell the house, I happened to align with just the right thing at SeaWorld Parks, and I'm getting to do similar work to the Humana job, only this time it's in a better environment, and my inner-carnie loves the subject matter.

The work in the last year and a half has really made me think about a long-term goal. Technical leadership is clearly where I want to be. The question then becomes, what does that look like? Is it a CTO/CIO kind of job at a company of similar size? Is it me running my own company? The size of the company really dictates whether or not I would be qualified to do the job today. If I had to put a number on it, probably not with an org larger than 40 to 50. I would like to think, perhaps naively, that coming up through the technical ranks while being able to do the work (most upper management tends to be straight management career types) is an advantage.

Still, given my Type-B personality, I'm totally open to a different path, and would probably be content to run some little company that did a few 100k in revenue a year publishing cat photos on the Intertubes. Not going all-in toward some goal doesn't make you weak or a slacker, it just means you're open to constant revision based on your continuing acquisition of experience.


Screen time

posted by Jeff | Wednesday, October 9, 2013, 6:42 PM | comments: 0

I think it's a symptom of growing up in the 70's and 80's that I automatically assume too much screen time is bad. For us as kids, that meant TV, but we could certainly extend that into video games, computer time, and now tablets (probably phones, too). As a parent now I still have that mentality, but partly because I see other parents use screens as babysitters. Some kids can't go anywhere in a minivan without watching something, and others can't sit in a restaurant without a screen. If I'm being objective, I suppose these kids aren't being harmed, but I also feel like they're missing out on seeing the world they drive around in, or the people that move about their environment.

So with that said, I'm trying to keep more of an open mind. When I look at all of the time not scheduled for Simon by school, meals or whatever, I would certainly be concerned if that time was dominated by screens. He likes to watch certain shows, and we generally meter that a bit.

His new thing is the iPad. Diana bought some educational stuff, and I'm happy to see him engaging and figuring stuff out. Even navigating between apps is pretty easy for him. One game that has a lot of matching, color stuff, etc., is something he's getting too. He can even go between things in the game deliberately. He does get frustrated at times though, and that's probably his biggest challenge.


50k Topics

posted by Jeff | Monday, October 7, 2013, 8:42 PM | comments: 0

CoasterBuzz quietly hit a milestone of sorts last week. The 50,000th topic was started. I say quietly because I've never been that eager to focus on quantity over quality when it comes to quasi-anonymous voices talking about stuff. Well, I did in the early days, and I quickly learned that no amount of page views were worth it if it was all noise.

The forum stats are as weird as ever, because the number of people who participate is about the same as it has been for probably a decade. What's weird is that overall traffic is up pretty significantly this year, but the number of people actually contributing to discussions has been pretty flat. Not saying that's good or bad, just now what I would expect. It's probably better that way, after a summer of community shakeouts that put the smack down on a couple of people who were trying to hard to be the life of the party.

If you told me then years ago that the site would still be around today, I'd be skeptical. Heck, in 2011 I was wondering if people were losing interest. Then late last year things started perking up, and this year has been even better. It's a really fickle audience that kind of engages and drops off in a cyclical fashion, not entirely unlike the way my interest varies. (Though it's not as fickle as the Cedar Point fan audience... the moment GateKeeper opened it seemed people had already moved on.)

Closing in on 14 years, I'm not sure what I'll do next with it. I'm hesitant to mess with it too much, because the SEO is really solid, and the "metro" look is even more trendy now that iOS is doing it. (Seriously, even SuicideGirls recently went metro.) I have some ideas, but honestly, if I can squeeze out any free time to work on this stuff, it's going to be to work on our quilt site (which I'm taking a break from to write this blog post).


Construction expertise

posted by Jeff | Sunday, October 6, 2013, 10:14 PM | comments: 0

House building has become something of a new interest for me lately. When we started shopping around, we honestly didn't look at much beyond floor plans and pricing. The finer points of construction are not something I'm particularly familiar with. Here in Florida, I see mostly the same thing... block construction with wood framing on top, drywall on the inside, stucco and other materials on the outside.

Certainly, all houses are not built equally, but I've done a fair amount of walking through half-finished houses, and I do see subtle differences in the way things are built. The variations aren't better or worse, for the most part, just different. One of the dudes at work is actually a registered home inspector, and shared interesting information about things to look for.

For example, there are different kinds of floor joists that have various pros and cons in terms of cost, possible span length, and squeaking. Our house will have "engineered" joists, which are a combination of 2x4's with plywood in between. Very different than the 2x8's my last house had, squeaky floors and all. It would seem like the trusses would be "best," but mostly they just seem the most expensive way to build a floor.

I was surprised when we drove up to the house site the other day and found most of the walls there, already assembled. Pre-fabricating the walls seemed like a shortcut to me, but as the dude at work pointed out, when machines cut the wood in a climate controlled space, it's a lot more precise than what you'd get with humans in the elements.

Honestly, the drywalling is the most interesting part to me. I don't know why. We got the rounded corners option, so anywhere a wall ordinarily comes to a point, we'll have a round edge. I don't think I've ever seen that before prior to the house we're renting, but it's a really nice touch.

Exteriors are so different here. In Cleveland, you could peal off a piece of siding and get to the insulation pretty easy. Here, the lower floor is concrete block, apparently because of bugs, mostly (both the destructive kind like termites and carpenter ants, as well as the annoying kind like the giant cockroaches). With stucco on the outside, there are no seams, which further helps with the bug issue. That's almost a fault in some areas, where the houses all look like boxes, but fortunately our builder (and others in the area) use a combination of materials to make for interesting front elevations that include wood siding, brick and rock.

With new construction picking up again down here, and in a lot of places around the country, apparently getting people in the skilled trades, especially electricians, is becoming difficult.

Construction is fascinating to me. I wish I knew how to do some of this stuff. The extent of my expertise will be mostly limited to using my drill to install cabinet hardware.


Family man

posted by Jeff | Sunday, October 6, 2013, 8:50 PM | comments: 0

This was a really fantastic weekend for family time. Diana had orientation at GKTW for volunteering on Saturday, so I took Simon to Animal Kingdom for a couple of shows. We got home in time for Simon's nap, then we had a nice evening around the house. Today we made a family stop at Magic Kingdom for a couple of hours, came home again in time for nap, and had a nice afternoon playing catch and stuff. Pile on the fact that our little man is being quiet the cuddle monkey lately.

There isn't really anything glamorous about any of this, but it makes me so happy to have these great times with my little family unit. Simon might be a handful at times, but he'll never be a 3-year-old again. It means the world to me to be there and be his dad. For as much as I complain that there aren't enough hours in the day to do everything I would like to do (or mismanage my time), I'm really finding my peace with the situation. My priorities are what they are, and they are Simon and Diana.

Of course, I do understand the danger in this, because it's a classic problem of people waking up one day and resenting their families because they feel like everything they do is for them. For now at least, giving this time is just as much for me as it is for them. I'm a giver to some extent, especially in relationships like these.

I'm still working on the balance thing in a new environment, with family, etc. It's nice to feel happy and not have a long-term set of goals and issues conflict with that.


Magic Kingdom therapy

posted by Jeff | Friday, October 4, 2013, 10:04 AM | comments: 0

I'm not sure why, but sometimes I feel strangely guilty about visiting Walt Disney World on a frequent basis. It's not like we didn't go to Cedar Point constantly when we lived in Cleveland. I think it's because there's some stigma about the fantasy that the theme parks involve. For some reason, grownups tend to believe that fantasy is bad.

But I have a 3-year-old, and he has a few developmental delays, primarily with speech and both fine and gross motor skills. Simon loves Magic Kingdom, and while theme parks may seem like some superficial distraction, to him, they're a great opportunity to stimulate him and help him. That was never the intention of bringing him, but I'm surprised at how much value he gets.

From a physical therapy standpoint, a visit to the Magic Kingdom means a whole lot of stairs. One of his issues is right-side dominance, so he's physically weaker on the left. If we park at one of the hotels, that means stairs to go up to the monorail. Then there are stairs at two of the three train stations at the park. Long sets of stairs are awesome for getting him to alternate feet when walking up stairs. Last time we went, he actually asked, "We can do the right-left?" referring to the encouragement we give him to alternate feet. Going down is still really hard for him to alternate, but he can get practice just using his left.

Some of his social skills are a little behind too, and what better place to be around other kids his age? Disney has brilliantly been installing activities in queues for the last few years, so there are certain attractions where he's forced to engage along side other kids. Even when it's just a straight queue, he has to make friends and be nice.

Then there's the speech issue, which is easily the one that concerns us the most. There are a couple of ways that visiting the parks helps him out. The most obvious one is that he has had to learn to tell us what he wants to do. It starts with asking to visit the park, then asking us to do certain attractions. We pretty much let him set the agenda. He's even getting better at telling us when he wants to eat. It's also giving him the chance to learn new words, so he's getting beyond "train" and "cars," and starting to learn things like "people mover," "Barnstormer" and "Tiki Room." (I need to work with him still on "Hall of Presidents.")

The other cool thing happening is that we have more opportunities to have conversations with him, which is something he should have already been doing. This is a fairly recent development. Our exchanges vary in complexity, but have started with us leading interrogative loops. We ask him if he likes something, what he saw, who he saw, etc. Sometimes he'll simply volunteer things that he's excited about.

These environments that help him out are harder to create at home, because there are a finite number of toys, TV shows (he already watches too much), and a distinct lack of other kids. We don't even have stairs. What started out as entertainment for us all has turned into a surprisingly good opportunity to exercise Simon's little body and big imagination. If something there could get him to potty train, I'd buy stock in Disney.

Of course, we know he's going to be able to speak clearly and walk up stairs eventually. That's not the point. We want him to be able to start regular school on time and not get behind. Between school, his visits to theme parks, and now an athletic program where he plays with special needs kids as a peer, we're hopefully giving him the help he needs.


Decoupling OWIN external authentication from ASP.NET Identity

posted by Jeff | Thursday, October 3, 2013, 10:46 PM | comments: 0

One of the nicest features of the forthcoming release for the ASP.NET Web stack is the inclusion of bits around external authentication. It makes it stupid easy to add login capability through Google, Facebook and such. Coupled to this in the default project templates is a tie to the new ASP.NET Identity, which is a replacement for the old (and frankly crappy) Membership API. This new thing uses Entity Framework and is extensible and neat-o.

However, if you're like me, you probably have plenty of projects that already have their own login and user management schemes, so retrofitting Identity into your app is not something you really want to do. This is also true for POP Forums, the open source forum app that I use at the core of my own communities. The real magic happens through OWIN middlewear, and with help from a great StackOverflow answer, I figured out how to avoid creating any dependencies on Microsoft.AspNet.Identity.

(Note: I'm able to get the stuff I checked in on CodePlex to work on one machine, but not on another machine. The AuthenticationResult coming back from the AuthenticationManager is null on the non-working box. Haven't figured that out yet. If anything below is suspect, please let me know.)

First, you might need some context. What is OWIN? It stands for "Open Web Interface for .NET," and is essentially an abstraction of stuff that happens between your app and an HTTP server. There's a great read if you want to get into the weeds, but let me distill it down to something smaller. OWIN is a spec that allows you to run .NET-based Web apps without depending specifically on IIS. It lets you get deep into the raw request/response lifecycle. Middlewear components are added to a collection, and they act on the requests to the Web server (IIS, self-hosted, whatever) and give something back.

The external auth stuff lives as a bunch of these OWIN components. If you look at the magic created for you in a new project in Visual Studio 2013, you'll see a class file under /App_Start called Startup.Auth.cs. It's actually a partial class, tied to one in Startup.cs in the root. That class fires off the registration of components. You'll see a series of commented out extension methods that register the various types of external auth.

The general workflow goes like this: Display external auth buttons on the login page, submit those to an MVC method that handles the forwarding to the appropriate auth provider, take the result that comes back and either login the user or save the auth provider data (the issuer and provider key) into the ASP.NET Identity data store.

My goal was to get the result of the provider and handle the persistence and association with forum accounts myself. My implementation might have something that isn't correct, so feel free to let me know if something ain't right. First I registered my own OWIN startup class. As best I can tell, you can don one of these per assembly. In this case, I'm using the settings already found in the forums to make decisions about what to enable and what values to use:

using System;
using Microsoft.Owin;
using Microsoft.Owin.Security;
using Microsoft.Owin.Security.Cookies;
using Ninject;
using Owin;
using PopForums.Configuration;
using PopForums.ExternalLogin;
using PopForums.Web;

[assembly: OwinStartup(typeof (PopForumsOwinStartup))]
namespace PopForums.Configuration
{
	public class PopForumsOwinStartup
	{
		public void Configuration(IAppBuilder app)
		{
			var settings = PopForumsActivation.Kernel.Get().Current;

			app.SetDefaultSignInAsAuthenticationType(ExternalAuthentication.ExternalCookieName);

			app.UseCookieAuthentication(new CookieAuthenticationOptions
			{
				AuthenticationType = ExternalAuthentication.ExternalCookieName,
				AuthenticationMode = AuthenticationMode.Passive,
				CookieName = CookieAuthenticationDefaults.CookiePrefix + ExternalAuthentication.ExternalCookieName,
				ExpireTimeSpan = TimeSpan.FromMinutes(5),
			});

			if (settings.UseTwitterLogin)
				app.UseTwitterAuthentication(
				   consumerKey: settings.TwitterConsumerKey,
				   consumerSecret: settings.TwitterConsumerSecret);

			if (settings.UseMicrosoftLogin)
				app.UseMicrosoftAccountAuthentication(
					clientId: settings.MicrosoftClientID,
					clientSecret: settings.MicrosoftClientSecret);

			if (settings.UseFacebookLogin)
				app.UseFacebookAuthentication(
				   appId: settings.FacebookAppID,
				   appSecret: settings.FacebookAppSecret);

			if (settings.UseGoogleLogin)
				app.UseGoogleAuthentication();

			app.MapHubs();
		}
	}
}

The most important thing here is that the order of the cookie setup matters. After that, I register the various providers.

Moving on to the login page, my revised controller action looks like this:

public ViewResult Login()
{
	// not relevant stuff

	var externalLoginList = new List(HttpContext.GetOwinContext().Authentication.GetAuthenticationTypes((Func<AuthenticationDescription, bool>) (d =>
		{
			if (d.Properties != null)
			return d.Properties.ContainsKey("Caption");
			return false;
		})));

	return View(externalLoginList);
}

I'm not positive, but I think I actually took this code from an extension method in Microsoft.AspNet.Identity, which seemed like a weird place for it. Since I don't want dependencies on that, I did a copy-paste. It gets the collection of registered auth providers so you can enumerate through them and make buttons. Make buttons I did, again borrowing from the default templates in the tooling.

using (Html.BeginForm("ExternalLogin", "Account", new { ReturnUrl = ViewBag.Referrer }))
{
	@Html.AntiForgeryToken()
	<fieldset id="socialLoginList">
		<legend>Use another service to log in.</legend>
			<p>
			@foreach (AuthenticationDescription p in Model){
				<button type="submit" class="btn" id="@p.AuthenticationType" name="provider" value="@p.AuthenticationType" title="Log in using your @p.Caption account">@p.AuthenticationType</button>
			}
			</p>
	</fieldset>
}

The controller actions are where I started to diverge. Again, this involves some copy-paste from the templates, starting with the ChallengeResult used in the action methods. I won't bore you with those details, though it doesn't hurt to learn more about them, even if you're using the templates in VS2013 with the Identity stuff.

public class ChallengeResult : HttpUnauthorizedResult
{
	public ChallengeResult(string provider, string redirectUrl)
	{
		LoginProvider = provider;
		RedirectUrl = redirectUrl;
	}

	public string LoginProvider { get; set; }
	public string RedirectUrl { get; set; }

	public override void ExecuteResult(ControllerContext context)
	{
		context.HttpContext.GetOwinContext().Authentication.Challenge(new AuthenticationProperties{ RedirectUrl = RedirectUrl }, LoginProvider);
	}
}

// from the AccountController:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult ExternalLogin(string provider, string returnUrl)
{
	return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { loginProvider = provider, ReturnUrl = returnUrl }));
}

public async Task ExternalLoginCallback(string loginProvider, string returnUrl)
{
	var authentication = OwinContext.Authentication;
	var authResult = await ExternalAuthentication.GetAuthenticationResult(authentication);
	var matchResult = UserAssociationManager.ExternalUserAssociationCheck(authResult);
	if (matchResult.Successful)
	{
		UserService.Login(matchResult.User, HttpContext);
		return Redirect(returnUrl);
	}

	// TODO: offer standard login to associate, or go to create

	return RedirectToAction("Create");
}

There's a point of magic to point out here. The OwinContext mentioned above is an IOwinContext property of the controller, and it's injected in via the constructor. I'm using Ninject (for now... I'm really considering a switch to StructureMap), so my mapping looks like this:

Bind().ToMethod(x => HttpContext.Current.GetOwinContext());

Extension methods are cool, but they make unit testing kind of a pain, so this helps reduce some of that pain.

The callback sends the Authentication property of the IOwinContext to fetch the auth result, and that's passed to an association manager, which essentially checks to see if the Issuer and ProviderKey coming back match any records in the association table that stores those values with user ID's. If yes, it does a login, and if not, it sends you off to the page to create an account. At some point I'll get something in there to offer the user a chance to associate the external login with the forum's native login.

If the rest of this was TL;DR here's the important part. This is the part where you can see what the external provider has, so you can associate that stuff with whatever your user management system uses.

using System;
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.Owin.Security;
using PopForums.Extensions;

namespace PopForums.ExternalLogin
{
	public class ExternalAuthentication : IExternalAuthentication
	{
		public async Task GetAuthenticationResult(IAuthenticationManager authenticationManager)
		{
			var authResult = await authenticationManager.AuthenticateAsync(ExternalCookieName);
			if (!authResult.Identity.IsAuthenticated)
				return null;
			var externalIdentity = authResult.Identity;
			var providerKeyClaim = externalIdentity.FindFirst(ClaimTypes.NameIdentifier);
			var issuer = providerKeyClaim.Issuer;
			var providerKey = providerKeyClaim.Value;
			var name = externalIdentity.FindFirstValue(ClaimTypes.Name);
			var email = externalIdentity.FindFirstValue(ClaimTypes.Email);
			if (String.IsNullOrEmpty(issuer))
				throw new NullReferenceException("The identity claims contain no issuer.");
			if (String.IsNullOrEmpty(providerKey))
				throw new NullReferenceException("The identity claims contain no provider key");
			var result = new ExternalAuthenticationResult
			             {
				             Issuer = issuer,
				             ProviderKey = providerKey,
				             Name = name,
				             Email = email
			             };
			return result;
		}

		public const string ExternalCookieName = "External";
	}
}

The first line is really where we get the data we're looking for. The magic in the OWIN middlewear uses its context to figure out what the heck you just scored in terms of claims and credentials from the external provider. From there you can see how I'm grabbing the Issuer and ProviderKey, the two things you'll want to compare against when doing your own, non Identity framework user management.


Why are people so shocked by Washington?

posted by Jeff | Wednesday, October 2, 2013, 10:26 PM | comments: 0

I haven't really talked that much about politics lately, because as I said recently, I don't feel like I need to add to the noise. That, and the last election kind of burned me out. However, I'm a little surprised at how shocked everyone seems to be about the deadlock in Washington.

You may recall that last fall, a great many people were hell bent on supporting one candidate or the other. People were nasty and passionate about them. I'm not entirely sure that this represented a majority of Americans, but it sure felt like it. From where I was sitting, I couldn't really see how anyone would get that wrapped up in two totally mediocre candidates.

So if you're one of those people, who had bumperstickers and what not, how can you be surprised that the asshats in Congress are now acting like spoiled kids who aren't getting their way? You enabled this behavior with your own actions. You elected the asshats and basically told them it was OK to take the party line, and damn the opposition.


One of those payoff days

posted by Jeff | Tuesday, October 1, 2013, 10:35 PM | comments: 0

Two and a half months ago we endeavored into this big life change, relocation thing. There are a great many pros and cons we had to consider. Every day, I still miss Seattle to some extent. We miss our fall CP tradition. But for the most part we really like it here. 75 days and I've yet to see a morning without sun. That's OK.

Tonight was one of those nights where all of the hard work and hard decisions paid off. With a temperature around 80 degrees, we enjoyed the Food & Wine Festival at Epcot, with delicious chicken curry. We saw the Go-Go's, and they've still got it. A cool breeze made walking around perfect.

It's so easy to get caught up in your goals and aspirations, and in the process totally miss the life that's in front of you, right now. I've been guilty of that, more often than I'd like to admit. Tonight all of that melted away, because I was quite happy to be exactly where I was. Yeah, I had a Ferris Bueller moment.