First time here? You are looking at the most recent posts. You may also want to check out older archives or the tag cloud. Please leave a comment, ask a question and consider subscribing to the latest posts via RSS. Thank you for visiting! (hide this)

February 2007 Blog Posts

Again on iPhone

Just found (kudos to Luigi, a ex-colleague in Italy) an amazing video demo of the capabilities and interaction of the new iPhone.

A few weeks ago I said then my next cell phone would have been a Windows Mobile 6 device. Well, after watching that video, I think I might wait till the iPhone adds 3G connectivity to enter the European market.

PS: If your reader doesn't support embedded video, click here to watch the video

Going dinner with NET 3.0

The Microsoft Platform Evangelism team released a very nice technology demo product to show all the new cool technologies Microsoft just released or is going to release during that year.

The demo utilizes several technologies including: IIS7, ASP.NET Ajax Extensions, Linq, Windows Communication Foundation, Windows Workflow Foundation, Windows Presentation Foundation, Windows Powershell, and the .NET Compact Framework.

They are developing the demo on CodePlex, so you can download the code directly from there.

The also build a web site, that will contain a working demo, and will host videos showing the features of the "product". At the moment of writing there is just one video, that explains the end-user experience, from when the user browses an Ajax based website, register and buy using a CardSpace identity, and then tracks his order using a Vista Gadget.

Looking forward to see the second episode.

Fine tune your properties with accessors

How many times did you need a property to be read-only for the users of your API, but also you needed that property to be populated by your own data access layer?

It happened to me many times, and I usually solved that problem accessing directly the underlying field changing its visibility from private to internal or protected.

But what if you want to access everything as a property and don't want to hook directly to the field?
You need to be able to specify for the setter a different visibility for the getter.

Here is how:

        private int _id;

        public int Id
            get { return _id; }
            internal set {  _id = value; }

That's a feature of C# I like a lot, and that allows a lot of flexibility.

Just have to remember that the setter visibility modifier must be more restricted than the general one.

UPDATE: This feature is available only with .NET 2.0 (Thank Bill for pointing it out)

The Italian government just released the new site to present Italy to the World:

It was developed by IBM, at the cost of 45.000.000 euro (90.000.000 NZ$) of public money, and they took 3 years to build it. As someone said, the most expensive website ever built in the world.

Being a public utility website it's amazing to see that it is not accessible (as WAI) but you need to download a few software and browse to specific sections of the site. Also, if you have a look at the code, you don't see DIVs, but just a lot of giant TABLEs. It's all Flash based...

It took 5 minutes to download the homepage from NZ. Ok, probably it due to the peak of the launch of the site, but did IBM do some traffic estimations?

And as cherry on the cake, the logo, the one you see at the top of my post, cost 100.000€. Probably a drunk developer could have done a better work than the design and brand team that designed that logo.

Synchronize assembly version with CC.NET build number with NAnt

In the last month I started working again a lot on CruiseControl and build processes.

Another quick tip I think it's interesting to share is how to have the version number of the code you are building synchronized with the build number generated by CruiseControl.NET.

As everything related to build processes inside CC.NET this is achieved using a NAnt task: asminfo.

Step 1 - CC.NET Labeler

The first thing you have to setup is the labeler inside the ccnet.config file:

<labeller type="defaultlabeller">

This will instruct CC.NET to prefix the build label with the major.minor.revision of your product.

Step 2 - Setup solution AsseblyInfo.cs file

Next step is to add a VersionInfo.Designer.cs as solution file and link it in all the project of your solution: now you will have the same version in all the assembly produced by the build.

using System;
using System.Reflection;

[assembly: AssemblyVersionAttribute("")]

This file will be overridden on the build server with the right version number, but when developer compile on their local machine, then the build number will always be 0, so it will be easy to identify "official" builds from the local ones.

Step 3 - NAnt build script

Last step, add the following task inside the NAnt build script

