*blog... kind of... *rss
Harmony ports
27 comments
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! :)
So I can't be happier about it. With the release I also decided to share the source code hoping that people would play with it, create more brushes and in the end improve the application.
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:
Paid
AbtMagicSand Classic by Ultie, Inc. (iPhone OS)
ASKetch Pad by AKERN Software (iPhone OS)
Harmonious. by The Angry Robot Zombie Factory (iPhone OS)
LiveSketch by Yan Rabovik (iPhone OS)
LiveSketch HD by Yan Rabovik (iPhone OS)
OmniSketch by Richard Taylor (iPhone OS)
Touch Sketch by Luksor (iPhone OS)
Really Big Pictures HD by Zeno Machine (iPhone OS)
Qvik Sketch Pro by Qvik (iPhone OS)
Free
Draw(er) by Dansl (Android)
MiniTones by Banana Coding (iPhone OS)
Qvik Sketch by Qvik (iPhone OS)
Sketcher by wargoth (Android)
If I have forgotten any app, feel free to share it on the comments.
EDIT: 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: "Why should an app not be open source if it is completely based on other open source ideas?". I'll take that in consideration from now on.
So I can't be happier about it. With the release I also decided to share the source code hoping that people would play with it, create more brushes and in the end improve the application.
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:
Paid
AbtMagicSand Classic by Ultie, Inc. (iPhone OS)
ASKetch Pad by AKERN Software (iPhone OS)
Harmonious. by The Angry Robot Zombie Factory (iPhone OS)
LiveSketch by Yan Rabovik (iPhone OS)
LiveSketch HD by Yan Rabovik (iPhone OS)
OmniSketch by Richard Taylor (iPhone OS)
Touch Sketch by Luksor (iPhone OS)
Really Big Pictures HD by Zeno Machine (iPhone OS)
Qvik Sketch Pro by Qvik (iPhone OS)
Free
Draw(er) by Dansl (Android)
MiniTones by Banana Coding (iPhone OS)
Qvik Sketch by Qvik (iPhone OS)
Sketcher by wargoth (Android)
If I have forgotten any app, feel free to share it on the comments.
EDIT: 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: "Why should an app not be open source if it is completely based on other open source ideas?". I'll take that in consideration from now on.
27 comments
Water and Parallax

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.
Water Effect
It all starts (once again) from this page. On there you'll see a "magic" 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.

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.
Parallax Effect
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.
(You can see the effect on the 5:32 mark)
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.
This week, for some reason, I ended up at Petri Leskinen's blog once again. On this visit I realised he shared a very interesting snippet. 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 seemed pretty good (18ms for creating the perlin texture, 17ms for the elevated one).
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.
There are still a bunch of oldschool effects I want to try using <canvas> before I jump to WebGL shaders. As always, feel free to abuse of the beauty of Javascript: Right click > View Source :)
4 comments

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.
Water Effect
It all starts (once again) from this page. On there you'll see a "magic" 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.

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.
Parallax Effect
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.
(You can see the effect on the 5:32 mark)
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.
This week, for some reason, I ended up at Petri Leskinen's blog once again. On this visit I realised he shared a very interesting snippet. 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 seemed pretty good (18ms for creating the perlin texture, 17ms for the elevated one).
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.
There are still a bunch of oldschool effects I want to try using <canvas> before I jump to WebGL shaders. As always, feel free to abuse of the beauty of Javascript: Right click > View Source :)
4 comments
JavaScript: The Good Parts
12 comments
Today neave was sharing this interesting talk over twitter. 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
12 comments
three.js

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 torus knot with flat shading with a light and a camera. Then Papervision3D came into the scene and I got distracted ;)
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 threedoob and I did a bunch of experiments with it. Later I ported the code to Javascript and also did a bunch of experiments with that version too.
Now I think I've reached a point in which I'm not ashamed of sharing the code and because there seem to be a lack of 3d javascript libraries I thought other people would find this useful.
So I've created a repository for it at github. It's still very early days, but feel free to take a look at it, use it, fork it, ...
EDIT: Please, do not add comments here with issues you're having. Use github's issues section instead.
32 comments

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 torus knot with flat shading with a light and a camera. Then Papervision3D came into the scene and I got distracted ;)
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 threedoob and I did a bunch of experiments with it. Later I ported the code to Javascript and also did a bunch of experiments with that version too.
Now I think I've reached a point in which I'm not ashamed of sharing the code and because there seem to be a lack of 3d javascript libraries I thought other people would find this useful.
So I've created a repository for it at github. It's still very early days, but feel free to take a look at it, use it, fork it, ...
EDIT: Please, do not add comments here with issues you're having. Use github's issues section instead.
32 comments
Moving to github
7 comments
I've asked many times to Sole about the benefits of using git and every time I thought it wasn't worth the learning time. I was happy with svn, but for Harmony I thought about giving github a try as Google Code didn't seem to make collaborations and forking too easy, plus github worked better with the way I was using it (different projects in the same place).
I guess Google Code 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 sourceforge, and if it does you need to email the owner for permission first (although my project wouldn't be hosted on sourceforge but on Google Code).
Anyway, here it's the link for my github page:
http://github.com/mrdoob/
So far I'm liking it, and I've started moving my projects there. First one to move was stats.js, 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 it's great to see the .svn folders go away!
I guess Google Code 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 sourceforge, and if it does you need to email the owner for permission first (although my project wouldn't be hosted on sourceforge but on Google Code).
Anyway, here it's the link for my github page:
http://github.com/mrdoob/
So far I'm liking it, and I've started moving my projects there. First one to move was stats.js, 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 it's great to see the .svn folders go away!
7 comments
Wacom Javascript API
7 comments
Ever tried to make an online drawing application and got frustrated because you couldn't access the Wacom tablet pressure? I know the feeling :)
Although I'm a bit surprised of how little publicity this thing had (none?) seems like Wacom has had this ready for quite a while (Windows/MacOS only) and with the latest drivers it should all work smoothly.
If you have a Wacom tablet, take a look at these demos. To learn how to integrate it into your application, here it's the info but I found easier just to take a look at the sources of this demo. If you're a Flash/Flex developer, external interface is your friend, at least until Adobe implements it within the player.
Of course, I've implemented it already in Harmony ;)
Although I'm a bit surprised of how little publicity this thing had (none?) seems like Wacom has had this ready for quite a while (Windows/MacOS only) and with the latest drivers it should all work smoothly.
If you have a Wacom tablet, take a look at these demos. To learn how to integrate it into your application, here it's the info but I found easier just to take a look at the sources of this demo. If you're a Flash/Flex developer, external interface is your friend, at least until Adobe implements it within the player.
Of course, I've implemented it already in Harmony ;)
7 comments
Making of The Johnny Cash Project
16 comments
And you may be wondering, where does all this thing about drawing tools come from? Good question!
Although I've always had interest on developing a drawing application, it all started when Aaron Koblin asked me if I would be up for developing a drawing tool for a Johnny Cash homage project he was planning with Chris Milk. I think this was about 6 months ago, even before the Startbucks Love Project (where an alpha version of the drawing tool was used).
Before passing away in 2003, Johnny Cash 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.

The website (front-end and back-end) was built by @radical.media so my work on it gets simplified to the repainter and painter system.
Repainter
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:

There is small aspect ratio bug on that one, but you get the idea...
Doing this took a bit of time, but luckily I had learnt a few tricks some weeks before after trying to port the Colors! Java Repainter applet to AS3.
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 bytearray.writeByte(4) 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 bytearray.writeInt(x) and bytearray.writeInt(y). We do the same for the rest of data and at the end we use bytearray.compress() 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.
Having a hexadecimal editor is a must here (I used GHex). Here is a screenshot of how the uncompressed file format looks like:

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 ;)
Painter
Having the file format sorted out I "just" had to develop the drawing tool itself. This may sound an easy task but, starting with the premultiplied alpha nightmare (more info) it has a bunch of little challenges... undo/redo, custom brushes, zoom, panning, brush outline... it just takes its time.

Using the original frame of the video as onion skin we can get nice results in a few minutes.

Now I can't wait to see how the project evolves and hopefully seeing the video without missing frames soon!
Although I've always had interest on developing a drawing application, it all started when Aaron Koblin asked me if I would be up for developing a drawing tool for a Johnny Cash homage project he was planning with Chris Milk. I think this was about 6 months ago, even before the Startbucks Love Project (where an alpha version of the drawing tool was used).
Before passing away in 2003, Johnny Cash 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.

The website (front-end and back-end) was built by @radical.media so my work on it gets simplified to the repainter and painter system.
Repainter
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:

There is small aspect ratio bug on that one, but you get the idea...
Doing this took a bit of time, but luckily I had learnt a few tricks some weeks before after trying to port the Colors! Java Repainter applet to AS3.
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 bytearray.writeByte(4) 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 bytearray.writeInt(x) and bytearray.writeInt(y). We do the same for the rest of data and at the end we use bytearray.compress() 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.
Having a hexadecimal editor is a must here (I used GHex). Here is a screenshot of how the uncompressed file format looks like:

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 ;)
Painter
Having the file format sorted out I "just" had to develop the drawing tool itself. This may sound an easy task but, starting with the premultiplied alpha nightmare (more info) it has a bunch of little challenges... undo/redo, custom brushes, zoom, panning, brush outline... it just takes its time.

