Books for sale

I’m selling a couple of big boxes of technical books over the coming months. If you’re looking to pick up some well kept books on object-oriented programming, design or project management, please have a look. storefront for Hyperoceanic

Is Groove skipping your files during synchronization?

Groove support forums user AdamK might have found the reason why Groove sometimes stops synchronizing files in shared folders  – a hidden “Temporary” setting for files on your hard drive. When Groove sees this setting, it decides to skip the file, but the error message displayed does not make it clear why the file is being skipped.

Right now, Adam doesn’t know what causes the files to be marked Temporary, but he’s found a commercial utility that will reset his files, and more. Snag is, it costs $24.99, which you might not want to pay- especially if you’re planning on migrating away from Groove anyhow.

Licensed Bambuco users can email me for a script that will turn off this setting for you automatically, free of charge.

Bambuco available (again) to qualified customers

I’ve spent some recently on rebuilding Bambuco, the scripting engine for Groove that allows organisations to easily move information into and out of Groove.

If you are evaluating your investment in Groove and are looking for options for migrating your data out of Groove, we are probably the strongest-placed organisation for you to talk to. We could, for example help you

  • move your documents out of a Groove files tool into a SharePoint Document Library, or into a corporate document repository, or even just a network share
  • Copy your data from Groove Forms into a database or SharePoint List,
  • Extract your list of Contacts and import them into Outlook.

More details here:

Unmet Promises and Unwanted Complexity

I’ve been mulling over the my use of use of a third-party libraries, both long term and on my last project. On the former, a core library I use has made a disastrous UI decision that needs fixing before I can release the next version of Toucan Reporter. On the latter, the client had pre-selected a well known, mature and comprehensive looking component library that they wanted to use for both web and Winforms applications. The demo applications make it look easy to develop fantastic looking line of business applications.And its this library I want to talk about today.

It sucks.  Here’s why:

1: Unmet promises. In several areas of the product, there are features that just plain don’t work in the real world. In particular, there’s a designer for quickly laying out Winforms pages. In this designer is the ability to add tabs. If you are going to  use this feature, the chances are that you’re going to use it to build a form with a good number of controls on it. Problem is, that as the number of controls increases, performance goes down rapidly. If you have more than a couple of dozen fields, then you’re looking at a wait of tens of seconds as you move controls around. Part of the problem is the management of undo/redo operations. Rather than use the one built into Visual Studio, they’ve created their own, and the performance is terrible. You can turn off undo/redo, which improves things a bit, but its a hack.  At some point you’ll be even more committed to this approach and you’ll be having the same performance problems. At run time, performance is great, by the way.

2: Unwanted Complexity. Controls are objects. Objects have properties, and in the .net world, there’s a bunch of standard controls with consistent properties, provided as the .net framework.  The implementers of this particular library, however, used different names or different properties or different enumerations throughout their library. A stand out feature was the use of a property called ‘Properties’ that happened to have most of the useful properties for the control in it. Almost every time you needed to set something in the designer, you have to go through an unwanted step of opening up this Properties property to see the property you wanted.

3: Locked in or Locked out? The implication of having an unnecessarily complex component library is that the hapless line of business developer using the package (me) is simultaneously locked in and locked out: Locked in to the bad decision  to use this library, and simultaneously locked out of the chance to make meaningful changes to the libraries behaviour. Its impossible to re-do the UI of the application to exclude the complex UI library, and at the same time its almost impossible (given the deadline for the project) to fix the library in places where the behaviour on offer differs from what is required. You’re further locked out of using other component libraries as they won’t share the same styles, making your app look a mess.

Summary: Component libraries offering increased productivity for line of business applications should never deviate from the norms for that environment. Software should be written such that any developer who knows the base technology should be able become effective with the library as soon as possible.

Resisting Temptation

The problem domain for my next pet project is not tiny, but it is fairly small – I could probably fit an object model / database design diagram on a single sheet of A4 without cramming it. However, there’s scope for lots of additional features, or expanding it in new, different directions.


Setting up Umbraco 4.0 on SoftSysHosting reseller accounts

Here are some instructions for installing Umbraco 4.0 on’s reseller account.  It looks like there’s a lot to do, but in fact its fairly easy.


  1. A reseller account at
  2. The welcome email they sent you with your sql server, ftp and web details in it
  3. The Umbraco install files
  4. An FTP Program
  5. SQL Server Management Studio

Open up the Control Panel: Your welcome letter  has the IP address and your login credentials. If you’re new to DotNetPanel (the admin UI used by SoftSysHosting), its worth taking a few minutes to explore it. You’ll be spending time inside the User Spaces section which is where your reseller account lives. Within that you’ll be using the Domains, Web Sites, Databases and File Manager sections, so be sure to take a quick look at each of these before you begin.

Create a Domain: In the control panel, Create a Domain for your web site. This will create two domains – the one you just specified, and a preview one with a name like You will be using this preview URL a lot until you set up the dns pointers for your site.

Add a web site: Add a web site that is going to live in the domain. You can see the ASP.NET properties under the Extensions tab. You don’t want the ASP.NET 2 Integrated Pipeline option with Umbraco 4.0. Later versions of Umbraco may support this though.

Request Full Trust from tech support. Umbraco requires Full Permissions to run, so create a support ticket requesting full permissions for the web site you just created. I’ve found tech support at SoftSys to be very quick at dealing with this so far. Remember to put your web site name at the bottom of the new ticket page. While you are waiting, you can do the other steps, below.

