<?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>Francis Shanahan[.com] &#187; ajax</title>
	<atom:link href="http://francisshanahan.com/index.php/tag/ajax/feed/" rel="self" type="application/rss+xml" />
	<link>http://francisshanahan.com</link>
	<description>Thoughts on technology from a citizen scientist</description>
	<lastBuildDate>Fri, 27 Jan 2012 14:18:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>A Better Web Development Stack</title>
		<link>http://francisshanahan.com/index.php/2009/a-better-web-development-stack/</link>
		<comments>http://francisshanahan.com/index.php/2009/a-better-web-development-stack/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 13:34:33 +0000</pubDate>
		<dc:creator>Francis</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Headline]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://francisshanahan.com/www/?p=1728</guid>
		<description><![CDATA[Last time I griped about ASP.NET ATLAS [LINK]. Ok so with that said, what&#8217;s the alternative? When I wrote my book (Amazon.com Mashups) I did most of the Javascript coding by hand. It wasn&#8217;t bad but it wasn&#8217;t always easy. I tried ATLAS/ASP.NET AJAX and it sucks. I&#8217;ve moved on. 
Decision criteria are as follows:
1) The stack should be fast, it should perform and add minimal overhead to my pages.
2) It should not impede interoperability. I want my code to play nice with others.
3) It should not slow me down. ...]]></description>
			<content:encoded><![CDATA[<p>Last time I griped about ASP.NET ATLAS [<a href="http://francisshanahan.com/www/index.php/2009/the-problems-with-aspnet-ajax/">LINK</a>]. Ok so with that said, what&#8217;s the alternative? When I wrote my book (Amazon.com Mashups) I did most of the Javascript coding by hand. It wasn&#8217;t bad but it wasn&#8217;t always easy. I tried ATLAS/ASP.NET AJAX and it sucks. I&#8217;ve moved on. </p>
<p>Decision criteria are as follows:<br />
1) The stack should be fast, it should perform and add minimal overhead to my pages.<br />
2) It should not impede interoperability. I want my code to play nice with others.<br />
3) It should not slow me down. I do like Studio as an IDE and don&#8217;t think at this point I could switch to Eclipse.<br />
4) The stack shouldn&#8217;t limit my control. With ASP.NET AJAX the biggest gripe I have is lack of fine grained control over the markup rendered. </p>
<p>Nowadays I&#8217;m favouring the following stack</p>
<p>a) Javascript library: JQuery and Prototype are my current favourites.  They&#8217;re both fairly equal and I use them both interchangeably. I&#8217;m using Prototype for my next project although when I switched this site to WordPress I used JQuery. Both are small &lt;30KB and easy to rampup on. </p>
<p>b) Visual effects: With minimalist design you don&#8217;t need a whole lot here. I use a mixture; I like Script.acul.ous as a core so far with add ons like jCarousel for special circumstances. </p>
<p>With this combo total JS over the wire is under 50KB compressed. </p>
<p>c) CSS layout: I write my own CSS but for layout I use YUI Grid. Very small, cross browser, does everything I need and nothing I don&#8217;t. 4KB thank you very much. </p>
<p>d) Server-side: (data-side) I&#8217;m still using ASP.NET nowadays but no ATLAS. I need to produce less markup and only that which I can control. No wacky $ concatenated Ids here please. I use the DataSerializers to produce JSON for data. JSON has proven more flexible than web services,  just as interoperable as XML and less verbose. For transactional systems I&#8217;d still favour web services with the WS-* stack, everything in it&#8217;s place. </p>
<p>I can&#8217;t point at the site yet but there is one coming that uses this stack. Compared to <a href="http://foolstr.com">Foolstr.com</a> it has been a much more pleasant development experience and the site does run faster. </p>
<p>With so many options out there, what&#8217;s YOUR preferred stack? </p>
]]></content:encoded>
			<wfw:commentRss>http://francisshanahan.com/index.php/2009/a-better-web-development-stack/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Problems with ASP.NET AJAX</title>
		<link>http://francisshanahan.com/index.php/2009/the-problems-with-aspnet-ajax/</link>
		<comments>http://francisshanahan.com/index.php/2009/the-problems-with-aspnet-ajax/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 14:14:51 +0000</pubDate>
		<dc:creator>Francis</dc:creator>
				<category><![CDATA[Web Development]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[atlas]]></category>
		<category><![CDATA[efficient code]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://francisshanahan.com/www/?p=1726</guid>
		<description><![CDATA[It&#8217;s no secret I&#8217;ve long been a fan of .NET and the ASP.NET stack.  I feel the team really got it right making developers highly productive and the Visual Studio IDE is second to none.  After spending some long hours with Atlas and ASP.NET AJAX though I&#8217;m afraid I can&#8217;t say the same. 
ATLAS on top of ASP.NET is an example of a retro-fitted round tube jammed into a square hole. The whole notion of AJAX is that it&#8217;ll serve PARTIAL pages, snippets of data, merged with presentation ...]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s no secret I&#8217;ve long been a fan of .NET and the ASP.NET stack.  I feel the team really got it right making developers highly productive and the Visual Studio IDE is second to none.  After spending some long hours with Atlas and ASP.NET AJAX though I&#8217;m afraid I can&#8217;t say the same. </p>
<p>ATLAS on top of ASP.NET is an example of a retro-fitted round tube jammed into a square hole. The whole notion of AJAX is that it&#8217;ll serve PARTIAL pages, snippets of data, merged with presentation on the browser side. Unfortunately ASP.NET AJAX adopted the notion of the UpdatePanel with which I have the following issues:</p>
<p>a) Update Panels are not partial page, they&#8217;re full page. The entire page posts back.  Where&#8217;s the speed gain?</p>
<p>b) The page&#8217;s DOM is brutalized. Each &lt;div&gt; tags&#8217; id is generated for you which could&#8217;ve been nice. Unfortunately the generated ids are incredibly verbose, meaningless strings of dollar concatenated craziness.  Here&#8217;s an example from Foolstr:</p>
<p><code>&lt;a id="<strong>ctl00_contentMain_ContentList1_repContents_ctl02_cmdAgree</strong>" class="myH1" href="javascript:__doPostBack('ctl00$contentMain$ContentList1$repContents$ctl02$cmdAgree','')"&gt;Agree&lt;/a&gt; </code></p>
<p>c) Not only are these ids/names duplicated and incredibly long, they&#8217;re impossible to reference from anything other than ASP.NET AJAX. For example, if you want to combine with a third party JS library like Scriptaculous, you&#8217;re out of luck (it can be done but only with some big hoop jumping through). Unfortunately there&#8217;s little the developer can do to trim them down without overriding a lot of the default behaviour of .NET.</p>
<p>d) It&#8217;s non-intuitive. Essentially ASP.NET AJAX adopts a server-side style and mindset to client-side processing.</p>
<p>e) There&#8217;s no focus on the data contract. I don&#8217;t have to write a JSON API or an XML/REST api or anything. This might be good for some but I think it&#8217;s never a good idea to shift focus off the data.</p>
<p>f) It&#8217;s lazy. It encourages a laziness in the developer. Just code as normal and slap it in an Update Panel. Meh.</p>
<p>Those are the gripes. I have to say the third party vendors have only compounded the problem. You&#8217;d think 3rd party controls&#8217;d be lightweight, optimized and fast but so far what I&#8217;ve seen is they&#8217;re even worse. This is mostly a symptom of them having been built on top of an already broken paradigm. </p>
<p>Most 3rd party controls include the ASP.NET AJAX stuff as a pre-requisite. That makes them heavy. I&#8217;m talking 100KB of javascript before you&#8217;ve drawn anything. 250KB plus in pure javascript alone for a grid. That&#8217;s before you bind it to data. There has to be a better way, there IS a better way. </p>
<p>What do YOU consider the perfect web development stack? </p>
]]></content:encoded>
			<wfw:commentRss>http://francisshanahan.com/index.php/2009/the-problems-with-aspnet-ajax/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>I&#8217;m Web2.0</title>
		<link>http://francisshanahan.com/index.php/2006/im-web20/</link>
		<comments>http://francisshanahan.com/index.php/2006/im-web20/#comments</comments>
		<pubDate>Fri, 03 Feb 2006 11:28:00 +0000</pubDate>
		<dc:creator>Francis</dc:creator>
				<category><![CDATA[Things I've Made]]></category>
		<category><![CDATA[Web Experiments]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[web 2.0]]></category>

		<guid isPermaLink="false">http://francisshanahan.com/www/index.php/2006/im-web20/</guid>
		<description><![CDATA[I&#8217;m Important.
Since 9/11 and the decline of the economy, it became clear to me that I needed to do more than say &#8220;hey I&#8217;m an architect&#8221; and draw rectangles on a whiteboard to be relevant in today&#8217;s IT industry. 
People like that are easily culled in the down-time and easily replaced. 
5 years later, it dawned on me in a very Stuart Smalley way that &#8220;Gosh-darned it, I&#8217;m important!&#8221;. Not in a self-serving sense but in terms of the type of developer I represent. 
Here&#8217;s concrete examples why: 
a) I&#8217;m ...]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m Important.</p>
<p>Since 9/11 and the decline of the economy, it became clear to me that I needed to do more than say &#8220;hey I&#8217;m an architect&#8221; and draw rectangles on a whiteboard to be relevant in today&#8217;s IT industry. </p>
<p>People like that are easily culled in the down-time and easily replaced. </p>
<p>5 years later, it dawned on me in a very Stuart Smalley way that &#8220;Gosh-darned it, I&#8217;m important!&#8221;. Not in a self-serving sense but in terms of the type of developer I represent. </p>
<p>Here&#8217;s concrete examples why: </p>
<p>a) I&#8217;m important to Adobe/Macromedia who are gearing up for a bloodbath between Flex and Microsoft&#8217;s Vista/Sparkle/Longhorn. Adobe likes people like me as they need developers/architects who are going to take their software, develop something with it, create a small-grassroots buzz and gain mindshare for their products.I&#8217;m typing this as I&#8217;m downloading 130MB of Flex builder Beta. </p>
<p>b) Amazon likes me as I leverage their Web services platform and have built a lot of stuff that again, helped them gain mindshare.<br />
 c) Microsoft likes me as I&#8217;m the type of person they&#8217;re going after for things like Mix&#8217;06 and so on. </p>
