June 2008 Blog Posts

Dr. Horrible's Sing-Along Blog

I'm not sure what to make of this, but it's from Joss Whedon and stars Neil Patrick Harris and Nathan Fillion, so that's really all I need to know. I'm in.

posted @ Monday, June 30, 2008 10:23 AM | Feedback (0) | Filed Under [ Media ]

Xbox DRM Transfer Tool Launched

They finally released a tool on xbox.com that allows you to transfer your downloadable content licenses from one console to another. This is huge. I used to have to wait months (yes, plural) to get this to happen after repair, and people who bought new consoles (upgrade to Elite?) were out-and-out hosed.

That said, there are some important points they blog about on the Gamerscore Blog and there's a FAQ about the tool. The two big points for me:

  • When you get your console repaired by Microsoft, they'll do this for you so you won't need to do it yourself. That's important because...
  • You can only do this one time every 365 days.

Apparently this will work with all content but movies because movies aren't "download-to-own." I don't rent movies over Xbox Live, so I'm not too concerned here.

The last time I got my console repaired, which was about a month ago, they did not automatically transfer the licenses even though they said they would. I called Xbox Live Support and it took about a week for them to do the transfer (as opposed to the months it previously took). I'm gathering that if I get another repair and need the licenses transferred, this won't be the avenue I'm supposed to take - I'll still need to call them. This is more for folks getting new consoles or getting repairs from non-Microsoft facilities. That said, now that we know there's a tool, maybe they can do the transfer right there while I'm on the phone rather than waiting a week.

posted @ Friday, June 27, 2008 8:07 AM | Feedback (0) | Filed Under [ Gaming ]

Disappearing Wallpaper on BlackBerry Curve

I finally got around to putting a new picture as the home screen image on my new BlackBerry Curve. The problem - every time I synchronized against the BlackBerry Desktop Manager software, my home screen image would get reset to the default for the theme. I'd go set it again, sync up, and watch my wallpaper disappear. The image file was still there, it just wasn't my wallpaper anymore.

The answer: Store any picture you want as your home screen image on the device memory, not on a media card. If you store the image on the media card, it'll get reset when you sync. If you store it on the device memory, it's stays persistent the way you'd expect.

Dynamic FxCop Dependency List Using MSBuild

When you're integrating FxCop into your build using MSBuild, you have three basic options.

  1. Build a static project file that contains all of the FxCop settings for your solution and run the command line client against that.
  2. Skip the project file entirely and run the command-line client alone, specifying all of the options on the command line.
  3. Build a partial project file that contains things that don't change regularly (like the list of rules you want to run) and tell the FxCop command line client to use that as well as some dynamic properties you specify on the command line.

Usually you end up with option 3 - a partial project file and dynamic properties on the command line. The problem is that command lines have a maximum length limitation and once you get into Very Large Projects, there may be dozens of folders that FxCop needs to search for assembly dependencies as well as several places you need to point FxCop to so it can find the assemblies you want to analyze. Those are things you normally specify on the command line... but in that Very Large Project scenario, you hit the command line length limit pretty quick.

