Tiny LifeStream widget available on sunng.info

首先推荐samson的stdout,这是一个LifeStream Web应用(针对Loser的LifeStream称为LoserStream)。你可以从github上获得代码,参考samson的deploymentcustomization文档,在一二三四五六七八九十十一十二……分钟内搭建一个自己stdout,至于是不是LoserStream你自己看着办。

本来打算在自己的主机上搭一个实例的,怎奈怎奈我那CentOS5的主机。所以我说我们这些CentOS用户最伤不起了!!!源里有Ruby有个毛用!!1.8.4,泥玛gem都装不上!!还要去找1.8.6的代码来编译,有没有!!!好不容易装上gem了,gem 1.6.1说找不到Win32API!!!干掉重装1.4.5!再装ruby-sqlite3,源里的sqlite3版本又不行,装不上,有没有!!!有没有!!!

最后我无奈了,还是用老朋友Yahoo Pipes吧。拖一拖拉一拉神马都有了,页面上整点咱最擅长的document.getElementById就成了。你可以在http://sunng.info找到这个东西,现在这个源里收录了:

  • blog
  • 豆瓣
  • github
  • osm editing
  • twitter
  • reddit like

这些也是我主要混迹的地方了,遗憾就是bitbucket居然没有个人的RSS输出。倒是可以通过他们的API获得,不过在Pipes里要多拖点东西,所以我先琢磨一下再说吧。网易八方我说过了,不愧是互联网产品经理驱动的东西,连个RSS输出都木有。饭否嘛现在作为扯淡专用场所就不收录了。

说实在的把这些东西都聚合在一起还是挺吓人的,所以我把他稍微藏了一下。

还有,今天日本地震,祝daf同学平平安安平平安安。

Correct source file encoding with one liner

Amoeba项目最早的代码可以追溯到2008年了,其中有多个作者贡献代码,因为一直在Windows下开发,所以没有使用UTF8编码,最近大家统一到UTF8,遇到了代码编码不正确的问题。

于是我们需要统一解决一下这个问题:

iconv -f gbk -t utf8 -o ConnectionManager.java ConnectionManager.java

这样可以把gbk编码的源文件转换为UTF8,原地转换。

推广到整个代码目录,用find和xargs做,xargs通过-I来制定一个占位符。

find . -name "*.java" -type f -perm +600 -print | xargs -I _ iconv -f gbk -t utf8 -o _ -c _

结果发现iconv运行中报了错,进一步检查发现一部分代码正常转换了,另一部分却乱码了。原来,两个作者的代码分别是gbk和gb2312,这iconv转换的时候两种编码并不兼容。这就麻烦了,必须对代码分别处理才可以,区别代码的编码,暂时就用Java源文件里的作者名字。又看了一下find似乎没有对文件内容过滤的条件,不过不要紧,我们可以用xargs做:

find . -name "*.java" -type f -perm +600 -print | xargs -I _ sh -c 'grep -q hexianmao _ && iconv -f gb2312 -t utf8 -o _ -c _ '

对这位hexianmao作者的代码,我们利用grep进程的返回值来进行判断。grep的-q参数相当于>/dev/null。这里有一个tricky的地方,再xargs里我们不能直接用&&来组合命令,不过可以通过sh -c这样的方式,并且其中的占位符会被xargs合适地替换掉。

这样执行之后,这位作者的gb2312代码就被成功转换了。而另一部分作者的gbk代码也可以用同样方式解决了。

When nodejs meets mapnik

tilelive.js是一个基于nodejs的web地图工具,帮助用户快速查看他们创建的地图样式。tilelive.js是Mapbox众多产品中的一个,你可以通过tilemill了解更多。

要运行tilelive.js,你需要安装一系列软件。

安装mapnik

首先需要安装mapnik2,注意并非是目前的稳定版本0.7.1,而是开发版本。
签出SVN代码:

svn co http://svn.mapnik.org/trunk mapnik-trunk

按照Mapnik的文档描述进行安装。

安装node依赖

推荐你安装最新的node 0.4.2和npm 0.3.1。

安装npm后执行

npm config set unsafe-perm true

去除超级用户运行npm时的警告。

接下来就可以安装一系列node modules了:

sudo npm install mapnik
sudo npm install carto
sudo npm install generic-pool
sudo npm install underscore
sudo npm install node-get
sudo npm install step
sudo npm install express
sudo npm install sqlite3
sudo npm install compress

签出 tilelive.js

tilelive.js并不兼容最新的node 0.4.x和express 2.0.0,所以你可以签出我fork的版本:

git clone git://github.com/sunng87/tilelive.js.git
git checkout new-fork

运行:

./bin/tilelive_server.js examples/stysheet.xml

打开浏览器,访问 http://localhost:8888/ 即可
screenshot_001