<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>The Accidental Geek</title>
    <description>One Geek's Journey</description>
    <link>http://blog.theaccidentalgeek.com/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.4.0.0</generator>
<language>en-US</language><blogChannel:blogRoll>http://blog.theaccidentalgeek.com/opml.axd</blogChannel:blogRoll><blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink><dc:creator>Joe Brinkman</dc:creator><dc:title>The Accidental Geek</dc:title><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/JoeBrinkman" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>DotNetNuke 5.1.0 Released</title><description>&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 10px 10px; display: inline; border-top: 0px; border-right: 0px" border="0" align="right" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNuke4.9.2isnowavailable_9C89/logo_3056fb18-928a-4639-8ac2-9cd99e945b11.gif" /&gt; After more than 18 months of development, months of testing, and many, many long nights troubleshooting performance issues I am proud to announce the release of &lt;a title="DotNetNuke" href="http://www.dotnetnuke.com/" target="_blank"&gt;DotNetNuke&lt;/a&gt; 5.1.0.&amp;#160; This release represents the future of the DotNetNuke platform and is now officially recommended for production use.&amp;#160; While many users have been successfully running DotNetNuke 5.0 and 5.0.1 in production for many months, we feel that this 5.x release is finally mature enough that we recommend it for use in production environments.&amp;#160; This release includes hundreds of bug fixes and dozens of enhancements and new features.&amp;#160; Below is a list of just a few of the highlights from the 5.1.0 release.&amp;#160; As always, you can find a complete list of changes on the &lt;/p&gt;  &lt;h3&gt;Major Highlights&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Added Content Versioning and simple workflow to the HTML module. &lt;/li&gt;    &lt;li&gt;Added Admin Console module to simplify access to administrator and host pages &lt;/li&gt;    &lt;li&gt;Added publicly accessible skin engine lifecycle events &lt;/li&gt;    &lt;li&gt;Added audit trails to core system tables &lt;/li&gt;    &lt;li&gt;Added built in support for Google Analytics &lt;/li&gt;    &lt;li&gt;Added custom sitemap priorities &lt;/li&gt;    &lt;li&gt;Enhanced the permission system to use the provider model, allowing for custom permission providers &lt;/li&gt;    &lt;li&gt;Enhanced caching to enable access by distributed caching systems &lt;/li&gt;    &lt;li&gt;Enhanced installation and upgrade logic to automatically detect .Net 3.5 and to upgrade the web.config as appropriate. &lt;/li&gt;    &lt;li&gt;Enhanced the extensions pages to show which modules are used and to show the pages where they are currently in use &lt;/li&gt;    &lt;li&gt;Enhanced the Scheduler to show a checklist of available servers in the webfarm where scheduled tasks can be executed. &lt;/li&gt;    &lt;li&gt;Enhanced the Scheduler to support multiple instances running on the same server &lt;/li&gt;    &lt;li&gt;Fixed issue with removing Superuser role from a user. &lt;/li&gt;    &lt;li&gt;Fixed issue with deleting users which was not fully recognized by the rest of the application. &lt;/li&gt;    &lt;li&gt;Fixed issue with upgrades which would fail if .Net 3.5 was installed &lt;/li&gt;    &lt;li&gt;Fixed issue with skins installed using the batch installer. &lt;/li&gt;    &lt;li&gt;Fixed change to GetModulesByDefinition API method which resulted in breaking change from DotNetNuke 4.x &lt;/li&gt;    &lt;li&gt;Fixed CloakText API method which was broken in 5.0.1 &lt;/li&gt;    &lt;li&gt;Fixed issue with stored procedure for Dashboard which would fail with an error if database account did not have permissions to the MSDB database. &lt;/li&gt;    &lt;li&gt;Fixed issue where pages added while on a host page will not be associated with a portal. &lt;/li&gt;    &lt;li&gt;Fixed issue where the ReturnURL for the SendPassword and Register links on the Login page were broken. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Security Fixes&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;none &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Updated Modules/Providers&lt;/h3&gt;  &lt;p&gt;The following modules and providers have been updated in the 5.1.0 packages.&amp;#160; Please see the specific project pages for notes on what bugs or enhancements were corrected with each release.&lt;/p&gt;  &lt;h4 class="SubSubHead"&gt;Modules&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;Forms and List 05.00.02 &lt;/li&gt;    &lt;li&gt;Announcements 04.00.03 &lt;/li&gt;    &lt;li&gt;Reports 05.01.00 &lt;/li&gt;    &lt;li&gt;Events 05.00.01 &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Providers&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;FckHtmlEditorProvider 02.00.04 &lt;/li&gt;    &lt;li&gt;AD Provider 05.00.02 &lt;/li&gt; &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=SvrKjFPOEkE:B__XA-DJ4j8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=SvrKjFPOEkE:B__XA-DJ4j8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=SvrKjFPOEkE:B__XA-DJ4j8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=SvrKjFPOEkE:B__XA-DJ4j8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=SvrKjFPOEkE:B__XA-DJ4j8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=SvrKjFPOEkE:B__XA-DJ4j8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=SvrKjFPOEkE:B__XA-DJ4j8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=SvrKjFPOEkE:B__XA-DJ4j8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=SvrKjFPOEkE:B__XA-DJ4j8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/SvrKjFPOEkE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/SvrKjFPOEkE/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/06/23/DotNetNuke-510-Released.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=70aff392-056f-4b43-898b-930467eccf9e</guid><pubDate>Tue, 23 Jun 2009 10:30:17 -0900</pubDate><category>DotNetNuke</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=70aff392-056f-4b43-898b-930467eccf9e</pingback:target><slash:comments>6</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=70aff392-056f-4b43-898b-930467eccf9e</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/06/23/DotNetNuke-510-Released.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=70aff392-056f-4b43-898b-930467eccf9e</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=70aff392-056f-4b43-898b-930467eccf9e</feedburner:origLink></item><item><title>DotNetNuke Tips and Tricks #11: Using jQuery in DotNetNuke</title><description>&lt;p&gt;&lt;img style="margin: 0px 0px 10px 10px; display: inline" align="right" src="http://blog.theaccidentalgeek.com/pics/dnntipsandtricks.png" /&gt; During the last several months I have been doing more and more &lt;a href="http://jquery.com/" target="_blank"&gt;jQuery&lt;/a&gt; development and have found a few key tricks that have improved my code and made my development experience much more enjoyable.&lt;/p&gt;  &lt;h4&gt;1.&amp;#160; Inject the jQuery library reference in the head section.&lt;/h4&gt;  &lt;p&gt;jQuery does not know about the DNNMenu and the &lt;a href="http://www.dotnetnuke.com/Default.aspx?tabid=851" target="_blank"&gt;ClientAPI&lt;/a&gt;.&amp;#160; It will step all over them if given half a chance.&amp;#160; Of course, DNNMenu and the ClientAPI are aware of possible conflicts with popular JavaScript libraries and will take steps to avoid any conflicts &lt;strong&gt;IF&lt;/strong&gt; the jQuery library is already loaded.&amp;#160; The ClientAPI is loaded at the top of the ASP.Net page form so loading jQuery in the header ensures it is loaded before the ClientAPI.&amp;#160; &lt;/p&gt;  &lt;p&gt;If you are building a module that injects a jQuery library reference, add it in the page header and you will be safe.&amp;#160; If you just want to include a jQuery script on a page then you can edit the &lt;em&gt;Page Settings/Advanced Settings&lt;/em&gt; to add the script reference to the Page Header Tags.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; margin: 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="pageheader" border="0" alt="pageheader" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/jQuerytipsandtricks_FD57/pageheader_5f5039b1-7008-418c-ab8c-1ae37686f898.png" width="510" height="89" /&gt; &lt;/p&gt;  &lt;h4&gt;2.&amp;#160; DotNetNuke 4.9.1 and above already include jQuery.&lt;/h4&gt;  &lt;p&gt;If you are using DNN 4.9.1 and above, then jQuery is already included in the distribution.&amp;#160; The DNN 4.9.x versions will require you to add your own jQuery reference to the page, but DNN 5.x will add the reference to the page if the framework decides it is needed.&lt;/p&gt;  &lt;p&gt;In 4.9.1+ you can either inject the jQuery using code or by using the Page Settings shown above.&amp;#160; By default, DNN 4.9.x will use jQuery 1.2.6.&amp;#160; If you require a newer version, then you should store your copy of the script in your module directory or in a portal directory.&amp;#160; This will avoid some potential conflicts with other modules which may require a specific version of jQuery.&lt;/p&gt;  &lt;p&gt;DNN 5.x will add jQuery to any page if the service is requested (see my &lt;a href="http://blog.theaccidentalgeek.com/post/2008/10/20/Using-jQuery-in-DotNetNuke-50.aspx" target="_blank"&gt;previous jQuery post&lt;/a&gt; for the needed code).&amp;#160; The DNN Widget framework, which is enabled by default, automatically registers every page.&amp;#160; So as long as the widget framework is enabled, then you are covered.&amp;#160; If not, have your module register the request or use the Page Settings shown above.&lt;/p&gt;  &lt;h4&gt;3.&amp;#160; Don’t use the $ alias&lt;/h4&gt;  &lt;p&gt;One of the first things that a new jQuery user learns is the $ alias.&amp;#160; Using $(selector) to get some page elements is a truly powerful concept.&amp;#160; It is such a powerful concept that the $ alias is used by most of the major JavaScript frameworks.&amp;#160; Since most of my work is in &lt;a title="DotNetNuke" href="http://www.dotnetnuke.com/" target="_blank"&gt;DotNetNuke&lt;/a&gt;, I find that it is just easier to avoid using the $ alias in my scripts.&amp;#160; 5 extra characters seems a small price to pay for peace of mind.&amp;#160;&amp;#160; By staying away from the use of $ I have avoided a lot of problems.&lt;/p&gt;  &lt;p&gt;For some people however the $ is an important feature of jQuery.&amp;#160; Maybe they have existing scripts that they want to use and replacing all of the $ references would be too painful.&lt;/p&gt;  &lt;h4&gt;4.&amp;#160; Wrap your jQuery in a closure to properly map the $ alias if you must use it.&lt;/h4&gt;  &lt;p&gt;For example the following jQuery code does not work in DotNetNuke:&lt;/p&gt;  &lt;pre class="js" name="code"&gt;$(function() {
    $('#box span').hide();
    $('#box').click(function() {
        $('#box span').hide();
        $('#box').css({'background-color': '#ccc'})
            .animate({ left: 500 }, 2000)
            .animate({ top: 150 }, 700, function() { $('#box').css({'background-color': '#988'}); })
            .animate({ left: 0 }, 1200)
            .animate({ top: 0 }, 700, function() {
                $('#box span').show(1000, function() {
                    $('#box').css('background-color', '#333').css('color', '#fff');
                });
            });
    });
});&lt;/pre&gt;

&lt;p&gt;Getting this function to work is easy – wrap the code in a simple function and pass the jQuery object as a parameter.&lt;/p&gt;

&lt;pre class="js" name="code"&gt;(function($) {
    //Your jQuery code here
})(jQuery);&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h4&gt;5.&amp;#160; Variables are overrated &lt;/h4&gt;

&lt;p&gt;One of the greatest strengths of jQuery is that it allows you to chain method calls.&amp;#160; Most methods in jQuery return a jQuery object.&amp;#160; Using chaining allows you to minimize the creation of temporary variables which in turn makes your code easier to read.&lt;/p&gt;

&lt;p&gt;There are still places where variables are useful.&amp;#160; If you are creating multiple jQuery objects using the same selector or where you might be able to use a common ancestor element to get at the necessary elements, then you can gain a performance advantage by creating a temporary jQuery object and chaining subsequent method calls off that element.&amp;#160; &lt;/p&gt;

&lt;p&gt;Using a cached version of the jQuery object in the above script would result in:&lt;/p&gt;

