<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><description>A showcase of awesome JavaScript code that pushes the boundaries of what’s possible on the web.</description><title>Badass JavaScript</title><generator>Tumblr (3.0; @badassjs)</generator><link>http://badassjs.com/</link><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/badassjs" /><feedburner:info uri="badassjs" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://tumblr.superfeedr.com/" /><item><title>Looking to move from Flash to WebGL? IvanK brings the Flash API to JavaScript</title><description>&lt;p&gt;Ivan Kuckir sent in a &lt;a href="http://lib.ivank.net/index.php" target="_blank"&gt;neat library&lt;/a&gt; to help Flash developers move to JavaScript.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I have made a graphics library to help people move from Flash to Javascript.  It is something like &lt;a href="http://easeljs.com/" target="_blank"&gt;EaselJS&lt;/a&gt;, but unlike EaselJS, all the classes, methods and properties come from Flash and unlike EaselJS, it uses WebGL (GPU) for drawing graphics (it is fast). &lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;As he says, the API is heavily based on Flash so it will be very familiar to Flash developers.  The library supports many common things, including a scene graph for mouse events over individual elements (not possible with plain WebGL without lots of work), text rendering, images, vectors and more.  It’s all 2d at the moment but rendered on WebGL for speed.  Perhaps it needs a 2d canvas fallback for IE9 though…  The library touts its speed and mobile device support - things most Flash based apps can’t.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lzcj7wRDI41qbis4g.png"/&gt;&lt;/p&gt;
&lt;p&gt;There are some &lt;a href="http://lib.ivank.net/index.php?p=demos" target="_blank"&gt;library demos&lt;/a&gt;, but Ivan has gone even farther and made &lt;a href="http://lib.ivank.net/index.php?p=projects" target="_blank"&gt;two fun games&lt;/a&gt; with it that certainly show the library’s power and performance.  The first is “&lt;a href="http://crazybugs.ivank.net/" target="_blank"&gt;Crazy Bugs&lt;/a&gt;”, and it is a game where you must move a virtual net around to prevent the bugs from crossing paths.  The second is called “&lt;a href="http://bigfish.ivank.net/" target="_blank"&gt;Big Fish&lt;/a&gt;” and in this game you are a fish and you have to eat the smaller fish and avoid the bigger fish.  Both are worth a play!&lt;/p&gt;
&lt;p&gt;While the library is heavily based on Flash and he says Flash developers will have no trouble picking it up, it does have &lt;a href="http://lib.ivank.net/index.php?p=documentation" target="_blank"&gt;some documentation&lt;/a&gt; of its own for you to get started, and of course the &lt;a href="http://lib.ivank.net/index.php?p=demos" target="_blank"&gt;demo source code&lt;/a&gt;.  If you’re a Flash developer looking to move to HTML5, this library is certainly worth a look!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/GrWn2LrmeU4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/GrWn2LrmeU4/17561830502</link><guid isPermaLink="false">http://badassjs.com/post/17561830502</guid><pubDate>Mon, 13 Feb 2012 11:39:16 -0800</pubDate><feedburner:origLink>http://badassjs.com/post/17561830502</feedburner:origLink></item><item><title>WebM and WebP Hand Ported to JavaScript for All Browsers</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lz1cslKy0d1qbis4g.png"/&gt;&lt;/p&gt;
&lt;p&gt;Dominik Homberger has been very busy over the last few months working on porting first, Google’s WebP image format to JS and today launching his WebM video decoder in JavaScript.  No, these are not Emscripten compiled versions - these are hand ports directly from the original C++ source code.  And yes, both of these ports work in all browsers, not just the latest Chrome and Firefox - all browsers.  The WebP port works in IE6+ with a flash fallback for the canvas element, as well as, of course, Chrome, Firefox, Safari and Opera and the mobile browsers on Android and iOS.  The WebM video port works in IE9+, as well as all the other browsers mentioned before including the mobile ones.  That is seriously impressive!&lt;/p&gt;
&lt;h2&gt;WebP Decoding and Encoding in JavaScript&lt;/h2&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lz1ctwTVEO1qbis4g.png"/&gt;&lt;/p&gt;
&lt;p&gt;Let’s first discuss the WebP image port to JavaScript.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://code.google.com/speed/webp/" target="_blank"&gt;WebP&lt;/a&gt; is a new image format that provides lossless and lossy compression for images on the web. WebP lossless images are 28% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller in size compared to JPEG images at equivalent SSIM index.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Unfortunately, at the moment the only browser providing native support for WebP is Google’s own Chrome, so if one wants to use WebP encoded images on the web they either have to encode PNGs or JPEGs as well, or use a library like &lt;a href="http://webpjs.appspot.com/" target="_blank"&gt;WebPJS&lt;/a&gt; to fill the gaps in browser support.  All one has to do to enable WebP support in all browsers is include WebPJS, and it takes care of replacing all the WebP images on the page with decoded equivalents on the fly.&lt;/p&gt;
&lt;p&gt;Dominik told me that he didn’t know about Emscripten, the LLVM to JavaScript compiler at the time he started working on the project, so it is all hand ported, but that at one point he did try it just to see how it compared.  He told me that the Emscripten version was actually much slower than he expected, as well as being 600KB in size.  By comparison, the hand ported version is just 67KB minified, 27KB gzipped.&lt;/p&gt;
&lt;p&gt;If you want to use the decoder in a more direct fashion rather than automatically replacing your images, you can check out the library behind it called &lt;a href="http://libwebpjs.hohenlimburg.org/" target="_blank"&gt;LibWebPJS&lt;/a&gt;, which has a nice JavaScript API to the decoder.  He has also ported the encoder to JavaScript as well, so you can encode a WebP image from a PNG or JPEG, as well as support for the &lt;a href="http://libwebpjs.hohenlimburg.org/webp-experiment/lossless/libwebp-javascript-lossless-decoder.html" target="_blank"&gt;lossless version&lt;/a&gt; of WebP.&lt;/p&gt;
&lt;h2&gt;WebM Decoding in JS&lt;/h2&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lz1efrCjlf1qbis4g.png"/&gt;&lt;/p&gt;
&lt;p&gt;Wow, that’s a lot, but not enough it seems!  He also ported the &lt;a href="http://www.webmproject.org/" target="_blank"&gt;WebM&lt;/a&gt; video format to JS.  WebM is a bit more popular than WebP so far (it is also older), and is already supported natively in Chrome, Firefox, and Opera.  Dominik’s &lt;a href="http://libwebpjs.hohenlimburg.org/vp8/webm-javascript-decoder/" target="_blank"&gt;WebM port to JavaScript&lt;/a&gt; works in all modern browsers including IE9+ and mobile browsers, however your results in terms of actual framerate may vary across browsers and platforms.  I get about 10fps in Safari and about 25-30 in Chrome and Firefox Aurora, so not too shabby for a first pass.  On my iPhone 4S by comparison, while the video does play, I get about 1 frame per second, so certainly room for improvement there, but who expected it to even work at all?&lt;/p&gt;
&lt;p&gt;We’ve seen &lt;a href="https://github.com/mbebenita/Broadway" target="_blank"&gt;H.264&lt;/a&gt; and &lt;a href="https://github.com/bemasc/Broadway/tree/master/vp8" target="_blank"&gt;WebM&lt;/a&gt; playing in JavaScript before, but never hand ported - always Emscripten ports - and never working in all browsers.  This is seriously impressive stuff! There is still some work to be done in terms of performance on some browsers, but the proof of concept is here.  I can’t wait to see what comes next!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/qBnTc_DRgCo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/qBnTc_DRgCo/17218459521</link><guid isPermaLink="false">http://badassjs.com/post/17218459521</guid><pubDate>Tue, 07 Feb 2012 11:07:45 -0800</pubDate><feedburner:origLink>http://badassjs.com/post/17218459521</feedburner:origLink></item><item><title>JS1k is back! Awesome JavaScript demos in only 1KB</title><description>&lt;p&gt;I always enjoy watching &lt;a href="http://js1k.com/2012-love/" target="_blank"&gt;JS1k&lt;/a&gt;, which, if you haven’t heard of it, is a JavaScript competition to make the best demo in under 1KB of code.  It has been running for a few years now, and every time, it gets better and better with cooler demos, more judges and of course better prizes.  This time, the theme of the contest is about love given that Valentines day is coming up soon, and we’ve already got some pretty neat demos.  Here are my favorites so far.  You can expect us to post about more as they come in!&lt;/p&gt;
&lt;h2&gt;1K Procedural Rose&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://js1k.com/2012-love/demo/1022" target="_blank"&gt;&lt;img src="http://media.tumblr.com/tumblr_lyzcw6U4bZ1qbis4g.jpg"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Román Cortés does it again, this time with a &lt;a href="http://js1k.com/2012-love/demo/1022" target="_blank"&gt;procedural rose rendering&lt;/a&gt; in just 1018 bytes.    Another of my favorite things about JS1k is all the learning and sharing that goes on.  Román has written a &lt;a href="http://www.romancortes.com/blog/1k-rose/" target="_blank"&gt;fantastic blog post&lt;/a&gt; about how he made the rose, including all the rendering techniques and more.  Definitely a must read!&lt;/p&gt;
&lt;h2&gt;Campsite Firefighter&lt;/h2&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lyzdayRnAF1qbis4g.png"/&gt;&lt;/p&gt;
&lt;p&gt;Paul Milham made a &lt;a href="http://js1k.com/2012-love/demo/1004" target="_blank"&gt;neat demo&lt;/a&gt; that renders a fire with particles on a canvas, and if you mash the keyboard, you can pee on the fire to put it out.  Be careful where you aim though, as how much you mash controls how fast it comes out. :)&lt;/p&gt;
&lt;h2&gt;Tunnel of Love&lt;/h2&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lyzdkuOXcR1qbis4g.png"/&gt;&lt;/p&gt;
&lt;p&gt;Alexander Prinzhorn brings us a nice demo showing a &lt;a href="http://js1k.com/2012-love/demo/1016" target="_blank"&gt;tunnel of love&lt;/a&gt; in just 535 bytes.  That’s all there is to it!&lt;/p&gt;
&lt;h2&gt;&lt;strong&gt;Modern Art Generator&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lyzdmqY5mV1qbis4g.png"/&gt;&lt;/p&gt;
&lt;p&gt;Clocking in at just 735 bytes, this is a procedural &lt;a href="http://js1k.com/2012-love/demo/1023" target="_blank"&gt;modern art generator&lt;/a&gt; for the canvas element.  Very neat!&lt;/p&gt;
&lt;h2&gt;Hidden Love&lt;/h2&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lyze11vZzC1qbis4g.png"/&gt;&lt;/p&gt;
&lt;p&gt;Manel Villar made a &lt;a href="http://js1k.com/2012-love/demo/1025" target="_blank"&gt;neat demo&lt;/a&gt; that reveals a message as you move your mouse over it in 1017 bytes.  Can you read it?&lt;/p&gt;
&lt;h2&gt;The Love Helix&lt;/h2&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lyze5ogEgQ1qbis4g.png"/&gt;&lt;/p&gt;
&lt;p&gt;Chris Heilmann submitted &lt;a href="http://js1k.com/2012-love/demo/1031" target="_blank"&gt;the love helix&lt;/a&gt; in just 459 bytes.  I could watch this all day!&lt;/p&gt;
&lt;p&gt;It is amazing to see what can be done in such a small amount of code.  I just love the creativity everyone brings to their demos!  We’ve seen some great ones so far, and I can’t wait to see more submissions as they come in.  Don’t forget to check out the &lt;a href="http://js1k.com/2012-love/demos" target="_blank"&gt;whole list of demos&lt;/a&gt; on the JS1k website, and to &lt;a href="http://js1k.com/2012-love/submit" target="_blank"&gt;submit your own&lt;/a&gt; if you feel so called.  Enjoy!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/zn4NJ-bpHLs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/zn4NJ-bpHLs/17158410075</link><guid isPermaLink="false">http://badassjs.com/post/17158410075</guid><pubDate>Mon, 06 Feb 2012 09:13:30 -0800</pubDate><feedburner:origLink>http://badassjs.com/post/17158410075</feedburner:origLink></item><item><title>Weekly Badass JS Roundup #7</title><description>&lt;p&gt;Welcome back to the weekly Badass JS roundup!  As always, there is lots of JavaScript news this week, so lets dive in.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Ehsan Akhgari has a &lt;a href="http://ehsanakhgari.org/blog/2012-01-25/porting-opengl-application-web" target="_blank"&gt;neat blog post&lt;/a&gt; on automatically converting a native OpenGL application to run on the web via WebGL using Emscripten.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://maxtaco.github.com/coffee-script/#iced" target="_blank"&gt;Iced CoffeeScript&lt;/a&gt; is a fork of CoffeeScript that brings two new keywords to the language: await and defer, which make asynchronous programming much easier.  It is certainly a neat idea, although it has yet to prove itself in practice!&lt;/li&gt;
&lt;li&gt;The prolific LearnBoost team has released two new modules for Node, &lt;a href="https://github.com/learnboost/up" target="_blank"&gt;up&lt;/a&gt; and &lt;a href="https://github.com/learnboost/distribute" target="_blank"&gt;distribute&lt;/a&gt; which make it possible to perform zero-downtime code updates in Node.js which is nice in development as well because it is annoying to have to start and restart your server all the time.  There’s a &lt;a href="http://www.devthought.com/2012/01/29/staying-up-with-node-js/" target="_blank"&gt;blog post&lt;/a&gt; going into much more detail about it too.&lt;/li&gt;
&lt;li&gt;Jens Nockert is continuing his WebCL work, this time with a &lt;a href="https://github.com/JensNockert/hydra" target="_blank"&gt;JS library&lt;/a&gt; that bridges the gaps between the various WebCL prototypes that vendors have made.&lt;/li&gt;
&lt;li&gt;Jed Schmidt has released a &lt;a href="https://github.com/jed/dynamo" target="_blank"&gt;Amazon DynamoDB binding&lt;/a&gt; for Node.js that looks pretty nice.&lt;/li&gt;
&lt;li&gt;The 140bytes contest continues, this time with a &lt;a href="https://gist.github.com/1672254" target="_blank"&gt;version of Tetris&lt;/a&gt; in less than 140 bytes.  Wow!&lt;/li&gt;
&lt;li&gt;In case you’ve ever wanted a workaround for the lack of tail call optimization in JavaScript, &lt;a href="https://gist.github.com/1697037" target="_blank"&gt;here you go&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://backbonejs.org/#changelog" target="_blank"&gt;Backbone.js 0.9&lt;/a&gt; has been released and Jeremy says it should be considered a preview for 1.0!&lt;/li&gt;
&lt;li&gt;Twitter’s Bootstrap library has been upgraded to 2.0 and it is just packed with awesome stuff. Go &lt;a href="http://twitter.github.com/bootstrap/" target="_blank"&gt;check it out!&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;If you missed it, Ryan Dahl has &lt;a href="http://groups.google.com/group/nodejs/browse_thread/thread/85f6a3829bc64cb6?pli=1" target="_blank"&gt;released the reigns&lt;/a&gt; of gatekeeper of the Node.js project to Isaac Schleuter, author of NPM so he can focus on research more.  He will still be involved with the project of course, just not in the day-to-day of deciding what goes into each release.&lt;/li&gt;
&lt;li&gt;Not sure if this is new, but Joseph Gentle who was an engineer on the Google Wave team has released &lt;a href="http://sharejs.org/" target="_blank"&gt;ShareJS&lt;/a&gt; which is an implementation of the Operational Transform algorithms for Node and the browser allowing one to make collaborative realtime editable applications.  The example shows how you could build an Etherpad clone in just 4 lines of code!   Of course, you can find the &lt;a href="https://github.com/josephg/ShareJS" target="_blank"&gt;source on Github&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Firefox 10 now has some pretty awesome looking developer tools built right in.  Check out &lt;a href="http://functionsource.com/post/firefox-developer-tools-biggest-upgrade-since-firebug" target="_blank"&gt;this video&lt;/a&gt; for a nice walkthrough!&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;That’s all for this week!  Did I miss something?  Did you make or find something that is Badass JS worthy?  Don’t hesitate to &lt;a href="http://badassjs.com/submit" target="_blank"&gt;submit it&lt;/a&gt;.  I promise to read them all.  Have a nice week!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/pG9QEa5t6wU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/pG9QEa5t6wU/16869678081</link><guid isPermaLink="false">http://badassjs.com/post/16869678081</guid><pubDate>Wed, 01 Feb 2012 09:30:00 -0800</pubDate><feedburner:origLink>http://badassjs.com/post/16869678081</feedburner:origLink></item><item><title>psd.js: You Guessed It - A Photoshop Document Parser in CoffeeScript</title><description>&lt;p&gt;Ryan LeFevre has been working on &lt;a href="http://meltingice.github.com/psd.js/" target="_blank"&gt;psd.js&lt;/a&gt;, which is as you might have already guessed, is a Photoshop Document parser that works in both the browser and Node.js.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;psd.js is a general purpose file parser for PSD files created in Photoshop. Given a PSD file, it can parse out information such as image size and color modes, image resources, layer info, image contents, etc.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img align="left" height="130" src="http://media.tumblr.com/tumblr_lyo6fxGkQp1qbis4g.png"/&gt;&lt;/p&gt;
&lt;p&gt;It is written in CoffeeScript and can currently be used to pull out all sorts of information from the file, such as its header, all of the embedded image resources, the structure of layers and groups in the file, layer masks and more.  It is early days for the project (only a few days old it appears), but it already has an impressive demo showing the ability to parse many PSDs, although there were a few that I tried that did not work.&lt;/p&gt;
&lt;p&gt;When you drop a PSD file onto the &lt;a href="http://meltingice.github.com/psd.js/" target="_blank"&gt;demo page&lt;/a&gt; (which mean’s you’ll need Chrome or Firefox), the structure of the entire PSD file is printed on the right. Here is an example of psd.js in use:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{PSD} = require 'psd.js'
 
