<?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 2013 ricardo cabello</copyright>
<item><title>Real-time Rendering</title><link>http://ricardocabello.com/blog/post/722</link><description>Almost forgot about this one. I feel like maybe I'm repeating myself too much on these interviews...&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://www.realtimerendering.com/blog/interview-with-three-js-creator/&quot; target=&quot;_blank&quot;&gt;http://www.realtimerendering.com/blog/interview-with-three-js-creator/&lt;/a&gt;</description><pubDate>Sat, 16 Mar 2013 23:06:00 +0000</pubDate></item><item><title>Mosaic</title><link>http://ricardocabello.com/blog/post/721</link><description>And yet another interview... this one is in spanish though.&lt;br /&gt;
&lt;a href=&quot;http://mosaic.uoc.edu/2013/02/27/ricardo-cabello/&quot; target=&quot;_blank&quot;&gt;http://mosaic.uoc.edu/2013/02/27/ricardo-cabello/&lt;/a&gt;</description><pubDate>Tue, 12 Mar 2013 13:03:00 +0000</pubDate></item><item><title>WebGL Podcast - Episode 3</title><link>http://ricardocabello.com/blog/post/720</link><description>Got interviewed on the 3rd episode of the WebGL Podcast.&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://thewebglpodcast.com/3/&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/webglpodcast_e3.jpg&quot; width=&quot;350&quot; /&gt;&lt;/a&gt;</description><pubDate>Tue, 12 Mar 2013 10:23:00 +0000</pubDate></item><item><title>Time to build tools.</title><link>http://ricardocabello.com/blog/post/719</link><description>And here's a talk I did one month later at &lt;a href=&quot;http://www.dotjs.eu/&quot; target=&quot;_blank&quot;&gt;dotJS&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;

For this one I only had 20 minutes and I had to be sharp. So rehearsing was required again.&lt;br /&gt;&lt;br /&gt;

&lt;iframe width=&quot;350&quot; height=&quot;250&quot; src=&quot;http://www.youtube.com/embed/NLORWry8F5Y&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;

Oh, and no... that's not my laptop. Not really a fan of stickers on laptops :P</description><pubDate>Tue, 15 Jan 2013 15:18:00 +0000</pubDate></item><item><title>What's next for three.js?</title><link>http://ricardocabello.com/blog/post/718</link><description>Here's a quick talk I did some months ago with &lt;a href=&quot;http://alteredqualia.com/&quot; target=&quot;_blank&quot;&gt;Branislav&lt;/a&gt; at &lt;a href=&quot;http://2012.jsconf.eu/&quot; target=&quot;_blank&quot;&gt;JSConf EU&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;

&lt;iframe width=&quot;350&quot; height=&quot;228&quot; src=&quot;http://www.youtube.com/embed/qx40CRwwkS8&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;

This was the first time I rehearsed a talk. Not sure if that makes things better or worse.</description><pubDate>Mon, 14 Jan 2013 12:19:00 +0000</pubDate></item><item><title>Making of ROME</title><link>http://ricardocabello.com/blog/post/717</link><description>This time around, the now traditional making of blog post is a video instead..&lt;br /&gt;&lt;br /&gt;

I didn't go much into detail but hopefully there are some interesting bits:&lt;br /&gt;&lt;br /&gt;

&lt;iframe width=&quot;350&quot; height=&quot;235&quot; src=&quot;http://www.youtube.com/embed/D8mOtkuN864&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;

Thanks to &lt;a href=&quot;http://www.mozilla.org/&quot; target=&quot;_blank&quot;&gt;Mozilla&lt;/a&gt; for sponsoring!</description><pubDate>Mon, 08 Aug 2011 02:22:00 +0000</pubDate></item><item><title>Clean up</title><link>http://ricardocabello.com/blog/post/715</link><description>&lt;strong&gt;Don't include in your portfolio projects you wouldn't enjoy doing again.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;

That's something I learnt right when I started &lt;a href=&quot;http://www.mrdoob.com&quot;&gt;mrdoob.com&lt;/a&gt;. The aim there was just to share some experimentation and have fun, wasn't meant to be my portfolio but people started contacting me proposing interesting projects. At that point I took down my old (and boring) portfolio here and kept doing experiments over there.&lt;br /&gt;&lt;br /&gt;

