﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Erik van Ballegoij</title>
    <description>My personal blog on DotNetNuke.</description>
    <link>http://www.dotnetnuke.com/Products/Development/Forge/ModuleAnnouncements/tabid/924/BlogId/94/Default.aspx</link>
    <language>en-US</language>
    <managingEditor>erik.vanballegoij@dotnetnuke.com</managingEditor>
    <webMaster>admin1@dotnetnuke.com</webMaster>
    <pubDate>Sat, 17 May 2008 08:56:32 GMT</pubDate>
    <lastBuildDate>Sat, 17 May 2008 08:56:32 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>Blog RSS Generator Version 3.4.0.39853</generator>
    <item>
      <title>Tag your Forge (CodePlex) Project!</title>
      <description>&lt;p&gt;It's very good to see more and more people creating new projects on DNN Forge. One thing that might not be very obvious, but very usefull nevertheless is tagging your project properly. I've been &lt;a href="http://www.codeplex.com/Project/ProjectDirectory.aspx?ProjectSearchText=dotnetnuke"&gt;searching for DotNetNuke projects&lt;/a&gt; on CodePlex a few times now, and up untill now there are 45 projects on CodePlex that have something to do with dotnetnuke. I've added the tag DotNetNuke to all of them, which caused the tag "DotNetNuke" to be included in the popular tag cloud of CodePlex.&lt;/p&gt;
&lt;p&gt;Another thing I noticed is that a lot of projects are not yet part of the &lt;a href="http://forge.dotnetnuke.com"&gt;DNN Forge&lt;/a&gt;, You can easily solve that: (quoting from the forge faq)&lt;/p&gt;
&lt;blockquote dir="ltr" style="margin-right: 0px"&gt;
&lt;p&gt;&lt;em&gt;Please create your project in the DotNetNuke Forge and then contact us at &lt;/em&gt;&lt;a href="http://www.dotnetnuke.commailto:forge@dotnetnuke.com"&gt;&lt;font color="#75808a"&gt;&lt;em&gt;forge@dotnetnuke.com&lt;/em&gt;&lt;/font&gt;&lt;/a&gt;&lt;em&gt; and be sure to include the Title of your project in the Forge and the URL for your project page on CodePlex&lt;strong&gt;.  &lt;/strong&gt;After creating the project in the DotNetNuke Forge you will be taken to CodePlex to complete the process.  Since you already have a CodePlex project, you should cancel the CodePlex screen and send an email to the above address to complete the process.&lt;/em&gt; &lt;/p&gt;
&lt;/blockquote&gt;</description>
      <link>http://www.dotnetnuke.com/Products/Development/Forge/ModuleAnnouncements/tabid/924/EntryID/1812/Default.aspx</link>
      <author>erik.vanballegoij@dotnetnuke.com</author>
      <comments>http://www.dotnetnuke.com/Products/Development/Forge/ModuleAnnouncements/tabid/924/EntryID/1812/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Default.aspx?tabid=924&amp;EntryID=1812</guid>
      <pubDate>Tue, 22 Apr 2008 01:35:00 GMT</pubDate>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.dotnetnuke.com/DesktopModules/Blog/Trackback.aspx?id=1812</trackback:ping>
    </item>
    <item>
      <title>Dutch language pack 4.8.2 released</title>
      <description>&lt;p&gt;The Dutch language pack for DotNetNuke has been updated for DNN 4.8.2. This and all other versions are available for download from the Dutch usergroup website: &lt;a href="http://netherlands.dnn-usergroup.net"&gt;http://netherlands.dnn-usergroup.net&lt;/a&gt; (registration required). Special thanks goes to Marc Hujbregts, who has been working very hard to keep the language pack updated. The usergroup site also offers language packs for most core modules.&lt;/p&gt;</description>
      <link>http://www.dotnetnuke.com/Products/Development/Forge/ModuleAnnouncements/tabid/924/EntryID/1769/Default.aspx</link>
      <author>erik.vanballegoij@dotnetnuke.com</author>
      <comments>http://www.dotnetnuke.com/Products/Development/Forge/ModuleAnnouncements/tabid/924/EntryID/1769/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Default.aspx?tabid=924&amp;EntryID=1769</guid>
      <pubDate>Fri, 21 Mar 2008 00:01:00 GMT</pubDate>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.dotnetnuke.com/DesktopModules/Blog/Trackback.aspx?id=1769</trackback:ping>
    </item>
    <item>
      <title>Preparing for an upgrade</title>
      <description>&lt;p&gt;Today I had to upgrade an old DNN 3.2.2 multiportal installation to DNN 4.8.1. There are 3 major areas that changed in the past DotNetNuke versions:&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;New contstraints and unique indexes on Files table&lt;/li&gt;
    &lt;li&gt;DNN Membership provider&lt;/li&gt;
    &lt;li&gt;Consolidation of http handlers in one assembly&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In order to smoothly pass the third change, I always do a 2-step upgrade. First to DNN 4.5.5, then to the last available version, 4.8.1 in this case. The consolidation of http handlers happened in DNN 4.6.0.&lt;/p&gt;