<asminfo output="VersionInfo.Designer.cs" language="CSharp">
        <import namespace="System" />
        <import namespace="System.Reflection" />
        <attribute type="AssemblyVersionAttribute" value="${CCNetLabel}" />

Change config file with NAnt

A quite common task during the build process of an application is to change the configuration file with settings specific to test in on the testing environment or to release the product to customers.

NAnt has task that allow this: it can change the value of any attribute inside any XML file. You just need to be fluent with XPath in order to get the correct value to change.

<xmlpoke file="${testing.dir}\web.config"
     xpath="/configuration/appSettings/add[@key = 'ServerId']/@value"

This snippet include some example values: just change ServerId to setting key you want to change and CODECLIMBER to your setting's value.

And since the xmlpoke task can access anything with XPath, here is another example: change the tcp port for a remoting server:

<xmlpoke file="${MailPrimer.controlpanel.dir.testing}\web.config"
        application/channels/channel[@ref = 'tcp']/@port"

This solution can be improved reading new setting's values from an external XML file (using the xmlpeek task) instead of hardcoding them inside the build script, but the core of the solution is the xmlpoke NAnt task.

Offline mode: do we really need it?

I really don't understand the reason of all the excitement behind the offline-mode of Firefox 3.0.

The developer working on that feature, Chris Double (he is a NZ guy), just released a proof of concept of Zimba running in offline in FF 3.0.

And everybody in the JS/Ajax world is getting excited about that.

A few days ago I read a very nice post (nice as usual) by Jeff "Coding Horror" Atwood: Does Offline Mode Still Matter?

I've different feelings about it: maybe some application need the offline mode, imagine downloading all your RSS feed to a PDA, and then read them when going to work on train or subway, but is this a real offline mode, or just downloading things and reading them from the disk?

If you are building an application that has to interact with a central database, do you really need to build a winform application with an offline mode that let you add/change/delete things while disconnected and the synchronize all your work with the central server when you reconnect?

Are these offline mode features really needed by your users? Or are the users accessing the application only from their offices with a broadband connection? I think that 90% of this kind of application, now that we all the fancy user interaction goodies that help build a better experience, can be safely developed as web application that doesn't need to go offline.

Probably there are some specific applications for specific scenarios that could need that feature, but does the benefits you have are worth the overhead of designing a local storage, designing a locking strategy for data, synchronization, software installation and update?

What are your opinion about that? Does your application have an offline mode?

Build WebAppliction Projects with MSBuild

You installed the webapplication project update or installed VS2005 SP1, and you developed your web application using with that kind of project.

Now you want to build it on a build server using MSBuild. If you didn't install VS2005 with that specific update also the build machine, the first time you try to run it you get the following error:

"The imported project "C:\Program Files\MSBuild\Microsoft\VisualStudio\v8.0\WebApplications\Microsoft.WebApplication.targets" was not found"

The solution for that problem is very easy:

just copy from you machine the Microsoft.WebApplication.targets file and put it inside "C:\Program Files\MSBuild\Microsoft\VisualStudio\v8.0\WebApplications\". Probably you have to create also all the folders in that path.

It happens to me all the time I set up a new build server, and always forget about it smile_embaressed

Vista UAC vs Mac

Apple released a bunch of new ads. (well, probably some time ago)

The best is the one about the new User Access Control of Vista:

If you are reading this with a newsreader that doesn't support video embedding, here is the link:


Blog statistics with FeedBurner and Subtext

A month ago FeedBurner unleashed a new very cool feature: Blog Statistics.

They integrated into their RSS feed stats also the tracking engine they got when they acquired Blogbeat.

For a complete overview have a look at their announcement: A 360 Degree View of Audience Engagement.

Now that performancing metrics is an opensource project (and not a service anymore) and measuremap doesn't have new features added since it has been acquired by Google one year ago, the only solution for specific blog stats is this service. I tried it, and it rocks!!!

How to add the tracking code to a Subtext skin?

You just need to add the FeedFlare to it. Once you add it, you also have stats being collected.