&lt;pre class="js" name="code"&gt;$(function() {
    var box = $(&amp;quot;#box&amp;quot;);
    box.click(function() {
        box.find('span').hide();
        box.css({ 'background-color': '#ccc' })
            .animate({ left: 500 }, 2000)
            .animate({ top: 150 }, 700, function() { box.css({ 'background-color': '#988' }); })
            .animate({ left: 0 }, 1200)
            .animate({ top: 0 }, 700, function() {
                box.find('span').show(1000, function() {
                    box.css('background-color', '#333').css('color', '#fff');
                });
            });
    }).find('span').hide();
});&lt;/pre&gt;

&lt;p&gt;This script uses a single variable but avoids four calls to the jQuery constructor to create the same object, and chaining the find operation off this common element shouldn’t result in any performance degradation.&lt;/p&gt;

&lt;h4&gt;5.&amp;#160; The End() function is your friend&lt;/h4&gt;

&lt;p&gt;The last example forced me to change the ordering from my original script and hide the span after creating the click event handler.&amp;#160; Sometimes ordering is important so it is useful to know how to use a common jQuery element, modify descendents and then go back and modify the parent last.&amp;#160; This is where the end function comes in.&amp;#160; Essentially this function reverts the jQuery matched set to the list of elements prior to your previous destructive change.&amp;#160; Using this technique, I can keep the same ordering in my code as the first example, and still make use of a common variable (yes I do know that I could create a second variable to cache the span object but then I wouldn’t be able to show you this example ;) ).&lt;/p&gt;

&lt;pre class="js" name="code"&gt;$(function() {
    var box = $(&amp;quot;#box&amp;quot;);
    box
        .find('span')
        .hide()
    .end()
    .click(function() {
        box
            .find('span')
            .hide()
        .end()
        .css({ 'background-color': '#ccc' })
            .animate({ left: 500 }, 2000)
            .animate({ top: 150 }, 700, function() { box.css({ 'background-color': '#988' }); })
            .animate({ left: 0 }, 1200)
            .animate({ top: 0 }, 700, function() {
                box.find('span').show(1000, function() {
                    box.css('background-color', '#333').css('color', '#fff');
                });
            });
    });
});&lt;/pre&gt;

&lt;h4&gt;6.&amp;#160; Keep things lite&lt;/h4&gt;

&lt;p&gt;It is important to remember that all this JavaScript is not without a cost.&amp;#160; There is a bandwidth cost to download the code to the client and there is an execution cost that the user also must pay.&amp;#160; If you bloat up your page with too much JavaScript then it will affect the performance of the page for users running older machine or older web browsers.&amp;#160; You should always keep the end user in mind when adding jQuery and JavaScript to the page because it has a double impact on your site performance.&amp;#160; Just remember that in addition to your code, DotNetNuke is going to load the ClientAPI, the jQuery framework and the AJAX framework.&amp;#160; That is a lot of JavaScript already on the page.&lt;/p&gt;

&lt;p&gt;Where this becomes important is in the area of plugins.&amp;#160; Often jQuery users will use a jQuery plugin because it has a lot of functionality, but if you are not using all of the functionality and you can reasonably code the needed functionality in a fraction of the code, then you are better rolling your own code and forgoing the use of the plugin.&amp;#160; A great example of this is the jQuery UI tabs control.&amp;#160; As I showed in my post &lt;a title="How to create JQuery Tabs in DotNetNuke" href="http://blog.theaccidentalgeek.com/post/2009/01/30/How-to-create-jQuery-Tabs-in-DotNetNuke.aspx" target="_blank"&gt;How to create JQuery Tabs in DotNetNuke&lt;/a&gt;, you can build great looking tabs using very little JavaScript (about 23 lines of code plus 10 lines of CSS).&amp;#160; Compare this with almost 13k of compressed code for the jQuery UI version of the tab control (plus 110K for the core jQuery UI library).&amp;#160; Unless you really need all the functionality of the jQuery UI tabs and the UI library, then you are paying a huge price for very simple functionality.&lt;/p&gt;

&lt;h4&gt;&amp;#160;&lt;/h4&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0a72564e-9133-4dc2-9c60-d5205d20ffa3" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DotNetNuke" rel="tag"&gt;DotNetNuke&lt;/a&gt;, &lt;a href="http://technorati.com/tags/jQuery" rel="tag"&gt;jQuery&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=5_nG_Pc_How:N9Cq8zWKooU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=5_nG_Pc_How:N9Cq8zWKooU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=5_nG_Pc_How:N9Cq8zWKooU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=5_nG_Pc_How:N9Cq8zWKooU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=5_nG_Pc_How:N9Cq8zWKooU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=5_nG_Pc_How:N9Cq8zWKooU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=5_nG_Pc_How:N9Cq8zWKooU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=5_nG_Pc_How:N9Cq8zWKooU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=5_nG_Pc_How:N9Cq8zWKooU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/5_nG_Pc_How" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/5_nG_Pc_How/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/05/26/DotNetNuke-Tips-and-Tricks-11-Using-jQuery-in-DotNetNuke.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=ca7a83dc-b22c-45b5-b2b5-5ef296cb9188</guid><pubDate>Tue, 26 May 2009 05:26:10 -0900</pubDate><category>DotNetNuke</category><category>Tips and Tricks</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=ca7a83dc-b22c-45b5-b2b5-5ef296cb9188</pingback:target><slash:comments>12</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=ca7a83dc-b22c-45b5-b2b5-5ef296cb9188</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/05/26/DotNetNuke-Tips-and-Tricks-11-Using-jQuery-in-DotNetNuke.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=ca7a83dc-b22c-45b5-b2b5-5ef296cb9188</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=ca7a83dc-b22c-45b5-b2b5-5ef296cb9188</feedburner:origLink></item><item><title>DotNetNuke 4.9.4 Released</title><description>&lt;p&gt;&lt;a title="DotNetNuke" href="http://www.dotnetnuke.com/" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" border="0" align="right" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNuke4.9.2isnowavailable_9C89/logo_3056fb18-928a-4639-8ac2-9cd99e945b11.gif" /&gt; DotNetNuke&lt;/a&gt; 4.9.4 is a minor stabilization release for the 4.x codebase.&amp;#160; This release is targeted at resolving a major defect with the module caching code and also addresses two minor security issues.&amp;#160; We do not anticipate any further releases of the 4.x codebase.&lt;/p&gt;  &lt;p&gt;As always you can see a complete list with all the details of each fix/change in the &lt;a href="http://support.dotnetnuke.com/project/ChangeLog.aspx?PROJID=2"&gt;ChangeLog&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;Major Highlights in this release&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Fixed a major module caching issue which resulted in empty content for webcrawlers &lt;/li&gt;    &lt;li&gt;Improved performance of FormatRemoveSQL method &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Security Fixes&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;span&gt;Low &lt;/span&gt;- &lt;a href="http://www.dotnetnuke.com/News/SecurityPolicy/securitybulletinno26/tabid/1275/Default.aspx" target="_blank"&gt;Errorpage information leakage&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;span&gt;Low &lt;/span&gt;- &lt;a href="http://www.dotnetnuke.com/News/SecurityPolicy/securitybulletinno27/tabid/1276/Default.aspx" target="_blank"&gt;HTML/Script Code Injection Vulnerability&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Updated Modules/Providers&lt;/h4&gt;  &lt;p&gt;The following modules and providers have been updated in the 4.9.4 packages. Please see the specific project pages for notes on what bugs or enhancements were corrected with each release.&lt;/p&gt;  &lt;h4&gt;Modules&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.dotnetnuke.com/Development/Forge/ModuleAnnouncements/tabid/924/Default.aspx" target="_blank"&gt;Announcements 04.00.03&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Providers&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;Removed the AD Provider so that it cannot be installed by the Install Wizard. It can still be manually installed. &lt;/li&gt; &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=EemTHiqs39o:VBHneNj71ng:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=EemTHiqs39o:VBHneNj71ng:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=EemTHiqs39o:VBHneNj71ng:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=EemTHiqs39o:VBHneNj71ng:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=EemTHiqs39o:VBHneNj71ng:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=EemTHiqs39o:VBHneNj71ng:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=EemTHiqs39o:VBHneNj71ng:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=EemTHiqs39o:VBHneNj71ng:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=EemTHiqs39o:VBHneNj71ng:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/EemTHiqs39o" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/EemTHiqs39o/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/05/21/DotNetNuke-494-Released.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=46dd36fb-58ae-471d-8741-159e84c6cd2e</guid><pubDate>Thu, 21 May 2009 01:52:03 -0900</pubDate><category>DotNetNuke</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=46dd36fb-58ae-471d-8741-159e84c6cd2e</pingback:target><slash:comments>1</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=46dd36fb-58ae-471d-8741-159e84c6cd2e</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/05/21/DotNetNuke-494-Released.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=46dd36fb-58ae-471d-8741-159e84c6cd2e</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=46dd36fb-58ae-471d-8741-159e84c6cd2e</feedburner:origLink></item><item><title>DotNetNuke OpenForce 09 Speakers Announced</title><description>&lt;p&gt;
&lt;img style="border: 0px none ; margin: 0px 0px 10px; display: inline" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeOpenForce09SpeakersAnnounced_1168F/OpenForce09_002c9e87-7609-4bf2-bc72-5ac388d0e882.png" border="0" alt="OpenForce09" title="OpenForce09" width="300" height="109" align="right" /&gt; Yesterday, announcements went out to speakers who submitted sessions for &lt;a href="http://www.dotnetnuke.com/" target="_blank" title="DotNetNuke"&gt;DotNetNuke&lt;/a&gt; OpenForce North America.&amp;nbsp; During the call for speakers we received almost 200 entries and 70 speakers.&amp;nbsp; Obviously, everyone cannot speak and making the selections was extremely difficult.&amp;nbsp; We appreciate all of the input we received which made our task both easier and more difficult.&amp;nbsp; Easier in that there were lots of great topics to choose from so getting good coverage across all the tracks was relatively simple, and more difficult in that we knew that we would have to eliminate many great topics and speakers.
&lt;/p&gt;
&lt;p&gt;
The selection committee members each assigned a ranking of 1 to 5 to each of the submitted sessions and the highest ranking sessions were then reviewed and discussed to come up with the final list of sessions.&amp;nbsp; During this process we had to do a little balancing to make sure we had a good mix of sessions across all the tracks, but given the great list of sessions, that was a relatively painless exercise.
&lt;/p&gt;
&lt;p&gt;
 
&lt;/p&gt;
&lt;p&gt;
One aspect of OpenForce that I am proud of is that we are able to rotate in new speakers every year.&amp;nbsp; This year is no exception.&amp;nbsp; This year&amp;rsquo;s speaker selection includes 6 new speakers who will be speaking at their first OpenForce Event.&amp;nbsp; I always enjoy the fresh perspective that each new speaker brings to the conference.&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
While it is important to have new speakers, it is also important to have some proven speakers as well.&amp;nbsp; We have 7 returning speakers who have spoken at one of the past conferences.&amp;nbsp; These speakers provide a sense of continuity year to year and always have great sessions.&amp;nbsp; We are proud to have them back again this year.
&lt;/p&gt;
&lt;p&gt;
In the end, we have a mix of topics and speakers that should be of interest to both beginning and advanced DotNetNuke users.&amp;nbsp; I am looking forward to another great OpenForce Conference and can&amp;rsquo;t wait to share the experience with you.
&lt;/p&gt;
&lt;table border="0" style="font-family: verdana"&gt;
	&lt;tbody&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding: 5px; background-color: #868b00; color: white; font-weight: bold"&gt;Brandon Haynes&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr style="background-color: #e3e9e3; color: #565b00; font-weight: bold"&gt;
			&lt;td style="padding: 5px"&gt;Secure Module Development: Theory, Technique, and Practice&lt;/td&gt;        
			&lt;td&gt;Module Development&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding-bottom: 15px"&gt;Track: Development, Advanced Virtually all DotNetNuke module developers know that it is important to write secure code, and that the security of a portal is highly correlated with the strength of the modules installed therein. However, fewer developers are aware of the techniques, theory, and tools that provide guidance about how to structure a DotNetNuke module so that it is maximally secure. In this session, we cover at a high level the multifaceted concept of security as it relates to DotNetNuke module development. As a theoretical backdrop, we discuss the related concepts of STRIDE and DREAD, attack trees, and encryption technologies. These techniques are then applied to module development, including discussion of some common anti-patterns and the importance of utilizing core functionality. Finally, we explore some of the tools available to developers, including static analysis, to best mitigate vulnerabilities that can be prevented at design-time. &lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding: 5px; background-color: #868b00; color: white; font-weight: bold"&gt;Cathal Connolly&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr style="background-color: #e3e9e3; color: #565b00; font-weight: bold"&gt;
			&lt;td style="padding: 5px"&gt;DotNetNuke performance tips &amp;amp; tricks&lt;/td&gt;        
			&lt;td&gt;Administration&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding-bottom: 15px"&gt;There&amp;rsquo;s a multitude of tips &amp;amp; tricks to gain additional performance out of DotNetNuke. Come along to this session to see what techniques you can see, settings you can change, and tricks you can use to squeeze as much performance out of your site as possible.&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding: 5px; background-color: #868b00; color: white; font-weight: bold"&gt;Charles Nurse&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr style="background-color: #e3e9e3; color: #565b00; font-weight: bold"&gt;
			&lt;td style="padding: 5px"&gt;DotNetNuke in the Cloud&lt;/td&gt;        
			&lt;td&gt;Module Development&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding-bottom: 15px"&gt;At the Professional Developer&amp;#39;s Conference in the fall of 2008 Microsoft announced its vision for the Cloud - Windows Azure. This talk will look at the components of the Windows Azure platform and how we can take advantage of Windows Azure Services in DotNetNuke.&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding: 5px; background-color: #868b00; color: white; font-weight: bold"&gt;Christopher Hammond&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr style="background-color: #e3e9e3; color: #565b00; font-weight: bold"&gt;
			&lt;td style="padding: 5px"&gt;Creating a DotNetNuke Module for Facebook&amp;rsquo;s Open Stream API&lt;/td&gt;        
			&lt;td&gt;Module Development&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding-bottom: 15px"&gt;This session will provide you with an introduction to creating a DNN Module using Facebook&amp;rsquo;s new Open Stream API for accessing a user&amp;rsquo;s stream of Facebook information, retrieving and adding to the stream. We will develop a C# module using a Visual Studio template project accessing key information from Facebook&amp;rsquo;s API to show you a way to extend social networking onto your own website.&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding: 5px; background-color: #868b00; color: white; font-weight: bold"&gt;Cuong Dang&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr style="background-color: #e3e9e3; color: #565b00; font-weight: bold"&gt;
			&lt;td style="padding: 5px"&gt;Advanced DotNetNuke Skinning Concepts through CSS and XHTML&lt;/td&gt;        
			&lt;td&gt;Design (Skin Development)&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding-bottom: 15px"&gt;The DotNetNuke skinning engine provides great flexibility in adapting to all sorts of design challenges. Think you can&amp;rsquo;t achieve that design within DotNetNuke? Think again! This session will cover advanced CSS and XHTML techniques used in DotNetNuke skinning which will allow you to achieve any design. We will leverage the enhanced features bundled in DotNetNuke 5.0 such as widgets to build a user-friendly web site, with minimal coding effort.&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr style="background-color: #e3e9e3; color: #565b00; font-weight: bold"&gt;
			&lt;td style="padding: 5px"&gt;UX in DotNetNuke! Designing Your Applications the Right Way&lt;/td&gt;        
			&lt;td&gt;Design (Skin Development)&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding-bottom: 15px"&gt;Co-presenter: Ian Robinson Good user experience (UX) is not limited to an appealing user interface. It is about making an application that is easy for your users to learn and interact with. This session will explore the process of creating a good user experience from prototyping your design and user workflow through implementation. Learn the secrets to creating intuitive forms, consistent user interaction, and polished and responsive user interfaces. (if necessary, Cuong Dang can present this session alone)&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding: 5px; background-color: #868b00; color: white; font-weight: bold"&gt;Dr. Ravi Kalakota &lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr style="background-color: #e3e9e3; color: #565b00; font-weight: bold"&gt;
			&lt;td style="padding: 5px"&gt;Building Process Automation Portals with DNN&lt;/td&gt;        
			&lt;td&gt;Development&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding-bottom: 15px"&gt;As a leading global provider of human resource consulting, outsourcing and investment services, Mercer serves more than 25,000 clients globally. Increasingly Mercer is automating HR processes and delivering services via portals to clients globally. The portal solutions are architected from the outset to be on-demand, multi-tenant, highly scalable, highly secure, highly configurable and high performance, in order to rapidly deliver value to our customers. DNN is playing a key part in the overall Mercer portal strategy. In this talk, Dr. Kalakota will provide specifics into different solutions being architected using DNN.&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding: 5px; background-color: #868b00; color: white; font-weight: bold"&gt;Eric Shafer&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr style="background-color: #e3e9e3; color: #565b00; font-weight: bold"&gt;
			&lt;td style="padding: 5px"&gt;E-commerce Options for DotNetNuke&lt;/td&gt;        
			&lt;td&gt;Administration&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding-bottom: 15px"&gt;How many ways can you skin the e-commerce cat? Well, there are a lot to say the least. From single product stores, to fully custom-developed solutions, the spectrum is daunting. This session explores the large number of solutions and provides quick guidelines to estimate scope, cost and schedule for a DotNetNuke E-commerce site. We will cover PayPal and Google Checkout, the DNN Store module, Catalook, ASPDotNetStorefront, and custom-developed solutions.&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding: 5px; background-color: #868b00; color: white; font-weight: bold"&gt;Jason Kergosien&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr style="background-color: #e3e9e3; color: #565b00; font-weight: bold"&gt;
			&lt;td style="padding: 5px"&gt;Deploying DNN in the Enterprise&lt;/td&gt;        
			&lt;td&gt;Administration&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding-bottom: 15px"&gt;In this session, we will discuss implementing DotNetNuke in an enterprise environment, impacting all departments of a large organization with many divisions. Jason will discuss real world scenarios and best practices learned by implementing DotNetNuke as a content management system for one of the largest school districts in Dallas, TX, involving 50 web sites managed by hundreds of content managers, while maintaining standards of quality across the enterprise. We&amp;#39;ll discuss environmental, political, and training considerations in the process. &lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding: 5px; background-color: #868b00; color: white; font-weight: bold"&gt;Kevin M Schreiner&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr style="background-color: #e3e9e3; color: #565b00; font-weight: bold"&gt;
			&lt;td style="padding: 5px"&gt;DotNetNuke on Speed and Performance&lt;/td&gt;        
			&lt;td&gt;Administration&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding-bottom: 15px"&gt;Using real world examples and proven configurations to identify the best specifications for DotNetNuke installs. Configure your site for scalability, speed and efficiency. This session discusses the performance characteristics of the core platform and ways in which you can configure web farms, servers, sites, pages and modules for peak performance. Topics include both browser and server side speed enhancements, taking into consideration each particular area and the benefits and draw backs to the caching and performance settings as well as a full breakdown of performance statistics and stress testing results. &lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr style="background-color: #e3e9e3; color: #565b00; font-weight: bold"&gt;
			&lt;td style="padding: 5px"&gt;JQuery, JavaScript and DotNetNuke&lt;/td&gt;        
			&lt;td&gt;Module Development&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding-bottom: 15px"&gt;Developers and designers now can work more effectively creating rich interactive environments through the adoption of JQuery, JSON and JavaScript class objects. Many developers who have used JavaScript in the past and have developed simplistic interactions within their sites probably have not yet learned the best practices for development of JavaScript libraries. This session will discuss the benefits and capabilities extended to you through JQuery, followed by a set of development samples of using JQuery to add interaction into your DotNetNuke sites. Additionally it identifies the correct approach for developing class libraries for JavaScript and proven best practices for developing rich JavaScript libraries for your skins and modules. &lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding: 5px; background-color: #868b00; color: white; font-weight: bold"&gt;Marian Dumitrascu&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr style="background-color: #e3e9e3; color: #565b00; font-weight: bold"&gt;
			&lt;td style="padding: 5px"&gt;Bring SharePoint Intranet to Your DotNetNuke Extranet Portal&lt;/td&gt;        
			&lt;td&gt;Module Development&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding-bottom: 15px"&gt;Many medium to large corporations choose SharePoint for their&amp;amp;#160;Intranet needs. However, many of them struggle to make it available for their extranet presence. This presentation will demonstrate how to expose SharePoint lists and document libraries into a DotNetNuke module. &lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding: 5px; background-color: #868b00; color: white; font-weight: bold"&gt;Panel Discussion&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr style="background-color: #e3e9e3; color: #565b00; font-weight: bold"&gt;
			&lt;td style="padding: 5px"&gt;DotNetNuke in the Enterprise&lt;/td&gt;        
			&lt;td&gt;Administration&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding-bottom: 15px"&gt;DotNetNuke has gained extensive adoption in small businesses and is increasingly being used by large enterprises to address some of their unique concerns. We&amp;#39;ll talk with several panelists from large corporations and see some of the unique challenges they face and how they were able to leverage DotNetNuke to address these challenges.&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding: 5px; background-color: #868b00; color: white; font-weight: bold"&gt;Mitchel Sellers&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr style="background-color: #e3e9e3; color: #565b00; font-weight: bold"&gt;
			&lt;td style="padding: 5px"&gt;Getting the Best Performance Out of DotNetNuke&lt;/td&gt;        
			&lt;td&gt;Administration&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding-bottom: 15px"&gt;This session covers the role of the DotNetNuke site administrator in proper site performance. A comparative analysis is completed showing baseline and optimized site performance in many traditional settings. Included in this session is recommended configurations for Shared, Cloud, Virtual and Dedicated installation environments. All using proven configurations that have been perfected by the presenter. The session finishes with a checklist of routine maintenance items that should be completed on a regular basis to ensure that site performance remains top-notch.&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding: 5px; background-color: #868b00; color: white; font-weight: bold"&gt;Peter Donker&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr style="background-color: #e3e9e3; color: #565b00; font-weight: bold"&gt;
			&lt;td style="padding: 5px"&gt;Content Localization in DNN&lt;/td&gt;        
			&lt;td&gt;Module Development&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding-bottom: 15px"&gt;DNN does very well with &amp;#39;static localization&amp;#39;. This means all fixed texts in the application. As a result you can use DNN to roll out a site in any language you like. But what if you want to have a site in multiple languages? Do you create multiple portals? Or are there better ways to do this? This presentation looks at the latest developments in content localization for DNN. We will examine existing solutions and the direction DNN will take to help you deliver multilingual content.&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding: 5px; background-color: #868b00; color: white; font-weight: bold"&gt;Steve Fabian&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr style="background-color: #e3e9e3; color: #565b00; font-weight: bold"&gt;
			&lt;td style="padding: 5px"&gt;WCF and DotNetNuke&lt;/td&gt;        
			&lt;td&gt;Module Development&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding-bottom: 15px"&gt;This session will show you how to write a WCF Service to access/expose your DotNetNuke data. WCF can be intimidating, but this session will take you past the complexity and show you how easy it is to setup a WCF service and expose both a SOAP and a REST endpoint. Then we&amp;#39;ll build a Windows Application that allows you to retrieve some site metrics using your new WCF service. And finally, we&amp;#39;ll build an offline editor that will allow you to modify the content of your web site from a Desktop Application using the WCF Service.&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr style="background-color: #e3e9e3; color: #565b00; font-weight: bold"&gt;
			&lt;td style="padding: 5px"&gt;Windows Workflow and DotNetNuke&lt;/td&gt;        
			&lt;td&gt;Module Development&lt;/td&gt;     
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2" style="padding-bottom: 15px"&gt;This session will show you how to use Microsoft&amp;#39;s Windows Workflow Foundation in your custom DotNetNuke modules. We will talk about WF, how to define a workflow, your options for hosting the Workflow Runtime, and how to use your workflow to implement business rules in your custom DotNetNuke module. We&amp;#39;ll also show you how to build a library of custom DotNetNuke Workflow Activities that you can use in your workflows. NOTE: This is a developer presentation .. Yes .. There will be Code.&lt;/td&gt;     
		&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=OnQKVj2GF8k:hdgLyKf6f7c:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=OnQKVj2GF8k:hdgLyKf6f7c:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=OnQKVj2GF8k:hdgLyKf6f7c:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=OnQKVj2GF8k:hdgLyKf6f7c:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=OnQKVj2GF8k:hdgLyKf6f7c:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=OnQKVj2GF8k:hdgLyKf6f7c:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=OnQKVj2GF8k:hdgLyKf6f7c:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=OnQKVj2GF8k:hdgLyKf6f7c:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=OnQKVj2GF8k:hdgLyKf6f7c:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/OnQKVj2GF8k" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/OnQKVj2GF8k/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/05/19/DotNetNuke-OpenForce-09-Speakers-Announced.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=d2b3407e-897e-4082-8744-beb6086da59f</guid><pubDate>Tue, 19 May 2009 01:56:00 -0900</pubDate><category>DotNetNuke</category><category>OpenForce</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=d2b3407e-897e-4082-8744-beb6086da59f</pingback:target><slash:comments>1</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=d2b3407e-897e-4082-8744-beb6086da59f</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/05/19/DotNetNuke-OpenForce-09-Speakers-Announced.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=d2b3407e-897e-4082-8744-beb6086da59f</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=d2b3407e-897e-4082-8744-beb6086da59f</feedburner:origLink></item><item><title>Another Milestone for DotNetNuke Corp.</title><description>&lt;p&gt;
As many people already know, I spent the past week traveling to California and Canada to meet with the DNN Corp. management and engineering teams.&amp;nbsp; This was an exciting trip for me as it was a chance to see us reach one more milestone in the growth of &lt;a href="http://www.dotnetnuke.com/" target="_blank" title="DotNetNuke"&gt;DotNetNuke&lt;/a&gt; and DNN Corp.&amp;nbsp; For the last 6 years, DotNetNuke has been a virtual organization with core team members spread around the globe.&amp;nbsp; This is the norm for most Open Source projects and while it poses some challenges, it is something you learn to deal with if you want to be involved.&amp;nbsp; When Shaun, Scott, Nik and I formed DNN Corp in 2006, we continued operating in this fashion.&amp;nbsp; We each had our own home offices along with &lt;a href="http://feeds.feedburner.com/ThoughtsFromTheWetCoast" target="_blank"&gt;Charles Nurse&lt;/a&gt; and Bill Walker.
&lt;/p&gt;
  
&lt;p&gt;
Starting in January DNN Corp began hiring additional employees.&amp;nbsp; It is no longer possible for everyone to work from home or to work from temporary office spaces and we began the search for office space.&amp;nbsp; As anyone who has been through the process can tell you, it can sometimes take a while to find suitable office space and get it built out and ready for employees.&amp;nbsp; In April we finally moved into new offices in both San Mateo, California and Abbotsford, British Columbia.&amp;nbsp; This trip was my first opportunity to visit the new offices and meet some of our new employees.
&lt;/p&gt;
&lt;p&gt;
 
&lt;/p&gt;
  
&lt;p&gt;
Our California office is the home for our&amp;nbsp; sales, marketing and admin staff along with some of our management team. Located in San Mateo, this office is easily accessible from the San Francisco Airport.&amp;nbsp; It is a nice modern facility.&amp;nbsp; Unfortunately, we are almost out of space and will soon need to look for supplemental space to handle our overflow.&amp;nbsp; Just one of the many challenges of working in growing company.
&lt;/p&gt;
  
&lt;p&gt;
&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/AnotherMilestoneforDotNetNukeCorp_906D/IMGP2364.jpg"&gt;&lt;img style="border-width: 0px; display: inline; margin-left: 0px; margin-right: 0px" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/AnotherMilestoneforDotNetNukeCorp_906D/IMGP2364_thumb.jpg" border="0" alt="IMGP2364" title="IMGP2364" width="322" height="258" /&gt;&lt;/a&gt;     &lt;br /&gt;
Our California Office
&lt;/p&gt;
  
&lt;p&gt;
&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/AnotherMilestoneforDotNetNukeCorp_906D/IMGP2355.jpg" target="_blank"&gt;&lt;img style="border-width: 0px; display: inline" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/AnotherMilestoneforDotNetNukeCorp_906D/IMGP2355_thumb.jpg" border="0" alt="IMGP2355" title="IMGP2355" width="310" height="243" /&gt;&lt;/a&gt;
&lt;/p&gt;
  
&lt;p&gt;
Michelle Baca &amp;ndash; Corporate Accounting Manager. The most powerful person in any company (she makes sure we get paid) ;).
&lt;/p&gt;
  
&lt;p&gt;
&amp;nbsp;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/AnotherMilestoneforDotNetNukeCorp_906D/IMGP2359.jpg"&gt;&lt;img style="border-width: 0px; display: inline" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/AnotherMilestoneforDotNetNukeCorp_906D/IMGP2359_thumb.jpg" border="0" alt="IMGP2359" title="IMGP2359" width="314" height="248" /&gt;&lt;/a&gt;
&lt;/p&gt;
  
&lt;p&gt;
Terry Erisman &amp;ndash; Director of Marketing. He tries to keep us all on the same page with a consistent message.&amp;nbsp; A tough job in any company.
&lt;/p&gt;
  
&lt;p&gt;
&amp;nbsp;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/AnotherMilestoneforDotNetNukeCorp_906D/IMGP2360.jpg"&gt;&lt;img style="border-width: 0px; display: inline" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/AnotherMilestoneforDotNetNukeCorp_906D/IMGP2360_thumb.jpg" border="0" alt="IMGP2360" title="IMGP2360" width="318" height="253" /&gt;&lt;/a&gt;
&lt;/p&gt;
  
&lt;p&gt;
Alex Pringle &amp;ndash; Sales Account Executive.&amp;nbsp; He keeps the engineering team focused by letting us know what the customers want &amp;ndash; an invaluable part of the product feedback loop.
&lt;/p&gt;
  
&lt;p&gt;
There are many other individuals working out of our San Mateo office who likewise contribute to the overall success of the company, unfortunately they were out of the office when I finally remembered to pull the camera out.&amp;nbsp; Some of them might say that is a good thing ;).
&lt;/p&gt;
  
