blog mail me! feed

Archive for January, 2010

实现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