How to set SharePoint page title programmatically

I’ve spent some time today trying to figure out how to set the title of a SharePoint page from my own code. As blogger Michael Becker rightly points out, you can’t simply set Page.Title.

The correct solution, as provided by Michael, is illustrated in this example C# code:

// Get a reference to the appropriate Content Placeholder
ContentPlaceHolder contentPlaceHolder = (ContentPlaceHolder) 
                       Page.Master.FindControl("PlaceHolderPageTitle");

// Clear out anything that SharePoint might have put in it already
contentPlaceHolder.Controls.Clear();

// Put your content in
LiteralControl literalControl = new LiteralControl();
literalControl.Text = "Your text goes here";
contentPlaceHolder.Controls.Add(literalControl);

Happily this even works when you “cheat” by hosting an ASP.NET user control within a SmartPart, as opposed to creating a bona fide Web Part.

Standalone installer for Google Chrome 4

Google offer a standalone installer for the Windows build of Google Chrome, as opposed to the standard download which is actually just a small stub application that connects to Google’s servers to download and install the actual browser.

The offline installer is handy if you have a number of machines on which to install or update Chrome, but unfortunately Google haven’t updated it recently, so you end up with version 3.0.195.38 rather than the latest all-singing, all-dancing, extension-supporting version 4.0.249.89.

You can of course update to 4.0.249.89 from the About screen, but this defeats the purpose of using the standalone installer in the first place, and you may be unlucky enough to be on a corporate network which breaks the in-browser upgrade functionality.

By using Fiddler2 to monitor the activity of the stub installer, I was able to establish that it connects to the following google.com URL to download the latest build:

http://cache.pack.google.com/edgedl/chrome/install/249.89/chrome_installer.exe

This is your standalone/offline installer, which can be used to install new instances of Chrome or upgrade existing ones (in which case the installer will upgrade your browser silently).

Google release new builds fairly frequently, so keep an eye on the Google Chrome Releases blog and substitute 249.89 with the build number of the latest stable (or development, if you’re feeling brave) build, e.g. http://cache.pack.google.com/edgedl/chrome/install/322.2/chrome_installer.exe for version 5.0.322.2.

Ninite: download and install your favourite apps

Ninite is a free (for personal use) service which allows you to download and install several popular pieces of Windows software in bulk from a single installer – great when building a new PC or reinstalling an OS on an existing machine.

When you visit the site, you are presented with a list of well-known free and trial applications. Just select the ones you’re interested in, click Download and you’re presented with a small (~200K) stub installer which, when launched, downloads and installs each chosen application without user intervention.

I’ve just tried it on a new machine I’m setting up, and although it takes a while to download and install everything (I had selected quite a few apps), this part of the process is completely automated so you’re free to do something else while you wait.

Deploy ASP.NET web user controls on SharePoint using SmartPart

Today I’ve been playing with Return of SmartPart 1.3,  a shim which allows you to create SharePoint 2007 web parts using Web User Controls (ASCX files) created by Visual Studio/Visual Web Developer.

This is probably the least painful way for C#/VB.NET developers to delve into web part building without having to worry too much about the intricacies of the SharePoint platform.

Complete with setup wizard, comprehensive user guide and sample user controls, it’s a snap to get running, although you will need access to your SharePoint server both to install the SmartPart and any custom user controls. It also optionally supports AJAX controls, after installing Microsoft’s ASP.NET AJAX extensions.

There’s no need to use strong naming or even compile your controls – just drop the .ascx (and .ascx.cs/.vb, if necessary) files into your usercontrols directory and you’re good to go.

Google’s clever image preloading technique

I noticed today that the Google logo shown at the top of all search results is actually a composite image, sliced up through clever use of CSS positioning:

Google nav logo

At first, I thought of this as nothing more than a neat trick, but then I began to think about why Google might have decided to use this technique to their advantage.

Whenever a client browser requests a page, it will also make a request for each of the images (and other media) embedded into the page. Once an image has been displayed once, it is usually cached client-side to conserve bandwidth and improve performance for subsequent loads. For example, the RSS logo at the top of my blog will be downloaded from my server on your first visit, but as you move through the site, future references to the file will be fulfilled from your browser’s cache.

Google isn’t particularly image-heavy, but a typical results page could contain five or more ‘sprites’ or graphical elements. By squeezing them into a single file, user’s Web browsers need only make two requests (one for the page itself and one for the composite image) instead of six or more.

This might sound trivial, but considering that Google serve billions of result pages to millions of different visitors every day, the cumulative saving in bandwidth and server resources is likely to add up to quite a figure.

If you operate a moderately high-traffic site, it might be worth considering using similar tactics. The only other site that I’ve noticed that has used CSS image slicing in this way is the now-defunct Cdiscount UK site, for its pricing images.

How to fix “Google Update installation failed with error 0x8004071c”

I just tried to install Google Chrome on my Windows 7 machine and was faced with this obscure error message.

I found the answer on the Chrome support site – it’s caused by the following registry key:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\
CurrentVersion\Setup\State\ImageState

Mine was set to IMAGE_STATE_UNDEPLOYABLE. Removing this value enabled the Google Chrome installer to proceed as normal.

Geographical numbers for the AA

Buried in my AA (Automobile Association, that is…) renewal documentation, I spotted that they’ve provided land line telephone numbers as an alternative to the usual non-geographical 0800/0870 numbers, which cost extra from most mobile phones:

  • For breakdowns, the number is 0121 275 3746.
  • For membership enquiries, the number is 0161 332 1789.

Sites such as Say No To 0870 regularly publish user-submitted geographic numbers for many companies, but kudos to the AA for providing official numbers without having to jump through such hoops. Less kudos to them for taking 2 hours to tow my broken-down car, instead of the promised 45 minutes, but that’s another story.