Home
About
Contact
Sunday, May 03, 2009

Are you using InfoQ? I found InfoQ to be a great source of information long before I started to write for them. During this time I’ve discovered some tips and tricks on the site.

As a user of the InfoQ website you can either just browse news or you can take advantage of some of the more advanced features the site has to offer.

Disclaimer: This information is based on my personal usage of the InfoQ.com website. There might be more functionality available (and probably is) or I might be wrong about some functionality I’ve covered here.

Website functionality

InfoQCrop3

Not functionality per say, but in the top left corner you see how many visitors InfoQ has on a monthly basis. Here showing almost 400.000 visitors for March 2009, which I think is pretty good!

 

InfoQCrop1

On the left hand side there is a list of all the communities that InfoQ writes about. Un-checking communities let you filter out stuff you’re not interested in. Clicking on any community you will see all content from that community.

 

 

InfoQCrop10Based on your community selections above you can get a personalized RSS feed, that of course gets updated whenever there are new content on InfoQ.

InfoQCrop6

On the right hand side of the site, there is a box with tabs showing Articles, Presentations, Interviews and Books and one tab showing All.

This is a great source of info which I learned to appreciate quite late. Today I use it very often, especially to find recent presentations and interviews.

Note: All content you see here will also be announced as news items.

 

 

  

InfoQCrop4

InfoQ publish content in four different languages: English, Chinese, Japanese and Portuguese.

InfoQCrop5In the top right corner of the news section there is a button for contributing news. Use this for suggesting tings you want InfoQ to cover or maybe you have an interesting article that you want InfoQ to consider publishing?

Other options

InfoQCrop7

If you are a registered logged on user, you can go to Preferences and check the box for the InfoQ Newsletter. This will give you a summary of the content for the past week. If you don’t have time to monitor the website on a regular basis, this is a nice option for many.

InfoQBookshelfInfoQ also have it’s own bookshelf written by several different authors, many of them being editors for InfoQ. Books currently available for free online reading (print version at a small cost):

URLs

Community
By adding the name of the community behind the infoq.com URL you get a page displaying featured content, news, articles, interviews, presentations and books about that particular community. For e.g. NET you would use http://www.infoq.com/dotnet.

Topics
By clicking on a topic, e.g. InfoQCrop8 you get a box like this:InfoQCrop9

It’s quite self explanatory, but the Exclude might need some extra explanation. On InfoQ you can exclude topics you don’t want to show up on the website. So let’s say I want to follow what’s going on in the .NET queue, but I don’t want to see anything about Windows Forms, I can do that by selecting a topic as showed on the left or go the Preferences and add that topic to my exclude list.

Tags
Tags work much in the same way as Topics, except they’re tags and not topics :-)

Twitter

InfoQ is also present on Twitter. You can follow at http://twitter.com/infoq or just add @infoq to your Twitter client.

Planet InfoQ - Opinions and Perspectives from InfoQ Editor’s Personal Blogs

The title kind of says it all :-) Check out http://planet.infoq.com. Here you’ll also find Tweets from all the editors on Twitter.

InfoQ | Web
Sunday, May 03, 2009 12:06:04 AM (W. Europe Daylight Time, UTC+02:00)
Saturday, April 04, 2009

Yesterday I published an interview I did with Chad Myers about FubuMVC on InfoQ. FubuMVC is a Model-View-Controller (MVC) implementation in ASP.NET. Much like ASP.NET MVC, but with some interesting differences. I encourage you to check it out!

Thanks to Chad and Jeremy D. Miller for agreeing to this and for giving great answers to my questions! And to Mark Nijhof for interesting discussions around MVC in general and Fubu in particular!

Saturday, April 04, 2009 9:03:03 PM (W. Europe Daylight Time, UTC+02:00)
Tuesday, March 24, 2009

A couple of months ago I wrote an article about Azure Services Platform that just got published on ITPro. It's in Norwegian, but I plan to post it here in English as soon as I find some time to translate it.

The article is targeted towards IT decision makers, meaning a lot of the technical details are missing. However, I still think it will be an interesting read for most techies as well.

Tuesday, March 24, 2009 9:56:23 AM (W. Europe Standard Time, UTC+01:00)
Saturday, December 20, 2008

Back in April last year I configured Google Apps for my family domain. Email was goal #1, but I also had a plan to start using and sharing Google Calendar with my family. At the time however there was poor tooling support for syncing Outlook with Google Calendar. Since I’m using Outlook as my main source of event planning, it was natural for this to be my primary source with a 2 way sync to Google, so I could share this info with e.g. my wife. I actually started on a small dev project to get this done, but I soon got tired thinking Google or somebody else would create something for this soon.

