<?xml version="1.0"?>
<rss version="2.0">
<channel>
  <title>Joe Walker - ajax tag</title>
  <link>http://directwebremoting.org/blog/joe/tags/ajax/</link>
  <description>Thoughts on Web Development</description>
  <language>en</language>
  <copyright>Joe Walker</copyright>
  <lastBuildDate>Wed, 19 Nov 2008 13:17:20 GMT</lastBuildDate>
  <generator>Pebble (http://pebble.sourceforge.net)</generator>
  <docs>http://backend.userland.com/rss</docs>
  
  
  <item>
    <title>Web Application Security</title>
    <link>http://directwebremoting.org/blog/joe/2007/10/29/web_application_security.html</link>
    
      
        <description>
          &lt;p&gt;A few people asked for slides and links from the security talk from &lt;a href=&#034;http://ajaxexperience.techtarget.com/&#034;&gt;The Ajax Experience&lt;/a&gt; last week:&lt;/p&gt;

&lt;div style=&#034;width:425px;text-align:left&#034; id=&#034;__ss_147905&#034;&gt;&lt;object style=&#034;margin:0px&#034; width=&#034;425&#034; height=&#034;355&#034;&gt;&lt;param name=&#034;movie&#034; value=&#034;http://s3.amazonaws.com/slideshare/ssplayer2.swf?doc=web-app-security-1193579768112939-1&#034;/&gt;&lt;param name=&#034;allowFullScreen&#034; value=&#034;true&#034;/&gt;&lt;param name=&#034;allowScriptAccess&#034; value=&#034;always&#034;/&gt;&lt;embed src=&#034;http://s3.amazonaws.com/slideshare/ssplayer2.swf?doc=web-app-security-1193579768112939-1&#034; type=&#034;application/x-shockwave-flash&#034; allowscriptaccess=&#034;always&#034; allowfullscreen=&#034;true&#034; width=&#034;425&#034; height=&#034;355&#034;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style=&#034;font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;&#034;&gt;&lt;a href=&#034;http://www.slideshare.net/?src=embed&#034;&gt;&lt;img src=&#034;http://s3.amazonaws.com/slideshare/logo_embd.png&#034; style=&#034;border:0px none;margin-bottom:-5px&#034; alt=&#034;SlideShare&#034;/&gt;&lt;/a&gt; | &lt;a href=&#034;http://www.slideshare.net/joewalker/web-app-security&#034; title=&#034;View &#039;Web App Security&#039; on SlideShare&#034;&gt;View&lt;/a&gt; | &lt;a href=&#034;http://www.slideshare.net/upload&#034;&gt;Upload your own&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;General Links:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#034;http://www.owasp.org/index.php/Main_Page&#034;&gt;OWASP&lt;/a&gt;: Open Web App Security Project&lt;/li&gt;

&lt;li&gt;Security Resources from the &lt;a href=&#034;http://www.openajax.org/member/wiki/Ajax_Security_Resources&#034;&gt;OpenAjax Alliance Wiki&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Mozilla on &lt;a href=&#034;http://www.mozilla.org/projects/security/components/same-origin.html&#034;&gt;Same-Origin Policy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;XSS:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Introductions from: &lt;a href=&#034;http://en.wikipedia.org/wiki/XSS&#034;&gt;Wikipedia&lt;/a&gt; and &lt;a href=&#034;http://httpd.apache.org/info/css-security/&#034;&gt;Apache&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&#034;http://ha.ckers.org/xss.html&#034;&gt;Cheat Sheet&lt;/a&gt;: Long list of XSS vectors from RSnake&lt;/li&gt;

&lt;li&gt;Explanation of &lt;a href=&#034;http://www.webappsec.org/projects/articles/071105.shtml&#034;&gt;DOM Based XSS&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Explanation of &lt;a href=&#034;http://namb.la/popular/tech.html&#034;&gt;Samy is my Hero&lt;/a&gt; worm&lt;/li&gt;

&lt;li&gt;Fairly old &lt;a href=&#034;http://www.cgisecurity.com/articles/xss-faq.shtml&#034;&gt;FAQ at CGI Security&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;List of &lt;a href=&#034;http://www.xssed.com/&#034;&gt;XSS holes&lt;/a&gt; in popular web applications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CSRF:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduction from: &lt;a href=&#034;http://en.wikipedia.org/wiki/Csrf&#034;&gt;Wikipedia&lt;/a&gt; and here&lt;/li&gt;

&lt;li&gt;Article by &lt;a href=&#034;http://shiflett.org/articles/cross-site-request-forgeries&#034;&gt;Chris  Shiflett&lt;/a&gt; and &lt;a href=&#034;http://shiflett.org/blog/2007/jul/csrf-redirector&#034;&gt;CSRF Redirector&lt;/a&gt; test tool&lt;/li&gt;

&lt;li&gt;&lt;a href=&#034;http://www.cgisecurity.com/articles/csrf-faq.shtml&#034;&gt;CSRF FAQ&lt;/a&gt; at CGI Security&lt;/li&gt;

&lt;li&gt;&lt;a href=&#034;http://getahead.org/blog/joe/2007/03/05/json_is_not_as_safe_as_people_think_it_is.html&#034;&gt;Array constructor overriding&lt;/a&gt; and &lt;a href=&#034;http://getahead.org/blog/joe/2007/03/06/json_is_not_as_safe_as_people_think_it_is_part_2.html&#034;&gt;setter overriding&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;A solution: &lt;a href=&#034;http://getahead.org/blog/joe/2007/08/07/fixing_browser_security_samerefereronly.html&#034;&gt;SameRefererOnly&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;Protecting a &lt;a href=&#034;http://getahead.org/blog/joe/2007/04/04/how_to_protect_a_json_or_javascript_service.html&#034;&gt;JSON or JavaScript Service&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Blogs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href=&#034;http://jeremiahgrossman.blogspot.com/&#034;&gt;Jeremiah Grossman&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&#034;http://shiflett.org/blog&#034;&gt;Chris Shiflett&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&#034;http://ha.ckers.org/blog/&#034;&gt;RSnake&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&#034;http://www.gnucitizen.org/&#034;&gt;GNUCITIZEN&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&#034;http://googleonlinesecurity.blogspot.com/&#034;&gt;Google Online Security&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&#034;http://www.0x000000.com/&#034;&gt;0x000000&lt;/a&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href=&#034;http://www.darknet.org.uk/tag/xss/&#034;&gt;Darknet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


        </description>
      
      
    
    
    
    <comments>http://directwebremoting.org/blog/joe/2007/10/29/web_application_security.html#comments</comments>
    <guid isPermaLink="true">http://directwebremoting.org/blog/joe/2007/10/29/web_application_security.html</guid>
    <pubDate>Mon, 29 Oct 2007 11:00:51 GMT</pubDate>
  </item>
  
  <item>
    <title>The Hardware of Tomorrow Versus the Platform of Tomorrow</title>
    <link>http://directwebremoting.org/blog/joe/2007/01/23/the_hardware_of_tomorrow_versus_the_platform_of_tomorrow.html</link>
    
      
        <description>
          &lt;p&gt;It seems to me that there is a problem. The OS/platform of tomorrow is not designed to make good use of the hardware of tomorrow.&lt;/p&gt;

&lt;h2&gt;The Hardware of Tomorrow&lt;/h2&gt;

&lt;p&gt;In 2003 the hardware race was about GHz, and the clock wars. AMD and Intel competed on their clock speed, and people checked off clock speed advances against &lt;a href=&#034;http://en.wikipedia.org/wiki/Moore&#039;s_law&#034;&gt;Moore&#039;s Law&lt;/a&gt;. In 2006 the battle lines began to be re-drawn around cores rather than clocks; Dual Core became the norm for new processors, and the next generations of chips from both AMD and Intel will be steadily increasing the number of cores. Intel and AMD have slightly different strategies, Intel is going for more generalized processing units, AMD (having bought ATI) are choosing to make their processing units &lt;a href=&#034;http://tomshardware.co.uk/2006/12/14/amd_questions_multi_core_trend/&#034;&gt;more specialized&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So the hardware of tomorrow is going to work best with software that encourages multi-threading. Java&#039;s memory model and util.concurrency make it technically strong, and &lt;a href=&#034;http://www.devwebsphere.com/devwebsphere/2007/01/the_future_of_f.html&#034;&gt;Billy Newport thinks&lt;/a&gt; that framework developers will need to alter their APIs to take advantage of the threads. He&#039;s probably right, but I suspect that to do a proper job, we&#039;re really going to need a language that builds multi-threading in at a lower level, leaving the compiler with the job of creating multiple execution paths. However that&#039;s not going to be quick.&lt;/p&gt;

&lt;div style=&#034;width:250px; float:right; border:1px solid #999; margin-left:10px; padding:10px;&#034; class=&#034;quote&#034;&gt;&lt;strong&gt;Cringley 2007 Prediction 5:&lt;/strong&gt;
&lt;br/&gt;AMD and Intel continue to beat the crap out of each other with customers gaining but wondering why there is no software that supports those new 8-way processors, as both compilers and third-party developers fail to keep up.&lt;/div&gt;

&lt;p&gt;Knowing this, Cringley&#039;s &lt;a href=&#034;http://www.pbs.org/cringely/pulpit/2007/pulpit_20070105_001440.html&#034;&gt;2007, prediction #5&lt;/a&gt;, is a bit of a no-brainer.&lt;/p&gt;

&lt;p&gt;Today, even just dual cores, one core spends a lot of time idle. Anyone spending any time waiting for javac to do it&#039;s work will be wishing it did a better job of using more than one processor. The &amp;quot;multi-threaded is hard&amp;quot; problem is one of the things killing the PS3 now. The PS3&#039;s cell processors seem to be too advanced for most of the games manufacturers right now.&lt;/p&gt;

&lt;p&gt;So if the hardware of tomorrow is going multi-threaded, what about the platform that developers use to write software?&lt;/p&gt;

&lt;h2&gt;The Platform of Tomorrow&lt;/h2&gt;

&lt;p&gt;I don&#039;t think we are in for any radical changes in platforms in the next few years. We&#039;ll continue to have a mix of Windows on the corporate desktop, Linux in the server room, and MacOS for developers, and arty types, and none of them being the primary development platform, which will continue to be the web.&lt;/p&gt;

&lt;p&gt;The web is the default place to develop new software these days. If you need raw speed, hardware access, 3D, off-line usage or top-quality OS integration, you&#039;ll use something else, but for everything else there&#039;s the web.&lt;/p&gt;

&lt;p&gt;The problem is that web-browsers are a step backwards as far as multi-threading goes. In Javascript there is no such thing as a new thread, and worse than that, the entire platform (i.e. a browser) runs a single JavaScript thread. If a script in one window goes into a tight loop, or runs some synchronous Ajax then the browser HTML display freezes.&lt;/p&gt;

&lt;p&gt;So are the any solutions?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding thread primitives to Javascript might technically possible, but it seems to me to be impractical; the single-threaded assumption is built fairly deeply into many applications.&lt;/li&gt;

&lt;li&gt;It might be possible for browser manufacturers to create a thread per domain. I don&#039;t see how this could cause problems, but I&#039;ll admit that I have a suspicion that I&#039;m overlooking something. If it does work then it might be possible to allow developers to create new threads by dynamically creating iframes in other domains and having some safe way to communicate between them.&lt;/li&gt;

&lt;li&gt;There is a Javascript pre-compiler called &lt;a href=&#034;http://neilmix.com/narrativejs/doc/&#034;&gt;Narrative JavaScript&lt;/a&gt; that looks like it might be of some use: it contains &lt;a href=&#034;http://neilmix.com/narrativejs/doc/reference.html&#034;&gt;a &lt;code&gt;spawn()&lt;/code&gt; method&lt;/a&gt; to start a new thread of execution. It&#039;s written in Javascript so you can deliver the pre-compiler to the browser or deliver the output. However until there is support for something like this at a language level that can exploit newer hardware, it doesn&#039;t solve the problem.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The solution that I&#039;d like to see is a language emerging that pushes the job of creating threads to the compiler, that runs on the JVM, and that is available in all browsers. I think I can safely predict that this is not going to happen any time soon though.&lt;/p&gt;

&lt;p&gt;So maybe the biggest challenge to Ajax is that compared to desktop applications they are going to look slower and slower as other platforms are quicker to embrace tomorrows hardware.&lt;/p&gt;

        </description>
      
      
    
    
    
    <comments>http://directwebremoting.org/blog/joe/2007/01/23/the_hardware_of_tomorrow_versus_the_platform_of_tomorrow.html#comments</comments>
    <guid isPermaLink="true">http://directwebremoting.org/blog/joe/2007/01/23/the_hardware_of_tomorrow_versus_the_platform_of_tomorrow.html</guid>
    <pubDate>Tue, 23 Jan 2007 20:48:33 GMT</pubDate>
  </item>
  
  <item>
    <title>The 4 States of Ajax Adoption</title>
    <link>http://directwebremoting.org/blog/joe/2006/09/20/the_4_states_of_ajax_adoption.html</link>
    
      
        <description>
          &lt;p&gt;So the 4 states of Ajax adoption are as follows ...&lt;/p&gt;

&lt;h3&gt;1. Denial&lt;/h3&gt;
&lt;p&gt;Usually accompanied with an explanation like &#034;&lt;a href=&#034;http://searchwebservices.techtarget.com/qna/0,289202,sid26_gci1215525,00.html&#034;&gt;Java Applets are better&lt;/a&gt;&#034;, or &#034;Javascript makes your website inaccessible to blind people&#034;. (Generally I don&#039;t buy either argument although I can see a diminishing case for WebStart).&lt;/p&gt;

&lt;h3&gt;2. &lt;a href=&#034;http://en.wikipedia.org/wiki/Progressive_Enhancement&#034;&gt;Progressive Enhancement&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Means taking an existing JavaScript free website and adding some tweaks. It&#039;s a conservative approach that won&#039;t worry or annoy anyone, but it won&#039;t turn any heads either. The BBC, Wikipedia and EBay all use this approach because it&#039;s a safe thing to do with a big website.&lt;/p&gt;

&lt;h3&gt;3. Second Site&lt;/h3&gt;
&lt;p&gt;The problem with progressive enhancement is that it treats the minority noscript case first. The second site approach provides the best it can for the majority and for the minority too. Google, Yahoo and Amazon create far more advanced systems with this approach. It&#039;s likely to cost a bit more, but you&#039;re probably going to get a much better site out of it.&lt;/p&gt;

&lt;h3&gt;4. Accessible JavaScript&lt;/h3&gt;
&lt;p&gt;The full on approach tries to create accessible sites, but only when JavaScript is turned on. Microsoft&#039;s live.com, YouTube and some Google sites do this, and there are some UIs for which there is little choice. Anyone fancy creating office type functionallity without JavaScript?&lt;/p&gt;

&lt;p&gt;You can work up the tree, starting out small and getting bigger, and the good news from a &lt;a href=&#034;http://getahead.ltd.uk/dwr&#034;&gt;DWR&lt;/a&gt; point of view is that it can help you each step of the way. DWR is good for small tweaks and a more full on style.&lt;/p&gt;

&lt;p&gt;What&#039;s your prefered approach?&lt;/p&gt;

        </description>
      
      
    
    
    
    <comments>http://directwebremoting.org/blog/joe/2006/09/20/the_4_states_of_ajax_adoption.html#comments</comments>
    <guid isPermaLink="true">http://directwebremoting.org/blog/joe/2006/09/20/the_4_states_of_ajax_adoption.html</guid>
    <pubDate>Wed, 20 Sep 2006 18:14:36 GMT</pubDate>
  </item>
  
  <item>
    <title>2 articles on Reverse Ajax</title>
    <link>http://directwebremoting.org/blog/joe/2006/09/05/2_articles_on_reverse_ajax.html</link>
    
      
        <description>
          &lt;p&gt;I came across a nice intro to Reverse Ajax with a whole set of simple graphics to explain the interaction.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#034;http://gmapsdotnetcontrol.blogspot.com/2006/08/exploring-reverse-ajax-ajax.html&#034;&gt;The blog entry&lt;/a&gt; is on the curiously named gmapsdotnetcontrol blog, and we go through the classic and Ajax models (JJG style) with polling and comet before getting to the piggyback model:&lt;/p&gt;

&lt;img src=&#034;http://getahead.ltd.uk/images/gmaps/ra5_thumb.png&#034;/&gt;

&lt;p&gt;And finally the Full Monty Reverse Ajax&lt;/p&gt;

&lt;img src=&#034;http://getahead.ltd.uk/images/gmaps/ra6_thumb.png&#034;/&gt;

&lt;p&gt;For me Reverse Ajax is not so much about the technology on how we get the message to the browser, but more about the programmers interface.&lt;/p&gt;

&lt;p&gt;&lt;a href=&#034;http://getahead.ltd.uk/dwr&#034;&gt;DWR&lt;/a&gt; gives you a dead simple set of APIs that dynamically generate Javascript and send the Javascript to one or many browsers asynchronously.&lt;/p&gt;

&lt;p&gt;The DWR Chat example has to be the simplest code to do chat anywhere. The full source &lt;a href=&#034;http://fisheye5.cenqua.com/browse/dwr/demo/uk/ltd/getahead/dwrdemo/chat/JavaChat.java?r=1.2&#034;&gt;can be seen through fisheye&lt;/a&gt;, but the core goes like this:&lt;/p&gt;

&lt;pre&gt;
WebContext wctx = WebContextFactory.get();
String currentPage = wctx.getCurrentPage();

// Find all the browsers on the current page:
Collection sessions = wctx.getScriptSessionsByPage(currentPage);
DwrUtil utilAll = new DwrUtil(sessions);

// Manipulate all the browsers to repopulate the message list
utilAll.removeAllOptions(&#034;chatlog&#034;);
utilAll.addOptions(&#034;chatlog&#034;, messages, &#034;text&#034;);
&lt;/pre&gt;

&lt;h2&gt;Wikipedia&lt;/h2&gt;

&lt;p&gt;The other article is &lt;a href=&#034;http://en.wikipedia.org/wiki/Reverse_Ajax&#034;&gt;based on this one at Wikipedia&lt;/a&gt; and they are both based on &lt;a href=&#034;http://prokata.com/reverseajax&#034;&gt;Jon&#039;s original article&lt;/a&gt;.&lt;/p&gt;

        </description>
      
      
    
    
    
    <comments>http://directwebremoting.org/blog/joe/2006/09/05/2_articles_on_reverse_ajax.html#comments</comments>
    <guid isPermaLink="true">http://directwebremoting.org/blog/joe/2006/09/05/2_articles_on_reverse_ajax.html</guid>
    <pubDate>Tue, 05 Sep 2006 13:52:00 GMT</pubDate>
  </item>
  
  <item>
    <title>Improving the quality of conference talks</title>
    <link>http://directwebremoting.org/blog/joe/2006/08/21/improving_the_quality_of_conference_talks.html</link>
    
      
        <description>
          &lt;p&gt;The feedback from techies after my talks is often &#034;Less Powerpoint, more IDE&#034;, and also that people get more out of a talk the more they can get involved.&lt;/p&gt;

&lt;a href=&#034;http://www.theajaxexperience.com/&#034;&gt;&lt;img src=&#034;http://getahead.ltd.uk/images/taeredboston06.png&#034; align=&#034;right&#034; style=&#034;margin:0px 10px&#034; border=&#034;0&#034;/&gt;&lt;/a&gt;

&lt;p&gt;So here is my (evolving) plan for how to deliver some killer talks for &lt;a href=&#034;http://www.theajaxexperience.com/&#034;&gt;The Ajax Experience&lt;/a&gt; in October.&lt;/p&gt;

&lt;p&gt;I like live coding. It&#039;s always a bit seat of your pants, but it&#039;s honest and open and the risk that the speaker is taking keeps the audience interested: &#034;Can they pull it off&#034;.&lt;/p&gt;

&lt;p&gt;So the experiment is taking this up a level. The plan is to run a CVS/SVN server and check-in the code I&#039;m writing. I&#039;m also planning on live coding an interactive application so people with a network connection can both use the app we write and can also check-out the code for themselves.&lt;/p&gt;

&lt;p&gt;And while we are at it, why not allow the audience to check code in as well?&lt;/p&gt;

&lt;p&gt;What do you think? Could it work? Would you come? Odds on me messing it up?&lt;/p&gt;

&lt;p&gt;Also what sort of Ajax / DWR application should we write? It needs to be interactive and fairly simple. Any suggestions?&lt;/p&gt;
        </description>
      
      
    
    
    
    <comments>http://directwebremoting.org/blog/joe/2006/08/21/improving_the_quality_of_conference_talks.html#comments</comments>
    <guid isPermaLink="true">http://directwebremoting.org/blog/joe/2006/08/21/improving_the_quality_of_conference_talks.html</guid>
    <pubDate>Mon, 21 Aug 2006 10:49:25 GMT</pubDate>
  </item>
  
  </channel>
</rss>
