协作翻译

本学期体育课选的板球。某节板球课上,快下课的时候,老师开始向大家布置一个作业:翻译。
每人发两到三页复印材料,来自于某本板球初学者启蒙的书籍。几周之内,必须完成这些材料的翻译,上交到网络学堂去。
过了几天,网络学堂上还挂出了一些板球名词的标准翻译,说让大家照着这个翻。

翻译工作倒是比较轻松,毕竟也就几页,一会儿就能够完成。
翻完之后我在想,这个不就是协作翻译么。类似于wikipedia的方式,每人贡献一小部分,合起来就是一项成品。
这个办法倒是不错,比如说看见一本外国教材,没有中文版,然后找上这个课的学生,每人发几页,翻译一下交上来,集中起来就成了翻译版了么。

但是也有些问题,比如怎么保证翻译质量。估计这些译稿最后还是要人工审核一遍,否则不但文字不统一,错漏之类的应该也不少。
另一个是版权的事情,别人没有授权,你随便翻译了,就算不谋利也不见得就可以。不过其实这方面学校盗版的事情干得多了。不谈从前那个算法导论中文版,就说我上过一门课,那门课的教材不印了,外面买不到,学校就靠复印解决问题。这个现象应该也很常见吧。

新的键盘 & usbhidaction

从同学那边借了一个键盘用,反正他有好几个键盘,这个放在旁边也不用。型号是 Microsoft Natural Ergonomic Keyboard 4000,很大的一个键盘,还是人体工程学设计的。
装载ukbd和uhid模块,插上键盘,显示出来两个设备: ukbd0 和 uhid0。
貌似ukbd0马上就被Xorg接受了,插上后按键就能够被Xorg接收到。
而那个uhid0,貌似就是用来发送特殊键的了。这个键盘上有不少特殊键,比如一对滚轮一样的Zoom键,Back/Forward, 控制音量和播放器的,启动程序的,以及可以自定义的特殊键。
研究了一下,有两个现成的工具。usbhidctl能够接受并显示 uhid 设备发过来的信息,而 usbhidaction 能够根据预先指定的配置文件,在接收到 uhid 设备的时候,执行对应的程序。
其实 FreeBSD 自带的 usbhidctl 和 usbhidaction 都有问题,他们对于 Report ID 这个HID设备的参数没有处理好。
一个HID设备允许其上的各个组件利用同一个接口发送信息,而这些信息就通过 Report ID 区分。在信息格式描述符中提到 Report ID 的设备,在发出来的数据包的前面会多一个字节,就是这个数据包所属部分的Report ID。
usbhidaction没有处理这个多出来的字节,导致它每次都少收一个字节,然后再收一个一字节的包…… 改了就好了。但是这个修改其实涉及到libusbhid,因此光修改usbhidaction还不行。但是要把这整个需要修改的地方做成patch提交,还要花一些功夫。
于是我改了一下 usbhidaction 和 usbhidctl,还有libusbhid,临时把 Report ID 指定为1,并且根据描述符的处理结果决定接受的字节数。原来的 usbhidaction 默认的 Report ID 是用一个ioctl获取的,这个令我难以理解…… 不是可以有不止一个么…… 关于这个,我发了封信给freebsd-stable,但是没人回…… 看来还是需要完整的patch才比较容易得到接受。
顺便贴一下我现在用的 usbhidaction 的配置文件。我改了devd.conf使得插入键盘的时候自动运行之,效果还是不错的。
 1 # Volume Control: Up, Down & Mute
 2 Consumer:Unassigned     233  0   /usr/sbin/mixer vol +3
 3 Consumer:Unassigned     234  0   /usr/sbin/mixer vol -3
 4 Consumer:Unassigned     226  0   /usr/sbin/mixer vol 0
 5 # Pause or Play
 6 Consumer:Unassigned     205  0   /usr/local/bin/mpc toggle &
 7 #                                alt+F11
 8
 9 # Calculator