It turns out I was right, only I didn’t pay attention :-) Long story short: in March this year Google released Google Calendar Sync which allow you to do 2-way synchronization between Outlook and Google Calendar. I know this is old news, but it slipped my radar and it might have slipped yours as well…

Software | Tools | Web
Saturday, December 20, 2008 10:57:04 PM (W. Europe Standard Time, UTC+01:00)
Friday, September 26, 2008

This is my second post in my WiX and DTF series for WiX 3.0. Here are some others I’ve written:

The source for this WiX demo can be downloaded here: SimpleWebApp.zip

PS! This demo is only tested on Windows Vista. If you have any issues on other versions of Windows, please let me know.

Update: There is a bug in the WiX extension for IIS on Vista SP 1 resulting in a install failure (Failed to read IIsWebSite table. (-2147024891)). Currently the only workaround is to run the msi from an elevated command prompt using msiexec /i nameOfInstaller.msi.
I'll post an update as soon as I find a better solution or the WiX team publish a bug fix.

Update2: You can work around the error mentioned above by using the approuch I've described here: Using a Bootstrapper To Force Elevated Privileges In Vista

The short time I've used WiX has been a joy. I feel so much more in control over the functionality and possibilities of Windows Installer than with any other tool. I have experience with both InstallShield and Wise, but there I found myself looking around in all corners of the UI and the MSI database to find the functionality I was looking for. However, without the knowledge from these two products the transition to WiX would not have been that easy.

In WiX everything is at your fingertips, even though it's XML :-) It is however good if you have a bit of knowledge about Windows Installer and how it works. At first I was skeptical to WiX using XML, but with Visual Studio intellisense and a nice integration for e.g. build functionality, it's way better than any other xml authoring tool I've tried. Saying that, the documentation for WiX is a bit incomplete. This is especially true for WiX 3.0. However, there are other sources of documentation to WiX than their web site. There's quite a few blog posts out there, the WiX mailing list and a couple of Wiki's.

Download and install

Now down to the essence of WiX; authoring MSI installations. Before you start you need to download WiX and install. In my article I will assume you have Visual Studio installed, but you can certainly do the same things without Visual Studio, though with a bit of extra work.

After you have installed WiX you should have a few new templates in Visual Studio. I'm using VS 2008, where it looks like this:

WixProjects

Creating a new WiX project

  1. File -> New -> Project
  2. Select Project type WiX, Template WiX Project and click OK

That was that! Not too hard was it? So what do we have now?

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="77da05c4-1644-4bc3-ac14-c0f721fe31fe" Name="WixProject1" Language="1033" Version="1.0.0.0" Manufacturer="WixProject1" UpgradeCode="a897ccc5-1c81-47e0-a837-65c07a72a7bc">
        <Package InstallerVersion="200" Compressed="yes" />

        <Media Id="1" Cabinet="WixProject1.cab" EmbedCab="yes" />

        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLLOCATION" Name="WixProject1">
                    <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
                    <!-- <Component Id="ProductComponent" Guid="fc46b1a2-35e9-4a17-896b-80b2daaae567"> -->
                        <!-- TODO: Insert files, registry keys, and other resources here. -->
                    <!-- </Component> -->
                </Directory>
            </Directory>
        </Directory>

        <Feature Id="ProductFeature" Title="WixProject1" Level="1">
            <!-- TODO: Remove the comments around this ComponentRef element and the Component above in order to add resources to this installer. -->
            <!-- <ComponentRef Id="ProductComponent" /> -->
        </Feature>
    </Product>
</Wix>

We have an installation definition that can generate an msi that does nothing! :-) Let's modify it to do something useful...

Adding installer UI

By default WiX uses the simplest installer UI possible, meaning none but the default shown by Windows Installer. This means if you want your users to interact with your installation, you need to customize it a bit. WiX comes with the following built-in dialog sets that will make this easy:

  • WixUI_Mondo
  • WixUI_FeatureTree
  • WixUI_InstallDir
  • WixUI_Minimal
  • WixUI_Advanced

While creating the installer I will try to follow best practices for Windows Installer, have it work with Vista and Server 2008, and make it pass the Certified for Windows Vista test cases. That means we need to allow the user to select which folder she wants the application installed to. Which one of the above can help us out with that? You guessed it; WixUI_InstallDir.

  1. Add a reference to WixUIExtension.dll (right click project -> Add referece...)
  2. Add these two lines between the Directory and Feature tags in your Product.wxs file:
        <Property Id="WIXUI_INSTALLDIR" Value="INSTALLLOCATION" />
        <UIRef Id="WixUI_InstallDir" />

