月度归档:2010年03月

一台机器同时接多个键盘的系统测试

给笔记本接上了两个usb键盘,做了个测试,觉得挺有意思的。

Windows XP下,用记事本:

  • 两个键盘同时按“a”,出现“aa”;
  • 三个键盘同时按“a”,出现“aaa”;
  • 三个键盘分别按“a”、“b”、“c”,得到abc的随机排列。

貌似没啥特别的。好玩的是在Linux上。

Ubuntu 9.10,Linux 2.6.31。在控制台,一切正常,和XP表现一样。在gnome里:

  • 两个键盘同时按“a”,出现“aaa”;
  • 三个键盘同时按“a”,出现“aaaaa”;
  • 三个键盘分别按“a”、“b”、“c”,得到abc的随机排列。
  • 两个键盘同时按“a”,另一个键盘按“b”,输出结果里必然有一个“b”和三个“a”。

总结一下gnome的规律。设同时按动按键X的键盘个数为k,那么向系统输入的字符X的数目为2*k-1。

不知道这是否该算作一个bug。没有装KDE、xfce等其它窗口管理器,不能推断这是gnome的问题还是X或其它组件的问题。

一个梦:民间日用产品安全监督机构

很久以前曾经做过一个梦,梦到NBA全明星在中场休息时设了一个投篮得奖金的项目。奖金由微软提供,所以计算方法也有一定的计算机特色:面向篮筐,在场地上的每一条线(包括边线、中线、三分线、弧顶等等一共13条线)后投篮,每条线只能投一次。第一次投中,奖金$1000;第二次投中,奖金$1000+2000;第三次投中,奖金$1000+2000+4000;依此类推,13球都投中就能得1000*(2^13-1) = 8191000美元。附加条件是,投中后可以自选下一球是否还投。不投,拿着现在的奖金走人;投,如果投不中,一分奖金都得不到。我被抽中去参加这个项目……然后,做梦吗,当然我得到了最高的奖金。然后微软玩赖,不肯给现金,只给股票,于是我对着电视镜头说:“拿到股票后我马上全抛了”。那么当然,微软股价立刻大跌,结果我就拿到好多股票。然后我也玩赖,不抛,憋了一段时间,股价大涨,然后全抛了,净拿上亿美元的现金……

梦醒了,就开始没事儿白日梦,想如果真有了这么多钱,干啥好呢?零零碎碎这么多年,无数白日梦构想了无数的计划,下面这个计划我觉得是比较有意思的。

因为官方对市场监管的效果不佳,假货、劣货、不实宣传、虚假广告很多,老百姓买东西时候总提心吊胆地,所以我想以个人名义成立一个专门检验各种商品质量的机构。样品来源于普通百姓的送样,资金来源于我投篮所得,机构自己购买检验设备和雇佣检验人员。过程中所有的一切都在网上详细公开,包括送样者实名,每样必检,有条件的还要送到其它机构(含政府机构)进行双备份检验(费用我出),检验结果以专业和易读两种形式公布在网上,还有详细的收支记录。这样肯定挺不了太久,所以有一定气候后,会接受企业的送检要求,适当收费,但样品由我们自己在市场匿名购入。

唉,实在是对所处环境信任度太低,觉得所有东西都要自己亲手验过才放心。

骏丰频谱的营销陷阱(续1)

大约半年前发了一篇《骏丰频谱的营销陷阱》,今天终于得到了最直接的回应。骏丰公司的一位很高层的人士(应其本人要求,不具名)直接与我联系,短信来回6条,通话50分27秒,纪要如下:

  1. 该人士态度非常好。礼貌,得体。
  2. 直言不讳地承认我那篇帖子所写的是属实的,并且承认员工中存在夸大宣传。
  3. 说一定会努力(并且一直在努力)教育、培训员工,避免类似事情再发生。但也承认,这事儿确实不是容易做到的,毕竟员工数量大,而且流动性大。
  4. 希望我能删除帖子,有任何个人要求都可以提。
  5. 我表示帖子不会删,但如果骏丰解决问题得当,我很愿意记录下骏丰的诚意,并突出显示。
  6. 再经过磋商,我提出一个方案,那就是只要骏丰在其官方网站明显位置明确地提醒消费者一些可能存在的不实宣传,那么我可以删贴。
  7. 这个方案该高层人士无法做主,需要向更高层反映。现在开始等待回音。