So now it's time to apply that again... At this point I've no interest on doing Flash projects any more, hence I've removed all the Flash projects and experiments (files are still there, just not linked).</description><pubDate>Fri, 08 Apr 2011 12:30:00 +0000</pubDate></item><item><title>GLSL Sandbox</title><link>http://ricardocabello.com/blog/post/714</link><description>One of the things WebGL will bring us is Fragment Shaders. If you're familiar with &lt;a href=&quot;http://www.adobe.com/devnet/pixelbender.html&quot;&gt;Pixel Bender&lt;/a&gt; you know how Fragment Shaders work.&lt;br /&gt;&lt;br /&gt;

Although they usually go with Vertex Shaders, you can set it up for doing just 2D effects with it. &lt;a href=&quot;http://www.iquilezles.org/&quot;&gt;Iq&lt;/a&gt; did exactly this some months ago with &lt;a href=&quot;http://www.iquilezles.org/apps/shadertoy/&quot;&gt;Shader Toy&lt;/a&gt; — a browser based Fragment Shader editor.&lt;br /&gt;&lt;br /&gt;

This week I started experimenting with this. First thing I needed to do was a sandbox with the basic WebGL initialisation code. With that done is just a matter of testing values and refreshing the browser. I tried to have a compile button right in the page so I wouldn't even need to refresh the browser but it was over complicating the code...&lt;br /&gt;&lt;br /&gt;

These are the tests I've done so far:&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://mrdoob.com/lab/javascript/webgl/glsl/01/&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_glsl01.png&quot;/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://mrdoob.com/lab/javascript/webgl/glsl/02/&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_glsl02.png&quot;/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://mrdoob.com/lab/javascript/webgl/glsl/03/&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_glsl03.png&quot;/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://mrdoob.com/lab/javascript/webgl/glsl/04/&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_glsl04.png&quot;/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

Next thing on the list is to implement render to texture so I can use the output of the fragment shader as input. That'll allow crazy feedback effects and even crazier drawing tools!&lt;br /&gt;&lt;br /&gt;

Feel free to use the sandbox code for your own experimentation.</description><pubDate>Tue, 04 Jan 2011 04:53:00 +0000</pubDate></item><item><title>WebGL</title><link>http://ricardocabello.com/blog/post/713</link><description>Seems like &lt;a href=&quot;http://en.wikipedia.org/wiki/WebGL&quot;&gt;WebGL&lt;/a&gt; is about to land. &lt;a href=&quot;http://www.google.com/landing/chrome/beta/&quot;&gt;Chrome 9 beta&lt;/a&gt;, &lt;a href=&quot;http://www.mozilla.com/en-GB/firefox/beta/&quot;&gt;Firefox 4 beta 8&lt;/a&gt; and &lt;a href=&quot;http://nightly.webkit.org/&quot;&gt;Safari Nighly Build&lt;/a&gt; have it enabled by default already. It's just a matter of weeks for the final versions to be released.&lt;br /&gt;&lt;br /&gt;

I think we're going to face a funny situation... For web developers OpenGL may be a bit intimidating — at least it was for me! For game developers it's piece of cake, but because some features have been disabled some of them feel like a step back in their careers. So it's an area where there won't be so many people for a while.&lt;br /&gt;&lt;br /&gt;

You may know that, for the last few months, &lt;a href=&quot;http://github.com/mrdoob/three.js/&quot;&gt;I've been busy developing a library&lt;/a&gt; that aims to make this as painless and fun as possible. Hopefully there will be more libraries like this in the near future.&lt;br /&gt;&lt;br /&gt;

If you're a web developer I would suggest you to start tinkering with all this. I have the feeling things are going to move quite fast as soon as it lands. Won't be long until Mobile Safari — iOS and Android browser — also enables this.&lt;br /&gt;&lt;br /&gt;

Exciting times! :)</description><pubDate>Tue, 04 Jan 2011 04:11:00 +0000</pubDate></item><item><title>Archiving Windows demos. Take two.</title><link>http://ricardocabello.com/blog/post/712</link><description>This is something I've spent a fair amount of time on already. Last year &lt;a href=&quot;http://ricardocabello.com/blog/post/666&quot;&gt;I wrote about some of my findings&lt;/a&gt; but the truth is that it didn't anywhere.&lt;br /&gt;&lt;br /&gt;

