﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>The Mighty Blog</title>
    <description>I am a self-proclaimed DotNetNuke Evangelist, but I also use it daily. In the DNN world, I am a programmer, DBA, architect, business analyst, speaker, tutorial writer, administrator, and just overall a DNN junkie... Therefore, you may see a few posts here that are not DNN or .Net related, but for the most part it will be all DNN all day - every day!  Every day is DotNetNuke day!</description>
    <link>http://www.willstrohl.com/Blog/tabid/66/BlogId/1/Default.aspx</link>
    <language>en-US</language>
    <managingEditor>wills@strohlsitedesign.com</managingEditor>
    <webMaster>wills@strohlsitedesign.com</webMaster>
    <pubDate>Fri, 03 Jul 2009 19:16:36 GMT</pubDate>
    <lastBuildDate>Fri, 03 Jul 2009 19:16:36 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>Blog RSS Generator Version 3.5.1.0</generator>
    <item>
      <title>Upcoming .Net Community Events in Florida</title>
      <description>&lt;p&gt;There are quite a few events coming up in Florida in the next few months. They are all free, and most will give you the opportunity to win free stuff just for showing up. Awesome!  If you find yourself in or around any of these events, I strongly recommend you stop by.  I have been to most of them, and they are great.&lt;/p&gt;  &lt;p&gt;All of the following information came from the &lt;a href="http://orlando.dotnetnukeug.net/" target="_blank"&gt;Orlando DotNetNuke® Users Group&lt;/a&gt; (&lt;a href="http://orlando.dotnetnukeug.net/" target="_blank"&gt;ODUG&lt;/a&gt;) website.  See our &lt;a href="http://orlando.dotnetnukeug.net/Events.aspx" target="_blank"&gt;events page&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;July 9&lt;/strong&gt; - &lt;a href="http://orlando.dotnetnukeug.net/WhatsNew/Events/tabid/91/ctl/Details/Mid/428/ItemID/107/Default.aspx?selecteddate=7/9/2009" target="_blank"&gt;Orlando DotNetNuke® Users Group&lt;/a&gt;    &lt;br /&gt;Will Strohl (nobody) will be talking about the Core DNN Blog Module.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;July 14&lt;/strong&gt; – &lt;a href="http://opass.org" target="_blank"&gt;Orlando PASS&lt;/a&gt;    &lt;br /&gt;Chad Miller will be discussing Powershell with SQL Server.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;July 15&lt;/strong&gt; – &lt;a href="http://www.scdnug.org/Events.aspx" target="_blank"&gt;Space Coast .Net User Group&lt;/a&gt;    &lt;br /&gt;Oleg Sych will be presenting on VSTS and TFS.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;July 16&lt;/strong&gt; – &lt;a href="http://www.onetug.org/sf/events/onetugevents.aspx" target="_blank"&gt;Orlando .Net User Group&lt;/a&gt;    &lt;br /&gt;Joe Healy (Microsoft Developer Evangelist) will be speaking about the developer features in IE8.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;July 16&lt;/strong&gt; – &lt;a href="http://spacecoast.sqlpass.org/" target="_blank"&gt;Space Coast SQL User Group&lt;/a&gt;    &lt;br /&gt;Don King and Clay Seifert will be each presenting a different session. They will be speaking about SQL Server 2005 Clustering and SQL Server Analysis Services, respectively.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;July 21&lt;/strong&gt; – &lt;a href="http://www.cfdotnet.org/" target="_blank"&gt;Lakeland .Net User Group&lt;/a&gt;    &lt;br /&gt;This user group will be holding a session entitled “Lakeland’s .Net Speaker Idol” and it promises to be a fun time, where you will see speakers compete against each other for prizes.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;August 4&lt;/strong&gt; – &lt;a href="http://orlando.dotnetnukeug.net/WhatsNew/Events/tabid/91/ctl/Details/Mid/428/ItemID/115/Default.aspx?selecteddate=8/4/2009" target="_blank"&gt;Orlando DotNetNuke® Users Group&lt;/a&gt;    &lt;br /&gt;DNN author, Darren Neese will be showing the new features in the DNN skinning engine.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;August 18&lt;/strong&gt; – &lt;a href="http://www.scdnug.org/Events.aspx" target="_blank"&gt;Space Coast .Net User Group&lt;/a&gt;    &lt;br /&gt;Topic and speaker TBA. (sorry…)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;August 20&lt;/strong&gt; – &lt;a href="http://www.onetug.org/sf/events/onetugevents.aspx" target="_blank"&gt;Orlando .Net User Group&lt;/a&gt;    &lt;br /&gt;Christopher Bennage (MVP) will be showing the attendees SilverArcade.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;August 20&lt;/strong&gt; – &lt;a href="http://spacecoast.sqlpass.org/" target="_blank"&gt;Space Coast SQL User Group&lt;/a&gt;    &lt;br /&gt;Joe Healy (Microsoft Developer Evangelist) shows the group SQL Server 2008 enhancements from a developers perspective.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;August 29&lt;/strong&gt; – &lt;a href="http://www.jaxcodecamp.com" target="_blank"&gt;Jacksonville Code Camp&lt;/a&gt;    &lt;br /&gt;The Jax Code Camp crew overcame some very challenging obstacles last year. I was extremely impressed.  I expect them to put on a great event again this year.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;September 5&lt;/strong&gt; – &lt;a href="http://tlhdotnet.org/CodeCampV/tabid/155/Default.aspx" target="_blank"&gt;Tallahassee Code Camp&lt;/a&gt;    &lt;br /&gt;Tallahassee Code Camp was a great time last year.  They always have some great presenters on-hand.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;September 10&lt;/strong&gt; – &lt;a href="http://spacecoast.sqlpass.org/" target="_blank"&gt;Space Coast SQL User Group&lt;/a&gt;    &lt;br /&gt;Jack Corbett will be presenting a yet to be determined topic.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;November 5&lt;/strong&gt; – &lt;a href="http://orlando.dotnetnukeug.net/WhatsNew/Events/tabid/91/ctl/Details/Mid/428/ItemID/108/Default.aspx?selecteddate=11/5/2009" target="_blank"&gt;Orlando DotNetNuke® Users Group&lt;/a&gt;    &lt;br /&gt;DNN Blog Project Team Lead, Antonio Chagoury, will be presenting “Mashing Up Your DotNetNuke Using RESTful APIs.”&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:7a6eea05-ee4f-4386-841a-d1cd36fb8012" 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/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/.Net" rel="tag"&gt;.Net&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Code+Camp" rel="tag"&gt;Code Camp&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Events" rel="tag"&gt;Events&lt;/a&gt;,&lt;a href="http://technorati.com/tags/User+Group" rel="tag"&gt;User Group&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ODUG" rel="tag"&gt;ODUG&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Orlando+DotNetNuke+Users+Group" rel="tag"&gt;Orlando DotNetNuke Users Group&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ONETUG" rel="tag"&gt;ONETUG&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Orlando+.Net+User+Group" rel="tag"&gt;Orlando .Net User Group&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Space+Coast+SQL+User+Group" rel="tag"&gt;Space Coast SQL User Group&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Space+Coast+.Net+User+Group" rel="tag"&gt;Space Coast .Net User Group&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/tabid/66/EntryId/427/Upcoming-Net-Community-Events-in-Florida.aspx</link>
      <category domain="http://www.willstrohl.com/blog/tabid/66/blogid/3/default.aspx">Professional Edition</category>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/tabid/66/EntryId/427/Upcoming-Net-Community-Events-in-Florida.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/tabid/66/EntryId/427/Upcoming-Net-Community-Events-in-Florida.aspx</guid>
      <pubDate>Thu, 02 Jul 2009 15:10:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=427</trackback:ping>
    </item>
    <item>
      <title>How to Manually Delete A DotNetNuke Module</title>
      <description>&lt;p&gt;I was recently asked how someone could manually delete a module once it is installed. The number of use cases where this would be useful is limited, but it is still a valid scenario that needs to be considered – especially during development.  Here is a walk through of the general steps required to delete a module manually.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Run the Uninstall script (if necessary) &lt;/li&gt;    &lt;li&gt;Delete the module files from the &lt;font face="Courier New"&gt;DesktopModules&lt;/font&gt; and &lt;font face="Courier New"&gt;App_Code&lt;/font&gt; folder &lt;/li&gt;    &lt;li&gt;Grab the &lt;font face="Courier New"&gt;DesktopModuleId&lt;/font&gt; &lt;/li&gt;    &lt;li&gt;Delete the permissions associated with the module &lt;/li&gt;    &lt;li&gt;Delete the module from the database &lt;/li&gt;    &lt;li&gt;Refresh the site cache to update the UI with your changes &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;font size="2"&gt;While I have not fully verified these steps to be the same in DNN version 5.x, they should generally be the same.  Here is some guidance to follow each of the defined steps above…&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;WARNING!&lt;/strong&gt;  Performing these steps incorrectly could result in your DNN site being broken and/or no longer accessible.  In some cases, this might be permanent.  It is HIGHLY recommended that you perform a complete backup of your database and file system before performing these steps.  Doing so will give you a restore point, should something go wrong.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;h4&gt;Run the Uninstall Script&lt;/h4&gt;  &lt;p&gt;&lt;font size="2"&gt;Not all modules require a Data Access Layer (DAL), as some modules only perform utility functions and do not need to save and retrieve information from the database.  The majority of the module out there do have a DAL though, and in turn will have an uninstall script in their folder.  Look for a file named &lt;strong&gt;Uninstall.SqlDataProvider&lt;/strong&gt; in the DesktopModules folder for the module you’re deleting.  Here is a reference path for you to use:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;~/DesktopModules/&lt;module name&gt;/Uninstall.SqlDataProvider&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Assuming your module is named “WNSUtility”, the above path would look like this:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;~/DesktopModules/WNSUtility/Uninstall.SqlDataProvider&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Using the &lt;strong&gt;SQL Module&lt;/strong&gt; in the &lt;strong&gt;Host Menu&lt;/strong&gt;, execute this script.  Be sure to load the script, and then check the checkbox for &lt;strong&gt;Run as Script&lt;/strong&gt; before you execute it.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;u&gt;Please Note&lt;/u&gt;:  If you are using a different Data Provider, the file extension for your uninstall script will be different.&lt;/font&gt;&lt;/p&gt;  &lt;h4&gt;Delete the Module Files&lt;/h4&gt;  &lt;p&gt;&lt;font size="2"&gt;Deleting the files from a module is easy.  Find the module directory for your module.  Using the example from above, it would be:&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;~/DesktopModules/WNSUtility/&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Delete all files from that directory, and the directory itself.  You might run into one or more errors do to files being loaded into memory.  Should this happen, you can release the file(s) from memory by recycling the Application Pool, or restarting IIS.&lt;/font&gt;&lt;/p&gt;  &lt;h4&gt;Grab the DesktopModuleId&lt;/h4&gt;  &lt;p&gt;&lt;font size="2"&gt;This is a very important step, as the final two steps would be incredibly difficult without the &lt;strong&gt;DesktopModuleId&lt;/strong&gt;.  There is not always an exact science to finding the DesktopModuleId, but we will need it for the following steps.  In most cases, I simply perform the following query on the database:&lt;/font&gt;&lt;/p&gt;  &lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 500px; padding-right: 4px; font-family: consolas, 'Courier New', courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;   &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; * &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; [dbo].[DesktopModules] &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; [IsAdmin] = 0 &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;BY&lt;/span&gt; [FriendlyName] &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;-- or &lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;SELECT&lt;/span&gt; * &lt;span style="color: #0000ff"&gt;FROM&lt;/span&gt; {databaseOwner}{objectQualifier}DesktopModules &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; [IsAdmin] = 0 &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;ORDER&lt;/span&gt; &lt;span style="color: #0000ff"&gt;BY&lt;/span&gt; [FriendlyName] &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;font size="2"&gt;From the above script, locating the module in question is usually easy.  Simply find the module using its Friendly Name, and then record the DesktopModuleID associated with it. &lt;/font&gt;&lt;/p&gt;

&lt;h4&gt;Delete the Module Permissions&lt;/h4&gt;

&lt;p&gt;&lt;font size="2"&gt;This step gets executed in three parts.  As long as there aren’t a lot of instances of the module in your site, these queries should execute quickly, and error free.&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="2"&gt;Using the DesktopModuleId from the previous step, execute the &lt;strong&gt;GetModuleDefinitions&lt;/strong&gt; stored procedure, taking note of each &lt;strong&gt;ModuleDefID&lt;/strong&gt;.  For each module definition returned, you will next need to execute the &lt;strong&gt;GetPermissionsByModuleDefID&lt;/strong&gt; stored procedure, this time taking note of each &lt;strong&gt;PermissionID&lt;/strong&gt;.  Finally, execute the &lt;strong&gt;DeletePermission&lt;/strong&gt; stored procedure for each PermissionID that was returned.&lt;/font&gt;&lt;/p&gt;

&lt;h4&gt;Delete the Module from the Database&lt;/h4&gt;

&lt;p&gt;&lt;font size="2"&gt;Now, we actually delete the module.  Doing so is very easy.  Like the previous step, we just need to execute a stored procedure using the DesktopModuleID we grabbed a little while ago.  Execute the &lt;strong&gt;DeleteDesktopModule&lt;/strong&gt; stored procedure to delete the module.&lt;/font&gt;&lt;/p&gt;

&lt;h4&gt;Refresh the Site Cache&lt;/h4&gt;