最后该人士表示,对于今天的谈话,我有发帖或不发帖记录的自由,所以我就发了。之前的帖子其实也是在当事的L经理同意的情况下发的。

因为骏丰集团的强大和我的弱小,为防万一,我事先声明如下几点:

  1. 本人及本人的家属们身体健康,短期内不会有暴毙的可能;
  2. 本人及本人的家属们一向老实做人,没有任何仇家;
  3. 本域名一旦失效,将启用备用域名:blog.sumoon.org
http://blog.sunner.cn/2009/10/fight_with_jfcgroup/

让moodle支持Google Analytics

Google Analytics是一个很好用的网站访问数据统计、分析工具。Moodle有一个支持它的版块——Google analytics block。但并不是所有页面都能加入版块。还有一种方法是修改主题(theme)的footer.html文件,但是如果允许课程、用户自选主题的话,就要每个主题都修改,很麻烦。所以我做了下面这个补丁。

Index: lib/weblib.php
===================================================================
RCS file: /cvsroot/moodle/moodle/lib/weblib.php,v
retrieving revision 1.970.2.166
diff -r1.970.2.166 weblib.php
3072a3073,3088
> /// Hack by sunner@gmail.com to include google analytics tracking code
>     $gscripts = '
> <script type="text/javascript">
>     var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
>     document.write(unescape("%3Cscript src=\'" + gaJsHost + "google-analytics.com/ga.js\' type=\'text/javascript\'%3E%3C/script%3E"));
> </script>
> <script type="text/javascript">
>     try {
>         var pageTracker = _gat._getTracker("UA-xxxxxxx-x");   //Chang UA-xxxxxxx-x into your own GA id
>         pageTracker._trackPageview();
>     } catch(err) {}</script>
> ';
>     $footers = explode('</body>', $output, 2);
>     $output = $footers[0] . $gscripts . '</body>' . $footers[1];
> /// Hack ends
>

多IP(路由、接入)Linux系统的管理

曾管理一台同时有教育网、网通和电信三条接入线路的服务器多年,最近终于略有小成,领略了多线管理的要点。想到现在vpn因为某些伟大的原因变得盛行,这也是一种多线路接入,故撰写此文,同时做为自己的备忘。

为简化,下面仅描述双线的情况。假设两条线路的配置如下:

  1. eth0设备,IP:1.1.1.1,网关:1.1.1.9
  2. eth1设备,IP:2.2.2.2,网关:2.2.2.9

1. 配置基本路由

路由决定了从本地访问不同网站会自动从哪条线路走。比如运行命令:

route add -net 3.3.3.3 netmask 255.255.255.0 gw 1.1.1.9

此后所有对3.3.3.x的访问都会自动从线路一出去。线路一访问哪里快,就把到哪里的路由都配到线路一,然后把线路二配成缺省路由:

route add -net default gw 2.2.2.9

这样所有不从线路一走的访问就从线路二走了。当然,也可以让线路一做缺省,线路二逐条配,具体情况就看怎么方便了。

2.配置基于源地址的策略路由

对于一般用户而言,完成基本路由的配置就够了。但如果这台机器希望通过两条线路同时对外提供服务,或者想使用后面第4条介绍的东东,那么就必须配置源地址路由。为什么呢?原因并不难理解,但挺绕嘴,所以我就不说了。

首先修改/etc/iproute2/rt_tables,增加类似下面两行:

100 line1
101 line2

再用下面命令完成路由配置:

ip route add default via 1.1.1.9 table line1
ip rule add from 1.1.1.1 table line1
ip route add default via 2.2.2.9 table line2
ip rule add from 2.2.2.2 table line2

