Pros & Cons – Rails vs. .NET Study

I’m debating between moving my career in one of two ways :


Study ruby on rails, leave Microsoft development, move my career in a new direction. I feel immediate happiness in this endeavor.


  • Test-driven development “baked in” to the development software
  • Installation and environment setup is free. No extra computer is required.
  • Ruby language contains “best-practices” of multiple languages and is “modern”. Ruby applies “LOLA” (Law of least astonishment), which makes it easier to apply “best-practices” to written code.
  • Community is VERY robust. Meetings are regular. IRC and listservs have heavy message traffic
  • My current skills apply to Ruby/Rails, even when from a different language/framework (IE Microsoft)
  • Best practices of Ruby/Rails align with current software-development industry research on best way to structure project management, design software, and build maintainable large-scale web systems.
  • By writing code in a system that aligns with best practices, I feel like I’m doing “the right thing” when I’m writing software.


  • Job Market is “currently” limited.
  • I need time to develop the skills/experience to support current income
  • Achieving experience appears to be a catch-22


Study Microsoft Certified Professional Developer (MCPD) / .NET 2.0. Give in to “the state”, admit that a governmentally structured certification machine also has a thriving job market. Join a Microsoft Consulting Firm full time and be a valuable contributor to their technologies.


  • Easy Job Market
  • I have valued skills (according to last job-seeking process)


  • Cost of Entry (Need new computer ($1000) + Software + Certification Testing $)
  • I don’t agree with Microsoft attitude toward developer community
  • I don’t agree with Microsoft attitude toward open-source / linux
  • Developer community is not robust (Few user group meetings in Chi, Forums/Elists don’t answer questions)
  • Microsoft web-development software (ASP.NET 2.0) does not support test-driven development
  • Microsoft development software is often confusing to read and confusing to use. Microsoft does not apply “LOLA” (Law of least astonishment).

Updated: 20 June 2007 12:35:00. This rounds out the pro/con list to more clearly present my perspective on what direction to take my career.

SSIS Package Loader – MSDB Folders and Configuration Adherence

Here is a 1-2-3 for building your own VB.NET 2.0 Console application that will allow the upload of SSIS packages to SQL Server storage in the MSDB folder of your choice. The process also allows correct operation of XML Configurations on the packages (other configurations should work too, not tested by me in production though).

Here goes!

  1. Launch VS.2005. Start a new VB Windows Console Application project.
  2. Add Microsoft.SQLServer.ManagedDTS library to References
  3. Paste this into Module 1.vb
    Module Module1
        Sub Main()
            Dim packages As System.Collections.Specialized.StringCollection = My.Settings.packageManifest
            Dim pkgName As String
            Dim fileName As String
            Dim processContinue As Boolean = True
            For Each pkgName In packages
                Dim pkgFilePath As String = My.Application.Info.DirectoryPath + "" + pkgName + ".dtsx"
                If Not System.IO.File.Exists(pkgFilePath) Then
                    Console.WriteLine("Package " + pkgName + ".dtsx is not found on the local file folder.")
                    processContinue = False
                End If
            For Each fileName In System.IO.Directory.GetFiles(My.Application.Info.DirectoryPath, "*.dtsx")
                pkgName = System.IO.Path.GetFileNameWithoutExtension(fileName)
                If Not packages.Contains(pkgName) Then
                    Console.WriteLine("File " + pkgName + ".dtsx is found on the local file folder but is not included in the .config  section.")
                    processContinue = False
                End If
            If Not processContinue Then
                Console.WriteLine("Please verify that all files in the .config  section are on the local folder.")
                Console.WriteLine("Please verify that all files in the local folder are listed in the .config  section.")
                For Each pkgName In packages
            End If
            Console.Write("Press Any Key ...")
        End Sub
    End Module
  4. Create a new class PackageHelper.vb and paste this code
    Imports Microsoft.SqlServer
    Public Class PackageHelper
        Private Shared Function loadSSISPackage(ByVal pkgName As String) As Dts.Runtime.Package
            Dim dtsapp As Dts.Runtime.Application = New Dts.Runtime.Application
            Dim pkg As Dts.Runtime.Package = dtsapp.LoadPackage(pkgName, Nothing)
            Return pkg
        End Function
        Public Shared Sub SaveToSQL(ByVal pkgName As String)
            Dim dtsapp As Dts.Runtime.Application = New Dts.Runtime.Application
            Dim pkgFilePath As String = My.Application.Info.DirectoryPath + "" + pkgName + ".dtsx"
            Dim ssisFolder As String = "\" + My.Settings.targetSSISMSDBfolderName
            Dim ssisServer As String = My.Settings.targetSSISserver
            Dim ssisPackagePath As String = ssisFolder + "" + pkgName
            If Not dtsapp.FolderExistsOnSqlServer(ssisFolder, ssisServer, Nothing, Nothing) Then
                Console.WriteLine("Server:" + ssisServer + "  Folder:" + ssisFolder + "  SSIS Msdb Folder is not found on server.  Check Project Settings (Settings.settings).")
            ElseIf Not System.IO.File.Exists(pkgFilePath) Then
                Console.WriteLine("Package: " + pkgFilePath + "  The file specified is not found in the " + My.Application.Info.ProductName + " current directory.")
                Console.WriteLine("Saving package to SQL (" + ssisServer + ") " + ssisPackagePath + " Starting ...")
                Dim pkg As Dts.Runtime.Package = PackageHelper.loadSSISPackage(pkgFilePath)
                If dtsapp.ExistsOnSqlServer(ssisPackagePath, ssisServer, Nothing, Nothing) Then
                    Console.WriteLine("Saving package to SQL (" + ssisServer + ") " + ssisPackagePath + " Removing Previous Instance ...")
                    dtsapp.RemoveFromSqlServer(ssisPackagePath, ssisServer, Nothing, Nothing)
                End If
                Console.WriteLine("Saving package to SQL (" + ssisServer + ") " + ssisPackagePath + " ...")
                dtsapp.SaveToSqlServerAs(pkg, Nothing, ssisPackagePath, ssisServer, Nothing, Nothing)
                Console.WriteLine("Saving package to SQL (" + ssisServer + ") " + ssisPackagePath + " Complete")
            End If
        End Sub
    End Class
  5. Add Settings.Settings to the project to create the XML configuration file for the installer.Name: targetSSISserver
    Type: String
    Value: your server nameName: targetSSISMSDBfolderName
    Type: String
    Value: Your MSDB Folder Name – This must pre-exist on the target SSIS ServerName: packageManifest
    Type: System.Collections.Specialized.StringCollection
    Value: newline-delimited list of package names. This will be an element list in the XML Config file.An example resulting app.config :

                    Deployment Test
  6. Build the console app. Copy the SSISPackageUploader.exe and SSISPackageUploader.exe.config to a new folder along with the packages you intend to upload.
  7. Modify the SSISPackageUploader.exe.config to contain the intended targetSSISserver, targetSSISMSDBfolderName, and packageManifest

