Consolas in GVIM on Windows

My “notepad” of choice on windows is usually GVIM. I was quickly googling for the vim keyboard shortcut for pageup, because using the Page Up key moves my hands off of home row and that is not efficient.

I stumbled onto this page:
. It mentions the VIM fonts section and something about Windows NT. *ding* that is when the lightbulb went off in my head. I’m not yet using Consolas in Vim. It turns out my vimrc already had some commented set guifont directives in it. It turns out 8pt Consolas is VERY readable on my Thinkpad T42 screen as well as this 17″ IBM ThinkVision LCD.

set guifont=consolas:h8

Its a whole new world of highly productive GVIM!

A database in Subversion?


This is interesting, but why in gods name would you do this?

I just don’t see the need for storing databases in version control. I do think that databases should be version controlled, but not the data itself. Dump the DDL and version control that. Does the data really need to be there? I supposed I can think of some arguments to do it, but it sure rubs me the wrong way. I’m guessing that 99% of the time this is NOT what I would suggest doing.

powered by performancing firefox

And yes, this is filed under Linq as well.

And yes, this is filed under Linq as well.

I read that and I nearly laughed out loud. My cube neighbors would have thought I was not working hard and was maybe watching YouTube.

I’ve been thinking for a while that NHibernate or Castle’s ActiveRecord coupled with NHibernate Query Generator looks like “Linq today”, or maybe even “Better than Linq”. I think maybe it should have been filed under Linq and “Better than Linq”.

I’ve been using Castle under Mono and tried to get NQG running under mono. NQG has some Visual Studio extension options, so compiling it with Mono isn’t as easy as using xbuild (mono’s msbuild). I slapped together this two line Makefile which does build.
QueryGenerator: QueryGenerator.cs AssoicationBehavior.cs CustomTool/BaseCodeGenerator.cs CustomTool/IObjectWithSite.cs CustomTool/IOleServiceProvider.cs CustomTool/IVsGeneratorProgress.cs CustomTool/IVsSingleFileGenerator.cs CustomTool/ServiceProvider.cs Program.cs Properties/AssemblyInfo.cs QueryBuilders/QueryBuilder.cs <br/>
gmcs -resource:QueryBuilders/QueryBuilder.cs -resource:QueryBuilders/QueryBuilder.vb -reference:../../../../castle/bin/Castle.ActiveRecord.dll -reference:../../SharedLibs/NHibernate/NHibernate.dll QueryGenerator.cs AssoicationBehavior.cs CustomTool/BaseCodeGenerator.cs CustomTool/IObjectWithSite.cs CustomTool/IOleServiceProvider.cs CustomTool/IVsGeneratorProgress.cs CustomTool/IVsSingleFileGenerator.cs CustomTool/ServiceProvider.cs Program.cs Properties/AssemblyInfo.cs QueryBuilders/QueryBuilder.cs<br/>
It just leaves out the files which have the Microsoft.VisualStudio.Designer stuff in them. The command line app still works.

Unfortunately, when executing I get a NullReferenceException from Mono.Xml.Schema.XmlSchemaValidatingReader.get_Prefix. I think I’ve run into a part of the BCL which Mono has not entirely implemented. I haven’t had time to dive into the Mono source to figure this out. I’ll add this to my todo list 🙂

Thanks to Ayende (Oren) for the “Better than Linq”.

powered by performancing firefox

Dumping stored procedures using boo.

A while ago David Cumps posted about Extracting stored procedure content via SQL.

I liked this post and I knew I wanted to do something with it.  We want to keep a copy of all of our stored procedures in Subversion, our version control system.  This little boo script connects a database server, iterates through all of the stored procedures in all of the databases and outputs them to a directory named after the database.

import System
import System.Data from "System.Data"
import System.Data.SqlClient from "System.Data"
import System.IO

def Main(argv as (string)):

    Exit = System.Environment.Exit
    mkdir = System.IO.Directory.CreateDirectory

    if(null!=argv and argv.Length>0):
        databasehost = argv[0]
        databasehost = "MyDefaultDbServer"

    ignoreDatabases= ["master", 'model', 'msdb', 'Northwind', 'pubs', 'tempdb']

    connectionString = string.Format("server={0};database=master;Integrated Security=True",databasehost)
    print "using connection string:"+connectionString
    conn = SqlConnection(connectionString)
    cmd = conn.CreateCommand()
    cmd.CommandText="SELECT name FROM master.dbo.sysdatabases ORDER BY name"
    reader = cmd.ExecuteReader()
    while reader.Read() :
        if ( not ignoreDatabases.Contains( reader.GetString(0) )):

    print databases

    for database in databases:
        cmd = conn.CreateCommand()
        cmd.CommandText = "use ${database};SELECT name FROM sysobjects WHERE type = 'P' AND category = 0 ORDER BY name"
        reader = cmd.ExecuteReader()
        while reader.Read() :

        print "${database}: ${spNames}"
        for spName in spNames:
            cmd = conn.CreateCommand()
            cmd.CommandText = "use ${database}; SELECT text FROM syscomments WHERE id=(SELECT id FROM sysobjects WHERE name='${spName}') ORDER BY colid"
            reader = cmd.ExecuteReader()
            outputf = File.CreateText( Path.Combine(database, "${spName}.sql") )
            while reader.Read():