&lt;p&gt;When upgrading from DNN versions prior to 3.3.x / 4.3.x, the upgrade process will upgrade the data in the DNN Database from almost pure asp.net membership, to the more loosely coupled DNN Membership. Major changes are: switch from unique ApplicationID / Name per portal to one ApplicationId / name per DNN installation, and DNNMembership no longer uses the aspnet roles and profile tables. However, even though all data is upgraded, no essential data is deleted. In order to finalize the upgrade, you can manually delete the old data using the following SQL:&lt;/p&gt;
&lt;blockquote dir="ltr" style="margin-right: 0px"&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;DELETE&lt;/span&gt; &lt;span class="kwrd"&gt;FROM&lt;/span&gt; dbo.aspnet_UsersInRoles

&lt;span class="kwrd"&gt;DELETE&lt;/span&gt; &lt;span class="kwrd"&gt;FROM&lt;/span&gt; dbo.aspnet_Profile

&lt;span class="kwrd"&gt;DELETE&lt;/span&gt; &lt;span class="kwrd"&gt;FROM&lt;/span&gt; dbo.aspnet_Roles

&lt;span class="kwrd"&gt;DELETE&lt;/span&gt; &lt;span class="kwrd"&gt;FROM&lt;/span&gt; dbo.aspnet_Membership
&lt;span class="kwrd"&gt;WHERE&lt;/span&gt; ApplicationId &lt;&gt; (&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; ApplicationId &lt;span class="kwrd"&gt;FROM&lt;/span&gt; dbo.aspnet_Applications &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; ApplicationName=&lt;span class="str"&gt;'DotNetNuke'&lt;/span&gt;)

&lt;span class="kwrd"&gt;DELETE&lt;/span&gt; &lt;span class="kwrd"&gt;FROM&lt;/span&gt; dbo.spnet_Users 
&lt;span class="kwrd"&gt;WHERE&lt;/span&gt; ApplicationId &lt;&gt; (&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; ApplicationId &lt;span class="kwrd"&gt;FROM&lt;/span&gt; dbo.aspnet_Applications &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; ApplicationName=&lt;span class="str"&gt;'DotNetNuke'&lt;/span&gt;)

&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p dir="ltr"&gt;&lt;font color="#ff0000"&gt;&lt;font color="#000000"&gt;You can run this script from SQL Management Studio, or from Host &gt; SQL (select run as script).&lt;/font&gt; &lt;strong&gt;NB: Always make a backup of your database prior to executing this SQL!&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p dir="ltr"&gt; &lt;/p&gt;
&lt;p dir="ltr"&gt;The reason upgrades fail mostly have to do with the first change: new constraints and unique indexes on the files table. Problems arise from duplicate files in the files table, and files in the files table without a corresponding folder in the folders table. Even though the DNN upgrade sql tries to handle a few cases, in my experience, there are often cases that are not handled. Today i created the following sql which fixed all upgrade issues for me:&lt;/p&gt;
&lt;blockquote dir="ltr" style="margin-right: 0px"&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: 11px;
	color: black;
	font-family: Consolas, "Courier New", Courier, Monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;ALTER&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt; [dbo].Files &lt;span class="kwrd"&gt;ADD&lt;/span&gt; FolderID &lt;span class="kwrd"&gt;int&lt;/span&gt; &lt;span class="kwrd"&gt;NOT&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt; &lt;span class="kwrd"&gt;CONSTRAINT&lt;/span&gt; DF_Files_FolderID &lt;span class="kwrd"&gt;DEFAULT&lt;/span&gt; 0

