This blog has, IMO, some great resources. Unfortunately, some of those resources are becoming less relevant. I'm still blogging, learning tech and helping others...please find me at my new home on

Friday, July 31, 2009

Take Back the Beep

We’re getting hooped big time by our cell phone carriers…to the tune of almost $1 billion a year.

Haven’t you been frustrated by those annoying, un-bypass-able cold-woman-voice instructions for the last DECADE?

Me too.  And so has David Pogue of the New York Times.  He’s started a ‘Take Back the Beep’ Campaign that you can get more information on here.  He’s exposed the fact that they are mostly forcing us to listen to those annoying messages for profit:

“At the tone, please record your message. When you have finished recording, you may hang up, or press 1 for more options. To leave a callback number, press 5. (Beep)”.

These messages, and similar ones when you check your voicemail, eat up your plan minutes on most carriers (I’m on Rogers in Canada and I don’t pay to check my voicemail, but I hear this whenever leaving a message for someone else).

In just a few short hours he managed to get significant attention from the likes of AT&T, Sprint and T-Mobile (who’s original response was just to delete all forum messages).

On average, you will listen to THREE HOURS of these messages each year.  Or, you can take back the beep.

Monday, July 27, 2009

Customers Versus Prospects

The shift I’m working on right now is the ability to capture prospects in the system, rather than capturing every party interested in our services as customers.  This project will take about one week to implement (should be testing this Friday). 

Have I mentioned that I love TDD and .Net?

A prospect is defined as the following:

  • Not paying us (yet!)
  • Not on a contract
  • Not required to give us a ton of information
  • Interested in our services

Goals and Requirements

The system should allow users (both a prospect themselves, or our staff members) enter basic contact information to be used when following up with service information.  The data should be validated and stored in the DB.  We will also capture referral information for later-implemented promotions.

Key Service Components

The system will be similar to previous roll-outs, using WCF hosted in IIS as the transport for all service contracts.  SQL Server will be the backend data store and ASP.Net will be used for the public-facing side of the application.  WPF will be used internally to monitor the queue of service information requests and process prospects converting them to customers.  Conversion rates will be reported through an internal ASP.Net app with the SQL Reporting engine. 

Security for all non-public components will be configured via existing application groups in Active Directory.  Only the ASP.Net server will be out in the DMZ, with all other components living on the internal network and secured via IPSec and routing equipment.

Wednesday, July 22, 2009

More on Office 2010

The folks working on Office 2010 are doing some pretty cool things and, I believe, starting to take better cues from the developers outside of the Microsoft behemoth that is Office.

The new ‘Protected View’ for Office is a clever security mechanism that follows the pattern of IE and .Net, using a sandbox to isolate the user’s computer when opening suspect files.  They’ve improved the file validation, which hopefully means the end to the annoying (but useful – in a security context) pop-ups asking us what to do with a file because it has a macro in it.  According to a blog post on the Office IT blog, it’s such an “integral part of Office that on most days, you would never know exists.”

One of the things that I hope it is able to do is recognize when the programmatic elements (the script/macros in the document) change, perhaps by computing a hash, and to be aware if it accesses the system in any way.

For example, there are Excel documents that I access on the intranet all the time that have macros, for which I get warnings every time I open them.  The first time I accept this, it would be nice if Excel was aware that I trusted that version of the macro, but that I want to know if it changes.  It’s certainly more complex than that, but for most documents I’m accessing it’s simply computing cross-page totals from multiple worksheets, or even reading data in from other sources.

If that same script all-of-a-sudden now wants to start connecting to a web site or writing to c:\Windows\ I would certainly want to know about it, but otherwise I will trust that document going forward.

Again, the Office IT blog is continuing to provide great insight into the development process that occurs behind what has been a leaded curtain for so long.  For developers who are able to read between the lines, there are some gems in there for us to extrapolate and start using in our own works. 

The keys are in providing UI that is in-context for the user, ensuring that user requirements for compatibility don’t trump the need for security, and maintaining or improving performance and experience where ever possible.  I think these are things that they are achieving…

…now if I could only get my hands on a preview…

Tuesday, July 21, 2009

Gates – But not Bill

Henry Louis Gates was just arrested (and released) when neighbours called in an attempted break-and-enter into his own house.  He had been away and neighbours did not expect him to be present.

Gates provided identification to police, but was non-compliant in their requests.  Both sides are telling slightly different stories (Gates insists the officer wouldn’t identify himself, the officer reports he did, etc).

I think the whole thing is terrible…on both ends.  It sounds like the cops got a little bit ragey here, and if anything Gates is suggesting is true than there were likely some issues with race.  On the other hand, Gates is already planning on doing a documentary on PBS.  Insane.  It starts to feel very quickly like he’s trumping up allegations against the police.

What really bothered me about his story was his comment about the police officer:

He should look into his soul and he should apologize to me. If so, I will be prepared to forgive him. I think that poor people in general and black people in general are vulnerable to the whims of rogue cops, and we all have to fight to protect the weakest among us. No matter how bad it was going to get, I knew that sooner or later I would get to a phone and one of my friends would be there to help.

