<?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>Josh Holmes &#187; JavaScript</title>
	<atom:link href="http://www.joshholmes.com/blog/category/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.joshholmes.com/blog</link>
	<description>Random thoughts from a turbo nerd...</description>
	<lastBuildDate>Sat, 08 Jun 2013 00:28:25 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Review of Ext JS 3.0 Cookbook</title>
		<link>http://www.joshholmes.com/blog/2009/11/19/reviewofextjs30cookbook/</link>
		<comments>http://www.joshholmes.com/blog/2009/11/19/reviewofextjs30cookbook/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 12:56:21 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ExtJS]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2009/11/19/ReviewOfExtJS30Cookbook.aspx</guid>
		<description><![CDATA[For full disclosure, Packt Publishing sent me a review copy of this book. They did not ask for a positive review, just a review. &#60;update&#62;The book’s official page is at Packt Pub&#8217;s Official Ext JS 3.0 Cookbook site&#60;/update&#62; This is the first book by Jorge Ramon that I’ve read. This book is exactly what the title says that it is, a Cookbook. It’s got 109 solutions to problems solved by [...]]]></description>
				<content:encoded><![CDATA[<p><a title="Ext JS 3.0 Cookbook (9781847198709): Jorge Ramon: Books" href="http://www.packtpub.com/ext-js-3-0-cookbook?utm_source=joshholmes.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_001570"><img style="margin: 5px; float: left" border="0" align="left" src="http://images.amazon.com/images/P/1847198708.01.MZZZZZZZ.jpg"></a>
<p>For full disclosure, <a href="http://www.packtpub.com">Packt Publishing</a> sent me a review copy of this book. They did not ask for a positive review, just a review. </p>
<p>&lt;update&gt;The book’s official page is at <a href="http://www.packtpub.com/ext-js-3-0-cookbook?utm_source=joshholmes.com&amp;utm_medium=bookrev&amp;utm_content=blog&amp;utm_campaign=mdb_001570" target="_blank">Packt Pub&#8217;s Official Ext JS 3.0 Cookbook site</a>&lt;/update&gt;</p>
<p>This is the first book by Jorge Ramon that I’ve read. This book is exactly what the title says that it is, a Cookbook. It’s got 109 solutions to problems solved by <a href="http://www.amazon.com/exec/obidos/ASIN/1847198708/joshholmes-20">Ext JS 3.0</a>. I was expecting, like a lot of other books to get a fill of all of the philosophy behind what they are trying to promote but that wasn’t the case. This book just in with no nonsense and gets right to the code. </p>
<p>Every chapter is laid out exactly the same. It starts off with a list of problems solved in this chapter and a very short paragraph that gives an explanation to why these are related problems. The rest of the chapter is broken in to “recipes” all of which are laid out exactly the same as each other as well with sections “Introduction”, “How to do it”, “How it works”, an optional “There’s more” and a “See also” section. The intro is typically a short paragraph that describes when this recipe is going to be useful and optionally contains a screenshot or two of the solution. The How to do it section is almost all code with just enough text to explain where to put the code that you are looking at. The How it works section explains a little more about the events and the libraries that are at play and how they effect the code snippets that you just wrote. The There’s more section points out potential pitfalls or other benefits that this recipe brings to the table. The See also section points out related recipes that you should look at in addition to the recipe that you’re looking at. </p>
<p>So what’s my opinion on the book? </p>
<p>if you are trying to understand JavaScript and/or <a href="http://www.amazon.com/exec/obidos/ASIN/1847198708/joshholmes-20">Ext JS 3.0</a>, this book is not the book for you. There are plenty of other books out there that will step you in at a little more manageable pace. </p>
<p>However, if you are somewhat familiar with JavaScript and <a href="http://www.amazon.com/exec/obidos/ASIN/1847198708/joshholmes-20">Ext JS 3.0</a>, this is a great recipe book. The code is clean and readable. The problems are problems that I see on a semi-regular basis. I like it for what it is. It’s a handy reference and a set of problem/answers that solve discrete problems. It’s a good formula and I’m probably going to write a few blog posts in that format to feel it out. </p>
<p>The price, $49.00 or 30.99 Pounds is a little steep but if it cuts an hour or two out of your research and development time, it’s paid for itself. Also, you can download the code from <a href="http://www.packtpub.com">Packt Publishing</a> in a zip file and copy paste from that so it’s definitely going to save you time if you are using Ext JS 3.0. This was something that I missed at first to be honest and only caught when I went back to reread the preface and saw the link to where the source is zipped up. </p>
<p><a href="http://www.packtpub.com/index"><img style="margin: 5px; display: inline" title="Packt Publishing" border="0" alt="Packt Publishing" align="right" src="https://www.packtpub.com/images/PacktLogoSmall.png" width="90" height="50"></a>Another interesting note about <a href="http://www.packtpub.com">Packt Publishing</a> is that on their “About Packt Publishing” page in the back of the book, they mention that when they publish a book based on an open source project that they pay royalties back to that project. I don’t know how much they pay in royalties to the project but that’s a really class thing to do. If one is making money on an open source project, they should contribute to it somehow either through code or financially or both. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2009/11/19/reviewofextjs30cookbook/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Glimmer – A jQuery Designer</title>
		<link>http://www.joshholmes.com/blog/2009/04/28/glimmerajquerydesigner/</link>
		<comments>http://www.joshholmes.com/blog/2009/04/28/glimmerajquerydesigner/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 18:46:40 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2009/04/28/GlimmerAJQueryDesigner.aspx</guid>
		<description><![CDATA[I had heard about this effort a few weeks back but I’m thrilled that it’s public and I can talk about it now. Karsten Januszewski and some of the other whiz kids on the MIX team have put together a visual designer for jQuery called Glimmer. Right now, they’ve got a number of design wizards that you can leverage but they’ve built a great plug-in model so that you can [...]]]></description>
				<content:encoded><![CDATA[<p><img style="margin: 5px; display: inline" align="left" src="http://visitmix.com/content/files/glim4s.png" width="292" height="218">I had heard about this effort a few weeks back but I’m thrilled that it’s public and I can talk about it now. <a href="http://visitmix.com/about/karstenj">Karsten Januszewski</a> and some of the other whiz kids on the <a href="http://visitmix.com/">MIX</a> team have put together a visual designer for <a href="http://jquery.com">jQuery</a> called <a href="http://visitmix.com/lab/glimmer">Glimmer</a>. </p>
<p>Right now, they’ve got a number of design wizards that you can leverage but they’ve built a great plug-in model so that you can write your own for your favorite <a href="http://ui.jquery.com/">jQuery UI</a> plug-in. </p>
<p>Check out their video on how to leverage <a href="http://visitmix.com/lab/glimmer">Glimmer</a> and how it all came to be. </p>
<p><object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="304" height="228"><param name="source" value="http://channel9.msdn.com/App_Themes/default/VideoPlayer2009_02_24.xap" /><param name="initParams" value="m=http://mschannel9.vo.msecnd.net/o9/mix/labs/glimmer/glimmer.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://mschannel9.vo.msecnd.net/o9/mix/labs/glimmer/glimmerVideo.jpg, postid=0" /><param name="background" value="#00FFFFFF" /><a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"> <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" /> </a> </object></p>
<p>I’m really geeked and am looking forward to using this in my next web dev projects… </p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2009/04/28/glimmerajquerydesigner/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
<enclosure url="http://mschannel9.vo.msecnd.net/o9/mix/labs/glimmer/glimmer.wmv" length="37438401" type="video/x-ms-wmv" />
		</item>
		<item>
		<title>Antidotal info on JavaScript Library Ext JS</title>
		<link>http://www.joshholmes.com/blog/2009/04/07/antidotalinfoonjavascriptlibraryextjs/</link>
		<comments>http://www.joshholmes.com/blog/2009/04/07/antidotalinfoonjavascriptlibraryextjs/#comments</comments>
		<pubDate>Tue, 07 Apr 2009 22:47:57 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2009/04/07/AntidotalInfoOnJavaScriptLibraryExtJS.aspx</guid>
		<description><![CDATA[I’m in conversation with a group that’s using Ext JS for their RIA. As I haven’t used it, I thought I’d go ask at the international water fountain that is twitter about it. Anyone using Ext JS? Thoughts compared to jQuery or Prototype/Scriptaculous?about 3 hours ago from TweetDeck &#160; This is what I got back (I love twitter): parkerkrhoyt@joshholmes IMHO, Ext is more about traditional applications. jQuery is a Swiss [...]]]></description>
				<content:encoded><![CDATA[<p>I’m in conversation with a group that’s using <a href="http://extjs.com/">Ext JS</a> for their RIA. As I haven’t used it, I thought I’d go ask at the international water fountain that is <a href="http://twitter.com/joshholmes">twitter</a> about it. </p>
<p><a href="http://twitter.com/account/profile_image/joshholmes"><img style="margin: 0px 5px 0px 0px; display: inline" border="0" alt="" align="left" src="http://s3.amazonaws.com/twitter_production/profile_images/37793692/JoshOnMountCrestedButteS_bigger.jpg" width="73" height="73"></a>Anyone using Ext JS? Thoughts compared to jQuery or Prototype/Scriptaculous?<a href="http://twitter.com/joshholmes/status/1471707440">about 3 hours ago</a> from <a href="http://www.tweetdeck.com/">TweetDeck</a></p>
<p>&nbsp;</p>
<p>This is what I got back (I love twitter):</p>
<p><a href="http://twitter.com/parkerkrhoyt"><img style="margin: 5px; display: inline" alt="Kevin Hoyt" align="left" src="http://s3.amazonaws.com/twitter_production/profile_images/51152312/khoyt-headshot_normal.jpg" width="48" height="48"></a><strong><a href="http://twitter.com/parkerkrhoyt">parkerkrhoyt</a></strong>@<a href="http://twitter.com/joshholmes">joshholmes</a> IMHO, Ext is more about traditional applications. jQuery is a Swiss Army knife. Ext can do that, but rarely is used that way.<a href="http://twitter.com/parkerkrhoyt/status/1472263691">about 1 hour ago</a> from <a href="http://twitterfon.net/">TwitterFon</a> <a href="http://twitter.com/joshholmes/status/1471707440">in reply to joshholmes</a></p>
<p><a></a><a href="http://twitter.com/home?status=@parkerkrhoyt%20&amp;in_reply_to_status_id=1472263691&amp;in_reply_to=parkerkrhoyt"></a>
<p><a href="http://twitter.com/ntschutta"><img style="margin: 5px; display: inline" alt="Nate Schutta" align="left" src="http://s3.amazonaws.com/twitter_production/profile_images/61102156/nts_low_small_normal.png" width="48" height="48"></a><strong><a href="http://twitter.com/ntschutta">ntschutta</a></strong>@<a href="http://twitter.com/joshholmes">joshholmes</a> friend of mine loves ext but the learning curve can be steep and leads to lots of js config rather then HTML. I like proto a ton<a href="http://twitter.com/ntschutta/status/1472093998">about 2 hours ago</a> from <a href="http://iconfactory.com/software/twitterrific">twitterrific</a> <a href="http://twitter.com/joshholmes/status/1471707440">in reply to joshholmes</a></p>
<p><a></a><a href="http://twitter.com/home?status=@ntschutta%20&amp;in_reply_to_status_id=1472093998&amp;in_reply_to=ntschutta"></a>
<p><a href="http://twitter.com/objo"><img style="margin: 5px; display: inline" alt="Joe O'Brien" align="left" src="http://s3.amazonaws.com/twitter_production/profile_images/82028006/Photo_87_revised_normal.jpg" width="48" height="48"></a><strong><a href="http://twitter.com/objo">objo</a></strong>@<a href="http://twitter.com/joshholmes">joshholmes</a> we have tried all three and much prefer jquery. but ext is in a very different space with diff objectives<a href="http://twitter.com/objo/status/1471939618">about 2 hours ago</a> from <a href="http://www.nambu.com">Nambu</a> <a href="http://twitter.com/joshholmes/status/1471707440">in reply to joshholmes</a></p>
<p><a></a><a href="http://twitter.com/home?status=@objo%20&amp;in_reply_to_status_id=1471939618&amp;in_reply_to=objo"></a>
<p><a href="http://twitter.com/ksmarshall"><img style="margin: 5px; display: inline" alt="Kevin Marshall" align="left" src="http://s3.amazonaws.com/twitter_production/profile_images/33705482/MyPicture_normal.jpg" width="48" height="48"></a><strong><a href="http://twitter.com/ksmarshall">ksmarshall</a></strong>@<a href="http://twitter.com/joshholmes">joshholmes</a> I use extjs and jquery together. I just use extjs for some of the nice ui controls it creates and jquery for the rest of the js<a href="http://twitter.com/ksmarshall/status/1471939439">about 2 hours ago</a> from <a href="http://iconfactory.com/software/twitterrific">twitterrific</a></p>
<p><a href="http://twitter.com/dmeeker"><img style="margin: 5px; display: inline" alt="Dave Meeker" align="left" src="http://s3.amazonaws.com/twitter_production/profile_images/59463338/me_close_normal.jpg" width="48" height="48"></a><strong><a href="http://twitter.com/dmeeker">dmeeker</a></strong>@<a href="http://twitter.com/joshholmes">joshholmes</a> We&#8217;ve looked at it extensively. It seems to be a mishmosh of those other libraries, no? I can put you in touch with someone here<a href="http://twitter.com/dmeeker/status/1471737314">about 3 hours ago</a> from web <a href="http://twitter.com/joshholmes/status/1471707440">in reply to joshholmes</a></p>
<p><a></a><a href="http://twitter.com/home?status=@dmeeker%20&amp;in_reply_to_status_id=1471737314&amp;in_reply_to=dmeeker"></a>
<p><a href="http://twitter.com/jblankenburg"><img style="margin: 5px; display: inline" alt="Jeff Blankenburg" align="left" src="http://s3.amazonaws.com/twitter_production/profile_images/119021018/jeffatmix_normal.jpg" width="48" height="48"></a><strong><a href="http://twitter.com/jblankenburg">jblankenburg</a></strong>@<a href="http://twitter.com/joshholmes">joshholmes</a> My limited experience suggests it&#8217;s much more a RIA development framework than jquery, etc.<a href="http://twitter.com/jblankenburg/status/1471722235">about 3 hours ago</a> from <a href="http://www.tweetdeck.com/">TweetDeck</a> <a href="http://twitter.com/joshholmes/status/1471707440">in reply to joshholmes</a></p>
<p><a></a><a href="http://twitter.com/home?status=@jblankenburg%20&amp;in_reply_to_status_id=1471722235&amp;in_reply_to=jblankenburg"></a>
<p><a href="http://twitter.com/nkohari"><img style="margin: 5px; display: inline" alt="Nate Kohari" align="left" src="http://s3.amazonaws.com/twitter_production/profile_images/84745000/avatar_normal.jpeg" width="48" height="48"></a><strong><a href="http://twitter.com/nkohari">nkohari</a></strong>@<a href="http://twitter.com/joshholmes">joshholmes</a> ExtJS is nice if you&#8217;re looking for a full control toolkit. If you just want a low-level JS library, jQuery is the best imo.<a href="http://twitter.com/nkohari/status/1471715841">about 3 hours ago</a> from <a href="http://www.tweetdeck.com/">TweetDeck</a> <a href="http://twitter.com/joshholmes/status/1471707440">in reply to joshholmes</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2009/04/07/antidotalinfoonjavascriptlibraryextjs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Interesting Web Development Related Resources</title>
		<link>http://www.joshholmes.com/blog/2009/02/26/interestingwebdevelopmentrelatedresources/</link>
		<comments>http://www.joshholmes.com/blog/2009/02/26/interestingwebdevelopmentrelatedresources/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 23:19:19 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2009/02/26/InterestingWebDevelopmentRelatedResources.aspx</guid>
		<description><![CDATA[Like so many thing that we do in our daily development, there’s a high probability that someone has already solved the problem if you know where to look. This is just a collection of resources that I’ve found useful over time. Honestly, I’m posting these here because I need them in one place so that I can find them easily… JavaScript Resources Like a lot of you, I’ve been doing [...]]]></description>
				<content:encoded><![CDATA[<p>Like so many thing that we do in our daily development, there’s a high probability that someone has already solved the problem if you know where to look. This is just a collection of resources that I’ve found useful over time. Honestly, I’m posting these here because I need them in one place so that I can find them easily… </p>
<h3>JavaScript Resources</h3>
<p>Like a lot of you, I’ve been doing JavaScript since 1996. I’ve been pretty geeked, however, with the recent (well, last 2-4 years) emergence of a ton of JavaScript frameworks that are making this work a lot easier. </p>
<p><a href="http://dojotoolkit.org"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_23.png" width="111" height="83"></a>The first one to talk about it <a href="http://dojotoolkit.org">dojo</a>. It’s one of the more mature ones that’s out there. I’ll be honest and say that it’s been a little while since I’ve used it because I’ve started using jQuery or Prototype more often. That said, <a href="http://dojotoolkit.org">dojo</a> is one of the most complete frameworks out there. I do love it’s drag and drop support. It includes offline support and a whole lot more. Check out and play with some of it’s cool features at <a title="http://dojocampus.org/explorer" href="http://dojocampus.org/explorer">http://dojocampus.org/explorer</a>. </p>
<p>Of course, any group that has a conference called <a href="http://dojotoolkit.org/tags/dojo-beer">dojo.beer()</a> is a winner in my book. </p>
<p><a href="http://www.mochikit.com/"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_24.png" width="200" height="108"></a>The second toolkit is <a href="http://www.mochikit.com/">MochiKit</a>. I love it’s tag line of “Making JavaScript Suck Less”. I first worked with MochiKit when I was playing around with <a href="http://turbogears.org">TurboGears</a> – a Python web application stack. What it’s really outstanding at is doing async work which is particularly useful in doing AJAX and other service based work. It’s interesting to note that <a href="http://www.blueskyonmars.com/">Kevin Dangoor</a> started Turbo Gears and then at some point later ended up working for <a href="http://www.sitepen.com">SitePen</a> who paid him to work on <a href="http://dojotoolkit.org">dojo</a>. Check out demos of it in action at <a title="http://www.mochikit.com/demos.html" href="http://www.mochikit.com/demos.html">http://www.mochikit.com/demos.html</a>. </p>
<p><a href="http://www.prototypejs.org/"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_27.png" width="152" height="85"></a> </p>
<p><a href="http://www.prototypejs.org/">Prototype</a> is a slick relatively low level framework. What it does is extend the HTML DOM to include a lot of really useful features like element, class and css selectors. One of the useful things that it does is add a number of manipulations to the built in string class. This gives us startsWith, stripScripts, stripTags, isJSON, strip and a whole lot of other really useful functions.<a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_29.png"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="right" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_thumb_10.png" width="244" height="74"></a> By itself, <a href="http://www.prototypejs.org/">Prototype</a>’s useful but I have a hard time talking about it without mentioning <a href="http://script.aculo.us/">script.aculo.us</a> and some of the other plugins. <a href="http://script.aculo.us/">script.aculo.us</a> brings drag and drop support, animation frameworks a number of controls and makes it all really easy. </p>
<p>Check out demos of <a href="http://www.prototypejs.org/">Prototype</a> and <a href="http://script.aculo.us/">script.aculo.us</a> working together at <a title="http://wiki.github.com/madrobby/scriptaculous/demos" href="http://wiki.github.com/madrobby/scriptaculous/demos">http://wiki.github.com/madrobby/scriptaculous/demos</a>. </p>
<p><a href="http://jquery.com/"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_32.png" width="236" height="81"></a><a href="http://jquery.com/">jQuery</a> is a fantastic and relatively light-weight framework that’s garnering a lot of new supporters recently. Honestly, I was happy with <a href="http://dojotoolkit.org">dojo</a> and <a href="http://www.prototypejs.org/">Prototype</a> until I saw the <a href="http://blogs.msdn.com/webdevtools/archive/2009/02/24/vsdoc-for-jquery-1-3-2-now-available.aspx">Visual Studio Support for jQuery</a> at which point I started playing with it. </p>
<p>I’m a convert. <img src='http://www.joshholmes.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Now, because it’s not as low level as <a href="http://www.prototypejs.org/">Prototype</a>, <a href="http://jquery.com/">jQuery</a> doesn’t have some things like the string manipulation, but overall I’m really pleased. I find that I have to write a lot less code to accomplish the same results. And very importantly, the <a href="http://docs.jquery.com/">jQuery Documentation</a> is really good. Another really useful thing is that <a href="http://jquery.org">jQuery</a>, being a really nice citizen, has built in support to make sure that it’s <a href="http://docs.jquery.com/Using_jQuery_with_Other_Libraries">compatible with other JavaScript frameworks</a>. Throw all of that in with intellisense in Visual Studio and it makes life easy. </p>
<p>There are also a ton of different <a href="http://plugins.jquery.com/">plugins for jQuery</a> that do everything from menus to rude string manipulation (not as good as Prototype but it’s a start). </p>
<p>Some of my favorite jQuery plugins in no particular order are:</p>
<h5><a href="http://www.jqueryplugins.com/plugins/view/62/">AJAX History</a><br /><a href="http://www.jqueryplugins.com/plugins/view/97/">Mousewheel</a><br /><a href="http://www.jqueryplugins.com/plugins/view/96/">JSON</a><br /><a href="http://www.jqueryplugins.com/plugins/view/14/">Curvy Corners</a><br /><a href="http://www.jqueryplugins.com/plugins/view/22/">jCarousel</a><br /><a href="http://www.jqueryplugins.com/plugins/view/51/">xWin</a></h5>
<p><a href="http://www.asp.net/ajax/"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_35.png" width="180" height="82"></a>&nbsp; <a href="http://www.asp.net/ajax/">ASP.NET AJAX</a> is the last framework I’m going to talk about here not because there aren’t other frameworks but I haven’t used the others so I don’t really want to comment on them. </p>
<p>First, as the name does imply, what it does really well is AJAX stuff. One of the really powerful features is the JavaScript proxy generation. </p>
<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">asp:ScriptManager</span> <span class="attr">ID</span><span class="kwrd">="ScriptManager1"</span> <span class="attr">runat</span><span class="kwrd">="server"</s
pan><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">Services</span><span class="kwrd">&gt;</span>
           <span class="kwrd">&lt;</span><span class="html">asp:ServiceReference</span> <span class="attr">Path</span><span class="kwrd">="~/CustomersService.asmx"</span> <span class="kwrd">/&gt;</span>
      <span class="kwrd">&lt;/</span><span class="html">Services</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">asp:ScriptManager</span><span class="kwrd">&gt;</span></pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>That allows you to call web services as if they were methods on an object. </p>
<pre class="csharpcode"><span class="kwrd">function</span> GetCustomerByCountry()
{
      <span class="kwrd">var</span> country = $get(<span class="str">"txtCountry"</span>).value;
      InterfaceTraining.CustomersService.GetCustomersByCountry(country, OnWSRequestComplete);
}

<span class="kwrd">function</span> OnWSRequestComplete(results)
{
      <span class="kwrd">if</span> (results != <span class="kwrd">null</span>)
      {
           CreateCustomersTable(results);
           GetMap(results);
      }
}</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Second, despite the name, <a href="http://www.asp.net/ajax/">ASP.NET AJAX</a> can work with more than just <a href="http://www.asp.net">ASP.NET</a>. There’s a project on CodePlex to generate the service proxies for PHP called <a href="http://www.codeplex.com/phpmsajax">PHP MS AJAX</a> (which is a whole lot of capital letters…). </p>
<h5>How do you choose? </h5>
<p>There are a ton of different tests out there some of which you can look at the results, others of which you can actually run yourself…</p>
<p><a href="http://blog.creonfx.com/javascript/mootools-vs-jquery-vs-prototype-vs-yui-vs-dojo-comparison-revised:">Dojo vs JQuery vs MooTools vs Prototype Performance Comparison | Peter Velichkov&#8217;s Blog &#8211; Jan 19, 2009</a></p>
<p><a href="http://mootools.net/slickspeed/ ">Mootools Slickspeed Test</a></p>
<p>I like to see if there’s broad support so the project won’t go away, see if it’s actively being developed, what tooling is available, how easy the syntax is, how well it plays with others, what it brings to the table from a functionality standpoint and a whole lot more. </p>
<p>Really though, it comes down to your preferences. The good news is that it’s not the end of the world if you decide to switch frameworks. </p>
<p>My current JavaScript work is being done with a combination of <a href="http://jquery.org">jQuery</a> for most of my client side work with <a href="http://www.asp.net/ajax/">ASP.NET AJAX</a> doing my communications (and some of the controls) with a little bit of <a href="http://www.prototypejs.org/">Prototype</a> thrown in when I need to go lower level. </p>
<h3>CSS Resources</a></h3>
<p>I used to spend days getting exactly the right alignment in my HTML/CSS work. But as time has gone on, I’ve gotten more mature and realized that I don’t have to work that hard. Instead of me figuring out how to do the exact right layout should be, I’m starting to leverage the various CSS Frameworks that are out there – especially since there are so many new browsers and form factors out there from IE8 to Safari 4 to iPhone. I want a framework to </p>
<p><a href="http://960.gs/"><a href="http://960.gs/"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_17.png" width="143" height="105"></a></a>One really simple CSS Framework is the <a href="http://960.gs/">960 Grid System</a>. It’s simple and gives you a lot of flexibility. The idea is that it breaks up the page into either 12 or 16 different columns and then lets you put in areas that spread across any number of those columns. This is a direct nod to the print industry which does exactly the same thing on paper. This gives you a tremendous number of possibilities from a simple two column layout to a really complicated layouts with multiple width columns and variety. Check it out, it’s simple and it works. </p>
<p><a href="http://www.designinfluences.com/fluid960gs/"><img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_16.png" width="244" height="36"></a>&nbsp; The downside of it is that it’s a fixed width layout so it’s not always the right choice. The good news, however, is that the project has been extended by <a href="http://www.designinfluences.com/fluid960gs/">Fluid 960 Grid System</a>. <a href="http://www.mootools.net/"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="right" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_15.png" width="191" height="48"></a>This adds JavaScript to the <a href="http://960.gs/">960 Grid System</a> to give is a much more dynamic layout that resized to your screen size. It also brings dynamic menus to the table. It’s JavaScript it based off of a project called <a href="http://www.mootools.net/">MooTools</a>.&nbsp; </p>
<p><a href="http://layouts.ironmyers.com"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_18.png" width="244" height="27"></a>If the you really don’t want to think that hard and the others don’t give you what you need tied up in a neat enough package, check out <a href="http://layouts.ironmyers.com">Layouts.IronMyers.com</a>. It’s simple to use web site gives you a preview of exactly the layout that you’re looking for and lets you download a zip file with a sample HTML and CSS inside. </p>
<p><a href="http://www.freecsstemplates.org/"><a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_10.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; margin-left: 0px; border-top: 0px; margin-right: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/InterestingWebDevRelatedResources_DA24/image_thumb_4.png" width="244" height="59"></a></a>And if that’s not enough and you really just need the design and all of the layout handed to you – check out <a href="http://www.freecsstemplates.org/">FreeCSSTemplates.org</a>. It’s got a large number of Creative Commons licensed CSS templates and layouts. </p>
<h3>Conclusion</h3>
<p>I hope these resources are as useful to you as they are to me. I’ve banged my head against the wall a ton of times until I realized that someone else had already solved the problem and I can leverage their solution. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2009/02/26/interestingwebdevelopmentrelatedresources/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding Lighbox.js to the Simple Photo Gallery</title>
		<link>http://www.joshholmes.com/blog/2009/01/28/addinglighboxjstothesimplephotogallery/</link>
		<comments>http://www.joshholmes.com/blog/2009/01/28/addinglighboxjstothesimplephotogallery/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 23:47:48 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2009/01/28/AddingLighboxjsToTheSimplePhotoGallery.aspx</guid>
		<description><![CDATA[In my previous two posts, Building a Simple Photo Gallery in ASP.NET MVC Framework and Returning Thumbnails With the MVC Framework, I built a simple photo gallery on the ASP.NET MVC framework. In this post we are going to start making this a little prettier. To start with, we are going to leverage an JavaScript project called Lightbox.js that&#8217;s released under the Creative Commons Attribution 2.5 License. One cool part [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/AddingLighbox.jstotheSimplePhotoGallery_1085F/image_2.png"><img style="border-bottom: 0px; border-left: 0px; margin: 5px; border-top: 0px; border-right: 0px" border="0" alt="image" align="left" src="http://www.joshholmes.com/blog/content/binary/WindowsLiveWriter/AddingLighbox.jstotheSimplePhotoGallery_1085F/image_thumb.png" width="244" height="195"></a> In my previous two posts, <a href="http://www.joshholmes.com/blog/2009/01/27/BuildingASimplePhotoGalleryInASPNETMVCFramework.aspx">Building a Simple Photo Gallery in ASP.NET MVC Framework</a> and <a href="http://www.joshholmes.com/blog/2009/01/27/ReturningThumbnailsWithTheMVCFramework.aspx">Returning Thumbnails With the MVC Framework</a>, I built a simple photo gallery on the <a href="http://www.asp.net/mvc">ASP.NET MVC</a> framework. In this post we are going to start making this a little prettier. To start with, we are going to leverage an JavaScript project called <a href="http://lokeshdhakar.com/projects/lightbox2/">Lightbox.js</a> that&#8217;s released under the Creative <a href="http://creativecommons.org/licenses/by/2.5/">Commons Attribution 2.5 License</a>. </p>
<p>One cool part about it is that you can get a tremendous amount of functionality with little to no JavaScript coding on your own. It leverages a couple of different JavaScript libraries including <a href="http://www.prototypejs.org/">Prototype</a> and <a href="http://script.aculo.us/">Scriptaculous</a>. These do a lot of generic HTML Dom manipulation and visualization. </p>
<p>The result of leveraging Lightbox.js is that when you click on one of the thumbnails that we started showing in <a href="http://www.joshholmes.com/blog/2009/01/27/ReturningThumbnailsWithTheMVCFramework.aspx">Returning Thumbnails With the MVC Framework</a> the full sized picture will show in a really nice lightbox style effect. </p>
<p>First, you need to download the Lightbox.js project. It comes in a zip file that comes with a sample application. Unzip the contents into the appropriate folders. This means that the .js files go in your /scripts directors and the images and the css in the /content folder. </p>
<p>The cool part is that since you have the source to it all, rock on and modify it to your heart&#8217;s content. And we&#8217;re going to do a light modification right off the bat. We could have put the images from the Lightbox.js project in the /images folder but we&#8217;re already using that for something else so we put them in the /content folder. That means that you need to open up lightbox.js and change the directory of the loading and close images to point to the correct directory. </p>
<pre class="code">LightboxOptions = Object.extend({
    fileLoadingImage:        <span style="color: #a31515">'content/loading.gif'</span>,
    fileBottomNavCloseImage: <span style="color: #a31515">'content/closelabel.gif'</span>,</pre>
<p>That&#8217;s the only mod that we *need* to make at the moment. If you feel like it, you can fix the image paths in lighthouse.css as well. </p>
<pre class="code"><span style="color: #a31515">#prevLink:hover</span>, <span style="color: #a31515">#prevLink:visited:hover </span>{ <span style="color: red">background</span>: <br />        <span style="color: blue">url(Content/prevlabel.gif) left 15% no-repeat</span>; }
<span style="color: #a31515">#nextLink:hover</span>, <span style="color: #a31515">#nextLink:visited:hover </span>{ <span style="color: red">background</span>: <br />        <span style="color: blue">url(Content/nextlabel.gif) right 15% no-repeat</span>; }</pre>
<p>The only thing left to do is update the Images/index view to take advantage of our new capabilities. There are two mods to make. First, we need to include links to the lightbox.css and the required 3 JavaScript files (prototype.js, scriptaculous.js and lighbox.js). Second, we need to add a rel=&#8221;lightbox&#8221; to the anchor tag around our picture. </p>
<pre class="code"><span style="background: #ffee62">&lt;%</span><span style="color: blue">@ </span><span style="color: #a31515">Page </span><span style="color: red">Title</span><span style="color: blue">="" </span><span style="color: red">Language</span><span style="color: blue">="C#" </span><span style="color: red">MasterPageFile</span><span style="color: blue">="~/Views/Shared/Site.Master" <br />      </span><span style="color: red">AutoEventWireup</span><span style="color: blue">="true" </span><span style="color: red">CodeBehind</span><span style="color: blue">="Index.aspx.cs" <br />      </span><span style="color: red">Inherits</span><span style="color: blue">="PhotoGalleryMVC.Views.Image.Index" </span><span style="background: #ffee62">%&gt;
</span><span style="color: blue">&lt;</span><span style="color: #a31515">asp</span><span style="color: blue">:</span><span style="color: #a31515">Content </span><span style="color: red">ID</span><span style="color: blue">="Content1" </span><span style="color: red">ContentPlaceHolderID</span><span style="color: blue">="MainContent" </span><span style="color: red">runat</span><span style="color: blue">="server"&gt;
    &lt;</span><span style="color: #a31515">link </span><span style="color: red">rel</span><span style="color: blue">="stylesheet" </span><span style="color: red">href</span><span style="color: blue">="content/lightbox.css" </span><span style="color: red">type</span><span style="color: blue">="text/css" </span><span style="color: red">media</span><span style="color: blue">="screen" /&gt;
    &lt;</span><span style="color: #a31515">script </span><span style="color: red">src</span><span style="color: blue">="scripts/prototype.js" </span><span style="color: red">type</span><span style="color: blue">="text/javascript"&gt;&lt;/</span><span style="color: #a31515">script</span><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">script </span><span style="color: red">src</span><span style="color: blue">="scripts/scriptaculous.js?load=effects,builder" </span><span style="color: red">type</span><span style="color: blue">="text/javascript"&gt;&lt;/</span><span style="color: #a31515">script</span><span style="color: blue">&gt;
    &lt;</span><span style="color: #a31515">script </span><span style="color: red">src</span><span style="color: blue">="scripts/lightbox.js" </span><span style="color: red">type</span><span style="color: blue">="text/javascript"&gt;&lt;/</span><span style="color: #a31515">script</span><span style="color: blue">&gt;

    &lt;</span><span style="color: #a31515">p</span><span style="color: blue">&gt;</span><span style="background: #ffee62">&lt;%</span><span style="color: blue">= </span>Html.ActionLink(<span style="color: #a31515">"Add your own image"</span>, <span style="color: #a31515">"Upload"</span>, <span style="color: #a31515">"Image"</span>)<span style="background: #ffee62">%&gt;</span><span style="color: blue">&lt;/</span><span style="color: #a31515">p</span><span style="color: blue">&gt;
       </span><span style="background: #ffee62">&lt;%</span> <span style="color: blue">foreach </span>(<span style="color: blue">var </span>image <span style="color: blue">in </span>ViewData.Model) { <span style="background: #ffee62">%&gt;
</span>   <span style="color: blue">&lt;</span><span style="color: #a31515">span </span><span style="color: red">class</span><span style="color: blue">="image"&gt;
        &lt;</span><span style="color: #a31515">a </span><span style="color: red">href</span><span style="color: blue">="/images/</span><span style="background: #ffee62">&lt;%</span>= image.Path <span style="background: #ffee62">%&gt;</span><span style="color: blue">" </span><span style="color: red">rel</span><span style="color: blue">="lightbox"&gt;<br />            &lt;</span><span style="color: #a31515">img </span><span style="color: red">src</span><span style="color: blue">="/image/thumbnail/</span><span style="background: #ffee62">&lt;%</span>= image.Path <span style="background: #ffee62">%&gt;</span><span style="color: blue">" /&gt;<br />        &lt;/</span><span style="color: #a31515">a</span><span style="color: blue">&gt;
        &lt;</span><span style="color: #a31515">span </span><span style="color: red">class</span><span style="color: blue">="description"&gt;</span><span style="background: #ffee62">&lt;%</span><span style="color: blue">= </span>image.Description <span style="background: #ffee62">%&gt;</span><span style="color: blue">&lt;/</span><span style="color: #a31515">span</span><span style="color: blue">&gt;
   &lt;/</span><span style="color: #a31515">span</span><span style="color: blue">&gt;
</span><span style="background: #ffee62">&lt;%</span> }<span style="background: #ffee62">%&gt;

</span><span style="color: blue">&lt;/</span><span style="color: #a31515">asp</span><span style="color: blue">:</span><span style="color: #a31515">Content</span><span style="color: blue">&gt;</span></pre>
<p>It&#8217;s that simple. This will render a really nice little lightbox effect on our images. </p>
<p><a href="http://rss.joshholmes.com/joshholmes">Stay tuned for future posts</a> about styling the CSS, paging the pictures and a whole lot more. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2009/01/28/addinglighboxjstothesimplephotogallery/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Ann Arbor Day of .Net</title>
		<link>http://www.joshholmes.com/blog/2009/01/24/annarbordayofnet/</link>
		<comments>http://www.joshholmes.com/blog/2009/01/24/annarbordayofnet/#comments</comments>
		<pubDate>Sat, 24 Jan 2009 22:14:15 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[Day of .NET]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Speaking]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2007/05/09/AnnArborDayOfNet.aspx</guid>
		<description><![CDATA[Wow I&#8217;ve been swamped. There&#8217;s so much to blog about in the past couple of weeks so I&#8217;m just going to catch some of the highlights. Ann Arbor Day of .NET was on 5/5/2007. It was fantastic! It sold out at 250 people and of that there were 210 people show up. That&#8217;s actually really good as most free events have a 40% droppoff and they had less than 20% [...]]]></description>
				<content:encoded><![CDATA[<p>Wow I&#8217;ve been swamped. There&#8217;s so much to blog about in the past couple of weeks so I&#8217;m just going to catch some of the highlights. </p>
<p>Ann Arbor Day of .NET was on 5/5/2007. It was fantastic! It sold out at 250 people and of that there were <strong><em>210</em></strong> people show up. That&#8217;s actually really good as most free events have a 40% droppoff and they had less than 20% droppoff. The only downside on the day was that with less than a 20% droppoff &#8211; pizza was a little short at lunch. </p>
<p>They are actually thinking about going to every 6 months instead of every 12 months. I think this would be fantastic! </p>
<p>I kicked off the day with a session on User Experience technologies at Microsoft. I borrowed from some of the materials that we are putting together for the upcoming <a href="http://www.arcready.com/">ArcReady</a> (Check the site for dates and times across the entire central region &#8211; Detroit on 5/25 in two weeks for all those that attended Day of .Net). We dipped into <a href="http://windowsclient.net/">WPF</a>, <a href="http://ajax.asp.net/default.aspx?tabid=47">AJAX</a>&nbsp;and <a href="http://www.silverlight.net">Silverlight</a>. My favorite demo is the <a href="http://delay.members.winisp.net/SilverlightAirlinesDemo/">Silverlight Airlines Demo</a>. It shows a truly out of the box user experience that&#8217;s not all glitz and glammor but a truly solid UI for a true business application. Many of the demos, while showing off the platform really well, are marketing apps that show lots of 3D and animation. My customers often look at the glitzy demos and say that they are not doing 3D so they don&#8217;t look at the technologies. What they are missing is that there are real benifits here with enabling truly rich interfaces that go well beyond text and pictures. </p>
<p>I had two more 30 minute sessions. In both of those sessions the overwhelming requests were to have more <a href="http://www.silverlight.net">Silverlight</a>&nbsp;content. I had nothing prepared for these sessions but they went really well. In the first session, I pulled <a href="http://www.donburnett.com/">Don Burnett,</a> who started <a href="http://www.michiganinteractivedesigners.org">Michigan Interactive Designers</a>, out of the crowd and asked him to do a tour around <a href="http://expressionblend.com/">Expression Blend</a> and <a href="http://www.silverlight.net">Silverlight</a>. He got up, completely unscripted, and did a fantastic job! I will definitely be bringing him in to do more demos and presentations&nbsp;- especially when we have a designer based crowd. It turns out that he used to work with <a href="http://www.srtsolutions.com/public/blog/20574">Bill Wagner</a> (my former business partner when I was at SRT Solutions) on the Lion King Animated Storybook. </p>
<p>In the second session, I was on my own but I showed Top Banana, the DLRConsole (python and javascript version &#8211; IronRuby will be released as a CTP from CodePlex later this year) and talked about the .NET support in Silverlight 1.1 Alpha. Yes &#8211; I actually wrote some Python and did a simple overview for people at the conference. It was a fun day!</p>
<p>Here are some of the resources that we talked about during the three talks:</p>
<p>•Windows Forms @ .NET FX Developer Center<br /><a href="http://windowsclient.net">http://windowsclient.net</a></p>
<p>•WPF @ MSDN Developer Center<br /><a href="http://msdn.microsoft.com/winfx/reference/presentation/default.aspx">http://msdn.microsoft.com/winfx/reference/presentation/default.aspx</a></p>
<p>•.NET 3.0 (WPF, WCF, WF) Community Site<br /><a href="http://windowsclient.net/">http://windowsclient.net/</a></p>
<p>•Silverlight<br /><a href="http://www.silverlight.net">http://www.silverlight.net</a></p>
<p>•ASP.NET AJAX @ ASP.NET Developer Center<br /><a href="http://msdn.microsoft.com/winfx/reference/presentation/default.aspx">http://msdn.microsoft.com/winfx/reference/presentation/default.aspx</a></p>
<p>•ASP.NET AJAX Community Site<br /><a href="http://ajax.asp.net/">http://ajax.asp.net/</a></p>
<p>•DirectX @ DirectX Development Center<br /><a href="http://msdn.microsoft.com/directx/">http://msdn.microsoft.com/directx/</a></p>
<p>•Microsoft Visual Studio @ Visual Studio Developer Center<br /><a href="http://msdn.microsoft.com/vstudio/">http://msdn.microsoft.com/vstudio/</a></p>
<p>•Microsoft Expression<br /><a href="http://www.microsoft.com/expression">www.microsoft.com/expression</a></p>
<p>&nbsp;</p>
<p>Day of .NET site</p>
<p><a href="http://www.dayofdotnet.org/">Link to Day of .Net in Ann Arbor 2007 &#8211; Home</a> </p>
<p>Don Burnett&#8217;s write-up of the event. </p>
<p><a href="http://blog.donburnett.com/2007/05/eastern-michigan-day-of-dot-net.html">Link to Don.NET&#8217;s WPF Designers Blog: Eastern Michigan Day of Dot Net</a> </p>
<p>&nbsp;</p>
</p>
<div style="PADDING-BOTTOM: 0px; MARGIN: 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; DISPLAY: inline; PADDING-TOP: 0px" id=0767317B-992E-4b12-91E0-4F059A8CECA8:04369cb0-5bd6-4d8e-a177-221567554caa class=wlWriterSmartContent contentEditable=false>Technorati tags: <a href="http://technorati.com/tags/Iron%20Python" rel=tag>Iron Python</a>, <a href="http://technorati.com/tags/Iron%20Ruby" rel=tag>Iron Ruby</a>, <a href="http://technorati.com/tags/Silverlight" rel=tag>Silverlight</a>, <a href="http://technorati.com/tags/Don%20Burnett" rel=tag>Don Burnett</a>, <a href="http://technorati.com/tags/Day%20of%20.NET" rel=tag>Day of .NET</a>, <a href="http://technorati.com/tags/WPF" rel=tag>WPF</a>, <a href="http://technorati.com/tags/AJAX" rel=tag>AJAX</a>, <a href="http://technorati.com/tags/DLRConsole" rel=tag>DLRConsole</a></div></p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2009/01/24/annarbordayofnet/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Playing with JSON</title>
		<link>http://www.joshholmes.com/blog/2009/01/20/playingwithjson/</link>
		<comments>http://www.joshholmes.com/blog/2009/01/20/playingwithjson/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 18:00:39 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[JSON]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2009/01/20/PlayingWithJSON.aspx</guid>
		<description><![CDATA[I was asked on Friday by a friend how one can consume JSON in Silverlight. At the time, I just said start with the System.Json namespace and I&#8217;ll get you a sample later. Well, here&#8217;s a sample and a peek into my head because I couldn&#8217;t just stop with creating the sample that he needed. Download Solution &#8211; PlayingWithJSON.zip *Update &#8211; gotta do a quick shoutout to Leon Gersing for [...]]]></description>
				<content:encoded><![CDATA[<p><a title="Silverlight Plasma Reactor" href="http://www.flickr.com/photos/29995766@N07/2810870730/"><img class="flickr" border="0" hspace="5" alt="Silverlight Plasma Reactor" vspace="5" align="left" src="http://static.flickr.com/3093/2810870730_fcd17a398c_m.jpg"></a>I was asked on Friday by a friend how one can consume JSON in Silverlight. At the time, I just said start with the <a href="http://msdn.microsoft.com/en-us/library/system.json(VS.95).aspx">System.Json</a> namespace and I&#8217;ll get you a sample later. Well, here&#8217;s a sample and a peek into my head because I couldn&#8217;t just stop with creating the sample that he needed. </p>
</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px" id="scid:18d43e01-4549-4fde-8ca6-c7b4b7385fac:10eb60d9-2305-4981-8cd1-e503ebfd55a2" class="wlWriterSmartContent">
<p>Download Solution &#8211; <a href="http://www.joshholmes.com/content/binary/WindowsLiveWriter/PlayingwithJSON_11097/PlayingWithJSON_4.zip">PlayingWithJSON.zip</a></p>
</div>
<p>*Update &#8211; gotta do a quick shoutout to <a href="http://www.fallenrogue.com">Leon Gersing</a> for his passionate defense of JavaScript and JSON. It&#8217;s part of what inspired me to spend as much time on this as I did. </p>
</p>
<h5>Really short JSON overview</h5>
<p><a href="http://json.org/">JSON</a>, for those of you who don&#8217;t know, is a really simple data format heavily used with <a href="http://jsconf2009.com/">JavaScript</a>. It&#8217;s a lot smaller and lighter than XML. </p>
<p>This is the JSON that I&#8217;m using in this example. As you can see, it&#8217;s just name/value pairs with a little bit of extra formatting. Curly Braces separate objects in a list. Commas separate values. Colons separate the names from the values.&nbsp; </p>
<p>[<br />{"FirstName":"Etta","LastName":"James","Url":"http:\/\/www.etta-james.com\/"},{"FirstName":"Billie","LastName":"Holiday","Url":"http:\/\/www.billie-holiday.net\/"},{"FirstName":"Ella","LastName":"Fitzgerald","Url":"http:\/\/en.wikipedia.org\/wiki\/Ella_Fitzgerald"}]<br />}</p>
<h5>Creating the JSON service with ASP.NET MVC Framework</h5>
<p>The first thing that I did was slap together an <a href="http://www.asp.net/mvc">ASP.NET MVC</a> Framework application to produce the JSON and host the Silverlight application. This was remarkably easy. I decided against going through the effort of creating a database because that&#8217;s not really the point of the exercise. </p>
<p>I created a simple class that to fill out and serialize and then returned it from a controller. </p>
<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">Artist
</span>{
    <span style="color: blue">public string </span>FirstName { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }
    <span style="color: blue">public string </span>LastName { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }
    <span style="color: blue">public string </span>Url { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }
}</pre>
<p>The next step was to create a simple controller that would return my list as JSON. As you can see, there&#8217;s a JsonResult that you can return right from a controller method. </p>
<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">ArtistsController </span>: <span style="color: #2b91af">Controller
</span>{
    <span style="color: blue">public </span><span style="color: #2b91af">JsonResult </span>GetAll()
    {
        <span style="color: #2b91af">List</span>&lt;<span style="color: #2b91af">Artist</span>&gt; artists = <span style="color: blue">new </span><span style="color: #2b91af">List</span>&lt;<span style="color: #2b91af">Artist</span>&gt;();

        artists.Add(<span style="color: blue">new </span><span style="color: #2b91af">Artist</span>(<span style="color: #a31515">"Etta"</span>, <span style="color: #a31515">"James"</span>, <span style="color: #a31515">"http://www.etta-james.com/"</span>));
        artists.Add(<span style="color: blue">new </span><span style="color: #2b91af">Artist</span>(<span style="color: #a31515">"Billie"</span>, <span style="color: #a31515">"Holiday"</span>, <span style="color: #a31515">"http://www.billie-holiday.net/"</span>));
        artists.Add(<span style="color: blue">new </span><span style="color: #2b91af">Artist</span>(<span style="color: #a31515">"Ella"</span>, <span style="color: #a31515">"Fitzgerald"</span>, <span style="color: #a31515">"http://en.wikipedia.org/wiki/Ella_Fitzgerald"</span>));

        <span style="color: blue">return </span>Json(artists);
    }
}</pre>
<p>To test it, I just browsed to <a href="http://localhost:mylocalport/artists/getall">http://localhost:mylocalport/artists/getall</a>. That returned the JSON file. As the browser doesn&#8217;t display JSON auto-magically, it prompted me to download a file and save it off. </p>
<p>Now, take notice of the URL. The ASP.NET MVC Framework is producing what&#8217;s called a RESTful Service. The parameters and all are simply in the URL. In the URL, &#8220;artists&#8221; takes us to a particular Controller called the ArtistsController and the &#8220;getall&#8221; calls the &#8220;GetAll()&#8221; method on that controller. We can further specify parameters and the like in the URL. <a href="http://weblogs.asp.net/scottgu/">Scott Guthrie</a> has a great article that explains the URL routing and all at <a title="http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx" href="http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx">http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx</a>. </p>
<p>Now that we are producing JSON from a services, we are ready to create a client. </p>
<h5>Getting the JSON from the RESTful service. </h5>
<p>The first client that I tried was the straight up System.Json namespace client. Since we are using a RESTful service, we can&#8217;t generate the proxy object in the same way that we&#8217;re used to with SOAP. Instead, we need to leverage the WebClient object.&nbsp; This is done as follows:</p>
<pre class="code"><span style="color: blue">void </span>mainButton_Click(<span style="color: blue">object </span>sender, <span style="color: #2b91af">RoutedEventArgs </span>e)
{
    <span style="color: #2b91af">Uri </span>serviceUri = <span style="color: blue">new </span><span style="color: #2b91af">Uri</span>(<span style="color: #a31515">"/Artists/GetAll"</span>, <span style="color: #2b91af">UriKind</span>.Relative);
    <span style="color: #2b91af">WebClient </span>downloader = <span style="color: blue">new </span><span style="color: #2b91af">WebClient</span>();
    downloader.OpenReadCompleted += <span style="color: blue">new </span><span style="color: #2b91af">OpenReadCompletedEventHandler</span>(downloader_OpenReadCompleted);
    downloader.OpenReadAsync(serviceUri);
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Notice that the URL that I&#8217;m using is relative. You can specify the full URL if the service is not on your own server. These calls, as all calls in Silverlight, are async. Therefore I wire up the downloader_OpenReadCompleted event and call OpenReadAsync. Simple enough?</p>
<h5>Leveraging System.Json</h5>
<p>Once the downloader returns, I can get the result off of the event arguments. Load is a static method on the JsonArray that will automatically parse out the results from the stream object. Then, I can just loop over the objects in the array and use them to fill out my own type that I&#8217;m ready to databind to. </p>
<pre class="code"><span style="color: blue">void </span>downloader_OpenReadCompleted(<span style="color: blue">object </span>sender, <span style="color: #2b91af">OpenReadCompletedEventArgs </span>e)
{
    <span style="color: #2b91af">JsonArray </span>jsonArray = (<span style="color: #2b91af">JsonArray</span>)<span style="color: #2b91af">JsonArray</span>.Load(e.Result);

    <span style="color: #2b91af">List</span>&lt;<span style="color: #2b91af">Artist</span>&gt; artists = <span style="color: blue">new </span><span style="color: #2b91af">List</span>&lt;<span style="color: #2b91af">Artist</span>&gt;();

    <span style="color: blue">foreach </span>(<span style="color: #2b91af">JsonObject </span>jsonArtist <span style="color: blue">in </span>jsonArray)
    {
        <span style="color: #2b91af">Artist </span>artist = <span style="color: blue">new </span><span style="color: #2b91af">Artist</span>();
        artist.FirstName = jsonArtist[<span style="color: #a31515">"FirstName"</span>];
        artist.LastName = jsonArtist[<span style="color: #a31515">"LastName"</span>];
        artist.Url = jsonArtist[<span style="color: #a31515">"Url"</span>];

        artists.Add(artist);
    }

    dataGrid1.ItemsSource = artists;
}
</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>This was fairly straight forward and simple, but I wasn&#8217;t ready to be done yet. </p>
<h5>Leveraging LINQ</h5>
<p>The next thing is to try LINQ against this JsonArray and see what happens. </p>
<pre class="code"><span style="color: blue">void </span>downloader_OpenReadCompleted(<span style="color: blue">object </span>sender, <span style="color: #2b91af">OpenReadCompletedEventArgs </span>e)
{
    <span style="color: #2b91af">JsonArray </span>jsonArray = (<span style="color: #2b91af">JsonArray</span>)<span style="color: #2b91af">JsonArray</span>.Load(e.Result);

    <span style="color: blue">var </span>query = <span style="color: blue">from </span>artist <span style="color: blue">in </span>jsonArray
                <span style="color: blue">select new </span><span style="color: #2b91af">Artist
                </span>{
                    FirstName = (<span style="color: blue">string</span>)artist[<span style="color: #a31515">"FirstName"</span>],
                    LastName = (<span style="color: blue">string</span>)artist[<span style="color: #a31515">"LastName"</span>],
                    Url = (<span style="color: blue">string</span>)artist[<span style="color: #a31515">"Url"</span>],
                };

    <span style="color: #2b91af">List</span>&lt;<span style="color: #2b91af">Artist</span>&gt; artists = query.ToList() <span style="color: blue">as </span><span style="color: #2b91af">List</span>&lt;<span style="color: #2b91af">Artist</span>&gt;;
    dataGrid1.ItemsSource = artists;
}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Personally, I think that the LINQ version is a lot more powerful. It&#8217;s not immediately obvious in this simple example but there&#8217;s a ton that I could do with the LINQ query from filling out sub-types to filtering and so on. </p>
<h5>JSON in JavaScript </h5>
<p><a title="JavaScript Reference" href="http://www.flickr.com/photos/98624608@N00/64210142/"><img class="flickr" border="0" hspace="5" alt="JavaScript Reference" vspace="5" align="left" src="http://static.flickr.com/33/64210142_335dfd530e_m.jpg"></a>But then I started thinking about all of the different ways that one can get and parse out JSON directly in JavaScript (I mean it does have JavaScript right in the name). </p>
<p>First, I did it the old school way that I used to do back when I was doing a ton of JavaScript development. </p>
<p>Quick note here &#8211; before you start copying this code &#8211; this is NOT the way to do this in the modern era. I did it to prove a point. You really need to be leveraging one of the many great JavaScript frameworks that are out there in order to accomplish your JavaScript today. I&#8217;ll get to those in a minute. </p>
<p>Short version, you&#8217;re going to be doing an XMLHttpRequest directly. When that returns you&#8217;ll get an &#8220;onreadystatechange&#8221; event which you can respond to. If it&#8217;s actually ready, then you can call a JavaScript function called eval that will return and array of objects parsed out from the string that you pass in. </p>
<pre class="code"><span style="color: blue">&lt;</span><span style="color: #a31515">script </span><span style="color: red">language</span><span style="color: blue">="javascript" </span><span style="color: red">type</span><span style="color: blue">="text/javascript"&gt;
    function </span>GetJson(url) {
        <span style="color: green">// Create xmlhttprequest object
        </span><span style="color: blue">var </span>xmlhttp = <span style="color: blue">null</span>;
        <span style="color: blue">if </span>(window.XMLHttpRequest) {
            xmlhttp = <span style="color: blue">new </span>XMLHttpRequest();
            <span style="color: green">//make sure that Browser supports overrideMimeType
            </span><span style="color: blue">if </span>(<span style="color: blue">typeof </span>xmlhttp.overrideMimeType != <span style="color: #a31515">'undefined'</span>) {
                xmlhttp.overrideMimeType(<span style="color: #a31515">'text/xml'</span>);
            }
        }
        <span style="color: blue">else if </span>(window.ActiveXObject) {
            xmlhttp = <span style="color: blue">new </span>ActiveXObject(<span style="color: #a31515">"Microsoft.XMLHTTP"</span>);
        }
        <span style="color: blue">else </span>{
            alert(<span style="color: #a31515">'Perhaps your browser does not support xmlhttprequests?'</span>);
        }

        <span style="color: green">// Create an HTTP GET request
        </span>xmlhttp.open(<span style="color: #a31515">'GET'</span>, url, <span style="color: blue">true</span>);

        <span style="color: green">// Set the callback function
        </span>xmlhttp.onreadystatechange = <span style="color: blue">function</span>() {
            <span style="color: blue">if </span>(xmlhttp.readyState == 4 &amp;&amp; xmlhttp.status == 200) {
                <span style="color: blue">var </span>json = xmlhttp.responseText;

                <span style="color: blue">var </span>artists = eval(json);

                <span style="color: blue">var </span>newArtistList;
                newArtistList = <span style="color: #a31515">"&lt;ul&gt;"</span>;

                <span style="color: blue">for </span>(<span style="color: blue">var </span>i <span style="color: blue">in </span>artists) {
                    <span style="color: blue">var </span>artist = artists[i];
                    newArtistList += <span style="color: #a31515">"&lt;li&gt;"
                    </span>+ artist.FirstName + <span style="color: #a31515">" "
                    </span>+ artist.LastName
                    + <span style="color: #a31515">"&lt;/li&gt;"
                </span>}

                newArtistList += <span style="color: #a31515">"&lt;ul&gt;"</span>;

                outputControl = document.getElementById(<span style="color: #a31515">"divOutput"</span>);
                outputControl.innerHTML = newArtistList;
            } <span style="color: blue">else </span>{
                <span style="color: green">// waiting for the call to complete
            </span>}
        };

        <span style="color: green">// Make the actual request
        </span>xmlhttp.send(<span style="color: blue">null</span>);
    }
<span style="color: blue">&lt;/</span><span style="color: #a31515">script</span><span style="color: blue">&gt;</span></pre>
<p><a href="http://11011.net/software/vspaste"></a>Alright, that&#8217;s a lot of JavaScript to get through and understand. There are multiple possible problems here. First, that&#8217;s just a ton of code. Second, the same eval function that you are calling here is the same eval function used to dynamically execute a piece of JavaScript in a string. This means that you&#8217;re open to all kinds of possible attacks. Finally, there are a ton of frameworks that have come up in the past handful of years. </p>
<p>So, let&#8217;s go look at some of those frameworks. </p>
<h5>Leveraging MS AJAX</h5>
<p>The AJAX framework that I&#8217;ve been trying to learn lately is the <a href="http://ajax.asp.net/">MS AJAX</a> one. It&#8217;s got a lot of power. First, notice that the WebRequest actually looks a lot like what I did in C#. Next, notice the JavaScriptSerializer object. This gives me some nice and easy serialization to and from JSON. The reason to use this is that it&#8217;s a much safer mechanism than eval. Lastly, notice the $get at the end. This is a nice and easy selector that does all of the heavy lifting of finding the object in the DOM and the like. </p>
<pre class="code"><span style="color: blue">&lt;</span><span style="color: #a31515">script </span><span style="color: red">src</span><span style="color: blue">="../../Scripts/MicrosoftAjax.js" </span><span style="color: red">type</span><span style="color: blue">="text/javascript"&gt;&lt;/</span><span style="color: #a31515">script</span><span style="color: blue">&gt;</span>
<span style="color: blue">&lt;</span><span style="color: #a31515">script </span><span style="color: red">language</span><span style="color: blue">="javascript" </span><span style="color: red">type</span><span style="color: blue">="text/javascript"&gt;
    function </span>GetJson() {
        <span style="color: blue">var </span>request = <span style="color: blue">new </span>Sys.Net.WebRequest();
        request.get_headers()[<span style="color: #a31515">'Content-Type'</span>] = <span style="color: #a31515">'application/json; charset=utf-8'</span>;
        request.set_url(<span style="color: #a31515">'/Artists/GetAll'</span>);

        request.add_completed(Function.createDelegate(<span style="color: blue">null</span>, DisplayArtists));
        request.invoke();
    }

    <span style="color: blue">function </span>DisplayArtists(executor) {
        <span style="color: blue">if </span>(executor.get_responseAvailable()) {
            <span style="color: blue">var </span>json = executor.get_responseData();
            <span style="color: blue">var </span>artists = Sys.Serialization.JavaScriptSerializer.deserialize(json);

            <span style="color: blue">var </span>newArtistList;
            newArtistList = <span style="color: #a31515">"&lt;ul&gt;"</span>;

            <span style="color: blue">for </span>(<span style="color: blue">var </span>i <span style="color: blue">in </span>artists) {
                <span style="color: blue">var </span>artist = artists[i];
                newArtistList += <span style="color: #a31515">"&lt;li&gt;"
                </span>+ artist.FirstName + <span style="color: #a31515">" "
                </span>+ artist.LastName
                + <span style="color: #a31515">"&lt;/li&gt;"
            </span>}

            newArtistList += <span style="color: #a31515">"&lt;ul&gt;"</span>;

            $get(<span style="color: #a31515">"divOutput"</span>).innerHTML = newArtistList;
        }
    }
<span style="color: blue">&lt;/</span><span style="color: #a31515">script</span><span style="color: blue">&gt;
</span></pre>
<p>This is a lot less code and a lot safer than what I was doing in raw JavaScript. However, I thought I should try this with a few more frameworks. </p>
<h5>Leveraging Prototype</h5>
<p><a href="http://www.joshholmes.com/content/binary/WindowsLiveWriter/PlayingwithJSON_11097/image_4.png"><img style="border-right-width: 0px; margin: 5px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" align="left" src="http://www.joshholmes.com/content/binary/WindowsLiveWriter/PlayingwithJSON_11097/image_thumb_1.png" width="173" height="81"></a> A framework that I&#8217;ve used for a while and really like is <a href="http://prototypejs.org/">Prototype</a>. </p>
<p>This is a whole lot less code. Notice the &#8220;Ajax.Request&#8221;. That packages up all of the work of doing the network call behind one simple to use function. And on the response is a nice and easy method called evalJSON that will parse out the JSON string to an array of objects that you can loop over. Finally, notice the $() selector. </p>
<pre class="code"><span style="color: blue">&lt;</span><span style="color: #a31515">script </span><span style="color: red">src</span><span style="color: blue">="../../Scripts/prototype-1.6.0.2.js" </span><span style="color: red">type</span><span style="color: blue">="text/javascript"&gt;&lt;/</span><span style="color: #a31515">script</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">script </span><span style="color: red">language</span><span style="color: blue">="javascript" </span><span style="color: red">type</span><span style="color: blue">="text/javascript"&gt;
    function </span>GetJson() {
        <span style="color: blue">new </span>Ajax.Request(<span style="color: #a31515">'/Artists/GetAll'</span>, {
            method: <span style="color: #a31515">'get'</span>,
            onSuccess: DisplayArtists
        })
      }

      <span style="color: blue">function </span>DisplayArtists(transport) {
        <span style="color: blue">var </span>json = transport.responseText.evalJSON();
        <span style="color: blue">var </span>newArtistList;
        newArtistList = <span style="color: #a31515">"&lt;ul&gt;"</span>;

        json.each(<span style="color: blue">function</span>(artist) {
            newArtistList += <span style="color: #a31515">"&lt;li&gt;"
                    </span>+ artist.FirstName + <span style="color: #a31515">" "
                    </span>+ artist.LastName
                    + <span style="color: #a31515">"&lt;/li&gt;"
        </span>});

        newArtistList += <span style="color: #a31515">"&lt;ul&gt;"</span>;

        $(<span style="color: #a31515">"divOutput"</span>).insert(newArtistList);
    }
<span style="color: blue">&lt;/</span><span style="color: #a31515">script</span><span style="color: blue">&gt;
</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>I liked this a lot. A feature that I didn&#8217;t take advantage of is that <a href="http://script.aculo.us/">Scriptaculous</a>, which is a fantastic set of JavaScript libraries for visualization, weaves in with <a href="http://prototypejs.org/">Prototype</a> really easily. </p>
<h5>Leveraging <a href="http://jquery.com/">jQuery</a></h5>
<p><a href="http://www.joshholmes.com/content/binary/WindowsLiveWriter/PlayingwithJSON_11097/image_2.png"><img style="border-right-width: 0px; margin: 5px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" align="left" src="http://www.joshholmes.com/content/binary/WindowsLiveWriter/PlayingwithJSON_11097/image_thumb.png" width="244" height="75"></a> The last JavaScript framework that I tried was <a href="http://jquery.com/">jQuery</a>. One extra cool part about this one for me is that I get intellisense right in Visual Studio. Check out Scott Guthrie&#8217;s post on <a href="http://weblogs.asp.net/scottgu/archive/2008/11/21/jquery-intellisense-in-vs-2008.aspx">jQuery Intellisense in VS2008</a> to see how to enable it. </p>
<p>Notice that it&#8217;s got the same type of easy to use function that packages up the call to get the JSON. Since it knows that it&#8217;s JSON, the variable returned to the callback is already parsed out into a usable object. And lastly, notice the $() selector again. There is a subtle difference between this one and the Prototype selector in that the <a href="http://jquery.com/">jQuery</a> one uses a # to signify that it&#8217;s looking for an ID, . to signify objects with a given class and so on. </p>
<pre class="code"><span style="color: blue">&lt;</span><span style="color: #a31515">script </span><span style="color: red">language</span><span style="color: blue">="javascript" </span><span style="color: red">type</span><span style="color: blue">="text/javascript"&gt;
    function </span>GetJson() {
        $.getJSON(<span style="color: #a31515">"/Artists/GetAll"</span>,
          {},
          DisplayArtists);
      }

      <span style="color: blue">function </span>DisplayArtists(data) {
          <span style="color: blue">var </span>newArtistList;
        newArtistList = <span style="color: #a31515">"&lt;ul&gt;"</span>;

        <span style="color: blue">for</span>(<span style="color: blue">var </span>i = 0; i &lt; data.length;i++)
        {
            <span style="color: blue">var </span>artist = data[i];
            newArtistList += <span style="color: #a31515">"&lt;li&gt;"
                </span>+ artist.FirstName + <span style="color: #a31515">" "
                </span>+ artist.LastName
                + <span style="color: #a31515">"&lt;/li&gt;"
        </span>}

        newArtistList += <span style="color: #a31515">"&lt;ul&gt;"</span>;

        $(<span style="color: #a31515">"#divOutput"</span>).html(newArtistList);
    }
<span style="color: blue">&lt;/</span><span style="color: #a31515">script</span><span style="color: blue">&gt;
</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Now that I was done playing with different JavaScript libraries, I thought I&#8217;d see if I could piece it all back together. </p>
<h5>Leveraging jQuery and Silverlight</h5>
<p>I decided to try <a href="http://jquery.com/">jQuery</a> and Silverlight together, leveraging <a href="http://jquery.com/">jQuery</a> to get and parse the JSON and Silverlight to do the display. This turned out to be remarkably simple. </p>
<p>First, in order for Silverlight to call into the JavaScript, you just have to call HtmlPage.Window.Invoke. That dynamically looks up and executes the method named in the first parameter. </p>
<pre class="code"><span style="color: blue">void </span>mainButton_Click(<span style="color: blue">object </span>sender, <span style="color: #2b91af">RoutedEventArgs </span>e)
{
    <span style="color: #2b91af">HtmlPage</span>.Window.Invoke(<span style="color: #a31515">"GetJson"</span>, <span style="color: #a31515">"/Artists/GetAll"</span>);
}
</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Now, I could have wired up the JavaScript to listen for the button click event directly but that&#8217;s a lot more code than what I&#8217;ve got here. </p>
<p>Next I had to enable the Silverlight objects for callbacks. Step 1 is to Register the class with the browser&#8217;s scripting engine.</p>
<pre class="code"><span style="color: blue">public </span>LeveragingJQuery()
{
    InitializeComponent();
    <span style="color: #2b91af">HtmlPage</span>.RegisterScriptableObject(<span style="color: #a31515">"LeveragingJQuery"</span>, <span style="color: blue">this</span>);
...<br />}</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>Step 2 is to declare one of the methods as a ScriptableMember. This gives the scripting engine access to the method in question. There&#8217;s also ScriptableType for creating serializable objects but that&#8217;s not what we need here. Notice, however, that the object type passed in is a ScriptObject. The slick part about this object is that it&#8217;s got a &#8220;ConvertTo&#8221; method that will take the weakly typed objects that it contains and serialize them to the type of object that you specify. This made the C# code here REALLY simple. </p>
<pre class="code">[<span style="color: #2b91af">ScriptableMember</span>]
<span style="color: blue">public void </span>CallBackFromJavaScript(<span style="color: #2b91af">ScriptObject </span>artists)
{
    <span style="color: #2b91af">List</span>&lt;<span style="color: #2b91af">Artist</span>&gt; listofartists = artists.ConvertTo&lt;<span style="color: #2b91af">List</span>&lt;<span style="color: #2b91af">Artist</span>&gt;&gt;();
    dataGrid1.ItemsSource = listofartists;
}
</pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<p>What&#8217;s left is the <a href="http://jquery.com/">JQuery</a> in the browser that we&#8217;re talking to. Notice that the first part is exactly the same. The second part, however, is a little different. First, we have to get a reference to the Silverlight plugin itself. Since I&#8217;m in a form object, ASP.NET mangles the name a little bit but it wasn&#8217;t too hard to figure out the new name. Next, I have to get the object that I had registered with the RegisterScriptableObject method. Then, all that&#8217;s left is calling the method to pass in my array of Artists. </p>
<pre class="code"><span style="color: blue">&lt;</span><span style="color: #a31515">script </span><span style="color: red">src</span><span style="color: blue">="/Scripts/jquery-1.2.6.js" </span><span style="color: red">type</span><span style="color: blue">="text/javascript"&gt;&lt;/</span><span style="color: #a31515">script</span><span style="color: blue">&gt;
&lt;</span><span style="color: #a31515">script </span><span style="color: red">language</span><span style="color: blue">="javascript" </span><span style="color: red">type</span><span style="color: blue">="text/javascript"&gt;
    function </span>GetJson(url) {
        $.getJSON(url,
          {},
          DisplayArtists);
    }

    <span style="color: blue">function </span>DisplayArtists(artists) {
        <span style="color: blue">var </span>control = document.getElementById(<span style="color: #a31515">"ctl00_MainContent_SilverlightPlugin"</span>);
        <span style="color: blue">var </span>leveragingJSPage = control.Content.LeveragingJQuery;
        leveragingJSPage.CallBackFromJavaScript(artists);
    }
<span style="color: blue">&lt;/</span><span style="color: #a31515">script</span><span style="color: blue">&gt;
</span></pre>
<p><a href="http://11011.net/software/vspaste"></a></p>
<h5>Conclusion</h5>
<p>This is how I learn about new things. I&#8217;m not satisfied with just getting the job done in one and only one way. I want to try out 3, 4, 5 different ways to accomplish a given task. That way I know what the right way to do something is in a given context. For example, I don&#8217;t know that I&#8217;ll ever need to mingle <a href="http://jquery.com/">jQuery</a> and Silverlight. But, I know how it&#8217;s done now and know that it&#8217;s a lot simpler than I originally thought it would be. </p>
<p>JSON is a simple but powerful format. There are a ton of simple services, from flickr to twitter to many of your production applications that could be producing JSON. It saves bandwidth compared to XML and is a just as simple to use. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2009/01/20/playingwithjson/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Continuum of Experience</title>
		<link>http://www.joshholmes.com/blog/2007/11/02/continuumofexperience/</link>
		<comments>http://www.joshholmes.com/blog/2007/11/02/continuumofexperience/#comments</comments>
		<pubDate>Fri, 02 Nov 2007 02:01:23 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2007/11/02/ContinuumOfExperience.aspx</guid>
		<description><![CDATA[One of the key messages that I&#8217;ve been talking about with a lot of my customers recently is a continuum of experience. It starts on the left with Web and it&#8217;s absolute ubiquity through HTML and CSS. This works on any device with a browser from a phone to any desktop and even a lot of computer based applications (such as search engines or spam email harvesting engines). The tradeoff [...]]]></description>
				<content:encoded><![CDATA[<p>One of the key messages that I&#8217;ve been talking about with a lot of my customers recently is a continuum of experience. </p>
<p><a href="http://www.joshholmes.com/content/binary/WindowsLiveWriter/ContinuumofExperience_135BE/image_thumb%5B3%5D_2.png"><img style="border-right: 0px; border-top: 0px; margin: 0px 10px 0px 0px; border-left: 0px; border-bottom: 0px" height="230" alt="image_thumb[3]" src="http://www.joshholmes.com/content/binary/WindowsLiveWriter/ContinuumofExperience_135BE/image_thumb%5B3%5D_thumb.png" width="600" align="left" border="0"></a></p>
<p>It starts on the left with Web and it&#8217;s absolute ubiquity through HTML and CSS. This works on any device with a browser from a phone to any desktop and even a lot of computer based applications (such as search engines or spam email harvesting engines). The tradeoff is that the user experience is less than optimal. Billy Hollis calls it the Cobol of the web referring back to the old time green screens. Whether we like it or not, HTML not only has it&#8217;s place now, it&#8217;s going to continue to have it&#8217;s place long into the future. Unfortunately, one of the reasons that many applications go this direction is not because they need ubiquitous reach but rather because it&#8217;s easier on the IT department to deploy it. This makes things hard on the user. Oops. Things can get better with AJAX. At this point, you are sacrificing some reach for functionality as you are giving up phones, PDAs and older browsers. Often that&#8217;s an easy decision to make. </p>
<p>On the right hand side of the continuum is Platform Optimized. This is really giving up broad reach for absolute functionality. As an example, the Halo 3 team knew which video card was in the target machine so they could tailor the experience for the edges of what&#8217;s possible on that hardware. That&#8217;s a good position to be in when you can be because it means that you can create the absolute best possible experience available. However, it would be hard to take that same experience and put it on any laptop. Short of knowing what hardware you are targeting, look at the platform that you are targeting. If you know that your users are using Vista or XP with the Service Pack 2, you can target WPF, WCF and so on because you know that it&#8217;s on the box. Backing up from there, if you can target .NET on the box, great. </p>
<p>Somewhere between the Web and Platform Optimized is the Supplemented Web with Silverlight and Flash/Flex. This is an exciting frontier to be in right now bridging the gap. It&#8217;s not full ubiquity but it&#8217;s more reach than platform optimized and it has a far superior user experience than HTML and CSS. </p>
<p>Microsoft and Adobe are working from opposite angles here. Adobe, with Air, is trying to take this supplemented web development paradigm to desktop. It&#8217;s an interesting idea to be able to bring HTML, Flex/Flash, embedding PDFs and so on to the desktop. Microsoft, on the other hand, is trying to take desktop application development paradigm to the web with Silverlight. </p>
<p>I think that there&#8217;s room for every type of experience along the continuum but you really need to evaluate your skill set and what type of experience you want to target when starting an application. Today actually, I had a customer meeting where we talked about a blended approach where we build a simple ASP.NET application for their ubiquitous touch and then target a click-once deployable application for those clients that are able to leverage it. This would be a great move on their part as it would give the best possible UX for the greatest possible audience. </p>
<div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:08395521-1384-475f-958e-179c63e9825c" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati Tags: <a href="http://technorati.com/tags/UX" rel="tag">UX</a>,<a href="http://technorati.com/tags/Silverlight" rel="tag">Silverlight</a>,<a href="http://technorati.com/tags/WPF" rel="tag">WPF</a>,<a href="http://technorati.com/tags/Flash/Flex" rel="tag">Flash/Flex</a>,<a href="http://technorati.com/tags/Air" rel="tag">Air</a>,<a href="http://technorati.com/tags/AJAX" rel="tag">AJAX</a>,<a href="http://technorati.com/tags/RIA" rel="tag">RIA</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2007/11/02/continuumofexperience/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rich Web Experience Conference Kickoff Panel in InfoWorld</title>
		<link>http://www.joshholmes.com/blog/2007/09/09/richwebexperienceconferencekickoffpanelininfoworld/</link>
		<comments>http://www.joshholmes.com/blog/2007/09/09/richwebexperienceconferencekickoffpanelininfoworld/#comments</comments>
		<pubDate>Sun, 09 Sep 2007 23:11:07 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[Conference]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2007/09/07/RichWebExperienceConferenceKickoffPanelInInfoWorld.aspx</guid>
		<description><![CDATA[I&#8217;m speaking on Silverlight at the The Rich Web Experience conference in San Jose, CA. At the last minute, I was pulled into a panel discussion that kicked off the conference. It was a fun panel. There was a editor from InfoWord named Paul Krill who wrote a fantastic article on InfoWorld. There were representatives from Microsoft (me), IBM (Jon Ferraiolo), Yahoo (Bill Scott),&#160;Ryan Breen&#160;(VP of web testing company Gomez) [...]]]></description>
				<content:encoded><![CDATA[<p>I&#8217;m speaking on <a href="http://www.silverlight.net/">Silverlight</a> at the The Rich Web Experience conference in San Jose, CA. At the last minute, I was pulled into a panel discussion that kicked off the conference. It was a fun panel. There was a editor from InfoWord named Paul Krill who wrote a <a href="http://www.infoworld.com/article/07/09/06/rich-web_1.html">fantastic article on InfoWorld</a>. </p>
<p>There were representatives from Microsoft (me), IBM (Jon Ferraiolo), Yahoo (Bill Scott),&nbsp;Ryan Breen&nbsp;(VP of web testing company Gomez) and many consultants including Scott Davis and Stuart Holloway. The panel was run by Neal Ford (ThoughtWorks). Neal threw out the question designed to bait the panel, &#8220;Ajax, Flex, <a href="http://www.silverlight.net/">Silverlight</a> &#8211; who&#8217;s going to rule the world?&#8221; I thought just for a moment about jumping up on the table and yelling &#8220;Silverlight!!!&#8221; but I thought that&#8217;s probably not the introduction I needed to the crowd so I waited. There were several of the guys that said that stepped up for AJAX because of the ubiquity factor. I stepped up for <a href="http://www.silverlight.net/">Silverlight</a>/Flex talking about the continuum of experience from ubiquitous lowest common denominator web applications supplemented web to platform optimized. <a href="http://www.silverlight.net/">Silverlight</a>/Flex fill that spot in the middle. It was fun to be the guy on the panel that was answering all of the Flex questions as well as the <a href="http://www.silverlight.net/">Silverlight</a> questions. People asked about testability, accessibility, tooling and more. I had fun and was really happy that I had attended the <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=212621">RIA Jam</a> in <a href="http://www.joshholmes.com/2007/08/14/AdventuresWithMappingAndOffroadFun.aspx">Crested Butte</a>. I was also thrilled, with the crowd that we had in attendance, to announce the <a href="http://www.joshholmes.com/2007/09/05/DancingInTheMoonlight.aspx">Moonlight project</a> news. The whole panel went really well. </p>
<p><a href="http://www.infoworld.com/article/07/09/06/rich-web_1.html">Rich Web technologies debated | InfoWorld | News | 2007-09-06 | By Paul Krill</a></p>
<p>*Update &#8211; ComputerWorld picked up the article &#8211; <a href="http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;articleId=9035018&amp;source=rss_news10">http://www.computerworld.com/action/article.do?command=viewArticleBasic&amp;articleId=9035018&amp;source=rss_news10</a>. </p>
<div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:fcdfd2c2-d180-471c-ba0b-7d53ed750eb9" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati Tags: <a href="http://technorati.com/tags/Silverlight" rel="tag">Silverlight</a>, <a href="http://technorati.com/tags/Flex" rel="tag">Flex</a>, <a href="http://technorati.com/tags/RichWeb" rel="tag">RichWeb</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2007/09/09/richwebexperienceconferencekickoffpanelininfoworld/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Microsoft ArcReady: Web 2.0</title>
		<link>http://www.joshholmes.com/blog/2007/08/07/microsoftarcreadyweb20/</link>
		<comments>http://www.joshholmes.com/blog/2007/08/07/microsoftarcreadyweb20/#comments</comments>
		<pubDate>Tue, 07 Aug 2007 15:50:48 +0000</pubDate>
		<dc:creator>joshholmes</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[ArcReady]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Silverlight]]></category>

		<guid isPermaLink="false">http://www.joshholmes.com/blog/2007/08/07/MicrosoftArcReadyWeb20.aspx</guid>
		<description><![CDATA[ArcReady is ramping up again for another quarter&#8217;s worth of content. This quarter we have Jon Rauschenberger from Clarity Consulting putting together content on Web 2.0 based on his experience with creating the FaceBook Developers API and more. Applying Lessons to Your Company After Tim O’Reilly’s article “What is Web 2.0” in 2005, there has been considerable buzz around Web 2.0 technologies and the companies that use them. From the [...]]]></description>
				<content:encoded><![CDATA[<p>ArcReady is ramping up again for another quarter&#8217;s worth of content. This quarter we have Jon Rauschenberger from Clarity Consulting putting together content on Web 2.0 based on his experience with creating the FaceBook Developers API and more. </p>
<blockquote><h4>Applying Lessons to Your Company</h4>
<p>After Tim O’Reilly’s article “What is Web 2.0” in 2005, there has been considerable buzz around Web 2.0 technologies and the companies that use them. From the open platform Facebook to the rich user interfaces of web mail clients like Microsoft Exchange, the architecture of web applications is changing rapidly. While other companies have begun to see potential business value in Web 2.0 technologies, there is still uncertainty on how to integrate those technologies into corporate activities. How can you balance corporate security needs without negating the architecture of participation that is important in Web 2.0 applications? Where is the line between internal and external applications? What can we learn from the most successful public Web services and does it apply to our internal SOA?
<p>In select cities, our guest speaker will be Jon Rauschenberger, CTO for Clarity Consulting. Together with the Central Region Architect Evangelists, we’ll discuss lessons learned and best practices around collaboration, rich user experiences, and data syndication from existing Web 2.0 application architectures. We’ll also provide guidance how current Microsoft platform technologies like AJAX for ASP.NET, SharePoint Server 2007, and WCF can be used to turn those lessons into a practical corporate Web 2.0 architecture. Finally we’ll take a look at the next generation of Microsoft technologies like Silverlight and Visual Studio 2008 and discuss how architects can design and deploy applications beyond the current Web 2.0 experience.</p>
</blockquote>
<p>Hopefully I&#8217;ll see you there&#8230;
<li><a href="http://shrinkster.com/rn0">Detroit &#8211; 8/21/07</a>&nbsp;(I&#8217;ll be there)
<li><a href="http://shrinkster.com/rn1">Houston &#8211; 8/28/07</a>&nbsp;(<a href="http://blog.austinwheats.net/">Phil Wheat</a> will be there)
<li><a href="http://shrinkster.com/rn2">Dallas &#8211; 8/29/07</a>&nbsp;(<a href="http://blog.austinwheats.net/">Phil Wheat</a> will be there)
<li><a href="http://shrinkster.com/rn3">Austin &#8211; 8/30/07</a>&nbsp;(<a href="http://blog.austinwheats.net/">Phil Wheat</a> will be there)
<li><a href="http://shrinkster.com/rn4">Memphis &#8211; 8/30/07</a>&nbsp;(I&#8217;ll speaking)
<li><a href="http://shrinkster.com/rn5">Minneapolis &#8211; 9/11/07</a>&nbsp;(<a href="http://www.geekswithblogs.com/dboynton">Denny Boynton</a> will be there)
<li><a href="http://shrinkster.com/rn6">Chicago &#8211; 9/12/07</a>&nbsp;(<a href="http://www.larryclarkin.com/">Larry Clarkin</a>&nbsp;will be there)
<li><a href="http://shrinkster.com/rn7">Milwaukee &#8211; 9/13/07</a>&nbsp;(<a href="http://www.larryclarkin.com/">Larry Clarkin</a>&nbsp;will be there)
<li><a href="http://shrinkster.com/rn8">Indianapolis &#8211; 9/18/07</a>&nbsp;(<a href="http://www.larryclarkin.com/">Larry Clarkin</a>&nbsp;will be there)
<li><a href="http://shrinkster.com/rn9">St Louis &#8211; 9/19/07</a>&nbsp;(<a href="http://www.geekswithblogs.com/dboynton">Denny Boynton</a> will be there)
<li><a href="http://shrinkster.com/rna">Kansas City &#8211; 9/21/07</a>&nbsp;(<a href="http://www.geekswithblogs.com/dboynton">Denny Boynton</a> will be there)
<li><a href="http://shrinkster.com/rnb">Cleveland &#8211; 9/25/07</a>&nbsp;(I&#8217;ll speaking)
<li><a href="http://shrinkster.com/rnc">Columbus &#8211; 9/26/07</a>&nbsp;(I&#8217;ll speaking)
<li><a href="http://shrinkster.com/rnd">Cincinnati &#8211; 9/27/07</a>&nbsp;(I&#8217;ll be there)
<li><a href="http://shrinkster.com/rne">Nashville &#8211; 9/28/07</a>&nbsp;(I&#8217;ll be there)
<p><a href="http://www.arcready.com/#2">Microsoft ArcReady</a> </p>
</li>
<p>&nbsp;</p>
<div class="wlWriterSmartContent" id="0767317B-992E-4b12-91E0-4F059A8CECA8:fe76b9b9-f2e2-4aae-9ee4-dba043011056" contenteditable="false" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati tags: <a href="http://technorati.com/tags/ArcReady" rel="tag">ArcReady</a>, <a href="http://technorati.com/tags/Silverlight" rel="tag">Silverlight</a>, <a href="http://technorati.com/tags/AJAX" rel="tag">AJAX</a>, <a href="http://technorati.com/tags/Sharepoint%20Server%202007" rel="tag">Sharepoint Server 2007</a>, <a href="http://technorati.com/tags/Architecture" rel="tag">Architecture</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.joshholmes.com/blog/2007/08/07/microsoftarcreadyweb20/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