&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;UPDATE&lt;/span&gt; [dbo].Folders
&lt;span class="kwrd"&gt;SET&lt;/span&gt;    FolderPath = FolderPath + &lt;span class="str"&gt;'/'&lt;/span&gt;
&lt;span class="kwrd"&gt;WHERE&lt;/span&gt;  FolderPath &lt;&gt; &lt;span class="str"&gt;''&lt;/span&gt; &lt;span class="kwrd"&gt;AND&lt;/span&gt; &lt;span class="kwrd"&gt;RIGHT&lt;/span&gt;(FolderPath, 1) &lt;&gt; &lt;span class="str"&gt;'/'&lt;/span&gt;

&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;UPDATE&lt;/span&gt; [dbo].Files
&lt;span class="kwrd"&gt;SET&lt;/span&gt;    FolderID = FO.FolderID
&lt;span class="kwrd"&gt;FROM&lt;/span&gt;   [dbo].Files F, [dbo].Folders FO
&lt;span class="kwrd"&gt;WHERE&lt;/span&gt; F.Folder = FO.FolderPath
    &lt;span class="kwrd"&gt;AND&lt;/span&gt; ( ( F.PortalID = FO.PortalID ) &lt;span class="kwrd"&gt;OR&lt;/span&gt; ( F.PortalID &lt;span class="kwrd"&gt;is&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt; &lt;span class="kwrd"&gt;AND&lt;/span&gt;  FO.PortalID &lt;span class="kwrd"&gt;is&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt; ) )
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; [dbo].[Folders] (PortalId, FolderPath)
&lt;span class="kwrd"&gt;SELECT&lt;/span&gt;     &lt;span class="kwrd"&gt;TOP&lt;/span&gt; 100 &lt;span class="kwrd"&gt;PERCENT&lt;/span&gt; F.PortalId, F.Folder
&lt;span class="kwrd"&gt;FROM&lt;/span&gt;         [dbo].Files F &lt;span class="kwrd"&gt;LEFT&lt;/span&gt; &lt;span class="kwrd"&gt;OUTER&lt;/span&gt; &lt;span class="kwrd"&gt;JOIN&lt;/span&gt;
                      [dbo].Folders FO &lt;span class="kwrd"&gt;ON&lt;/span&gt; F.FolderID = FO.FolderID
&lt;span class="kwrd"&gt;WHERE&lt;/span&gt;     (FO.FolderID &lt;span class="kwrd"&gt;IS&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt;)
&lt;span class="kwrd"&gt;GROUP&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; F.Folder, F.PortalId
&lt;span class="kwrd"&gt;ORDER&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; F.PortalId, F.Folder

&lt;span class="kwrd"&gt;GO&lt;/span&gt;



&lt;span class="rem"&gt;-- delete duplicates from folders table&lt;/span&gt;
&lt;span class="kwrd"&gt;DELETE&lt;/span&gt; &lt;span class="kwrd"&gt;FROM&lt;/span&gt; [dbo].Folders
  &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; FolderId &lt;span class="kwrd"&gt;in&lt;/span&gt; (
    &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; FolderId  
    &lt;span class="kwrd"&gt;FROM&lt;/span&gt; [dbo].Folders FO 
      &lt;span class="kwrd"&gt;join&lt;/span&gt; (&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; PortalId, FolderPath
            &lt;span class="kwrd"&gt;FROM&lt;/span&gt; [dbo].Folders 
            &lt;span class="kwrd"&gt;GROUP&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; PortalId,FolderPath 
            &lt;span class="kwrd"&gt;HAVING&lt;/span&gt; &lt;span class="kwrd"&gt;COUNT&lt;/span&gt;(*) &gt; 1) DUP 
      &lt;span class="kwrd"&gt;ON&lt;/span&gt; DUP.FolderPath = FO.FolderPath &lt;span class="kwrd"&gt;AND&lt;/span&gt; (DUP.PortalId = FO.PortalId &lt;span class="kwrd"&gt;OR&lt;/span&gt; ( FO.PortalID &lt;span class="kwrd"&gt;is&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt; &lt;span class="kwrd"&gt;AND&lt;/span&gt;  DUP.PortalID &lt;span class="kwrd"&gt;is&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt; ))
      &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; FO.FolderId &lt;span class="kwrd"&gt;NOT&lt;/span&gt; &lt;span class="kwrd"&gt;IN&lt;/span&gt; 
        (&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; FolderId=&lt;span class="kwrd"&gt;MIN&lt;/span&gt;(FolderId)
         &lt;span class="kwrd"&gt;FROM&lt;/span&gt; [dbo].Folders 
         &lt;span class="kwrd"&gt;GROUP&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; PortalId,FolderPath 
         &lt;span class="kwrd"&gt;HAVING&lt;/span&gt; &lt;span class="kwrd"&gt;COUNT&lt;/span&gt;(*) &gt; 1))