&lt;p&gt;&lt;font size="2"&gt;The final thing to do is to clear the cache on the site to remove the module from all of the user interface, such as the drop down lists.  You just need to clear the cache on the site.  I have blogged about &lt;a href="http://www.willstrohl.com/DNNCache.aspx" target="_blank"&gt;clearing the DNN site cache&lt;/a&gt; before.&lt;/font&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:c2727dd4-d0c2-4b4b-889f-6418cb64f222" 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/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Module+Development" rel="tag"&gt;Module Development&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/tabid/66/EntryId/426/How-to-Manually-Delete-A-DotNetNuke-Module.aspx</link>
      <category domain="http://www.willstrohl.com/blog/tabid/66/blogid/3/default.aspx">Professional Edition</category>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/tabid/66/EntryId/426/How-to-Manually-Delete-A-DotNetNuke-Module.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/tabid/66/EntryId/426/How-to-Manually-Delete-A-DotNetNuke-Module.aspx</guid>
      <pubDate>Sun, 28 Jun 2009 22:31:00 GMT</pubDate>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=426</trackback:ping>
    </item>
    <item>
      <title>Changing the Default Favicon for Your Site</title>
      <description>&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="DotNetNuke Gear Logo" border="0" alt="DotNetNuke Gear Logo" align="left" src="/Portals/1/Blog/Files/3/425/WLW-ChangingtheDefaultFaviconforYourSite_479-dnn_gear_white_bg_72x77_3.png" width="76" height="81" /&gt; In &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt;, a favicon of the DNN gear logo is placed as the default favicon.  For some websites, this is no big deal.  However, for any site that requires its own branding, changing the favicon is a really big requirement.  Luckily, DNN makes changing this easy, and flexible.&lt;/p&gt;  &lt;p&gt;First of all, in the root of your DNN site, there are two favicons:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;favicon.ico&lt;/li&gt;    &lt;li&gt;DotNetNuke.ico&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font size="2"&gt;Both files contain the same image, the DNN gear.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;You could just overwrite the favicon file with your own.  However, that is technically making a core code change, and if you end up putting a second portal on your DNN instance, both sites will be using the same favicon.  This will likely put you into the same position that you originally were in, in the first place.&lt;/p&gt;  &lt;p&gt;The real solution is to put your favicon into the root of your portal directory, saved as &lt;font face="Courier New"&gt;favicon.ico&lt;/font&gt;.  For example, for the root site, your file name and path might match the following:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;~/Portals/0/favicon.ico&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;When your site is loaded, the DNN framework will automatically grab and send the new favicon to the web browser, instead of the one on the root of your DNN installation.  This will work for each and every portal that you have as part of this single DNN instance.  For example, if you have 50 portals hosted in your DNN instance, each one can have its own unique favicon using this method.&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:401ae43c-eb00-4241-894f-b95e4b68fbcc" 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/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Favicon" rel="tag"&gt;Favicon&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/tabid/66/EntryId/425/Changing-the-Default-Favicon-for-Your-Site.aspx</link>
      <category domain="http://www.willstrohl.com/blog/tabid/66/blogid/3/default.aspx">Professional Edition</category>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/tabid/66/EntryId/425/Changing-the-Default-Favicon-for-Your-Site.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/tabid/66/EntryId/425/Changing-the-Default-Favicon-for-Your-Site.aspx</guid>
      <pubDate>Sun, 28 Jun 2009 04:33:00 GMT</pubDate>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=425</trackback:ping>
    </item>
    <item>
      <title>ODUG Celebrates it’s One Year INETA Anniversary</title>
      <description>&lt;p&gt;The &lt;a href="http://orlando.dotnetnukeug.net/" target="_blank"&gt;Orlando DotNetNuke® Users Group&lt;/a&gt; (&lt;a href="http://orlando.dotnetnukeug.net/" target="_blank"&gt;ODUG&lt;/a&gt;) is not very old.  We are still working toward finishing our second year as a user group.  Our first meeting was February of 2008.  However, it was several months later before we actually were able to claim our status as member of &lt;a href="http://www.ineta.org/" target="_blank"&gt;INETA&lt;/a&gt;.  Well, a few days ago I was reminded of this, as there was a package that showed up for me at work.&lt;/p&gt;  &lt;p&gt;Looking at the package, I was confused since it was from &lt;a href="http://www.ineta.org/" target="_blank"&gt;INETA&lt;/a&gt;.  I wasn’t expecting any packages, much less one from &lt;a href="http://www.ineta.org/" target="_blank"&gt;INETA&lt;/a&gt;.  When I opened it, I was greeted with a pleasant surprise.  It was a mounted certificate, celebrating our one year anniversary with the &lt;a href="http://www.ineta.org/" target="_blank"&gt;INETA&lt;/a&gt; user group program.&lt;/p&gt;  &lt;p&gt;For those of you who are not sure what that means… &lt;a href="http://www.ineta.org/" target="_blank"&gt;INETA&lt;/a&gt; sponsors user groups in a way that most other organizations cannot.  It gives support in a number of ways to user group leaders.  The most notable way they sponsor user groups comes in the form of flying in speakers.  &lt;a href="http://www.ineta.org/" target="_blank"&gt;INETA&lt;/a&gt; provides two speakers per year, with all of their expenses paid.  So far, we have only used one of these.  &lt;a href="http://www.ineta.org/" target="_blank"&gt;INETA&lt;/a&gt; flew in Chris Hammond to us earlier this year.  We are already planning to use our 2nd one in December of this year.&lt;/p&gt;  &lt;p&gt;I have only one thing to say, “Thank you, INETA!”&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:8df8119d-0824-4952-90ae-82efb6fadbc2" 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/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/INETA" rel="tag"&gt;INETA&lt;/a&gt;,&lt;a href="http://technorati.com/tags/User+Group" rel="tag"&gt;User Group&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ODUG" rel="tag"&gt;ODUG&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Orlando+DotNetNuke+Users+Group" rel="tag"&gt;Orlando DotNetNuke Users Group&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/tabid/66/EntryId/424/ODUG-Celebrates-it-rsquo-s-One-Year-INETA-Anniversary.aspx</link>
      <category domain="http://www.willstrohl.com/blog/tabid/66/blogid/3/default.aspx">Professional Edition</category>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/tabid/66/EntryId/424/ODUG-Celebrates-it-rsquo-s-One-Year-INETA-Anniversary.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/tabid/66/EntryId/424/ODUG-Celebrates-it-rsquo-s-One-Year-INETA-Anniversary.aspx</guid>
      <pubDate>Sun, 28 Jun 2009 00:06:00 GMT</pubDate>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=424</trackback:ping>
    </item>
    <item>
      <title>Comparing the DotNetNuke Podcasts</title>
      <description>&lt;p&gt;I wasn’t really listening to podcasts until a few months ago.  I just really didn’t find anything that truly interested me to the point of putting down my personal 60+ GB of music and streaming my favorite radio stations.  Not to mention, I am a fan of the popular streaming service known as &lt;a href="http://www.pandora.com" target="_blank"&gt;Pandora&lt;/a&gt;.  Anyway, I found the &lt;a href="http://www.dotnetnukepodcast.com" target="_blank"&gt;DotNetNuke Podcast&lt;/a&gt; about that time, and shortly after, &lt;a href="http://www.dnnvoice.com" target="_blank"&gt;DNN Voice&lt;/a&gt; was born.  Since I am so passionate about &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt;, I began listening.  Right now, I only know of those two DNN podcasts.&lt;/p&gt;  &lt;p&gt;I have been listening to both podcasts for a while now.  Honestly, I like them both.  They have a different focus, and because of that focus, both are going to have a different fan base.  &lt;/p&gt;  &lt;h4&gt;DotNetNuke Podcast&lt;/h4&gt;  &lt;p&gt;&lt;strong&gt;&lt;a href="http://www.dotnetnukepodcast.com" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="DotNetNuke Podcast" border="0" alt="DotNetNuke Podcast" align="left" src="/Portals/1/Blog/Files/3/423/WLW-ComparingtheDotNetNukePodcasts_13E6E-DNNCreative_3.png" width="244" height="196" /&gt;&lt;/a&gt; Address:&lt;/strong&gt;  &lt;a href="http://www.dotnetnukepodcast.com" target="_blank"&gt;http://www.dotnetnukepodcast.com&lt;/a&gt;    &lt;br /&gt;&lt;strong&gt;Host(s):&lt;/strong&gt;  Lee Sykes and Richard Wooten &lt;em&gt;(cannot find personal blog links)&lt;/em&gt;    &lt;br /&gt;&lt;strong&gt;Background:&lt;/strong&gt;  Lee Sykes is the original person behind the &lt;a href="http://www.dnncreative.com" target="_blank"&gt;DNN Creative Magazine&lt;/a&gt; website, which sells DNN tutorials and videos.  It has become one of the primary places to get DNN “how to” information on the Internet.  Richard Wooten is also part of &lt;a href="http://www.dnncreative.com" target="_blank"&gt;DNN Creative&lt;/a&gt;, since February of 2008.  Both have been using DNN for a long time, and have a great deal of knowledge in using DNN.&lt;/p&gt;  &lt;p&gt;It is fun to listen to the &lt;a href="http://www.dotnetnukepodcast.com" target="_blank"&gt;DotNetNuke Podcast&lt;/a&gt;.  Lee and Richard have a great chemistry, and it translates well into the podcast.  They basically speak about of the new things that they have heard about in the DNN ecosystem.  It almost feels like they each have a separate list of bullet points.  They talk about community news and information, but it usually not very much of their podcast.  Overall, they have some great information.&lt;/p&gt;  &lt;p&gt;I love their summary on their website for each episode.  While it doesn’t look like their is a whole lot of organization to the information, it is well laid out for us to follow along on their site.  There is an RSS feed that is available to you to help you keep track of new episodes.  I have also seen Lee promote the shows on twitter.  Since I check twitter more often than I do my RSS reader, that’s how I usually get informed of the newest episodes.&lt;/p&gt;  &lt;p&gt;In their &lt;a href="http://www.dotnetnukepodcast.com/AboutUs/tabid/56/Default.aspx" target="_blank"&gt;About Us&lt;/a&gt; page, they ask for community input for the show.  That is really cool.  I haven’t noticed them mention any of their content coming from this feature though.&lt;/p&gt;  &lt;p&gt;Some of their ecosystem “news” is sponsored.  While I understand why, and I don’t disagree with it (I am beginning something similar on my blog), I would much rather hear about ecosystem products and news that they find interesting or are passionate about for personal reasons.  In the end, it is still good information though, so it isn’t a deal breaker at all for me.&lt;/p&gt;  &lt;p&gt;I am disappointed that community information doesn’t take a higher priority in the information they pass on to their listeners.  In my opinion, the community information is often more important than the ecosystem information.  Sure, they mention something about community here and there, but it is clearly not as much of a priority as I think it should be.&lt;/p&gt;  &lt;p&gt;Something I really do not enjoy is the other tech news that get injected into the podcast, and this is a deal breaker.  The podcast is called “DotNetNuke Podcast”.  When I listen to it, I do not expect or want to hear about other technologies unless they have a relationship to the word “DotNetNuke”.&lt;/p&gt;  &lt;h4&gt;DNN Voice&lt;/h4&gt; &lt;strong&gt;&lt;a href="http://www.dnnvoice.com" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="DNNVoice" border="0" alt="DNNVoice" align="left" src="/Portals/1/Blog/Files/3/423/WLW-ComparingtheDotNetNukePodcasts_13E6E-DNNVoice_3.png" width="244" height="183" /&gt;&lt;/a&gt; Address:&lt;/strong&gt;  &lt;a href="http://www.dnnvoice.com" target="_blank"&gt;http://www.dnnvoice.com&lt;/a&gt;  &lt;br /&gt;&lt;strong&gt;Host(s):&lt;/strong&gt;  &lt;a href="http://weblogs.asp.net/christoc" target="_blank"&gt;Chris Hammond&lt;/a&gt; and &lt;a href="http://seablick.com/blog" target="_blank"&gt;Tom Kraak&lt;/a&gt;  &lt;br /&gt;&lt;strong&gt;Background:&lt;/strong&gt;  Chris Hammond is a DNN Core Team Member, and the Project Lead for the Wiki Module.  In addition, he is the for &lt;a href="http://www.engagesoftware.com" target="_blank"&gt;Engage Software&lt;/a&gt;, the Official &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; training provider.  Tom Kraak is an SEO Expert and principle consultant at &lt;a href="http://seablick.com" target="_blank"&gt;Seablick Consulting&lt;/a&gt;, specializing in the DNN ecosystem.  Like Richard and Lee, Chris and Tom have been using DNN for quite a while and have a great deal of DNN knowledge.  &lt;p&gt;&lt;u&gt;Full Disclosure&lt;/u&gt;:  Even though I feel that I am pretty good at being objective, I do feel that it’s only fair to let you know that I have developed a personal relationship with Tom and Chris.  We speak regularly on twitter and the IM, and I have had them speak at our &lt;a href="http://orlando.dotnetnukeug.net/" target="_blank"&gt;ODUG&lt;/a&gt; meetings.  Also, I did give some input to Chris about the podcast for the first few episodes.  So, while I believe that my review here is completely objective, you can use your own judgment and form your own opinion when I am done.&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://www.dnnvoice.com" target="_blank"&gt;DNN Voice&lt;/a&gt; podcast is very well-structured.  I has a pre-defined format that it follows the same path for nearly every episode.  For those of us that are techies (most of the audience), it gives us the routine that we typically enjoy.  I really like that the various sections have an audible queue to let us know when the next section is coming, and what it is.  Like the radio, it helps us to know when the next segment is coming.&lt;/p&gt;  &lt;p&gt;Similar to Richard and Lee, Chris and Tom also have a great chemistry and it comes across well during the podcast.  Both podcasts do a great job of keeping each episode fun in the same way.  It sounds like we are eavesdropping on two friends having a good time talking about technology.&lt;/p&gt;  &lt;p&gt;DNN Voice places a much higher emphasis on listener input by making it a prominent link on all pages on the site.  They also make this part of each episode, making it clear to the listener that their input is not only welcome, but they might hear it on the show.&lt;/p&gt;  &lt;p&gt;In general, I do not think that we could have a podcast that isn’t sponsored in some way.  We must find a way to justify the time we spend on projects such as this.  DNN Voice’s sponsorship is less transparent than the previous podcast.  It is clear that the podcast has an affiliation with Engage.  Once again, this is not a deal breaker.&lt;/p&gt;  &lt;p&gt;The main thing I really love about &lt;a href="http://www.dnnvoice.com" target="_blank"&gt;DNN Voice&lt;/a&gt; is that it appears to be a much better mix of community and ecosystem information.  This is very important to me.  In my opinion, the ecosystem is only successful and exists because of the community.&lt;/p&gt;  &lt;p&gt;Like the &lt;a href="http://www.dotnetnukepodcast.com" target="_blank"&gt;DotNetNuke Podcast&lt;/a&gt;, &lt;a href="http://www.dnnvoice.com" target="_blank"&gt;DNN Voice&lt;/a&gt; makes its announcements for the podcast available through RSS and twitter.  However, DNN Voice takes this a step further by making the show available as a subscription through Zune and iTunes.  Also, while both podcasts offer up a comments mechanism on their site, &lt;a href="http://www.dnnvoice.com" target="_blank"&gt;DNN Voice&lt;/a&gt; takes this another step further by allowing their visitors to rate each individual podcast.&lt;/p&gt;  &lt;h4&gt;In Conclusion&lt;/h4&gt;  &lt;p&gt;Each podcast definitely has its own focus and specialty.  &lt;a href="http://www.dotnetnukepodcast.com" target="_blank"&gt;DotNetNuke Podcast&lt;/a&gt; seems to cater to the DNN’er who is mostly concerned about technology in general, and the DNN ecosystem.  &lt;a href="http://www.dnnvoice.com" target="_blank"&gt;DNN Voice&lt;/a&gt; appears to have its focus pointing directly at the DNN community member, and still includes more information, but stays within the DNN umbrella.  &lt;/p&gt;  &lt;p&gt;I think it’s clear that I prefer &lt;a href="http://www.dnnvoice.com" target="_blank"&gt;DNN Voice&lt;/a&gt; over the &lt;a href="http://www.dotnetnukepodcast.com" target="_blank"&gt;DotNetNuke Podcast&lt;/a&gt;.  However, I cannot say that one is better than the other.  That depends on what you want in a podcast.  They each fill a void in the DNN podcast market.  However, all of the voids are not yet filled… Any new podcasters out there? :)&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:eab1495d-6f9e-4026-bcff-3f759510609f" 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/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Podcast" rel="tag"&gt;Podcast&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Review" rel="tag"&gt;Review&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/tabid/66/EntryId/423/Comparing-the-DotNetNuke-Podcasts.aspx</link>
      <category domain="http://www.willstrohl.com/blog/tabid/66/blogid/3/default.aspx">Professional Edition</category>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/tabid/66/EntryId/423/Comparing-the-DotNetNuke-Podcasts.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/tabid/66/EntryId/423/Comparing-the-DotNetNuke-Podcasts.aspx</guid>
      <pubDate>Sat, 27 Jun 2009 01:03:00 GMT</pubDate>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=423</trackback:ping>
    </item>
    <item>
      <title>Review: Lenny’s Sub Shop in Tampa, FL</title>
      <description>&lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1247_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="Lenny's Sub Shop in Tampa, FL" border="0" alt="Lenny's Sub Shop in Tampa, FL" align="left" src="/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1247_thumb.jpg" width="260" height="200" /&gt;&lt;/a&gt; Today, part of the family and I had to go to &lt;strong&gt;Tampa, Florida&lt;/strong&gt; for an appointment.  Of course, when the appointment was over, it was after lunchtime.  We proceeded to look for a place to eat near us.  We ended up finding what looked like another small business sub shop from the outside.  I soon found out I was wrong, but it was still a great visit!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1265_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px 5px; display: inline; border-top: 0px; border-right: 0px" title="Lenny's Sub Shop in Tampa, FL" border="0" alt="Lenny's Sub Shop in Tampa, FL" align="right" src="/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1265_thumb.jpg" width="200" height="260" /&gt;&lt;/a&gt; What I thought was a small-time sub shop turned out to be a nationwide chain of franchise stores.  There are 13 so far in the state of &lt;strong&gt;Florida&lt;/strong&gt;, with one in &lt;strong&gt;Orlando&lt;/strong&gt;, and 3 in &lt;strong&gt;Tampa&lt;/strong&gt;.  Something confuses me about my post-visit research of this place though.  Their door says, “&lt;em&gt;Delicious Subs &amp; Philly Cheesesteaks Since 1979&lt;/em&gt;.”  Yet, their own website says that the first location opened their doors in 1998, in &lt;strong&gt;Memphis, Tenneessee&lt;/strong&gt;.  That’s quite a discrepancy in dates, and a poor display of branding.  For a restaurant that appears to put a lot of effort in branding (see pictures below), I was pretty disappointed.  &lt;/p&gt;  &lt;p&gt;They have branded everything in the store, from the chips to hot pepper relish, and signs to napkins and everything in between.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1255_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Lenny's Sub Shop: Branded Chips, Cups, and Napkins" border="0" alt="Lenny's Sub Shop: Branded Chips, Cups, and Napkins" src="/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1255_thumb.jpg" width="520" height="395" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1249_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Lenny's Sub Shop: Branded Pepper Relish, Cookies, and Chips" border="0" alt="Lenny's Sub Shop: Branded Pepper Relish, Cookies, and Chips" src="/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1249_thumb.jpg" width="520" height="395" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The location in Tampa that we visited was in &lt;strong&gt;North Tampa&lt;/strong&gt; on &lt;strong&gt;Fowler Avenue&lt;/strong&gt;, which is actually known as &lt;strong&gt;Temple Terrace&lt;/strong&gt;.  They’re even part of the local &lt;strong&gt;Chamber of Commerce&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The service was &lt;u&gt;really&lt;/u&gt; outstanding&lt;/strong&gt;.  For those of you that follow my blog, you know that of all things in the world, I am most critical of customer service.  The two gentlemen working up front really did a great job of taking care of us, and making sure that everything we wanted was taken care of.  It was definitely a challenging visit for them too.  Kim had a really bad headache, the Coke tasted like the syrup was low, and the women’s toilet was out of order.  We reported the the latter 2 things to them, and they were extremely accommodating of our requests.&lt;/p&gt;  &lt;p&gt;The prices appeared to be average of what we’d expect to pay in any other sub shop in Tampa, or Orlando.  However, the upcharge for making a sandwich a meal (a choice of chips or a cookie, and a medium soda) is a whopping $2.09 for a regular sized meal.  However, large sandwiches have additional $0.30 for the upcharge, and it’s not clear why.  My drink was the same size as everyone else’s.  &lt;/p&gt;  &lt;p&gt;They serve Coke products, and accept the major credit cards.  This is always a plus for me, as I rarely carry cash.  They also do not use preprocessed meats in the sense that they cut all of their meats onsite.  &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1260_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Lenny's Sub Shop: Meat Slicer" border="0" alt="Lenny's Sub Shop: Meat Slicer" src="/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1260_thumb.jpg" width="520" height="395" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;There were only 3 of us there today: Kim, Paige, and I.  Here is what we ordered…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1251_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="Lenny's Sub Shop: Chicken Salad Sandwich" border="0" alt="Lenny's Sub Shop: Chicken Salad Sandwich" align="left" src="/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1251_thumb.jpg" width="260" height="200" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Kim ordered the &lt;strong&gt;Chicken Salad sandwich&lt;/strong&gt;.  It was #17 on the order board, and came with the typical options for their sandwiches.  She chose wheat bread, and no other toppings, just plain.  I tried her sandwich, and she made a great choice.  The chicken salad is delicious all on its own.  I found it to be full of flavor, moist, and the chicken was definitely white meat and fresh.  The wheat bread was soft all over, and not even the least bit chewy – perfect!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1257_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px 5px; display: inline; border-top: 0px; border-right: 0px" title="Lenny's Sub Shop: Kids Hot Dog" border="0" alt="Lenny's Sub Shop: Kids Hot Dog" align="right" src="/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1257_thumb.jpg" width="200" height="260" /&gt;&lt;/a&gt; Paige ordered the &lt;strong&gt;Kids Hot Dog&lt;/strong&gt; (#25).  She had a choice of having ketchup and mustard on it, and a wheat or white bun (not a hot dog bun).  There are other toppings that I am sure she could have chosen too.  Like the other meals, she had a choice of chips or a cookie.  She chose &lt;strong&gt;Salt &amp; Vinegar Chips&lt;/strong&gt;.  They were incredible!  I wonder if they have their own brand, or if they rebrand someone else’s chips.  I didn’t try her hot dog though, and I am not sure what brand of hot dogs they use.&lt;/p&gt;  &lt;p&gt;Finally, it comes to me.  I find that the defining moment for any sub shop on my first visit to any sub shop is how they make their &lt;strong&gt;Philly Cheesesteak&lt;/strong&gt;.  If I like it, I will return and I will like the restaurant.  Otherwise, they permanently lost my business.  If your Philly Cheesesteak sucks, please take the word “sub” out of your business name.  &lt;/p&gt;  &lt;p&gt;I do feel that I need to qualify my statement and my upcoming review of the sub.  I am not one of those people that says that a Philly Cheesesteak needs to have any specific ingredients, or be cooked any specific way.  I find such a thought to be close minded.  Imagine if we felt the same way about pizza.  We’d only have a cheese pizza.  Food would be so boring if people did not put their own personal touches on a meal or dish.  And just think about how few options we’d have in our daily restaurant selection.  I believe that a Philly Cheesesteak begins with steak, cheese, peppers, and onions on a sub roll.  From there, it’s whatever you decide.&lt;/p&gt;  &lt;p&gt;I ordered the &lt;strong&gt;Philly Cheesesteak&lt;/strong&gt;.  Like the other subs, I had the choice of regular or large.  I thought this meant 6-inch or foot long.  I was very wrong.  Apparently, this meant 1 sub or two.  Hehehe…  Among my other choices, I selected: wheat bread, lettuce, mayo, tomato, cheese, peppers, and their popular hot pepper relish.  The relish was incredible!  I have had similar relishes before, and they are so good!  Just spicy enough to enjoy the flavor, with a touch of sweet to spike that extra bit entertainment into your palate.  I also had their &lt;strong&gt;Jalapeno Chips&lt;/strong&gt;, which tasted really good as well.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1258_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Lenny's Sub Shop: Philly Cheesesteak" border="0" alt="Lenny's Sub Shop: Philly Cheesesteak" src="/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1258_thumb.jpg" width="520" height="395" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;As you can see from the above picture, the large sub looks like two regulars.&lt;/p&gt;  &lt;p&gt;I can sum up their philly in one word: DELICIOUS!  The meat was tender and tasty.  It tasted like it was definitely marinated, and kept moist before serving.  The lettuce was typical lettuce and the same with the tomatoes – nothing special about them unfortunately.  Everything about the sub appeared to be above average.  The peppers and onions were just as delicious as the meat, and the hot pepper relish was a perfect compliment for the rest of the ingredients.  It made my mouth do the happy dance!&lt;/p&gt;  &lt;h4&gt;In Conclusion&lt;/h4&gt;  &lt;p&gt;Overall, our visit to Lenny’s Sub Shop was a really great visit.  It was a lucky find, for sure.  We enjoyed the service, and the food was delicious.  They really seem to have their own flavor, for a chain.  Typically, you find a homogenized menu and meals at chains.  Despite a broken toilet, the place looked clean.  The prices do not make you run out the door.  I would say that my only piece of constructive criticism would be to buy fresher produce, perhaps from local growers.  &lt;/p&gt;  &lt;p&gt;Give them a try!  I am sure that you will enjoy your visit like we did.  &lt;/p&gt;  &lt;p&gt;Here are some final pictures of the location we visited:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1262_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Lenny's Sub Shop: Order Board" border="0" alt="Lenny's Sub Shop: Order Board" src="/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1262_thumb.jpg" width="520" height="395" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1264_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Lenny's Sub Shop: Restaurant" border="0" alt="Lenny's Sub Shop: Restaurant" src="/Portals/1/Blog/Files/2/422/WLW-ReviewLennysSubShopinTampaFL_10A58-IMG_1264_thumb.jpg" width="520" height="395" /&gt;&lt;/a&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:92491056-46b0-44ad-b7f3-c3666df36692" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Review" rel="tag"&gt;Review&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Restaurant" rel="tag"&gt;Restaurant&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Lenny's+Sub+Shop" rel="tag"&gt;Lenny's Sub Shop&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Philly+Cheesesteak" rel="tag"&gt;Philly Cheesesteak&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Franchise" rel="tag"&gt;Franchise&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Tampa" rel="tag"&gt;Tampa&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Florida" rel="tag"&gt;Florida&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/tabid/66/EntryId/422/Review-Lenny-rsquo-s-Sub-Shop-in-Tampa-FL.aspx</link>
      <category domain="http://www.willstrohl.com/blog/tabid/66/blogid/2/default.aspx">Personal Edition</category>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/tabid/66/EntryId/422/Review-Lenny-rsquo-s-Sub-Shop-in-Tampa-FL.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/tabid/66/EntryId/422/Review-Lenny-rsquo-s-Sub-Shop-in-Tampa-FL.aspx</guid>
      <pubDate>Sat, 27 Jun 2009 00:09:00 GMT</pubDate>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=422</trackback:ping>
    </item>
    <item>
      <title>How to Add a User to a Role Programmatically</title>
      <description>&lt;p&gt;There may come a time when you will want to programmatically add a user to an existing role in &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt;.  It’s actually quite easy.  If you take a look at how the core code in DNN does it, just emulate that.  This method of using and reusing the existing DNN core code is what DNN development is supposed to be about, so make sure you don’t reinvent the wheel.&lt;/p&gt;  &lt;p&gt;In the source code for &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt;, there is a controller class for nearly everything that you want to do with the various objects that you work with in DNN every day.  Since I am familiar with the DNN source, I knew where to go.  But many people are not familiar with the source code.  In those cases, you need to either do some searches in the Object Browser, or browse around until you find the code you’re looking for.  Thinking it through logically, you can usually browse right to the code you’re looking for since the core team has done a fantastic job of keeping the code files organized.&lt;/p&gt;  &lt;p&gt;Keep all of that in mind, I immediately gravitated to the Security folder of the Components directory.  I did this because roles are part of the security framework in DNN, and all of the entities and objects are in the Components folder.  Inside this folder, I saw and opened the &lt;strong&gt;RolesController.vb&lt;/strong&gt; file.  To make this clear, I opened the following file in the DNN source code:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;~/Library/Components/Security/Roles/RoleController.vb&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The controller classes are usually what we are looking for when we want to utilize the existing logic in DNN.  So, if I want to manage a role by putting someone into it, I naturally wanted to look for a Role Controller already – before I even opened the source code solution.&lt;/p&gt;  &lt;p&gt;One of the methods of the &lt;font face="Courier New"&gt;RoleController&lt;/font&gt; class is &lt;font face="Courier New"&gt;AddUserRole()&lt;/font&gt;, and it has a few overloads.  We are only concerned about the root method right now.  This method accepts a few arguments, and when successfully called, it adds an existing user to an existing role.&lt;/p&gt;  &lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 500px; padding-right: 4px; font-family: consolas, 'Courier New', courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;   &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;RoleController.AddUserRole(&lt;span style="color: #0000ff"&gt;integer&lt;/span&gt; PortalID, &lt;span style="color: #0000ff"&gt;integer&lt;/span&gt; UserId, _ &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;integer&lt;/span&gt; RoleId, &lt;span style="color: #0000ff"&gt;date&lt;/span&gt; EffectiveDate, &lt;span style="color: #0000ff"&gt;date&lt;/span&gt; ExpiryDate)&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Using this method may look self-explanatory, but I will explain it anyway.  When you intend to use this method, you should already have access to an existing &lt;font face="Courier New"&gt;UserInfo&lt;/font&gt; object, and a &lt;font face="Courier New"&gt;RoleInfo&lt;/font&gt; object.  Both are regularly available through standard module development. &lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;PortalID&lt;/strong&gt; (integer) – This is the id number representing the portal where the user and role exist.  The SqlDataProvider will use this value to correctly match up the objects. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;UserId&lt;/strong&gt; (integer) – This is the id number matching the user that you want to add to a role.  Most often, you would simply access this value from the &lt;font face="Courier New"&gt;PortalModuleBase&lt;/font&gt; class that your module inherits. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;RoleId&lt;/strong&gt; (integer) – The id number of the role can be found from any number of ways.  We can only assume that you already have access to this right now. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;EffectiveDate&lt;/strong&gt; (date) – This is the date that you want the role assignment to begin.  Usually, the current date is what you’re intending to pass to this argument.  This argument accepts a null value. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;ExpiryDate&lt;/strong&gt; (date) – This should be the date that you want the role assignment to expire, and as a result, the user will be removed from it.  This argument accepts a null value. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;font size="2"&gt;In more recent versions of DNN, there is also another value which we do not pass to the method.&lt;/font&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;CreatedByUserID&lt;/strong&gt; (integer) – This is a value implemented for auditing purposes, to let us know who added the person to the role. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;font size="2"&gt;Let’s assume that we have a &lt;font face="Courier New"&gt;UserID&lt;/font&gt; of &lt;strong&gt;123&lt;/strong&gt; and a &lt;font face="Courier New"&gt;RoleID&lt;/font&gt; of &lt;strong&gt;10&lt;/strong&gt;.  Going further, we will also assume that this is a first instance of a portal, equaling a &lt;font face="Courier New"&gt;PortalID&lt;/font&gt; of &lt;strong&gt;0&lt;/strong&gt;.  The most common role assignments do not pass an &lt;font face="Courier New"&gt;EffectiveDate&lt;/font&gt; or an &lt;font face="Courier New"&gt;ExpiryDate&lt;/font&gt;.  We will use this as an example as well.  Here is how we would call the method:&lt;/font&gt;&lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 500px; padding-right: 4px; font-family: consolas, 'Courier New', courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;' we are assuming that you already have an intRoleId from your logic&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;RoleController.AddUserRole(&lt;span style="color: #0000ff"&gt;Me&lt;/span&gt;.PortalID, &lt;span style="color: #0000ff"&gt;Me&lt;/span&gt;.UserId, intRoleId)&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;' ... or ...&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;' Here we assume a role assignment for 30 days, beginning now&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;RoleController.AddUserRole(&lt;span style="color: #0000ff"&gt;Me&lt;/span&gt;.PortalID, &lt;span style="color: #0000ff"&gt;Me&lt;/span&gt;.UserId, intRoleId, DateTime.Now, DateTime.Now.AddDays(30))&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;That’s all there is to it! :) Easy, right?&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:122833b2-c1f2-4a70-a128-eba389b56710" 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/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Membership" rel="tag"&gt;Membership&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Code" rel="tag"&gt;Code&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Core" rel="tag"&gt;Core&lt;/a&gt;,&lt;a href="http://technorati.com/tags/API" rel="tag"&gt;API&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/tabid/66/EntryId/421/How-to-Add-a-User-to-a-Role-Programmatically.aspx</link>
      <category domain="http://www.willstrohl.com/blog/tabid/66/blogid/3/default.aspx">Professional Edition</category>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/tabid/66/EntryId/421/How-to-Add-a-User-to-a-Role-Programmatically.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/tabid/66/EntryId/421/How-to-Add-a-User-to-a-Role-Programmatically.aspx</guid>
      <pubDate>Fri, 26 Jun 2009 00:07:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=421</trackback:ping>
    </item>
    <item>
      <title>Web Browser Market Share from My Perspective</title>
      <description>&lt;p&gt;The trend recently seems to be that comments and topics are brought up on twitter, and they end up growing to be something more outside of it – especially in the world of &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;http://www.willstrohl.com/a&gt; that I have immersed myself in.  Today was no different.  A fellow &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/www.twibes.comhttp://www.willstrohl.com/grouphttp://www.willstrohl.com/dotnetnuke" target="_blank"&gt;DNN twibe&lt;http://www.willstrohl.com/a&gt; member and also a member of the &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/orlando.dotnetnukeug.net" target="_blank"&gt;Orlando DotNetNuke® Users Group&lt;http://www.willstrohl.com/a&gt; (&lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/orlando.dotnetnukeug.net" target="_blank"&gt;ODUG&lt;http://www.willstrohl.com/a&gt;), &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/www.mikevandermeulen.com" target="_blank"&gt;Mike van der Meulen&lt;http://www.willstrohl.com/a&gt;, &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/twitter.comhttp://www.willstrohl.com/1mikevdmhttp://www.willstrohl.com/statuseshttp://www.willstrohl.com/2331122558" target="_blank"&gt;gave me a friendly jab&lt;http://www.willstrohl.com/a&gt; about using &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/www.getfirefox.com" target="_blank"&gt;FireFox&lt;http://www.willstrohl.com/a&gt;.  He said:&lt;http://www.willstrohl.com/p&gt;  &lt;blockquote&gt;   &lt;p&gt;God! Why do you people all use FF, the rest of the world doesn’t :-)&lt;http://www.willstrohl.com/p&gt; &lt;http://www.willstrohl.com/blockquote&gt;  &lt;p&gt;That provoked a thought in me, “what &lt;u&gt;is&lt;http://www.willstrohl.com/u&gt; the current market share for the web browsers?”  Not being a scientific study, I proceed to check 3 sources: &lt;a href="http://www.willstrohl.com/" target="_blank"&gt;my blog&lt;http://www.willstrohl.com/a&gt;, &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/www.w3schools.comhttp://www.willstrohl.com/browsershttp://www.willstrohl.com/browsers_stats.asp" target="_blank"&gt;W3Schools&lt;http://www.willstrohl.com/a&gt;, and &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/www.rezhub.comhttp://www.willstrohl.com/" target="_blank"&gt;RezHub&lt;http://www.willstrohl.com/a&gt;.  They each have a different demographic.  &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/www.w3schools.comhttp://www.willstrohl.com/browsershttp://www.willstrohl.com/browsers_stats.asp" target="_blank"&gt;W3Schools&lt;http://www.willstrohl.com/a&gt; is visited primarily by techies.  &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/www.rezhub.comhttp://www.willstrohl.com/" target="_blank"&gt;RezHub&lt;http://www.willstrohl.com/a&gt; has more of a mainstream flow of visitors.  Finally, while my blog tends to lean towards the techie visitor, it does have a mix of both.  Here is what I found…&lt;http://www.willstrohl.com/p&gt;  &lt;h4&gt;W3Schools&lt;http://www.willstrohl.com/h4&gt;  &lt;p&gt;&lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/www.w3schools.comhttp://www.willstrohl.com/browsershttp://www.willstrohl.com/browsers_stats.asp" target="_blank"&gt;W3Schools&lt;http://www.willstrohl.com/a&gt; has a very techie following, meaning that most of their visitors have a technical background of some kind.  They either are professionals in the IT industry, or they dabble in it in some way.  That being said, most techies tend to use the most trendy applications and gadgets.  As of today, the &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/www.w3schools.comhttp://www.willstrohl.com/browsershttp://www.willstrohl.com/browsers_stats.asp" target="_blank"&gt;W3Schools&lt;http://www.willstrohl.com/a&gt; website is showing the &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/www.getfirefox.com" target="_blank"&gt;FireFox&lt;http://www.willstrohl.com/a&gt; accounts for &lt;strong&gt;47.7%&lt;http://www.willstrohl.com/strong&gt; of their visitors, and &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/en.wikipedia.orghttp://www.willstrohl.com/wikihttp://www.willstrohl.com/Internet_Explorer" target="_blank"&gt;Internet Explorer&lt;http://www.willstrohl.com/a&gt; collectively shares &lt;strong&gt;41%&lt;http://www.willstrohl.com/strong&gt; across its various versions. &lt;http://www.willstrohl.com/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="W3Schools Visitor Browsers" border="0" alt="W3Schools Visitor Browsers" src="http://www.willstrohl.com/Portalshttp://www.willstrohl.com/1http://www.willstrohl.com/Bloghttp://www.willstrohl.com/Fileshttp://www.willstrohl.com/3http://www.willstrohl.com/420http://www.willstrohl.com/WLW-WebBrowserMarketSharefromMyPerspective_135DE-w3schools_browsers_3.png" width="504" height="323" http://www.willstrohl.com/&gt; &lt;http://www.willstrohl.com/p&gt;  &lt;h4&gt;RezHub.com&lt;http://www.willstrohl.com/h4&gt;  &lt;p&gt;As I mentioned before, &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/www.rezhub.comhttp://www.willstrohl.com/" target="_blank"&gt;RezHub&lt;http://www.willstrohl.com/a&gt; is frequented by a more mainstream web audience.  There are all types and ages of people that come to this website, and has a very high number of unique daily visitors.  It is a very clear indication of what the general public is using to browse the Internet.  However, contrary to the techies, a mainstream Internet visitor is much less likely to change the web browser that they are using due to all kinds of reasons.  Mostly, &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/en.wikipedia.orghttp://www.willstrohl.com/wikihttp://www.willstrohl.com/Internet_Explorer" target="_blank"&gt;Internet Explorer&lt;http://www.willstrohl.com/a&gt; is generally pre-installed and set as the default web browser of nearly all computers.&lt;http://www.willstrohl.com/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portalshttp://www.willstrohl.com/1http://www.willstrohl.com/Bloghttp://www.willstrohl.com/Fileshttp://www.willstrohl.com/3http://www.willstrohl.com/420http://www.willstrohl.com/WLW-WebBrowserMarketSharefromMyPerspective_135DE-rezhub_browsers_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Rezhub.com Visitor Browsers" border="0" alt="Rezhub.com Visitor Browsers" src="http://www.willstrohl.com/Portalshttp://www.willstrohl.com/1http://www.willstrohl.com/Bloghttp://www.willstrohl.com/Fileshttp://www.willstrohl.com/3http://www.willstrohl.com/420http://www.willstrohl.com/WLW-WebBrowserMarketSharefromMyPerspective_135DE-rezhub_browsers_thumb.png" width="504" height="256" http://www.willstrohl.com/&gt;&lt;http://www.willstrohl.com/a&gt; &lt;http://www.willstrohl.com/p&gt;  &lt;p&gt;In what appears to be a drastic reversal in market share for the web browsers, &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/www.rezhub.comhttp://www.willstrohl.com/" target="_blank"&gt;RezHub&lt;http://www.willstrohl.com/a&gt;’s visitors clearly favor the &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/en.wikipedia.orghttp://www.willstrohl.com/wikihttp://www.willstrohl.com/Internet_Explorer" target="_blank"&gt;Internet Explorer&lt;http://www.willstrohl.com/a&gt; family of web browsers at &lt;strong&gt;64.48%&lt;http://www.willstrohl.com/strong&gt; of the visitors, while &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/www.getfirefox.com" target="_blank"&gt;FireFox&lt;http://www.willstrohl.com/a&gt; makes up a measly &lt;strong&gt;24.74%&lt;http://www.willstrohl.com/strong&gt; of the market share.&lt;http://www.willstrohl.com/p&gt;  &lt;h4&gt;My Blog: The Mighty Blog&lt;http://www.willstrohl.com/h4&gt;  &lt;p&gt;Now, we look at the favored web browser of my visitors here on this blog.  The results look very similar to &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/www.w3schools.comhttp://www.willstrohl.com/browsershttp://www.willstrohl.com/browsers_stats.asp" target="_blank"&gt;W3Schools&lt;http://www.willstrohl.com/a&gt;, in that the trend clearly leans to the &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/www.getfirefox.com" target="_blank"&gt;FireFox&lt;http://www.willstrohl.com/a&gt; web browser at &lt;strong&gt;45.52%&lt;http://www.willstrohl.com/strong&gt;, whereas &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/en.wikipedia.orghttp://www.willstrohl.com/wikihttp://www.willstrohl.com/Internet_Explorer" target="_blank"&gt;Internet Explorer&lt;http://www.willstrohl.com/a&gt; comes in second this time with &lt;strong&gt;40.59%&lt;http://www.willstrohl.com/strong&gt; of the market share.  Contrary to my original beliefs, it would appear that most of my visitors are also techies.  I guess I need to post more food reviews, and some more of my photo work. :)&lt;http://www.willstrohl.com/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portalshttp://www.willstrohl.com/1http://www.willstrohl.com/Bloghttp://www.willstrohl.com/Fileshttp://www.willstrohl.com/3http://www.willstrohl.com/420http://www.willstrohl.com/WLW-WebBrowserMarketSharefromMyPerspective_135DE-themightyblog_browsers_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="The Mighty Blog Visitor Browsers" border="0" alt="The Mighty Blog Visitor Browsers" src="http://www.willstrohl.com/Portalshttp://www.willstrohl.com/1http://www.willstrohl.com/Bloghttp://www.willstrohl.com/Fileshttp://www.willstrohl.com/3http://www.willstrohl.com/420http://www.willstrohl.com/WLW-WebBrowserMarketSharefromMyPerspective_135DE-themightyblog_browsers_thumb.png" width="504" height="256" http://www.willstrohl.com/&gt;&lt;http://www.willstrohl.com/a&gt; &lt;http://www.willstrohl.com/p&gt;  &lt;h4&gt;In Conclusion&lt;http://www.willstrohl.com/h4&gt;  &lt;p&gt;Most of you were probably reading this to get an idea of which web browser(s) you should be covering more thoroughly in your development efforts.  There appears to no longer be a conclusive stat that covers all demographics like there used to be in the IE 5 days.  &lt;http://www.willstrohl.com/p&gt;  &lt;p&gt;We need to more closely consider our audience that we intend to visit our website than ever before.  For example, if we were building a site that is targeted at delivering technical content to our visitors, we would probably want to make sure that &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/www.getfirefox.com" target="_blank"&gt;FireFox&lt;http://www.willstrohl.com/a&gt; renders the best out of all of the web browsers.  In contrast, maybe a website whose purpose is to deliver cooking recipes would target &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/en.wikipedia.orghttp://www.willstrohl.com/wikihttp://www.willstrohl.com/Internet_Explorer" target="_blank"&gt;Internet Explorer&lt;http://www.willstrohl.com/a&gt; as their primary web browser.&lt;http://www.willstrohl.com/p&gt;  &lt;p&gt;In my own personal opinion though, you should be targeting both &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/en.wikipedia.orghttp://www.willstrohl.com/wikihttp://www.willstrohl.com/Internet_Explorer" target="_blank"&gt;Internet Explorer&lt;http://www.willstrohl.com/a&gt; and &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/www.getfirefox.com" target="_blank"&gt;FireFox&lt;http://www.willstrohl.com/a&gt; simultaneously.  Even if your visitors are clearly using one web browser over another, you want to deliver the best possible experience to your visitors.  This holds true for all use cases, including those where your visitors are not purchasing a product, but rather are receiving free content.  If you have a competitor whose site functions and looks better in their favorite browser, you’re going to lose that visitor.  &lt;http://www.willstrohl.com/p&gt;  &lt;p&gt;Let’s face facts, all sites exist to either earn money or traffic (usually both).  Ignoring either major web browser will certainly lead to you losing visitors from the other browser demographic.  I say develop for both, and this will also ensure a more stable future.  You never know when and how fast one web browser will steal loyalty from the other.&lt;http://www.willstrohl.com/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:7662fb02-4d78-4e21-a7ac-dc08dd2bdd2b" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/technorati.comhttp://www.willstrohl.com/tagshttp://www.willstrohl.com/Web+Browsers" rel="tag"&gt;Web Browsers&lt;http://www.willstrohl.com/a&gt;,&lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/technorati.comhttp://www.willstrohl.com/tagshttp://www.willstrohl.com/Browser" rel="tag"&gt;Browser&lt;http://www.willstrohl.com/a&gt;,&lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/technorati.comhttp://www.willstrohl.com/tagshttp://www.willstrohl.com/Market+Share" rel="tag"&gt;Market Share&lt;http://www.willstrohl.com/a&gt;,&lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/technorati.comhttp://www.willstrohl.com/tagshttp://www.willstrohl.com/Internet+Explorer" rel="tag"&gt;Internet Explorer&lt;http://www.willstrohl.com/a&gt;,&lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/technorati.comhttp://www.willstrohl.com/tagshttp://www.willstrohl.com/IE" rel="tag"&gt;IE&lt;http://www.willstrohl.com/a&gt;,&lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/technorati.comhttp://www.willstrohl.com/tagshttp://www.willstrohl.com/FireFox" rel="tag"&gt;FireFox&lt;http://www.willstrohl.com/a&gt;,&lt;a href="http:http://www.willstrohl.com/http://www.willstrohl.com/technorati.comhttp://www.willstrohl.com/tagshttp://www.willstrohl.com/FF" rel="tag"&gt;FF&lt;http://www.willstrohl.com/a&gt;&lt;http://www.willstrohl.com/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/tabid/66/EntryId/420/Web-Browser-Market-Share-from-My-Perspective.aspx</link>
      <category domain="http://www.willstrohl.com/blog/tabid/66/blogid/3/default.aspx">Professional Edition</category>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/tabid/66/EntryId/420/Web-Browser-Market-Share-from-My-Perspective.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/tabid/66/EntryId/420/Web-Browser-Market-Share-from-My-Perspective.aspx</guid>
      <pubDate>Thu, 25 Jun 2009 22:58:00 GMT</pubDate>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=420</trackback:ping>
    </item>
    <item>
      <title>Unpacking Compressed JavaScript Code</title>
      <description>&lt;p&gt;I am working on a project where we have an outside party developing a &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; module for us that relies almost entirely on client side code.  When I way client-side code, I mean JavaScript, the &lt;a href="http://www.jquery.com" target="_blank"&gt;jQuery&lt;/a&gt; library, and various &lt;a href="http://plugins.jquery.com" target="_blank"&gt;jQuery plug-ins&lt;/a&gt;.  The module itself is really a beautiful thing.  It is actually able to be used outside of DNN without any problems at all.&lt;/p&gt;  &lt;p&gt;Well, like any other project in the history of time, things go wrong.  This time, I need to troubleshoot part of the the JavaScript chain of code to find out where an object is not getting reassigned.  However, the &lt;strong&gt;JavaScript&lt;/strong&gt; code is all &lt;strong&gt;compressed&lt;/strong&gt; using the &lt;a href="http://javascriptcompressor.com" target="_blank"&gt;JavaScript Compressor&lt;/a&gt; online utility (based on the &lt;a href="http://dean.edwards.name/packer/" target="_blank"&gt;Packer&lt;/a&gt; by Dean Edward).  What does that mean?  That means that instead of having line breaks and indents throughout our client-side scripts, they are all removed, along with any code comments.  This can &lt;strong&gt;significantly reduce page load times&lt;/strong&gt;, and decrease the time it takes for the page to render in the browser as well.  Not to mention that you’d &lt;strong&gt;save a ton of bandwidth&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;So, instead of something like this:&lt;/p&gt;  &lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 500px; padding-right: 4px; font-family: consolas, 'Courier New', courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;   &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;/*&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;Some header comment here&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #008000"&gt;*/&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; will = &lt;span style="color: #006080"&gt;'awesome'&lt;/span&gt;;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; awesomeness() {&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (will == &lt;span style="color: #006080"&gt;'awesome'&lt;/span&gt;) {&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;        alert(&lt;span style="color: #006080"&gt;'Will is totally wicked awesome!'&lt;/span&gt;);&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;    }&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;}&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;jQuery(document).ready( &lt;span style="color: #0000ff"&gt;function&lt;/span&gt;() { awesomeness(); } );&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;You would see something like this:&lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 500px; padding-right: 4px; font-family: consolas, 'Courier New', courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;var&lt;/span&gt; will=&lt;span style="color: #006080"&gt;'awesome'&lt;/span&gt;;&lt;span style="color: #0000ff"&gt;function&lt;/span&gt; awesomeness(){&lt;span style="color: #0000ff"&gt;if&lt;/span&gt;(will==&lt;span style="color: #006080"&gt;'awesome'&lt;/span&gt;){alert(&lt;span style="color: #006080"&gt;'Will is totally wicked awesome!'&lt;/span&gt;)}}jQuery(document).ready(&lt;span style="color: #0000ff"&gt;function&lt;/span&gt;(){awesomeness()});&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;For a JavaScript library or file containing hundreds or thousands of lines of code, you should be able to quickly see how effective this would be overall on a busy website.&lt;/p&gt;

