April 2008 - Posts

WiX - Painful at best
Tuesday, April 29, 2008 4:35 PM

So I finally got WiX to create an installer for me after many hours of poor documentation, obscure errors and bizarre angle bracket syntax.

The latest error I have really annoyed me as there was no obvious indication what the error was and how to resolve it, which is really the purpose of this post. To share this so that others may benefit, and because my memory is so poor, I need to record it for later use :-)

Basically I got this:

candle.exe : error CNDL0001: Cannot set column 'Attributes' with value 239 because it is greater than the maximum allowed value for this column, 127.

Nice. I wont bore you with the vulgarities that I produced trying to decipher this message, but it ended up being the fact that I had put a <sql:sqlDatabase> server definition was inside a feature element rather than outside on its own.

So I had put this:

<sql:sqlDatabase Id="SqlDatabase" Server="[DATABASESERVERNAME]" Database="[DATABASENAME]" />

inside a <Component> tag.

Placing the <sql:sqlDatabase> tag back outside the <Component> tag fixed this issue.

Hope it saves others similar frustration.

Remix in Oz
Monday, April 28, 2008 5:05 PM

Remix, is heading downunder and registrations are now open. You can register here.This event is especially cool for the many people who did not get a chance to attend the actual Mix event in the United States (which is many of us).

Dates and locations are:

   May 20
   Powerhouse Museum
   Harris Street, Ultimo
   May 22
   Melbourne Town Hall
   Cnr Swanston & Collins
   Street, Melbourne

There will be heaps of quality technical content from a bunch of local technical rockstars, and I will be attending and participating as an expert in one of the "Ask the Experts" areas.

Look forward to seeing you there!

Oh, by the way, each attendee receives a copy of Expression Studio 2 (rrp$1040) for free when they register!

The Next Web Now

Sunday, April 20, 2008 6:55 PM

So a little while ago, I mentioned that I did a WCF beta exam for a Microsoft Certified Technical Specialist. Its been a long time since I did that and I had kinda forgotten about it, but today I received the good news that I am now a MCTS in WCF!


I really thought I had bombed that exam due to the very little prep that I had done, but fortunately that is not the case.

I would love to hear from anybody else (particularly any fellow australians) who have also done the beta exam and received their congratulatory email.

by Glav | 8 comment(s)
Filed under: , ,
Reducing page load times with UpdatePanels and timers
Monday, April 7, 2008 11:18 PM

I have demo'ed this technique before and talked about it various times, but I recently used this on another engagement which really helped alleviate some of the initial page load times and size.

In my scenario, we had a page utilising the AJAX Control toolkit and which utilised the excellent Tab control to contain a number of separate display elements.


The page itself had a number of other toolkit control on it, and quite a few GridView controls (notorious for excessive viewstate and page bloat). Page size and speed was paramount on this project so I wanted to be able to bring up the page as quick as possible -BUT- we had to retain all the functionality we had introduced.

The page weighed in at approximately 210kb. Utilising the delayed load technique I was able to reduce that to approx. 130Kb and retain every bit of functionality so far.

The theory is this:

  • The initial tab has the controls defined as normal.
  • Each subsequent tab content is encased in an Panel with the visibility set to false (to prevent its content from being rendered)
  • The invisible panel is also encased in an UpdatePanel.
  • Each UpdatePanel has an async trigger that points to an <Asp:Timer control.
  • Initial the timer control is not enabled.
  • When the page loads, it activates the first timer control.
  • The timer control tick event, sets the invisible panel to visible, disables itself, then enables the next timer.
  • Next timer sets its invisible panel to visible=true, disables itself, and enables the next timer.
  • Process continues.

I have provided a demonstration of this via videocast here with full source code here.

In this trivial example, there is one page with all tabs being loaded as normal, and another using the delay load technique. The standard page has a size of around 50Kb. The page using delay load has an initial load size of approximately 25kb which is half the size.

Obviously, the bigger pages get, you can see how you might be able to have a rather weighty page that initially only loads a small subset of the page, then uses delay load to load the other sections.

I have found this technique valuable, and it can easily be changed to suit your needs. Hope you find it of value too.

More Posts

This Blog