A month ago Keith Elder wrote an interesting post with a step-by-step guide on adding FeedFlare to Subtext.

For the FeedFlare you just need the JavaScript code inside the homepage, but for the stats tracking you have to change also the single post page.

Here is complete step-by-step guide:

Subscribe to FeedBurner

Well... just go to FeedBurner website, insert you blog URL, and start "burning" your site.

Configure Subtext to send RSS with FeedBurner

Follow the procedure as described on the subtext documentation wiki

Change the homepage template

You have to change the control yourskin/controls/Day.ascx adding, at the bottom of the entry body, the following code:

            DataBinder.Eval(Container.DataItem, "FullyQualifiedUrl") %>"
        type="text/javascript" charset="utf-8">

You have to replace the feedburnerId with your actual id

Change the single post template

Open the yourskin/Controls/ViewPost.ascx control and add, always at the bottom of the entry body, that code

            "http://bloghostname"+TitleUrl.NavigateUrl %>"
        type="text/javascript" charset="utf-8">

This is a bit of an hack, but the only solution that works (or at least that I could find). You have to replace both feedburnerId and bloghostname with the real ones.

Is an Open Source Project Successful?

InformationWeek has a nice article titled: How To Tell The Open Source Winners From The Losers

It's a long 6 printed pages article, not read it completely, but at page 2 there is nice chart with 9 points that an OpenSource project should have in order to be a winner.

Ayende also wrote a nice blog entry about it.

I'm trying to evaluate Subtext using that metrics (and giving points from 0 to 5):

  • A thriving community: we have just 4-5 core dev and a few contrib. But all the main contributors are very committed and a lot of discussion going on (4)
  • Disruptive goals: our only competitor in the .NET world is CS, and we are on a pretty different market, but we should "fight" against WordPress, Blogger: is world domination a good goal?  (4)
  • A benevolent dictator: we have Phil (5)
  • Transparency: well, mailing list is quite democratic (5)
  • Civility: not happening at the moment (4)
  • Documentation: our documentation is a bit shattered among developer blogs, official site, wiki, and user blog, but we have al lot of docs, maybe we need to organize it better (3)
  • Employed developers: if working from 8pm to 4am is considered full time, then we have them  (2)
  • A clear license: BSD isn’t clear enough? (5)
  • Commercial support: at the moment we don’t need them, since no commercial projects around, but quite responsive to requests (2)

So 34 out of 45… not bad, isn't it?

If you are a Subtext user, what do you think about this?

Community Server back on the right track

After raising a swarm of hornets with the new Community Server 2007 license model (and I was among that hornets, too) and all the feedback received on the official forum, Rob Howard has just announced some changes in the license.

Now there are 2 different scenarios:

  • non-commercial
  • commercial

For the non-commercial, they raised the limit of the free to 10 blogs, 15 forum, 10 photo galley, and added a "Personal Edition" which costs 99$ but is unlimited.

For the commercial license they changes the names of the editions and raised the limits to 25 and to 100 (for the Standard and for the Professional).


Communities that promote .NET (user groups, etc.) are eligible for free Professional Edition licenses.

That will not fit for the italian user group which has more then 500 hosted blogs, but probably will fit for most of other local user groups.

Now I feel better .

For more details on the new licesing model, have a look at the new official licensing guide

kick it on

Subtext 1.9.4 (Windward) released

Steve just posted on his blog the official announcement: Subtext v1.9.4 "Windward" Edition Released

My blog is running it since a few weeks with no issues, so, I think it's safe to upgrade it.

As I previously said, the most important feature, IMHO, is the Sitemap implementation made by David Vidmar, from Slovenia. For more information about that feature, and for instructions on how to set it up, I recommend his post: Subtext 1.9.4 - now with sitemap.
The final release have just one small difference: the sitemap is inside a "sitemap" folder instead of the root folder of the blog, so the final url will be http://blogUrl/sitemap/sitemap.ashx.

