<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>The Accidental Geek</title>
    <description>One Geek's Journey</description>
    <link>http://blog.theaccidentalgeek.com/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.4.0.0</generator>
<language>en-US</language><blogChannel:blogRoll>http://blog.theaccidentalgeek.com/opml.axd</blogChannel:blogRoll><blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink><dc:creator>Joe Brinkman</dc:creator><dc:title>The Accidental Geek</dc:title><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/JoeBrinkman" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>DotNetNuke Symbol files and Intellisense</title><description>&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px 15px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="cymbal" border="0" alt="cymbal" align="right" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeSymbolfilesandIntellisense/2BF8486C/cymbal.jpg" width="244" height="175" /&gt; For the past 7 years, the &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke&lt;/a&gt; project has provided various packages for users to simplify different installation and upgrade scenarios.&amp;#160; Each package was built to address specific requests from the community.&amp;#160; We have recently begun receiving requests for symbol files (.pdb files) and xml comments.&amp;#160; As a result of these requests, starting with DotNetNuke 5.2.0, we will be releasing a new Symbols package with each release.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;The first set of files included in the Symbols package are all of the .PDB files for the core framework.&amp;#160; Essentially, any project which is included in the default solution file will generate a .pdb file that will be available in this package.&amp;#160; Many developers have long assumed that .pdb files were only generated for debug builds, however, that does not have to be the case.&amp;#160; It is possible, and even desirable, to generate .pdb files for release builds as well.&amp;#160; To generate the pdb files follow the steps outlined below:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Open the Project Properties &lt;/li&gt;    &lt;li&gt;Select the Compile tab &lt;/li&gt;    &lt;li&gt;Set the configuration mode to Release &lt;/li&gt;    &lt;li&gt;Click on the Advanced Compile Options button &lt;/li&gt;    &lt;li&gt;Set the “Generate debug info” to “pdb-only” &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;You should see a screen similar to the image below.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeSymbolfilesandIntellisense/5979682F/GeneratePDBs.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="GeneratePDBs" border="0" alt="GeneratePDBs" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeSymbolfilesandIntellisense/54D337A8/GeneratePDBs_thumb.png" width="520" height="413" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Most users will never need the pdb files for their installation, however, if you are troubleshooting error messages in your event log then the pdb files will provide additional information which can aids in troubleshooting.&amp;#160; To see how pdb files can help, lets look at a sample error message from the event log:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeSymbolfilesandIntellisense/42C6F41B/ErrorNoPDB.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Error- No PDB" border="0" alt="Error- No PDB" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeSymbolfilesandIntellisense/11F3A0D6/ErrorNoPDB_thumb.png" width="504" height="375" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;While there is some useful information in this error message in the stack trace, it just gives you a list of classes and methods to look through.&amp;#160; If your methods are not granular enough, just knowing the method may not be enough.&amp;#160; If you have installed the pdb files into your DotNetNuke installation then you will receive additional information in your stack trace as shown below.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeSymbolfilesandIntellisense/532E7DA2/ErrorWithPDB.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Error- With PDB" border="0" alt="Error- With PDB" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeSymbolfilesandIntellisense/24E45C1B/ErrorWithPDB_thumb.png" width="504" height="352" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Notice in the highlighted section that I now have an exact line number where the error occurred in the DotNetNuke source code.&amp;#160; This greatly simplifies identifying the root cause of errors and makes it much easier to take corrective action.&amp;#160; This is just one of the uses for pdb files, but is a great benefit when trying to isolate and troubleshoot problems in a production environment&lt;/p&gt;  &lt;p&gt;In addition to symbol files, the new Symbols package will include XML Comments that are generated as part of the build process.&amp;#160; The XML Comments will be used in the near future to create detailed API documentation for the core DotNetNuke framework.&amp;#160; In addition to their usefulness in creating documentation, they are also useful when you are writing code that uses the core API.&amp;#160; Lisa Feigenbaum has a great article in the &lt;a href="http://msdn.microsoft.com/en-us/magazine/dd722812.aspx"&gt;May 2009 issue of MSDN magazine&lt;/a&gt; that fully explains the benefits of the XML Comments files.&amp;#160; &lt;/p&gt;  &lt;p&gt;Over the coming months, the new DotNetNuke Reference team will be going through and helping to get the core framework documented with XML Comments.&amp;#160; This will allow us to provide more useful Intellisense and complete API reference documentation that also includes code samples for how to use various portions of the API.&lt;/p&gt;  &lt;p&gt;The first version of the Symbols package which was released today along with DotNetNuke 5.2.0 Beta 5 requires you to unzip the files over the top of your existing DotNetNuke installation.&amp;#160; It doesn’t matter if you are using the Install, Upgrade, Source, or StarterKit package for creating your DotNetNuke installation.&amp;#160; The only requirement is that the Symbol files are only valid for the specific version where they were generated.&amp;#160; This means that you cannot use the 5.2.0 Beta 5 symbols with any release other than Beta 5.&lt;/p&gt;  &lt;p&gt;We are working on updating the Symbols package so that in the final 5.2.0 release you will be able to install and uninstall the Symbols package from the Host/Extensions page.&amp;#160; This will make it possible to install Symbols for any installation where you have host access, even if you don’t have full access to the file system for directly uploading files.&lt;/p&gt;  &lt;p&gt;In the end, I think this is a good addition to the current set of packages we already provide.&amp;#160; For those who care about symbol files and intellisense, you will be able to use them without much difficulty and install them with whatever package you prefer to use.&amp;#160; For those people who don’t want them, you will be able to continue using the same packages you always have without any size bloat from files which you don’t want.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=PpbavFNCvkk:n_P7zRt3ttY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=PpbavFNCvkk:n_P7zRt3ttY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=PpbavFNCvkk:n_P7zRt3ttY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=PpbavFNCvkk:n_P7zRt3ttY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=PpbavFNCvkk:n_P7zRt3ttY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=PpbavFNCvkk:n_P7zRt3ttY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=PpbavFNCvkk:n_P7zRt3ttY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=PpbavFNCvkk:n_P7zRt3ttY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=PpbavFNCvkk:n_P7zRt3ttY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/PpbavFNCvkk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/PpbavFNCvkk/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/10/30/DotNetNuke-Symbol-files-and-Intellisense.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=f5819226-25cc-45a7-9abf-2533c79e296a</guid><pubDate>Fri, 30 Oct 2009 05:58:48 -1000</pubDate><category>DotNetNuke</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=f5819226-25cc-45a7-9abf-2533c79e296a</pingback:target><slash:comments>10</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=f5819226-25cc-45a7-9abf-2533c79e296a</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/10/30/DotNetNuke-Symbol-files-and-Intellisense.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=f5819226-25cc-45a7-9abf-2533c79e296a</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=f5819226-25cc-45a7-9abf-2533c79e296a</feedburner:origLink></item><item><title>Beta Testers Wanted: DotNetNuke 5.2.0 Beta Now Available</title><description>&lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/BetaTestersWantedDotNe.0BetaNowAvailable/783C7E58/betafish.jpg"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="beta-fish" border="0" alt="beta-fish" align="right" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/BetaTestersWantedDotNe.0BetaNowAvailable/10CC1BA9/betafish_thumb.jpg" width="267" height="311" /&gt;&lt;/a&gt; One of the benefits of Open Source development is that you have a lot of community members to kick the tires and make sure everything is working correctly before you finalize a release.&amp;#160; In the past &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke&lt;/a&gt; has limited our beta releases.&amp;#160; Usually it would start with a small internal team and move from there to a selected group of public beta testers.&amp;#160; We generally did not hold wide open public betas.&amp;#160; This year we are changing all of that.&amp;#160; We have added many resources to the team that allows us to better manage the beta testing process.&amp;#160; We are also busy adding new tools to make this process much more automated.&amp;#160; As a result, we are better able to handle wider releases and more frequent releases.&lt;/p&gt;  &lt;p&gt;I am happy to announce that DotNetNuke 5.2.0 Beta is now available for download.&amp;#160; You can find out more information on the &lt;a href="http://www.dotnetnuke.com/Community/WIPPrograms/BetaTestingProgram/tabid/1123/Default.aspx"&gt;Beta Testing page&lt;/a&gt; on DotNetNuke.com.&amp;#160; This is just one of many changes you will see in the coming months to open up the release process.&amp;#160; We believe these changes give people greater visibility into the state of the project, and foster greater community involvement and are excited to be making these positive steps forward.&amp;#160; We will be announcing even more changes at &lt;a href="http://www.dotnetnuke.com/Home/OpenForce09/OpenForce09Connections/tabid/1286/Default.aspx"&gt;OpenForce Connections&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Please note:&lt;/strong&gt; &lt;em&gt;Do not apply beta test software to production websites.&amp;#160; Always ensure you backup files and data before attempting any upgrade.&amp;#160; You will not be able to upgrade automatically from one beta build to another, or from beta builds to the final release. &lt;/em&gt;&lt;em&gt;&lt;font color="#ff0000"&gt;Beta testing software is for testing purposes only&lt;/font&gt;.&lt;/em&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=e3REUdFPaqs:kHSBGtM5iYY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=e3REUdFPaqs:kHSBGtM5iYY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=e3REUdFPaqs:kHSBGtM5iYY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=e3REUdFPaqs:kHSBGtM5iYY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=e3REUdFPaqs:kHSBGtM5iYY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=e3REUdFPaqs:kHSBGtM5iYY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=e3REUdFPaqs:kHSBGtM5iYY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=e3REUdFPaqs:kHSBGtM5iYY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=e3REUdFPaqs:kHSBGtM5iYY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/e3REUdFPaqs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/e3REUdFPaqs/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/10/13/Beta-Testers-Wanted-DotNetNuke-520-Beta-Now-Available.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=d41df466-7d96-4813-ada2-1d134ba67cf1</guid><pubDate>Tue, 13 Oct 2009 04:38:16 -1000</pubDate><category>DotNetNuke</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=d41df466-7d96-4813-ada2-1d134ba67cf1</pingback:target><slash:comments>5</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=d41df466-7d96-4813-ada2-1d134ba67cf1</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/10/13/Beta-Testers-Wanted-DotNetNuke-520-Beta-Now-Available.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=d41df466-7d96-4813-ada2-1d134ba67cf1</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=d41df466-7d96-4813-ada2-1d134ba67cf1</feedburner:origLink></item><item><title>DotNetNuke 5.1.4 Released</title><description>&lt;p&gt;After we released &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke&lt;/a&gt; 5.1.3 last night, a community member discovered a packaging error in the release.&amp;#160; Specifically the DotNetNuke WebControls 02.02.00 package was not properly integrated.&amp;#160; This package was added in 5.1.2 and included some additional defensive coding to help harden the DotNetNuke Web Controls against potential security issues.&amp;#160; The latest web controls package does not fix any specific security vulnerabilities, but rather improves the baseline security posture of the platform and makes it more difficult for a hacker to find and exploit vulnerabilities.&amp;#160; As a result of the mispackaging we felt it was prudent to release a new version to address this issue and ensure that the community and our Professional customers had a version which included these enhancements.&lt;/p&gt;  &lt;p&gt;Upgrading to 5.1.4 is not necessary, but it is recommended.&amp;#160; The changes included in 5.1.4 help keep you safe from future attacks and as such is the recommended version for all of our users.&amp;#160; if you are running 5.1.2 or 5.1.3 you can gain these same benefits by downloading and installing the latest version of the DotNetNuke Webcontrols project (02.02.00) from CodePlex (&lt;a href="http://dnnwebcontrols.codeplex.com/"&gt;http://dnnwebcontrols.codeplex.com/&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;This incident highlights one of the great benefits of Open Source software in general, and the DotNetNuke community specifically.&amp;#160; Because the community has access to the product source code they are able to perform a more thorough review of each release. Many of our community members take pride in the fact that they have a direct hand in helping to improve DotNetNuke.&amp;#160; I want to personally thank Jan Olsmar for quickly identifying the problem and bringing it to our attention so that we could correct it in a timely manner.&amp;#160; None of the proprietary software companies I have worked in had access to such a passionate and knowledgeable community and as a result I don’t think those proprietary products were as good as they could have been.&lt;/p&gt;  &lt;p&gt;This packaging issue also highlights another important topic – Quality.&amp;#160; Over the course of our history, DotNetNuke, like many Open Source products, has faced many challenges in ensuring the quality of our releases.&amp;#160; Overall, I think we have done a fairly good job, but I know we can do better.&amp;#160; We have had some releases, like 5.1.3 where our processes broke down and mistakes were made.&amp;#160; We are currently undergoing some changes to the DotNetNuke core team and the DotNetNuke Corporation team to help meet these challenges and further improve the quality of our releases.&amp;#160; I will be speaking more on this topic at DotNetNuke OpenForce Connections where we’ll be making some exciting new announcements in this regard.&amp;#160; Until then know that we are working hard to address our challenges and that we greatly appreciate the continued support and assistance of the entire DotNetNuke community in ensuring that we put out the best product possible.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=1AjKoteQsT4:yRnn9O6dilg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=1AjKoteQsT4:yRnn9O6dilg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=1AjKoteQsT4:yRnn9O6dilg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=1AjKoteQsT4:yRnn9O6dilg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=1AjKoteQsT4:yRnn9O6dilg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=1AjKoteQsT4:yRnn9O6dilg:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=1AjKoteQsT4:yRnn9O6dilg:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=1AjKoteQsT4:yRnn9O6dilg:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=1AjKoteQsT4:yRnn9O6dilg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/1AjKoteQsT4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/1AjKoteQsT4/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/10/01/DotNetNuke-514-Released.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=e4d2c2d8-543d-461c-b516-75f51d69af1f</guid><pubDate>Thu, 01 Oct 2009 15:06:05 -1000</pubDate><category>DotNetNuke</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=e4d2c2d8-543d-461c-b516-75f51d69af1f</pingback:target><slash:comments>10</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=e4d2c2d8-543d-461c-b516-75f51d69af1f</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/10/01/DotNetNuke-514-Released.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=e4d2c2d8-543d-461c-b516-75f51d69af1f</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=e4d2c2d8-543d-461c-b516-75f51d69af1f</feedburner:origLink></item><item><title>DotNetNuke 5.1.3 Released</title><description>&lt;p&gt;With the month of September coming to a close it is time once again for another &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke&lt;/a&gt; Stabilization release.&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;DotNetNuke 5.1.3 resolves almost 40 issues with the previous release and further stabilizes the 5.x codebase.&amp;#160; Given the stability of the recent 5.x releases it should not come as any surprise that the fixes in this release tend to be narrow edge cases or resolved problems where well known workarounds were available.&amp;#160; We also added a minor modification that improves the ability of administrators to email event logs to their support providers.&amp;#160; This will allow system integrators, hosters and consultants providing DotNetNuke customer support to get a better snapshot of errors that the user is experiencing without relying on the user to accurately cut and paste error messages. The changes outlined below were incorporated in these releases.&amp;#160; As usual, the complete details for all of the changes can be found in the &lt;a href="http://support.dotnetnuke.com/project/ChangeLog.aspx?PROJID=2"&gt;ChangeLog&lt;/a&gt;.&lt;/p&gt;  &lt;h3 class="SubSubHead"&gt;Major Highlights&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Added the ability to specify a subject line when emailing event viewer logs &lt;/li&gt;    &lt;li&gt;Modified the event viewer to include event logs as email attachments when emailing the event logs &lt;/li&gt;    &lt;li&gt;Added the ability to use dictionary objects for token replacement in system messages &lt;/li&gt;    &lt;li&gt;Fixed an issue which caused an error whenever edititng the Site Settings. &lt;/li&gt;    &lt;li&gt;Fixed issue which caused an error trying to retrieve a role group by name &lt;/li&gt;    &lt;li&gt;Fixed an issue which prevented a skin from being able to be re-installed or uninstalled. &lt;/li&gt;    &lt;li&gt;Fixed issue where Html module was displaying unpublished content &lt;/li&gt;    &lt;li&gt;Fixed issue where URLs for pages within the site were always being created as relative which is a change from previous versions. &lt;/li&gt;    &lt;li&gt;Removed solution explorer page from the Admin menu and removed the Marketplace feed from the OPML file. &lt;/li&gt;    &lt;li&gt;Fixed issue with upgrading DotNetNuke 4.x skins when upgrading site to DotNetNuke 5.x &lt;/li&gt;    &lt;li&gt;Fixed issue which resulted in incorrect URL for SiteMap in a child portal &lt;/li&gt;    &lt;li&gt;Fixed issue which caused error when deleting files from the Host file manager. &lt;/li&gt; &lt;/ul&gt;  &lt;h3 class="SubSubHead"&gt;Security Fixes&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;None &lt;/li&gt; &lt;/ul&gt;  &lt;h3 class="SubSubHead"&gt;Updated Modules/Providers&lt;/h3&gt;  &lt;p&gt;The following modules and providers have been updated in the 5.1.3 packages.&amp;#160; Please see the specific project pages for notes on what bugs or enhancements were corrected with each release.&lt;/p&gt;  &lt;h4 class="SubSubHead"&gt;Modules&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;HTML 05.01.04 &lt;/li&gt;    &lt;li&gt;Form and Lists 05.00.03 &lt;/li&gt;    &lt;li&gt;Forum 04.05.03 &lt;/li&gt; &lt;/ul&gt;  &lt;h4 class="SubSubHead"&gt;Providers&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;AspNetMembershipProvider 05.01.03 &lt;/li&gt;    &lt;li&gt;DNNMembershipProvider 05.01.03 &lt;/li&gt;    &lt;li&gt;FileBasedCachingProvider 05.01.03 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&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:0198dfbd-dcaf-4c7e-b4ca-b92650e4c916" 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/Release" rel="tag"&gt;Release&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=_kfs05gQe24:lsHaJgEBPYk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=_kfs05gQe24:lsHaJgEBPYk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=_kfs05gQe24:lsHaJgEBPYk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=_kfs05gQe24:lsHaJgEBPYk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=_kfs05gQe24:lsHaJgEBPYk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=_kfs05gQe24:lsHaJgEBPYk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=_kfs05gQe24:lsHaJgEBPYk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=_kfs05gQe24:lsHaJgEBPYk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=_kfs05gQe24:lsHaJgEBPYk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/_kfs05gQe24" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/_kfs05gQe24/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/09/30/DotNetNuke-513-Released.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=31f32107-2163-4f7b-9a2f-7a69a2f5f3bd</guid><pubDate>Wed, 30 Sep 2009 19:25:16 -1000</pubDate><category>DotNetNuke</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=31f32107-2163-4f7b-9a2f-7a69a2f5f3bd</pingback:target><slash:comments>6</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=31f32107-2163-4f7b-9a2f-7a69a2f5f3bd</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/09/30/DotNetNuke-513-Released.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=31f32107-2163-4f7b-9a2f-7a69a2f5f3bd</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=31f32107-2163-4f7b-9a2f-7a69a2f5f3bd</feedburner:origLink></item><item><title>DotNetNuke Tips and Tricks #14: Testing Emails in a Dev Environment</title><description>&lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/category/Tips-and-Tricks.aspx"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 15px 15px; display: inline; border-top: 0px; border-right: 0px" title="dnntipsandtricks[1]" border="0" alt="dnntipsandtricks[1]" align="right" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeTipsandTricks14TestingEmailsin/6072F328/dnntipsandtricks1.png" width="202" height="202" /&gt;&lt;/a&gt; There are many times when doing DotNetNuke development that your module needs to send emails.&amp;#160; You often have emails that need to go out to several different addresses i.e. an email to the user, one to the system administrator and maybe one to a fulfillment partner.&amp;#160; You frequently have different emails that get sent based on specific configuration settings or that change based on the role of the user.&lt;/p&gt;  &lt;p&gt;When developing for &lt;a href="http://www.dotnetnuke.com" target="_blank"&gt;DotNetNuke&lt;/a&gt; I often create a custom installation devoted to the module under development.&amp;#160; In the past I have not always had an easy method for configuring the SMTP server so that I could trap all the emails being sent out from the system.&amp;#160; I would try to set all the emails to one of my many email addresses and set my SMTP settings to use one of my production email servers.&amp;#160; The problem with my previous approach is that I often missed emails.&amp;#160; Unless all the emails are directed to my personal email accounts, I had no way to trap the emails on my dev box to make sure they were correct.&amp;#160; My previous method also did not make it easy to follow the entire email workflow.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;All of these problems were solved recently when I discovered a simple little application called &lt;a href="http://invalidlogic.com/papercut/" target="_blank"&gt;Papercut&lt;/a&gt; after reading a blog from &lt;a href="http://simpable.com/code/papercut/" target="_blank"&gt;Scott Watermasysk&lt;/a&gt;.&amp;#160;&amp;#160; Papercut provides a nice GUI that allows me to actually view the raw email content, the text content and an HTML view where appropriate.&amp;#160; Neptune is not as nice in this&amp;#160; The added bonus with Papercut, is that I can also forward emails to whatever email address I wish.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeTipsandTricks14TestingEmailsin/3C9743A1/Papercut.jpg"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Papercut" border="0" alt="Papercut" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeTipsandTricks14TestingEmailsin/0EC97ADC/Papercut_thumb.jpg" width="404" height="232" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now whenever I configure a new DotNetNuke test instance, I just set the SMTP server to localhost and startup Papercut.&amp;#160; Every email is trapped and ready for me to inspect.&amp;#160; When I think everything is working correctly, I can forward the appropriate emails off to my Marketing director for final approval.&amp;#160; At no time did I clutter my inbox or worry about customers inadvertently receiving test emails.&lt;/p&gt;  &lt;p&gt;While doing some research for this post, I also found another solution called &lt;a href="http://donovanbrown.com/post/2008/10/20/Neptune.aspx" target="_blank"&gt;Neptune&lt;/a&gt; which also traps emails during development.&amp;#160; It works a bit differently and is designed for integration into the development environment with interfaces exposed for automated unit testing.&amp;#160; You can trigger an email to be sent and then programmatically inspect the actual email that was sent.&lt;/p&gt;  &lt;p&gt;Being able to easily inspect and test emails will greatly improve your email handling code.&amp;#160; Tools which simplify this task make it more likely that you will run through more scenarios without worrying about filling your inbox or being worried about sending inadvertent emails to customers.&amp;#160; This is a good thing.&amp;#160; I will definitely be using both of these tools on all my future DotNetNuke development work.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=7Fr2bgB4xZo:c_QUC2qGSnk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=7Fr2bgB4xZo:c_QUC2qGSnk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=7Fr2bgB4xZo:c_QUC2qGSnk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=7Fr2bgB4xZo:c_QUC2qGSnk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=7Fr2bgB4xZo:c_QUC2qGSnk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=7Fr2bgB4xZo:c_QUC2qGSnk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=7Fr2bgB4xZo:c_QUC2qGSnk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=7Fr2bgB4xZo:c_QUC2qGSnk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=7Fr2bgB4xZo:c_QUC2qGSnk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/7Fr2bgB4xZo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/7Fr2bgB4xZo/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/09/22/DotNetNuke-Tips-and-Tricks-14-Testing-Emails-in-a-Dev-Environment.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=de8f762c-445c-4284-a9d5-18c49eceadc1</guid><pubDate>Tue, 22 Sep 2009 09:47:54 -1000</pubDate><category>DotNetNuke</category><category>Tips and Tricks</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=de8f762c-445c-4284-a9d5-18c49eceadc1</pingback:target><slash:comments>17</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=de8f762c-445c-4284-a9d5-18c49eceadc1</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/09/22/DotNetNuke-Tips-and-Tricks-14-Testing-Emails-in-a-Dev-Environment.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=de8f762c-445c-4284-a9d5-18c49eceadc1</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=de8f762c-445c-4284-a9d5-18c49eceadc1</feedburner:origLink></item><item><title>DotNetNuke 4.9.5 and 5.1.2 Released</title><description>&lt;div style="float: right"&gt;   &lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNuke4.9.5and5.1.2Released/60EF04B8/LogoPE1.gif"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Logo-PE[1]" border="0" alt="Logo-PE[1]" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNuke4.9.5and5.1.2Released/2E8B3139/LogoPE1_thumb.gif" width="186" height="52" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNuke4.9.5and5.1.2Released/0750E804/LogoCE1.gif"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Logo-CE[1]" border="0" alt="Logo-CE[1]" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNuke4.9.5and5.1.2Released/0E03F187/LogoCE1_thumb.gif" width="187" height="52" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;&lt;a href="http://www.dotnetnuke.com/"&gt;DotNetNuke&lt;/a&gt; 4.9.5 and 5.1.2 are now available for download.&amp;#160; DotNetNuke 5.1.2 is a stabilization release&amp;#160; focused exclusively on fixing outstanding bugs which did not make the cutoff for DotNetNuke 5.1.1 or which were discovered after 5.1.1 was released.&amp;#160; DotNetNuke 4.9.5 includes some security fixes and a critical fix which affected module caching.&amp;#160; DotNetNuke 4.9.5 represents that last release in the 4.x product line with all future development being focused on the 5.x platform.&amp;#160; As usual, if there are critical security issues, then we will certainly evaluate whether it warrants another 4.x release.&amp;#160; The DotNetNuke 5.1.2 Professional and Community edition releases continue the stabilization work that was begun with 5.1.1.&amp;#160; This release further solidifies an already great product and is the recommended version for production sites.&amp;#160; The changes outlined below were incorporated in these releases.&amp;#160; As usual, the complete details for all of the changes can be found in the &lt;a href="http://support.dotnetnuke.com/project/ChangeLog.aspx?PROJID=2"&gt;ChangeLog&lt;/a&gt;.&lt;/p&gt;  &lt;h4&gt;DotNetNuke 4.9.5&lt;/h4&gt;  &lt;h5&gt;Major Highlights&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;Fixed issue which caused the starter kit not to install properly &lt;/li&gt;    &lt;li&gt;Fixed issue where cache was not working properly for web crawlers &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;Security Fixes&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;HTML/Script Code Injection Vulnerability in ClientAPI &lt;/li&gt;    &lt;li&gt;HTML/Script Code Injection Vulnerability when operating with multiple languages &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;Updated Modules/Providers&lt;/h5&gt;  &lt;p&gt;The following modules and providers have been updated in the 4.9.5 packages.&amp;#160; Please see the specific project pages for notes on what bugs or enhancements were corrected with each release.&lt;/p&gt;  &lt;h6&gt;Modules&lt;/h6&gt;  &lt;ul&gt;   &lt;li&gt;HTML 04.09.05 &lt;/li&gt;    &lt;li&gt;Events 05.00.02 &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;Assemblies&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;WebControls 02.02.00 &lt;/li&gt;    &lt;li&gt;ClientAPI 04.01.02 &lt;/li&gt; &lt;/ul&gt;  &lt;h6&gt;Providers&lt;/h6&gt;  &lt;ul&gt;   &lt;li&gt;none &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;DotNetNuke 5.1.2&lt;/h4&gt;  &lt;h5&gt;Major Highlights&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;Fixed issue which caused modules not be properly upgraded to 5.x if they were missing a manifest file &lt;/li&gt;    &lt;li&gt;Fixed issue where register link on the login module did not work when portal was configured for private membership &lt;/li&gt;    &lt;li&gt;Fixed issue where en-US language was always enabled after an upgrade &lt;/li&gt;    &lt;li&gt;Fixed issue where the language pack writer was not creating full language packs. &lt;/li&gt;    &lt;li&gt;Re-added the PageStatePersistence setting to the Host Settings page with additional warning messages. &lt;/li&gt;    &lt;li&gt;Fixed breaking change in ActionBase where properties were inadvertently removed instead of being marked obsolete. &lt;/li&gt;    &lt;li&gt;Fixed issue where User settings were relying on default values, but the email API was not aware of the defaults. &lt;/li&gt;    &lt;li&gt;Fixed issue where the HasObjectDependencies property of ScheduleItem was not properly calculated. &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;Security Fixes&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;HTML/Script Code Injection Vulnerability in ClientAPI &lt;/li&gt;    &lt;li&gt;HTML/Script Code Injection Vulnerability when operating with multiple languages &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;Updated Modules/Providers&lt;/h5&gt;  &lt;p&gt;The following modules and providers have been updated in the 5.1.2 packages.&amp;#160; Please see the specific project pages for notes on what bugs or enhancements were corrected with each release.&lt;/p&gt;  &lt;h6&gt;Modules&lt;/h6&gt;  &lt;ul&gt;   &lt;li&gt;HTML 05.01.03 &lt;/li&gt;    &lt;li&gt;Events 05.00.02 &lt;/li&gt; &lt;/ul&gt;  &lt;h5&gt;Assemblies&lt;/h5&gt;  &lt;ul&gt;   &lt;li&gt;WebControls 02.02.00 &lt;/li&gt;    &lt;li&gt;ClientAPI 04.01.02 &lt;/li&gt; &lt;/ul&gt;  &lt;h6&gt;Providers&lt;/h6&gt;  &lt;ul&gt;   &lt;li&gt;none &lt;/li&gt; &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=OWAoguEkUH0:CM-rB6O9hxY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=OWAoguEkUH0:CM-rB6O9hxY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=OWAoguEkUH0:CM-rB6O9hxY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=OWAoguEkUH0:CM-rB6O9hxY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=OWAoguEkUH0:CM-rB6O9hxY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=OWAoguEkUH0:CM-rB6O9hxY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=OWAoguEkUH0:CM-rB6O9hxY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=OWAoguEkUH0:CM-rB6O9hxY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=OWAoguEkUH0:CM-rB6O9hxY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/OWAoguEkUH0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/OWAoguEkUH0/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/09/02/DotNetNuke-495-and-512-Released.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=64aa8833-5052-4524-ba2f-6d0862e80a42</guid><pubDate>Wed, 02 Sep 2009 10:50:18 -1000</pubDate><category>DotNetNuke</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=64aa8833-5052-4524-ba2f-6d0862e80a42</pingback:target><slash:comments>5</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=64aa8833-5052-4524-ba2f-6d0862e80a42</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/09/02/DotNetNuke-495-and-512-Released.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=64aa8833-5052-4524-ba2f-6d0862e80a42</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=64aa8833-5052-4524-ba2f-6d0862e80a42</feedburner:origLink></item><item><title>Let&amp;rsquo;s Get This Party Started: (re)Launching the Cleveland DotNetNuke User Group</title><description>&lt;h3&gt;&lt;img style="margin: 0px 0px 10px 10px; display: inline; border: 0px" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/ClevelandDotNetNukeUserGroup_CFF6/ClevelandUG_770a265e-af9b-44c5-b5f5-0a45693d46d3.png" border="0" alt="ClevelandUG" title="ClevelandUG" width="254" height="164" align="right" /&gt; Overview&lt;/h3&gt;
&lt;p&gt;
A little over 18 months ago we had the first meeting for the &lt;a href="http://www.dotnetnuke.com/" target="_blank" title="DotNetNuke"&gt;DotNetNuke&lt;/a&gt; User Group in the Cleveland Ohio area.&amp;nbsp; Unfortunately, that was our only meeting.&amp;nbsp; It was always my intention to help get the Cleveland area DotNetNuke User Group off the ground but as the months dragged on other events just always seemed to take precedence.&amp;nbsp; Since that first meeting I have had the opportunity to speak at several different .Net and DotNetNuke User Groups.&amp;nbsp; The more I saw the success of the &lt;a href="http://www.capitaldug.org/" target="_blank"&gt;Capital DotNetNuke User Group (CDUG)&lt;/a&gt;, the &lt;a href="http://www.socaldug.org/Home/tabid/36/Default.aspx" target="_blank"&gt;Los Angeles DotNetNuke User Group&lt;/a&gt;, and the &lt;a href="http://orlando.dotnetnukeug.net/" target="_blank"&gt;Orlando DotNetNuke User Group (ODUG)&lt;/a&gt; and even some of the smaller, growing groups like those in &lt;a href="http://www.dnnug.com/" target="_blank"&gt;St Louis&lt;/a&gt;, &lt;a href="http://dnnct.org/" target="_blank"&gt;Connecticut&lt;/a&gt;, &lt;a href="http://dallas.dnnug.net/" target="_blank"&gt;Dallas&lt;/a&gt;, and &lt;a href="http://www.meetup.com/Arizona-DNN" target="_blank"&gt;Arizona&lt;/a&gt;, the more I get excited about having a user group in my own backyard.&amp;nbsp; The Europeans also have several large and very active user groups like those in the &lt;a href="http://netherlands.dnn-usergroup.net/Default.aspx" target="_blank"&gt;Netherlands&lt;/a&gt;, &lt;a href="http://www.dnn-usergroup.de/" target="_blank"&gt;Germany&lt;/a&gt; and &lt;a href="http://www.dotnetnuke.fr/" target="_blank"&gt;France&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
This area has a really strong base of DotNetNuke users and even some well known DotNetNuke related companies.&amp;nbsp; &lt;a href="http://www.onyaktech.com/" target="_blank"&gt;Onyaktech&lt;/a&gt;, &lt;a href="http://www.ihostasp.net/" target="_blank"&gt;IHostAsp.net&lt;/a&gt;, &lt;a href="http://www.aspdotnetstorefront.com/" target="_blank"&gt;AspDotNetStorefront&lt;/a&gt;, &lt;a href="http://technologyworkgroup.com/default.htm" target="_blank"&gt;Technology Workgroup&lt;/a&gt; and &lt;a href="http://vollersolutions.com/" target="_blank"&gt;Voller Solutions&lt;/a&gt; are just a few of the DotNetNuke organizations in the area.&amp;nbsp; Having local companies who are active members of the DotNetNuke ecosystem is certainly a big help in that it gives us a nice foundation upon which to build a local User Group.&amp;nbsp; It also means that we have a wealth of local talent that can help keep the group going so the full weight does not fall on one persons shoulders.
&lt;/p&gt;
&lt;p&gt;
With all of the that said, I would like to announce that we are now ready to really get the Cleveland DotNetNuke User Group off the ground.&amp;nbsp; I invite all those Cleveland area DotNetNuke users and developers to our meeting as we kick this group into gear.&amp;nbsp; You can find all the pertinent details for the meeting below.&amp;nbsp; If you are in the area, but are unable to attend, please leave me a comment so we can make sure you get early notification for our upcoming meetings.
&lt;/p&gt;
&lt;h3&gt;Meeting Information&lt;/h3&gt;
&lt;p&gt;
&lt;strong&gt;Date&lt;/strong&gt;:&amp;nbsp; Wednesday, August 18th, 2009
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Time&lt;/strong&gt;:&amp;nbsp; 6:30 PM
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Location&lt;/strong&gt;:&amp;nbsp; 
&lt;/p&gt;
&lt;p&gt;
Energy Focus Inc. &lt;br /&gt;
32000 Aurora Rd. &lt;br /&gt;
Solon, OH 44139
&lt;/p&gt;
&lt;div id="scid:84E294D0-71C9-4bd0-A0FE-95764E0368D9:e0130576-2927-494c-bcac-c356b96ea91d" class="wlWriterEditableSmartContent" style="margin: 0px; display: inline; float: none; padding: 0px"&gt;
&lt;a id="map-98508195-ed17-4901-86d3-090fc2f501da" href="http://maps.live.com/default.aspx?v=2&amp;amp;cp=41.39091~-81.45289&amp;amp;lvl=13&amp;amp;style=r&amp;amp;sp=aN.41.39046_-81.45074_Energy%2520Focus%2520Inc._&amp;amp;mkt=en-us&amp;amp;FORM=LLWR" title="Click to view this map on Live.com"&gt;&lt;img src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/ClevelandDotNetNukeUserGroup_CFF6/map-511fd631d85f.jpg" alt="Map picture" width="320" height="240" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
If you get lost then feel free to contact me at 330-564-6898 for help.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Topic/Speaker:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;DotNetNuke and &lt;/em&gt;&lt;a href="http://jquery.com/" target="_blank"&gt;&lt;em&gt;jQuery&lt;/em&gt;&lt;/a&gt; &lt;br /&gt;
The featured topic this month will be a presentation by Joe Brinkman on DotNetNuke and jQuery.&amp;nbsp; Over the last couple of years, jQuery has been growing in popularity.&amp;nbsp; This ultimately resulted in adoption by Microsoft as part of the AJAX strategy for ASP.Net and will be shipped with Visual Studio 2010.&amp;nbsp; Shortly after Microsoft&amp;rsquo;s announcement, the DotNetNuke team announced that we would be supporting and shipping jQuery as well as part of DotNetNuke.&amp;nbsp; In this session we&amp;rsquo;ll look at jQuery and show how easy it is to use it in DotNetNuke.
&lt;/p&gt;
&lt;p&gt;
Since this is our first real meeting, we&amp;rsquo;ll spend the first part of the meeting getting input around group logistics.&amp;nbsp; What is the best meeting time and day, identifying a permanent meeting location, coming up with an official group name and other items like that.&amp;nbsp; I would really like the users to feel that this group really represents them and so we&amp;rsquo;ll try and cater to what works out best for the whole group.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Food/Drinks:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
We are still looking to line up some sponsors for our meetings.&amp;nbsp; For tomorrow&amp;rsquo;s meeting we&amp;rsquo;ll have drinks but no pizza or food, so grab a quick bite before you come to the meeting.&amp;nbsp; If you would like to sponsor the meeting or would like additional information about sponsoring the user group, please contact me at joe AT dnncorp.com.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;User Group Website:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
IHostAsp.Net has agreed to provide hosting for the user group website.&amp;nbsp; Once we have a final name picked out, we&amp;rsquo;ll start working on getting the groups website setup.
&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=_i0FaKm403c:-E8nJJ7u13k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=_i0FaKm403c:-E8nJJ7u13k:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=_i0FaKm403c:-E8nJJ7u13k:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=_i0FaKm403c:-E8nJJ7u13k:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=_i0FaKm403c:-E8nJJ7u13k:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=_i0FaKm403c:-E8nJJ7u13k:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=_i0FaKm403c:-E8nJJ7u13k:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=_i0FaKm403c:-E8nJJ7u13k:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=_i0FaKm403c:-E8nJJ7u13k:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/_i0FaKm403c" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/_i0FaKm403c/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/08/18/Letrsquo3bs-Get-This-Party-Started-(re)Launching-the-Cleveland-DotNetNuke-User-Group.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=dd2c410e-a707-4c2b-a03c-26382e260991</guid><pubDate>Tue, 18 Aug 2009 12:27:00 -1000</pubDate><category>DotNetNuke</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=dd2c410e-a707-4c2b-a03c-26382e260991</pingback:target><slash:comments>10</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=dd2c410e-a707-4c2b-a03c-26382e260991</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/08/18/Letrsquo3bs-Get-This-Party-Started-(re)Launching-the-Cleveland-DotNetNuke-User-Group.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=dd2c410e-a707-4c2b-a03c-26382e260991</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=dd2c410e-a707-4c2b-a03c-26382e260991</feedburner:origLink></item><item><title>DotNetNuke Tips and Tricks #13: Re-using Content with jQuery</title><description>&lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/category/Tips-and-Tricks.aspx" target="_blank"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" align="right" src="http://blog.theaccidentalgeek.com/pics/dnntipsandtricks.png" /&gt;&lt;/a&gt; Over the past 6 years I have watched as &lt;a title="DotNetNuke" href="http://www.dotnetnuke.com/" target="_blank"&gt;DotNetNuke&lt;/a&gt; matured into a well-rounded platform that is capable of meeting the needs of a wide variety of individuals and organizations.&amp;#160; One of the keys to the platform’s success is that it continues to leverage technology to make it easy to build sites the way you want.&amp;#160; &lt;/p&gt;  &lt;p&gt;A user recently asked me how they could re-use the content from one page on another page in their site.&amp;#160; A couple of years ago I would have suggested that they make a “copy” of the module using the built-in capabilities.&amp;#160; This works well when you are trying to duplicate the entire content of the module, however, there are times when you just want a portion of the content.&amp;#160; In the past the answer would have been to split up the content on the original page – which might require changing your skin and may not be possible when using 3rd party modules.&lt;/p&gt;  &lt;p&gt;The optimal solution would not require me to make any changes to the original page, but would instead allow me just to grab specific content and display it on a new page.&amp;#160; Thanks goodness we added &lt;a href="http://jquery.com/" target="_blank"&gt;jQuery&lt;/a&gt; support in 4.9 and 5.0.&amp;#160; This problem is really easy to solve with some simple html and a jQuery one-liner.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;For a simple scenario, lets assume I want to copy the quicklinks from default template on my site’s homepage (I’m using the standard DotNetNuke install so you can follow along).&amp;#160; The quicklinks are a subset of the content from an HTML module on the home page.&lt;/p&gt;  &lt;p&gt;Add a test page to your site so that we can see how this works.&amp;#160; The test page should come pre-installed with an HTML module.&amp;#160; If your copy does not, go ahead and add one now… don’t worry, I’ll wait for you to finish.&lt;/p&gt;  &lt;p&gt;Now we edit the content in our HTML module and place a simple div in our content.&lt;/p&gt;  &lt;pre class="js" name="code"&gt;&amp;lt;div id=&amp;quot;placeholderId&amp;quot; &amp;gt;This content will be replaced.&amp;lt;/div&amp;gt;&lt;/pre&gt;

