2012-12-13

Animaniacs Volume 4 is coming!

If you know the origin of my nom de plume, you'll also understand why this news is very exciting to me.

The 3rd volume of the 1990s cartoon show Animaniacs was released back in 2007, but it did not complete the series. Fans (including myself) have been waiting for the fourth volume to be released with the remainder of the series, but Warner Bros. has been sitting on them for the past five years. My kids have developed an appreciation for the show (and Pinky and The Brain, whose full 3-volume collection has already been released, save for the forgettable Pinky, Elmira, and The Brain fiasco). There are some real gems in the missing 4th volume, like the excellent parodies The Sound of Warners, Cutie and the Beast, and Jokahontas, that I've only been able to relive via poor-quality uploads on YouTube. Now I'll finally get to see them and share them with my kids.

This news apparently came out two months ago. I don't know what prompted me to search for evidence of Volume 4, but I'm glad I did. And with a February release date, I know what's going on my birthday wish list!

2012-12-05

Switches Gone Wild

Had an interesting network error the other day. Very suddenly, while I was paying bills online and my kids were watching Doctor Who on Netflix, the network was completely non-responsive. My first thought was that I had lost my connection to the internet again. But as I tried to connect to my server to check, I was unable to connect to that machine, too. Even when my internet connection drops, I don't lose connection to machines on the internal network.

I went downstairs to check the server. It appeared to be running normally, and I was able to log in to the machine using the keyboard and ancient CRT monitor I keep plugged in for emergencies. I tried resetting the network stack. Curiously, it threw up an error message trying to bring up the network card for the internal network, something about an inability to allocate memory. But the external interface came up without error. I tried a second time, and again, the internal interface still couldn't connect to any other machine.

Thinking there shouldn't be anything wrong with the network adapter itself, I spent quite a bit of time checking my iptables rules. I assumed there must be something in there preventing packets from the internal network from getting processed. Perhaps I had set the wrong rule when I was trying to get a couple new devices to play nice with the email server. But why would it work fine for a while and only now, many days later, decide to drop internal traffic? And why couldn't I fix it? Even when I dropped all filtering rules, I couldn't get any traffic through my internal network to that network card.