Delete default.aspx: When your site was created, the standard IIS7 Wilkommen/Welcome/Bienvue defau;t.aspx page was created in the wwwroot folder. Use FileManager to delete it.

Upload Umbraco! Use your favourite ftp app to upload the Umbraco files from build to the wwwroot folder within the web site you’ve created. The ftp details are in your welcome letter. You may be tempted to look at your web site at this point – you’ll get a 4o4 unless you’ve already pointed your dns at the web site.

Set folder permissions. The account needs write permission on several folders, listed below


Normally I’d use my ftp program to set these, but the CHMOD command is not available so you have to do it manually through the File Manager screen – find each folder and click the grey padlock symbol next to the folder name. Give read/write permission to both the web site and to the NETWORK SERVICE accounts. Make sure the “Replace permissions on all child objects” check box is checked as well.

Create a database. Give it a name that you”ll remember. You won’t be able to use Umbraco since there is likely to be an existing database with that name on the server.

Create a database user. Once you’ve created your database, create a user to go with it. Be sure you set the default database for this user, and give it access to the database you created above.

For one site, I had a problem creating the database. I cannot remember the exact symptom that maqde me think to check but I think there was an error message during step 2 of the Umbraco Install Wizard. I had to manually add the db_owner schema to my new user using SQL Server Management Studio. If you need to do this, open the database using SQL Server Management Studio, click Security, find you user and click the db_owner schema i the list of Schemas owned by this user.

Set up a web site domain pointer. Until you set up your dns pointers to point to your new web site, you’ll need to use a domain pointer – the preview URL created automatically for you when you created the domain. Go into Web Sites and click your new web site.  You’ll see that there are no web site pointers. Click Add and choose the preview one created when you created your domain.

Wait for the tech support folks to mail you telling you they’ve given your website Full Trust.

Run the Umbraco installer. Go to the preview site (this guy, remember?

Install the Umbraco database At step 2 of the install wizard, provide your database credentials. The server IP and port is in your welcome letter.

Plain sailing! Hopefully the Umbraco install wizard will confirm that the folder permissions you set are good. Give Follow the wizard through, giving they admin account a decent name. If you add Runway, you’ll see a homepage when you browse your site.

Notes on using GMail to send mail

A couple of observations about using GMail to send mail messages automatically.

Background: I’m updating the automatic licensing system that supports our InfoPatterns products for Groove. When a user gets a license from the commerce system, they need to get an activation code that ties that license to that user. They fill in a form in the application and that talks to a web service. The web service sends them an email with an activation code in it. We use Google Mail for the Infopatterns email accounts and have the domain as the primary domain with as a domain alias.

1: When debugging, make sure you use a live email address to send to. I was sending mail to ‘’ when that user didn’t exist. You’ll get problems if you do this, obviously, but you won’t be able to tell if they are problems connecting, or problems sending.

2: If you’ve got more than one domain configured like we do, make sure your sender email address is for the primary domain. You won’t be able to log into the server otherwise.

More grist to the code mill: Elmah

Wet looking for a decent error logging system. found one:

WebForms or MVC for my next project?

I’ve a new project lined up for the second week of March, and I’m seriously considering MVC for the application code.

Some food for thought: Choosing Between WebForms and MVC

Ain’t no call for Castaneda in my front-line library

With apologies to the Alabama 3, here’s mine. I use these applications and software libraries on most projects.


Visual Studio 2008 Professional. I’ve played with the free offerings, and used Eclipse with the InterAkt JavaScript but now that VS2008 support JavaScript well enough for my needs, this is where I spend most of my coding hours.

NUnit. I’ve been using NUnit for a long time. The new 2.5 beta includes a couple of lovely enhancements – the ability to parameterize tests using attributes, and a new method in the Assert class. Example:

[TestCase (2,2)]
public void SomeTest (int a, int b) {
string something = (a * b).ToString();
Assert.That(something, Is.Not.Null);

Subversion with TortoiseSVN for source code control. Please, please don’t use Visual Source Safe.


Active Record saves a ton of time. Take care to get familiar with lazy loading and with how you can use Expressions to build complex queries. Also please do use ActiveWriter as your modelling tool for Active Record. I’m using these tools on a project right now, and I’m really pleased with the productivity we’ve gained.  I recommended them for a project earlier this year, but it was viewed as being a little too scary by the person leading development there. I reckon it would have saved maybe two man-months worth of effort on a six month project.

Web Development

JQuery. The pre-eminent client-side library.

ASP.NET MVC. Could this be the answer to over-complex, convoluted ASP.NET code? I’m beginning to think so.

Content Management

Umbraco. The gold standard in open-source content management. I’ve noticed a depressing tendency to overlook the value of content management systems in developing web applications. Using Umbraco as your main development framwework with web controls seems like a sweet spot.

Project Management

Its got to be a pragmatic approach based on Agile principles. Right now, AcuNote is my scrum tool of choice.


Executable compressor: NETZ – a great way of packing all your .NET assemblies into a single executable.

Installer: If I don’t need a corporate .msi instaler, then Inno Setup is the clear winner, with ISTool for building the install script.

Online resources: StackOverflow. An old idea (I remember asking questions and answering others questons on Compuserve in the late 80s) done remarkably well.