<?xml version="1.0" encoding="utf-8"?>
<rss version="0.91">
<channel>
<title>ricardo cabello</title>
<link>http://www.ricardocabello.com</link>
<description>Feeding you up with the latest works done by ricardo cabello (aka trace/mr.doob/r08028).</description>
<language>en-uk</language>
<copyright>copyright 2010 ricardo cabello</copyright>
<item><title>Or so they say... (javascript demo)</title><link>http://ricardocabello.com/blog/post/702</link><description>This weekend &lt;a href=&quot;http://www.euskal.org/en/&quot; target=&quot;_blank&quot;&gt;Euskal&lt;/a&gt; took place and for quite a while I was considering doing a demo for it, but it wasn't until Friday night that I finally got free time for doing it (and the deadline was Saturday evening...).&lt;br /&gt;&lt;br /&gt;

Now that &lt;a href=&quot;http://github.com/mrdoob/three.js/&quot; target=&quot;_blank&quot;&gt;three.js&lt;/a&gt; was starting to get stable and also thanks to &lt;a href=&quot;http://github.com/mrdoob/xplsv_orsotheysay/blob/master/js/Sequencer.js&quot; target=&quot;_blank&quot;&gt;some sequencing code&lt;/a&gt; I had done some months ago I had no excuses to get working on it. So, from Friday midnight until Saturday afternoon, I managed to get this:&lt;br /&gt;&lt;br /&gt;

&lt;object width=&quot;350&quot; height=&quot;217&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://capped.micksam7.com/playeralt.swf?vid=xplsv-or_so_they_say|mq&quot; /&gt;&lt;param name=&quot;wmode&quot; value=&quot;direct&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#000000&quot; /&gt;&lt;embed src=&quot;http://capped.micksam7.com/playeralt.swf?vid=xplsv-or_so_they_say|mq&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;direct&quot; bgcolor=&quot;#000000&quot; allowFullScreen=&quot;true&quot; width=&quot;350&quot; height=&quot;217&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;

That's just a video of the demo, &lt;a href=&quot;http://xplsv.com/prods/demos/online/xplsv_orsotheysay/&quot; target=&quot;_blank&quot;&gt;watch the actual demo.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

Quite amazing how quickly you can get stuff done with javascript once you have the basic libs ready ;)&lt;br /&gt;&lt;br /&gt;

I need to check what's wrong with Opera, for some reason is not cleaning the screen. Apart from that it should work in all browsers (albeit quite slow in some, specially MacOS ones). Oh, I think it wouldn't work on Safari either, as it seems to be the only modern browser that doesn't support .ogg files.&lt;br /&gt;&lt;br /&gt;

In case anyone is interested, I've also shared the &lt;a href=&quot;http://github.com/mrdoob/xplsv_orsotheysay&quot; target=&quot;_blank&quot;&gt;source code&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;

&lt;strong&gt;EDIT&lt;/strong&gt;: Found the problem with Opera. Turns out context.clearRect() doesn't work if the context has been transformed with negative values. I'll let them fix their bug ;)</description><pubDate>Sun, 25 Jul 2010 16:45:00 +0000</pubDate></item><item><title>Multiuser Sketchpad</title><link>http://ricardocabello.com/blog/post/701</link><description>Here it's a project I made over the past weekend. I warn you, it's kinda weird. (Chrome 4+, Safari 5+, Firefox 4+ only)&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://mrdoob.com/projects/multiuserpad/&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_multiuserpad.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

You'll find some more iterations on &lt;a href=&quot;http://twitpic.com/photos/mrdoob&quot; target=&quot;_blank&quot;&gt;my twitpic&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;

Now, lets give some context...&lt;br /&gt;&lt;br /&gt;

&lt;strong&gt;Nerd talk&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;

Over the past few weeks I've seen people over twitter talking about this &lt;a href=&quot;http://nodejs.org/&quot; target=&quot;_blank&quot;&gt;node.js&lt;/a&gt; thing. Because I've been quite into Javascript this year last week &lt;a href=&quot;http://www.kschzt.com/&quot; target=&quot;_blank&quot;&gt;Jaakko&lt;/a&gt; was asking if I had played with node.js yet. I still didn't know what it was but he was kind enough to explain.&lt;br /&gt;&lt;br /&gt;

So node.js is like Apache but super optimised and lightweight, the coolest part is that you code your server in Javascript. Besides a &lt;a href=&quot;http://github.com/ry/node/issues/issue/187&quot; target=&quot;_blank&quot;&gt;small problem I had to deal with&lt;/a&gt; it was really easy to compile and install on my Ubuntu system.&lt;br /&gt;&lt;br /&gt;

Then there was this other hype thing, and that's &lt;a href=&quot;http://en.wikipedia.org/wiki/WebSockets&quot;&gt;websockets&lt;/a&gt; which basically is an open connection between the client and the server. You can send data to the server via websocket without having to send additional headers for each request.&lt;br /&gt;&lt;br /&gt;

So Jaakko persuaded me to try doing a node.js + websockets + harmony experiment. I was going to spend the weekend doing the WebGL renderer for &lt;a href=&quot;http://github.com/mrdoob/three.js&quot; target=&quot;_blank&quot;&gt;three.js&lt;/a&gt; (which &lt;a href=&quot;http://github.com/mrdoob/three.js/blob/master/src/renderers/WebGLRenderer.js&quot; target=&quot;_blank&quot;&gt;I did yesterday&lt;/a&gt;), and my mind was in another place, but somehow he convinced me (&quot;fucking do it now&quot; may have been the key ;D).&lt;br /&gt;&lt;br /&gt;