The main problem is that, for whatever reason, &lt;a href=&quot;http://lags.leetcode.net/codec.html&quot;&gt;Lagarith&lt;/a&gt; is not finding its way into &lt;a href=&quot;http://www.ffmpeg.org/&quot;&gt;ffmpeg&lt;/a&gt; and rumours say Youtube uses ffmpeg for doing the transcoding. So if you tried to upload that 2gbytes video file to Youtube you'd end up getting a &quot;unknown format&quot; error.&lt;br /&gt;&lt;br /&gt;

Early this month I checked what was the status with all this, and seemed that nothing had changed so I thought about looking for other lossless codecs. This time I tried with &lt;a href=&quot;http://neuron2.net/www.math.berkeley.edu/benrg/huffyuv.html&quot;&gt;Huffyuv&lt;/a&gt;. Video file size is bigger but at least ffmpeg supports it.&lt;br /&gt;&lt;br /&gt;

The idea is to let Youtube host the uncompressed files for me (5gb-20gb each). I don't know if that's what happens or not, but I would think such service must keep the original.&lt;br /&gt;&lt;br /&gt;

This is how the process looks like:&lt;br /&gt;&lt;br /&gt;

&lt;strong&gt;1.&lt;/strong&gt; &lt;a href=&quot;http://www.farb-rausch.de/~fg/kkapture/&quot;&gt;kkapture&lt;/a&gt; the demo using &lt;a href=&quot;http://neuron2.net/www.math.berkeley.edu/benrg/huffyuv.html&quot;&gt;Huffyuv&lt;/a&gt; for encoding.&lt;br /&gt; Note: I have antialias enabled on my nvidia config as that compresses better than non-antialias stuff.&lt;br /&gt;
&lt;strong&gt;2.&lt;/strong&gt; Now you'll get a bunch of .avi files that you need to merge. To do so just use &lt;a href=&quot;http://www.virtualdub.org/&quot;&gt;Virtualdub&lt;/a&gt;. While you're on it, go ahead and remove the aspect ratio black bars.&lt;br /&gt;
&lt;strong&gt;3.&lt;/strong&gt; Upload the file to youtube. This may take a while. It takes about 24 hours per video here.&lt;br /&gt;&lt;br /&gt;

And that's it. Now it's up to Youtube to keep updating their videos as technology evolves. It's a slow process, but if the theory is right it just needs to be done once.&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://ricardocabello.com/demoscene&quot;&gt;You can see the ones I've managed to do already in the (just re-opened) demoscene section&lt;/a&gt;.</description><pubDate>Mon, 27 Dec 2010 19:10:00 +0000</pubDate></item><item><title>Moving back to Spain. Update.</title><link>http://ricardocabello.com/blog/post/711</link><description>That was a slow year on this blog. Only 3 posts...&lt;br /&gt;&lt;br /&gt;

It's been one year since we decided to move back to Spain. Since then some people have asked if we had moved already or what. Well... not yet.&lt;br /&gt;&lt;br /&gt;

There are a few things you need to deal with when moving. Specially if you own a property on the country you're leaving that you want to keep. On top of that, it was my first year as freelancer. Things were unstable and it was also quite hectic.&lt;br /&gt;&lt;br /&gt;

2011 seems to be a bit more stable so there it's more likely to happen. Once again we aim for June/July. We'll see how it goes...&lt;br /&gt;&lt;br /&gt;

Anyway, &lt;strong&gt;have a great 2011! :D&lt;/strong&gt;</description><pubDate>Mon, 27 Dec 2010 18:36:00 +0000</pubDate></item><item><title>3 point gradient trick and vertex colors</title><link>http://ricardocabello.com/blog/post/710</link><description>Continuing with the three.js development, after implementing multi lights the flat shading was starting to be quite a limitation.&lt;br /&gt;&lt;br /&gt;

&lt;a href=&quot;http://mrdoob.github.com/three.js/examples/lights_pointlights.html
&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_4pointgradient0.png&quot; width=&quot;350&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;

In order to get smooth faces I needed to figure out a way to create what it's called 3 point gradients. I took a look at the usual Flash 3D engines and what was my surprise when I found out that they tend to be limited to just 1 light (correct me if I'm wrong).  This is probably because by supporting 1 light they just needed to create a light map per material. Something like this:&lt;br /&gt;&lt;br /&gt;