&lt;p&gt;Ideally, you would have two copies of every JavaScript file during development.  The first file would contain the regular JavaScript, with all of its comments, indentions, line breaks, and so on.  The copy of this file would contain the compressed version of the same code.  Typically, the files would be something like: &lt;font face="Courier New"&gt;YourCompany.js&lt;/font&gt;, and &lt;font face="Courier New"&gt;YourCompany.compressed.js&lt;/font&gt;.&lt;/p&gt;

&lt;p&gt;The problem I ran into today, was that our original JavaScript file did not contain the same code that was in the compressed version.  To make matters worse, the compressed version of the code was the most recent version that I needed.  Unfortunately, the &lt;a href="http://javascriptcompressor.com" target="_blank"&gt;JavaScript Compressor&lt;/a&gt; utility that we’ve been using does not yet employ a decompression or unpacking feature for code that was already compressed.  That feature only exists for code that was compressed on the previous page load.&lt;/p&gt;

&lt;p&gt;Our consultant is on vacation right now, and our client-side bug is live on our site, so please imagine how I panicked.  :)&lt;/p&gt;

&lt;p&gt;After a little while, and some diligent research, I happened across a &lt;a href="http://www.unwrongest.com/blog/how-to-decompress-javascript/" target="_blank"&gt;blog post talking about “beautifying” JavaScript code&lt;/a&gt;.  Basically, it was talking about the very thing I am talking to you about right now.  It had the direct link to another free online tool.  This one has the sole purpose of decompressing or unpacking JavaScript that was previously compressed like mine.  Woo hoo!&lt;/p&gt;