Using the original frame of the video as onion skin we can get nice results in a few minutes.

Now I can't wait to see how the project evolves and hopefully seeing the video without missing frames soon!
16 comments
Harmony
333 comments
This is the result of all the weekend playing with various drawing algorithms and <canvas>.
I'm sure you prefer playing with the thing than watching a video tho... Here here!
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 context.globalCompositeOperation = 'darker'. This was on the HTML5 spec before but got removed. Just so you know what I'm talking about, this is like the "multiply" blending in Photoshop. Webkit does support it tho. I hope they put it back on the specs and all browsers support it.
I went to #processing.js to ask about this and while there sephr, 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.
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!
EDIT: Thanks to Elke for creating a Facebook Fan Page. There is also a Facebook Group :D
EDIT 2: Yet another Facebook group. RRR, with a theme everyday and really talented artists.
I'm sure you prefer playing with the thing than watching a video tho... Here here!
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 context.globalCompositeOperation = 'darker'. This was on the HTML5 spec before but got removed. Just so you know what I'm talking about, this is like the "multiply" blending in Photoshop. Webkit does support it tho. I hope they put it back on the specs and all browsers support it.
I went to #processing.js to ask about this and while there sephr, 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.
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!
EDIT: Thanks to Elke for creating a Facebook Fan Page. There is also a Facebook Group :D
EDIT 2: Yet another Facebook group. RRR, with a theme everyday and really talented artists.
333 comments
César Alierta y las anotaciones de Youtube
13 comments
Ayer, en el perfil de Marc de Facebook, me tope con esta perla.
Sole, al verlo esta mañana, comentaba que echaba de menos poder poner comentarios en tiempos especificos, como en soundcloud.
Dicho y hecho!

