Solrex's profileSolrex Shuffling.LifeBlogListsNetwork Tools Help

Blog


    9/26/2008

    Drown in Papers

    实验室的 DNS 服务器挂了,没办法上网,顿时觉得挺没意思,就骑车回宿舍了。最近几天的效率挺低的,看不进去文章。汲汲地妄想早点找出点问题来做,却总是不得其门而入。偶尔稍微想得远那么一点儿,就发现别人早已写过文章。上天那,给我点儿灵感吧!

    这几天北京的气温骤降,已经到了着长袖长裤的时候了。晚上打羽毛球时,好不容易热出点汗,被冷风一吹,鸡皮疙瘩都要起来。但心境却不能因天气而冷却下来,杂杂呀!

    前天烦躁时看了篇我大学导师写的武侠小说《龙飞凤舞》,也是该先生闲暇时所作。身为数学系副教授,拥有数学博士和计算机硕士头衔的他,今年却又考取了历史系的博士,真是颇觉意外。不知道人生这路,到底还能有几个新起点?

    其实浮躁的另一个原因也来自于"十一"假期的临近。无论在公司或是学校,一个长假总是会影响成员的效率。谁也不想在长假前给自己留一个未完成的状态,所以总是盼望着能在长假前结束已有的工作且不愿开启新工作。

    不管如何,长假要开始了,我要回南京散散心,暂时忘掉这些事情吧。

    9/22/2008

    Dimensions: A Walk Through Mathematics

    维度:数学漫步

    开放数学电影《维度:数学漫步》(Dimensions: a walk through mathematics)是一部两小时长的 CG 科普电影,共分 9 个章节,讲述了许多深奥的数学知识,如 4 维空间中的正多胞体、复数、分形(fractals)、纤维化理论(fibrations)等等。这部电影以创作共用 署名-非商业用途-禁止演绎 3.0许可证发布,你可以自由下载和复制但不允许修改或商业使用。————援引 Solidot

    这部电影我已经下载下来好长时间了,今天才想起来看一点儿,发现有点儿意思。请看这部电影开篇的话:

    My name is Hipparchus. I lived in the second century before the birth of Christ, and I don't think I'd be bragging if I told you that I am the father of the sciences of Geography and Astronomy. You know, I wrote more than 14 books but unfortunately they have almost all been lost in the mists of time. I was responsible for the first catalogue of the stars, founded the field of mathematics called trigonometry and even invented the astrolabe. Fortunately, my brilliant successor Ptolemy, three centuries after my time inspired by my work, took up where I left off, and nowadays historians sometimes can't determine what was my contribution and what was his.

    我叫喜帕恰斯,生活在耶稣诞生两个世纪之前。如果我说我是地理与天文学之父,请不要觉得我很狂妄。你知道的,我至少写了 14 本书。但不幸的是,它们几乎都遗失了,我曾为星星编写了第一本目录,开创了数学中的三角学,还发明了星盘。不过幸运的是,我杰出的后继者托勒密,三个世纪 以后在我的工作启发之下,接手了我剩下的活计。如今,史学家们都无法确定,究竟哪些是我的贡献,哪些是他的。

    这不是一部常规意义上的电影,而是用数码图形手段制作的动画。里面并没有什么主人公,制作者通过动画图形来阐述对数学维度的理解。这个电影的网站是:http://www.dimensions-math.org/,网站上提供有下载链接。另外,中国科学院数学研究所的 FTP 也提供该影片英语和法语版本的下载,详情请点击:http://www.math.ac.cn/Dimensions.htm

    关于播放

    有很多人在播放这部电影时候遇到问题,暴风影音是没办法播放这部电影的,Windows 媒体播放器可以播放但无法加载字幕。这里我推荐两款非常优秀的开源播放器,SMplayer 和 VLC, 它们都有 Linux 和 Windows 版本。他们都能播放这部电影,但是由于本片中文字幕使用 UTF-8 编码,字幕加载可能有一些小问题。下面是使这两款播放器能够正常显示本片中文字幕的设置(它们的菜单项在 Windows 下和 Linux 下几乎没有任何不同)。

    SMplayer:
    Options->Subtitles->Default subtitle encoding: UTF-8
    如果是 Windows 系统,可能还需要在 Options->Subtitles->Font 中选择一下系统字体。

    VLC Player:
    Settings->Preferences->Video->Subtitles/OSD->Text renderer->Font:
    Linux(Ubuntu) 下找到:/usr/share/fonts/truetype/wqy/wqy-zenhei.ttf(可以换成系统中其它的中文字体)
    Windows 下找到:C:\WINDOWS\Fonts\simsun.ttc

    PS: 特别推荐一下 SMplayer

    我在 Linux 下和 Windows 下现在都是使用 SMplayer 播放器(不用提醒我它和 mplayer 关系)。除了它的界面在两个系统下保持一致,完美支持 GBK 编码字幕之外,在播放上还有几个好处让我觉得特别顺手(可以说是我原来用暴风影音时候梦寐以求的特性):

    一,支持三种速度的快进,分别用左右,上下方向键,上下翻页键。这样想跳过序幕时很方便;
    二,支持以行为单位上下翻动字幕,当字幕快了慢了只需要按两个键就能调整过来;
    三,自动纪录最后播放位置,再打开时自动跳到上次播放中止处;
    四,normalize声音很方便,当视频声音太小时,normalize一下就舒服多了。不是其它播放器没这个功能,只是太难找到,比如暴风用这个功能要过几层菜单。

    9/19/2008

    Automatically Track Information with Linux CLI Tools

    用 Linux 命令行工具自动追踪信息

    作者:杨文博 < http://blog.solrex.cn >
    地址:http://blog.solrex.cn/articles/auto-track-info-with-linux-cli-tools.html

    前一篇博客中说到我买票失败的经历,也充分表达了我想买一张二手座票的意愿。怎么办呢?只好到网上各二手火车票信息平台去找了。心肠不好的人肯定幸灾了祸地在想:"哈哈,这个倒霉的小伙儿该对着浏览器不停地按 F5 了!" 你才 F5 呢,你们全家都 F5。那是典型的 Windows 用户的想法,不要以为 Linux User 跟你一样傻。

    前面都是玩笑话 :),本文只是想介绍一下在 Linux 下有什么更方便的方法来做追踪信息的工作,以展示 Linux 的命令行工具有多强大(也响应一下 Eric 师兄的文章:完全用键盘工作-3:常用的命令行工具)。

    我们就拿火车网为例,通常情况下 Windows 用户为了在火车网上找一张二手火车票信息,会不断地到查询页面刷新,看有没有自己需要的车票。而一个 Linux 用户的做法会有何不同呢?一般来讲他会用工具来做这件事情,而不是在那傻刷,浪费时间。

    怎么做呢?有很多种方法,我这里来介绍一种比较好玩的方法,用脚本自动跟踪信息,如果有结果就发送一个 Gtalk 消息给自己。

    首先,写一个命令行发送 Gtalk 消息的脚本。其实我本打算用 freetalk 来做这件事的,奈何咱学识浅薄,不懂 freetalk 脚本该怎么写,也不知道 scheme 语言为何物。没办法,只好用 Python 来做了。下面内容就是用 Python 发送 gtalk 消息的脚本(需要 Linux 上装有 python-xmpp):

    #!/usr/bin/env python
    # -*- encoding: utf-8 -*-
    # Usage: gtsent.py "SOMEBODY@gmail.com" "Message"

    import xmpp
    import sys

    login = 'USERNAME' # without @gmail.com
    pwd = 'PASSWORD'

    cnx = xmpp.Client('gmail.com', debug=[])
    cnx.connect( server=('talk.google.com', 5223) )
    cnx.auth(login, pwd, 'python')

    cnx.send(xmpp.Message(sys.argv[1], sys.argv[2]))

    将以上内容保存为 gtsend.py 文件,chmod u+x gtsend.py,修改 USERNAME 和 PASSWORD 为你的另一个非[常用] gmail 帐户名和密码。这样执行 ./gtsend.py SOMEBODY@gmail.com "Message" 就可以给 SOMEBODY@gmail.com 发送消息了(当然了,前提是 SOMEBODY@gmail.com 好友列表中有 USERNAME@gmail.com,请注意这里大写只是为了方便阅读)。

    其次,写一个追踪网页,得到所需信息后自动发送 gtalk 消息的脚本。这个就更简单了,使用火车网提供的查询表单接口,用 wget 抓下来,再 grep 一下即可,bash 脚本如下:

    #!/bin/bash
    URL="http://www.huoche.com.cn/piao/2piaoserach.asp?ICheci=T65&type=0"
    RESULT=`wget -O - $URL | iconv -f gbk -t utf8 | grep -i -e "t65.*南京.*硬座.*2008-9-28"`
    if [ $(echo $RESULT | wc -c) -ge 5 ]
    then
    /home/solrex/gtsend.py "YOURSELF@gmail.com" "$RESULT $URL"
    fi

    将该脚本保存为 get_tickt.sh,chmod u+x get_tickt.sh。这个脚本的工作流程是:wget 以 GET 方式提交对 T65 转让车票的查询,得到的结果输出到标准输出,然后将 GBK 编码转换为 UTF8 编码,再 grep 看是否含有"T65 南京 硬座 2008-9-28"关键词。如果有的话,用 gtsend.py 发送一个提醒消息给自己 gtalk 帐户;如果没有结果,什么都不做。

    最后,将上面脚本加入 cron 列表每 10 分钟定时执行一次。 执行 crontab -e,添加下面一行即可(注意需要修改到该脚本的路径):

    */10 * * * * /home/solrex/get_ticket.sh

    然后呢,你就可以高枕无忧,开着 Gtalk 等消息吧。当然,不一定能等得到 :(,对我们来说 No news is BAD news...

    当然,根据不同情况,你可以把追踪的信息换成别的东西。比如追女孩子的时候,可以用上面方法来实时跟踪她的最新博客,实时跟踪她在 BBS 上的留言,永远保持自己沙发的地位,说不定人家就感受到了你的关心,然后...具体方法我就不教了哈...

    9/18/2008

    For A Railway Ticket to Nanjing

    今天北京开始预售 9 月 28 号的火车票,然后我做了三个愚蠢的决定:

    1. 4 点半到售票点,占到第一个位置却没有坚守。被售票点的人忽悠了一下,说他们那网速慢,想买到南京的票不太容易,不过硬座的话还有可能买到。然后我就犹豫了,决定还是坐地铁到北京站买票。

    2. 地铁 1 号线转 2 号线坐错方向。1 号线转 2 号线时,正好两边都有车停,我也不记得怎么看的方向指示盘了,糊里糊涂地就坐上到阜成门方向的车,上车即发现不对,只好在阜成门下,到对面坐车。

    3. 在北京站选择了一个错误的窗口排队。5 点多到北京站,其实人还是蛮少的,于是选择了一条短的队。但是,在我排了一个小时,已经进入前十位以后,万恶的北京站将该窗口关闭。后面可是有七八十号人啊,说关就关了。不得不重新选择一条,这时候已经 6 点半了,距放票时间 7 点只有半个小时,而这时我的前面至少有五六十人。(话说也奇怪呀,这两年我排队净排要关窗口的队了,在家,在南京,在徐州,在北京,怎么着得有五六次碰到这种情况,天那,难道 rp 真的有问题?)

    结果显而易见,没买到自己想要的票,不过还好落了张站票。哪位兄弟姐妹买到了北京到南京 28 号 T65 的座票,计划变更时一定要想着我!!!

    在北京,过节时想买张票真难啊!

    PS:为了让大家快速阅读流水帐文章,我决定以后对此类文章的关键语句加黑,以免浪费大家时间。

    9/11/2008

    Under The Law of Jungle

    今天白银给我说,他的某室友跟他感叹了一句话:"要是我有你那么用功,我一年半就能毕业了。"我给他说,碰到这种人,你只能一笑了之。

    没想到很现的是,晚上我也让人给整了一把。大家一起下去打球,有两个人加我们,一个老外,一个 30 岁左右的中国人,配双打。他们两个貌似比较熟,他们两个打的确实也蛮好的,我和那中国人配对,打了两局,输了两局。大概和我配对那大哥觉得输了很不爽,就 开始指责我,我不小心丢了一个球,他就讽刺这么好的球都没接到,我说手腕有伤使不上劲,他就开始唠唠叨叨说不是手腕的问题。然后接着我一个接发球被球场旁 的灯晃到了眼睛,我说晃到眼了,他那面就来劲了:"为什么总是你晃到眼,为什么不晃别人?"我实在无语了,大家都是来打球的,配对不说尽力合作却老指责别 人。郁闷地不行,就发飙了一下,对着他吼了几句,然后下场不打了。(我唯一后悔的是,这是我们占的球场啊,为啥我没赶他走自己下场去了?看来愤怒的时候真 的很难保持理智 ^_^)

    我后来想了想,这种事情怨别人没礼貌也没用。之所以会发生这类事情,关键还是在于咱打的不够好,在运动场上仍然是遵循丛林法则,谁能赢球谁就说了算。假如我在球场上能老得分,怕是没人会埋怨我。

    每次到火车站买票或者坐车,"丛林法则"这个词总会浮现在我脑海里。在黑压压的一群人中拥着往前挤,跟一群动物抢吃食有什么区别?你只有自己努力去 争、去抢,变得更强,才能得到想要的。其实引申到学校里也一样,不要想着和导师有什么公平的交流。除非你能成为导师项目中的关键人物或者能发牛 paper,否则和老师做对等的交流就是奢望,他能不鄙视你就已经足够 nice 了,所以想获得心理上的平衡,还是努力去证明自己吧。

    男人是在鄙视目光的激励下变强的!

    9/4/2008

    Douban Friends Map

    豆瓣好友地图

    想知道您的豆瓣好友都分布在地球的哪个角落吗?想把这些家伙都揪出来标记在一张地图上吗?也许您想尝试一下这个东东:豆瓣好友地图。(本文最下面就是 solrex 的豆瓣好友地图) 这是一个完全以兴趣为引导的小项目,欢迎您提出您的宝贵建议来帮助完善它,当然了,如果您能顺便在博客里进行一下推广就更感谢了!

    LionGG 是我的一个好朋友,他和 Classicning 共同开发了这个豆瓣好友地图。很遗憾那,我很久以前就有了这个想法,而且曾经眉飞色舞地向室友描述了这个应用,只是苦于时间和知识的局限没有实现,否则这个页面就会 host 在 solrex.cn 下了 :)

    豆瓣好友地图的开发基于豆瓣、Google Map、Google Chart 和 HeatMap 提供的 API 接口。如果您是 GIS 的爱好者,或者有足够的好奇心,您也可以把这个页面的 js 脚本下载下来看个究竟,没准会找到对您有用的东西。

    它的作者 LionGG 毕业于南京大学地科系,目前在中科院地理所攻读博士学位。他平常有事儿没事儿会写一些有关地理信息系统(GIS)的文章,也是一个积极的"社会观察者",他的博客在这里,感兴趣的话就去逛逛吧!

    豆瓣好友地图

    9/3/2008

    A New Attack Against Tor

    一个新的对 Tor 的重放攻击方法

    Tor 是一个旨在抵御流量分析的匿名网络访问服务,它也可以被用为穿透网络 censorship 的工具,它的官方网站为:http://torproject.org(很可惜的是,大陆用户已经无法正常访问这个站点了)。

    由于 Tor 在中国的使用还算比较广泛,我的朋友中也有不少使用它作为穿墙工具的,我想关于它的安全问题应该有人感兴趣。这篇博客将简要介绍 ICC(International Conference on Communications, 世界通信大会) 2008 的一篇论文A New Replay Attack Against Anonymous Communication Networks中描述的对 Tor 匿名性的一个很有效的攻击方法,这篇论文荣获了 ICC 2008 Best Paper Award(好好好好羡慕啊~~~)。

    Tor 网络是由洋葱路由器(下简称路由器)、目录服务器和洋葱代理服务器(下简称代理服务器)组成的。所谓洋葱路由,就是用户发出的消息会被多层加密,每到一个路由节点,路由器解密一层来获得下一跳信息,就像剥洋葱一样一层一层解密,到最后一层才是用户的原始消息。

    Tor 的工作方式是经过多次转发消息来保护原始地址不被侦知。其进行一次通信的流程是:用户在 PC 机上安装洋葱 socks 代理服务器,设置浏览器或应用程序通过本机的代理服务器访问网络;代理服务器从目录服务器得到可用的路由器列表,在用户发起 TCP 请求时,本机代理服务器选择中间通过哪些路由器转发消息,然后将用户的 TCP 包多层加密后发送出去;转发路径上经过的路由器对消息逐层解密转发,最后一跳的路由器(出口路由器)和目的主机进行正常的 TCP 通信,然后将返回的消息按照原始路径发送给用户。

    这样入口路由器知道通信的发起者却不知道接收者,中间路由器只管转发,而出口洋葱路由器知道通信的接收者却不知道发起者,这就保证了用户访问网络的匿名性。

    A 文中采取的攻击方法是:假定攻击者可以控制入口路由器和出口路由器,由于 Tor 采用计数器模式的 AES 加密算法(能否解密和包的顺序有关),那么在入口路由器处重放已经发送过的消息(包的顺序被打乱),就会造成出口路由器解密失败,收到错误的数据包。由于 攻击者控制了入口和出口路由器,那么通过将入口路由器重放消息的时间和出口路由器检测到错误的时间联系起来,就能确定这次通信的源和目的地,破坏了网络访 问的匿名性。

    更坏的是如果消息的重放发生在用户通信的末尾,在用户结束通信后和 TCP 连接断开之间,用户甚至都不知道他的网络行为已经被发现。

    虽然假定攻击者可以控制入口和出口路由器看起来是一个很强的条件,但 A 文中通过实验验证了拥有洋葱路由网络的路由器并成为入口并不算很难(Tor 网络本身就是由许多志愿者的主机组成的),再加上一个修改过的代理服务器软件,完全可以实现对使用该软件的用户的路由选择策略的控制。如果攻击者拥有足够 的资源(比如某些强力部门),使用足够多的主机加入 Tor 网络,根据 Tor 的路径选择策略优化这些路由器的分布,也有可能实现上述条件。

    总的来说,相比与其它一些对匿名网络流量进行监控的攻击方法,A 文的攻击是相当简单直接并且高效的。我简单查看了 Tor 软件的 ChangeLog,没有发现它对这一攻击进行有针对性的修改(也许是我看的不认真)。

    所以呢,对中国用户来说,通过 Tor 来穿墙是可以的,但是过于相信 Tor 的匿名性并且用其去发布敏感信息或者进行其它不法行为是要三思而后行的,这也就是为什么 Tor 软件自己也说:
    This is experimental software. Do not rely on it for strong anonymity.