<p>d) Microsoft also likes me as they want to push things like Windows Communication Foundation and Windows Presentation Foundation forward. I&#8217;m the kind of guy that&#8217;ll do that and bring them into major organizations day-to-day. </p>
<p>In the last year I&#8217;ve been in print (Business Week, Puget Sound journal, Visual Studio Developer Magazine), asked to speak at conferences (Interop 2005) and have been engaged by a leading publisher to write a book which may or may not happen. </p>
<p>So what&#8217;s more Web2.0 than me? I&#8217;m grass-roots. I&#8217;m trading sleep for xml, RSS for ZZZ. I&#8217;m bleeding edge and darn it people like me. </p>
<p>Lastly, who benefits most? My employer of course. They gain an employee who is constantly learning, experimenting and can speak with confidence on a set of topics not because I&#8217;ve read about them or attended a vendor demo but because I&#8217;ve used them first-hand.</p>
]]></content:encoded>
			<wfw:commentRss>http://francisshanahan.com/index.php/2006/im-web20/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Blog is now &#8220;Ajax Enhanced&#8221;</title>
		<link>http://francisshanahan.com/index.php/2005/my-blog-is-now-ajax-enhanced/</link>
		<comments>http://francisshanahan.com/index.php/2005/my-blog-is-now-ajax-enhanced/#comments</comments>
		<pubDate>Sun, 01 May 2005 21:07:00 +0000</pubDate>
		<dc:creator>Francis</dc:creator>
				<category><![CDATA[Things I've Made]]></category>
		<category><![CDATA[ajax]]></category>

		<guid isPermaLink="false">http://francisshanahan.com/www/index.php/2005/my-blog-is-now-ajax-enhanced/</guid>
		<description><![CDATA[Using a combination of web services, XML and REST I&#8217;ve created an Ajax enhanced version of my blog which  you can access here.
The blog itself is the same but certain keyword combinations have been tagged (under-scored in red). When you click these links, the page will load content dynamically without refreshing. You can access Movies, Images or News at the moment. The data comes from Yahoo for now but I may look to adding more sources in the future.
Hopefully this makes the content here a little more interesting. Should ...]]></description>
			<content:encoded><![CDATA[<p>Using a combination of web services, XML and REST I&#8217;ve created an Ajax enhanced version of my blog <a href="http://www.francisshanahan.com/reader.aspx">which  you can access here</a>.</p>
<p>The blog itself is the same but certain keyword combinations have been tagged (under-scored in red). When you click these links, the page will load content dynamically without refreshing. You can access Movies, Images or News at the moment. The data comes from Yahoo for now but I may look to adding more sources in the future.</p>
<p>Hopefully this makes the content here a little more interesting. Should be fun to play with it and see what comes back. </p>
<p>Perhaps it&#8217;s a new form of blogging similar to Podcasting? It&#8217;s sort of like a dynamic multimedia trackback. We&#8217;ll see.</p>
]]></content:encoded>
			<wfw:commentRss>http://francisshanahan.com/index.php/2005/my-blog-is-now-ajax-enhanced/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More Ajax Fun</title>
		<link>http://francisshanahan.com/index.php/2005/more-ajax-fun/</link>
		<comments>http://francisshanahan.com/index.php/2005/more-ajax-fun/#comments</comments>
		<pubDate>Tue, 12 Apr 2005 20:52:00 +0000</pubDate>
		<dc:creator>Francis</dc:creator>
				<category><![CDATA[Cool & Future Tech]]></category>
		<category><![CDATA[Things I've Made]]></category>
		<category><![CDATA[Web Experiments]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[web2.0]]></category>
		<category><![CDATA[zuggest]]></category>

		<guid isPermaLink="false">http://francisshanahan.com/www/index.php/2005/more-ajax-fun/</guid>
		<description><![CDATA[Seems there&#8217;s a lot of interest around the Ajax Collage of Jeff Bezos. A quick word on this, I&#8217;m not sure if folks have realized as this is not in the normal vein of LiveSearch (ala Zuggest) or Google Maps but this Collage thing is actually an Ajax example also. 
Clicking the images does a request behind the scenes to load the product. 
There are plenty more collages on the way over the next week&#8230;  
In other news, I&#8217;ve been playing with XML-RPC the simplest and some would say ...]]></description>
			<content:encoded><![CDATA[<p>Seems there&#8217;s a lot of interest around the <a href="http://www.francisshanahan.com/collage/bezos/bezos_b.aspx">Ajax Collage of Jeff Bezos</a>. A quick word on this, I&#8217;m not sure if folks have realized as this is not in the normal vein of LiveSearch (ala <a href="http://www.FrancisShanahan.com/zuggest.aspx">Zuggest</a>) or Google Maps but this Collage thing is actually an Ajax example also. </p>
<p>Clicking the images does a request behind the scenes to load the product. </p>
<p>There are plenty more collages on the way over the next week&#8230;  </p>
<p>In other news, I&#8217;ve been playing with XML-RPC the simplest and some would say best of all protocols. I figured I&#8217;d try it out with the Visual Studio 2005 beta and .NET 2.0. I have to say, those partial classes and enhanced IDE are quite nice. I could get used to vs2005. </p>
<p>Anyway, long story short I was finding that the HttpWebRequest was intermittently throwing an exception.</p>
<p>&nbsp;When I tried the same code in .NET 1.1 it worked everytime. A quick google reveals the following <a href="http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=4178c7c2-d445-4921-a94a-099cf5034974">bug logged on MSDN</a>.   It&#8217;s encouraging to note as this would indicate that MSoft is finally taking standards compliance and security much more seriously than with previous releases.   Unfortunately the likely down-side is that Microsoft will be releasing a bunch of &quot;work-arounds&quot; e.g. the &quot;httpWebRequest useUnsafeHeaderParsing = &quot;true&quot;&quot; to enable migration of legacy NET 1.1 code.  So where&#8217;s that leave us? With the option of tighter security, the likelyhood that it&#8217;ll be bypassed and zero culpability on MSoft&#8217;s part. And that&#8217;s ok, the onus is on the developer to ensure the security of the app. Two thumbs up!</p>
]]></content:encoded>
			<wfw:commentRss>http://francisshanahan.com/index.php/2005/more-ajax-fun/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New Feature: Amazon Zuggest!</title>
		<link>http://francisshanahan.com/index.php/2005/new-feature-amazon-zuggest/</link>
		<comments>http://francisshanahan.com/index.php/2005/new-feature-amazon-zuggest/#comments</comments>
		<pubDate>Thu, 03 Mar 2005 02:01:00 +0000</pubDate>
		<dc:creator></dc:creator>
				<category><![CDATA[Cool & Future Tech]]></category>
		<category><![CDATA[Things I've Made]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Web Experiments]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[google suggest]]></category>
		<category><![CDATA[live search]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[zuggest]]></category>

		<guid isPermaLink="false">http://francisshanahan.com/www/index.php/2005/new-feature-amazon-zuggest/</guid>
		<description><![CDATA[UPDATE: Since originally posting, the site&#8217;s been getting a lot more traffic than usual so I&#8217;ve made some improvements to Zuggest.
I incorporated some zuggestions (groan) which folks emailed so the overall UI is a little nicer. I&#8217;m definitely HTML impaired. I&#8217;ve also improved caching on my server so Amazon doesn&#8217;t get such a big whack. Still tweaking things but have definitely learned a lot over the last few days.
-=====================-
UPDATE: Jeff Barr of Amazon has posted a link to Zuggest on the Amazon Web Services Blog. Thanks Jeff!
I&#8217;ve also upgraded to ...]]></description>
			<content:encoded><![CDATA[<p>UPDATE: Since originally posting, the site&#8217;s been getting a lot more traffic than usual so I&#8217;ve made some improvements to <a href="http://www.FrancisShanahan.com/zuggest.aspx">Zuggest</a>.</p>
<p>I incorporated some zuggestions (groan) which folks emailed so the overall UI is a little nicer. I&#8217;m definitely HTML impaired. I&#8217;ve also improved caching on my server so Amazon doesn&#8217;t get such a big whack. Still tweaking things but have definitely learned a lot over the last few days.</p>
<p>-=====================-</p>
<p>UPDATE: Jeff Barr of Amazon has posted a link to <a href="http://www.FrancisShanahan.com/zuggest.aspx">Zuggest</a> on <a href="http://aws.typepad.com/aws/2005/03/zuggest_dynamic.html">the Amazon Web Services Blog</a>. Thanks Jeff!</p>
<p>I&#8217;ve also upgraded to the latest Amazon web service WSDL. Tonnes more information available such as list, new and used prices, even inventory levels on used items! Great stuff.</p>
<p>-=====================-</p>
<p>You&#8217;ve got to make life interesting and I just couldn&#8217;t resist! After hearing all the buzz about XMLHttp (eh, it&#8217;s been out for 2 years already) I figured I&#8217;d take a look at it.   This is my take on &#8220;Google Suggest&#8221; only with Amazon so I&#8217;ve called it <a href="http://www.FrancisShanahan.com/zuggest.aspx">&#8220;Amazon Zuggest&#8221; &#8211; TAKE A LOOK AT IT HERE</a>.</p>
<p>This is a technology experiment in creation of Rich Internet User Interfaces using asynchronous communication from a browser to the server to gather data while the user&#8217;s doing something else.</p>
<p>While you type, the page gets results without a page refresh and without having to hit &#8220;submit&#8221; all the time.</p>
<p><strong>HOW IT WORKS</strong> The technology involved is Javascript, Web Services, SOAP, XMLHttp, XML, C# and ASP.NET.<br />
The Javascript runs in the browser and fires once you&#8217;re done typing. It looks for something to search on. If it finds something, it shoots a request using XMLHttp to my webserver.</p>
<p>The webserver constructs a SOAP request and sends it to the Amazon Web Services server (AWS ECM 4.0). Amazon sends back a SOAP response to my server, this response is then parsed into HTML. I think this is where Zuggest differs from Google Maps.</p>
<p>I think Maps is sending back XML to the browser and that gets XSLT&#8217;d into HTML on the browser. I do that part on the web server and stream HTML to the browser.</p>
<p>Lastly, I cache all the results on my side and check the cache before I query anything. I also cache the results on the browser side, so if you&#8217;ve searched for something you can just mouseover the history to bring it straight back, instantly. All in the blink of an eye.</p>
<p>So you might say well why not just issue the Web Service request or a REST request directly from the browser to the AWS server, eliminating the extra hop through my server. The main reason for this convoluted Web Service approach through my server is the security constraints around the client-side javascript blending content from other sources.</p>
<p>You can&#8217;t issue XMLHttp requests from the browser back to a domain other than the one the original page was served from. Otherwise this would be REALLY fast, as in Google Suggest. <a href="http://maps.google.com/">Google Maps</a> works the same way.</p>
<p>I&#8217;ve tested it in Firefox and IE6 without too many problems. Again, this is an experiment so it&#8217;s a little rough around the edges. It would be a little nicer if I wasn&#8217;t restricted to 1 request every second max to Amazon.</p>
<p><strong>UPDATES:<br />
</strong>Question from Jonathan Sambrook:<br />
Does the Amazon API allow you to use amazon.co.uk ? Answer: Yes. There are WSDLs available for the US, UK, DE, JP, FR and CA Locales although Zuggest only searches the US right now.</p>
<p>Question from Roshawn Dawson: You said that you are using Soap. Are you using a code-behind file? Answer: Yes. The XMLHttpRequest is sent to my ASP.NET page from the browser. The code-behind constructs the SOAP message, etc. etc.</p>
<p>What do you think? Would love to hear your thoughts or happy to link to other experiments like this.</p>
]]></content:encoded>
			<wfw:commentRss>http://francisshanahan.com/index.php/2005/new-feature-amazon-zuggest/feed/</wfw:commentRss>
		<slash:comments>51</slash:comments>
		</item>
	</channel>
</rss>

