<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>TechBubble</title>
	<atom:link href="http://www.kalyani.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kalyani.com</link>
	<description>Nik Kalyani&#039;s Irrationally Exuberant Musings on Technology</description>
	<lastBuildDate>Fri, 05 Feb 2010 01:07:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>The Seven Sins of DotNetNuke Module Developers</title>
		<link>http://www.kalyani.com/2010/01/the-seven-sins-of-dotnetnuke-module-developers/</link>
		<comments>http://www.kalyani.com/2010/01/the-seven-sins-of-dotnetnuke-module-developers/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 00:29:14 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[DotNetNuke]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://kalyani.com/?p=1093</guid>
		<description><![CDATA[In an average week, I communicate on the phone, by email, through webinars and in person, with some 100 DotNetNuke business customers, prospects and partners. A majority of them use DotNetNuke in some mission-critical way. I enjoy these conversations and get many insights on their real-world experience with DotNetNuke. I have noticed that there are [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://kalyani.com/wp-content/uploads/2010/01/Fall-of-Man.jpg"><img class="alignright size-medium wp-image-1104" style="border: 0pt none; margin: 10px;" title="Fall-of-Man" src="http://kalyani.com/wp-content/uploads/2010/01/Fall-of-Man-225x300.jpg" alt="Adam and Eve in Fall of Man" width="225" height="300" /></a>In an average week, I communicate on the phone, by email, through webinars and in person, with some 100 DotNetNuke business customers, prospects and partners. A majority of them use DotNetNuke in some mission-critical way. I enjoy these conversations and get many insights on their real-world experience with DotNetNuke. I have noticed that there are some common things that end-users find problematic with Core and/or third-party extensions they use with DotNetNuke. It occurred to me that it would be good to share this information since not all extension builders may be aware of the issues that sometimes arise due to the way a particular extension is built. In order to make the information easy to digest (and because lists are cool), I am going to present these observations using a &#8220;Seven Sins&#8230;&#8221; theme.</p>
<p>Let&#8217;s start with the <strong>Seven Sins of DotNetNuke Module Developers</strong>:</p>
<div class="SubHead">Inline Style Attributes</div>
<p><strong>Sin:</strong> Using inline style attrbutes in your HTML markup is probably the single, biggest problem you can create for your end-users. Since such attributes cannot be overridden with CSS, users are forced to edit the markup, use Javascript or the <a href="http://kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/">StyleScrubber Widget</a> to neutralize the impact of a module&#8217;s inline style attribute on other elements of a page.</p>
<p><strong>Sin Level:</strong> Annoyance</p>
<p><strong>Absolution:</strong> Avoid using in-line style attributes in your module&#8217;s static and dynamic HTML markup. Instead, create style definitions in your module.css file that target your module&#8217;s markup. While you can use &#8220;class&#8221; and &#8220;ID&#8221; attributes throughout your markup, it is best to keep your markup clean and use the various <a href="http://www.w3.org/TR/CSS2/selector.html" target="_blank">CSS selectors</a> to achieve the desired styles. An approach that works well is to create a &#8220;wrapper&#8221; DIV for your module&#8217;s markup with a &#8220;class&#8221; attribute value that closely matches your module name (for example: &lt;div class=&#8221;Acme-Survey-Module&#8221;&gt;). You can then have styles in your module.css like this:</p>
<pre class="brush: css;">
.Acme-Survey-Module div  {
       padding-bottom: 10px;
}
</pre>
<p>And since we are on the topic of style-related sins, please do not specify any font-related style attributes in your style definitions. Let the page skin&#8217;s font definitions rule. If you absolutely must change the text size, at least use &#8220;em&#8221; units instead of pixel or point units so that the text size is relative instead of absolute.</p>
<div class="SubHead">Unfiltered User Input</div>
<p><strong>Sin:</strong> Assuming that user input is safe and processing or persisting it without filtering, potentially compromising security and making a user&#8217;s DotNetNuke installation, server and network vulnerable to attacks.</p>
<p><strong>Sin Level: </strong>Deadly</p>
<p><strong>Absolution:</strong> DotNetNuke has built-in features, including an input filter that is incredibly easy to use for filtering strings. Use it to <a href="http://www.willstrohl.com/Blog/tabid/66/EntryId/377/DotNetNuke-Module-Security-Filtering-User-Entered-Text.aspx" target="_blank">filter user input</a> and make your modules more secure.</p>
<div class="SubHead">Hard-coded Text</div>
<p><strong>Sin:</strong> Hard-coding user interface text in HTML markup or in code, preventing localization and customization of text.</p>
<p><strong>Sin Level: </strong>Aggravating</p>
<p><strong>Absolution:</strong> Do not assume that everyone speaks the same language as you, and even if so, that they like the error prompt &#8220;Yo&#8230;you messed-up, fix it already.&#8221; Ensure that all user interface text follows well-established best-practices for <a href="http://www.dotnetnuke.com/LinkClick.aspx?fileticket=dbwenZbhC1Q%3d&amp;tabid=879&amp;mid=2701" target="_blank">DotNetNuke Localization</a>.</p>
<div class="SubHead">UpdatePanel</div>
<p><strong>Sin:</strong> Using an UpdatePanel instead of writing the code necessary to properly implement AJAX functionality. If your module is doing something trivial, by all means, use UpdatePanel. But for a module that is potentially going to be used in high-traffic scenarios, UpdatePanel is a no-go. UpdatePanel was intended to be a quick and easy way to implement AJAX functionality &#8212; it would not be a stretch to call the UpdatePanel solution LAJAX (lazy AJAX). Unfortunately, it has become the standard way in which most ASP.NET developers implement AJAX functionality. For every AJAX request, UpdatePanel causes the <a href="http://encosia.com/2007/10/24/are-you-making-these-3-common-aspnet-ajax-mistakes/" target="_blank">entire page life-cycle to be repeated on the server</a>. As a result, a module that has lots of AJAX functionality implemented using UpdatePanel is going to cause significant performance issues and unnecessary resource utilization when used in a high-traffic environment.</p>
<p><strong>Sin Level:</strong> Aggravating</p>
<p><strong>Absolution:</strong> As I mentioned, if your module is doing something trivial, UpdatePanel is a reasonable solution. For anything else, it&#8217;s better to use ASP.NET AJAX or jQuery on the client-side making requests to an HttpHandler or Webservice to obtain the needed information for the UI in JSON or XML format. Here&#8217;s an <a href="http://www.bitethebullet.co.uk/DNN_Module_and_jQuery.aspx" target="_blank">example</a> of how this can be done in a DotNetNuke module.</p>
<div class="SubHead">Non-Semantic Markup</div>
<p><strong>Sin:</strong> Using HTML markup for layout, instead of CSS, provides no semantic cues to user agents (browsers) as to the intended purpose of content. Most online discussions about semantic HTML markup degrade very quickly into near-religious arguments about TABLE versus DIV element. Such discussions are akin to throwing the baby out with the bath-water. Semantic markup is not solely about using tables for layout. The bigger issue is that HTML was never intended to convey presentation fidelity to the degree seen on modern web pages. Its primary purpose was to give semantic meaning to text so that user agents could then render the text in the most appropriate way for that agent. When markup is created with an emphasis on layout, it strays from this purpose. For instance, if your module markup uses an H1 element for content that is not the primary headline on the page, your markup is non-semantic and is misguiding user agents such as screen readers.</p>
<p><strong>Sin Level</strong>: Annoyance</p>
<p><strong>Absolution:</strong> I don&#8217;t view the issue of <a href="http://blue-anvil.com/archives/guide-to-semantic-mark-up/" target="_blank">semantic HTML markup</a> as a black-and-white one. I think it&#8217;s OK to take occasional liberties with markup to save time, after all time is money. But every developer should make a good-faith attempt to produce more semantic markup. Take a look at your module code and see if there are opportunities to replace HTML markup used for layout with CSS (without giving yourself a case of DIVitis). Low hanging fruit includes H*, B and I tags and input forms. For forms, try ditching the all-too-common TABLE found in most DotNetNuke module forms and replacing it with the <a href="http://htmlhelp.com/reference/html40/forms/fieldset.html" target="_blank">FIELDSET</a> element along with some CSS. For a good example of this, refer to the <a href="http://dnnblueprint.codeplex.com/" target="_blank">DotNetNuke Blueprint</a> project.</p>
<div class="SubHead">Custom Settings</div>
<p><strong>Sin:</strong> Using a custom, non-standard user interface for managing module settings.</p>
<p><strong>Sin Level: </strong>Aggravating</p>
<p><strong>Absolution:</strong> DotNetNuke provides a simple and automatic mechanism for module developers to implement a <a href="http://knol.google.com/k/introduction-to-dotnetnuke-module-development#Settings_Control" target="_blank">user interface for managing module settings</a>. Developers should not circumvent it as it adversely impacts usability of the platform. It takes time for users to get familiar and comfortable with standard behaviors. Each time a user encounters a module that ignores the standard and does something custom with the user interface, it causes the user to get frustrated with the platform (i.e. DotNetNuke). This is because, contextually, he/she has no knowledge of the separation between the platform and the module. As far as the user is concerned, DotNetNuke appears to have an inconsistent user interface (which it well might, but that&#8217;s another discussion). Why force the user to click on a custom link or button to configure your module&#8217;s settings? Let the framework do its thing and inject your settings control at the end of the standard module settings so that the user can customize module settings in the same way, no matter which module they are using.</p>
<div class="SubHead">No script tokens</div>
<p><strong>Sin:</strong> Using &#8220;dbo&#8221; in module SQL scripts instead of {objectQualifier} and {databaseOwner}. If your module SQL scripts use &#8220;dbo&#8221; for the object owner your module cannot be easily installed in environments where the SQL connection uses a different database owner. If your module SQL scripts do not use the {objectQualifier} prefix for database objects, your module cannot be used in shared database scenarios.</p>
<p><strong>Sin Level: </strong>Aggravating</p>
<p><strong>Absolution: </strong>Follow <a href="http://www.apptheory.com/dotnetnuke/dotnetnuke_blogs/articletype/articleview/articleid/180/best_practices_development_team_collaboration_and_dotnetnuke_part_2_the_sqldataprovider_files.aspx" target="_blank">DotNetNuke best practices for SQL scripts</a> by using {objectQualifier} and {databaseOwner} prefixes in your module&#8217;s SQL scripts to ensure that your module can be installed in any environment where DotNetNuke is able to function.</p>
<p>There you have it&#8230;the seven sins of DotNetNuke module developers. What other cringe-worthy things have you seen in DotNetNuke modules?</p>
<p>Next up, the seven sins of DotNetNuke Skin Designers.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2010/01/the-seven-sins-of-dotnetnuke-module-developers/&amp;title=The+Seven+Sins+of+DotNetNuke+Module+Developers" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2010/01/the-seven-sins-of-dotnetnuke-module-developers/&amp;title=The+Seven+Sins+of+DotNetNuke+Module+Developers" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2010/01/the-seven-sins-of-dotnetnuke-module-developers/&amp;title=The+Seven+Sins+of+DotNetNuke+Module+Developers&amp;desc=In%20an%20average%20week%2C%20I%20communicate%20on%20the%20phone%2C%20by%20email%2C%20through%20webinars%20and%20in%20person%2C%20with%20some%20100%20DotNetNuke%20business%20customers%2C%20prospects%20and%20partners.%20A%20majority%20of%20them%20use%20DotNetNuke%20in%20some%20mission-critical%20way.%20I%20enjoy%20these%20conversations%20and%20get%20many%20insights%20on%20their%20real-world%20experie" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2010/01/the-seven-sins-of-dotnetnuke-module-developers/&amp;title=The+Seven+Sins+of+DotNetNuke+Module+Developers" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2010/01/the-seven-sins-of-dotnetnuke-module-developers/&amp;title=The+Seven+Sins+of+DotNetNuke+Module+Developers" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2010/01/the-seven-sins-of-dotnetnuke-module-developers/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2010/01/the-seven-sins-of-dotnetnuke-module-developers/&amp;title=The+Seven+Sins+of+DotNetNuke+Module+Developers" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2010/01/the-seven-sins-of-dotnetnuke-module-developers/&amp;t=The+Seven+Sins+of+DotNetNuke+Module+Developers" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=The+Seven+Sins+of+DotNetNuke+Module+Developers+-+http://bit.ly/9UUDNc+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2010/01/the-seven-sins-of-dotnetnuke-module-developers/&amp;title=The+Seven+Sins+of+DotNetNuke+Module+Developers&amp;summary=In%20an%20average%20week%2C%20I%20communicate%20on%20the%20phone%2C%20by%20email%2C%20through%20webinars%20and%20in%20person%2C%20with%20some%20100%20DotNetNuke%20business%20customers%2C%20prospects%20and%20partners.%20A%20majority%20of%20them%20use%20DotNetNuke%20in%20some%20mission-critical%20way.%20I%20enjoy%20these%20conversations%20and%20get%20many%20insights%20on%20their%20real-world%20experie&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2010/01/the-seven-sins-of-dotnetnuke-module-developers/&amp;submitHeadline=The+Seven+Sins+of+DotNetNuke+Module+Developers&amp;submitSummary=In%20an%20average%20week%2C%20I%20communicate%20on%20the%20phone%2C%20by%20email%2C%20through%20webinars%20and%20in%20person%2C%20with%20some%20100%20DotNetNuke%20business%20customers%2C%20prospects%20and%20partners.%20A%20majority%20of%20them%20use%20DotNetNuke%20in%20some%20mission-critical%20way.%20I%20enjoy%20these%20conversations%20and%20get%20many%20insights%20on%20their%20real-world%20experie&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2010/01/the-seven-sins-of-dotnetnuke-module-developers/&amp;t=The+Seven+Sins+of+DotNetNuke+Module+Developers" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2010/01/the-seven-sins-of-dotnetnuke-module-developers/&amp;title=The+Seven+Sins+of+DotNetNuke+Module+Developers" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=The+Seven+Sins+of+DotNetNuke+Module+Developers&amp;link=http://www.kalyani.com/2010/01/the-seven-sins-of-dotnetnuke-module-developers/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2010/01/the-seven-sins-of-dotnetnuke-module-developers/&amp;title=The+Seven+Sins+of+DotNetNuke+Module+Developers&amp;body=In%20an%20average%20week%2C%20I%20communicate%20on%20the%20phone%2C%20by%20email%2C%20through%20webinars%20and%20in%20person%2C%20with%20some%20100%20DotNetNuke%20business%20customers%2C%20prospects%20and%20partners.%20A%20majority%20of%20them%20use%20DotNetNuke%20in%20some%20mission-critical%20way.%20I%20enjoy%20these%20conversations%20and%20get%20many%20insights%20on%20their%20real-world%20experie" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2010/01/the-seven-sins-of-dotnetnuke-module-developers/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2010%2F01%2Fthe-seven-sins-of-dotnetnuke-module-developers%2F&amp;t=The+Seven+Sins+of+DotNetNuke+Module+Developers" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2010/01/the-seven-sins-of-dotnetnuke-module-developers/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Visual: DotNetNuke Enterprise Deployment Scenario</title>
		<link>http://www.kalyani.com/2010/01/visual-dotnetnuke-enterprise-deployment-scenario/</link>
		<comments>http://www.kalyani.com/2010/01/visual-dotnetnuke-enterprise-deployment-scenario/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 00:13:59 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[DotNetNuke]]></category>

		<guid isPermaLink="false">http://kalyani.com/?p=1083</guid>
		<description><![CDATA[Here&#8217;s an illustration depicting a common scenario for DotNetNuke Deployment in the Enterprise. Click the image for a higher-res version. If you find the image helpful, feel free to use it as needed without any restrictions or attribution requirements.






		
			Share this on del.icio.us
		
		
			Digg this!
		
		
			Post this on Diigo
		
		
			Share this on Reddit
		
		
			Stumble upon something good? Share it on [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s an illustration depicting a common scenario for DotNetNuke Deployment in the Enterprise. Click the image for a higher-res version. If you find the image helpful, feel free to use it as needed without any restrictions or attribution requirements.</p>
<p><a href="http://kalyani.com/wp-content/uploads/2010/01/DNN-Deployment-Scenario.png"><img class="size-full wp-image-1085  aligncenter" style="border: 0pt none; margin: 10px;" title="DNN-Deployment-Scenario" src="http://kalyani.com/wp-content/uploads/2010/01/DNN-Deployment-Scenario-500.png" alt="DNN-Deployment-Scenario" width="500" height="679" /></a></p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2010/01/visual-dotnetnuke-enterprise-deployment-scenario/&amp;title=Visual%3A+DotNetNuke+Enterprise+Deployment+Scenario" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2010/01/visual-dotnetnuke-enterprise-deployment-scenario/&amp;title=Visual%3A+DotNetNuke+Enterprise+Deployment+Scenario" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2010/01/visual-dotnetnuke-enterprise-deployment-scenario/&amp;title=Visual%3A+DotNetNuke+Enterprise+Deployment+Scenario&amp;desc=Here%27s%20an%20illustration%20depicting%20a%20common%20scenario%20for%20DotNetNuke%20Deployment%20in%20the%20Enterprise.%20Click%20the%20image%20for%20a%20higher-res%20version.%20If%20you%20find%20the%20image%20helpful%2C%20feel%20free%20to%20use%20it%20as%20needed%20without%20any%20restrictions%20or%20attribution%20requirements.%0D%0A%0D%0A" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2010/01/visual-dotnetnuke-enterprise-deployment-scenario/&amp;title=Visual%3A+DotNetNuke+Enterprise+Deployment+Scenario" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2010/01/visual-dotnetnuke-enterprise-deployment-scenario/&amp;title=Visual%3A+DotNetNuke+Enterprise+Deployment+Scenario" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2010/01/visual-dotnetnuke-enterprise-deployment-scenario/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2010/01/visual-dotnetnuke-enterprise-deployment-scenario/&amp;title=Visual%3A+DotNetNuke+Enterprise+Deployment+Scenario" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2010/01/visual-dotnetnuke-enterprise-deployment-scenario/&amp;t=Visual%3A+DotNetNuke+Enterprise+Deployment+Scenario" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Visual%3A+DotNetNuke+Enterprise+Deployment+Scenario+-+http://bit.ly/cLBqcr+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2010/01/visual-dotnetnuke-enterprise-deployment-scenario/&amp;title=Visual%3A+DotNetNuke+Enterprise+Deployment+Scenario&amp;summary=Here%27s%20an%20illustration%20depicting%20a%20common%20scenario%20for%20DotNetNuke%20Deployment%20in%20the%20Enterprise.%20Click%20the%20image%20for%20a%20higher-res%20version.%20If%20you%20find%20the%20image%20helpful%2C%20feel%20free%20to%20use%20it%20as%20needed%20without%20any%20restrictions%20or%20attribution%20requirements.%0D%0A%0D%0A&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2010/01/visual-dotnetnuke-enterprise-deployment-scenario/&amp;submitHeadline=Visual%3A+DotNetNuke+Enterprise+Deployment+Scenario&amp;submitSummary=Here%27s%20an%20illustration%20depicting%20a%20common%20scenario%20for%20DotNetNuke%20Deployment%20in%20the%20Enterprise.%20Click%20the%20image%20for%20a%20higher-res%20version.%20If%20you%20find%20the%20image%20helpful%2C%20feel%20free%20to%20use%20it%20as%20needed%20without%20any%20restrictions%20or%20attribution%20requirements.%0D%0A%0D%0A&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2010/01/visual-dotnetnuke-enterprise-deployment-scenario/&amp;t=Visual%3A+DotNetNuke+Enterprise+Deployment+Scenario" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2010/01/visual-dotnetnuke-enterprise-deployment-scenario/&amp;title=Visual%3A+DotNetNuke+Enterprise+Deployment+Scenario" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Visual%3A+DotNetNuke+Enterprise+Deployment+Scenario&amp;link=http://www.kalyani.com/2010/01/visual-dotnetnuke-enterprise-deployment-scenario/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2010/01/visual-dotnetnuke-enterprise-deployment-scenario/&amp;title=Visual%3A+DotNetNuke+Enterprise+Deployment+Scenario&amp;body=Here%27s%20an%20illustration%20depicting%20a%20common%20scenario%20for%20DotNetNuke%20Deployment%20in%20the%20Enterprise.%20Click%20the%20image%20for%20a%20higher-res%20version.%20If%20you%20find%20the%20image%20helpful%2C%20feel%20free%20to%20use%20it%20as%20needed%20without%20any%20restrictions%20or%20attribution%20requirements.%0D%0A%0D%0A" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2010/01/visual-dotnetnuke-enterprise-deployment-scenario/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2010%2F01%2Fvisual-dotnetnuke-enterprise-deployment-scenario%2F&amp;t=Visual%3A+DotNetNuke+Enterprise+Deployment+Scenario" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2010/01/visual-dotnetnuke-enterprise-deployment-scenario/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Redirecting to Canonical URL in IIS7</title>
		<link>http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/</link>
		<comments>http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 04:42:50 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false">http://kalyani.com/?p=1072</guid>
		<description><![CDATA[If you are using IIS7, it&#8217;s very easy to ensure that all requests always go to your preferred canonical URL. It&#8217;s a two step process:
Step 1: Install the UrlRewrite module for IIS: http://www.iis.net/expand/URLRewrite
Step 2: Add the following rule to your applications web.config file:
&#60;configuration&#62;
 &#60;system.webServer&#62;
    &#60;rewrite&#62;
      &#60;rules&#62;
  [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">If you are using IIS7, it&#8217;s very easy to ensure that all requests always go to your preferred canonical URL. It&#8217;s a two step process:</p>
<p style="text-align: left;"><strong>Step 1:</strong> Install the UrlRewrite module for IIS: <a href="http://www.iis.net/expand/URLRewrite" target="_blank">http://www.iis.net/expand/URLRewrite</a><a href="http://www.iis.net/expand/URLRewrite"><img class="size-full wp-image-1074 aligncenter" style="border: 0pt none; margin-top: 10px; margin-bottom: 10px;" title="IIS Rewrite" src="http://kalyani.com/wp-content/uploads/2010/01/iisrewrite.png" alt="IIS Rewrite" width="335" height="251" /></a></p>
<p><strong>Step 2:</strong> Add the following rule to your applications web.config file:</p>
<pre class="brush: xml;">&lt;configuration&gt;
 &lt;system.webServer&gt;
    &lt;rewrite&gt;
      &lt;rules&gt;
        &lt;clear /&gt;
        &lt;rule name=&quot;Redirect from www&quot; stopProcessing=&quot;true&quot;&gt;
           &lt;match url=&quot;.*&quot; /&gt;
           &lt;conditions&gt;
              &lt;add input=&quot;{HTTP_HOST}&quot; pattern=&quot;^www.yoursite.com$&quot; /&gt;
           &lt;/conditions&gt;
           &lt;action type=&quot;Redirect&quot; url=&quot;http://yoursite.com/{R:0}&quot; redirectType=&quot;Permanent&quot; /&gt;
        &lt;/rule&gt;
     &lt;/rules&gt;
   &lt;/rewrite&gt;
 &lt;/system.webServer&gt;
&lt;/configuration&gt;</pre>
<p><strong>IMPORTANT: </strong>When using the above code, take care to merge it with your existing web.config without duplicating any existing elements.</p>
<p>I like my URL&#8217;s to be in the format http://mysite.com. If you prefer http://www.mysite.com, simply remove &#8220;www.&#8221; from the &lt;add&gt; element and add it to the &lt;action&gt; element&#8217;s &#8220;url&#8221; attribute.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/&amp;title=Redirecting+to+Canonical+URL+in+IIS7" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/&amp;title=Redirecting+to+Canonical+URL+in+IIS7" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/&amp;title=Redirecting+to+Canonical+URL+in+IIS7&amp;desc=If%20you%20are%20using%20IIS7%2C%20it%27s%20very%20easy%20to%20ensure%20that%20all%20requests%20always%20go%20to%20your%20preferred%20canonical%20URL.%20It%27s%20a%20two%20step%20process%3A%0D%0AStep%201%3A%20Install%20the%20UrlRewrite%20module%20for%20IIS%3A%20http%3A%2F%2Fwww.iis.net%2Fexpand%2FURLRewrite%0D%0AStep%202%3A%20Add%20the%20following%20rule%20to%20your%20applications%20web.config%20file%3A%0D%0A%0D%0A%5Bxml%5D%26lt" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/&amp;title=Redirecting+to+Canonical+URL+in+IIS7" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/&amp;title=Redirecting+to+Canonical+URL+in+IIS7" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/&amp;title=Redirecting+to+Canonical+URL+in+IIS7" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/&amp;t=Redirecting+to+Canonical+URL+in+IIS7" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Redirecting+to+Canonical+URL+in+IIS7+-+http://bit.ly/bK6RhQ+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/&amp;title=Redirecting+to+Canonical+URL+in+IIS7&amp;summary=If%20you%20are%20using%20IIS7%2C%20it%27s%20very%20easy%20to%20ensure%20that%20all%20requests%20always%20go%20to%20your%20preferred%20canonical%20URL.%20It%27s%20a%20two%20step%20process%3A%0D%0AStep%201%3A%20Install%20the%20UrlRewrite%20module%20for%20IIS%3A%20http%3A%2F%2Fwww.iis.net%2Fexpand%2FURLRewrite%0D%0AStep%202%3A%20Add%20the%20following%20rule%20to%20your%20applications%20web.config%20file%3A%0D%0A%0D%0A%5Bxml%5D%26lt&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/&amp;submitHeadline=Redirecting+to+Canonical+URL+in+IIS7&amp;submitSummary=If%20you%20are%20using%20IIS7%2C%20it%27s%20very%20easy%20to%20ensure%20that%20all%20requests%20always%20go%20to%20your%20preferred%20canonical%20URL.%20It%27s%20a%20two%20step%20process%3A%0D%0AStep%201%3A%20Install%20the%20UrlRewrite%20module%20for%20IIS%3A%20http%3A%2F%2Fwww.iis.net%2Fexpand%2FURLRewrite%0D%0AStep%202%3A%20Add%20the%20following%20rule%20to%20your%20applications%20web.config%20file%3A%0D%0A%0D%0A%5Bxml%5D%26lt&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/&amp;t=Redirecting+to+Canonical+URL+in+IIS7" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/&amp;title=Redirecting+to+Canonical+URL+in+IIS7" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Redirecting+to+Canonical+URL+in+IIS7&amp;link=http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/&amp;title=Redirecting+to+Canonical+URL+in+IIS7&amp;body=If%20you%20are%20using%20IIS7%2C%20it%27s%20very%20easy%20to%20ensure%20that%20all%20requests%20always%20go%20to%20your%20preferred%20canonical%20URL.%20It%27s%20a%20two%20step%20process%3A%0D%0AStep%201%3A%20Install%20the%20UrlRewrite%20module%20for%20IIS%3A%20http%3A%2F%2Fwww.iis.net%2Fexpand%2FURLRewrite%0D%0AStep%202%3A%20Add%20the%20following%20rule%20to%20your%20applications%20web.config%20file%3A%0D%0A%0D%0A%5Bxml%5D%26lt" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2010%2F01%2Fredirecting-to-canonical-url-in-iis7%2F&amp;t=Redirecting+to+Canonical+URL+in+IIS7" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2010/01/redirecting-to-canonical-url-in-iis7/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DotNetNuke Widgets Guide (Part 4 of 4)</title>
		<link>http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-4-of-4/</link>
		<comments>http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-4-of-4/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 09:07:00 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[DotNetNuke]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Modules]]></category>
		<category><![CDATA[Skins]]></category>
		<category><![CDATA[Widgets]]></category>

		<guid isPermaLink="false">http://kalyani.com/?p=1039</guid>
		<description><![CDATA[This is the last post in my four-part series on DotNetNuke Widgets. Here&#8217;s a review of the other posts in this series:

Part 1 &#8211; Overview of DotNetNuke Widgets
Part 2 &#8211; DotNetNuke Widgets reference
Part 3 &#8211; Insights into how you can develop your own Widgets for DotNetNuke

In this post, I&#8217;ll walk you through the code of [...]]]></description>
			<content:encoded><![CDATA[<p>This is the last post in my four-part series on DotNetNuke Widgets. Here&#8217;s a review of the other posts in this series:</p>
<ul>
<li><a href="/2009/12/dotnetnuke-widgets-guide-part-1-of-4/">Part 1</a> &#8211; Overview of DotNetNuke Widgets</li>
<li><a href="/2009/12/dotnetnuke-widgets-guide-part-2-of-4/">Part 2</a> &#8211; DotNetNuke Widgets reference</li>
<li><a href="/2010/01/dotnetnuke-widgets-guide-part-3-of-4/">Part 3</a> &#8211; Insights into how you can develop your own Widgets for DotNetNuke</li>
</ul>
<p>In this post, I&#8217;ll walk you through the code of the TechBubble CatalogWidget. This Widget displays a carousel of Product thumbnail images. You can click on any thumbnail to see a larger version of the image. You can then move your cursor over any portion of the larger image to see a zoomed in image of the area below the cursor. I created this Widget to convey multiple concepts:</p>
<ul>
<li>Passing data through Widget markup parameters</li>
<li>Using a Widget to integrate multiple jQuery plugins seamlessly</li>
<li>Using behavior injection to dynamically add event-handling to UI elements</li>
<li>Dynamically injecting stylesheets and scripts into the page</li>
<li>Using jQuery UI themes</li>
</ul>
<p>Let&#8217;s start by looking at a mockup of the Widget (created using my favorite mockup tool &#8211; <a href="http://balsamiq.com" target="_blank">Balsamiq</a>).</p>
<p style="text-align: center;"><a href="http://kalyani.com/wp-content/uploads/2010/01/mockup2.png"><img class="aligncenter size-full wp-image-1057" style="border: 0pt none;" title="CatalogWidget Mockup" src="http://kalyani.com/wp-content/uploads/2010/01/mockup2.png" alt="CatalogWidget Mockup" width="569" height="491" /></a></p>
<p style="text-align: center;">
<p>In order to implement this UI, I decided to use two jQuery plugins:</p>
<ul>
<li><a href="http://www.ferretarmy.com/files/jQuery/ImageCarousel/ImageCarousel.html" target="_blank">ImageCarousel</a></li>
<li><a href="http://www.mind-projects.it/projects/jqzoom/" target="_blank">jqZoom</a></li>
</ul>
<p>(These are arbitrary choices&#8230;I am sure that there are other plugins that would work equally well or better.)</p>
<p>I have setup two live demos of the Widget so you can get a feel for the Widget&#8217;s UI:</p>
<ul>
<li><a href="http://demo.kalyani.com/Widgets/CatalogWidgetDemo1.aspx" target="_blank">Demo with default data</a> (Ducati bikes)</li>
<li><a href="http://demo.kalyani.com/Widgets/CatalogWidgetDemo2.aspx" target="_blank">Demo with custom data</a> (Maxim&#8217;s 10 Hottest Women)</li>
</ul>
<p>You can download the Widget at the link below and follow along with the technical discussion that follows. I have also included a short slideshow that shows a screen grab of the installation process and the two demos.</p>
Note: There is a file embedded within this post, please visit this post to download the file.
<p><p style="text-align:center;">
              <iframe width="563px" height="453px" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" name="smooth_frame_3551" src="http://www.kalyani.com/wp-content/plugins/nextgen-smooth-gallery/nggSmoothFrame.php?galleryID=1&width=560&height=450&timed=&showArrows=1&showCarousel=1&embedLinks=1&delay=9000&defaultTransition=fade&showInfopane=&textShowCarousel=Image Selector&showCarouselOpen=&margin=&align="></iframe>
            </p></p>
<p>Here are the properties that supported by the CatalogWidget:</p>
<p><em><strong>photoUrl</strong> (required) &#8211; </em>A URL to the location where the images for the Widget will be found. The Widget uses the following convention for image names: {label}.{extension} for hi-res image displayed in zoom area, {label}_thumb.{extension} for thumbnail image and {label}_small.{extension} for small image displayed when thumbnail is clicked. {label} and {extension} are explained in the description for other parameters.</p>
<p><em><strong>theme</strong> (optional, default=ui-lightness)</em> &#8211; Name of the jQuery UI theme that should be loaded from Google&#8217;s CDN for jQuery themes. The list of supported themes can be found on the <a href="http://jqueryui.com/themeroller/" target="_blank">jQuery Themeroller</a> page. The theme name should match the defined name on the Themeroller page, with spaces in the name replaced with the hyphen character.</p>
<p><em><strong>carouselWidth</strong> (optional, default=500)</em> &#8211; Width of the carousel used to display the thumbnails in pixels. The number of thumbnails displayed will depend on the width of each thumbnail and the value of this parameter.</p>
<p><em><strong>zoomWidth</strong> (optional, default=250)</em> &#8211; Width of the zoomed image area in pixels.</p>
<p><em><strong>zoomHeight</strong> (optional, default=250)</em> &#8211; Height of the zoomed image area in pixels.</p>
<p><em><strong>moreInfoHandler</strong> (optional) </em>- Name of a function that will be called with a parameter of {label} when the information icon that appears to the right of the product name link is clicked. If this parameter is not specified, the information icon will not be displayed.</p>
<p><em><strong>extension</strong> (optional, default=jpg)</em> &#8211; The file extension for all images.</p>
<p><em><strong>Product Data</strong></em> &#8211; In addition to these parameters, the Widget supports an unlimited number of additional product data parameters. Any parameter specified other than the above, is treated as product data. The value of the &#8220;name&#8221; attribute of the parameter will be used for the product {label} and the value of the &#8220;value&#8221; attribute will be used for the product&#8217;s descriptive name. Example: &lt;param name=&#8221;ABC1000&#8243; value=&#8221;ABC 1000 Super Duper Product&#8221; /&gt;.</p>
<p>OK, now we have that out of the way, let&#8217;s get started with building the Widget. The Widget is going to exist in the namespace &#8220;<strong>TechBubble.Widgets</strong>,&#8221; so by convention, the Widget file will be named &#8220;<strong>TechBubble.Widgets.CatalogWidget.js</strong>&#8221; and it will be located in <strong>~/Resources/Widgets/User/TechBubble</strong>. All resources for this Widget will be in <strong>~/Resources/Widgets/User/TechBubble/CatalogWidgetResources</strong>. Here&#8217;s the code for namespace registration and the Widget constructor:</p>
<pre class="brush: jscript;">Type.registerNamespace(&quot;TechBubble.Widgets&quot;);
TechBubble.Widgets.CatalogWidget = function(widget)
{
    TechBubble.Widgets.CatalogWidget.initializeBase(this, [widget]);
    this.catalogResourcesUrl =
                    $dnn.baseResourcesUrl +
                    &quot;Widgets/User/TechBubble/CatalogWidgetResources/&quot;;
    this.photoUrl = &quot;&quot;;
    this.theme = &quot;ui-lightness&quot;;
    this.carouselWidth = &quot;800&quot;;
    this.zoomWidth = &quot;250&quot;;
    this.zoomHeight = &quot;250&quot;;
    this.moreInfoHandler = &quot;&quot;;
    this.extension = &quot;jpg&quot;;
    this.products = [];
    this.hasProducts = false;

    if (!TechBubble.Widgets.CatalogWidget.Initialized)
    {
        $.getScript(this.catalogResourcesUrl +
                    &quot;scripts/jQuery-ui-1.7.2.custom.min.js&quot;);

        $.getScript(this.catalogResourcesUrl +
                    &quot;scripts/jquery.metadata.js&quot;);

        TechBubble.Widgets.CatalogWidget.Initialized = true;
    }
}
TechBubble.Widgets.CatalogWidget.inheritsFrom(
            DotNetNuke.UI.WebControls.Widgets.BaseWidget);
TechBubble.Widgets.CatalogWidget.registerClass(
            &quot;TechBubble.Widgets.CatalogWidget&quot;,
            DotNetNuke.UI.WebControls.Widgets.BaseWidget);</pre>
<p>In the constructor, we define default values for the various properties (parameters) that the Widget supports. In addition the variable <strong>TechBubble.Widgets.CatalogWidget.Initialized</strong> is used as a flag to prevent the jQuery UI and jQuery metadata plugin from being loaded. A nice optimization for this code would be to check for the actual existence of the plugin, instead of using a flag. In addition to the constructor, the calls to <strong>inheritsFrom()</strong> and <strong>registerClass()</strong> are standard calls for every Widget for setting inheritance and registering the class.</p>
<pre class="brush: jscript;">TechBubble.Widgets.CatalogWidget.prototype =
{
    render:
        function()
        {
            // Parse widget parameters
            this._getParams();

            // Load some sample data to display if none
            // has been specified
            if (!this.hasProducts)
                this._getSampleData();

            // Create a DIV element and swap out the Widget's
            // defining &lt;object&gt; element with it by calling
            // the base render() method (can't use jQuery
            // shortcut to create element)
            var div =document.createElement(&quot;div&quot;);
            div.setAttribute(&quot;style&quot;,&quot;width:&quot; + this.carouselWidth + &quot;px&quot;);
            TechBubble.Widgets.CatalogWidget.callBaseMethod(this, &quot;render&quot;, [div]);

            this._renderCarousel();

            this._renderZoomer();
        },

        _getParams:
        function()
        {
		// Enumerate and retrieve parameters
		// . . . code omitted
        },

        _renderCarousel:
        function()
        {
		// Render the Carousel plugin
		// . . . code omitted
        },

        _renderZoomer:
        function()
        {
		// Render the Zoomer plugin
		// . . . code omitted
        },

        _injectStyleSheet:
        function(name, isTheme)
        {
		// Inject a stylesheet into the page
		// . . . code omitted
        },

        _getThumbnailList:
        function(list, photoUrl)
        {
            return(productList);
        },

         _getSampleData:
         function()
         {
		// Use and display Widget with sample data
		// . . . code omitted
         }
}</pre>
<p>Next, let&#8217;s review the code for the Widget&#8217;s prototype where the required method <strong>render()</strong> is declared along with various private methods (prefixed with underscore). In the <strong>render()</strong> method, we start by getting the parameters. Then, if no products are defined, we use some sample product information. Next, we swap out the &lt;object&gt; element defining the Widget with a &lt;div&gt; element. This &lt;div&gt; element will become the parent container for the rest of the Widget which is rendered in the <strong>_renderCarousel()</strong> and the <strong>_renderZoomer()</strong> methods. Next in the code are a number of helper methods. I won&#8217;t go into a line-by-line explanation, but highlight a few things I think are noteworthy:</p>
<p><strong>Script Injection:</strong> I use the jQuery method <strong>$.getScript(</strong>scriptUrl, anonymous function<strong>)</strong> in several places. This is a useful method when you want to inject a script into the DOM and want to ensure that any dependent code is not executed until the asynchronous loading of the script is completed. By putting all the dependent code in an anonymous function defined in the second parameter of this method I could achieve this goal.</p>
<p><strong>Behavior Injection:</strong> In <strong>_renderZoomer()</strong>, I iterate through each thumbnail in the carousel and use the shortcut for the jQuery <strong>bind() </strong>method <strong>$(this).click()</strong> to inject a click handler for each of the thumbnail images. This is cleaner and more efficient than adding an <strong>onClick</strong> attribute when defining the HTML markup for each thumbnail.</p>
<pre class="brush: jscript;">DotNetNuke.UI.WebControls.Widgets.renderWidgetType(&quot;TechBubble.Widgets.CatalogWidget&quot;);</pre>
<p>We wrap-up the Widget code by telling the Widget framework to render all Widgets of the type <strong>TechBubble.Widgets.CatalogWidget</strong>.</p>
<p>This also wraps-up my series on DotNetNuke Widgets. I hope you found the content and examples useful and are inspired to build your own DotNetNuke Widgets.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-4-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+4+of+4%29" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-4-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+4+of+4%29" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-4-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+4+of+4%29&amp;desc=This%20is%20the%20last%20post%20in%20my%20four-part%20series%20on%20DotNetNuke%20Widgets.%20Here%27s%20a%20review%20of%20the%20other%20posts%20in%20this%20series%3A%0D%0A%0D%0A%09Part%201%20-%20Overview%20of%20DotNetNuke%20Widgets%0D%0A%09Part%202%20-%20DotNetNuke%20Widgets%20reference%0D%0A%09Part%203%20-%20Insights%20into%20how%20you%20can%20develop%20your%20own%20Widgets%20for%20DotNetNuke%0D%0A%0D%0AIn%20this%20post%2C%20I%27l" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-4-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+4+of+4%29" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-4-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+4+of+4%29" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-4-of-4/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-4-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+4+of+4%29" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-4-of-4/&amp;t=DotNetNuke+Widgets+Guide+%28Part+4+of+4%29" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=DotNetNuke+Widgets+Guide+%28Part+4+of+4%29+-+http://bit.ly/atyK6V+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-4-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+4+of+4%29&amp;summary=This%20is%20the%20last%20post%20in%20my%20four-part%20series%20on%20DotNetNuke%20Widgets.%20Here%27s%20a%20review%20of%20the%20other%20posts%20in%20this%20series%3A%0D%0A%0D%0A%09Part%201%20-%20Overview%20of%20DotNetNuke%20Widgets%0D%0A%09Part%202%20-%20DotNetNuke%20Widgets%20reference%0D%0A%09Part%203%20-%20Insights%20into%20how%20you%20can%20develop%20your%20own%20Widgets%20for%20DotNetNuke%0D%0A%0D%0AIn%20this%20post%2C%20I%27l&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-4-of-4/&amp;submitHeadline=DotNetNuke+Widgets+Guide+%28Part+4+of+4%29&amp;submitSummary=This%20is%20the%20last%20post%20in%20my%20four-part%20series%20on%20DotNetNuke%20Widgets.%20Here%27s%20a%20review%20of%20the%20other%20posts%20in%20this%20series%3A%0D%0A%0D%0A%09Part%201%20-%20Overview%20of%20DotNetNuke%20Widgets%0D%0A%09Part%202%20-%20DotNetNuke%20Widgets%20reference%0D%0A%09Part%203%20-%20Insights%20into%20how%20you%20can%20develop%20your%20own%20Widgets%20for%20DotNetNuke%0D%0A%0D%0AIn%20this%20post%2C%20I%27l&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-4-of-4/&amp;t=DotNetNuke+Widgets+Guide+%28Part+4+of+4%29" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-4-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+4+of+4%29" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=DotNetNuke+Widgets+Guide+%28Part+4+of+4%29&amp;link=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-4-of-4/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-4-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+4+of+4%29&amp;body=This%20is%20the%20last%20post%20in%20my%20four-part%20series%20on%20DotNetNuke%20Widgets.%20Here%27s%20a%20review%20of%20the%20other%20posts%20in%20this%20series%3A%0D%0A%0D%0A%09Part%201%20-%20Overview%20of%20DotNetNuke%20Widgets%0D%0A%09Part%202%20-%20DotNetNuke%20Widgets%20reference%0D%0A%09Part%203%20-%20Insights%20into%20how%20you%20can%20develop%20your%20own%20Widgets%20for%20DotNetNuke%0D%0A%0D%0AIn%20this%20post%2C%20I%27l" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-4-of-4/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2010%2F01%2Fdotnetnuke-widgets-guide-part-4-of-4%2F&amp;t=DotNetNuke+Widgets+Guide+%28Part+4+of+4%29" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-4-of-4/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>DotNetNuke Widgets Guide (Part 3 of 4)</title>
		<link>http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-3-of-4/</link>
		<comments>http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-3-of-4/#comments</comments>
		<pubDate>Mon, 04 Jan 2010 22:52:00 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[DotNetNuke]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Modules]]></category>
		<category><![CDATA[Skins]]></category>
		<category><![CDATA[Widgets]]></category>

		<guid isPermaLink="false">http://kalyani.com/?p=1021</guid>
		<description><![CDATA[
Continuing my series on DotNetNuke Widgets, here is Part 3 where I provide insights into how you can develop your own Widgets for DotNetNuke. If you haven&#8217;t already done so, read Part 1 (overview of DotNetNuke Widgets) and Part 2 (DotNetNuke Widgets reference) to better understand the concepts explored in this post. Let&#8217;s get started.
Location [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://kalyani.com/wp-content/uploads/2009/12/Widgets.png"><img class="alignright size-full wp-image-1017" style="border: 0pt none; margin: 5px;" title="Widgets" src="http://kalyani.com/wp-content/uploads/2009/12/Widgets.png" alt="Widgets" width="200" height="199" /></a></p>
<p>Continuing my series on DotNetNuke Widgets, here is Part 3 where I provide insights into how you can develop your own Widgets for DotNetNuke. If you haven&#8217;t already done so, read <a href="http://kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/">Part 1</a> (overview of DotNetNuke Widgets) and <a href="http://kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/">Part 2</a> (DotNetNuke Widgets reference) to better understand the concepts explored in this post. Let&#8217;s get started.</p>
<div class="SubHead">Location and Naming Conventions</div>
<p>Widgets are located in two places: <strong>~/Resources/Widgets/DNN</strong> for Core Widgets and <strong>~/Resources/Widgets/User/&lt;CompanyName&gt;</strong> for user Widgets. The Widget file names are <strong>&lt;WidgetName&gt;.js</strong> for Core Widgets and <strong>&lt;CompanyName&gt;.Widgets.&lt;WidgetName&gt;.js</strong> for user Widgets.</p>
<div class="SubHead">Widget Anatomy</div>
<p>Let&#8217;s walk through the three basic sections of code that constitute a Widget:</p>
<p><strong>Namespace, Inheritance and Constructor</strong></p>
<p>Using the ASP.NET AJAX library, we register the namespace for our widget and define its inheritance from the BaseWidget class. Finally, we define the constructor.</p>
<pre class="brush: jscript;">
Type.registerNamespace(&quot;YourCompany.Widgets&quot;);
YourCompany.Widgets.SampleWidget.inheritsFrom(DotNetNuke.UI.WebControls.Widgets.BaseWidget);
YourCompany.Widgets.SampleWidget = function(widget)
{
    YourCompany.Widgets.SampleWidget.initializeBase(this, [widget]);
}
</pre>
<p><strong>Render Method<br />
</strong></p>
<p>Every Widget must implement the render() method. Typically, this method will follow a pattern consisting of two steps: (1) enumerate the parameters specified in the Widget declaration (i.e. &lt;param&gt; elements) and assign them to local variables, (2) do some processing based on the parameters and call the render() method. When you call the render() method in Step 2, you pass in a DOM element that you create. The framework will replace the &lt;object&gt; element with which the Widget was defined with your DOM element and assign it the original ID that the &lt;object&gt; element was given. What your code does during Step #2 in order to populate the contents of the DOM element you create or manipulate other elements of the page is entirely up to you. Your Widget has access to any DOM element and can make calls to any other custom scripts, ASP.NET AJAX library functions, jQuery plugins etc.</p>
<pre class="brush: jscript;">
YourCompany.Widgets.SampleWidget.prototype =
{
   render:
   function()
   {
      var params = this._widget.childNodes;
      if (params != null)
      {
          // Do something
      }

      var div = document.createElement(&quot;div&quot;);
      // Do some work here to add content to the div
      YourCompany.Widgets.SampleWidget.callBaseMethod(this, &quot;render&quot;, [div]);
   }
}
</pre>
<p><strong>Registration and Rendering</strong></p>
<p>The last thing you have to do in your Widget is to register its class and tell the Widget framework that it can render all instances of your Widget present on the page.</p>
<pre class="brush: jscript;">
YourCompany.Widgets.SampleWidget.registerClass(&quot;YourCompany.Widgets.SampleWidget&quot;, DotNetNuke.UI.WebControls.Widgets.BaseWidget);
DotNetNuke.UI.WebControls.Widgets.renderWidgetType(&quot;YourCompany.Widgets.SampleWidget&quot;);
</pre>
<p>The above is all you need in order to create the basic scaffolding for a Widget. Add your custom code, save the file following the expected name and location conventions and you can start using your Widget right away (you&#8217;ll have to do some more work to package the Widget if you want it to be installable using the DotNetNuke Extension Wizard).</p>
<p>If you would like to see the code for a functional user Widget, you can download and install the <a href="../2009/12/module-print-widget-for-dotnetnuke/">Module Print Widget</a>. The module displays a dropdown that allows a page viewer to select from a list of modules on the page and print any single module thus eliminating the need to display a print icon on every module.</p>
<p>Stay tuned for the last part in this series where I take you step-by-step through the process of building a Product Catalog Widget that makes use of third-party jQuery plugins, injects stylesheets dynamically and renders a nice UI using the jQuery UI extensions.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-3-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+3+of+4%29" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-3-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+3+of+4%29" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-3-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+3+of+4%29&amp;desc=%0D%0A%0D%0AContinuing%20my%20series%20on%20DotNetNuke%20Widgets%2C%20here%20is%20Part%203%20where%20I%20provide%20insights%20into%20how%20you%20can%20develop%20your%20own%20Widgets%20for%20DotNetNuke.%20If%20you%20haven%27t%20already%20done%20so%2C%20read%20Part%201%20%28overview%20of%20DotNetNuke%20Widgets%29%20and%20Part%202%20%28DotNetNuke%20Widgets%20reference%29%20to%20better%20understand%20the%20concepts%20e" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-3-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+3+of+4%29" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-3-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+3+of+4%29" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-3-of-4/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-3-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+3+of+4%29" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-3-of-4/&amp;t=DotNetNuke+Widgets+Guide+%28Part+3+of+4%29" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=DotNetNuke+Widgets+Guide+%28Part+3+of+4%29+-+http://bit.ly/bFbryY+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-3-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+3+of+4%29&amp;summary=%0D%0A%0D%0AContinuing%20my%20series%20on%20DotNetNuke%20Widgets%2C%20here%20is%20Part%203%20where%20I%20provide%20insights%20into%20how%20you%20can%20develop%20your%20own%20Widgets%20for%20DotNetNuke.%20If%20you%20haven%27t%20already%20done%20so%2C%20read%20Part%201%20%28overview%20of%20DotNetNuke%20Widgets%29%20and%20Part%202%20%28DotNetNuke%20Widgets%20reference%29%20to%20better%20understand%20the%20concepts%20e&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-3-of-4/&amp;submitHeadline=DotNetNuke+Widgets+Guide+%28Part+3+of+4%29&amp;submitSummary=%0D%0A%0D%0AContinuing%20my%20series%20on%20DotNetNuke%20Widgets%2C%20here%20is%20Part%203%20where%20I%20provide%20insights%20into%20how%20you%20can%20develop%20your%20own%20Widgets%20for%20DotNetNuke.%20If%20you%20haven%27t%20already%20done%20so%2C%20read%20Part%201%20%28overview%20of%20DotNetNuke%20Widgets%29%20and%20Part%202%20%28DotNetNuke%20Widgets%20reference%29%20to%20better%20understand%20the%20concepts%20e&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-3-of-4/&amp;t=DotNetNuke+Widgets+Guide+%28Part+3+of+4%29" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-3-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+3+of+4%29" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=DotNetNuke+Widgets+Guide+%28Part+3+of+4%29&amp;link=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-3-of-4/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-3-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+3+of+4%29&amp;body=%0D%0A%0D%0AContinuing%20my%20series%20on%20DotNetNuke%20Widgets%2C%20here%20is%20Part%203%20where%20I%20provide%20insights%20into%20how%20you%20can%20develop%20your%20own%20Widgets%20for%20DotNetNuke.%20If%20you%20haven%27t%20already%20done%20so%2C%20read%20Part%201%20%28overview%20of%20DotNetNuke%20Widgets%29%20and%20Part%202%20%28DotNetNuke%20Widgets%20reference%29%20to%20better%20understand%20the%20concepts%20e" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-3-of-4/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2010%2F01%2Fdotnetnuke-widgets-guide-part-3-of-4%2F&amp;t=DotNetNuke+Widgets+Guide+%28Part+3+of+4%29" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2010/01/dotnetnuke-widgets-guide-part-3-of-4/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Module Print Widget for DotNetNuke</title>
		<link>http://www.kalyani.com/2009/12/module-print-widget-for-dotnetnuke/</link>
		<comments>http://www.kalyani.com/2009/12/module-print-widget-for-dotnetnuke/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 01:50:09 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[DotNetNuke]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Widgets]]></category>

		<guid isPermaLink="false">http://kalyani.com/?p=1003</guid>
		<description><![CDATA[If you are like me and want your websites to have a clean, unblemished look, then most likely you have either turned off the Print functionality in your DotNetNuke module settings or just use containers that don&#8217;t display the icon. While this does make the site look cleaner, it also takes away the functionality. I [...]]]></description>
			<content:encoded><![CDATA[<p>If you are like me and want your websites to have a clean, unblemished look, then most likely you have either turned off the Print functionality in your DotNetNuke module settings or just use containers that don&#8217;t display the icon. While this does make the site look cleaner, it also takes away the functionality. I gave this some thought and concluded that a Widget would be a great way to provide the functionality for printing the content of modules on a page. I envisioned a selector that the user would click on that would allow them to print the content for a single module. A skin designer could embed the Widget directly into the skin, or a site administrator could selectively add it to pages using an HTML module.</p>
<p><a href="http://kalyani.com/wp-content/uploads/2009/12/ModulePrintWidget.png"><img class="aligncenter size-full wp-image-1007" title="Module Print Widget" src="http://kalyani.com/wp-content/uploads/2009/12/ModulePrintWidget.png" alt="Module Print Widget" width="529" height="390" /></a></p>
<p>A couple hours of hacking later I present to you the ModulePrintWidget for DotNetNuke. It&#8217;s simple and easy to use. When added to a page, it creates a drop-down list of each module on the page. A user can select a module from the list to see a preview, then click a Print icon to print the contents of that module. Here&#8217;s a short 45-second YouTube video that demonstrates the Widget in action: <strong><a href="http://www.youtube.com/watch?v=hCMTbqcstIM&amp;fmt=22" target="_blank">TechBubble ModulePrintWidget</a></strong></p>
<p>You can download the Widget package at the link below (install as Superuser from the Extensions page):</p>
Note: There is a file embedded within this post, please visit this post to download the file.
<p>You can also see a <a title="ModulePrintWidget Demo" href="http://demo.kalyani.com/widgets/moduleprintwidget.aspx" target="_blank">live demo of the ModulePrintWidget</a>.</p>
<p>To use the Widget, add the following HTML so that it appears once on a page. You can add the markup anywhere that HTML is supported (module, skin, skin object, container):</p>
<pre class="brush: xml;">&lt;object id=&quot;MyWidget&quot; codetype=&quot;dotnetnuke/client&quot; codebase=&quot;TechBubble.Widgets.ModulePrintWidget&quot;&gt;&lt;/object&gt;</pre>
<p>If you want to customize the appearance and language, use the optional parameters:</p>
<pre class="brush: xml;">&lt;object id=&quot;MyWidget&quot; codetype=&quot;dotnetnuke/client&quot; codebase=&quot;TechBubble.Widgets.ModulePrintWidget&quot;&gt;
 &lt;param name=&quot;selectorCssClass&quot; value=&quot;Class-to-style-dropdown&quot; /&gt;
 &lt;param name=&quot;selectText&quot; value=&quot;Default-text-for-dropdown&quot; /&gt;
&lt;/object&gt;</pre>
</pre>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2009/12/module-print-widget-for-dotnetnuke/&amp;title=Module+Print+Widget+for+DotNetNuke" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2009/12/module-print-widget-for-dotnetnuke/&amp;title=Module+Print+Widget+for+DotNetNuke" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2009/12/module-print-widget-for-dotnetnuke/&amp;title=Module+Print+Widget+for+DotNetNuke&amp;desc=If%20you%20are%20like%20me%20and%20want%20your%20websites%20to%20have%20a%20clean%2C%20unblemished%20look%2C%20then%20most%20likely%20you%20have%20either%20turned%20off%20the%20Print%20functionality%20in%20your%20DotNetNuke%20module%20settings%20or%20just%20use%20containers%20that%20don%27t%20display%20the%20icon.%20While%20this%20does%20make%20the%20site%20look%20cleaner%2C%20it%20also%20takes%20away%20the%20f" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2009/12/module-print-widget-for-dotnetnuke/&amp;title=Module+Print+Widget+for+DotNetNuke" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2009/12/module-print-widget-for-dotnetnuke/&amp;title=Module+Print+Widget+for+DotNetNuke" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2009/12/module-print-widget-for-dotnetnuke/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2009/12/module-print-widget-for-dotnetnuke/&amp;title=Module+Print+Widget+for+DotNetNuke" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2009/12/module-print-widget-for-dotnetnuke/&amp;t=Module+Print+Widget+for+DotNetNuke" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Module+Print+Widget+for+DotNetNuke+-+http://bit.ly/bXaVoo+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2009/12/module-print-widget-for-dotnetnuke/&amp;title=Module+Print+Widget+for+DotNetNuke&amp;summary=If%20you%20are%20like%20me%20and%20want%20your%20websites%20to%20have%20a%20clean%2C%20unblemished%20look%2C%20then%20most%20likely%20you%20have%20either%20turned%20off%20the%20Print%20functionality%20in%20your%20DotNetNuke%20module%20settings%20or%20just%20use%20containers%20that%20don%27t%20display%20the%20icon.%20While%20this%20does%20make%20the%20site%20look%20cleaner%2C%20it%20also%20takes%20away%20the%20f&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2009/12/module-print-widget-for-dotnetnuke/&amp;submitHeadline=Module+Print+Widget+for+DotNetNuke&amp;submitSummary=If%20you%20are%20like%20me%20and%20want%20your%20websites%20to%20have%20a%20clean%2C%20unblemished%20look%2C%20then%20most%20likely%20you%20have%20either%20turned%20off%20the%20Print%20functionality%20in%20your%20DotNetNuke%20module%20settings%20or%20just%20use%20containers%20that%20don%27t%20display%20the%20icon.%20While%20this%20does%20make%20the%20site%20look%20cleaner%2C%20it%20also%20takes%20away%20the%20f&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2009/12/module-print-widget-for-dotnetnuke/&amp;t=Module+Print+Widget+for+DotNetNuke" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2009/12/module-print-widget-for-dotnetnuke/&amp;title=Module+Print+Widget+for+DotNetNuke" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Module+Print+Widget+for+DotNetNuke&amp;link=http://www.kalyani.com/2009/12/module-print-widget-for-dotnetnuke/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2009/12/module-print-widget-for-dotnetnuke/&amp;title=Module+Print+Widget+for+DotNetNuke&amp;body=If%20you%20are%20like%20me%20and%20want%20your%20websites%20to%20have%20a%20clean%2C%20unblemished%20look%2C%20then%20most%20likely%20you%20have%20either%20turned%20off%20the%20Print%20functionality%20in%20your%20DotNetNuke%20module%20settings%20or%20just%20use%20containers%20that%20don%27t%20display%20the%20icon.%20While%20this%20does%20make%20the%20site%20look%20cleaner%2C%20it%20also%20takes%20away%20the%20f" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2009/12/module-print-widget-for-dotnetnuke/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2009%2F12%2Fmodule-print-widget-for-dotnetnuke%2F&amp;t=Module+Print+Widget+for+DotNetNuke" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2009/12/module-print-widget-for-dotnetnuke/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DotNetNuke Widgets Guide (Part 2 of 4)</title>
		<link>http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/</link>
		<comments>http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 00:33:17 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[DotNetNuke]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Modules]]></category>
		<category><![CDATA[Skins]]></category>
		<category><![CDATA[Widgets]]></category>

		<guid isPermaLink="false">http://kalyani.com/?p=974</guid>
		<description><![CDATA[This is Part 2 of my four-part series on DotNetNuke Widgets. In Part 1 of the series, I covered some fundamental concepts related to DotNetNuke Widgets. In this post, I will introduce you to a few of the Widgets that are included with the DotNetNuke distribution. Before getting started I&#8217;d like to make one observation&#8230;these [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://kalyani.com/wp-content/uploads/2009/12/Widgets.png"><img class="alignright size-full wp-image-1017" style="border: 0pt none; margin: 5px;" title="Widgets" src="http://kalyani.com/wp-content/uploads/2009/12/Widgets.png" alt="Widgets" width="200" height="199" /></a>This is Part 2 of my four-part series on DotNetNuke Widgets. In <a href="http://kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/">Part 1 of the series</a>, I covered some fundamental concepts related to DotNetNuke Widgets. In this post, I will introduce you to a few of the Widgets that are included with the DotNetNuke distribution. Before getting started I&#8217;d like to make one observation&#8230;these widgets were created prior to the inclusion of jQuery within the DotNetNuke Core. While the Widgets are production-ready, they could use some refactoring to take advantage of jQuery&#8217;s efficient engine for selecting and manipulating DOM elements.</p>
<p>All Widgets follow the same format for embedding in any extension (module, skin, skin object, container)</p>
<pre class="brush: xml;">&lt;object codebase=&quot;{WidgetType}&quot; codetype=&quot;dotnetnuke/client&quot; id=&quot;{WidgetId}&quot;&gt;
	&lt;param name=&quot;{WidgetParameterName}&quot; value=&quot;{WidgetParameterValue}&quot; /&gt;
&lt;/object&gt;</pre>
<p>{WidgetType} (required) = fully qualified Type name of the Widget<br />
{WidgetId} (required) = arbitrary ID for the Widget&#8217;s DOM element (must be unique on the page)</p>
<p>A Widget can have zero or more child elements, each with a &#8220;name&#8221; and &#8220;value&#8221; attribute with corresponding {WidgetParameterName} and {WidgetParameterValue} values. Widget parameter names are case-insensitive. Widget parameter values are always case-sensitive.</p>
<div class="SubHead">StyleScrubberWidget</div>
<p>The purpose of this Widget is to &#8220;scrub&#8221; the appearance of a DotNetNuke page by removing undesirable attributes from specific elements on the page. For example, you may have a module that has a hard-coded &#8220;style&#8221; or &#8220;width&#8221; attribute that is disrupting the appearance of a page. You don&#8217;t really want to change the source code for the module (if it&#8217;s available) and you really want to use the module. This is where StyleScrubber Widget comes to the rescue. It enumerates a series of rules you provide and removes the undesirable attributes allowing elements to be fully styled with CSS. This Widget may appear any number of times on a page.</p>
<h3>Parameters</h3>
<p><strong><em>classNames</em></strong> (required) &#8211; A list of class names separated by semi-colons. The Widget will only act on elements with a matching &#8220;class&#8221; attribute. At least one value must be specified. Example: <em>head; normal; topic</em></p>
<p><strong><em>tag</em></strong> (optional) &#8211; A HTML element tag name which acts as a filter in selecting elements. The default value is <em>*</em> which implies all elements. Example: <em>div</em></p>
<p><strong><em>removeAttribute</em></strong> (optional) &#8211; The name of the attribute which should be stripped from all elements that match the <em>classNames</em> and <em>tag</em> conditions. The removeAttribute parameter may be repeated multiple times to specify more than one attribute that should be removed. Example: <em>style</em> (strips the &#8220;style&#8221; attribute)</p>
<p><strong><em>recursive</em></strong> (optional) &#8211; Value of <em>true</em> or <em>false</em> to indicate if the scrubbing cascades indiscriminately through all child elements of a matched element. Default is <em>false.</em></p>
<h3>Example</h3>
<p>Remove all &#8220;width&#8221; and &#8220;style&#8221; attributes from TABLE elements that have a class value of &#8220;Normal&#8221; or &#8220;NormalBold&#8221;</p>
<pre class="brush: xml;">&lt;object codebase=&quot;StyleScrubberWidget&quot; codetype=&quot;dotnetnuke/client&quot; id=&quot;ScrubTable&quot;&gt;
	&lt;param name=&quot;classNames&quot; value=&quot;Normal;NormalBold&quot; /&gt;
	&lt;param name=&quot;tag&quot; value=&quot;table&quot; /&gt;
	&lt;param name=&quot;removeAttribute&quot; value=&quot;width&quot; /&gt;
	&lt;param name=&quot;removeAttribute&quot; value=&quot;style&quot; /&gt;
&lt;/object&gt;</pre>
<div class="SubHead">RelocationWidget</div>
<p>The purpose of this Widget is to move or &#8220;relocate&#8221; content so that they visual location of the content differs from the physical location of the content in the page. The primary use-case is SEO. Using the RelocationWidget it is possible to have content as close to the top of the page as possible while moving the navigation lower down on the page. Since search bots do not run scripts, this arrangement is optimal for them. Users with script-enabled browsers will see the navigation in its intended location. This Widget may appear any number of times on a page.</p>
<h3>Parameters</h3>
<p><strong><em>sourceId</em></strong> (required) &#8211; ID of the DOM element that contains the HTML content that will be relocated. It is recommended that you apply a CSS style of &#8220;display:none&#8221; to this element so it is not initially visible in the user&#8217;s browser.</p>
<p><strong><em>targetId</em></strong> (required) &#8211; ID of the DOM element where the HTML content from the <em>sourceId </em>element will be moved. It is recommended that you apply a CSS style for &#8220;width&#8221; and &#8220;height&#8221; matching the dimensions that the relocated content will occupy. Doing so prevents other elements on the page from visually moving around when the Widget performs its action.<em> </em></p>
<h3>Example</h3>
<p>Move all content from element &#8220;NavTemp&#8221; to &#8220;Nav&#8221;</p>
<pre class="brush: xml;">&lt;object codebase=&quot;RelocationWidget&quot; codetype=&quot;dotnetnuke/client&quot; id=&quot;MoveIt&quot;&gt;
	&lt;param name=&quot;sourceId&quot; value=&quot;NavTemp&quot; /&gt;
	&lt;param name=&quot;targetId&quot; value=&quot;Nav&quot; /&gt;
&lt;/object&gt;</pre>
<div class="SubHead">RotatorWidget</div>
<p>Changes content within an element at a pre-defined interval. The content can be sourced from a location on the page, an RSS feed or sequentially numbered images. This widget is ideal for scenarios in which the content to be rotated is not known ahead of time and no interactivity is desired from the end-user. This Widget may appear any number of times on a page.</p>
<h3>Parameters</h3>
<p><strong><em>elementId</em></strong> (required) &#8211; ID of the DOM element where the rotating content will be rendered.</p>
<p><strong><em>height</em></strong> (required) &#8211; Height of the rotated content in pixels.</p>
<p><strong><em>width</em></strong> (required) &#8211; Width of the rotated content in pixels</p>
<p><strong><em>interval</em></strong> (optional) &#8211; Time interval in milliseconds for content rotation. Default is 2500 milliseconds.</p>
<p><strong><em>direction</em></strong> (optional) &#8211; Direction in which new content slides. Values are <em>UP</em>, <em>DOWN</em>, <em>RIGHT</em>, <em>LEFT </em>(default), <em>BLEND</em></p>
<p><strong><em>transition</em></strong> (optional, experimental) &#8211; Transition effect for new content. Values are <em>SLIDE</em>, <em>SNAP</em> (default)</p>
<p>The RotatorWidget can rotate content from three sources. Content from all the sources is aggregated, then displayed so you can combine multiple sources in the same RotatorWidget instance if desired.</p>
<p><span style="text-decoration: underline;"><strong>RSS Feed Source</strong><br />
</span></p>
<p><strong><em>feedUrl </em></strong>(required for RSS feeds)<em> </em>- URL of the RSS 2.0 feed from which content will be sourced</p>
<p><strong><em>feedAttribute</em></strong><em> </em>(required for RSS feeds) -<strong> </strong>Name of the element that contains the content to be rotated. Yahoo Pipes is used to retrieve the feed.</p>
<p><span style="text-decoration: underline;"><strong>Sequential Image Source</strong><br />
</span></p>
<p><strong><em>imageUrl</em></strong><em> </em>(required for images) &#8211; The base URL where the images to be rotated are located. Must end in slash (&#8220;/&#8221;).</p>
<p><strong><em>imageTemplate</em></strong> (required for images) &#8211; The file name template for each image. The token {INDEX} may be used to indicate where the sequence number will be injected. The sequence begins at 1. Example: <em>portrait{INDEX}.jpg </em>for images names portrait1.jpg, portrait2.jpg, portrait3.jpg etc.</p>
<p><strong><em>imageCount</em> </strong>(required for images) &#8211; The number of images available for rotation.</p>
<p><strong><em>imageScale</em></strong> (optional) &#8211; Indicates if images should be scaled by width or by height. Values are <em>WIDTH</em> and <em>HEIGHT </em>or blank (default) for no scaling.</p>
<p><span style="text-decoration: underline;"><strong>Page Content Source</strong></span></p>
<p><strong><em>contentElementId</em></strong> (required for content) &#8211; ID of the DOM element that contains the content to be rotated. The Widget expects the DOM element to have zero or more child elements. The content of each child element is treated as a separate rotation item. Example: A &lt;UL&gt; element with multiple &lt;LI&gt; elements where each &lt;LI&gt; element contains one item of content.</p>
<p><strong>Example</strong></p>
<p>Rotate 10 images stored in a folder at an interval of 5 seconds.</p>
<pre class="brush: xml;">&lt;object codebase=&quot;RotatorWidget&quot; codetype=&quot;dotnetnuke/client&quot; id=&quot;Animate&quot;&gt;
	&lt;param name=&quot;elementId&quot; value=&quot;PageHeader&quot; /&gt;
	&lt;param name=&quot;height&quot; value=&quot;100&quot; /&gt;
	&lt;param name=&quot;width&quot; value=&quot;400&quot; /&gt;
	&lt;param name=&quot;interval&quot; value=&quot;5000&quot; /&gt;
	&lt;param name=&quot;imageUrl&quot; value=&quot;/Portals/0/HeaderImages/&quot; /&gt;
	&lt;param name=&quot;imageTemplate&quot; value=&quot;header{INDEX}.png&quot; /&gt;
	&lt;param name=&quot;imageCount&quot; value=&quot;10&quot; /&gt;
&lt;/object&gt;</pre>
<div class="SubHead">StyleSheetWidget</div>
<p>The purpose of this Widget is to provide a user interface that enables users to switch stylesheets in order to customize their browsing experience. This Widget may appear any number of times on a page.</p>
<h3>Parameters</h3>
<p><strong><em>template</em></strong> (required) &#8211; The StyleSheetWidget renders an interface element for each stylesheet that the user can select from. The <em>template</em> parameter is used to specify the HTML markup that will be rendered for each stylesheet in the set. The HTML markup must be encoded and can use the tokens {TEXT} (replaced with the name of each stylesheet as specified in other parameters), {ID} (replaced with a unique identifier for each interface element that is rendered) and {CLASS} (replaced with &#8220;class&#8221; attribute and value). Example: <em>&lt;div title=&#8221;{TEXT}&#8221; {ID} {CLASS}&gt;&lt;/div&gt;</em></p>
<p><strong><em>default</em></strong> (required) &#8211; The value of the stylesheet that should be selected by default.</p>
<p><strong><em>baseUrl</em></strong> (required) &#8211; The URL where the stylesheets are located.</p>
<p><strong><em>cssClass</em></strong> (required) &#8211; The CSS class value to be used on interface elements corresponding to a stylesheet that is not selected.</p>
<p><strong><em>selectedCssClass</em></strong> (required) &#8211; The CSS class value to be used on the interface element corresponding to the selected stylesheet.</p>
<p>In addition to the above, one parameter (name and value) is required for each stylesheet. The &#8220;name&#8221; attribute should contain the stylesheet filename and the &#8220;value&#8221; attribute should contain the human-friendly label associated with the stylesheet.</p>
<h3>Example</h3>
<p>Allow the user to select from five different color palettes.</p>
<pre class="brush: xml;">&lt;object codebase=&quot;StyleSheetWidget&quot; codetype=&quot;dotnetnuke/client&quot; id=&quot;ColorSelector&quot;&gt;
	&lt;param name=&quot;template&quot; value=&quot;&amp;lt;div title=&quot;{TEXT}&quot; {ID} {CLASS}&amp;gt;&amp;lt;/div&amp;gt;&quot; /&gt;
	&lt;param name=&quot;default&quot; value=&quot;blue&quot; /&gt;
	&lt;param name=&quot;baseUrl&quot; value=&quot;&lt;%= SkinPath %&gt;css/&quot; /&gt;
	&lt;param name=&quot;cssClass&quot; value=&quot;Icon&quot; /&gt;
	&lt;param name=&quot;selectedCssClass&quot; value=&quot;Icon-Selected&quot; /&gt;
	&lt;param name=&quot;red&quot; value=&quot;Fire-engine Red&quot; /&gt;
	&lt;param name=&quot;blue&quot; value=&quot;Midnight Blue&quot; /&gt;
	&lt;param name=&quot;yellow&quot; value=&quot;Sunflower Yellow&quot; /&gt;
&lt;/object&gt;</pre>
<div class="SubHead">EmbedWidget</div>
<p>This Widget is somewhat unique in that its purpose is to provide a standard way for embedding any embeddable content from other websites. Using this Widget, you create a &#8220;snippet&#8221; for any such content once using whatever unique requirements the source site may have. Once the snippet is created, you can then use the embeddable content multiple times within DotNetNuke using the standard Widget embedding syntax.</p>
<h3>Parameters</h3>
<p><strong><em>publisher</em></strong> (required for user content) &#8211; This parameter tells the EmbedWidget where to look for the embeddable content. If it is not specified, the Widget looks for content in the folder &#8220;~/Resources/Widgets/DNN/EmbedWidgetResources/{type parameter value}/&#8221; If this parameter is specified, the Widget looks for content in the folder &#8220;~/Resources/Widgets/User/{publisher parameter value}/EmbedWidgetResources/{type parameter value}/&#8221;</p>
<p><strong><em>type</em></strong> (required) &#8211; The type of content to embed. This value must correspond to a file named &#8220;{lowercase type parameter value}.snippet.htm&#8221; in the folder location specified above. The file must be a plain-text file containing solely the HTML markup necessary for rendering the content.</p>
<p>In addition to the above parameters, you can specify and arbitrary number of name/value parameters that are passed to the content snippet file when the content is rendered by the Widget. The value may be a single value or multiple values concatenated using a delimiter character. The default delimiter is &#8220;;&#8221;. You can overrride the delimiter by specifying the &#8220;multiValueDelimiter&#8221; parameter described below. Review the individual snippet file for each type of embeddable content for supported parameters specific to that content type.</p>
<p><strong><em>multiValueDelimiter</em></strong> (optional) &#8211; Character used to delimit multi-value parameters.</p>
<p>When the Widget is rendered, the snippet file is parsed and token substitution is performed using values specified in the parameters. The syntax for tokens is:</p>
<p><strong> { parameter name :   token template : default template  }</strong></p>
<p>For each token, the Widget checks to see if a corresponding named parameter is available. If so, it replaces the token with the token template otherwise it uses the default template. In order to substitute parameter values in the token template, placeholders are used. Placeholders are numeric and in the format {0}, {1}, {2} etc. The Widget substitutes values in the order they are specified.</p>
<p>For example: { width : width=&#8221;{0}&#8221; : width=&#8221;500&#8243; }  OR { coordinates : x={0},y={1} : x=100,y=100 }</p>
<h3>Example</h3>
<p>Embed a Flickr slideshow</p>
<pre class="brush: xml;">&lt;object codebase=&quot;EmbedWidget&quot; codetype=&quot;dotnetnuke/client&quot; id=&quot;Flickr&quot;&gt;
	&lt;param name=&quot;type&quot; value=&quot;Flickr&quot; /&gt;
&lt;/object&gt;</pre>
<div class="SubHead">VisibilityWidget</div>
<p>The purpose of this Widget is to enable an HTML element on a page to toggle the visibility of a container element located elsewhere on the page. The Widget included with DotNetNuke is now deprecated. Joe Brinkman has updated the Widget&#8217;s code and the updated one will be available in a future DotNetNuke release. You can read all about Joe&#8217;s enhancements in his blog post <a href="http://blog.theaccidentalgeek.com/post/2009/12/29/DotNetNuke-Tips-and-Tricks-15-DotNetNuke-Visibility-Widget.aspx" target="_blank"><strong>DotNetNuke Tips and Tricks #15: DotNetNuke Visibility Widget</strong></a>.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+2+of+4%29" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+2+of+4%29" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+2+of+4%29&amp;desc=This%20is%20Part%202%20of%20my%20four-part%20series%20on%20DotNetNuke%20Widgets.%20In%20Part%201%20of%20the%20series%2C%20I%20covered%20some%20fundamental%20concepts%20related%20to%20DotNetNuke%20Widgets.%20In%20this%20post%2C%20I%20will%20introduce%20you%20to%20a%20few%20of%20the%20Widgets%20that%20are%20included%20with%20the%20DotNetNuke%20distribution.%20Before%20getting%20started%20I%27d%20like%20to%20m" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+2+of+4%29" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+2+of+4%29" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+2+of+4%29" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/&amp;t=DotNetNuke+Widgets+Guide+%28Part+2+of+4%29" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=DotNetNuke+Widgets+Guide+%28Part+2+of+4%29+-+http://bit.ly/by8bHR+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+2+of+4%29&amp;summary=This%20is%20Part%202%20of%20my%20four-part%20series%20on%20DotNetNuke%20Widgets.%20In%20Part%201%20of%20the%20series%2C%20I%20covered%20some%20fundamental%20concepts%20related%20to%20DotNetNuke%20Widgets.%20In%20this%20post%2C%20I%20will%20introduce%20you%20to%20a%20few%20of%20the%20Widgets%20that%20are%20included%20with%20the%20DotNetNuke%20distribution.%20Before%20getting%20started%20I%27d%20like%20to%20m&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/&amp;submitHeadline=DotNetNuke+Widgets+Guide+%28Part+2+of+4%29&amp;submitSummary=This%20is%20Part%202%20of%20my%20four-part%20series%20on%20DotNetNuke%20Widgets.%20In%20Part%201%20of%20the%20series%2C%20I%20covered%20some%20fundamental%20concepts%20related%20to%20DotNetNuke%20Widgets.%20In%20this%20post%2C%20I%20will%20introduce%20you%20to%20a%20few%20of%20the%20Widgets%20that%20are%20included%20with%20the%20DotNetNuke%20distribution.%20Before%20getting%20started%20I%27d%20like%20to%20m&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/&amp;t=DotNetNuke+Widgets+Guide+%28Part+2+of+4%29" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+2+of+4%29" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=DotNetNuke+Widgets+Guide+%28Part+2+of+4%29&amp;link=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+2+of+4%29&amp;body=This%20is%20Part%202%20of%20my%20four-part%20series%20on%20DotNetNuke%20Widgets.%20In%20Part%201%20of%20the%20series%2C%20I%20covered%20some%20fundamental%20concepts%20related%20to%20DotNetNuke%20Widgets.%20In%20this%20post%2C%20I%20will%20introduce%20you%20to%20a%20few%20of%20the%20Widgets%20that%20are%20included%20with%20the%20DotNetNuke%20distribution.%20Before%20getting%20started%20I%27d%20like%20to%20m" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2009%2F12%2Fdotnetnuke-widgets-guide-part-2-of-4%2F&amp;t=DotNetNuke+Widgets+Guide+%28Part+2+of+4%29" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-2-of-4/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>DotNetNuke Skin Proxy Re-visited</title>
		<link>http://www.kalyani.com/2009/12/dotnetnuke-skin-proxy-re-visited/</link>
		<comments>http://www.kalyani.com/2009/12/dotnetnuke-skin-proxy-re-visited/#comments</comments>
		<pubDate>Mon, 28 Dec 2009 19:52:28 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[DotNetNuke]]></category>
		<category><![CDATA[Skins]]></category>

		<guid isPermaLink="false">http://kalyani.com/?p=959</guid>
		<description><![CDATA[Some years ago, I had presented a solution for dynamically loading a skin layout based on the user&#8217;s browser type. Fast-forward to the present &#8212; at the Fall 2009 OpenForce Conference in Amsterdam I had a chance to speak to Armand Datema (@nokiko) on the same topic. The conversation occurred following my session on Advanced [...]]]></description>
			<content:encoded><![CDATA[<p>Some years ago, I had presented a <a href="http://kalyani.com/2005/04/ask-nik-switching-a-dnn-skin-based-on-the-users-browser/">solution</a> for dynamically loading a skin layout based on the user&#8217;s browser type. Fast-forward to the present &#8212; at the Fall 2009 OpenForce Conference in Amsterdam I had a chance to speak to Armand Datema (@nokiko) on the same topic. The conversation occurred following my session on <strong><a href="http://kalyani.com/2009/10/advanced-skinning-with-dotnetnuke/">Advanced Skinning with DotNetNuke</a> </strong>where I presented an early prototype of &#8220;Skinfigurator,&#8221; my module for rule-based skin loading. Armand was looking for a solution to dynamically choose a skin at run-time while overcoming the pesky ContentPane issue. If you are unfamiliar with the issue, here&#8217;s a quick synopsis&#8230;</p>
<p>DotNetNuke skins require the presence of a container HTML element with an ID of &#8220;ContentPane&#8221; and a <em>runat=&#8221;Server&#8221;</em> attribute. This is fine for most skins as it&#8217;s no big deal to define an area that serves as the default location for content (i.e. ContentPane). In the case of dynamic skin proxies (i.e. skins that load a layout based on some arbitrary set of conditions) this requirement is a problem since different layouts may want the ContentPane to be located in different places within the layout HTML.</p>
<p>In any event, as a result of my tinkering with skin proxies I found a clean solution for this problem. Ultimately I decided not to use it for Skinfigurator (more about the how/why in another post), however the technique is still quite useful. I promised Armand I would share it with him, and although I have been slow in making this post, it&#8217;s better late than never <img src='http://www.kalyani.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>The solution is trivially simple and involves just one file &#8212; the skin proxy layout. Basically what this proxy does is tap into the<strong> Init</strong> event in the page life-cycle to dynamically load the skin layout control. Since this event happens prior to the point where the DotNetNuke framework skin loader does its thing, you don&#8217;t have to bother with creating ContentPane elements in the skin proxy layout. All you need is the logic for dynamically selecting which layout to display to the user. Your Here&#8217;s the code for the skin proxy layout (I called mine LayoutSelector.ascx)</p>
<pre class="brush: vb;">&lt;%@ Control language=&quot;vb&quot; AutoEventWireup=&quot;false&quot; Explicit=&quot;True&quot; Inherits=&quot;DotNetNuke.UI.Skins.Skin&quot; %&gt;
&lt;script runat=&quot;server&quot;&gt;
	Protected Overrides Sub OnInit(ByVal e As System.EventArgs)

		Dim layout = &quot;Portal.ascx&quot;
		If (Request.Querystring(&quot;layout&quot;) &lt;&gt; &quot;&quot;) Then
			layout = Request.Querystring(&quot;layout&quot;) + &quot;.ascx&quot;
		End If
		Controls.Add(LoadControl(TemplateSourceDirectory + &quot;/layouts/&quot; + layout))
	End Sub
&lt;/script&gt;
</pre>
<p>In my example, I have the code checking for a querystring variable and loading a control based on the value provided. Of course, this is not something you will want to do in production use. More likely you will want to have conditional logic based on the user, portal, browser, tab or some other controlling factor that determines which skin layout will be loaded.</p>
<p>There is one other thing to be aware of that is related to usability. By default, DotNetNuke lists all layouts (i.e. user controls) it finds in a skin folder in any skin layout selector in the UI. To ensure that your proxy logic is used, you will want your proxy layout control to be the only control in the skin&#8217;s root folder. All the dynamically selectable layouts should be in a sub-folder. In my example, I use a sub-folder called &#8220;layouts.&#8221; The folder structure for your skin will look something like this:</p>
<p>[MyCoolSkin]<br />
&#8211; LayoutSelector.ascx<br />
&#8211; skin.css<br />
&#8211; [layouts]<br />
&#8212;&#8211; Portal.ascx<br />
&#8212;&#8211; Portal2.ascx<br />
&#8212;&#8211; Portal3.ascx</p>
<p>Using this approach, the user will only be able to choose &#8220;LayoutSelector&#8221; and the Portal, Portal2 and Portal3 layouts will be hidden from the skin layout selector UI.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2009/12/dotnetnuke-skin-proxy-re-visited/&amp;title=DotNetNuke+Skin+Proxy+Re-visited" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2009/12/dotnetnuke-skin-proxy-re-visited/&amp;title=DotNetNuke+Skin+Proxy+Re-visited" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2009/12/dotnetnuke-skin-proxy-re-visited/&amp;title=DotNetNuke+Skin+Proxy+Re-visited&amp;desc=Some%20years%20ago%2C%20I%20had%20presented%20a%20solution%20for%20dynamically%20loading%20a%20skin%20layout%20based%20on%20the%20user%27s%20browser%20type.%20Fast-forward%20to%20the%20present%20--%20at%20the%20Fall%202009%20OpenForce%20Conference%20in%20Amsterdam%20I%20had%20a%20chance%20to%20speak%20to%20Armand%20Datema%20%28%40nokiko%29%20on%20the%20same%20topic.%20The%20conversation%20occurred%20followi" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2009/12/dotnetnuke-skin-proxy-re-visited/&amp;title=DotNetNuke+Skin+Proxy+Re-visited" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2009/12/dotnetnuke-skin-proxy-re-visited/&amp;title=DotNetNuke+Skin+Proxy+Re-visited" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2009/12/dotnetnuke-skin-proxy-re-visited/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2009/12/dotnetnuke-skin-proxy-re-visited/&amp;title=DotNetNuke+Skin+Proxy+Re-visited" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2009/12/dotnetnuke-skin-proxy-re-visited/&amp;t=DotNetNuke+Skin+Proxy+Re-visited" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=DotNetNuke+Skin+Proxy+Re-visited+-+http://bit.ly/9WdlPf+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2009/12/dotnetnuke-skin-proxy-re-visited/&amp;title=DotNetNuke+Skin+Proxy+Re-visited&amp;summary=Some%20years%20ago%2C%20I%20had%20presented%20a%20solution%20for%20dynamically%20loading%20a%20skin%20layout%20based%20on%20the%20user%27s%20browser%20type.%20Fast-forward%20to%20the%20present%20--%20at%20the%20Fall%202009%20OpenForce%20Conference%20in%20Amsterdam%20I%20had%20a%20chance%20to%20speak%20to%20Armand%20Datema%20%28%40nokiko%29%20on%20the%20same%20topic.%20The%20conversation%20occurred%20followi&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2009/12/dotnetnuke-skin-proxy-re-visited/&amp;submitHeadline=DotNetNuke+Skin+Proxy+Re-visited&amp;submitSummary=Some%20years%20ago%2C%20I%20had%20presented%20a%20solution%20for%20dynamically%20loading%20a%20skin%20layout%20based%20on%20the%20user%27s%20browser%20type.%20Fast-forward%20to%20the%20present%20--%20at%20the%20Fall%202009%20OpenForce%20Conference%20in%20Amsterdam%20I%20had%20a%20chance%20to%20speak%20to%20Armand%20Datema%20%28%40nokiko%29%20on%20the%20same%20topic.%20The%20conversation%20occurred%20followi&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2009/12/dotnetnuke-skin-proxy-re-visited/&amp;t=DotNetNuke+Skin+Proxy+Re-visited" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2009/12/dotnetnuke-skin-proxy-re-visited/&amp;title=DotNetNuke+Skin+Proxy+Re-visited" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=DotNetNuke+Skin+Proxy+Re-visited&amp;link=http://www.kalyani.com/2009/12/dotnetnuke-skin-proxy-re-visited/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2009/12/dotnetnuke-skin-proxy-re-visited/&amp;title=DotNetNuke+Skin+Proxy+Re-visited&amp;body=Some%20years%20ago%2C%20I%20had%20presented%20a%20solution%20for%20dynamically%20loading%20a%20skin%20layout%20based%20on%20the%20user%27s%20browser%20type.%20Fast-forward%20to%20the%20present%20--%20at%20the%20Fall%202009%20OpenForce%20Conference%20in%20Amsterdam%20I%20had%20a%20chance%20to%20speak%20to%20Armand%20Datema%20%28%40nokiko%29%20on%20the%20same%20topic.%20The%20conversation%20occurred%20followi" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2009/12/dotnetnuke-skin-proxy-re-visited/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2009%2F12%2Fdotnetnuke-skin-proxy-re-visited%2F&amp;t=DotNetNuke+Skin+Proxy+Re-visited" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2009/12/dotnetnuke-skin-proxy-re-visited/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DotNetNuke Widgets Guide (Part 1 of 4)</title>
		<link>http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/</link>
		<comments>http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/#comments</comments>
		<pubDate>Sat, 26 Dec 2009 05:00:43 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[DotNetNuke]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Modules]]></category>
		<category><![CDATA[Skins]]></category>
		<category><![CDATA[Widgets]]></category>

		<guid isPermaLink="false">http://kalyani.com/?p=898</guid>
		<description><![CDATA[Starting with Release 5.x, the DotNetNuke platform has included a Javascript-based Widgets framework for dynamically injecting client-side interactivity into skins and modules. Like most Open Source developers, I thoroughly enjoyed coding the Widget framework but neglected to document it properly. In this four-part series I hope to correct this shortcoming. In Part 1, I will [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://kalyani.com/wp-content/uploads/2009/12/Widgets.png"><img class="alignright size-full wp-image-1017" style="border: 0pt none; margin: 5px;" title="Widgets" src="http://kalyani.com/wp-content/uploads/2009/12/Widgets.png" alt="Widgets" width="200" height="199" /></a>Starting with Release 5.x, the DotNetNuke platform has included a Javascript-based Widgets framework for dynamically injecting client-side interactivity into skins and modules. Like most <a class="zem_slink" title="Open Source" rel="wikinvest" href="http://www.wikinvest.com/concept/Open_Source">Open Source</a> developers, I thoroughly enjoyed coding the Widget framework but neglected to document it properly. In this four-part series I hope to correct this shortcoming. In Part 1, I will introduce some fundamental concepts of the DotNetNuke Widget Framework. In Part 2, I will provide a reference for existing widgets that are included with DotNetNuke. In Part 3, I will step through the process of developing a Widget. Finally, in Part 4 I will create a working Widget that you can download and use to increase your understanding of the framework and to build your own Widgets.</p>
<h3>Widget Fundamentals</h3>
<p>Just as you can add modules to a DotNetNuke page to add application functionality, so also can you add Widgets to DotNetNuke skins and modules to add interactivity. For example, in a skin, Widgets may enable a user to dynamically switch a stylesheet to change page appearance, add a photo gallery, embed a video etc. In a module, Widgets can provide interface elements for navigation, drag-and-drop sorting capabilities etc. Widgets are first-class citizens of DotNetNuke&#8217;s extensibility model and can therefore be packaged individually or in combination with DotNetNuke modules and skins using the familiar DotNetNuke manifest and zip file model. Widgets are created using Javascript code that builds on the Microsoft ASP.NET AJAX client-side library and can leverage jQuery or any other client-side framework for additional capabilities. They can be embedded into any extension type that manifests itself in the client browser (module, skin, skin object, container) and use a syntax that should be familiar to skin designers. Here&#8217;s an example of a Flickr Widget:</p>
<pre class="brush: xml;">
&lt;object codebase=&quot;EmbedWidget&quot; codetype=&quot;dotnetnuke/client&quot; id=&quot;MyWidget&quot;&gt;
    &lt;param value=&quot;Flickr&quot; name=&quot;type&quot; /&gt;
&lt;/object&gt;
</pre>
<p>That&#8217;s it&#8230;three lines of HTML markup to embed a Flickr slideshow like the image below instantly into a DotNetNuke page. Go ahead&#8230;try it out by adding the above markup in an HTML module (in source)&#8230;I&#8217;ll wait.</p>
<p><a href="http://kalyani.com/wp-content/uploads/2009/12/EmbedWidget-Flickr.png"><img class="aligncenter size-medium wp-image-906" title="EmbedWidget-Flickr" src="http://kalyani.com/wp-content/uploads/2009/12/EmbedWidget-Flickr-300x250.png" alt="Flickr slideshow using EmbedWidget" width="300" height="250" /></a></p>
<p>At this point you are probably wondering what the benefit of Widgets is if they are coded in Javascript and make use of pre-existing client-side libraries. After all it&#8217;s not that difficult to embed a simple &lt;script&gt; element into your skin or module and add any code that you desire directly at the appropriate location. And using my simplistic example of a Flickr slideshow, you could just as easily get the embed code for the slideshow and use it directly.</p>
<h3>Five Reasons for using the Widget framework</h3>
<p>Let&#8217;s address these questions by reviewing the five primary reasons for using the Widgets framework:</p>
<p><strong>Clean Markup:</strong> Using Widgets enables you to keep the HTML markup for your skin or module clean and script-free. Since Widgets are embedded using the standard &lt;object&gt; element, you can add functionality without sacrificing readability. In fact, Widgets lend themselves to more semantic markup as the intent of the markup is usually evident from the name of the Widget and the parameter name/value pairs. Embedding script directly or referencing an external script makes your markup harder to read and maintain.</p>
<p><strong>Reusability:</strong> If you have some Javascript code that needs to be used in multiple skins or modules, wrapping it into a Widget makes it easy for you to re-use the code while taking advantage of DotNetNuke&#8217;s packaging and versioning capabilities. Sure, you could store a script file in a central location and reference it, but Widgets afford you greater control in using, deploying and maintaining the code. Furthermore, by implementing the code as a Widget, you now have the ability to easily pass parameters without messing around with querystring parameters to script file references or in-line Javascript variable declarations. Such reusability does come at a small price in terms of time and effort required, so it&#8217;s probably not a good idea to create a Widget for a single-use script.</p>
<p><strong>Testability and Maintainability:</strong> Unlike context-less Javascript files or embedded script, Widgets are stand-alone, contextual entities. Therefore they can be tested and debugged in a variety of scenarios quickly and easily with minimal effort. If you just add a &lt;script&gt; reference to a Javascript file in your HTML markup, you have no way of knowing if the dependencies for the script are being loaded or not. You have no idea if any variable necessary to pass parameters to the script are already on the page or not. These issues are eliminated using Widgets. When you use a Widget, you know that its dependencies will be correctly loaded and its parameters are available in the Widget&#8217;s HTML markup itself.</p>
<p><strong>Performance:</strong> Browsers execute inline script and fetch scripts referenced using the &lt;script&gt; element synchronously while rendering a page (you could use the &#8220;defer&#8221; attribute, but browser support for this is not consistent). This puts an unnecessary wait penalty on the site visitor. Using jQuery&#8217;s document.ready() method mitigates this somewhat, but remember, the browser still has to switch context from HTML to Javascript, parse the script and then switch context back to HTML. Widgets provide a cleaner way to add client-side interactivity as they are loaded at the end of a page when the DOM is ready. Thus, the visitor will have a better user experience as HTML, CSS and images will already have been rendered. If you would like to learn more about how browsers handle script, read <a href="http://dev.opera.com/articles/view/timing-and-synchronization-in-javascript/" target="_blank">Timing and Synchronization in JavaScript</a>.</p>
<p><strong>Behavior Injection and Modification:</strong> It&#8217;s quite easy to add &#8220;onclick&#8221; and &#8220;onmouseover&#8221; attributes to HTML elements to add client-side interactivity. Unfortunately, this results in horrible markup that is difficult to maintain and difficult to debug. Widgets force you to use behavior injection and modification in order to attach events to DOM elements. This keeps all behavioral code in one location and makes it incredibly easy to maintain through good use of jQuery selectors. It&#8217;s also results in a cleaner separation between the markup and the script.</p>
<p>Hopefully this information has provided you with enough knowledge to understand when Widgets are a good idea and when they are not. Now let&#8217;s take a deeper look at the client-side page life-cycle to understand the Widget rendering process.</p>
<h3>Widget Rendering Process</h3>
<p>Widgets are rendered only if the Site Setting &#8220;Enable Skin Widgets&#8221; is checked. This value is checked by default, so you can be assured that Widgets will render on most DotNetNuke sites. (We should probably re-name this setting to &#8220;Enable Client-side Widgets&#8221;&#8230;when I was first coding the Widget framework, I was focused on usage scenarios involving skins and used the term &#8220;skin widgets.&#8221; The term stuck even though Widgets can be used in any DotNetNuke extension that renders code to the browser.) By enabling this setting, a single reference to a Javascript file is injected into the very end of the page:</p>
<pre class="brush: xml;">&lt;script type=&quot;text/javascript&quot; src=&quot;/Resources/Shared/scripts/initWidgets.js&quot;&gt;&lt;/script&gt;</pre>
<p>When the script loads, it initiates a four-step process: Framework Initialization, Widget Detection, Widget Instantiation and Widget Rendering. This process is illustrated below:</p>
<p><a href="http://kalyani.com/wp-content/uploads/2009/12/Widget-Process.png"><img class="aligncenter size-full wp-image-928" title="Widget-Process" src="http://kalyani.com/wp-content/uploads/2009/12/Widget-Process.png" alt="Widget Rendering Process" width="473" height="498" /></a></p>
<p>The Widget framework uses jQuery to load all required scripts in an asynchronous manner. When a script is done loading, an event is fired to carry out the next step in the rendering process. All of this happens pretty fast, and most notably, after the page is already rendered in the browser. If you view the HTML source for the page, you will see no difference in the markup from what was originally sent by the server (i.e. &lt;object&gt; elements). However, if you query the DOM using FireBug or a similar tool, you will see that each &lt;object&gt; Widget element has been replaced with a &lt;div&gt; or similar element with the same ID as originally given to the &lt;object&gt; element. This enables you to use CSS for styling the Widget using an ID selector (i.e. #MyWidget).</p>
<p>In this post, I provided an introduction to the DotNetNuke Widget Framework. In the next post in this series, I will introduce you to the Widgets included with DotNetNuke and provide a usage reference for each Widget.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+1+of+4%29" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+1+of+4%29" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+1+of+4%29&amp;desc=Starting%20with%20Release%205.x%2C%20the%20DotNetNuke%20platform%20has%20included%20a%20Javascript-based%20Widgets%20framework%20for%20dynamically%20injecting%20client-side%20interactivity%20into%20skins%20and%20modules.%20Like%20most%20Open%20Source%20developers%2C%20I%20thoroughly%20enjoyed%20coding%20the%20Widget%20framework%20but%20neglected%20to%20document%20it%20properly.%20I" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+1+of+4%29" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+1+of+4%29" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+1+of+4%29" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/&amp;t=DotNetNuke+Widgets+Guide+%28Part+1+of+4%29" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=DotNetNuke+Widgets+Guide+%28Part+1+of+4%29+-+http://bit.ly/c61quZ+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+1+of+4%29&amp;summary=Starting%20with%20Release%205.x%2C%20the%20DotNetNuke%20platform%20has%20included%20a%20Javascript-based%20Widgets%20framework%20for%20dynamically%20injecting%20client-side%20interactivity%20into%20skins%20and%20modules.%20Like%20most%20Open%20Source%20developers%2C%20I%20thoroughly%20enjoyed%20coding%20the%20Widget%20framework%20but%20neglected%20to%20document%20it%20properly.%20I&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/&amp;submitHeadline=DotNetNuke+Widgets+Guide+%28Part+1+of+4%29&amp;submitSummary=Starting%20with%20Release%205.x%2C%20the%20DotNetNuke%20platform%20has%20included%20a%20Javascript-based%20Widgets%20framework%20for%20dynamically%20injecting%20client-side%20interactivity%20into%20skins%20and%20modules.%20Like%20most%20Open%20Source%20developers%2C%20I%20thoroughly%20enjoyed%20coding%20the%20Widget%20framework%20but%20neglected%20to%20document%20it%20properly.%20I&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/&amp;t=DotNetNuke+Widgets+Guide+%28Part+1+of+4%29" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+1+of+4%29" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=DotNetNuke+Widgets+Guide+%28Part+1+of+4%29&amp;link=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/&amp;title=DotNetNuke+Widgets+Guide+%28Part+1+of+4%29&amp;body=Starting%20with%20Release%205.x%2C%20the%20DotNetNuke%20platform%20has%20included%20a%20Javascript-based%20Widgets%20framework%20for%20dynamically%20injecting%20client-side%20interactivity%20into%20skins%20and%20modules.%20Like%20most%20Open%20Source%20developers%2C%20I%20thoroughly%20enjoyed%20coding%20the%20Widget%20framework%20but%20neglected%20to%20document%20it%20properly.%20I" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2009%2F12%2Fdotnetnuke-widgets-guide-part-1-of-4%2F&amp;t=DotNetNuke+Widgets+Guide+%28Part+1+of+4%29" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2009/12/dotnetnuke-widgets-guide-part-1-of-4/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>DotNetNuke Visual Overview</title>
		<link>http://www.kalyani.com/2009/12/dotnetnuke-visual-overview/</link>
		<comments>http://www.kalyani.com/2009/12/dotnetnuke-visual-overview/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 08:20:45 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[DotNetNuke]]></category>

		<guid isPermaLink="false">http://kalyani.com/?p=885</guid>
		<description><![CDATA[A visual overview of DotNetNuke intended to give newcomers to the platform a quick understanding of DotNetNuke.

(Click for larger image)





		
			Share this on del.icio.us
		
		
			Digg this!
		
		
			Post this on Diigo
		
		
			Share this on Reddit
		
		
			Stumble upon something good? Share it on StumbleUpon
		
		
			Share this on Technorati
		
		
			Share this on Mixx
		
		
			Share this on Facebook
		
		
			Tweet This!
		
		
			Share this on Linkedin
		
		
			Buzz up!
		
		
			Post this to MySpace
		
		
			Add this [...]]]></description>
			<content:encoded><![CDATA[<p>A visual overview of DotNetNuke intended to give newcomers to the platform a quick understanding of DotNetNuke.</p>
<p><a href="http://kalyani.com/wp-content/uploads/2009/12/DNN-Architecture-NK20091201.png"><img class="aligncenter size-medium wp-image-886" title="DotNetNuke Architecture" src="http://kalyani.com/wp-content/uploads/2009/12/DNN-Architecture-NK20091201-300x249.png" alt="DotNetNuke Architecture" width="300" height="249" /></a></p>
<p>(Click for larger image)</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2009/12/dotnetnuke-visual-overview/&amp;title=DotNetNuke+Visual+Overview" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2009/12/dotnetnuke-visual-overview/&amp;title=DotNetNuke+Visual+Overview" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2009/12/dotnetnuke-visual-overview/&amp;title=DotNetNuke+Visual+Overview&amp;desc=A%20visual%20overview%20of%20DotNetNuke%20intended%20to%20give%20newcomers%20to%20the%20platform%20a%20quick%20understanding%20of%20DotNetNuke.%0D%0A%0D%0A%0D%0A%0D%0A%28Click%20for%20larger%20image%29" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2009/12/dotnetnuke-visual-overview/&amp;title=DotNetNuke+Visual+Overview" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2009/12/dotnetnuke-visual-overview/&amp;title=DotNetNuke+Visual+Overview" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2009/12/dotnetnuke-visual-overview/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2009/12/dotnetnuke-visual-overview/&amp;title=DotNetNuke+Visual+Overview" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2009/12/dotnetnuke-visual-overview/&amp;t=DotNetNuke+Visual+Overview" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=DotNetNuke+Visual+Overview+-+http://bit.ly/9ywB4W+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2009/12/dotnetnuke-visual-overview/&amp;title=DotNetNuke+Visual+Overview&amp;summary=A%20visual%20overview%20of%20DotNetNuke%20intended%20to%20give%20newcomers%20to%20the%20platform%20a%20quick%20understanding%20of%20DotNetNuke.%0D%0A%0D%0A%0D%0A%0D%0A%28Click%20for%20larger%20image%29&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2009/12/dotnetnuke-visual-overview/&amp;submitHeadline=DotNetNuke+Visual+Overview&amp;submitSummary=A%20visual%20overview%20of%20DotNetNuke%20intended%20to%20give%20newcomers%20to%20the%20platform%20a%20quick%20understanding%20of%20DotNetNuke.%0D%0A%0D%0A%0D%0A%0D%0A%28Click%20for%20larger%20image%29&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2009/12/dotnetnuke-visual-overview/&amp;t=DotNetNuke+Visual+Overview" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2009/12/dotnetnuke-visual-overview/&amp;title=DotNetNuke+Visual+Overview" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=DotNetNuke+Visual+Overview&amp;link=http://www.kalyani.com/2009/12/dotnetnuke-visual-overview/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2009/12/dotnetnuke-visual-overview/&amp;title=DotNetNuke+Visual+Overview&amp;body=A%20visual%20overview%20of%20DotNetNuke%20intended%20to%20give%20newcomers%20to%20the%20platform%20a%20quick%20understanding%20of%20DotNetNuke.%0D%0A%0D%0A%0D%0A%0D%0A%28Click%20for%20larger%20image%29" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2009/12/dotnetnuke-visual-overview/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2009%2F12%2Fdotnetnuke-visual-overview%2F&amp;t=DotNetNuke+Visual+Overview" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2009/12/dotnetnuke-visual-overview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Advanced Skinning With DotNetNuke</title>
		<link>http://www.kalyani.com/2009/10/advanced-skinning-with-dotnetnuke/</link>
		<comments>http://www.kalyani.com/2009/10/advanced-skinning-with-dotnetnuke/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 20:20:32 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[DotNetNuke]]></category>
		<category><![CDATA[Skins]]></category>

		<guid isPermaLink="false">http://kalyani.com/?p=971</guid>
		<description><![CDATA[Slide deck from my session on advanced skinning with DotNetNuke at SDN/OpenForce in Fall 2009.
Advanced Skinning With DotNetNuke

View more presentations from Nik Kalyani.






		
			Share this on del.icio.us
		
		
			Digg this!
		
		
			Post this on Diigo
		
		
			Share this on Reddit
		
		
			Stumble upon something good? Share it on StumbleUpon
		
		
			Share this on Technorati
		
		
			Share this on Mixx
		
		
			Share this on Facebook
		
		
			Tweet This!
		
		
			Share this on Linkedin
		
		
			Buzz up!
		
		
			Post this [...]]]></description>
			<content:encoded><![CDATA[<div>Slide deck from my session on advanced skinning with DotNetNuke at SDN/OpenForce in Fall 2009.</div>
<div style="width: 425px; text-align: left;"><a style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="Advanced Skinning With DotNetNuke" href="http://www.slideshare.net/techbubble/advanced-skinning-with-dotnetnuke">Advanced Skinning With DotNetNuke</a><object style="margin: 0px;" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=nn-10advancedskinningwithdotnetnuke5-091228135657-phpapp01&amp;stripped_title=advanced-skinning-with-dotnetnuke" /><param name="allowfullscreen" value="true" /><embed style="margin: 0px;" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=nn-10advancedskinningwithdotnetnuke5-091228135657-phpapp01&amp;stripped_title=advanced-skinning-with-dotnetnuke" allowscriptaccess="always" allowfullscreen="true"></embed></object></div>
<div id="__ss_2785628" style="width: 425px; text-align: left;">
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration: underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration: underline;" href="http://www.slideshare.net/techbubble">Nik Kalyani</a>.</div>
</div>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2009/10/advanced-skinning-with-dotnetnuke/&amp;title=Advanced+Skinning+With+DotNetNuke" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2009/10/advanced-skinning-with-dotnetnuke/&amp;title=Advanced+Skinning+With+DotNetNuke" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2009/10/advanced-skinning-with-dotnetnuke/&amp;title=Advanced+Skinning+With+DotNetNuke&amp;desc=Slide%20deck%20from%20my%20session%20on%20advanced%20skinning%20with%20DotNetNuke%20at%20SDN%2FOpenForce%20in%20Fall%202009.%0D%0AAdvanced%20Skinning%20With%20DotNetNuke%0D%0A%0D%0AView%20more%20presentations%20from%20Nik%20Kalyani.%0D%0A" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2009/10/advanced-skinning-with-dotnetnuke/&amp;title=Advanced+Skinning+With+DotNetNuke" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2009/10/advanced-skinning-with-dotnetnuke/&amp;title=Advanced+Skinning+With+DotNetNuke" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2009/10/advanced-skinning-with-dotnetnuke/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2009/10/advanced-skinning-with-dotnetnuke/&amp;title=Advanced+Skinning+With+DotNetNuke" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2009/10/advanced-skinning-with-dotnetnuke/&amp;t=Advanced+Skinning+With+DotNetNuke" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Advanced+Skinning+With+DotNetNuke+-+http://bit.ly/bwmaq3+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2009/10/advanced-skinning-with-dotnetnuke/&amp;title=Advanced+Skinning+With+DotNetNuke&amp;summary=Slide%20deck%20from%20my%20session%20on%20advanced%20skinning%20with%20DotNetNuke%20at%20SDN%2FOpenForce%20in%20Fall%202009.%0D%0AAdvanced%20Skinning%20With%20DotNetNuke%0D%0A%0D%0AView%20more%20presentations%20from%20Nik%20Kalyani.%0D%0A&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2009/10/advanced-skinning-with-dotnetnuke/&amp;submitHeadline=Advanced+Skinning+With+DotNetNuke&amp;submitSummary=Slide%20deck%20from%20my%20session%20on%20advanced%20skinning%20with%20DotNetNuke%20at%20SDN%2FOpenForce%20in%20Fall%202009.%0D%0AAdvanced%20Skinning%20With%20DotNetNuke%0D%0A%0D%0AView%20more%20presentations%20from%20Nik%20Kalyani.%0D%0A&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2009/10/advanced-skinning-with-dotnetnuke/&amp;t=Advanced+Skinning+With+DotNetNuke" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2009/10/advanced-skinning-with-dotnetnuke/&amp;title=Advanced+Skinning+With+DotNetNuke" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Advanced+Skinning+With+DotNetNuke&amp;link=http://www.kalyani.com/2009/10/advanced-skinning-with-dotnetnuke/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2009/10/advanced-skinning-with-dotnetnuke/&amp;title=Advanced+Skinning+With+DotNetNuke&amp;body=Slide%20deck%20from%20my%20session%20on%20advanced%20skinning%20with%20DotNetNuke%20at%20SDN%2FOpenForce%20in%20Fall%202009.%0D%0AAdvanced%20Skinning%20With%20DotNetNuke%0D%0A%0D%0AView%20more%20presentations%20from%20Nik%20Kalyani.%0D%0A" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2009/10/advanced-skinning-with-dotnetnuke/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2009%2F10%2Fadvanced-skinning-with-dotnetnuke%2F&amp;t=Advanced+Skinning+With+DotNetNuke" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2009/10/advanced-skinning-with-dotnetnuke/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using And Extending The DotNetNuke Widget Framework</title>
		<link>http://www.kalyani.com/2009/10/using-and-extending-the-dotnetnuke-widget-framework/</link>
		<comments>http://www.kalyani.com/2009/10/using-and-extending-the-dotnetnuke-widget-framework/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 06:52:18 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[DotNetNuke]]></category>
		<category><![CDATA[Widgets]]></category>

		<guid isPermaLink="false">http://kalyani.com/?p=940</guid>
		<description><![CDATA[This is the slide deck from my talk at OpenForce Europe (Amsterdam).
Using And Extending The DotNetNuke Widget Framework
View more presentations from Nik Kalyani.






		
			Share this on del.icio.us
		
		
			Digg this!
		
		
			Post this on Diigo
		
		
			Share this on Reddit
		
		
			Stumble upon something good? Share it on StumbleUpon
		
		
			Share this on Technorati
		
		
			Share this on Mixx
		
		
			Share this on Facebook
		
		
			Tweet This!
		
		
			Share this on Linkedin
		
		
			Buzz up!
		
		
			Post this [...]]]></description>
			<content:encoded><![CDATA[<p>This is the slide deck from my talk at OpenForce Europe (Amsterdam).</p>
<div id="__ss_2782782" style="width: 425px; text-align: left;"><a style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="Using And Extending The DotNetNuke Widget Framework" href="http://www.slideshare.net/techbubble/nn11-using-and-extending-the-dot-net-nuke-widget-framework">Using And Extending The DotNetNuke Widget Framework</a><object style="margin: 0px;" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=nn-11usingandextendingthedotnetnukewidgetframework-091228004206-phpapp01&amp;stripped_title=nn11-using-and-extending-the-dot-net-nuke-widget-framework" /><param name="allowfullscreen" value="true" /><embed style="margin: 0px;" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=nn-11usingandextendingthedotnetnukewidgetframework-091228004206-phpapp01&amp;stripped_title=nn11-using-and-extending-the-dot-net-nuke-widget-framework" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration: underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration: underline;" href="http://www.slideshare.net/techbubble">Nik Kalyani</a>.</div>
</div>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2009/10/using-and-extending-the-dotnetnuke-widget-framework/&amp;title=Using+And+Extending+The+DotNetNuke+Widget+Framework" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2009/10/using-and-extending-the-dotnetnuke-widget-framework/&amp;title=Using+And+Extending+The+DotNetNuke+Widget+Framework" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2009/10/using-and-extending-the-dotnetnuke-widget-framework/&amp;title=Using+And+Extending+The+DotNetNuke+Widget+Framework&amp;desc=This%20is%20the%20slide%20deck%20from%20my%20talk%20at%20OpenForce%20Europe%20%28Amsterdam%29.%0D%0AUsing%20And%20Extending%20The%20DotNetNuke%20Widget%20Framework%0D%0AView%20more%20presentations%20from%20Nik%20Kalyani.%0D%0A" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2009/10/using-and-extending-the-dotnetnuke-widget-framework/&amp;title=Using+And+Extending+The+DotNetNuke+Widget+Framework" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2009/10/using-and-extending-the-dotnetnuke-widget-framework/&amp;title=Using+And+Extending+The+DotNetNuke+Widget+Framework" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2009/10/using-and-extending-the-dotnetnuke-widget-framework/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2009/10/using-and-extending-the-dotnetnuke-widget-framework/&amp;title=Using+And+Extending+The+DotNetNuke+Widget+Framework" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2009/10/using-and-extending-the-dotnetnuke-widget-framework/&amp;t=Using+And+Extending+The+DotNetNuke+Widget+Framework" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Using+And+Extending+The+DotNetNuke+Widget+Framework+-+http://bit.ly/clE1Q2+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2009/10/using-and-extending-the-dotnetnuke-widget-framework/&amp;title=Using+And+Extending+The+DotNetNuke+Widget+Framework&amp;summary=This%20is%20the%20slide%20deck%20from%20my%20talk%20at%20OpenForce%20Europe%20%28Amsterdam%29.%0D%0AUsing%20And%20Extending%20The%20DotNetNuke%20Widget%20Framework%0D%0AView%20more%20presentations%20from%20Nik%20Kalyani.%0D%0A&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2009/10/using-and-extending-the-dotnetnuke-widget-framework/&amp;submitHeadline=Using+And+Extending+The+DotNetNuke+Widget+Framework&amp;submitSummary=This%20is%20the%20slide%20deck%20from%20my%20talk%20at%20OpenForce%20Europe%20%28Amsterdam%29.%0D%0AUsing%20And%20Extending%20The%20DotNetNuke%20Widget%20Framework%0D%0AView%20more%20presentations%20from%20Nik%20Kalyani.%0D%0A&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2009/10/using-and-extending-the-dotnetnuke-widget-framework/&amp;t=Using+And+Extending+The+DotNetNuke+Widget+Framework" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2009/10/using-and-extending-the-dotnetnuke-widget-framework/&amp;title=Using+And+Extending+The+DotNetNuke+Widget+Framework" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Using+And+Extending+The+DotNetNuke+Widget+Framework&amp;link=http://www.kalyani.com/2009/10/using-and-extending-the-dotnetnuke-widget-framework/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2009/10/using-and-extending-the-dotnetnuke-widget-framework/&amp;title=Using+And+Extending+The+DotNetNuke+Widget+Framework&amp;body=This%20is%20the%20slide%20deck%20from%20my%20talk%20at%20OpenForce%20Europe%20%28Amsterdam%29.%0D%0AUsing%20And%20Extending%20The%20DotNetNuke%20Widget%20Framework%0D%0AView%20more%20presentations%20from%20Nik%20Kalyani.%0D%0A" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2009/10/using-and-extending-the-dotnetnuke-widget-framework/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2009%2F10%2Fusing-and-extending-the-dotnetnuke-widget-framework%2F&amp;t=Using+And+Extending+The+DotNetNuke+Widget+Framework" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2009/10/using-and-extending-the-dotnetnuke-widget-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hands On Windows Azure:  Building A Twitter Clone</title>
		<link>http://www.kalyani.com/2009/10/hands-on-windows-azure-building-a-twitter-clone/</link>
		<comments>http://www.kalyani.com/2009/10/hands-on-windows-azure-building-a-twitter-clone/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 06:47:39 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Azure]]></category>

		<guid isPermaLink="false">http://kalyani.com/?p=935</guid>
		<description><![CDATA[This is the slide deck from my talk at SDN Europe (Amsterdam).
Hands On Windows Azure  Building A Twitter Clone
View more presentations from Nik Kalyani.






		
			Share this on del.icio.us
		
		
			Digg this!
		
		
			Post this on Diigo
		
		
			Share this on Reddit
		
		
			Stumble upon something good? Share it on StumbleUpon
		
		
			Share this on Technorati
		
		
			Share this on Mixx
		
		
			Share this on Facebook
		
		
			Tweet This!
		
		
			Share this on Linkedin
		
		
			Buzz [...]]]></description>
			<content:encoded><![CDATA[<p>This is the slide deck from my talk at SDN Europe (Amsterdam).</p>
<div id="__ss_2782775" style="width: 425px; text-align: left;"><a style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="Hands On Windows Azure  Building A Twitter Clone" href="http://www.slideshare.net/techbubble/ne09-hands-on-windows-azure-building-a-twitter-clone">Hands On Windows Azure  Building A Twitter Clone</a><object style="margin: 0px;" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=ne-09hands-onwindowsazure-buildingatwitterclone-091228004028-phpapp02&amp;stripped_title=ne09-hands-on-windows-azure-building-a-twitter-clone" /><param name="allowfullscreen" value="true" /><embed style="margin: 0px;" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=ne-09hands-onwindowsazure-buildingatwitterclone-091228004028-phpapp02&amp;stripped_title=ne09-hands-on-windows-azure-building-a-twitter-clone" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration: underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration: underline;" href="http://www.slideshare.net/techbubble">Nik Kalyani</a>.</div>
</div>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2009/10/hands-on-windows-azure-building-a-twitter-clone/&amp;title=Hands+On+Windows+Azure%3A++Building+A+Twitter+Clone" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2009/10/hands-on-windows-azure-building-a-twitter-clone/&amp;title=Hands+On+Windows+Azure%3A++Building+A+Twitter+Clone" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2009/10/hands-on-windows-azure-building-a-twitter-clone/&amp;title=Hands+On+Windows+Azure%3A++Building+A+Twitter+Clone&amp;desc=This%20is%20the%20slide%20deck%20from%20my%20talk%20at%20SDN%20Europe%20%28Amsterdam%29.%0D%0AHands%20On%20Windows%20Azure%20%20Building%20A%20Twitter%20Clone%0D%0AView%20more%20presentations%20from%20Nik%20Kalyani.%0D%0A" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2009/10/hands-on-windows-azure-building-a-twitter-clone/&amp;title=Hands+On+Windows+Azure%3A++Building+A+Twitter+Clone" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2009/10/hands-on-windows-azure-building-a-twitter-clone/&amp;title=Hands+On+Windows+Azure%3A++Building+A+Twitter+Clone" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2009/10/hands-on-windows-azure-building-a-twitter-clone/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2009/10/hands-on-windows-azure-building-a-twitter-clone/&amp;title=Hands+On+Windows+Azure%3A++Building+A+Twitter+Clone" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2009/10/hands-on-windows-azure-building-a-twitter-clone/&amp;t=Hands+On+Windows+Azure%3A++Building+A+Twitter+Clone" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Hands+On+Windows+Azure%3A++Building+A+Twitter+Clone+-+http://bit.ly/amjGdO+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2009/10/hands-on-windows-azure-building-a-twitter-clone/&amp;title=Hands+On+Windows+Azure%3A++Building+A+Twitter+Clone&amp;summary=This%20is%20the%20slide%20deck%20from%20my%20talk%20at%20SDN%20Europe%20%28Amsterdam%29.%0D%0AHands%20On%20Windows%20Azure%20%20Building%20A%20Twitter%20Clone%0D%0AView%20more%20presentations%20from%20Nik%20Kalyani.%0D%0A&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2009/10/hands-on-windows-azure-building-a-twitter-clone/&amp;submitHeadline=Hands+On+Windows+Azure%3A++Building+A+Twitter+Clone&amp;submitSummary=This%20is%20the%20slide%20deck%20from%20my%20talk%20at%20SDN%20Europe%20%28Amsterdam%29.%0D%0AHands%20On%20Windows%20Azure%20%20Building%20A%20Twitter%20Clone%0D%0AView%20more%20presentations%20from%20Nik%20Kalyani.%0D%0A&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2009/10/hands-on-windows-azure-building-a-twitter-clone/&amp;t=Hands+On+Windows+Azure%3A++Building+A+Twitter+Clone" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2009/10/hands-on-windows-azure-building-a-twitter-clone/&amp;title=Hands+On+Windows+Azure%3A++Building+A+Twitter+Clone" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Hands+On+Windows+Azure%3A++Building+A+Twitter+Clone&amp;link=http://www.kalyani.com/2009/10/hands-on-windows-azure-building-a-twitter-clone/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2009/10/hands-on-windows-azure-building-a-twitter-clone/&amp;title=Hands+On+Windows+Azure%3A++Building+A+Twitter+Clone&amp;body=This%20is%20the%20slide%20deck%20from%20my%20talk%20at%20SDN%20Europe%20%28Amsterdam%29.%0D%0AHands%20On%20Windows%20Azure%20%20Building%20A%20Twitter%20Clone%0D%0AView%20more%20presentations%20from%20Nik%20Kalyani.%0D%0A" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2009/10/hands-on-windows-azure-building-a-twitter-clone/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2009%2F10%2Fhands-on-windows-azure-building-a-twitter-clone%2F&amp;t=Hands+On+Windows+Azure%3A++Building+A+Twitter+Clone" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2009/10/hands-on-windows-azure-building-a-twitter-clone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Customer-driven Business Innovation with DotNetNuke</title>
		<link>http://www.kalyani.com/2009/08/customer-driven-business-innovation-with-dotnetnuke/</link>
		<comments>http://www.kalyani.com/2009/08/customer-driven-business-innovation-with-dotnetnuke/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 00:37:00 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[DotNetNuke]]></category>
		<category><![CDATA[ASP.NET]]></category>

		<guid isPermaLink="false">http://www.techbubble.net/Blog/tabid/57/EntryId/222/Customer-driven-Business-Innovation-with-DotNetNuke.aspx</guid>
		<description><![CDATA[
In an increasingly hyper-competitive world, businesses look for every possible opportunity that can give them an edge over their competition. It’s no secret &#8212; businesses that innovate survive and win, and those that don’t either die, don’t grow or become the walking dead.
But innovation isn’t easy. In fact, it is a challenge for most companies. [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">
<p style="text-align: left;">In an increasingly hyper-competitive world, businesses look for every possible opportunity that can give them an edge over their competition. It’s no secret &#8212; businesses that <cite>innovate</cite> survive and win, and those that don’t either die, don’t grow or become the walking dead.</p>
<p>But innovation isn’t easy. In fact, it is a challenge for most companies. There are many reasons for this – corporate culture, inertia, risk-aversion – but I think the biggest reason is “expertise.” The quote I have on my desktop wallpaper sums it up nicely:</p>
<p><strong><span style="font-size: larger;"><em>“In the beginner’s mind there are many possibilities, in the expert’s mind there are few.” </em></span></strong></p>
<p><span style="font-size: larger;"><em>– Shunryu Suzuki</em></span></p>
<p>I have this quote on my desktop because it’s a constant reminder that as I become more familiar with a technology or business skill, my ability to come up with innovative ideas about that technology or business area decreases. This is my totally unscientific thesis at a personal level; your experience may differ, but I suspect not by much. Since businesses are primarily just people doing stuff, the corollary is that businesses face the same issue – dearth of innovation due to expertise.</p>
<p>So if a business can’t look internally to its employees, where should it look for those innovative ideas that will propel it to the next level? (NO, the answer is definitely not consultants.) The best source of innovative ideas for your business is your <strong>customers</strong> and the best place to engage them for these ideas is <strong>online</strong>.</p>
<p><a href="http://kalyani.com/wp-content/uploads/2009/08/onlinecustomerequation.png"><img class="alignnone size-full wp-image-873" title="onlinecustomerequation" src="http://kalyani.com/wp-content/uploads/2009/08/onlinecustomerequation.png" alt="" width="450" height="117" /></a></p>
<p>Many companies have discovered that the same concepts that work amazingly well on a personal and social level with FaceBook and MySpace, work equally well for business (albeit without any sheep being thrown about in the process). Creating an online community for your business is an effective way to engage your customers online and provide a direct channel to them, bereft of the hierarchical and departmental boundaries that stifle discussion and open dialog offline. This should not come as a surprise, after all “people want to connect with people; people want to help and be helped” (Study: <a href="http://www.slideshare.net/fgossieaux/2008-tribalization-of-business-study-447040" target="_blank">Tribalization of Business</a>). Chances are that if you follow some basic guidelines, you can very quickly and easily engage your customers and make innovation an open and collaborative process.</p>
<p><a href="http://kalyani.com/wp-content/uploads/2009/08/IdeaNetwork.jpg"><img class="alignnone size-full wp-image-874" title="IdeaNetwork" src="http://kalyani.com/wp-content/uploads/2009/08/IdeaNetwork.jpg" alt="" width="450" height="424" /></a></p>
<p>One company that has been successful in creating such an online customer community is <a href="http://www.exacttarget.com" target="_blank">ExactTarget</a>. The company has been a long-time sponsor of the DotNetNuke project (thanks!). The “3sixty”<cite> community</cite> site it created for its customers using <a href="http://www.dotnetnuke.com/Products/ProfessionalEdition/tabid/1209/Default.aspx" target="_blank">DotNetNuke Professional Edition</a> is a prime example of best practices for creating online communities recommended by <a href="http://www.hivelive.com" target="_blank">HiveLive</a>, a SAAS provider of enterprise online customer communities. Since 3sixty was created, the site has become a key competitive differentiator for <cite>ExactTarget</cite> resulting in over 100 customer-suggested feature innovations into its product. You can get the straight scoop on how ExactTarget achieved this by attending the free webinar “<a href="http://www.dotnetnuke.com/Products/Webinars.aspx">ExactTarget: Using DotNetNuke to Build an Interactive Business Community</a>” on Aug. 26, 2009 (download a recording of the video by following the link if you are reading this after Aug. 26).<img src="http://kalyani.com/wp-content/uploads/2009/08/ET3sixty.png" border="0" alt="ExactTarget 3sixty" hspace="10" vspace="10" width="159" height="124" align="right" /></p>
<p>While ExactTarget could have developed a custom ASP.NET solution for this site, it selected <cite>DotNetNuke</cite> because of its ability to easily integrate with existing web-based business applications while providing a robust platform for rapid application development. Let me stop myself right here and not get carried away discussing the merits of DotNetNuke as an excellent platform for building online communities. It is very tempting to look at creating such communities as a technology problem and delve into a discussion about features, API’s and such. But as <a href="http://blogs.zdnet.com/bio.php?id=hinchcliffe" target="_blank">Dion Hinchcliffe</a> accurately points out in <a href="http://blogs.zdnet.com/Hinchcliffe/?p=190" target="_blank">Twelve Best Practices for Online Customer Communities</a>, “community is mostly not a technology problem.” Indeed, as he points out, platforms like DotNetNuke make it easy to create compelling communities. (If you are reading this on <a href="http://www.dotnetnuke.com" target="_blank">DotNetNuke.com</a>, you are looking at the best evidence to support this claim.) Creating successful online business communities is more an exercise in adapting your business to a new form of customer engagement and creating the social architecture for such a community.</p>
<p>In order to succeed, here is a summation of HiveLive’s recommendations:</p>
<table border="0" cellspacing="0" cellpadding="10">
<tbody>
<tr>
<td align="center" valign="top"><img src="http://kalyani.com/wp-content/uploads/2009/08/ClearGoals.png" border="0" alt="Clear Goals" /></td>
<td align="left" valign="top"><span class="Head">Best Practice #1: Build a community with clear goals in mind</span></p>
<p>Start with a narrow and tightly defined scope and develop the community structure from there. This is essential for rallying members and motivating them to contribute. Be prepared to expand the scope quickly as the community evolves.</td>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="10">
<tbody>
<tr>
<td align="left" valign="top"><span class="Head">Best Practice #2: Motivate your members</span></p>
<p>Online community members are power users, participants or spectators. Explore ways to keep power users engaged to ensure a steady stream of relevant and authentic content. This in turn will motivate others to play a more active role. Also, think of ways in which you can compensate participants. Compensation, does not have to be monetary – insider status, avatars, recognition, they all work.</td>
<td align="center" valign="top"><img src="http://kalyani.com/wp-content/uploads/2009/08/TightScope.png" border="0" alt="Tight Scope" /></td>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="10">
<tbody>
<tr>
<td align="center" valign="top"><img src="http://kalyani.com/wp-content/uploads/2009/08/DesignThinking.png" border="0" alt="Design Thinking" /></td>
<td align="left" valign="top"><span class="Head">Best Practice #3: Use Design Thinking Principles</span></p>
<p><a href="http://en.wikipedia.org/wiki/Design_thinking" target="_blank">Design Thinking</a> is a process for practical, creative resolution of problems or issues that looks for an improved future result. Using this approach can establish ground rules and foster a culture of crowd-sourced innovation in an online community.</td>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="10">
<tbody>
<tr>
<td align="left" valign="top"><span class="Head">Best Practice #4: Build a Culture of Openness</span></p>
<p>Direct engagement through genuine interactions will yield significant benefits and convince more members to participate in the innovation process. Don’t try to control the conversation, listen more than you talk, and make sure the culture of openness is not just a façade. Although painful at first, such a culture is critical to the success of an online community.</td>
<td align="center" valign="top"><img src="http://kalyani.com/wp-content/uploads/2009/08/OpenCulture.png" border="0" alt="Open Culture" /></td>
</tr>
</tbody>
</table>
<table border="0" cellspacing="0" cellpadding="10">
<tbody>
<tr>
<td align="center" valign="top"><img src="http://kalyani.com/wp-content/uploads/2009/08/ContinuousImprovement.png" border="0" alt="Continuous Improvement" /></td>
<td align="left" valign="top"><span class="Head">Best Practice #5: Remain Dedicated to Continuous Improvement</span></p>
<p>View your online community as a journey, instead of a technology initiative with a defined end-point. Committing to a posture of cultivation will yield tangible results in the form of a steady flow of innovative ideas from the community. This also builds trust and gives members a greater sense of ownership as their ideas and suggestions are realized.</td>
</tr>
</tbody>
</table>
<p>Has your company created an online business community? Do share! What were the challenges you faced? What did you learn from the experience?</p>
<p>If you have not created an online business community yet, hopefully this post and the <a href="http://www.dotnetnuke.com/products/webinars.aspx">webinar</a> will give you some ideas that will help guide you in the process.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2009/08/customer-driven-business-innovation-with-dotnetnuke/&amp;title=Customer-driven+Business+Innovation+with+DotNetNuke" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2009/08/customer-driven-business-innovation-with-dotnetnuke/&amp;title=Customer-driven+Business+Innovation+with+DotNetNuke" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2009/08/customer-driven-business-innovation-with-dotnetnuke/&amp;title=Customer-driven+Business+Innovation+with+DotNetNuke&amp;desc=%0D%0AIn%20an%20increasingly%20hyper-competitive%20world%2C%20businesses%20look%20for%20every%20possible%20opportunity%20that%20can%20give%20them%20an%20edge%20over%20their%20competition.%20It%E2%80%99s%20no%20secret%20--%20businesses%20that%20innovate%20survive%20and%20win%2C%20and%20those%20that%20don%E2%80%99t%20either%20die%2C%20don%E2%80%99t%20grow%20or%20become%20the%20walking%20dead.%0D%0ABut%20innovation%20is" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2009/08/customer-driven-business-innovation-with-dotnetnuke/&amp;title=Customer-driven+Business+Innovation+with+DotNetNuke" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2009/08/customer-driven-business-innovation-with-dotnetnuke/&amp;title=Customer-driven+Business+Innovation+with+DotNetNuke" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2009/08/customer-driven-business-innovation-with-dotnetnuke/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2009/08/customer-driven-business-innovation-with-dotnetnuke/&amp;title=Customer-driven+Business+Innovation+with+DotNetNuke" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2009/08/customer-driven-business-innovation-with-dotnetnuke/&amp;t=Customer-driven+Business+Innovation+with+DotNetNuke" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Customer-driven+Business+Innovation+with+DotNetNuke+-+http://bit.ly/94J8ln+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2009/08/customer-driven-business-innovation-with-dotnetnuke/&amp;title=Customer-driven+Business+Innovation+with+DotNetNuke&amp;summary=%0D%0AIn%20an%20increasingly%20hyper-competitive%20world%2C%20businesses%20look%20for%20every%20possible%20opportunity%20that%20can%20give%20them%20an%20edge%20over%20their%20competition.%20It%E2%80%99s%20no%20secret%20--%20businesses%20that%20innovate%20survive%20and%20win%2C%20and%20those%20that%20don%E2%80%99t%20either%20die%2C%20don%E2%80%99t%20grow%20or%20become%20the%20walking%20dead.%0D%0ABut%20innovation%20is&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2009/08/customer-driven-business-innovation-with-dotnetnuke/&amp;submitHeadline=Customer-driven+Business+Innovation+with+DotNetNuke&amp;submitSummary=%0D%0AIn%20an%20increasingly%20hyper-competitive%20world%2C%20businesses%20look%20for%20every%20possible%20opportunity%20that%20can%20give%20them%20an%20edge%20over%20their%20competition.%20It%E2%80%99s%20no%20secret%20--%20businesses%20that%20innovate%20survive%20and%20win%2C%20and%20those%20that%20don%E2%80%99t%20either%20die%2C%20don%E2%80%99t%20grow%20or%20become%20the%20walking%20dead.%0D%0ABut%20innovation%20is&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2009/08/customer-driven-business-innovation-with-dotnetnuke/&amp;t=Customer-driven+Business+Innovation+with+DotNetNuke" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2009/08/customer-driven-business-innovation-with-dotnetnuke/&amp;title=Customer-driven+Business+Innovation+with+DotNetNuke" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Customer-driven+Business+Innovation+with+DotNetNuke&amp;link=http://www.kalyani.com/2009/08/customer-driven-business-innovation-with-dotnetnuke/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2009/08/customer-driven-business-innovation-with-dotnetnuke/&amp;title=Customer-driven+Business+Innovation+with+DotNetNuke&amp;body=%0D%0AIn%20an%20increasingly%20hyper-competitive%20world%2C%20businesses%20look%20for%20every%20possible%20opportunity%20that%20can%20give%20them%20an%20edge%20over%20their%20competition.%20It%E2%80%99s%20no%20secret%20--%20businesses%20that%20innovate%20survive%20and%20win%2C%20and%20those%20that%20don%E2%80%99t%20either%20die%2C%20don%E2%80%99t%20grow%20or%20become%20the%20walking%20dead.%0D%0ABut%20innovation%20is" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2009/08/customer-driven-business-innovation-with-dotnetnuke/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2009%2F08%2Fcustomer-driven-business-innovation-with-dotnetnuke%2F&amp;t=Customer-driven+Business+Innovation+with+DotNetNuke" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2009/08/customer-driven-business-innovation-with-dotnetnuke/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Short Story About DotNetNuke</title>
		<link>http://www.kalyani.com/2009/08/a-short-story-about-dotnetnuke/</link>
		<comments>http://www.kalyani.com/2009/08/a-short-story-about-dotnetnuke/#comments</comments>
		<pubDate>Fri, 07 Aug 2009 19:49:00 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[DotNetNuke]]></category>

		<guid isPermaLink="false">http://www.techbubble.net/Blog/tabid/57/EntryId/221/A-Short-Story-About-DotNetNuke.aspx</guid>
		<description><![CDATA[I created this slide deck as a fun way to introduce DotNetNuke.

Update: A DotNetNuke community member enhanced the YouTube video of the deck I posted by adding narration and music. The result is quite impressive.






		
			Share this on del.icio.us
		
		
			Digg this!
		
		
			Post this on Diigo
		
		
			Share this on Reddit
		
		
			Stumble upon something good? Share it on StumbleUpon
		
		
			Share this on Technorati
		
		
			Share [...]]]></description>
			<content:encoded><![CDATA[<p>I created this slide deck as a fun way to introduce DotNetNuke.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="500" height="307" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/duhJfDRSLTM&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0x006699&amp;color2=0x54abd6&amp;border=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="500" height="307" src="http://www.youtube.com/v/duhJfDRSLTM&amp;hl=en&amp;fs=1&amp;rel=0&amp;color1=0x006699&amp;color2=0x54abd6&amp;border=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p><strong>Update:</strong> A DotNetNuke community member enhanced the YouTube video of the deck I posted by adding narration and music. The result is quite impressive.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="500" height="405" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/z9qDXgXanAw&amp;hl=en_US&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="500" height="405" src="http://www.youtube.com/v/z9qDXgXanAw&amp;hl=en_US&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2009/08/a-short-story-about-dotnetnuke/&amp;title=A+Short+Story+About+DotNetNuke" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2009/08/a-short-story-about-dotnetnuke/&amp;title=A+Short+Story+About+DotNetNuke" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2009/08/a-short-story-about-dotnetnuke/&amp;title=A+Short+Story+About+DotNetNuke&amp;desc=I%20created%20this%20slide%20deck%20as%20a%20fun%20way%20to%20introduce%20DotNetNuke.%0D%0A%0D%0A%0D%0A%0D%0AUpdate%3A%20A%20DotNetNuke%20community%20member%20enhanced%20the%20YouTube%20video%20of%20the%20deck%20I%20posted%20by%20adding%20narration%20and%20music.%20The%20result%20is%20quite%20impressive.%0D%0A%0D%0A" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2009/08/a-short-story-about-dotnetnuke/&amp;title=A+Short+Story+About+DotNetNuke" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2009/08/a-short-story-about-dotnetnuke/&amp;title=A+Short+Story+About+DotNetNuke" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2009/08/a-short-story-about-dotnetnuke/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2009/08/a-short-story-about-dotnetnuke/&amp;title=A+Short+Story+About+DotNetNuke" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2009/08/a-short-story-about-dotnetnuke/&amp;t=A+Short+Story+About+DotNetNuke" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=A+Short+Story+About+DotNetNuke+-+http://bit.ly/a1f7Qm+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2009/08/a-short-story-about-dotnetnuke/&amp;title=A+Short+Story+About+DotNetNuke&amp;summary=I%20created%20this%20slide%20deck%20as%20a%20fun%20way%20to%20introduce%20DotNetNuke.%0D%0A%0D%0A%0D%0A%0D%0AUpdate%3A%20A%20DotNetNuke%20community%20member%20enhanced%20the%20YouTube%20video%20of%20the%20deck%20I%20posted%20by%20adding%20narration%20and%20music.%20The%20result%20is%20quite%20impressive.%0D%0A%0D%0A&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2009/08/a-short-story-about-dotnetnuke/&amp;submitHeadline=A+Short+Story+About+DotNetNuke&amp;submitSummary=I%20created%20this%20slide%20deck%20as%20a%20fun%20way%20to%20introduce%20DotNetNuke.%0D%0A%0D%0A%0D%0A%0D%0AUpdate%3A%20A%20DotNetNuke%20community%20member%20enhanced%20the%20YouTube%20video%20of%20the%20deck%20I%20posted%20by%20adding%20narration%20and%20music.%20The%20result%20is%20quite%20impressive.%0D%0A%0D%0A&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2009/08/a-short-story-about-dotnetnuke/&amp;t=A+Short+Story+About+DotNetNuke" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2009/08/a-short-story-about-dotnetnuke/&amp;title=A+Short+Story+About+DotNetNuke" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=A+Short+Story+About+DotNetNuke&amp;link=http://www.kalyani.com/2009/08/a-short-story-about-dotnetnuke/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2009/08/a-short-story-about-dotnetnuke/&amp;title=A+Short+Story+About+DotNetNuke&amp;body=I%20created%20this%20slide%20deck%20as%20a%20fun%20way%20to%20introduce%20DotNetNuke.%0D%0A%0D%0A%0D%0A%0D%0AUpdate%3A%20A%20DotNetNuke%20community%20member%20enhanced%20the%20YouTube%20video%20of%20the%20deck%20I%20posted%20by%20adding%20narration%20and%20music.%20The%20result%20is%20quite%20impressive.%0D%0A%0D%0A" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2009/08/a-short-story-about-dotnetnuke/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2009%2F08%2Fa-short-story-about-dotnetnuke%2F&amp;t=A+Short+Story+About+DotNetNuke" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2009/08/a-short-story-about-dotnetnuke/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DotNetNuke Search Engine Optimization (SEO)</title>
		<link>http://www.kalyani.com/2009/07/dotnetnuke-search-engine-optimization-seo/</link>
		<comments>http://www.kalyani.com/2009/07/dotnetnuke-search-engine-optimization-seo/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 07:14:14 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[DotNetNuke]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Webinar]]></category>

		<guid isPermaLink="false">http://kalyani.com/?p=944</guid>
		<description><![CDATA[Here&#8217;s the slide deck on DotNetNuke Search Engine Optimization (SEO) from a webinar I hosted with Tom Kraak.
DotNetNuke SEO
View more presentations from Nik Kalyani.






		
			Share this on del.icio.us
		
		
			Digg this!
		
		
			Post this on Diigo
		
		
			Share this on Reddit
		
		
			Stumble upon something good? Share it on StumbleUpon
		
		
			Share this on Technorati
		
		
			Share this on Mixx
		
		
			Share this on Facebook
		
		
			Tweet This!
		
		
			Share this on Linkedin
		
		
			Buzz up!
		
		
			Post [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s the slide deck on DotNetNuke Search Engine Optimization (SEO) from a webinar I hosted with Tom Kraak.</p>
<div id="__ss_2782815" style="width: 425px; text-align: left;"><a style="font: 14px Helvetica,Arial,Sans-serif; display: block; margin: 12px 0 3px 0; text-decoration: underline;" title="DotNetNuke SEO" href="http://www.slideshare.net/techbubble/dotnetnuke-seo">DotNetNuke SEO</a><object style="margin: 0px;" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="355" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=dotnetnuke-seo-091228011359-phpapp02&amp;stripped_title=dotnetnuke-seo" /><param name="allowfullscreen" value="true" /><embed style="margin: 0px;" type="application/x-shockwave-flash" width="425" height="355" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=dotnetnuke-seo-091228011359-phpapp02&amp;stripped_title=dotnetnuke-seo" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div style="font-size: 11px; font-family: tahoma,arial; height: 26px; padding-top: 2px;">View more <a style="text-decoration: underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration: underline;" href="http://www.slideshare.net/techbubble">Nik Kalyani</a>.</div>
</div>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2009/07/dotnetnuke-search-engine-optimization-seo/&amp;title=DotNetNuke+Search+Engine+Optimization+%28SEO%29" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2009/07/dotnetnuke-search-engine-optimization-seo/&amp;title=DotNetNuke+Search+Engine+Optimization+%28SEO%29" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2009/07/dotnetnuke-search-engine-optimization-seo/&amp;title=DotNetNuke+Search+Engine+Optimization+%28SEO%29&amp;desc=Here%27s%20the%20slide%20deck%20on%20DotNetNuke%20Search%20Engine%20Optimization%20%28SEO%29%20from%20a%20webinar%20I%20hosted%20with%20Tom%20Kraak.%0D%0ADotNetNuke%20SEO%0D%0AView%20more%20presentations%20from%20Nik%20Kalyani.%0D%0A" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2009/07/dotnetnuke-search-engine-optimization-seo/&amp;title=DotNetNuke+Search+Engine+Optimization+%28SEO%29" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2009/07/dotnetnuke-search-engine-optimization-seo/&amp;title=DotNetNuke+Search+Engine+Optimization+%28SEO%29" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2009/07/dotnetnuke-search-engine-optimization-seo/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2009/07/dotnetnuke-search-engine-optimization-seo/&amp;title=DotNetNuke+Search+Engine+Optimization+%28SEO%29" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2009/07/dotnetnuke-search-engine-optimization-seo/&amp;t=DotNetNuke+Search+Engine+Optimization+%28SEO%29" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=DotNetNuke+Search+Engine+Optimization+%28SEO%29+-+http://bit.ly/9dDbQl+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2009/07/dotnetnuke-search-engine-optimization-seo/&amp;title=DotNetNuke+Search+Engine+Optimization+%28SEO%29&amp;summary=Here%27s%20the%20slide%20deck%20on%20DotNetNuke%20Search%20Engine%20Optimization%20%28SEO%29%20from%20a%20webinar%20I%20hosted%20with%20Tom%20Kraak.%0D%0ADotNetNuke%20SEO%0D%0AView%20more%20presentations%20from%20Nik%20Kalyani.%0D%0A&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2009/07/dotnetnuke-search-engine-optimization-seo/&amp;submitHeadline=DotNetNuke+Search+Engine+Optimization+%28SEO%29&amp;submitSummary=Here%27s%20the%20slide%20deck%20on%20DotNetNuke%20Search%20Engine%20Optimization%20%28SEO%29%20from%20a%20webinar%20I%20hosted%20with%20Tom%20Kraak.%0D%0ADotNetNuke%20SEO%0D%0AView%20more%20presentations%20from%20Nik%20Kalyani.%0D%0A&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2009/07/dotnetnuke-search-engine-optimization-seo/&amp;t=DotNetNuke+Search+Engine+Optimization+%28SEO%29" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2009/07/dotnetnuke-search-engine-optimization-seo/&amp;title=DotNetNuke+Search+Engine+Optimization+%28SEO%29" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=DotNetNuke+Search+Engine+Optimization+%28SEO%29&amp;link=http://www.kalyani.com/2009/07/dotnetnuke-search-engine-optimization-seo/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2009/07/dotnetnuke-search-engine-optimization-seo/&amp;title=DotNetNuke+Search+Engine+Optimization+%28SEO%29&amp;body=Here%27s%20the%20slide%20deck%20on%20DotNetNuke%20Search%20Engine%20Optimization%20%28SEO%29%20from%20a%20webinar%20I%20hosted%20with%20Tom%20Kraak.%0D%0ADotNetNuke%20SEO%0D%0AView%20more%20presentations%20from%20Nik%20Kalyani.%0D%0A" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2009/07/dotnetnuke-search-engine-optimization-seo/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2009%2F07%2Fdotnetnuke-search-engine-optimization-seo%2F&amp;t=DotNetNuke+Search+Engine+Optimization+%28SEO%29" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2009/07/dotnetnuke-search-engine-optimization-seo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Skinning Portal Images in DNN with ImageSwap</title>
		<link>http://www.kalyani.com/2009/07/skinning-portal-images-in-dnn-with-imageswap/</link>
		<comments>http://www.kalyani.com/2009/07/skinning-portal-images-in-dnn-with-imageswap/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 05:34:00 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[DotNetNuke]]></category>
		<category><![CDATA[Skins]]></category>

		<guid isPermaLink="false">http://www.techbubble.net/Blog/tabid/57/EntryId/220/Skinning-Portal-Images-in-DNN-with-ImageSwap.aspx</guid>
		<description><![CDATA[DotNetNuke has powerful skinning support, but skin designers are often frustrated by their inability to customize various images with static links in the portal. In this post, I&#8217;ll suggest a technique and some code to enable skinning of such images.
Let&#8217;s first understand the problem. Say you have a DNN site and you have created a [...]]]></description>
			<content:encoded><![CDATA[<p>DotNetNuke has powerful skinning support, but <cite>skin</cite> designers are often frustrated by their inability to customize various images with static links in the portal. In this post, I&#8217;ll suggest a technique and some code to enable skinning of such <cite>images</cite>.</p>
<p>Let&#8217;s first understand the problem. Say you have a DNN site and you have created a custom skin. You have tweaked the CSS to perfection and everything looks great. That is, until the user switches to Edit mode. At that point, various icons used by the framework are displayed on the page. These include icons for help, action icons such as Save, Cancel and Delete. If you want to change these images, your only option is to replace them at their default location. Unfortunately, this is not a long-term solution. Firstly, the change will affect all portals on that instance of DNN. Secondly, the next time you upgrade, the images will be over-written.</p>
<p>An ideal solution would be for you to include the desired images with your skin and have the framework use your images instead of the default. In order to do this on the server-side, there would be several changes needed to the DNN Core. And even if these changes were made, chances are the result would not be very performant.</p>
<p>My solution, called <strong>ImageSwap</strong>, is to leverage <cite>jQuery</cite> to create a simple, but effective client-side solution to the problem. The solution is something like this:</p>
<p><strong>Step 1:</strong> Select all IMG elements in the page whose &#8220;src&#8221; attribute has a value containing a known path (example: images/)</p>
<p><strong>Step 2:</strong> Iterate through the selected elements, and for each element:</p>
<p>a) Check if a similar named image exists in a sub-folder of the current skin</p>
<p>b) If No, then do nothing</p>
<p>c) If Yes, then change the &#8220;src&#8221; attribute to the URL of the image in the skin folder</p>
<p>That&#8217;s it&#8230;.in two simple steps we have a solution to skin portal images.</p>
<p>To implement this solution, you will need to add some code to your skin. I have provided the requisite code for DNN4/DNN5. I&#8217;ll embed this code into a DNN5 Widget and post it here soon to make it even easier to use.</p>
<p><strong>Implementation of ImageSwap<br />
</strong></p>
<p><strong>Step 1:</strong> Decide which portal images you want to replace, then create a sub-folder in your skin folder with the replacement images. For example, you might create a sub-folder named &#8220;portal/images.&#8221; Take care to name the files exactly the same as the originals.</p>
<p><strong>Step 2:</strong> Add the following HTML <cite></cite>to each layout file in your skin:</p>
<pre class="brush: xml;">&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js&quot;&gt;&lt;/script&gt;</pre>
<p><strong>Step 3:</strong> Embed the following script in your skin:</p>
<pre class="brush: jscript;">

var searchPath = &quot;/images/&quot;;
var replacePath = &quot;&lt;%= SkinPath %&gt;portal/images/&quot;;
(function($)
{
 $(&quot;img[src*='&quot; + searchPath + &quot;']&quot;).each(

 function()
 {
 var frags = $(this).attr(&quot;src&quot;).split(&quot;/&quot;);
 var oldsrc = $(this).attr(&quot;src&quot;);
 $(this).error(
 function()
 {
 $(this).attr(&quot;src&quot;, oldsrc);
 });
 $(this).attr(&quot;src&quot;, replacePath + frags[frags.length-1]);
 }
 );

})(jQuery);
</pre>
<p>You will want to change the values for &#8220;replacePath&#8221; so it corresponds to the actual folder name you use in your skin for the replacement images. If you are using DNN5, you can delete the script reference for jQuery as it is automatically referenced by DNN as long as widgets are enabled (the default).</p>
<p>I have attached a ZIP file that contains an HTML file that demonstrates this approach. In the file, there are several color icons rendered using the IMG element. In another folder, I have grayscale images of all but two of the icons. When you display the page in your browser, you will see that all but two of the color icons are replaced with their grayscale versions, demonstrating how the ImageSwap script functions.</p>
<p>If you use the script, please leave a comment about your experience so I can improve the script and the ImageSwap widget that I will be creating for DNN5.</p>
Note: There is a file embedded within this post, please visit this post to download the file.


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2009/07/skinning-portal-images-in-dnn-with-imageswap/&amp;title=Skinning+Portal+Images+in+DNN+with+ImageSwap" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2009/07/skinning-portal-images-in-dnn-with-imageswap/&amp;title=Skinning+Portal+Images+in+DNN+with+ImageSwap" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2009/07/skinning-portal-images-in-dnn-with-imageswap/&amp;title=Skinning+Portal+Images+in+DNN+with+ImageSwap&amp;desc=DotNetNuke%20has%20powerful%20skinning%20support%2C%20but%20skin%20designers%20are%20often%20frustrated%20by%20their%20inability%20to%20customize%20various%20images%20with%20static%20links%20in%20the%20portal.%20In%20this%20post%2C%20I%27ll%20suggest%20a%20technique%20and%20some%20code%20to%20enable%20skinning%20of%20such%20images.%0D%0A%0D%0ALet%27s%20first%20understand%20the%20problem.%20Say%20you%20hav" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2009/07/skinning-portal-images-in-dnn-with-imageswap/&amp;title=Skinning+Portal+Images+in+DNN+with+ImageSwap" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2009/07/skinning-portal-images-in-dnn-with-imageswap/&amp;title=Skinning+Portal+Images+in+DNN+with+ImageSwap" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2009/07/skinning-portal-images-in-dnn-with-imageswap/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2009/07/skinning-portal-images-in-dnn-with-imageswap/&amp;title=Skinning+Portal+Images+in+DNN+with+ImageSwap" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2009/07/skinning-portal-images-in-dnn-with-imageswap/&amp;t=Skinning+Portal+Images+in+DNN+with+ImageSwap" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=Skinning+Portal+Images+in+DNN+with+ImageSwap+-+http://bit.ly/a6LTHh+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2009/07/skinning-portal-images-in-dnn-with-imageswap/&amp;title=Skinning+Portal+Images+in+DNN+with+ImageSwap&amp;summary=DotNetNuke%20has%20powerful%20skinning%20support%2C%20but%20skin%20designers%20are%20often%20frustrated%20by%20their%20inability%20to%20customize%20various%20images%20with%20static%20links%20in%20the%20portal.%20In%20this%20post%2C%20I%27ll%20suggest%20a%20technique%20and%20some%20code%20to%20enable%20skinning%20of%20such%20images.%0D%0A%0D%0ALet%27s%20first%20understand%20the%20problem.%20Say%20you%20hav&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2009/07/skinning-portal-images-in-dnn-with-imageswap/&amp;submitHeadline=Skinning+Portal+Images+in+DNN+with+ImageSwap&amp;submitSummary=DotNetNuke%20has%20powerful%20skinning%20support%2C%20but%20skin%20designers%20are%20often%20frustrated%20by%20their%20inability%20to%20customize%20various%20images%20with%20static%20links%20in%20the%20portal.%20In%20this%20post%2C%20I%27ll%20suggest%20a%20technique%20and%20some%20code%20to%20enable%20skinning%20of%20such%20images.%0D%0A%0D%0ALet%27s%20first%20understand%20the%20problem.%20Say%20you%20hav&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2009/07/skinning-portal-images-in-dnn-with-imageswap/&amp;t=Skinning+Portal+Images+in+DNN+with+ImageSwap" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2009/07/skinning-portal-images-in-dnn-with-imageswap/&amp;title=Skinning+Portal+Images+in+DNN+with+ImageSwap" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=Skinning+Portal+Images+in+DNN+with+ImageSwap&amp;link=http://www.kalyani.com/2009/07/skinning-portal-images-in-dnn-with-imageswap/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2009/07/skinning-portal-images-in-dnn-with-imageswap/&amp;title=Skinning+Portal+Images+in+DNN+with+ImageSwap&amp;body=DotNetNuke%20has%20powerful%20skinning%20support%2C%20but%20skin%20designers%20are%20often%20frustrated%20by%20their%20inability%20to%20customize%20various%20images%20with%20static%20links%20in%20the%20portal.%20In%20this%20post%2C%20I%27ll%20suggest%20a%20technique%20and%20some%20code%20to%20enable%20skinning%20of%20such%20images.%0D%0A%0D%0ALet%27s%20first%20understand%20the%20problem.%20Say%20you%20hav" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2009/07/skinning-portal-images-in-dnn-with-imageswap/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2009%2F07%2Fskinning-portal-images-in-dnn-with-imageswap%2F&amp;t=Skinning+Portal+Images+in+DNN+with+ImageSwap" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2009/07/skinning-portal-images-in-dnn-with-imageswap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DotNetNuke Professional Edition 5.1 &#8211; Content Approval</title>
		<link>http://www.kalyani.com/2009/06/dotnetnuke-professional-edition-5-1-content-approval/</link>
		<comments>http://www.kalyani.com/2009/06/dotnetnuke-professional-edition-5-1-content-approval/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 08:02:00 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[DotNetNuke]]></category>

		<guid isPermaLink="false">http://www.techbubble.net/Blog/tabid/57/EntryId/219/DotNetNuke-Professional-Edition-5-1-Content-Approval.aspx</guid>
		<description><![CDATA[





		
			Share this on del.icio.us
		
		
			Digg this!
		
		
			Post this on Diigo
		
		
			Share this on Reddit
		
		
			Stumble upon something good? Share it on StumbleUpon
		
		
			Share this on Technorati
		
		
			Share this on Mixx
		
		
			Share this on Facebook
		
		
			Tweet This!
		
		
			Share this on Linkedin
		
		
			Buzz up!
		
		
			Post this to MySpace
		
		
			Add this to Google Bookmarks
		
		
			Share this on FriendFeed
		
		
			Ping this on Ping.fm
		
		
			Add to a lense on Squidoo
		
		
			Share this on Tumblr
		





]]></description>
			<content:encoded><![CDATA[<p><object width="660" height="405"><param name="movie" value="http://www.youtube.com/v/MkEtVvLLFoo&#038;hl=en&#038;fs=1&#038;rel=0&#038;color1=0x006699&#038;color2=0x54abd6&#038;border=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/MkEtVvLLFoo&#038;hl=en&#038;fs=1&#038;rel=0&#038;color1=0x006699&#038;color2=0x54abd6&#038;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="660" height="405"></embed></object></p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2009/06/dotnetnuke-professional-edition-5-1-content-approval/&amp;title=DotNetNuke+Professional+Edition+5.1+-+Content+Approval" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2009/06/dotnetnuke-professional-edition-5-1-content-approval/&amp;title=DotNetNuke+Professional+Edition+5.1+-+Content+Approval" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2009/06/dotnetnuke-professional-edition-5-1-content-approval/&amp;title=DotNetNuke+Professional+Edition+5.1+-+Content+Approval&amp;desc=" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2009/06/dotnetnuke-professional-edition-5-1-content-approval/&amp;title=DotNetNuke+Professional+Edition+5.1+-+Content+Approval" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2009/06/dotnetnuke-professional-edition-5-1-content-approval/&amp;title=DotNetNuke+Professional+Edition+5.1+-+Content+Approval" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2009/06/dotnetnuke-professional-edition-5-1-content-approval/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2009/06/dotnetnuke-professional-edition-5-1-content-approval/&amp;title=DotNetNuke+Professional+Edition+5.1+-+Content+Approval" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2009/06/dotnetnuke-professional-edition-5-1-content-approval/&amp;t=DotNetNuke+Professional+Edition+5.1+-+Content+Approval" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=DotNetNuke+Professional+Edition+5.1+-+Content+Approval+-+http://bit.ly/9ZvsPL+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2009/06/dotnetnuke-professional-edition-5-1-content-approval/&amp;title=DotNetNuke+Professional+Edition+5.1+-+Content+Approval&amp;summary=&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2009/06/dotnetnuke-professional-edition-5-1-content-approval/&amp;submitHeadline=DotNetNuke+Professional+Edition+5.1+-+Content+Approval&amp;submitSummary=&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2009/06/dotnetnuke-professional-edition-5-1-content-approval/&amp;t=DotNetNuke+Professional+Edition+5.1+-+Content+Approval" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2009/06/dotnetnuke-professional-edition-5-1-content-approval/&amp;title=DotNetNuke+Professional+Edition+5.1+-+Content+Approval" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=DotNetNuke+Professional+Edition+5.1+-+Content+Approval&amp;link=http://www.kalyani.com/2009/06/dotnetnuke-professional-edition-5-1-content-approval/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2009/06/dotnetnuke-professional-edition-5-1-content-approval/&amp;title=DotNetNuke+Professional+Edition+5.1+-+Content+Approval&amp;body=" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2009/06/dotnetnuke-professional-edition-5-1-content-approval/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2009%2F06%2Fdotnetnuke-professional-edition-5-1-content-approval%2F&amp;t=DotNetNuke+Professional+Edition+5.1+-+Content+Approval" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2009/06/dotnetnuke-professional-edition-5-1-content-approval/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DotNetNuke Business Model and Product Roadmap (Part 2 of 2)</title>
		<link>http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-2-of-2/</link>
		<comments>http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-2-of-2/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 22:30:00 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[DotNetNuke]]></category>

		<guid isPermaLink="false">http://www.techbubble.net/Blog/tabid/57/EntryId/218/DotNetNuke-Business-Model-and-Product-Roadmap-Part-2-of-2.aspx</guid>
		<description><![CDATA[In my last post – DotNetNuke Business Model and Product Roadmap (Part 1 of 2) – I provided some insights into the DotNetNuke Corp. business model, specifically as it pertains to the similarities and differences between DotNetNuke Community and Professional Editions.
In this post I provide some background and insights into how we develop the DotNetNuke [...]]]></description>
			<content:encoded><![CDATA[<p>In my last post – <a href="http://www.techbubble.net/Blog/tabid/57/EntryId/217/DotNetNuke-Business-Model-and-Product-Roadmap-Part-1-of-2.aspx">DotNetNuke Business Model and Product Roadmap (Part 1 of 2)</a> – I provided some insights into the DotNetNuke Corp. business model, specifically as it pertains to the similarities and differences between DotNetNuke Community and Professional Editions.</p>
<p>In this post I provide some background and insights into how we develop the DotNetNuke product roadmap and also share the roadmap for DotNetNuke 5.1 Community and Professional Editions.</p>
<p>There is no shortage of features that existing DotNetNuke users would like to see added to the product. No matter what feature we add, there will be some users who question the addition of that feature over another that may have more importance to them. The best thing we can do is to gather input from as many constituencies as possible, and then prioritize based on strategic objectives and time/resource constraints.</p>
<p>In order to determine the roadmap for DotNetNuke, we use the following sources:</p>
<ul>
<li>Site forums<br />
     </li>
<li>Site roadmap<br />
     </li>
<li>Enhancement requests logged in Gemini<br />
     </li>
<li>Feedback from site forms and surveys<br />
     </li>
<li>Feedback from DotNetNuke team volunteers<br />
     </li>
<li>Feedback from customers (of both editions)<br />
     </li>
<li>Feedback from customer prospects<br />
     </li>
<li>Feedback from ISV’s, consultants and designers in our ecosystem<br />
     </li>
<li>Feedback from ISV’s and consultants not in our ecosystem<br />
     </li>
<li>Feedback from conference and user group attendees<br />
     </li>
<li>Analysis of competitive landscape<br />
     </li>
<li>Industry, market and technology trends<br />
     </li>
<li>Feedback from experts in Open Source, WCM and enterprise software<br />
     </li>
<li>Feedback from investors<br />
     </li>
<li>Experience and intuition</li>
</ul>
<p>After aggregating the resulting feature requests, we divide them into Community and Professional features.</p>
<p>Community features are those that broad segments of DotNetNuke users would find beneficial and would use on a regular basis. We review how the feature will impact the product’s usability, accessibility, security, performance, scalability, etc. We also evaluate the time and cost of implementing the feature and its strategic importance. All these factors determine if the feature is added to the product roadmap for the Community Edition.</p>
<p>Professional features are those that advanced business users of DotNetNuke would find beneficial and would be willing to pay for. These features are often easy to spot as their use is typically associated with the existence of advanced infrastructure, large site membership, high-traffic or mission critical applications, advanced security requirements or complex business processes. Also, features that would result in significant time savings and improved productivity when managing large sites are candidates. We evaluate the time, cost and return on investment of implementing the feature and its strategic and competitive importance before adding it to the product roadmap for Professional Edition.</p>
<p>Since Professional Edition was first announced, we have often heard comments or concerns about neglecting or withholding features from Community Edition to &#8220;force people to buy Professional Edition.&#8221; Let me share some insights to help mitigate these concerns:</p>
<ul>
<li>Continued growth in the adoption of Community Edition is essential to the survival of DotNetNuke Corp. Open Source companies cease to exist if they don’t have a thriving community. Communities don’t thrive around products that are stagnant and not evolving or innovating. We want DotNetNuke Corp. to be successful, and therefore, ensuring the continued success of Community Edition is a strategic imperative for us.<br />
     </li>
<li>We can’t put every feature with value only into Community Edition, nor can we put every feature with value only into Professional Edition. <strong>There is a middle ground and finding it is not an exact science. </strong>We have to balance our desire to have Community Edition adoption grow, with our need to build a sustainable, profitable business so we can pay our bills and continue to fund the project. The feature selection process outlined above, while subjective, is rational and driven by our prior experience nurturing the growth of this ecosystem.<br />
     </li>
<li>If you happen to be one of those people with the concerns outlined above, do consider the roadmap for DotNetNuke 5.1 Community and Professional Edition below objectively. I trust that after reviewing the roadmap you will not be as concerned.</li>
</ul>
<p><span class="Head" style="font-size: 12pt;">DotNetNuke 5.1 Roadmap</span></p>
<p>Now that you have some background and perspective, let’s review the roadmap for DotNetNuke 5.1. </p>
<p>Starting with 5.1 we are embarking on a multi-release, phased improvement of the DotNetNuke User Experience from the ground-up. Our vision is to implement a high degree of consistency, usability and fluidity to the DotNetNuke user experience by employing a pattern-based UI approach. We have created mock-ups of many such patterns, and as you can imagine, the task of implementing them is large with significant enhancements to the Core Framework Libraries and Core Extensions.</p>
<p>Given the nature of user interfaces, they have high complexity or interdependency and therefore are at a high risk of taking longer than planned. (In the roadmap grid below, some UX features have a gray background to indicate their risk of being excluded from the release or adversely impacting the release schedule.)</p>
<p>Another feature we will deliver in 5.1 is the often-requested Content Approval feature. We view this feature as separate and different from Workflow, which may involve complex business rules and processes. Since most “content” in DotNetNuke is managed using the Text/HTML module, we will implement the approval features in this module. Professional Edition users who have more involved Content Approval requirements can continue to use the Text/HTML module or derive additional benefit from the HTML Pro module, a more advanced version of the Text/HTML module that will be included in the Professional Edition package.</p>
<p>Here’s the roadmap feature grid for DotNetNuke 5.1:</p>
<table cellspacing="0" cellpadding="0" border="1" style="border: medium none ; border-collapse: collapse;" class="MsoNormalTable">
<tbody>
<tr>
<td valign="top" style="border: 1pt solid black; padding: 0in 5.4pt; background: rgb(148, 54, 52) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p align="center" style="margin-bottom: 0.0001pt; text-align: center;" class="MsoNormal"><b><span style="color: white;">Feature</span></b></p>
</td>
<td valign="top" style="border-style: solid solid solid none; border-color: black black black -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(148, 54, 52) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p align="center" style="margin-bottom: 0.0001pt; text-align: center;" class="MsoNormal"><b><span style="color: white;">Comment</span></b></p>
</td>
<td valign="top" style="border-style: solid solid solid none; border-color: black black black -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(148, 54, 52) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p align="center" style="margin-bottom: 0.0001pt; text-align: center;" class="MsoNormal"><b><span style="color: white;">Community</span></b></p>
</td>
<td style="border-style: solid solid solid none; border-color: black black black -moz-use-text-color; border-width: 1pt 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(148, 54, 52) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p align="center" style="margin-bottom: 0.0001pt; text-align: center;" class="MsoNormal"><b><span style="color: white;">Professional</span></b></p>
</td>
</tr>
<tr>
<td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Content   Management</b></p>
</td>
<td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Content   Approval</b></p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>- </b>Single-stage   content approval</p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>- </b>Select   content approver roles at the site level</p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>- </b>Text/HTML   module enhancement to support Content Approval</p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
</tr>
<tr>
<td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b> </b></p>
</td>
<td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Content   Approval and Versioning</b></p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>- </b>Multi-stage   content approval</p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>- </b>Define   stages and select content approver roles at the site level</p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>- </b>HTML   Pro module to support multi-stage Content Approval</p>
<p style="margin-bottom: 0.0001pt;" class="MsoListParagraph"> </p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="margin-bottom: 0.0001pt; text-align: center;" class="MsoNormal"><span style="color: black;"> </span></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
</tr>
<tr>
<td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt; background: rgb(242, 242, 242) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>User   Experience</b></p>
</td>
<td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(242, 242, 242) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Control   Panel</b></p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal">Improvements   in usability and appearance through tabbed, ribbon user interface</p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"> </p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(242, 242, 242) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p align="center" style="margin-bottom: 0.0001pt; text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(242, 242, 242) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p align="center" style="margin-bottom: 0.0001pt; text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
</tr>
<tr>
<td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt; background: rgb(242, 242, 242) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b> </b></p>
</td>
<td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(242, 242, 242) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Advanced   Control Panel</b></p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal">Add a page   or edit common page settings directly from the Control Panel</p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"> </p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(242, 242, 242) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p align="center" style="margin-bottom: 0.0001pt; text-align: center;" class="MsoNormal"><b><span style="color: black;"> </span></b></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(242, 242, 242) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p align="center" style="margin-bottom: 0.0001pt; text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
</tr>
<tr>
<td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt; background: rgb(242, 242, 242) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b> </b></p>
</td>
<td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(242, 242, 242) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Skin   Objects</b></p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal">Skin   objects code will be XHTML compliant</p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"> </p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(242, 242, 242) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p align="center" style="margin-bottom: 0.0001pt; text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(242, 242, 242) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p align="center" style="margin-bottom: 0.0001pt; text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
</tr>
<tr>
<td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt; background: rgb(242, 242, 242) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b> </b></p>
</td>
<td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(242, 242, 242) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Action   Panel Skin Object</b></p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal">An Action   Panel Skin Object to provide a consistent way for exposing available actions   to users</p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"> </p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(242, 242, 242) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt; background: rgb(242, 242, 242) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
</tr>
<tr>
<td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b> </b></p>
</td>
<td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Management   Console</b></p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal">Improve   access and discoverability of administrative features by aggregating features   into a Windows-style control panel</p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"> </p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
</tr>
<tr>
<td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Analytics   &#038; SEO</b></p>
</td>
<td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Google   Analytics Support</b></p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal">Support   for injection of analytics tracking code on every page</p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"> </p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
</tr>
<tr>
<td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b> </b></p>
</td>
<td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Google   Analytics for Marketing Support</b></p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal">Support   for advanced Google Analytics segmentation based on role membership</p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"> </p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="text-align: center;" class="MsoNormal"><span style="color: black;"> </span></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
</tr>
<tr>
<td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b> </b></p>
</td>
<td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Per-page   Custom Sitemap Rank</b></p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal">Define the   rank for each page for use in the Sitemap published to search engines.</p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"> </p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
</tr>
<tr>
<td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Security</b></p>
</td>
<td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Change   Audit</b></p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal">Last   modified and full history audit trails</p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"> </p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
</tr>
<tr>
<td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b> </b></p>
</td>
<td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Extended   Edit Permissions</b></p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal">Page,   module and folder level permissions that extend existing Edit permissions</p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"> </p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="margin-bottom: 0.0001pt; text-align: center;" class="MsoNormal"><span style="color: black;"> </span></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
</tr>
<tr>
<td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Scalability</b></p>
</td>
<td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Distributed   Caching Provider</b></p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal">More efficient   resource usage in large web farms</p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b> </b></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="margin-bottom: 0.0001pt; text-align: center;" class="MsoNormal"><span style="color: black;"> </span></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
</tr>
<tr>
<td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Stability</b></p>
</td>
<td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Application   Integrity Checking</b></p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal">Checks   files in the installation and reports any inconsistencies which may impact   website reliability</p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"> </p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="margin-bottom: 0.0001pt; text-align: center;" class="MsoNormal"><span style="color: black;"> </span></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
</tr>
<tr>
<td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Network   Services</b></p>
</td>
<td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Health   Monitoring</b></p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal">Pings the website periodically to identify failures and will notify the site owner. Also ensures the site stays in web server memory for faster user accessibility</p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"> </p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="margin-bottom: 0.0001pt; text-align: center;" class="MsoNormal"><b><span style="color: black;"> </span></b></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
</tr>
<tr>
<td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b> </b></p>
</td>
<td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Vulnerability   Database (Basic)</b></p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal">Maintains   a vulnerability database with basic information for each product version to   easily identify potential issues</p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"> </p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="margin-bottom: 0.0001pt; text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
</tr>
<tr>
<td valign="top" style="border-style: none solid solid; border-color: -moz-use-text-color black black; border-width: medium 1pt 1pt; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b> </b></p>
</td>
<td valign="top" style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"><b>Vulnerability   Database (Detailed)</b></p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal">Maintains   a vulnerability database with detailed information for each product version   to easily identify potential issues</p>
<p style="margin-bottom: 0.0001pt;" class="MsoNormal"> </p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="margin-bottom: 0.0001pt; text-align: center;" class="MsoNormal"><b><span style="color: black;"> </span></b></p>
</td>
<td style="border-style: none solid solid none; border-color: -moz-use-text-color black black -moz-use-text-color; border-width: medium 1pt 1pt medium; padding: 0in 5.4pt;">
<p align="center" style="text-align: center;" class="MsoNormal"><b><span style="color: black; font-size: 14pt;">•</span></b></p>
</td>
</tr>
</tbody>
</table>
<p>
Hopefully the information in this two-post series was helpful to you and answered more questions than it raised.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-2-of-2/&amp;title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+2+of+2%29" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-2-of-2/&amp;title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+2+of+2%29" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-2-of-2/&amp;title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+2+of+2%29&amp;desc=In%20my%20last%20post%20%E2%80%93%20DotNetNuke%20Business%20Model%20and%20Product%20Roadmap%20%28Part%201%20of%202%29%20%E2%80%93%20I%20provided%20some%20insights%20into%20the%20DotNetNuke%20Corp.%20business%20model%2C%20specifically%20as%20it%20pertains%20to%20the%20similarities%20and%20differences%20between%20DotNetNuke%20Community%20and%20Professional%20Editions.%0AIn%20this%20post%20I%20provide%20some%20b" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-2-of-2/&amp;title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+2+of+2%29" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-2-of-2/&amp;title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+2+of+2%29" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-2-of-2/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-2-of-2/&amp;title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+2+of+2%29" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-2-of-2/&amp;t=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+2+of+2%29" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+2+of+2%29+-+http://bit.ly/dg0UFS+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-2-of-2/&amp;title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+2+of+2%29&amp;summary=In%20my%20last%20post%20%E2%80%93%20DotNetNuke%20Business%20Model%20and%20Product%20Roadmap%20%28Part%201%20of%202%29%20%E2%80%93%20I%20provided%20some%20insights%20into%20the%20DotNetNuke%20Corp.%20business%20model%2C%20specifically%20as%20it%20pertains%20to%20the%20similarities%20and%20differences%20between%20DotNetNuke%20Community%20and%20Professional%20Editions.%0AIn%20this%20post%20I%20provide%20some%20b&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-2-of-2/&amp;submitHeadline=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+2+of+2%29&amp;submitSummary=In%20my%20last%20post%20%E2%80%93%20DotNetNuke%20Business%20Model%20and%20Product%20Roadmap%20%28Part%201%20of%202%29%20%E2%80%93%20I%20provided%20some%20insights%20into%20the%20DotNetNuke%20Corp.%20business%20model%2C%20specifically%20as%20it%20pertains%20to%20the%20similarities%20and%20differences%20between%20DotNetNuke%20Community%20and%20Professional%20Editions.%0AIn%20this%20post%20I%20provide%20some%20b&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-2-of-2/&amp;t=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+2+of+2%29" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-2-of-2/&amp;title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+2+of+2%29" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+2+of+2%29&amp;link=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-2-of-2/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-2-of-2/&amp;title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+2+of+2%29&amp;body=In%20my%20last%20post%20%E2%80%93%20DotNetNuke%20Business%20Model%20and%20Product%20Roadmap%20%28Part%201%20of%202%29%20%E2%80%93%20I%20provided%20some%20insights%20into%20the%20DotNetNuke%20Corp.%20business%20model%2C%20specifically%20as%20it%20pertains%20to%20the%20similarities%20and%20differences%20between%20DotNetNuke%20Community%20and%20Professional%20Editions.%0AIn%20this%20post%20I%20provide%20some%20b" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-2-of-2/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2009%2F04%2Fdotnetnuke-business-model-and-product-roadmap-part-2-of-2%2F&amp;t=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+2+of+2%29" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-2-of-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>DotNetNuke Business Model and Product Roadmap (Part 1 of 2)</title>
		<link>http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-1-of-2/</link>
		<comments>http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-1-of-2/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 22:28:00 +0000</pubDate>
		<dc:creator>nik</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[DotNetNuke]]></category>

		<guid isPermaLink="false">http://www.techbubble.net/Blog/tabid/57/EntryId/217/DotNetNuke-Business-Model-and-Product-Roadmap-Part-1-of-2.aspx</guid>
		<description><![CDATA[Development of DotNetNuke 5.1 Community and Professional Editions is progressing at full speed. It took us quite a bit of time to analyze dependencies, evaluate resource availability, determine viability and clearly define scope. As a result, until now, we did not publish a roadmap for DNN 5.1. The lack of published and authoritative roadmap details [...]]]></description>
			<content:encoded><![CDATA[<p>Development of DotNetNuke 5.1 Community and Professional Editions is progressing at full speed. It took us quite a bit of time to analyze dependencies, evaluate resource availability, determine viability and clearly define scope. As a result, until now, we did not publish a roadmap for DNN 5.1. The lack of published and authoritative roadmap details and a general misunderstanding about our business model has caused some confusion in the community.</p>
<p>In this, the first of a two-part series, I will make an attempt to clear this confusion and bring clarity on two topics:</p>
<p>1) <strong>Our business model:</strong> I’ll explain our business model and how it underscores our commitment to Community Edition and the overall DotNetNuke ecosystem. This is the subject of my first post.</p>
<p>2) <strong>Product roadmap:</strong> I’ll review the research, planning and decision-making process on how the roadmap for both Community and Professional Editions is determined. Then I’ll outline the release 5.1 roadmap for both Community and Professional Editions. This is the subject of my second post.</p>
<p><span class="Head" style="font-size: 12pt;">Our business model</span></p>
<p>DotNetNuke Corp. has an <strong>“Open Core”</strong> business model. In plain English this means that our free, community product and our paid, commercial product have a common, free, Open Source Core. This begs the question, what exactly is the DotNetNuke Core?</p>
<p><strong>The DotNetNuke Core refers to the base combination of DotNetNuke framework libraries and extensions required to have an operational DotNetNuke website. Any additional extensions included in the distribution, even if they are not enabled by default, are also considered Core extensions.</strong></p>
<p>The Core thus consists of the DotNetNuke framework libraries; all providers; all administrative modules; all control panels; the Text/HTML module; the default skin/containers; all skin objects; and all widgets included in the DotNetNuke distribution.</p>
<p><a href="http://kalyani.com/wp-content/uploads/2009/04/DNNCore.png"><img class="alignnone size-full wp-image-759" title="DNNCore" src="http://kalyani.com/wp-content/uploads/2009/04/DNNCore.png" alt="" width="351" height="407" /></a></p>
<p>Both Community and Professional Editions share this identical DotNetNuke Core, which is why our business model is called “Open Core.” Given this context, it is worth emphasizing the implications of this business model:</p>
<ul>
<li>The Core is and will remain free and Open Source. This is essential for the continued success of DotNetNuke.</li>
<li>Any enhancements made to the Core framework libraries are ALWAYS available to both Community and Professional Editions.</li>
<li>Any enhancements made to any Core extensions are ALWAYS available to both Community and Professional Editions</li>
</ul>
<p>On the topic of Core enhancements, there have been some questions about whether any will be made in the future. The answer is an emphatic “Yes!” This is clearly evident by reviewing the DNN 5.1 roadmap. Also consider that since 2006, over 95% of the Core development has been done by employees or consultants paid for by DotNetNuke Corp. Given the investment we have already made and the fact that the Core forms the foundation for both our products, continuing to invest in improving and enhancing it is the best decision for the company and the community.</p>
<p>Now, let’s examine each of the editions to understand how they are similar and different purely from a software standpoint.</p>
<p>The DotNetNuke Community Edition package includes the DotNetNuke Core and DotNetNuke Community Extensions developed and maintained by one of the many volunteer-based DotNetNuke Project teams. The result is a complete solution that is suitable for many different scenarios.</p>
<p><a href="http://kalyani.com/wp-content/uploads/2009/04/DNNCE.png"><img class="alignnone size-full wp-image-765" title="DNNCE" src="http://kalyani.com/wp-content/uploads/2009/04/DNNCE.png" alt="" /></a></p>
<p>The DotNetNuke Professional Edition package includes the DotNetNuke Core, DotNetNuke Community Extensions and DotNetNuke Professional Extensions. The result is a complete solution that is suitable for mission-critical business scenarios where the desired level of performance or functionality is not achievable using only the Core or Community Extensions. In such situations, the user can purchase the desired extensions from a third-party, develop them in-house or opt for the convenience of getting a single package – DotNetNuke Professional Edition.</p>
<p><a href="http://kalyani.com/wp-content/uploads/2009/04/DNNPE.png"><img class="alignnone size-full wp-image-766" title="DNNPE" src="http://kalyani.com/wp-content/uploads/2009/04/DNNPE.png" alt="" width="576" height="281" /></a></p>
<p>Let’s address the questions this raises:</p>
<p><strong>Q: Why is it necessary for DotNetNuke Corp. to bundle its extensions into a separate package instead of making them available separately for purchase like other extensions made by third-party vendors?</strong></p>
<p>A: Our target customer is a business that is looking for a fully-integrated, supported solution and not a build-your-own package. By offering a packaged solution, we address this need. A good analogy is the automotive industry. Consumers do not have the time, skills or resources to assemble a safe and reliable car even though parts are available. They prefer to buy a fully assembled, tested vehicle that has a warranty and which they can start driving immediately.</p>
<p><strong>Q: Does this mean that DotNetNuke Corp. will no longer enhance any of the Core Extensions?</strong></p>
<p>A: That is certainly not the case. Since we have an Open Core business model, we absolutely must continue to enhance the Core Extensions as they are vital to the continued success of both DotNetNuke Community Edition and DotNetNuke Professional Edition. For example, our roadmap for this year includes significant enhancements to the user experience of Core Extensions the scope of which is greater than any prior effort to improve DotNetNuke’s usability.</p>
<p><strong>Q: What types of extensions will DotNetNuke Corp. include with Professional Edition?</strong></p>
<p>A: In general, we will include extensions that are clearly of interest to larger, more mission-critical business. The feature areas will include advanced security, performance, commerce and scalability.</p>
<p><strong>Q: Can third-parties build extensions for Community Edition that provide similar functionality to DotNetNuke Professional Extensions?<br />
</strong><br />
A: Of course. Since the DotNetNuke Professional Extensions leverage the extensibility built-into the DotNetNuke Core that is common to both editions, third-parties have an equal opportunity to build similar (or better) extensions. This is no different than what many third-parties are doing today given the vast number of extensions &#8212; free and commercial &#8212; already available to DNN users.</p>
<p><strong>Q: Will source code for DotNetNuke Professional Extensions be included with Professional Edition?<br />
</strong><br />
A: No. Source code will not be distributed; however, it will be held in escrow for Professional Edition customers.</p>
<p><strong>Q: Will DotNetNuke Professional Extensions ever be available in Community Edition?<br />
</strong><br />
A: Yes. In some cases we may choose to migrate specific extensions from Professional Edition to<br />
Community Edition.</p>
<p><strong>Q: Will third parties be able to build functionality on top of DotNetNuke Professional Extensions?<br />
</strong><br />
A: Yes. However, at this time there is no extensibility provided in DotNetNuke Professional Extensions. This does not stop ISVs from building product versions which are targeted at Professional Edition customers.</p>
<p>To summarize:</p>
<ul>
<li>DotNetNuke Corp. has an Open Core business model</li>
<li>The DotNetNuke Core will continue to be enhanced, benefitting both Community Edition and Professional Edition users</li>
<li>DotNetNuke Community Edition is applicable to most usage scenarios</li>
<li>DotNetNuke Professional Edition is applicable to larger, more mission critical business environments</li>
</ul>
<p>Hopefully this post answered many of the community&#8217;s questions about the DotNetNuke Corp. business model, specifically as it pertains to the similarities and differences between DotNetNuke Community and Professional Editions.</p>
<p>In my next post – <a href="http://www.techbubble.net/Blog/tabid/57/EntryId/218/DotNetNuke-Business-Model-and-Product-Roadmap-Part-2-of-2.aspx">DotNetNuke Business Model and Product Roadmap (Part 2 of 2)</a> – I will provide some background and insights into how we develop the DotNetNuke product roadmap and also share the roadmap for DotNetNuke 5.1 Community and Professional Editions.</p>


<!-- Begin SexyBookmarks Menu Code -->
<div class="sexy-bookmarks sexy-bookmarks-expand">
<ul class="socials">
		<li class="sexy-delicious">
			<a href="http://del.icio.us/post?url=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-1-of-2/&amp;title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+1+of+2%29" rel="nofollow" class="external" title="Share this on del.icio.us">Share this on del.icio.us</a>
		</li>
		<li class="sexy-digg">
			<a href="http://digg.com/submit?phase=2&amp;url=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-1-of-2/&amp;title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+1+of+2%29" rel="nofollow" class="external" title="Digg this!">Digg this!</a>
		</li>
		<li class="sexy-diigo">
			<a href="http://www.diigo.com/post?url=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-1-of-2/&amp;title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+1+of+2%29&amp;desc=Development%20of%20DotNetNuke%205.1%20Community%20and%20Professional%20Editions%20is%20progressing%20at%20full%20speed.%20It%20took%20us%20quite%20a%20bit%20of%20time%20to%20analyze%20dependencies%2C%20evaluate%20resource%20availability%2C%20determine%20viability%20and%20clearly%20define%20scope.%20As%20a%20result%2C%20until%20now%2C%20we%20did%20not%20publish%20a%20roadmap%20for%20DNN%205.1.%20The%20" rel="nofollow" class="external" title="Post this on Diigo">Post this on Diigo</a>
		</li>
		<li class="sexy-reddit">
			<a href="http://reddit.com/submit?url=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-1-of-2/&amp;title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+1+of+2%29" rel="nofollow" class="external" title="Share this on Reddit">Share this on Reddit</a>
		</li>
		<li class="sexy-stumbleupon">
			<a href="http://www.stumbleupon.com/submit?url=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-1-of-2/&amp;title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+1+of+2%29" rel="nofollow" class="external" title="Stumble upon something good? Share it on StumbleUpon">Stumble upon something good? Share it on StumbleUpon</a>
		</li>
		<li class="sexy-technorati">
			<a href="http://technorati.com/faves?add=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-1-of-2/" rel="nofollow" class="external" title="Share this on Technorati">Share this on Technorati</a>
		</li>
		<li class="sexy-mixx">
			<a href="http://www.mixx.com/submit?page_url=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-1-of-2/&amp;title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+1+of+2%29" rel="nofollow" class="external" title="Share this on Mixx">Share this on Mixx</a>
		</li>
		<li class="sexy-facebook">
			<a href="http://www.facebook.com/share.php?v=4&amp;src=bm&amp;u=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-1-of-2/&amp;t=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+1+of+2%29" rel="nofollow" class="external" title="Share this on Facebook">Share this on Facebook</a>
		</li>
		<li class="sexy-twitter">
			<a href="http://twitter.com/home?status=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+1+of+2%29+-+http://bit.ly/aM77oA+(via+@techbubble)" rel="nofollow" class="external" title="Tweet This!">Tweet This!</a>
		</li>
		<li class="sexy-linkedin">
			<a href="http://www.linkedin.com/shareArticle?mini=true&amp;url=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-1-of-2/&amp;title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+1+of+2%29&amp;summary=Development%20of%20DotNetNuke%205.1%20Community%20and%20Professional%20Editions%20is%20progressing%20at%20full%20speed.%20It%20took%20us%20quite%20a%20bit%20of%20time%20to%20analyze%20dependencies%2C%20evaluate%20resource%20availability%2C%20determine%20viability%20and%20clearly%20define%20scope.%20As%20a%20result%2C%20until%20now%2C%20we%20did%20not%20publish%20a%20roadmap%20for%20DNN%205.1.%20The%20&amp;source=TechBubble" rel="nofollow" class="external" title="Share this on Linkedin">Share this on Linkedin</a>
		</li>
		<li class="sexy-yahoobuzz">
			<a href="http://buzz.yahoo.com/submit/?submitUrl=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-1-of-2/&amp;submitHeadline=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+1+of+2%29&amp;submitSummary=Development%20of%20DotNetNuke%205.1%20Community%20and%20Professional%20Editions%20is%20progressing%20at%20full%20speed.%20It%20took%20us%20quite%20a%20bit%20of%20time%20to%20analyze%20dependencies%2C%20evaluate%20resource%20availability%2C%20determine%20viability%20and%20clearly%20define%20scope.%20As%20a%20result%2C%20until%20now%2C%20we%20did%20not%20publish%20a%20roadmap%20for%20DNN%205.1.%20The%20&amp;submitCategory=science&amp;submitAssetType=text" rel="nofollow" class="external" title="Buzz up!">Buzz up!</a>
		</li>
		<li class="sexy-myspace">
			<a href="http://www.myspace.com/Modules/PostTo/Pages/?u=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-1-of-2/&amp;t=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+1+of+2%29" rel="nofollow" class="external" title="Post this to MySpace">Post this to MySpace</a>
		</li>
		<li class="sexy-google">
			<a href="http://www.google.com/bookmarks/mark?op=add&amp;bkmk=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-1-of-2/&amp;title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+1+of+2%29" rel="nofollow" class="external" title="Add this to Google Bookmarks">Add this to Google Bookmarks</a>
		</li>
		<li class="sexy-friendfeed">
			<a href="http://www.friendfeed.com/share?title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+1+of+2%29&amp;link=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-1-of-2/" rel="nofollow" class="external" title="Share this on FriendFeed">Share this on FriendFeed</a>
		</li>
		<li class="sexy-pingfm">
			<a href="http://ping.fm/ref/?link=http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-1-of-2/&amp;title=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+1+of+2%29&amp;body=Development%20of%20DotNetNuke%205.1%20Community%20and%20Professional%20Editions%20is%20progressing%20at%20full%20speed.%20It%20took%20us%20quite%20a%20bit%20of%20time%20to%20analyze%20dependencies%2C%20evaluate%20resource%20availability%2C%20determine%20viability%20and%20clearly%20define%20scope.%20As%20a%20result%2C%20until%20now%2C%20we%20did%20not%20publish%20a%20roadmap%20for%20DNN%205.1.%20The%20" rel="nofollow" class="external" title="Ping this on Ping.fm">Ping this on Ping.fm</a>
		</li>
		<li class="sexy-squidoo">
			<a href="http://www.squidoo.com/lensmaster/bookmark?http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-1-of-2/" rel="nofollow" class="external" title="Add to a lense on Squidoo">Add to a lense on Squidoo</a>
		</li>
		<li class="sexy-tumblr">
			<a href="http://www.tumblr.com/share?v=3&amp;u=http%3A%2F%2Fwww.kalyani.com%2F2009%2F04%2Fdotnetnuke-business-model-and-product-roadmap-part-1-of-2%2F&amp;t=DotNetNuke+Business+Model+and+Product+Roadmap+%28Part+1+of+2%29" rel="nofollow" class="external" title="Share this on Tumblr">Share this on Tumblr</a>
		</li>
</ul>
<div style="clear:both;"></div>
</div>
<!-- End SexyBookmarks Menu Code -->

]]></content:encoded>
			<wfw:commentRss>http://www.kalyani.com/2009/04/dotnetnuke-business-model-and-product-roadmap-part-1-of-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