Two things bother me about this:

  1. Gates has already made the assumption that one particular officer is evil, riddled with hate and contempt for another race.  He is unwilling to accept that any other lens from which one might have viewed the scene could be plausible. What I mean by that is simply that an officer can’t let a man go if he simply says ‘I live here’ after breaking through a front door.  The context that Gate refuses to see is an officer called to a scene by a neighbour who didn’t recognize a man who busted through a front door.  Honestly, he’s lucky things weren’t worse as he turned and walked away from the officers and went into the kitchen.  This could’ve ended waaaaaay worse.
  2. The more disturbing thing to me is something that is telling of Gates’ character: he won’t forgive unless someone is sorry.  Forgiveness isn’t an emotion or a response, it is a choice.  If your brother told you off and then got killed in a car accident, wouldn’t you forgive him?  Or would you carry your resentment towards him to your grave?  Forgiveness is a much better response to situations like this than media attacks on the person, judging their soul or condemning them without knowing anything about their life.  When someone lives in a world where they are not able to forgive without someone else’s apology, I think they are the ones who, ultimately, will suffer.

When you can’t let go, when you can’t forgive someone…that’s a grudge.  And that can be a terrible burden to carry.  It’s the kind of thing that leads to retaliation, descent, and misappropriated energy.

This is terribly off-topic for my usual techie posts!  Here’s the link to the Washington Post article.

Thursday, July 16, 2009

Backstory on Backstage

There’s a great post here on some of the design features of the Ribbon in Office and how the Backstage View came into play over the last six years.


I am one of the early naysayers of the Ribbon, but also a convert.  I’'ve grown to like the more standardized approach to grouping features of the applications and it has become quite intuitive.

Most people I’ve talked to who say they don’t like the Office Ribbon can provide very little reason why, other than it’s not the same.  If you show them a couple of the features they are usually quick to re-evaluate their stance, and if they use it for a while they usually start to like it (at least enough to use it without complaining!).

I’m still working on one lady at my office…she’s a Mac user and a Ribbon hater!  ;o)

Tuesday, July 14, 2009

Frustrating Upgrade Process (and Resolution)

One of my development environments recently expired.  Yes, pretty much the whole machine. Almost all the tools hit the 90 day trial period wall over the same few days. 

We have purchased full licences for all machines, so this didn’t seem to be too big a problem for me.  Visual Studio Team System – the trial version – turned out to be the biggest nightmare.

Here’s what you see when Team System 2008 times out:


The text here is misleading, as it was in the nag screens that came up for the last couple of weeks (which, by the way, is why I put it off so long). 

The text reads:

Click Upgrade to find out how you can continue to use the application by purchasing a full edition.

Well…that would be great but that’s not what happens.  Besides, I already have purchased the lot and don’t need any more cash dispensed at this point.  The ‘Upgrade’ button simply opens a browser and takes you to a web page with reasons to buy, feature comparisons and – ironically – links to the trial version.

At this point I pulled down the pre-PID’d version from MSDN Subscriber Downloads and re-installed.  Unfortunately, this ended up being a different SKU than my trial, so I was still getting bounced out of the IDE (even though the installation worked clean and reported no errors).

I figured I’d have to bite the bullet and uninstall Visual Studio, thus losing all my settings.  This is where I realized the err in my dual-SKU approach.  I found two product uninstalls in Control Panel –> Programs (one was the developer edition I just installed, the other was the Team System that was part of the trial). 

Either way I figured I would end up losing all my plug-ins, my config (I highly customize my dev env) and recent items list (which, weirdly, I rely on quite heavily).

Instead, the uninstall gave me this:


Aha! An upgrade path.  Too bad the ‘Upgrade’ button above didn’t take me to a page to tell me about that one!

Dang.  Now where do I get my key?  I can’t get into VS.Net and MSDN downloads says the product is pre-PID’d, so how do I find it?  You have to use the installer (it’s listed in one of the first steps, greyed out), except the problem with that approach is that you don’t get the screen that reveals the key unless it’s a clean install.

Luckily, I have a whole bunch of VMs around :oD

I fired up VPC, went into a clean OS and mounted the ISO.  Two minutes later I had my key:


Next, I plugged the key into the upgrade box I showed above and the ‘Upgrade’ button lit up…so I clicked it…and was pleasantly rewarded with the following:


Fire up Visual Studio, and you’re good to go, all settings in tact.

So, in a nutshell, if your Visual Studio Team System trial expires and you want to continue working using your existing development configuration, do the following:

  1. Download your purchased copy from the MSDN subscribers download site.
  2. Fire up a clean VPC (or a PC without Visual Studio installed) and run setup from the ISO you downloaded.  VPC is easy because you can mount the ISO as a CD in the virtualized hardware.
  3. Run the first few steps of the install to get your key.
  4. On your development machine, go to Control Panel –> Programs and select your Visual Studio trial.
  5. In the maintenance application it prompts you for the key; use the key from the pre-PID’d copy you’ve purchased.
  6. Push upgrade!

It took about three hours longer than I would have liked because I went and downloaded the other copy and did a full install.  I really should have had it downloaded anyways, but I didn’t need to bake in another install. 