powered by performancing firefox

Maybe we like Firefox because it is less fragile

Maybe we like Firefox because it cannot be screwed up as easily as Internet Explorer.

Somehow, ALL new IE windows would fail for me.  At first I thought the popup blocker was screwy, but then (weeks or months later) I realized that right clicking and picking open in a new window was also not working.  A quick use of google gave me the above link.

I don’t see how this same kind of thing could happen with Firefox.  Maybe Firefox will be the better browser for my Mom because it can’t as easily get hindered like IE did in this case.

I know that I’ll never have to register COM dlls to fix a Firefox bug.  My fix for IE was easy enough:
regsvr32 shdocvw.dll
regsvr32 actxprxy.dll

But my Mom would NEVER figure this out.

powered by performancing firefox

Save 10% storage on your Ubuntu installation

sudo apt-get remove –purge nautilus-cd-burner

Immediately save 10% of your used disk space.

Yes, I am storage cramped in this day and age of 750G hard disks.  Yes 250MB is not much.  I don’t care.  It also means I don’t have to download and install updates on all these packages.  I probably should have done a server install.

powered by performancing firefox

Code Better is having a book giveaway.

I like the look of the books, and I’ve referenced Code Better before.  So consider this my entry.

Palermo is blogging about NHibernate again.  It is great to see on Code Better.

I don’t know if Vista upgrade cupons are this soon or not, but I fear it may mean that I’ll want a new computer sooner rather than later.  Of course, I’d be converting the computer to run Ubuntu Linux and run the Windows in a VM.

I finally upgrade my disk in my old computer.   I still don’t know how I was living with a 15G / partition.  It was rough.  I haven’t done such an upgrade in a number of years.  I’m not sure, but I think it was smoother.  I think udev does some magic or something.  I rsynced my / to /newdisk and changed my fstab on the new disk.  fstab maintenance is MUCH smoother using UUIDs and LABELs rather than devices.  In my case I also rearanged cards on my PCI bus so that I could install grub on the SATA drive.  Grub didn’t like the 3ware card, so I’ve been using lilo for the past few years.  I was expecting some problems because sdc was to become sda, but DUH, the module load order didn’t change in my initrd, so sdc did not become sda and it would not have mattered anyway thanks to UUIDs in fstab.  The speed of the 160G SATA disk is so much more than the old 30G disk that it is almost like having a new computer.

powered by performancing firefox

No Silver Bullet Revisted

I found this “No Silver Bullet Revisted” link from Kevin Dangoor’s blog.

So what do you think of this revisitation?  I think it is poppycock.

He says “Today everyone is accustomed to buying software the way we buy burgers. We’re accustomed to acquiring the right to use software bundled with the bits.”  But this isn’t the way most software is bought.  Software today comes with that highly restrictive EULA which says that you can only do with this software, the things that we say you can.

Mr. Cox then goes on to suggest a heirarchy of charge-for services which filter up to usable applications.  My problem is that I cannot fathom what kinds of services these are.  And with all the wonderful open source software and free services available today, what services could be sold?  Now I’m aware that this type of activity is already happening in some niche markets, but as these niche markets become more mainstream and less niche, a “free” version enters.  e.g.  we now have free versions of photo hosting from flickr and picasa web.

I think that the past 11 years have showed that the industry has gone in a different direction than Mr. Cox envisioned.  I think this shows that the fundaments of Frederick P. Brooks, Jr.’s “No Silver Bullet” hold true.

Thanks for the link Kevin.  I enjoyed the reading.

powered by performancing firefox

Internet Explorer is truly evil.

I avoid web development.  It is just much more of a pain in the rear end
than it should be.  When I do web development, I test in Firefox.  I
write valid XHTML and valid CSS.  When I have to get something to work in
Internet Explorer, I curse.

So for future reference:


error: invalid character

can happen when one of the scripts which you reference does not

<script src=”scriptaculous.js” type=”text/javascript”>

oops, scriptaculous.js doesn’t exist.  Thank you Microsoft for writing
such excellent and accurate error messages.  The quality of this software
continues to astound me.


Windsor featured on CodeBetter


It is about time that someone other than a Castle Project contributor bloged about Windsor!  David Hayden over at writes about Windsor.

I can’t think of very many applications that shouldn’t be written using Windsor, and I can think of scarcely few more which should not take advantage of Binsor.  The Meticulous Geek even says “I never want to configure my container with XML again.”

Yes, I realized I just linked Ayende again.  He blushed at my last post where I summarized what I thought were the best Active Record and NHibernate related posts of the past 8 months.  It was difficult to stay on topic.  There were many other great posts, but many were about other things.