<?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>HTML + CSS + JavaScript &#187; JavaScript</title>
	<atom:link href="http://htmlcssjavascript.com/category/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://htmlcssjavascript.com</link>
	<description>Not a Ninja, Pirate or Jedi.</description>
	<lastBuildDate>Wed, 11 Jan 2012 18:18:30 +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>Using the Geolocation API</title>
		<link>http://htmlcssjavascript.com/javascript/using-the-geolocation-api/</link>
		<comments>http://htmlcssjavascript.com/javascript/using-the-geolocation-api/#comments</comments>
		<pubDate>Mon, 02 Jan 2012 19:03:05 +0000</pubDate>
		<dc:creator>Rob Larsen</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://htmlcssjavascript.com/?p=8148</guid>
		<description><![CDATA[The following is probably the last long-form article you&#8217;ll see here for a while. I&#8217;m in full on book mode for the next couple of months, so I&#8217;m not expecting to be writing a ton here for the foreseeable future. Anyway, the following is actually inspired by the kind of work we&#8217;re going to be [...]]]></description>
			<content:encoded><![CDATA[<p>The following is probably the last long-form article you&#8217;ll see here for a while. I&#8217;m in full on <a href="http://htmlcssjavascript.com/web/im-writing-a-book/">book mode</a> for the next couple of months, so I&#8217;m not expecting to be writing a ton here for the foreseeable future.</p>
<p>Anyway, the following is actually inspired by the kind of work we&#8217;re going to be doing for the book. I&#8217;m not actually doing any code-heavy writing for the book, so I wanted to get my hands dirty with this sort of content. It&#8217;s fun. </p>
<p>As an aside, I&#8217;ll have another (short) post about the book shortly. I&#8217;ve got a full allotment of co-authors and I&#8217;d like to give them, and the project, a little shine before I turn into a writing hermit.</p>
<p>And now&#8230; Geolocation</p>
<hr />
<p>One of the most powerful aspects of mobile web app development is  the ability to blur the line between the real world and the world on the screen.  Allowing users to interact with physical places in novel ways is driving  startups across the world and is infiltrating some of the most popular sites  and applications on the web. Facebook, Foursquare, Twitter, Google+ and  countless other services have built the idea of location into the core of their  applications. You too can do the same in your mobile web app by taking  advantage of the well-supported <a href="http://dev.w3.org/geo/api/spec-source.html">Geolocation API</a>. </p>
<p>Whether it’s interaction with your own location based services or  with a third party API, like the Google Maps API in use in this recipe, the  journey begins with getting the user’s latitude and longitude. </p>
<p>In this article  you’ll learn how to:</p>
<ul>
<li>Use the W3C Geolocation API to get a user’s  latitude and longitude</li>
<li>Smoothly handle devices without Geolocation  support, providing a reasonable fallback for older devices</li>
<li>Use the Google Maps API to place a marker  indicating the user’s location, labeled with a friendly place name</li>
</ul>
<h2>The Basics of the Geolocation API</h2>
<p>Before we dive into the heart of the example let’s quickly look  at the Geolocation API.</p>
<p>The elevator pitch is to the point- the W3C’s Geolocation API  allows developers to retrieve the geographical location of a device. It became  a Candidate Recommendation, the level at which the W3C deems features and  functionality pretty much settled, in September of 2010 and already has support  across a variety of devices and browsers. At the present time it’s supported  all the major smartphone browsers and even on the desktop it’s supported by all  major browsers except Internet Explorer 6, 7, 8 and Safari 3.2 and 4.0. </p>
<p>As a note, the Geolocation API was heavily influenced by the  analogous functionality provided by the Google Gears plugin. This is why you  often see the mothballed Google Gears plugin referenced as a fallback in many  geolocation examples. </p>
<p>The API itself is straightforward.  It provides a <code>navigator.geolocation</code>  object which in turn provides two methods (<code>watchPosition</code>  and <code>getCurrentPosition</code>) which allow the browser to query the  device’s location through the use of location information servers.  If you’re getting a location for use in a  search or in a check-in, then <code>getCurrentPosition</code>  is the method you want to use as it’s designed for a single  location lookup. If you’re tracking a user’s location over time, then <code>watchPosition</code> is the way  to go since it’s designed to be used over a longer period of time. </p>
<p>Location information is pulled from a variety of sources  including IP address, device GPS, Wi-Fi and Bluetooth MAC address, RFID, or  Wi-Fi connection location. The different level of precision inherent in these  several methods is exposed by the API as an <code>accuracy</code>  property. </p>
<p>Now that we’ve taken a look at the Geolocation API, let’s walk through  our code in depth.</p>
<h2>Getting Started with the Geolocation API</h2>
<p> While the Geolocation API is straightforward, getting it up and  running smoothly in the real world is a little bit tricky. Accounting for a  successful result is one thing, making sure there’s a decent response for  browsers without geolocation capability or in other instances where geolocation  isn’t available is another. </p>
<p>Our example will touch on ways to minimize these issues and will  illustrate the basics of a successful request. </p>
<h3>Testing for the Geolocation object and Querying  the User’s Location</h3>
<p>The first thing you’ll need to do when working with Geolocation  is to test whether or not it’s actually available in the browser. This is done  by testing against the presence of the <code>navigator.geolocation</code> object. As you’ll  see in the following code sample, this is a simple <code>if…else</code>  block with a call to the <code>navigator.getCurrentPosition()</code>  method when the object is present and a fallback when it’s not available.</p>
<p>The method <code>getCurrentPosition()</code>  takes three arguments:</p>
<ol>
<li>the function to run on a successful location  request</li>
<li>the function to run as when the request fails</li>
<li>a <code>PositionOptions</code> object containing other  optional configuration objects. </li>
</ol>
<p>In our case we’re passing in two named functions, <code>success</code> and <code>failure</code>, and an optional  timeout of five seconds, which will keep things moving if something goes awry  with the request. </p>
<p><strong>Listing 1 Testing for  the presence of the navigator.geolocation object</strong></p>
<div class="code-sample wide"><code>
<pre>
if (navigator.geolocation){  // does the geolocation object exist?             
  navigator.geolocation.getCurrentPosition( 
    success, 
    failure, 
    {timeout:5000} 
  );          
} else {
  failure();  
}      
</pre>
<p></code></div>
<p>  In addition to the timeout  seen in the previous example the <code>PositionOptions</code>  object accepts two other options- <code>enableHighAccuracy</code>  and <code>maximumAge</code>. <code>enableHighAccuracy</code>  indicates that you would like receive the best possible results at the  potential cost of speed or battery performance. <code>maximumAge</code> sets a limit, in  milliseconds, for the age of a cached position object. The browser caches  recent position location responses. Setting <code>maximumAge</code> to 0 will immediately force  the browsers to try to obtain a new location. </p>
<h3>Handling a successful geolocation request</h3>
<p>The first function we’ll look at it is our success function. You can  see it in Listin 1.2</p>
<p>In our example we’re using the Google Maps API to display a  marker with the user’s current location. </p>
<p> The function accepts a single <code>data</code> argument. This argument is  automatically passed into the function by the geolocation API. This is object  is defined in the specification to contain two properties <code>coords</code> and <code>timestamp</code>.  <code>timestamp</code> is, as expected, a timestamp indicating the age of the position  information. For this example we’re most interested in the <code>coords</code> object which  contains a latitude/longitude pair indicating the user’s position. </p>
<p> Moving on from the single  argument, you’ll see several Google Maps specific variables. </p>
<p>The first, <code>GM</code>,represents  a simple technique to speed up JavaScript. By creating a local representation  of the <code>google.maps</code> object we save lookups to the global space. In general,  local variables are faster. This is especially important with mobile which devices don’t have the fastest JavaScript engines. </p>
<p ><em>Every little bit helps.</em> </p>
<p>The most important piece, from a geolocation perspective, is the  use of two properties, <code>data.coords.latitude</code> and <code>data.coords.longitude</code>, to build  a new Google Maps LatLng object. The LatLng object is a core component of  Google Maps. At its core it’s a latitude/longitude pair enhanced with methods  and properties used throughout the API. To create one in our example you simply  pass it the two properties of the data.coords object. We store that in our position variable. </p>
<p> We now have our user’s location, ready to place on the map. </p>
<p>  The next section we’re using the Google Maps Geocoder to get a  friendly label for the user’s location. Geocoding works in two ways. Normal  geocoding means you pass the service an address string and it will return a  series of geographical results. In our case we’re doing reverse geocoding,  which means we pass the service a latitude/longitude pair and the service  returns whatever it knows about the location. </p>
<p><strong>Listing 2 Successfully handling a geolocation  request</strong></p>
<div class="code-sample wide"><code>
<pre>
var success = function( data ){ //the data object, passed into success
  var GM = google.maps,
      mapOptions = {
        zoom: 12,
        center:  defaultPosition,
        mapTypeId:  GM.MapTypeId.ROADMAP
      },
      map = new GM.Map(  document.getElementById('map'), mapOptions),
      position = new GM.LatLng( 
        data.coords.latitude, //accessing the coords property
        data.coords.longitude 
      ),      
      niceAddress = &quot;Your location&quot;,
      geocoder = new GM.Geocoder();
      geocoder.geocode( { 'latLng' : position  }, 
        function( results, status ) {
          if ( status == GM.GeocoderStatus.OK ) {
            if (results[0]) {
              niceAddress = results[0].formatted_address;
            }
          } 
          var infowindow = new GM.InfoWindow({
            map: map,
            position: position,
            content: niceAddress
          });
        });
      map.setCenter(position);
    }
</pre>
<p></code></div>
<h3>Handling a Geolocation Failure</h3>
<p>  Our <code>failure</code>  function handles two negative situations. If the user doesn’t have a  geolocation enabled browser or if there’s an error in the geolocation lookup,  this function is ready to step in and save the day. The <code>failure</code>  function can be seen in Listing 3</p>
<p>You’ll see the setup is similar to the success  function with a Google Maps object being created with some smart defaults. </p>
<p>The major difference is in the way we get the latitude and  longitude for the map. Instead of getting the coordinates from a geolocation  response we create a simple form to allow the user to enter their location.  Inside the <code>formResponse</code>  function we use then use the Google Maps Geocoding service to get a latitude  and longitude pair corresponding to the location in the form submission. </p>
<p> Additionally we use the geolocation error  response, if it exists, to build out a slightly more useful error message. If a  browser supports geolocation and has some issue with the location request it should  return an error response as the single argument to the provided callback  function. </p>
<p><strong>Listing 3 The failure Function</strong></p>
<div class="code-sample wide"><code>
<pre>
var failure = function( error ){ //The potential error response
  var  GM = google.maps,
       mapOptions = {
         zoom: 12,
         center:  defaultPosition,
         mapTypeId:  GM.MapTypeId.ROADMAP
       },
       map = new GM.Map(  document.getElementById('map'), mapOptions),
       formResponse = function(e){
         var geocoder = new GM.Geocoder(),
             position = defaultPosition,
             niceAddress =  &quot;Sorry We Couldn't Find Your Location&quot;;
         geocoder.geocode(
           { 'address':  document.getElementById(&quot;location&quot;).value }, 
           function( results, status ) {
             if ( status ==  GM.GeocoderStatus.OK ) {
               if (results[0]) {
                 niceAddress =  results[0].formatted_address;
                 position = new GM.LatLng( 
                   results[0].geometry.location.lat(),
                   results[0].geometry.location.lng() 
                 )
               }
             } 
           var options = {
             map : map,
             position :  position,
             content :  niceAddress
            },
           infowindow = new  google.maps.InfoWindow(options);
           map.setCenter(options.position);
           document.getElementById(&quot;geocode&quot;).style.display=&quot;none&quot;;
         }
       )
     return false;
   }
   var  fallback = document.createElement(&quot;form&quot;);
   fallback.id=&quot;geocode&quot;;
   if ( error ) { 
     switch(error.code) {//Error Handling based on error.code   
      //HANDLE ERRORS//
   }      
 }  
 fallback.innerHTML  = &quot;&lt;label for='location'&gt;Eneter Your Location&quot; + 
  &quot;&lt;input  type='text' id='location' /&gt;&lt;/label&gt;&lt;input type='submit'  /&gt;&quot;;
 fallback.onsubmit  = formResponse;
 document.getElementById(&quot;main&quot;).appendChild(  fallback );
};
</pre>
<p></code></div>
<p>The error response contains a code  object indicating the type of error and a human readable message string that’s  defined to be used in debugging or for error logs. There are four potential  values for the <code>error.code</code>. These can be seen in Table 1:</p>
<p><strong>Table 1 Possible error response  codes</strong></p>
<table class="dataTable">
<tr>
<td width="62" valign="top">
<div>
      Code </div>
</td>
<td width="231" valign="top">
<div>
<p>Name </p>
</p></div>
</td>
<td width="230" valign="top">
<div>
<p>Definition</p>
</p></div>
</td>
</tr>
<tr>
<td width="62" valign="top">
<p>0</p>
</td>
<td width="231" valign="top">
<p>UNKNOWN_ERROR </p>
</td>
<td width="230" valign="top">
<p>The location lookup failed due to an undefined error</p>
</td>
</tr>
<tr>
<td width="62" valign="top">
<p>1</p>
</td>
<td width="231" valign="top">
<p>PERMISSION_DENIED </p>
</td>
<td width="230" valign="top">
<p>The location lookup failed because the application does    not have permission to use the Geolocation API.</p>
</td>
</tr>
<tr>
<td width="62" valign="top">
<p>2</p>
</td>
<td width="231" valign="top">
<p>POSITION_UNAVAILABLE </p>
</td>
<td width="230" valign="top">
<p>The position of the device could not be determined. </p>
</td>
</tr>
<tr>
<td width="62" valign="top">
<p>3</p>
</td>
<td width="231" valign="top">
<p>TIMEOUT</p>
</td>
<td width="230" valign="top">
<p>The location lookup took longer than the length of time    defined in </p>
</td>
</tr>
</table>
<h3>Putting it all together</h3>
<p> Listing 4 shows the completed function. In it we’ve wrapped  our two methods into a larger function called <code>loadMap</code>.  Doing so allows us to streamline the code by  creating a single set of defaults for the map and to encapsulate all of the  functionality under a single function so as to keep the global namespace as  neat as possible. </p>
<p><strong>Listing 4 The Completed Function</strong></p>
<div class="code-sample wide"><code></p>
<pre>var loadMap = function(){
  var GM = google.maps,
      defaultPosition = new GM.LatLng(42, -71),
      mapOptions = {
      zoom: 12,
      center: defaultPosition,
      mapTypeId: GM.MapTypeId.ROADMAP},
    map = new GM.Map(
      document.getElementById('map'),
      mapOptions
    ),
    success = function( data ){
      var position = new GM.LatLng(
        data.coords.latitude,
        data.coords.longitude
      ),
         niceAddress = 'Your location',
         geocoder = new GM.Geocoder();
      geocoder.geocode({
        'latLng': position },
         function( results, status ) {
           if ( status == GM.GeocoderStatus.OK ){
             if (results[0]) {
               niceAddress = results[0].formatted_address;
             }
           }
           var infowindow = new GM.InfoWindow({
             map: map,
             position: position,
             content: niceAddress
           });
         }
       );
      map.setCenter( position );
    },
    failure = function( error ){
      var formResponse = function(){
        var geocoder = new GM.Geocoder(),
            position = defaultPosition,
            niceAddress = 'Sorry We Couldn't Find Your Location';
        geocoder.geocode({
     'address':document.getElementById('location').value
    },
          function( results, status ) {
            if ( status == GM.GeocoderStatus.OK ){
              if (results[0]) {
                niceAddress = results[0].formatted_address;
                position = new GM.LatLng(
                  results[0].geometry.location.lat(),
                  results[0].geometry.location.lng()
                )
               }
             }
             var options = {
                map: map,
                position: position,
                content: niceAddress
              },
              infowindow = new google.maps.InfoWindow(options);
              map.setCenter(options.position);
              document.getElementById('geocode').style.display='none';
           }
         )
       return false;
     }
     var fallback = document.createElement('form');
     fallback.id='geocode';
      if ( error ) {
       switch(error.code) {
         case error.PERMISSION_DENIED:
     	    fallback.innerHTML += &quot;&lt;p&gt;You chose not share geolocation data. Please, use the form below. &lt;/p&gt;&quot; ;  
         break;  
	 case error.POSITION_UNAVAILABLE:
            fallback.innerHTML += &quot;&lt;p&gt;Sorry, we couldn't determine your location. Please, use the form below. &lt;/p&gt;&quot; ;
         break;  
         case error.TIMEOUT: 
            fallback.innerHTML += &quot;&lt;p&gt;Sorry, the location request time out. Please, use the form below. &lt;/p&gt;&quot; ;
         break;  
         default: 
            fallback.innerHTML += &quot;&lt;p&gt;Sorry, there was an error. Please use the form below. &lt;/p&gt;&quot; ;
         break;
       }  	
    }
    fallback.innerHTML += &quot;&lt;label for='location'&gt;Eneter Your Location &lt;input type='text' id='location' /&gt;&lt;/label&gt;&lt;input type='submit' /&gt;&quot;;
    fallback.onsubmit = formResponse;
    document.getElementById(&quot;main&quot;).appendChild( fallback );
  };
  if (navigator.geolocation){
    navigator.geolocation.getCurrentPosition( success, failure, {timeout:5000} ) ;
  } else {
    failure();
  }
}
</pre>
<p></code>
</div>
<h3>Summary</h3>
<p>With that we’ve walked through the basics of the geolocation  API. While our example utilizes the Google Maps API, any exploration of location  based services can be based on the same pattern. Use the <code>navigator.geolocation</code>  object where available, and then design in a simple fallback for non-supporting  browsers and devices.  </p>
<p><a href='http://htmlcssjavascript.com/wp-content/uploads/2011/12/geolocation.zip'>code used in the geolocation sample</a></p>
]]></content:encoded>
			<wfw:commentRss>http://htmlcssjavascript.com/javascript/using-the-geolocation-api/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>var selector</title>
		<link>http://htmlcssjavascript.com/javascript/var-selector/</link>
		<comments>http://htmlcssjavascript.com/javascript/var-selector/#comments</comments>
		<pubDate>Tue, 02 Aug 2011 21:20:07 +0000</pubDate>
		<dc:creator>Rob Larsen</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://htmlcssjavascript.com/?p=8059</guid>
		<description><![CDATA[I haven&#8217;t posted something random like this in a while. I need to post more short content here since all of my long form writing is going on at other venues (more on that soon, I hope.) Anyway, when building applications there&#8217;s often a need to build CSS selectors dynamically. This is typically some existing [...]]]></description>
			<content:encoded><![CDATA[<p>I haven&#8217;t posted something random like this in a while. I need to post more short content here since all of my long form writing is going on at other venues (more on that soon, I hope.) </p>
<p>Anyway, when building applications there&#8217;s often a need to build CSS selectors dynamically. This is typically some existing pattern paired with a loop counter or something pulled from a data attribute. </p>
<p>When I&#8217;m faced with that task I like to create a variable (called <code>selector</code>) and craft the selector on its own line. I then pass <code>selector</code> into jQuery. I do this for clarity and cleanliness. The clarity comes from the obvious way in which the selector is constructed. The variable name and the line solely dedicated to building the string makes it pretty clear what&#8217;s going on. The cleanliness factor is obviously a matter of opinion, but to me, passing a big string concatenation into jQuery just looks ugly. </p>
<p>So, what does it look like?</p>
<div class="code-sample">
<code></p>
<pre>
//slightly updated with feedback
//rest of a singleton here...
},
selector:function(id){
//take the passed in id and build a selector with it
  var selector = id+&quot; &gt; tr:last&quot;,
	myHTML=&quot;&lt;p&gt;This is my paragraph...&lt;/p&gt;&quot;;
//add some stuff to it
	$(selector).append(myHTML);
},
deleter : function(){
//later on in  different function...
//grab the a data attribute from the element firing this event
//this would be an anchor or a button
var dataId = $(this).attr("data-id");
//build a selector with it
  selector = "#list li[data-my-id="+data-id+"]";
//and remove the element from the list
  $(selector)
    .remove();
//unbind this click and remove the data attribute since
//the target element to delete is gone
$(this).attr("data-my-id","").unbind("click");
}</pre>
<p></code></div>
<p>(Look at that, a nice, painless post knocked out in a few minutes. I could get used to that kind of pace.)</p>
]]></content:encoded>
			<wfw:commentRss>http://htmlcssjavascript.com/javascript/var-selector/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>My Latest IBM Article is Live: &#8220;An introduction to Ajax&#8221;</title>
		<link>http://htmlcssjavascript.com/javascript/my-latest-ibm-article-is-live-an-introduction-to-ajax/</link>
		<comments>http://htmlcssjavascript.com/javascript/my-latest-ibm-article-is-live-an-introduction-to-ajax/#comments</comments>
		<pubDate>Tue, 14 Jun 2011 15:49:50 +0000</pubDate>
		<dc:creator>Rob Larsen</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[libraries]]></category>
		<category><![CDATA[my-work]]></category>
		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://htmlcssjavascript.com/?p=8036</guid>
		<description><![CDATA[An introduction to Ajax. Get a technical introduction to Ajax programming, and discover the core JavaScript code and popular library implementations. This article presents a brief history of the technology, then outlines the technical basics of Ajax interactions using core JavaScript coding as well as three popular JavaScript libraries.]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.ibm.com/developerworks/library/wa-aj-ajaxhistory/index.html'>An introduction to Ajax</a>.</p>
<blockquote><p>Get a technical introduction to Ajax programming, and discover the core JavaScript code and popular library implementations. This article presents a brief history of the technology, then outlines the technical basics of Ajax interactions using core JavaScript coding as well as three popular JavaScript libraries.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://htmlcssjavascript.com/javascript/my-latest-ibm-article-is-live-an-introduction-to-ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My Latest developerWorks Article is Live: ECMA-262, 5th Edition</title>
		<link>http://htmlcssjavascript.com/javascript/my-latest-developerworks-article-is-live-ecma-262-5th-edition/</link>
		<comments>http://htmlcssjavascript.com/javascript/my-latest-developerworks-article-is-live-ecma-262-5th-edition/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 15:24:47 +0000</pubDate>
		<dc:creator>Rob Larsen</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[es5]]></category>
		<category><![CDATA[my-work]]></category>
		<category><![CDATA[standards]]></category>

		<guid isPermaLink="false">http://htmlcssjavascript.com/?p=8004</guid>
		<description><![CDATA[ECMA-262, 5th Edition. The standard published under the dry title ECMA-262, 5th Edition hereafter referred to as ES5, is the latest version of the ECMAScript specification. ECMAScript is the standard upon which JavaScript—the single most important language on the web today—is built. Because the language also serves as the basis for Adobe ActionScript in addition [...]]]></description>
			<content:encoded><![CDATA[<p><a href='http://www.ibm.com/developerworks/web/library/wa-ecma262/index.html#iratings'>ECMA-262, 5th Edition</a>.</p>
<blockquote><p>The standard published under the dry title ECMA-262, 5th Edition hereafter referred to as ES5, is the latest version of the ECMAScript specification. ECMAScript is the standard upon which JavaScript—the single most important language on the web today—is built. Because the language also serves as the basis for Adobe ActionScript in addition to other flavors, it&#8217;s fair to say that the ECMAScript standard is central to the present and future of interactivity on the web.</p>
<p>Published in December 2009, ES5 represents an incremental improvement in the language, arrived at through a lengthy, and occasionally contentious, process. Still, whatever friction there might have been in the development of the specification, the end result contains some excellent enhancements to the language. This article outlines the long history of the specification&#8217;s development, then steps through many of its important new features and concepts.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://htmlcssjavascript.com/javascript/my-latest-developerworks-article-is-live-ecma-262-5th-edition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Check Out My IBM DeveloperWorks Article on Sandboxed Natives, Fusebox, and FuseJS</title>
		<link>http://htmlcssjavascript.com/javascript/check-out-my-developerworks-article-on-sandboxed-natives-fusebox-and-fusejs/</link>
		<comments>http://htmlcssjavascript.com/javascript/check-out-my-developerworks-article-on-sandboxed-natives-fusebox-and-fusejs/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 18:40:07 +0000</pubDate>
		<dc:creator>Rob Larsen</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[es5]]></category>
		<category><![CDATA[libraries]]></category>

		<guid isPermaLink="false">http://htmlcssjavascript.com/?p=7967</guid>
		<description><![CDATA[Summary: The concept of sandboxed natives, which are native JavaScript objects safely enhanced outside of the global namespace, has been circulating for several years. With Fusebox, we have a new, elegant approach to sandboxed natives—one that serves as the foundation for a new library, FuseJS. Read the rest: Sandboxed natives, Fusebox, and FuseJS.]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>Summary: </strong>The concept of sandboxed natives, which are native JavaScript objects safely enhanced outside of the global namespace, has been circulating for several years. With Fusebox, we have a new, elegant approach to sandboxed natives—one that serves as the foundation for a new library, FuseJS.
</p></blockquote>
<p>Read the rest:</p>
<p><a href='http://www.ibm.com/developerworks/web/library/wa-javascripthistory/'>Sandboxed natives, Fusebox, and FuseJS</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://htmlcssjavascript.com/javascript/check-out-my-developerworks-article-on-sandboxed-natives-fusebox-and-fusejs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

