<?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>Kevin Jensen &#187; Kinetic CRM</title>
	<atom:link href="http://www.kevinjensen.com/category/kinetic-crm/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kevinjensen.com</link>
	<description>ASP.NET / SQL / C# / Family Banter</description>
	<lastBuildDate>Mon, 07 Jun 2010 14:43:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Microsoft pushed MVC to Beta!</title>
		<link>http://www.kevinjensen.com/2008/10/15/microsoft-pushed-mvc-to-beta/</link>
		<comments>http://www.kevinjensen.com/2008/10/15/microsoft-pushed-mvc-to-beta/#comments</comments>
		<pubDate>Thu, 16 Oct 2008 02:50:56 +0000</pubDate>
		<dc:creator>kevin</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Kinetic CRM]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[CRM]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://www.kevinjensen.com/?p=54</guid>
		<description><![CDATA[Tonight microsoft has officially pushed ASP.NET MVC to Beta status. Over the next few days I&#8217;ll be converting my CRM codebase to the new beta. I&#8217;ll keep everyone posted on what has changed.]]></description>
			<content:encoded><![CDATA[<p>Tonight microsoft has <a href="http://www.asp.net/mvc">officially</a> pushed ASP.NET MVC to Beta status.  </p>
<p>Over the next few days I&#8217;ll be converting my <a href="http://www.kineticcrm.com">CRM</a> codebase to the new beta.</p>
<p>I&#8217;ll keep everyone posted on what has changed.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kevinjensen.com/2008/10/15/microsoft-pushed-mvc-to-beta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WOOHOO!  Visual Studio 2008 is now being downloaded.</title>
		<link>http://www.kevinjensen.com/2007/11/20/woohoo-visual-studio-2008-is-now-being-downloaded/</link>
		<comments>http://www.kevinjensen.com/2007/11/20/woohoo-visual-studio-2008-is-now-being-downloaded/#comments</comments>
		<pubDate>Tue, 20 Nov 2007 14:19:15 +0000</pubDate>
		<dc:creator>kevin</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Kinetic CRM]]></category>

		<guid isPermaLink="false">http://www.kevinjensen.com/2007/11/20/woohoo-visual-studio-2008-is-now-being-downloaded/</guid>
		<description><![CDATA[MSDN Released Visual Studio 2008 RTM to all MSDN Subscribers. I&#8217;m downloading the 3.1GB iso right now. I&#8217;ll give a mini-review after i&#8217;ve had time to play with it over the Thanksgiving holiday.]]></description>
			<content:encoded><![CDATA[<p>MSDN Released Visual Studio 2008 RTM to all MSDN Subscribers.  I&#8217;m downloading the 3.1GB iso right now.</p>
<p>I&#8217;ll give a mini-review after i&#8217;ve had time to play with it over the Thanksgiving holiday.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kevinjensen.com/2007/11/20/woohoo-visual-studio-2008-is-now-being-downloaded/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Output parameters and dynamic sql</title>
		<link>http://www.kevinjensen.com/2007/11/13/output-parameters-and-dynamic-sql/</link>
		<comments>http://www.kevinjensen.com/2007/11/13/output-parameters-and-dynamic-sql/#comments</comments>
		<pubDate>Tue, 13 Nov 2007 14:20:11 +0000</pubDate>
		<dc:creator>kevin</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Kinetic CRM]]></category>

		<guid isPermaLink="false">http://www.kevinjensen.com/2007/11/13/output-parameters-and-dynamic-sql/</guid>
		<description><![CDATA[I came across something new for the first time today. Dynamic SQL with output parameters. Here is how you do it in MSSQL. DECLARE @totals INT EXEC sp_executesql N&#8217;SELECT @totalCount = count(*) from sysobjects&#8217;, N&#8217;@totalCount INT OUTPUT&#8217;, @totals OUTPUT print &#8216;Totals: &#8216; + convert(varchar,@totals)]]></description>
			<content:encoded><![CDATA[<p>I came across something new for the first time today.  Dynamic SQL with output parameters.</p>
<p>Here is how you do it in MSSQL.</p>
<p>DECLARE @totals INT<br />
EXEC sp_executesql N&#8217;SELECT @totalCount = count(*) from sysobjects&#8217;, N&#8217;@totalCount INT OUTPUT&#8217;, @totals OUTPUT<br />
print &#8216;Totals: &#8216; + convert(varchar,@totals)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kevinjensen.com/2007/11/13/output-parameters-and-dynamic-sql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2008 will be released in November.</title>
		<link>http://www.kevinjensen.com/2007/11/08/visual-studio-2008-will-be-released-in-november/</link>
		<comments>http://www.kevinjensen.com/2007/11/08/visual-studio-2008-will-be-released-in-november/#comments</comments>
		<pubDate>Thu, 08 Nov 2007 19:56:30 +0000</pubDate>
		<dc:creator>kevin</dc:creator>
				<category><![CDATA[Blogroll]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Kinetic CRM]]></category>

		<guid isPermaLink="false">http://www.kevinjensen.com/2007/11/08/visual-studio-2008-will-be-released-in-november/</guid>
		<description><![CDATA[Well you know you are an extreme geek when you are excited for a new release of an IDE. I&#8217;m really looking forward to the integrated AJAX tools and the built in MVC framework. http://www.vnunet.com/vnunet/news/2202822/microsoft-sets-date-fro-visual]]></description>
			<content:encoded><![CDATA[<p>Well you know you are an extreme geek when you are excited for a new release of an IDE.</p>
<p>I&#8217;m really looking forward to the integrated AJAX tools and the built in MVC framework.</p>
<p><a href="http://www.vnunet.com/vnunet/news/2202822/microsoft-sets-date-fro-visual">http://www.vnunet.com/vnunet/news/2202822/microsoft-sets-date-fro-visual</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.kevinjensen.com/2007/11/08/visual-studio-2008-will-be-released-in-november/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP.NET 2.0 Hot Tips and Tricks</title>
		<link>http://www.kevinjensen.com/2007/04/22/aspnet-20-hot-tips-and-tricks/</link>
		<comments>http://www.kevinjensen.com/2007/04/22/aspnet-20-hot-tips-and-tricks/#comments</comments>
		<pubDate>Sun, 22 Apr 2007 14:08:08 +0000</pubDate>
		<dc:creator>kevin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Kinetic CRM]]></category>

		<guid isPermaLink="false">http://www.kevinjensen.com/2007/04/22/aspnet-20-hot-tips-and-tricks/</guid>
		<description><![CDATA[Dan Wahlin has posted an awesome group of ASP.NET Tips and Tricks that were introduced with the ASP.NET 2.0 Framework.&#160; It seems like every month I find another hidden gem in Microsoft&#8217;s Framework. &#160;1. Maintain the position of the scrollbar on postbacks:&#160; In ASP.NET 1.1 it was a pain to maintain the position of the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://weblogs.asp.net/dwahlin/default.aspx" target="_blank">Dan Wahlin</a> has <a href="http://weblogs.asp.net/dwahlin/archive/2007/04/17/simple-asp-net-2-0-tips-and-tricks-that-you-may-or-may-not-have-heard-about.aspx">posted</a> an awesome group of <a href="http://weblogs.asp.net/dwahlin/archive/2007/04/17/simple-asp-net-2-0-tips-and-tricks-that-you-may-or-may-not-have-heard-about.aspx">ASP.NET Tips and Tricks</a> that were introduced with the ASP.NET 2.0 Framework.&nbsp; It seems like every month I find another hidden gem in Microsoft&#8217;s Framework.</p>
<p><strong>&nbsp;1.</strong> <strong>Maintain the position of the scrollbar on postbacks</strong>:&nbsp; In ASP.NET 1.1 it was a pain to maintain the position of the scrollbar when doing a postback operation.&nbsp; This was especially true when you had a grid on the page and went to edit a specific row.&nbsp; Instead of staying on the desired row, the page would reload and you&#8217;d be placed back at the top and have to scroll down.&nbsp; In ASP.NET 2.0 you can simply add the MaintainScrollPostionOnPostBack attribute to the Page directive:</p>
<p>&lt;%@&nbsp;Page&nbsp;Language=&#8221;C#&#8221;&nbsp;MaintainScrollPositionOnPostback=&#8221;true&#8221; AutoEventWireup=&#8221;true&#8221;&nbsp;CodeFile=&#8221;&#8230;&#8221;&nbsp;Inherits=&#8221;&#8230;&#8221;&nbsp;%&gt;
<p><strong>2.&nbsp; Set the default focus to a control when the page loads</strong>:&nbsp; This is another extremely simple thing that can be done without resorting to writing JavaScript.&nbsp; If you only have a single textbox (or two) on a page why should the user have to click in the textbox to start typing?&nbsp; Shouldn&#8217;t the cursor already be blinking in the textbox so they can type away?&nbsp; Using the DefaultFocus property of the HtmlForm control you can easily do this.
<p>&lt;form&nbsp;id=&#8221;frm&#8221;&nbsp;DefaultFocus=&#8221;txtUserName&#8221;&nbsp;runat=&#8221;server&#8221;&gt;<br />&nbsp;&nbsp;&#8230;<br />&lt;/form&gt;
<p><strong>3. Set the default button that is triggered when the user hits the enter key:</strong>&nbsp; This was a major pain point in ASP.NET 1.1 and required some JavaScript to be written to ensure that when the user hit the enter key that the appropriate button on the form triggered a &#8220;click&#8221; event on the server-side.&nbsp; Fortunately, you can now use the HtmlForm control&#8217;s DefaultButton property to set which button should be clicked when the user hits enter.&nbsp; This property is also available on the Panel control in cases where different buttons should be triggered as a user moves into different Panels on a page.
<p>&lt;form&nbsp;id=&#8221;frm&#8221;&nbsp;DefaultButton=&#8221;btnSubmit&#8221;&nbsp;runat=&#8221;server&#8221;&gt;<br />&nbsp;&nbsp;&#8230;<br />&lt;/form&gt;
<p><strong>4.</strong> <strong>Locate nested controls easily</strong>: Finding controls within a Page&#8217;s control hierarchy can be painful but if you know how the controls are nested you can use the lesser known &#8220;$&#8221; shortcut to find controls without having to write recursive code.&nbsp; If you&#8217;re looking for a great way to recursively find a control (in cases where you don&#8217;t know the exact control nesting) check out my good buddy <a href="http://weblogs.asp.net/palermo4/archive/2007/04/13/recursive-findcontrol-t.aspx">Michael Palermo&#8217;s blog</a> entry. The following example shows how to use the DefaultFocus property to set the focus on a textbox that is nested inside of a FormView control.&nbsp; Notice that the &#8220;$&#8221; is used to delimit the nesting:
<p>&lt;form id=&#8221;form1&#8243; runat=&#8221;server&#8221; DefaultFocus=&#8221;formVw$txtName&#8221;&gt;<br />&lt;div&gt;<br />&lt;asp:FormView ID=&#8221;formVw&#8221; runat=&#8221;server&#8221;&gt;<br />&lt;ItemTemplate&gt;<br />Name:&nbsp;<br />&lt;asp:TextBox ID=&#8221;txtName&#8221; runat=&#8221;server&#8221;&nbsp;<br />Text=&#8217;&lt;%# Eval(&#8220;FirstName&#8221;) + &#8221; &#8221; + Eval(&#8220;LastName&#8221;) %&gt;&#8217; /&gt;<br />&lt;/ItemTemplate&gt;<br />&lt;/asp:FormView&gt;<br />&lt;/div&gt;<br />&lt;/form&gt;
<p>This little trick can also be used on the server-side when calling FindControl().&nbsp; <a href="http://weblogs.asp.net/dwahlin/archive/2006/08/25/Finding-ASP.NET-Child-Controls_2E002E002E002E00_The-Simple-Way.aspx">I blogged about this</a> awhile back if you&#8217;d like more details.&nbsp; Here&#8217;s an example:
<p>TextBox&nbsp;tb&nbsp;=&nbsp;this.FindControl(&#8220;form1$formVw$txtName&#8221;)&nbsp;as&nbsp;TextBox;<br />if&nbsp;(tb&nbsp;!=&nbsp;null)<br />{<br />//Access&nbsp;TextBox&nbsp;control<br />}
<p><strong>5.</strong> <strong>Strongly-typed access to cross-page postback controls:</strong>&nbsp; This one is a little more involved than the others, but quite useful.&nbsp; ASP.NET 2.0 introduced the concept of cross-page postbacks where one page could postback information to a page other than itself.&nbsp; This is done by setting the PostBackUrl property&nbsp;of a button to the name of the page that the button should postback data to.&nbsp; Normally, the posted data can be accessed by doing something like PreviousPage.FindControl(&#8220;ControlID&#8221;).&nbsp; However, this requires a cast if you need to access properties of the target control in the previous page (which you normally need to do).&nbsp; If you add a public property into the code-behind page that initiates the postback operation, you can access the property in a strongly-typed manner by adding the PreviousPageType directive into the target page of the postback.&nbsp; That may sound a little confusing if you haven&#8217;t done it so let me explain a little more.
<p>If you have a page called Default.aspx that exposes a public property that returns a Textbox that is defined in the page, the page that data is posted to (lets call it SearchResults.aspx) can access that property in a strongly-typed manner (no FindControl() call is necessary) by adding the PreviousPageType directive into the top of the page:
<p>&lt;%@&nbsp;PreviousPageType&nbsp;VirtualPath=&#8221;Default.aspx&#8221;&nbsp;%&gt;
<p>By adding this directive, the code in SearchResults.aspx can access the TextBox defined in Default.aspx in a strongly-typed manner.&nbsp; The following&nbsp;example assumes the property defined in Default.aspx is named SearchTextBox.
<p>TextBox&nbsp;tb&nbsp;=&nbsp;PreviousPage.SearchTextBox;
<p>This code obviously only works if the previous page is Default.aspx.&nbsp; PreviousPageType also has a TypeName property as well where you could define a base type that one or more pages derive from to make this technique work with multiple pages.&nbsp; You can <a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.page.previouspage.aspx">learn more about PreviousPageType here</a>.
<p><strong>6. Strongly-typed access to Master Pages controls:</strong> The PreviousPageType directive isn&#8217;t the only one that provides strongly-typed access to controls.&nbsp; If you have public properties defined in a Master Page that you&#8217;d like to access in a strongly-typed manner you can add the MasterType directive into a page as shown next (note that the MasterType directive also allows a TypeName to be defined as with the PreviousPageType directive):
<p>&lt;%@&nbsp;MasterType&nbsp;VirtualPath=&#8221;MasterPage.master&#8221;&nbsp;%&gt;
<p>You can then access properties in the target master page from a content page&nbsp;by writing code like the following:
<p>this.Master.HeaderText&nbsp;=&nbsp;&#8221;Label&nbsp;updated&nbsp;using&nbsp;MasterType&nbsp;directive&nbsp;with&nbsp;VirtualPath&nbsp;attribute.&#8221;;
<p>You can find&nbsp;several other tips and tricks related to working with master pages including sharing master pages across IIS virtual directories at a <a href="http://weblogs.asp.net/dwahlin/archive/2006/08/22/Master-Pages-Tips-and-Tricks.aspx">previous blog post I wrote</a>.&nbsp;
<p><strong>7. Validation groups</strong>: You may have a page that has multiple controls and multiple buttons.&nbsp;&nbsp;When&nbsp;one of the buttons is clicked you want specific validator controls to be evaluated rather than all of the validators defined on the page.&nbsp; With ASP.NET 1.1 there wasn&#8217;t a great way to handle this without resorting to some hack code.&nbsp; ASP.NET 2.0 adds a ValidationGroup property to all validator controls and buttons (Button, LinkButton, etc.) that easily solves the problem.&nbsp;&nbsp;If you have a TextBox at the top of a page that has a RequiredFieldValidator next to it and a Button control, you can fire that one validator when the button is clicked by setting the ValidationGroup property on the button and on the RequiredFieldValidator to the same value.&nbsp; Any other validators not in the defined ValidationGroup will be ignored when the button is clicked. Here&#8217;s an example:
<p>&lt;form&nbsp;id=&#8221;form1&#8243;&nbsp;runat=&#8221;server&#8221;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;Search&nbsp;Text:&nbsp;&lt;asp:TextBox&nbsp;ID=&#8221;txtSearch&#8221;&nbsp;runat=&#8221;server&#8221; /&gt;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;asp:RequiredFieldValidator&nbsp;ID=&#8221;valSearch&#8221;&nbsp;runat=&#8221;Server&#8221;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ControlToValidate=&#8221;txtSearch&#8221; <strong>ValidationGroup</strong><strong>=&#8221;SearchGroup&#8221;</strong> /&gt;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;asp:Button&nbsp;ID=&#8221;btnSearch&#8221;&nbsp;runat=&#8221;server&#8221;&nbsp;Text=&#8221;Search&#8221;<br /><strong>ValidationGroup</strong><strong>=&#8221;SearchGroup&#8221;</strong> /&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&#8230;.<br />&nbsp;&nbsp;&nbsp;&nbsp;Other&nbsp;controls&nbsp;with&nbsp;validators&nbsp;and&nbsp;buttons&nbsp;defined&nbsp;here<br />&lt;/form&gt;
<p><strong>8. Finding control/variable names while typing code:</strong> &nbsp;This tip is a bit&nbsp;more related to VS.NET than to ASP.NET directly, but it&#8217;s definitely helpful for those of you who remember the first few characters of control variable name (or any variable for that matter) but can&#8217;t remember the complete name.&nbsp; It also gives me the chance to mention&nbsp;two great downloads from Microsoft.&nbsp; First the tip though.&nbsp; After typing the first few characters of a control/variable name, hit CTRL + SPACEBAR and VS.NET will bring up a short list of matching items.&nbsp; Definitely a lot easier than searching for the control/variable definition.&nbsp; Thanks to Darryl for the tip.&nbsp; For those who are interested, Microsoft made all of the VS.NET keyboard shortcuts available in a nice downloadable and printable guide.&nbsp; Get the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c15d210d-a926-46a8-a586-31f8a2e576fe&amp;DisplayLang=en">C# version here</a> and the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=6bb41456-9378-4746-b502-b4c5f7182203&amp;DisplayLang=en">VB.NET version here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kevinjensen.com/2007/04/22/aspnet-20-hot-tips-and-tricks/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Thank you Microsoft for recent .NET Support!</title>
		<link>http://www.kevinjensen.com/2007/02/09/thank-you-microsoft-for-recent-net-support/</link>
		<comments>http://www.kevinjensen.com/2007/02/09/thank-you-microsoft-for-recent-net-support/#comments</comments>
		<pubDate>Fri, 09 Feb 2007 22:44:06 +0000</pubDate>
		<dc:creator>kevin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Kinetic CRM]]></category>

		<guid isPermaLink="false">http://www.kevinjensen.com/2007/02/09/thank-you-microsoft-for-recent-net-support/</guid>
		<description><![CDATA[Well I just wanted to give a formal thank-you to Microsoft for it&#8217;s recent support of extending the tools for Microsoft Web Developers.&#160; I&#8217;ve been pretty tough on Microsoft over the last year on it&#8217;s issues with Microsoft Visual Studio 2005 and it&#8217;s massive delay on releasing SP1.&#160; As most of you know, ASP.NET AJAX [...]]]></description>
			<content:encoded><![CDATA[<p>Well I just wanted to give a formal thank-you to Microsoft for it&#8217;s recent support of extending the tools for Microsoft Web Developers.&nbsp; I&#8217;ve been pretty tough on Microsoft over the last year on it&#8217;s issues with Microsoft Visual Studio 2005 and it&#8217;s massive delay on releasing SP1.&nbsp; </p>
<p>As most of you know, ASP.NET AJAX v1.0&nbsp;was officially released last week.&nbsp; The release was accompanied by loads of videos and sample code that should get any .NET Developer off the ground and running with AJAX in no time at all.&nbsp; </p>
<p>Most of the thanks goes to the wonderful developers responsible for developing ASP.NET AJax, but certainly Microsoft has done a lot to make these tools happen.</p>
<p>Here are some links to get you started:</p>
<p>- Main ASP.NET AJAX site: <a href="http://ajax.asp.net">http://ajax.asp.net</a></p>
<p>- <a title="ASP.NET AJAX Download" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=ca9d90fa-e8c9-42e3-aa19-08e2c027f5d6&amp;displaylang=en" target="_blank">ASP.NET AJAX Download</a>.&nbsp; With ASP.NET AJAX, developers can quickly create pages with rich, responsive UI and more efficient client-server communication by simply adding a few server controls to their pages. This&nbsp;new Web development technology from Microsoft integrates cross-browser client script libraries with the ASP.NET&nbsp;2.0 development framework. ASP.NET AJAX provides developers building client-based Web experiences with a familiar development process and programming model that they already know from using server-side ASP.NET development. Because ASP.NET AJAX is integrated with ASP.NET, developers have full access to the built-in ASP.NET&nbsp;2.0 application services and the entire .NET Framework.&nbsp;</p>
<p>- <a title="ASP.NET AJAX Control Toolkit" href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=AtlasControlToolkit" target="_blank">ASP.NET AJAX Control Toolkit</a>.&nbsp; The ASP.NET AJAX Control Toolkit offers developers a rich variety of client-side controls and extenders through a compilation of code samples and components. If&nbsp;youâ€™re looking for eye-catching control behavior without having to go through the trouble of writing and testing extensive JavaScript code or adding complex animations, the ASP.NET AJAX Control Toolkit offers the right balance of visuals and ease-of-use.</p>
<p>- <a title="ASP.NET AJAX Library" href="http://ajax.asp.net/downloads/library/default.aspx?tabid=47&amp;subtabid=471" target="_blank">ASP.NET AJAX Library</a>.&nbsp; The Microsoft AJAX Library is a standalone collection of the standards-based JavaScript classes included in ASP.NET AJAX. Itâ€™s&nbsp;supported by most popular browsers and can be used to build client-centric Web applications that integrate with any backend data provider.</p>
<p>I suggest everyone take a look at these wonderful .NET tools.&nbsp; AJAX is not going away anytime soon, and it is important to realize the benefits that this &#8220;old but re-juvinated&#8221; techology is bringing to the web.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.kevinjensen.com/2007/02/09/thank-you-microsoft-for-recent-net-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript Library Reviews</title>
		<link>http://www.kevinjensen.com/2006/09/11/javascript-library-reviews/</link>
		<comments>http://www.kevinjensen.com/2006/09/11/javascript-library-reviews/#comments</comments>
		<pubDate>Mon, 11 Sep 2006 14:50:47 +0000</pubDate>
		<dc:creator>kevin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Kinetic CRM]]></category>

		<guid isPermaLink="false">http://www.kevinjensen.com/2006/09/11/javascript-library-reviews/</guid>
		<description><![CDATA[&#160; Well the hype of Web2.0 has certainly revitalized Javascript in the web development community.&#160; Just when you think it&#8217;s dead&#8230;&#160; I look forward to researching each of these libraries more thoroughly and then incorporate the best suited one into Kinetic CRM. Here is the summary of the 4 main libraries as described by Sitepoint. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.kevinjensen.com/wp-content/uploads/2006/09/WindowsLiveWriter/JavascriptLibraryReviews_8240/dojo%5B1%5D.png" atomicselection="true"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="90" src="http://www.kevinjensen.com/wp-content/uploads/2006/09/WindowsLiveWriter/JavascriptLibraryReviews_8240/dojo.png" width="240" border="0"></a> <a href="http://www.kevinjensen.com/wp-content/uploads/2006/09/WindowsLiveWriter/JavascriptLibraryReviews_8240/mochikit%5B1%5D.png" atomicselection="true"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="188" src="http://www.kevinjensen.com/wp-content/uploads/2006/09/WindowsLiveWriter/JavascriptLibraryReviews_8240/mochikit.png" width="240" border="0"></a></p>
<p>&nbsp;<a href="http://www.kevinjensen.com/wp-content/uploads/2006/09/WindowsLiveWriter/JavascriptLibraryReviews_8240/prototype_scriptaculous%5B1%5D.png" atomicselection="true"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="37" src="http://www.kevinjensen.com/wp-content/uploads/2006/09/WindowsLiveWriter/JavascriptLibraryReviews_8240/prototype_scriptaculous.png" width="240" border="0"></a> <a href="http://www.kevinjensen.com/wp-content/uploads/2006/09/WindowsLiveWriter/JavascriptLibraryReviews_8240/yui%5B1%5D.png" atomicselection="true"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="57" src="http://www.kevinjensen.com/wp-content/uploads/2006/09/WindowsLiveWriter/JavascriptLibraryReviews_8240/yui.png" width="240" border="0"></a> </p>
<p>Well the hype of Web2.0 has certainly revitalized Javascript in the web development community.&nbsp; Just when you think it&#8217;s dead&#8230;&nbsp; I look forward to researching each of these libraries more thoroughly and then incorporate the best suited one into <a href="http://www.kineticcrm.com" target="_blank">Kinetic CRM</a>.</p>
<p>Here is the summary of the 4 main libraries as described by <a href="http://www.sitepoint.com/print/javascript-library" target="_blank">Sitepoint</a>.</p>
<h4><strong></strong>&nbsp;</h4>
<h4><strong>Dojo:</strong></h4>
<p>The great thing about Dojo is that it&#8217;s so rich in features. The Widget system provides a raft of useful controls such as a DatePicker, a RichText widget, as well as a considerable number of controls that you would expect to find in something like Microsoft&#8217;s MFC. In addition to this, you can build your own widgets on the framework using HTML, CSS and JavaScript (<a href="http://dojotoolkit.org/docs/fast_widget_authoring.html" target="_blank">see this article for details</a>).</p>
<p>But JavaScript need not be limited just to the browser, and Dojo is designed with this in mind. Dojo&#8217;s platform independence could make it an interesting platform for desktop widget development, as well as many other potential applications. As an example, Open Laszlo recently announced that it was licensing Dojo for its JavaScript implementation of the platform.
<p>Dojo&#8217;s design has quite a Java-like aesthetic without trying to be Java. In fact, I&#8217;d say Dojo utilises JavaScript as a language exceptionally well. One downside of the library&#8217;s design, though, is the sometimes long package strings that you need to type out to call the methods or instantiate the library&#8217;s objects &#8212; it would be nice if Dojo could provide a way to &#8220;mix&#8221; a package into the global or local scope. This would provide ready access to a certain package if you planned on using a lot of methods from it, although I&#8217;m not sure how easily it could be incorporated.
<p>Additionally, for all its features, Dojo is completely missing any functions that could aid the selection of DOM elements &#8212; something that&#8217;s quite fundamental to DOM Scripting. It seems to be quite a gaping hole in the library &#8212; it would be great to be able to select elements using CSS and/or XPath. Similarly, while some of the objects in the library seem to support a kind of iteration framework, Dojo is lacking in methods for iterating though arrays and collections, a task which seems to make up the bulk of DOM scripting tasks.<br />And at this point in time, documentation for Dojo is not at a premium. The official Dojo site contains some API documentation that&#8217;s far from complete, but it does have some well-written articles highlighting areas of the library. The JavaScript community has yet to embrace the daunting task of documenting Dojo, though, so independent on the topic articles are few and far between.
<p>&nbsp;<br />
<h4><strong>Mochikit:</strong></h4>
<p>First off, Mochikit&#8217;s logging framework is excellent. Simply add logging statements: </p>
<pre class="csharpcode">log(<span class="str">"This is so much better than alert"</span>);
log(<span class="str">"ERROR This thing is broke"</span>);
</pre>
<p>&nbsp;</p>
<p>You can then use Mochikit&#8217;s bookmarklet to open a log window and view your log messages. You don&#8217;t need to add anything into your pages or include any extra script &#8212; it&#8217;s truly effortless and beats&nbsp;<font color="#ff0000">alert</font> any day. </p>
<p>Mochikit also makes full use of JavaScript&#8217;s functional programming features to really enhance and simplify the library&#8217;s API. For instance, if you want to sort a group of objects by their name properties, you can use <font color="#ff0000">keyComparator</font> to create the sort function for you: </p>
<pre class="csharpcode">var sortedByName = people.sort(keyComparator(<span class="str">"name"</span>));</pre>
<p>&nbsp;</p>
<p>There&#8217;s also the useful <font color="#ff0000">counter&nbsp;</font>function. This creates a function which returns a value that&#8217;s incremented by one every time it&#8217;s called: </p>
<pre class="csharpcode">var nextId = counter();
nextId(); <span class="rem">//=&gt; 1 </span>
nextId(); <span class="rem">//=&gt; 2 </span>
nextId(); //=&gt; 3</pre>
<p>&nbsp;</p>
<p>There&#8217;s also a full set of Python-style iteration functions, such as <font color="#ff0000">forEach</font>, <font color="#ff0000">map</font> and <font color="#ff0000">filter</font>, which are sure to see heavy use. </p>
<p>As far as documentation goes, Mochikit has some very good API documentation, but details on some very basic parts of the library are a little lacking. In particular, after reading all the docs, watching the screencast and writing a few Mochikit-based scripts, I&#8217;m still unsure which version of the library is best suited for any purpose. Do I use the packed version or the main <font color="#ff0000">Mochikit.js</font>? How can I load individual parts of the library? <br />However, Mochikit does have a mailing list, so answers to these kinds of questions are, no doubt, not far away. All in all, Mochikit may not be what you&#8217;re used to in terms of a JavaScript library, but it&#8217;s beautifully designed and I&#8217;m looking forward to seeing where Bob takes it.</p>
<p>&nbsp;</p>
<h4><strong>Prototype/Script.aculo.us:</strong></h4>
<p>Convenience is king with Prototype. Most notably, the <font color="#ff0000">$</font> function (which selects elements by <font color="#ff0000">id</font>) and the <font color="#ff0000">$$</font> function (which selects elements using CSS selectors) provide extremely quick access to elements on the page. The <font color="#ff0000">$$</font>&nbsp;function even supports CSS3 selectors &#8212; most browsers don&#8217;t. When you use it in conjunction with the enumerable methods and Prototype&#8217;s other convenience methods, you can come up with some pretty concise statements. For instance, to hide all <font color="#ff0000">div</font> elements with a class of /#c#&#8221;obscene&#8221;:</p>
<pre class="csharpcode">$$(<span class="str">"div.obscene"</span>).map(Element.hide);
$$(<span class="str">"a[href='http://']"</span>).each(function(element)
 {
   Event.observe(element, <span class="str">'click'</span>, openNewWindow);
 }
);</pre>
<p>&nbsp;</p>
<p>As we all spend most of our scripting time working through lists of DOM nodes, this buys us a lot of power indeed. The compact and intuitive API really is the killer feature of Prototype for me.</p>
<p>Scriptaculous is a great, extensive effects library with solid drag-and-drop support that, again, is ridiculously easy to use. Consider this:</p>
<pre class="csharpcode"><span class="kwrd">new</span> Draggable(<span class="str">'my_element'</span>);</pre>
<p>&nbsp;</p>
<p>This produces an element that the user can drag. You can then add further configuration using object notation, like this:</p>
<pre class="csharpcode"><span class="kwrd">new</span> Draggable(<span class="str">'my_element'</span>,
 {
   revert : <span class="kwrd">true</span>
 }
);</pre>
<p>&nbsp;</p>
<p>Documentation was very limited for a long time, but recently many people have filled the gap, making Prototype one of the most widely documented of the big JavaScript libraries, albeit that that documentation is a bit splintered. There are no central API docs, but there&#8217;s a whole raft of libraries that cover parts of the library, as well as Jonathan Snook&#8217;s excellent <a href="http://www.snook.ca/archives/000531.php" target="_blank">cheat sheet detailing the entire library</a>. The <a href="http://prototypedoc.com/" target="_blank">prototypedoc.com</a> site also maintains a pretty thorough list of articles about Prototype to help you get started with the library.</p>
<p>&nbsp;</p>
<h4><strong>Yahoo UI Library:</strong></h4>
<p>The documentation provided by Yahoo! for the library is excellent. The site has formal API documentation, plenty of examples, a mailing list and some brief but clear explanations of the main features of each part of the library. However, as with Dojo and Mochikit, the library has not quite managed to capture the imagination of the developer community as much as Prototype, so independent articles are still thin on the ground at the moment. The best place to check for articles about YUI is Yahoo! developer, <a href="http://www.dustindiaz.com/" target="_blank">Dustin Diaz&#8217;s site</a> .</p>
<p>As I implied above, the event handling implementation is one of YUI&#8217;s main strengths, and the fact that it is decoupled from the other parts of the library means that it could well see a lot of use independently from the rest of the library. However, the rest of the library, while being very functional, doesn&#8217;t contain as many innovative features as the likes of Mochikit, Dojo and Prototype, and because of the long package strings, coding with YUI sometimes feel rather long-winded.</p>
<p>Yet the growing list of components is very rich. For instance, the Calendar component supports several languages and multiple date selections, and the Container classes give you the power to implement all kinds of windowed interfaces. One downside of using these components is that they tend to be very heavily dependent on the other libraries; <a href="http://dean.edwards.name/weblog/2006/05/das-bloat/" target="_new">in discussing this, Dean Edwards</a>&nbsp;highlights as an example the treeview control, which uses around 260K of JavaScript. </p>
<p>&nbsp;</p>
<h4>So Who Wins?</h4>
<p>Well, the short answer to this question is that there is no real stand-out solution that excels in all situations.</p>
<p>Prototype is the most comprehensively documented &#8212; albeit in a splintered way. It is also seemingly the most widespread library at the moment, possibly because it really excels at the kind of tasks developers complete most often, like selecting nodes and working with lists. Of course, it&#8217;s going to be the natural choice for Ruby developers because it sticks to many Ruby idioms. One other great thing about Prototype is that it has the mighty weight of Rails behind it and, as a result, there are many developers providing bug fixes and patches to Prototype. Finally, it offers a wealth of add-on libraries such as scriptaculous, Rico, and Behaviour that make it a good, solid choice for many developers. </p>
<p>On the other hand, Prototype has a very under-developed event handling framework, which is a major problem for an otherwise powerful library. Also &#8212; and this is purely a matter of taste &#8212; Prototype&#8217;s super-pragmatic approach to things (like the heavy use of the innerHTML property) can seem a little &#8220;dirty&#8221; sometimes.</p>
<p>For smaller projects, the decoupled design and fully-featured components of YUI may well be a big plus. It&#8217;s very easy to drop in the Connection Manager or the Event library and get going on some basic tasks without having to traverse too much of a learning curve. On the whole, though, it doesn&#8217;t have much to offer in terms of cool or powerful features.</p>
<p>Dojo is definitely the daddy of the bunch &#8212; you can almost always rely on it for the most powerful implementation of any feature. And Dojo&#8217;s focus on performance is an absolute godsend if you&#8217;re planning a very JavaScript-intensive application. The widget implementation also has enormous potential for building complex UIs. However it really is quite big &#8212; both in terms of its file size and the size of the API &#8212; so I wouldn&#8217;t recommend it for smaller projects.</p>
<p>In my opinion, Mochikit is by far the most well designed and well thought out of the four, and Python/Twisted/Nevow developers will definitely find its API very familiar. However, its documentation is a bit thin in some places (for instance, I&#8217;m still a little unsure as to which version of the Mochikit distribution to put in the script tag). Also, some of the idioms and functional techniques that it uses may be confusing for beginners or those who aren&#8217;t well versed in functional programming techniques. However, it really is worth a look. Mochikits&#8217;s capabilities will probably surprise you &#8212; the <font color="#ff0000">createDOM</font> function, iteration tools and the asynchronous architecture are a work of art. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.kevinjensen.com/2006/09/11/javascript-library-reviews/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