The property WIXUI_INSTALLDIR must be set for the UI to know which directory to use as default. Here I set it to INSTALLLOCATION which is the Id of the directory where the application is being installed. The UIRef tag allow us to reference an external package of UI's. In this case the WixUI_InstallDir in the WixUIExtension library.

Changing the installer UI

In this section we're going to remove the license agreement dialog from the UI and change the graphics displayed in the Windows Installer wizard.

WixUI_InstallDir actually includes several dialogs. Among others the license agreement dialog and the install dir dialog. For my installer I don't want the license agreement, so how do I remove it?

The easiest way is to download the WiX source and get the wxs file for WixUI InstallDir and make it your own (before you think this is too cumbersome, try it. It's actually quite fast and simple, and you learn a thing or two by looking at the source files) :

  1. Right click your WiX project -> Add -> New Item...
  2. Select WiX File and give it a name (e.g. MyUI.wxs)
  3. In a text editor, open the file WixUI_InstallDir.wxs found (in the version I'm using) here: ...Wix-3.0.4318.0-sources\src\ext\UIExtension\wixlib
  4. Copy the xml
  5. Paste it into your new WiX file (MyUI.wxs)
  6. Comment out the license agreement dialogs (see source below)
  7. Change the navigation targets for Next and Back buttons for WelcomeDlg and InstallDirDlg to not use LicenseAgreementDlg anymore (see source below)

The next thing I want to do is change the welcome screen and the top banner of the installation with my own graphics. Here's how:

  1. Add a new folder to your vs project and name it Images
  2. Create two images (if you don't want to create your own, you can download mine by clicking on links for the images)
    1. msibanner.jpg (493x58)
    2. msiwelcome.jpg (493x312)
  3. Copy your images to the Images folder
  4. Next add the two lines below to your UI file (MyUI.wxs) just below the Fragment node to have the installation use the new images:
        <WixVariable Id="WixUIBannerBmp" Value="Images\msibanner.jpg" />
        <WixVariable Id="WixUIDialogBmp" Value="Images\msiwelcome.jpg" />

Here's the MyUI.wxs file after the changes:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Fragment>
        <WixVariable Id="WixUIBannerBmp" Value="Images\msibanner.jpg" />
        <WixVariable Id="WixUIDialogBmp" Value="Images\msiwelcome.jpg" />
        
        <UI Id="MyUI">
            <TextStyle Id="WixUI_Font_Normal" FaceName="Tahoma" Size="8" />
            <TextStyle Id="WixUI_Font_Bigger" FaceName="Tahoma" Size="12" />
            <TextStyle Id="WixUI_Font_Title" FaceName="Tahoma" Size="9" Bold="yes" />

            <Property Id="DefaultUIFont" Value="WixUI_Font_Normal" />
            <Property Id="WixUI_Mode" Value="InstallDir" />

            <DialogRef Id="BrowseDlg" />
            <DialogRef Id="DiskCostDlg" />
            <DialogRef Id="ErrorDlg" />
            <DialogRef Id="FatalError" />
            <DialogRef Id="FilesInUse" />
            <DialogRef Id="MsiRMFilesInUse" />
            <DialogRef Id="PrepareDlg" />
            <DialogRef Id="ProgressDlg" />
            <DialogRef Id="ResumeDlg" />
            <DialogRef Id="UserExit" />

            <Publish Dialog="BrowseDlg" Control="OK" Event="DoAction" Value="WixUIValidatePath" Order="3">1</Publish>
            <Publish Dialog="BrowseDlg" Control="OK" Event="SpawnDialog" Value="InvalidDirDlg" Order="4"><![CDATA[WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>

            <Publish Dialog="ExitDialog" Control="Finish" Event="EndDialog" Value="Return" Order="999">1</Publish>

            <!-- Changed WelcomeDlg next button to navigate to InstallDirDlg-->
            <!--<Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="LicenseAgreementDlg">1</Publish>-->
            <Publish Dialog="WelcomeDlg" Control="Next" Event="NewDialog" Value="InstallDirDlg">1</Publish>

            <!-- Removed LicenseAgreementDlg -->
            <!--
            <Publish Dialog="LicenseAgreementDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
            <Publish Dialog="LicenseAgreementDlg" Control="Next" Event="NewDialog" Value="InstallDirDlg">LicenseAccepted = "1"</Publish>
            -->

            <!-- Changed InstallDirDlg back button to navigate to WelcomeDlg -->
            <!--<Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="LicenseAgreementDlg">1</Publish>-->
            <Publish Dialog="InstallDirDlg" Control="Back" Event="NewDialog" Value="WelcomeDlg">1</Publish>
            
            <Publish Dialog="InstallDirDlg" Control="Next" Event="SetTargetPath" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
            <Publish Dialog="InstallDirDlg" Control="Next" Event="DoAction" Value="WixUIValidatePath" Order="2">1</Publish>
            <Publish Dialog="InstallDirDlg" Control="Next" Event="SpawnDialog" Value="InvalidDirDlg" Order="3"><![CDATA[WIXUI_INSTALLDIR_VALID<>"1"]]></Publish>
            <Publish Dialog="InstallDirDlg" Control="Next" Event="NewDialog" Value="VerifyReadyDlg" Order="4"><![CDATA[WIXUI_INSTALLDIR_VALID="1"]]></Publish>
            <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Property="_BrowseProperty" Value="[WIXUI_INSTALLDIR]" Order="1">1</Publish>
            <Publish Dialog="InstallDirDlg" Control="ChangeFolder" Event="SpawnDialog" Value="BrowseDlg" Order="2">1</Publish>

            <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="InstallDirDlg" Order="1">NOT Installed</Publish>
            <Publish Dialog="VerifyReadyDlg" Control="Back" Event="NewDialog" Value="MaintenanceTypeDlg" Order="2">Installed</Publish>

            <Publish Dialog="MaintenanceWelcomeDlg" Control="Next" Event="NewDialog" Value="MaintenanceTypeDlg">1</Publish>

            <Publish Dialog="MaintenanceTypeDlg" Control="RepairButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
            <Publish Dialog="MaintenanceTypeDlg" Control="RemoveButton" Event="NewDialog" Value="VerifyReadyDlg">1</Publish>
            <Publish Dialog="MaintenanceTypeDlg" Control="Back" Event="NewDialog" Value="MaintenanceWelcomeDlg">1</Publish>

            <Property Id="ARPNOMODIFY" Value="1" />
        </UI>

        <UIRef Id="WixUI_Common" />
    </Fragment>
</Wix>

If you now build your project you can see how the new installer looks like by running the MSI file which you'll find in the debug folder of your project.

Adding files, folders, shortcuts and changing Web.config

A nice UI for the installer is all good, but without installing anything useful it's not much point is it? So let's add some files.

Adding files
Since I'm later going to demo how to select which web site to install to (by using a custom action), it's natural that we're going to install a web application. I've created a very simple web app that has three files: Default.aspx, Web.config and SimpleWebApp.dll. So let's add them to the installation by changing Product.wxs:

Add directories, components, files and feature ref's as shown below:

<Directory Id="TARGETDIR" Name="SourceDir">
    <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLLOCATION" Name="SimpleWebApp">
            <Component Id="Default.aspx" Guid="fc46b1a2-35e9-4a17-896b-80b2daaae567">
                <File Id="Default.aspx" Name="Default.aspx" Source="$(var.SolutionDir)SimpleWebApp\Default.aspx" DiskId="1" KeyPath="yes" />
            </Component>
            <Component Id="Web.config" Guid="2ED81B77-F153-4003-9006-4770D789D4B6">
                <File Id="Web.config" Name="Web.config" Source="$(var.SolutionDir)SimpleWebApp\Web.config" DiskId="1" KeyPath="yes" />
            </Component>
            <Directory Id="binFolder" Name="bin">
                <Component Id="SimpleWebApp.dll" Guid="7FC6DA37-12E5-463d-8E7E-08F73E40CCF2">
                    <File Id="SimpleWebApp.dll" Name="SimpleWebApp.dll" Source="$(var.SolutionDir)SimpleWebApp\Bin\SimpleWebApp.dll" DiskId="1" KeyPath="yes" />
                </Component>
            </Directory>
        </Directory>
    </Directory>
</Directory>
...
<Feature Id="ProductFeature" Title="SimpleWebApp" Level="1">
    <ComponentRef Id="Default.aspx" />
    <ComponentRef Id="Web.config" />
    <ComponentRef Id="SimpleWebApp.dll" />
</Feature>

One thing to note in is the use of $(var.SolutionDir) in the Source attribute. This is a reference to a Visual Studio variable. In this case the path for the solution directory.

Adding a shortcut
Now let's add a shortcut to the start menu. To do this we need a reference to another WiX component: WixUtilExtension. To get intellisense in VS add the following xml namespace to the Wix node:

xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"

And then add this xml:

<Directory Id="TARGETDIR" Name="SourceDir">
...
<
Directory Id="ProgramMenuFolder"> <Directory Id="MyWebAppStartMenuFolder" Name="SimpleWebApp"> <Component Id="StartMenuFolder" Guid="B3AEC4C4-3F8E-4865-B87A-B750533776B5" > <util:InternetShortcut Id="SimpleWebAppShortcut" Name="SimpleWebApp" Target="http://localhost/SimpleWebApp/Default.aspx" Directory="MyWebAppStartMenuFolder" /> <RemoveFolder Id="RemoveStartMenuFolder1" On="uninstall"/> <RegistryKey Root="HKCU" Key="SOFTWARE\torresdal.net\SimpleWebApp\SimpleWebAppShortcut"> <RegistryValue Type="string" Value="Default Value"/> </RegistryKey> </Component> </Directory> </Directory> </Directory>

The directory ProgramMenuFolder is a standard directory id for the program menu folder. Under that folder we add another folder for our application; the SimpleWebApp. To add the actual shortcut we need a component. In this component we define the shortcut by using util:InternetShorcut. In addition to this we must make sure to remove the SimpleWebApp folder un uninstall done by using the RemoveFolder action. And last we need to associate the component with a key. Usually components automatically links to a file for its key, but since there is no file here we must provide a registry key instead. This is done using the RegistryKey and RegistryValue actions.

And since we've created a new component we need to add that to the feature:

<ComponentRef Id="StartMenuFolder" />

Changing Web.config
Now let's do some changes to Web.config during installation. Under the component for Web.config add this xml that will add an element to appSettings in the config file:

<util:XmlFile Id="AppSettingsAddNode" File="[INSTALLLOCATION]Web.config" Action="createElement" ElementPath="/configuration/appSettings" Name="add" Sequence="1" />
<util:XmlFile Id="AppSettingsKeyAttribute" Action="setValue" File="[INSTALLLOCATION]Web.config" ElementPath="/configuration/appSettings/add" Name="key" Value="AddedDuringInstall" Sequence="2" />
<util:XmlFile Id="AppSettingsValueAttribute" Action="setValue" File="[INSTALLLOCATION]Web.config" ElementPath="/configuration/appSettings/add" Name="value" Value="This text was added during installation." Sequence="3" />

The first line will add the 'add' node below the appSettings node. The second line will add the 'key' attribute and the third line will add the 'value' attribute. WiX also provide a util called XmlConfig which is suppose to be customized for .Net config files. However, I was unable to get it to work as expected. Please let me know if you find out how to use XmlConfig instead.

Adding the web application to IIS

To work with IIS, WiX has another extension we can use; the IISExtension. Add the reference and define the xml namespace:

xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension"

Then add the following xml under the root directory TARGETDIR:

<Component Id="IISApplication" Guid="FFA12D9C-5AEC-45f8-AA7D-5C4CEC7FA466">
    <iis:WebAppPool Id="SWAAppPool" Name="SWAAppPool" />
    <iis:WebVirtualDir Id="VirtualDir" Alias="[TARGETVDIR]" Directory="INSTALLLOCATION" WebSite="DefaultWebSite">
        <iis:WebApplication Id="SimpleWebAppApp" Name="[TARGETVDIR]" WebAppPool="SWAAppPool" />
        <iis:WebDirProperties Id="WebVirtualDirProperties" Execute="yes" Script="yes" Read="yes" WindowsAuthentication="no" AnonymousAccess="yes" IIsControlledPassword="yes" />
    </iis:WebVirtualDir>
</Component>

And also since this is a new component, we need to add it to the feature:

<ComponentRef Id="IISApplication" />

We also need to define the default web site which the virtual directory is pointing to:

<iis:WebSite Id='DefaultWebSite' Description='Default Web Site'>
    <iis:WebAddress Id='AllUnassigned' Port='80' />
</iis:WebSite>

The iis:WebAppPool will add a new application pool for this web application. This is strictly not necessary, but I like my web apps to run in its own app pool so I can recycle only that web app without affecting other apps. iis:WebVirtualDir adds a virtual directory to IIS under Default Web Site. In addition to this (since we have an asp.net app) we want to define a web application by using iis:WebApplication. This is set up to use the application pool defined earlier. And the last item is the properties for the virtual directory defined by iis:WebDirProperties. For further details about these items, have a look at the schema reference found in the WiX documentation.

Giving the installer a proper name

To have the installer to use Simple Web App as the product name and not WixProject1, change the Name attribute of the Product node like this:

<Product Id="77da05c4-1644-4bc3-ac14-c0f721fe31fe" Name="Simple Web App" Language="1033" Version="1.0.0.0" Manufacturer="Jon Torresdal" UpgradeCode="a897ccc5-1c81-47e0-a837-65c07a72a7bc">

And also if you want a different name of the msi you can changed that on the properties page of the WiX project. Just set the output name to something else.

The complete source

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension" xmlns:iis="http://schemas.microsoft.com/wix/IIsExtension">
    <Product Id="77da05c4-1644-4bc3-ac14-c0f721fe31fe" Name="Simple Web App" Language="1033" Version="1.0.0.0" Manufacturer="Jon Torresdal" UpgradeCode="a897ccc5-1c81-47e0-a837-65c07a72a7bc">
        <Package InstallerVersion="200" Compressed="yes" />

        <Media Id="1" Cabinet="WixProject1.cab" EmbedCab="yes" />
        <Property Id="TARGETVDIR" Value="SimpleWebApp"/>
        
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLLOCATION" Name="SimpleWebApp">
                    <Component Id="Default.aspx" Guid="fc46b1a2-35e9-4a17-896b-80b2daaae567">
                        <File Id="Default.aspx" Name="Default.aspx" Source="$(var.SolutionDir)SimpleWebApp\Default.aspx" DiskId="1" KeyPath="yes" />
                    </Component>
                    <Component Id="Web.config" Guid="2ED81B77-F153-4003-9006-4770D789D4B6">
                        <File Id="Web.config" Name="Web.config" Source="$(var.SolutionDir)SimpleWebApp\Web.config" DiskId="1" KeyPath="yes" />
                        <util:XmlFile Id="AppSettingsAddNode" File="[INSTALLLOCATION]Web.config" Action="createElement" ElementPath="/configuration/appSettings" Name="add" Sequence="1" />
                        <util:XmlFile Id="AppSettingsKeyAttribute" Action="setValue" File="[INSTALLLOCATION]Web.config" ElementPath="/configuration/appSettings/add" Name="key" Value="AddedDuringInstall" Sequence="2" />
                        <util:XmlFile Id="AppSettingsValueAttribute" Action="setValue" File="[INSTALLLOCATION]Web.config" ElementPath="/configuration/appSettings/add" Name="value" Value="This text was added during installation." Sequence="3" />
                    </Component>
                    <Directory Id="binFolder" Name="bin">
                        <Component Id="SimpleWebApp.dll" Guid="7FC6DA37-12E5-463d-8E7E-08F73E40CCF2">
                            <File Id="SimpleWebApp.dll" Name="SimpleWebApp.dll" Source="$(var.SolutionDir)SimpleWebApp\Bin\SimpleWebApp.dll" DiskId="1" KeyPath="yes" />
                        </Component>
                    </Directory>
                </Directory>
            </Directory>
            <Directory Id="ProgramMenuFolder">
                <Directory Id="MyWebAppStartMenuFolder" Name="SimpleWebApp">
                    <Component Id="StartMenuFolder" Guid="B3AEC4C4-3F8E-4865-B87A-B750533776B5" >
                        <util:InternetShortcut Id="SimpleWebAppShortcut" Name="SimpleWebApp" Target="http://localhost/SimpleWebApp/Default.aspx" Directory="MyWebAppStartMenuFolder" />
                        <RemoveFolder Id="RemoveStartMenuFolder1" On="uninstall"/>
                        <RegistryKey Root="HKCU" Key="SOFTWARE\torresdal.net\SimpleWebApp\SimpleWebAppShortcut">
                            <RegistryValue Type="string" Value="Default Value"/>
                        </RegistryKey>
                    </Component>
                </Directory>
            </Directory>
            <Component Id="IISApplication" Guid="FFA12D9C-5AEC-45f8-AA7D-5C4CEC7FA466">
                <iis:WebAppPool Id="SWAAppPool" Name="SWAAppPool" />
                <iis:WebVirtualDir Id="VirtualDir" Alias="[TARGETVDIR]" Directory="INSTALLLOCATION" WebSite="DefaultWebSite">
                    <iis:WebApplication Id="SimpleWebAppApp" Name="[TARGETVDIR]" WebAppPool="SWAAppPool" />
                    <iis:WebDirProperties Id="WebVirtualDirProperties" Execute="yes" Script="yes" Read="yes" WindowsAuthentication="no" AnonymousAccess="yes" IIsControlledPassword="yes" />
                </iis:WebVirtualDir>
            </Component>
        </Directory>

        <iis:WebSite Id='DefaultWebSite' Description='Default Web Site'>
            <iis:WebAddress Id='AllUnassigned' Port='80' />
        </iis:WebSite>

        <Property Id="WIXUI_INSTALLDIR" Value="INSTALLLOCATION" />
        <UIRef Id="MyUI" />

        <Feature Id="ProductFeature" Title="SimpleWebApp" Level="1">
            <ComponentRef Id="Default.aspx" />
            <ComponentRef Id="Web.config" />
            <ComponentRef Id="SimpleWebApp.dll" />
            <ComponentRef Id="StartMenuFolder" />
            <ComponentRef Id="IISApplication" />
        </Feature>
    </Product>
</Wix>

Build and install

That's it! Now lets build the project and install the application.

Deployment | Web | WiX
Friday, September 26, 2008 2:37:43 AM (W. Europe Daylight Time, UTC+02:00)
Sunday, June 15, 2008

Firefox 3 will be released on the 17th of June (Tuesday). At the same time Firefox will try to beat the world record of most software downloads in 24 hours! Interesting marketing stunt :-) Check out the new features of Firefox 3 and Firefox Download Day 2008.

Events | Software | Web
Sunday, June 15, 2008 9:29:19 PM (W. Europe Daylight Time, UTC+02:00)
Monday, July 02, 2007
DestroyAllInvadersSmaller.jpgJust found a Silverlight game that uses Virtual Earth as a backdrop for a helicopter chasing alien invaders. Check out the game here: http://www.andybeaulieu.com/silverlight/DestroyAll/Default.html

Want to hack yourself? You'll find the source for the game here: http://www.andybeaulieu.com/Home/tabid/67/EntryID/75/Default.aspx

The game is created by Andy Beaulieu.

Monday, July 02, 2007 4:46:34 PM (W. Europe Daylight Time, UTC+02:00)
Wednesday, June 06, 2007
Today when I had my usual rss read-through I came across a different blog post usually not found at a tech blog. Chris Sacca over at Google writes about a shooting incident he witnessed in San Francisco. Read his dramatic blog post here.
Blogging | Other | Web
Wednesday, June 06, 2007 9:15:38 PM (W. Europe Daylight Time, UTC+02:00)
Sunday, April 29, 2007

GoogleApps.gifDid you know about this? Have you heard about it before? I didn’t have a clue before I saw Roy Osherove blog post. It turns out that this was the perfect solution for me and my family. I have now integrated my domain (torresdal.net) with Google email and other nice features of Google Apps. Before I always redirected my domain email to my work email. Now I can manage my private emails in a separate location, which is what I really want.

In addition to email there were a couple of other features I found interesting. My fiancée and I found the Google Calendar really useful. Finally we had a common calendar which was easy to use and easily accessible. In addition to those I’ve already mentioned a Start Page, Chat, Web Pages and Docs and Spreadsheets was also included in the service.

So if you have your own custom domain and want to use Gmail/Chat with yourname@yourdomain.com, Google App’s should be a nice solution. Not that I’ve tried or looked for anything else, I just tried this service and found it very useful.

Software | Tools | Web
Sunday, April 29, 2007 9:54:14 PM (W. Europe Daylight Time, UTC+02:00)
Monday, April 16, 2007
Silverlight.gifFirst thing I thought about when I heard about WPF/E was that it's Microsoft's answer to Flash. Nothing wrong with that, but now when I saw the official name I thought the exact same thing! Silverlight, Flash, silverlight, flash.... Hmmmm... Just another name for flash :) I wonder if this was what they meant. At least they didn't end up with Microsoft Windows Presentation Foundation for Extreme Internet Graphical User Interface (MWPFEIGUI) or something like that. Guess they saw the blog post over at Secret Geek. Anyway, I'm looking forward to do some real coding on Silverlight and for the record; here are the official Silverlight page.

Update: For more info about Silverlight, check out Mary Jo Foley's blog post.
Monday, April 16, 2007 2:46:53 PM (W. Europe Daylight Time, UTC+02:00)
Wednesday, January 24, 2007
MSAjax.jpgIn case you missed it, MS AJAX 1.0 is now released. Now you can play for real :) Check out Scott Guthrie's blog for details. Or if you want to go strait for the download, you'll find it at ajax.asp.net.

Ajax | Microsoft | Web
Wednesday, January 24, 2007 10:50:31 PM (W. Europe Standard Time, UTC+01:00)
Wednesday, December 27, 2006
When I moved my blog from Blogger to DasBlog I wanted to keep rss.xml and atom.xml, and redirect them to the new DasBlog url’s. I googled a bit but didn’t find much. And the ones I found I wasn’t able to use (maybe because I’m running Vista RC2). Anyway, last night enough was enough and I decided to put this to an end. I started to look at IIS’s config file applicationHost.config (usually found at C:\Windows\System32\inetsrv\config) and one section got my attention: <httpRedirect enabled="false" />

The problem was finding schema documentation for this element. After a while I found this (http://www.iis.net/default.aspx?tabid=2&subtabid=25&i=946&p=24). To solve my problem I used this:

<httpRedirect     enabled="true"

exactDestination="true

httpResponseStatus="Permanent">

        <add      wildcard="/rss.xml"

destination="/SyndicationService.asmx/GetRss" />

        <add      wildcard="/atom.xml"

destination="/SyndicationService.asmx/GetAtom" />

</httpRedirect>

So if you have a similar problem I hope this helps.

Update:
I upgraded to Vista Release and suddenly the redirect didn't work anymore. I tried and tried and tried and gave up. I tried again and came over this:


WindowsFeatures.jpg

That nailed it. Don't know why I didn't see this before, but it would be nice though if the error message said something about enabling this feature.
DasBlog | IIS | Vista | Web
Wednesday, December 27, 2006 3:27:57 PM (W. Europe Standard Time, UTC+01:00)
Friday, December 15, 2006
During the day I found two new releases. Asp.net Ajax RC is out (http://ajax.asp.net/) and Visual Studio 2005 SP1 is released (http://msdn.microsoft.com/vstudio/support/vs2005sp1/default.aspx). I vote for Monday releases, so we can get paid testing them. Since I can’t keep my hands off these two, my weekend is ruined! :) Enjoy!

Update: You might want to have a look at Scott Guthrie’s blog before running the installation. He has some tips you should have a look at. Both for pre Vista and Vista operation systems. You'll find his post on vs sp1 here and vista here.
.Net | Ajax | Web | VisualStudio
Friday, December 15, 2006 1:00:00 AM (W. Europe Standard Time, UTC+01:00)
There has been a lot of confusion around web2.0. Who’s better to reduce this confusion than Martin Fowler! Check out his latest blog post about this topic. I especially found this interesting:

"A common misconception I run into is that Web 2.0 is all new stuff. Most of the ideas under Web 2.0 are actually quite old and have been used on the web from early on, for instance Amazon's community or the use of Wikis. The point is that then they were the minority. The Web 2.0 shift is about the principles that were used by a few in the 90's becoming the majority in the future."

And just to clarify even further, Web 2.0 is not a product; you cannot buy it in any store! :)
.Net | Ajax | Web
Friday, December 15, 2006 1:00:00 AM (W. Europe Standard Time, UTC+01:00)
Sunday, October 22, 2006
Scott Guthrie (General Manager at Microsoft Developer Division) writes in his blog that ASP.Net AJAX Beta 1 was released on Friday! If you want to download go here, for more information go to http://ajax.asp.net/ or se Scott’s blog at http://weblogs.asp.net/scottgu/.

I have not done any real development in any language supporting the AJAX phenomenon yet, so I’m really excited to get started and see what all the fuzz is about.
.Net | Ajax | Web
Sunday, October 22, 2006 1:00:00 AM (W. Europe Daylight Time, UTC+02:00)
RSS RSS - Comments Twitter LinkedIn
         
SEARCH
 
 
         
TOP POSTS
   
         
NAVIGATION
   
         
CATEGORIES
  .Net (61) ADFS (3) Agile (30) Ajax (5) Architecture (20) Articles (1) ASP.NET (6) ASP.NET-MVC (1) Blogging (12) Books (2) BPEL (1) CleanCode (1) CloudComputing (7) Community (4) CSharp (11) DasBlog (5) Database (2) DDD (5) Deployment (16) DSL (1) Events (38) ExtremeProgramming (6) Fun (6) Gadgets (4) IIS (10) InfoQ (4) Java (2) Lean (3) Linq (2) MemoryLeaks (5) Microsoft (37) MVC (1) NDC (2) NNUG (36) Other (10) Patterns (9) Performance (3) Scrum (17) Security (7) ServiceBus (1) Silverlight (4) Software (19) TeamManagement (11) TechEd (7) Testing (4) Tools (25) TvGuide (1) WCF (8) Web (15) WebDeploy (1) WIF (3) Windows (10) Vista (15) VisualStudio (16) WiX (9) Work (16) Workflow (3)  
         
ARCHIVE
   
         
BLOGROLL
   
         
ON THIS PAGE...
 
The InfoQ Website
InfoQ: Interview With Chad Myers on FubuMVC
Azure Article on ITPro
Outlook and Google Calendar
WiX and DTF: Using WiX to author MSI installations
Firefox 3 and a World Record Attempt
Killing aliens in Virtual Earth and Silverlight!
Very different blogpost!
Google Apps
Microsoft Silverlight code name “WPF/E”
ASP.NET AJAX 1.0 - Released
Http redirect on IIS7
Asp.net AJAX RC and Visual Studio 2005 SP1
Web2.0 confusion
ASP.Net AJAX Beta 1 (codename ATLAS) was released on Friday!