<?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</title>
	<atom:link href="http://www.blueskyonmars.com/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>Introducing the Web Console</title>
		<link>http://www.blueskyonmars.com/2010/09/01/introducing-the-web-console/</link>
		<comments>http://www.blueskyonmars.com/2010/09/01/introducing-the-web-console/#comments</comments>
		<pubDate>Wed, 01 Sep 2010 13:28:56 +0000</pubDate>
		<dc:creator>Kevin Dangoor</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[devtools]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://www.blueskyonmars.com/?p=2751</guid>
		<description><![CDATA[David Dahl has been leading the work on Firefox 4&#8217;s Web Console feature and has blogged about the work along the way. Over the past month, we&#8217;ve landed a whole bunch of improvements to the Web Console in Firefox 4 Beta, and I wanted to give my take on what the Web Console has to [...]]]></description>
			<content:encoded><![CDATA[<p>David Dahl has been leading the work on Firefox 4&#8217;s Web Console feature and has blogged about the work along the way. Over the past month, we&#8217;ve landed a whole bunch of improvements to the Web Console in Firefox 4 Beta, and I wanted to give my take on what the Web Console has to offer for web developers.</p>
<h2>What <em>is</em> the Web Console?</h2>
<p>I first learned to program a computer in BASIC on a TRS-80 Model III. I&#8217;m dating myself there, but oh well. Believe it or not, my first programs didn&#8217;t always work the way I intended them to and, surprisingly enough, they still don&#8217;t. I had two main tools to help me figure out what was going on: a <a href="http://en.wikipedia.org/wiki/Read-eval-print_loop">&#8220;read eval print loop&#8221;</a> (REPL) and &#8220;print&#8221;. Using the REPL, I could type in simple statements and get immediate results, as a way of testing that how I think an individual operation should work is actually how it does work. Using &#8220;print&#8221;, I could have my program display certain values along the way so that I could make sure that they met my expectations while the program was running.</p>
<p>Even today, REPL and print continue to be two simple and fundamental tools for learning how a system works and troubleshooting problems. The Web Console gives you these two features for web pages that appear in Firefox.</p>
<div id="attachment_2757" class="wp-caption aligncenter" style="width: 483px"><a href="http://www.blueskyonmars.com/images/2010/08/WebConsoleOverReddit.png"><img class="size-full wp-image-2757 " title="WebConsoleOverReddit" src="http://www.blueskyonmars.com/images/2010/08/WebConsoleOverReddit.png" alt="" width="473" height="160" /></a><p class="wp-caption-text">The Web Console atop a popular website</p></div>
<p>You can see the Web Console for yourself today by downloading the <a href="http://www.mozilla.com/firefox/all-beta.html">Firefox 4 beta</a>.</p>
<h2>The Log</h2>
<p>When you open the Web Console from Firefox&#8217;s Tools menu (or using the ctrl-shift-K/cmd-shift-K keyboard shortcut), you&#8217;ll see a panel drop down from the top of the content area of the browser. In the current Firefox 4 beta release, the panel is empty when it first opens, but the Firefox 4 final release will collect up logging messages even while the console is closed.</p>
<p>If you open the Web Console and then go to a page, you&#8217;ll see a whole bunch of output. Typically, there will be many &#8220;Network&#8221; requests listed. Sometimes, you&#8217;ll see CSS or JavaScript errors displayed. It doesn&#8217;t take long for that output to quickly become overwhelming, so we&#8217;ve got a simple solution in place to deal with that: filtering. Just above the log output area, there are a number of controls that you can use to pare down the output and see just what you need to see.</p>
<ul>
<li>The Net, CSS and JS controls determine which of those types of messages from the browser should appear in the output.</li>
<li>The Errors, Warnings, Info and Log controls determine which JavaScript-generated messages should appear in the output window (see &#8220;The console Object&#8221; below</li>
<li>Finally, there&#8217;s a search box to filter the output based on whatever you type there</li>
</ul>
<p>Using these controls, you should be able to quickly zero in on the messages that will help you debug a problem with your page.</p>
<h2>Network Details</h2>
<p>The &#8220;Network&#8221; requests that appear in the log output show you the URL to which the request was made. But what do you do if your JavaScript made a request to the right URL, but the data that came back isn&#8217;t what you expected? If you click on a network log entry in the next beta of Firefox 4, you&#8217;ll get a panel with a bunch of details about the request:</p>
<div id="attachment_2759" class="wp-caption aligncenter" style="width: 355px"><a href="http://www.blueskyonmars.com/images/2010/08/NetworkPanel.png"><img class="size-full wp-image-2759" title="NetworkPanel" src="http://www.blueskyonmars.com/images/2010/08/NetworkPanel.png" alt="" width="345" height="295" /></a><p class="wp-caption-text">The network request details panel.</p></div>
<p>With the request and response headers and body and the cookies from the request, you can dive deep into the requests made from your web pages.</p>
<h2>The console Object</h2>
<p>If you&#8217;ve used the excellent <a href="http://getfirebug.com/">Firebug</a> extension (more on Firebug below), you&#8217;ve quite possibly encountered its &#8220;console&#8221; object that is available to JavaScript. console provides a number of useful methods, including a set used for logging information: log, info, warn, error. All four methods work the same way and represent different levels of information logged from log as the lowest level to error as the highest. You can pass in multiple arguments and they will have their string representations glued together for the output. For example, if the variable food is &#8220;avocado&#8221;, then console.log(&#8220;My favorite food is&#8221;, food, &#8220;and its info is&#8221;, anObject) will output &#8220;My favorite food is avocado and its info is [object Object]&#8220;.</p>
<p>By strategically using the different logging levels, you can make it easy to focus on just the messages that matter to you using the filter controls.</p>
<p>One more note: for Firefox 4, we&#8217;re playing it conservatively with the console object. If one is already defined on the page, we won&#8217;t override it. As of this writing, there is a bug that prevents the console from working properly <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=583476">on sites that define their own console object</a>, but you can bet we&#8217;ll have that bug resolved soon.</p>
<h2>The JavaScript REPL</h2>
<p>Read Eval Print Loops are fantastic for figuring out how a language or environment works and for testing things quickly. The Web Console features a REPL for JavaScript that gives you access to everything on your page. For every expression you type in, the Web Console will automatically output the result of that expression. That means you can use it as a simple calculator:</p>
<div id="attachment_2756" class="wp-caption aligncenter" style="width: 66px"><a href="http://www.blueskyonmars.com/images/2010/08/SimpleExpression.png"><img class="size-full wp-image-2756" title="SimpleExpression" src="http://www.blueskyonmars.com/images/2010/08/SimpleExpression.png" alt="" width="56" height="52" /></a><p class="wp-caption-text">6*7=42, but you knew that</p></div>
<p>For your convenience, the Web Console will automatically try to fill in variable and function names that it knows about:</p>
<div id="attachment_2754" class="wp-caption aligncenter" style="width: 204px"><a href="http://www.blueskyonmars.com/images/2010/08/ConsoleCompletion.png"><img class="size-full wp-image-2754" title="ConsoleCompletion" src="http://www.blueskyonmars.com/images/2010/08/ConsoleCompletion.png" alt="" width="194" height="18" /></a><p class="wp-caption-text">Automatic completion</p></div>
<p>By using the up and down arrow keys, you can also cycle through the history of commands that you&#8217;ve entered.</p>
<p>You can directly access variables that are on the page:</p>
<div id="attachment_2753" class="wp-caption aligncenter" style="width: 406px"><a href="http://www.blueskyonmars.com/images/2010/08/AccessToPageVariables.png"><img class="size-full wp-image-2753" title="AccessToPageVariables" src="http://www.blueskyonmars.com/images/2010/08/AccessToPageVariables.png" alt="" width="396" height="65" /></a><p class="wp-caption-text">Here we see that jQuery is on the Reddit home page.</p></div>
<p>Note that variables that you define in the Web Console are not automatically exposed to the page. If you would like to change a variable on the page, you just need to put &#8220;window.&#8221; in front of the variable name. For example, if you enter the expression &#8220;window.foo = 1&#8243;, then the variable &#8220;foo&#8221; on the page will change to 1.</p>
<p>With access to jQuery and knowledge that Reddit has an element on the page with an id of &#8220;header&#8221;, it becomes a simple matter to remove the header from the page we&#8217;re looking at:</p>
<div id="attachment_2755" class="wp-caption aligncenter" style="width: 791px"><a href="http://www.blueskyonmars.com/images/2010/08/HidingTheHeader.png"><img class="size-full wp-image-2755" title="HidingTheHeader" src="http://www.blueskyonmars.com/images/2010/08/HidingTheHeader.png" alt="" width="781" height="107" /></a><p class="wp-caption-text">Reddit with the header hidden</p></div>
<p>One more note about using the REPL: if your expression returns an object, the console will just show [object Object] currently. However, you can click on [object Object] and see the object inspector:</p>
<div id="attachment_2761" class="wp-caption aligncenter" style="width: 211px"><a href="http://www.blueskyonmars.com/images/2010/08/ObjectInspector.png"><img class="size-full wp-image-2761" title="ObjectInspector" src="http://www.blueskyonmars.com/images/2010/08/ObjectInspector.png" alt="" width="201" height="419" /></a><p class="wp-caption-text">The object inspector looking at a jQuery node list</p></div>
<p>One nice feature of the object inspector is that it shows you a snapshot in time of the object. You can click the &#8220;Update&#8221; button if you want to see the current contents of the object.</p>
<h2>Firebug</h2>
<p>The <a href="http://getfirebug.com/">Firebug</a> add-on has millions of users and has been making web development easier for years. If you&#8217;re one of those users, you&#8217;re probably wondering why the Web Console exists when Firebug already provides a console and much, much more. Back at the beginning of this post, I talked about how useful a REPL and print are in debugging, experimentation and learning. These things are so fundamental that we wanted them to exist in Firefox with no add-ons required.</p>
<p>Consider this case: you&#8217;re a web developer and you have a distant user of your application. They&#8217;re running into a problem with your app. They can tell you what&#8217;s on the screen, but they have no way of sharing a view of what the application has done to that point. If you have useful logging messages in your app, you can ask the user to copy the console output into an email message and send it to you, all without requiring them to install an add-on.</p>
<p>The Web Console is not a replacement for Firebug, but it will be a great tool to have in a pinch.</p>
<h2>What&#8217;s Next for the Web Console?</h2>
<p>We&#8217;re still in the middle of the Firefox 4 beta test cycle, so you can expect to see additional improvements and polish as the beta progresses and we head to the release of Firefox 4. If you&#8217;d like to get involved and help make the Firefox developer tools <em>beyond awesome</em>, talk to us! Discussion about the Firefox developer tools comes on the <a href="https://lists.mozilla.org/listinfo/dev-apps-firefox">dev-apps-firefox mailing list/newsgroup</a> and in realtime in the #devtools channel on irc.mozilla.org. I&#8217;m also happy to receive feedback <a href="mailto:kevin@kevindangoor.com">by email</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blueskyonmars.com/2010/09/01/introducing-the-web-console/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mozilla DevTools coming out of hiding</title>
		<link>http://www.blueskyonmars.com/2010/08/26/mozilla-devtools-coming-out-of-hiding/</link>
		<comments>http://www.blueskyonmars.com/2010/08/26/mozilla-devtools-coming-out-of-hiding/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 19:02:37 +0000</pubDate>
		<dc:creator>Kevin Dangoor</dc:creator>
				<category><![CDATA[Mozilla]]></category>
		<category><![CDATA[devtools]]></category>

		<guid isPermaLink="false">http://www.blueskyonmars.com/?p=2749</guid>
		<description><![CDATA[OK, we weren&#8217;t actually hiding, but we have been spending a lot of time learning, coding and figuring things out. We&#8217;ve been so busy creating things that we haven&#8217;t had much time to talk about the things we&#8217;ve been creating.
A little more than a month ago, I announced here that Mozilla officially has a Developer [...]]]></description>
			<content:encoded><![CDATA[<p>OK, we weren&#8217;t actually <em>hiding</em>, but we have been spending a lot of time learning, coding and figuring things out. We&#8217;ve been so busy creating things that we haven&#8217;t had much time to talk about the things we&#8217;ve been creating.</p>
<p>A little more than a month ago, I announced here that <a href="2010/07/21/a-renewed-developer-tools-focus-at-mozilla/">Mozilla officially has a Developer Tools</a> group again, with tooling for both Firefox and the open web in general in our sights. Much of our group is new to Firefox development, and so the past few weeks have been quite an education in the processes used to ship a feature-filled, open source, stable browser to 400 million+ people. And that&#8217;s just the <em>process</em>. There&#8217;s the technology, too, and the <a href="http://mozillalabs.com/bespin/">Bespin</a> team had to learn a lot there as well. The people who have been working on Firefox for a long time have been great mentors in getting us up to speed.</p>
<p>Now that we&#8217;re getting an idea of what the developer tools in Firefox 4 look like, the devtools team is going to be a lot more public about what we&#8217;re doing and invite the community to join in and help us make tools that make the web a better place. Keep on eye on <a href="http://planet.mozilla.org/">Planet Mozilla</a> or dev-apps-firefox (newsgroup/mailing list) in the coming weeks to learn more about what we&#8217;re up to and where we&#8217;re going next.</p>
<p>Also, one more word about Firefox 4 dev tools: <a href="http://blog.getfirebug.com/2010/08/24/firebug-1-6b1/">Firebug 1.6b1 is out</a> and is awesome. If you&#8217;re a web developer using Firefox 4 beta, you should definitely check it out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blueskyonmars.com/2010/08/26/mozilla-devtools-coming-out-of-hiding/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MichiPUG&#8217;s 5th Birthday!</title>
		<link>http://www.blueskyonmars.com/2010/08/26/michipugs-5th-birthday/</link>
		<comments>http://www.blueskyonmars.com/2010/08/26/michipugs-5th-birthday/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 18:25:28 +0000</pubDate>
		<dc:creator>Kevin Dangoor</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[michipug]]></category>

		<guid isPermaLink="false">http://www.blueskyonmars.com/?p=2747</guid>
		<description><![CDATA[The Michigan Python Users Group turns 5 with the September meeting. Woohoo! Come and celebrate with food and lightning talks!
Thursday, September 2nd at 7pm at SRT Solutions.
RSVP today to save a spot! While you&#8217;re at it, pitch in with a lightning talk of interest to Python users.
]]></description>
			<content:encoded><![CDATA[<p>The<a href="http://groups.google.com/group/michipug/web/index-2"> Michigan Python Users Group</a> turns 5 with the September meeting. Woohoo! Come and celebrate with food and lightning talks!</p>
<p>Thursday, September 2nd at 7pm at SRT Solutions.</p>
<p><a href="https://spreadsheets.google.com/viewform?formkey=dFVFRy1qdmQtNnVwZDdfWjQ4Z3luSWc6MQ">RSVP today to save a spot!</a> While you&#8217;re at it, pitch in with a lightning talk of interest to Python users.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blueskyonmars.com/2010/08/26/michipugs-5th-birthday/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Renewed Developer Tools Focus at Mozilla</title>
		<link>http://www.blueskyonmars.com/2010/07/21/a-renewed-developer-tools-focus-at-mozilla/</link>
		<comments>http://www.blueskyonmars.com/2010/07/21/a-renewed-developer-tools-focus-at-mozilla/#comments</comments>
		<pubDate>Wed, 21 Jul 2010 14:41:13 +0000</pubDate>
		<dc:creator>Kevin Dangoor</dc:creator>
				<category><![CDATA[Mozilla]]></category>

		<guid isPermaLink="false">http://www.blueskyonmars.com/?p=2745</guid>
		<description><![CDATA[When I joined Mozilla at the beginning of 2009, I was a part of Ben and Dion&#8217;s &#8220;Developer Tools Lab&#8221;. As part of Mozilla Labs, the plan was basically that we&#8217;d try out a bunch of ideas for developers and see what we could learn from them. The biggest of those ideas was the Bespin [...]]]></description>
			<content:encoded><![CDATA[<p>When I joined Mozilla at the beginning of 2009, I was a part of <a href="http://benzilla.galbraiths.org/">Ben</a> and <a href="http://almaer.com/blog/">Dion</a>&#8217;s &#8220;Developer Tools Lab&#8221;. As part of <a href="http://mozillalabs.com/">Mozilla Labs</a>, the plan was basically that we&#8217;d try out a bunch of ideas for developers and see what we could learn from them. The biggest of those ideas was the <a href="http://mozillalabs.com/bespin/">Bespin project</a>, into which we&#8217;ve put a good deal of effort. When Ben and Dion <a href="http://almaer.com/blog/joining-palm-with-ben">left to join Palm</a>, the Bespin project was rolled into Labs directly and the various other bits of experimentation fell by the wayside.</p>
<p>Meanwhile, Mozilla has been gradually adding to developer tool support in Firefox through <a href="http://www.softwareishard.com/blog/index.php">Jan Odvarko</a>&#8217;s work on the amazing <a href="http://getfirebug.com/">Firebug</a> and, more recently, work that <a href="http://antennasoft.net/robcee/">Rob Campbell</a> and <a href="http://daviddahl.blogspot.com/">David Dahl</a> have been doing on some new tools that are directly part of the Firefox product.</p>
<p>Bespin is a very interesting project on its own, but for quite a while I&#8217;ve viewed it as part of a bigger picture, which is why we&#8217;ve put so much effort into our &#8220;Embedded&#8221; releases which make it easy to make Bespin a part of many &#8220;bigger pictures&#8221;. Likewise, I think that developer tools and platform improvements that ship with Firefox will ultimately be part of a bigger picture that will help developers build the kinds of powerful apps that HTML5 makes possible.</p>
<p>I&#8217;ve taken on a new role at Mozilla as the manager of a unified Developer Tools group that lives within the Firefox product organization. Though we&#8217;ll likely do some experimentation that may show up under Mozilla Labs, our focus in this new group is much more on shipping great, real-world-ready developer tools. I&#8217;m really excited about this change, because we&#8217;ll be in a better position than before to make our big picture dreams for dev tools come true. I&#8217;m also really excited to be working with such a talented group of people including the Firefox/Firebug engineers mentioned earlier and the Bespin team (<a href="http://directwebremoting.org/blog/joe">Joe Walker</a>, <a href="http://pcwalton.blogspot.com/">Patrick Walton</a> and our interns for the summer <a href="http://twitter.com/jviereck">Julian Viereck</a> and <a href="http://www.robodesign.ro/mihai/blog">Mihai Sucan</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blueskyonmars.com/2010/07/21/a-renewed-developer-tools-focus-at-mozilla/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<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>Ending SlowNews Experiment #1</title>
		<link>http://www.blueskyonmars.com/2010/02/23/ending-slownews-experiment-1/</link>
		<comments>http://www.blueskyonmars.com/2010/02/23/ending-slownews-experiment-1/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 14:01:00 +0000</pubDate>
		<dc:creator>Kevin Dangoor</dc:creator>
				<category><![CDATA[SlowNews]]></category>

		<guid isPermaLink="false">http://www.blueskyonmars.com/2010/02/23/ending-slownews-experiment-1/</guid>
		<description><![CDATA[The great thing about experiments is that they teach you things. Trying something and having it not work is not a failure. It&#8217;s information.
I still believe in what I said in my &#8220;What is SlowNews?&#8221; post: the move toward real-time random links and news is a bad move, in general. That basic part of the [...]]]></description>
			<content:encoded><![CDATA[<p>The great thing about experiments is that they teach you things. Trying something and having it not work is not a failure. It&#8217;s <i>information.</i></p>
<p>I still believe in what I said in my <a href="http://www.blueskyonmars.com/2010/01/26/what-is-slownews/">&#8220;What is SlowNews?&#8221;</a> post: the move toward real-time random links and news is a bad move, in general. That basic part of the experiment is not why I&#8217;m dropping my weekly SlowNews posts.</p>
<p>This blog is more than 8 years old, and I&#8217;ve always posted to it <i>for myself</i>. I&#8217;ve posted thoughts that I wanted to work out in writing. I&#8217;ve posted things that I wanted to share because I thought they could help people. I&#8217;ve posted about things that I thought were interesting and worthy of additional commentary. I thought these SlowNews postings would fit in that latter category.</p>
<p>But, I haven&#8217;t particularly enjoyed putting those posts together in the format I&#8217;ve been doing. While it is a chance to reflect on the happenings of the week, what I&#8217;ve done so far has felt too random. There&#8217;s too little narrative. So, for now, SlowNews goes back onto the idea shelf, waiting for a better implementation.</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=01bbc9c6-054c-85e5-9586-95e5726b45b3" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.blueskyonmars.com/2010/02/23/ending-slownews-experiment-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SlowNews: Declarative Events in JS, Redis, Mono, Facebook x2</title>
		<link>http://www.blueskyonmars.com/2010/02/23/slownews-declarative-events-in-js-redis-mono-facebook-x2/</link>
		<comments>http://www.blueskyonmars.com/2010/02/23/slownews-declarative-events-in-js-redis-mono-facebook-x2/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 14:00:37 +0000</pubDate>
		<dc:creator>Kevin Dangoor</dc:creator>
				<category><![CDATA[SlowNews]]></category>

		<guid isPermaLink="false">http://www.blueskyonmars.com/?p=2722</guid>
		<description><![CDATA[Ending This SlowNews Experiment
This is the last issue of this SlowNews format. I may or may not try a new format. I&#8217;ve written a bit more about why.
Reactive JavaScript: Declarative Programming for Events
When a problem space is well understood, adding declarative forms can really save on a lot of work. Here&#8217;s an interesting look at [...]]]></description>
			<content:encoded><![CDATA[<h2>Ending <em>This</em> SlowNews Experiment</h2>
<p>This is the last issue of this SlowNews format. I may or may not try a new format. I&#8217;ve written <a href="http://www.blueskyonmars.com/2010/02/23/ending-slownews-experiment-1/">a bit more about why</a>.</p>
<h2>Reactive JavaScript: Declarative Programming for Events</h2>
<p>When a problem space is well understood, adding declarative forms can really save on a lot of work. Here&#8217;s an <a href="http://codebetter.com/blogs/matthew.podwysocki/archive/2010/02/16/introduction-to-the-reactive-extensions-to-javascript.aspx">interesting look at the Reactive Extensions to JavaScript</a>, created by the team at Microsoft that creative the <a href="http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx">Reactive Extensions for .NET</a>. I didn&#8217;t find the syntax there appealing, but the ideas are interesting. The <a href="http://www.flapjax-lang.org/">Flapjax</a> project provides a nicer looking syntax, but requires a compilation step to pure JS (the compiler is written in JS and can run in the browser). I like the Flapjax tutorial reference to spreadsheets, because spreadsheets provide a great model for certain kinds of declarative work and tying declarative structures with additional imperative programming is very powerful. One of the reasons we chose <a href="http://sproutcore.com/">SproutCore</a> for Bespin is the ability to bind views directly to data so that the two automatically stay in sync.</p>
<h2>A Collection of Redis Use Cases</h2>
<p>Mathias Meyer&#8217;s <a href="http://www.paperplanes.de/2010/2/16/a_collection_of_redis_use_cases.html">Collection of Redis Use Cases</a> provides a great collection of examples to give you an idea of where you might apply <a href="http://code.google.com/p/redis/">Redis</a> in your own applications. In the &#8220;Not Only SQL&#8221; movement, Redis is a good tool to have in your toolbox.</p>
<h2>Using node.js To Bootstrap a Server from Client Code</h2>
<p>Dion Almaer wrote up the experience he and Ben Galbraith had <a href="http://almaer.com/blog/building-an-web-application-from-the-inside-out-using-node-js-to-bootstrap-a-server-from-client-js?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+dion+%28techno.blog%28%22Dion%22%29%29">in creating</a> the <a href="http://projectappetite.com/">Project Appetite</a> site for Palm WebOS developers. Following the modern style of having the client do presentation and the web server just providing an API, they could work on client and server independently. It turns out that a quick way to get a server up and running was just to reuse client-side code on the server (in this case, using <a href="http://nodejs.org/">node.js</a>).</p>
<h2>Harmony: JavaScript Testing in Ruby</h2>
<p><a href="http://github.com/mynyml/harmony">Harmony</a> takes advantage of <a href="http://github.com/jbarnette/johnson/">Johnson</a>, a Ruby to JavaScript bridge and lets you write unit tests for your JavaScript code in Ruby. It&#8217;s not unreasonable to ask <em>why</em>, given that you can write the tests for your JavaScript code in, say, JavaScript&#8230; but, on first glance to me, the benefit here would seem to be that you can test server and client bits together conveniently.</p>
<h2>Making Facebook 2x Faster</h2>
<p>Jason Sobel gives the rundown on a 2009 project to <a href="http://www.facebook.com/note.php?note_id=307069903919">make Facebook&#8217;s pages load twice as fast</a>. This is a good account of what it can take to make a speedy site.</p>
<h2>Thoughtworkers Subjective Impressions of VCS</h2>
<p>Having trouble picking a version control system (VCS) for your next project? Martin Fowler has posted <a href="http://martinfowler.com/bliki/VersionControlTools.html">some general impressions</a> that Thoughtworks people have picked up while working on client projects. I&#8217;ve worked on a variety of projects using a variety of tools (RCS, CVS, ClearCase, Subversion, Bazaar-NG, Mercurial, Git) and Martin&#8217;s roundup meshes pretty well with my own impressions.</p>
<h2>Canviz: graphviz on Canvas</h2>
<p>Need to produce a directed graph? Only care about the <a href="http://code.google.com/p/canviz/wiki/Browsers">&#8220;modern&#8221; browsers</a>? Then <a href="http://www.ryandesign.com/canviz/">canviz</a> is for you! <a href="http://code.google.com/p/canviz/">Canviz is open source</a> (MIT license) and lets you create a variety of graphs just as you can with the <a href="http://www.graphviz.org/">graphviz</a> project, but entirely client side.</p>
<h2>HTML5 Web Sockets Spec Reimagined</h2>
<p>Tim Bray <a href="http://www.tbray.org/ongoing/When/201x/2010/02/15/HTML5">dove into the HTML5 spec</a> and found a number of new features that he liked. He also went deep on the Web Sockets spec in particular, going so far as to produce an <a href="http://www.tbray.org/drafts/wsock-00">alternate version of the spec</a> to make things clearer. Looking at Tim&#8217;s alternate, there&#8217;s a lot that he left alone.</p>
<h2>State of Mono</h2>
<p>Miguel de Icaza has written up an overview of <a href="http://tirania.org/blog/archive/2010/Feb-17.html">what&#8217;s been going on with the Mono project</a>. It looks to me like the Mono platform is still evolving quite nicely. If you happen to be near Ann Arbor on Thursday, February 25th, you can learn about the state of .NET web development at the <a href="http://a2div.com/">a2 </a></p>
<div>meeting.</p>
<h2>10 Online Code Editors</h2>
<p>There has been a lot of development in web-based code editors, and I think this space will just get busier as time goes on. Here&#8217;s a roundup of <a href="http://www.catswhocode.com/blog/10-useful-online-code-editors">10 online code editors</a>, including screenshots. ObDisclaimer: I&#8217;m the project lead for <a href="https://mozillalabs.com/bespin/">Bespin</a>.</p>
<h2>Interesting Releases</h2>
<ul>
<li><a href="http://www.kernel.org/pub/software/scm/git/docs/RelNotes-1.7.0.txt">git 1.7</a></li>
<li><a href="http://razorjack.net/quicksand/">jQuery Quicksand plugin</a> &#8211; nice visual effect for filtering and sorting</li>
<li><a href="http://code.google.com/p/zen-coding/wiki/Changelog">Zen Coding 0.6</a> &#8211; adds filters, new editor support and a bunch of other features</li>
</ul>
<h2>&gt; list<br />
11 goto 11</h2>
<p>Top 11 ways to deploy a website</p>
<p>11. <a href="http://samba.anu.edu.au/rsync/">rsync</a><br />
10. <a href="http://labs.peritor.com/webistrano">Webistrano</a><br />
1. <a href="http://renesd.blogspot.com/2010/02/secret-to-my-web-development.html">Your foot!</a></p>
</div>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=c026fe09-9c9f-877e-b199-90661aba1f68" alt="" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.blueskyonmars.com/2010/02/23/slownews-declarative-events-in-js-redis-mono-facebook-x2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SlowNews: IM in JS, XHP, ePub</title>
		<link>http://www.blueskyonmars.com/2010/02/16/slownews-im-in-js-xhp-epub/</link>
		<comments>http://www.blueskyonmars.com/2010/02/16/slownews-im-in-js-xhp-epub/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 14:00:43 +0000</pubDate>
		<dc:creator>Kevin Dangoor</dc:creator>
				<category><![CDATA[SlowNews]]></category>

		<guid isPermaLink="false">http://www.blueskyonmars.com/?p=2717</guid>
		<description><![CDATA[Ajax IM: Open Source IM, Totally JavaScript
The MIT-licensed Ajax IM library lets you add instant messaging to your site and features a new node.js server side. This is certainly a good use for an async framework like node! The one thing I noticed while sitting on their site is that it has an unpleasant way [...]]]></description>
			<content:encoded><![CDATA[<h2>Ajax IM: Open Source IM, Totally JavaScript</h2>
<p>The MIT-licensed <a href="http://ajaxim.com/">Ajax IM</a> library lets you add instant messaging to your site and features a new <a href="http://nodejs.org/">node.js</a> server side. This is certainly a good use for an async framework like node! The one thing I noticed while sitting on their site is that it has an unpleasant way of tacking things onto your browser&#8217;s history without actually going anywhere. Should you want to roll your own messaging, you could fire up <a href="http://github.com/jcoglan/faye">Faye</a> on node.js and use your favorite <a href="http://api.dojotoolkit.org/jsdoc/1.3.2/dojox.cometd">Bayeux client side library</a>.</p>
<h2>XHP: E4X for PHP</h2>
<p>Did you know that some implementations of ECMAScript allow you to <a href="http://en.wikipedia.org/wiki/ECMAScript_for_XML">embed XML right in your JavaScript</a>? I&#8217;d imagine many people don&#8217;t, because folks in the &#8220;real world&#8221; need to make sites that run on IE. Well, if you&#8217;ve been pining for the ability to embed XML right there in your code, or if you&#8217;ve been looking for a chance to turn PHP inside out, you&#8217;re going to love <a href="http://www.facebook.com/notes/facebook-engineering/xhp-a-new-way-to-write-php/294003943919">XHP</a>, which Facebook recently open sourced. At the very least, you&#8217;ll go read about it and then <a href="http://toys.lerdorf.com/archives/54-A-quick-look-at-XHP.html">learn about XHP&#8217;s implementation performance characteristics</a> from none other than Rasmus himself.</p>
<h2>wtfjs</h2>
<p>OK, so I&#8217;m a well-known booster of JavaScript. But, you&#8217;ll never hear me say that it&#8217;s perfect. <em>Every</em> language has its warts, and <a href="http://wtfjs.com/">wtfjs</a> has an enjoyable collection of JavaScript&#8217;s.</p>
<h2>LESS.app Now With Automatically More Less</h2>
<p><a href="http://incident57.com/less/">LESS.app</a> lets Mac users write their CSS in <a href="http://lesscss.org/">LESS</a> and have that LESS automatically turned into valid CSS as they work. Languages like LESS are cool, because they have an opportunity to influence how the actual standards will evolve.</p>
<h2>ePub in JavaScript</h2>
<p>The ePub standard looks to be gaining serious momentum as an ebook format, albeit without the support of the <a href="http://www.amazon.com/gp/product/B0015T963C?ie=UTF8&amp;tag=blueskyonmars-20&amp;linkCode=as2&amp;camp=1789&amp;creative=390957&amp;creativeASIN=B0015T963C">top selling ebook reader</a> to date. There has been a good bit of work done to create usable ePub readers in JavaScript, and Michael Mahemoff has <a href="http://ajaxian.com/archives/javascript-epub-readers">a good roundup</a> over at Ajaxian.</p>
<h2>&gt; list<br />
11 goto 11</h2>
<p>Top 11 JavaScript Features (from wtfjs)</p>
<p>11. <code>"string" instanceof String; // false.</code><br />
10. <code>typeof NaN // number, of course.</code><br />
1.</p>
<pre>(function(){
  var x = y = 1;
})();
alert(x); // undefined
alert(y); // 1 -- oops, auto-global!
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.blueskyonmars.com/2010/02/16/slownews-im-in-js-xhp-epub/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SlowNews: HipHop, Redis, Riak, Weave, Homebrew</title>
		<link>http://www.blueskyonmars.com/2010/02/09/slownews3/</link>
		<comments>http://www.blueskyonmars.com/2010/02/09/slownews3/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 14:00:28 +0000</pubDate>
		<dc:creator>Kevin Dangoor</dc:creator>
				<category><![CDATA[SlowNews]]></category>

		<guid isPermaLink="false">http://www.blueskyonmars.com/?p=2710</guid>
		<description><![CDATA[HipHop Compiles PHP to C++
What do you do if you have to serve up 400 billion PHP page views a month? You don&#8217;t, because you&#8217;re not Facebook. But, for Facebook speeding things up can make a real difference on their compute costs. Their newly open sourced tool HipHop translates PHP to C++ and then compiles [...]]]></description>
			<content:encoded><![CDATA[<h2>HipHop Compiles PHP to C++</h2>
<p>What do you do if you have to serve up 400 billion PHP page views a month? <em>You don&#8217;t</em>, because you&#8217;re not Facebook. But, for Facebook speeding things up can make a real difference on their compute costs. Their <a href="http://developers.facebook.com/news.php?blog=1&amp;story=358">newly open sourced tool</a> <a href="http://github.com/facebook/hiphop-php/wikis">HipHop</a> translates PHP to C++ and then compiles the result with g++. Net benefit? Apparently 50% less CPU usage. Nice!</p>
<p>Also, check out Paul Biggar&#8217;s take on PHP compilation and <a href="http://blog.paulbiggar.com/archive/a-rant-about-php-compilers-in-general-and-hiphop-in-particular/">how HipHop impacts the phc project</a>.</p>
<h2>Mozilla Weave Hits 1.0, Adds Developer APIs</h2>
<p>The Mozilla Weave project recently <a href="http://mozillalabs.com/weave/2010/01/28/synchronize-your-firefox-experience-across-desktop-and-mobile/">shipped 1.0</a> of their Firefox extension that synchronizes information (securely and privately) between your browsers. This week, the Weave team has <a href="http://mozillalabs.com/weave/2010/02/05/weave-sync-new-apis-and-resources-for-developers/">announced Python and JavaScript client libraries and APIs in general </a>for accessing this data. They have web-based and iPhone clients as prototypes, which is really cool. Personally, I find the identity aspects to Weave very interesting and hope to see more experimentation and implementation of identity directly in the browser (how many more username and password systems do <em>you</em> want to implement?)</p>
<p>Disclaimer: I work for Mozilla Labs.</p>
<h2>Redis Goes Beyond RAM</h2>
<p>Redis is a very useful disk-backed key/value store with lots of interesting atomic operations. It&#8217;s always had the limitation that the entire dataset needed to fit in memory. antirez explains how <a href="http://antirez.com/post/redis-virtual-memory-story.html">that limitation is removed in Redis 2.0</a>. The <em>concept</em> of virtual memory is lifted straight from OS theory and practice, but the application-level implementation is a better fit for Redis&#8217; needs.</p>
<h2>Homebrew: OS X&#8217;s Missing Package Manager</h2>
<p><a href="http://github.com/mxcl/homebrew">Homebrew</a> continues to be a fairly stealth project, I think. If you&#8217;re a Mac user, though, it&#8217;s worth looking at. It&#8217;s a super simple package management system that makes it easy to install many common packages and even makes it easy to manage packages that you download and build yourself. Andre Arko posted <a href="http://www.engineyard.com/blog/2010/homebrew-os-xs-missing-package-manager/">a nice introduction</a>.</p>
<h2>Removing Features</h2>
<p>Lukas Mathis has written one of the best articles about <a href="http://ignorethecode.net/blog/2010/02/02/removing-features/">removing features</a> that I&#8217;ve seen. It&#8217;s always tempting to keep adding more, when really adding <em>better</em> is really what&#8217;s required.</p>
<h2>More On The Use of h.264</h2>
<p>The hubbub around h.264 that I talked about in the first SlowNews issue has a <a href="http://bemasc.net/wordpress/2010/02/02/no-you-cant-do-that-with-h264/">great new summary</a> courtesy of Ben Schwartz. Ben took the actual license text from various pieces of software that produce h.264 videos, making it plain as day that people creating videos and posting them online are quite often in violation of the patents. Whatever people may think of <a href="http://theora.org/">Theora&#8217;s</a> quality, at least it is unencumbered.</p>
<h2>Mugtug Sketchpad: Fast Painting with Canvas</h2>
<p>If you&#8217;ve doubted the growing ability of standards-based webapps to fully replace <em>many</em> desktop apps, <a href="http://mugtug.com/sketchpad/">Sketchpad</a> should sway you. As long as you&#8217;re not using IE.</p>
<h2>Detailed Riak Overview</h2>
<p>Sean Cribbs insists that you should <a href="http://seancribbs.com/tech/2010/02/06/why-riak-should-power-your-next-rails-app/">use Riak for your next Rails app</a>. I&#8217;m not likely to be created a Rails app any time soon, but this was still a good overview of <a href="http://riak.basho.com/">Riak</a>. I&#8217;ve personally had a lot more exposure to MongoDB and Redis than Riak, so it&#8217;s nice to get a feel for what Riak&#8217;s all about. Also worth a look: Riak now supports <a href="http://blog.basho.com/2010/02/03/the-release-riak-0.8-and-javascript-map/reduce/">JavaScript-based map/reduce jobs</a>.</p>
<h2>Rails 3 Beta Release</h2>
<p>I don&#8217;t intend to include beta releases or vaporware here in general, but Rails 3 has been in development for a long time and is coming out from under its merger with Merb. So, in case you missed it, here&#8217;s <a href="http://weblog.rubyonrails.org/2010/2/5/rails-3-0-beta-release">DHH&#8217;s post about Rails 3.0&#8217;s beta</a>.</p>
<h2>Free F# Book</h2>
<p>I&#8217;ve been impressed by some of the directions in which Microsoft has taken their development tools. The F# programming language, a functional language, seems like the kind of thing you wouldn&#8217;t see coming out of Microsoft (or, at least, beyond the research prototype stage). But, it&#8217;s certainly well beyond research prototype and now you can even get a feel for F# from <a href="http://www.ctocorner.com/fsharp/book/default.aspx">a new, free book</a> by John Puopolo<em> with </em>Sandy Squires.</p>
<h2>&gt; list<br />
11 goto 11</h2>
<h3>Top 11 Reasons Why There Was No List Last Week</h3>
<p>11. Perhaps every other SlowNews issue has no list?</p>
<p>10. There was no list?</p>
<p>1. I forgot.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.blueskyonmars.com/2010/02/09/slownews3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.330 seconds -->
<!-- Cached page served by WP-Cache -->