Seguramente el video terminara con demasiadas anotaciones pero por ahora el experimento ha valido la pena :D
Sole, al verlo esta mañana, comentaba que echaba de menos poder poner comentarios en tiempos especificos, como en soundcloud.
Dicho y hecho!

Seguramente el video terminara con demasiadas anotaciones pero por ahora el experimento ha valido la pena :D
13 comments
Banning Internet Explorer
43 comments
Whenever I work on a html/javascript experiment I usually test it on Chrome. Once I'm done, I test it on Firefox and Opera. There is no Safari for Linux so I don't have an easy way for testing it so I usually assume it works as it's very similar to Chrome. The interesting thing is that the same code usually works directly on the other browsers. Just special cases like adding custom css properties (like -webkit-transform, MozTransform, OTransform...).
Of course, that's not the case with Internet Explorer. And to be honest I never really tried to make anything work on it. I believe that browser has made humanity lose a lot of time and money so making my experiments work will be like helping it to stay alive.
But I wasn't showing any error message. My experiments will just not work and people will mention it and complain. I really didn't want to add Javascript browser checks in each experiment either. However, there was a much simpler and efficient solution, add a rule on the .htaccess to redirect all the request from that browser to this page.
By banning all the request of that browser, not only I'm happier when developing but also I may move some of these users to a better browser, and at the same time, other developers won't have to suffer from these users.
Imagine if all the major websites did this. Wouldn't that fix the problem?
If you find the move interesting and you would like to stop supporting IE too, this is the code you'll need to put in you .htaccess file:
Just change the /projects/ie/index.html parts with wherever you put your own message/page.
EDIT: After Microsoft released a preview of Internet Explorer 9 some people suggested that I should remove the ban so they could test my HTML5 demos on the browser. That seemed a good idea, so the ban is removed. The bad news is that the browser doesn't seem to be doing too well.
Of course, that's not the case with Internet Explorer. And to be honest I never really tried to make anything work on it. I believe that browser has made humanity lose a lot of time and money so making my experiments work will be like helping it to stay alive.
But I wasn't showing any error message. My experiments will just not work and people will mention it and complain. I really didn't want to add Javascript browser checks in each experiment either. However, there was a much simpler and efficient solution, add a rule on the .htaccess to redirect all the request from that browser to this page.
By banning all the request of that browser, not only I'm happier when developing but also I may move some of these users to a better browser, and at the same time, other developers won't have to suffer from these users.
Imagine if all the major websites did this. Wouldn't that fix the problem?
If you find the move interesting and you would like to stop supporting IE too, this is the code you'll need to put in you .htaccess file:
RewriteEngine on
RewriteCond %{REQUEST_URI} !/projects/ie/index.html$
RewriteCond %{HTTP_USER_AGENT} MSIE [NC]
RewriteRule ^(.*)$ /projects/ie/index.html [L]
Just change the /projects/ie/index.html parts with wherever you put your own message/page.
EDIT: After Microsoft released a preview of Internet Explorer 9 some people suggested that I should remove the ban so they could test my HTML5 demos on the browser. That seemed a good idea, so the ban is removed. The bad news is that the browser doesn't seem to be doing too well.
43 comments
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
*profile