For all the other new feature are the release notes, and you can download the official 1.9.4 version (release 78) from Sourceforge.

Happy Blogging!!!

Climbing in Wellington

After one month in Wellington, yesterday I had my first climbing session: I took part in the "Baring Head Rock Hop" bouldering competition, 2nd competition of the NZAC National Bouldering Series.


No more free communities with Community Server

Telligent just released the new Licensing Guide for Community Server 2007.

The new Community Server 2007, new name for the CS v3.0, has a lot of new features. Above all there is a new dynamic theme engine named Chameleon, that makes the development of new skins more easy than with the previous version.

It should also allow non tech person to change the appearance of the site with a sort of WYSIWYG editor for themes.

But is post is not about the new features of CS 3.0, but is about the new licensing (here the complete PDF): basically the free license will enforce only 3 blog, 10 forums and 3 gallery per site

And this limit is in the commercial licenses, too: you can have 10 blogs with the Standard version or 40 with the Professional. Or you can buy upgrades at 100$ per 10 blogs.

What does it mean? The average non-profit group will not be able to have its online community for free.

This is a good news for Subtext, since it will become the only opensource application developed in .NET to allow the creation of multi-blog websites, but a bad news for the .NET community in general: basically with the free edition of CS2007 you will only be able to create a personal blog.

If you want to discuss more about that new licensing model you can do it on the official community server forum.

Find yourself

Lost? Find yourself


Lost-mania @ Wellington:

the second part of the third season just started in the USA...

My next PDA/mobile phone

I've an old HP iPAQ rx3715, it's cool, but now I want something that integrates with a mobile phone, too, so I don't have to bring around 2 devices.

Since I am an iPod addict, the coolest thing I could buy is the iPhone, but it lacks the 3G connectivity, costs way too much and probably will arrive in NZ in 2008, or in Europe in October 2007.

But finally Microsoft just released the new Windows Mobile 6 platform: no device available, yet.

But I can wait a few months before buying one, and I think manufacturer will come out with nice integrated and small PDA/phone in a few months.

NHibernate in 8 minutes

Yesterday afternoon I delivered my first speech in English: NHibernate in 8 minutes during the Lightining session at the Wellington .NET user group meeting.

I hope my English was not too bad, and that I managed in making a brief overview of the power of NHibernate.

If you attended my presentation, please write a comment about it, and also if you would like to listen to a more detailed presentation of NHibernate.

For the moment you can download the slides and the demo of the Lightning presentation.

Codename your releases

Longhorn, Leopard, Indigo, Poseidon, Gran Paradiso, Yukon, SharpFreedom, Supertanga, Revolution, Lightning, Lambrate, Orcas, Q98, Fiji, Pendolino, McKinley.

What does all these names have in common? Apparently nothing... but they are all codenames for various kind of software.

Apple codenames his OS releases with big cats names, Microsoft after places, Firefox with natural parks (next release, 3.0, will be named Gran Paradiso, my favorite Italian National Park), Subtext names are submarines names, Nic's company is naming its releases after cocktail names.

Why is important to have codenames for software release?

Decouple marketing name from the internal name

When you start developing a new product you have to decide a name, the filename. And this must be done a lot of time before the marketing dept decided the real name of the product.
This is also true when releasing new version of the product: the developer team works for the next version named "abcdef", no matter whether the marketing decides to name it v3.6.9 or v4.0.

Give name to sub-projects

Most big product are made up of different applications: a client and a server. Or maybe a core host application, some plugin for the main host application, some server. Are they less important than the complete product? No. So you should name them properly.

Developers want to have fun

So, why relegate them to speak about xyz v3.5?
"I'm working on Subtext Shields Up" is cooler than saying "I'm working on Subtext 1.9.3", isn't it?

How to choose a codename

I think that the best solution to find a codename is to decide a topic or thread, and stay with it: this helps choosing a code name for every release because it reduces the number of the choices.

If you are not creative enough to find a interesting topic for your codenames, here are two tools that will generate Lambrate beercodenames for you:

