Sunng's Canvas based Heatmap API

Glad to announce my works this morning: A simple heatmap API based on HTML5 canvas.
canvas

The programming interface is rather simple now. To create such a heatmap, you just new a heatmap object by:

<canvas width="300" height="215" id="canv"></canvas>
heatmap = new HeatMap("canv");

Then read your dataset and push data into the heatmap:

heatmap.push(x, y, value);

At last, spread the data and get the canvas rendered:

heatmap.spread();
heatmap.render();

Now you got it.

For advanced usage, you can specify the resolution of heatmap by px:

heatmap = new HeatMap("canv", 2);

Large value will gain performance with low image quality.

Also, you can specify a value to define the attenuation value of each px.

heatmap.spread(5);

Finally, there is an option to use your own color schema for heatmap generation.

heatmap.render(function(value, maxValue){
    var light = value / maxValue * 100;
    return "hsl(20, 75%, "+light+"%)";
});

The parameters passed in are current pixel value and max value in whole context.

That’s all the toolkit. More functionality and options might be added in future. Grab it from my bitbucket page:
http://bitbucket.org/sunng/daily-coding/src/tip/canvas-heatmap/

There is a demo page which you can test the api by clicking canvas:
canvas-raw
then click heatmap button!
canvas2

This is the new year gift for my readers and my dear friends !

解决Ubuntu Openbox无法启动的问题

今天在工作用的ArchLinux上安装了用Openbox取代了GNOME桌面,感觉良好,回来尝试一下在Ubuntu上也做同样的事情。不料遇到问题,在完成基本的配置之后,Openbox Session无法启动,总是自动跳回gdm。查看.xsession-errors,是gnome-setting-daemon报错:

(gnome-settings-daemon:2519): GLib-CRITICAL **: g_propagate_error: assertion `src != NULL’ failed

既然是gnome-settings-daemon报错,就在.config/openbox/autostart.sh中注视掉和gnome-settings-daemon相关的部分:

# Make GTK apps look and behave how they were set up in the gnome config tools
#if test -x /usr/libexec/gnome-settings-daemon >/dev/null; then
#  /usr/libexec/gnome-settings-daemon &
#elif which gnome-settings-daemon >/dev/null; then
#  gnome-settings-daemon &
# Make GTK apps look and behave how they were set up in the XFCE config tools
#elif which xfce-mcs-manager >/dev/null; then
#  xfce-mcs-manager n &
#fi

进而可以启动Openbox Session了,但是发现Conky仍然无法启动,经过搜索是sleep的时间不够长导致的。而根据launchpad上上的讨论,gnome-settings-daemon也可以在Openbox Session启动后正常运行,于是可以这样设置autostart.sh

(sleep 20 && conky 1>/dev/null 2>/dev/null) &
(sleep 2 && tint) &
(sleep 5 && tilda) &
(sleep 20 && gnome-settings-daemon 1>/dev/null 2>/dev/null) &

tint和tilda对启动顺序没有明确的要求,conky和gnome-settings-daemon需要设置一个较长的等待时间。

这是Ubuntu中Openbox的一个bug,可以在此跟踪:

https://bugs.launchpad.net/ubuntu/+source/openbox/+bug/459005

顺手展示一下我的Openbox桌面
myopenbox

openbox / tint2 / conky / tilda 还没来得及认真配置,呵呵。

再有,Ubuntu源里的的tint2版本很低,问题不少,不支持宽度的百分数配置,不支持systray等配置。建议安装开发版本:

http://code.google.com/p/tint2/wiki/Install#For_Ubuntu_9.10_%28Karmic%29