Sunner 的所有文章

极限教学:不要让所有的学生都说“好”

做任何事情都是很难尽如人意的,教学也不例外。谋求尽善尽美,是一种良好的品质,但因为环境的复杂性,几乎不可能做到十全十美。而苛求十全十美,可能会产生反效果。比如求“稳”是最稳妥的趋向十全十美的方法,我们的很多官员正是因为把“稳”字当做中心思想,结果……

教室里面对上百名学生,每个学生都有不同的特点、需求,喜欢不同类型的教师。如果想让所有人说“好”,就只能采取最平实、平稳、平静的策略。其结果就像那些求稳的官员……

做大事,必须要舍弃一些小利。想做好教学,就必须围绕自己最关注的学生群体做工作,不惜被群体之外的学生骂。“亲者快,仇者恨”这种状态,对教学也适用。

中国电信哈尔滨光纤宽带和固定电话故障日志(090926更新)

自从2008年6月开始使用中国电信的光纤宽带及电话以来,饱享其利,也深受其害。它的价格和速度无可挑剔,但稳定性和服务的专业性实在差强人意。从即日起,开始在此文记录每次故障。不为贬损电信,仅记录事实而已。此文多久没有更新,就说明多久没有发生故障。

2009年9月26日,星期六
从16:00到20:00,时断时续。现象貌似交换机在不停重启。

2009年9月9日,星期三
10:30,网络电话齐断,好像是交换机没电了。11:30恢复正常。

2009年5月26日,星期二
下午13:40,先是dns失效,然后周期断网,电话也时断时续。大约17:00,恢复正常。

2009年4月25日,星期六
上午9:31,53902064来电,赔偿我三天的网费,直接存入宽带账户。至此,这次纠纷结束。期待着电信下一次断网。

2009年4月21日,星期二
中午,回拨53901907,仍忙音。又催问10000一次。
14:00,53902064来电。这回的电信mm比较专业了一点,确认了我的帐号、密码和姓名,重设了一下我的密码,让我再次测试,仍用户名/密码错。我质问为何直到我开始索赔,才开始做这样的测试。答曰刚接到报修。貌似这个电信mm对之前的事情一概不知。向我承诺,30分钟内再来电沟通修理进度。
14:30,53902064来电。告知,原因是我欠费了。我痛陈他们几天内给我的误导,要求索赔。答曰,请示领导后通知我。
14:35,楼下代理点缴费,回到家里网就通了。
18:29,53901907来电。解释说是10000记错了我的用户名,导致她按用户名查询的时候查不到记录,就归入集中故障了。
20:00,10000回访,确认故障排除后,让我安心等待赔偿处理结果

2009年4月20日,星期一
17:30,打10000,正式索赔。居然没有赔偿条例,让我自己提要求,那当然漫天要价:免我一年的网费。
14:00,想确认是否欠费。在实验室上招行网上银行,不能查询电信话费余额。登录电信网上营业厅,无法登入,现象和PPPoE拨号相似。

2009年4月19日,星期日
一天试验无数次,都无法连接。

2009年4月18日,星期六
8:57,53901907来电,电信mm先让我试试看能连上不。结果为否。然后就跟我再见了。
上午无网,安心看球,小牛胜马刺,火箭大胜开拓者
中午,拨53901907数次,均忙音。拨10000,表达迫切心情,答复会让相关人员通知我进度。
17:59,53901907来电,曰:因系统升级而引起的集中故障,受理的报修数已达4位数,让我耐心等待。我问至少耐心多久,答曰:三天内就想别的招上网吧。

2009年4月17日,星期五
早,电话通,网络现象依旧。怀疑欠费,发现电话能拨出去。拨10001确认是否欠费,发现无查询话费选项。手机gprs上招行移动网站,使用缴费功能,返回错误信息。打10000报修。

2009年4月16日,星期四
早,网络电话均正常。
晚,网络连接不上,错误691,电话忙音。期待早上能正常。

2009年4月15日,星期三
晚,电话无风音,网络通5分钟、断1分钟,始终这样,直到我坚持着做完工作,睡去,也没有改变。懒得问10000了,等早上看看吧。

Android中文联系人排序及检索补丁的原理(090819更新)

2009年4月26日,更新了源码和相关文件

很久以前做了这个补丁,有幸的是朋友们都还算喜爱它,没白费功夫。不少朋友来信问它的原理,现在就讲一下。不过里面很多地方要靠回忆,未必很精确。如果你不能重现我所写的,欢迎提醒。另外要说明的是,下面所有的一切都是针对android 1.0的。