At Calcium we just decided to give up the boring version number and start using codenames: we are 3 non-kiwis out of a team of 5, so we decided to codename internal releases after non NZers places.

So, the internal name for the next version of the product I'm working on (HotProspect v 2.2) will be Lambrate.

Lambrate is a suburb of Milano, and also the name of a beer produced in a local brewery. I decided to choose Lambrate instead of my birth place (Gallarate) because I spent most of my time in Milan around that suburb: university, my wife's house before living with her, our previous home, my previous job, my current house in Milan, all are around Lambrate (here the map).

And what do you think about codenames? Which topic did you choose for your software?

kick it on

UPDATE: I changed the original picture because I noticed the author had set it to "all right reserved"... now I'm using a picture available under the creative common "some right reserved". The picture of "Lambrate by night" is by pacomì

How to earn Community Credits points using SubText

Probably not everybody knows that Subtext can automatically notify Community Credits whenever someone posts an entry or an article on his blog.

Thanks to Web API provided by Community Credits avid bloggers can earn point immediately without having to go to the Submit Point page and waiting for the approval of Community Credits moderators.smile_shades

You will receive 500 points for each blog post, and 5000 points for each article (story using ST naming)

This feature exists since version 1.9.0, but it has never been advertised and explained as it should have been smile_regular.

The configuration is very easy: just open the web.config file and locate the settings inside the appsettings section:

<add key="CommCreditEnabled" value="false"/>
<add key="CommCreditAffiliateCode" value="xxxxxxxx"/>
<add key="CommCreditAffiliateKey" value="xxxxxxxx"/>

The first value that you have to change is CommCreditEnabled, and, quite obviously, you have to change it to true.

If you are setting up a personal blog, then AffiliateCode and AffiliateKey are not very important: you can leave the default values that will identify you as user of the SubText Blogging Engine.

If you are setting up a community blog, where different person have different blog, you to register as Community Credit Affiliate and change the Code and Key accordingly to one that you will receive during the affiliation procedure.

Last step, but very important for the correct attribution of points, the email of the blog author (the one specified in the Configure > Options page in Subtext backend) must be the same as the one used to create the account on Community Credit.

PS: Answering to one Vern's comment: unfortunately not doing any rock climbing here in Wellington, not many things to climb on smile_sad

So, you want to become a Microsoft Certified Professional Developer?

UPDATE: This is about .NET 2.0 Certification path. Here is the update about the new .NET 3.5 certification path.

Today I was looking for an explanation of the new Microsoft Certification paths, but I was not able to find a brief one and I had to review all the pages on the Microsoft Learning site to have a comparison of them all. Here is what I found:

There are 3 version of MCPD:

MCPD Web Developer

MCPD Windows Developer

MCPD Enterprise Application Developer

The first two certifications (web and windows) consist of 3 exams. Enterprise Application consists of 5 exams.

In order to achieve any of the previous MCPD certification first you need to achieve another certification, which is called MCTS (where TS stands for Technology Specialist)

As for the previous, there are 3 different flavors:

 MCTS Web Applications

 MCTS Windows Applications

 MCTS Distributed Applications

All consists of 2 exams:

70-536: Microsoft .NET Framework 2.0 - Application Development Foundation: this covers the NET 2.0 framework in general (

And then one among the following 3 exams (in order of certification):

70-528: Microsoft .NET Framework 2.0 - Web-Based Client Development: this one covers all ASP.NET 2.0 features(

70-526: Microsoft .NET Framework 2.0 - Windows-Based Client Development: this covers all WinForm development and databinding stuff

70-529: Microsoft .NET Framework 2.0 - Distributed Application Development: this is more about webservices, remoting, WSE3, MessageQueue

Then, to achieve the MCPD you need to pass another exam, which, always in order of certification are:

70-547: Designing and Developing Web Applications by Using the Microsoft .NET Framework: this doesn’t cover the basics of the ASP.NET development but tests the knowledge on the analysis, logical design, physical design, user interface design, component design and architecture, testing and deployment of web applications

70-548: Designing and Developing Windows-Based Applications by Using the Microsoft .NET Framework: as the 70-547, but focused on windows applications

70-549: Designing and Developing Enterprise Applications by Using the Microsoft .NET Framework: the same as the above exams, but focusing on both ASP.NET and Windows Applications

In order to become a MCPD Enterprise Application Developer you need to pass all the 4 MCTS exams plus the specific  MCPD upgrade.

So, depending on what you want to achieve we have 3 different possible exam paths (in the following list I use Windows Developer, but is the same if you replace Windows with Web):

  • MCPD Windows Developer (3 exams)
  • MCPD Enterprise Application Developer (5 exams)
  • MCPD Windows Developer + MCPD Enterprise Application Developer (6 exams)


They all share the first 2 exams, Application Development Foundation (536) and Windows-Based Client Development (526): that will lead to becoming a MCTS Windows Applications

Then one more exam, Designing and Developing Windows-Based Applications (548) to become a MCPD Windows Developer.

Or the other 2 TS exams Web-Based Client Development (526) and Distributed Application Development (529) and then the Designing and Developing Enterprise Applications (549) to become a  MCPD Enterprise Application Developer

Or, if you want to get a “quick” MCPD and later upgrade to the Enterprise Developer, you can start with the first ones and then take the remaining 3 exams (unfortunately the PD upgrade is not the same among the 3 certification paths, so, you end up taking 6 exams smile_sad)

Ayende goes Subtext

Another major .NET blogger enters Subtext club: Ayende, THE NHibernate man (of course after Janky smile_regular) has just moved his blog from DasBlog to Subtext.

On his post he explains his migration, and all the configuration changes he made so that Subtext handles the url the same way that DasBlog did.

A very good overview of the BlogML import process from DasBlog to Subtext... probably after that post we will make a few changes to the import procedure to make the whole process easier.

Ride the Lightning!

This post is not about a concert of a Metallica cover band, the announcement of the next event for the local .NET user group in Wellington.

As all years, the first event is a lightning event, which means that there will be a lot of short 5-10 minutes talks on different topics: IIS 7,
Ajax, CruiseControl.NET, NHibernate, Windows Home Server, Team System customisation, Telecom processes, and maybe a few more.

I'll take part in the event, not only as spectator, but also as speaker: I'll talk about NHibernate, an API that "relieve the developer from 95 percent of common data persistence related programming tasks, compared to manual coding with SQL" (cit.)

If I can fit into the 10 minutes presentation, I will also show an interesting tool that can help a lot when working with NHibernate: NHibernate Domain Mapper (when it will be released, of course smile_wink)

For the logistics of the event have a look at the Wellington event list page on the NZ.NET web site

I was forgetting the date: the event will be 7 February at 6pm at Microsoft's.

A new kid on the Blog

Andrew Butel, the CTO of my current company Calcium, has finally started his own blog: Business Savvy Software.

The subtitle of the blog is "The crossover between business and software" and the focus of his blog will be software development seen with a business prospective.

He already wrote some intersting posts about some truthes about software development, and what his development priorities are.

And, of course, the blog is running on Subtext

Eating My Own Dog Food - Again (build 73)

Three days ago I deployed Subtext build 72... In the last days I included into the 1.9 branch a few other code changes:
The main addition to the upcoming 1.9.4 release I guess is the SiteMap implementation:
this allow Google and other search engines to easily index a website knowing exactly which are the pages that they must index.
The SiteMap feature was developed by David Vidmar, from Slovenia, so big thanks to him for the help. I think this a very cool feature added to the product.
Here is his announcement and description for the feature: Subtext 1.9.4 - now with sitemap. This post also explains hot to add a sitemap to Google and to Yahoo.

I added the sitemap for my blog to Google this morning, and will do the same to Yahoo in a few minutes.
Let's see if this helps my blog to reach a better rank in both search engines.