&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;Delete&lt;/span&gt; &lt;span class="kwrd"&gt;from&lt;/span&gt; Files 
&lt;span class="kwrd"&gt;WHERE&lt;/span&gt; FileID &lt;span class="kwrd"&gt;in&lt;/span&gt; (
    &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; FileID
    &lt;span class="kwrd"&gt;FROM&lt;/span&gt; [dbo].Files F 
      &lt;span class="kwrd"&gt;join&lt;/span&gt; (&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; FolderId, FileName
            &lt;span class="kwrd"&gt;FROM&lt;/span&gt; [dbo].Files 
            &lt;span class="kwrd"&gt;GROUP&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; folder,FolderId,FileName 
            &lt;span class="kwrd"&gt;HAVING&lt;/span&gt; &lt;span class="kwrd"&gt;COUNT&lt;/span&gt;(*) &gt; 1) DUP
      &lt;span class="kwrd"&gt;on&lt;/span&gt; DUP.FolderId = F.FolderID &lt;span class="kwrd"&gt;and&lt;/span&gt; DUP.FileName = F.FileName
    &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; F.FileID &lt;span class="kwrd"&gt;NOT&lt;/span&gt; &lt;span class="kwrd"&gt;IN&lt;/span&gt;
     (&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; FileID = &lt;span class="kwrd"&gt;MIN&lt;/span&gt;(FileId)
            &lt;span class="kwrd"&gt;FROM&lt;/span&gt; [dbo].Files 
            &lt;span class="kwrd"&gt;GROUP&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; folder,FolderId,FileName 
            &lt;span class="kwrd"&gt;HAVING&lt;/span&gt; &lt;span class="kwrd"&gt;COUNT&lt;/span&gt;(*) &gt; 1))

&lt;span class="kwrd"&gt;ALTER&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt; [dbo].Files
    &lt;span class="kwrd"&gt;DROP&lt;/span&gt; &lt;span class="kwrd"&gt;CONSTRAINT&lt;/span&gt; DF_Files_FolderID
&lt;span class="kwrd"&gt;GO&lt;/span&gt;

&lt;span class="kwrd"&gt;ALTER&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt; [dbo].Files &lt;span class="kwrd"&gt;DROP&lt;/span&gt; &lt;span class="kwrd"&gt;COLUMN&lt;/span&gt; FolderId

GO&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;This script will do the following:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;make sure that all foldernames in the files table exist in the folders table (add if neccesary)&lt;/li&gt;
    &lt;li&gt;delete duplicates from folders table&lt;/li&gt;
    &lt;li&gt;delete duplicates from files table.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Of course.. there is a risk. Because the final step is to delete duplicate files, links to that files will seize to work. It will be necessary to do a manual check of your site, to see if this happened on your site.&lt;/p&gt;
