<?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' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5431935042261700190</id><updated>2012-02-16T19:03:16.137-08:00</updated><category term='Distributed Web Architecture'/><title type='text'>Bob Leurck @Google</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://bobleurck.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5431935042261700190/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://bobleurck.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ExperalPrime</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5431935042261700190.post-964731992099381296</id><published>2009-02-24T18:15:00.000-08:00</published><updated>2009-02-24T18:31:12.788-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Distributed Web Architecture'/><title type='text'></title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_tsRK8DpWikI/SaSqI9WQijI/AAAAAAAAAPo/yKOYDr3u7OI/s1600-h/web_architecture.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5306553331832883762" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 286px; CURSOR: hand; HEIGHT: 320px" alt="" src="http://2.bp.blogspot.com/_tsRK8DpWikI/SaSqI9WQijI/AAAAAAAAAPo/yKOYDr3u7OI/s320/web_architecture.jpg" border="0" /&gt;&lt;/a&gt; A distributed web architecture allows for separation of site support services to the maximum extent possible. This is achieved by adopting the web service interface paradigm at the business facade. The UI elements , served by a web platform can obtain their business objects from one or many network services, not a central EJB or App Server technology. In this fashion those business objects and transactions that require pools of servers to meet their performance objectives can be scaled quickly and easily at low cost with simple hardware and not scale based on increasing cpus on a single server . This approach can be applied across web technologies and tools.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5431935042261700190-964731992099381296?l=bobleurck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bobleurck.blogspot.com/feeds/964731992099381296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5431935042261700190&amp;postID=964731992099381296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5431935042261700190/posts/default/964731992099381296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5431935042261700190/posts/default/964731992099381296'/><link rel='alternate' type='text/html' href='http://bobleurck.blogspot.com/2009/02/distributed-web-architecture-allows-for.html' title=''/><author><name>ExperalPrime</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_tsRK8DpWikI/SaSqI9WQijI/AAAAAAAAAPo/yKOYDr3u7OI/s72-c/web_architecture.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5431935042261700190.post-4082005280961976235</id><published>2007-09-14T13:34:00.000-07:00</published><updated>2007-09-14T13:43:42.139-07:00</updated><title type='text'>August 07 json.js breaks for in loops</title><content type='html'>I like this new &lt;a href="http://www.json.org/js.html"&gt;json.js&lt;/a&gt; implementation. However, Douglas Crockford extends Object , and Array so all my for in loops are broken.&lt;br /&gt;&lt;br /&gt;A simple solution for Array is :&lt;br /&gt;&lt;br /&gt;  var aList = new Array();&lt;br /&gt;  aList.push("A");&lt;br /&gt;  aList.push("B");&lt;br /&gt;&lt;br /&gt;  for (var propertyName in aList) &lt;br /&gt;  {&lt;br /&gt;       // must know type of aList  &lt;br /&gt;       if (Array.prototype[propertyName] === undefined)// skip any extensions&lt;br /&gt;       {&lt;br /&gt;     alert(aList[propertyName]);&lt;br /&gt;       }&lt;br /&gt;  }    &lt;br /&gt;&lt;br /&gt;Thanks to &lt;a href="http://web-graphics.com/2006/05/23/on-modifying-prototypes-of-javascript-built-ins/#comment-237"&gt; this post &lt;/a&gt; for this technique.&lt;br /&gt;&lt;br /&gt;FYI Douglas Crockford has a reccomendation for &lt;a href="http://www.crockford.com/javascript/recommend.html"&gt; this . &lt;/a&gt;&lt;br /&gt;Please see the discussion on DontEnum .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5431935042261700190-4082005280961976235?l=bobleurck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bobleurck.blogspot.com/feeds/4082005280961976235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5431935042261700190&amp;postID=4082005280961976235' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5431935042261700190/posts/default/4082005280961976235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5431935042261700190/posts/default/4082005280961976235'/><link rel='alternate' type='text/html' href='http://bobleurck.blogspot.com/2007/09/august-07-jsonjs-breaks-for-in-loops.html' title='August 07 json.js breaks for in loops'/><author><name>ExperalPrime</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5431935042261700190.post-1540593545288913415</id><published>2007-09-13T14:21:00.000-07:00</published><updated>2007-09-13T14:23:31.608-07:00</updated><title type='text'>Scope and Bind in Javascript and Prototype</title><content type='html'>Just read &lt;a href="http://alternateidea.com/blog/articles/2007/7/18/javascript-scope-and-binding" &gt;this&lt;/a&gt; and wanted to remember it . A great article on Prototype bind and variable scope in Javascript. Nice graphics too !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5431935042261700190-1540593545288913415?l=bobleurck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bobleurck.blogspot.com/feeds/1540593545288913415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5431935042261700190&amp;postID=1540593545288913415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5431935042261700190/posts/default/1540593545288913415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5431935042261700190/posts/default/1540593545288913415'/><link rel='alternate' type='text/html' href='http://bobleurck.blogspot.com/2007/09/scope-and-bind-in-javascript-and.html' title='Scope and Bind in Javascript and Prototype'/><author><name>ExperalPrime</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5431935042261700190.post-3193630090961183909</id><published>2007-04-26T11:28:00.000-07:00</published><updated>2007-04-26T11:37:31.004-07:00</updated><title type='text'></title><content type='html'>A great intro to javascript objects .&lt;br /&gt;http://www.crockford.com/javascript/private.html&lt;br /&gt;&lt;br /&gt;And a nice discussion is here.&lt;br /&gt;http://www.sitepoint.com/article/javascript-objects&lt;br /&gt;&lt;br /&gt;With my slight modifications below:&lt;br /&gt;You can cut and paste this into a js file and call from a page&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;script src="yourSavedFileName.js"&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;Object.prototype.addProperty = function (sType, sName, vValue) {&lt;br /&gt;&lt;br /&gt;       if (typeof vValue != sType) {&lt;br /&gt;           alert("Property " + sName + " must be of type " + sType + ".");&lt;br /&gt;           return;&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       this[sName] = vValue;&lt;br /&gt;&lt;br /&gt;       var sFuncName = sName.charAt(0).toUpperCase() + sName.substring(1, sName.length);&lt;br /&gt;&lt;br /&gt;       this["get" + sFuncName] = function () { return this[sName] };&lt;br /&gt;       this["set" + sFuncName] = function (vNewValue) {&lt;br /&gt;&lt;br /&gt;                if (typeof vNewValue != sType) {&lt;br /&gt;                   alert("Property " + sName + " must be of type " + sType + ".");&lt;br /&gt;                   return;&lt;br /&gt;               }&lt;br /&gt;&lt;br /&gt;               var vOldValue = this["get" + sFuncName]();&lt;br /&gt;               var oEvent = {&lt;br /&gt;                       propertyName: sName,&lt;br /&gt;                       propertyOldValue: vOldValue,&lt;br /&gt;                       propertyNewValue: vNewValue,&lt;br /&gt;                       returnValue: true&lt;br /&gt;                       };&lt;br /&gt;               this.onpropertychange(oEvent);&lt;br /&gt;               if (oEvent.returnValue) {&lt;br /&gt;                       this[sName] = oEvent.propertyNewValue;&lt;br /&gt;               }&lt;br /&gt;&lt;br /&gt;       };&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;the typeof operator returns one of the following values:&lt;br /&gt;&lt;br /&gt;    * "undefined" the value doesn’t exist.&lt;br /&gt;    * "string"&lt;br /&gt;    * "number"&lt;br /&gt;    * "function"&lt;br /&gt;    * "object"&lt;br /&gt;    * "boolean"&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;//sample implementation&lt;br /&gt;&lt;br /&gt;var ClassB= function(){&lt;br /&gt;   var iamPrivate = 5;&lt;br /&gt;   this.publicX = 10;&lt;br /&gt;   this.addProperty("string", "message", "Hello world");&lt;br /&gt;   this.addProperty("string", "name", "Nicholas C. Zakas");&lt;br /&gt;   this.addProperty("number", "age", 25);&lt;br /&gt;&lt;br /&gt;   this.setPrivate = function(val) {&lt;br /&gt;       iamPrivate = val;&lt;br /&gt;   };&lt;br /&gt;&lt;br /&gt;   this.getPrivate = function() {&lt;br /&gt;       return iamPrivate ;&lt;br /&gt;   };&lt;br /&gt;&lt;br /&gt;   this.onpropertychange = function(oEvent) {&lt;br /&gt;      if (oEvent.propertyName == "name") {&lt;br /&gt;          oEvent.returnValue = false;  //don’t allow name to be changed&lt;br /&gt;      }&lt;br /&gt;   };&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;var Test = new ClassB();&lt;br /&gt;alert(Test.getMessage()); //outputs "Hello world"&lt;br /&gt;Test.setMessage("Goodbye world");&lt;br /&gt;alert(Test.getMessage());  //outputs "Goodbye world"&lt;br /&gt;alert(Test.getName());      //outputs "Nicholas C. Zakas"&lt;br /&gt;Test.setName("Michael A. Smith");&lt;br /&gt;alert(Test.getName());       //outputs "Nicholas C. Zakas"&lt;br /&gt;&lt;br /&gt;// now override onpropertychange&lt;br /&gt;&lt;br /&gt;Test.onpropertychange = function(oEvent) {&lt;br /&gt;   if (oEvent.propertyName == "age") {&lt;br /&gt;       oEvent.returnValue = false;  //don’t allow name to be changed&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;Test.setName("Michael A. Override");&lt;br /&gt;alert(Test.getName());       //outputs "Michael A. Override"&lt;br /&gt;alert(Test.getAge());      //outputs 25&lt;br /&gt;Test.setAge("45");         //generates error message&lt;br /&gt;alert(Test.getAge());       //outputs 25&lt;br /&gt;Test.setAge(35);         //sets value&lt;br /&gt;alert(Test.getAge());       //outputs 25 since onpropertychange was overridden&lt;br /&gt;alert(Test.publicX);&lt;br /&gt;Test.publicX = 15;&lt;br /&gt;alert(Test.publicX);  // no private variables&lt;br /&gt;alert(Test.getPrivate()); // returns 5&lt;br /&gt;alert(Test.iamPrivate); // not exist - undefined&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5431935042261700190-3193630090961183909?l=bobleurck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bobleurck.blogspot.com/feeds/3193630090961183909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5431935042261700190&amp;postID=3193630090961183909' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5431935042261700190/posts/default/3193630090961183909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5431935042261700190/posts/default/3193630090961183909'/><link rel='alternate' type='text/html' href='http://bobleurck.blogspot.com/2007/04/great-intro-to-javascript-objects.html' title=''/><author><name>ExperalPrime</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5431935042261700190.post-6188734159954418379</id><published>2007-03-14T09:40:00.000-07:00</published><updated>2007-03-14T09:44:56.045-07:00</updated><title type='text'></title><content type='html'>Check out www.meebo.com. It is an html/javascript/browser interface to instant messaging systems. They also have a widget "meebome" which allows visitors to a web page to chat with the person on the other end of  the meebome widget. The front door for the networked society ! (Until spammers and direct marketers make you "close" your front door.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5431935042261700190-6188734159954418379?l=bobleurck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bobleurck.blogspot.com/feeds/6188734159954418379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5431935042261700190&amp;postID=6188734159954418379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5431935042261700190/posts/default/6188734159954418379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5431935042261700190/posts/default/6188734159954418379'/><link rel='alternate' type='text/html' href='http://bobleurck.blogspot.com/2007/03/check-out-www.html' title=''/><author><name>ExperalPrime</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5431935042261700190.post-8725143781876540033</id><published>2007-03-06T04:48:00.001-08:00</published><updated>2007-03-06T04:48:29.978-08:00</updated><title type='text'></title><content type='html'>Welcome&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5431935042261700190-8725143781876540033?l=bobleurck.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://bobleurck.blogspot.com/feeds/8725143781876540033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5431935042261700190&amp;postID=8725143781876540033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5431935042261700190/posts/default/8725143781876540033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5431935042261700190/posts/default/8725143781876540033'/><link rel='alternate' type='text/html' href='http://bobleurck.blogspot.com/2007/03/welcome.html' title=''/><author><name>ExperalPrime</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
