<?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>Blue Sky On Mars &#187; JavaScript</title>
	<atom:link href="http://www.blueskyonmars.com/category/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.blueskyonmars.com</link>
	<description>The Nuts and Bolts of Creating Great Software Products</description>
	<lastBuildDate>Wed, 01 Sep 2010 14:27:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Bespin and jQuery</title>
		<link>http://www.blueskyonmars.com/2010/05/25/bespin-and-jquery/</link>
		<comments>http://www.blueskyonmars.com/2010/05/25/bespin-and-jquery/#comments</comments>
		<pubDate>Tue, 25 May 2010 16:21:37 +0000</pubDate>
		<dc:creator>Kevin Dangoor</dc:creator>
				<category><![CDATA[Bespin]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.blueskyonmars.com/?p=2739</guid>
		<description><![CDATA[Yesterday, we announced that the  Bespin server is going to be rebuilt from the ground up in node.js with a  decentralized model in mind. I&#8217;ve seen a lot of positive reaction to  that, which is great because I think it&#8217;s an important step forward for  Bespin. We also mentioned on bespin-core [...]]]></description>
			<content:encoded><![CDATA[<div id="magicdomid669">Yesterday, we announced that the  Bespin server is going to be <a href="http://groups.google.com/group/bespin/browse_thread/thread/6de8c718d64232a0">rebuilt from the ground up in node.js</a> with a  decentralized model in mind. I&#8217;ve seen a lot of positive reaction to  that, which is great because I think it&#8217;s an important step forward for  Bespin. We also mentioned on bespin-core that <a href="http://groups.google.com/group/bespin-core/browse_thread/thread/66c1e46896688868">we have changed from  SproutCore</a>, which we adopted during the &#8220;reboot&#8221; of the Bespin client  side code, to jQuery. A handful of people have suggested that we should  just build our own &#8220;framework&#8221;. Our decision to use jQuery came after  much deliberation, so I thought I&#8217;d go into a little detail about that  since this question has now come up many times.</div>
<h2 id="magicdomid714">What is  Bespin?</h2>
<div id="magicdomid913">It&#8217;s hard to say if something is a  good choice for Bespin without actually being clear about what Bespin  is. <strong>Bespin is a customizable programming environment for web  applications</strong>. There are at least two correct ways to interpret that  sentence:</div>
<ol>
<li>Bespin is a programming environment  that you can include in your web applications that you create</li>
<li>Bespin is a programming environment  for creating web applications</li>
</ol>
<div id="magicdomid1330">Early in Bespin&#8217;s life, people were  embedding the editor in their own applications, but this wasn&#8217;t well  supported. We made a decision to make that a well-supported use of our  project and that change has major ramifications for the project.</div>
<h2 id="magicdomid698">Frameworks  vs. Libraries</h2>
<div id="magicdomid1458">The best description of the <a href="http://www.artima.com/forums/flat.jsp?forum=106&amp;thread=152104">difference  between a framework and a library</a> that I&#8217;ve seen is:</div>
<div id="magicdomid1464">
<ul>
<li>A  library  is something you call from your code</li>
</ul>
</div>
<div id="magicdomid1474">
<ul>
<li>A framework is something that calls  your code</li>
</ul>
</div>
<div id="magicdomid2051">Note that this definition says  nothing about the size (libraries could certainly be bigger than  frameworks, and vice versa). This definition also makes no judgments  about which is better or whether the code is loosely coupled or tightly  coupled.</div>
<div id="magicdomid1911">Frameworks can make building an  application <em>really</em> fast. They do a great job of  reducing the amount of code you need to write, as long as your  application fits the framework&#8217;s design and intended applications well.  The farther you stray from the path, the more resistance you&#8217;ll get as  you try to add new things.</div>
<div id="magicdomid2330">SproutCore is a framework. It  attaches event handlers to the page and delegates those events to views  that you create. Further, it has a powerful declarative  binding/observation system that it updates automatically as part of a  runloop that it maintains. It&#8217;s really quite a powerful GUI toolkit that  runs entirely in your browser.</div>
<div id="magicdomid5997">For Bespin &#8220;the application&#8221; (the  software that runs at bespin.mozillalabs.com), SproutCore seemed like it  would be a good fit because what we were doing was more like a desktop  app than a website. On the other hand, for Bespin &#8220;the customizable,  embeddable editor&#8221;, the tools we want and need are not such a great fit  for a framework. Bespin needs to fit in well with what people are  already doing on their pages.</div>
<h2 id="magicdomid2674">Why use a library at all?</h2>
<div id="magicdomid5975">OK, so  Bespin and frameworks are not a good match. But there are plenty of  libraries out there (jQuery, YUI, Prototype, Mootools, Dojo, Closure,  and even MochiKit about which I&#8217;ve written extensively in the past) Why  not just build our own set of utilities, especially since Bespin  exclusively targets modern browsers?</div>
<div id="magicdomid6002">We wrestled a bit with that very  question. Even with modern browsers, some conveniences are still handy.  Here&#8217;s a simple case I can point to: addClass. A function that will add a  CSS class to a DOM node. We all need to do that at times, but it&#8217;s not  yet a method offered by the DOM, nor is it in any proposed standard that  I&#8217;ve seen.</div>
<div id="magicdomid3630">I believe that every JavaScript  library offers addClass. Their APIs vary, but it&#8217;s in there somewhere.  We could create our own library with our own version of addClass. But  that has disadvantages:</div>
<div id="magicdomid6003">
<ul>
<li>we  have to write it/test it ourselves or copy it from somewhere</li>
</ul>
</div>
<div id="magicdomid6023">
<ul>
<li>we have to maintain it</li>
</ul>
</div>
<div id="magicdomid3837">
<ul>
<li>for people extending Bespin, there&#8217;s  that much more surface area that they need to learn</li>
</ul>
</div>
<div id="magicdomid4086">
<ul>
<li>we need to write docs for it</li>
</ul>
</div>
<div id="magicdomid4571">
<ul>
<li>we can&#8217;t use fancier things people  create (overlays, trees, etc.) without porting them</li>
</ul>
</div>
<div id="magicdomid4688">
<ul>
<li>if people already have a library on  their page, our utilities will add additional size</li>
</ul>
</div>
<div id="magicdomid4051">There are  probably other disadvantages as well. The only advantages I see to  rolling our own are:</div>
<div id="magicdomid4003">
<ul>
<li>we get  exactly the functionality we need and no more</li>
</ul>
</div>
<div id="magicdomid4044">
<ul>
<li>we maintain our own release schedule  for it</li>
</ul>
</div>
<div id="magicdomid4668">We are considering a &#8220;best of both  worlds&#8221; approach as well, if we feel like slimming down Bespin Embedded  &#8220;Drop In&#8221; (the prepackaged single .js file) even further: we take just  the functionality we&#8217;re interested in from a library (jQuery) and create  our own mini library that uses the exact same API. Our modules/build  tooling can make it transparent to switch between the mini library, the  full library and one that is already on the page.</div>
<h2 id="magicdomid4705">Why  jQuery?</h2>
<div id="magicdomid5091">As I mentioned earlier, when it comes  to utilities the libraries all offer a very similar collection of  functions. We don&#8217;t want to use a library that &#8220;leaks&#8221; onto the page,  either through the creation of globals or the extension of built-in  prototypes. That still leaves a number of choices. We evaluated some,  but ultimately decided on jQuery because:</div>
<div id="magicdomid5122">
<ul>
<li>It&#8217;s <a href="http://www.webdirections.org/sotw10/">very popular</a>, which increases the  chance that it&#8217;s already on the page (and decreases the size of Bespin)</li>
</ul>
</div>
<div id="magicdomid5252">
<ul>
<li>many people are already familiar with  it</li>
</ul>
</div>
<div id="magicdomid5224">
<ul>
<li>there&#8217;s  lots of good documentation available</li>
</ul>
</div>
<div id="magicdomid6041">
<ul>
<li>there are many decent open source  plugins that people can use when extending Bespin</li>
</ul>
</div>
<div id="magicdomid6091">It&#8217;s worth  noting that these are not technical reasons to use jQuery, and these  largely only matter because jQuery is popular and Bespin is intended to  be used on other peoples&#8217; pages. The choice of jQuery for Bespin is not a  technical choice. We certainly like jQuery, but we like the other libraries as well.</div>
<h2 id="magicdomid5423">Not just jQuery</h2>
<div id="magicdomid5817">One more  important point: Bespin Embedded is still designed to be easily built  into a self-contained .js file. The current code in our repository puts  only one name on the page (bespin) and everything else is hidden away  conveniently inside of there. The next release of Bespin Embedded will  be <em>less than half</em> the size of the previous release, even with jQuery bundled in.  So, Bespin will be a good addition to your application, regardless of  which JavaScript library you might use for the rest of your code.</div>
<h2 id="magicdomid6103">Summary</h2>
<div id="magicdomid6454">Bespin has  had unusual and competing requirements along the way and as we&#8217;ve zeroed  in on exactly what Bespin is and will become, we&#8217;ve changed our  infrastructure to match the needs of the project. We&#8217;re really excited  about how far we&#8217;ve come since &#8220;rebooting&#8221; the project and are  looking forward to these next few releases that lead up to a &#8220;1.0&#8243; of  the Bespin project.</div>
<h2>Additional Commentary</h2>
<p>John-David Dalton <a href="http://gist.github.com/413709">commented via a gist</a>.<br />
<script src="http://gist.github.com/413709.js?file=reply.md"></script></p>
<p>He points out that unless we are using a compatible jQuery, people who already have jQuery on the page will not have any size advantage. Of course, if we have our own library <em>no one</em> will gain a size advantage.</p>
<p>With respect to Bespin users being able to use whatever library they wish without porting additional widgets, we (the Bespin team) want to be able to use things like trees and such without having to port them to our own library. Bespin users do remain free to use whatever they wish without porting anything.</p>
<p>Finally, regarding &#8220;fourth time&#8217;s a charm&#8221;, I&#8217;ll just note that the 0.8 version number of the next release of Bespin is actually significant. The client APIs are settling.</p>
<p>Thanks for the comment, jdalton!</p>
<h2>ClassList API in HTML5</h2>
<p>I was happy to hear from Thomas Bassetto that addClass has indeed been rendered redundant by <a href="http://hacks.mozilla.org/2010/01/classlist-in-firefox-3-6/">HTML5&#8217;s ClassList API</a> which looks great. element.classList is available today in Firefox 3.6 and, according to the Mozilla Hacks article, WebKit is planning to also support the API. The current version of Chrome does not have it yet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blueskyonmars.com/2010/05/25/bespin-and-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSConf 2010 Day 1</title>
		<link>http://www.blueskyonmars.com/2010/04/17/jsconf-2010-day-1/</link>
		<comments>http://www.blueskyonmars.com/2010/04/17/jsconf-2010-day-1/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 13:30:25 +0000</pubDate>
		<dc:creator>Kevin Dangoor</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jsconf]]></category>

		<guid isPermaLink="false">http://www.blueskyonmars.com/2010/04/17/jsconf-2010-day-1/</guid>
		<description><![CDATA[I missed ScurvyConf entirely, much to my dismay. I got on the plane on time, but then they said they needed to swap out a computer. And then they swapped it out again. And then they gave up, hauled everyone off the plane, had us trudge across the airport and then loaded us up on [...]]]></description>
			<content:encoded><![CDATA[<p>I missed ScurvyConf entirely, much to my dismay. I got on the plane on time, but then they said they needed to swap out a computer. And then they swapped it out again. And then they gave up, hauled everyone off the plane, had us trudge across the airport and then loaded us up on another plane. I finally arrived at the hotel close to midnight, which is a drag given that I got up at 6:30am.</p>
<p>I started out on Track B. By the way, the notes below are mostly not going to be my opinions, but generally just what the speakers are saying. Sorry if this is a bit raw and unedited&#8230;</p>
<h2>Chris Williams: How did I do JSConf?</h2>
<p>Chris reported spending 200 hours to get JSConf going last year and 120 this year. He pointed out that conference tickets don&#8217;t sell out until they sell out&#8230; people need to feel like they&#8217;re going to be missing out on something and <em>then</em> they&#8217;ll sign up. JSConf 2009 was nearly canceled because of lack of interest and then they said &#8220;tickets have sold out&#8221; and instantly had a waiting list.</p>
<p>There was some additional discussion abiout how JavaScript needs a good website for the language. John Resig pointed out that MDC really has a lot of great information that is not Firefox-specific and is all available under a CC license. There was general agreement that MDC is a great resource, and Chris also mentioned it would be cool if there was a tool that cross-referenced between the JavaScript libraries (eg. $() in jQuery translates to dojo.query, etc&#8230;)</p>
<p>Chris is a fun speaker, and he gave us a great view of what goes into planning a conference.</p>
<h2>Brian Mitchell: JavaScript&#8217;s Twin (Lua)</h2>
<p>From a language perspective, Lua and JavaScript are so similar that there&#8217;s a temptation to just use JavaScript. But, there are times when Lua is a better choice. </p>
<p>LuaJIT, on some tests, is <em>way</em> faster than v8. It also has very good memory usage characteristics.</p>
<p>&#8220;Tables&#8221; in Lua are used for both array types and hash types. They&#8217;re very well optimized so that they perform like arrays when you use them like arrays. Warning: indexes start at 1.</p>
<p>Local variables need to be declared. Trailing semicolons are optional. Lua uses &#8220;end&#8221; rather than braces.</p>
<p>Lua has coroutines which makes asynchronous programming look a lot more synchronous.</p>
<h2>Dion Almaer and Matt McNulty: web fragmentation on mobile</h2>
<p>There&#8217;s a proliferation of internet-connected devices that all have SDKs, so it&#8217;s hard for developers to figure out how they&#8217;re going to support platforms. But, we&#8217;ve been there before. Back in the early 80s, you had to decide which computer you&#8217;d develop for, and that was it. Then came Windows, but there were still other platforms around&#8230; after that came the web, which enabled lots of new companies to grow up building software that could work on any number of devices.</p>
<p>Dion showed Quake II running in a browser using nothing other than HTML5 features. A lot of this is because of the huge speed increases in JavaScript.</p>
<p>There are a bunch of solutions for packaging up web applications for use on different devices. Titanium, Prism, Fluid, Palm&#8217;s webOS SDK, etc. all provide ways to provide native-like experiences using nothing other than web technology. jqTouch lets you use normal jQuery-style development for touch-based platforms.</p>
<p>When developing for mobile, these days you have a decision to make about your UI: do you want it to look native to the platform, or do you want to make an immersive experience that is tailored to your app. If you create a UI that is just there to serve your app, that could run nearly unchanged from platform to platform.</p>
<p>Palm&#8217;s mojo gives you a nice component model for HTML-based apps. Web apps have a low level model in some ways, compared to GUI components that you get in native platforms.</p>
<p>Matt McNulty announced that Ares is going 1.0 on Monday. Ares is Palm&#8217;s browser-based developer environment for webOS. 1.0 adds component APIs you can drag and drop, undo/redo, and a bunch of other features. Matt demoed Ares, and it&#8217;s really slick. Ares lets you preview the app in the browser (without the device services, obviously). It also lets you install to the device to see the actual app running.</p>
<p>Ares doesn&#8217;t work in IE, and no one really cares. Shockingly few people care about an offline version.</p>
<p>Matt also showed off mojo running in the browser. He had the native Palm mail app running in a normal browser window, which is cool indeed. Webkit browsers are no problem, but they&#8217;ve done some monkeypatching to make bits work on Firefox.</p>
<h2>Francisco Tomalsky: Socratic documentation tool</h2>
<p>We need to rethink how we do docs. Docs in source code are annoying because you have to scroll through them when using the code, you can&#8217;t localize them, you need specialized tools that may not yet exist for your language, it&#8217;s hard to include rich media (even when videos might make sense), and it increases the already large workload for committers.</p>
<p>Socratic uses the information in TextMate bundles to build up a DOM of your source. Once you do that, you have a query language that&#8217;s not unlike jQuery for querying that DOM and pulling out all of the matches.</p>
<p>The other piece is a wiki based on git (rather than docs in your comments). The wiki git repo tracks the branches of your code, so someone can get the docs for a specific version of your project. Socratic also has support for GitHub issues.</p>
<p>The project is not done (actually looks like it&#8217;s just getting started, based on the quick demo he gave) and Francisco is inviting people to help. He thinks that a great doc tool in CommonJS JavaScript will get a bunch of people using CommonJS servers.</p>
<p>Francisco then followed up with a demo of the latest Cappuccino release. He mentioned that it is now completely CommonJS-based. You no longer need Ruby at all to work with Cappuccino&#8217;s tooling. Also new is a CPTableView that was contributed by an outside contributor. He demoed using IB to create a table view and used nib2cib to convert for Cappuccino&#8217;s use.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blueskyonmars.com/2010/04/17/jsconf-2010-day-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CommonJS: the First Year</title>
		<link>http://www.blueskyonmars.com/2010/01/29/commonjs-the-first-year/</link>
		<comments>http://www.blueskyonmars.com/2010/01/29/commonjs-the-first-year/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 14:53:34 +0000</pubDate>
		<dc:creator>Kevin Dangoor</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[CommonJS]]></category>

		<guid isPermaLink="false">http://www.blueskyonmars.com/?p=2702</guid>
		<description><![CDATA[A year ago today, I posted &#8220;What Server Side JavaScript Needs&#8221;, inviting people to come and turn JavaScript into a competitive platform for applications on the server. Quite a few people answered the call. While the focus of the group has been on JavaScript in non-browser contexts, we&#8217;re ultimately shooting for as much of a [...]]]></description>
			<content:encoded><![CDATA[<p>A year ago today, I posted <a href="http://www.blueskyonmars.com/2009/01/29/what-server-side-javascript-needs/">&#8220;What Server Side JavaScript Needs&#8221;</a>, inviting people to come and turn JavaScript into a competitive platform for applications on the server. Quite a few people answered the call. While the focus of the group has been on JavaScript in non-browser contexts, we&#8217;re ultimately shooting for as much of a standard that can cross between server, browser, GUI and command line applications as possible. That&#8217;s why we changed the name to <a href="http://commonjs.org/">CommonJS</a> in the second half of the year. Ironically, most of my own personal use of CommonJS so far has been in the browser. I&#8217;ll come back to the personal perspective, though.</p>
<h2>The Original Goals</h2>
<p>As laid out in my original blog post, we were seeking to create:</p>
<ul>
<li>A module system,</li>
<li>A cross-interpreter standard library,</li>
<li>A few standard interfaces,</li>
<li>A package system, and</li>
<li>A package repository</li>
</ul>
<p>Note that the idea here is that this group creates specs, which will have multiple implementations.</p>
<p>The goal is to have these things working across as many operating systems and interpreters as possible. There are three major operating systems (Windows, Mac, Linux) and four major interpreters (SpiderMonkey, Rhino, v8, JavaScriptCore). Plus there&#8217;s &#8220;the browser&#8221;, which is a unique environment unto itself. That&#8217;s a fair bit of surface area to cover.</p>
<p>Oddly, I think the one of those eight &#8220;platforms&#8221; with the poorest implementation support is Windows. Most of the CommonJS developers are using Macs or Linux machines, so I&#8217;m not sure how much time has really been spent on Windows. I would imagine that JavaScriptCore on Windows is probably the least supported combination.</p>
<p>The good news, however, is that there are projects using <em>all</em> of those JavaScript interpreters and platform compatibility issues will ultimately be ironed out.</p>
<h2>CommonJS and the ECMAScript Standard</h2>
<p>The CommonJS group is a grassroots effort, and not some formal standards body. In some ways, however, it works like a standards body in that the people working on the standard are also implementing the standard-in-progress and using it to build real applications.</p>
<p>We have no control over the ECMAScript language, which is managed by the TC39 working group. However, there are a few people involved in CommonJS who are part of TC39, and I have firsthand knowledge of others who are keeping an eye on how things are going with CommonJS.</p>
<p>The CommonJS standard-in-progress is designed to work on a subset of ECMAScript 5 that can be made to work on today&#8217;s ECMAScript 3 interpreters. ECMAScript 3 is the standard that is running in all of the browsers. In other words, in a CommonJS application you can count on Array.prototype.forEach to be implemented. Obviously, applications can do whatever they want (array destructuring? knock yourself out, but your app will only work on SpiderMonkey and Rhino).</p>
<p>One certainty about CommonJS is that inventing new language syntax is out of scope.</p>
<h2>The Module System</h2>
<p>The CommonJS group has been remarkably good at avoiding bikeshedding. While there is discussion about names of things, there isn&#8217;t <em>heated</em> discussion about it. People are far more interested in issues of functionality and ease-of-use. This is a very good thing, and it allowed us to get <a href="http://wiki.commonjs.org/wiki/Modules/1.1">modules</a> out of the way early on.</p>
<p>Of course, the lack of bikeshedding doesn&#8217;t mean that everyone agrees on things. The CommonJS module system has its controversial aspects, but I think it does well given the constraints:</p>
<ol>
<li>must work with ES3 syntax (destructuring could actually be useful, but we&#8217;re not going to do it)</li>
<li>modules should have self-contained namespaces and be explicit about data the want to export</li>
<li>it should be possible to make modules tamper-proof, though this is not a requirement</li>
<li>using a module should be competitive with using modules in languages like Python and Ruby</li>
</ol>
<p>TC39 had considered adding modules to ECMAScript 4 and there are module proposals on the table for ECMAScript Harmony that would add some syntax to JavaScript that would look similar to CommonJS modules. Here&#8217;s a short module to give you an idea of what CommonJS modules look like:</p>
<pre>var sillymath = require("extramath/silly");

exports.addTwo = function(num) {
    return sillymath.add(num, 2);
};
</pre>
<p>Personally, I find this to be reasonably concise with a nice level of explicitness. Some syntax sugar would be good, and I hope we get that in ES-Harmony. But, this syntax works fine today.</p>
<p>Of course, this syntax is not without controversy. The biggest controversy has been that require() is synchronous – the &#8220;extramath/silly&#8221; module has to be available as the module above is loaded. However, there are a couple of reasonable ways to deal with this problem and I am happily working with CommonJS modules in the browser which is the environment that is least tolerant to synchronous loading.</p>
<p>Controversy or not, this basic module system was ratified last winter and has been implemented on all target environments of CommonJS.</p>
<p>Discussion is ongoing for a tie-in to the module standard: the <a href="http://wiki.commonjs.org/wiki/Modules/Transport">module transport</a> standard. Without additional help from the browser or some additional scaffolding running in the page, the module syntax above doesn&#8217;t work via a &lt;script&gt; tag. By standardizing what that scaffolding would look like, it is possible for a variety of build tools, servers and client side libraries to come into existence to provide many options for loading modules in the browser. There have already been several implementations of CommonJS module loading in the browser, but a standard will make it much easier to mix-and-match client and server.</p>
<h2>The Standard Library</h2>
<p>I had hoped we&#8217;d get farther on the standard library than we have, but it can indeed be a long process. <a href="http://wiki.commonjs.org/wiki/System/1.0">system</a> and <a href="http://wiki.commonjs.org/wiki/Unit_Testing/1.0">unit testing</a> are the only ones that have been ratified at this point. We have come a long way on file access.</p>
<p>&#8220;What!?!?&#8221;, I hear you say, &#8220;there&#8217;s no standard for accessing files yet?&#8221; That&#8217;s right. And there are a couple of reasons that it&#8217;s been challenging to get there.</p>
<p>Consider that JavaScript does not even have a standard object to deal with <em>binary data</em>. That is a basic prerequisite to working with files. JavaScript strings are not the same as a binary data container. So, there&#8217;s binary data to handle, streams to figure out and then file functionality built on top of that. There&#8217;s also the consideration of whether file access is synchronous or asynchronous. We&#8217;ve made tons of headway on this, and there are certainly implementations of some of the specs. It&#8217;s just a matter of finishing them.</p>
<p>I&#8217;m hoping to see <a href="http://wiki.commonjs.org/wiki/Promises">promises</a> become a part of the standard, because some form of that interface is very convenient to use for asynchronous operations.</p>
<h2>Standard Interfaces</h2>
<p>We do have a very useful interface with implementations and people actively using it: the <a href="http://wiki.commonjs.org/wiki/JSGI/Level0/A/Draft2">JavaScript Gateway Interface (JSGI)</a>. That spec has not yet been ratified, but it is getting closer and there are apps being built against it today.</p>
<p>Database access has not yet been standardized. It will be interesting to see if we can come up with a good interface that can usefully target SQL and NoSQL databases alike.</p>
<h2>Package System</h2>
<p>We have a recently ratified spec for <a href="http://wiki.commonjs.org/wiki/Packages/1.0">packages of CommonJS code</a>. I hope this will bring about a collection of good package managers with different focuses and targeting different environments. There have already been a couple of attempts to create package management systems, and the most fleshed out one that I&#8217;ve seen is Tusk, which is bundled with <a href="http://narwhaljs.org/">Narwhal</a>. Once a few more specs are ratified, Tusk should be able to run on other CommonJS implementations.</p>
<h2>Package Repository</h2>
<p>Tusk is using <a href="http://github.com/">GitHub</a> as a package repository, and that is working okay for the time being. A couple weeks back, we got word that the <a href="http://groups.google.com/group/commonjs/browse_thread/thread/39dcdede35edcddd">jQuery plugin repository is going to provide a CommonJS package.json file</a> for the ~5000 plugins in their database. This is exciting, because this infrastructure could prove to be very useful to us going forward.</p>
<h2>JavaScript: Bubbling Up</h2>
<p>2009 was a terrific year for JavaScript. In the browser, we&#8217;ve obviously seen tons of growth in increasingly sophisticated applications. I think the interest is steadily building to use JavaScript more and more outside of the browser. The two JSConf conferences (in <a href="http://jsconf.us/">Washington DC</a> and <a href="http://jsconf.eu/">Berlin</a>) were great successes by all accounts I&#8217;ve seen. <a href="http://phonegap.com/">PhoneGap</a>, <a href="http://www.appcelerator.com/">Titanium</a> and Palm&#8217;s <a href="http://developer.palm.com/">WebOS</a> have created ways for people to use web tech to create installable apps for mobile phones. <a href="http://nodejs.org/">node.js</a> has been a huge driver for people to check out building scalable, asynchronous JavaScript apps on the server. And, of course, CommonJS is finding its way into more and more applications.</p>
<h2>My Personal View</h2>
<p>I had hoped to personally have more time to devote to CommonJS in 2009, but I am delighted at how a great collection of people have stepped in and carried the specifications and implementations forward through a lot of hard work and force of will. More than 5,100 messages have gone across the mailing list, and more than 10% of those have been from <a href="http://askawizard.blogspot.com/">Kris Kowal</a>. Kris has done a ton of work in ironing out many of the specs and deserves a good deal of credit for where CommonJS is today. He and <a href="http://tlrobinson.net/">Tom Robinson</a> even stood in for me when I had to cancel my trip to JSConf.eu (thanks, guys!).</p>
<p>Taking a look at the <a href="http://groups.google.com/group/commonjs/about">top posters on the googlegroup</a>, you can see how many people have put so much into CommonJS. More than 10 people have contributed more than 100 messages a piece and, for many of those people, there was a lot of time spent in the email discussions, IRC chats, spec writing and implementation of those specs. Plus, as early adopters, they have the joy of tweaking things as the specs have changed over time. Thanks to all of you for the dedication and the will to get it done.</p>
<p><a href="http://mozillalabs.com/bespin/">Bespin</a>&#8217;s client side JavaScript code is all CommonJS modules now, partly thanks to the efforts of <a href="http://www.okito.net/">Charles Jolley</a> to migrate the <a href="http://sproutcore.com/">SproutCore</a> framework to CommonJS and creating the Tiki module loader. From that standpoint, I&#8217;m already using more CommonJS now than I did in 2009. I&#8217;m also hoping that 2010 will bring a Bespin server &#8220;reboot&#8221;, where we start migrating server functionality to CommonJS.</p>
<p>On the whole, I think that 2009 was a great year for JavaScript and CommonJS and I think 2010 is going to be even bigger. I hope to meet more enthusiastic JavaScript hackers at JSConf.us in April!</p>
<h3>Comments?</h3>
<p>You can direct them to the <a href="http://groups.google.com/group/commonjs/browse_thread/thread/53c59828899ffcd9">thread on the CommonJS googlegroup</a> or email to <a href="mailto:editor@blueskyonmars.com">editor@blueskyonmars.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blueskyonmars.com/2010/01/29/commonjs-the-first-year/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exploring Google Closure: a2div, GTUG joint meeting</title>
		<link>http://www.blueskyonmars.com/2009/11/11/exploring-google-closure-a2div-gtug-joint-meeting/</link>
		<comments>http://www.blueskyonmars.com/2009/11/11/exploring-google-closure-a2div-gtug-joint-meeting/#comments</comments>
		<pubDate>Wed, 11 Nov 2009 14:40:23 +0000</pubDate>
		<dc:creator>Kevin Dangoor</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[a2div]]></category>

		<guid isPermaLink="false">http://www.blueskyonmars.com/?p=2644</guid>
		<description><![CDATA[Due to Thanksgiving falling on the same day as the normally scheduled date for a2 &#60;div&#62;&#8217;s monthly meeting, we decided to find a different date and possibly join up with another group for a complementary topic. And, indeed, that&#8217;s what we&#8217;ve done!
a2 &#60;div&#62; and the Google Technology User Group will have a joint meeting on [...]]]></description>
			<content:encoded><![CDATA[<p>Due to Thanksgiving falling on the same day as the normally scheduled date for <a href="http://a2div.com">a2 &lt;div&gt;</a>&#8217;s monthly meeting, we decided to find a different date and possibly join up with another group for a complementary topic. And, indeed, that&#8217;s what we&#8217;ve done!</p>
<p>a2 &lt;div&gt; and the Google Technology User Group will have a joint meeting on <strong>Tuesday, November 17th</strong>. The meeting will be at the SRT Solutions office at 7PM. I realize that there are conflicts that day, but there is so much going on during the month that it&#8217;s hard to find a date without conflicts!</p>
<p>We have a hot topic: <a title="Google Closure" href="http://code.google.com/closure/">Google Closure</a>. Sure, new JavaScript libraries appear every day, but not like this one. Closure has a maturity that comes from years of use within Google, on some of Google&#8217;s busiest properties. It has an amazing toolset (Firebug plugins, super squishy compiler), great docs and a nice collection of features. Of course, not many people outside of Google know much about Closure right now, so this meeting is a group exploration of Closure. Read more in the RSVP form below to see how it works.</p>
<p>I hope to see you there!</p>
<p><iframe src="http://spreadsheets.google.com/embeddedform?key=tPq9TPPUuEXS4uXpHQ9SPMg" width="500" height="1100" frameborder="0" marginheight="0" marginwidth="0">Loading&#8230;</iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.blueskyonmars.com/2009/11/11/exploring-google-closure-a2div-gtug-joint-meeting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>a2div meeting #1: SproutCore with Majd Taby</title>
		<link>http://www.blueskyonmars.com/2009/09/14/a2div-meeting-1-sproutcore-with-majd-taby/</link>
		<comments>http://www.blueskyonmars.com/2009/09/14/a2div-meeting-1-sproutcore-with-majd-taby/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 13:30:11 +0000</pubDate>
		<dc:creator>Kevin Dangoor</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[a2div]]></category>

		<guid isPermaLink="false">http://www.blueskyonmars.com/?p=2630</guid>
		<description><![CDATA[A few days back, I announced the creation of the a2 &#60;div&#62; group: devoted to learning new tools and techniques for building the best webapps. Meetings will be on the 4th Thursday of each month, so the first meeting is on September 24th at 7PM at the SRT Solutions office in downtown Ann Arbor. Meetings [...]]]></description>
			<content:encoded><![CDATA[<p>A few days back, I announced the creation of the a2 &lt;div&gt; group: devoted to learning new tools and techniques for building the best webapps. Meetings will be on the <strong>4th Thursday</strong> of each month, so the first meeting is on <strong>September 24th at 7PM at the SRT Solutions office</strong> in downtown Ann Arbor. Meetings are free, so join us (<strong>please let us know that you&#8217;re coming using the form below</strong> &#8212; reason for that in a minute).</p>
<p>The general meeting flow that we&#8217;re going to start off with is:</p>
<ol>
<li>A presentation/demo of something awesome (for about an hour with questions interspersed plus maybe a few extra minutes for questions afterward)</li>
<li>5 minute lightning talks (proposed beforehand using the form below)</li>
<li>General discussion (either collectively or in groups. Individuals having discussions with themselves is not encouraged.)</li>
</ol>
<p>This is a rough outline, and I expect a lot of <strong>flexing</strong> based on the topics du jour.</p>
<p>I&#8217;m asking for RSVPs because I&#8217;d like to encourage folks to give lightning talks and the form gives a space devoted to that. Lightning talks, for those unfamiliar with the term, are simply 5 minute or shorter talks to introduce people to a topic or to give a quick demo of something new and useful. They can also be a good way to spur new discussion. RSVPs are also good to ensure that a really hot topic doesn&#8217;t overwhelm the space we have.</p>
<p>For the first meeting, the main event will be <strong>Majd Taby showing off SproutCore</strong>. <a href="http://www.sproutcore.com/">SproutCore</a>, for those who have never seen it, is an amazing open source JavaScript UI toolkit that is highly optimized for speed and reduction of the amount of code you need to write. It borrows liberally from concepts in Apple&#8217;s Cocoa framework, and Apple themselves use it for their MobileMe service. If you&#8217;re building a &#8220;website&#8221;, you probably want to <a href="http://jquery.com/">use</a> <a href="http://dojotoolkit.org/">something</a> <a href="http://prototypejs.org/">else</a>. If you&#8217;re building something that is an honest-to-goodness app, you owe it to yourself to check out SproutCore.</p>
<p>There aren&#8217;t any lightning talks lined up yet, so be sure to toss your name into the hat if you want to give one.  Also, there&#8217;s a form online if you want to <a href="http://spreadsheets.google.com/viewform?formkey=dGxsdldwUUdkb1pnV20zQVhGT0JOS0E6MA..">give a talk at a2div</a> and another if <a href="http://spreadsheets.google.com/viewform?formkey=dDJ4dWJOWi1Rek1ZV1JZNEN5UTBMVHc6MA..">you have a topic you&#8217;d like to hear about</a>.</p>
<div><iframe src="http://spreadsheets.google.com/embeddedform?key=0AsexK1zFxKTBdHJlUmx1cy1uZlJ2cjNLUWxYUEI0N0E" width="500" height="587" frameborder="0" marginheight="0" marginwidth="0">Loading&#8230;</iframe></div>
]]></content:encoded>
			<wfw:commentRss>http://www.blueskyonmars.com/2009/09/14/a2div-meeting-1-sproutcore-with-majd-taby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introducing a2div web development user group</title>
		<link>http://www.blueskyonmars.com/2009/09/04/introducing-a2div-web-development-user-group/</link>
		<comments>http://www.blueskyonmars.com/2009/09/04/introducing-a2div-web-development-user-group/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 19:46:54 +0000</pubDate>
		<dc:creator>Kevin Dangoor</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[a2div]]></category>

		<guid isPermaLink="false">http://www.blueskyonmars.com/2009/09/04/introducing-a2-web-development-user-group/</guid>
		<description><![CDATA[I&#8217;ve been interested in doing cool stuff with web technology for a long time. I still think that web development is harder than it should be, but new tools, processes and ideas come along all the time to make it easier and more fun.
Many people probably view me as a &#8220;Python guy&#8221;. Sure, I&#8217;ve done [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been interested in doing cool stuff with web technology for a long time. I still think that web development is harder than it should be, but new tools, processes and ideas come along all the time to make it easier and more fun.</p>
<p>Many people probably view me as a &#8220;Python guy&#8221;. Sure, I&#8217;ve done a good deal of work with Python over the past few years. But, there are many, many good ideas on the server side that come from places other than Python.</p>
<p>And, the browser as a platform is an entirely different thing than it was a few years ago, particularly when you restrict yourself to &#8220;modern browsers&#8221;, as we do on <a href="https://bespin.mozilla.com/">Bespin</a>. The performance difference between today&#8217;s browsers and those from a couple years back is huge, and that new performance opens the door for all kinds of new applications and toolkits to help us build those apps.</p>
<p>I want to learn firsthand from people using modern tools to make development faster and more fun. I haven&#8217;t seen a group here in Ann Arbor that is devoted to the broad range of web development topics, so I decided to get one going. It turns out that <a href="http://twitter.com/jtaby">Majd Taby</a> sent a message to the a2geeks mailing list in April about starting a web dev group, but I somehow missed that. Majd and I exchanged some email this week and worked out the details of the new group.</p>
<p>The new group is called <strong><a href="http://a2div.com/">a2 &lt;div&gt;</a></strong> (or just <a href="http://a2div.com/">a2div</a>) because it has the same topic focus as <a href="http://cudiv.com/">cu &lt;div&gt;</a> and I liked the idea of joining forces in some sense with a similarly minded group. cu &lt;div&gt; has a bit of a student focus that a2 &lt;div&gt; does not (it&#8217;s been a long time since I was a student). Thanks to Cameron from cu &lt;div&gt; for giving us the go-ahead to start an Ann Arbor offshoot. Thanks also to <a href="http://monkey.org/~dugsong/">Dug Song</a> for passing along the link to cu &lt;div&gt; and connecting me with Majd.</p>
<p>a2 &lt;div&gt; will be a loosely organized group as MichiPUG is&#8230; bringing the right people together for good discussion is far more important than creating a formal organization. <strong>Meetings are free</strong>. Our meeting format will likely be something along the lines of 1 hour presentation/demo followed by lightning talks and discussion.</p>
<p>An important aspect of a2 &lt;div&gt; is that&#8217;s non-denominational. Are you doing client and server in Java (for example, with <a href="http://code.google.com/webtoolkit/">GWT</a>)? Neat. How about in Python (with <a href="http://pyjs.org/">Pyjamas</a>)? <a href="http://groovy.codehaus.org/">Groovy</a>. Doing the server in <a href="http://liftweb.net/">Lift</a> and the client side with <a href="http://cappuccino.org/">Cappuccino</a>? How about <a href="http://framework.zend.com/manual/en/zend.dojo.html">PHP+Dojo</a>? <a href="http://www.sproutcore.com/">SproutCore</a>+<a href="http://developer.apple.com/tools/webobjects/">WebObjects</a>? Using <a href="http://www.asp.net/mvc/">ASP.NET MVC</a> with <a href="http://jquery.com/">jQuery</a>? Do you use <a href="http://cukes.info/">Cucumber</a> to test your apps? All are welcome, all are interesting.</p>
<p>Our <strong>meetings will be at the <a href="http://www.srtsolutions.com/">SRT Solutions</a></strong> <a href="http://maps.google.com/maps?f=q&amp;source=s_q&amp;hl=en&amp;geocode=&amp;q=srt+solutions,+ann+arbor,+mi&amp;sll=42.233465,-83.76328&amp;sspn=0.009437,0.013282&amp;ie=UTF8&amp;ll=42.283342,-83.74629&amp;spn=0,359.946871&amp;z=14&amp;iwloc=A&amp;layer=c&amp;cbll=42.280209,-83.746073&amp;panoid=7nZ9IQ3Poiw7j1uGWbArlg&amp;cbp=13,268.64,,0,5">office in downtown Ann Arbor</a>. This is a great space to meet at (projector, whiteboards, flexible table arrangement), and the location is nice because it&#8217;s easy to walk out for drinks and food afterwards. Thanks to <a href="http://srtsolutions.com/blogs/diannemarsh/">Dianne Marsh</a> for letting us use their office!</p>
<p>Meetings will be on the <strong><span style="text-decoration: line-through;">3rd Wednesday</span> 4th Thursday of each month at 7pm</strong>. That means our first meeting will be on September <span style="text-decoration: line-through;">16th</span> 24th (less than two weeks away). You can subscribe to <a href="http://www.google.com/calendar/hosted/a2div.com/embed?src=a2div.com_p2lsljqvnsejncoetpl2sqrt6o%40group.calendar.google.com&amp;ctz=America/New_York">our calendar</a> in <a href="http://www.google.com/calendar/feeds/a2div.com_p2lsljqvnsejncoetpl2sqrt6o%40group.calendar.google.com/public/basic">XML</a> or <a href="http://www.google.com/calendar/ical/a2div.com_p2lsljqvnsejncoetpl2sqrt6o%40group.calendar.google.com/public/basic.ics">ical</a> formats.</p>
<p>The first meeting topic is not fully decided yet. Please join the <strong><a href="http://groups.google.com/group/a2div">a2div googlegroup</a></strong> and let us know what you might want to hear about or talk about!</p>
<p>If you&#8217;re near Ann Arbor on September 16th, join us at SRT Solutions for engaging discussion on all webdev-related topics! See you there!</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=8f614d65-a50e-8ee6-8070-21b4f161a5d8" alt="" /></div>
<div class="zemanta-pixie"><strong>Update:</strong> Date tentatively changed to the 4th Thursday based on conflicts on the 3rd Wednesday.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.blueskyonmars.com/2009/09/04/introducing-a2div-web-development-user-group/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Project Bespin needs *you*</title>
		<link>http://www.blueskyonmars.com/2009/08/27/project-bespin-needs-you/</link>
		<comments>http://www.blueskyonmars.com/2009/08/27/project-bespin-needs-you/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 02:46:56 +0000</pubDate>
		<dc:creator>Kevin Dangoor</dc:creator>
				<category><![CDATA[Bespin]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.blueskyonmars.com/?p=2602</guid>
		<description><![CDATA[I work in Mozilla&#8217;s Developer Tools Lab, where we&#8217;re working to make things easier for web developers and to explore what is possible using open web tools. It turns out there&#8217;s quite a bit that&#8217;s possible, and we&#8217;ve just scratched the surface with what we&#8217;ve done with Bespin so far.
I&#8217;m really happy with the team [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" title="Collaboration screen shot" src="http://bengalbraith.files.wordpress.com/2009/08/collab.png?w=500" alt="" width="499" height="405" />I work in Mozilla&#8217;s Developer Tools Lab, where we&#8217;re working to make things easier for web developers and to explore what is possible using open web tools. It turns out there&#8217;s quite a bit that&#8217;s possible, and we&#8217;ve just scratched the surface with what we&#8217;ve done with <a href="https://bespin.mozilla.com/">Bespin</a> so far.</p>
<p>I&#8217;m really happy with the team that I&#8217;m working with, both within Mozilla Labs and in the Bespin community. I&#8217;m also really happy to report that we&#8217;ve got an opening on our team! We&#8217;re looking for fantastic software engineer that will own the Canvas-based editor component that is at the heart of Bespin.</p>
<p><a href="http://www.jobvite.com/j/?cj=o5fdVfwc&amp;s=Kevin_Dangoor"><img class="alignleft" style="padding-right: 1em;" title="Join Mozilla!" src="http://www.mozilla.com/en-US/about/buttons/MoCo_180x150.png" alt="" width="180" height="150" /></a>If being at the forefront of JavaScript technology (Canvas, local storage, web workers) sounds fun and exciting to you, <a href="http://www.jobvite.com/j/?cj=o5fdVfwc&amp;s=Kevin_Dangoor">drop us a line</a>! We&#8217;d love to talk to you!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blueskyonmars.com/2009/08/27/project-bespin-needs-you/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>JSConf 2009: the best conference you couldn&#8217;t attend!</title>
		<link>http://www.blueskyonmars.com/2009/04/27/jsconf-2009-the-best-conference-you-couldnt-attend/</link>
		<comments>http://www.blueskyonmars.com/2009/04/27/jsconf-2009-the-best-conference-you-couldnt-attend/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 18:17:06 +0000</pubDate>
		<dc:creator>Kevin Dangoor</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jsconf]]></category>

		<guid isPermaLink="false">http://www.blueskyonmars.com/?p=2576</guid>
		<description><![CDATA[(sorry for the lack of links in here. I wrote this on a plane and haven&#8217;t had a chance to do anything else to it&#8230;)
I just returned from JSConf 2009, the first JSConf conference. It was possibly even the first conference to feature JavaScript as a general scripting language in the same vein as Python [...]]]></description>
			<content:encoded><![CDATA[<p>(sorry for the lack of links in here. I wrote this on a plane and haven&#8217;t had a chance to do anything else to it&#8230;)</p>
<p>I just returned from JSConf 2009, the first JSConf conference. It was possibly even the first conference to feature JavaScript as a general scripting language in the same vein as Python or Ruby.</p>
<p>Overall, it was a very good conference. The organizers did a terrific job and paid great attention to detail. The sponsored evening events were an awesome idea and well-executed. (At least, Friday night&#8217;s was, I flew home Saturday evening). It was a relatively small conference at 130 people. I think they can easily have double that number next year, if they want to. But, that would require a change of venue, because the Hotel Palomar&#8217;s meeting rooms were filled almost to overflowing. From talking with Chris Williams on Friday evening, it doesn&#8217;t sound like they&#8217;re interested in changing venues next year, which is a shame because a lot of people will have to miss out on a great conference.</p>
<p>Francisco Tolmasky from 280 North gave the perfect kind of talk to kick things off. I&#8217;ve been following Cappucino&#8217;s development, so I was not surprised in the least with what I saw. But, Francisco is a polished speaker and many people had not seen Apple&#8217;s Interface Builder used to create webapps (via Cappucino&#8217;s nib2cib tool). We didn&#8217;t get a demo of Atlas, which would certainly have wowed this audience.</p>
<p>One thing that pleased a great many people in the audience, myself included, was word that Safari&#8217;s debugger would start looking at a &#8220;displayName&#8221; on functions to determine what name to show in the debugger/profiler. JavaScript has many places where it&#8217;s impossible to guess a reasonable name, and it&#8217;s nice to have a way to give the debugger a hint like this. Let&#8217;s hope we get this in Firebug soon.</p>
<p>Toward the end of the second day, there was a talk about SproutCore, so we had a chance to two different ways to apply the style of Apple&#8217;s Cocoa to building webapps. As with anything, there are tradeoffs. Cappucino builds on Objective-J, which gives you a more concise syntax than straight JavaScript for things like Key Value Observing. If JavaScript today had getters and setters, then this particular benefit of Objective J would go away. For now, though, using SproutCore effectively means calling get* and set* methods to get variable values rather than just looking up the value directly.</p>
<p>There were two presentations on server side JavaScript, a topic that people who know me know that I am currently very into. Nick Campbell showed off the Axiom Stack, which builds on Helma. Axiom is presently AGPL-licensed, which means I won&#8217;t go anywhere near it. But, that&#8217;s just me. On the plus side, Nick has been peripherally following the activity on ServerJS and is quite in tune with our goals. Nick&#8217;s company, by the way, has a unique and useful sounding web marketing-related product coming out soon, so keep an eye on those folks if you&#8217;re a marketer.</p>
<p>The second Track A presentation about server side JS was James Duncan&#8217;s presentation about Joyent&#8217;s Smart platform. I must say that this looks like an excellent offering, and I&#8217;m looking forward to seeing a lot more of it as it hits general availability. The best parallel I can draw is &#8220;App Engine on JavaScript&#8221;, but that doesn&#8217;t really do it justice. They have a key-value store that they will scale transparently for you. No more manual sharding! Just start tossing data in. Of course, that&#8217;s the promise&#8230; and the devil&#8217;s in the details with such things. I came in a bit late to James&#8217; presentation and I forgot to ask him afterwards about their data store&#8217;s indexing capabilities and whether it is eventual-consistency based or more immediate than that.</p>
<p>The Smart platform is SpiderMonkey-based, and they pull some interesting tricks to overcome the lack of a decent stack of libraries for SpiderMonkey. Their web server interface looked very much like Jack, which is a bonus. It would be nice if we can harmonize it with Jack in some fashion. Intriguingly, their web framework, which is apparently based on Sinatra, looks an awful lot like the home grown one that I made for Bespin in Python and then duplicated in JavaScript.</p>
<p>I didn&#8217;t lump my former SitePen colleague Kris Zyp&#8217;s talk in with the other server side JS talks, because Kris was talking a lot more about JS that spans from client to server and using standards such as JSON Path, JSON Query, Persistent JS, and JSON object referencing to move data around seamlessly. Of course, he used Dojo and Persevere as his demo platform, but the ideas he presented can be applied anywhere.</p>
<p>Brian LaRoux&#8217;s talk on PhoneGap was quite interesting and entertaining. Brian&#8217;s talk had a refreshing lack of gravity, while still providing useful content. For one, he mentioned that Dashcode actually offers good tools for making iPhone web apps. He talked about a variety of iPhone-related JS toolkits, and gave a demo of Nitobi&#8217;s iPhone &#8220;stimulator&#8221; which does a better job of representing how an iPhone app will behave than Apple&#8217;s own simulator.</p>
<p>I should note that there were probably 50% fewer bullet points than what I have seen at some other tech conferences I&#8217;ve been to. I think the message is sinking in that bullet points suck (except for actual lists of things).</p>
<p>My Mozilla colleague, John Resig gave a wide-ranging talk about JavaScript performance testing, games and his project of the moment, TestSwarm. TestSwarm looks fantastic and fills a gap: it will provide a way to do cross-browser continuous integration tests. People join the test swarm by opening their browser up to the TestSwarm page, and the server will send them test jobs as they come in. So, for example, a revision gets checked into jQuery, and the TestSwarm server will pull out the tests and send them down the wire to a collection of testers who are using different browsers. The results from all of the browsers will come back and get logged. This tool will be useful for a lot more than just jQuery, and John offered help connecting it up with, say, DOH for Dojo&#8217;s tests.</p>
<p>Another former SitePen colleague, Pete Higgins gave a Dojo roundup at the very end of the conference. I saw half of his talk before I had to go to the airport. There are lots of good things afoot in Dojo-land. The new conditional compilation stuff seems useful for a variety of things. For example, Dojo can be built in a super-slim variety (6K) that loads everything dynamically. Or you can dump all of the IE compatibility stuff. With the Bespin project, we have a plan to ship a variety of packagings, and I can see this being useful for that as well.</p>
<p>Pete&#8217;s Plugd (which he pronounces &#8220;plug-dee&#8221; as opposed to &#8220;plugged&#8221;) project provides a bunch of extra convenient ways to use Dojo and I do hope to see that stuff included in 1.4. Pete says that Plugd will likely add 4K to Dojo&#8217;s gzipped size, but I think it&#8217;s likely worth it.</p>
<p>Malte Ubi likely takes the prize for JSConf attendee who came the longest distance to attend, having flown in all the way from Hamburg, Germany. Malte has been doing some fantastic work on Bespin. Actually, the things he&#8217;s been doing go beyond the realm of fantastic and into &#8220;crazy&#8221;: using Narcissus (JavaScript parser in JavaScript) to read your JavaScript file in a web worker to provide completely client-based outline views and code completion. Awesome.</p>
<p>Malte did a Track B talk on Joose, his JS object system that is built on ideas from Perl&#8217;s Moose. It looks like a very powerful system that provides things like type coercion and traits (called roles here) that you don&#8217;t find in the type systems that typically come with JS toolkits. If I recall correctly, Joose weighs in at about 16K gzipped, so it&#8217;s not a small package.</p>
<p>Nick Carter gave a Track B talk on his JS ORM, JazzRecord It&#8217;s a direct descendant of Rails&#8217; ActiveRecord. It looks like a nice enough package, but seeing his samples made me that much more convinced that Atul is right: SQL does not belong in the browser. The sqlite storage engine may very well, but SQL itself does not. TaffyDB, dojo.data, CouchDB, whatever&#8230; just as long as the principal form of expression, persistence and querying is JS. The needs of a typical web client are very different from the kinds of things to which we apply SQL on the server. And, even then, people are starting to realize that SQL is not the best tool for every job.</p>
<p>I spoke on Track B about ServerJS. I called the session &#8220;a standard library for JavaScript in non-browser contexts&#8221;, or something catchy like that, because it is clear that what we&#8217;re building applies just as much to command line tools and other kinds of non-browser programs as it does to the server side of web apps.</p>
<p>My talk came immediately after James Duncan spoke about dynamic loading of C code into a SpiderMonkey environment. I lamely brought up ctypes as one approach, but dynamic loading of binaries is not my strength. I suggested that James would get useful feedback for his idea on the ServerJS list, given the number of people who are linking C/C++ libraries up with SpiderMonkey and v8.</p>
<p>As for ServerJS itself, I spoke about the project in general and our biggest milestone to date: the &#8220;SecurableModule&#8221;. I had a simple &#8220;math.js&#8221; module with a fibonacci function in it. I picked a lovely O(n^2) function to show the performance difference between Rhino and v8 which is considerable. Since math.js is a &#8220;pure JavaScript&#8221; module, I was able to demo that module being loaded into: Narwhal on Rhino, Narwhal on k7, Persevere, Helma NG (as a Jack app, no less) and GPSEE. I also demonstrated how with Narwhal/Rhino, I could &#8220;forget&#8221; to put a &#8220;var&#8221; in and my variable would not suddenly leak into the global namespace.</p>
<p>I also mentioned that we&#8217;re working on binary objects and files and that Jack (the interface) has good prospects given how proven the technique is in Python and Ruby.</p>
<p>I hope that at JSConf 2010, we&#8217;ll be able to see some significant apps built on a fairly complete platform.</p>
<p>Conference co-organizer Chris Williams thanked me for my endorsement of the conference, saying that I pushed Mozilla over the edge on sponsoring the conference. I had no idea I had such pull <img src='http://www.blueskyonmars.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> . Anyhow, Mozilla&#8217;s sponsorship apparently had a direct impact on the conference food, which was quite beyond typical conference fare. Thanks to whomever it was at Mozilla who gave the a-ok on this.</p>
<p>As with any conference, the hallway track is among the most important, and I had a good time meeting new people and talking about a range of things. Community-driven conferences do bring in a good collection of people to meet.</p>
<p>I am doubtless leaving people out of this roundup, and I apologize for that. I am sure there are some other JSConf roundups that will provide additional insight. Also, the videos will be showing up online over time, so keep an eye out for that.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blueskyonmars.com/2009/04/27/jsconf-2009-the-best-conference-you-couldnt-attend/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Speaking at JSConf on Saturday at 1:45PM</title>
		<link>http://www.blueskyonmars.com/2009/04/21/speaking-at-jsconf-on-saturday-at-145pm/</link>
		<comments>http://www.blueskyonmars.com/2009/04/21/speaking-at-jsconf-on-saturday-at-145pm/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 13:01:58 +0000</pubDate>
		<dc:creator>Kevin Dangoor</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.blueskyonmars.com/?p=2574</guid>
		<description><![CDATA[JSConf is coming up on Friday, and I&#8217;ll be there. I was too late to get a normal &#8220;track A&#8221; talk in, but I am scheduled in the &#8220;track B&#8221; room for Saturday at 1:45PM to talk about a standard library for JavaScript development outside of the browser. It&#8217;ll be a 30 minute session, and [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.jsconf2009.com/">JSConf</a> is coming up on Friday, and I&#8217;ll be there. I was too late to get a normal &#8220;track A&#8221; talk in, but I am scheduled in the &#8220;track B&#8221; room for Saturday at 1:45PM to talk about a standard library for JavaScript development outside of the browser. It&#8217;ll be a 30 minute session, and I&#8217;m hoping to have some cool stuff to show!</p>
<p>I hope to see you there!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blueskyonmars.com/2009/04/21/speaking-at-jsconf-on-saturday-at-145pm/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>This Week in Bespin March 2, 2009</title>
		<link>http://www.blueskyonmars.com/2009/03/02/this-week-in-bespin-march-2-2009/</link>
		<comments>http://www.blueskyonmars.com/2009/03/02/this-week-in-bespin-march-2-2009/#comments</comments>
		<pubDate>Mon, 02 Mar 2009 14:32:51 +0000</pubDate>
		<dc:creator>Kevin Dangoor</dc:creator>
				<category><![CDATA[Bespin]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.blueskyonmars.com/2009/03/02/this-week-in-bespin-march-2-2009/</guid>
		<description><![CDATA[For the week of February 23rd:


Roberto Saccon ported Bespin to Dojo! Dojo leader Peter Higgins helped to clean things up a bit. This has significantly changed (and improved) the use of namespaces in the frontend code, which will make Bespin much easier to drop into other pages.
For people keeping score at home, there is now [...]]]></description>
			<content:encoded><![CDATA[<p>For the week of February 23rd:
<div></div>
<ul>
<li>Roberto Saccon <b>ported Bespin to Dojo</b>! Dojo leader Peter Higgins helped to clean things up a bit. This has significantly changed (and improved) the use of namespaces in the frontend code, which will make Bespin much easier to drop into other pages.</li>
<li>For people keeping score at home, there is now a <b>0.1 branch</b> in the Bespin repository that we will be using to update the server. The default branch has the Dojo work and all of the other forward-looking work going on. Until the trunk work stabilizes a bit, <a href="http://bespin.mozilla.com/" target="_blank">bespin.mozilla.com</a> will be running a bit behind on the changes here.</li>
<li><b>autoindent</b>&nbsp;setting. When you hit return/enter you&#8217;re placed at the same indentation point on the next line.</li>
<li>Select an area and hit TAB and it all indents. SHIFT+TAB and it unindents. Thanks to Jay Bird!</li>
<li>Special support for certain keys so German keyboards etc can get in &#8216;{&#8216; and the like. Thanks to Julian Viereck&nbsp;&nbsp;</li>
<li>For people following the trunk/tip, the project build script has changed a bit. Be sure to follow the instructions in the top-level README file to get the Bespin server running.</li>
<li>PHP, Java and Aduino syntax highlighting, thanks to Sean Burke and&nbsp;Olle Jonsson, respectively. The Arduino support is optional. Use&nbsp;include(&#8220;bespin.syntax.<wbr />arduino&#8221;); in your config.js to load.</li>
<li>Multithreaded development server, which speeds up page loads a bit now that there are more modules loading.</li>
<li>Config work has short cuts now so you can simply use: include(file), execute(cmd), publish(), subscribe()&nbsp;</li>
</ul>
<div>Coming up the week of March 2nd:</div>
<div>
<ul>
<li>I&#8217;ll be working on backend changes to make VCS integration possible (and to allow us to start using Bespin as our primary editor when working on Bespin itself)</li>
<li>Joe will be working on collaboration implementation</li>
<li>Ben and Dion will likely have their hands full just keeping up with your patches! (I&#8217;m sure they will sneak some time in to improve the editor and Thunderhead as well <img src='http://www.blueskyonmars.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<p>By the way, &#8220;This Week in Bespin&#8221; is not just for those of us at Mozilla. If you have anything you want to see show up in these summaries, just send me an email message!</p></div>
<div></div>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=41bf0053-c2bb-41b3-bab7-59256a1cb4af" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.blueskyonmars.com/2009/03/02/this-week-in-bespin-march-2-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.394 seconds -->