traditional id: Ricardo Cabello Miguel
based in: London, UK
more: github, twitter, twitpic, soundcloud and flattr
*affiliations
60fps, escena.org and xplsv.com.
*input
friends
aaron koblin
abscondorium
blackpawn
campbell imray
cardboard robot ninja pirate monkey
carlos ulloa
david o'reilly
diego f. goberna
iñigo quilez
jare
jesse kanda
jorge fuentes
kile
mike tucker
nanika
nuende
soledad penadés
tnghm
unit zero one
vadik marmeladov
zafio
zeh fernando
art
8bit today
build
cocos' island
flight404
hairy teeth
hi-res!
neave
nulla dies sine linea
patecreme
postspectacular
quel solaar
siggi eggertsson
tha.ltd
today and tomorrow
united visual artists
vvork
yugop
dev
andre michelle
alternativa
antti kupila
away3d
boostworthy
broken blog
bytearray
den ivanov
der schmale
drawlogic
fladdict
flash video
general relativity
gskinner
hidiho!
joa ebert
john grden
kaourantin
keitap
less rain
li
michael battle
nulldesign
papervision3d
pengin.swf
photon storm
pixelero
polygonal
quasimondo
sandy
saqoosha
sephiroth
simppa
tom.drastic.net
uve producers team
zero point nince
zupko
music
hunz
ochre
ronny pries
humour
wulffmorgenthaler
xkcd