10 Consumer:Unassigned     402  0   su henryhu -c “/usr/bin/env DISPLAY=:0 tiemu &”
11
12 # Back & Forward
13 Consumer:Unassigned     548  0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xdotool key alt+Left”
14 Consumer:Unassigned     549  0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xdotool key alt+Right”
15
16 # Zoom Up & Down
17 Consumer:Unassigned     557  0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xdotool click 4”
18 Consumer:Unassigned     558  0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xdotool click 5”
19
20 # 1 .. 5
21 Consumer:Consumer_Control.Microsoft:0xff05  1   0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xdotool key ctrl+Up”
22 Consumer:Consumer_Control.Microsoft:0xff05  2   0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xdotool key ctrl+a 1”
23 Consumer:Consumer_Control.Microsoft:0xff05  4   0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xdotool key ctrl+a 2”
24 Consumer:Consumer_Control.Microsoft:0xff05  8   0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xdotool key ctrl+a 3”
25 Consumer:Consumer_Control.Microsoft:0xff05  16  0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xdotool key ctrl+Down”
26
27 # My Favorites
28 Consumer:Unassigned     386  0   su henryhu -c “/usr/bin/env DISPLAY=:0 /usr/local/bin/xscreensaver-command -lock”
29 #/usr/local/bin/sudo -u henryhu /usr/local/bin/xdotool key ctrl+alt+l >& /var/log/xdotool.log
30
31 # Web/Home, Search & Mail
32 Consumer:Unassigned     547  0   su henryhu -c “/usr/bin/env DISPLAY=:0 firefix &”
33 Consumer:Unassigned     545  0   su henryhu -c “/usr/bin/env DISPLAY=:0 firefox http://www.google.com &”
34 Consumer:Unassigned     394  0   su henryhu -c “/usr/bin/env DISPLAY=:0 firefox http://www.gmail.com &”
35

第三周,周二

回来之后,基本上就没有写。平时经常会想起来有些东西能够写,但是面对着电脑的时候就有很多事情想干,总是会忘记…… 从前也是这样吧。
新学期了,各位准备6G的同学们也都在忙碌。10G的也不少,大多也在背单词。估计我大致也是10G,但是现在背单词很没有连续性,断断续续的……
这样下去可不行,太慢了……
开学初,上课情况总是比较好的。不过这个数据结构的课,早上第一节,内容大部分也都会…… 还是算了……
但是偏偏上课还有小测验,有时候还是需要去的。其实早上上课也不是那么困难,只是要前一天晚上早点睡觉就可以了。基本上,十一点半睡觉,能够去上早上第一节课,而十二点半睡觉,上第二节课没有什么问题。如果睡晚了,起床的时候遇到的阻力就会增加,虽然偶尔能够靠意志力克服,但是每次都这样就比较艰苦了。

英语46级查分的程序

昨天46级能够查分了,研究了一下……
主页面调用了一段javascript,验证码竟然是本地验证的…… 这个不说,其实最后查分就是通过XMLHttpRequest直接查…… 就没什么加密一类的事情……
之后找了一下,好像XMLHttpRequest这个东西还只有Javascript里面才有,python用起来还不方便…… 用FireBug试了一下,因为这个查分系统的请求里面没有数据,所以这个请求其实很简单,拿urllib糊弄一下就好了……
另外关于FireFox里面不能查的问题,貌似是FireFox的XMLHttpRequest在send(null)的时候HTTP头里面没有Content Length字段,其实send(“”)就可以了……
另外,最后这个系统还检查一下Referer,至少不是什么都不干……


 1 import urllib
 2 import urllib2
 3
 4 id = Your ID
 5 t = 4
 6 url = http://cet.99sushe.com/cetscore_99sushe0902.html?t= + t + &id= + id
 7 values = {}
 8 headers = { Referer : http://cet.99sushe.com }
 9
10 data = urllib.urlencode(values)
11 req = urllib2.Request(url, data, headers)
12 response = urllib2.urlopen(req)
13 the_page = response.read()
14 result = the_page.split(,)
15
16 print Listening :,result[0]
17 print Reading   :,result[1]
18 print Mixed     :,result[2]
19 print Writing   :,result[3]
20 print Total     :,result[4]
21 print School    :,result[5].decode(gb2312)
22 print Your Name :,result[6].decode(gb2312)
23 print Name1     :,result[7].decode(gb2312)
24 print Name2     :,result[8].decode(gb2312)
25 print Name3     :,result[9].decode(gb2312)

回来了

仍旧是D32,仍旧是从南站挤上出租车,我回来了…… 其实前天晚上就到了……
回来正好在下雪,据说北京差不多一个冬天没下雪,这两天刚开始下,真幸运~
我刚回来的时候,那个雪的厚度正好,踩上去能听见嘎吱嘎吱的声音,感觉也很不错。如果再厚一点就会妨碍行走,太薄了又没有感觉~
上学期成绩不好不坏,这学期课少,不过要学英语…… 总之尽可能在弄好一点吧,我承认我上学期不是那么用功……