&lt;p&gt;
After leaving California, I headed up to Abbotsford, British Columbia, Canada for a few days to work with the engineering team.&amp;nbsp; We are hard at work putting the finishing touches on the DNN 5.1 Community and Professional Editions.&amp;nbsp; For those who are not aware, Abbotsford is located near the US-Canadian border about an hour East of Vancouver.&amp;nbsp; It is also where Shaun lives.&amp;nbsp; Scott Willhite also came up for a few days &amp;ndash; of course I monopolized a bunch of his time
&lt;/p&gt;
  
&lt;p&gt;
Since Abbotsford is a small town, you won&amp;rsquo;t find any massive glass office towers, but it definitely has the better view of either office location.&amp;nbsp; Being located on the edge of the Cascades and Rocky Mountains, you are guaranteed to have scenic mountain views almost anywhere you go in Abbotsford, and our offices there are no exception.
&lt;/p&gt;
  
&lt;p&gt;
&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/AnotherMilestoneforDotNetNukeCorp_906D/IMGP2365.jpg"&gt;&lt;img style="border-width: 0px; display: inline" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/AnotherMilestoneforDotNetNukeCorp_906D/IMGP2365_thumb.jpg" border="0" alt="IMGP2365" title="IMGP2365" width="307" height="238" /&gt;&lt;/a&gt; 
&lt;/p&gt;
  
&lt;p&gt;
It was exciting to see our logo on the office door for the first time.
&lt;/p&gt;
  
&lt;p&gt;
&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/AnotherMilestoneforDotNetNukeCorp_906D/IMGP2368.jpg"&gt;&lt;img style="border-width: 0px; display: inline" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/AnotherMilestoneforDotNetNukeCorp_906D/IMGP2368_thumb.jpg" border="0" alt="IMGP2368" title="IMGP2368" width="314" height="248" /&gt;&lt;/a&gt; 
&lt;/p&gt;
  
&lt;p&gt;
John Lucarino &amp;ndash; Software Engineer &amp;ndash; Hard at work on an exciting new project.
&lt;/p&gt;
  
&lt;p&gt;
&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/AnotherMilestoneforDotNetNukeCorp_906D/IMGP2367.jpg"&gt;&lt;img style="border-width: 0px; display: inline" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/AnotherMilestoneforDotNetNukeCorp_906D/IMGP2367_thumb.jpg" border="0" alt="IMGP2367" title="IMGP2367" width="320" height="245" /&gt;&lt;/a&gt;     &lt;br /&gt;
Even though it was overcast that day, the Rockies are clearly visible in the background.&amp;nbsp; What an awesome view out of the office windows.&amp;nbsp; It is views like this that make me miss living in the Pacific Northwest.&amp;nbsp; Who knows, maybe a home in Abbotsford is in my future.
&lt;/p&gt;
  
&lt;p&gt;
After a long week of visiting the new offices I had a big surprise when I returned home this weekend.&amp;nbsp; My wife had cleaned up my home office.&amp;nbsp; It was just like walking into a new office.&amp;nbsp; Trust me when I say that you would not want to see what it looked like when I left for the week.
&lt;/p&gt;
  
&lt;p&gt;
&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/AnotherMilestoneforDotNetNukeCorp_906D/IMGP2372.jpg"&gt;&lt;img style="border-width: 0px; display: inline" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/AnotherMilestoneforDotNetNukeCorp_906D/IMGP2372_thumb.jpg" border="0" alt="IMGP2372" title="IMGP2372" width="343" height="275" /&gt;&lt;/a&gt;
&lt;/p&gt;
  
