星期三, 十一月 18, 2015

华丽地转身

一个研究人员,倘若学问做不动,他便教学生如何做人。人生不得意的普通人则可做国师,天上地下便没有他不懂的了。

——忽然想到。

温良谦恭顺

中国的传统文化要求人们温良谦恭顺,实则要人作伪。就好比批评吧,倘若人家批评得对,你大抵需接受。倘若批评得不对,那么你还谦恭个啥事体。现实中多见的更是因批而恼者,可见恼之前的谦恭自然都是装出来的。

年长的国人往往更受不得批评,尤其受不得来自晚辈的。以我的观察,倘若有人年过四十而有主见者,他的见便不可易。因此大多也是成见。由此人不但不可以其老而受尊重,人年长反倒是一个可受鄙视的信号了。

传统文化的可恨之处不单要人作伪,更可恨的是以传统文化自居的常有先天的优越感,大约就是所谓的以其昏昏使人昭昭罢。

星期一, 十一月 16, 2015

如何为一场大赛公正抽签分组

上周末我组织了一场羽毛球比赛,比赛有将近 50 人报名,合计101场比赛。赛前为了公平起见,我想采用现场抽签以避免事前操纵比赛的嫌疑。为了准备这个抽签,我花了几个小时时间造了一个 Excel 表格。现场抽签的算法是这样的。Sheet2 中放了参赛选手,按项目分组。sheet3 中每个比赛场次的选手对应 Sheet2 中的一个具体 cell。这样一旦 sheet2 中的选手按抽签排序,具体 cell 中的名字改变,sheet3 中的具体场次的选手也会发生改变。

算法本身没问题,愿望也是美好的,然而真正具体应用时就出了大麻烦。这是由三个问题导致的:有选手缺席、迟到和抓错签。因此后面的比赛场次根本就无法进行。这样做的另外一个问题是只有安排者知道场次,选手只能干等,全程侯场,不能自主安排时间。这显然是由于我从来没有组织经验造成的。如此至少现场还应该有一台打印机,把比赛进程打印出来公示。

那么能否有简单的方法在报名结束时就做好公平的抽签呢?答案当然是肯定的。以下就是一个算法。
  1. 赛前公布若干随机数种子和分组抽签程序及使用方法。
  2. 抽签程序加密,hash,供下载。加密程序可以加两个小把戏,一是加盐,比如shuffle若干次,种子再加固定数等。另外文件也可以加一些盐,比如文件中可以加一个注释行,包含随机长度的随机字串。这样即使通用的算法或反复使用的程序,大家也不好通过 hash 码猜具体文件中是什么内容。
  3. 参赛选手按报名顺序公示。
  4. 登记报名者和提程序者需要是两个不同的人。
  5. 报名截止,投票选随机数种子。
  6. 运行程序,产生分组并公示。
由此参赛选手就可以在报名结束时了解进程。且分组按事先约定可验证,因而公平公正,童叟无欺。

星期二, 十一月 10, 2015

Jarlsberg 比赛回顾

Jarlsberg 比赛在挪威众多的羽毛球巡回赛中显得与众不同。其它比赛只管收报名费和组织赛事,其余的自己打理。即使赛事用球,其它赛事每场比赛往往只提供两个,多了便要自理。Jarlsberg 则不仅提供的比赛用球多,前三名还都有奖品。这主要是因为以当地为名的一个奶酪厂的赞助。每个级别的冠军奖品是好几公斤的奶酪,亚军是一公斤的奶酪,第三名是半公斤的奶酪。总之都是奶酪。挪威打羽毛球的不多,这样的奖品足以吸引各色选手来参赛。我参加的 C 组今年就有 31 个报名选手,且报名的无一缺席。其中还有好几个原先打 B 级比赛,为了能够拿到奶酪,纷纷降级参赛。这无形中增加了我这种水平选手的艰难程度。

果不其然,第一场比赛我就遇到了很大的麻烦。对手虽然看起来一般,但是下手感觉还是有些门道,不知不觉中我第一局就输掉了。我们这个级别的选手往往参差不齐。我作为一号种子,与和我水平差不多的选手根本输不起。之后我抖擞精神,费了吃奶的力气才把对手掀翻在地。小组中的第二个对手果然很弱,我两个 21:12 就把他打发掉了,总不至于让他输得太难看。值得一提的是,第二个对手刚来到我面前时还真把我吓了一跳。这位小哥长得高而匀称。这种身材非常适合打羽毛球。可惜他根本就是个新手,至少没受过多少正规训练。

小组赛之后的间歇我在看台上看见一个大个子,胸前斗大几个汉字——“奉上级指示”。

我觉得好玩,就问他是否知道这几个字的意思。他说不知道。我便解释给他听。再聊才知道,原来这小伙子原先在北京朝阳区住过四年。然后他从手机里面翻出一张照片。好家伙,真是乔丹灌篮,——吓(黑)老子一跳。照片中三个人,左一解杏芳,右手林丹,中间一个就是他。

四分之一决赛的对手是一个小孩,十六七的样子,打得中规中矩。可惜关键球把握不住,第一局 18:21 输给我。第二局虽然打得很费劲,我还是最后把握住机会,29:27 拿下。但大约下次见面我就不是他的对手了。

这场比赛之后便是漫长的等待。大约奶酪的确太有诱惑力,有一个打得还不错的伙计报了男单、男双、和混双,通通打进了半决赛。然后我就看到他打完了一个四分之一决赛立即进行另外一场半决赛。忙活得不轻。

另外一个半区的半决赛早就打完,胜出的不是旁人,正是“奉上级指示”的大个子。

