Monthly Archives: July 2008

Made it to Brisbane for RDN Dev Day!

I’m currently sitting on the 19th floor of Oaks Festival Towers in the Brisbane CBD doing a little bit of last minute preparation for my four talks tomorrow at the Readify Developer Network Dev Day. I managed to score a beautiful two bedroom apartment for the night (sadly I’m only here for a night) and it has a great little outside deck area where I am sitting right now with windows that fold back to let in some of that cool fresh night air.

Unfortunately not all my luggage made it. I was tasked with bringing the Readify “Consulting” banner up from the Melbourne office. I had to check-it as oversize baggage and it didn’t turn up in Brisbane, I even hung around the airport for an extra hour to see whether it arrived on the next flight.

Hopefully it will make it by tomorrow morning but I think the best I can expect is that I’ll have it with me when I deliver the same sessions in Perth next week. Ah the joys of travel 🙂 To be honest, this is the first piece of luggage that I have lost for a while.

VSTS 2008 Database Edition GDR – New CTP

VisualStudioLogoSome pretty exciting news just before the weekend. Microsoft has released another CTP of the VSTS 2008 Database Edition GDR. This edition has some pretty cool support for database deployments and SQL Server 2008, here is its rap sheet (from the download page):

SQL Server Support

  • SQL Server 2008
    • All new data types:
      • Intrinsic (date, datetime2, datetimeoffset, time)
      • Built-in SQL CLR types (geography, geometry, hierarchyid)
    • New DML
      • Merge, table parameters, …
  • SQL Server Configuration Options
    • Server option settings will be verified prior to deployment or set during deployment
      Additional 1st Class Object Type Support
    • Rules, defaults, Asymmetric keys, symmetric keys, certificates, …


  • Server Projects
    • Server objects and option settings may be implemented in a separate Server Project
    • This enables a team to define a standard a configuration for their SQL servers and reference it from their Database Projects
  • Partial projects
    • Allowing code sharing between projects by including files from a different project, where the code is included as-is from the originating project and the source code control ownership remains with the originating project
    • This enables code reuse and single sourcing while having a single deployment unit
  • Composite projects
    • References to other database projects or .dbschema files that contribute to the same deployment unit.
    • This enables the separation of development roles and responsibilities and composition of Databases using multiple projects.

Single sourcing of external artifacts

  • SQL-CLR references allow the user to create a reference to a SQL-CLR project or SQL-CLR assembly. This automatically becomes an ASSEMBLY type in the Database Project

Build and Deploy

  • The Build process now produces a separate portable schema output that is fed in to a redistributable deployment engine
  • A redistributable deployment engine. For example, to implement a setup application that deploys the Database Project.


  • Preservation of Intent
    • Enables the deployment of refactoring changes as intended by the user (renames are deployed as renames not as drop/add statements for example)

New Refactoring Operations

  • Wildcard Expansion
  • Move Schema
  • Fully Qualify
  • Extensibility point which enables the ability to develop and deploy custom refactoring types and targets

Schema Compare

  • Now supports comparing Projects, Databases or dbschema files in any combination. For example, Project to Project, which has not been possible until now.
  • Object Type Filtering
  • Additional ignore filtering options

T-SQL Static Code Analysis

  • Including the ability to develop and deploy custom rules

Dependency Viewer

  • View the dependency relationship between objects in your schema

Unit testing

  • Supports execution with other ADO.NET providers