&lt;p&gt;
My Home Office &amp;ndash; after a major cleanup effort from a loving wife.&amp;nbsp; What a great way to end a trip.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=SRg_tk25TPQ:wFD5QyZYUZ0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=SRg_tk25TPQ:wFD5QyZYUZ0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=SRg_tk25TPQ:wFD5QyZYUZ0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=SRg_tk25TPQ:wFD5QyZYUZ0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=SRg_tk25TPQ:wFD5QyZYUZ0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=SRg_tk25TPQ:wFD5QyZYUZ0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=SRg_tk25TPQ:wFD5QyZYUZ0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=SRg_tk25TPQ:wFD5QyZYUZ0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=SRg_tk25TPQ:wFD5QyZYUZ0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/SRg_tk25TPQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/SRg_tk25TPQ/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/05/18/Another-Milestone-for-DotNetNuke-Corp.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=e74cb3f4-3332-4b96-977a-2bad52a26fcb</guid><pubDate>Mon, 18 May 2009 05:15:00 -0900</pubDate><category>DotNetNuke</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=e74cb3f4-3332-4b96-977a-2bad52a26fcb</pingback:target><slash:comments>7</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=e74cb3f4-3332-4b96-977a-2bad52a26fcb</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/05/18/Another-Milestone-for-DotNetNuke-Corp.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=e74cb3f4-3332-4b96-977a-2bad52a26fcb</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=e74cb3f4-3332-4b96-977a-2bad52a26fcb</feedburner:origLink></item><item><title>It&amp;rsquo;s Vegas Baby!</title><description>&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 10px 10px; display: inline; border-top: 0px; border-right: 0px" title="OF09" border="0" alt="OF09" align="right" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/ItsVegasBaby_665E/OF09_f93c287c-ce97-4251-a2d6-30913c231cb1.png" width="240" height="180" /&gt; Once again the DotNetNuke community will be heading off to Las Vegas in November for the annual &lt;a title="DotNetNuke" href="http://www.dotnetnuke.com/" target="_blank"&gt;DotNetNuke&lt;/a&gt;&amp;#160;&lt;a href="http://www.openforce09.com/"&gt;OpenForce&lt;/a&gt; North America conference.&amp;#160; We are looking for a handful of people who want free hotel accommodations and conference admission.&amp;#160; All you have to do is get selected to be a speaker.&amp;#160; You know you have a lot of great insight and knowledge of DotNetNuke and would love to share it with the DotNetNuke community.&amp;#160; Well today is your last chance to turn in your speaker submissions for the North American conference.&amp;#160; Just go to the OpenForce homepage at &lt;a href="http://www.openforce09.com"&gt;http://www.openforce09.com&lt;/a&gt; and follow the directions but you better hurry before time runs out.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=B8P2vqKp4BI:teBb6KZ8Oqo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=B8P2vqKp4BI:teBb6KZ8Oqo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=B8P2vqKp4BI:teBb6KZ8Oqo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=B8P2vqKp4BI:teBb6KZ8Oqo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=B8P2vqKp4BI:teBb6KZ8Oqo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=B8P2vqKp4BI:teBb6KZ8Oqo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=B8P2vqKp4BI:teBb6KZ8Oqo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=B8P2vqKp4BI:teBb6KZ8Oqo:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=B8P2vqKp4BI:teBb6KZ8Oqo:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/B8P2vqKp4BI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/B8P2vqKp4BI/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/05/08/Itrsquo3bs-Vegas-Baby!.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=b9002bc5-3148-4d9c-87fd-88d78c6a1091</guid><pubDate>Fri, 08 May 2009 02:57:54 -0900</pubDate><category>OpenForce</category><category>DotNetNuke</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=b9002bc5-3148-4d9c-87fd-88d78c6a1091</pingback:target><slash:comments>1</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=b9002bc5-3148-4d9c-87fd-88d78c6a1091</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/05/08/Itrsquo3bs-Vegas-Baby!.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=b9002bc5-3148-4d9c-87fd-88d78c6a1091</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=b9002bc5-3148-4d9c-87fd-88d78c6a1091</feedburner:origLink></item><item><title>I Spose I&amp;rsquo;ll Just Say It: Still Waiting For a GOOD Reason to Learn MVC</title><description>&lt;p&gt;
&lt;img style="border-width: 0px; margin: 0px 0px 10px 10px; display: inline" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/ISposeIllJustSayItStillWaitingForaGOODRe_6955/strawman_redherring_19364773-3fc8-4d8f-9a7e-095ac0736cd3.png" border="0" alt="strawman_redherring" title="strawman_redherring" width="245" height="383" align="right" /&gt;
&lt;/p&gt;
  
&lt;h3&gt;Why you shouldn&amp;rsquo;t learn MVC&lt;/h3&gt;  
&lt;p&gt;
Earlier today &lt;a rel=" friend met colleague" href="http://blog.theaccidentalgeek.com/admin/Pages/Rob%20Connery" title="Rob Connery"&gt;Rob Connery&lt;/a&gt; posted about why he thinks &lt;a href="http://blog.wekeroad.com/blog/i-spose-ill-just-say-it-you-should-learn-mvc/"&gt;You Should Learn MVC&lt;/a&gt;.&amp;nbsp; Rob is a great guy and we always have lively discussions whenever we meet at conferences.&amp;nbsp; I was in the middle of writing a long comment on his blog when I decided it might be better as it&amp;rsquo;s own post.
&lt;/p&gt;
  
&lt;p&gt;
I have to say Rob, once again, another great post!&amp;nbsp; Another great use of straw man arguments and red herrings.&amp;nbsp; Come on really?&amp;nbsp; You are going to trot out jQuery as a reason to try MVC?&amp;nbsp; Why not say &amp;ldquo;Use MVC because it runs on Windows and works with IIS&amp;rdquo;.&amp;nbsp; Come on, at least use real arguments if you are going to make the case for MVC.&amp;nbsp; I&amp;rsquo;m sure you know that &lt;a href="http://jquery.com/" target="_blank"&gt;jQuery&lt;/a&gt; works wonderfully with WebForms.&amp;nbsp; People like &lt;a href="http://www.west-wind.com/Weblog/default.aspx"&gt;Rich Strahl&lt;/a&gt;, &lt;a href="http://encosia.com/category/jquery/"&gt;Dave Ward&lt;/a&gt; and others have a ton of great blog posts on the topic.&amp;nbsp; I even have a few &lt;a href="http://blog.theaccidentalgeek.com/post/2009/01/30/How-to-create-jQuery-Tabs-in-DotNetNuke.aspx"&gt;myself&lt;/a&gt;.&amp;nbsp; jQuery is a valid argument if you are trying to sell people on adding more JavaScript, but the argument as framed does not make the case for MVC.
&lt;/p&gt;
&lt;p&gt;
 
&lt;/p&gt;
  
&lt;p&gt;
Wow.&amp;nbsp; You can use your own view engine in MVC.&amp;nbsp; Good to see that MVC didn&amp;#39;t break a basic feature we have had in ASP.Net since the 1.0 days.&amp;nbsp; Nobody using ASP.Net is forced to use WebForms for page rendering.&amp;nbsp; It seems that in Rob&amp;rsquo;s world, projects like &lt;a href="http://umbraco.org/"&gt;Umbraco&lt;/a&gt;, &lt;a href="http://www.castleproject.org/"&gt;Castle&lt;/a&gt;, and &lt;a href="http://www.visualwebgui.com/"&gt;Visual Web GUI&lt;/a&gt; are the only people smart enough to figure that out. It is perfectly valid for a page or a control, or heaven forbid an HttpHandler, to use a different rendering engine for generating the HTML.
&lt;/p&gt;
  
&lt;p&gt;
Non-validating Html - Really, that is the best you have?&amp;nbsp; To paraphrase a quote from Rob - &amp;quot;Non-validating HTML is as Non-validating HTML does&amp;quot;. If you want to write code that validates in WebForms, that is completely possible today.&amp;nbsp; If you don&amp;rsquo;t care whether your page validates then moving to MVC isn&amp;rsquo;t going to make you suddenly start caring.&amp;nbsp; I can throw a div inside a span and use capital letters in my attribute names and even use the bold tag and MVC will merrily spit it out to the browser.&amp;nbsp; Sure, WebForms has a ton of crappy controls that will render garbage, but that is not the fault of WebForms.&amp;nbsp; It is the fault of the control developers and the people who use those controls.&amp;nbsp; There are lots of controls that render great markup &amp;ndash; and people who care about their markup will either use a good control, or hand code their html.
&lt;/p&gt;
  
&lt;p&gt;
Amazing, you can use IoC with MVC.&amp;nbsp; Wow.&amp;nbsp; I wish you could do that with Asp.Net and web form apps.&amp;nbsp; It&amp;#39;s is mind-blowing that all these IoC containers were written before MVC came along.&amp;nbsp; Like they just knew that possibly someday, someone would be able to use them, if only MS would create a different web framework - or rather slap a different front end on ASP.Net.&amp;nbsp; I guess I better stop using IoC with my webform apps since it is not possible.
&lt;/p&gt;
  
&lt;p&gt;
I must say I agree with you about WebForms being one giant pile of abstractions, and frankly I am tired of it. Enough already.&amp;nbsp; Let&amp;#39;s get rid of these damned abstractions. Why, here I am using these alphanumeric characters, when we all know that it is just an illusion, a sham a hoax.&amp;nbsp; There is no such thing as a character to a computer.&amp;nbsp; There is only 1 and 0.&amp;nbsp; Wait... that&amp;#39;s not right either.&amp;nbsp; There is only some voltage level that is not 0 and 0.&amp;nbsp; or maybe it is 2 different magnetic orientations, or a pit and the absence of a pit.&amp;nbsp; Whatever - I digress.&amp;nbsp; We live and work in a world of abstractions.&amp;nbsp; All of computer science is about abstractions.&amp;nbsp; Rob has climbed the Mt Everest of abstractions and declared that one tiny snowflake sitting on the top is bad and must be replaced.&amp;nbsp; You have suddenly declared that the top floor in our Tower of Babel is faulty and that this new penthouse suite is suddenly the one true path to heaven. 
&lt;/p&gt;
  
&lt;p&gt;
As for me and thousands of other ASP.Net developers, we are quite satisfied with our current abstraction.&amp;nbsp; It makes it easy to do a lot of tasks.&amp;nbsp; If I find the abstraction too leaky in places, then I push the abstraction out of the way and roll my own.&amp;nbsp; Is this any different than what &lt;a href="http://www.lostechies.com/blogs/chad_myers/"&gt;Chad&lt;/a&gt; and &lt;a href="http://codebetter.com/blogs/jeremy.miller/"&gt;Jeremy&lt;/a&gt; did with &lt;a href="http://code.google.com/p/fubumvc/"&gt;FUBU MVC&lt;/a&gt;?&amp;nbsp; But in most cases, I don&amp;rsquo;t need to go quite that far.&amp;nbsp; I am quite comfortable writing an HttpHandler or an HttpModule for those cases where the webform defaults are getting in my way.&amp;nbsp; I don&amp;rsquo;t require a whole new framework and a whole new mindset to get things done.&amp;nbsp; I can use WebForms where they make life easy and dive down in the weeds when I really need fine-grained control.
&lt;/p&gt;
  
&lt;p&gt;
Hey look at those nice URLs they generate in MVC.&amp;nbsp; Boy, those are slick.&amp;nbsp; No, really, they are.&amp;nbsp; I&amp;rsquo;m not being sarcastic or anything.&amp;nbsp; You really should check them out.&amp;nbsp; But you know what &amp;ndash; you can have them in WebForms as well.&amp;nbsp; &lt;a href="http://odetocode.com/blogs/scott/"&gt;Scott Allen&lt;/a&gt; has a great &lt;a href="http://msdn.microsoft.com/en-us/magazine/2009.01.extremeaspnet.aspx"&gt;MSDN article&lt;/a&gt; that discusses this very topic.
&lt;/p&gt;
  
&lt;p&gt;
So enough already of the red herrings, the straw man arguments and the downright deceptive use of facts.&amp;nbsp; How about a real argument about using MVC that doesn&amp;#39;t first assume complete web illiteracy on the part of ASP.Net developers, but that somehow, if they use MVC those same brain-dead developers will suddenly become programming geniuses. If they were afraid to use jQuery before, they won&amp;rsquo;t use it just because they are in MVC.&amp;nbsp; If they didn&amp;rsquo;t care about testing or HTML or clean URLs, MVC is not going to make them see the light.&amp;nbsp; MVC is a tool.&amp;nbsp; Good at some things, bad at others.&amp;nbsp; In the hands of a master it will do great things.&amp;nbsp; In the hands of someone who doesn&amp;rsquo;t care about his craft then MVC will be a nice diversion and yet another excuse for creating bad code.
&lt;/p&gt;
  
&lt;p&gt;
So, lest you think I am against MVC, let me assure you I am not.&amp;nbsp; I am against all of the same ol&amp;rsquo; tired excuses about why people should jump to MVC.&amp;nbsp; Every abstraction is about making tradeoffs, and make no mistake about it &amp;ndash; MVC is an abstraction.&amp;nbsp; Some people will claim it is a good abstraction, others will disagree, but at the end of the day the MVC team had to decide what was most important to them.&amp;nbsp; Testability was clearly high on the list (Of course if you listen to Chad and Jeremy, it wasn&amp;rsquo;t high enough on the list).&amp;nbsp; Clean URLs and a more restful like interaction was also important.&amp;nbsp; Hiding the stateless nature of the web and leveraging reusable components &amp;ndash; not so important.&amp;nbsp; 
&lt;/p&gt;
  
&lt;h3&gt;So why should you at least learn MVC?&lt;/h3&gt;  
&lt;p&gt;
&lt;strong&gt;It will expose you to a different architecture&lt;/strong&gt;.&amp;nbsp; MVC definitely has its place &amp;ndash; whether you are talking about desktop apps or web apps.&amp;nbsp; MVC leads you to think about keeping a clean separation between different application concerns.&amp;nbsp; It however doesn&amp;rsquo;t force you to do so.&amp;nbsp; It is still possible for you to completely violate those rules, but it at least starts you out on the right path.&amp;nbsp; WebForms on the other hand does not impose or suggest any such constraints.&amp;nbsp; It is easy to get in trouble if you are not careful.
&lt;/p&gt;
  
&lt;p&gt;
&lt;strong&gt;You will be forced to become intimately familiar with HTML and HTTP&lt;/strong&gt;.&amp;nbsp; This is great if you don&amp;rsquo;t already know it.&amp;nbsp; I am a big believer in understanding how things work.&amp;nbsp; However, for those that already have a good grasp of HTML this is a little overkill.&amp;nbsp; I have a decent understanding of how the engine in my car works, but I don&amp;rsquo;t want to have to put it together every-time I want to drive somewhere.&amp;nbsp; I trust the auto manufacturer to create the proper level of abstraction for me.&amp;nbsp; I know what HTML is supposed to look like, but I don&amp;rsquo;t want to remember exactly which attributes can be used for a dropdown list.&amp;nbsp; What events are available to me and how that data is returned.&amp;nbsp; If I can abstract that away, it is a good thing.
&lt;/p&gt;
  
&lt;p&gt;
&lt;strong&gt;MVC promotes unit testing&lt;/strong&gt;.&amp;nbsp; It is designed as much as possible, to get out of the way and make testing simple.&amp;nbsp; This is not the case with WebForms.&amp;nbsp; In WebForms, it is possible to do testing, but it will take some effort.&amp;nbsp; Is that enough to get you to give up some of the abstractions that WebForms provides?&amp;nbsp; For me it is not.&amp;nbsp; That may change in a couple years, but I suspect that instead what will happen is that MS will invest some time in addressing this issue in WebForms.&amp;nbsp; The ASP.Net team learned a lot during the development of MVC and I know that they are already working on incorporating some of this knowledge back into the WebForms platform.
&lt;/p&gt;
  
&lt;p&gt;
&lt;strong&gt;MVC will make you see how much you take for granted with WebForms.&lt;/strong&gt; I recommend that everyone should live outside their home country for a little while.&amp;nbsp; You will either learn to appreciate where you are from or you will find out that the grass is truly greener on the other side.&amp;nbsp; In either case, you will come out ahead.&amp;nbsp; I have had the privilege to have worked in many different development environments and programmed in many different languages.&amp;nbsp; I appreciate the tools I have chosen because I have seen what else is available.&amp;nbsp; I can articulate why I like VB over C# and why I like ASP.Net over J2EE.&amp;nbsp; But I still think it is healthy to keep looking at alternatives.&amp;nbsp; In the end it will make you a better coder.
&lt;/p&gt;
  