&lt;center&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_4pointgradient6.png&quot; /&gt;&lt;/center&gt;&lt;br /&gt;

That's indeed a fast approach, but it limits to just 1 light, and then you need to update the map if the ambient light changes or the color of the material... not really up my street.&lt;br /&gt;&lt;br /&gt;

The old way of doing this with OpenGL is by using Vertex Colors. Basically, I was after this:&lt;br /&gt;&lt;br /&gt;

&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_4pointgradient7.png&quot; width=&quot;350&quot; /&gt;&lt;br /&gt;&lt;br /&gt;

I wondered if there was a way to create this kind of gradient with the Canvas API. I googled a bit to see what people had come up with, but all the approaches seemed quite cpu intensive. Like &lt;a href=&quot;http://en.nicoptere.net/?p=537&quot; target=&quot;_blank&quot;&gt;this one&lt;/a&gt; from nicoptere.&lt;br /&gt;&lt;br /&gt;

Then a crazy idea pop into my mind. What about having a 2x2 image, and change the colors of each pixel depending of the vertex color and do that at render time per polygon? The browser will then stretch that image and create all the gradient in between those 3-4 pixels.&lt;br /&gt;&lt;br /&gt;

This is the 2x2 image:&lt;br /&gt;&lt;br /&gt;

&lt;center&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_4pointgradient1.png&quot; /&gt;&lt;/center&gt;&lt;br /&gt;

Can't you see it? Ok, this is the same image scaled to 256x256 with no filtering (using &lt;a href=&quot;http://www.gimp.org/&quot; target=&quot;_blank&quot;&gt;Gimp&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;

&lt;center&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_4pointgradient15.png&quot; /&gt;&lt;/center&gt;&lt;br /&gt;

However, by default (whether you like it or not) the browsers &lt;a href=&quot;http://en.wikipedia.org/wiki/Bilinear_filtering&quot; target=&quot;_blank&quot;&gt;filter&lt;/a&gt; scaled images. This is what you get within the browsers:&lt;br /&gt;&lt;br /&gt;

&lt;center&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_4pointgradient2.png&quot; /&gt;&lt;/center&gt;&lt;br /&gt;

Each browser gets slightly different results but pretty much that's what you get. This wasn't exactly what I was after, there is too much color on the corners. However, by looking at all the results from all the browsers I realised that the center part of the image was the only part that was always similar.&lt;br /&gt;&lt;br /&gt;

&lt;center&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_4pointgradient3.png&quot; /&gt;&lt;/center&gt;&lt;br /&gt;

Then I realised that that's the actual gradient I was after!&lt;br /&gt;&lt;br /&gt;

&lt;center&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_4pointgradient4.png&quot; /&gt;&lt;/center&gt;&lt;br /&gt;

Here it's the code:&lt;br /&gt;&lt;br /&gt;

&lt;pre&gt;
var QUALITY = 256;

var canvas_colors = document.createElement( 'canvas' );
canvas_colors.width = 2;
canvas_colors.height = 2;

var context_colors = canvas_colors.getContext( '2d' );
context_colors.fillStyle = 'rgba(0,0,0,1)';
context_colors.fillRect( 0, 0, 2, 2 );

var image_colors = context_colors.getImageData( 0, 0, 2, 2 );
var data = image_colors.data;

var canvas_render = document.createElement( 'canvas' );
canvas_render.width = QUALITY;
canvas_render.height = QUALITY;
document.body.appendChild( canvas_render );

var context_render = canvas_render.getContext( '2d' );
context_render.translate( - QUALITY / 2, - QUALITY / 2 );
context_render.scale( QUALITY, QUALITY );

data[ 0 ] = 255; // Top-left, red component
data[ 5 ] = 255; // Top-right, green component
data[ 10 ] = 255; // Bottom-left, blue component

context_colors.putImageData( image_colors, 0, 0 );
context_render.drawImage( canvas_colors, 0, 0 );
&lt;/pre&gt;&lt;br /&gt;

So it was just a matter of changing 3-4 pixels, scaling up and cropping and then use that as a texture for each polygon. Crazy? Yes. But it works! And fast enough! And what's more, it's not just limited to 3 points, but a 4th point comes for free (quads).&lt;br /&gt;&lt;br /&gt;