&lt;p&gt;I use a simple trick that Kevin Schreiner showed me a couple years ago to inject a script into my page without worrying about the HTML module stripping it out.&amp;#160; Open the module settings and expand the “Advanced Settings” node to display the module Header and Footer items.&amp;#160; We’ll place our JavaScript into the Header which is not altered when it is injected into the page.&lt;/p&gt;

&lt;p&gt;The following JavaScript will run after the page has finished loading.&lt;/p&gt;

&lt;pre class="js" name="code"&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
jQuery(function($){
    $(&amp;quot;#placeholderId&amp;quot;)
        .load(&amp;quot;http://localhost/dnn511pe/Default.aspx #QuickLinks&amp;quot;);
});
&amp;lt;/script&amp;gt;&lt;/pre&gt;

&lt;p&gt;The $(&amp;quot;#placeholderId&amp;quot;) line gets a reference to the element we defined in our HTML.&amp;#160; The .load method, makes an AJAX call to retrieve the home page, and then finds the content that matches the #QuickLinks selector.&lt;/p&gt;

&lt;p&gt;All of this works really well, but this is DotNetNuke and we can make this much easier.&amp;#160; So lets create a simple module that handles all this drudgery for us.&amp;#160; I’m going to call this module ContentGrabber.&lt;/p&gt;

&lt;p&gt;The ContentGrabber module has a simple view page that will inject our placeholder and JavaScript.&amp;#160; We also add a settings page because it wouldn’t be very interesting if we could only grab the quicklinks from the home page.&lt;/p&gt;

&lt;p&gt;My view page has very little markup.&amp;#160; One change I did make to our original script and HTML was to add a few code expressions to allow us to specify different pages and jQuery selectors.&amp;#160; We also made sure to generate a unique content ID so that we could add multiple modules to the same page.&lt;/p&gt;

&lt;pre class="xml" name="code"&gt;&amp;lt;%@ Control language=&amp;quot;vb&amp;quot; 
    Inherits=&amp;quot;DotNetNuke.Modules.ContentGrabber.ViewContent&amp;quot; 
    CodeFile=&amp;quot;ViewContent.ascx.vb&amp;quot; 
    AutoEventWireup=&amp;quot;false&amp;quot; Explicit=&amp;quot;True&amp;quot; %&amp;gt;

&amp;lt;% If Not String.IsNullOrEmpty(PageURL) Then%&amp;gt;

&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
    jQuery(function($) {
        $(&amp;quot;#contentGrabber_&amp;lt;%=moduleid %&amp;gt;&amp;quot;)
            .load(&amp;quot;&amp;lt;%=PageURL %&amp;gt; &amp;lt;%=Query %&amp;gt;&amp;quot;);
    });
&amp;lt;/script&amp;gt;

&amp;lt;% End If%&amp;gt;

&amp;lt;div id=&amp;quot;contentGrabber_&amp;lt;%=moduleid %&amp;gt;&amp;quot;&amp;gt;
    Update the module settings to replace this content.
&amp;lt;/div&amp;gt;&lt;/pre&gt;

&lt;p&gt;Now the only thing left to do is add some code to the code-behind to retrieve the PageURL and Query values from our module settings.&amp;#160; Notice that there are really only two lines of actual code, beyond the boilerplate namespace, class and property declarations.&lt;/p&gt;

&lt;pre class="vb" name="code"&gt;Imports System

Namespace DotNetNuke.Modules.ContentGrabber

    Partial Class ViewContent
        Inherits Entities.Modules.PortalModuleBase

        Public ReadOnly Property PageURL() As String
            Get
                Return CType(Me.Settings(GRABBER_URL), String)
            End Get
        End Property

        Public ReadOnly Property Query() As String
            Get
                Return CType(Me.Settings(GRABBER_QUERY), String)
            End Get
        End Property

    End Class

End Namespace&lt;/pre&gt;

&lt;p&gt;So now that our view page is complete, lets create a page to handle editing our settings.&amp;#160; &lt;/p&gt;

&lt;pre class="xml" name="code"&gt;&amp;lt;%@ Control language=&amp;quot;vb&amp;quot; 
    Inherits=&amp;quot;DotNetNuke.Modules.ContentGrabber.Settings&amp;quot; 
    CodeFile=&amp;quot;Settings.ascx.vb&amp;quot; 
    AutoEventWireup=&amp;quot;false&amp;quot; 
    Explicit=&amp;quot;True&amp;quot; %&amp;gt;
&amp;lt;%@ Register TagPrefix=&amp;quot;dnn&amp;quot; 
    TagName=&amp;quot;Label&amp;quot; 
    Src=&amp;quot;~/controls/LabelControl.ascx&amp;quot; %&amp;gt;

&amp;lt;table width=&amp;quot;550&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;4&amp;quot; border=&amp;quot;0&amp;quot; width=100%&amp;gt;
    &amp;lt;tr&amp;gt;
        &amp;lt;td class=&amp;quot;SubHead&amp;quot; width=&amp;quot;150&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;
            &amp;lt;dnn:label id=&amp;quot;plPage&amp;quot; controlname=&amp;quot;txtPage&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
        &amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;
            &amp;lt;asp:TextBox ID=&amp;quot;txtPage&amp;quot; runat=&amp;quot;server&amp;quot; Width=&amp;quot;300&amp;quot;&amp;gt;&amp;lt;/asp:TextBox&amp;gt;
        &amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt; 
    
    &amp;lt;tr id=&amp;quot;rowWorkflow&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;
        &amp;lt;td class=&amp;quot;SubHead&amp;quot; width=&amp;quot;150&amp;quot; valign=&amp;quot;top&amp;quot;&amp;gt;
            &amp;lt;dnn:label id=&amp;quot;plQuery&amp;quot; controlname=&amp;quot;txtQuery&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;
        &amp;lt;/td&amp;gt;
        &amp;lt;td&amp;gt;
            &amp;lt;asp:TextBox ID=&amp;quot;txtQuery&amp;quot; runat=&amp;quot;server&amp;quot; Width=&amp;quot;300&amp;quot;&amp;gt;&amp;lt;/asp:TextBox&amp;gt;
        &amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;&lt;/pre&gt;

&lt;p&gt;There is not much interesting going on here.&amp;#160; Yes, yes.&amp;#160; I know.&amp;#160; I used a table.&amp;#160; It’s ok.&amp;#160; The W3C hasn’t completely deprecated that tag yet.&amp;#160; If you would prefer to be semantically correct then feel free to use divs and CSS.&amp;#160; We’ll wait the extra 10 minutes for you to catch up.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeTipsandTricks13ReusingContentw_7A9C/ContentGrabberSettings_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ContentGrabberSettings" border="0" alt="ContentGrabberSettings" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeTipsandTricks13ReusingContentw_7A9C/ContentGrabberSettings_thumb.png" width="420" height="269" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;OK.&amp;#160; Hopefully I didn’t lose any readers over that whole table thing.&amp;#160; Let’s move on the code-behind.&lt;/p&gt;

&lt;pre class="vb" name="code"&gt;Imports System
Imports System.Web.UI

Namespace DotNetNuke.Modules.ContentGrabber

    Partial Class Settings
        Inherits DotNetNuke.Entities.Modules.ModuleSettingsBase

        Public Overrides Sub LoadSettings()
            Try
                If Not Page.IsPostBack Then
                    txtPage.Text = CType(ModuleSettings(GRABBER_URL), String)
                    txtQuery.Text = CType(ModuleSettings(GRABBER_QUERY), String)
                End If
            Catch exc As Exception    'Module failed to load
                ProcessModuleLoadException(Me, exc)
            End Try
        End Sub

        Public Overrides Sub UpdateSettings()
            Try

                ' update modulesettings
                Dim objModules As New DotNetNuke.Entities.Modules.ModuleController
                objModules.UpdateModuleSetting(ModuleId, GRABBER_URL, txtPage.Text)
                objModules.UpdateModuleSetting(ModuleId, GRABBER_QUERY, txtQuery.Text)

            Catch exc As Exception    'Module failed to load
                ProcessModuleLoadException(Me, exc)
            End Try
        End Sub

    End Class

End Namespace&lt;/pre&gt;

&lt;p&gt;This code was a little more involved, but still pretty simple.&amp;#160; I’ll leave it up to the user to create the associated resource file for our labels.&amp;#160; At this point we have a fully working module that packages up our original script in a nice little module with settings to handle the customizable behavior.&amp;#160; As you can see in the image below, both approaches provide the same results.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeTipsandTricks13ReusingContentw_7A9C/ContentGrabber_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="ContentGrabber" border="0" alt="ContentGrabber" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeTipsandTricks13ReusingContentw_7A9C/ContentGrabber_thumb.png" width="420" height="295" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;

&lt;p&gt;I have left a few exercises for the reader.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Substitute the URL control for the URL setting. &lt;/li&gt;

  &lt;li&gt;Add an AJAX waiting image while loading the HTML. &lt;/li&gt;

  &lt;li&gt;Allow the user visually select the page element(s) they want to copy. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="http://contentgrabber.codeplex.com/" target="_blank"&gt;Download the working module from CodePlex.&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=hsm8IQw9HCg:LEj0msCDZbk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=hsm8IQw9HCg:LEj0msCDZbk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=hsm8IQw9HCg:LEj0msCDZbk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=hsm8IQw9HCg:LEj0msCDZbk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=hsm8IQw9HCg:LEj0msCDZbk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=hsm8IQw9HCg:LEj0msCDZbk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=hsm8IQw9HCg:LEj0msCDZbk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=hsm8IQw9HCg:LEj0msCDZbk:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=hsm8IQw9HCg:LEj0msCDZbk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/hsm8IQw9HCg" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/hsm8IQw9HCg/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/08/13/DotNetNuke-Tips-and-Tricks-13-Re-using-Content-with-jQuery.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=a29c0d62-8dbf-4e27-a09a-c57664d26d4f</guid><pubDate>Thu, 13 Aug 2009 08:00:50 -1000</pubDate><category>DotNetNuke</category><category>Tips and Tricks</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=a29c0d62-8dbf-4e27-a09a-c57664d26d4f</pingback:target><slash:comments>9</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=a29c0d62-8dbf-4e27-a09a-c57664d26d4f</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/08/13/DotNetNuke-Tips-and-Tricks-13-Re-using-Content-with-jQuery.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=a29c0d62-8dbf-4e27-a09a-c57664d26d4f</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=a29c0d62-8dbf-4e27-a09a-c57664d26d4f</feedburner:origLink></item><item><title>Getting your DotNetNuke Website Up and Running</title><description>&lt;p&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="DNN 5 Users Guide" border="0" alt="DNN 5 Users Guide" align="right" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/GettingyourDotNetNukeWebsiteUpandRunning_8F18/DNN%205%20Users%20Guide_0ef13f3f-aeb1-4d21-b6ee-cf88f49b14f5.png" width="250" height="416" /&gt; &lt;/p&gt;  &lt;p&gt;Over the last 5 years, &lt;a title="DotNetNuke" href="http://www.dotnetnuke.com/" target="_blank"&gt;DotNetNuke&lt;/a&gt; has been blessed a large number of books being written about the platform.&amp;#160; I was fortunate to be part of the team that co-authored a couple of the first books on the platform, and I continue to try reading every book that comes out on the platform.&amp;#160; Some books, like &lt;a href="http://www.wrox.com/WileyCDA/WroxTitle/Professional-DotNetNuke-5-Open-Source-Web-Application-Framework-for-ASP-NET.productCd-0470438703.html"&gt;Professional DotNetNuke 5: Open Source Web Application Framework for ASP.NET&lt;/a&gt; cover multiple aspects of the DotNetNuke platform and is a great book for Administrators, Developers and Designers, but it necessarily can’t cover every topic in depth.&amp;#160; Other books, like DotNetNuke Module Programming, are narrowly targeted at Module developers.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Recently I had the chance to read the new DotNetNuke 5 User’s Guide from Wrox press and came away very impressed with the book.&amp;#160; The book is written by Chris Hammond and Patrick Renner from Engage Software, who both have extensive background working with DotNetNuke.&amp;#160; Chris is an active community and core team member, is the project lead for the DotNetNuke Wiki project and is the lead developer on the Engage:Publish module. Patrick is a project manager and trainer at Engage Software and has worked on numerous DotNetNuke implementation projects.&lt;/p&gt;  &lt;p&gt;This book is very clear in that it is targeted specifically at DotNetNuke Administrators and it does a very good job of staying focused on the topic.&amp;#160; You won’t find any information about developing modules or skins in this book, which is as it should be.&amp;#160; While the book says that it is for DotNetNuke users of all experience levels, I found that the vast majority of the information is clearly targeted at people who have little or no knowledge of DotNetNuke.&amp;#160; If you have been working with DotNetNuke for a few years, then many of the topics discussed in this book will already be familiar to you.&amp;#160; There are a few chapters in the back of the book that target more experienced users, however I still found that much of that material is more applicable to someone with just a moderate amount of experience.&amp;#160; While this may seem limiting, I actually found that it helped to keep the book more focused and cohesive.&amp;#160; Often, when trying to write for multiple experience levels, authors inevitably do a poor job of bringing the new users up to the necessary level to understand the advanced content.&amp;#160; This was not the case with the DotNetNuke 5 User’s Guide.&lt;/p&gt;  &lt;p&gt;So what about the rest of the book?&amp;#160; I found the rest of the book to be extremely well written.&amp;#160; It does a good job of getting a new DotNetNuke user up to speed on basic DotNetNuke concepts.&amp;#160; After learning the basics, the book gives a good walkthrough of the installation process.&amp;#160; It is not an exhaustive look at installing DotNetNuke which could easily lose most readers.&amp;#160; Instead, Chris and Patrick focus on the most common scenarios so that the reader can quickly taste success.&amp;#160; This is a pattern that is repeated throughout the book.&amp;#160; Keep the reader focused and engaged, and don’t get bogged down in all the little nuances and permutations of every single setting.&lt;/p&gt;  &lt;p&gt;After bringing the reader up to speed on the basic DotNetNuke concepts and installation procedures, Chris and Patrick spend a bit of time showing how to configure DotNetNuke and associated modules for different usage scenarios; a small personal website, a sports league site, and a small business site.&amp;#160; Each of these scenarios identifies common usages for many new DotNetNuke users and the authors do a good job of showing how to use a couple standard DotNetNuke modules to create the particular site.&amp;#160; Like the rest of the book, these walkthroughs do a good job of showing the user the most important aspects of setting up a DotNetNuke site.&amp;#160; By the end of these chapters, the reader should be readily able to setup simple sites.&lt;/p&gt;  &lt;p&gt;The last couple of chapters cover more intermediate to advanced topics like multi-portal configuration, file management, page and site templates, system health and system maintenance. Once again, I think these topics are covered sufficiently so as to be useful but not so much that they become dry and boring.&lt;/p&gt;  &lt;p&gt;All in all I think that this book is a great introduction for new users of DotNetNuke.&amp;#160; The writing style and the focused approach of the authors makes it easy for new users to follow along without getting lost, which is fairly rare for many technical books.&amp;#160; I really enjoyed reading this book and highly recommend it for users with little to moderate experience, though if you are an experienced user you will probably be more comfortable with the Professional DotNetNuke 5 book.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=F-je-GhoW2g:N5jXllKPBEI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=F-je-GhoW2g:N5jXllKPBEI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=F-je-GhoW2g:N5jXllKPBEI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=F-je-GhoW2g:N5jXllKPBEI:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=F-je-GhoW2g:N5jXllKPBEI:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=F-je-GhoW2g:N5jXllKPBEI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=F-je-GhoW2g:N5jXllKPBEI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=F-je-GhoW2g:N5jXllKPBEI:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=F-je-GhoW2g:N5jXllKPBEI:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/F-je-GhoW2g" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/F-je-GhoW2g/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/08/07/Getting-your-DotNetNuke-Website-Up-and-Running.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=77f627a8-7c07-4edc-b93e-917d20823ece</guid><pubDate>Fri, 07 Aug 2009 14:03:58 -1000</pubDate><category>DotNetNuke</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=77f627a8-7c07-4edc-b93e-917d20823ece</pingback:target><slash:comments>13</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=77f627a8-7c07-4edc-b93e-917d20823ece</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/08/07/Getting-your-DotNetNuke-Website-Up-and-Running.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=77f627a8-7c07-4edc-b93e-917d20823ece</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=77f627a8-7c07-4edc-b93e-917d20823ece</feedburner:origLink></item><item><title>Unboxing my new Android phone</title><description>&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 10px 15px; display: inline; border-top: 0px; border-right: 0px" title="Android-logo" border="0" alt="Android-logo" align="right" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/UnboxingmynewAndroidphone_81C7/Android-logo_7d8cacf7-2516-4c46-93d0-4de57fa92747.png" width="291" height="291" /&gt; It has been almost 3 years since I got my last cell phone, a &lt;a href="http://www.blackberry.com/blackberry8800.shtml" target="_blank"&gt;Blackberry 8800&lt;/a&gt;. While it was nice, the UI was very sparse, and dare I say ugly. Ever since the Palm Pre was announced earlier this year, I have been itching to get one. Unfortunately, they are not available on my current provider. My wife, her parents, and I all share a family plan on the &lt;a href="http://www.t-mobile.com/" target="_blank"&gt;T-Mobile&lt;/a&gt; network which allows us to keep our cell phone charges way down so if I was going to get a new phone, it would have to be one that T-Mobile offered. When my wife's phone suddenly died 3 weeks ago, we started looking at new phones and finally settled on the new &lt;a href="http://www.t-mobilemytouch.com/" target="_blank"&gt;MyTouch&lt;/a&gt; phones from T-Mobile. My wife does not use 90% of the features on her phone because she finds it a bit challenging to figure out. To help solve this problem, we both decided to get the same phone, so that I would be able to help her out if she had any questions or issues.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Because we were already T-Mobile customers, we were able to pre-order the new MyTouch, but it would require waiting a few weeks for delivery. So, over the last 3 weeks, I have been researching the &lt;a href="http://www.android.com/" target="_blank"&gt;Android&lt;/a&gt; platform and the various applications available so that I would be ready to go when the phones arrived. I have become more and more excited about the new phones as I saw what they could do, and aesthetically they were a huge leap forward over my blackberry. Even better, I found an application from &lt;a href="http://www.appcelerator.com/"&gt;AppCelerator&lt;/a&gt; which allows me to use my web development skills to quickly create applications for the new phones. Some friends and I even came up with some cool ideas for an application which would tie into &lt;a href="http://www.dotnetnuke.com/"&gt;DotNetNuke&lt;/a&gt; (the application that my company produces).&lt;/p&gt;  &lt;p&gt;The day is finally here. Last night 2 cell phones were delivered to the house and I have to say, so far I am very impressed. T-Mobile really did a great job on this phone in terms of really making your initial experience very positive.&amp;#160; Below are a few photos I took as I unboxed the new phone.&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:66721397-FF69-4ca6-AEC4-17E6B3208830:ac8cfb5c-2acf-4641-bb1b-3465b35e9033" class="wlWriterEditableSmartContent"&gt;&lt;a style="border:0px" href="http://cid-bd13de2ce38e8060.skydrive.live.com/redir.aspx?page=browse&amp;amp;resid=BD13DE2CE38E8060!307&amp;amp;ct=photos"&gt;&lt;img style="border:0px" alt="View Unboxing the MyTouch" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/UnboxingmynewAndroidphone_81C7/InlineRepresentation1eb77ede-7561-4563-9daa-538552fb2b75.jpg" /&gt;&lt;/a&gt;&lt;div style="width:465px;text-align:right;" &gt;&lt;a href="http://cid-bd13de2ce38e8060.skydrive.live.com/redir.aspx?page=browse&amp;amp;resid=BD13DE2CE38E8060!307&amp;amp;ct=photos"&gt;View Full Album&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I really love the case that the phone comes in.&amp;#160; Perfect for traveling and keeping all my accessories available in one spot.&amp;#160; Usually I just pack everything in my bags where the charger and everything else tends to get tangled up.&amp;#160; Now I can keep them in one nice little package and I even have room for a few additional items as well, &lt;/p&gt;  &lt;p&gt;So far I have installed a dozen or so apps (all of them free, but of very high quality) and I am really loving the experience.&amp;#160; Finding applications in the marketplace from the phone could be a little better, but the installation process once you locate an app is pretty seamless.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 15px 10px 0px; display: inline; border-top: 0px; border-right: 0px" title="Locale-situations" border="0" alt="Locale-situations" align="left" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/UnboxingmynewAndroidphone_81C7/Locale-situations_4e074f4f-f3fa-45bd-bfee-0b9336175300.png" width="100" height="275" /&gt; One of the standouts for me has been an app called &lt;a href="http://www.twofortyfouram.com/" target="_blank"&gt;Locale&lt;/a&gt;.&amp;#160; Have you ever been in a movie or even worse, Church, and had your phone accidentally go off?&amp;#160; What if your phone knew where you were at and configured itself appropriately.&amp;#160; When you walked into the theater, the phone could go into silent mode, unless someone important was calling – in which case the phone would vibrate.&amp;#160; Even when I remember to mute my phone in the theater, I often forget to unmute it when I come out.&amp;#160; I have missed more calls as a result.&amp;#160; Locale solves this problem and much more.&amp;#160; Locale marries maps, GPS, and custom rules which you define, to determine how to configure your phone based on your location or other predefined events which you configure.&amp;#160; Locale even provides plug-ins so that beyond just changing phone configuration you can have your phone automatically take actions – like post to &lt;a href="http://www.twitter.com/" target="_blank"&gt;twitter&lt;/a&gt; when you arrive at your hotel on your next business trip.&amp;#160; This is just the tip of the iceberg with this app.&lt;/p&gt;  &lt;p&gt;All in all, I have to say this is one of the best phones I’ve purchased to this point.&amp;#160; That is not to say that it is perfect, just that it seems to suit my purposes for now.&amp;#160; I’m sure that in 2 years I’ll be looking for another shiny new toy and who knows maybe it will be another Android phone.&amp;#160; If they keep up with the same pace of development as they have in the past year, then I can’t wait till it’s time for the next upgrade.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=8sTy9u4HCdw:pcTNvi5MKiw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=8sTy9u4HCdw:pcTNvi5MKiw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=8sTy9u4HCdw:pcTNvi5MKiw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=8sTy9u4HCdw:pcTNvi5MKiw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=8sTy9u4HCdw:pcTNvi5MKiw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=8sTy9u4HCdw:pcTNvi5MKiw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=8sTy9u4HCdw:pcTNvi5MKiw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=8sTy9u4HCdw:pcTNvi5MKiw:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=8sTy9u4HCdw:pcTNvi5MKiw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/8sTy9u4HCdw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/8sTy9u4HCdw/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/07/31/Unboxing-my-new-Android-phone.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=667f2b05-3e44-4308-9148-1cb99d0a7ec0</guid><pubDate>Fri, 31 Jul 2009 05:01:55 -1000</pubDate><category>Computers</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=667f2b05-3e44-4308-9148-1cb99d0a7ec0</pingback:target><slash:comments>3</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=667f2b05-3e44-4308-9148-1cb99d0a7ec0</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/07/31/Unboxing-my-new-Android-phone.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=667f2b05-3e44-4308-9148-1cb99d0a7ec0</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=667f2b05-3e44-4308-9148-1cb99d0a7ec0</feedburner:origLink></item><item><title>DotNetNuke 5.1.1 Released</title><description>&lt;div style="float: right"&gt;
&lt;img style="margin: 0px 0px 10px 10px" src="http://www.dotnetnuke.com/Portals/25/SiteFiles/Logo-PE.gif" alt="" /&gt;     &lt;br /&gt;
&lt;img style="margin: 0px 0px 10px 10px" src="http://www.dotnetnuke.com/Portals/25/SiteFiles/Logo-CE.gif" alt="" /&gt;
&lt;/div&gt;
  
&lt;p&gt;
&lt;a href="http://www.dotnetnuke.com/" target="_blank" title="DotNetNuke"&gt;DotNetNuke&lt;/a&gt; 5.1.1 is now available for download.&amp;nbsp; This version of DotNetNuke is a stabilization release and focused exclusively on fixing outstanding bugs which did not make the cutoff for DotNetNuke 5.1 or which were discovered after 5.1 was released.&amp;nbsp; As many people in the community are aware, DotNetNuke.com had some difficulty running DotNetNuke 5.1 under extremely heavy loads.&amp;nbsp; As a result of that experience the DotNetNuke engineering team was able to isolate several performance issues which did not show up in any of the prior testing.&amp;nbsp; Fixes for those issues were incorporated in this release along with the changes outlined below.&amp;nbsp; As usual, the complete details for all of the changes can be found in the &lt;a href="http://support.dotnetnuke.com/project/ChangeLog.aspx?PROJID=2" target="_blank"&gt;ChangeLog&lt;/a&gt;.
&lt;/p&gt;
  
&lt;p&gt;

&lt;/p&gt;
  
&lt;h3 class="SubSubHead"&gt;Major Highlights&lt;/h3&gt;  
&lt;ul&gt;
	   
	&lt;li&gt;Fixed issue which mis-assigned page permissions to new modules &lt;/li&gt;    
	&lt;li&gt;Fixed issue where a fallback language is not defined &lt;/li&gt;    
	&lt;li&gt;Fixed issue&amp;nbsp; where portal administrator could not manage user roles &lt;/li&gt;    
	&lt;li&gt;Added core sqlconnection pool segmentation to protect core from any module issues &lt;/li&gt;    
	&lt;li&gt;Fixed issue where Authenticated Caching setting was not getting saved correctly &lt;/li&gt;    
	&lt;li&gt;Fixed issue where code sub-directories are not properly removed in web.config &lt;/li&gt;    
	&lt;li&gt;Fixed issue with UpgradeIndicator which could throw an error under some conditions &lt;/li&gt;    
	&lt;li&gt;Fixed issue where data could become corrupted under extremely heavy load &lt;/li&gt;    
	&lt;li&gt;Fixed issue where GetPortalRoles stored procedure was missing new audit fields &lt;/li&gt;    
	&lt;li&gt;Fixed issue where some DataReaders were not guaranteed to be closed if an error occured &lt;/li&gt;    
	&lt;li&gt;Fixed issue where GetFolders API method was changed resulting in a breaking change &lt;/li&gt;    
	&lt;li&gt;Improved performance by removing use of regular expressions in Globals.CreateValidId &lt;/li&gt;    
	&lt;li&gt;Fixed issue where all installed languages are enabled on all portals after an upgrade &lt;/li&gt;    
	&lt;li&gt;Fixed sitemap priority to use invariant format &lt;/li&gt;    
	&lt;li&gt;Fixed issue where 05.00.00 SQL Upgrade script is incompatible with SQL Server 2000 &lt;/li&gt;    
	&lt;li&gt;Fixed issue where HTML/TEXT module was not correctly handling Encoded data &lt;/li&gt;    
	&lt;li&gt;Fixed issue where hierarchical lists are not properly deleted &lt;/li&gt;    
	&lt;li&gt;Fixed performance issue where delayed loading of some PortalSettings results in race condition &lt;/li&gt;    
	&lt;li&gt;Fixed issue where banners were not properly rotated &lt;/li&gt;    
	&lt;li&gt;Fixed issue where &amp;quot;Create Language Pack&amp;quot; creates an empty package &lt;/li&gt;    
	&lt;li&gt;Fixed upgrade issue when Active Directory provider is installed &lt;/li&gt;    
	&lt;li&gt;Fixed issue which changed the Edit Module permission in 5.1 and restored the 4.9.4 behavior. &lt;/li&gt;    
	&lt;li&gt;Fixed issue where the resource verifier misses files to report &lt;/li&gt;    
	&lt;li&gt;Fixed issue with control panel after installing the Turkish Language Pack &lt;/li&gt;    
	&lt;li&gt;Fixed issue where deprecated properties of the Membership provider resulted in errors in the Token Replace API &lt;/li&gt;    
	&lt;li&gt;Fixed PageLoadException errors caused by specific UserAgents being mis-identified by the browser definition files &lt;/li&gt;    
	&lt;li&gt;Fixed issue where &amp;quot;Premium Modules&amp;quot; settings don&amp;#39;t work for upgraded sites &lt;/li&gt;    
	&lt;li&gt;Removed Classic ControlPanel from the distribution &lt;/li&gt;    
	&lt;li&gt;Improved locking mechanism of GetCachedData &lt;/li&gt; 
&lt;/ul&gt;
  
&lt;h3 class="SubSubHead"&gt;Security Fixes&lt;/h3&gt;  
&lt;ul&gt;
	   
	&lt;li&gt;none &lt;/li&gt; 
&lt;/ul&gt;
  
&lt;h3 class="SubSubHead"&gt;Updated Modules/Providers&lt;/h3&gt;  
&lt;p&gt;
The following modules and providers have been updated in the 5.1.1 packages.&amp;nbsp; Please see the specific project pages for notes on what bugs or enhancements were corrected with each release.
&lt;/p&gt;
  
&lt;h4 class="SubSubHead"&gt;Modules&lt;/h4&gt;  
&lt;ul&gt;
	   
	&lt;li&gt;HTML 05.01.01 &lt;/li&gt; 
&lt;/ul&gt;
  
&lt;h4 class="SubSubHead"&gt;Providers&lt;/h4&gt;  
&lt;ul&gt;
	   
	&lt;li&gt;FilebasedCachingProvider 05.01.01 &lt;/li&gt;    
	&lt;li&gt;DatabaseLoggingProvider 05.01.01 &lt;/li&gt;    
	&lt;li&gt;AspNetMembershipProvider 05.01.01 &lt;/li&gt;    
	&lt;li&gt;DNNMembershipProvider 05.01.01 &lt;/li&gt;    
	&lt;li&gt;SearchProvider 05.01.01 &lt;/li&gt; 
&lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=Tt3kTYuZscI:P3_C6jPaMm0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=Tt3kTYuZscI:P3_C6jPaMm0:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=Tt3kTYuZscI:P3_C6jPaMm0:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=Tt3kTYuZscI:P3_C6jPaMm0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=Tt3kTYuZscI:P3_C6jPaMm0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=Tt3kTYuZscI:P3_C6jPaMm0:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=Tt3kTYuZscI:P3_C6jPaMm0:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=Tt3kTYuZscI:P3_C6jPaMm0:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=Tt3kTYuZscI:P3_C6jPaMm0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/Tt3kTYuZscI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/Tt3kTYuZscI/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/07/28/DotNetNuke-511-Released.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=3166453c-5b2a-47d2-986e-8ee894358e76</guid><pubDate>Tue, 28 Jul 2009 09:53:00 -1000</pubDate><category>DotNetNuke</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=3166453c-5b2a-47d2-986e-8ee894358e76</pingback:target><slash:comments>1</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=3166453c-5b2a-47d2-986e-8ee894358e76</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/07/28/DotNetNuke-511-Released.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=3166453c-5b2a-47d2-986e-8ee894358e76</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=3166453c-5b2a-47d2-986e-8ee894358e76</feedburner:origLink></item><item><title>DotNetNuke Tips and Tricks #12: Creating your own Authentication Provider</title><description>&lt;p&gt;&lt;a title="DotNetNuke" href="http://www.dotnetnuke.com/" target="_blank"&gt;&lt;img style="border-right-width: 0px; margin: 0px 0px 10px 10px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" align="right" src="http://blog.theaccidentalgeek.com/pics/dnntipsandtricks.png" /&gt; DotNetNuke&lt;/a&gt; has a lot of great features that come built-in, but there are often situations where the default implementation is not what the customer wants for their website.&amp;#160; This was a big limitation of early versions of DotNetNuke – changing basic functionality often required the user to customize the core DotNetNuke code.&amp;#160; &lt;/p&gt;  &lt;p&gt;In DotNetNuke 2.0 all of that began to change with the introduction of Providers in the framework.&amp;#160; This is also where we began focusing on a rich extensibility model that would allow users to install skins, skin objects, and modules as separate packaged extensions.&amp;#160; Over time, the framework has evolved to include different extension types, and in DotNetNuke 5.0 we moved to a unified extension model that treats all extension types in a similar manner during the install and uninstall process.&lt;/p&gt;  &lt;p&gt;One of the extension types that was added in the last couple of years was the Authentication Provider.&amp;#160; Unlike most other providers, an authentication provider is not configured in the web.config and actually looks and behaves more like a module than an actual provider.&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeTipsandTricks12Creatingyourown_7389/LiveLogin_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="LiveLogin" border="0" alt="LiveLogin" align="left" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeTipsandTricks12Creatingyourown_7389/LiveLogin_thumb.png" width="220" height="262" /&gt;&lt;/a&gt;An authentication provider installs up to 3 UI elements that the framework cares about – a login control, a settings control and optionally a logout control.&amp;#160; It is certainly possible to use more controls if needed, but these are the only three the core framework interacts with directly. Once installed the authentication provider can appear as one option in the standard DNN login.&amp;#160; In the image to the left you can see the standard login on DotNetNuke.com with the LiveID tab selected.&amp;#160; This clearly shows a different UI than the standard username and password. &lt;/p&gt;  &lt;p&gt;Recently there has been a lot of discussion around a change made to recent versions of DotNetNuke.&amp;#160; In the past, it was possible to define a custom login page and put the Account Login module on the page.&amp;#160; This allowed you to create an SSL enabled login page or to put a login control directly on the home page.&amp;#160; Unfortunately, users would sometimes change the custom login page setting without putting a login module on the page.&amp;#160; In other cases, the login module would be added to the page, but the user wouldn’t have permission to see the page or the control.&amp;#160; Recent versions of DotNetNuke try to detect this situation and prevent you from setting the custom login page to a location without a login control that is visible to unauthenticated users.&lt;/p&gt;  &lt;p&gt;Unfortunately, there are a number of third party login modules currently on the market which are not implemented as Authentication Providers and this new behavior makes it impossible to use them with the latest DNN release.&amp;#160; We’ll work on the behavior change to make it possible to use these modules but I thought that this highlights one of the issues with DNN.&amp;#160; When we introduce an official extensibility point, we then start coding the core to use and rely on extensions which conform to the extensibility model.&amp;#160; If you are coding a skin object that doesn’t conform to the official model then we may well break your skin object in future DNN releases.&amp;#160; The same is true with Authentication Providers.&amp;#160; Had these modules been code as Authentication Providers instead of Modules then they would have continued to function.&lt;/p&gt;  &lt;p&gt;The real failure in this case rests with the core team and not the module vendors.&amp;#160; When we introduce new features we often haven’t had the resources to fully document how to take advantage of the new feature.&amp;#160; This is especially true for core API changes.&amp;#160; The end result is that the core team ends up coding to the new APIs long before 3rd party vendors start upgrading their extensions.&amp;#160; The biggest reason for this is because we haven’t done a good enough job in documenting how to use the new feature.&lt;/p&gt;  &lt;p&gt;With all of this as background, I thought it would be good to run through exactly how to create your own custom Authentication Provider.&amp;#160; In this example, I am going to start from the standard DotNetNuke Authentication Provider.&amp;#160; For the sake of simplicity, I am going to code this as a WSP project, although the techniques apply just the same to a WAP project (LiveID, &lt;a href="http://openid.net/" target="_blank"&gt;OpenID&lt;/a&gt; and AD providers are all WAP based implementations).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeTipsandTricks12Creatingyourown_7389/AuthProviderDemo_2.png"&gt;&lt;img style="border-right-width: 0px; margin: 0px 10px 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="AuthProviderDemo" border="0" alt="AuthProviderDemo" align="left" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeTipsandTricks12Creatingyourown_7389/AuthProviderDemo_thumb.png" width="201" height="260" /&gt;&lt;/a&gt; The first thing I do is make a copy of the DNN Authentication provider which is located in the DesktopModules/AuthenticationServices/DNN folder.&amp;#160; I have renamed my copy to Demo so that we can distinguish it from the original.&amp;#160; I have gone into the Login and Settings controls and changed the namespaces to avoid collision and changed them from &lt;em&gt;DotNetNuke.Modules.Admin.Authentication&lt;/em&gt; to &lt;em&gt;DotNetNuke.Modules.Admin.Demo.Authentication.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;At this point I have a useable Auth Provider, but I don’t have a method to install it.&amp;#160; I could use the Host/Extensions page to create a new package but since this is my first time I decided to build my manifest file using the manifest from the LiveID Authentication Provider as a template.&amp;#160; After making a few modifications to the manifest to add a CSS file (more on that in a minute) and to fix some file names, I am almost ready to zip everything up.&lt;/p&gt;     &lt;pre class="xml" name="code"&gt;&amp;lt;dotnetnuke type=&amp;quot;Package&amp;quot; version=&amp;quot;5.0&amp;quot;&amp;gt;
    &amp;lt;packages&amp;gt;
        &amp;lt;package name=&amp;quot;DNN_DemoAuthentication&amp;quot; type=&amp;quot;Auth_System&amp;quot; version=&amp;quot;01.00.00&amp;quot;&amp;gt;
            &amp;lt;friendlyname&amp;gt;DotNetNuke Demo Authentication Project&amp;lt;/friendlyname&amp;gt;
            &amp;lt;description&amp;gt;The DotNetNuke Demo Authentication Project is an Authentication provider for DotNetNuke that shows how easy it is to create your own custom auth provider.&amp;lt;/description&amp;gt;
            &amp;lt;owner&amp;gt;
                &amp;lt;name&amp;gt;DotNetNuke Corporation&amp;lt;/name&amp;gt;
                &amp;lt;organization&amp;gt;DotNetNuke Corporation&amp;lt;/organization&amp;gt;
                &amp;lt;url&amp;gt;www.dotnetnuke.com&amp;lt;/url&amp;gt;
                &amp;lt;email&amp;gt;support@dotnetnuke.com&amp;lt;/email&amp;gt;
            &amp;lt;/owner&amp;gt;
            &amp;lt;license src=&amp;quot;license.txt&amp;quot; /&amp;gt;
            &amp;lt;releaseNotes src=&amp;quot;ReleaseNotes.txt&amp;quot; /&amp;gt;
            &amp;lt;dependencies&amp;gt;
                &amp;lt;dependency type=&amp;quot;CoreVersion&amp;quot;&amp;gt;05.00.00&amp;lt;/dependency&amp;gt;
            &amp;lt;/dependencies&amp;gt;
            &amp;lt;components&amp;gt;
                &amp;lt;component type=&amp;quot;AuthenticationSystem&amp;quot;&amp;gt;
                    &amp;lt;authenticationService&amp;gt;
                        &amp;lt;type&amp;gt;Demo&amp;lt;/type&amp;gt;
                        &amp;lt;settingsControlSrc&amp;gt;DesktopModules/AuthenticationServices/Demo/Settings.ascx&amp;lt;/settingsControlSrc&amp;gt;
                        &amp;lt;loginControlSrc&amp;gt;DesktopModules/AuthenticationServices/Demo/Login.ascx&amp;lt;/loginControlSrc&amp;gt;
                        &amp;lt;logoffControlSrc/&amp;gt;
                    &amp;lt;/authenticationService&amp;gt;
                &amp;lt;/component&amp;gt;
                &amp;lt;component type=&amp;quot;File&amp;quot;&amp;gt;
                    &amp;lt;files&amp;gt;
                        &amp;lt;basePath&amp;gt;DesktopModules/AuthenticationServices/Demo&amp;lt;/basePath&amp;gt;
                        &amp;lt;file&amp;gt;
                            &amp;lt;path&amp;gt;App_LocalResources&amp;lt;/path&amp;gt;
                            &amp;lt;name&amp;gt;Login.ascx.resx&amp;lt;/name&amp;gt;
                        &amp;lt;/file&amp;gt;
                        &amp;lt;file&amp;gt;
                            &amp;lt;path&amp;gt;App_LocalResources&amp;lt;/path&amp;gt;
                            &amp;lt;name&amp;gt;Settings.ascx.resx&amp;lt;/name&amp;gt;
                        &amp;lt;/file&amp;gt;
                        &amp;lt;file&amp;gt;
                            &amp;lt;name&amp;gt;Login.ascx&amp;lt;/name&amp;gt;
                        &amp;lt;/file&amp;gt;
                        &amp;lt;file&amp;gt;
                            &amp;lt;name&amp;gt;Settings.ascx&amp;lt;/name&amp;gt;
                        &amp;lt;/file&amp;gt;
                        &amp;lt;file&amp;gt;
                            &amp;lt;name&amp;gt;Login.ascx.vb&amp;lt;/name&amp;gt;
                        &amp;lt;/file&amp;gt;
                        &amp;lt;file&amp;gt;
                            &amp;lt;name&amp;gt;Settings.ascx.vb&amp;lt;/name&amp;gt;
                        &amp;lt;/file&amp;gt;
                        &amp;lt;file&amp;gt;
                            &amp;lt;name&amp;gt;license.txt&amp;lt;/name&amp;gt;
                        &amp;lt;/file&amp;gt;
                        &amp;lt;file&amp;gt;
                            &amp;lt;name&amp;gt;ReleaseNotes.txt&amp;lt;/name&amp;gt;
                        &amp;lt;/file&amp;gt;
                        &amp;lt;file&amp;gt;
                            &amp;lt;name&amp;gt;DemoAuth.css&amp;lt;/name&amp;gt;
                        &amp;lt;/file&amp;gt;
                    &amp;lt;/files&amp;gt;
                &amp;lt;/component&amp;gt;
            &amp;lt;/components&amp;gt;
        &amp;lt;/package&amp;gt;
    &amp;lt;/packages&amp;gt;
&amp;lt;/dotnetnuke&amp;gt;&lt;/pre&gt;


&lt;p&gt;Before packaging the system however, I want to make some changes to the login controls just to make it a little clearer when I am using my new control versus the standard DNN version.&amp;#160; The DNN login uses tables for handling the form layout, and I am going to use a definition list.&amp;#160; I also want to get rid of the help icons next to the form labels and use some different styling on the actual textboxes.&amp;#160; Finally, I want to get rid of the Captcha control.&lt;/p&gt;

&lt;p&gt;The first step is to clean up the login HTML&lt;/p&gt;


  &lt;pre class="xml" name="code"&gt;&amp;lt;%@ Control language=&amp;quot;vb&amp;quot; Inherits=&amp;quot;DotNetNuke.Modules.Admin.Demo.Authentication.Login&amp;quot; CodeFile=&amp;quot;Login.ascx.vb&amp;quot; AutoEventWireup=&amp;quot;false&amp;quot; Explicit=&amp;quot;True&amp;quot; %&amp;gt;

&amp;lt;dl id=&amp;quot;DemoLogin&amp;quot;&amp;gt;
    &amp;lt;dt&amp;gt;&amp;lt;asp:label id=&amp;quot;plUsername&amp;quot; controlname=&amp;quot;txtUsername&amp;quot; runat=&amp;quot;server&amp;quot; resourcekey=&amp;quot;Username&amp;quot; /&amp;gt;&amp;lt;/dt&amp;gt;
    &amp;lt;dd&amp;gt;&amp;lt;asp:textbox id=&amp;quot;txtUsername&amp;quot; columns=&amp;quot;9&amp;quot; width=&amp;quot;150&amp;quot; cssclass=&amp;quot;NormalTextBox&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;&amp;lt;/dd&amp;gt;
    &amp;lt;dt&amp;gt;&amp;lt;asp:label id=&amp;quot;plPassword&amp;quot; controlname=&amp;quot;txtPassword&amp;quot; runat=&amp;quot;server&amp;quot; resourcekey=&amp;quot;Password&amp;quot; /&amp;gt;&amp;lt;/dt&amp;gt;
    &amp;lt;dd&amp;gt;&amp;lt;asp:textbox id=&amp;quot;txtPassword&amp;quot; columns=&amp;quot;9&amp;quot; width=&amp;quot;150&amp;quot; textmode=&amp;quot;Password&amp;quot; cssclass=&amp;quot;NormalTextBox&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;&amp;lt;/dd&amp;gt;
    &amp;lt;dt id=&amp;quot;verifyLabel&amp;quot; runat=server visible=&amp;quot;false&amp;quot; &amp;gt;&amp;lt;dnn:label id=&amp;quot;plVerification&amp;quot; controlname=&amp;quot;txtVerification&amp;quot; runat=&amp;quot;server&amp;quot;/&amp;gt;&amp;lt;/dt&amp;gt;
    &amp;lt;dd id=&amp;quot;verifyControl&amp;quot; runat=server  visible=&amp;quot;false&amp;quot;&amp;gt;&amp;lt;asp:textbox id=&amp;quot;txtVerification&amp;quot; columns=&amp;quot;9&amp;quot; width=&amp;quot;150&amp;quot; cssclass=&amp;quot;NormalTextBox&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;asp:button id=&amp;quot;cmdLogin&amp;quot; resourcekey=&amp;quot;cmdLogin&amp;quot; cssclass=&amp;quot;StandardButton&amp;quot; text=&amp;quot;Login&amp;quot; runat=&amp;quot;server&amp;quot; /&amp;gt;&lt;/pre&gt;


&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;After making these changes I make the corresponding changes in my code-behind to remove references to the captcha control and to update the visibility code for the verification control/label.&amp;#160; This is pretty much all that is needed for the Login control.&lt;/p&gt;

&lt;p&gt;The next set of changes are made to the settings control.&amp;#160; We need to make sure that we are saving our control settings using unique settings keys (although you are free to store your settings using whatever method you are comfortable with).&amp;#160; In this case I create a new DemoAuthConfig class to replace the core AuthenticationConfig class.&amp;#160; I then go back and update the settings and login pages to reference my new config class rather than the old class.&amp;#160; I also remove all references to the captcha setting since I am not using it here.&lt;/p&gt;

&lt;p&gt;Finally, I want my login control to have it’s own look which I may choose to surface on the settings page at some point.&amp;#160; To handle this I include a CSS file in my project since I don’t want end users to have to muck around trying to edit core CSS files.&amp;#160; My CSS file changes the way the definition list is displayed to show up as two columns.&lt;/p&gt;

&lt;p&gt;One last bit that I need to update is to edit the login.ascx.resx resource file.&amp;#160; This resource file contains the&lt;em&gt; Title.Text&lt;/em&gt; resource which controls the tabname that is used when displaying the various login controls.&amp;#160; In my case I used “Demo Auth” for my Title.Text.&lt;/p&gt;

&lt;p&gt;At this point I am ready to package everything up in a zip file so that it is ready for installation.&amp;#160; Installing an authentication provider in DotNetNuke 5.0 is exactly the same as installing a module.&amp;#160; Navigate to the &lt;em&gt;Host/Extensions&lt;/em&gt; page and select the “Install Extension Wizard” option from the module action menu.&amp;#160; This will walk you through the installation process.&amp;#160; &lt;/p&gt;

&lt;p&gt;Once the provider is complete, you will need to go to the Host/Extensions page and edit the new Authentication Provider settings to make sure it is enabled (it should be enabled by default).&amp;#160; To edit the settings, click the edit (pencil) icon next the the DNN_DemoAuthentication extension listing.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeTipsandTricks12Creatingyourown_7389/HostSettingsAuthSys_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="HostSettingsAuthSys" border="0" alt="HostSettingsAuthSys" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeTipsandTricks12Creatingyourown_7389/HostSettingsAuthSys_thumb.png" width="520" height="137" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;You should see the following settings which allow you to enable or disable this authentication provider for all portals.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeTipsandTricks12Creatingyourown_7389/HostSettingsAuthSysSettings_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="HostSettingsAuthSysSettings" border="0" alt="HostSettingsAuthSysSettings" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeTipsandTricks12Creatingyourown_7389/HostSettingsAuthSysSettings_thumb.png" width="520" height="208" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Once the provider is enabled at the Host level, you are now free to go to each portal and enable the provider for each portal where you wish to use it.&amp;#160; Just go to the Admin/Extensions page and click on the edit (pencil) icon for the demo auth provider to bring up our custom settings page.&amp;#160; Now we can enable our new AuthenticationProvider.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeTipsandTricks12Creatingyourown_7389/AdminAuthSysSettings_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="AdminAuthSysSettings" border="0" alt="AdminAuthSysSettings" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeTipsandTricks12Creatingyourown_7389/AdminAuthSysSettings_thumb.png" width="520" height="270" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;If you have followed along to this point, when you go to the login page, you should see two authentication types – Standard and Demo Auth.&amp;#160; If you look at the Demo Auth page, you will notice that the “help” icons are removed and the text boxes are displayed&amp;#160; using a custom style.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeTipsandTricks12Creatingyourown_7389/AuthProviderDemoLogin_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="AuthProviderDemoLogin" border="0" alt="AuthProviderDemoLogin" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNukeTipsandTricks12Creatingyourown_7389/AuthProviderDemoLogin_thumb.png" width="332" height="282" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;At this point you should be ready to create your own custom Authentication provider which plugs into the standard login system.&amp;#160; This is the recommended method for providing custom layouts and authentication types for DotNetNuke and I highly recommend you check it out.&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:fb3a1972-4489-4e52-abe7-25a00bb07fdf:d596e7d2-ee09-40ea-b6d9-dfa54bc9b527" class="wlWriterEditableSmartContent"&gt;&lt;p&gt;Download the demo code &lt;a href="http://blog.theaccidentalgeek.com/file.axd?file=WindowsLiveWriter/DotNetNukeTipsandTricks12Creatingyourown_7389/DemoAuth.zip" target="_blank"&gt;DemoAuth.zip&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=WJ2Bm7fDUXw:qgGImirju5w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=WJ2Bm7fDUXw:qgGImirju5w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=WJ2Bm7fDUXw:qgGImirju5w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=WJ2Bm7fDUXw:qgGImirju5w:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=WJ2Bm7fDUXw:qgGImirju5w:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=WJ2Bm7fDUXw:qgGImirju5w:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=WJ2Bm7fDUXw:qgGImirju5w:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=WJ2Bm7fDUXw:qgGImirju5w:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=WJ2Bm7fDUXw:qgGImirju5w:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/WJ2Bm7fDUXw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/WJ2Bm7fDUXw/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/07/13/DotNetNuke-Tips-and-Tricks-12-Creating-your-own-Authentication-Provider.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=facf014f-8ee5-45a8-a47c-76b9364f4178</guid><pubDate>Mon, 13 Jul 2009 07:35:12 -1000</pubDate><category>DotNetNuke</category><category>Tips and Tricks</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=facf014f-8ee5-45a8-a47c-76b9364f4178</pingback:target><slash:comments>18</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=facf014f-8ee5-45a8-a47c-76b9364f4178</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/07/13/DotNetNuke-Tips-and-Tricks-12-Creating-your-own-Authentication-Provider.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=facf014f-8ee5-45a8-a47c-76b9364f4178</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=facf014f-8ee5-45a8-a47c-76b9364f4178</feedburner:origLink></item><item><title>DotNetNuke 5.1.0 Released</title><description>&lt;p&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 0px 10px 10px; display: inline; border-top: 0px; border-right: 0px" border="0" align="right" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNuke4.9.2isnowavailable_9C89/logo_3056fb18-928a-4639-8ac2-9cd99e945b11.gif" /&gt; After more than 18 months of development, months of testing, and many, many long nights troubleshooting performance issues I am proud to announce the release of &lt;a title="DotNetNuke" href="http://www.dotnetnuke.com/" target="_blank"&gt;DotNetNuke&lt;/a&gt; 5.1.0.&amp;#160; This release represents the future of the DotNetNuke platform and is now officially recommended for production use.&amp;#160; While many users have been successfully running DotNetNuke 5.0 and 5.0.1 in production for many months, we feel that this 5.x release is finally mature enough that we recommend it for use in production environments.&amp;#160; This release includes hundreds of bug fixes and dozens of enhancements and new features.&amp;#160; Below is a list of just a few of the highlights from the 5.1.0 release.&amp;#160; As always, you can find a complete list of changes on the &lt;/p&gt;  &lt;h3&gt;Major Highlights&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Added Content Versioning and simple workflow to the HTML module. &lt;/li&gt;    &lt;li&gt;Added Admin Console module to simplify access to administrator and host pages &lt;/li&gt;    &lt;li&gt;Added publicly accessible skin engine lifecycle events &lt;/li&gt;    &lt;li&gt;Added audit trails to core system tables &lt;/li&gt;    &lt;li&gt;Added built in support for Google Analytics &lt;/li&gt;    &lt;li&gt;Added custom sitemap priorities &lt;/li&gt;    &lt;li&gt;Enhanced the permission system to use the provider model, allowing for custom permission providers &lt;/li&gt;    &lt;li&gt;Enhanced caching to enable access by distributed caching systems &lt;/li&gt;    &lt;li&gt;Enhanced installation and upgrade logic to automatically detect .Net 3.5 and to upgrade the web.config as appropriate. &lt;/li&gt;    &lt;li&gt;Enhanced the extensions pages to show which modules are used and to show the pages where they are currently in use &lt;/li&gt;    &lt;li&gt;Enhanced the Scheduler to show a checklist of available servers in the webfarm where scheduled tasks can be executed. &lt;/li&gt;    &lt;li&gt;Enhanced the Scheduler to support multiple instances running on the same server &lt;/li&gt;    &lt;li&gt;Fixed issue with removing Superuser role from a user. &lt;/li&gt;    &lt;li&gt;Fixed issue with deleting users which was not fully recognized by the rest of the application. &lt;/li&gt;    &lt;li&gt;Fixed issue with upgrades which would fail if .Net 3.5 was installed &lt;/li&gt;    &lt;li&gt;Fixed issue with skins installed using the batch installer. &lt;/li&gt;    &lt;li&gt;Fixed change to GetModulesByDefinition API method which resulted in breaking change from DotNetNuke 4.x &lt;/li&gt;    &lt;li&gt;Fixed CloakText API method which was broken in 5.0.1 &lt;/li&gt;    &lt;li&gt;Fixed issue with stored procedure for Dashboard which would fail with an error if database account did not have permissions to the MSDB database. &lt;/li&gt;    &lt;li&gt;Fixed issue where pages added while on a host page will not be associated with a portal. &lt;/li&gt;    &lt;li&gt;Fixed issue where the ReturnURL for the SendPassword and Register links on the Login page were broken. &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Security Fixes&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;none &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Updated Modules/Providers&lt;/h3&gt;  &lt;p&gt;The following modules and providers have been updated in the 5.1.0 packages.&amp;#160; Please see the specific project pages for notes on what bugs or enhancements were corrected with each release.&lt;/p&gt;  &lt;h4 class="SubSubHead"&gt;Modules&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;Forms and List 05.00.02 &lt;/li&gt;    &lt;li&gt;Announcements 04.00.03 &lt;/li&gt;    &lt;li&gt;Reports 05.01.00 &lt;/li&gt;    &lt;li&gt;Events 05.00.01 &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Providers&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;FckHtmlEditorProvider 02.00.04 &lt;/li&gt;    &lt;li&gt;AD Provider 05.00.02 &lt;/li&gt; &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=SvrKjFPOEkE:fnlbZuDTqr8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=SvrKjFPOEkE:fnlbZuDTqr8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=SvrKjFPOEkE:fnlbZuDTqr8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=SvrKjFPOEkE:fnlbZuDTqr8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=SvrKjFPOEkE:fnlbZuDTqr8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=SvrKjFPOEkE:fnlbZuDTqr8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=SvrKjFPOEkE:fnlbZuDTqr8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=SvrKjFPOEkE:fnlbZuDTqr8:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=SvrKjFPOEkE:fnlbZuDTqr8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/SvrKjFPOEkE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/SvrKjFPOEkE/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/06/23/DotNetNuke-510-Released.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=70aff392-056f-4b43-898b-930467eccf9e</guid><pubDate>Tue, 23 Jun 2009 10:30:17 -1000</pubDate><category>DotNetNuke</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=70aff392-056f-4b43-898b-930467eccf9e</pingback:target><slash:comments>11</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=70aff392-056f-4b43-898b-930467eccf9e</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/06/23/DotNetNuke-510-Released.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=70aff392-056f-4b43-898b-930467eccf9e</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=70aff392-056f-4b43-898b-930467eccf9e</feedburner:origLink></item><item><title>DotNetNuke Tips and Tricks #11: Using jQuery in DotNetNuke</title><description>&lt;p&gt;&lt;img style="margin: 0px 0px 10px 10px; display: inline" align="right" src="http://blog.theaccidentalgeek.com/pics/dnntipsandtricks.png" /&gt; During the last several months I have been doing more and more &lt;a href="http://jquery.com/" target="_blank"&gt;jQuery&lt;/a&gt; development and have found a few key tricks that have improved my code and made my development experience much more enjoyable.&lt;/p&gt;  &lt;h4&gt;1.&amp;#160; Inject the jQuery library reference in the head section.&lt;/h4&gt;  &lt;p&gt;jQuery does not know about the DNNMenu and the &lt;a href="http://www.dotnetnuke.com/Default.aspx?tabid=851" target="_blank"&gt;ClientAPI&lt;/a&gt;.&amp;#160; It will step all over them if given half a chance.&amp;#160; Of course, DNNMenu and the ClientAPI are aware of possible conflicts with popular JavaScript libraries and will take steps to avoid any conflicts &lt;strong&gt;IF&lt;/strong&gt; the jQuery library is already loaded.&amp;#160; The ClientAPI is loaded at the top of the ASP.Net page form so loading jQuery in the header ensures it is loaded before the ClientAPI.&amp;#160; &lt;/p&gt;  &lt;p&gt;If you are building a module that injects a jQuery library reference, add it in the page header and you will be safe.&amp;#160; If you just want to include a jQuery script on a page then you can edit the &lt;em&gt;Page Settings/Advanced Settings&lt;/em&gt; to add the script reference to the Page Header Tags.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; margin: 10px 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="pageheader" border="0" alt="pageheader" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/jQuerytipsandtricks_FD57/pageheader_5f5039b1-7008-418c-ab8c-1ae37686f898.png" width="510" height="89" /&gt; &lt;/p&gt;  &lt;h4&gt;2.&amp;#160; DotNetNuke 4.9.1 and above already include jQuery.&lt;/h4&gt;  &lt;p&gt;If you are using DNN 4.9.1 and above, then jQuery is already included in the distribution.&amp;#160; The DNN 4.9.x versions will require you to add your own jQuery reference to the page, but DNN 5.x will add the reference to the page if the framework decides it is needed.&lt;/p&gt;  &lt;p&gt;In 4.9.1+ you can either inject the jQuery using code or by using the Page Settings shown above.&amp;#160; By default, DNN 4.9.x will use jQuery 1.2.6.&amp;#160; If you require a newer version, then you should store your copy of the script in your module directory or in a portal directory.&amp;#160; This will avoid some potential conflicts with other modules which may require a specific version of jQuery.&lt;/p&gt;  &lt;p&gt;DNN 5.x will add jQuery to any page if the service is requested (see my &lt;a href="http://blog.theaccidentalgeek.com/post/2008/10/20/Using-jQuery-in-DotNetNuke-50.aspx" target="_blank"&gt;previous jQuery post&lt;/a&gt; for the needed code).&amp;#160; The DNN Widget framework, which is enabled by default, automatically registers every page.&amp;#160; So as long as the widget framework is enabled, then you are covered.&amp;#160; If not, have your module register the request or use the Page Settings shown above.&lt;/p&gt;  &lt;h4&gt;3.&amp;#160; Don’t use the $ alias&lt;/h4&gt;  &lt;p&gt;One of the first things that a new jQuery user learns is the $ alias.&amp;#160; Using $(selector) to get some page elements is a truly powerful concept.&amp;#160; It is such a powerful concept that the $ alias is used by most of the major JavaScript frameworks.&amp;#160; Since most of my work is in &lt;a title="DotNetNuke" href="http://www.dotnetnuke.com/" target="_blank"&gt;DotNetNuke&lt;/a&gt;, I find that it is just easier to avoid using the $ alias in my scripts.&amp;#160; 5 extra characters seems a small price to pay for peace of mind.&amp;#160;&amp;#160; By staying away from the use of $ I have avoided a lot of problems.&lt;/p&gt;  &lt;p&gt;For some people however the $ is an important feature of jQuery.&amp;#160; Maybe they have existing scripts that they want to use and replacing all of the $ references would be too painful.&lt;/p&gt;  &lt;h4&gt;4.&amp;#160; Wrap your jQuery in a closure to properly map the $ alias if you must use it.&lt;/h4&gt;  &lt;p&gt;For example the following jQuery code does not work in DotNetNuke:&lt;/p&gt;  &lt;pre class="js" name="code"&gt;$(function() {
    $('#box span').hide();
    $('#box').click(function() {
        $('#box span').hide();
        $('#box').css({'background-color': '#ccc'})
            .animate({ left: 500 }, 2000)
            .animate({ top: 150 }, 700, function() { $('#box').css({'background-color': '#988'}); })
            .animate({ left: 0 }, 1200)
            .animate({ top: 0 }, 700, function() {
                $('#box span').show(1000, function() {
                    $('#box').css('background-color', '#333').css('color', '#fff');
                });
            });
    });
});&lt;/pre&gt;

&lt;p&gt;Getting this function to work is easy – wrap the code in a simple function and pass the jQuery object as a parameter.&lt;/p&gt;

&lt;pre class="js" name="code"&gt;(function($) {
    //Your jQuery code here
})(jQuery);&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h4&gt;5.&amp;#160; Variables are overrated &lt;/h4&gt;

&lt;p&gt;One of the greatest strengths of jQuery is that it allows you to chain method calls.&amp;#160; Most methods in jQuery return a jQuery object.&amp;#160; Using chaining allows you to minimize the creation of temporary variables which in turn makes your code easier to read.&lt;/p&gt;

&lt;p&gt;There are still places where variables are useful.&amp;#160; If you are creating multiple jQuery objects using the same selector or where you might be able to use a common ancestor element to get at the necessary elements, then you can gain a performance advantage by creating a temporary jQuery object and chaining subsequent method calls off that element.&amp;#160; &lt;/p&gt;

&lt;p&gt;Using a cached version of the jQuery object in the above script would result in:&lt;/p&gt;

&lt;pre class="js" name="code"&gt;$(function() {
    var box = $(&amp;quot;#box&amp;quot;);
    box.click(function() {
        box.find('span').hide();
        box.css({ 'background-color': '#ccc' })
            .animate({ left: 500 }, 2000)
            .animate({ top: 150 }, 700, function() { box.css({ 'background-color': '#988' }); })
            .animate({ left: 0 }, 1200)
            .animate({ top: 0 }, 700, function() {
                box.find('span').show(1000, function() {
                    box.css('background-color', '#333').css('color', '#fff');
                });
            });
    }).find('span').hide();
});&lt;/pre&gt;

&lt;p&gt;This script uses a single variable but avoids four calls to the jQuery constructor to create the same object, and chaining the find operation off this common element shouldn’t result in any performance degradation.&lt;/p&gt;

&lt;h4&gt;5.&amp;#160; The End() function is your friend&lt;/h4&gt;

&lt;p&gt;The last example forced me to change the ordering from my original script and hide the span after creating the click event handler.&amp;#160; Sometimes ordering is important so it is useful to know how to use a common jQuery element, modify descendents and then go back and modify the parent last.&amp;#160; This is where the end function comes in.&amp;#160; Essentially this function reverts the jQuery matched set to the list of elements prior to your previous destructive change.&amp;#160; Using this technique, I can keep the same ordering in my code as the first example, and still make use of a common variable (yes I do know that I could create a second variable to cache the span object but then I wouldn’t be able to show you this example ;) ).&lt;/p&gt;

&lt;pre class="js" name="code"&gt;$(function() {
    var box = $(&amp;quot;#box&amp;quot;);
    box
        .find('span')
        .hide()
    .end()
    .click(function() {
        box
            .find('span')
            .hide()
        .end()
        .css({ 'background-color': '#ccc' })
            .animate({ left: 500 }, 2000)
            .animate({ top: 150 }, 700, function() { box.css({ 'background-color': '#988' }); })
            .animate({ left: 0 }, 1200)
            .animate({ top: 0 }, 700, function() {
                box.find('span').show(1000, function() {
                    box.css('background-color', '#333').css('color', '#fff');
                });
            });
    });
});&lt;/pre&gt;

&lt;h4&gt;6.&amp;#160; Keep things lite&lt;/h4&gt;

&lt;p&gt;It is important to remember that all this JavaScript is not without a cost.&amp;#160; There is a bandwidth cost to download the code to the client and there is an execution cost that the user also must pay.&amp;#160; If you bloat up your page with too much JavaScript then it will affect the performance of the page for users running older machine or older web browsers.&amp;#160; You should always keep the end user in mind when adding jQuery and JavaScript to the page because it has a double impact on your site performance.&amp;#160; Just remember that in addition to your code, DotNetNuke is going to load the ClientAPI, the jQuery framework and the AJAX framework.&amp;#160; That is a lot of JavaScript already on the page.&lt;/p&gt;

&lt;p&gt;Where this becomes important is in the area of plugins.&amp;#160; Often jQuery users will use a jQuery plugin because it has a lot of functionality, but if you are not using all of the functionality and you can reasonably code the needed functionality in a fraction of the code, then you are better rolling your own code and forgoing the use of the plugin.&amp;#160; A great example of this is the jQuery UI tabs control.&amp;#160; As I showed in my post &lt;a title="How to create JQuery Tabs in DotNetNuke" href="http://blog.theaccidentalgeek.com/post/2009/01/30/How-to-create-jQuery-Tabs-in-DotNetNuke.aspx" target="_blank"&gt;How to create JQuery Tabs in DotNetNuke&lt;/a&gt;, you can build great looking tabs using very little JavaScript (about 23 lines of code plus 10 lines of CSS).&amp;#160; Compare this with almost 13k of compressed code for the jQuery UI version of the tab control (plus 110K for the core jQuery UI library).&amp;#160; Unless you really need all the functionality of the jQuery UI tabs and the UI library, then you are paying a huge price for very simple functionality.&lt;/p&gt;

&lt;h4&gt;&amp;#160;&lt;/h4&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:0a72564e-9133-4dc2-9c60-d5205d20ffa3" class="wlWriterEditableSmartContent"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/DotNetNuke" rel="tag"&gt;DotNetNuke&lt;/a&gt;, &lt;a href="http://technorati.com/tags/jQuery" rel="tag"&gt;jQuery&lt;/a&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=5_nG_Pc_How:wWT0ILH7a_E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=5_nG_Pc_How:wWT0ILH7a_E:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=5_nG_Pc_How:wWT0ILH7a_E:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=5_nG_Pc_How:wWT0ILH7a_E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=5_nG_Pc_How:wWT0ILH7a_E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=5_nG_Pc_How:wWT0ILH7a_E:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=5_nG_Pc_How:wWT0ILH7a_E:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=5_nG_Pc_How:wWT0ILH7a_E:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=5_nG_Pc_How:wWT0ILH7a_E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/5_nG_Pc_How" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/5_nG_Pc_How/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/05/26/DotNetNuke-Tips-and-Tricks-11-Using-jQuery-in-DotNetNuke.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=ca7a83dc-b22c-45b5-b2b5-5ef296cb9188</guid><pubDate>Tue, 26 May 2009 05:26:10 -1000</pubDate><category>DotNetNuke</category><category>Tips and Tricks</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=ca7a83dc-b22c-45b5-b2b5-5ef296cb9188</pingback:target><slash:comments>14</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=ca7a83dc-b22c-45b5-b2b5-5ef296cb9188</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/05/26/DotNetNuke-Tips-and-Tricks-11-Using-jQuery-in-DotNetNuke.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=ca7a83dc-b22c-45b5-b2b5-5ef296cb9188</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=ca7a83dc-b22c-45b5-b2b5-5ef296cb9188</feedburner:origLink></item><item><title>DotNetNuke 4.9.4 Released</title><description>&lt;p&gt;&lt;a title="DotNetNuke" href="http://www.dotnetnuke.com/" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" border="0" align="right" src="http://blog.theaccidentalgeek.com/image.axd?picture=WindowsLiveWriter/DotNetNuke4.9.2isnowavailable_9C89/logo_3056fb18-928a-4639-8ac2-9cd99e945b11.gif" /&gt; DotNetNuke&lt;/a&gt; 4.9.4 is a minor stabilization release for the 4.x codebase.&amp;#160; This release is targeted at resolving a major defect with the module caching code and also addresses two minor security issues.&amp;#160; We do not anticipate any further releases of the 4.x codebase.&lt;/p&gt;  &lt;p&gt;As always you can see a complete list with all the details of each fix/change in the &lt;a href="http://support.dotnetnuke.com/project/ChangeLog.aspx?PROJID=2"&gt;ChangeLog&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;Major Highlights in this release&lt;/h3&gt;  &lt;ul&gt;   &lt;li&gt;Fixed a major module caching issue which resulted in empty content for webcrawlers &lt;/li&gt;    &lt;li&gt;Improved performance of FormatRemoveSQL method &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Security Fixes&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;span&gt;Low &lt;/span&gt;- &lt;a href="http://www.dotnetnuke.com/News/SecurityPolicy/securitybulletinno26/tabid/1275/Default.aspx" target="_blank"&gt;Errorpage information leakage&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;span&gt;Low &lt;/span&gt;- &lt;a href="http://www.dotnetnuke.com/News/SecurityPolicy/securitybulletinno27/tabid/1276/Default.aspx" target="_blank"&gt;HTML/Script Code Injection Vulnerability&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Updated Modules/Providers&lt;/h4&gt;  &lt;p&gt;The following modules and providers have been updated in the 4.9.4 packages. Please see the specific project pages for notes on what bugs or enhancements were corrected with each release.&lt;/p&gt;  &lt;h4&gt;Modules&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.dotnetnuke.com/Development/Forge/ModuleAnnouncements/tabid/924/Default.aspx" target="_blank"&gt;Announcements 04.00.03&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;Providers&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;Removed the AD Provider so that it cannot be installed by the Install Wizard. It can still be manually installed. &lt;/li&gt; &lt;/ul&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=EemTHiqs39o:feitKj0BtKY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=EemTHiqs39o:feitKj0BtKY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=EemTHiqs39o:feitKj0BtKY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=EemTHiqs39o:feitKj0BtKY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=EemTHiqs39o:feitKj0BtKY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=EemTHiqs39o:feitKj0BtKY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?i=EemTHiqs39o:feitKj0BtKY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=EemTHiqs39o:feitKj0BtKY:dnMXMwOfBR0"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=dnMXMwOfBR0" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/JoeBrinkman?a=EemTHiqs39o:feitKj0BtKY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/JoeBrinkman?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/JoeBrinkman/~4/EemTHiqs39o" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/JoeBrinkman/~3/EemTHiqs39o/post.aspx</link><author>joe.brinkman.nospam@nospam.tag-software.net (jbrinkman)</author><comments>http://blog.theaccidentalgeek.com/post/2009/05/21/DotNetNuke-494-Released.aspx#comment</comments><guid isPermaLink="false">http://blog.theaccidentalgeek.com/post.aspx?id=46dd36fb-58ae-471d-8741-159e84c6cd2e</guid><pubDate>Thu, 21 May 2009 01:52:03 -1000</pubDate><category>DotNetNuke</category><dc:publisher>jbrinkman</dc:publisher><pingback:server>http://blog.theaccidentalgeek.com/pingback.axd</pingback:server><pingback:target>http://blog.theaccidentalgeek.com/post.aspx?id=46dd36fb-58ae-471d-8741-159e84c6cd2e</pingback:target><slash:comments>4</slash:comments><trackback:ping>http://blog.theaccidentalgeek.com/trackback.axd?id=46dd36fb-58ae-471d-8741-159e84c6cd2e</trackback:ping><wfw:comment>http://blog.theaccidentalgeek.com/post/2009/05/21/DotNetNuke-494-Released.aspx#comment</wfw:comment><wfw:commentRss>http://blog.theaccidentalgeek.com/syndication.axd?post=46dd36fb-58ae-471d-8741-159e84c6cd2e</wfw:commentRss><feedburner:origLink>http://blog.theaccidentalgeek.com/post.aspx?id=46dd36fb-58ae-471d-8741-159e84c6cd2e</feedburner:origLink></item></channel>
</rss>