整个补丁的制作分五个步骤。

1. 制作支持中文排序和文字转换拼音的icudt38l.dat文件

先说一下icu4c。这是一个非常强大的开源软件,基本上把所有多语言要处理的问题都解决了。android对语言的处理主要就是调用它,但并没有包括中文相关的数据。所以先要把中文数据加进去。

android编译过程中直接将external/icu4c/stubdata/icudt38l.dat做为数据文件编译到目标代码中。所以只要向此文件添加中文的东西就行了。

我用的方法是直接下载icu4c的源代码,然后修改source/data/coll/root.txt,把data/coll/zh.txt的内容“合理地”替换进去。为了减少体积,只替换pinyin相关的东西。编译。

参考external/icu4c/stubdata/helper.sh,用新做好的coll/root.res替换icudt38l.dat里的coll/root.res,并将icu4c目标文件里的translit/Han_Latin.restranslit/root.res添加进去。

制作好的icudt38l.dat文件可以从这里下载。放到external/icu4c/stubdata/目录下,用“make libicudata”编译android,应该很快就能得到新生成的libicudata.so。用它替换ROM的同名文件,就已经能中文排序了(只对新增或修改过的联系人有效,详见第4步)。

2. 打开icu4c的translit功能

打开这个功能才能实现中文到拼音的转换,也才能实现快速检索。

打开的方法应该是修改external/icu4c下的某个编译配置文件。但具体改哪个,改成什么我记不清了。源代码也没在随时可以查看的机器上。等查到了,再来补写吧。

icu4c.diff里可以看到打开的方法,涉及到数个文件的简单修改。

3. 改变android为联系人建索引的方式

在联系人数据库中有一个peopleLookup表。它只有两个字段,第一个是token,第二个是联系人id。只要从键盘输入的字符和token能对应上,就会将改id的联系人显示在检索结果中。所以,只要把联系人的拼音写到token,就能实现用硬键盘快速检索。

所有的修改都集中于external/sqlite/android/sqlite3_android.cpp。这个文件为sqlite增加了一些android需要的功能,其中就有一个_TOKENIZE()函数。它的功能就是在指定的表中建立对给定id和字符串的索引。它还能对字符串进行分割,比如sunner sun,会建立三个索引“sunner”,“sun”和“sunner sun”。这就是android联系人功能的初始形态。

_TOKENIZE()的实现是tokenize()函数。我在这里面调用了icu4c的功能,把中文转换成拼音字串,然后再建索引,于是就能拼音检索了。就这么简单,代码也不长,在sqlite3_android.diff中。不过现在不在手边,以后再放上来。

4. 制作数据库刷新脚本

将上述修改编译后,替换到ROM中,并不能马上使用这些功能。因为现存联系人的各种索引信息都是旧的,必须更新一下它们。更新的方法很简单,就是把每个联系人的名字都写回一遍,然后把联系人数据库中的索引都更新一下。细节都在ROM升级文件的updatedb.sh中。

5. 制作ROM升级文件

替换system分区中的文件最好是在系统启动前,否则很可能会造成空间丢失。所以最终把这个补丁做成了一个update.zip,可以用刷机的方式刷上。