&lt;p&gt;
So in summary, you really should checkout MVC.&amp;nbsp; But not for the reasons Rob articulated.&amp;nbsp; You should explore MVC because in the end you might just learn something that will make you a better web programmer, no matter what platform you choose.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=D-3a95aBsJw:41vLF5mAZWM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=D-3a95aBsJw:41vLF5mAZWM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=D-3a95aBsJw:41vLF5mAZWM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=D-3a95aBsJw:41vLF5mAZWM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=D-3a95aBsJw:41vLF5mAZWM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=D-3a95aBsJw:41vLF5mAZWM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=D-3a95aBsJw:41vLF5mAZWM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=D-3a95aBsJw:41vLF5mAZWM:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=D-3a95aBsJw:41vLF5mAZWM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/D-3a95aBsJw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/D-3a95aBsJw/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/04/23/I-Spose-Irsquo3bll-Just-Say-It-Still-Waiting-For-a-GOOD-Reason-to-Learn-MVC.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=f4518c38-c8dd-400e-91dc-939d48c5c20d</guid><pubDate>Thu, 23 Apr 2009 05:35:00 -0900</pubDate><category>Software Development</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=f4518c38-c8dd-400e-91dc-939d48c5c20d</pingback:target><slash:comments>74</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=f4518c38-c8dd-400e-91dc-939d48c5c20d</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/04/23/I-Spose-Irsquo3bll-Just-Say-It-Still-Waiting-For-a-GOOD-Reason-to-Learn-MVC.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=f4518c38-c8dd-400e-91dc-939d48c5c20d</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=f4518c38-c8dd-400e-91dc-939d48c5c20d</feedburner:origLink></item><item><title>Calling all Speakers &amp;ndash; DotNetNuke OpenForce Wants You!</title><description>&lt;p&gt;&lt;img style="margin-top: 0px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; display: inline; border-width: 0px; border-color: initial; border-style: initial" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/CallingallSpeakersDotNetNukeOpenForceWan_7562/CallForSpeakersBlog_533ba482-4912-465c-9837-cdd361df3829.png" border="0" alt="CallForSpeakersBlog" title="CallForSpeakersBlog" width="448" height="246" /&gt; &lt;/p&gt;  &lt;p&gt;We are once again in the heart of the planning season for &lt;a href="http://www.dotnetnuke.com/" target="_blank" title="DotNetNuke"&gt;DotNetNuke&lt;/a&gt;&amp;nbsp;&lt;a href="http://www.openforce09.com/" target="_blank"&gt;OpenForce&lt;/a&gt;. It is that time of year when we ask all of you to submit your session abstracts for this years OpenForce North America conference.&amp;nbsp; I know that the last 2 years, we have had great response from our community and I expect that this year will be no different.&lt;/p&gt;  &lt;p&gt;Like the last two years, we are accepting&amp;nbsp; session submissions in 4 different topic areas:&amp;nbsp; Development, Design, Administration and Open Source.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Development&lt;/strong&gt; &amp;ndash; These are basically session dealing with code.&amp;nbsp; Whether it is topic on module development or building custom providers or dissecting the internals of DotNetNuke, anything that would appeal to the software coders is fair game.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Design&lt;/strong&gt; &amp;ndash; This topic area is targeted at the web designers.&amp;nbsp; This goes beyond just talking about skins.&amp;nbsp; It also includes topics like SEO, and accessibility and can even include Localization.&amp;nbsp; These sessions should focus more on the aesthetic and usability aspects of building a DotNetNuke website.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Administration&lt;/strong&gt; &amp;ndash; This topic area is where speakers present sessions that address the needs of the end user.&amp;nbsp; How do they install DotNetNuke, how do they configure it for a Web Farm or to run in the cloud(this is different that writing a module that uses cloud services), how can they improve site performance.&amp;nbsp; These sessions really focus on the day to day use and administration of running a DotNetNuke website.&amp;nbsp; This topic area is also a catchall for any business related topics.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Open Source&lt;/strong&gt; &amp;ndash; This final topic area is designed to show attendees how they can incorporate other Open Source tools into their development, design and administration tasks.&amp;nbsp; It might be a topic on using XUnit for testing or using GIMP and Paint.Net for creating your skin elements.&amp;nbsp; The idea here is to expand the attendees view of the Open Source community and to bring in fresh and complimentary ideas from other Open Source projects.&amp;nbsp; These sessions should still be relevant to DotNetNuke in a very meaningful way.&amp;nbsp; A topic showing all the wonders of using Wordpress for blogging is not appropriate.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h3&gt;Frequently Asked Questions.&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;Q. What are good topics?&lt;/strong&gt;&amp;nbsp; &lt;/p&gt;  &lt;p&gt;A. This is a hard question to answer since we often don&amp;rsquo;t have a standard list of topics we want to see.&amp;nbsp; Each year when we sit down to evaluate submissions we try to strike a balance.&amp;nbsp; We want to have a few beginner topics like basic skinning and basic module development, some intermediate level topics like adding &lt;a href="http://jquery.com/" target="_blank"&gt;jQuery&lt;/a&gt; to your module or developing XHTML compliant skins.&amp;nbsp; Finally we&amp;rsquo;ll look for advanced topics like a deep dive on the DotNetNuke installer or using the 960 Grid System for skin development.&amp;nbsp; In addition to balancing the level, we&amp;rsquo;ll also try to make sure we have good coverage across different technology and web design trends.&amp;nbsp; These are much more subjective since there are so many great complimentary technologies.&amp;nbsp;&amp;nbsp; In the past we have had sessions covering topics like Security, Silverlight, Unit Testing, Accessibility, Menu controls, AJAX, PowerShell, High Availability and scalability, Localization and Globalization, Continuous Integration, Subsonic, Web standards, LINQ to SQL and SEO.&amp;nbsp; The key is that we look around at what is happening in the web development space and try to pick sessions that we think are current and relevant.&amp;nbsp; Attendees are just like the rest of us &amp;ndash; they see some new technology or new trends like Entity Framework, Cloud Services (Azure, Mosso, EC2), CSS Layouts (YUI, 960, etc), jQuery, Mega-Menus and many more, and the attendees want to find out how they can incorporate these technologies into their own sites running on DotNetNuke.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Q. Who Should Submit?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A.&lt;/strong&gt; Are you a DotNetNuke expert?&amp;nbsp; Do you like to share your DotNetNuke knowledge with the community? Do you enjoy speaking in front of large crowds? You are exactly the person we are looking for.&lt;/p&gt;  &lt;p&gt;Every conference relies on the quality of its speakers and as proven last year, the DotNetNuke community has a lot of great speakers. While we anticipate that some core team members will want to speak, we are also interested in having speakers from the broader DotNetNuke community as well. So please don&amp;#39;t hesitate to offer your speaking services.&amp;nbsp; Even if you didn&amp;#39;t get selected to speak last year, please submit sessions.&amp;nbsp; We hope to rotate in some fresh faces and give a few more speakers the opportunity to present.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Q. How do I Submit my Sessions?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A.&lt;/strong&gt; This call for speakers is specifically targeted at OpenForce North America.&amp;nbsp; We will have a separate call for speakers for OpenForce Europe.&lt;/p&gt;  &lt;p&gt;To submit your sessions, Login to the &lt;a href="http://www.openforce09.com"&gt;OpenForce09 site&lt;/a&gt; and then go to the &lt;a href="http://www.openforce09.com/Home/OpenForceNorthAmerica/CallforSpeakers.aspx"&gt;Call For Speakers page&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Q. What do I get if I am selected to speak?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A.&lt;/strong&gt; Every speaker at the DotNetNuke OpenForce North America conference will receive 4 nights of lodging at the Mandalay Bay Casino and Hotel along with free conference registration. Conference registration will allow every attendee full access to the expo hall, and all sessions at the DevConnections and DotNetNuke OpenForce conferences. (Pre and Post conference training days are not covered in the complimentary registration).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Q. When and where is the Conference?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;A.&lt;/strong&gt; This years conference is being held in Las Vegas, Nevada at the Mandalay Bay Hotel and Casino from November 10th through the 12th.&amp;nbsp; There will also be pre-conference and post-conference workshops available.&lt;/p&gt;  &lt;p&gt;Additional conference details will be posted on the OpenForce 09 website as they become available.&lt;/p&gt;  &lt;div id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:fd702384-38de-4e29-8273-191059f1cca3" class="wlWriterEditableSmartContent" style="display: inline; float: none; padding: 0px; margin: 0px"&gt;Technorati Tags: &lt;a rel="tag" href="http://technorati.com/tags/DotNetNuke"&gt;DotNetNuke&lt;/a&gt;, &lt;a rel="tag" href="http://technorati.com/tags/OpenForce"&gt;OpenForce&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=GmsSUlSKY80:g-mze4hBbds:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=GmsSUlSKY80:g-mze4hBbds:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=GmsSUlSKY80:g-mze4hBbds:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=GmsSUlSKY80:g-mze4hBbds:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=GmsSUlSKY80:g-mze4hBbds:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=GmsSUlSKY80:g-mze4hBbds:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=GmsSUlSKY80:g-mze4hBbds:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=GmsSUlSKY80:g-mze4hBbds:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=GmsSUlSKY80:g-mze4hBbds:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/GmsSUlSKY80" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/GmsSUlSKY80/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/04/21/Calling-all-Speakers-ndash3b-DotNetNuke-OpenForce-Wants-You!.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=26b8a06e-ec92-4d08-b9ec-b438f5b687e4</guid><pubDate>Tue, 21 Apr 2009 05:00:00 -0900</pubDate><category>DotNetNuke</category><category>OpenForce</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=26b8a06e-ec92-4d08-b9ec-b438f5b687e4</pingback:target><slash:comments>1</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=26b8a06e-ec92-4d08-b9ec-b438f5b687e4</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/04/21/Calling-all-Speakers-ndash3b-DotNetNuke-OpenForce-Wants-You!.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=26b8a06e-ec92-4d08-b9ec-b438f5b687e4</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=26b8a06e-ec92-4d08-b9ec-b438f5b687e4</feedburner:origLink></item><item><title>Polyglot Programming: Death by a thousand DSLs</title><description>&lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/Thedownsidetopolyglotprogramming_ADF3/towerofbabel_2.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px 15px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="towerofbabel" border="0" alt="towerofbabel" align="right" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/Thedownsidetopolyglotprogramming_ADF3/towerofbabel_thumb.jpg" width="254" height="346" /&gt;&lt;/a&gt; In 2006, &lt;a href="http://memeagora.blogspot.com/" rel="contact met" target="_blank"&gt;Neal Ford&lt;/a&gt; wrote a blog post on the topic of &lt;a href="memeagora.blogspot.com/2006/12/polyglot-programming.html" target="_blank"&gt;Polyglot Programming&lt;/a&gt; which foresaw a future where applications will be increasingly built using multiple general purpose languages and domain specific languages.&amp;#160; &lt;a href="http://blogs.tedneward.com/" rel="contact met" target="_blank"&gt;Ted Neward&lt;/a&gt; has a &lt;a href="http://msdn.microsoft.com/en-us/magazine/dd483224.aspx" target="_blank"&gt;recent article&lt;/a&gt; from &lt;a href="http://msdn.microsoft.com/en-us/magazine/default.aspx" target="_blank"&gt;MSDN Magazine&lt;/a&gt; which follows up on this theme with a discussion of Polyglot Programming in .Net.&amp;#160; Both Neal and Ted address some of the issues with Polyglot Programming, but I think there is one that they have missed.&amp;#160; Polyglot Programming can quickly lead to performance rot in application development.&lt;/p&gt;  &lt;p&gt;In &lt;a href="http://blog.theaccidentalgeek.com/post/2009/03/27/DNN-Tips-and-Tricks-10-Reports-Module.aspx" target="_blank"&gt;DNN Tips and Tricks #10&lt;/a&gt;, I presented an example of how you can use the &lt;a title="DotNetNuke" href="http://www.dotnetnuke.com/" target="_blank"&gt;DotNetNuke&lt;/a&gt; &lt;a href="http://www.dotnetnuke.com/Development/Forge/ModuleReports/tabid/970/Default.aspx" target="_blank"&gt;Report Module&lt;/a&gt; to display you data using the advanced capabilities of XSLT.&amp;#160; Greg Lahens pointed out an issue with my SQL code which is really highlights one of the downsides to Polyglot Programming.&amp;#160; As programmers, we often employ a variety of tools to solve a particular programming challenge.&amp;#160; Many of these tools are DSLs – XSLT, SQL, CSS, HTML are just a few of the many DSLs in common use throughout the web development world.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The problem comes into play in that few developers have the luxury of being an expert in every DSL they use.&amp;#160; Most developers I know, are extremely proficient in their primary language – whether it is C#, VB, Java, Ruby or whatever.&amp;#160; Those same developers will often have a working knowledge of the secondary languages and DSLs used in their day to day programming.&amp;#160; Yet the number of DSLs is rapidly expanding.&amp;#160; We have DSLs for styling applications (a different one depending on whether it is Silverlight/WPF or Html), a DSL for transforming data, a DSL for querying data (possibly multiple DSLs for a single depending on how much you trust your ORM), a DSL for searching some text element, and even a DSL for merging our data with our presentation structure and styles, and several DSLs for exposing our data in a raw format to users.&amp;#160; After learning all those DSLs, I then have a handful of additional DSLs to learn to build my application, package it into an installation package, and possibly one more for building the Help files.&amp;#160; Ohh wait.&amp;#160; You are doing automated unit testing right?&amp;#160; You’ll need another couple of DSLs for that.&amp;#160; And let’s not forget the DSL that we use for configuring the application after it is deployed.&lt;/p&gt;  &lt;p&gt;I don’t know about other programmers, but I am drowning in DSLs.&amp;#160; It is hard enough keeping up with my primary development language and the associated platform APIs, but these DSLs are going to be the death of me.&amp;#160; The end result is that I have a pretty decent handle on maybe 3 or 4 of these DSLs but rarely do I have the requisite knowledge to make the right choices in anything beyond that.&amp;#160; Yes I know SQL.&amp;#160; But as Greg Lahens pointed out in my last post, it leaves a lot to be desired in terms of performance.&lt;/p&gt;  &lt;p&gt;Now some might argue that SQL should be handled by a DBA who specializes in SQL.&amp;#160; That is great.&amp;#160; I know have 14 DSLs instead of 15 to learn.&amp;#160; Oh wait.&amp;#160; Sorry, I have just been informed that we don’t have a budget for a dedicated DBA.&amp;#160; So I guess the requests for dedicated XSLT, CSS, and Regex developers probably are not going to be approved either.&amp;#160; In most of the development shops I have worked in, the developer has no choice but to learn many of these DSLs.&amp;#160; Most projects are not large enough to warrant the use of specialists, however almost every project demands great performance and minimal bugs.&amp;#160; One false move in your CSS, XSLT, Regex, JavaScript, SQL or any of the other DSLs in use and you will severely impact the performance of your application.&amp;#160; &lt;/p&gt;  &lt;p&gt;What is worse is that the methods and tools used for testing performance in each DSL is often vastly different.&amp;#160; I have great tools to help me profile my VB/C#/Java code.&amp;#160; Not so much when it comes to CSS, JavaScript, XSLT or many of the other DSLs in use.&amp;#160; And even when good profiling tools exist, learning to use them often requires a significant time investment.&lt;/p&gt;  &lt;p&gt;I don’t know the ultimate solution to this problem, but I do know that every day it is only getting worse.&amp;#160; The Computer Science community is cranking out languages and DSLs at a rapid pace.&amp;#160; On top of that we continue to evolve our development methodologies and architectures such that the average programmer is left wondering how they can possibly keep up.&amp;#160; Sure, the alpha geeks among us will be able to grok it all and crank out applications using the latest DSLs, but the average developer (who make up the vast majority of the programming resources building application today) is being marginalized more and more. I believe that DSLs have their place and certainly provide a lot of value, however we need to take a hard look at where we are going in this profession.&amp;#160; I believe we need to find solutions that meet programmers “where they live” and not “where we want them to be”, by this I mean we need to find solutions to our CS problems that recognize that not all programmers are computer scientists.&amp;#160; Not all programmers have the time or motivation to learn 15 different DSLs just to create an application.&amp;#160; Not all programmers want to learn a new programming methodology because the old methodology is no longer en vogue.&amp;#160; We need to simplify what we are doing so that it doesn’t take an army of specialists to build a decent application.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=1ZmGnJazuM0:1PKgzCz3nu8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=1ZmGnJazuM0:1PKgzCz3nu8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=1ZmGnJazuM0:1PKgzCz3nu8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=1ZmGnJazuM0:1PKgzCz3nu8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=1ZmGnJazuM0:1PKgzCz3nu8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=1ZmGnJazuM0:1PKgzCz3nu8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=1ZmGnJazuM0:1PKgzCz3nu8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=1ZmGnJazuM0:1PKgzCz3nu8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=1ZmGnJazuM0:1PKgzCz3nu8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/1ZmGnJazuM0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/1ZmGnJazuM0/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/04/01/Polyglot-Programming-Death-by-a-thousand-DSLs.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=48b8c738-999e-4bd4-b492-e8b313987a66</guid><pubDate>Wed, 01 Apr 2009 09:36:15 -0900</pubDate><category>Software Development</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=48b8c738-999e-4bd4-b492-e8b313987a66</pingback:target><slash:comments>21</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=48b8c738-999e-4bd4-b492-e8b313987a66</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/04/01/Polyglot-Programming-Death-by-a-thousand-DSLs.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=48b8c738-999e-4bd4-b492-e8b313987a66</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=48b8c738-999e-4bd4-b492-e8b313987a66</feedburner:origLink></item><item><title>DNN Tips and Tricks #10: Reports Module</title><description>&lt;p&gt;&lt;a title="DotNetNuke Tips and Tricks" href="http://blog.theaccidentalgeek.com/category/Tips-and-Tricks.aspx" target="_blank"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="" align="right" src="/pics/dnntipsandtricks.png" width="202" height="202" /&gt;&lt;/a&gt; For the last year and half I have increasingly turned to one module as my goto solution when building out new capabilities.&amp;#160; For me the &lt;a href="http://www.dotnetnuke.com/Development/Forge/ModuleReports/tabid/970/Default.aspx" target="_blank"&gt;Reports Module&lt;/a&gt; is proving itself to be the Swiss Army knife of the &lt;a title="DotNetNuke" href="http://www.dotnetnuke.com/" target="_blank"&gt;DotNetNuke&lt;/a&gt; module world.&amp;#160; With some of the features coming up in future releases of the Reports module this will become even more evident to anyone who takes the time to learn how to use the module. &lt;/p&gt;  &lt;p&gt;So why do I feel so strongly about the reports module? It is mainly because of the architecture that &lt;a title="Reports Module Project Lead" href="http://blog.vibrantcode.com" target="_blank"&gt;Andrew Nurse&lt;/a&gt; put in place to allow you to create custom data sources and custom visualizers.&amp;#160; This architecture makes it easy to get data from almost anywhere and then to have complete control over how it is displayed.&amp;#160; &lt;/p&gt;  &lt;p&gt;For most people the built in DotNetNuke Data Source, and XSLT Visualizer can handle most of your needs.&amp;#160; You can query any data in DotNetNuke and then use XSLT to display that data.&amp;#160; If you have not used XSLT before, you are missing out on a very powerful tool.&amp;#160; Whether it is displaying a blogroll, the MarketPlace Monitor or even building an entire eCommerce site, XSLT gives you a lot of capability to take XML data and transform it into as simple or complex a page as you can imagine. &lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Right now there are three core modules with extensive XSLT capability built in: Forms and Lists, XML, and Reports.&amp;#160; Forms and Lists is a great module, but it forces you to store data in the tables it defines.&amp;#160; XML also has great XSLT functionality, but it only handles XML that is stored in a file or that is retrieved from a URL.&amp;#160; If I want to report on Data, no matter where it is stored, my only option is the Reports module.&amp;#160; The Reports module includes a custom data source that allows you to read UDT data, and it wouldn’t be hard to write a custom data source to read an XML file. &lt;/p&gt;  &lt;p&gt;Even though I love the Reports module, the Forms and Lists, and the XML modules both have some features that are not currently supported by the XSLT engine in the Reports module.&amp;#160; They all have their place in your DotNetNuke arsenal. &lt;/p&gt;  &lt;p&gt;So if your need is just to display some data on the page, and you want something more than a simple table, then the Reports module is the tool for you.&amp;#160; In the rest of this post I’ll walk through a recent requirement I had for our company intranet. &lt;/p&gt;  &lt;p&gt;One common requirement in many intranets is that it should be easy for employees to find out basic contact and organizational information on other employees.&amp;#160; DotNetNuke includes much of this information in the default user profile.&amp;#160; For my purposes I wanted to display the following pieces of employee information: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Name &lt;/li&gt;    &lt;li&gt;Photo &lt;/li&gt;    &lt;li&gt;Job Title &lt;/li&gt;    &lt;li&gt;Department &lt;/li&gt;    &lt;li&gt;Manager &lt;/li&gt;    &lt;li&gt;Phone Numbers (Work, Cell, Fax) &lt;/li&gt;    &lt;li&gt;IM &lt;/li&gt;    &lt;li&gt;Email &lt;/li&gt;    &lt;li&gt;Location (Region, Country and Time Zone) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;With my data elements identified, I can use the built in &lt;em&gt;User Accounts&lt;/em&gt; screen to access the &lt;em&gt;Manage Profile Properties&lt;/em&gt; page.&amp;#160; From here I can add any profile elements I want to capture.&amp;#160; The default set of profile elements cover most of my requirements, and it is easy enough to add any fields which are missing. Now employees can edit their own profiles and we’ll use the reports module to display those profiles.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DNNTipsandTricks10ReportsModule_8B5F/ManageProfile_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ManageProfile" border="0" alt="ManageProfile" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DNNTipsandTricks10ReportsModule_8B5F/ManageProfile_thumb.png" width="537" height="500" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;To configure the reports module, you will need to be logged in with a Host account.&amp;#160; The reason for this requirement is that the SQL query we are building could potentially access any data in the database.&amp;#160; In a multi-portal environment you wouldn’t want one admin access data for another portal to which they didn’t have access.&amp;#160; Since hosts have unlimited access to all data in the system, they are needed for defining the data source. Once the data source is defined then any user with edit permissions will be able to configure the visualizer. &lt;/p&gt;  &lt;p&gt;Go to the module settings page and navigate down to the Data Source Settings section.&amp;#160; For our example, I can use the DotNetNuke Data Source which uses the default dataprovider defined in the web.config.&amp;#160; Then I enter my query.&amp;#160; Finally, I will use the Show &lt;em&gt;Xml Source&lt;/em&gt; link to display the resulting XML from my data source query.&amp;#160; I will save this xml to a separate file so that I can test my XSLT during development. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DNNTipsandTricks10ReportsModule_8B5F/ReportDataSource_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ReportDataSource" border="0" alt="ReportDataSource" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DNNTipsandTricks10ReportsModule_8B5F/ReportDataSource_thumb.png" width="537" height="603" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice in my query that I just select all of the data from a custom view.&amp;#160; You will not have this view on your DotNetNuke installation.&amp;#160; One limitation I found very early with the Reports module is that it stores all of its configuration data in the ModuleSettings and TabModuleSettings tables.&amp;#160; This limits the amount of text I can use for the query.&amp;#160; I know from experience that querying profile data can get very complex and will easily exceed the size limitation of the settings tables.&amp;#160; As a result I almost always create a custom view or stored procedure for my query.&amp;#160; Because each piece of profile data is stored in a separate row of the UserProfile table, we have to do a join between the User table and UserProfile table for each property we want to include.&amp;#160; As you can see from the query below this quickly becomes quite long, although most of the logic is just repeated over and over. &lt;/p&gt;  &lt;pre class="sql" name="code"&gt;SELECT     
    u.UserID, 
    u.FirstName, 
    u.LastName, 
    u.Username, 
    u.Email, 
    u.DisplayName, 
    up1.PropertyValue AS Region, 
    up2.PropertyValue AS Country, 
    up3.PropertyValue AS Telephone, 
    up4.PropertyValue AS Cellphone, 
    up5.PropertyValue AS IM, 
    up6.PropertyValue AS JobTitle, 
    up7.PropertyValue AS Manager, 
    up8.PropertyValue AS Department, 
    up9.PropertyValue AS Fax