Not long ago, my computer failed to get an IP address from my ISP, and for whatever reason, it wouldn't get one until I gave up and rebooted the server. Figuring this was another symptom of whatever the problem was before, I just rebooted the server. It came up again, with only errors I've seen before (fairly obscure warning messages that haven't before caused any noticeable issues). It acquired the ISP's network quickly enough, but still, the internal interface didn't appear to respond.

I finally decided to take a close look at the network switch. One light was flickering rapidly, which was on the port connected to the entertainment center. This seemed odd, since the only devices on at the time were the TV (which does have an Ethernet port, but its features have been pretty useless so far) and the Blu-ray player (which was streaming Netflix before the network crashed, had been powered off by the kids, and was currently displaying a screen complaining about a lack of network connectivity since I turned it on to check).

Just to check if it was a bad port, I pulled the cord for the entertainment center and plugged it into an empty port. The light on that port came on solid, then started to flicker rapidly as before. I then unplugged the switch's power cable, waited several seconds, and plugged it back in. Each of the lights cycled in sequence as the switch went through the startup sequence, then all lights on ports connected to live devices turned on solid. Some started to blink, and the one connected to the entertainment center started to flicker rapidly again.

I went up to the entertainment center to check on the switch there. The lights on ports connected to the TV and Blu-ray player were on solid. Only the light on the port connected to the wall (and back down to the entertainment center) was blinking, and it was flashing rapidly.

This was seriously odd. No lights connected to any computers or devices were blinking with any intensity — only the lights on the switches that connected to each other. Were the switches generating their own traffic, talking back and forth to each other? These are fairly inexpensive, unmanaged switches, with no network address of their own to speak of; what could they possibly be saying to each other, and how?

I unplugged the power cord on the switch behind the entertainment center, waited a few seconds, and plugged it back in. All its lights came on briefly as it powered up, and then finally, mercifully, the lights on all connected ports came on and stayed solid, including the light leading to the switch on the server. I checked the Blu-ray player and my laptop, and both were able to connect to the server and, by extension, the rest of the internet.

I still have no clue what was causing all that traffic. I did notice that, when the Blu-ray player started streaming Netflix again, the lights on both ports on the switch that connect to the wall and the Blu-ray player were flickering quickly, looking much like the flickering on the one port when things weren't working (although there's no way to tell by sight if the flickering was exactly the same). Near as I can figure, there was so much of this mysterious traffic that it jammed the main switch so thoroughly that no traffic could get through any other port. (Since they are both 1Gb switches, it certainly could do it. The only other gigabit network device on my home network is the network adapter on the server facing the internal network, but the light on the switch on that port wasn't showing anything but the most rudimentary activity.)

2012-11-28

MVC: Any object you want, but not a string

I often refer to MVC — the Model-View-Controller pattern for building websites — as "Magic, Voodoo, & Conjuring", because a lot of things just happen by what seems like magic. Moreover, when something goes wrong, it's very difficult to find exactly where it went wrong, because the process is happening without writing any code.

I had one such example of something going wrong today. It was only after I got another pair of eyes to confirm I wasn't crazy that I found a StackOverflow question that addressed my question.

We had a JavaScript method that took a method name, a key, and an object, and posted that to an AJAX handler on the server, more or less like so:

$.ajax({
    url: "/Home/" + methodName + "?key=" + keyId,
    contentType: 'application/json',
    data: $.toJSON(dataObject),
    success: function (result) { doSomething(); },
    type: "POST"
});

This JavaScript code block was part of a plug-in that we wrote to apply to many different forms on the site, that shared common functionality. Depending on the data being processed, the dataObject could be anything from a string to a full-blown object. The controller methods all had similar signatures:

public ActionResult ProcessStringData(string key, string newData);

public ActionResult ProcessDataEntity(string key, DataEntity newData);

When the AJAX call was made, the querystring parameter key was correctly mapped to the method parameter key, and the JSON object in the request payload was magically deserialized and mapped to the newData parameter.

The problem was (as you may have guessed from the StackOverflow question), while this worked great for the object, it was completely ineffective for the string — despite the fact that the data was in the request input stream, the value would always be "null".

This is why it was such a head-scratcher. If the data was a DataEntity object and we were calling the ProcessDataEntity method, the AJAX payload would simply be:

{ prop1: "value", prop2: "value2" }

Note that nowhere in that text is the name newData, and yet the MVC framework somehow managed to interpret it as a DataEntity object and pass it as the newData parameter.

Calling the ProcessStringData method with a string as data, however, resulted in this payload:

"data value"

So why wasn't it magically treating this as a string and assigning it to the correct parameter?

Maybe the JSON deserialization magic was throwing an unseen error. Using Fiddler, I tried submitting a payload of { "data value" }. This resulted in a very visible error response from the server about an invalid JSON object. Since "data value" did not return the error, the deserializer must've been relatively fine with it.

Curiously, if I changed the payload to:

{ newData: "data value" }

it did, in fact, work. However, I didn't want to have to wrap a simple string with a named parameter object to get it to work — it would be inconsistent with the object-processing methods that did not require this massaging. (Consistency makes for much more maintainable code. Try bringing up a new developer to speed and explaining that data is in a certain format, except in a list of "special cases" that you're lucky if you remember to mention, and you discover this truth quickly.)

Looking through StackOverflow, it seems that it is possible to remove the content type to process strings. Again, this would have required determining if I was calling a string-based or object-based method and setting the content type (because I actually did want the application/json type for objects). It just didn't "feel" right.

I ended up wrapping the payload in an array. For whatever reason, it is unable to take a string payload and map it to a string parameter, but it is perfectly fine mapping a payload of the form [ "value" ] to a parameter of type List<string>.

It's just one of those things that requires some coding around, but the hard part is trying to understand why. And because it's all handled by magic, voodoo, and conjuring (a.k.a. some method buried deep inside the framework), it's not in your working code, and therefore very difficult to track down.

2012-10-06

Microsoft Store fixing my preorder

This is a follow up to the previous post.

After yet another exchange of emails saying "You weren't charged, so it was canceled" and "I wanted to be charged, why was it canceled", I got an email from another "escalation specialist". He referenced my exchange with Aubrey, so I figured this new person was taking over for the previous one, and he offered to re-place the order and get all my preorder bonuses for me.