做它主要用到的工具是JF’s Build Environments(http://forum.xda-developers.com/showthread.php?t=475381)里的testsign.jar。

分析已有的update.zip文件,就能知道它的基本结构,很简单。按这个结构放好几个要替换的文件,写好update-script脚本(关于这个脚本的语法,只能从android源码获得,在recovery/commands.c里),打成zip包,然后

java -jar testsign.jar src.zip dst.zip

这里的src.zip是前面做好的压缩包,dst.zip就是最终产品。

大概就是这样。

3.21版的补丁在这里下载。

我们需要什么样的教材

今天一早,和机械工业出版社的王编辑碰面,聊了一会儿。谈话的主题是就是本文标题。这个话题确实引起了我不少的想法,在这里总结一下。

  1. 现阶段我们不需要中国人自己编写的教材,因为“编”得普遍都太差了。大多数教材编写的动力是职称、评奖。能以版税为目标去写的都很少。有了自己的垃圾教材,就会要求甚至强迫自己的学生购买,学生就接触不到好教材,结果就不如没有自己的教材。
  2. 现阶段原版教材还不能成为主流。虽然它是我的首选,有诸多好处,但语言、思维的界限不是那么容易消除的,也不必追求在很短的时间内消除。从低年级到高年级,应该逐渐增加原版教材的比重,直至完全使用原版。
  3. 现阶段最需要的是优秀的翻译教材。它是通向原版的一个桥梁。如果它的质量足够好,速度足够快,那么完全可以抛弃原版。可惜的是,虽译本众多,能称得上优秀的凤毛麟角。最恐怖的,是为数不少的译本让人有“看了还不如不看”的感受。

为实现上述目标,也有几点想法:

  1. 取消评职、评奖等对教材的硬性规定。如果一定要要求,就要求发行量而不是本数。让国产教材的出版完全以市场为导向。
  2. 向教师施压。优秀教材推广的最大阻力是教师本身。太多教师就喜欢用自己本科时学的教材上课,因为“熟悉”。这是教学最大的倒退力。
  3. 组建优秀的专职技术翻译团队。翻译技术书籍完全可以成为一种职业。兼职做翻译的,不会很在意翻译质量的,因为那不是他们的饭碗。

让Moodle支持多域名、多IP

Moodle内所有的链接都是绝对地址,通过config.php文件中的$CFG->wwwroot定义根位置。这使网站无法支持多域名、多IP。

比如,http://cms.hit.edu.cn的IP是202.118.253.67。为方便被割裂到校园网外的学生访问,现在想给它加一个网通IP,61.167.60.4,绑定在域名http://cms-hit.sunner.cn上。一切都配置好之后,访问http://cms-hit.sunner.cn,再继续点击链接,就都被指向http://cms.hit.edu.cn了。网通IP形同虚设。

解决办法:在config.php文件中加上这样一段代码:

if ($_SERVER['HTTP_HOST'] == 'cms-hit.sunner.cn')
    $CFG->wwwroot   = 'http://cms-hit.sunner.cn';
else
    $CFG->wwwroot   = 'http://cms.hit.edu.cn';

也可以干脆直接:

$CFG->wwwroot  =  'http://' . $_SERVER['HTTP_HOST'];

针灸

在领导的威逼利诱下,秉承着大无畏的精神,去谷氏按摩诊所持续针灸了个把月。每天20来针,偶有间断。

朋友请不要担心,敌人请不要乐祸。我没病,是俺家领导有病,非让我用这种方式保健,调理身体,以便抵御将来可能发生的种种疾病。对中医我是将信将疑,对领导是深信不疑。所以,虽略有抵触情绪,但还是在坚持着。过程中倒还真有些领悟。

点穴

针扎在胳膊腿儿的穴位上,让人只能直挺挺地躺着,半动也不敢动。动的结果就是疼。由此想到,所谓点穴是不是就是用内力在穴位上扎一根无形的针,让人一动就疼呢?被点穴后,不是不能动,而是不敢动。这是我第一天,也是平生第一次针灸的感想。咨询了一下谷师父,他很直白地回答:“这门功夫我不懂,不知道。”还是挺有宗师气度的哈。

胆越长越小

小时候体弱多病,打针吃药家常便饭,住院也是颇有经验。那时候我最自豪的就是“勇敢”。打针是从来不哭的,而且还颇有笑傲江湖的气度,特喜欢打针(绝非受虐狂)。后来身体不知怎地,就不弱了,好几十年没进过医院,以至于连挂号都不懂了。

现在面对针灸,居然害怕了,真的害怕了!那二十多针,每一针下去,心里都紧张得要命。说实话,真不怎么疼,但就是害怕,没招。

我现在让自己持续扎的动力,不是为了身体好,也不是为了领导高兴,仅仅是为了证明自己能克服心理障碍。纯粹意志力的锻炼。

由此想到,如果是胆的大小决定胆量的大小,那我这么多年来胆肯定是越长越小了。

其实,我觉得,这事儿,就是因为,人长大了,见识多了,想得多了,不像小时候那么虎了。一句话:自己吓唬自己。

功效

前几天脑袋上的针扎得比领导少很多。估计是因为我不带眼镜,不需要调理眼睛。几天后,发现自己眼睛干涩,易疲劳,睡觉、闭目都无法改善。挺了几天后(间或上上润洁),于是向谷师父发难,问他是不是针灸把我的眼睛弄坏了。老谷还是那句话:“没事儿,好事儿。”不等我继续说,当、当、当、当、当、当,就在眼睛四周加了6针。扎得我那个后悔啊,多这个嘴干啥啊,多多多多多多疼啊。不过几天后,眼睛真就没事儿了。不知道是不是像方舟子说的那样,不扎那几针也能自愈。没法拿自己做双盲测试,这个课题就不研究了。

江湖骗子

因为将信将疑,所以平时总对谷师父问东问西,想看看他是不是江湖骗子。实话说,不像。他习武,信佛,吃素,研医,品茶,好色(色友的意思,就是喜欢摄影),店里往来的江湖人士,什么铁球大侠、散打冠军等,也都颇靠谱的样子。岳父岳母的骨病也都用他的药面治好了。

但中医肯定在为数不少的人眼里都是江湖骗子,就像西医在为数不少的人眼里都是收红包黑病人的一样。今天这个观点就得到了一个很大的验证。

谷师父亲口在我俩面前说,他的家人没一个信他这套的。他的老婆、儿子,都是鉴定的西医拥护者;他的岳母就是个西医;他的岳父死活不让他扎针。天啊,那他在家人眼中的形象肯定就是一个不折不扣的江湖骗子啊!那他们还和他一起生活,享用他骗人赚得的金钱。他们的内心得多邪恶啊!

重拾博客

好久好久不写博客了,甚至好久好久不写东西了,连灌水都觉得不会表达了……

这样下去不行。作文就和编程一样,只有多练才能做好。

所以,重新开始写博客了。不为别的,就为了练习写作文,:-)