FROM
    dbo.Users AS u INNER JOIN
    dbo.UserRoles AS ur ON u.UserID = ur.UserID INNER JOIN
    dbo.Roles AS r ON ur.RoleID = r.RoleID AND 
    r.RoleName = N'Employee' LEFT OUTER JOIN
    (SELECT     
        up.UserID, 
        up.PropertyValue
    FROM
        dbo.UserProfile AS up INNER JOIN
        dbo.ProfilePropertyDefinition AS ppd ON 
        up.PropertyDefinitionID = ppd.PropertyDefinitionID AND 
        ppd.PropertyName = 'Region' AND 
        ppd.PortalID = 0) AS up1 ON u.UserID = up1.UserID LEFT OUTER JOIN
    (SELECT     
        up.UserID, 
        up.PropertyValue
    FROM
        dbo.UserProfile AS up INNER JOIN
        dbo.ProfilePropertyDefinition AS ppd ON 
        up.PropertyDefinitionID = ppd.PropertyDefinitionID AND 
        ppd.PropertyName = 'Country' AND 
        ppd.PortalID = 0) AS up2 ON u.UserID = up2.UserID LEFT OUTER JOIN
    (SELECT     
        up.UserID, 
        up.PropertyValue
    FROM
        dbo.UserProfile AS up INNER JOIN
        dbo.ProfilePropertyDefinition AS ppd ON 
        up.PropertyDefinitionID = ppd.PropertyDefinitionID AND 
        ppd.PropertyName = 'Telephone' AND 
        ppd.PortalID = 0) AS up3 ON u.UserID = up3.UserID LEFT OUTER JOIN
    (SELECT
        up.UserID, 
        up.PropertyValue
    FROM
        dbo.UserProfile AS up INNER JOIN
        dbo.ProfilePropertyDefinition AS ppd ON 
        up.PropertyDefinitionID = ppd.PropertyDefinitionID AND 
        ppd.PropertyName = 'Cell' AND 
        ppd.PortalID = 0) AS up4 ON u.UserID = up4.UserID LEFT OUTER JOIN
    (SELECT
        up.UserID, 
        up.PropertyValue
    FROM
        dbo.UserProfile AS up INNER JOIN
        dbo.ProfilePropertyDefinition AS ppd ON 
        up.PropertyDefinitionID = ppd.PropertyDefinitionID AND 
        ppd.PropertyName = 'IM' AND 
        ppd.PortalID = 0) AS up5 ON u.UserID = up5.UserID LEFT OUTER JOIN
    (SELECT
        up.UserID, 
        up.PropertyValue
    FROM
        dbo.UserProfile AS up INNER JOIN
        dbo.ProfilePropertyDefinition AS ppd ON 
        up.PropertyDefinitionID = ppd.PropertyDefinitionID AND 
        ppd.PropertyName = 'Job_Title' AND 
        ppd.PortalID = 0) AS up6 ON u.UserID = up6.UserID LEFT OUTER JOIN
    (SELECT
        up.UserID, 
        up.PropertyValue
    FROM
        dbo.UserProfile AS up INNER JOIN
        dbo.ProfilePropertyDefinition AS ppd ON 
        up.PropertyDefinitionID = ppd.PropertyDefinitionID AND 
        ppd.PropertyName = 'Manager' AND 
        ppd.PortalID = 0) AS up7 ON u.UserID = up7.UserID LEFT OUTER JOIN
    (SELECT
        up.UserID, 
        up.PropertyValue
    FROM
        dbo.UserProfile AS up INNER JOIN
        dbo.ProfilePropertyDefinition AS ppd ON 
        up.PropertyDefinitionID = ppd.PropertyDefinitionID AND 
        ppd.PropertyName = 'Department' AND 
        ppd.PortalID = 0) AS up8 ON u.UserID = up8.UserID LEFT OUTER JOIN
    (SELECT
        up.UserID, 
        up.PropertyValue
    FROM
        dbo.UserProfile AS up INNER JOIN
        dbo.ProfilePropertyDefinition AS ppd ON 
        up.PropertyDefinitionID = ppd.PropertyDefinitionID AND 
        ppd.PropertyName = 'Fax' AND 
        ppd.PortalID = 0) AS up9 ON u.UserID = up9.UserID&lt;/pre&gt;

&lt;p&gt;Now that we have our data in an xml format (you did remember to use the Show XML Source and save the output to a file, didn’t you) we can turn our attention to defining our XSLT.&amp;#160; Because our final output is html, I like to mockup my output in a web editor.&amp;#160; This makes the XSLT much easier, as editing HTML when you have a bunch of XSLT logic interspersed can get a little tricky depending on the complexity.&amp;#160; Using Expression web I am able to quickly mockup a simple display using the elements previously described. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DNNTipsandTricks10ReportsModule_8B5F/ReportHtmlTemplate_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ReportHtmlTemplate" border="0" alt="ReportHtmlTemplate" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DNNTipsandTricks10ReportsModule_8B5F/ReportHtmlTemplate_thumb.png" width="537" height="103" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;As you can see in the HTML and CSS below, it is not too complicated (and it doesn’t use any tables). &lt;/p&gt;

&lt;pre class="xml" name="code"&gt;&amp;lt;div class=&amp;quot;employee&amp;quot;&amp;gt;
    &amp;lt;img alt=&amp;quot;No Photo Present&amp;quot; height=&amp;quot;100&amp;quot; src=&amp;quot;No.Photo.jpg&amp;quot; width=&amp;quot;75&amp;quot; /&amp;gt;
    &amp;lt;div class=&amp;quot;organization&amp;quot;&amp;gt;
        &amp;lt;h2&amp;gt;Joe Brinkman&amp;lt;/h2&amp;gt;
        &amp;lt;p class=&amp;quot;title&amp;quot;&amp;gt;Technical Fellow, Co-Founder&amp;lt;/p&amp;gt;
        &amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Department:&amp;lt;/span&amp;gt;Engineering &amp;lt;/p&amp;gt;
        &amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Reports to:&amp;lt;/span&amp;gt; Shaun Walker&amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;div class=&amp;quot;contact&amp;quot;&amp;gt;
        &amp;lt;h3&amp;gt;Contact Information&amp;lt;/h3&amp;gt;
        &amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Work Phone:&amp;lt;/span&amp;gt; 555-1212&amp;lt;/p&amp;gt;
        &amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Mobile Phone:&amp;lt;/span&amp;gt; 555-2121&amp;lt;/p&amp;gt;
        &amp;lt;p&amp;gt;&amp;lt;span&amp;gt;IM:&amp;lt;/span&amp;gt; &amp;lt;a href=&amp;quot;mailto:joe.brinkman@tag-software.net&amp;quot;&amp;gt;joe.brinkman@tag-software.net&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
        &amp;lt;p&amp;gt;&amp;lt;span&amp;gt;Location:&amp;lt;/span&amp;gt;&amp;amp;nbsp; OH, United States&amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/pre&gt;

&lt;pre class="css" name="code"&gt;.employee 
{
    padding: 10px;
    border: solid 1px silver;
    margin: 10px;
}
.employee .organization {
    float: left;
    width: 275px;
}
.employee .contact {
    float: left;
    width: 350px;
}
.employee img {
    float: left;
    margin-right: 10px;
}
.employee h2 {
    font-size: 1.2em;
    margin: 5px 0px 5px 0px;
    color: #800000;
}
.employee h3 {
    font-size: 1.1em;
    color: #333;
    margin: 5px 0px 5px 0px;
}
.employee p {
    margin: 0px;
}
.employee p.title {
    font-style: italic;
    margin: -5px 0px 10px 0px;
}
.employee span {
    display: inline-block;
    width: 120px;
    text-align: right;
    padding-right: 5px;
    font-weight: bold;
    color: #808080
}&lt;/pre&gt;

&lt;p&gt;Now we are ready to create our XSLT.&amp;#160; We know what our HTML should look like and we’ll be able to do a quick test as we go to ensure that everything is working correctly.&amp;#160; Visual Studio 2008 includes pretty decent XSLT support, but you can use whatever editor with which you are comfortable.&amp;#160; I used to use XMLSpy from Altova, but have found the XSLT support in VS 2008 meets most of my needs. &lt;/p&gt;