Ok, there are a bunch of node.js libraries to handle websockets. At first I was using &lt;a href=&quot;http://socket.io/&quot; target=&quot;_blank&quot;&gt;socket.io&lt;/a&gt; but it seemed to use a lot of cpu. After a looking at the code a bit we find out that they JSON all the data that gets sent all the time. That can be useful but in this case it was quite a bit of overhead (and I think they're working to fix that). So I ended up using miksago's &lt;a href=&quot;http://github.com/miksago/node-websocket-server&quot; target=&quot;_blank&quot;&gt;node-websocket-server&lt;/a&gt; which broadcasts the data to all the connected users as it got sent.&lt;br /&gt;&lt;br /&gt;

At this point is when you just need to sit down and get the thing working. Once it was working locally I got a slice in &lt;a href=&quot;http://www.slicehost.com/&quot; target=&quot;_blank&quot;&gt;slicehost&lt;/a&gt; and in a matter of minutes the experiment was live. Considering that it costs $20 for 150gb of BW and that I received €60 from &lt;a href=&quot;http://flattr.com/profile/mrdoob&quot; target=&quot;_blank&quot;&gt;flattr&lt;/a&gt; last month I though it was worth spending that money on this project. (EDIT: At this rate I suspect I'll end up spending the full €60 on this...)&lt;br /&gt;&lt;br /&gt;

