blog mail me! feed

Revive & Death.

两周前接到小六电话, 说我的域名需要备案.
还在琢磨着买VPS迁移, 209就以一种琢磨不透的方式挂掉了.

把209从机柜上拖下来, 打开机箱, 拆下来电源.
尽管事后我才想起, 当天测电压输出的时候, 竟然愚蠢的没有短接4脚和5脚, 但总归事实是这块电源再也无法点亮209的主板了.
于是207被短暂的停止工作, 剥皮掏内脏, 24pin接口被插到209上, 以测试这台积满了灰尘的白色1U服务器, 是否已经彻底的死掉了.

除了一个主板上看起来微微有些凸起的电容不让人怎么放心外, 总归207的电源还是成功的让209启动起来, 通过了自检.
接着的问题, 就是一个经典的, “我们图省事买了一台高度定制化和充满了非标准化接口的设备, 现在这玩意儿坏了, 我们怎么办”的困境. 现在我们有一个挂掉的OEM 1U电源, 只有一个24pin的接口, 和一个8pin, 给SCSI板供电的接口.

万能的淘宝上貌似找不到这样的电源. 偶尔瞥见有的电源带8pin接口输出, 都无一例外是+12v给CPU供电的.
于是我和万能的科学帝Aw讨论了很久,如何改造一个标准电源的问题.
山寨如电工胶布把剪下来的8pin头和砍头的两个IDE头拼接的方案,到最后的,转换头的方案.

然后我们手里就有了,嗯,8pin和IDE头子的塑料件,导线,和金属接头.
接下来是焊接和拼装工作,直到出现了一个看起来有些诡异的转接头.
再接下来,209被成功的点亮.一堆臃肿的电源线故被鼓囊囊地塞进狭小的机箱,新电源狭长的尺寸使得它没法像OEM电源那样被固定,甚至它使得机箱壳子都没法合拢——不过, 让这台轰鸣的机器重新复工, 又还能奢求什么呢.

关于209重新复活的故事,我最喜欢的部分,就是这个转接头的地线.
该死的,那天我们竟然没有找到愿意开零卖给我们黑线的奸商.
于是,四根粗硕的紫线,让这个转接头,充满了山寨的色彩.

当209重新点亮的那一刻,
我满脑子的思绪立刻回到了两周前.
因为莫名其妙的被死亡而不了了之的备案和blog迁移的事情, 又变得现实起来.

所以,最终,又回到了这个博客死亡的话题上了.

该换雨刷器了, 该换….

大雨敲的车窗满是光影和节律, 雨刮器嗞嗞刮过, 留下一道让人眩晕密布的轨迹.

从12月27日不眠的夜晚, 到3月13日, 待着日出, 把早餐小心翼翼的放在盘子里的清晨,
开过了1428公里, 假期和暖冬, 伴着不规律的睡眠, 晚餐, 浑浑噩噩的思考.

有一只黄色长毛的猫, 游荡在这个寂静的公寓里.
有一些泛蓝泛黄的灯, 开开关关, 忘了时间的点亮, 熄灭.
有一次次的带着寒意日出的入眠.
有狼藉的厨房, 随处摆放的杯盘, 琐碎的冰箱.

带着异样的期盼, 对未知的惶恐, 对寂寞的习惯过完整个寒假,
偶尔走在熙攘的从学校宿舍到学校的小路上, 惊讶的感到陌生.

世界在雨滴和刮花的窗玻璃中模糊, 只剩下些许的轮廓和大片的色彩.
几丝寒风中清冷的黄昏, 不知道重复了多少次相同的一天的场景.

守着蓝色墙壁的卧室, 开开关关的灯,
哼着歌曲的音箱, 惨白的屏幕, 咕噜咕噜的鱼缸, 两面看着头发长了又长, 张牙舞爪的镜子.
一只悠闲的猫, 总是在黑夜里感到不安, 一路点亮灯泡, 整夜忘了关掉的我.