We had a couple emails back and forth to confirm everything, and he asked for my phone number and a time to call so he could get my credit card information (since it wasn't available to him, and email is way too insecure for sending that information). When I was on the phone with him, he placed the order and gave me the new order number. He commented that it had been flagged for review from the fraud department, so it might take a day to process, but he would put a note on it so the investigators would know what was going on. Sometime during the night, I got a confirmation email that the order had been processed.

He called a couple days later in regards to the 1600 Microsoft Points card that was one of the preorder bonuses, asking if I wanted a physical card or a code by email. I told him a code was fine, and he said he would get that processed. He also told me he would be upping my $10 next-purchase credit to $20 for my trouble. Interestingly enough, when he emailed later with the Points code, he commented that every order he is placing for me is getting flagged for review. In my thank-you reply for the code, I asked if there was a way to check into why this was so. Maybe it's just the oddity of the customer service person placing orders on my behalf, but if there is another underlying reason, it'll be good to know before I try to use my $20 credit on my next order.

The next day, I got a call from Aubrey, who wanted to check on my shipping details to get my order replaced. I guess the "takeover" wasn't fully communicated. I gave him the other guy's phone number, and he said he'd double-check everything to make sure it was getting taken care of; and he later emailed me to say it looks like everything is good.

So, it took a while, and a few frustrating emails to start off, but it does look like everything is finally getting taken care of.

2012-09-28

Microsoft Store canceled my pre-order [UPDATED]

See my update in the next post — it looks like it's all getting fixed.

The Microsoft Store online was having a special. For certain pre-ordered games, you could get a coupon code for $10 off on your next purchase, plus 1600 Microsoft Points ($20 worth). There was a game going for $30 that I thought might be a nice one for one of my boys, and with the bonuses for pre-ordering, that was like getting a free game! Seemed like a great deal to me. It was a Friday, and the game was to be released the following Monday, so I placed my order. The website told me my order was successful, and I put it to the back of my mind.

Towards the end of the next week, I realized the game had not arrived yet. They didn't say anything about "release day delivery", so I didn't expect it on Monday, but I thought for sure it would've arrived that week. I logged on to the Microsoft Store and checked the order. Oddly enough, it still said "In Process". So I decided to call their support line to find out what was up.

The very courteous person who took my call was just as confused as I was when he looked at my order status. He talked to his manager, and when neither of them had an answer, he told me he would escalate the problem, and someone should contact me within 48 hours. This was on a Saturday. The next Tuesday, I found this message in my email inbox:

Thank you for contacting Microsoft Office Electronic Software Delivery customer support.

My name is Aubrey and I will be looking into your case [case number] and will keep you updated.

Please confirm any issues you are having with your order.

The charge you have referenced is a pre-authorization only.

A pre-authorization is a temporary hold to verify that funds are available when you place an order. Pre-authorizations are typically removed from your credit card transaction history when the full charge processes and funds are withdrawn. However, in some cases, this process can take up to 2 business days. Rest assured, you were not charged for your purchase. If you feel this is an error, please provide a Proof of Purchase such as a Bank Statement.

Please note that debit cards may display both the pre-authorization and the completed payment as full charges for up to 5 to 7 business days from the date of purchase. If you need assistance removing a pre-authorization from your debit card transaction history, please contact your bank or financial

Thank you and if you have any questions, please reply to this email or you can find my contact information below.

Regards,

Aubrey Teeter | Escalation Specialist | Microsoft Store Support| 1-877-696-7786| a-auteet@microsoft.com | www.MicrosoftStore.com

So, naturally, I figure my order must've been stuck in some "pre-authorization" state. I replied,

Ok, but this order was placed on the 14th, a full 11 days (7 business days) ago. When is it going to go from "in process" to shipping and complete?

And the response:

I am contacting you to give you a quick update as to where we are with your case.

My apologies. I wasn't clear. Pre-authorization means you were never charged. There are many reasons for this but the order has been cancelled. You may reorder at anytime.

Again, thank you for contacting Office ESD. If we can be of further assistance, please reply to this message. When replying, please be sure to include this and any other relevant correspondence in your message.

Well, that doesn't make any sense. I am positive the card would not have declined the charge, considering I used that same card just a few days later to pay a medical bill (several times the balance of this video game order). So what was the specific reason?

Why was it cancelled??

Which received this less-than-helpful response:

Hello,

It was cancelled due to no monies exchanged hands and time lapse You may now re-order the product now to take atvantage of the bundle before it expires.

Again, thank you for contacting Office ESD. If we can be of further assistance, please reply to this message. When replying, please be sure to include this and any other relevant correspondence in your message.

To which I replied:

Ok, apparently I need to be more clear.

I placed the order and provided my credit card information on your website with the expectation that my card would be charged and my order would be shipped as promised. Instead, you didn’t charge my card and cancelled my order without notification. WHY?

I didn't even bother to bring to Aubrey's attention that the referenced bundle had already expired when the game released nine days prior to this point (yes, I did attempt to re-place the order to confirm this).

I posted my complaint to the Microsoft Store Twitter account, @MicrosoftStore, which invited me to email my issue to storesoc@microsoft.com. I forwarded my email conversation with Aubrey, with a summary of the issue.

I haven't heard anything back from either email at this point.

Not only does this make me not want to ever attempt to do business with their online store again, but it makes me very uncomfortable with regards to my Halo 4 preorder at their store where I'll be spending most of November 5th.

See my update in the next post — it looks like it's all getting fixed.

2012-09-13

Windows 8 Review

Windows 8 came out this month for MSDN subscribers. I had been looking forward to it for quite some time now — primarily for the quite mundane reason of wanting to finally rebuild my Asus K70AB laptop and not have to dual-boot between Windows 7 and Windows 8. (There are a few reasons for my dual-booting, but they're not worth going into here.)

I blogged about my thoughts on Windows 8 a few months ago when they released their "Consumer Preview". And the major concern I bring up there still applies: there is a disconcerting lack of visual cues for possible actions. Even when you know what you want to do and you know it's possible, it's not easy to discover how to do it. The other issue that is still disconcerting is the bipolar behavior of launching an app. Look at all the fancy tiles on the start screen. Click one. What's going to happen? Will it launch a full-screen Metro Modern-style app? Will it switch to the desktop and launch a windowed app? No telling until you see it happen.

Other issues I've had are a little more mundane. The default camera driver for the built-in camera generates an upside-down image. I did install the Windows 7 driver for my camera in the Release Preview, and while it did correct the image and programs like Skype saw it correctly, Windows 8's default camera app and the bit in the user profile where it offers to take your picture suddenly couldn't detect that I had a camera at all. So I've been hesitant to install that driver on my "official" install.

Windows 8 supports multi-touch trackpads to be able to use gestures that you usually can only do with a touch screen, like swiping in from the right side to bring up charms. Unfortunately, I am unable to find Windows 8 drivers for my notebook's Elantech touchpad (a beta Win8 driver for a different notebook model was unable to find my touchpad in the Release Preview), so I'm still unable to do gestures. (I guess I should consider myself lucky that the touchpad hardware itself understands some gestures and can send the right signals to Windows 8, even if Windows doesn't see it as anything but a "PS/2 Mouse".)

Modern apps are still a disruptive experience for the mouse and keyboard. For a desktop app, to interact with a windowed application, you only have to move your mouse as far as the bounds of the window. For a Modern app, you are forced to move your mouse across the whole screen. Want to close it? It's no longer as simple as moving the mouse to the upper right and clicking; you have to go to the top of the screen, click, and drag to the bottom of the screen — or move your hands to the keyboard to hit Alt-F4.

The graphics are much improved than I noted back in March, at least from a cursory glance. I installed the Game Room app, and the avatar on screen finally rendered without long triangular pieces of skin stretching grotesquely to the floor, and the virtual arcade environment was no longer obscured by large random fields of color. Good thing, too — the only possible workaround I could find was to install Windows 7 drivers, and that only caused more issues when I tried that in the Release Preview, like the screen randomly going blank when switching modes.

Your local user account is also your Windows Live account, if you so choose — but there are some nice bonuses to doing so. Your desktop settings and profile can be stored and migrated from PC to PC, along with other system preferences and your collection of apps purchased from the Marketplace. The one downside I found, though, is that it only lets you log in to your PC with that password. I have a relatively long and complex password for my Live account, but I tend to stick with simpler, easier-to-type passwords for my PCs. The only workaround is to use a "picture password" (mouse clicks on select places on the lock screen, very easy to snoop over the shoulder) or a PIN (a much less secure four-digit numeric password). Being able to set a custom local password would've been nice.

Given all of this, is there any reason to stick with Windows 8? Well, sure, there are lots of things to like.

The startup time is drastically improved. While I don't have empirical data to prove this, there are plenty of tech sites out there that have the evidence. Even time to resume from sleep or hibernate is so much faster. Time will prove out if the time I spent waiting on Win7 is due to the OS or all the applications I had installed and forgotten about over the years. It's likely that Win8 will slow down once I've done the same there, but if the tech analyses are true, it will still be relatively faster than Win7 was with the same load.

The Xbox Live integration is exciting. Available from the Marketplace already are Live-enabled versions of the standard Windows games Solitaire and Minesweeper, as well as Mahjong, Wordament, and Pinball FX, all for free (although Pinball FX tables are available for a price). And all of these games have achievements! Although they could still use a little work — the achievement notice does tell you that you've earned something, but it doesn't tell you how much Gamerscore you've earned; and a lot of the features, like online leaderboards, are blocked with a message asking you to download an update to the game that is not yet available. But still, older predictions that Microsoft would use the free Windows games, by adding achievements, to lure more people into the gaming world are starting to come true.

It's disappointing that, after a full year of generally available preview versions, that functional, compatible drivers for the camera and touchpad are still missing, but I'm relatively confident that they will come, especially once Windows 8 reaches general availability.

2012-07-23

@ComcastCares really does care

I was having issues with my Comcast internet service where it would randomly disconnect throughout the day. Usually, the disconnects lasted only a minute or two, as the cable modem re-acquired the signal (if I happened to get to the basement fast enough, I could see the modem go through its startup sequence of flashing lights), although sometimes it would be down for several minutes. This would usually happen three or four times a day.

One day, when it was especially flaky, I called Comcast customer service. After going through the standard troubleshooting tips (including resetting the modem and rebooting the computer), I finally got a service call scheduled. The technician didn't find anything wrong inside the house and promised to schedule a line technician to check the wires outside. He said to call back in a few days if things hadn't improved. When they hadn't a few days later, I tried calling back, only to get a customer service rep on the line who could only tell me that he didn't have access to the line tech's schedule, but to try waiting a week as it sometimes takes that long for a technician to be available.

During the week, on a particularly hot day, the internet service was being very unstable again. It did seem like, the hotter the day, the less stable my internet connection (although that could just be correlation, since really hot days are days I'd rather spend inside in the A/C). I decided to send a tweet to the @ComcastCares customer service account to ask if this was typical behavior, which resulted in an exchange of messages where the @ComcastCares representative was actually able to tell me that the line tech had not been out yet, and that he would see to it that it got done.

Already I was pretty impressed with their service (and more disappointed with the telephone customer service), but I was completely unprepared for the next step. That Sunday afternoon, I got a phone call from someone who monitors the @ComcastCares Twitter account to follow up with my service issues. After asking me some more detailed questions about my setup (like whether the cable line went through a whole-house amplifier before or after it hits the cable modem, and whether there were any splitters or traps on the line) and then trying some other troubleshooting steps (like removing the splitter and trap and just dedicating the cable line to the modem), he promised to follow up with another service call from another technician.

The next service call, the technician was able to determine that there was damage on the line from the house to the pedestal, and he replaced that and scheduled a time for another team to come back and bury the cable.

Unfortunately, the problems didn't stop there. Things did seem to get better for a time. (There was one peculiar instance of my cable modem doing a factory reset of itself. My network setup requires the cable modem be in "bridging" mode instead of the default "routing", so when this happened, I couldn't connect to the internet even though my connection was technically "good". Since I couldn't fix this myself, I used my phone to fire off a tweet to @ComcastCares, and it was fixed within minutes. No rep that I've spoken to about this can figure out why this happened, however.)

Again, I got a phone call from that same rep who's been watching my case. Although he had promised to have an area manager contact me, he realized there was some miscommunication along the way, and the area manager was sending him updates but not me; so he wanted to contact me and check on the status. I mentioned that things seemed a lot better, although things still weren't perfect. (This was right after the cable had been buried.) He had already left me his voice mail number on an earlier call, and he invited me to keep an eye on things and leave him a message if things hadn't improved. Well, not much later that day, there were a couple fairly long-term (i.e., several minutes) dropouts, so I did end up leaving him a voice mail.

I haven't heard back from him just yet, but there was a technician at our house today. He checked the line and was finding some errors, and he started tracing the line back along their network until he found a bad amplifier further upstream. He reported to us that he fixed that, and that the bad amplifier plus our damaged cable would be a likely cause to all our issues. He also said he was surprised no one else had reported any problems.

So, as of now, things are a whole lot better than they were. I have to say, I am really amazed at the level of service I've received through the @ComcastCares account. Sure, it would be nice if nothing ever went wrong in the first place, but the fact that the people I've been working with have actually taken an interest in fixing things up (especially reaching out and calling me to check up on things) is really impressive.