Hope this helps if you get stuck with a timed-out version of Visual Studio.

Monday, July 13, 2009

Windows 7 Blue Screen of Death – Virtual PC

If you want to see quick evidence of the BSOD (blue screen of death) still kicking around in Windows, you have but to install it on a virtual machine. 

Actually, a specific type of virtual machine, with certain hardware and a certain OS.  I have a 64 bit install of Vista running and my virtualization software (for this vm, anyways…I really should standardize…) is Microsoft Virtual PC 2007.  When you install the 32bit version of Win7 everything runs a treat until you try to install Virtual Machine Additions.

After the install, you get a BSOD loop.  You’ll need to restore to the point prior to the VMA installation in order to get Windows 7 back up and running.

The fix is quite simple: upgrade to SP1 for Virtual PC.  There isn’t a workaround otherwise, and there’s no point in hanging on to the old bits.

Make sure all your machines are out of a ‘saved state’ and properly shut down before you upgrade.

After the upgrade, you can easily (and safely) install VMA and you won’t be blue-screening.

Friday, July 10, 2009

Docking a WPF Window to the Desktop

Philip Rieck posted a great solution (using a previous user’s code as a starting point) to allow a WPF window to be docked to the desktop.

I have a queue monitoring application that doesn’t need nearly a full screen to operate and this works excellent to allow users to full-screen other apps while yours stays on top.

The question and answer (from StackOverflow) is here.

Refactoring Woes

I just ran into a problem that was very hard to source related to refactoring class names in Visual Studio 2008.  The error I started getting was as follows:

The name 'InitializeComponent' does not exist in the current context.

I didn’t start to get this error until after I restarted Visual Studio. Also of note is that I run Blend and Visual Studio side-by-side, so it added some extra “what happened?” to the situation.

I was working in a WPF application and moving some classes around into various namespaces.  I had both VS and Blend 2 open at the time and after a build (which compiled and ran just fine) I switched over to Blend, which prompted me to reload the project (which I did).  At that point, I started getting three or more errors for each user control and view in my project.

I quit Blend without saving, thinking that it just crapped out hard for some unknown reason.

Visual Studio then prompted me to reload the project, which I did – reluctantly – and everything still compiled okay.  I thought that fixed the previous (non-descript) errors, but a clean & rebuild killed the project (80+ errors again).

The problem ended up being a problem with the refactoring.  Some of the classes were renamed/moved to the new namespaces, but only some, and all the Xaml partial classes were left in half-baked states. 

If you run into this, I suggest a manual approach rather than a find-and-replace as quick action in that regard might lead to further complications (I have on occasion gotten into trouble with a quick finger on the rename trigger).

After finding the 6 or so classes that were only halfway renamed the project healed itself fairly quickly.

Friday, July 3, 2009

Great Gains in End-to-End Project

Whirlwind week for me here.  I had a couple days off to ponder the benefits of life rolling into version 32.0, and I’m prepping to attend a conference dealing with 2,000 of media history and how it affects the way we communicate.

I also quarterbacked four servers into test and production environments, got a new client build out and began testing of the new intake process for CSR’s.

The last one is where I made my ‘cool’ this week.

The new intake process is an end-to-end solution using the following technologies:

  1. ASP.Net 3.5 with Ajax Toolkit
  2. WCF services
  3. SQL Server 2008
  4. Linq-to-SQL
  5. WPF (using my new bits for polling and MVVM, CodePlex article coming in July)
  6. Windows Services

This was started on Monday and delivered in three working days.

The intake process deals with 30-60 new clients a month.  The volume is low enough that I don’t have to worry about having high-performing components right through, but leveraging these technologies I was able to get this off the ground with very little effort.

I also ran 40,000 test-cycles in an hour to test for load, and the above technologies held up very well.

I should mention that the web app sits outside our network and the WPF app runs inside the network.  There are several network devices between the various application components and performance is still great.  Traffic is forwarded to internal servers on obscure ports (not that it would affect performance) and the DB server is isolated via various security methods, not the least of which is the fact that the only copper going into the SQL box is plugged directly into the server hosting the WCF Windows Services.

The ASP.Net pages collect and validate data from prospective clients and fires that data from the DMZ through the firewall and into the internal mix.  WCF services receive and store the data in the SQL instance private to its own network.  Internally, a custom manager service polls the DB for changes and maintains a list of clients.  CSRs use the WPF application (connected to the manager service) to wait for new prospects.  As the client information comes in, clients are automatically notified and can ‘claim’ and ‘process’ the profiles.

The new process drastically improves the sign-up process for customers and helps to answer the ‘hey, have you got that one?’ questions that are inherit in the old system, where multiple CSRs could end up working on the same client profile.

Thursday, July 2, 2009


You take a couple of days off for your birthday and you’re left with 446 unread emails in your inbox.

I will try to get back to everyone as quickly as possible; thanks again, all for your interest in this blog, WPF and my messings with SQL Server (particularly the posts on splitting strings and converting IP Addresses).

I am attending a conference in Michigan for about four days starting Saturday…I fear the state of my inbox when I return!