三项全打的这位虽然水平不错,但似乎全部止步于半决赛,至少我没有放过他。但赢他也是比较艰苦,我和他的两局比赛也都是差两三分的样子。比赛之后已经晚上七点多了,这真是漫长的一天。我之后马不停蹄地接着决赛,“奉上级指示”的大个子已经等候多时了。

低水平选手总有这样或者那样的短项,与大个对手们比赛就几乎一直是我心头的痛。这位大个子身高恐怕超过1米90,我1米70的个头仅仅能够着他的肩膀头。大个子比赛时我倒是看了几眼。他的缺点则是移动慢,但他步伐大,与我们这种水平选手比赛脚步移动少。而且他回球比较准,打场地的四个角误差比较小。因此对手往往要比他消耗更多的体力。这样打的时间越长,对他就越有利。

决赛开始的前半段我还能沉住气,一直领先一两分。我的高远球和劈吊一直能把他压制住了。后来随着体力下降,我的回球质量也下降,慢慢地,我的耐心也没有了。结果第一局19:21负。值得一题的是,这个场地灯光很糟糕,尤其是中间场地,高球下落时灯光直射入眼。我因此丢了好几个球。这个场地的灯光,如大个子所言,似乎对他影响不大。

第二局大个子似乎找到门道,我频频失误。很快大个子11分领先进入暂停。我忍无可忍,要求换场地,反正球场上就剩我们两个人在打了。裁判问大个子,大个子说没问题,我想换就换。换过之后,我这才注意到大个子每次发球之前都要仔细端详我头顶的大灯在什么位置,然后就冲灯把球打过去。看得我心头火起,胸中一万头羊驼呼啸而过。真不知道他是在北京呆的四年学坏了还是洋鬼子就这么坏,但比赛没完就要坚持打。然而大势已去,第二局我只得了10分,结束了当天的比赛。

星期二, 十月 20, 2015

姿势好看

近一段时间,我做事情我自觉都有些怪癖。那就是一件事情不单要做出来,而且还要做得姿势好看,就好像本来可以一剑刺中目标却偏要挽几个剑花。

不过这些现在终于有了回报。我今年年中开始的一个题目做得山重水复,几个月时间的路线几乎都是错,直到今晚才终于找到一条路,虽然现在还不知道为什么对。中间耍的几把花枪,现在看来个个也都是精品。不客气的说,现有的 G 矩阵程序没有哪一个比我暑假中写的那几个好。这些现在也都派上了用场,百万阶阵的(实际上跳过了大部分的求逆运算)处理终于可以用我的程序在甚至桌面机上运行。这感觉真不错。

十月二十日凌晨三点记

星期一, 十月 19, 2015

脏球

周末我带领儿子们参加了一个在挪威 Tønsberg 举办的巡回赛,两个小家伙一人得了一个第二名。老大的这个第二说起来十分可惜。

我以前说过,羽毛球在挪威是一个小众项目,大多数人经常见面。不过上周六我家老大在决赛中碰到的这个对手来自挪威最南端的 Sandfjord 俱乐部,我们倒是第一次碰到。这个小孩比我家老大还晚出生一年,十三岁多一些的光景。但他确实我参加比赛以来碰到的最脏的选手(对小孩说肮脏或许不太合适)。

老大开局 11 分暂停的时候落后,我坐在他的后面看倒是没有多少担心。我看到这个小孩的后场非常弱,后场回球九成回在网前。这样的水平能打到 U15 A 组的决赛本身就是个奇迹。第一局暂停时我跟儿子做了简单指导。但儿子却跟我说对方可能不诚实。接下来的比赛我才注意到,原来这个孩子在我儿子打出底线时欢呼,他打不着的界内球也欢呼,整得我家老大很多球都不敢压他后场。真是奇葩一枚。这样的巡回赛裁判有限,二十几片场地,组委会根本顾不过来。因此只能靠选手自觉。

第二局更加可气,对手11:3领先,被我儿子追至17:16,更奇葩的事情出现了。先是他把还球时以非常无礼的方式打回来,之后更是一个球停一次。喝水,瞎逛,乱叫。这事情现在说起来我都生气。最后他 21:18 赢了比赛。之后握手时,他还跟我家老大说,对不起,我打得挺脏。把我儿子气得够呛。

赛后我才想起要把这事情告诉赛会组织者。然而并没有什么卵用,比赛已经结束。我应该在第一个暂停时就喊人。

再之后,昨天我在我们俱乐部和另外一个人说起这件事情。他说,这个并不奇怪,Sandfjord 的教练就是这么教的。他儿子是 U17 全国前 15,有一次也着了这个俱乐部选手的道儿。对付他们其实还真没有太多好办法。规则上我方去对方场地照看边线/底线是不合法的。只有比他们更机灵,并且在技战术上强他们一大截子才是硬道理。

最后说点儿有意思的事情吧。这次比赛还有一个花絮是,前十几的国家队女队员有几个参加了男子成年 B 组的比赛,导致最后男子 B 组决赛在两个女队员之间举行。一个女子第三的国家队参加了男子 E (elite)组比赛,而且还赢了几场。可惜没有走得更远。她现在和我一起参加羽毛球二级教练的培训呢。

星期四, 十月 15, 2015

下歌

我家老大喜欢听歌,他自己的 Mix 以我的标准看来也是相当不错的。为满足他的要求:
#!/usr/bin/env bash
sudo dnf install youtube-dl ffmpeg mp3gain #find ffmpeg and mp3gain in rpmfusion
# list the youtube addresses in, say, list.txt
while read link; do
    youtube-dl $link
done <list.txt

for i in *mp4; do
    ffmpeg -i "$i" -vn \
    -acodec libmp3lame -ac 2 -ab 160k -ar 48000 \
           "$i".mp3
done

mp3gain -c -r *mp3
这样视频和单独的音频就都有了。mp3gain normalizes the audios.