&lt;center&gt;&lt;a href=&quot;http://twitpic.com/37bjvz/full&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://ricardocabello.com/files/blog/mrdoob_4pointgradient5.png&quot; width=&quot;350&quot; /&gt;&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;

&lt;a href=&quot;http://mrdoob.github.com/three.js/examples/materials_depth.html&quot; target=&quot;_blank&quot;&gt;Here it's an example&lt;/a&gt; of the first material I've applied the technique to (use arrow keys and ASWD to navigate).&lt;br /&gt;&lt;br /&gt;

At this point I was surprised that I didn't see this before. And that I hadn't seen this being done in any of the usual 3d engines. I did another search and I found &lt;a href=&quot;http://actionsnippet.com/?p=2329&quot; target=&quot;_blank&quot;&gt;this snippet&lt;/a&gt; from &lt;a href=&quot;http://pixelero.wordpress.com/&quot; target=&quot;_blank&quot;&gt;Pixelero&lt;/a&gt; that uses the same concept. Good to know I'm not the only one with crazy ideas! :)&lt;br /&gt;&lt;br /&gt;

Thanks to this, now I'm able to do smooth materials (gouraud, phong) that support multiple lights, fog, even &lt;a href=&quot;http://en.wikipedia.org/wiki/Screen_Space_Ambient_Occlusion&quot; target=&quot;_blank&quot;&gt;SAAO&lt;/a&gt; :) We just need the browsers to become faster (which&lt;a href=&quot;http://www.youtube.com/watch?v=VZXjxl5p_0c&quot;&gt; they seem to be on it already&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;

Of course, if your browser supports WebGL you should be using that instead, but if it doesn't, at least you'll have something better than a text message.</description><pubDate>Thu, 18 Nov 2010 00:09:00 +0000</pubDate></item><item><title>three.js r28</title><link>http://ricardocabello.com/blog/post/709</link><description>For the last few weeks I've been quite focused on developing &lt;a href=&quot;https://github.com/mrdoob/three.js&quot; target=&quot;_blank&quot;&gt;the engine&lt;/a&gt; and I think the API is starting to get quite stable. I'm still unsure on what parts of the API need to be included in the actual build and what parts should just keep outside.&lt;br /&gt;&lt;br /&gt;