&lt;p&gt;Within a few clicks and seconds, I used the &lt;a href="http://jsbeautifier.org/" target="_blank"&gt;JavaScript Beautifier&lt;/a&gt; to &lt;strong&gt;make my JavaScript be human-readable&lt;/strong&gt; once again. Awesome!&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:f71a7b25-ddbb-464e-97e5-4a02d4babb76" 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/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/JavaScript" rel="tag"&gt;JavaScript&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/tabid/66/EntryId/419/Unpacking-Compressed-JavaScript-Code.aspx</link>
      <category domain="http://www.willstrohl.com/blog/tabid/66/blogid/3/default.aspx">Professional Edition</category>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/tabid/66/EntryId/419/Unpacking-Compressed-JavaScript-Code.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/tabid/66/EntryId/419/Unpacking-Compressed-JavaScript-Code.aspx</guid>
      <pubDate>Tue, 23 Jun 2009 15:31:00 GMT</pubDate>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=419</trackback:ping>
    </item>
    <item>
      <title>DotNetNuke Professional Edition’s Google Analytics Pro</title>
      <description>&lt;p&gt;I was one of the many people who watched &lt;a href="http://www.techbubble.com" target="_blank"&gt;Nik Kalyani&lt;/a&gt;’s first webinar, showcasing the anticipated &lt;a href="http://dotnetnuke.com/Products/ProfessionalEdition/tabid/1209/Default.aspx" target="_blank"&gt;Professional Edition&lt;/a&gt; version of &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; version 5.01.00.  As always, he did a fantastic job of presenting his topic to us.  I really enjoy his talks.  This blog is coming a bit late, as the webcast was last Wednesday.&lt;/p&gt;  &lt;p&gt;I do want to calm any conspiracy theorists first though.  The only affiliation I have with the &lt;a href="http://www.dotnetnukecorp.com" target="_blank"&gt;DotNetNuke Corporation&lt;/a&gt; is that I am on the Media Module project team.  They are in no way asking me to review DNN PE (which I do not have a copy of), and they might even be unhappy about it since they have a Marketing team who is dedicated to speak about such things.  I am just like most of you.  I am on the side lines, but unlike many of you, I am also a prospective customer.  You may or may not know that my day job is as the Technology Director for &lt;a href="http://www.rezhub.com" target="_blank"&gt;RezHub.com&lt;/a&gt;.  Our business relies 100% on &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;In his talk, Nik highlighted both the &lt;strong&gt;Text/HTML Pro Module&lt;/strong&gt;, and the &lt;strong&gt;Google Analytics Pro Module&lt;/strong&gt;  (GAP module) for &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; version 5.01.00 PE.  We will be talking about the Google Analytics Pro Module for right now.  There are some slight differences between the Community Edition and Professional Edition of the Google Analytics module that DNN includes now.  First of all, the module is indeed labeled differently in PE.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/418/WLW-ReviewDotNetNukeProfessionalEditionWebin_95C2-dnnpe_admin_mega_menu_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DNN PE: Admin Menu &gt; Google Analytics Pro" border="0" alt="DNN PE: Admin Menu &gt; Google Analytics Pro" src="/Portals/1/Blog/Files/3/418/WLW-ReviewDotNetNukeProfessionalEditionWebin_95C2-dnnpe_admin_mega_menu_thumb.png" width="504" height="325" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Once you choose the Google Analytics Pro page, the module interface is pretty simple.  You can immediately tell though, that it includes some additional functionality that an Enterprise-level website would need.  The Rules section below the Update button are not available in the Community Edition.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/418/WLW-ReviewDotNetNukeProfessionalEditionWebin_95C2-dnnpe_gapro_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DNN PE: Google Analytics Pro Module" border="0" alt="DNN PE: Google Analytics Pro Module" src="/Portals/1/Blog/Files/3/418/WLW-ReviewDotNetNukeProfessionalEditionWebin_95C2-dnnpe_gapro_thumb.png" width="504" height="335" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The Rules section allows an Administrator to very easily add &lt;strong&gt;Segmentation Rules&lt;/strong&gt; to the GAP module.  What are these for?  Simple…  They help a website administrator or a marketing team to better analyze traffic in a more granular way.  Such a feature would only need to be available to a website team that had someone dedicated to this task.  Generating the workflow, data, and analyzing that data is literally a full time job.  That doesn’t even get us to the part of using the knowledge gained from that data.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="DNN PE: Google Analytics Pro HTML Source" border="0" alt="DNN PE: Google Analytics Pro HTML Source" align="left" src="/Portals/1/Blog/Files/3/418/WLW-ReviewDotNetNukeProfessionalEditionWebin_95C2-dnnpe_gapro_htmlsource_3.png" width="337" height="145" /&gt;If you simply add the Tracking ID that Google assigned to you and click Update, your HTML source will look the same as with any other Google Analytics (GA) solution that already exists.&lt;/p&gt;  &lt;p&gt;Nik can certain explain it more eloquently, but adding the Segmentation Rules greatly increases your ability to track your visitors and customers.  This tracking ability allows you to more efficiently determine things such as if your workflow patterns are working, where your conversion paths are failing, where your visitor came from, and where they left.  There are so many more possibilities too.&lt;/p&gt;  &lt;p&gt;In looking at Nik’s example, he was tracking visitors that were sent to the site from a trade show.  He added a rule to track visitors who entered the site as a result of attending a trade show.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/3/418/WLW-ReviewDotNetNukeProfessionalEditionWebin_95C2-dnnpe_gapro_segementation_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DNN PE: Google Analytics Pro &gt; Segmentation Rules" border="0" alt="DNN PE: Google Analytics Pro &gt; Segmentation Rules" src="/Portals/1/Blog/Files/3/418/WLW-ReviewDotNetNukeProfessionalEditionWebin_95C2-dnnpe_gapro_segementation_thumb.png" width="504" height="277" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;When the source for the site is view again, our HTML will have changed just a bit.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="DNN PE: Google Analytics Pro &gt; Segmentation Rules (HTML Source)" border="0" alt="DNN PE: Google Analytics Pro &gt; Segmentation Rules (HTML Source)" src="/Portals/1/Blog/Files/3/418/WLW-ReviewDotNetNukeProfessionalEditionWebin_95C2-dnnpe_gapro_segmentation_htmlsource_3.png" width="333" height="144" /&gt; &lt;/p&gt;  &lt;p&gt;This may not look so useful right now, but if you were to check your &lt;a href="http://www.googleanalytics.com" target="_blank"&gt;Google Analytics&lt;/a&gt; account after at least a day of this Segmentation Rule being rolled out, you will have a much more granular way to look at and analyze your website’s traffic.  Think about it for a moment… All of the things that you already know and love about &lt;a href="http://www.googleanalytics.com" target="_blank"&gt;Google Analytics&lt;/a&gt; would still be available, and now you’d be able to look at the same information for a valuable subset of your visitors.  I don’t know about you, but if my website is supposed to make money, that data is incredibly valuable to me.&lt;/p&gt;  &lt;h4&gt;Overall Impression&lt;/h4&gt;  &lt;p&gt;Just looking at what I have just showed you, the &lt;strong&gt;Google Analytics Pro Module&lt;/strong&gt; may not excite you like it does me.  However, I am not looking at this for my personal, small business, or catalog websites.  I am looking at this from how such a feature would not only benefit me now, but also the upgrades to this core PE module going forward, should I make the switch to becoming a &lt;a href="http://dotnetnuke.com/Products/ProfessionalEdition/tabid/1209/Default.aspx" target="_blank"&gt;Professional Edition&lt;/a&gt; subscriber.  Nik made it clear during the webinar that more features for this module are already in the road map that will take advantage of more of the Google API features.&lt;/p&gt;  &lt;p&gt;I am impressed right now with their simple user interface.  This is a necessity, especially for Enterprise customers.  It seems that the more money a company makes, the less their staff truly understands software.  At least, that’s been my experience.  I think this module and the webinar in general both give us a very good peek into the future of DNN PE, in how they are approaching PE features.  &lt;/p&gt;  &lt;p&gt;I was going to post a link to the webinar for you to see everything for yourselves, but the webinar recording is not listed right now for some reason.  I have a direct link to the WMV, but I do not think I am supposed to hand that out.  Sorry…  You can check out &lt;a href="http://dotnetnuke.com/Products/Webinars.aspx" target="_blank"&gt;their webinars page&lt;/a&gt; to see if it gets posted.&lt;/p&gt;  &lt;p&gt;I am excited to see more, and I am sure you are too, if you’ve made it this far into my blog post.  Next, I will give you a peek at the Text/HTML Pro module.  That is, as long as I do not get flogged for this post. ;)&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:6d92ea03-42f6-48b1-a43a-2058c574b153" 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/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Professional+Edition" rel="tag"&gt;Professional Edition&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Review" rel="tag"&gt;Review&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Google+Analytics" rel="tag"&gt;Google Analytics&lt;/a&gt;,&lt;a href="http://technorati.com/tags/5.01.00" rel="tag"&gt;5.01.00&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/tabid/66/EntryId/418/DotNetNuke-Professional-Edition-rsquo-s-Google-Analytics-Pro.aspx</link>
      <category domain="http://www.willstrohl.com/blog/tabid/66/blogid/3/default.aspx">Professional Edition</category>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/tabid/66/EntryId/418/DotNetNuke-Professional-Edition-rsquo-s-Google-Analytics-Pro.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/tabid/66/EntryId/418/DotNetNuke-Professional-Edition-rsquo-s-Google-Analytics-Pro.aspx</guid>
      <pubDate>Tue, 23 Jun 2009 11:46:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=418</trackback:ping>
    </item>
    <item>
      <title>SmarterTools Software Bundles for Day of DotNetNuke Attendees</title>
      <description>&lt;p&gt;&lt;a href="http://dayofdnn.com/" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px 5px; display: inline; border-top: 0px; border-right: 0px" title="Day of DotNetNuke" border="0" alt="Day of DotNetNuke" align="right" src="/Portals/1/Blog/Files/3/417/WLW-SmarterToolsSoftwareBundlesforDayofDotNe_1511B-logo_dodnn_121x100_5.jpg" width="125" height="104" /&gt;&lt;/a&gt; If you attended the &lt;a href="http://dayofdnn.com" target="_blank"&gt;Day of DotNetNuke®&lt;/a&gt; this year, you probably already know.  If you don’t know, those who attended the event are getting a software bundle from &lt;a href="http://www.smartertools.com" target="_blank"&gt;SmarterTools, Inc&lt;/a&gt;.  They were incredibly generous to us.  They gave each attendee a license for each of their product offerings, which is a whopping $750 USD value for each attendee. The e-mails with all of the license information just went out.&lt;/p&gt;  &lt;p&gt;Here are the software packages that each attendee is receiving:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;SmarterMail Professional 5.x&lt;/strong&gt; ($299.00 USD value) - SmarterMail 5.x Windows mail server is the cost-effective Microsoft Exchange alternative. SmarterMail provides antispam/antivirus out-of-the-box; reporting; events/notifications; throttling; email archiving; intrusion detection/prevention; advanced synchronization with Microsoft Outlook; and over-the-air support for BlackBerry, iPhone, and Windows Mobile devices.  &lt;a href="https://www.smartertools.com/SmarterMail/Features/Windows-Mail-Server-Software-Webmail-Exchange-Alternative.aspx" target="_blank"&gt;More info…&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;SmarterTrack 4.x&lt;/strong&gt; ($199.00 USD value) - SmarterTrack 4.x brings the functionality of a help desk, Ticket system, Live Chat, WhosOn, branding and language support, cost analysis, data mining, reporting, surveys, and a Knowledge Base to a single Web application. WhosOn and Live Chat increase marketing performance and conversion rates, transforming a static Web site into an interactive marketplace.  &lt;a href="https://www.smartertools.com/SmarterTrack/Features/Customer-Service-Software-Web-Interface.aspx" target="_blank"&gt;More info…&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;SmarterStats 4.x&lt;/strong&gt; ($249.00 USD value) - SmarterStats 4.x is a Web log analytics tool that delivers detailed Web site statistics for a single site or up to 30,000 sites across a distributed network. SmarterStats supports multiple log file types (IIS, Apache, etc.) on Windows and Linux operating systems. SmarterStats also reduces disk space utilization up to 85% by converting log files into an efficient, relational database.  &lt;a href="https://www.smartertools.com/mgt/order/order.aspx?View=Stats" target="_blank"&gt;More info…&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font size="2"&gt;&lt;u&gt;PLEASE NOTE&lt;/u&gt;:  The email generated by their system says that the software came from “DotNetNuke”, instead of “Day of DotNetNuke.”&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;In order to be eligible for this free door prize package, a few things had to be in place.  If any break in this chain took place, then we couldn’t issue your license.  Sorry.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Register for the &lt;a href="http://dayofdnn.com" target="_blank"&gt;Day of DotNetNuke®&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;Attend the &lt;a href="http://dayofdnn.com" target="_blank"&gt;Day of DotNetNuke®&lt;/a&gt; (&lt;em&gt;we checked this through the registration desk at the event&lt;/em&gt;) &lt;/li&gt;    &lt;li&gt;We need to have a valid e-mail address on file (&lt;em&gt;walk-ins who didn’t give us their e-mail address cannot get the software package since we do not have an e-mail to send the license information to&lt;/em&gt;) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;font size="2"&gt;We plan to have a prize like this at every future &lt;a href="http://dayofdnn.com" target="_blank"&gt;Day of DotNetNuke®&lt;/a&gt;.  So make sure you show up. :)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Thank you so much to &lt;a href="http://www.smartertools.com" target="_blank"&gt;SmarterTools&lt;/a&gt; for providing such a valuable prize!  Also, they provided a really cool web service for me to plug into, that made issuing the licenses incredibly easy!&lt;/font&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:6a45ae0b-02b9-4b7a-a038-e1415ace1c5e" 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/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Events" rel="tag"&gt;Events&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Day+of+DotNetNuke" rel="tag"&gt;Day of DotNetNuke&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/tabid/66/EntryId/417/SmarterTools-Software-Bundles-for-Day-of-DotNetNuke-Attendees.aspx</link>
      <category domain="http://www.willstrohl.com/blog/tabid/66/blogid/3/default.aspx">Professional Edition</category>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/tabid/66/EntryId/417/SmarterTools-Software-Bundles-for-Day-of-DotNetNuke-Attendees.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/tabid/66/EntryId/417/SmarterTools-Software-Bundles-for-Day-of-DotNetNuke-Attendees.aspx</guid>
      <pubDate>Mon, 22 Jun 2009 23:57:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=417</trackback:ping>
    </item>
    <item>
      <title>Remember Those DotNetNuke 5 Books?</title>
      <description>&lt;p&gt;The &lt;a href="http://www.dotnetnukecorp.com"&gt;DotNetNuke Corporation&lt;/a&gt; is on the verge of releasing version 5.01.00 of the popular &lt;a href="http://www.dotnetnuke.com"&gt;DotNetNuke®&lt;/a&gt; web application framework.  I am so excited, because this is going to be the reason to finally jump aboard the version 5+ band wagon.  Especially, when you include the fix they found for the high load performance issues from last week, this version of &lt;a href="http://www.dotnetnuke.com"&gt;DotNetNuke®&lt;/a&gt; is going to be the best yet.  &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.dotnetnuke.com"&gt;DotNetNuke®&lt;/a&gt; version 5.01.00 has all of the great things I love about version 5.00.00 and 5.00.01, but it is stable!  Numerous bugs, performance updates, and workflow issues have been resolved.  Among the new features to look forward to in version 5.01.00 are: &lt;a href="http://www.willstrohl.com/Blog/tabid/66/EntryId/401/DotNetNuke-5-01-00-ndash-Now-With-Site-Map-Priorities.aspx"&gt;Site Map Priorities&lt;/a&gt;, &lt;strong&gt;Human Friendly URL’s are turned on by default&lt;/strong&gt;, a few &lt;strong&gt;SEO updates&lt;/strong&gt;, more &lt;strong&gt;XHTML fixes&lt;/strong&gt;, Module Definitions page &lt;strong&gt;displays if a module is in use&lt;/strong&gt;, &lt;strong&gt;.Net framework 3.5 is required&lt;/strong&gt;, there are &lt;strong&gt;event handlers for skins&lt;/strong&gt;, a &lt;strong&gt;Google Analytics module&lt;/strong&gt;, and much more.  You can see for yourself &lt;a href="http://support.dotnetnuke.com/project/RoadMap.aspx?PROJID=2" target="_blank"&gt;what is in the DNN v5.01.00 release&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;That is a whole lot of features… I certainly hope you’re as excited as I am!  If not, maybe some books would help?  It seems that since the first two iterations of the version 5 series was so riddled with bugs, everyone has all but forgotten some very important and useful &lt;a href="http://www.dotnetnuke.com"&gt;DotNetNuke®&lt;/a&gt; books.  The bugs and problems have been taken care of.  Now you need to upgrade your sites.  Version 5.01.00 is coming any day now.  Here are the books I would suggest you pick up if you want to be proficient with the &lt;a href="http://www.dotnetnuke.com"&gt;DotNetNuke®&lt;/a&gt; 5 series of releases.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.amazon.com/Professional-DotNetNuke-Application-Framework-ASP-NET/dp/0470438703/ref=sr_1_7/179-6817957-9066600?ie=UTF8&amp;s=books&amp;qid=1225113519&amp;sr=1-7" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="Professional DotNetNuke 5 by Wrox" border="0" alt="Professional DotNetNuke 5 by Wrox" align="left" src="/Portals/1/Blog/Files/3/416/WLW-RememberThoseDotNetNukeBooks_D788-0470438703_3.jpg" width="193" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.amazon.com/Professional-DotNetNuke-Application-Framework-ASP-NET/dp/0470438703/ref=sr_1_7/179-6817957-9066600?ie=UTF8&amp;s=books&amp;qid=1225113519&amp;sr=1-7" target="_blank"&gt;Professional DotNetNuke 5&lt;/a&gt; is the book that I had the pleasure of editing for technical content.  With the exception of Shaun Walker, all of the authors are from Florida.  I am so honored that I can call these guys friends.  They all continually have done so much for the DNN community over the past 4+ years, and I wouldn’t be here without them.&lt;/p&gt;  &lt;p&gt;I only had a hand in the module development chapters, but the entire book is great.  I read it from cover-to-cover, and I don’t usually do that for any technical book.  I gave this book &lt;a href="http://www.willstrohl.com/Blog/tabid/66/EntryId/356/Book-Review-Professional-DotNetNuke-5-by-Wrox.aspx" target="_blank"&gt;a full review in my blog back in March&lt;/a&gt;. Rest assured, your money wouldn’t be wasted.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.amazon.com/Professional-DotNetNuke-Programming-Mitchel-Sellers/dp/0470171162" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px 5px; display: inline; border-top: 0px; border-right: 0px" title="Professional DotNetNuke Module Programming by Wrox" border="0" alt="Professional DotNetNuke Module Programming by Wrox" align="right" src="/Portals/1/Blog/Files/3/416/WLW-RememberThoseDotNetNukeBooks_D788-0470171162_968fa945-a187-4bf0-b0f5-f92bc0368795.jpg" width="196" height="244" /&gt; Professional DotNetNuke Module Programming&lt;/a&gt; is a book by the popular &lt;a href="http://www.mitchelsellers.com" target="_blank"&gt;Mitchel Sellers&lt;/a&gt;.  It’s no secret that he has a ton of &lt;a href="http://www.dotnetnuke.com"&gt;DotNetNuke®&lt;/a&gt; knowledge.  Luckily, we get the best DNN developer cheat sheet and resource, all wrapped into one with his book.  This book tended to read more like a resource, versus the previous book.  I wrote &lt;a href="http://www.willstrohl.com/Blog/tabid/66/EntryId/387/Review-Professional-DotNetNuke-Module-Programming.aspx" target="_blank"&gt;a full review of this book in a previous blog post&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.amazon.com/DotNetNuke-Users-Guide-Website-Running/dp/0470462574/" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="DotNetNuke 5 User's Guide by Wrox" border="0" alt="DotNetNuke 5 User's Guide by Wrox" align="left" src="/Portals/1/Blog/Files/3/416/WLW-RememberThoseDotNetNukeBooks_D788-0470462574_3.jpg" width="195" height="244" /&gt;&lt;/a&gt; The last book I will mention right now is one of which I poured a lot of time into, despite not being an author.  I was the technical editor for the entire book.  It really was a fun project.  &lt;/p&gt;  &lt;p&gt;The &lt;a href="http://www.amazon.com/DotNetNuke-Users-Guide-Website-Running/dp/0470462574/" target="_blank"&gt;DotNetNuke 5 User’s Guide&lt;/a&gt; is written by &lt;a href="http://www.chrishammond.com/" target="_blank"&gt;Chris Hammond&lt;/a&gt; and &lt;a href="http://www.patrickrenner.com/" target="_blank"&gt;Patrick Renner&lt;/a&gt;.  It is not a book for any die-hard DNN’er, but rather the end-user who has just been introduced to &lt;a href="http://www.dotnetnuke.com"&gt;DotNetNuke®&lt;/a&gt;.  I think my favorite quote is from Chris himself.  He mentioned that he wanted to write the book in such a way, that he’d be able to hand the book to his mother, and she’d be able to get her site up and running.  I don’t have a review of this book yet, as I have not yet received my copy.  I only have seen the chapters before the real editors got to them.  From what I saw, Chris accomplished his mission.  Buy one for &lt;u&gt;your&lt;/u&gt; mother.  ;)&lt;/p&gt;  &lt;p&gt;As you can see to the left, this is the first &lt;a href="http://www.wrox.com" target="_blank"&gt;Wrox&lt;/a&gt; book to sport their new design.  I don’t know about you, but I like it.  There was nothing wrong with the previous design, but this is nice too.  :)  Someone tell Amazon to update their book cover!&lt;/p&gt;  &lt;p&gt;I hope you pick-up one of these books.  They are all really great!&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:271bda28-d9b7-4c3a-86a8-174f059284b0" 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/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Book" rel="tag"&gt;Book&lt;/a&gt;,&lt;a href="http://technorati.com/tags/5.01.00" rel="tag"&gt;5.01.00&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/tabid/66/EntryId/416/Remember-Those-DotNetNuke-5-Books.aspx</link>
      <category domain="http://www.willstrohl.com/blog/tabid/66/blogid/3/default.aspx">Professional Edition</category>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/tabid/66/EntryId/416/Remember-Those-DotNetNuke-5-Books.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/tabid/66/EntryId/416/Remember-Those-DotNetNuke-5-Books.aspx</guid>
      <pubDate>Mon, 22 Jun 2009 20:36:00 GMT</pubDate>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=416</trackback:ping>
    </item>
    <item>
      <title>Getting Rid of the Nasty BusinessControllerClass Exception</title>
      <description>&lt;p&gt;On many &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; (DNN) websites you will find an unacceptable number of the following exception:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;System.Exception: Error Creating BusinessControllerClass ‘&lt;strong&gt;YourModule.Modules.ModuleName.ControllerName&lt;/strong&gt;’ of module(&lt;strong&gt;ModuleName&lt;/strong&gt;) id=(&lt;strong&gt;ModuleID&lt;/strong&gt;) in tab(&lt;strong&gt;TabID&lt;/strong&gt;) and portal(&lt;strong&gt;PortalID&lt;/strong&gt;)  ---&amp;gt; System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---&amp;gt; System.NullReferenceException: Object reference not set to an instance of an object.&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;em&gt;I have put the changing words in bold.  Those words will be different for you.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;This is almost always the result of the wrong business controller class being specified in the DNN manifest file.  In the manifest file, the module developer will specify the business controller class so that DNN knows what Interfaces the module implements (such as: IPortable, and ISearchable).  This is very important, because DNN will treat those module a little differently.  For example, IPortable allows the module to be moved from portal to portal, very easily and all the while keeping the data from the original instance of the module.&lt;/p&gt;  &lt;p&gt;Here is what is found in the manifest file for any given module:&lt;/p&gt;  &lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 500px; padding-right: 4px; font-family: consolas, 'Courier New', courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;   &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;     &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;businesscontrollerclass&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&gt;&lt;/span&gt;YourCompany.Modules.ModuleName.ModuleNameController&lt;span style="color: #0000ff"&gt;&lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;businesscontrollerclass&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The problem I am speaking of is usually the result of a typo by the developer.  Considering the previous example, you might instead see something like this:&lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 500px; padding-right: 4px; font-family: consolas, 'Courier New', courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;&lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;businesscontrollerclass&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&gt;&lt;/span&gt;YourCompany.Modules.ModuleName.CompanyNameModuleNameController&lt;span style="color: #0000ff"&gt;&lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;businesscontrollerclass&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;Note that the company name is repeated in the controller name.  This is not always the exact typo, but it is something that is easily fixed, regardless to why or how it happened.  There are really two ways to get rid of this error:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Ask for an updated module release to fix this issue &lt;/li&gt;

  &lt;li&gt;Run a quick SQL statement to fix the error &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;font size="2"&gt;The first option is obviously always the preferred method, especially to non-developers. &lt;/font&gt;&lt;font size="2"&gt;Just tell the module developer/vendor that this error exists, and they should reply with a new release package.  It’s very easy to do (provided they are not in the middle of a release cycle).&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;font size="2"&gt;If you find that you either choose or want to fix this yourself, there is a very simple SQL statement you can run to do so.  The first thing you need to do though is determine the actual business controller name and namespace.  If this is not your own code, then you will have to use a tool like &lt;strong&gt;Visual Studio’s Object Browser&lt;/strong&gt;.  Using our previous examples, here is the SQL needed to fix this problem:&lt;/font&gt;&lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 500px; padding-right: 4px; font-family: consolas, 'Courier New', courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;UPDATE&lt;/span&gt; [dbo].[DesktopModules] &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;SET&lt;/span&gt; [BusinessControllerClass] = N&lt;span style="color: #006080"&gt;'YourCompany.Modules.ModuleName.ModuleNameController'&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; [BusinessControllerClass] = N&lt;span style="color: #006080"&gt;'YourCompany.Modules.ModuleName.CompanyNameModuleNameController'&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;If you are using the DNN SQL module in your Host Menu, you might want to use this version of the previous T-SQL instead:&lt;/p&gt;

