January 2008 Blog Posts

Status on Xbox Live DRM and Dashboard Problems

I realized that I hadn't posted any update on my Xbox Live DRM problems or the dashboard update issues I was having, so here you go.

The DRM Issue

Back in October, I got my third console replacement and ran into the same stupid DRM trouble I had the previous two times: Content I purchased could not be played unless I was logged into Xbox Live - not just signed in, but signed in and online. This isn't as much a problem for a one-gamertag household, but when you have a two-or-more-gamertag household (like my wife and I have), it means that a game I bought for both of us to play is suddenly only accessible to my wife when I'm signed in, whether I'm actually physically there or not. Lame.

Unfortunately, they changed the process on how to fix this such that it was different from my previous two go-rounds. I was told it'd take two to four weeks to get a resolution.

The issue was still not resolved at the beginning of this month (January 2008), which is well beyond the two-to-four-weeks promised timeframe. Calling Xbox Live Support did no good - they must have a stock answer for situations like this: "I'm sorry, but I don't have any additional information. Your case has been escalated to Microsoft and they will get back to you." No one else you can contact, nothing else you can do.

I ended up contacting Major Nelson about it. I gave him the full details - times, dates, names, and status - and within three days a guy from Xbox Escalations called me. I provided some additional information that they were apparently missing (but never asked for) and got a direct phone number for him so if anything goes wrong, I can call him and he'll personally take care of it.

Of course, the new "deadline" for getting a fix is Feburary 7, so I don't actually have an answer yet, but I'm more hopeful than before.

An interesting side note: talking to the guy at Escalations, it turns out the Microsoft folk don't get special treatment on this. He has a cubicle-mate that is in the same wait-it-out boat that I'm in. Apparently, Microsoft didn't realize that changing the process for re-authorizing a console would be this much challenge. I, personally, am not surprised at all.

Xbox Dashboard Update FailedThe Dashboard Update

In December, while waiting for my DRM problems to be solved, I found that I was suddenly unable to get onto Xbox Live at all because I couldn't take the latest dashboard update. I blamed it on the DRM problem and, after calling support on this one, too, it turned out that I wasn't the only one having issues.

That said, after doing some maintenance and troubleshooting, the problem ended up being with my hard drive.

When you get a console replacement, you send in your console, but you keep your hard drive, faceplate, and other peripherals. As such, my hard drive had been attached to four different consoles and had taken dashboard updates just fine for the first three, but when it came time to take an update for the fourth console, it'd had enough. Something got corrupted on the drive and it needed to be formatted.

I spent, literally, over ten hours on the phone with support for this one. I had to do all sorts of ridiculous troubleshooting (they'd tell me it was a problem with my network, which I damn well knew it wasn't, then they'd say it was something else, like stabbing in the dark), I got lied to several times (they'd tell me I'd get calls back and I never did, they'd tell me they "escalated my call" and they never did), and generally got put through the wringer.

Once I got past the hoop jumping - which I firmly believe was caused in no small part by language barriers - I finally got to a supervisor who said he'd replace my hard drive. But the process for replacing a hard drive is that you send in your old hard drive, they send you a new one... and you lose all of your data. Unacceptable. After explaining how I'd been lied to and how much time I'd spent on the phone already, I convinced them to send me a hard drive without my having to send them mine in return - compensation for putting up with this crap.

Of course, after a week of not hearing anything, I had to call up and do the same convincing all over again with a different supervisor because the supervisor who promised me a new hard drive was in the Xbox Live division of support but the people who can actually grant that sort of thing are in the Hardware division of support.