&lt;p&gt;Using my HTML as a template, I am able to quickly put together the XSLT below.&amp;#160; Because my final output is going to be HTML, I indicate that in the XSL:Output tag.&amp;#160; Then I do a quick match on all elements in “//DocumentElement” which is my root document element.&amp;#160; I use this template because I have some html which should only be included on the page one time (the root element by definition only appears once).&amp;#160; From there I apply another template for all of the QueryResults nodes in the XML document.&amp;#160; You will have one node for each record returned by your query.&amp;#160; This second template is where I insert my HTML snippet. &lt;/p&gt;

&lt;p&gt;In the QueryResults template it is a simple matter to replace all of the static data in my sample HTML with an &amp;lt;xsl:value-of select=&amp;quot;&lt;em&gt;ElementName&lt;/em&gt;&amp;quot; /&amp;gt; tag.&amp;#160; You can see my first cut at the XSLT below. &lt;/p&gt;

&lt;pre class="xml" name="code"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot; xmlns:msxsl=&amp;quot;urn:schemas-microsoft-com:xslt&amp;quot; exclude-result-prefixes=&amp;quot;msxsl&amp;quot; &amp;gt;
    
    &amp;lt;xsl:output method=&amp;quot;html&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;

    &amp;lt;xsl:variable name=&amp;quot;baseDir&amp;quot;&amp;gt;http://extranet.dotnetnuke.com/portals/0/Employee&amp;lt;/xsl:variable&amp;gt;
    
    &amp;lt;xsl:template match=&amp;quot;//DocumentElement&amp;quot;&amp;gt;
        &amp;lt;link href=&amp;quot;{$baseDir}/employee.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; /&amp;gt;
        
        &amp;lt;xsl:apply-templates select=&amp;quot;QueryResults&amp;quot; /&amp;gt;

    &amp;lt;/xsl:template&amp;gt;
    
    &amp;lt;xsl:template match=&amp;quot;QueryResults&amp;quot;&amp;gt;
        &amp;lt;div class=&amp;quot;employee&amp;quot;&amp;gt;
            &amp;lt;img alt=&amp;quot;No Photo Present&amp;quot; height=&amp;quot;100&amp;quot; src=&amp;quot;{$baseDir}/No.Photo.jpg&amp;quot; width=&amp;quot;75&amp;quot; /&amp;gt;
            &amp;lt;div class=&amp;quot;organization&amp;quot;&amp;gt;
                &amp;lt;h2&amp;gt;
                    &amp;lt;xsl:value-of select=&amp;quot;DisplayName&amp;quot; /&amp;gt;
                &amp;lt;/h2&amp;gt;
                &amp;lt;p class=&amp;quot;title&amp;quot;&amp;gt;
                    &amp;lt;xsl:value-of select=&amp;quot;JobTitle&amp;quot; /&amp;gt;
                &amp;lt;/p&amp;gt;
                &amp;lt;p&amp;gt;
                    &amp;lt;span&amp;gt;Department:&amp;lt;/span&amp;gt;
                    &amp;lt;xsl:value-of select=&amp;quot;Department&amp;quot; /&amp;gt;
                &amp;lt;/p&amp;gt;
                &amp;lt;p&amp;gt;
                    &amp;lt;span&amp;gt;Reports to: &amp;lt;/span&amp;gt;
                    &amp;lt;xsl:value-of select=&amp;quot;Manager&amp;quot; /&amp;gt;
                &amp;lt;/p&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;div class=&amp;quot;contact&amp;quot;&amp;gt;
                &amp;lt;h3&amp;gt;Contact Information&amp;lt;/h3&amp;gt;
                &amp;lt;p&amp;gt;
                    &amp;lt;span&amp;gt;Work Phone:&amp;lt;/span&amp;gt;
                    &amp;lt;xsl:value-of select=&amp;quot;Telephone&amp;quot; /&amp;gt;
                &amp;lt;/p&amp;gt;
                &amp;lt;p&amp;gt;
                    &amp;lt;span&amp;gt;Mobile Phone:&amp;lt;/span&amp;gt;
                    &amp;lt;xsl:value-of select=&amp;quot;Cellphone&amp;quot; /&amp;gt;
                &amp;lt;/p&amp;gt;
                &amp;lt;p&amp;gt;
                    &amp;lt;span&amp;gt;MSN IM:&amp;lt;/span&amp;gt;
                    &amp;lt;xsl:value-of select=&amp;quot;IM&amp;quot; /&amp;gt;
                &amp;lt;/p&amp;gt;
                &amp;lt;p&amp;gt;
                    &amp;lt;span&amp;gt;Location:&amp;lt;/span&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;Region&amp;quot; /&amp;gt;, &amp;lt;xsl:value-of select=&amp;quot;Country&amp;quot; /&amp;gt;
                &amp;lt;/p&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;p style=&amp;quot;clear:both;&amp;quot;&amp;gt; &amp;lt;/p&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/xsl:template&amp;gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;/pre&gt;

&lt;p&gt;If you understand the HTML from my original template then the XSLT should be pretty straight forward.&amp;#160; Now that I have the XSLT complete I can use Visual Studio to show me the sample rendering.&amp;#160; Select the Show XSLT Output from the XML menu. &lt;/p&gt;

&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ReportsXSLTTest" border="0" alt="ReportsXSLTTest" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DNNTipsandTricks10ReportsModule_8B5F/ReportsXSLTTest_80952923-2ee0-4b76-bdb8-65ca800f3220.png" width="207" height="139" /&gt; &lt;/p&gt;

&lt;p&gt;Visual Studio will ask you for an XML file to use – you should select the XML file with the data we created earlier from our data source.&amp;#160; Visual Studio will now render the HTML output.&amp;#160; If everything goes correctly you are done.&amp;#160; If the display is not exactly what you want then you can tweak the XSLT until everything is perfect.&amp;#160; To help with this, Visual Studio allows you to debug the XSLT.&amp;#160; This means you can set break-points and examine different values as you step through the XSLT.&amp;#160; While that is probably not needed in this case, when you get into more complex pages, you will certainly appreciate this feature. &lt;/p&gt;

&lt;p&gt;In this example I have left out some of the data elements and I haven’t included any complex logic.&amp;#160; If this is your first time with XSLT then I definitely recommend that you start with something easy like the above example.&amp;#160; With a little experience you will find that XSLT is a pretty full-featured language.&amp;#160; There are some idiosyncrasies to get used to, but once you get into it, you will be amazed at the power and flexibility it provides.&amp;#160; &lt;/p&gt;

&lt;p&gt;The next version of the Reports module includes support for XsltExtension objects.&amp;#160; This basically allows you to call custom .Net code from inside your XSLT.&amp;#160; This means you could apply custom business logic in your XSLT that would be impossible to do in XSLT or SQL alone.&amp;#160; You could do something like custom filtering of the displayed data based on the current user’s permissions.&amp;#160; You could call a webservice in a custom extension and then merge the data with the rest of the data being displayed.&amp;#160; You could do browser sniffing to determine how best to format the HTML output. With XsltExtensions you really remove any limitation imposed by the original DataSource or the XSLT language. &lt;/p&gt;

&lt;p&gt;Now that you have the final XSLT, you can configure the XSL Transformation Visualizer.&amp;#160; In this case I have uploaded my Employee.xsl file and left the rest of the settings with the default values.&amp;#160; Depending on your data, you might need to do HTML Encoding or Decoding.&amp;#160; Once everything is working correctly, you should definitely enable caching as well. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DNNTipsandTricks10ReportsModule_8B5F/ReportVisualizer_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ReportVisualizer" border="0" alt="ReportVisualizer" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DNNTipsandTricks10ReportsModule_8B5F/ReportVisualizer_thumb.png" width="537" height="490" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;If you have been following along you should now end up with a display something like the one below.&amp;#160; You can substitute your own “nophoto” picture and set the baseDir in the XSLT, but everything else should work without any difficulty. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DNNTipsandTricks10ReportsModule_8B5F/ReportFinal_4.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ReportFinal" border="0" alt="ReportFinal" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DNNTipsandTricks10ReportsModule_8B5F/ReportFinal_thumb_1.png" width="537" height="353" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;At this point I hope I have shown you some of the power of the Report module when combined with the XSLT Visualizer.&amp;#160; I will leave it as an excercise to the reader to figure out how to handle sorting and paging and how to determine the photo to display.&amp;#160; There are several solutions you can choose depending on your skill and creativity.&amp;#160; For more help on XSLT and XPATH I highly recommend &lt;a href="http://www.w3schools.com"&gt;www.w3schools.com&lt;/a&gt;.&amp;#160; It has just enough information to give you a strong foundation without overwhelming you.&amp;#160; I would definitely be interested to see how you are using the Report module or other XSLT based solutions in your own websites. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After reading Greg Lahens comment I went and did some research to improve my SQL.&amp;#160; I found a great article on &lt;a href="http://www.sqlservercentral.com/articles/T-SQL/63681/" target="_blank"&gt;Cross tabs and Pivots&lt;/a&gt; on SQLServerCentral.com (may require registration). Below is a Query which is much more optimized over the previous version.&amp;#160; While there are still a few minor tweaks that could be done, those tweaks would not significantly improve performance and would require the use of SQL 2005+, so I decided to stick with a simple cross-tab query.&amp;#160; This query dropped the number of reads to one fifth the amount over the previous query (for a small dataset) and as Greg points out, this version is much more readable and maintainable.&lt;/p&gt;

&lt;pre class="sql" name="code"&gt;SELECT
    u.UserID, 
    u.FirstName, 
    u.LastName, 
    u.Username, 
    u.Email, 
    u.DisplayName, 
    upd.Region, 
    upd.Country, 
    upd.Telephone, 
    upd.Cellphone, 
    upd.IM, 
    upd.JobTitle, 
    upd.Manager, 
    upd.Department, 
    upd.Fax
FROM 
    dbo.Users AS u INNER JOIN
    dbo.UserRoles AS ur ON u.UserID = ur.UserID INNER JOIN
    dbo.Roles AS r ON ur.RoleID = r.RoleID AND r.RoleName = N'Employee' LEFT OUTER JOIN
(SELECT     
    up.UserID, 
    MAX(CASE WHEN ppd.PropertyName = 'Region' THEN up.PropertyValue ELSE '' END) AS Region,
    MAX(CASE WHEN ppd.PropertyName = 'Country' THEN up.PropertyValue ELSE '' END) AS Country,
    MAX(CASE WHEN ppd.PropertyName = 'Telephone' THEN up.PropertyValue ELSE '' END) AS Telephone,
    MAX(CASE WHEN ppd.PropertyName = 'Cell' THEN up.PropertyValue ELSE '' END) AS Cellphone,
    MAX(CASE WHEN ppd.PropertyName = 'IM' THEN up.PropertyValue ELSE '' END) AS IM,
    MAX(CASE WHEN ppd.PropertyName = 'Job_Title' THEN up.PropertyValue ELSE '' END) AS JobTitle,
    MAX(CASE WHEN ppd.PropertyName = 'Manager' THEN up.PropertyValue ELSE '' END) AS Manager,
    MAX(CASE WHEN ppd.PropertyName = 'Department' THEN up.PropertyValue ELSE '' END) AS Department,
    MAX(CASE WHEN ppd.PropertyName = 'Fax' THEN up.PropertyValue ELSE '' END) AS Fax
FROM          
    dbo.UserProfile AS up INNER JOIN
    dbo.ProfilePropertyDefinition AS ppd ON up.PropertyDefinitionID = ppd.PropertyDefinitionID and ppd.PortalID = 0
Group By up.UserID) as upd on u.UserID = upd.UserID&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=l7RUvtlf5qA:SCPLU8-wFE4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=l7RUvtlf5qA:SCPLU8-wFE4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=l7RUvtlf5qA:SCPLU8-wFE4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=l7RUvtlf5qA:SCPLU8-wFE4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=l7RUvtlf5qA:SCPLU8-wFE4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=l7RUvtlf5qA:SCPLU8-wFE4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=l7RUvtlf5qA:SCPLU8-wFE4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=l7RUvtlf5qA:SCPLU8-wFE4:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=l7RUvtlf5qA:SCPLU8-wFE4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/l7RUvtlf5qA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/l7RUvtlf5qA/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/03/27/DNN-Tips-and-Tricks-10-Reports-Module.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=3419d0c3-11ca-4760-934f-b9a056a5d63a</guid><pubDate>Fri, 27 Mar 2009 07:09:00 -0900</pubDate><category>DotNetNuke</category><category>Tips and Tricks</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=3419d0c3-11ca-4760-934f-b9a056a5d63a</pingback:target><slash:comments>15</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=3419d0c3-11ca-4760-934f-b9a056a5d63a</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/03/27/DNN-Tips-and-Tricks-10-Reports-Module.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=3419d0c3-11ca-4760-934f-b9a056a5d63a</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=3419d0c3-11ca-4760-934f-b9a056a5d63a</feedburner:origLink></item><item><title>Fit in February &amp;ndash; Final Results</title><description>&lt;p&gt;
&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/FitinFebruaryFinalResults_B418/JoeFitFeb2_2.jpg"&gt;&lt;img style="margin: 0px 0px 10px; width: 112px; display: inline; height: 480px; border: 0px" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/FitinFebruaryFinalResults_B418/JoeFitFeb2_thumb.jpg" border="0" alt="JoeFitFeb2" title="JoeFitFeb2" hspace="10" width="112" height="480" align="right" /&gt;&lt;/a&gt; During the month of February I &lt;a href="http://blog.theaccidentalgeek.com/post/2009/02/01/Fit-in-February-ndash3b-And-so-it-begins.aspx"&gt;joined the FitFeb program&lt;/a&gt; in an effort to improve my overall fitness.&amp;nbsp; My goal was to get down to 200 lbs by the end of the month.&amp;nbsp; I fell short of my goal, but still made good progress.&amp;nbsp; Overall, I ended the month at 210 lbs &amp;ndash; down 9 lbs over the course of the month.&amp;nbsp; That is a significant accomplishment given that I had significant travel time during the month which makes it difficult to stay on track.&amp;nbsp; This also means that since New Years day I have lost 17 lbs, which works out to about 2 lbs a week.&amp;nbsp; That is not a bad result, and is on track with weight loss goals recommended by many physicians and nutrionists.
&lt;/p&gt;
&lt;p&gt;