The first version of the code was pretty much brute force, every user was sending their X,Y position every time they moved their mouse. Yes, that's *a lot* of data per second. There has been 50gb of data transfered in just 4 days :P However, yesterday night I finally got a bit of time and improved a bit the data that gets transferred, and not only it consumes less bandwidth, the server's CPU is much happier (btw, thanks &lt;a href=&quot;http://soledadpenades.com/&quot; target=&quot;_blank&quot;&gt;sole&lt;/a&gt; for the &lt;a href=&quot;http://en.wikipedia.org/wiki/Top_(Unix)&quot; target=&quot;_blank&quot;&gt;top&lt;/a&gt; tip :D).&lt;br /&gt;&lt;br /&gt;

&lt;strong&gt;Monitoring interactions&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;

Leaving the technicalities aside, this experiment is very different from everything I've done until now. I've never seen how the people interact with my experiments. The feedback I get from them are emails, comments on the blog or tweets. Which basically reduces to a couple of sentences defining how the experience was. Which is good, but it's impossible to get a clear impression of the experience of the user.&lt;br /&gt;&lt;br /&gt;

With this one, I can see the people interacting. I can see people experimenting and writing scripts and doing unexpected things with the system (which were fun, but please, don't). I was even able to see people trying XSS exploits in realtime.&lt;br /&gt;&lt;br /&gt;

Considering how easy it was to put this together I won't be surprised if in a year or two, most of the websites use websockets to monitor how exactly their users navigate the site and improve the UX in realtime. And this is just an exmaple, imagine the possibilities!&lt;br /&gt;&lt;br /&gt;

&lt;strong&gt;Human behaviour&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;

As expected, people like to draw male reproduction organs all over the place, and an annoying one was people scribbling on top of nice drawings. It was so annoying that I even had to tweak the brush algorithm to discourage such actions. The faster you move the cursor the less opacity the pencil has. Stupid solutions for stupid problems.&lt;br /&gt;&lt;br /&gt;

However, when humans want to collaborate the experiment becomes super fun. If you manage to get in a time that there isn't much people (rooms next?) and there is a collaborative person it can be great. For instance, the screenshot at the beginning of this post, I did some of the drawings on it in collaboration with a stranger, First I did a square with eyes and mouth, then he did another one on the site as if they were two squares that were about to collide and then he started doing the animal bits on the new one which I also followed by doing a joke to a classic &lt;a href=&quot;http://img253.imageshack.us/img253/4045/lolcat7vc2.gif&quot; target=&quot;_blank&quot;&gt;internet image&lt;/a&gt;. It's also great when 4/5 users get organised and draw something together. 3-in-a-row games are also great :D&lt;br /&gt;&lt;br /&gt;

Last but not least, it's amazing to see, not only how one user interacts with the tool, but how they interact with the other people. That creates many games, they even create their own social rules for the place. And if that wasn't enough, I find it amazing to see how the cursors behave like &quot;humans&quot;. If you put your cursor on top of another cursor, that other cursor is likely to get away. Like when someone you don't know get too close to you. The most interesting case was &quot;Talentina&quot;, which I suspect is a little girl. She seemed happy and was drawing cute things like a giraffes and so on, but then someone will arrive and draw a penis on it. She would move the cursor away, like looking from the distance, and move away like in a slow/sad pace...&lt;br /&gt;&lt;br /&gt;

And lets not forget the fact that the history doesn't get saved, if you refresh you'll get a blank canvas. That's also a very strange behaviour to get used to, but people seem to be turning it into a feature :D&lt;br /&gt;&lt;br /&gt;

Unexpectedly fascinating.&lt;br /&gt;&lt;br /&gt;

&lt;strong&gt;EDIT&lt;/strong&gt;: Running MacOS? Need a new screensaver? &lt;a href=&quot;http://twitter.com/CedricRaud&quot;&gt;Cédric Raud&lt;/a&gt; has done something for you.&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://hxt.fr/vrac/Multiuser%20Sketchpad.screensaver.1.1.zip&quot;&gt;http://hxt.fr/vrac/Multiuser%20Sketchpad.screensaver.1.1.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

Also... from &quot;ops&quot; in the comments, a recording of a session at 4000x :O&lt;br /&gt;&lt;br /&gt;

&lt;object width=&quot;350&quot; height=&quot;300&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/s-rbxT8fjIQ&amp;hl=en_US&amp;fs=1&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/s-rbxT8fjIQ&amp;hl=en_US&amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;350&quot; height=&quot;300&quot;&gt;&lt;/embed&gt;&lt;/object&gt;</description><pubDate>Wed, 07 Jul 2010 17:22:00 +0000</pubDate></item><item><title>stats.js</title><link>http://ricardocabello.com/blog/post/700</link><description>Some of you may have realised already that I've been using a Javascript FPS counter on some of my experiments.&lt;br /&gt;&lt;br /&gt;

Originally it had exactly the same look as the &lt;a href=&quot;http://mrdoob.com/blog/post/582&quot; target=&quot;_blank&quot;&gt;Actionscript version&lt;/a&gt; but, as far as I know, you can't query the system to get the amount of memory the application is using from Javascript. So 2 of the 4 common values of the Actionscript version were empty. That made me reconsider the design and tried to improve it a bit. And after using it for quite a while I think it's ready.&lt;br /&gt;&lt;br /&gt;

&lt;img src=&quot;http://github.com/mrdoob/stats.js/raw/master/assets/stats_js_fps.png&quot; /&gt; &lt;img src=&quot;http://github.com/mrdoob/stats.js/raw/master/assets/stats_js_ms.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;

As you can see it has two modes, FPS and MS. Just click on the widget to switch between them.  I may change MS to use greens instead of cyan to match the Actionscript version a bit more. Thoughts?&lt;br /&gt;&lt;br /&gt;

Unfortunately this time the code is not as simple as the Actionscript version, but I think it's still simple enough.&lt;br /&gt;&lt;br /&gt;

&lt;pre&gt;
var stats = new Stats();
parentElement.appendChild(stats.domElement);

setInterval(function () {

    stats.update();

}, 1000/60);
&lt;/pre&gt;&lt;br /&gt;

Find the source code, compressed file and more examples at the &lt;a href=&quot;http://github.com/mrdoob/stats.js&quot; target=&quot;_blank&quot;&gt;project page on github&lt;/a&gt;.</description><pubDate>Wed, 07 Jul 2010 14:18:00 +0000</pubDate></item><item><title>Javascript plane deformations</title><link>http://ricardocabello.com/blog/post/699</link><description>It's not the first time I mess with plane deformations, I also did some &lt;a href=&quot;http://mrdoob.com/blog/post/586&quot; target=&quot;_blank&quot;&gt;Pixel Bender experiments&lt;/a&gt; with them some years ago.&lt;br /&gt;&lt;br /&gt;

The principle of this technique is to apply a formula to every pixel of the output bitmap. If you know about shaders of Pixel Bender you know how this works.&lt;br /&gt;&lt;br /&gt;

Depending of the formula you're going to deform a source texture creating different forms. Javascript seems to be quite fast doing Math computations, the bottleneck, as usual, is drawing the pixels to the bitmap. So I thought it was worth porting the code and the formulas in order to get a base for it and have yet another experiment to test the new browser versions with.&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://mrdoob.com/lab/javascript/effects/plane_deformations/&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_javascript_pd.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

Once again, using shaders we'll be able to do this kind of effects with much better resolution and speeds as soon as &lt;a href=&quot;http://en.wikipedia.org/wiki/WebGL&quot; target=&quot;_blank&quot;&gt;WebGL&lt;/a&gt; gets enabled on browsers by default.&lt;br /&gt;&lt;br /&gt;

Until then, &lt;strong&gt;feel free to take a look at the code and mess with the formulas&lt;/strong&gt;.</description><pubDate>Mon, 14 Jun 2010 03:56:00 +0000</pubDate></item><item><title>three.js r8</title><link>http://ricardocabello.com/blog/post/698</link><description>Since I made &lt;a href=&quot;http://github.com/mrdoob/three.js/&quot; target=&quot;_blank&quot;&gt;three.js&lt;/a&gt; public I've been refactoring a bit some parts and experimenting a bit with potential performance improvement tricks. I won't go much into details, but maybe this snapshot will give you some idea of what I tried.&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://twitpic.com/1okpom/full&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_threejs_performance.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

So that's nice and all that, but I was starting to get tired of flat colors so I decided it was time to try to implement textures and &lt;a href=&quot;http://en.wikipedia.org/wiki/UV_mapping&quot; target=&quot;_blank&quot;&gt;uv mapping&lt;/a&gt;. I took a look other engines to see how they were implementing these and the one that seemed the simplest and fastest was the one in &lt;a href=&quot;http://deanm.github.com/pre3d/&quot; target=&quot;_blank&quot;&gt;pre3d&lt;/a&gt; which was done by &lt;a href=&quot;http://tulrich.com/&quot; target=&quot;_blank&quot;&gt;Thatcher Ulrich&lt;/a&gt;. That also needed a bit of refactoring because I was storing the UV data on each triangle. Instead, it's better to store the UV on the geometry level so you can have different UV mappings (also called channels) for the same geometry.&lt;br /&gt;&lt;br /&gt;

Once I got that working it was time to do a bunch of demos and see how the browsers were able to handle it. Coincidently, Apple published their infamous HTML5 some days before.&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://www.apple.com/html5/&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_apple_html5.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

From all the demos I got mostly interested on the VR one:&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://developer.apple.com/safaridemos/showcase/vr/&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_apple_safari_needed.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

I know, I was also excited when I saw that message. Anyway, I managed to try the demos in Safari and this demo is pretty much a panorama. 6 planes textures and the camera inside. For that they used the CSS transforms which are only available in Safari at the moment. So I wondered if I could do that same effect using three.js and the new feature.&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://mrdoob.com/lab/javascript/three.js/vr/&quot; target=&quot;_blank&quot;&gt;Turns out you don't need Safari to do a panorama&lt;/a&gt;. It's not as fast (not hardware accelerated), but hey, it works. I wasn't too happy about these textures and I looked for better ones for a proper demo. This is how it ended up:&lt;br /&gt;&lt;br /&gt;

&lt;a  target=&quot;_blank&quot;href=&quot;http://mrdoob.com/projects/three.js/examples/geometry_vr.html&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_threejs_vr.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

That's better. Certainly slower as it's fullscreen but it has potential.&lt;br /&gt;&lt;br /&gt;

Next thing to try was using &amp;lt;video&gt; as a texture for a plane. Adding a fake reflection on the floor for extra niceness.&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://mrdoob.com/projects/three.js/examples/materials_video.html&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_threejs_video.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

Although it may seem much more advanced it's not. We just need to draw the &amp;lt;video&gt; element to the texture applied in every frame.&lt;br /&gt;&lt;br /&gt;

Last, but not least interesting, was a Terrain Generator demo. The code to generate the height map and texture is not too different from the code I wrote some years ago while trying to do a &lt;a href=&quot;http://wonderfl.net/c/mqtg&quot; target=&quot;_blank&quot;&gt;raycaster&lt;/a&gt;. Only this time I needed to generate the texture instead and let the engine do the rendering part. After a couple of iterations [&lt;a href=&quot;http://twitpic.com/1wdyvj/full&quot; target=&quot;_blank&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;http://twitpic.com/1wjzjy/full&quot; target=&quot;_blank&quot;&gt;2&lt;/a&gt;], this is the result:&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://mrdoob.com/projects/three.js/examples/geometry_terrain.html&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_threejs_terrain.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

I know, is so slow it's pointless, but I'm having fun doing all this anyway. I hope browsers will keep improving their implementation of &amp;lt;canvas&gt; and maybe all this will have some potential. However, I have to say that I think a lot of things can be done with this. &lt;strong&gt;People have done amazing things with even more limitations&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://www.youtube.com/watch?v=NSAO_08-vI8&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_starfox.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

Ah... so tempting... :P Anyway, I better start implementing a &lt;a href=&quot;http://en.wikipedia.org/wiki/WebGL&quot; target=&quot;_blank&quot;&gt;WebGL&lt;/a&gt; renderer to the engine.&lt;br /&gt;&lt;br /&gt;</description><pubDate>Mon, 14 Jun 2010 03:41:00 +0000</pubDate></item><item><title>Flattr</title><link>http://ricardocabello.com/blog/post/697</link><description>As you may have seen, I've recently added a few &lt;a href=&quot;http://flattr.com/&quot; target=&quot;_blank&quot;&gt;Flattr&lt;/a&gt; buttons to some of my experiments.&lt;br /&gt;&lt;br /&gt;

Flattr? What? Here here:&lt;br /&gt;&lt;br /&gt;

&lt;object width=&quot;350&quot; height=&quot;300&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/9zrMlEEWBgY&amp;hl=en_US&amp;fs=1&amp;rel=0&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/9zrMlEEWBgY&amp;hl=en_US&amp;fs=1&amp;rel=0&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;350&quot; height=&quot;300&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;

I really hope it to succeed. It's like the old (and not so old) days, when the artists were funded by the people that enjoyed their work.&lt;br /&gt;&lt;br /&gt;

You may wonder, what was wrong with Paypal donations? Well... &lt;strong&gt;Paypal it's a bit like having to go to the bank every time you wanted to donate a coin&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://flattr.com/profile/mrdoob&quot; target=&quot;_blank&quot;&gt;Here it's my profile over there.&lt;/a&gt;</description><pubDate>Tue, 08 Jun 2010 05:59:00 +0000</pubDate></item><item><title>Harmony ports</title><link>http://ricardocabello.com/blog/post/696</link><description>Seems like Harmony has had a fairly amount of success since it was released. Nowadays, you just need to search on Facebook for fan pages created by others about any or your works to know if it was successful or not. In this case I found 2! :)&lt;br /&gt;&lt;br /&gt;

So I can't be happier about it. With the release I also decided to  share the &lt;a href=&quot;http://github.com/mrdoob/harmony&quot; target=&quot;_blank&quot;&gt;source code&lt;/a&gt; hoping that people would play with it, create more brushes and in the end improve the application.&lt;br /&gt;&lt;br /&gt;

Instead, people started porting (or encapsulating) the code on mobile platforms (iPhoneOS / Android) which I also found great. Here it's a list of all the ports I'm aware of:&lt;br /&gt;&lt;br /&gt;

&lt;strong&gt;Paid&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://itunes.apple.com/uk/app/abtmagicsand-classic-no-ad/id366466137&quot; target=&quot;_blank&quot;&gt;AbtMagicSand Classic&lt;/a&gt; by &lt;strong&gt;Ultie, Inc.&lt;/strong&gt; (iPhone OS)&lt;br /&gt;

&lt;a href=&quot;http://itunes.apple.com/uk/app/asketch/id371723593&quot; target=&quot;_blank&quot;&gt;ASKetch Pad&lt;/a&gt; by &lt;strong&gt;AKERN Software&lt;/strong&gt; (iPhone OS)&lt;br /&gt;

&lt;a href=&quot;http://itunes.apple.com/uk/app/harmonious/id363375481&quot; target=&quot;_blank&quot;&gt;Harmonious.&lt;/a&gt; by &lt;strong&gt;The Angry Robot Zombie Factory&lt;/strong&gt; (iPhone OS)&lt;br /&gt;

&lt;a href=&quot;http://itunes.apple.com/uk/app/livesketch/id362831454&quot; target=&quot;_blank&quot;&gt;LiveSketch&lt;/a&gt; by &lt;strong&gt;Yan Rabovik&lt;/strong&gt; (iPhone OS)&lt;br /&gt;

&lt;a href=&quot;http://itunes.apple.com/uk/app/livesketch-hd/id364888269&quot; target=&quot;_blank&quot;&gt;LiveSketch HD&lt;/a&gt; by &lt;strong&gt;Yan Rabovik&lt;/strong&gt; (iPhone OS)&lt;br /&gt;

&lt;a href=&quot;http://itunes.apple.com/uk/app/omnisketch/id370938461&quot; target=&quot;_blank&quot;&gt;OmniSketch&lt;/a&gt; by &lt;strong&gt;Richard Taylor&lt;/strong&gt; (iPhone OS)&lt;br /&gt;

&lt;a href=&quot;http://itunes.apple.com/uk/app/touch-sketch/id369852532&quot; target=&quot;_blank&quot;&gt;Touch Sketch&lt;/a&gt; by &lt;strong&gt;Luksor&lt;/strong&gt; (iPhone OS)&lt;br /&gt;

&lt;a href=&quot;http://itunes.apple.com/uk/app/really-big-pictures-hd/id364900656&quot; target=&quot;_blank&quot;&gt;Really Big Pictures HD&lt;/a&gt; by &lt;strong&gt;Zeno Machine&lt;/strong&gt; (iPhone OS)&lt;br /&gt;

&lt;a href=&quot;http://itunes.apple.com/uk/app/qvik-sketch-pro/id372852174&quot; target=&quot;_blank&quot;&gt;Qvik Sketch Pro&lt;/a&gt; by &lt;strong&gt;Qvik&lt;/strong&gt; (iPhone OS)&lt;br /&gt;&lt;br /&gt;

&lt;strong&gt;Free&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://www.androlib.com/android.application.com-dansl-drawer-nCxz.aspx&quot; target=&quot;_blank&quot;&gt;Draw(er)&lt;/a&gt; by &lt;strong&gt;Dansl&lt;/strong&gt; (Android)&lt;br /&gt;

&lt;a href=&quot;http://www.bananacoding.com/MiniTones.aspx&quot; target=&quot;_blank&quot;&gt;MiniTones&lt;/a&gt; by &lt;strong&gt;Banana Coding&lt;/strong&gt; (iPhone OS)&lt;br /&gt;

&lt;a href=&quot;http://itunes.apple.com/uk/app/qvik-sketch/id368087500&quot; target=&quot;_blank&quot;&gt;Qvik Sketch&lt;/a&gt; by &lt;strong&gt;Qvik&lt;/strong&gt; (iPhone OS)&lt;br /&gt;

&lt;a href=&quot;http://www.androlib.com/android.application.org-sketcher-AwEF.aspx&quot; target=&quot;_blank&quot;&gt;Sketcher&lt;/a&gt; by &lt;strong&gt;wargoth&lt;/strong&gt; (Android)&lt;br /&gt;&lt;br /&gt;

If I have forgotten any app, feel free to share it on the comments.&lt;br /&gt;&lt;br /&gt;

&lt;strong&gt;EDIT:&lt;/strong&gt; I've modified the post to focus on the part of listing all the adaptations and removed the part about people behaviour using the open source code. Joa made a very good point in the comments: &quot;Why should an app not be open source if it is completely based on other open source ideas?&quot;. I'll take that in consideration from now on.</description><pubDate>Thu, 03 Jun 2010 22:40:00 +0000</pubDate></item><item><title>Water and Parallax</title><link>http://ricardocabello.com/blog/post/695</link><description>&lt;a href=&quot;http://mrdoob.com/lab/javascript/effects/water/02/&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_watertype.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

This one is a really old effect that I always wanted to do. It has two part, first the 2d water effect, and then the parallax effect.&lt;br /&gt;&lt;br /&gt;

&lt;strong&gt;Water Effect&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;

It all starts (once again) from &lt;a href=&quot;http://freespace.virgin.net/hugo.elias/graphics/x_water.htm&quot;&gt;this page&lt;/a&gt;. On there you'll see a &quot;magic&quot; trick to simulate 2d water. I've implemented that code in Actionscript and even as a Pixel Bender Shader but unfortunately never got something interesting out of it. Some months ago I revisited it again and made a Javascript version which has been on my site for a while.&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://mrdoob.com/lab/javascript/effects/water/00/&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_water.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

At first it was a bit boring in black and white, but with a bit of experimenting I found out this color offset that made it look more interesting.&lt;br /&gt;&lt;br /&gt;

&lt;strong&gt;Parallax Effect&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;

While working on the water effect I somehow remembered HeartQuake by Iguana. A MSDOS demo from 1994. One of the effects in that demo consisted in a 2'5D liquid surface.&lt;br /&gt;&lt;br /&gt;

&lt;object width=&quot;350&quot; height=&quot;300&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/q9_VUDz_tuM&amp;hl=en_US&amp;fs=1&amp;rel=0&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/q9_VUDz_tuM&amp;hl=en_US&amp;fs=1&amp;rel=0&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;350&quot; height=&quot;300&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;

(You can see the effect on the &lt;strong&gt;5:32&lt;/strong&gt; mark)&lt;br /&gt;&lt;br /&gt;

I've seen that demo many times, but only this time I had enough knowledge to start guessing how each effect was made. The effect looked like the water effect but used as elevation map, maybe using voxels for creating the 2,5D illusion. I tried the voxels path but it was too slow for Javascript, so I forgot about it and left it there.&lt;br /&gt;&lt;br /&gt;

This week, for some reason, I ended up at &lt;a href=&quot;http://pixelero.wordpress.com/&quot; target=&quot;_blank&quot;&gt;Petri Leskinen's blog&lt;/a&gt; once again. On this visit I realised he shared a &lt;a href=&quot;http://pixelero.wordpress.com/2009/07/05/belousovzhabotinsky-with-perspective/&quot; blank=&quot;_blank&quot;&gt;very interesting snippet&lt;/a&gt;. It seemed like a very fast technique to simulate 2'5D terrains. I quickly tried it out to see how fast it performed in Javascript and the results &lt;a href=&quot;http://twitpic.com/1smq58/full&quot; target=&quot;_blank&quot;&gt;seemed pretty good&lt;/a&gt; (18ms for creating the perlin texture, 17ms for the elevated one).&lt;br /&gt;&lt;br /&gt;

So from there it was a matter a putting everything together and playing a bit with the code until I found an interesting level of interaction. The text idea seemed to work quite well, it had very mermerising motions so I went forward with it also as a bit of homage to Iguana's demo.&lt;br /&gt;&lt;br /&gt;

There are still a bunch of oldschool effects I want to try using &amp;lt;canvas&gt; before I jump to &lt;a href=&quot;http://www.iquilezles.org/apps/shadertoy/&quot; target=&quot;_blank&quot;&gt;WebGL shaders&lt;/a&gt;. As always, feel free to abuse of the beauty of Javascript: &lt;strong&gt;Right click &gt; View Source&lt;/strong&gt; :)</description><pubDate>Thu, 03 Jun 2010 05:11:00 +0000</pubDate></item><item><title>JavaScript: The Good Parts</title><link>http://ricardocabello.com/blog/post/694</link><description>Today &lt;a href=&quot;http://www.neave.com/&quot; target=&quot;_blank&quot;&gt;neave&lt;/a&gt; was sharing this interesting talk &lt;a href=&quot;http://twitter.com/neave/status/12938372898&quot;&gt;over twitter&lt;/a&gt;. I wish I would have seen it before... now I'll need to go back and fix most of the JavaScript I've written :S&lt;br /&gt;&lt;br /&gt;

&lt;object width=&quot;350&quot; height=&quot;300&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/hQVTIJBZook&amp;hl=en_US&amp;fs=1&amp;&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/hQVTIJBZook&amp;hl=en_US&amp;fs=1&amp;&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;350&quot; height=&quot;300&quot;&gt;&lt;/embed&gt;&lt;/object&gt;</description><pubDate>Tue, 27 Apr 2010 19:19:00 +0000</pubDate></item><item><title>three.js</title><link>http://ricardocabello.com/blog/post/693</link><description>&lt;a href=&quot;http://github.com/mrdoob/three.js&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_threejs.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

I think it was in 2004 when I started investigating, learning the maths and testing all this stuff of projecting 3d points into a 2d plane... Two years later, in 2006, I had a &lt;a href=&quot;http://mrdoob.com/blog/post/276&quot; target=&quot;_blank&quot;&gt;torus knot with flat shading with a light and a camera&lt;/a&gt;. Then &lt;a href=&quot;http://blog.papervision3d.org/&quot;&gt;Papervision3D&lt;/a&gt; came into the scene and I got distracted ;)&lt;br /&gt;&lt;br /&gt;

Two years later, in 2008, I reworked my code with the things I liked from Papervision3D but making it simpler to my mind. At that point I was calling the engine &lt;strong&gt;threedoob&lt;/strong&gt; and I did &lt;a href=&quot;http://mrdoob.com/tools/threedoob/performance/radiohead/&quot; target=&quot;_blank&quot;&gt;a&lt;/a&gt; &lt;a href=&quot;http://mrdoob.com/tools/threedoob/performance/radiohead_anim/&quot; target=&quot;_blank&quot;&gt;bunch&lt;/a&gt; &lt;a href=&quot;http://mrdoob.com/tools/threedoob/performance/balls_depth/&quot; target=&quot;_blank&quot;&gt;of&lt;/a&gt; &lt;a href=&quot;http://mrdoob.com/lab/webcam/face_driven_3d/&quot; target=&quot;_blank&quot;&gt;experiments&lt;/a&gt; with it. Later I &lt;strong&gt;ported the code to Javascript&lt;/strong&gt; and also did &lt;a href=&quot;http://mrdoob.com/projects/chromeexperiments/google_sphere/&quot;&gt;a&lt;/a&gt; &lt;a href=&quot;http://mrdoob.com/projects/chromeexperiments/depth_of_field/&quot;&gt;bunch&lt;/a&gt; &lt;a href=&quot;http://mrdoob.com/lab/javascript/threedoob/qrcode/&quot;&gt;of&lt;/a&gt; &lt;a href=&quot;http://mrdoob.com/lab/javascript/waveform/&quot;&gt;experiments&lt;/a&gt; with that version too.&lt;br /&gt;&lt;br /&gt;

Now I think I've reached a point in which I'm not ashamed of sharing the code and because doesn't seem to be much resources for rendering 3D with HTML5/Javascript I thought other people would find the javascript port useful.&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://github.com/mrdoob/three.js&quot; target=&quot;_blank&quot;&gt;So I've created a repository for it at github&lt;/a&gt;. It's still very early days, but feel free to take a look at it, use it, fork it, ... </description><pubDate>Sun, 25 Apr 2010 10:22:00 +0000</pubDate></item><item><title>Moving to github</title><link>http://ricardocabello.com/blog/post/692</link><description>I've asked many times to &lt;a href=&quot;http://soledadpenades.com/&quot; target=&quot;_blank&quot;&gt;Sole&lt;/a&gt; about the benefits of using &lt;a href=&quot;http://en.wikipedia.org/wiki/Git_(software)&quot;&gt;git&lt;/a&gt; and every time I thought it wasn't worth the learning time. I was happy with svn, but for &lt;a href=&quot;http://mrdoob.com/projects/harmony/&quot; target=&quot;_blank&quot;&gt;Harmony&lt;/a&gt; I thought about giving &lt;a href=&quot;http://github.com/&quot; target=&quot;_blank&quot;&gt;github&lt;/a&gt; a try as &lt;a href=&quot;http://code.google.com/&quot;&gt;Google Code&lt;/a&gt; didn't seem to make collaborations and forking too easy, plus &lt;a href=&quot;http://github.com/&quot; target=&quot;_blank&quot;&gt;github&lt;/a&gt; worked better with the way I was using it (different projects in the same place).&lt;br /&gt;&lt;br /&gt;

I guess &lt;a href=&quot;http://code.google.com/&quot;&gt;Google Code&lt;/a&gt; works well for big projects, but in my case I do small projects/snippets, and creating a new repository/page for each one was a bit annoying as they also check if a project with the same name exist on &lt;a href=&quot;http://sourceforge.net/&quot; target=&quot;_blank&quot;&gt;sourceforge&lt;/a&gt;, and if &lt;a href=&quot;http://sourceforge.net/projects/harmony/&quot; target=&quot;_blank&quot;&gt;it does&lt;/a&gt; you need to email the owner for permission first (although my project wouldn't be hosted on sourceforge but on Google Code).&lt;br /&gt;&lt;br /&gt;

Anyway, here it's the link for my github page:&lt;br /&gt;&lt;br /&gt;
&lt;a href=&quot;http://github.com/mrdoob/&quot; target=&quot;_blank&quot;&gt;http://github.com/mrdoob/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

So far I'm liking it, and I've started moving my projects there. First one to move was &lt;a href=&quot;http://github.com/mrdoob/stats.js&quot;&gt;stats.js&lt;/a&gt;, but expect the stats.as, videoplayer and so on to be moved soon. I've found github a bit hard at the beginning (ssh, keys and so on) but once that part is done is quite simple. Oh, and &lt;strong&gt;it's great to see the .svn folders go away!&lt;/strong&gt;</description><pubDate>Sun, 11 Apr 2010 17:40:00 +0000</pubDate></item><item><title>Wacom Javascript API</title><link>http://ricardocabello.com/blog/post/691</link><description>Ever tried to make an online drawing application and got frustrated because you couldn't access the Wacom tablet pressure? I know the feeling :)&lt;br /&gt;&lt;br /&gt;

Although I'm a bit surprised of how little publicity this thing had (none?) seems like &lt;a href=&quot;http://wacom.com/&quot; target=&quot;_blank&quot;&gt;Wacom&lt;/a&gt; has had this ready for quite a while (Windows/MacOS only) and with the latest drivers it should all work smoothly.&lt;br /&gt;&lt;br /&gt;

If you have a Wacom tablet, take a look at &lt;a href=&quot;http://www.wacomeng.com/web/index.html&quot; target=&quot;_blank&quot;&gt;these demos&lt;/a&gt;. To learn how to integrate it into your application, here it's &lt;a href=&quot;http://www.wacomeng.com/web/release_notes.htm&quot;&gt;the info&lt;/a&gt; but I found easier just to &lt;a href=&quot;http://www.wacomeng.com/web/CanvasPaintDemo.html&quot; target=&quot;_blank&quot;&gt;take a look at the sources of this demo&lt;/a&gt;. If you're a Flash/Flex developer, &lt;a href=&quot;http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/external/ExternalInterface.html&quot; target=&quot;_blank&quot;&gt;external interface&lt;/a&gt; is your friend, at least until Adobe implements it within the player.&lt;br /&gt;&lt;br /&gt;

Of course, I've implemented it already in &lt;a href=&quot;http://mrdoob.com/projects/harmony/&quot;&gt;Harmony&lt;/a&gt; ;)</description><pubDate>Thu, 01 Apr 2010 23:45:00 +0000</pubDate></item><item><title>Making of The Johnny Cash Project</title><link>http://ricardocabello.com/blog/post/690</link><description>And you may be wondering, where does all this thing about drawing tools come from? Good question!&lt;br /&gt;&lt;br /&gt;

Although I've always had interest on developing a drawing application, it all started when &lt;a href=&quot;http://www.aaronkoblin.com/&quot; target=&quot;_blank&quot;&gt;Aaron Koblin&lt;/a&gt; asked me if I would be up for developing a drawing tool for a &lt;a href=&quot;http://en.wikipedia.org/wiki/Johnny_Cash&quot; target=&quot;_blank&quot;&gt;Johnny Cash&lt;/a&gt; homage project he was planning with &lt;a href=&quot;http://www.chrismilk.com/&quot; target=&quot;_blank&quot;&gt;Chris Milk&lt;/a&gt;. I think this was about 6 months ago, even before the &lt;a href=&quot;http://mrdoob.com/blog/post/681&quot; target=&quot;_blank&quot;&gt;Startbucks Love Project&lt;/a&gt; (where an alpha version of the drawing tool was used).&lt;br /&gt;&lt;br /&gt;

Before passing away in 2003, &lt;a href=&quot;http://en.wikipedia.org/wiki/Johnny_Cash&quot; target=&quot;_blank&quot;&gt;Johnny Cash&lt;/a&gt; recorded one last album which was never released, until now. The idea was to build a platform where everyone would be able to draw a frame for the musicvideo for one of the tunes.&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://www.thejohnnycashproject.com/&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_jcp01.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

The website (front-end and back-end) was built by &lt;a href=&quot;http://www.radicalmedia.com/&quot; target=&quot;_blank&quot;&gt;@radical.media&lt;/a&gt; so my work on it gets simplified to the repainter and painter system.&lt;br /&gt;&lt;br /&gt;

&lt;strong&gt;Repainter&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;

One of the requirements for the drawing tool was to record how the frame was being drawn so the visitor on the site could see a timelapse. For example, here is a drawing I did:&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://www.thejohnnycashproject.com/#/explore/TopRated/9e831cfcdcb7e062c7629594d862cee7a515a507&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_jcp02.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

There is small aspect ratio bug on that one, but you get the idea...&lt;br /&gt;&lt;br /&gt;

Doing this took a bit of time, but luckily I had learnt a few tricks some weeks before after trying to port the &lt;a href=&quot;http://colors.collectingsmiles.com/downloads.php#ColorsDraw&quot; target=&quot;_blank&quot;&gt;Colors! Java Repainter applet&lt;/a&gt; to AS3.&lt;br /&gt;&lt;br /&gt;

Creating a file format turns out to be quite simple. Just a matter of deciding a few tags (size, color, opacity, position...) and deciding how many bits you need for each value. For instance, I have STROKE_START which has the id 4, we do &lt;em&gt;bytearray.writeByte(4)&lt;/em&gt; and then we save the positions of the mouse, but because these values can be bigger than a byte (256) we need to use int &lt;em&gt;bytearray.writeInt(x)&lt;/em&gt; and &lt;em&gt;bytearray.writeInt(y)&lt;/em&gt;. We do the same for the rest of data and at the end we use &lt;em&gt;bytearray.compress()&lt;/em&gt; which is pretty much a zip. The end result is a very simple and optimised file format, faster to parse than a xml and much smaller.&lt;br /&gt;&lt;br /&gt;

Having a hexadecimal editor is a must here (I used &lt;a href=&quot;http://live.gnome.org/Ghex&quot;&gt;GHex&lt;/a&gt;). Here is a screenshot of how the uncompressed file format looks like:&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://ricardocabello.com/files/blog/mrdoob_jcp05.png&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_jcp05.png&quot; width=&quot;350&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

If you know about file formats, I'm sure you already know what's going on, otherwise there you have a quick challenge for lunch time ;)&lt;br /&gt;&lt;br /&gt;

&lt;strong&gt;Painter&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;

Having the file format sorted out I &quot;just&quot; had to develop the drawing tool itself. This may sound an easy task but, starting with the &lt;a href=&quot;http://twitpic.com/mqkqh&quot; target=&quot;_blank&quot;&gt;premultiplied alpha nightmare&lt;/a&gt; (&lt;a href=&quot;http://www.quasimondo.com/archives/000665.php&quot; target=&quot;_blank&quot;&gt;more info&lt;/a&gt;) it has a bunch of little challenges... undo/redo, custom brushes, zoom, panning, brush outline... it just takes its time.&lt;br /&gt;&lt;br /&gt;

&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_jcp03.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;

Using the original frame of the video as onion skin we can get nice results in a few minutes.&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://www.thejohnnycashproject.com/#/explore/TopRated/5572307f5effbec881aeb7e133ac85461681ceae&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_jcp04.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

Now I can't wait to see how the project evolves and hopefully seeing the video without missing frames soon!</description><pubDate>Wed, 31 Mar 2010 02:03:00 +0000</pubDate></item><item><title>Harmony</title><link>http://ricardocabello.com/blog/post/689</link><description>This is the result of all the weekend playing with various drawing algorithms and &lt;a href=&quot;http://diveintohtml5.org/canvas.html&quot; target=&quot;_blank&quot;&gt;&amp;lt;canvas&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;

&lt;object width=&quot;350&quot; height=&quot;220&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/To1A-EPz79w&amp;hl=en_GB&amp;fs=1&amp;rel=0&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/To1A-EPz79w&amp;hl=en_GB&amp;fs=1&amp;rel=0&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;350&quot; height=&quot;220&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;

I'm sure you prefer playing with the thing than watching a video tho... &lt;a href=&quot;http://mrdoob.com/projects/harmony/&quot; target=&quot;_blank&quot;&gt;Here here!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

The whole thing is quite modular so I can keep adding more brush styles whenever I get inspired. During the process I found out that, for some reason (apparently lack of hardware acceleration), Firefox and Opera do not support &lt;strong&gt;context.globalCompositeOperation = 'darker'&lt;/strong&gt;. This was on the &lt;a href=&quot;http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-globalcompositeoperation&quot;&gt;HTML5 spec&lt;/a&gt; before but got removed. Just so you know what I'm talking about, this is like the &quot;multiply&quot; blending in Photoshop. Webkit does support it tho. I hope they put it back on the specs and all browsers support it.&lt;br /&gt;&lt;br /&gt;

I went to &lt;a href=&quot;irc://irc.mozilla.org/processing.js&quot; target=&quot;_blank&quot;&gt;#processing.js&lt;/a&gt; to ask about this and while there &lt;a href=&quot;http://eligrey.com/&quot; target=&quot;_blank&quot;&gt;sephr&lt;/a&gt;, apart from answring this same question, suggested making the app work on Webkit mobile (that means Android and iPhone) and also pointed me to the right direction. I didn't know this was possible at all but it was quite an easy task :) I haven't implemented multitouch support yet tho... that changes a bit the way my system work but I'll put it on the list.&lt;br /&gt;&lt;br /&gt;

Take a look at the code, play with it and if you come up with a nice brush you think should be added to the default pack, please, send it over!&lt;br /&gt;&lt;br /&gt;

EDIT: Thanks to &lt;a href=&quot;http://www.laska.com/&quot; target=&quot;_blabk&quot;&gt;Elke &lt;/a&gt;for creating a &lt;a href=&quot;http://www.facebook.com/pages/Mr-Doobs-Harmony/369109345937&quot; target=&quot;_blank&quot;&gt;Facebook Fan Page&lt;/a&gt;. There is also a &lt;a href=&quot;http://www.facebook.com/group.php?v=wall&amp;gid=359587211764&quot; target=&quot;_blank&quot;&gt;Facebook Group&lt;/a&gt; :D&lt;br /&gt;&lt;br /&gt;

EDIT 2: Yet another Facebook group. &lt;a href=&quot;http://www.facebook.com/group.php?v=wall&amp;gid=10150135103470580&quot; target=&quot;_blank&quot;&gt;RRR&lt;/a&gt;, with a theme everyday and really talented artists. </description><pubDate>Mon, 08 Mar 2010 02:48:00 +0000</pubDate></item><item><title>César Alierta y las anotaciones de Youtube</title><link>http://ricardocabello.com/blog/post/687</link><description>Ayer, en el perfil de &lt;a href=&quot;http://www.palaueb.com/&quot;&gt;Marc&lt;/a&gt; de Facebook, me tope con esta &lt;a href=&quot;http://www.eitb.com/videos/noticias/tecnologia/detalle/349899/alierta-telefonica-advierte-buscadores-internet-tendran-pagar/&quot;&gt;perla&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://soledadpenades.com/&quot;&gt;Sole&lt;/a&gt;, al verlo esta mañana, comentaba que echaba de menos poder poner comentarios en tiempos especificos, como en &lt;a href=&quot;http://soundcloud.com/&quot;&gt;soundcloud&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;

Dicho y hecho!&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://www.youtube.com/watch?v=rVADWAxOZtg&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/cesaralierta.png&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

Seguramente el video terminara con demasiadas anotaciones pero por ahora el experimento ha valido la pena :D</description><pubDate>Thu, 11 Feb 2010 00:07:00 +0000</pubDate></item>
</channel></rss>
