Standing on the shoulders of giants. RSS 2.0
# Friday, September 15, 2006

Test post from word…

Word supports the MetaWebLog API in the latest release, which one of my co-workers got late last night (thanks Stef).

Friday, September 15, 2006 2:14:54 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback
dasBlog | Office 2007
# Tuesday, August 22, 2006

"Always-fresh" releases of dasBlog are available from These builds are made from the subversion head hourly, so these may not be the most stable, but are the most recent.

Changelog for dasBlog 1.9.

If you want to make a contribution check out this article by Scott Hanselman, about contributing a patch to dasBlog.

Tuesday, August 22, 2006 1:45:52 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [1] - Trackback
# Saturday, August 19, 2006

Frank just started his new blog and his first post details how to work with control adapters in SPS2007. Very good stuff.

Saturday, August 19, 2006 5:18:43 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback
Development | Sharepoint
# Thursday, August 17, 2006

It seems VS 2003 has been out forever, but sp1 has been released for download yesterday. I never experieced any real problems with it, but it's great to see the DDCPX team is still working on improving its stability.

Download here: VS 2003 SP1 and release notes

List of Fixes: KB 918007

Thursday, August 17, 2006 2:48:31 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback
# Wednesday, August 16, 2006

Although there are several ways in ASP.Net to influence the way DateTimes are displayed some methods are better than others and some are evil.

The easiest way to display DateTime and have some influence on them, is to specify the culture and the uiCulture in the globalization tag in the web.config. This is the preferred way if you can use the default date/time formats in that culture.


<%=DateTime.Now %> is rendered as "16-8-2006 10:14:49" with this globalization tag and rendered as "8/16/2006 10:18:37" with the culture and uiCulture set to en-US.

If you want a little more control, or when the default date/time formats don't offer enough flexibility you can specify a format in the ToString method of the DateTime object. This will still use the culture specified in the web.config for the (abbreviated) names of the months. The downside to this method is that you have to remember to set the correct format string, every time you want to display a date/time.


<%=DateTime.Now.ToString( "dd MMM \\'yy" )%> is rendered as "16 août '06" with the culture set to fr-FR ( the \\ are required for escaping the ' ).  

 When you want to offer your users a localized version of your web-application, you can't rely on the globalization settings in the web.config, instead you'll have to either set the Culture and UICulture of the current executing thread or use one of the ToString overrides that accepts an IFormatProvider. When you only specify an IFormatProvider, the default (or G) format is used to render the string and although you can override the default format, that is generally considered evil.


<%=DateTime.Now.ToString( new System.Globalization.CultureInfo("es-ES")) %> is rendered as "16/08/2006 11:43:11", while <%=DateTime.Now.ToString("dd MMM \\'yy", new System.Globalization.CultureInfo("es-ES")) %> is rendered as "16 ago '06".

These methods were the only methods that were available on version 1.x of the .Net framework. In .Net 2.0 you have the ability to define a custom culture using the CultureAndRegionInfoBuilder class. After creating a new culture, this new culture can be installed on a computer and used by any application on that computer. This allows all (web-)applications on that computer to use the same formatting for dates, and numbers, casing etc. This way you can change the default format for string rendering in a less evil way.


First setup the custom culture using a console application, since this requires administrator rights.

class Program{ 

static void Main( string[] args ) {

if (args.Length == 0 || args[0].EndsWith("i", StringComparison.OrdinalIgnoreCase)) {

Console.WriteLine("Registered new region \"x-en-US-custom\".");
} else if (args[0].EndsWith("u", StringComparison.OrdinalIgnoreCase)) {
Console.WriteLine("Unregistered new region \"x-en-US-custom\".");
} else {
Console.WriteLine("use /i to register and /u for unregister.");

Console.WriteLine("Press enter.");

static void RegisterNewRegion() {

// instantiate a new CultureAndRegionInfoBuilder object named x-en-US-demo
CultureAndRegionInfoBuilder cib = new CultureAndRegionInfoBuilder("x-en-US-custom", CultureAndRegionModifiers.None);
//load the culture data from the default en-US culture and region
cib.LoadDataFromCultureInfo(new CultureInfo("en-US"));
cib.LoadDataFromRegionInfo(new RegionInfo("US"));
// set the custom date/time format
cib.GregorianDateTimeFormat.ShortDatePattern = "dd-MM-yy";
cib.GregorianDateTimeFormat.LongDatePattern = "dd MMM \\'yy";
cib.GregorianDateTimeFormat.ShortTimePattern = "HH:mm";
cib.GregorianDateTimeFormat.LongTimePattern = "HH:mm";

// register the culture

static void UnRegisterNewRegion() {



Now you can use your custom culture in any web-application, like the previous examples.

<%=DateTime.Now %> is rendered as "16-8-2006 10:14:49" with this globalization tag

Another use would be for writing dates to a log-file, when you need to sort or parse them in future.

Thanks to michkap from Sorting It All Out for the tip on CultureAndRegionInfoBuilder and the post that inspired this post.

Wednesday, August 16, 2006 4:59:42 AM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback
# Sunday, August 13, 2006

 Microsoft released a beta of Live writer [0] this weekend and says it works with dasBlog, so this is a test to see if it actually does.

[0] Writer zone


Live writer screenshot

Sunday, August 13, 2006 10:56:31 PM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback
# Wednesday, August 02, 2006

They have been around for a bit, hiding as delegates, but they're getting some much deserved attention from Joel [0] and Raymond [1].

Joel is critical about the implementation in C#; while Raymond Chen is starting a series about their implementation and subtle errors. I'm not sure I can totally agree with Joel, since I like the obviousness (and typesafe-ness) of defining delegates and calling them as methods, while the compiler handles the plumbing.

[0] Can your programming language do this?
[1] The implementation of anonymous methods in C# and its consequences (part 1)

[update 2006-08-05]

Ramond added 2 new entries to his anonymous methods series:

The implementation of anonymous methods in C# and its consequences (part 2)
The implementation of anonymous methods in C# and its consequences (part 3)

Wednesday, August 02, 2006 1:59:09 PM (Pacific Daylight Time, UTC-07:00)  #    Comments [0] - Trackback
# Thursday, January 12, 2006

Well, maybe...


public class GenericComparer : IComparer {

public GenericComparer( CompareDelegate doCompare ){

if( doCompare == null ){

throw new ArgumentNullException("doCompare");


this.doCompare = doCompare;


public int Compare( object x, object y ){

if( x == null ){

if( y == null ){

return 0;


return -1;


if( y == null ){

return 1;


return doCompare(x,y);


private CompareDelegate doCompare;


public delegate int CompareDelegate( object x, object y );

My colleague Branimir did a little experimentation and found this implementation is similar in performance to a 'regular' methodcall when sorting around 10.000 items. (30.65 KB)
Thursday, January 12, 2006 4:42:19 AM (Pacific Standard Time, UTC-08:00)  #    Comments [0] - Trackback
Codesnippet | Development
© Copyright 2015
Paul van Brenk
Sign In
newtelligence dasBlog 2.3.12105.0
All Content © 2015, Paul van Brenk
DasBlog theme 'Business' created by Christoph De Baene (delarou)