&lt;/p&gt;
&lt;p&gt;
While my weight loss was acceptable, I fell far short of my workout goals.&amp;nbsp; I was only able to keep on the 100Pushup plan for a week and a half.&amp;nbsp; Better than nothing, but not good enough for me.&amp;nbsp; I plan to get back on track as I continue my weight loss and workout throughout the spring until I reach my final goal of getting back down to my military weight (about 25 more lbs).
&lt;/p&gt;
&lt;p&gt;
One aspect that I am proud of is that I stayed disciplined all month in tracking my weight loss.&amp;nbsp; For me this is one of the most important parts of my regimen.&amp;nbsp; Tracking my weight on a daily basis motivates me to stay on plan.&amp;nbsp; Overall, I think FitFeb was beneficial and want to thank Caleb Jenkins for coordinating the program and helping to keep me motivated.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/FitinFebruaryFinalResults_B418/WeightLoss_2.png"&gt;&lt;img style="margin: 0px 0px 10px; display: inline; border: 0px" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/FitinFebruaryFinalResults_B418/WeightLoss_thumb.png" border="0" alt="WeightLoss" title="WeightLoss" width="500" height="271" /&gt;&lt;/a&gt;
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=5EtZzg_Q2rM:BBz7JmmsQmU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=5EtZzg_Q2rM:BBz7JmmsQmU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=5EtZzg_Q2rM:BBz7JmmsQmU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=5EtZzg_Q2rM:BBz7JmmsQmU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=5EtZzg_Q2rM:BBz7JmmsQmU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=5EtZzg_Q2rM:BBz7JmmsQmU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=5EtZzg_Q2rM:BBz7JmmsQmU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=5EtZzg_Q2rM:BBz7JmmsQmU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=5EtZzg_Q2rM:BBz7JmmsQmU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/5EtZzg_Q2rM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/5EtZzg_Q2rM/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/03/11/Fit-in-February-ndash3b-Final-Results.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=416ca849-3de0-4f1a-9a34-eddd1a1c62bc</guid><pubDate>Wed, 11 Mar 2009 08:06:00 -0900</pubDate><category>Personal</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=416ca849-3de0-4f1a-9a34-eddd1a1c62bc</pingback:target><slash:comments>2</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=416ca849-3de0-4f1a-9a34-eddd1a1c62bc</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/03/11/Fit-in-February-ndash3b-Final-Results.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=416ca849-3de0-4f1a-9a34-eddd1a1c62bc</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=416ca849-3de0-4f1a-9a34-eddd1a1c62bc</feedburner:origLink></item><item><title>Reflecting on the FitFeb Challenge</title><description>&lt;p&gt;
Now that the FitFeb challenge has wrapped up, I thought I would record some of my reflections on this past month. 
&lt;/p&gt;
&lt;div&gt;
&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="425" height="344"&gt;
	&lt;param name="width" value="425" /&gt;
	&lt;param name="height" value="344" /&gt;
	&lt;param name="src" value="http://www.youtube.com/v/RGXHX679gUM&amp;amp;hl=en&amp;amp;fs=1" /&gt;
	&lt;param name="allowfullscreen" value="true" /&gt;
	&lt;param name="allowscriptaccess" value="always" /&gt;
	&lt;embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/RGXHX679gUM&amp;amp;hl=en&amp;amp;fs=1" allowfullscreen="true" allowscriptaccess="always"&gt;&lt;/embed&gt;
&lt;/object&gt;
&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=4QXy77hKwwo:YZcJfxzuhNU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=4QXy77hKwwo:YZcJfxzuhNU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=4QXy77hKwwo:YZcJfxzuhNU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=4QXy77hKwwo:YZcJfxzuhNU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=4QXy77hKwwo:YZcJfxzuhNU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=4QXy77hKwwo:YZcJfxzuhNU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=4QXy77hKwwo:YZcJfxzuhNU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=4QXy77hKwwo:YZcJfxzuhNU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=4QXy77hKwwo:YZcJfxzuhNU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/4QXy77hKwwo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/4QXy77hKwwo/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/03/01/Reflecting-on-the-FitFeb-Challenge.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=9e9616e3-7e0e-4c81-9617-1cdd16be459e</guid><pubDate>Sun, 01 Mar 2009 10:58:00 -0900</pubDate><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=9e9616e3-7e0e-4c81-9617-1cdd16be459e</pingback:target><slash:comments>0</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=9e9616e3-7e0e-4c81-9617-1cdd16be459e</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/03/01/Reflecting-on-the-FitFeb-Challenge.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=9e9616e3-7e0e-4c81-9617-1cdd16be459e</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=9e9616e3-7e0e-4c81-9617-1cdd16be459e</feedburner:origLink></item><item><title>DotNetNuke 5.0.1 Released</title><description>&lt;p&gt;&lt;a href="http://www.dotnetnuke.com/"&gt;&lt;img title="logo" border="0" alt="logo" align="right" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNuke4.9.2isnowavailable_9C89/logo_3056fb18-928a-4639-8ac2-9cd99e945b11.gif" width="240" height="74" /&gt;&lt;/a&gt;&lt;a title="DotNetNuke" href="http://www.dotnetnuke.com/" target="_blank"&gt;DotNetNuke&lt;/a&gt; 5.0.1 represents the latest release for the 5.x codebase.&amp;#160; While we have made significant strides in dealing with the most significant issues discovered in the 5.0.0 release, it is still not at a level where we recommend this release for production use.&amp;#160; DotNetNuke 4.9.2 still represents our most stable and mature release and is recommended for most users.&lt;/p&gt;  &lt;p&gt;As always you can see a complete list with all the details of each fix/change in the &lt;a href="http://support.dotnetnuke.com/project/ChangeLog.aspx?PROJID=2"&gt;ChangeLog&lt;/a&gt;.&lt;/p&gt;  &lt;h3 class="SubSubHead"&gt;Major Highlights&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Added the ability to automatically update user roles without requiring the user to logout and log back in. &lt;/li&gt;    &lt;li&gt;Changed the user deletion code to use a soft-delete rather than removing the user record.&amp;#160; This ensures that modules like the Forums behave correctly for a previously &amp;quot;deleted&amp;quot; user. &lt;/li&gt;    &lt;li&gt;Added IP logging to the User's table to capture the last IP address from which a user logged in. &lt;/li&gt;    &lt;li&gt;Fixed breaking change with case sensitivity in the name of skin panes.&amp;#160; This fix restores the case-insensitivity of previous DotNetNuke releases. &lt;/li&gt;    &lt;li&gt;Fixed breaking change with ModuleId in DotNetNuke 5.0 which changed ModuleId to a readonly value. &lt;/li&gt;    &lt;li&gt;Fixed breaking change in CBO.FillDictionary to restore previous behavior. &lt;/li&gt;    &lt;li&gt;Fixed breaking change which prevented legacy skins from being installed when using the auto-install option. &lt;/li&gt;    &lt;li&gt;Fixed breaking change which prevented updated DLLs from being replaced when repairing a module installation. &lt;/li&gt;    &lt;li&gt;Fixed breaking change in HumanFriendlyUrls which prevented querystrings from being properly read when using HumanFriendlyUrls &lt;/li&gt;    &lt;li&gt;Fixed breaking change in legacy modules which would not store a zip file which was not designated as a resource file. &lt;/li&gt;    &lt;li&gt;Fixed breaking change in legacy modules which ignored zip directories.&amp;#160; DNN 5 changed this behavior. &lt;/li&gt;    &lt;li&gt;Fixed breaking change in default.css which resulted in changes to existing skin layouts. &lt;/li&gt;    &lt;li&gt;Fixed issue with roles module which prevented users from delegating role administration to a non-admin user. &lt;/li&gt;    &lt;li&gt;Fixed issue which prevented some users from logging out due to the inability of the system to detect their country. &lt;/li&gt;    &lt;li&gt;Fixed issue with Module Action Menu which prevented it from opening links in new windows. &lt;/li&gt;    &lt;li&gt;Fixed issue that results in an error when the Cache logs an error under the new CACHE_ERROR event type &lt;/li&gt;    &lt;li&gt;Fixed a packaging issue with FCKEditor which caused the LinkEditor to cause an unhandled exception. &lt;/li&gt;    &lt;li&gt;Fixed an issue which resulted in the system not being able to display the portalaliases screen &lt;/li&gt; &lt;/ul&gt;  &lt;h3 class="SubSubHead"&gt;Security Fixes&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Fixed version information leakage issue in the install wizard &lt;/li&gt; &lt;/ul&gt;  &lt;h3 class="SubSubHead"&gt;Updated Modules/Providers&lt;/h3&gt;  &lt;p&gt;The following modules and providers have been updated in the 5.0.1 packages.&amp;#160; Please see the specific project pages for notes on what bugs or enhancements were corrected with each release.&lt;/p&gt;  &lt;h4 class="SubSubHead"&gt;Modules&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;Forms and List 05.00.00 &lt;/li&gt; &lt;/ul&gt;  &lt;h4 class="SubSubHead"&gt;Providers&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;FckHtmlEditorProvider 2.0.3 &lt;/li&gt;    &lt;li&gt;AD Provider 05.00.01 &lt;/li&gt; &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=d6UVwVjKm7w:VF7urta7Erg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=d6UVwVjKm7w:VF7urta7Erg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=d6UVwVjKm7w:VF7urta7Erg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=d6UVwVjKm7w:VF7urta7Erg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=d6UVwVjKm7w:VF7urta7Erg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=d6UVwVjKm7w:VF7urta7Erg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=d6UVwVjKm7w:VF7urta7Erg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=d6UVwVjKm7w:VF7urta7Erg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=d6UVwVjKm7w:VF7urta7Erg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/d6UVwVjKm7w" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/d6UVwVjKm7w/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/02/25/DotNetNuke-501-Released.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=91137b4b-6cdf-4498-841d-55a55a54bbbd</guid><pubDate>Wed, 25 Feb 2009 13:57:41 -0900</pubDate><category>DotNetNuke</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=91137b4b-6cdf-4498-841d-55a55a54bbbd</pingback:target><slash:comments>9</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=91137b4b-6cdf-4498-841d-55a55a54bbbd</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/02/25/DotNetNuke-501-Released.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=91137b4b-6cdf-4498-841d-55a55a54bbbd</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=91137b4b-6cdf-4498-841d-55a55a54bbbd</feedburner:origLink></item><item><title>DotNetNuke Community Edition 4.9.2 Released</title><description>&lt;p&gt;&lt;a title="DotNetNuke" href="http://www.dotnetnuke.com/" target="_blank"&gt;&lt;img style="border-right-width: 0px; margin: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="logo" border="0" alt="logo" align="right" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNuke4.9.2isnowavailable_9C89/logo_3056fb18-928a-4639-8ac2-9cd99e945b11.gif" width="240" height="74" /&gt; DotNetNuke&lt;/a&gt; 4.9.2 represents the final planned release for the 4.x codebase.&amp;#160; The DotNetNuke 4.x platform has been in production since the launch of Visual Studio 2005 and it is finally time to shift our focus to the new DotNetNuke 5.x platform.&amp;#160; We have a lot of great features planned for development and release in 2009, many of which have been high on the list of requested features for some time.&lt;/p&gt;  &lt;p&gt;As always you can see a complete list with all the details of each fix/change in the &lt;a href="http://support.dotnetnuke.com/project/ChangeLog.aspx?PROJID=2"&gt;ChangeLog&lt;/a&gt;.&lt;/p&gt;  &lt;h3 class="SubSubHead"&gt;Major Highlights&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Added the ability to perform permanent redirect from an existing page using the page settings screen. &lt;/li&gt;    &lt;li&gt;Fixed issue with the permanent forms authentication cookie which cause problems in SSO environments. &lt;/li&gt;    &lt;li&gt;Fixed issue which required a workaround to import page templates into a portal &lt;/li&gt;    &lt;li&gt;Fixed a caching issue which prevented modules from being properly cached if they used a specific caching method overload &lt;/li&gt;    &lt;li&gt;Fixed issue which resulted in an error installing the Broadcast Polling Provider &lt;/li&gt;    &lt;li&gt;Fixed tab redirect issue which allowed a user to directly navigate to a tab which was supposed to redirect to another URL &lt;/li&gt;    &lt;li&gt;Fixed a continuous redirect issue which occurred when trying to upgrade from early 4.x releases to 4.9.1 &lt;/li&gt; &lt;/ul&gt;  &lt;h3 class="SubSubHead"&gt;Security Fixes&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;None &lt;/li&gt; &lt;/ul&gt;  &lt;h3 class="SubSubHead"&gt;Updated Modules/Providers&lt;/h3&gt;  &lt;p&gt;The following modules and providers have been updated in the 4.9.2 packages.&amp;#160; Please see the specific project pages for notes on what bugs or enhancements were corrected with each release.&lt;/p&gt;  &lt;h4 class="SubSubHead"&gt;Modules&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;None &lt;/li&gt; &lt;/ul&gt;  &lt;h4 class="SubSubHead"&gt;Providers&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;FckEditor Provider 2.0.3 &lt;/li&gt; &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=S5qpKtlYXSQ:ibRXjnFoRCU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=S5qpKtlYXSQ:ibRXjnFoRCU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=S5qpKtlYXSQ:ibRXjnFoRCU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=S5qpKtlYXSQ:ibRXjnFoRCU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=S5qpKtlYXSQ:ibRXjnFoRCU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=S5qpKtlYXSQ:ibRXjnFoRCU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=S5qpKtlYXSQ:ibRXjnFoRCU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=S5qpKtlYXSQ:ibRXjnFoRCU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=S5qpKtlYXSQ:ibRXjnFoRCU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/S5qpKtlYXSQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/S5qpKtlYXSQ/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/02/17/DotNetNuke-Community-Edition-492-Released.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=d2277fdf-09df-4794-88c0-e95efa8592b8</guid><pubDate>Tue, 17 Feb 2009 06:59:31 -0900</pubDate><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=d2277fdf-09df-4794-88c0-e95efa8592b8</pingback:target><slash:comments>1</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=d2277fdf-09df-4794-88c0-e95efa8592b8</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/02/17/DotNetNuke-Community-Edition-492-Released.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=d2277fdf-09df-4794-88c0-e95efa8592b8</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=d2277fdf-09df-4794-88c0-e95efa8592b8</feedburner:origLink></item><item><title>DotNetNuke &amp;ndash; Coming soon to a CodePlex near you!</title><description>&lt;p&gt;
&lt;img style="margin: 0px 0px 10px 10px; display: inline; border: 0px" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeUpcomingReleases_4CF4/DNN_Release_6cb8c9ee-17f3-48e9-a533-27d2d8b6c80d.jpg" border="0" alt="DNN_Release" title="DNN_Release" width="248" height="338" align="right" /&gt; Now that the holidays are through and we have had a chance to assess and fix a number of issues reported in &lt;a href="http://www.dotnetnuke.com/" target="_blank" title="DotNetNuke"&gt;DotNetNuke&lt;/a&gt; 4.9.1 and 5.0.0, we are just about ready to release DNN 4.9.2 and 5.0.1.&amp;nbsp; To avoid some of the confusion with a dual release we are going to stagger the two releases. 
&lt;/p&gt;
&lt;p&gt;
DotNetNuke 4.9.2 will be released on Monday, February 16th.&amp;nbsp; DotNetNuke 5.0.1 will be released the following Monday, February 23rd.&amp;nbsp; Barring any major hidden show-stopping issues, DotNetNuke 4.9.2 will be the final 4.x release and all future development will focus on the 5.0 platform. 
&lt;/p&gt;
&lt;p&gt;
As usual we will post release notes when we make the final releases. 
&lt;/p&gt;
&lt;p&gt;
As part of our annual planning we have completed our roadmap for our 2009 development which we&amp;rsquo;ll be updating shortly on the DotNetNuke.com website. 
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=jDG5Ob89nE4:-rBMpR9mkZU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=jDG5Ob89nE4:-rBMpR9mkZU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=jDG5Ob89nE4:-rBMpR9mkZU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=jDG5Ob89nE4:-rBMpR9mkZU:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=jDG5Ob89nE4:-rBMpR9mkZU:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=jDG5Ob89nE4:-rBMpR9mkZU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=jDG5Ob89nE4:-rBMpR9mkZU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=jDG5Ob89nE4:-rBMpR9mkZU:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=jDG5Ob89nE4:-rBMpR9mkZU:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/jDG5Ob89nE4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/jDG5Ob89nE4/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/02/13/DotNetNuke-ndash3b-Coming-soon-to-a-CodePlex-near-you!.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=ecd2b4c4-66f9-4264-82f5-2819a812591e</guid><pubDate>Fri, 13 Feb 2009 01:35:00 -0900</pubDate><category>DotNetNuke</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=ecd2b4c4-66f9-4264-82f5-2819a812591e</pingback:target><slash:comments>2</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=ecd2b4c4-66f9-4264-82f5-2819a812591e</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/02/13/DotNetNuke-ndash3b-Coming-soon-to-a-CodePlex-near-you!.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=ecd2b4c4-66f9-4264-82f5-2819a812591e</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=ecd2b4c4-66f9-4264-82f5-2819a812591e</feedburner:origLink></item></channel>
</rss>