&lt;div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 500px; padding-right: 4px; font-family: consolas, 'Courier New', courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px"&gt;
  &lt;div style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;
    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;UPDATE&lt;/span&gt; {databaseOwner}{objectQualifier}DesktopModules &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;SET&lt;/span&gt; [BusinessControllerClass] = N&lt;span style="color: #006080"&gt;'YourCompany.Modules.ModuleName.ModuleNameController'&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt;&lt;span style="color: #0000ff"&gt;WHERE&lt;/span&gt; [BusinessControllerClass] = N&lt;span style="color: #006080"&gt;'YourCompany.Modules.ModuleName.CompanyNameModuleNameController'&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, 'Courier New', courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"&gt; &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;That’s all there is to it… It’s fixed!  It is not truly reflected in your DNN site and Event Log though, until the site cache refreshes.  If you’re impatient, I have blogged about &lt;a href="http://www.willstrohl.com/Blog/tabid/66/EntryId/89/HOW-TO-Clear-the-Cache-in-DotNetNuke-DNN.aspx"&gt;how to clear the cache in DNN&lt;/a&gt; before.&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:5e193879-b15a-4fc1-a036-d81e6652672d" 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/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Event+Log" rel="tag"&gt;Event Log&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Error" rel="tag"&gt;Error&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Exception" rel="tag"&gt;Exception&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/tabid/66/EntryId/415/Getting-Rid-of-the-Nasty-BusinessControllerClass-Exception.aspx</link>
      <category domain="http://www.willstrohl.com/blog/tabid/66/blogid/3/default.aspx">Professional Edition</category>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/tabid/66/EntryId/415/Getting-Rid-of-the-Nasty-BusinessControllerClass-Exception.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/tabid/66/EntryId/415/Getting-Rid-of-the-Nasty-BusinessControllerClass-Exception.aspx</guid>
      <pubDate>Mon, 22 Jun 2009 18:17:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=415</trackback:ping>
    </item>
    <item>
      <title>Review: Yabi Japanese Steakhouse in Winter Garden, Florida</title>
      <description>&lt;p&gt;&lt;a href="http://yabijapanesesteakhouse.com/" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="Yabi Japanese Steakhouse: Web Site" border="0" alt="Yabi Japanese Steakhouse: Web Site" align="left" src="/Portals/1/Blog/Files/2/413/WLW-ReviewYabiJapaneseSteakhouseinWinterGard_1452E-Yabi_Japanese_Steakhouse_Site_3.png" width="244" height="186" /&gt;&lt;/a&gt; I have been to quite a few Japanese steakhouses in my day.  I really enjoy the atmosphere and the entertaining nature that they tend to provide.  The cuisine is not so bad either.  Today, I went to the &lt;a href="http://yabijapanesesteakhouse.com/" target="_blank"&gt;Yabi Japanese Steakhouse&lt;/a&gt; in Winter Garden, Florida for the first time.  It is new place that we happened upon this evening in looking for a good place for a pre-Father’s Day dinner.  I gave the family one piece of criteria in choosing our dinner destination: It had to be a small business.  No chains, or major brands.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://yabijapanesesteakhouse.com/" target="_blank"&gt;Yabi Japanese Steakhouse&lt;/a&gt;    &lt;br /&gt;16112 Marsh Road, Winter Garden, Florida 34787    &lt;br /&gt;(407) 654-9588&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/2/413/WLW-ReviewYabiJapaneseSteakhouseinWinterGard_1452E-2009-06-20_18.12.55_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px 5px; display: inline; border-top: 0px; border-right: 0px" title="Yabi Japanese Steakhouse: Store Front" border="0" alt="Yabi Japanese Steakhouse: Store Front" align="right" src="/Portals/1/Blog/Files/2/413/WLW-ReviewYabiJapaneseSteakhouseinWinterGard_1452E-2009-06-20_18.12.55_thumb.jpg" width="244" height="184" /&gt;&lt;/a&gt; The outside really did nothing to show the branding of the restaurant, or convey the feeling that an Asian cuisine lived beyond the front doors.  Sometimes, this is the fault of the building owner though.  You really cannot hold the restaurant responsible for that.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Upon walking in, the entrance and the rest of the restaurant has the minimum done to help convey the Asian atmosphere.  I was definitely disappointed in that. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/2/413/WLW-ReviewYabiJapaneseSteakhouseinWinterGard_1452E-2009-06-20_18.24.34_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="Yabi Japanese Steakhouse: Kirin Ichiban" border="0" alt="Yabi Japanese Steakhouse: Kirin Ichiban" align="left" src="/Portals/1/Blog/Files/2/413/WLW-ReviewYabiJapaneseSteakhouseinWinterGard_1452E-2009-06-20_18.24.34_thumb.jpg" width="184" height="244" /&gt;&lt;/a&gt; We sat down to order, and our server seemed nice enough.  She knew and understood very little English though.  She thought I ordered a Corona, when I actually ordered a &lt;strong&gt;Kirin Ichiban&lt;/strong&gt;.  And while I mention the Kirin, they are a whopping &lt;strong&gt;$4.50 each&lt;/strong&gt;!  Crap!  &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/2/413/WLW-ReviewYabiJapaneseSteakhouseinWinterGard_1452E-2009-06-20_18.17.11_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px 5px; display: inline; border-top: 0px; border-right: 0px" title="Yabi Japanese Steakhouse: Menu" border="0" alt="Yabi Japanese Steakhouse: Menu" align="right" src="/Portals/1/Blog/Files/2/413/WLW-ReviewYabiJapaneseSteakhouseinWinterGard_1452E-2009-06-20_18.17.11_thumb.jpg" width="184" height="244" /&gt;&lt;/a&gt; Their &lt;strong&gt;regular drinks&lt;/strong&gt; such as sodas and tea are &lt;strong&gt;$2.00 each&lt;/strong&gt;.  That isn’t so odd these days, unfortunately, and it has prompted me to begin ordering a water with lemon at most places.  However, this place doesn’t allow for free refills in a to-go cup.  Once again, I was not impressed.  Another bad first impression was my fork.  It was all bent up.  I am surprised it was laid out at all without being bent back into shape first.&lt;/p&gt;  &lt;p&gt;Looking through the menu, the prices for all of the meals and appetizers seemed quite reasonable, in contrary to the drinks.  I say reasonable, but they are at least comparable to other Japanese steakhouses.  They had only a few options for vegetarians though.&lt;/p&gt;  &lt;p&gt;We ordered an appetizer, sushi, and each had the hibachi or teppangaki table meal.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/2/413/WLW-ReviewYabiJapaneseSteakhouseinWinterGard_1452E-2009-06-20_18.35.13_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="Yabi Japanese Steakhouse: Sweet Potato Tempura appetizer" border="0" alt="Yabi Japanese Steakhouse: Sweet Potato Tempura appetizer" align="left" src="/Portals/1/Blog/Files/2/413/WLW-ReviewYabiJapaneseSteakhouseinWinterGard_1452E-2009-06-20_18.35.13_thumb.jpg" width="184" height="244" /&gt;&lt;/a&gt; The appetizer came out pretty quickly.  It was &lt;strong&gt;Sweet Potato Tempura&lt;/strong&gt; ($3.95).  Now, anyone who knows me, knows that I am not a fan for sweet potato at all.  It’s one of those foods that I simply do not enjoy.  However, knowing that I was going to review this later, I went ahead and tried it.  I am so glad that I did.  This was a fantastic dish!  It was slightly crunchy on the outside, and sweet and tender on the inside.  The deep frying technique and breading of tempura took away a little of the original sweet potato flavor that I do not enjoy, and enhanced it to a level of deep satisfaction and addiction.  What I think really made it work for me was the mysterious sauce that was lightly drizzled over the top of it.  Perfect!&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/2/413/WLW-ReviewYabiJapaneseSteakhouseinWinterGard_1452E-2009-06-20_18.30.27_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px 5px; display: inline; border-top: 0px; border-right: 0px" title="Yabi Japanese Steakhouse: Japanese Onion Soup" border="0" alt="Yabi Japanese Steakhouse: Japanese Onion Soup" align="right" src="/Portals/1/Blog/Files/2/413/WLW-ReviewYabiJapaneseSteakhouseinWinterGard_1452E-2009-06-20_18.30.27_thumb.jpg" width="244" height="184" /&gt;&lt;/a&gt; Following the appetizer, our &lt;strong&gt;Japanese onion soup&lt;/strong&gt; and &lt;strong&gt;salad&lt;/strong&gt; was next to come.  The salad was unremarkable.  It was a standard garden salad with the ginger salad dressing.  However, the soup was delicious.  It was just the right blend of ingredients and broth.  It had mushrooms, green onions, and fried noodles.  We all liked it, and usually, I am the only one who likes the soup at these places.&lt;/p&gt;  &lt;p&gt;I was quite disappointed in another area too.  I always order sushi along with my hibachi meal.  I have never had to wait on it until this time.  It came when the first round of food was being served onto the plates at the table.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/2/413/WLW-ReviewYabiJapaneseSteakhouseinWinterGard_1452E-2009-06-20_18.48.02_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="Yabi Japanese Steakhouse: Sushi (Eel, Salmon, Winter Garden Roll, Wasabi Roll)" border="0" alt="Yabi Japanese Steakhouse: Sushi (Eel, Salmon, Winter Garden Roll, Wasabi Roll)" align="left" src="/Portals/1/Blog/Files/2/413/WLW-ReviewYabiJapaneseSteakhouseinWinterGard_1452E-2009-06-20_18.48.02_thumb.jpg" width="244" height="184" /&gt;&lt;/a&gt; The &lt;strong&gt;sushi&lt;/strong&gt; was delicious though.  Every sushi place has one or more specialty rolls that are named for the area or region.  This restaurant has a roll named the &lt;strong&gt;Winter Garden roll&lt;/strong&gt;, named after the city it’s in.  It was okay.  Along with that roll, I ordered 4 pieces of &lt;strong&gt;Eel&lt;/strong&gt;, 2 pieces of &lt;strong&gt;Salmon&lt;/strong&gt;, and a &lt;strong&gt;Wasabi Roll&lt;/strong&gt;.  The Wasabi roll was fantastic!  I really liked it.  I would suggest it to any sushi lover.  There was a few different types of fish in it.  Something to note about the sushi that I haven’t seen before is that the menu itself was reusable.  Instead of being a throw-away piece of paper, it was laminated to be reused.  The order still gets taken on a normal piece of paper though.&lt;/p&gt;  &lt;p&gt;Our teppangaki chef was also unremarkable.  He started strong with some of the standard jokes and tricks.  One thing he did that was new to me, was to break out a little fireman doll.  When he pressed a button, it’s pants went down, and it peed oil onto the table which of course flamed up.  It was funny.  He faded very fast though, basically resorting to just cooking.  He even failed to do the standard onion volcano.  We had to point it out to the kids when we saw it at the other tables.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/2/413/WLW-ReviewYabiJapaneseSteakhouseinWinterGard_1452E-2009-06-20_18.59.09_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="Yabi Japanese Steakhouse: Hibachi Meal (shrimp and scallops, fried rice, noodles, vegetables)" border="0" alt="Yabi Japanese Steakhouse: Hibachi Meal (shrimp and scallops, fried rice, noodles, vegetables)" align="left" src="/Portals/1/Blog/Files/2/413/WLW-ReviewYabiJapaneseSteakhouseinWinterGard_1452E-2009-06-20_18.59.09_thumb.jpg" width="244" height="184" /&gt;&lt;/a&gt; The meal he cooked up was delicious though.  I ordered &lt;strong&gt;shrimp and scallops&lt;/strong&gt; for myself, &lt;strong&gt;filet mignon&lt;/strong&gt; for my lady, and the kids had &lt;strong&gt;chicken&lt;/strong&gt; (1) and &lt;strong&gt;steak&lt;/strong&gt; (2).  The seafood all tasted very fresh.  I also tried Kim’s filet, and it was definitely a high-quality cut of meat, cooked perfectly.  We ordered the meat to be cooked medium.  However, the popular &lt;strong&gt;white sauce&lt;/strong&gt; was very runny, and not thick like I am used to.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/2/413/WLW-ReviewYabiJapaneseSteakhouseinWinterGard_1452E-2009-06-20_19.13.36_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px 5px; display: inline; border-top: 0px; border-right: 0px" title="Yabi Japanese Steakhouse: Chilled Oranges" border="0" alt="Yabi Japanese Steakhouse: Chilled Oranges" align="right" src="/Portals/1/Blog/Files/2/413/WLW-ReviewYabiJapaneseSteakhouseinWinterGard_1452E-2009-06-20_19.13.36_thumb.jpg" width="244" height="184" /&gt;&lt;/a&gt; In addition to the meats tasting great and being cooked perfectly, the vegetables and rice were also fresh and delicious.  At the end of the meal, we were served &lt;strong&gt;chilled (near frozen) oranges&lt;/strong&gt;.  Like the rest of the food, they were fresh and delicious.  They must have a really good produce supplier.  (Other restaurants should take note.)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;We found ourselves to be uncomfortable&lt;/strong&gt; towards the end of our time there.  When we first arrived, less than half of the restaurant was taken.  By the time we were ready to go, people were standing in line, waiting for a table to open up.  During that time, the side of the restaurant that had the teppangaki tables was extremely hot.  We were &lt;strong&gt;literally sweating&lt;/strong&gt;, and looking around, it was clear that we weren’t the only ones.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.willstrohl.com/Portals/1/Blog/Files/2/413/WLW-ReviewYabiJapaneseSteakhouseinWinterGard_1452E-2009-06-20_19.02.03_2.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="Yabi Japanese Steakhouse: Men's Restroom" border="0" alt="Yabi Japanese Steakhouse: Men's Restroom" align="left" src="/Portals/1/Blog/Files/2/413/WLW-ReviewYabiJapaneseSteakhouseinWinterGard_1452E-2009-06-20_19.02.03_thumb.jpg" width="244" height="184" /&gt;&lt;/a&gt; We cannot fully discuss any restaurant without also discussing cleanliness.  The interior and exterior of the restaurant were very well kept.  And the men’s restroom was also as clean as you’d expect a bathroom to be during the dinner rush.  Nothing to report here.&lt;/p&gt;  &lt;p&gt;So what’s my final verdict?  There are definitely better places to go if you’re in the mood for a Japanese steakhouse.  This one &lt;strong&gt;compares well in food quality and prices&lt;/strong&gt;, but &lt;strong&gt;it really does fail in service&lt;/strong&gt;.  There were times when we could get any server, much less our own.  I would tell you to find another place to get your hibachi grill craving taken care of.  Your money is better spent elsewhere.&lt;/p&gt;  &lt;p&gt;Personally, my favorite is &lt;a href="http://www.bluefugu.com/" target="_blank"&gt;Blue Fugu&lt;/a&gt;, in St. Pete Beach, Florida.  Their website leaves much to the imagination, but they make up for it if you visit them.  If you find yourself in their area, GO!  You will not be disappointed – trust me.&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:8ce76bfb-1cec-463b-8b42-cc58d580c5b3" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/Food" rel="tag"&gt;Food&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Review" rel="tag"&gt;Review&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Japanese" rel="tag"&gt;Japanese&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Steakhouse" rel="tag"&gt;Steakhouse&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Hibachi" rel="tag"&gt;Hibachi&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Sushi" rel="tag"&gt;Sushi&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Restaurant" rel="tag"&gt;Restaurant&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/tabid/66/EntryId/413/Review-Yabi-Japanese-Steakhouse-in-Winter-Garden-Florida.aspx</link>
      <category domain="http://www.willstrohl.com/blog/tabid/66/blogid/2/default.aspx">Personal Edition</category>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/tabid/66/EntryId/413/Review-Yabi-Japanese-Steakhouse-in-Winter-Garden-Florida.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/tabid/66/EntryId/413/Review-Yabi-Japanese-Steakhouse-in-Winter-Garden-Florida.aspx</guid>
      <pubDate>Sun, 21 Jun 2009 05:20:00 GMT</pubDate>
      <slash:comments>2</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=413</trackback:ping>
    </item>
    <item>
      <title>DNN Core Blog Module Stars in the next ODUG Meeting</title>
      <description>&lt;p&gt;One of the more misunderstood, and underestimated modules in the Core offering of &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; Modules is by far the Blog Module.  Everyone has an opinion on it, and most of us are wrong.  Blogs are one of those adaptive concepts – it is what it is.  A blog is one of those many, many things that simply give you back value based on what you put into it.  Luckily, the latest release of the Blog Module makes that easier than ever before in &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke®&lt;/a&gt; (that is, without paying for it).&lt;/p&gt;  &lt;p&gt;On July 9th, I will be presenting the &lt;strong&gt;DNN Core Blog Module&lt;/strong&gt; for our next session at the &lt;a href="http://orlando.dotnetnukeug.net/" target="_blank"&gt;Orlando DotNetNuke® Users Group&lt;/a&gt;, or &lt;a href="http://orlando.dotnetnukeug.net/" target="_blank"&gt;ODUG&lt;/a&gt;.  In this session, I hope to make the Blog Module understood by anyone that might be thinking about using it, or may have been confused about it in the past.  &lt;a href="http://www.cto20.com" target="_blank"&gt;Antonio Chagoury&lt;/a&gt; and his team have done a fantastic job at bringing this module up-to-speed to better compete with the other blog offerings out there, both on and off of the DNN platform.&lt;/p&gt;  &lt;p&gt;We will walk through a first time blog configuration, and the flexibility it offers us to allow multiple blogs and blog themes.  We will also take a look at the settings and options it gives us to truly make our blog our own.  I have also done some things to help make my personal blog do some things that the Core Blog Module doesn’t do by itself.  I will show you what I have done.  Once we get through this, and if we have any time left, our final step will be to show you how you can modify the DNN Blog Module to put in some of your magic.&lt;/p&gt;  &lt;p&gt;Be sure to attend this meeting.  We will have some cool prizes, some &lt;a href="http://dayofdnn.com" target="_blank"&gt;Day of DotNetNuke®&lt;/a&gt; leftovers, and more.  As always, our meetings are free, and we cannot guarantee that our live stream will be up and running.  Make sure you show up.  :)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Next ODUG Meeting:&lt;/strong&gt;  July 9th, 2009  [&lt;a href="http://orlando.dotnetnukeug.net/WhatsNew/Events/tabid/91/ctl/Details/Mid/428/ItemID/107/Default.aspx?selecteddate=7/9/2009" target="_blank"&gt;Register to Attend&lt;/a&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:369f1578-c055-4faa-97c4-a6486fc86192" 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/DNN" rel="tag"&gt;DNN&lt;/a&gt;,&lt;a href="http://technorati.com/tags/DNN+Blogs" rel="tag"&gt;DNN Blogs&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Blog+Module" rel="tag"&gt;Blog Module&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Events" rel="tag"&gt;Events&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Community" rel="tag"&gt;Community&lt;/a&gt;,&lt;a href="http://technorati.com/tags/ODUG" rel="tag"&gt;ODUG&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Orlando+DotNetNuke+Users+Group" rel="tag"&gt;Orlando DotNetNuke Users Group&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://www.willstrohl.com/Blog/tabid/66/EntryId/414/DNN-Core-Blog-Module-Stars-in-the-next-ODUG-Meeting.aspx</link>
      <category domain="http://www.willstrohl.com/blog/tabid/66/blogid/3/default.aspx">Professional Edition</category>
      <author>wills@strohlsitedesign.com</author>
      <comments>http://www.willstrohl.com/Blog/tabid/66/EntryId/414/DNN-Core-Blog-Module-Stars-in-the-next-ODUG-Meeting.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.willstrohl.com/Blog/tabid/66/EntryId/414/DNN-Core-Blog-Module-Stars-in-the-next-ODUG-Meeting.aspx</guid>
      <pubDate>Sun, 21 Jun 2009 01:58:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.willstrohl.com/DesktopModules/Blog/Trackback.aspx?id=414</trackback:ping>
    </item>
  </channel>
</rss>