SSIS IsBig… Really Big… I mean HUGE!

I’ll be blogging some on SSIS as I now have a new gig slinging data hither and yon. Duck, you don’t want to get a DT_I8 in the face.

So, today I was bitten by the IsBig flag on DataFlow Aggregate Transformation. This flag is notated in the BOL:

A column may contain numeric values that require special consideration because of their large value or precision requirements. The Aggregation transformation includes the IsBig property, which you can set on output columns to invoke special handling of big or high-precision numbers. If a column value may exceed 4 billion or a precision beyond a float data type is required, IsBig should be set to 1.

So, the result here is a column that is Input to the Aggregate Transformation as DT_I4 and has IsBig = 1 WILL be Output DT_I8, and the IDE will not allow the otuput datatype to be changed with Advanced Editor!

This bit me with one column in a large Aggregate somehow getting set IsBig and messing up the downstream metadata. Several different looks at the issue were all proving dead ends.

Next time you run into a metadata mismatch, especially if its a DT_I4 or DT_R4 turning into their 8-byte counterparts, remember, you need to tap your inner IsBig and see the light!

New world, new information

Well, after a 20 year separation from teh Cult of Mac, I have finally returned. It is nice to see the tight tight integration of EVERYTHING on the Mac.

While all things round and sweet are looking chipper, my former web hosting is dead and gone. I recovered a few posts, all others are basically lost forever. (Well, at least until I can manually rebuild the posts from MySql backup).

Happy New Year anyway!

Sexy is only Skin Deep in Software

So I just watched the “5 minute video” by Iron Designer for .NET

Very sexy. Very very sexy.

As an MSDN subscriber (thanks to my corporate sponsors employers) and MCP (SQL Designer test or something, I’ve forgotten), this is very enticing…

AND .NET has failed me in several situations where I was trying to do something “outside the box”.

How does Ruby on Rails compare to this ?

Well the 10 minute video is almost a religious experience to many. AND Ruby and Rails DOES NOT fail us in situations where we wish to go “outside the box” in order to accomplish something.

That is all

Totmato Sauce, Software, Human Variability

Malcolm Gladwell at TED 2004 describes the research of Howard Moscowitz for Campbell’s Soup / Prego.

The lessons learned from Howard beautifully correllate with Kathy Sierra’s Quantum Mechanics of Users

The Nutshell

If users are asked for their preference, they will likely tell you something very common and rather vanilla. When given the experience of the choices, say during a taste test, the aggregated results are NOT similar, and in fact group around a handful of common choices.

Design Investigation for Software

My take on this is that during Design Investigation for software – be it website, desktop application, even for print – if at all possible, build the DEMO of the choices involved and get the trial user into the experience and THEN ask the user what is their preference.

This approach in awareness of user preference, user experience, and human variability could take the design into the “I Rock” space of the passionate user.

In Search Of …

Peter John Fitzgibbons (Gillies)

My father is John Cecil Joseph Gillies (John Cecil Gillies)

My grandparents :

Robert Cecil Gillies and Millie(Mildred?) Gillies were separated in 1940s.

Millie and Ted married in 1961. Both deceased in 1979.

My aunts :

Roberta, Virginia and Ivy are all living. Roberta is now in Windsor, NS, CA. Her husband Roger passed away serveral years ago (2000?).

I am looking for anyone who shares this ancestory. I would like to learn who you are.

I want you to know that John Gillies is terminally ill and will pass away sometime in the next 10 days.

You may email me at