有的时候, 我真的很恨孤单.
自言自语先生你好, 该换雨刮器了.
你的世界在这个雨水开始降临的季节里, 总会时不时的这样, 变得一切模糊.
于是你就迷失在某个城市的角落里.
关掉雨刮器, 滴滴答答, 直到红灯变绿, 你的生活开始继续.

自言自语先生你好, 很感谢你每天都陪我聊天.
还有, 我们的面包吃完了.

实现Github的代码仓库权限控制.

Github这个social coding的代码托管网站风骚得总有让人push, 攒蓝条的冲动.
以上是题外话.

最近回头去, 把以前断断续续没写完的Project gitar(web端的多用户仓库管理界面)继续拾起来开发,
也遇到了些问题: 比如, 如何实现github那样的, 对用户的公共仓库进行权限控制,
今天仔细翻了翻sshd和git的文档, 终于找到了一个解决方法.

[1] 修改sshd_config, 将PermitUserEnvironment设置为yes, 以保证能够在authorized_keys文件中, 对环境变量进行设置.

[2] 对于每个用户提交的RSA公钥, 在其

ssh-rsa AA….== foo@bar

的前面, 加上

environment=”GITAR_USER=username”

这样用户通过了公钥认证后, 当前的session的环境变量中, 即保存了用户的gitar用户名.

[3] 使用git hooks, 匹配环境变量 $GIT_DIR 路径中所包含的用户名信息, 和$GITAR_USER 中的当前用户名,
用户名不匹配时, 即通过产生不为0的exit code, 终止远端的push操作.

[4] 当然Github中还可以添加collaborators, 也可以对特定仓库添加public keys, 可以通过扩充用户session的环境变量来实现目的.
或者, 也可以使用shell脚本调用一个python脚本, 将 $GITAR_USER 的值与数据库中的collaborators进行比对.

X-Accel-Redirect的一点教训.

栋力博客使用的是wpmu, 不过版本比较低了, 因此wp-content/blogs.php中还没有用X-Sendfile或者X-Accel-Redirect头来处理静态文件的代码.
于是乎, 很久以前做了一个基于nginx和X-Accel-Redirect的hack,  不过今天bluef提醒我说静态文件的Content-Type有问题,
回头去看了下NginxXSendfile模块的文档, 才发现里面提到:

You should also know that the following headers aren’t modified by nginx:

Content-Type
Content-Disposition
Accept-Ranges
Set-Cookie
Cache-Control
Expires

于是把wpmu原来的处理mimetype的函数加了回去.

当然, wpmu 2.9.1.1的这个blogs.php已经很完善了, 可以直接通过配置, 支持X-Sendfile, X-Accel-Redirect头的同时, 也有了较好的缓存控制.
改天有空可以考虑把栋力博客迁移到新版本上去, 最担心的还是栋力博客启用的大量自定义插件的兼容性问题.

土鳖国真是个自卑的畸形国家.

中国互联网是开放的,中国也是互联网发展最活跃的国家,到去年底,中国网民达3.84亿,网站达368万个,博客1.8亿。中国宪法保护公民的言论自由,推动互联网的发展是我们的一贯政策。中国有自己的国情和文化传统,中国对互联网坚持依法管理,符合世界通行做法。

【该评论已关闭】

公交路线–>KML

如图, TG的漂移立功了...

如图, TG的漂移立功了...

下午坐82路回家, 看到一站”新南门”, 但是实在难以揣测这个站点是在府南河的哪一头, 为了避免少走弯路, 提前在滨江路下车了.
车还在浆洗街的时候, 摸出手机, 打开Google Maps看了看, 最后发现无法显示具体的公交线路图, 作罢.
回家后有点无聊, 就动手自己写了一个.

这个API的一个示例: http://tremblefrog.org/bus.php?lane=56

56是公交线路编号, 嗯, 这个URL里面没有城市.
设计得比较山寨, 只能支持成都的公交查询.
打算明天扩充一下功能, 顺便加一个URL Rewrite.

关于这个API怎么用:
你可以直接在(手机)浏览器中访问这个地址, 即会得到一个生成好的KML文件.
与KML关联的程序(Google Maps, Google Earth)可以直接打开.
你也可以在手机版的Google Maps中使用”搜索”功能, 搜索这个URL, 不一会儿就会看到结果显示了.

