Visualizing OpenStreetMap Nanjing Contribution

早上在prismatic上看到mapbox的一篇博客,介绍通过TileMill可视化OSM的贡献者,非常酷。于是我在南京的地图上也做了一个这样的可视化。

一个详细的大图在这里。虽然只做了南京的五个主要贡献者,基本上涵盖了大部分数据。

图例就不专门输出了
[user = 'Sunng'] { marker-fill: @magenta;}
[user = 'fuwuyuan'] { marker-fill: @blue;}
[user = 'sinopitt'] {marker-fill: @yellow;}
[user = 'larryy'] {marker-fill: @green;}
[user = 'zhengz'] {marker-fill: @red;}

MapBox家的东西真的非常酷,这家的技术以nodejs为主,围绕osm开发了不少产品。最近比较大的新闻,比如4sq转到osm上,其实就是转到这家的osm服务上。有兴趣你可以关注一下!

为WebWorker设置正确的路径

WebWorker的路径通常是写在代码源文件中,而且这个路径并非其相对父js文件的相对路径,而似乎是相对页面的路径。所以指定一个正确的可随处部署的路径变得有些麻烦。昨天有人给HeatCanvas提了这个问题我才想到上网搜索了一下,有一个还算挺不错的办法。

写一个getPath函数,从document里找到父js的路径,拼到Worker的名字上。对heatcanvas.js这个文件来说就是:

HeatCanvas.getPath = function() {
    var scriptTags = document.getElementsByTagName("script");
    for (var i=0; i<scriptTags.length; i++) {
        var src = scriptTags[i].src;
        var pos = src.indexOf("heatcanvas.js");
        if (pos > 0) {
            return src.substring(0, pos);
        }
    }
    return "";
};

因此现在HeatCanvas已经解决了这个路径问题,现在这个库应该更好用了。当然如果你改了我的文件名我就无话可说了。

Visualize Reddit upvotes by subreddit

这是我reddit上所有的upvote在各个subreddit上的分布情况,这个情况还是可以说明我是个普通青年。
Reddit upvotes visualization

排在前几位的分别是

  • Programming
  • Linux
  • Python
  • f7u12
  • Clojure
  • Ubuntu

如果你还不了解什么是Reddit:Reddit是一个巨大的社会书签+论坛网站,他的频道叫做subreddit,每个频道有一个相应的主题,涵盖了从IT技术到新闻到生活的各个角落。

这些数据是通过下面的Clojure程序获得(使用reddit.clj库),并通过jfreechart展现出来的。

Substract a vector from a matrix in Octave

假设你有一个矩阵:

A = [1,2;3,4;5,6]

以及一个矢量:

B = [2,5]

你希望对A的每一行元素对元素地减B,例如第一行

[1-2,2-5]

但你不希望用循环完成这个工作,那么你可能想到利用B创建一个和A一样维度的矩阵然后进行.-:

C = [2,5;2,5;2,5]
A .- C

在Octave中可以利用repmat这个函数获得C:

C = repmat(B, length(A), 1)

但是对于大矩阵来说这是一种对内存的浪费。

更好的方法是利用bsxfun:

bsxfun(@minus, A, B)

bsxfun在octave的文档中似乎鲜有提及。

手动设置Fedora15网卡

今天上午的Fedora更新,版本为0.8.999.3的NetworkManager会致使NetworkManager和network service的版本不一致,从而导致网络功能无法使用。而这个时候要通过yum downgrade NetworkManager*降级又没有网络连接可用,悲剧。

这时只有手动设置网卡了。service network restartservice NetworkManager restart都报告失败,ifconfig查看网卡,只有本地回环启动。

接下来接上网线,通过 ifconfig -a 查看所有的网卡接口,例如我的接口叫做em2.

启动网卡
ifconfig em2 up

查看网卡情况
ifconfig em2

如果没有获得ip,可以通过dhcpclient获得ip
dhclient -4 em2

再查看网卡情况,如果获得了ip,可以尝试ping www.baidu.com,如果出现network unreachable的报错,需要再配置一下路由信息,其中gw是你的网关:
route add default gw 192.168.1.1

这时你的网络应该暂时可用了,立刻执行yum downgrade NetworkManager*降级吧。