<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-1141629632747507111</id><updated>2010-01-11T09:47:33.689+01:00</updated><title type='text'>Nic's blog</title><subtitle type='html'></subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1141629632747507111/posts/default'/><link rel='alternate' type='text/html' href='http://www.nicolarizzo.com/blog/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.nicolarizzo.com/blog/atom.xml'/><author><name>Nicola Rizzo</name><uri>http://www.blogger.com/profile/15498459308678198904</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1141629632747507111.post-5541323917250940859</id><published>2008-07-09T22:17:00.024+02:00</published><updated>2008-07-12T20:02:39.437+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='cross framework'/><category scheme='http://www.blogger.com/atom/ns#' term='jquery'/><category scheme='http://www.blogger.com/atom/ns#' term='dojo'/><category scheme='http://www.blogger.com/atom/ns#' term='portability'/><title type='text'>Cross framework javascript - coding for portability</title><content type='html'>Imagine that you have written a useful javascript widget using your preferred library (dojo), but at work you must use another framework (jQuery), and a customer needs that you code with Prototype.&lt;br /&gt;Now, you can modify your component by hand, replacing the ajax calls (eg from dojo.xhrGet to $.get), the event handling (from dojo.connect to obj.observe...), the effects... What a boring job!&lt;br /&gt;&lt;br /&gt;Or you can write a wrapper who dynamically identifies the js library you are using and maps the ajax calls (and the event handlers, etc...) to the correct form for you.&lt;br /&gt;We can write code like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;     var engine = com.nicolarizzo.utils.runtime.currentEngine;&lt;br /&gt;     var showMessage = function(){&lt;br /&gt;         window.alert("that's all!");&lt;br /&gt;     };&lt;br /&gt;     var startup = function(){&lt;br /&gt;         engine.byId("currentEngine").innerHTML = com.nicolarizzo.utils.runtime.engineName;&lt;br /&gt;         engine.connect(engine.byId("clickMe"), "onclick", this, showMessage);&lt;br /&gt;     };&lt;br /&gt;     engine.addOnLoad(startup);&lt;br /&gt;&lt;/pre&gt;without the knowledge of the underlying frameworks!&lt;br /&gt;&lt;br /&gt;Voilà, &lt;a href="http://www.nicolarizzo.com/gamesroom/crossFramework.html"&gt;here&lt;/a&gt; a proof of concept, incomplete and inaccurate as usual, using jQuery :)&lt;br /&gt;&lt;br /&gt;The mapping is very simple:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// jQuery mappings&lt;br /&gt;com.nicolarizzo.utils.runtime.currentEngine = {&lt;br /&gt;  addOnLoad: function(fnToExecute){&lt;br /&gt;      return jQuery(document).ready.call(jQuery, fnToExecute);&lt;br /&gt;  },&lt;br /&gt;  connect: function(trg, evt, context, method){&lt;br /&gt;      if(evt.indexOf("on") == 0){&lt;br /&gt;          evt = evt.substring(2);&lt;br /&gt;      }&lt;br /&gt;      context = context || trg;&lt;br /&gt;      jQuery(trg).bind(evt, function(){method.call(context)});&lt;br /&gt;  },&lt;br /&gt;  byId: function(id){&lt;br /&gt;      return jQuery("#" + id)[0];&lt;br /&gt;  }&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Isn't it nice? ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1141629632747507111-5541323917250940859?l=www.nicolarizzo.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1141629632747507111/5541323917250940859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1141629632747507111&amp;postID=5541323917250940859' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1141629632747507111/posts/default/5541323917250940859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1141629632747507111/posts/default/5541323917250940859'/><link rel='alternate' type='text/html' href='http://www.nicolarizzo.com/blog/2008/07/cross-framework-javascript-coding-for.html' title='Cross framework javascript - coding for portability'/><author><name>Nicola Rizzo</name><uri>http://www.blogger.com/profile/15498459308678198904</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14674481852666363076'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1141629632747507111.post-4155744328986199531</id><published>2008-06-15T10:58:00.002+02:00</published><updated>2008-06-15T22:54:19.584+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='very lazy loading'/><category scheme='http://www.blogger.com/atom/ns#' term='transparent lazy loading'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='dojo'/><title type='text'>(Very) lazy loading in javascript</title><content type='html'>Using the "lazy loading" in javascript is a common technique to minimize the startup time of a web application.&lt;br /&gt;Usually a single object is retrieved from the server with its own members and methods: but why not use instead of the methods a stub which loads the method source when is called the first time?&lt;br /&gt;For example, a singleton object like this, having two methods:&lt;br /&gt;&lt;pre&gt;var application = {&lt;br /&gt;sum: function(){&lt;br /&gt;    return arguments[0] + arguments[1];&lt;br /&gt;},&lt;br /&gt;product: function(){&lt;br /&gt;    return arguments[0] * arguments[1];&lt;br /&gt;}&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;could be written as (you can use your preferred ajax framework/library; remember: use a synchronous call):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;var application = {};&lt;br /&gt;var names = {&lt;br /&gt;"sum" : "sum.js",&lt;br /&gt;"product" : "product.js"&lt;br /&gt;};&lt;br /&gt;for(var i in names){&lt;br /&gt;application[i] = function(x){&lt;br /&gt;  return function(){&lt;br /&gt;      dojo.xhrGet({&lt;br /&gt;          url: names[x],&lt;br /&gt;          sync:true,&lt;br /&gt;          handleAs:"text",&lt;br /&gt;          load: function(data){&lt;br /&gt;              application[x] = new Function(data.replace(/\n/g, ""));&lt;br /&gt;          },&lt;br /&gt;          error: function(err){&lt;br /&gt;              window.alert("[error] " + err);&lt;br /&gt;          }&lt;br /&gt;      });&lt;br /&gt;      return application[x].apply(this, arguments);&lt;br /&gt;  }&lt;br /&gt;}(i);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Oh yes, this is a stupid example, the stub method is greater than the real method, but it's only a proof of concept ;)&lt;br /&gt;You can find a live example &lt;a href="http://www.nicolarizzo.com/gamesroom/veryLazyLoading.html"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1141629632747507111-4155744328986199531?l=www.nicolarizzo.com%2Fblog' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/1141629632747507111/4155744328986199531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=1141629632747507111&amp;postID=4155744328986199531' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1141629632747507111/posts/default/4155744328986199531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1141629632747507111/posts/default/4155744328986199531'/><link rel='alternate' type='text/html' href='http://www.nicolarizzo.com/blog/2008/06/placeholder.html' title='(Very) lazy loading in javascript'/><author><name>Nicola Rizzo</name><uri>http://www.blogger.com/profile/15498459308678198904</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='14674481852666363076'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>