Anyway, after fighting that out, I got a new hard drive in the mail, formatted it (it still had someone else's content on it!), was able to take the dashboard update, and moved as much of my stuff as I could over to the new drive.

Oh, did I mention this was in late December when they were having Xbox Live problems? Think about that in context with my DRM issues - I can't get to my content (which includes moving it) without signing in, but I can't sign in because Xbox Live is having problems...

It was painful. After a lot of hassle, I got all but my Zuma and Bejeweled 2 save games moved over (for some reason you can't move or copy them, so I lost all of my progress in both of those games) and formatted my old drive. Now I have one drive for game content and one drive for video content or archiving stuff.

Now, if only they'd remedy this DRM issue...

Reading MMS Messages in Outlook

I just recently stepped into the now and got a phone with a camera on it. I'm not really a big cell phone user for the media capabilities, but every once in a while I've felt that a camera would have been nice. ("Hey, honey, which of these two things do you want at the store?" *snap* *snap* send...)

I also do a lot of mailing to myself - reminder notes and such - and all of my stuff is organized in Outlook. When I got my camera phone, I immediately took a picture and sent it to myself. But I noticed that Outlook displays the message like this:

Each piece of the MMS message is an attachment.

Each piece of the MMS message appears as an attachment. (I tried sending a mixed text/picture message and got two attachments - one for the image, one for the text.) The trick, then, is to know what type of file each attachment piece is. Here are a couple of basic tips for viewing each piece:

  • If it's smaller than 1KB, it's probably text. Try opening the file in Notepad or some other text editor. If it looks garbled, well, it's not text. Just don't save it and you'll be OK.
  • If it's larger than 1KB or doesn't display right in Notepad, open the file in your favorite image editor. You can even use MS Paint - open the editor and drag the attachment in there. You can then save it as a particular file type.

The trick really is in guessing the content based on file size.

I looked around for MMS message reading plugins for Outlook but really didn't find anything. There seems to be a lot out there for sending these messages, but nothing much on receiving or reading them. If you have a way to get Outlook to do this automatically, please leave it in the comments - I'd love to check it out.

GRAND THEFT AUTO IV Coming April 29, 2008

This is the best email I've received all week. A date, and some images:

4.29.08
Nico Grand Theft Auto IV

I'd best be scheduling my time off now. Oh, and I need to stock up on provisions.

FIOS Signup Not Remotely Seamless

In an effort to save some money and get some faster net service, Jenn and I signed up to switch to Verizon FIOS. A couple of friends of mine have switched and like what they're getting, so we're hoping we like it, too.

That said, one of the primary reasons a lot of folks I've talked to have switched is that they don't like Comcast for one reason or another. I've only ever had good customer service with them, so the company affinity thing isn't really an issue. The converse is actually true - we've had horrible customer service experiences with Verizon, so switching, for us, is really taking a risk customer-service-wise.

Unfortunately, thus far, I've not been proven wrong. Even signing up was a tiring, painful experience.

(Note: Responsibility in our house is structured such that Jenn is in charge of phone, TV, and internet service, so the experience explained here was primarily hers. I was sitting right there, but it was Jenn the whole thing actually happened to, not me. I can't imagine that it'd have been any different had it been me except there might have been more cussing.)

We started on the Verizon web site, trying to sign up for their phone/TV/internet combo deal. We'd have called, but there's an internet-only special that they say you can only get if you sign up online. We got all the way to the confirmation stage when the phone portion of things blocked us - we couldn't keep our phone number if we signed up online. Unacceptable. When we signed up for Comcast Digital Voice, it was a seamless experience - they took care of everything.

Jenn got into an online chat with a service rep who was absolutely no help. He reiterated that you have to sign up online or you won't get the discount. He also maintained that they had no way to transfer phone numbers that weren't already under Verizon control, so we'd be forced to choose a new number. Local number portability tells me otherwise.

As part of the rep's helpful "chat," he sent Jenn various links that, when you follow them, actually get you to run through the entire sign-up process again. She must have filled out the online form like five times and no true help (beyond the copy/paste form letter sort of chat from the online rep) was forthcoming.

Time for a phone call. We called Verizon to find out what was going on and let them know about the number portability thing. The phone rep insisted that you have to sign up online to get the discount but that one thing you could do is cancel your current phone service, get a confirmation number of some sort, and when the Verizon phone service started up, you could provide this confirmation number and keep your original phone number. That, of course, means that between the time you cancel your original phone service and the time they start the Verizon service (which could be a couple of weeks out), you don't have a phone. Again, unacceptable. The other option we had was to register online for just internet and TV service and add the phone service later - part of the "cutover window" problem was, apparently, that they would have to run lines to our house and for some reason couldn't run lines and cut our phone over on the same day. (Yeah, it sounded like a line of crap to me, too.)

By this time we were getting pretty frustrated with the whole thing. We wanted the bundle discount that you "only get when signing up online" but the online form wasn't flexible enough to allow us the options we needed. There was also absolutely no help forthcoming for us on how to keep our original phone number. Jenn decided to take the route the phone rep suggested and just get net and TV service through the online form and sign up for phone later.

She filled out the form again and got to the payment screen. She filled out the payment info... and it wouldn't accept the credit card. In fact, it wouldn't accept any credit cards - not mine, not hers. We tried like five different (working) cards.

In a moment of last minute desperation, we placed one more phone call to Verizon. Make it or break it time - they either solve everything right now, or we're sticking with Comcast.

This time we actually got a representative who knew what she was talking about. You don't actually need to sign up online to get the discount. After a little conversation, we got exactly what we were hoping for to begin with - a full service conversion to Verizon services and we get to keep our phone number. No cutover window where we'll be without service. The way it should have been to start with.

All of this took between two and three hours to get through. Two phone calls and two online chat sessions. Navigation around a nearly-impossible-to-use site with not enough options. It reminded me a lot of my recent chats with Xbox Support.

We're signed up and we should be getting converted over on February 9. I really hope this wasn't a sign of things to come. The reason we didn't have Verizon phone in the first place was the poor customer service and they haven't proven us wrong yet during this attempt to sign up. You would think the signup process - the process where a customer is literally waving money at you, asking you to take it - would be absolutely seamless. I mean, if they can't get the signup process right, what happens when I actually have a problem?

Comcast Voice Mail Support Security Hiccup

Okay, I thought this was pretty funny:

I noticed that if you access your voice mail through the Comcast web site and delete it, if you later call up your voice mail from a phone, deleted messages show up as "skipped." Looking at the FAQs they provide, they say something about having to empty your "deleted items" folder on the web site. But there is no "deleted items" folder. So I got into a live chat with a support rep.

Turns out there's something weird going on, so the rep wanted a technician to look into it. That's when this little blurb happened:

"I hate to ask this but I will need your pass code for your voice mail?"

I didn't end up giving out my password, obviously - they ended up "finding a workaround." Hehehehehe...

Designing for Testability with TypeMock

Design for testability vs. API as a deliverable (or test-what's-designed) is something I've blogged about before and it does sort of boil down to a religious debate. I'm currently on the "test what's designed" side because, for me, API is a deliverable. I'm also not a big fan of some of the sacrifices you have to make when you design for testability, like losing your encapsulation.

Regardless of your views, mocking is still something you can most likely take advantage of in your unit tests. You could use one of the open source frameworks out there like Rhino.Mocks. It'll work. If you have access to TypeMock, though, or if your project already has TypeMock in it, there's no need to move away from it or be scared that it's "too powerful."

You can still design for testability using TypeMock. You just need to follow one simple rule:

Restrict your TypeMock use to "Natural" mocks.

That's it. That's the secret. As long as you stick to the TypeMock RecorderManager and RecordExpectations objects when setting your mocks up, only using "Natural" mocks, you can still satisfy your design-for-testability urges.

And, hey, it doesn't hurt that you'll be able to do those more powerful things should you need to, right?

Laser Hair Removal: Treatment 6

I went in on Saturday for my sixth laser hair removal treatment on my face. Just like last time, I went with the MedioStar laser on the entire face (with the exception of the areas immediately around my lips, which is still a little too harsh).

While amazingly intense, the pain was actually less than it was last time. You can tell that as the hair thins out there is way less pain. In some areas where the hair is super thin, you can barely even feel it. That's not to say it didn't hurt, but I didn't sweat through my shirt this time.

Even the next morning, Jenn commented on how it's becoming a lot more obviously "patchy" on my face. You can tell where the hair has been cleared out to almost nothing. (You can also tell where the hair has stuck around - it looks sort of... zebra-like.) I anticipate getting some great results out of this latest treatment, too.

Treatments at the facility I'm with are sold in blocks of six. (That number strikes me as sort of arbitrary, but I'm sure there's some logic to it.) I ended up getting another set of six so I can finish this thing up. I'm really getting excited with this latest progress. I haven't torn up any sheets or pillowcases in the last couple of months (yes, one day of growth would be enough to cause destruction to anything my face came in contact with, which is one of many reasons I'm doing this).

Once it's done, my understanding is that you still have to get "maintenance" done because as new hair follicles awaken in your skin, you can get little patches showing up. That's a lot less of a problem, particularly since the cost of the maintenance treatments is less than a third of what the initial treatments cost and, with the hair pretty much gone, the pain really won't be there.

Why NAnt Is Better Than MSBuild

I've been writing a lot of build scripts and custom build tasks in both NAnt and MSBuild lately and, based on this experience, I've decided I like NAnt a lot more than MSBuild. Here's why:

  • NAnt lets you run tasks before any targets run; MSBuild doesn't. I commonly have some "setup" actions that need to happen before anything else in a build script happens. Stuff like registering NCover or starting up TypeMock. It's stuff that needs to happen once, before any other target runs. In NAnt, I can put all of that stuff at the top of the build script, outside any target, and it'll all get run. In MSBuild, every task has to be inside a target, so I have to make sure that every single target in my build script depends on my "setup" target.
  • NAnt custom tasks can interact with build properties; MSBuild custom tasks can't. Some of the custom task stuff I want to do is to make things easy for people by letting them set up properties in the environment and having things "just work." For example, a task to generate an AssemblyInfo.cs file with assembly version information already populated based on CruiseControl settings might look for the CCNetLabel property in the environment and set things up automatically based on that.

    In a NAnt custom task, I have access to the full set of properties inherently. MSBuild custom tasks are entirely isolated so I need to manually pass that in as a parameter from my script.

    One parameter isn't so bad - but what if you want to perform logic in your task based on five or six parameters? 10?
  • NAnt properties are manipulated in a consistent fashion; MSBuild properties are handled differently in different contexts. In NAnt, I can create or change a property just by calling the <property> task. In MSBuild, it's different if I'm outside of a target (<PropertyGroup>) or inside a target (<CreateProperty>). This inconsistency makes for a difficult learning curve.
  • NAnt wildcards, when dealing with the filesystem, match both files and folders; MSBuild wildcards only match files. This is a heck of a problem when you want to create a dynamic item list in MSBuild of folders you want to clean up. You can't just delete "**/bin" - you have to manually locate every single one.
  • NAnt allows you to load an entire assembly's worth of tasks at once; MSBuild requires each task to be separately loaded. In NAnt, I do <loadtasks> on an assembly and I've got all of the tasks in the assembly at my disposal. In MSBuild, I have to do a <UsingTask> for every single task I'm using.
  • NAnt includes task assemblies in the executing AppDomain; MSBuild doesn't. This is a problem if you have one custom task assembly that references another custom task assembly. Say you have custom task MyDerivedTask that is a derived/modified version of SomeBaseTask. They're in separate assemblies. Maybe SomeBaseTask is in a third-party assembly I don't want to (or can't) redistribute.

    In NAnt, I can <loadtasks> on both custom task assemblies and everything is okay. When I call MyDerivedTask, the assembly containing SomeBaseTask is found and everything is good.

    In MSBuild, even if I do a <UsingTask> on SomeBaseTask to include it, I can't <UsingTask> the MyDerivedTask unless my custom task assembly is in the same folder as the assembly containing SomeBaseTask. If I do, the <UsingTask> on MyDerivedTask will throw an exception saying it can't find the assembly containing SomeBaseTask.

I mean, I get the whole "side-effect free" concept behind "isolating" the MSBuild tasks and everything, but it seems like NAnt is so vastly more flexible without it. Is there something I'm missing? Some development philosophy they had when coming up with MSBuild that will put all this into perspective and make me see why MSBuild is so much better? Or am I right? Does NAnt really whip MSBuild's behind in almost every area?

The Cake Is A Lie

I am, I'm sure, somewhere around the last person to get on board with this, but still. I got The Orange Box for Xbox 360 for Christmas and, after hearing about Portal from a lot of folks, I finally got a chance to play it this weekend.

It's awesome.

I'd played Half-Life before, and Counter-Strike, and all that, but this is way, way different. Basically, it's a first-person puzzle game, which is something I'd never come across before.

The Orange Box: PortalThe idea is that you are in a testing facility for a company called "Aperture Science." You've got a gun that shoots, basically, "holes." You shoot a wall, and a hole appears. Then you shoot a different wall and the other side of the hole appears. Walk through one hole, you come out the other.

Think about that for a second and imagine the possibilities - it's not just the walls you can shoot. Shoot the ceiling and the floor, then jump in. You fall through the ceiling to the floor... through that hole and back through the ceiling... and you keep falling infinitely. Or shoot the wall across the room and the floor below you - fall through the floor and get propelled out the wall across the room.

You use your portal gun to solve puzzles in the testing facility getting from the entry to the exit of each room. As you progress, you learn more and more about the testers and Aperture Science. And then... well, you just have to play. It's the perfect blend of difficulty, humor, fun, and originality. (The subject of the post is a reference to one of the little jokes in the game.) Plus, the song at the end credits is probably the best video game song ever.

The only problem I had with it was that it was too short. I beat the standard game in like four hours or something. After you beat it, there are challenges you unlock (advanced versions of the puzzles you just solved, challenges to see if you can beat the puzzles in a certain time limit or with a minimum number of portals, etc.), but I want more story. It was short and fantastic and I gotta have more.

Multi-User Picasa

When I was setting up multi-user iTunes on my new Windows Vista box, I also came across the need to set up Picasa for multi-user support. Like iTunes, Picasa is really a single-user application so you have to do some special work to get it to share a single library across different user accounts.

Fortunately, you can use many of the same principles as in multi-user iTunes to get Picasa up and running without much issue. (Enough so that I can do some pretty easy copy/paste modification to the iTunes instructions and get Picasa instructions.)

IMPORTANT NOTES:

  • This is all at your own risk.  If it doesn't work for you, I'm sorry, but I can't offer individual support.
  • You may not be able to follow this verbatim. If these steps don't work precisely, I recommend looking at the intent of the steps - putting the Picasa library in a central location and creating links to it from individual user profiles - and adjusting things according to your setup.
  • As new versions of Picasa, Windows, etc. come out, I may not always update or catch all the little "gotchas." I originally wrote these for Picasa 2.7... things change, versions change, OSes change, and I can't keep these up to date for every possible combination of software.
  • You must have Administrator privileges to set this up. You don't need Admin rights once you've got it set up, but some of the stuff you do here needs to be run as Administrator, so make sure you can do that. 
  • You need to be comfortable at a command prompt. If you're not, this may be very frustrating for you.

Now... here's how to get it running:

  1. Get the required tools. You'll need a tool that allows you to make symbolic directory links.
    • On Windows Vista, this is built in - the mklink command.
    • On Windows XP, you need to go to SysInternals and download a copy of "junction" if you don't already have it and put it somewhere in your path (like the C:\WINDOWS\System32 folder); you're going to need to use it from the command prompt later.
  2. Make sure everyone runs Picasa once. For each user you want to set up, make sure they've run Picasa at least once so they've accepted the EULA and Picasa has created their initial/empty library file. You'll also be asked to set up "watched directories" when Picasa runs the first time. I recommend watching as few directories as possible and adding them in later once you've finished getting everyone on board.
  3. Choose the Picasa library you want to share. Decide which user's Picasa library you want to be the main one that everyone else will share. You'll be manipulating this library. I will call it "the main Picasa library" from now on so you know what I'm talking about.
  4. [Optional] Consolidate/move the main Picasa library pictures into a shared location. Picasa allows you to backup and restore pictures using its built-in tools. You can back up from one place and restore to a different place, effectively moving your library. (I will not walk you through this. It's sort of a pain, but if you search the Picasa forums you'll find info.) Basically: run the backup, move your original photos out somewhere else, restore the backup to a different/new location, verify you can still see things in Picasa, and delete the original photos.  Doing this will save you a lot of headache when you find that one user can't access all the pictures that another user can due to security restrictions. Move the pictures into a shared location (like create a folder called  C:\Users\Public\Pictures\My Pictures in Vista or the C:\Documents and Settings\All Users\Documents\My Pictures\My Pictures in XP and move it there). Note that you may need to try the "restore" operation a few times before you get it the way you like it. Don't delete your originals until you're sure the backup restored all of the stuff you want. I am not responsible if you lose data trying this. Do it at your own risk.
  5. Find the main Picasa library. The Picasa library for each user is stored across two folders inside each user's application data folder. Both of these are part of the library, so when you're working with the library, copy them at the same time and keep them together.
    • In Windows XP, these folders are:
      • C:\Documents and Settings\username\Local Settings\Application Data\Google\Picasa2
      • C:\Documents and Settings\username\Local Settings\Application Data\Google\Picasa2Albums
    • In Windows Vista, these folders are:
      • C:\Users\username\AppData\Local\Google\Picasa2
      • C:\Users\username\AppData\Local\Google\Picasa2Albums
  6. Back up the main Picasa library. Copy the main Picasa library folders somewhere safe for backup purposes. Just in case something goes wrong.
  7. Create a shared Picasa library folder. Create a new Picasa folder that all users have access to. I recommend putting it in the "Public" or "All Users" areas so you don't have to worry about security issues. It should be something like this: 
    • In Windows XP, this will be C:\Documents and Settings\All Users\Documents\My Pictures\Picasa Library.
    • In Windows Vista, this will be C:\Users\Public\Pictures\Picasa Library.
  8. Copy the main Picasa library folders into the shared Picasa library folder. As simple as drag and drop - copy the two folders that make up the Picasa library into the new shared library folder you just created.
  9. Create symbolic links to the shared Picasa library folders. You're logged in as Administrator (or otherwise have Administrator rights), right? Here's where you really need them.
    • Open a command prompt. In the Start -> Run box, type cmd and hit Enter. A command prompt should pop up.
    • For each user who needs to share the Picasa library...
      • Change to the user's local settings folder.
        • In Windows XP: cd "\Documents and Settings\username\Local Settings\Application Data\Google"
        • In Windows Vista: cd "\Users\username\AppData\Local\Google"
      • Delete the old Picasa library folders and all of their contents. (This is why you backed the main library up earlier.)
        rmdir /s Picasa2
        rmdir /s Picasa2Albums
      • Make a symbolic link to the new shared Picasa folders. This will replace the old Picasa folders and will "fake out" Picasa so it thinks it's talking to a local user's library.
        • In Windows XP:
          junction Picasa2 "C:\Documents and Settings\All Users\Documents\My Pictures\Picasa Library\Picasa2"
          junction Picasa2Albums "C:\Documents and Settings\All Users\Documents\My Pictures\Picasa Library\Picasa2Albums"
        • In Windows Vista:
          mklink /d Picasa2 "C:\Users\Public\Pictures\Picasa Library\Picasa2"
          mklink /d Picasa2Albums "C:\Users\Public\Pictures\Picasa Library\Picasa2Albums"
  10. Verify the settings by logging each user in. Everyone you just set up should now be working off of the same Picasa library. Have each user who's sharing log in and verify they can see the shared library. Do not use "Switch Users" - you must fully log off each user and log the next one on. They will all have to set up their own preferences (like their email settings, etc.) but they will all have access to the same picture library and the same albums.
  11. [Optional] Update watched folder settings for each user. You may need to set up each user account to watch the same folders, and make sure each user isn't watching their own personal "Pictures" folder. You only want Picasa to watch folders that every user sharing the library has access to, otherwise you could run into access issues.
  12. That's it! You're done!

I've had this running for a couple of weeks now and haven't had any issues. The toughest part really is doing the backup/restore to move your pictures to a new location that everyone can access. Just be patient with it and be willing to spend the time it takes to try it a few times. Oh, and be sure to back things up and verify your changes take hold before you delete things. You'll get it. It's not that bad.

All instructions here are provided for your UNSUPPORTED use and AT YOUR OWN RISK.

posted @ Friday, January 04, 2008 1:27 PM | Feedback (7) | Filed Under [ Media ]

Updated Multi-User iTunes Instructions for Vista

A fairly popular article I posted a couple years back is on setting up iTunes for multiple users on Windows. I just updated that article so it shows how to do it in XP and in Vista, and I fleshed out the steps so they're easier to understand and follow. (I just had to do this on a new laptop we bought, so I figured I'd offer it up to folks and see if I could spread the joy.)

If you're into the multi-user iTunes thing, check it out.