psd = PSD.fromFile './path/to/file.psd'
psd.parse()
 
for layer in psd.layerMask.layers
  console.log "Layer: #{layer.name}"
  console.log "Size: width=#{layer.cols}, height=#{layer.rows}"
  console.log "Position: top=#{layer.top}, left=#{layer.left}"&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The goal of the project is to eventually be able to render the PSD to a canvas element, but that may be a little ways off since PSDs can have all sorts of layer effects, filters, and other complex things that one would need to implement.  For now, it is just a parser for you to get information about the structure of the PSD out, but I can’t wait to be able to render the PSD directly in the browser and even perhaps get to turn on an off layers and maybe one day even perform Photoshop-like editing directly in the browser.&lt;/p&gt;
&lt;p&gt;No one likes Photoshop (am I wrong?) as it it crashy and bug-ridden, but there are so many existing Photoshop files out there that whatever the photo editor of the future is will need to support the format.  If that editor happens to be in the browser, it looks like psd.js will be there to help!&lt;/p&gt;
&lt;p&gt;As always, you can check out the &lt;a href="http://meltingice.github.com/psd.js/" target="_blank"&gt;demo here&lt;/a&gt;, and the &lt;a href="https://github.com/meltingice/psd.js" target="_blank"&gt;code on Github&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;img height="0" src="http://assets.tumblr.com/images/input_bg.gif" width="0"/&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/buWQ7Zk7N4M" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/buWQ7Zk7N4M/16822405598</link><guid isPermaLink="false">http://badassjs.com/post/16822405598</guid><pubDate>Tue, 31 Jan 2012 08:38:42 -0800</pubDate><feedburner:origLink>http://badassjs.com/post/16822405598</feedburner:origLink></item><item><title>Morning Star: An Impressive Audio Synth in JavaScript</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lymd99z2KT1qbis4g.png"/&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href="http://bitterspring.net/ms/morningstar/" target="_blank"&gt;Morning Star&lt;/a&gt; is a monophonic bassline synthesizer controlled by a step sequencer, designed to run on Web browsers and made entirely with HTML5 and JavaScript (no Flash).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It uses Mozilla’s Audio Data API, and Google’s competing Web Audio API to produce sound in real time abstracting them with a library called &lt;a href="http://kievII.net/" target="_blank"&gt;KievII&lt;/a&gt;, which is a library containing both an audio DSP as well as various GUI elements that one might need in various audio applications.  These elements include knobs, sliders and more all build with HTML5 canvas as a rendering engine.&lt;/p&gt;
&lt;p&gt;The synth itself has many features including a step editor, piano roll, pattern control, recoding and playback, various effects and more.  Your changes automatically get saved into localStorage as you’re editing so if you close your browser and reopen it your work will be just as you left it.  You can even export a URL to your song to share and collaborate with friends.&lt;/p&gt;
&lt;p&gt;Another interesting thing to note is that the &lt;em&gt;entire&lt;/em&gt; UI is a single canvas element, which is an interesting choice and certainly a good experiment.  Obviously there are accessibility problems with this approach since screen readers and other assistive technologies know nothing about what is in a canvas element, but otherwise it seems to perform pretty well.&lt;/p&gt;
&lt;p&gt;As usual, the source code for Morning Star is &lt;a href="https://github.com/janesconference/MorningStar" target="_blank"&gt;available on Github&lt;/a&gt;, there is a &lt;a href="http://bitterspring.net/blog/2012/01/25/morning-star-synth-0-1-released/" target="_blank"&gt;blog post&lt;/a&gt; that goes into great detail about each feature of the synthesizer, and if you haven’t already, check out the &lt;a href="http://bitterspring.net/ms/morningstar/" target="_blank"&gt;demo&lt;/a&gt;.  Happy Monday!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/N5ciEdSNPZw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/N5ciEdSNPZw/16764713909</link><guid isPermaLink="false">http://badassjs.com/post/16764713909</guid><pubDate>Mon, 30 Jan 2012 08:54:46 -0800</pubDate><feedburner:origLink>http://badassjs.com/post/16764713909</feedburner:origLink></item><item><title>Seriously.js: A Realtime, Node-Based Video Compositor for the Web</title><description>&lt;p&gt;We &lt;a href="http://badassjs.com/post/16472398856/photobooth-style-live-video-effects-in-javascript-and" target="_blank"&gt;covered a demo&lt;/a&gt; earlier this week showing real time video processing with WebGL, but &lt;a href="https://github.com/brianchirls/Seriously.js/tree/develop" target="_blank"&gt;Seriously.js&lt;/a&gt; taking this concept even further: seriously!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Seriously.js is a real-time, &lt;a href="http://en.wikipedia.org/wiki/Digital_compositing#Node-based_and_layer-based_compositing" target="_blank"&gt;node&lt;/a&gt;-based video compositor for the web. Inspired by professional software such as After Effects and Nuke, Seriously.js renders high-quality video effects, but allows them to be dynamic and interactive.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;It features an optimized rendering path that is built with WebGL making it entirely hardware accelerated at 60 frames per second.  You can use videos, images, canvases and pixel arrays as input sources to the compositor and then apply various video effects to the resulting image, and apply 2d transforms to any layer (3d is coming).  The available effects are numerous ranging from chroma key and night vision to edge detection and other common effects.  Additionally, and perhaps the best feature of the library is that you can add your own effects as plugins and use them just as you would the built in effects… In fact, the built in effects are actually just plugins themselves!&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lygt0dq2Pr1qbis4g.png"/&gt;&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://seriouslyjs.org/" target="_blank"&gt;demo&lt;/a&gt; combines a number of different effects and sources.  The video is chroma-keyed so that you can actually change the background as it’s playing in real time, and then various effects are applied on top of everything changing the feel of the music video dramatically.  There is a underwater scene, a night vision scene, and a creepy black one.  I think this idea of user modifiable music videos is a very neat one indeed!&lt;/p&gt;
&lt;p&gt;So want to get started with Seriously.js yourself?  Luckily for you, there is a &lt;a href="https://github.com/brianchirls/Seriously.js/wiki/Tutorial" target="_blank"&gt;tutorial&lt;/a&gt; to help you out and even some &lt;a href="https://github.com/brianchirls/Seriously.js/wiki" target="_blank"&gt;documentation&lt;/a&gt;!  So how easy is it to apply effects to an HTML5 video?  This easy:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var seriously = new Seriously(),
    video = seriously.source('#myvideo'), // get video element by CSS selector
    target = seriously.target('#canvas'), // output canvas
    vignette = seriously.effect('vignette');