&lt;p&gt;You can run this script from SQL Server management studio, or from Host &gt;SQL (if you are using a non standard databaseowner and/or an object qualifier, you will need to edit this script to meet your needs) and again: &lt;strong&gt;&lt;font color="#ff0000"&gt;Always make a backup of your database prior to executing this SQL!&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;[edit]I edited this post as for some reason the script ended up all garbled[/edit]&lt;/strong&gt;&lt;/p&gt;</description>
      <link>http://www.dotnetnuke.com/Products/Development/Forge/ModuleAnnouncements/tabid/924/EntryID/1759/Default.aspx</link>
      <author>erik.vanballegoij@dotnetnuke.com</author>
      <comments>http://www.dotnetnuke.com/Products/Development/Forge/ModuleAnnouncements/tabid/924/EntryID/1759/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Default.aspx?tabid=924&amp;EntryID=1759</guid>
      <pubDate>Mon, 10 Mar 2008 23:00:00 GMT</pubDate>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.dotnetnuke.com/DesktopModules/Blog/Trackback.aspx?id=1759</trackback:ping>
    </item>
    <item>
      <title>Goodbye UserSwitcher hello IdentitySwitcher ...</title>
      <description>&lt;p&gt;... or how I learned an old lesson: always check whether the name of the module you release doesnt actually exist somewhere else.&lt;/p&gt;