For instance, primitives is something you don't want to have in the compiled .js file. If you need a Cube, Sphere, ... I think it's easier to have it in &lt;em&gt;/js/geometry/primives/*&lt;/em&gt;. Otherwise we end up having a 100kbytes file just for drawing a bunch of particles. I really want to avoid that, right now it's 60kbytes. But that includes all the renderers, if you're only going to use &lt;em&gt;CanvasRenderer&lt;/em&gt;, you can save 20-30kb by removing the &lt;em&gt;SVGRenderer&lt;/em&gt;, &lt;em&gt;WebGLRenderer&lt;/em&gt;, ... logic. &lt;a href=&quot;https://github.com/mrdoob/three.js/tree/master/utils/&quot; target=&quot;_blank&quot;&gt;These scripts&lt;/a&gt; do that automatically.&lt;br /&gt;&lt;br /&gt;

Mr. &lt;a href=&quot;http://alteredqualia.com/&quot; target=&quot;_blank&quot;&gt;AlteredQualia&lt;/a&gt; has been doing an awesome job with the &lt;em&gt;WebGLRenderer&lt;/em&gt; these past weeks. If you have WebGL enabled, &lt;a href=&quot;http://mrdoob.github.com/three.js/examples/geometry_large_mesh.html&quot; target=&quot;_blank&quot;&gt;these 400k polys&lt;/a&gt; are waiting for you.&lt;br /&gt;&lt;br /&gt;

There is still quite a bit of work to do here and there, specially on the materials side (Mapping types, Blending, Gouraud, Phong... ) but it'll all come in good time :)</description><pubDate>Thu, 04 Nov 2010 23:55:00 +0000</pubDate></item><item><title>How do you debug JavaScript?</title><link>http://ricardocabello.com/blog/post/708</link><description>&lt;a href=&quot;http://joeparry.com/blog/&quot; target=&quot;_blank&quot;&gt;Joe Parry&lt;/a&gt; suggested by email to write a follow up to the post about &lt;a href=&quot;http://mrdoob.com/blog/post/706&quot; target=&quot;_blank&quot;&gt;JavaScript IDEs&lt;/a&gt;. That's also one of the common questions and I intended to include it on the first post but I forgot :S&lt;br /&gt;&lt;br /&gt;

I've heard many people referring to &lt;a href=&quot;http://getfirebug.com/&quot; target=&quot;_blank&quot;&gt;Firebug&lt;/a&gt; as the best way to debug when coding JavaScript but I've never got to try it out properly as I started coding directly with/for Chrome. So in my case I mainly use the &lt;a href=&quot;http://webkit.org/blog/197/web-inspector-redesign/&quot; target=&quot;_blank&quot;&gt;Webkit Inspector&lt;/a&gt;/&lt;a href=&quot;http://blog.chromium.org/2009/06/developer-tools-for-google-chrome.html&quot; target=&quot;_blank&quot;&gt;Developer Tools&lt;/a&gt; panel.&lt;br /&gt;&lt;br /&gt;

However, rather than debug the code I usually log stuff instead for which &lt;strong&gt;console.log()&lt;/strong&gt;, &lt;strong&gt;console.log()&lt;/strong&gt;, &lt;strong&gt;console.error()&lt;/strong&gt;, &lt;strong&gt;console.warn()&lt;/strong&gt;, &lt;strong&gt;console.info()&lt;/strong&gt; gives me way more than I need. Specially coming from Flash where the console is so basic that everyone keeps building &lt;a href=&quot;http://code.google.com/p/mrdoob/source/browse/trunk/libs/net/hires/debug/Logger.as&quot; target=&quot;_blank&quot;&gt;their own logging library&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;

At this last &lt;a href=&quot;http://code.google.com/events/io/2010/&quot; target=&quot;_blank&quot;&gt;Google I/O&lt;/a&gt; I saw this presentation about the Developer Tools that left me quite impressed of how much stuff I was missing.&lt;br /&gt;&lt;br /&gt;

&lt;iframe title=&quot;YouTube video player&quot; class=&quot;youtube-player&quot; type=&quot;text/html&quot; width=&quot;350&quot; height=&quot;300&quot; src=&quot;http://www.youtube.com/embed/TH7sJbyXHuk&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;</description><pubDate>Mon, 11 Oct 2010 13:46:00 +0000</pubDate></item><item><title>stats.js bookmarklet</title><link>http://ricardocabello.com/blog/post/707</link><description>Last week &lt;a href=&quot;http://twitter.com/matthewlein&quot; target=&quot;_blank&quot;&gt;Matthew Lein&lt;/a&gt; shared a &lt;a href=&quot;http://twitter.com/matthewlein/status/26675207435&quot; target=&quot;_blank&quot;&gt;very interesting tip&lt;/a&gt; over twitter.&lt;br /&gt;&lt;br /&gt;

Apart from &lt;a href=&quot;http://ffffound.com/&quot; target=&quot;_blank&quot;&gt;FFFOUND!&lt;/a&gt;'s bookmarklet I haven't seen myself using many of these as I've never felt they were that useful. However, this case is different and, once again, the possibilities of JavaScript amaze me.&lt;br /&gt;&lt;br /&gt;

Just drag and drop this link to your bookmarks toolbar:&lt;br /&gt;&lt;br /&gt;

&lt;center&gt;&lt;a href=&quot;javascript:(function(){var script=document.createElement('script');script.src='http://github.com/mrdoob/stats.js/raw/master/build/stats.min.js';document.body.appendChild(script);script=document.createElement('script');script.innerHTML='var interval=setInterval(function(){if(typeof Stats==\'function\'){clearInterval(interval);var stats=new Stats();stats.domElement.style.position=\'fixed\';stats.domElement.style.left=\'0px\';stats.domElement.style.top=\'0px\';stats.domElement.style.zIndex=\'10000\';document.body.appendChild(stats.domElement);setInterval(function(){stats.update();},1000/60);}},100);';document.body.appendChild(script);})();&quot;&gt;Display Stats&lt;/a&gt;&lt;/center&gt;&lt;br /&gt;

By clicking on the saved bookmark you'll be able to insert the &lt;a href=&quot;http://github.com/mrdoob/stats.js&quot;&gt;Stats.js widget&lt;/a&gt; in any website and monitor the FPS/MS/MEM by doing so \:D/.</description><pubDate>Mon, 11 Oct 2010 03:12:00 +0000</pubDate></item>
</channel></rss>