最成功的一个C语言赛季

太舒服了!真是太舒服了!这个学期结束时的感觉太舒服了!因为这学期的C语言课太成功了!不仅我舒服,学生也舒服。以往我的课成绩下来后,都是哀鸿遍野,抓20%是常事儿。但这学期除了极少数平时作业不好好做甚至不做的,都通过考试了!

还有什么能比心安理得地放过所有学生更舒服呢?我真的很心安理得,因为通过残酷的作业的检验,我已经相信他们有实力通过我的课了。他们应该是历史上学得最好的一届!

获得成功的两个主要因素是:

1. 全面引入ACM的Online Judge方式评判作业。这东西太有魔力了,不仅能强力逼迫学生歇斯底里地学习,而且还能让他们爱上被Online Judge折磨的时光。端的是匪夷所思。
2. 用Moss抓雷同。如果没有这东西的保证,所有的努力都是白费,还能培养出一批以抄袭为乐的社会蛀虫。

假若明年我还上这个课的话,可改进地方确实不多了,黔驴技穷了。大概总结一下有这么几个:

1. 加大雷同的惩罚力度。一次雷同就清空过往所有成绩,但期末考试80分以上的话,可以恢复分数。
2. 改进网上活动的评分机制。现在的方式只能鼓励第一次发帖,但对继续发帖的鼓励有限,甚至会压制继续发帖的欲望。可考虑完全匿名打分,并要求发帖和给他人打分必须达到一定数量,或者帖子必须有一定数量的人打分后才能记入成绩。
3. 全面修订示例代码
4. 修改Code::Blocks,让它的memory字体也能变大

两次报告,两个交待

最近作了两次报告。第一次是12月29日,《C语言四年教学经验总结》,面向计算机学院的一部分老师;第二次是今天,《ACM@HIT》,面向东北三省加内蒙的ACM教练们。

这两次报告总结了我留校以来最重要的两项工作,同时也是两次交待,其目的是希望能有人接替我继续做下去。

放弃C语言的事情已经基本决定了,就差找到一个合适的接替的人了。那天的报告做得自我感觉不错,http://today.hit.edu.cn/2006/12-30/12163212.htm有一些照片。报告后和一些老师的交流也让我获益匪浅。感受是自己太幸运了,能这么早就获得这样的舞台去实践自己的想法。很多老师也是颇有热情的,但他们就没有我这样的机遇。所以,我赶快撤退,把机会给更多的人还是很明智的,对大家都好。

《ACM@HIT》里毫无保留地讲述了我对ACM所有的思考和一些浅薄的经验。自我感觉讲得很不好,主要是背对观众,没有眼神的交流,许多地方把握不好听众的情绪。不过我想对初涉ACM的学校来说,应该还会有些帮助吧。

这两个报告的相关东西都放在泡泡网了。不过最近因为机器升级,只能从http://sunner.cs.hit.edu.cn访问了。

今天工程组织的四省教练会超级成功!居然来了42个高校的老师。我们也很成功,因为我们今天获得了2009年Regional的举办权。按照我的自我规划,也是要淡出ACM的,把所有事情都逐渐转给孙大烈老师。慢慢看吧,不知道要多久能真正地退出。

很喜欢C语言,很喜欢ACM,但无奈,我把事情做反了。等我读完博士,再来做这些有趣的事情,或者寻找其它有趣事情吧。