已知的bug: 地图漂移. TG的这个政策太恶心了.
你要知道, 我做这个web service的初衷是因为不知道公交站具体位置在哪里,
现在漂移了一条街, 这个破玩意儿还有毛用.

*UPDATE*
感谢来自dongmeng110的研究, 现在已经加入了偏移补偿, 可以正常显示了 :)
(maps.google.com的卫星图显示因为本身没有偏移, 补偿后反而会有偏移 -.-)

Read the rest of this entry »

TODO List.

寒假的一些简短计划, 写在这里好了:

  • 钻研Biopython和numpy, 用Biopython和numpy重写procadj, 完成后续的最小生成树部分的.
  • 额, 多看看Computational genomics, System biology, Functional genomics, Comparative genomics的paper.
  • 完成S. cereviase 基因预测的项目, 包括manuscript, 以及可能的annotation的尝试?
  • 分子生物学, 生物信息学, 数据挖掘, 算法设计的教材再认真的看看.
  • Random Forest, HMM.
  • Metagenomics的了解, 包括数据获取, 基本研究方法等等.
  • 准备生物医学信号处理的缓考考试 -.-#

郫县豆瓣.mobile

很久以前做了个豆瓣-电子科大图书馆馆藏查询的Bookmarklet/Greasemonkey Script,
在图书馆借书的时候才发现手持设备根本没法查馆藏信息, 悲剧啊!

最近一直在看Google App Engine的文档, 就打算写个App来体验下.
于是就有了这个项目: 郫县豆瓣.mobile.

名字来源于电子科大幼儿园郫县金凤村附属电子高专,和豆瓣.

功能很简单, 就是利用豆瓣的API查询图书, 然后同时查询图书的馆藏状态.
把服务跑在GAE而不是栋力的服务器上的坏处是:

  1. 电子科大的DNS经常抽风, 外网访问图书馆系统不稳定
  2. 访问延迟偏高

昨天最开始测试的时候, urlfetch不停的超时, 最后不得已, 还是在209上搭了个桥, 囧.
稍微修改了下原来用PHP写的Web Services, 支持多个请求合并, 这样可以减少urlfetch的调用数目.

不过既然做了个网站, 就打算把原来只停留在TODO list上的features全部实现了,
包括:

  • 用户借书清单, 对我这种很久去一次图书馆借一堆书的人省得用纸笔了
  • 图书自动续借, 懒人专用
  • 图书借阅信息双向同步(比如借了本书就在豆瓣上标记为”在读”, 归还后标记为”读过”), 懒人专用
  • 归还通知, XMPP的也好, 邮件的也好, 甚至Twitter的也好, 看有没有精力折腾吧.

比较落后于时代, 在郫县豆瓣.mobile里也是第一次用Google Analytics,
不得不说Google Analytics和Google App Engine的确是简单好用到极致了.

最后, 郫县豆瓣.mobile项目是开源的, 基于Apache License 2.0发布,
代码托管在Github, 地址: http://github.com/killkeeper/Douban-UESTC-Library-Mashup-Mobile

:)

郫县豆瓣.mobile

2010.

咳咳, 我就这么期盼下.

-.-

把Nodebox的Graph库移植到了Shoebot

Nodebox强大之处在于, 有无数第三方的扩展库, 可以快速的实现数据处理和可视化.
Graph就是一个很方便的用于图论可视化的扩展库.

不过Nodebox是Mac-only的(基于Cocoa), Shoebot是其基于GTK+和Cairo的移植.
断断续续花了两天时间把graph库移植到了shoebot下, 一些诡异的细节问题折磨了我n久.

经过了对原graph库的一些hack, 现在基本上可以正常的跑起来了.
除去对graph库的hack外, 我也改了不少shoebot的源码,
一方面是使得shoebot的命令调用更兼容Nodebox, 一方面是移植了部分Nodebox更新后, shoebot还没有移植的功能.

先放一张example图, 改天把源码再仔细检查下, 就放到github上去.graph_ex1

Next entries »