// connect all our nodes in the right order
vignette.source = video;
target.source = vignette;
seriously.go();&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Obviously you can connect multiple nodes together in a chain-like fashion, adjust effect parameters and more, so check out the tutorial for all of that!&lt;/p&gt;
&lt;p&gt;Who knew that JavaScript was going to be doing realtime video compositing and effects even a few years ago?  Seriously.js is seriously impressive, it is &lt;a href="https://github.com/brianchirls/Seriously.js/tree/develop" target="_blank"&gt;open source on Github&lt;/a&gt;, and you should check it out… seriously!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/-jp52njMoEs" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/-jp52njMoEs/16583192105</link><guid isPermaLink="false">http://badassjs.com/post/16583192105</guid><pubDate>Fri, 27 Jan 2012 09:00:00 -0800</pubDate><category>webgl</category><category>javascript</category><feedburner:origLink>http://badassjs.com/post/16583192105</feedburner:origLink></item><item><title>Weekly Badass JS Roundup #6</title><description>&lt;p&gt;Welcome back to the weekly Badass JS roundup!  Lots of JavaScript news this week, so lets dive in.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Adobe &lt;a href="http://blogs.adobe.com/webplatform/2012/01/13/html5-image-progress-events/" target="_blank"&gt;proposes&lt;/a&gt; events for monitoring the downloading of Image resources which could be quite useful in many circumstances.&lt;/li&gt;
&lt;li&gt;ES6, the next version of the EcmaScript standard that defines the JavaScript language has support for various types of collections beyond the standard Array and Object types.   ES6 adds support for Maps, WeakMaps and Sets to the language.  They aren’t available for use yet, but luckily Andrea Giammarchi has taken the time to &lt;a href="https://github.com/WebReflection/es6-collections" target="_blank"&gt;shim them&lt;/a&gt; so you can use them today.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://drumkitjs.com/" target="_blank"&gt;Drumkit.js&lt;/a&gt; looks like an interesting new framework for Node.js that allows you to share pieces of code between the server and client as well.  Neat idea!&lt;/li&gt;
&lt;li&gt;If you didn’t hear about it already, &lt;a href="http://blog.chromium.org/2012/01/real-time-communications-in-chrome.html" target="_blank"&gt;WebRTC has landed&lt;/a&gt; in Chrome!  WebRTC is a new technology that brings realtime voice and video communication technologies to the web.  Ever imagined building the next Skype without any plugins?  Well now you can!  You can enable it in the latest Chrome Canary builds in about:flags and then check out &lt;a href="http://miketaylr.com/photobooth/" target="_blank"&gt;this demo&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;We’ve been watching Mozilla’s PDF.js project with much interest, and they continue to pump out the Badass JavaScript.  This time, it’s support for JPEG 2000 images using a handwritten &lt;a href="https://github.com/mozilla/pdf.js/pull/1068/files" target="_blank"&gt;JPEG 2000 decoder&lt;/a&gt; written in JavaScript.  Very cool!&lt;/li&gt;
&lt;li&gt;There are a couple of new slide decks for you to check out relating to new HTML5 features.  Check out &lt;a href="http://html5-demos.appspot.com/static/html5-therealbleedingedge/template/index.html#1" target="_blank"&gt;“The Edge of HTML5” by Eric Bidelman&lt;/a&gt; and &lt;a href="http://kinlan-presentations.appspot.com/sfmediahtml/template/index.html#1" target="_blank"&gt;“What’s New in HTML5 Media” by Paul Kinlan&lt;/a&gt; both of the Chrome dev relations team.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://gildas-lormeau.github.com/zip.js/" target="_blank"&gt;Zip.js&lt;/a&gt; is a JavaScript library that allows you to zip and unzip files in modern browsers (Chrome and Firefox).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://slexaxton.github.com/Jed/" target="_blank"&gt;Jed&lt;/a&gt; brings gettext style i18n localization support to JavaScript applications.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/emberjs/ember.js/blob/master/CHANGELOG" target="_blank"&gt;Ember.js 0.9.4&lt;/a&gt; and &lt;a href="http://blog.nodejs.org/2012/01/23/node-v0-7-1/" target="_blank"&gt;Node.js 0.7.1&lt;/a&gt; were released.&lt;/li&gt;
&lt;li&gt;Mikeal Rogers of Node.js fame writes on &lt;a href="http://www.mikealrogers.com/posts/a-new-direction-for-web-applications-.html" target="_blank"&gt;“A new direction for web applications”&lt;/a&gt;, covering the history of the dynamic web and looking to the future of applications built with Node and other platforms.&lt;/li&gt;
&lt;li&gt;Jens Nockert wrote two blog posts about various upcoming features of browsers that will make your computationally intensive apps much faster. The first, &lt;a href="http://blog.aventine.se/post/16318162396/simd" target="_blank"&gt;“Accelerating Javascript via SIMD”&lt;/a&gt;, covers a pet feature of his that may go into Firefox at some point.  The second is an introduction to a series called &lt;a href="http://blog.aventine.se/post/16413173742/tools-for-the-next-generation-of-web-applications-introd" target="_blank"&gt;“Tools for the next generation of Web Applications”&lt;/a&gt; and it covers lots of different technologies including SIMD, WebCL, RiverTrail and more.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://enyojs.com/" target="_blank"&gt;Enyo&lt;/a&gt;, the application framework behind webOS has been open sourced!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.longtailvideo.com/html5/" target="_blank"&gt;The State of HTML5 Video&lt;/a&gt; is a nice site with various statistics about HTML5 video’s availability across devices and browsers that details some sub-features as well.  Check it out if you do anything with HTML5 video!&lt;/li&gt;
&lt;li&gt;Finally, &lt;a href="http://javascriptjabber.com/" target="_blank"&gt;JavaScript Jabber&lt;/a&gt; is a new podcast about everyone’s favorite language.  I haven’t listened to it yet myself, but I’ve heard good things and the first episode has an all star cast!&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;That’s it for this week!  As always if you have something you’d like to tell us about - something you think is Badass JS worthy - don’t hesitate to &lt;a href="http://badassjs.com/submit" target="_blank"&gt;let us know&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;img height="0" src="http://assets.tumblr.com/images/input_bg.gif" width="0"/&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/S9O1Cly6Eys" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/S9O1Cly6Eys/16525690481</link><guid isPermaLink="false">http://badassjs.com/post/16525690481</guid><pubDate>Thu, 26 Jan 2012 08:53:05 -0800</pubDate><category>javascript</category><category>news</category><feedburner:origLink>http://badassjs.com/post/16525690481</feedburner:origLink></item><item><title>PhotoBooth Style Live Video Effects in JavaScript and WebGL</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ly8sf38BQr1qbis4g.png"/&gt;&lt;/p&gt;
&lt;p&gt;Ever spent hours in PhotoBooth just playing around with the cool live video filters and effects?  Now you can do that in your browser as well thanks to Paul Neave’s cool &lt;a href="http://neave.com/webcam/html5/" target="_blank"&gt;HTML5 video effects demo&lt;/a&gt;!  While you can’t yet use an actual webcam and perform the effects on your own image (although those APIs are coming - Chrome just &lt;a href="http://blog.chromium.org/2012/01/real-time-communications-in-chrome.html" target="_blank"&gt;released&lt;/a&gt; WebRTC and getUserMedia support a few days ago!), you can watch as the effects are applied to a prerecorded video using JavaScript and WebGL.  Each filter appears to be a WebGL shader applied to a canvas element that gets its contents from an HTML5 video element.  You can even take a snapshot, and just like in PhotoBooth there is a countdown, the screen flashes and you have your picture that you can download and share on various social networks.  Pretty cool!&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lyd95xwtNb1qbis4g.png"/&gt;&lt;/p&gt;
&lt;p&gt;Perhaps the coolest part is that if you run the demo in the latest Chrome Canary build with the &lt;code&gt;--enable-media-stream&lt;/code&gt; flag, WebRTC and getUserMedia support (&lt;a href="http://blog.chromium.org/2012/01/real-time-communications-in-chrome.html" target="_blank"&gt;added&lt;/a&gt; just a few days ago) are enabled and you can actually use your own webcam to take pictures of yourself and see the effects applied in real time.  It is an impressive demo of the performance that WebGL gives us (I get over 100fps!) and the fact that soon we will be able to access the webcam in JavaScript without the use of any plugins like Flash!&lt;/p&gt;
&lt;p&gt;Although the code does not appear to be open source, it is still a cool demo of what web technology is becoming capable of and I highly recommend you &lt;a href="http://neave.com/webcam/html5/" target="_blank"&gt;check it out&lt;/a&gt; (Chrome or Firefox are best)!&lt;/p&gt;
&lt;p&gt;&lt;img height="0" src="http://assets.tumblr.com/images/input_bg.gif" width="0"/&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/yiIo-UN0-Zg" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/yiIo-UN0-Zg/16472398856</link><guid isPermaLink="false">http://badassjs.com/post/16472398856</guid><pubDate>Wed, 25 Jan 2012 10:26:12 -0800</pubDate><feedburner:origLink>http://badassjs.com/post/16472398856</feedburner:origLink></item><item><title>Resumable.js: Fault Tolerant Resumable File Uploads in JavaScript</title><description>&lt;p&gt;Ever had an experience on a website where you’re uploading a really big file and its taking a while, you’re not quite sure how much its uploaded, and then after a few minutes of uploading, something fails and you have to start over again?  With the new HTML5 file APIs and &lt;a href="https://github.com/23/resumable.js" target="_blank"&gt;Resumable.js&lt;/a&gt;, this problem will be lessened thanks to our newfound ability to actually resume large file uploads where they left off if they fail rather than start over from the beginning.&lt;/p&gt;
&lt;p&gt;&lt;img align="left" src="http://media.tumblr.com/tumblr_ly8rrxSX7n1qbis4g.png"/&gt;Resumable.js works by splitting the file into multiple small chunks using the HTML5 file API and then uploads the chunks one at a time until the whole file has been sent.  If any of the chunks fail to upload correctly, only that chunk needs to be re-uploaded.  Additionally, it enables the user to pause and resume uploads without losing state, and even works if the user goes offline and then online again or even if the server crashes and restarts.  Pretty cool!  It supports both file inputs and drag and drop uploading, progress events, multiple simultaneous uploads and more.  And the best part is that it isn’t some terrible flash uploader like we’ve seen for years.  Awesome!&lt;/p&gt;
&lt;p&gt;Here’s a video showing Resumable.js in use:&lt;/p&gt;
&lt;p&gt;&lt;iframe frameborder="0" height="293" scrolling="no" src="http://reinvent.23video.com/v.ihtml?photo%5fid=2333745" width="520"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;You can check out Resumable.js on &lt;a href="https://github.com/23/resumable.js" target="_blank"&gt;Github here&lt;/a&gt;.  Enjoy!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/8h8EKE2TkOI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/8h8EKE2TkOI/16412147197</link><guid isPermaLink="false">http://badassjs.com/post/16412147197</guid><pubDate>Tue, 24 Jan 2012 09:00:06 -0800</pubDate><feedburner:origLink>http://badassjs.com/post/16412147197</feedburner:origLink></item><item><title>Font.js: A Powerful Font Toolkit for JavaScript</title><description>&lt;p&gt;&lt;img align="left" src="http://media.tumblr.com/tumblr_ly8r5sYoD71qbis4g.png"/&gt;Mike Kamermans has been working on a little &lt;a href="https://github.com/Pomax/Font.js" target="_blank"&gt;font toolkit&lt;/a&gt; for your JavaScript that is kind of akin to the built-in Image object but for Fonts.  It gives you font loading events using a technique perfected in Mozilla’s &lt;a href="http://github.com/mozilla/pdf.js" target="_blank"&gt;pdf.js&lt;/a&gt; project, metrics information, and a better version of the canvas element’s measureText method with additional information such as height, bounding box, and leading.&lt;/p&gt;
&lt;p&gt;A &lt;a href="http://pomax.nihongoresources.com/pages/Font.js/" target="_blank"&gt;demo&lt;/a&gt; of the library shows that it’s pretty similar to the built in Image object in terms of usage.  Here’s an example:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var font = new Font();
font.onload = function() {
    // measure some text
    console.log(font.measureText("some text", 14));
    
    // style an element
    document.querySelector("p").style.fontFamily = "'" + font.fontFamily + "'";
}