(You might think using a custom task to run the FxCop process might fix it, but only if it doesn't pipe the output to the command line and try to run it.)

The solution? Dynamically generate an FxCop project file with the list of your dependency folders in it. Then you don't have to worry about any of that showing up on the command line.

  1. Create an empty FxCop project. Set up the rules you want to run, etc., but don't put any target assemblies in there. Save that project and exit FxCop.
  2. Open the FxCop project in your favorite text editor and find the /FxCopProject/Targets node. It will be empty.
  3. Open that Targets node and add a block so it looks like this:
    <Targets>
      <AssemblyReferenceDirectories>
        <!-- @DIRECTORIES@ -->
      </AssemblyReferenceDirectories>
    </Targets>
  4. Save the FxCop project. We're going to use that comment to do a replacement in the file and poke in the list of dependency folders.
  5. Open your MSBuild script and import the MSBuild Community Tasks. You'll need these for the FileUpdate task.
  6. Just before you run FxCop, add a section to your build script that creates an item list of all of your potential dependencies. For my build, all of my third-party dependencies are in one directory tree. After that, create a copy of your FxCop project and use the FileUpdate task to poke in the list of directories. (I'll show the code below.)
  7. Run FxCop using the new temporary copy of the FxCop project file that has your dynamic list of assembly reference locations. Done - no more need to worry about command line length limits, and if you keep all of your dependencies in one folder tree, you can add or remove them without having to update your FxCop project file and things will still work.

Here's that snippet of MSBuild code to dynamically enumerate the files and poke them into the FxCop project:

<!--
     Create a temporary copy of the FxCop project.
  -->
<Copy
  SourceFiles="Build\FxCop Project.FxCop"
  DestinationFolder="$(TempDirectory)"/>

<!--
     Create an item with all of the dependencies in it. Creating multiple
     items with the same name will actually append everything into one big
     item. Here we have two folder trees with dependencies and we're
     ignoring the Subversion files.
  -->
<CreateItem
  Include="$(DependencyFolder1)\**"
  Exclude="$(DependencyFolder1)\**\_svn\**">
  <Output TaskParameter="Include" ItemName="Dependencies"/>
</CreateItem>
<CreateItem
  Include="$(DependencyFolder2)\**"
  Exclude="$(DependencyFolder2)\**\_svn\**">
  <Output TaskParameter="Include" ItemName="Dependencies"/>
</CreateItem>

<!--
     Update the temporary copy of the FxCop project with the dynamic list
     of dependencies. Using MSBuild batching, we won't get duplicates. The
     replacement expression shows we're only interested in the directories
     for the dependencies, not the dependencies themselves.
  -->
<FileUpdate
  Files="$(TempDirectory)\FxCop Project.FxCop"
  Regex="&lt;!-- @DIRECTORIES@ --&gt;"
  ReplacementText="&lt;!-- @DIRECTORIES@ --&gt;&lt;Directory&gt;%(Dependencies.RootDir)%(Dependencies.Directory)&lt;/Directory&gt;"/>

<!--
     Now we can run FxCop against the temporary copy of the FxCop project
     and not worry about specifying dependency folders.
  -->

You can apply this pattern to any list of files or folders you need to dynamically poke into files like FxCop or NDepend project files. Even if you're not worried about the command line length limit, by dynamically generating these things you make your build more robust and require less manipulation as your project changes. Good luck!

Little Advertised Playstation 3 Features

Playstation 3 80GB bundle with Metal Gear Solid 4Jenn and I enjoy our movies, and I'm not (too) ashamed to say I jumped into the HD DVD camp, so when HD DVD died, we started saving up for a PS3. When the MGS4 80GB bundle came out last week, we picked up a PS3 as a Blu-ray player.

There are a lot of things I didn't know about the PS3 that I thought I'd share. You hear about the gaming and Blu-ray playing, but not some of the other things.

You'll need a better video cable. Out of the box, you only get a composite video cable. It makes sense from a lowest common denominator standpoint, but you'll want to see an HD picture, so get a better cable. You can either get a proprietary PS3 component video cable set or you can get a standard HDMI cable. (Get the cable ahead of time - Best Buy really gouges you on HDMI. Like, "10x price difference" style. I'm not afraid to admit I fell into this trap because I needed to get the thing hooked up and it's too late for me... but not too late for you.)

Sound only comes from one output at a time. You get to choose - does it come through the optical out or through the HDMI cable? You don't get both. (With Xbox, it comes through both simultaneously.)

You can't use your universal remote with it. Everything on the PS3 is through Bluetooth including remote control support. Unless you don't mind controlling the movie with a game controller, you'll be buying a PS3 Bluetooth remote.

It may be quieter than Xbox, but it runs just as hot. I thought I had heard this thing ran cool and quiet. I was wrong - it's just quiet... until it heats up, when it sounds like a jet engine. I had put it in the entertainment center with plenty of space around it but it turns out we have to leave the door open when it's on because it really heats up and the fan kicks into serious overdrive.

The PSP integration is awesome. If you have a PSP, you can attach it to your PS3 and do what they call "Remote Play" - basically remote control the PS3. The audio and video come over the wireless network and render on the PSP. Some games let you remote play, too, so you can start a game on the PSP and pick up where you left off on PS3. I haven't done that yet, but it sounds cool.

Games on the Playstation Network are priced in dollars. PSN is the Sony equivalent of Xbox Live. Except on Xbox Live you buy games with "points" and have to do conversion rates in your head. It's in standard currency on PSN.

Audio/video setup is tricky. You have a lot of control over the settings used for outputting A/V signals - down to which stream types and bit rates come out the optical audio feed. The auto-setup actually detected some things wrong so I wasn't getting any Dolby Digital out. For a non-tech person, I can see that getting it right could be a challenge.

It has a web browser. What's cool about this is you can do a quick check of movie times or Google something from the couch. It's not an awesome browser, but it suffices.

You can install a second OS on it. There's a menu option to partition your hard drive and install a second OS. It reminds me of the short-lived PS2 Linux kit they had out. I'm not sure what your options are for OS right now, but it's a forward-thinking option.

posted @ Tuesday, June 17, 2008 12:08 PM | Feedback (1) | Filed Under [ Gaming ]

Epinephrine Reversal

We heard back from the vet with the final autopsy results on Jack. He did have inflammatory bowel disorder, as we suspected, but other than that, he was perfectly healthy. A consult with an anesthesiologist turned up that it was most likely a case of "epinephrine reversal." The way the vet described it, the pre-anesthetic sedative they gave him had an adverse effect that basically took down his blood pressure in a wildly unexpected way. It happens in animals that get really stressed out - for example, it's common with horses because horses get stressed easily. It's virtually unheard of in cats. That, and Jack wasn't exhibiting any stress-related behavior. Aside from him just not liking the IV and catheter (who does?), he was fine.

There really isn't any way we could have detected it or avoided it. He needed to be checked out so we could help him with his condition and treat it correctly, and this was the only way to do that. Even if we had skipped it now, who's to say it wouldn't happen in some future medical scenario.

The doctor is continuing to look into ways to prevent it from happening to other animals, but it looks like... well, "it just happens."

Performance Impact of Full Disk Encryption

I'm running this laptop at work that has full disk encryption and a real-time virus scanner on it and it feels like it's dog slow all the time. It's not a CPU or memory issue, either - it's that my disk is constantly churning and I'm I/O bound.

I knew that the the encryption had an impact, but I never realized how much until I found these benchmarks. Looks like I'm about doubling the amount of time it takes for disk I/O, not counting the real-time virus scanner overhead.

I'm all about security and all, but man, what I wouldn't give to just have a separate data partition encrypted and leave the system partition unencrypted.

Laser Hair Removal 11, Reed College, Professor Layton, and Outlook Catastrophe

I'm going to do a lot of very small personal updates all in one fell swoop. Here we go!

  • Got laser hair removal treatment #11 on my face on Saturday morning. They recalibrated the laser and replaced the diode in it, so it was more powerful than before. They had to take it down a couple of notches. Results are still looking good and my chin is still the stubborn part. I wasn't allowed to shave at all on Sunday morning (to let my face recoup) so by Sunday you could really see how patchy I am. Next time is the last in my latest pack of six, so I'll probably be getting another pack. Hopefully by the end of 18 I'll have things pretty well cleared out. We've had quite a bit of decent progress in this last set of six.
  • Did fireworks for the Reed College alumni reunion Saturday night. Jenn and I have our state pyrotechnician licenses up for renewal, but since last fourth of July we did the Walla Walla, WA show it doesn't count towards our Oregon license renewal requirements. Doing this show made up for that and we can now get renewed. Since we're doing Walla Walla again this year, we'll have to do another make-up show. Hopefully we can get an Oregon show next year so it counts towards the licenses.
  • I beat Professor Layton and the Curious Village on Sunday. Jenn got this game for her Nintendo DS a few weeks ago and I tried it out, quickly becoming addicted. The puzzles are great, many of them classic programming puzzles. We woke up tired Sunday morning and I flipped on the DS... and suddenly it was three hours later and I had finally beat the game. A great game, highly recommended. Looks like there's going to be a sequel, too, which I look forward to.
  • This morning, my Outlook calendar disappeared. I fired up Outlook this morning and it informed me that "Outlook closed improperly last time" and that there were "some errors." Looking at my calendar, nothing was on it. I quickly went to the webmail view of Outlook and all my stuff was still there, so it was a problem with my local profile. I've deleted and recreated my profile locally but... well, I started getting a lot of unfortunate behavior from other Office apps. Turns out there were some security patches pushed this weekend that I got when I booted up this morning. Other people are seeing unfortunate behavior as well. So, after fighting with delete/recreate for some time, I'm doing the full Office reinstall. This won't take any time at all.

Setting Up a BlackBerry for Personal Use

The major use case for BlackBerry seems to be integrating with a corporate environment... which is great if either your company will freely let you attach to their BlackBerry Enterprise Server or, better still, will just provide you with a BlackBerry directly. But what about the rest of us - individuals who want a PDA to keep themselves organized?

BlackBerry Curve 8330I recently got tired of carting around a cell phone and a Pocket PC, and I was hoping to get a better client for email, maybe a better camera, and GPS ability, so I jumped on the BlackBerry bandwagon with a BlackBerry Curve 8330.

I chose this one for a few reasons:

  • Of the selections available at Verizon Wireless at the time, this one seemed to have the most features I was looking for - GPS, all-around messaging, decent camera with a flash, ability to synchronize with Outlook.
  • My Pocket PC was a Windows Mobile device and while I tried to find another Windows Mobile device, I wasn't too into the way it handled messaging.
  • I wanted to try something a little different than I was used to - break out of my little Windows Mobile world.
  • The BlackBerry plan was $15/month cheaper than the corresponding Windows Mobile or Palm device plan. Go figure.

So far I like it, but there are some things I wish someone told me while I was setting it up... so I'm going to tell you. Again, remember I've never had a BlackBerry before, so all you BlackBerry users are probably like, "Duh!" but it's not obvious to the folks who haven't done it. And remember - this is how it works for me on a personal BlackBerry. I've never had one that integrates with a BES, but I can't imagine it's too different.

SMS and MMS text messages are treated as different entities. This doesn't really happen on a regular cell phone - you want to send a message, you don't really have to choose "which type of message." You insert a picture, you type some text, magic happens, the person gets the message. On BlackBerry, you have to consciously choose which type of message you want to send someone - there are actually different options for "MMS (phone number here)" and "SMS (phone number here)." They all go to the same inbox, you just have to be conscious when sending. I thought this was sort of odd, but you get used to it.

Native email integration with BlackBerry commingles text messages with your email. Basically, everything incoming is treated like a "message." It's a reasonable way to think about things, but you sometimes have to be consciously aware of the type of message so you respond in the right way. It can get a little confusing.

The email integration setup service may make changes to your email account. I noticed when I told it to set up integration with my GMail account that it automatically enabled both POP and IMAP on my account without even asking me or telling me after the fact. I don't know what it does to other services, but be warned - you may see it make some changes in the name of helping you and it won't actually tell you what it did, just that "setup was successful."

BlackBerry syncs up with Outlook (or Notes, etc.)  through a "BlackBerry Desktop Manager" program. Windows Mobile has ActiveSync, BlackBerry has BlackBerry Desktop Manager. The key differences:

  • ActiveSync runs as a service, BDM doesn't. ActiveSync will just start up and go - you need to have a BlackBerry Desktop Manager icon in your Windows Startup group to get it to go when you log in.
  • ActiveSync sits nicely in your system tray, BDM takes up space in the task bar. Sort of annoying if you have it running all day. I'll tell you how to fix this below.
  • ActiveSync detects changes in Outlook and syncs your device real-time when it's connected, BDM requires you to manually initiate the sync. I'm still getting used to this.
  • ActiveSync syncs up way faster than BDM. Not sure why this is, but an ActiveSync cycle would take about 5 - 10 seconds on my Pocket PC; a full sync cycle in BDM is more like 20 seconds.

Based on what I've learned, here are some recommendations to make things smooth:

  • Get the unlimited data plan for your phone. I shouldn't even have to say this, but once you start playing with BlackBerry, you're going to get pounded on data charges if you don't just pony up the extra $10/month or whatever for unlimited data. Plus, this way you can let your email and such constantly check and alert you when there are new messages. Isn't that the point?
  • Talk to your carrier about GPS options. It turns out that Verizon locks the GPS down on these things so it only works with their proprietary VZNavigator app (which is an additional $10/month). It's not a bad app, but I don't have any other options - even mobile Google Maps can't detect it because the signal's blocked. If you're going to use the GPS, find out if there are any restrictions.
  • Separate your email and SMS/MMS text messages. This will create two separate "inbox" icons - one for your emails, one for SMS/MMS text messages. It's a nice way to help you make that mental distinction, and if you're just using GMail (see below), you can hide the email inbox so it's not bugging you on your home screen. Go to the "Messages" application, hit the BlackBerry key and select "Options," then "General Options." Set the "SMS and Email Inboxes" option to "Separate" and save your changes.
  • If you use GMail, get the mobile GMail application and skip native integration. GMail has a nice message threading model, searchability, and other features that you will sorely miss when every incoming GMail item looks like a flat text message with no context. The mobile GMail application looks like a miniature version of GMail and keeps all of that intact, plus it integrates nicely with the BlackBerry notification mechanism so you can still get alerted when new emails come in. (In the Profiles application, go to Advanced, then select the profile you want to change the notification for. Edit the profile and you'll see a "GMail - New Mail" option you can configure.)
  • Manually configure synchronization settings. When you set up BlackBerry Desktop Manager to sync with Outlook or whatever, the default settings are a bit cumbersome to work with. In BDM, select the "Synchronize" option and a dialog will pop up. On the "Configuration" tab, click "Configure synch..." (If you aren't allowed to click the button, connect your BlackBerry to the computer.) You should see a list of things you're synchronizing (Calendar, Contacts, etc.). Now...
    • If you're synchronizing your calendar, select "Calendar" and click the "Setup..." button. This will walk you through setting up your calendar. If you've already set it up, the dialog will be populated with the values you previously selected and you can just click the "Next" button until you get to the "Options" dialog (otherwise, set up your calendar with appropriate values until you get to "Options"). For the "Calendar date range," select "Transfer only future items." Odd things seem to happen if you transfer items in the past, particularly if they have Outlook reminders attached to them... Outlook updates the device, the device thinks there are changes and updates Outlook, and the cycle never ends. Also, you may need to experiement with the "Remove alarm for past items" box. Even though you're only transferring future items, after sync I've had Outlook constantly pop up reminders for things that happened within the last 24 hours until I checked this box. I've also had all of the reminders for recurring meetings (past and future) cleared out after a sync because the sync thought it was being helpful.
    • Click the "Advanced..." button and another dialog will pop up with a tab corresponding to every item you're syncing. On each tab, uncheck the "Confirm record deletions" and "Confirm changes and additions" boxes. Having these checked means that any time there's even a single change on your device or in Outlook, it's going to pop up a box to make you manually verify any changes taking place. This is good for debugging, but a pain if you just want it to sync.
  • Organize your applications with folders. There are some of the applications, like the "Options" stuff, that you'll want to access occasionally (so you don't want to hide them) but you also don't want them cluttering up your home screen. Create folders for these and move the rarely-used apps into the folders. For example, I have a "Settings" folder that has all of the setup applications in it.
  • Hide BlackBerry Desktop Manager in the system tray. You don't want it taking up task bar space, right? Go download and install TrayIt! - it's an application that can take any other app and hide it in the system tray when it's minimized. Set TrayIt! up so it always starts minimized and runs at system startup (I think these are the default options). While BDM is running and the main window is showing, right-click the "minimize" button on the BDM window and you should see an option "Place in System Tray" - select that. Now when you minimize BDM, it'll go to the system tray instead of staying in the task bar. Finally, go to your startup group and find the BDM shortcut. Right-click the shortcut and select "Properties." On the "Shortcut" tab in the Properties dialog, for the "Run" option select "Minimized." This will start BDM up and automatically minimize it. This, in conjunction with TrayIt!, will make the BlackBerry Desktop Manager feel like it's working "in the background" instead of taking up space on the desktop.
  • If you want a password manager, find a third-party app. The "Password Keeper" app that comes on the BlackBerry is really limited and doesn't let you sync up with your desktop... so it won't interact with any of the other password management apps you probably already have running. Find one that you like that will sync with a desktop (or at least import/export from other programs) and get it. I haven't found one I like yet, so I can't make a recommendation. I tried SplashID and was less than impressed, but a lot of people like it. CrackBerry has some reviews and options if you are interested.

BlackBerries are great for both corporate and personal use. If you're looking into it and were on the fence, it's a pretty good experience all around. Hopefully this will help you set things up in a reasonable way if you do take the plunge.

PaPaYa! Cards

I hate shopping for cards because they're always super lame. The art is always the same, the sentiments inside are campy and cliché... I always end up getting something and sort of apologizing for the lameness of it all.

I found PaPaYa! cards at Elephant's Deli this weekend and I'm sold. They're blank inside, which is fine, and the art is amazing and cool and creative and different. I'm going to have to see what holidays are coming up that I need to send cards for and start ordering.