上面命令的意思是让所有从1.1.1.1发出的包都走1.1.1.9这个网关,所有从2.2.2.2发出的包都走2.2.2.9这个网关。

3. 测速

ping是最常用的测速命令。如果想测试到一个网站(比如:3.3.3.3)的速度,可以先把它路由到线路一,ping一次,再路由到线路二,再ping一次,比较ping的结果决定把它放入哪个路由。这样太麻烦了。无论当前路由是什么样,用下面命令

ping -I eth0 3.3.3.3

都是从线路一ping 3.3.3.3。同理:

ping -I eth1 3.3.3.3

都是从线路二ping 3.3.3.3。

我还拼凑出一个脚本,命名为mping,可以一行命令从多条线路ping一个网址,如下:

#!/bin/sh
 
ifconfig  | grep 'inet addr:'| grep -v '127.0.0.1' | 
cut -d: -f2 | awk '{ print $1}' |
xargs --verbose -I srcip fping $* -eS srcip 2>&1

使用它之前得先安装fping。

4. 若干命令忽视路由的参数

很多命令都能忽视路由配置,直接通过参数指定走哪条线路,列出我知道的几个:

wget --bind-address=x.x.x.x ......
ssh -b x.x.x.x
lftp中set net:socket-bind-ipv4 x.x.x.x

squid中可以这样配置:

acl bgfw dstdomain .google.com .wikipedia.org .............
tcp_outgoing_address x.x.x.x bgfw

我猜想,应该有某个命令可以以wrapper,通过它启动的进程发出网络连接时的来源地址永远是这个命令指定的地址。但我没搜到这样的东东。如果谁知道,赶快告诉我!

学校教学工作新精神

记得不全,大概有下面几个:

  1. 必须累加式考试
  2. 提倡开卷考试
  3. 提倡重视作业、实验
  4. 大班课拆成小班,推动课堂互动
  5. 所有课程本学期必须有改革

幸亏我这学期没课,否则就惨了。前三条我都做了7年了,第4条中的课堂互动也做了7年了。现在让我咋做能去满足第5条呢?再改回去?看来得琢磨怎么再去引领下一个7年的教学发展方向了,:-)

阿拉丁自动排气阀HV30C使用经验

家里暖气本来就不暖,还总憋气,害得我天天都要挨屋放气(俗称放跑风),累死了。

玩史上最著名的水暖工——超级玛丽——的时候突然想到,难道就没有能自动放气还不漏水的排气阀吗?于是在taobao找到了阿拉丁HV30C。先买了两个试验了一下,然后又买了5个,把家里所有暖气的跑风都换成自动的了。它的优点如下:

  1. 确实能自动跑风,而且滴水不漏。我是用一个保鲜袋套上然后扎好口,测试了若干天得出的结论。
  2. 手动自动二合一,而且手动放气的时候比一般的需要用钳子、或螺丝刀的跑风要方便,只要用附带的一个很小的U型扳手轻轻拧就行了。只用手指也差不多能对付。
  3. 做工和用料都不错。比如它和暖气结合部的密封胶圈非常好用,我只用手就拧就做到密不透水了。

缺点:

  1. 跑气的速度比较慢,低于注气的速度。看资料,是和温度、压力有关系。可能我家暖气温度不够高,所以慢吧。不知道温度高了会不会好一些。
  2. 有寿命限制。三年后就得换芯才能自动放气,手动不受影响。还好,换芯超级简单。

这回家里又一大心病解决了!

游戏给教学的启发(1)

如果学习能像游戏一样好玩,那该多好。学生开心,老师也不用发愁了。游戏为什么好玩呢?

我的经验,好玩的游戏至少要具备如下几个元素中的一个或多个:

  1. 由浅入深的挑战
  2. 输了再来
  3. 成就感
  4. 梦想成真
  5. 有趣的情节
  6. 漂亮的画面

应该还有其它元素,欢迎来访者补充。后续文章中,我会逐条想象如何在教学中体现出这些元素。