&lt;p&gt;Today i received a mail from a fellow DNN Developer, asking to rename the UserSwitcher module to something else, as they have been selling that module for a long time now. I usually actually check to see if a module name already exists, as it is very confusing to end users to have different modules with the same name.&lt;/p&gt;
&lt;p&gt;Anyhow, I changed the name to IdentitySwitcher (quick search on Google didn's show any results...). If you downloaded the module already, please download the new version, and uninstall the old version (As there might be a naming conflict i cannot delete modules named "UserSwitcher"&lt;/p&gt;
&lt;p&gt;You can download the module here: &lt;a href="http://www.codeplex.com/identityswitcher"&gt;http://www.codeplex.com/identityswitcher&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please remember to &lt;a href="http://www.dotnetnuke.com/Products/Development/Forge/tabid/824/ctl/Vote/mid/3713/Projectid/28/Default.aspx?page=1&amp;filter=2"&gt;&lt;font size="5"&gt;vote&lt;/font&gt;&lt;/a&gt; for the project :)&lt;/p&gt;</description>
      <link>http://www.dotnetnuke.com/Products/Development/Forge/ModuleAnnouncements/tabid/924/EntryID/1752/Default.aspx</link>
      <author>erik.vanballegoij@dotnetnuke.com</author>
      <comments>http://www.dotnetnuke.com/Products/Development/Forge/ModuleAnnouncements/tabid/924/EntryID/1752/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Default.aspx?tabid=924&amp;EntryID=1752</guid>
      <pubDate>Tue, 04 Mar 2008 23:00:00 GMT</pubDate>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.dotnetnuke.com/DesktopModules/Blog/Trackback.aspx?id=1752</trackback:ping>
    </item>
    <item>
      <title>New DNN Forge project: UserSwitcher</title>
      <description>&lt;p&gt;&lt;img height="144" alt="" width="167" align="left" src="http://www.dotnetnuke.com/Portals/25/CoreTeam/BlogFiles/ErikVB/userswitcher.png" /&gt;&lt;/p&gt;
&lt;p&gt;A while ago i created a small utility that allowed me to easily switch between users in a portal. This is extremely usefull if you are developing a module or a site and you want to test different permissions for different users.&lt;/p&gt;
&lt;p&gt;The current version of the module allows you to select whether host users can be switched to as well. Doing this means that you will never have to log on to your site again...&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;NB: Never use this module in a live environment, as it will make your site VERY insecure!&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img height="137" alt="" width="597" src="http://www.dotnetnuke.com/Portals/25/CoreTeam/BlogFiles/ErikVB/userswitcher.settings.png" /&gt;&lt;/p&gt;
&lt;p&gt;You can download this module from &lt;a href="http://www.codeplex.com/userswitcher"&gt;http://www.codeplex.com/userswitcher&lt;/a&gt;, and &lt;a href="http://www.dotnetnuke.com/Products/Development/Forge/tabid/824/ctl/Vote/mid/3713/Projectid/28/Default.aspx?page=1&amp;filter=2"&gt;&lt;strong&gt;vote&lt;/strong&gt;&lt;/a&gt; for it on the &lt;a href="http://www.dotnetnuke.com/tabid/824/default.aspx"&gt;DNN Forge Page&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://www.dotnetnuke.com/Products/Development/Forge/ModuleAnnouncements/tabid/924/EntryID/1750/Default.aspx</link>
      <author>erik.vanballegoij@dotnetnuke.com</author>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Default.aspx?tabid=924&amp;EntryID=1750</guid>
      <pubDate>Mon, 03 Mar 2008 23:00:00 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.com/DesktopModules/Blog/Trackback.aspx?id=1750</trackback:ping>
    </item>
    <item>
      <title>Announcements Module: version 04.00.01 has been released</title>
      <description>&lt;p&gt;A new version of the Announcements module, version 04.00.01 was released yesteday. The new version can be downloaded from the &lt;a href="/LinkClick.aspx?link=926&amp;amp;tabid=825"&gt;project page&lt;/a&gt;&amp;#160;(read full post to see what bugs where fixed and what enhancements where added)&lt;/p&gt;</description>
      <link>http://www.dotnetnuke.com/Products/Development/Forge/ModuleAnnouncements/tabid/924/EntryID/1716/Default.aspx</link>
      <author>erik@apollo-software.nl</author>
      <comments>http://www.dotnetnuke.com/Products/Development/Forge/ModuleAnnouncements/tabid/924/EntryID/1716/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Default.aspx?tabid=924&amp;EntryID=1716</guid>
      <pubDate>Sun, 27 Jan 2008 23:00:00 GMT</pubDate>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.dotnetnuke.com/DesktopModules/Blog/Trackback.aspx?id=1716</trackback:ping>
    </item>
    <item>
      <title>Announcement module: call for new team members</title>
      <description>&lt;p&gt;Now that version 04.00.00 has been released, and 04.00.01 underway (in the release tracker now), I decided the time is right to expand the team.&lt;/p&gt;</description>
      <link>http://www.dotnetnuke.com/Products/Development/Forge/ModuleAnnouncements/tabid/924/EntryID/1708/Default.aspx</link>
      <author>erik@apollo-software.nl</author>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Default.aspx?tabid=924&amp;EntryID=1708</guid>
      <pubDate>Thu, 10 Jan 2008 18:16:49 GMT</pubDate>
      <trackback:ping>http://www.dotnetnuke.com/DesktopModules/Blog/Trackback.aspx?id=1708</trackback:ping>
    </item>
    <item>
      <title>Announcements module: version 4 is here!</title>
      <description>After so much inspiration from the OpenForce conferences, where Charles Nurse and Vicenç Masanas created advanced versions of the Announcements module, it really felt good creating a new version of the module.  Although the number of new features are small, under the hood, a lot has changed.</description>
      <link>http://www.dotnetnuke.com/Products/Development/Forge/ModuleAnnouncements/tabid/924/EntryID/1684/Default.aspx</link>
      <author>erik@apollo-software.nl</author>
      <comments>http://www.dotnetnuke.com/Products/Development/Forge/ModuleAnnouncements/tabid/924/EntryID/1684/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Default.aspx?tabid=924&amp;EntryID=1684</guid>
      <pubDate>Thu, 20 Dec 2007 11:11:14 GMT</pubDate>
      <slash:comments>7</slash:comments>
      <trackback:ping>http://www.dotnetnuke.com/DesktopModules/Blog/Trackback.aspx?id=1684</trackback:ping>
    </item>
    <item>
      <title>Announcements module: pre-announcing next version</title>
      <description>Status update for the announcements module project</description>
      <link>http://www.dotnetnuke.com/Products/Development/Forge/ModuleAnnouncements/tabid/924/EntryID/1654/Default.aspx</link>
      <author>erik@apollo-software.nl</author>
      <comments>http://www.dotnetnuke.com/Products/Development/Forge/ModuleAnnouncements/tabid/924/EntryID/1654/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.dotnetnuke.com/Default.aspx?tabid=924&amp;EntryID=1654</guid>
      <pubDate>Fri, 23 Nov 2007 11:48:42 GMT</pubDate>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.dotnetnuke.com/DesktopModules/Blog/Trackback.aspx?id=1654</trackback:ping>
    </item>
  </channel>
</rss>