font.onerror = function(e) {
   alert(e);
}

// kick off the actual loading
font.fontFamily = "My Font";
font.src = "acmesa.ttf";&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Feels right at home - a very nice API indeed!  It works by downloading the font data with an AJAX request, parsing out some metadata to determine that it is indeed a valid font file and to pull out the metrics information.  Then it inserts an @font-face rule into the page and a test DIV and polls the width of that DIV until it is no longer zero-width at which point it can determine that the browser has loaded the font and it is ready for use.  Finally it calls your onload handler.  See how much work you’re avoiding? :)&lt;/p&gt;
&lt;p&gt;You check out the &lt;a href="https://github.com/Pomax/Font.js" target="_blank"&gt;source on Github&lt;/a&gt;, and a &lt;a href="http://pomax.nihongoresources.com/pages/Font.js/" target="_blank"&gt;demo here&lt;/a&gt;.  Enjoy!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/EkfioDI6bsk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/EkfioDI6bsk/16355968400</link><guid isPermaLink="false">http://badassjs.com/post/16355968400</guid><pubDate>Mon, 23 Jan 2012 10:00:05 -0800</pubDate><feedburner:origLink>http://badassjs.com/post/16355968400</feedburner:origLink></item><item><title>jsday, A Conference Dedicated to JS in Italy</title><description>&lt;p&gt;Given the rising importance of JavaScript both in the development of web applications and as an all-purpose language, the Italian PHP user group GrUSP decided in 2010 to organize a conference fully dedicated to JavaScript, alongside the traditional phpDay conference. Much beyond any expectaion, the first edition has been incredibly successful, with over 300 visitors coming from all around Europe and sponsorship from big corporations and organizations, like Microsoft, Mozilla, Yahoo!, Opera and Sencha. The speaker list included Steve Souders (Google), Kyle Simpson (Mozilla), James Pearce (Sencha Touch, Facebook), Robert Nyman (Mozilla), Patrick Lauke (Opera) and many more. You can take a look at the videos of past talks at &lt;a href="http://vimeo.com/grusp" target="_blank"&gt;&lt;a href="http://vimeo.com/grusp" target="_blank"&gt;http://vimeo.com/grusp&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The 2012 edition of the jsDay (&lt;a href="http://2012.jsday.it/presskit/" target="_blank"&gt;&lt;a href="http://2012.jsday.it/" target="_blank"&gt;http://2012.jsday.it/&lt;/a&gt;&lt;/a&gt;) will be held in Verona on May 16th-17th. The call for papers will close on February 28th and we are still accepting submissions at: &lt;a href="http://www.jsday.it/2012/call-for-papers" target="_blank"&gt;&lt;a href="http://www.jsday.it/2012/call-for-papers" target="_blank"&gt;http://www.jsday.it/2012/call-for-papers&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Editors note: &lt;/strong&gt;This was a guest post from the jsday organizers.  If you are in the U.S., be sure you &lt;a href="http://americancensorship.org/" target="_blank"&gt;call your congresspeople&lt;/a&gt; about SOPA and PIPA!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/MPUbqM9Nc1M" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/MPUbqM9Nc1M/16071339376</link><guid isPermaLink="false">http://badassjs.com/post/16071339376</guid><pubDate>Wed, 18 Jan 2012 11:27:00 -0800</pubDate><feedburner:origLink>http://badassjs.com/post/16071339376</feedburner:origLink></item><item><title>Weekly Badass JS Roundup #5</title><description>&lt;p&gt;Welcome back to the weekly Badass JS roundup!  Here is my link dump for this week.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;I’m not sure this is new, but it was new to me… Grant Galitz has released a full &lt;a href="http://www.grantgalitz.org/gamecenter/index.html" target="_blank"&gt;Gameboy Color Emulator&lt;/a&gt; in JavaScript using the canvas element for graphics and the Web Audio API for audio.  Pretty awesome.&lt;/li&gt;
&lt;li&gt;Popular iPhone game &lt;a href="http://www.cuttherope.ie/" target="_blank"&gt;Cut the Rope&lt;/a&gt; has been ported to JavaScript by Microsoft of all companies and it is pretty darn impressive.  They’ve also &lt;a href="http://www.cuttherope.ie/dev/" target="_blank"&gt;written&lt;/a&gt; a little about their process and even open sourced a pretty cool looking &lt;a href="http://thinkpixellab.com/pxloader/" target="_blank"&gt;resource loader&lt;/a&gt; as well.  You can expect a more in depth analysis of the game and how it was made in a future post right here on Badass JavaScript!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://peter.sh/2012/01/css-selector-profiler-source-mapping-and-software-rendering/" target="_blank"&gt;Source Maps&lt;/a&gt; appear to have finally landed in Chromium.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/justinlatimer/node-midi" target="_blank"&gt;Node-midi&lt;/a&gt; allows Node.js to do realtime MIDI I/O, for example to talk to an electric guitar or a keyboard.  Very cool!&lt;/li&gt;
&lt;li&gt;I think I’ve mentioned this before, but &lt;a href="https://github.com/kangax/fabric.js" target="_blank"&gt;Fabric.js&lt;/a&gt; from the widely known and prolific Kangax has gotten some updates.  It now supports both importing SVG to canvas and outputting back to SVG, some complex text effects and more.  One to watch!&lt;/li&gt;
&lt;li&gt;Someone has implemented a &lt;a href="http://smp.if.uj.edu.pl/~mkol/il2js/" target="_blank"&gt;.NET virtual machine&lt;/a&gt; in JavaScript.  Wow!&lt;/li&gt;
&lt;li&gt;Eric Bidelman of Google has released &lt;a href="http://ericbidelman.tumblr.com/post/14866798359/introducing-filer-js" target="_blank"&gt;Filer.js&lt;/a&gt;, which is a wrapper around the HTML5 filesystem API with a nice UNIX-like API.&lt;/li&gt;
&lt;li&gt;Yehuda Katz thinks &lt;a href="http://yehudakatz.com/2012/01/10/javascript-needs-blocks/" target="_blank"&gt;JavaScript needs blocks&lt;/a&gt;, as in the blocks that Ruby and other languages have.  I disagree, but it is an interesting article none the less!&lt;/li&gt;
&lt;li&gt;Google is working on a &lt;a href="http://lists.w3.org/Archives/Public/public-webapps/2011OctDec/att-1696/speechapi.html" target="_blank"&gt;Speech API&lt;/a&gt; spec that they have submitted to the W3C, which would allow JS developers to incorporate speech recognition and synthesis into their apps. Sounds good to me!&lt;/li&gt;
&lt;li&gt;I’ll leave you with a few podcasts to listen to.  First we have Chris Williams and Matthew Podwysocki &lt;a href="http://herdingcode.com/?p=380" target="_blank"&gt;talking&lt;/a&gt; about the JS community and other cool stuff - a good listen.  Of course we have the &lt;a href="http://nodeup.com/eleven" target="_blank"&gt;latest NodeUp episode&lt;/a&gt; all about databases and how they relate to Node.  Finally Mikeal Rogers of Node fame has been interviewing other people of Node fame on &lt;a href="http://www.curlybracecast.com/" target="_blank"&gt;CurlyBraceCast&lt;/a&gt;.  The interviews are very in depth and highly worth a listen!&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;That’s it for this week!  As always if you have something you’d like to tell us about - something you think is Badass JS worthy - don’t hesitate to &lt;a href="http://badassjs.com/submit" target="_blank"&gt;let us know&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;P.S.&lt;/strong&gt; JSConf tickets will go &lt;a href="http://jsconfus2012.eventbrite.com" target="_blank"&gt;on sale&lt;/a&gt; tomorrow at 3PM EST (UTC-5).  Don’t miss them!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/G5C-hJf9vmo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/G5C-hJf9vmo/16015645141</link><guid isPermaLink="false">http://badassjs.com/post/16015645141</guid><pubDate>Tue, 17 Jan 2012 10:59:00 -0800</pubDate><category>js</category><category>html5</category><feedburner:origLink>http://badassjs.com/post/16015645141</feedburner:origLink></item><item><title>2011: A Badass JavaScript Year In Review</title><description>&lt;p&gt;2011 has been a great year for JavaScript.  Web browsers have given us great new tools to use and we have taken web applications to new heights, competing with native applications and bringing sexy back to the web with countless impressive demos.  A week or so ago, we put out a survey to all of you asking what you thought the most badass JavaScript demo of 2011 was.  Of course, this would be a boring post if we just said what the outcome was, so we’re going to list the top JavaScript accomplishments of 2011 here, from demos to libraries and applications themselves.  And to all of you in the JS community, Happy New Year and keep up the good work in 2012!&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lx2qdhF8ox1qbis4g.png"/&gt;&lt;/p&gt;
&lt;p&gt;Coming in at the &lt;strong&gt;top voted JavaScript demo of 2011&lt;/strong&gt;, we have &lt;a href="http://bellard.org/jslinux/" target="_blank"&gt;JSLinux&lt;/a&gt;, the JavaScript PC emulator.  I have to agree, JSLinux deserves the prize as it &lt;em&gt;is&lt;/em&gt; very impressive.  It emulates PC hardware entirely in JavaScript and includes a terminal to enter and run common unix commands.  There is a file system as well, so creating directories works, as does writing text files with vi.  There is even a built-in C compiler, so you can run your own programs in JSLinux as well!  If you haven’t already, go &lt;a href="http://bellard.org/jslinux/" target="_blank"&gt;check it out&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;In terms of &lt;strong&gt;JavaScript tooling&lt;/strong&gt;, &lt;a href="http://jshint.com/" target="_blank"&gt;JSHint&lt;/a&gt; has to get the award for this year.  JSHint is a &lt;a href="http://badassjs.com/post/3364925033/jshint-an-community-driven-fork-of-jslint" target="_blank"&gt;community driven fork&lt;/a&gt; of JSLint, Doug Crockford’s very opinionated JavaScript linting tool.  Although Crockford may not like it very much, the rest of the JavaScript community has been very supportive of it, and I salute its developers for taking that risk to bring us great tools!&lt;/p&gt;
&lt;p&gt;&lt;img height="203" src="http://media.tumblr.com/tumblr_luntkzIyVk1qbis4g.png" width="500"/&gt;&lt;/p&gt;
&lt;p&gt;There have been many great &lt;strong&gt;WebGL demos&lt;/strong&gt; this year, and in fact WebGL is even starting to see production use by big companies with the release of &lt;a href="http://googleblog.blogspot.com/2011/10/step-inside-map-with-google-mapsgl.html" target="_blank"&gt;Google MapsGL&lt;/a&gt;.  We saw &lt;a href="http://evanw.github.com/glfx.js/" target="_blank"&gt;glfx.js&lt;/a&gt;, which implements Core Image like filters in the browser using WebGL, impressively realistic &lt;a href="http://madebyevan.com/webgl-water/" target="_blank"&gt;water simulations&lt;/a&gt;, great &lt;a href="http://lights.elliegoulding.com/" target="_blank"&gt;music visualizations&lt;/a&gt;, Google Earth style &lt;a href="http://maps3d.svc.nokia.com/webgl/" target="_blank"&gt;3d maps in the browser&lt;/a&gt; from Nokia, beautiful &lt;a href="http://alteredqualia.com/three/examples/webgl_terrain_dynamic.html" target="_blank"&gt;terrain generation&lt;/a&gt; demos and much much more.  Libraries like &lt;a href="https://github.com/mrdoob/three.js" target="_blank"&gt;Three.js&lt;/a&gt; and &lt;a href="http://evanw.github.com/csg.js/" target="_blank"&gt;CSG.js&lt;/a&gt; continue to be invaluable tools to make these demos possible, and tooling is even coming along as well, with &lt;a href="https://github.com/idflood/ThreeNodes.js" target="_blank"&gt;ThreeNodes.js&lt;/a&gt;, a visual WebGL scene editor in the browser.  WebGL is bringing a whole new class of graphics applications, from games to Photoshop in the browser, and I can’t wait to see what 2012 will bring in this area!&lt;/p&gt;
&lt;p&gt;&lt;img height="300" src="http://media.tumblr.com/tumblr_lvhiidZ4RU1qbis4g.png" width="500"/&gt;&lt;/p&gt;
&lt;p&gt;Some of the most impressive demos of the year have been ported to the web using &lt;strong&gt;&lt;a href="https://github.com/kripken/emscripten" target="_blank"&gt;Emscripten&lt;/a&gt;&lt;/strong&gt;, the LLVM to JavaScript compiler.  This in and of itself is impressive, and shows that JavaScript is actually a pretty good compile target for the web.  Byte codes?  Who needs them!  Anyway, we’ve seen some pretty awesome demos come out of this work including &lt;a href="https://github.com/mbebenita/Broadway" target="_blank"&gt;Broadway.js&lt;/a&gt; (H.264 in JavaScript at 30fps), &lt;a href="https://github.com/bemasc/Broadway/tree/master/vp8" target="_blank"&gt;Route9.js&lt;/a&gt; (WebM in JS), a &lt;a href="http://syntensity.com/static/espeak.html" target="_blank"&gt;speech-to-text&lt;/a&gt; engine, &lt;a href="http://www.syntensity.com/static/openjpeg.html" target="_blank"&gt;OpenJPEG&lt;/a&gt; (read: JPEG 2000 in the browser) and many more!  Emscripten has brought about some awesome stuff, and I can’t wait to see what people do with it in 2012!&lt;/p&gt;
&lt;p&gt;Another impressive demo and ongoing project of 2011 has been &lt;a href="https://github.com/mozilla/pdf.js" target="_blank"&gt;PDF.js&lt;/a&gt; which implements a full PDF reader using only web technologies.  The PDF format is a conglomeration of many other formats, including image formats, font formats, compression and encryption algorithms and more, and thus PDF.js has become almost a repository of JavaScript implementations of these formats as well as just a PDF reader.  It has gone from barely working to very full featured this year, and is not only a good demo of what web technologies are capable of, but a great learning tool for browser makers on the missing features of web browsers as well!  Out of PDF.js, we have gotten dashed line support and even-odd fill rule support for canvas elements and probably even more bugs fixed, and coming down the pipeline are a better font loading API, and perhaps even a WebPrint API.  I can’t wait to see what Mozilla does with PDF.js in 2012!&lt;/p&gt;
&lt;p&gt;&lt;img height="291" src="http://media.tumblr.com/tumblr_lwglt1ZmME1qbis4g.png" width="391"/&gt;&lt;/p&gt;
&lt;p&gt;On the &lt;strong&gt;web audio &lt;/strong&gt;front, we’ve seen quite a few great things in 2011.  It all started with &lt;a href="http://jsmad.org/" target="_blank"&gt;JSMad&lt;/a&gt;, the hand ported JavaScript MP3 decoder using the new &lt;a href="http://chromium.googlecode.com/svn/trunk/samples/audio/index.html" target="_blank"&gt;Web Audio API&lt;/a&gt; from Google and the &lt;a href="https://wiki.mozilla.org/Audio_Data_API" target="_blank"&gt;Audio Data API&lt;/a&gt; from Mozilla.  After that, we saw an &lt;a href="https://github.com/cosinusoidally/mp2dec.js" target="_blank"&gt;MP2&lt;/a&gt; decoder, and the &lt;a href="http://areweplayingyet.org/" target="_blank"&gt;HTML5 Audio Test Suite&lt;/a&gt; from the fine folks at Soundcloud.  And we saw &lt;a href="https://github.com/oampo/Audiolet" target="_blank"&gt;Audiolet&lt;/a&gt;, which looks to be a very nice audio generation library, and &lt;a href="http://audiolibjs.org/" target="_blank"&gt;Audiolib.js&lt;/a&gt;, which is a nice audio effects library.  Finally, just recently my team at &lt;a href="http://ofmlabs.org/" target="_blank"&gt;ofmlabs&lt;/a&gt;, released &lt;a href="http://github.com/ofmlabs/alac.js" target="_blank"&gt;ALAC.js&lt;/a&gt;, the Apple Lossless decoder hand ported to JavaScript.  You can expect more great things from us and everyone in the Web Audio community in 2012!&lt;/p&gt;
&lt;p&gt;&lt;img height="100" src="http://media.tumblr.com/tumblr_ltj7t9qk9G1qbis4g.png" width="100"/&gt;&lt;/p&gt;
&lt;p&gt;Well, this post is getting kind of long now, so I’ll try to summarize the remaining demos briefly though they are all super impressive and amazing!  &lt;a href="http://html2canvas.hertzen.com/" target="_blank"&gt;HTML2Canvas&lt;/a&gt; is a full HTML/CSS renderer in the canvas element which allows us to generate screenshots of live web pages for feedback purposes or otherwise.  There are now &lt;a href="http://engineering.linkedin.com/javascript/vncjs-how-build-javascript-vnc-client-24-hour-hackday" target="_blank"&gt;multiple&lt;/a&gt; JavaScript &lt;a href="https://github.com/kanaka/noVNC" target="_blank"&gt;VNC clients&lt;/a&gt;.  Many image formats have been implemented in JS: &lt;a href="http://github.com/devongovett/png.js" target="_blank"&gt;PNG&lt;/a&gt;, &lt;a href="https://github.com/notmasteryet/jpgjs" target="_blank"&gt;JPEG&lt;/a&gt;, &lt;a href="http://github.com/devongovett/bmp.js" target="_blank"&gt;BMP&lt;/a&gt;, and &lt;a href="http://slbkbs.org/jsgif/" target="_blank"&gt;GIF&lt;/a&gt;.  My own PDF generation library &lt;a href="http://pdfkit.org/" target="_blank"&gt;PDFKit&lt;/a&gt; was released this year.  A &lt;a href="https://github.com/nurv/BicaVM" target="_blank"&gt;JVM&lt;/a&gt; has been implemented in JavaScript.  Libraries like &lt;a href="http://documentcloud.github.com/backbone/" target="_blank"&gt;Backbone&lt;/a&gt;, &lt;a href="http://emberjs.com/" target="_blank"&gt;Ember.js&lt;/a&gt;, &lt;a href="http://sproutcore.com/" target="_blank"&gt;SproutCore&lt;/a&gt;, and &lt;a href="http://cappuccino.org/" target="_blank"&gt;Cappuccino&lt;/a&gt; have gotten a lot better.  The &lt;a href="http://icloud.com/" target="_blank"&gt;iCloud web apps&lt;/a&gt; have brought a high standard for native-like interfaces on the web.  There is so much to love about the JavaScript community and things it brings us every year.  You are the best.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lx2qn9YkVX1qbis4g.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;Finally, make it your New Years resolution to watch Chris Williams’ excellent video, “&lt;a href="http://badassjs.com/post/11953296086/chris-williams-an-end-to-negativity-in-our-community" target="_blank"&gt;An End to Negativity&lt;/a&gt;” and to better yourself and this community in 2012.  Happy New Year, thanks for all your hard work this year, and keep it up in 2012 and beyond!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/M4qhaP16_rw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/M4qhaP16_rw/15082876071</link><guid isPermaLink="false">http://badassjs.com/post/15082876071</guid><pubDate>Sat, 31 Dec 2011 07:21:00 -0800</pubDate><feedburner:origLink>http://badassjs.com/post/15082876071</feedburner:origLink></item><item><title>Happy Holidays From Badass JavaScript!</title><description>&lt;p&gt;&lt;a href="http://badassjs.com/happy-holidays" target="_blank"&gt;&lt;img src="http://media.tumblr.com/tumblr_lwrlsntYM71qbis4g.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Merry Christmas and Happy Holidays from Badass JavaScript!  I made an animated holiday greeting card for you all to enjoy, so &lt;a href="http://badassjs.com/happy-holidays" target="_blank"&gt;check that out&lt;/a&gt;.  It is built entirely with SVG and CSS animations, so it is entirely scalable and should even work great on the iPhone!  I had originally animated the snowflakes as part of the embedded SVG document using JavaScript, but this turned out to be very very slow and used something like 98% CPU.  I guess SVG performance is something browsers still need to work on in 2012!  The result of this, is that I switched the snowflakes to image elements that load the individual SVG snowflake images, and are animated with CSS animations.  This led to a very big performance speedup, especially in Safari.&lt;/p&gt;
&lt;p&gt;Well, that’s all for now!  Gotta get back to enjoying Christmas, and you should too!  Once again, &lt;a href="http://badassjs.com/happy-holidays" target="_blank"&gt;Happy Holidays from Badass JavaScript&lt;/a&gt;!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/H4-JxDD7Hqg" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/H4-JxDD7Hqg/14766788052</link><guid isPermaLink="false">http://badassjs.com/post/14766788052</guid><pubDate>Sun, 25 Dec 2011 07:04:43 -0800</pubDate><feedburner:origLink>http://badassjs.com/post/14766788052</feedburner:origLink></item><item><title>Weekly Badass JS Roundup #4</title><description>&lt;p&gt;Welcome back to the weekly Badass JS roundup!  Here is my link dump for this week.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Maximiliano Firtman has put together a very nice mobile &lt;a href="http://mobilehtml5.org/" target="_blank"&gt;browser HTML5 compatibility table&lt;/a&gt; for iPhone, Android, BlackBerry, Symbian, iPad and more.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://akdubya.github.com/dustjs/" target="_blank"&gt;Dust&lt;/a&gt; looks like an interesting new templating engine.&lt;/li&gt;
&lt;li&gt;Ariya Hidayat has released &lt;a href="http://ariya.ofilabs.com/2011/12/introducing-esprima.html" target="_blank"&gt;Esprima&lt;/a&gt;, a “blazing fast JavaScript parser” written in JavaScript.  He claims performance gains over Narcissus and even parse-js (used in UglifyJS).&lt;/li&gt;
&lt;li&gt;Evan Wallace has released &lt;a href="http://evanw.github.com/lightgl.js/tests/gpulightmap.html" target="_blank"&gt;another awesome demo&lt;/a&gt; of his lightgl.js project, this time showcasing “ambient occlusion lightmap generation” in WebGL.  Awesome!&lt;/li&gt;
&lt;li&gt;The discussion is going on about whether to include a &lt;a href="https://github.com/jashkenas/coffee-script/pull/1942" target="_blank"&gt;huge pull request&lt;/a&gt; that brings await and defer keywords to CoffeeScript in order to help “tame” callback hell.&lt;/li&gt;
&lt;li&gt;Vyacheslav Egorov of the Google V8 JavaScript engine team has &lt;a href="http://blog.mrale.ph/post/14403172501/simple-optimization-checklist" target="_blank"&gt;written a blog post&lt;/a&gt; on how to optimize your JavaScript for performance in V8.  Great resource!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://coffeescript.org/#changelog" target="_blank"&gt;CoffeeScript 1.2.0&lt;/a&gt; has been released.  Mostly a bugfix release.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://audiolibjs.org/" target="_blank"&gt;Audiolib.js&lt;/a&gt; has a website now, and lots and lots of documentation.  Check it out if you’re interested in generating audio in JavaScript.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://passportjs.org/" target="_blank"&gt;Passport&lt;/a&gt; looks like a nice authentication system for Node.js, with support for over 30 different authentication strategies.&lt;/li&gt;
&lt;li&gt;A LinkedIn engineer &lt;a href="http://engineering.linkedin.com/javascript/vncjs-how-build-javascript-vnc-client-24-hour-hackday" target="_blank"&gt;posted&lt;/a&gt; on “how to build a JavaScript VNC Client in a 24 hour hackday”.  Out of this effort, came &lt;a href="https://github.com/bgaff/tcp.js" target="_blank"&gt;tcp.js&lt;/a&gt;, which is a Node.js proxy so that browsers can use real tcp sockets over the websocket protocol, and of course the actual VNC implementation, &lt;a href="https://github.com/bgaff/vnc.js" target="_blank"&gt;vnc.js&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;That’s it for this week!  As always if you have something you’d like to tell us about - something you think is Badass JS worthy - don’t hesitate to &lt;a href="http://badassjs.com/submit" target="_blank"&gt;let us know&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Additionally: &lt;/strong&gt;We’re preparing a “best of 2011” post and we’d like your opinion on &lt;a href="https://docs.google.com/spreadsheet/viewform?formkey=dG0yS1QxSndlQ2Q0Y1Vyb0dnejJVSVE6MQ" target="_blank"&gt;The most Badass JavaScript demo of the year&lt;/a&gt;!  Please help us out.  It doesn’t even have to be something written about on the blog.  Thanks! :)&lt;/p&gt;
&lt;p&gt;Have a great week, and &lt;strong&gt;&lt;span class="green"&gt;Merry&lt;/span&gt; &lt;span class="red"&gt;Christmas&lt;/span&gt;&lt;/strong&gt;!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/zsfOIn7yDiw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/zsfOIn7yDiw/14570970773</link><guid isPermaLink="false">http://badassjs.com/post/14570970773</guid><pubDate>Wed, 21 Dec 2011 10:23:54 -0800</pubDate><feedburner:origLink>http://badassjs.com/post/14570970773</feedburner:origLink></item><item><title>Introducing ALAC.js: An Apple Lossless Audio Decoder in JavaScript</title><description>&lt;p&gt;Recently, Apple &lt;a href="http://alac.macosforge.org/" target="_blank"&gt;open sourced&lt;/a&gt; the original encoder and decoder for the Apple Lossless audio codec which is written in C/C++.  ALAC is, as its name implies, a lossless codec, which means that it is compressed but does not lose any quality.  When decoded, ALAC audio files are bit-for-bit identical to the original uncompressed audio file.&lt;/p&gt;
&lt;p&gt;When our team at &lt;a href="http://ofmlabs.org/" target="_blank"&gt;ofmlabs&lt;/a&gt; saw ALAC open sourced a few weeks back, we thought it might be fun to try to port it to JavaScript so one could listen to ALAC files in the browser.  After all, some of us were also on the team that brought you &lt;a href="http://jsmad.org/" target="_blank"&gt;JSMad&lt;/a&gt;, the JavaScript MP3 decoder a few months ago.&lt;/p&gt;
&lt;p&gt;Besides porting over the decoder (by hand, not with a tool like Emscripten), we have been working on a little framework called &lt;a href="https://github.com/JensNockert/aurora.js" target="_blank"&gt;Aurora.js&lt;/a&gt;, which handles the boilerplate of writing a codec in JS, from actually streaming the file from the server and implementing the bitstream classes, to finding the correct demuxers and decoders and playing back the audio through the browser’s audio API as abstracted by &lt;a href="https://github.com/jussi-kalliokoski/sink.js" target="_blank"&gt;Sink.js&lt;/a&gt;.  There are currently two competing audio APIs and a third in the works, so an abstraction like Sink.js was necessary.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lwglt1ZmME1qbis4g.png"/&gt;&lt;/p&gt;
&lt;p&gt;We couldn’t do anything without a cool demo, so we &lt;a href="http://codecs.ofmlabs.org/" target="_blank"&gt;built a site&lt;/a&gt; showcasing our two audio decoders, JSMad and ALAC.js, side-by-side.  If you notice your CPU usage a bit higher than expected, that is actually not the audio decoder but the visualizer.  You can click on the visualizer to disable it and see for yourself.  &lt;/p&gt;
&lt;p&gt;Because only Chrome and Firefox have an API for writing audio data, those are the only two browsers that the demo will work in.  We are hoping that some agreement can be reached soon so that we have a standard API that other browsers will implement.  However, these demos show that even if a browser does not implement a particular format, JavaScript is powerful enough to do the job and fill in the gaps.  The HTML5 &lt;audio&gt; element is great in theory, but browsers all implement different codecs, which means that website authors must encode their audio files into a few different formats to get cross browser support.  Because we can implement audio codecs in JavaScript, once we have a cross browser audio data API, this will no longer be the case and we can have just about any audio format in browsers without waiting for them to implement.  Hurrah!&lt;/p&gt;
&lt;p&gt;You can check out the code for ALAC.js on &lt;a href="http://github.com/ofmlabs/alac.js" target="_blank"&gt;Github&lt;/a&gt;, and see our side-by-side demos &lt;a href="http://codecs.ofmlabs.org/" target="_blank"&gt;here&lt;/a&gt;.  Enjoy!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/dhFk1VXky_o" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/dhFk1VXky_o/14463682242</link><guid isPermaLink="false">http://badassjs.com/post/14463682242</guid><pubDate>Mon, 19 Dec 2011 10:12:00 -0800</pubDate><feedburner:origLink>http://badassjs.com/post/14463682242</feedburner:origLink></item><item><title>Weekly Badass JS Roundup #3</title><description>&lt;p&gt;Welcome back to the weekly Badass JS roundup!  Here is my link dump for this week.&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href="http://blog.sproutcore.com/changes-to-sproutcore/" target="_blank"&gt;SproutCore 2.0&lt;/a&gt; has been renamed to &lt;a href="http://yehudakatz.com/2011/12/08/announcing-amber-js/" target="_blank"&gt;Amber.js&lt;/a&gt; to avoid confusion since the project has significantly diverged from the goals of the original SproutCore project.  SproutCore 1.x will continue to be developed as a native-style application framework along side Amber.js’s more lightweight approach.&lt;/li&gt;
&lt;li&gt;The “&lt;a href="http://movethewebforward.org/" target="_blank"&gt;Move the Web Forward&lt;/a&gt;” initiative launched.  If you ever wanted to get more involved with the web standards or browser communities, this is your guide!&lt;/li&gt;
&lt;li&gt;The Opera developer blog rounded up some of the best &lt;a href="http://dev.opera.com/articles/view/efficient-javascript/" target="_blank"&gt;Efficient JavaScript tips&lt;/a&gt;.  Read this if you write JS!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://elm-lang.org/" target="_blank"&gt;Elm&lt;/a&gt; is another interesting language that compiles to JavaScript.  It actually compiles to HTML and CSS as well as one of its goals is to abstract those completely such that they become like the “assembly” of the web.  Its main distinguishing feature is its support for &lt;a href="http://en.wikipedia.org/wiki/Reactive_programming" target="_blank"&gt;reactive programming&lt;/a&gt;, which looks really neat!&lt;/li&gt;
&lt;li&gt;&lt;a href="http://webpjs.appspot.com/" target="_blank"&gt;WebPJS&lt;/a&gt; is a JavaScript implementation of the WebP image format for browsers without support, going back all the way to IE 6.  It also seems to have an &lt;a href="http://libwebpjs.appspot.com/v0.1.3/" target="_blank"&gt;encoder&lt;/a&gt; available which is pretty cool.  Unfortunately, I couldn’t find the source code anywhere so if you find it, &lt;a href="http://badassjs.com/submit" target="_blank"&gt;let me know&lt;/a&gt;!&lt;/li&gt;
&lt;li&gt;David Calhoun wrote an excellent “&lt;a href="http://davidbcalhoun.com/2011/mobile-performance-manifesto" target="_blank"&gt;Mobile Performance Manifesto&lt;/a&gt;” recently, which summarizes a lot of research that has been done.  Read this if you do any mobile web development.&lt;/li&gt;
&lt;li&gt;The &lt;a href="http://thread.gmane.org/gmane.os.opendarwin.webkit.devel/18753" target="_blank"&gt;fight&lt;/a&gt; to keep Google Dart out of WebKit is going strong.  Google wants to enable multiple language runtimes in the browser, but most others are saying that this would fragment the web platform and that Google should make Dart compile to JS like so many other languages out there.&lt;/li&gt;
&lt;li&gt;Paul Irish &lt;a href="http://www.webkitbits.com/post/13796063053/chrome-dev-tools-performance" target="_blank"&gt;summarized&lt;/a&gt; some of the awesome new features in the Chrome developer tools.  There are lots of hidden gems in there, so check this one out!&lt;/li&gt;
&lt;li&gt;An interesting &lt;a href="http://www.hackerspews.com/" target="_blank"&gt;anonymous essay&lt;/a&gt; about Google’s possible intentions to take over the world with Native Client, which appears to be the new ActiveX.  Remember, this is just a theory at this point, but it is an interesting read none the less.&lt;/li&gt;
&lt;li&gt;PDF.js has finally gained &lt;a href="https://github.com/mozilla/pdf.js/pull/738" target="_blank"&gt;text selection support&lt;/a&gt;.  Check out the &lt;a href="http://mozilla.github.com/pdf.js/web/viewer.html" target="_blank"&gt;demo&lt;/a&gt;: it works surprisingly well!&lt;/li&gt;
&lt;li&gt;JavaScript engines keep getting faster and smaller, and that is no exception for Firefox this week.  We saw their type inference support that enabled the 30 fps rendering demo of H.264 in the browser recently, and now they are focussed on reducing the memory usage of JavaScript objects.  A project called &lt;a href="http://blog.mozilla.com/dmandelin/2011/12/06/mozilla-js-development-newsletter-1130-1206/" target="_blank"&gt;ObjShrink&lt;/a&gt; was just merged into Firefox this week which makes all JavaScript objects use up to 50% less memory!  Pretty awesome.&lt;/li&gt;
&lt;li&gt;The &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/11/29/html5-for-applications-the-fourth-ie10-platform-preview.aspx" target="_blank"&gt;4th IE10 preview&lt;/a&gt; is out with support for cross-origin XHRs, BlobBuilder support, typed arrays (YAY!), CSS user-select and video captioning.  The IE team has been doing great work to bring IE back into the modern age, and it keeps getting better and better.  Great work!&lt;/li&gt;
&lt;li&gt;Speaking of IE10, it appears as though a bunch of proprietary IE technologies that have been available for quite some time are finally being &lt;a href="http://blogs.msdn.com/b/ie/archive/2011/12/07/moving-to-standards-based-web-graphics-in-ie10.aspx" target="_blank"&gt;disabled in IE10&lt;/a&gt;.  These include VML (replaced by SVG support) and CSS filters.  This is a very good thing!&lt;/li&gt;
&lt;li&gt;And finally, my team at ofmlabs has written an article on “&lt;a href="http://ofmlabs.org/articles/dublin.html" target="_blank"&gt;Why HTML5 Media is not Enough&lt;/a&gt;”, which is a call to browser makers and standards bodies to give us great low level media APIs.  Please read it and tell browser makers to step it up!&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;That’s it for this week!  As always if you have something you’d like to tell us about - something you think is Badass JS worthy - don’t hesitate to &lt;a href="http://badassjs.com/submit" target="_blank"&gt;let us know&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Have a great week!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/WMypkSUYJk4" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/WMypkSUYJk4/13927909485</link><guid isPermaLink="false">http://badassjs.com/post/13927909485</guid><pubDate>Thu, 08 Dec 2011 10:27:37 -0800</pubDate><category>linkbait</category><feedburner:origLink>http://badassjs.com/post/13927909485</feedburner:origLink></item><item><title>csg.js: Constructive Solid Geometry 3d Modeling in JavaScript and WebGL</title><description>&lt;p&gt;Evan Wallace, the same guy who brought us that amazing &lt;a href="http://madebyevan.com/webgl-water/" target="_blank"&gt;WebGL water simulation&lt;/a&gt; is back at it again, this time with a library called &lt;a href="http://evanw.github.com/csg.js/" target="_blank"&gt;csg.js&lt;/a&gt; for doing Constructive Solid Geometry modeling in JavaScript.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Constructive Solid Geometry (CSG) is a modeling technique that uses Boolean operations like union and intersection to combine 3D solids. This library implements CSG operations on meshes elegantly and concisely using BSP trees, and is meant to serve as an easily understandable implementation of the algorithm. All edge cases involving overlapping coplanar polygons in both solids are correctly handled.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;From the &lt;a href="https://twitter.com/evanwallace/status/143384582295789570" target="_blank"&gt;sounds of it&lt;/a&gt;, he wants to eventually build a 3D CSG level editor in the browser similar to &lt;a href="http://en.wikipedia.org/wiki/UnrealEd" target="_blank"&gt;UnrealEd&lt;/a&gt; (used by the amazing Unreal engine) and &lt;a href="http://en.wikipedia.org/wiki/Valve_Hammer_Editor" target="_blank"&gt;Hammer&lt;/a&gt; (from Valve).  Very cool!&lt;/p&gt;
&lt;p&gt;Here is an example of its usage:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var cube = CSG.cube();
var sphere = CSG.sphere({ radius: 1.3 });
var polygons = cube.subtract(sphere).toPolygons();&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;As you can see, this creates a cube and subtracts a sphere from it.  A more complex example creates the following 5 solids:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lvqxniq5fD1qbis4g.png"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lvqxnpcxIT1qbis4g.png"/&gt;&lt;/p&gt;
&lt;p&gt;With this code:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;var a = CSG.cube();
var b = CSG.sphere({ radius: 1.35, stacks: 12 });
var c = CSG.cylinder({ radius: 0.7, start: new CSG.Vector(-1, 0, 0), end: new CSG.Vector(1, 0, 0) });
var d = CSG.cylinder({ radius: 0.7, start: new CSG.Vector(0, -1, 0), end: new CSG.Vector(0, 1, 0) });
var e = CSG.cylinder({ radius: 0.7, start: new CSG.Vector(0, 0, -1), end: new CSG.Vector(0, 0, 1) });&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And then combines them all together into the final image:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lvqxptzYYz1qbis4g.png"/&gt;&lt;/p&gt;
&lt;p&gt;With only this code:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;a.intersect(b).subtract(c.union(d).union(e))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Pretty impressive if you ask me.  Be sure to check out the &lt;a href="http://evanw.github.com/csg.js/" target="_blank"&gt;demos&lt;/a&gt;, where you can actually drag the rendered output around to rotate it.  The code can be found on &lt;a href="https://github.com/evanw/csg.js" target="_blank"&gt;Github&lt;/a&gt; and even &lt;a href="http://evanw.github.com/csg.js/docs/" target="_blank"&gt;annotated by Docco&lt;/a&gt;.  Check it out!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/H7sSxuxeJNQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/H7sSxuxeJNQ/13788484076</link><guid isPermaLink="false">http://badassjs.com/post/13788484076</guid><pubDate>Mon, 05 Dec 2011 11:57:48 -0800</pubDate><feedburner:origLink>http://badassjs.com/post/13788484076</feedburner:origLink></item><item><title>Route9.js: A VP8/WebM decoder in JavaScript</title><description>&lt;p&gt;The codecs keep being implemented in JS.  We saw &lt;a href="https://github.com/mbebenita/Broadway" target="_blank"&gt;Broadway.js implement the H.264&lt;/a&gt; codec in JS recently, and now we have a WebM decoder as well.  Ben Schwartz was &lt;a href="https://groups.google.com/a/webmproject.org/group/codec-devel/browse_thread/thread/632a2e3e51546ee6#" target="_blank"&gt;inspired&lt;/a&gt; by Broadway and wanted to learn more about the WebM format so he decided to modify Broadway to support VP8 as well.  The result is &lt;a href="https://github.com/bemasc/Broadway/tree/master/vp8" target="_blank"&gt;Route9.js&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lvhiidZ4RU1qbis4g.png"/&gt;&lt;/p&gt;
&lt;p&gt;Like Broadway.js, Route9.js was compiled with &lt;a href="https://github.com/kripken/emscripten" target="_blank"&gt;Emscripten&lt;/a&gt; the LLVM to JS compiler.  After decoding the clip, I get very good frame rates (about 30 fps) in Chrome while rendering to WebGL.  So what about browsers without native support for WebM, where this would be most useful? Well, unfortunately there is still a little work to be done.  At least in Safari, Float32Array does not exist and this hampers the demo.  Luckily this can be shimmed with a regular array, and perhaps they will consider this in the future.&lt;/p&gt;
&lt;p&gt;For now though, it is still another amazing demo of what JavaScript is now capable of in cutting edge browsers, and perhaps an outlook on the future of the web where browsers don’t need to implement tons of formats and codecs because they will be implemented in JavaScript instead.  This is yet another example of why we should “always bet on JS” as Brendan Eich likes to say.  Browsers just need to give us great low level tools and we will do the rest!&lt;/p&gt;
&lt;p&gt;You can check out the &lt;a href="http://people.xiph.org/~bens/route9/route9.html" target="_blank"&gt;demo here&lt;/a&gt; and the &lt;a href="https://github.com/bemasc/Broadway/tree/master/vp8" target="_blank"&gt;code on Github&lt;/a&gt;.  Enjoy!&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/badassjs/~4/1di2Lu48TyQ" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/badassjs/~3/1di2Lu48TyQ/13551173773</link><guid isPermaLink="false">http://badassjs.com/post/13551173773</guid><pubDate>Wed, 30 Nov 2011 09:51:34 -0800</pubDate><feedburner:origLink>http://badassjs.com/post/13551173773</feedburner:origLink></item></channel></rss>