Data Generation

  • Design-time enhancements
    • Smaller .dgen file
    • Support for undo/redo
    • Foreign key replacement
    • Separation of population status into new display window
  • Runtime enhancements
    • By default uses SqlBulkCopy to populate target tables
    • Capability to register different outputs for generated data – i.e. generate to Excel or to file so you can use BCP to load
    • By registering a custom output we have the capability to execute scripts at different points during data generation (i.e. before start/after completion or before/after a table


  • Data Generators
  • Statistical Data Distribution
  • Test Conditions
  • Static Code Analysis Rules
  • Refactoring Types
  • Refactoring Target

Defending my thoughts on Active Directory

James McGovern was kind enough to take the time to respond to my post on “the evils of Active Directory”. I’ve managed to get this post in front of a few other people including members from the Active Directory team at Microsoft and I think that for the most part people have become quite defensive about it.

I think that perhaps I need to do a a better job of explaining my perspective better, and in doing so you’ll see that I’m not necessarily anti-AD, but more anti-“Corporation as Identity Silo”.

Active Directory and similar directories are a an attempt to model how people and organisations represent their identities to each other. Given the dominance of computing in the enterprise space it is natural then for the various directories to represent “the company” as the central resource and “the employee/user” as leaf nodes hanging off it.

This made sense especially at time when “the company” was the centre of everyone’s technological universe.

My argument is that over the past decade that center has started to move away from “the company” and towards “the individual”.

Interestingly I think that many in the IT profession will be the last to see this happening because as power users we have enjoyed quite a bit of freedom inside the enterprise to use technology how we see fit, and so the systems have “been made in our image” you could say.

So what does this have to do with identity management? Well – as an empowered user I am likely to start to rely on services outside the enterprise to do my job. This is not a trend we can stop, we just have to accept it and our definition of identity and who controls it will need to change.

This is where federated identity comes into the picture which basically allows two or more identity stores to agree to exchange identity information to authenticate users. There are lots different federated identity systems out there.

The theory is that in this brave new world federated identity will enable organisations to extend their control of their users identity into the cloud. However my theory is that users will reject this because it is less empowering and quite frankly – the federated identity solutions won’t be able to keep up with the plethora of new online products and services which users will be working with.

Technologies like Live ID and Open ID have more chance of succeeding because they work outside the enterprise but we will end up with at least a partially fragmented identity system where users maintain their identities in two systems.

CardSpace and similar technologies are much more interesting because they offer the ability of users to manage their own identities and present them to the relying party – it is user controlled and empowering – even if from a geeks perspective the identity stores are distributed and controlled by others outside “the company”.

So – my closing argument is that “identity” will not be owned by “the company” in the long run. Control of a users identity will pass to the user, and the user will present that identity to applications that empower them.

This isn’t about defending an existing market players turf, this is about acknowledging a move in the center of the identity universe.

The error code is 2738.

If you get this error message on Windows Vista don’t panic. This post documents how I fixed it with one setup package that I was dealing with, but it might work with yours as well (this is a general problem with some installers).

Yesterday I was trying to install the PowerTools for Visual Studio Team System 2008 Database Edition (what a mouthful). This is a set of tools that extend the Database Edition of Visual Studio, and I was specifically interested in the MSBuild extensions for doing schema comparisons.

Unfortunately, when I attempted to install the package on my Windows Vista 64-bit machine I got the following error:

“The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2738.”

Bummer! My heart sank because I really needed those components and I was worried that I might be seeing some weird 64-bit Vista issue with the way that the setup package had been built – but as I found out, this also effects 32-bit installations as well.

To diagnose the problem I ran the setup package again, but this time I used the MSIEXEC command-line interface to tell it to provide some verbose logging details:


This executes the setup package as normal, but it takes all the output generated by Windows Installer for diagnostic purposes and stuffs it into a file called LOG.TXT. These files can sometimes be quite large but I found this error (in red) buried away towards the end of the file.

Action start 22:19:04: INSTALL.
MSI (s) (D0:14) [22:19:04:442]: Running ExecuteSequence
MSI (s) (D0:14) [22:19:04:442]: Doing action: DevEnvProcessCheck
MSI (s) (D0:14) [22:19:04:442]: Note: 1: 2205 2:  3: ActionText
Action start 22:19:04: DevEnvProcessCheck.
MSI (s) (D0:DC) [22:19:04:445]: Generating random cookie.
MSI (s) (D0:DC) [22:19:04:452]: Created Custom Action Server with PID 13584 (0x3510).
MSI (s) (D0:D4) [22:19:06:320]: Running as a service.
MSI (s) (D0:D4) [22:19:06:322]: Hello, I’m your 32bit Impersonated custom action server.
MSI (s) (D0:60) [22:19:06:324]: Note: 1: 2205 2:  3: Error
MSI (s) (D0:60) [22:19:06:324]: Note: 1: 2228 2:  3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 2738
DEBUG: Error 2738:  Could not access VBScript runtime for custom action
MSI (s) (D0:60) [22:19:07:725]: Note: 1: 2205 2:  3: Error
MSI (s) (D0:60) [22:19:07:725]: Note: 1: 2228 2:  3: Error 4: SELECT `Message` FROM `Error` WHERE `Error` = 1709
MSI (s) (D0:60) [22:19:07:725]: Product: Visual Studio Team System 2008 Database Edition – Power Tools — The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2738. The arguments are: , ,

It looked like some kind of security issue to me, but I decided to search of the text via Google where I came across this link on the MSDN forums. The advice they give is that VBScript isn’t registered by default under Vista. The solution is to perform the following operation in ‘C:\WINDOWS\system32’ at the command-prompt:


Once that is done you should get a dialog saying that the DLL was registered successfully. If you are using Windows Vista 64-bit you aren’t done yet. You then need to change into the ‘C:\WINDOWS\SysWOW64’ and issue the same command from above again. This solved the installation problem for me and it went through normally.

I’m post this up here because I think if someone else experiences the same problem then finding this on Google might save some time.

Note: I am not sure if VBScript is unregistered for a reason – perhaps security, so if that is the case you might like to unregister VBScript again afterwards.

Hanging out at Croissant Express waiting for Perth .NET User Group meeting.

I’m sitting down enjoying a stale muffin (seriously, it might be stale, but it is yummy) and a cappuccino waiting for the Perth .NET User Group to start. I am doing a 15 minute demonstration tonight on Unit Testing Workflows.

I just finished up an engagement with a client today as well so I am feeling pretty good because I think I might have managed to give the client everything they wanted which is always nice (sometimes logistical challenges get in the way).

Anyway – if you read this and it is before the meeting you know where I am, I’ll head over to the meeting at about 5pm just to do a bit of a tech check and meet up with Mitch Wheat.

Will also be meeting up with Graeme Foster, Hadley, Andy Lamb and Brian Masden. Should be a good night.

Stop doing things you DON’T want to do and get more productive.

Aymeric Gaurat-Apelli is one of my co-workers and Readify and he posted up a link to this thought provoking piece on one of our internal distribution lists. The simple argument that the author makes is that to be more productive you should stop doing the things that you don’t want to do.

Interesting. Definitely worth reading. Not sure if it will (or if I want it to) take on.