20161220

由 excel 转换为 markdown,及收获




1. 问题
构建之法(现代软件工程)东北师大站[http://www.cnblogs.com/younggift/]的每周学生作业成绩,执行教学团队[https://home.cnblogs.com/u/xinz]要求,发布在 cnblogs 上。作业中包括每位同学在作业单项中取得的分数、累加、按比例分配、线性映射等数据,本学期约17次作业成绩或排序统计,产生约70个表格。成绩公布后学生申诉教师修改成绩时,这些表格需要重新计算,再次发布。每次作业申诉数量大约5次左右。

Emacs是我平时的主要工作环境,所以优选熟悉的工具。上学期第一次成绩发布使用了 org-mode 中的表格,发布为html源代码,粘贴到 cnblogs上。成绩累加、变更后的重新计算非常麻烦,org-mode主要是大纲写作工具,不是电子表格。使用的感觉类似于在word的表格中计算。
Excel适合记录、计算、数据变更后再计算,cnblogs使用纯文本、html 或markdown格式。其中 markdown 格式语法简洁,支持大纲式写作和表格,所以适合成绩发布和变更后再次发布。因此,上学期除最初一两次,以及本学期大部分作业成绩发布,先在excel下记录和计算,然后转换为 markdown 格式。
本文回顾我使用的三种方法,由 excel 文件转为 markdown,及收获。
2. 方案1,FFL 的 exceltk.exe
推荐使用此方案。在本学期大多发布中,我都使用了这一工具。没有使用的几次是在等待升级,采用了临时方案。
exceltk 最初是小牛同学拷给我的,说这个非常方便。后来 FLL 老师做过升级,其中对公式的支持、支持移动设备上查看cnblogs上的表头不变形、小数点保留位数这几次升级都很有帮助。
FFL 老师对 exceltk.exe 的介绍在
[http://www.cnblogs.com/math/p/exceltk.html]。
源码:https://github.com/fanfeilong/exceltk
下载:http://files.cnblogs.com/files/math/exceltk0.0.9.7
我的使用方法类似
exceltk.exe -t md -p 2 -xls 构建之法作业成绩debug.xls
把excel中的每个 sheet 导出成 markdown,小数点保留两位精度。
3. 方案2,sed
exceltk有一段时间不支持 excel 公式计算结果,我换用了临时方案,等待exceltk升级后切换回来。
3.1 为什么需要公式
我的excel中使用了 vlookup, match 等函数,以方便学生申诉以后的成绩变更。
比如个人作业单项变更,需要因此变更的字段有 个人作业总和、个人作业映射到占本周总成绩20%、本周成绩总和、数周累积、数周累积排序、数周累积去除负分同学排序、数周累积映射到[50,100];再如团队成绩单项变更,需要因此变更的字段有 该团队总分、该团队总分映射到本周总成绩的30%、该团队所有成员的团队成绩、该团队所有成员的本周总成绩、该团队所有成员的数周累积以及排序和映射到[50,100]。诸如此类。由每周作业的单项数目不同,所以公式不宜用固定列的序号,比如”=SUM(B4:L4)”,而采用了vlookup & match 函数对字段寻址。
vlookup & match 函数类似这样:
=VLOOKUP(F4,小组!$A:$W,MATCH("合计",小组!$1:$1,0)+1,FALSE)
含义是
(1) F4单元格所在列是”所属小组”,每行一人,随行变化。此例中的值为
“=VLOOKUP(A4,组员归属!A:B,2,FALSE)”,求值结果 “飞天小女警”。
(2) 取”飞天小女警”的”合计。”取 名为”小组”的工作表 中,表头 (第一行)写
作”合计”的那列的数据,要求 A列的值为 F4的那行,即”飞天小女警”。
(3) 总结,姓名 -> 组员归属 -> 小组成绩.
这样,当小组成绩变更以后,该团队所有成员的小组成绩、本周总成绩、数据累积等都会自动变化。我只要修改变更的单项,然后再把excel导出成 markdown发布就行了。不使用公式,每次变更需要顺序修改、复制粘贴若干次,时间长工作量大,每个单项都要消耗30分钟左右,还担心出错。使用公式后成绩变更一次几分钟。

3.2 excel -> csv -> markdown
sed 是 perl 的灵感来源之一,另一个是 awk。它们专门辅助 shell 脚本,awk做计算,sed做文本替换。
我用的临时方案脚本,在这里[https://coding.net/u/younggift/p/xls2md/]。
3.2.1 excel -> csv, vba
我把 excel 导出为 csv 格式,这样完成了公式的计算,也成为了文本格式,sed才能处理。
使用了 stackoverflow 上的 vbs 脚本,稍作修改,按数据表名导出。
----脚本开始
 
if WScript.Arguments.Count < 2 Then
 WScript.Echo "Please specify the source and the destination files. Usage: ExcelToCsv <xls/xlsx source file> "
 Wscript.Quit
 End If
 
csv_format = 6
 
Set objFSO = CreateObject("Scripting.FileSystemObject")
 
src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
 dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1))
 
rem msgbox(dest_file)
 
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
 
Dim oBook
 Set oBook = oExcel.Workbooks.Open(src_file)
 
oBook.Worksheets(1).ActivateoBook.SaveAs dest_file+"\个人", csv_format
 
oBook.Worksheets(2).ActivateoBook.SaveAs dest_file+"\结对", csv_format
 
oBook.Worksheets(3).ActivateoBook.SaveAs dest_file+"\小组", csv_format
 
oBook.Worksheets(5).ActivateoBook.SaveAs dest_file+"\本周", csv_format
 
oBook.Worksheets(8).ActivateoBook.SaveAs dest_file+"\数周排序-去除负分", csv_format
 
oBook.Worksheets(9).ActivateoBook.SaveAs dest_file+"\数周累积负分", csv_format
 
oBook.Close False
oExcel.Quit
 
----脚本结束
调用的时候,在bat中,如下。
----bat片段开始
 chcp 936
 
set filename=构建之法作业成绩beta-review.xls
 xls2csv.vbs %filename% .
 ----bat片段结束
3.2.2 cvs -> mark down, sed
根据不同数据表的格式不同,我写了不同的 sed 脚本。”应该”把某些 sed 脚本抽象合并到同一个文件中,不过考虑到复用次数不多、可预见的复用增长不大、以及懒,所以就复制粘贴,然后分别修改了。
所以 shell 脚本看起来这样,里面的 c1_head 与 c1, c2_head 与 c2 长得很像,抽象优化强迫症患者可能感觉不好。
----shell脚本片段开始
sed -f c1_head.sed 本周.csv | sed -f c2_head.sed &gt; 本周.md
sed -f c1.sed 数周排序-去除负分.csv | sed -f c2.sed &gt; 数周排序-去除负分.md
----shell脚本片段开始
每行分成两个sed执行,用管道连接,重定向到指定名称的md即markdown文件中。分成两个sed执行是必要的,因为 sed 不支持对刚刚粘贴来的行通过引用行号编辑。或者是因为我没有做出足够好的正则表达式 (@典同学,@marverick@柳园bbs) ,考虑sed/正则表达式的处理能力,此处应该不涉及类似括号匹配的上下文无关文法。
3.3 sed解读
3.3.1 测试用例
(1) cvs的前几行
列之间用”,”分隔。在我的临时sed脚本中,没有处理转义”,”的情况,解决的方案是在xls中避免使用半角逗号。
,20160901,20160908,20160922,20160929,20161013,20161020,20161027,20161103,20161110,累积,映射至[100,60],映射至[100,50]
 ,,,pre-α,α-1,α-2,α-review,β-1,β-2,β-review,,,
 [黄兴](http://www.cnblogs.com/huangxman),72.00 ,80.00 ,68.60 ,5.15 ,41.06 ,63.93 ,60.60 ,69.60 ,78.03 ,538.97 ,100.00 ,100.00
 [李俞寰](http://www.cnblogs.com/li-yuhuan/),85.00 ,86.00 ,69.53 ,35.75 ,44.35 ,64.53 ,41.20 ,31.20 ,78.63 ,536.19 ,99.79 ,99.73
 [张金生](https://www.cnblogs.com/jx8zjs/),93.00 ,94.00 ,72.47 ,-1.00 ,66.06 ,-1.53 ,39.60 ,63.88 ,88.41 ,514.89 ,98.14 ,97.67
 [程媛媛](https://www.cnblogs.com/yuanyuancheng/),61.00 ,76.00 ,-7.60 ,13.27 ,41.23 ,94.67 ,69.40 ,75.20 ,86.51 ,509.68 ,97.73 ,97.17

(2) markdown的前几行
形如”|:–|”的文字,用于分隔出表头。
||20160901|20160908|20160922|20160929|20161013|20161020|20161027|20161103|20161110|累积|映射至[100,60]|映射至[100,50]|
 |:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|
 |[黄兴](http://www.cnblogs.com/huangxman)|72.00 |80.00 |68.60 |5.15 |41.06 |63.93 |60.60 |69.60 |78.03 |538.97 |100.00 |100.00 |
 |[李俞寰](http://www.cnblogs.com/li-yuhuan/)|85.00 |86.00 |69.53 |35.75 |44.35 |64.53 |41.20 |31.20 |78.63 |536.19 |99.79 |99.73 |
 |[张金生](https://www.cnblogs.com/jx8zjs/)|93.00 |94.00 |72.47 |-1.00 |66.06 |-1.53 |39.60 |63.88 |88.41 |514.89 |98.14 |97.67 |
 |[程媛媛](https://www.cnblogs.com/yuanyuancheng/)|61.00 |76.00 |-7.60 |13.27 |41.23 |94.67 |69.40 |75.20 |86.51 |509.68 |97.73 |97.17 |
 |[张政](https://www.cnblogs.com/regretless/)|90.00 |98.00 |71.27 |5.07 |65.48 |-2.73 |20.00 |68.38 |92.91 |508.38 |97.63 |97.04 |
3.3.2 把 , 转成 |
# , => |
 s/,/|/g;
 s/^/|/g;
 s/$/|/g;
(1) s是substitute.
(2) s / 原来的文字 / 替换成的文字 / 全局
(3) ^表示行首,$表示行尾。
总的效果是,把所有逗号换成竖线,行首行尾各加一条竖线。
3.3.3 表头 |:–|
数据流是这样的 (cvs) -> c1_head -> c2_head -> (md),其中括号里的是产物,没括号的是加工。
在 c1_head.sed 中:
 # table head, copy & paste
 1h
 1G
在 c2_head.sed 中:
 2s/[^|]//g
 2s/|/|:--/g
 2s/|:--$/|/g
(1) 1h 复制第1行,1G粘贴在当前位置。得到
||20160901|20160908|20160922|20160929|20161013|20161020|20161027|20161103|20161110|累积|映射至[100,60]|映射至[100,50]|
 ||20160901|20160908|20160922|20160929|20161013|20161020|20161027|20161103|20161110|累积|映射至[100,60]|映射至[100,50]|
(2) c2_head.sed中几行的作用,是对只转换第2行,不是对全局影响。
(3) 2s/[^|]//g,除了竖线以外,去除所有字符。
||20160901|20160908|20160922|20160929|20161013|20161020|20161027|20161103|20161110|累积|映射至[100,60]|映射至[100,50]|
 ||||||||||||||
(4) 2s/|/|:–/g,把第2行的所有竖线,转换为 |:–
||20160901|20160908|20160922|20160929|20161013|20161020|20161027|20161103|20161110|累积|映射至[100,60]|映射至[100,50]|
 |:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--
(5) 2s/|:–$/|/g,把第2行行尾前的 :– 转换为 竖线。
||20160901|20160908|20160922|20160929|20161013|20161020|20161027|20161103|20161110|累积|映射至[100,60]|映射至[100,50]|
 |:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|
之所以采用复制粘贴-替换的方法,是因为sed不会计数。

3.3.4 空行 ||||||||||||||
原始 cvs 形如:
---cvs片段开始
 姓名,继续迭代,PSP,进度条,代码堆积图,博客字数堆积图,beta发布评论,加分事项,加分分值,合计,占比20%
 满分分值,,5,5,5,5,5,,,25,20.00
 
[程媛媛](https://www.cnblogs.com/yuanyuancheng/),,5,5,5,5,5,,,25,20.00
 [杜桥](http://www.cnblogs.com/duq11/),,5,5,5,5,5,,,25,20.00
 ---cvs片段结束
期待修改为形如下面的样子。”||||||||||||||”一行,用于建立空行,目的是造成两行表头的效果。
||个人作业|占比20%|结对|占比20%|所属小组|小组成绩|占比30%|贡献系数(4人分配4*20)|占比30%|特别加分事由|特别加分数值|本周得分|
 |:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|
 |满分分值|25.00 |20.00 |10|20||35.00 |30.00 |5*N|30.00 |||100.00 |
 ||||||||||||||
 |[程媛媛](https://www.cnblogs.com/yuanyuancheng/)|25.00 |20.00 |0|0|飞天小女警|37.00 |31.71 |5.80 |34.80 |||86.51 |
 |[杜桥](http://www.cnblogs.com/duq11/)|25.00 |20.00 |0|0|奋斗吧兄弟|32.00 |27.43 |5.00 |30.00 |||77.43 |
 |[杜月](http://www.cnblogs.com/qianhuihui/)|24.00 |19.20 |0|0|金州勇士|48.00 |41.14 |5.12 |30.72 |||91.06 |
 |[宫成荣](http://www.cnblogs.com/gongcr/)|25.00 |20.00 |0|0|新蜂|19.00 |16.29 |6.00 |36.00 |||72.29 |
在 c1_head.sed 中:
# table head, copy & paste
1h
 1G
# blank line, copy & paste
3G
在 c2_head.sed 中:
4d
 5s/[^|]//g
(1) 在 c1_head中 复制第1行,另粘贴到第3行一份。此时文本文件仍维持原有
的行号,新粘贴的文字不能使用行号引用,因此不能进一步编辑。
||个人作业|占比20%|结对|占比20%|所属小组|小组成绩|占比30%|贡献系数(4人分配4*20)|占比30%|特别加分事由|特别加分数值|本周得分|
 |:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|
 |满分分值|25.00 |20.00 |10|20||35.00 |30.00 |5*N|30.00 |||100.00 |
 ||个人作业|占比20%|结对|占比20%|所属小组|小组成绩|占比30%|贡献系数(4人分配4*20)|占比30%|特别加分事由|特别加分数值|本周得分|
 
[程媛媛](https://www.cnblogs.com/yuanyuancheng/),,5,5,5,5,5,,,25,20.00
 [杜桥](http://www.cnblogs.com/duq11/),,5,5,5,5,5,,,25,20.00
(2) c2_head.sed中的4d,删除第4行空白行 (在c1_head中的第3行) 。
||个人作业|占比20%|结对|占比20%|所属小组|小组成绩|占比30%|贡献系数(4人分配4*20)|占比30%|特别加分事由|特别加分数值|本周得分|
 |:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|
 |满分分值|25.00 |20.00 |10|20||35.00 |30.00 |5*N|30.00 |||100.00 |
 ||个人作业|占比20%|结对|占比20%|所属小组|小组成绩|占比30%|贡献系数(4人分配4*20)|占比30%|特别加分事由|特别加分数值|本周得分|
 [程媛媛](https://www.cnblogs.com/yuanyuancheng/),,5,5,5,5,5,,,25,20.00
 [杜桥](http://www.cnblogs.com/duq11/),,5,5,5,5,5,,,25,20.00
(3) 5s/[^|]//g,把原第5行 (删除第4行后显示为第4行,仍计数第5行)改为 ||||||||||||||
||个人作业|占比20%|结对|占比20%|所属小组|小组成绩|占比30%|贡献系数(4人分配4*20)|占比30%|特别加分事由|特别加分数值|本周得分|
 |:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|:--|
 |满分分值|25.00 |20.00 |10|20||35.00 |30.00 |5*N|30.00 |||100.00 |
 ||||||||||||||
 |[程媛媛](https://www.cnblogs.com/yuanyuancheng/)|25.00 |20.00 |0|0|飞天小女警|37.00 |31.71 |5.80 |34.80 |||86.51 |
 |[杜桥](http://www.cnblogs.com/duq11/)|25.00 |20.00 |0|0|奋斗吧兄弟|32.00 |27.43 |5.00 |30.00 |||77.43 |
 |[杜月](http://www.cnblogs.com/qianhuihui/)|24.00 |19.20 |0|0|金州勇士|48.00 |41.14 |5.12 |30.72 |||91.06 |
 |[宫成荣](http://www.cnblogs.com/gongcr/)|25.00 |20.00 |0|0|新蜂|19.00 |16.29 |6.00 |36.00 |||72.29 |


4. 方案3,emacs elisp
Emacs是我平时使用的工具,所以本学期最初的转换,当需要公式,因此由 cvs转成 markdow 还没有被 ffl 支持时,自然地想到用 elisp 作为临时方案。
elisp是上下文无关文法 (或者更强?)的语言,因此可以计数,得以避免使用复制粘贴-修改这样的手段生成表头行。col-count用于存储列的数量。
(defun cvs2md-table ()
   "replace cvs format to markdown talbe."
  (interactive)
  ; , -> |
  (goto-char (point-min)) 
  (replace-string "," "|")
  (goto-char (point-min))
  (replace-regexp "^" "|")
  (goto-char (point-min))
  (replace-regexp "$" "|")
  ; table head
  (setq col-count 0)
  (goto-char (point-min))
  (setq col-count (count-matches "|" (line-beginning-position) (line-end-position)))
   (goto-line 2)
  (setq head-count 0)
  (while (&lt; head-count col-count)
     (insert "|:--")
    (setq head-count (1+ head-count))
    )
  (insert "|")
  (open-line 1)
  ; delete "||" in the last line
  (goto-char (point-max))
  (beginning-of-line)
  (kill-line)
  )
5. 收获
一个技术方案是否能被别人采用,因此具有更帮助更多的人而不仅是自己,取决于多个方面。比如,emacs这类相对小众之下开发的代码,sed这种需要运行环境和只能命令行操作的脚本,对于很多人不算友好。ffl的工具可以复制粘贴,也支持命令行,基于.net运行环境在当今不再是个问题,友好得多。
语言的能力越强,越接近于图灵机,实现通用功能,比如计数、插入某个特定数量的字符,就越容易。所以在DSL中要小心配置文件容易迅速成长为上下文无关文法,然后图灵等价,成为新的语言,专用特性的优势就消失了。能力弱一些的语言,也不见得不能实现,比如把插入特定数量的字符等价为 (事实上这才是原始的需求)复制粘贴再修改某一行。还是要确定自己的问题到底是什么,计算模型和数学模型的选择,然后才是代码。
要清楚–尽可能第一时间发现–语言或工具的限制,比如sed不为刚插入和文本编排行号,因此不能基于行编辑。

————————————————————
博客会手工同步到以下地址:
[http://zhuanlan.zhihu.com/younggift]
[https://younggift.net/]
[http://blog.csdn.net/younggift]
[http://giftdotyoung.blogspot.com]

唐诗宋词与我


题图临摹果壳日历2017年1月1日。
唐诗宋词以后,当数元曲,而不是”我”。题目所以在唐诗宋词后面继之以我,是因为元曲里,除了课本上背过的那些,我就只知道郭靖背着黄蓉的那段情话并兴亡之论。课本上的那几篇,又都油腔滑调的,颇不符合我当时的小资情怀。对了,还有前几年编程序吵架的间隙,关同学为我们科普过一段汤显祖,兼论越 (粤?)剧。就是那位一个人相当于一支军队的关同学,主业是程序员,她的故事参见[https://zhuanlan.zhihu.com/p/19966058]。
1. 第一首唐诗
小时候有一段住在我姥家,大约一年时间吧。我姨家的弟弟有次去玩儿,他没有托管在我姥家,而是去幼儿园。大人们问在幼儿园学什么,然后让他背一段唐诗。他立定站稳,声音洪亮,背了一首《望庐山瀑布》。
我现在还能记住当时他带给我的沉重打击。他比我小三四岁吧,就能背唐诗了。而我,应该还啥也不会背,或者也许能背”更上一层楼”,楼字的发音还是大舌头的。那个时候还不知道,又过大约两年之后,我才开始能写字,我爸启蒙的,是”岳飞”二字,繁体,然后才是我本人的名字。
日照香炉生紫烟,一道瀑布挂前川。
我完全听不懂,仅仅声音里的气势就把我震慑住了。
我接触的第一首唐诗,由一个比我小三四岁的小孩背出来的。那个时候,我还不能表达”我也要背”,会被大人批评”别人想干啥你也想干啥”,且原文是东北方言,比这阴损得多。
2. 我也能写
终于上了小学,顺理成章地就可以”也背”了,不用额外恳求。每个人都拥有这样的权利,背诗。所以说,教育平等非常好。
小学一年级班主任杨老师讲到《咏鹅》的时候,就是那首”鹅,鹅,鹅”,感叹着说,”你看人家骆宾王,才七岁就能写诗”,然后殷切地望着我们。其实我已经忘记这首诗的作者是谁了,刚刚还搜了一下,到底是骆宾王还是王洛宾。但是我现在还记得的是,老师话音刚落,我就举手。
老师: 咋的?
杨贵福: 老师我也能写。
老师: 真的啊,那你写一个。
杨贵福立定站稳,声音洪亮,写道: “江上往来人,但爱鲈鱼美。君看一叶舟,出没风波里。”
老师说: 你这不是写,是背。不错,我还以为你们都不会背诗呢,还有哪位小朋友会背……
众: 我,我,我。
这首诗其实我背得艰难,尤其第三句,忘记很多次。”这一句不押韵,背起来确实难”,我的诗歌启蒙老师是我哥,他非常理解地说,”你多背几遍吧。”
3. 我真的能写
转眼就是小学二三年级了,认字不多的我读了能接触到的全部书。全部书的范围,应该是三四本民间故事,人参娃娃啦,人参姑娘啦,人参老大爷啦,诸如此类。一个令我感动至深的故事,是老把头 (抓人参的人)孙某某从山东远道而来,在路上跟一个人参精变成的青年结拜,后来跟人参精走散,满山寻找。最后他弹尽粮绝,饿得不行,在古河之中抓到三只 la3 gu,因为只有精细蛋白质补充而脂肪和糖类不足,饿死在河边,死后也成了精。死前他写了一首诗:
家住山东我姓孙,飘洋过海来挖参。半路丢了亲兄弟,沿着古河往上寻。三天吃了个 la3 la3 gu,找不到兄弟不甘心。
看了这个故事不久,有天我妈下班非常晚,我放学回家没找到饭吃,炉子也落了(阴燃的煤烧尽,需要用柴火重新生火,而柴火是宝贵资源;生炉子还需要特殊技能,当时还没有解锁),冻得够呛。后来知道那天我妈他们加班,可能是绑钢筋或者搭架子,或者自愿义务献工两小时,做什么不重要。
饿死前,我也赋诗一首,如下。
家住通化我姓杨,回到家中不见娘。找啊找啊没找到,炉子落了屁股凉。这事儿不怨赵工长,只是妈妈工作忙。
第一首诗。留在这里,姑且作为纪念,一个小资青年的童年。最后两句,其实我没有那么高的觉悟。那么写,一个是当时我看到的都是这么高的格调,另一个是,除了”不怨”,我又有什么别的办法。我妈说,”你以为钱是大风刮来的啊,那是我和你爸汗珠子掉地上摔八瓣挣来的。”
不少同学的父母从事的不是体力劳动,虽然你觉得非常辛苦--到了一定年龄,就都学会了承认父母是天下最辛苦的人--但是体力劳动还是非常不同的。真正做过一段时间,你就会明白,为什么有的体力工人会酗酒,因为肌肉太疼。
我对父母的理解,只是口头的表达而已。到了初中,我迅速成长为一个小资少年,写了好几厚本诗。每页一首,字非常大,内容全是(不是大多)悲秋伤春,虽然整个初中也就三个春天三个秋天,还有感叹我班教室门口那棵大杨树要死了没人管。诗写在我妈从工地要回来的建筑施工的记录单背面。正面是我的大作,背面是铅字印刷,我们都力透纸背。记录单里偶尔有人手写的东西,鬼画符一样,看不出来是什么。封皮是洋灰袋纸那一类装订,当然上面并无水泥。我会用线装订书籍和修书,就是那时候练下来的功力,每本都像电视里线装的《九阴真经》一样。上面用钢笔描出来的毛笔字,”何以语出惊风雨,诗成泣鬼神”。
初中班主任黄老师有一次看到我写的诗,评论说,”你这随感写得不错啊。”
什么,随感?我全部的生活和感悟,只是诗歌里我觉得最不起眼的随感吗?难道不应该是诗言志,立意甚高,笔法娴熟。我很失望,对老师很失望。
当是时也,正是198X年代末。我想,如果以后有英国作家为我写自传,可能会这样回顾那一打击: 他年少时自许颇有诗才,甚至曾经尝试写出一些长短不齐并且押韵的文字。没有发现有文学家或者诗人对他作品的评论,可以找到的唯一资料是他自己引用教语文课的黄老师在他初二时给予的中肯甚至带有鼓励性质的虚假正面评论”不错”,这一评论的肯定部分极可能建立在他当时身为中二学生的这一身份之上。他对于”不错”二字并无觉悟,反而对语文老师把他的作品归结为”随感”耿耿于怀,事实上对于一个中二少年来说,如果他除了随感之类的无病呻吟,生活竟然就没有别的,当然不可能成长为一个诗人。

4. 补课
初二初三,看到同学读 李璟李煜词,她还看 李清照选集 (书也许不是这个名字,李清照是没错)。书非常薄,几十页,因为他们的作品也就那么多,书皮印成线装书的样子,当然是假的,远不如我的手工。当时对借书的全部认识,就是毛主席抢了肖三的书,一把夺过,以表达对书的热爱,然后在上面写满批注,再还回去,甚至就此匿下。好在我没有那么做,而是礼貌地借,虽然并不认识人家。
不过,你能想借我的书看 (虽然现在我既不乐意,也不会借),是对我的品味的直接褒奖。大学毕业以后,躺在床上读宋词赏析词典,被严同学借走。我对他的品味就此评价高出许多,虽然依然认为他在生物本专业和逻辑上甚是不严谨。栾同学则大段背诵原文,他背的不是短小而押韵的诗歌,而是余华的小说,还有电影《秋日传奇》的情节,事无巨细,连标点符号我看都不会错。大哥那个时候则基本不读书,后来我在他办公室里看到半柜子哈耶克汪丁丁,很是感叹了一番。他热情地推荐给我看汪丁丁,我翻翻评论道,”写得什么破玩意,话都说不明白。”他推荐我看哈耶克,说,这个真不一样。我很勉强地借走了《科学的反革命》,心想,等我看完回来批你一头狗屎。也是一本小册子,百十来页的样子,我去北京机场接Lars他们一行十多个人的时候随身带着,躺在靠椅上想催眠,结果就翻了大半本。唯心主义给我的第一次沉重打击,太有道理了。
能够在非常薄的篇幅内包含巨量内容,只有诗歌、哲学,还有数学。流落荒岛的必备读物,及《野外生存》一本。
说回初二三的那两本宋词,人家早我多少年就读过了,而我才巴巴地借来看。然后全抄下来,好在并不长。所以你看,有正确地爱好多么重要。
高中,在满是灰尘的图书室靠着窗户,看《全唐诗》。一段段写得无聊,觉得要么我水平低,要么古人写得烂,但是也不敢说。直到最近在douban看到有人发出同样的抱怨,知音啊。哪能每首写得都那么好,李白的烂诗多了去了,翻来覆去就是酒好喝啊喝好酒,我愿意天天喝啊天天喝。原文忘记了,大意如此。我都怀疑那是不是后人瞎编的。也是铅字印刷,力透纸背,两面都力透纸背,所以读起来挺费劲的,不过这成功地阻止了我继续怀疑。
5. 还是学理工吧
大学一年级,我们有征文。对,物理系也有征文,征文学类作品,不是公式推演。我应征的作品之一是在黑板上推敲出来的一段,你可以想像旁边就是勒让德公式,还新鲜热辣。
如果有一天,我不再能翱翔,你是否还会赞美我的翅膀。
P同学为代表的一干人等当面问我,当我面不是当评委面,是不是抄的,怎么记得在哪里见过。我答,林黛玉也觉得他见过贾宝玉,写得好,你读起来感觉就是这样。不是抄的,是我从高中就开始写的。
大学几年级忘记了,有选修课。绝大多数课都是必选的,并且我们必须亲自选。大家跑到机房,围成一圈的机器,只有数字的小键盘,按纸上的课表把自己必须也只能那么选的课录进去。只有个别课可选,我选了《唐宋诗词》。
老师是个高大而柔软的胖子,脸上略有胡茬。我一度担心他的胡茬会导致漏气,并没有。
他上课的时候非常有魅力,后来我发现,尤其是女同学们更觉如此。师范大学本来女生就多,喜欢唐宋诗词的男生更是稀少。你是否能体会到他讲到精彩处,全班的”啊~~哦,这样喔”这样的感觉。其实诗歌里是不太用感叹词的,除了李白,他一下子就用了好几个,”噫吁兮”。
老师上课的时候还会把古诗唱出来,他唱的是《将近酒》。比后来网上传的那段差得很多,甚至我都能听出来跟跑调似的。不过他说,这不是唱,而是吟,并且声称古人就是这样吟诗的。我想提问,一方面据说古诗的格律暗合音律,所以应该是有谱子的,每次都类似的旋律,而不应该像我一样每次另谱一曲,他给我的感觉也是随便瞎吟的,并无定规。另外,我对将近酒中醉的程度与他的理解不同,我觉得那应该是喝得正high,可以打架可以交友可以吹牛的程度,他吟的状态似乎快要说不出话要睡着的感觉。写到这里,刚刚又想起来,他还吟了”但愿人长久”,与王菲版差整整一个梅艳芳外加半拉屠洪刚。
还有个重大问题,他怎么知道古人就是那么吟的。我非常想讨教,但是课后老师被全班女生包围着问,我想并没有性别平等的提问时间,就赶去编程序了。
匆匆,是离别的生椒。
考试的时候,我非常认真地答了,题目也还简单,不必复习。但是!居然没有我的成绩。我费劲找到老师,要知道那时候既没有手机也没有微信。老师说,没有你的卷子啊,没有办法。好吧,只好认了,怎么会没有呢,我挠着头走掉,像是一个吃掉卷子的坏学生。直到我自己做了教师很多年以后,我才意识到,这是教学事故啊,你怎么能把个一心向学热爱诗歌的少年的卷子整没了,还很有理的样子。
他还在课上教我们,”腹有诗书气自华”,看着女同学们这样说。我当时还心有戚戚焉地附和,恩,男生也可以腹有诗书。
老师之不靠谱和敷衍,让我最后终于绝了写诗的念头。引用小于同学的话,看你们都在那里,我肯定不能加入啊。不屑与你为伍的感觉。所以,我坚定了信念,从此走上一条成为理工学生的道路。

6. 补记
放弃诗歌很久,初中的本子再也不动,生了霉斑。宋词词典被压在UML用户手册下面,连积灰的机会也没有。有天有人提到《唐诗三百首》第一篇是什么,他说错了,我脱口而出,不是“孤鸿海上来,池潢不敢顾。侧见双翠鸟,巢在三珠树”么。然后我悲哀地发现,后面四句,我想不起来了。
有一天,我写了一段八句律,发在朋友圈,还配照片什么。关同学在下面回,老师,好工整啊。如果有人夸你写得有感觉有才华有情怀,就跟某些人夸女生有气质差不多,意思是实在难看,而又希望评论保持礼貌。而关同学说”工整”,说明她也有此道中人,真的明白,相当于评论你唱歌”不跑调”,而不是”好听””用灵魂在歌唱”。我突然意识到,不仅仅是我,还有人也在骨子里潜藏着诗的种子。只是,我们竟日在键盘上敲下来的都是用分号结束的句子。
看人家喝酒的时候,徒夫Y老师回顾了几段他为了逼迫儿子而作的诗,每首都是观景,然后立马可取,墨迹未干。多为格律,其中竟然还有六言。我说,六言,你一定写过词吧。他说,我背过平水韵。我喝可乐敬酒时说,如果徒夫Y老师只是学问好,那么我就会觉得他是一位好学者,不过他同时可能是个乏味的人。但是他居然还能做诗,居然还能在喝酒的时候读给我们,那非常之不一样。
我看到《构建之法--现代软件工程》的作者邹欣老师出现在一张照片里,板着脸抿着嘴,挽起袖子,大马金刀地坐在中央,专注地看着眼前的书或者纸张,态度就像review代码。那张照片是人文学者杨早老师的读书会。
我看到导师在抱怨的时候在朋友圈里发了两首诗,文彩熠然。我击手机称颂,原来老师还有这个本事,平时都看不出来,以为他顶多会拉二胡呢,还没有亲见。
我看到你们隐藏在骨子里的诗的灵魂。请不要让它湮没,不要放弃,偶尔让它出来透口气。世事尘嚣,唯超然可以安静。
我们不请你喝酒道别离,而是还在追随。老师加油。有两三员大将横刀立马,当可以定中原。

————————————————————
博客会手工同步到以下地址:
[http://zhuanlan.zhihu.com/younggift]
[https://younggift.net/]
[http://blog.csdn.net/younggift]
[http://giftdotyoung.blogspot.com]

全国教师管理信息系统填报 照片处理,使用 imagemagick






1. 通知正文截选
各位老师大家好!根据教育部要求,我校全国教师管理信息系统填报工作以及开展,请大家登陆http://bwyxjs.emis.edu.cn:8082/selfservice/index。 相关要求,首次填报将于12月10日完成。时间紧,任务重,希望大家支持和谅解,按时完成任务。
2. 照片要求
26mm*32mm, >=150dpi, <60k jpg="" p="">

<60k jpg="" p="">
3. 操作流程
如果看不懂下述操作流程,把下面的内容发给您的学生,请他帮助。如果他说“不会”,请他提高信息化素养,或者使用PS。
3.1 下载 imagemagick
[http://www.imagemagick.org/script/binary-releases.php]

[https://www.imagemagick.org/download/binaries/ImageMagick-7.0.3-8-Q16-x64-dll.exe]
3.2 剪切
准备原始照片。
使用windows画图工具(win+r, mspaint)把原始照片切成 宽:高 为 26:32,另存为 crop.png
3.3 转换
使用imagemagick转换照片为指定规格。
(1) 进入命令行

Win+r, cmd
(2) 进入照片所在目录
f:;cd \20161201
(3)转换
convert -density 150 -units pixelsperinch -resize 154x189 -quality 100% crop.png output1.jpg
4.4 结束
output1.jpg就是符合 全国教师管理信息系统 要求的照片。
4. 解释
如果看不懂上述操作流程,把上面的内容发给您的学生,请他帮助。如果他说“不会”,请他提高信息化素养,或者使用PS。
如果看不懂上述操作流程,本节也不会看懂的。

剪切这一步很难自动处理,需要能AI找到人脸。


4.1 size
厘米->像素 换算
宽度 =26/25.4*150
高度 =150/25.4*32
precise_image_width_in_mm=$( echo \
"$image_width_px / $resolution * 25.4" \
| bc ‐l )
[http://stackoverflow.com/questions/11773688/how-to-change-the-print-size-of-an-image-in-mm-on-command-line]
4.2 dpi
-density 150 -units
4.3 quality
如果文件尺寸过大,可以再压缩。
4.4 unit
可以转换为以公制厘米为单位。此步骤可选,并非必须。
convert output1.jpg -units pixelspercentimeter output2.jpg
4.5 identify
检验转换结果。此步骤可选,并非必须。
4.5.1 英制
F:\20161201>identify -verbose out
 
put.jpg | head
 
Image: output.jpg
 
  Format: JPEG (Joint Photographic Experts Group JFIF format)
 
  Class: DirectClass
 
  Geometry: 154x189+0+0
 
  Resolution: 150x150
 
  Print size: 1.02667x1.26
 
  Units: PixelsPerInch
 
  Type: TrueColor
 
  Endianess: Undefined
 
  Colorspace: RGB
4.5.2 公制
F:\20161201>identify -verbose output2.jpg | head
 
Image: output2.jpg
 
  Format: JPEG (Joint Photographic Experts Group JFIF format)
 
  Class: DirectClass
 
  Geometry: 154x189+0+0
 
  Resolution: 59x59
 
  Print size: 2.61017x3.20339
 
  Units: PixelsPerCentimeter
 
  Type: TrueColor
 
  Endianess: Undefined
 
  Colorspace: RGB
4.5.3 mspaint检验

4.5.4 资源管理器检验
150dpi下,宽度154像素,合26毫米;高度189像素,合32毫米。

5. 后记
据说照片是可选的,不是必填项 😀
PDB老师说acdsee就行。
LXL老师说Photoshop可以。
李记者说用 gimp可以。
————————————————————
博客会手工同步到以下地址:
[http://zhuanlan.zhihu.com/younggift]
[https://younggift.net/]
[http://blog.csdn.net/younggift]
[http://giftdotyoung.blogspot.com]

仅仅是声音


1. 录放机

我唱歌跑调挺厉害的,厉害到什么程度呢,如果你认识我更早一些,就会见识到我是个作曲家,为每首重新谱曲,并且每次都不一样。
乐感这么差,跟我的成长环境多少有些关系。我小时候家里能发声固定频率的东西,除了后来被我上弦拧坏了的座钟,还有个半导体收音机,一直装在皮套子里,一直到不用的时候还是全新的。那个收音机成天讲的都是时事政治,因此我一直到小学四五年级,还认为”南斯拉夫”是一种风镜,棕色的皮子里嵌着两片镜片。因为每次我玩那个风镜的时候,收音机就讲”南斯拉夫”,这个故事告诉我们巴甫洛夫说的是真的。事实上,直到现在,当我听到南斯拉夫这个词的时候,母语的第一反应仍然是风镜,然后需要翻译成汉语。
当然,成长环境恶劣不是我音盲的全部原因,同样的生活环境,我哥从小乐感极佳,听每周一歌基本一次就可以自己唱了--可能词记不全,但是调子不会错,跟我刚好相反。我还见识过我妈拿着简谱视谱即唱,《欢迎颂》,我问怎么做到的,她说,”就照着唱呗。”我也就照着唱了一下,他们说”别吵吵”。当然,他们这么强大,可能正是导致我自暴自弃的原因吧。
后来半导体收音机终于换成了录放机,能当收音机,还能当录音机用。一个大家伙,半米多长,30厘米高,20厘米厚。买录放机的一个原因,是我在我爸的同事T叔家里,用他家的录音机录了一整个下午同一个故事,哪本笑话集里的《吝啬鬼》,就是向邻居借锤子邻居竟然不借,大骂邻居吝啬,只好把自己的锤子拿出来用那个故事。我父母觉得我这样太不懂事了,打扰别人,就买了一台。买的时候非常慎重的左挑右选,请了朋友帮参谋,参谋以后还请客喝酒感谢。席间一位叔叔看我和我哥兴高采烈地一直玩录放机,哈哈大笑说,”这是大狗打回来食儿,小狗吃呐。”我偷偷问我妈,他怎么骂人呢。我妈说,那是土话,不是骂人的。我当时的年龄,大概就是还听不懂这种玩笑的心智那么大。
据研究,音盲与不能听出弦外之音高度相关。我觉得好像对,因为跟你们对话的时候,我经常偷摸做句子成份分析,只是因为经常做很熟练,所以你们多数时候觉察不出来。好在我不孤独,孙HT同学和邦哥也都有类似问题,他们从小学开始,就也对问题本身的目的而不是解法困惑。我们共同的问题是,老师的这个问法可能有一百种意思,应该在试卷上写哪种意思对应的答案。
这台录放机一直陪伴我上大学离开家。我哥在我大一的时候给我买了一个巨酷巨先进的随身听--跟你父母给你们买PAD的原因一样,为了帮我学习英语。在第一学期就丢了,放在教室的桌膛里,不见了。我才明白,原来大学的文化与我所想的并非完全一致。哥说再给我买一个,我没脸要了。这样,直到大四倒数第二次,我的英语四级才过。当然,录音机丢了也不是原因,因为直到通过的那次考试,听力部分我都是根本不听直接答的。盲听答题的习惯一直持续到出国外语培训,牛老师教育我关于外国人可能会因为我不能日常会话而小看全体中国人,我才奋发图强开始学习。这是另一个故事了,以前也讲过,这次不再细说。
家里的那台录放机带给我最大的影响,是我用它放过无数遍高仓健的《追捕》的录音剪辑。录音剪辑是那个时代特有的艺术体裁,全称是电影录音剪辑,把电影录音在广播电台放,里面还有绘声绘色的解说。”通化人民广播电台,330米909千赫,本台现在开始播音。”唉呀,太有感觉了。
我们录了不少优秀的电影录音剪辑,尤其是《追捕》,听的次数之多,我能大段大段地背诵台词,那些人物在我的头脑中早就形成了亲切的形象,杜丘什么样,真由美什么样,她的马什么样,她爸爸的飞机什么样。朝昌议员,唐塔,长冈了介,还有那个横路敬二。有个初中代数老师讽刺一个同学,”你怎么跟横路敬二似的”。大家面面相觑,都不知道她什么意思,我知道,但是不能说,憋着不敢乐。低沉的咆哮从松林里隐隐传出,真由美大叫”啊~~”,史村警长大叫”小姐快跑!”。音乐声起,是紧急的鼓点,或者提琴快弓。杜丘的声音切入,吐字清晰,沉稳有力,”熊。”
杜丘沉毅果决,在我的心里,一定不会长得像郭富成,林志颖那样。但是我一直没有见到过他的形象--你可能也注意到,上面这些人名的写法可能也是错的,因为我一直靠听,没有读过--直到有一年央视春晚,那个时候叫做春节联欢会,现场放了一段录像配音。我当时正吃多了瓜子花生,脂肪摄入过高吐完躲坑上难受呢,没戴眼镜,隐约看到了心目中的英雄杜丘的样子,居然是那么长一张马脸。我难过得转过头去。但是杜丘冬人应该是什么样子呢,长得像施瓦辛格或者史泰龙么,或者像周润发刘德华?
后来我又看了几次《追捕》的视频,看了《远山的呼唤》,看了《幸福的黄手帕》。看了《千里走单骑》。我想,杜丘也许就是高仓健的样子。也许,他的样子并不重要,我是因为声音而认识了他,关键不是他的样子,而是,我希望自己是他的样子。  

2. 磁带
尽管有录放机,后来我对声音的敏感仍然一直很差。比如玩成语接龙,如果不允许音同字不同,就是必须是那个读,字面意义的,那么我能以相当碾压的姿态进行游戏。如果允许音同字不同,仅读音对就行,我瞬间就被碾压了。那些成语字词,在我心里从来不是声音,而是样子和意义。我是用五笔那样的路线听文字的形状,而不是它们的声音。我还记得1996年Z老师告诉我接一位联想公司的 Hong Shanhe,电话联系。我问,哪个”Hong”。如果仅语音联系,是不必知道哪个”Hong”的,当时我并不明白,觉得如果不能写下来的都不能沟通。
录放机对我的音乐启蒙是二人传,《回杯记》《马前泼水》《包公陪情》。其实家里有两盘流行歌曲磁盘,程琳的《小螺号》和唱《小小的我》那个苏红,但是基本没有印象了,而几盘二人传,有一阵经常在我脑海里翻来覆去地唱,尽管后来证实都是跑调的。还有《刘玲醉酒》,”大烧锅喝干了三百六,小烧锅喝干了六百三。往南喝到东南海,往西喝到老寿山 (老四川),往南喝到云南地,往北喝到塞外边。东西南北全喝遍,它未曾把我醉半边。这酒家你好大胆,信口雌黄吐狂言。今天我,上楼去把酒缸酒篓全喝干……”
初中跟同学LJL借过一盘吉他曲,回家一边写作业一边听。我妈说,”你那能写好作业么,净费电。”磁带听了一次就还了,我不记得翻录了没有,总之没有再听。那些吉他曲很好听,是只弹不唱的那种,我先前以为吉他全都是留长发穿喇叭裤的小流氓才弹的呢,而且必须会”撕吼”才行。好吧,我有这个误解的时候是1988年至1991年间,那时候只有”撕吼”这种行为,还没有这个词。
高中?高中没有音乐课。有过一次庆祝毛主席诞辰或逝世多少周年的文艺汇演,我们班JM同学带领几位女生在红星剧场参加汇报演出来着,她们都小脸红扑扑的,唱”太阳最红,毛主席最亲”和”呀拉索”。
到处找不到《明天会更好》或者《让世界充满爱》再不就是《黄河大合唱》,同学演出想唱要学,我们去通化电视台或者广播电台求人家给我们翻录。不记得怎么混进去的了,人家不给录,说不是版权什么的,而是你们的磁带会弄脏我的机器。后来我们几个死皮赖脸地求,录了。
大学学校保卫处旁边有几个铁棚子,里面有卖磁带的。都是听歌的磁带,英语的磁盘在图书馆。我在图书馆录过几盘 Step by Step,那是巨难入门的听力,特意制造了噪音提高难度,听了几次就放在一边直到毕业似乎卖掉了。或者卖掉的是同学的磁带,我的早丢了也说不定。听歌是件奢侈的事,得花钱。尤其打口带,明明有缺欠还卖得挺贵,我想都不敢想。事实上,也听不出来有什么好。我连物理系要求全体消除舞盲的时候,也分不清三步和四步的点儿,每次问同学,这是几步,然后数一二三开始。
工作以后也用过磁带,备份 Sun 服务器的数据。样子跟录音机磁带差不多,贵多了。
磁带存储了各种声音,各种声道,各种乐器的旋律和节奏。还有很多人的回忆。

3. 音箱
毕业以后在单位用单位的音箱,最好的是木质的千里马或者类似的名字。把音量放大最大的时候,整个屋子都震动,但是不失真。
比这样的音箱更牛的是大学时物理系的,黑色的,一抱粗,似乎是哪届师兄做了留下来的。功放很多年都是电子管的,开着盒子用,可能是放过热,亮闪闪的。每次舞会的时候都有师兄叮嘱,功放功率不能开到太大,别把音箱烧了。
毕业以后我自己用的音箱,第一个是学弟waxia送给我的,无源的,听了很久。在家看电影的时候就用,声音不太大,也不是非常清晰,不过比机器风扇的声音还是大很多的。要知道,更早的时候,我用pc的纸盒喇叭看过VCD。
兔子同学送过我一对有源的音箱,被老猫心情不好的时候扒拉到地上,摔得声音破碎,继续对付着用了很久。后来很多年,有人告诉我有专门卖那种胶带的,可以补上,不过那个时候我已经换了新的音箱。
BY同学送我一对巨大的音箱,现在正用。用了多半年,因为桌子面积小,一直都是一前一后对着我。搬家以后我回去单独去拿音箱和计算机,正好屋子空出来有地方,把音箱一左一右排开放了一会音乐。我当时就震惊了,原来真的是立体声的啊,声音从显示器后面传出来。我抬起显示器的机械臂,下面空无一物,音乐从虚无中汩汩流出。
还有过一个单耳的蓝牙耳机,原来不以为然,觉得就是那么回事。结果有一天刷牙的时候发现,它居然能在有噪音的时候自动放大音量,顿时觉得高大上的很,非常喜欢每天带着听一听。因为如此密集地带去,某天丢了再也没有找到。
想起来蓝牙耳机非常贵的时候,牛老师说,有个蓝牙耳机他不用了,要送给我。我说,不要,没啥用,我的手机不能连接蓝牙。后来师姐说,那玩意老贵了,为了这个耳机,你再买个手机都值啊。恩,建议很好,就是晚了点,总不能跑回去再要。
新的住址过于繁华,非常吵。买了一副主动去噪音的耳机,原来是打算清净一下好能干活。后来发现,还有别的用途。在班车上,在火车上,尤其在家里夜深人静的时候,打开主动降噪,听程壁的歌《给猫夏的你》,听夜の良曲《落叶》。就像端起一杯咖啡,就像电影里燃起一枝烟,瞬间就离开喧嚣,与这个世界隔离。
音箱和耳机,从声音的维度上让你与这个世界隔绝,进入到另一个空间。好的音箱和好的耳机的坏处是,当你见过那么好的世界,就再难忍受更差的效果。

4. 好声音
《中国好声音》除了今年的,此前的我听了每一首。我会选择这一期结束之后的某一天,在网站上一气看完。一方面我能忍受并非实时地参与,另一方面我不想被那么多广告耽误时间。有一次是在真的电视上看的,广告之长确实让我很惊讶,也坚定了我不看电视的决心。
后来我们听说,好声音里很多歌手并非所宣称的那样单纯的是美甲店老板或者商铺的伙计,他们不少人受到过非常专业的音乐训练,卖化肥也可能只是临时的营生,就跟我尽管也卖过对联送过福字 (计划过卖瓜子和冰棍) ,不过我的主要职业是高校教师。徐海星给大家留下了深刻的印象,就是那个像阿拉蕾一样的女孩,闪着大眼睛,穿着娃娃服还是学生服站在舞台上。她提到她的爸爸去世了,应该在看着她的演出。从那以后,有不少观众指出,他们不想知道歌手的家世和家事,不想知道歌手的音乐背景,怎么经过了专业的和艰难的训练,甚至不再想听歌手们在谈感想时咬着迈克大喊,”我想唱歌”,对着他们的父母。
但是我仍然愿意相信,他们的吼叫里有真实的成份。罗素说,柏拉图笔下的斯巴达有大量虚构的成份,与真实的斯巴达非常不同,但是虚构的斯巴达对于人类历史的影响,比真实的斯巴达可能更大。
我们是来听歌手的声音的,而不是看演员的演技。所以,我们也可以忽略掉所有与声音无关的一切,闭上眼睛,从始至终。不要表演,这可以不是我们对歌手的要求,而是对我们自己的要求。你--能不能,不用声音以外的因素去评判,能不能,不受其他因素的影响而感受。

我愿意相信他们”想唱歌”,只是,他们的愿望可能并不那么单纯。比如,他希望唱歌的同时,能有很多人来听,他希望追影灯和聚光灯都集中在他的身上,他希望他的父母也能支持他,他的成就也能支持他的父母对他的支持。他希望用各种手段向你证明,他们”想唱歌”的愿望有多么迫切。
不过,人们不仅希望忽略/去掉这些,而且也希望对这些手段做出惩罚,尤其是我们还不能判别真伪的时候。那么,你打算对那些真的愿望给予奖励么,这是否有违仅只声音本身的原则?
我记得梁博。那个严肃脸的少年,他一直在唱同一种类型的歌。有人告诉我,一个乐评人贬损了所有的歌手,除了他。因为他的嗓子会在这种演唱风格中受到损耗,直到最后不能演唱,但是,也只有这种损耗的唱法才能表达那种情感。
权振东,柔弱的男生形象,站在擂台上面对佳宁组合两个人,其中的男士一本正经的样子,像音乐教师,女士则一看风格凌厉。他们合唱《冬天来了》,组合先唱,这时我想,太好听了啊,这么完美和学院派,柔弱的男生肯定输了。当权振东开始唱的时候,我一拍大腿。原来,柔软可以是一种力量,从锋利的刀剑里慢慢地渗透出来。我想起民歌和美声合唱的时候,无论民歌多么高亢,都不能完全遮住美声的柔。
权振东是梁博的老师,他们的学校离我的住处只有不到5分钟的路程,每天我上班都会路过。我也想过,梁博和权振东就在这里啊,但是我一点也不想走进去遇到他们。我希望他们就一直是音乐里传达出的那个样子,不想跟他们喝酒,不想成为朋友。也不想走上去对他说,”我支持你”。如果能有所帮助,当然很好,如果能只是远远欣赏,也很好。单只口头的支持淡而无味。

我听不懂四位导师所说的那些”好听”,也不懂”灵魂歌者”是什么样子的,也不懂”走心”和”用心”,甚至不懂”当下”二字的含义。对于那些音乐术语,我是真的不懂,知识结构欠缺。而另一些,使用他们的人自己可能也不明白。
我只是喜欢张磊的声音,喜欢姚贝娜的大气。我不懂很多,我听着阚立文唱《那些年》,完全没有想起歌曲来自我看过的电影《那些年我们一起追的女孩》,这不影响我号啕大哭。我听了很多遍,并且知道阚立文不会成为冠军,甚至不会进入再下一轮比赛。我听修儿唱《张三的歌》,哈哈大笑,说,这个好玩。我不知道,后面导师们解释的那些雷鬼啊什么的风格。我并没有想过那是歌手的原创,抑或者是师有所承,派系渊源流长。
我只是听他们唱歌而已。就像魏雪漫谈到,为什么她的年龄大这么多,她作为成熟的歌手为什么参加比赛。她说,她想做很多事情,她想结婚生孩子,但是那些不是一个人能够完成的,唱歌是一个人就可以做的,所以她来了。就像刘双双唱完《致青春》,她深情地吻上她抱着的吉他。
就像张惠妹笨嘴拙舌地只会说”鸡皮疙瘩”,但是当她顺着歌手的旋律歌唱延伸的时候,那是天籁降临。长期训练的专业素养和天赋集于一身,这些共同地形成了这个人。
有的歌手,在听过很多遍以后,听者会剔除当时的感动,变得挑剔起来。我会觉得马吟吟的《海上花》还是有点沙哑了,尤其每次听的沙哑都相同。我会觉得张婧懿的《斑马》有点上不来气,程壁的呼吸声也让我气短。有不少人在声音之余觉得,盲人女歌手张玉霞长得不好看。他们可能把贝多芬盲女的故事代入到这里了,由于不能看到自己的脸,其实盲人很难把握自己的表情,我见过最好的就是没有淡然没有表情。
尽管并不完美,但是他们仍然是”想唱歌”的歌手。我想,你应该想到,吴莫愁的音乐大篷车根本不会是她所想像的或者笑哈哈的说起的那样。剥落的油漆,尘土扬天,人的气味,油腻的衣服。这才应该是全部,还有猥琐的观众和低俗调子。你不应该去想像,音乐大篷车唱的是校园民谣。
但是她”想唱歌”,我们忽略掉其他的一切,或者不去细想,只是体会坚强和热爱。还有在恶劣环境下成长起来的努力和天赋。
我猜测那个一直戴着帽子的大男生,一激动就蹲在地上,并非完全真实。就像后来有个小伙子一直很帅地笑着,一直执意把耳机套在脖子上,作为装饰。他们,所以上面这些歌手共同的是,想更多一些机会唱歌,如果我们姑且抛开唱歌之后的目的。
我们不能接受那些假的,而愿意全部的热情都是真实的,并不是因为我们有多么讨厌撒谎的人,而是因为,我们希望那些屏幕上唱歌的人,就是我们自己。我们希望更加纯粹的情感,我们希望他们能够替我们做到。所以白领骨干精英们当年喜欢张靓颖,年轻小女孩们喜欢李宇春。所以,有人喜欢莫西子诗,他唱道,”要死就一定要死在你手里”。
那么,为什么要由别人来替我们完成呢?我们此刻就应该去做我们最想做的事情,或者去做你最希望得到结果的事,就像明天就会死去,就像下一秒就会死去,并且此刻的选择令你在死前没有遗憾。
电影里说,对于年轻人,可能费点时间不算什么,但是对于有些人,”每一次呼吸的时间都是宝贵的”。
歌手们说,他们为唱歌而生。为之而生的意思,就是可以为之而死,因为时间就是生命本身.我们能付出的最大的代价,不是别的,正是生命,也就是时间。此时此刻,我们选择做的,应该就是我们真正地愿意为之而死的事。

————————————————————
博客会手工同步到以下地址:
[http://zhuanlan.zhihu.com/younggift]
[https://younggift.net/]
[http://blog.csdn.net/younggift]
[http://giftdotyoung.blogspot.com]

20161103

远隔天涯



我跟大家开的一个玩笑,经常在每当大家指出我如何如何就活不长久的时候说出来,"我以后是咱们里活得最久的一个,然后挨个给你们写传记,编派你们。哪个子孙要是说我瞎写,我就指着他说,那时候你出生了么,你知道个啥。"

但是有时候我也怀疑,我能不能活过你们所有的人。或者,在你们全都离开以后,剩下的时间够不够我写完。

所以,趁我们还都活着的时候回忆一下。

我所有的同学里,已知去世的,一共5个人了。每一个当我们回忆起来的时候,都一阵唏嘘。除了在大学就去世的那位,其余的都是在喝酒前或喝酒中听说的。每一次我都想说,让我们这杯敬给某某,他不能跟我们一起喝了也。我不敢说,怕你们大家一起哭出来,或者我一个人哭出来,那岂不是更糟糕。我知道,你们也是这么想的。

即使我们都生活在这同一个世界,大都也远隔天涯。远到,另一座城市,铁路或航线的另一端。因为求生,即使上了车就可以端起书隔开喧嚣,其实那也很久。从离开家到站台,从另一个站台到你的居处,分别需要1个小时以上。比如从沈阳或哈尔滨到长春,不是1个小时,而是3个小时以上。再加上请假和各种任务的拖延,加上往返劳顿以后的休整,就想,也许以后吧。我已经很久没能把当天的任务完成,然后非常放心地看碟、打游戏、喝杯咖啡。咖啡大多数时候是兴奋而不是享受。我也已经很久没有探望任何一个同学了。

我和我爱人去探望过一位师兄,最近又联系上了,发现虽然换了若干手机,他的名字在我现在的手机里还是写好的词组。我去看他的那个年代既没有手机也很少有电话,所以我也没有预约,就突然出现。他刚好安排了家教,把我们安排在他家那么大的房子里以后就跑了。过了一会儿,他爱人也要去家教了,我们才意识到自己唐突,也跑了。跑得仓皇,把一本机械工业出版社的关于需求或者测试的小薄册子丢在了他家。后来他问起过,我说就放在你那儿吧。已经15年以上。

这位师兄是我景仰的想成为的那种人。

他当年高考失利,似乎被他爸揍了 (?)我见过他的父亲,完全不像会打人的样子。被揍以后他就跑啦,从内蒙古随便搭了一辆火车,朝着远在天涯不知道什么地方。我不记得他说的是过了多久,也不知道当年那段路程需要跑几天,他吃的什么。总之,下了火车以后,他就到了北京。

他讲的时候,我的脑海里就浮现出浅丘戈壁,风吹草扬。少年就这样离开家乡,下车的时候看到满眼绿车皮长长的列车,一排又一排。

我问过,那后来呢。他说,后来就回家了,再挨揍。我不记得是当年,又或者是下一年,他就考到了东北师大。

他下一年,我也来了。迎新晚会是在新共教,那次演出是我从未见过的,大学生活的开始,原来可以这样。这位师兄和后来我的大哥合唱一首《青春》。一个人蹲在地上,举着话筒,另一个人坐椅子上抱着吉他。我当时惊叹,这就是友谊啊。高翔旭唱《舍不得你的人是我》 (感谢郭勇纠正) ,他后来的媳妇在一群白衣少女中为他伴舞,这里面不知道哪个女生跑进圈里为他献花。我一拍大腿,这就是爱情啊。金一雄和朴英唱《糊涂的爱》,后来他们就恋爱了。主持人介绍金环老师,最高一级的同学 (几乎全是男生)一齐起哄,因为前几天她还是师姐。后来我最初执教的时候,也刚刚不是师兄,现在师弟兼学生们还偶尔回忆起来。

后来,和这位师兄,我们还一起参加过教师技能大赛。他是霹雳舞的天才,整个人看起来就是那个样子。前几天一位同学来访,我们回忆起当年共同认识的一些人。她说,她记得93年有个男生,是什么什么样子。我立即脱口而出,那是谁谁啊,他跳霹雳舞蹈特别好,他是不是整个人看起来就像是踩在弹簧上。在那次教师技能大赛上,有才艺表演,他就跳霹雳舞,把我们从电影里看的各种动作全来了一遍。从来没有想过,这样的动作真人也是可以做出来的。他就像体操运动员一样,充满力量地跳来蹦去。嗯,原来小流氓们的舞蹈也可以在大学校园里跳啊,如果我会打口哨一定要来一声响的。

后来我们喝酒的时候,师兄说,他上场以前特别紧张,走来走去都不对劲,就觉得要出事。后来,女主持人走过来告诉他,"同学,你拉链开了。"然后他做了一个拉裤子拉链的动作。他就不紧张了,上场非常带劲,完全成功。我和大哥听完以后哈哈笑。笑完我就问 (很多年,我一直是这种理解水平,你习惯就知道了),"她说你拉链开了,你怎么就知道是裤子?"师兄说,"我浑身上下就这一个地方有拉链啊。"

这位跳霹雳舞的大侠,帮着同学出主意怎么对师妹表白,如今佳偶的孩子已经十多岁了。这位跳霹雳舞的大侠,在我另一次去看他的时候对我说,你当年青睐过的女生啊,现在已经是个非常普通的女人罢啦。这位从内蒙敢跑到北京的少年,居然住着大房子,跟老婆两个人出去家教,我那个时候实在很难接受。

我非常想问,你的梦想呢。而且这句话你可以想像语气。我们那个时候,从来没有师兄学长这样的尊称,都是三个字直称其名,我现在仍然觉得只称后两个多么暧昧。

我没有问,我觉得没有了梦想,或者换了梦想的人,不希望被问。更何况你远远看着,希望成为的那个人,你不希望他给你讲一大屁股做人的道理。如果那样,我就只想说滚,大家连怀念就都没有,有什么好。

有些师兄师姐和同学后来的样子,在另一个故事里有提到,这里略过。

但是!

他从来没有丢弃他的梦想,还是那样的少年。或者说,在做着本职的同时,他的身上也仍然满是那个唱着民谣疯狂地跳着舞蹈的少年的影子。

这次联系上是从大哥那要来这位师兄的微信。加上以后照例一顿扯屁。近照给我看看,还剩多少头发之类的。他发给我一张光膀子上篮的照片。在他的朋友圈里,我看到他炫两把吉他,光洁如新,弦声若空。

我突然想起大哥提起这位师兄前几年抱怨沈阳不让骑摩托了。我当时说,不骑不骑呗,那么危险。大哥说,你懂啥啊,又说,不骑不就白买了吗。我说,一个摩托能有多少钱。大哥说,八万。我说,八万能买一辆很不错的车啊。大哥说,那也不是摩托。

这两年他跟大哥电话的时候,提到要做万有引力常数测量装备。我说,电话给我,我来我来。我说,"那叫卡文迪许扭称",然后一顿否定。可是,他敢于和愿意做这个我记得需要一座山来帮助测量的装置,而不是问"师大附中最近有什么题啊""你打字速度有多快啊",这本身就多么令人向往。

这样疯狂的同学,居然还活着,还是按他原来的样子活着,活得还不错。前几年还能揍学生。这多么令我欣喜。他在照片里满脑袋黑的白的头发扬起来,对我竖起中指,咧着嘴笑得像个傻瓜。我很高兴。

这位同学远在沈阳,和我3个小时的车程。大哥大婚的时候他来了,因为晕车,大哥陪他从车站走到学校,我似乎出差去了。我去过沈阳见他两次,很多年没再去。没有像当年那样电话也不打信也不写,突然就跑到学校办公室敲门。其实即使在同一个城市,在同一个校园,也是这样。

建一同学和我在同一城市,铁子老弟和我在同一校园,都已久未谋面。他们都在忙着各自的事情,我在忙着理各种乱七八糟的线头。如果不是有共同的事业,人生很难在错开以后再有什么交集,除了喝酒买醉的时候。

更不用说,我那些已经离开的同学。想再相聚一叙一饮,唯有百年。恼了散了不得相聚,还可以偶尔微信电话,那些人和相信他们的那些人,没有"哪天再聚",而是永不能相见了。

不过我也想,如果不得相见,近在一城,或者远在天涯,或者是生死相隔。有什么分别?

有的。

那就是,如果你还活着,像我的这位师兄一样活着原来的样子,在世俗之中又能安身立命。你既能跟世人胡吹海塞,也能偶尔让我看到你弹吉他的样子,看到你终于架起HAM天线的时候,看到你忙完世事终于坐着火车路过西伯利亚的白桦林。

看到你看着我的文字哈哈大笑或者热泪盈框。

又,我发现个秘密。如果用五笔打字,打出文字颠倒来,是一种疲劳程度,如果打出音同字不同的错误来,就是累得必须休息了。

----

下面是与正文毫无关系的 emacs lisp,用于把 excel的cvs转成 markdonw 格式的 talbe。因为有更好的替代品,我不会再维护,扔在硬盘里就找不到了,估且存在此处,不另文发布。

(defun cvs2md-table ()
  "replace cvs format to markdown talbe."
  (interactive)
  ; , -> |
  (goto-char (point-min)) 
  (replace-string "," "|")
  (goto-char (point-min))
  (replace-regexp "^" "|")
  (goto-char (point-min))
  (replace-regexp "$" "|")
  ; table head
  (setq col-count 0)
  (goto-char (point-min))
  (setq col-count (count-matches "|" (line-beginning-position) (line-end-position)))
  (goto-line 2)
  (setq head-count 0)
  (while (< head-count col-count)
    (insert "|:--")
    (setq head-count (1+ head-count))
    )
  (insert "|")
  (open-line 1)
  ; delete "||" in the last line
  (goto-char (point-max))
  (beginning-of-line)
  (kill-line)
  )



------------------------------------------------------------

博客会手工同步到以下地址:

[http://zhuanlan.zhihu.com/younggift]

[https://younggift.net/]

[http://blog.csdn.net/younggift]

[http://giftdotyoung.blogspot.com]


20161008

猜测在学习新工具中的作用,一个实例

猜测在学习新工具中的作用,一个实例

1.

当年我参加李YL老师组织的Linux内核源码讨论班,大家坐教室里,人手一本厚厚的《Linux内核源代码情景分析》。多厚呢,上下册,单册800页左右。我们都把书摊在桌面上,举起来太累了,听轮值的某个人讲,说我看到哪哪儿了,这一段的意思是啥啥,这段代码引用了某个数据结构,在哪哪页呢,那个人讲,我们就哗哗翻书。

用翻书的办法讨论,因为那是2002年前后,教室里没有计算机,没有笔记本,没有投影仪,也没有平板。

轮到我讲了。我讲了两页,然后提到某某处我猜是怎么怎么回事,假设如此,那么我们继续往下看,某某段的说法就容易解释。在我结束的时候,康凯同学点评,他说: 杨老师你不能这么整啊,咋能"假设"呢,你应该找*到底*是什么回事。我问,在哪找,咱们没机器代码查起来慢啊。他说:在书上找啊。

我拒绝了他的读书方法建议,答复如下。我本科是学电子的,是物理系出身,我所受到的教育就是,先假设,然后用实验事实证实或推翻假设,从我假设以后书上后面的那些段落,都是用来证实或推翻我的假设的依据。

2.

这让我想起书上讲的妈妈给孩子讲睡前故事。妈妈每当讲到关键时刻,就对孩子说,你猜后面会发生什么呢。然后孩子就自发地产生了编故事的能力。书上是这么讲的,我妈没给我讲过睡前故事,所以我也不知道是不是真的。不过,听说过一千零一夜故事,我担心那孩子被悬念勾着更睡不着了吧。

当听到真正的故事时,还会和自己头脑中的对比,"这不合理,杜丘怎么就会忘了装子弹","这个设定太取巧了,谁能想到杀人犯还有个双胞胎"。

我们在听故事的时候,对情节和人物确实是有预设 (猜测) 的。知识不仅来自书本 (!),而且来自猜测。然后我们需要根据猜测设计实验,检验我们的猜测正确与否。如果猜测对了,我们就快捷地得到了新的知识,虽然书上可能没写--书上并未写全你要用到的所有的知识,所以也不要预期可以依照书本生活和工作。

猜测-设计实验验证-使用知识,这是成熟的工程师区别于初学者的一个重要标志,因为工程的一部分正是实验科学。我很多年以后才知道,从培根的实证主义到波普尔的证伪主义,到罗素的对一致性的追求,设计实验的朴素观点背后还有哲学理论的支撑。

不知道这么年过去了,康凯同学对当年的讨论作何感想。他们毕业的时候聚餐叫我去喝酒,刚好没有成行,所以没有来得及问他那时的看法。不过计算机系的同学可能因为缺乏充分的实验,所以一直以来给我这样的印象,重课本而轻实验设计。谷同学和孙同学曾经非常惊讶地对我说:鞠同学怎么可以这么做呢,她根本不知道书上确切地是怎么写的 (当然也不知道知识是不是就是那样) ,就说,那咱们试试吧;一试,行,就说咱们就这么整吧。我当时的评论,这正是鞠同学厉害的地方。

猜测是建模/谓词判断/命题,设计实验是根据逻辑推论--如果猜测正确,那么这样设定实验,结果该当如此,如果结果不如此,那么猜测是错误的。这样,猜测-设计实验验证,以后我们就得到了新的模型/定理,作为工具可以应用于符合条件的场合,用于预测结果,用于改变环境。

老师有的时候提到"学活了"或者"学死了",区别大体指的就应该是这个吧。

3. 一个实例,用rrdtool提取cacti数据

以下的故事,用以展示猜测在整个学习使用新工具流程中的位置。

3.1. 要显示流量,读cacti,是图片,不能 XML parse

需求是这样,要在程序中显示校园网各汇聚层交换机的流量 (上行和下行)。你可以想像客户站在大屏幕前,指着天气图说,你看就是这条线上的数据,要显示在这里这里和这里。

(天气图)

天气图是cacti展示出来的,cacti是网络流量监控的图形化工具,配置以后通过cacti已经可以查看各汇取层交换机的流量数据了,点击线路,就可以看到。

(流量图)

凡能看到的,就能抽取。所以主力研发郑同学就说,那我先研究一下 java httpclient 吧。我否定了这个计划。我否定的并非使用 httpclient,而是投入时间去尝试学习研究,而是先假设这一部分不会有问题。httpclient是著名的apache的项目,而且濮同学早就用过,所以是确定地技术路线,没有风险。反倒是另一件事情有高风险,并非"凡能看到的,就能抽取"。httpclient能模仿浏览器的各种行为 (js解释呢?),但是 xml parser 部分 图片是不可以"抽取"成文字的。只要没有变成文字,那么就不能放心,客户可能打算换字体字型字号呢。万一天气图里的数据是图片,httpclient这条技术路线整体需要放弃。

天气图里的数据是图片。

而且从图片的 caption 和 URL 里得不到文字。

故事的第一幕就此结束。英雄遇到灾难,离开故乡,开始历险。

3.2 cacti数据可以用rrdtool读取,UNIX时间戳,zhumao同学说

我和向龙同学分别对着自己的显示器,显示器后面很多公里线路以后是郑同学,我们都愁眉苦脸。zhumao同学催,啥时候能去吃午饭呐。我敲键盘,"要完了啊。"

zhumao同学远程说,cacti的数据都在数据库里,可以抽出来。

峰回路转,午饭可以下咽了。

下午,我和向龙同学研究从哪个"数据库"里抽数据。向龙介绍cacti的数据库配置的是mysql,然后我俩把mysql数据库翻个遍,各个表,各个字段。从尺寸上看就不会容纳那么多日志。

但是zhumao同学技术上很可靠,应该不是虚言。所以我们判定,"数据库"一词不是指关系型数据库,而是泛指能存信息的容器。

zhumao同学远程说,抽取的工具是rrdtool。过了一会又说,时间节点用的是UNXI的1970年时间戳。

希望重新燃起,我看到大半夜的微信上向龙同学和郑同学进行各种尝试。

3.3 猜不到数据在哪里

我以为故事快结束了,但是向龙同学和郑同学说,"猜不到数据在哪里"。

"不是说用rrdtool么,zhumao用过啊。"

"zhumao只是说可以用rrdtool,他并没有声称自己用过。"

郑同学已经把rrdtool的语法研究得八九不离十了,就是抽出来的数据和天气图上显示的对不上号。

故事一般都是这个路线,一到关键时刻--钥匙就丢了,计算机刚好没电,掌握密码的人被打死了,主角的最主要助手突然叛变,"其实我是卧底"。为什么到关键时刻才会这样,之前一点也不。因为关键时刻是这么定义的,出现了困难的时候,如果不能克服,那就是完蛋。而在实验和工程中,每一个困难如果不能克服或者绕过去,那么就会完蛋,所以有N多关键时刻。比看警匪片和侦探故事还刺激。

4. graph properties 可以查看源代码 rrdtool graph

向龙同学提供我授权登录cacti (天气图及设置) 和 ssh到rrdtool工具所在操作系统,更关键地,他随时提供给我现场的部署、状态,比如天气图上的线路和rrdtool数据库的对应关系,他和郑同学尝试过的指令和结果。

长弓已经架好,重装步兵阵列在前,巨龙就在前方洞穴之中,只差最后一击。当然,这一击以后发现还要再出击N次也是常有的事,不过如果这次失手了,那就是最后一击,然后我们全军覆没。

4.1. 猜测及实验验证

(流量图)

向龙给我展示的是这张图。整张chart以及图例和注释全都是一整张图片,PNG格式。我确认了我看到的和战友们所看到的相同。天气图是一张图片,我在郑同学这样声称以后也确认过一次。

猜测: 这张图是此刻实时生成的,是从"数据库"里读出来的,不是原来在磁盘中的。

否定: 向龙指出,zhumao在磁盘确实找到过这张图片。 (赞叹zhumao的反向工程能力)

再猜测: 磁盘里的这张图片也应该是生成的,用rrdtool工具从"数据库"里读出来,然后生成的。

猜测的依据: rrdtool 是 round robin database,文本或压缩文本的存储效率要比图片高很多。理智的设计不会存储图片。

鼠标在图示右上角的小扳手上悬停,显示tips为 properties,左键单击,是这个界面。

(rrdtool graph)

长得真是如我期待,上面是代码,下面是代码生成的图。

那段代码是:

----代码开始----
/usr/bin/rrdtool graph - \
--imgformat=PNG \
--start='1474880074' \
--end='1474880360' \
--title='H3C12508 - Traffic - Ten-GigabitEthe' \
--rigid \
--base='1000' \
--height='120' \
--width='500' \
--alt-autoscale-max \
--lower-limit='0' \
COMMENT:"From 2016/09/26 16\:54\:34 To 2016/09/26 16\:59\:20\c" \
COMMENT:"  \n" \
--vertical-label='bits per second' \
--slope-mode \
--font TITLE:10: \
--font AXIS:7: \
--font LEGEND:8: \
--font UNIT:7: \
DEF:a='/var/www/html/cacti/rra/h3c12508_traffic_in_190.rrd':'traffic_in':AVERAGE \
DEF:b='/var/www/html/cacti/rra/h3c12508_traffic_in_190.rrd':'traffic_out':AVERAGE \
CDEF:cdefa='a,8,*' \
CDEF:cdefe='b,8,*' \
AREA:cdefa#00CF00FF:'Inbound'  \
GPRINT:cdefa:LAST:' Current\:%8.2lf%s'  \
GPRINT:cdefa:AVERAGE:'Average\:%8.2lf%s'  \
GPRINT:cdefa:MAX:'Maximum\:%8.2lf%s\n'  \
LINE1:cdefe#002A97FF:'Outbound'  \
GPRINT:cdefe:LAST:'Current\:%8.2lf%s'  \
GPRINT:cdefe:AVERAGE:'Average\:%8.2lf%s'  \
GPRINT:cdefe:MAX:'Maximum\:%8.2lf%s'
----代码结束----

"/usr/bin/rrdtool",这是一段命令行。

ssh到服务器,向龙告诉我去哪里可以找到 rrdtool 和 数据库文件。我跑了一遍上述代码,输出一个png文件到文件系统中,正是我想期待的。

故事发展到这里,我们知道,"/usr/bin/rrdtool graph"及正确的参数可以从数据库中抽取数据。只是抽取得到的形式还不尽人意,我们想要文本,得到的是图片。

就此验证zhumao的猜测都是正确的。

事实上,在另一条分支上,向龙和郑同学走得更远。他们已经得到了纯文本的结果,用的指令是"rrdtool fetch",只是抽得的结果还没有与天气图对应上。"rrdtool graph"直接证实了zhumao的猜测是正确的,抽取数据可行。

4.2 手册

运维和编程的著名格言: RTFM -- Read The Fxxking Manual.

我找到官方站点,[https://oss.oetiker.ch/rrdtool/doc/index.en.html],去读手册。此前郑同学也已经独立到过这里。

然后我根据 rrdtool graph 手册解释了刚刚那段代码里的这一小段

CDEF:cdefa='a,8,*

其含义中的重点是: 乘以8. 因为数据库里以字节为单位的,输出的图形是比特为单位的。

我执行了下面这段
----代码开始----
$ rrdtool fetch h3c12508_traffic_in_190.rrd \
> --start='1474880074' \
> --end='1474880360' \
> AVERAGE
                     traffic_in         traffic_out

1474880100: 1.9393791780e+08 4.9525977422e+08
1474880400: 1.9499877230e+08 4.8637343825e+08
----代码结束----

然后手动 (用 windows calc)计算

traffic_in :
1.9393791780e+08 * 8/1000000000 = 1.5515033424
1.9499877230e+08 * 8/1000000000 = 1.5599901784
平均值为 (1.5515033424+1.5599901784)/2 = 1.5557467604
作为对比,图示中的数据 Inbound 为 1.56G.

traffic_out :
4.9525977422e+08*8/1000000000 = 3.96207819376
4.8637343825e+08*8/1000000000 = 3.890987506
平均值为(3.96207819376+3.890987506)/2 = 3.92653284988
作为对比,图示中的数据 Outbound 为 3.93G.

抽取出的数据与图示吻合了。

4.3 放大图示,对比数据,向龙同学说

我展示方法,向龙同学说,我乘以8了啊。我问你从哪边往哪边乘的。他说,因为不确定到底如何,做了不少猜测,从两边分别都乘过。这是本故事的另一个寓意了,猜测的时候如果知道那样一定正确,尽可能减少其他可能,就更好。不就此展开。

事实上,这个实验的最后一击并不那么简单。向龙同学提供了对比数据的spec说明: 放大图示到某个具体的分钟,抽取的数据与这个具体的分钟的数据对比,避免在时间段内平均等造成的误差 (和复杂性)。同时,向龙同学提供了放大图示的手段,郑同学此前不知道放大的方法,我没有想到选取具体的时间节点。

4.4 时间转换,双向;新的关键环节:时区

有的同学可能已经注意到我上面引用的代码中的时间是UNIX时间戳,这是zhumao提示的。具体使用的时候,我的时间戳来自两个来源,(1) 从 rrdtool graph 的代码中抄,(2) 利用在线工具 [http://www.epochconverter.com/] 双向转换。

(图)

我这样找到在线工具的, bing: unix time stamp convert,然后右上角"Switch to Bing in English"。第一页前几个就很好使。

(3)命令行工具,Linux内置

----代码开始----
$ date --date='2016-09-26 17:02 CST' +%s
1474880520

$ date --date @1474880520
Mon Sep 26 17:02:00 CST 2016
----代码结束----

(4) 等实验完成了我才注意到,rrdtool fetch 接受一般的时间格式,还有倒退几分钟这样的功能。可以不用UNIX时间戳的。

在转换时间格式时我注意到有时区,所以为了避免可能的问题,确认了一下操作系统本地时区是东八区,北京时间。


----代码开始----
$ date -R
Mon, 26 Sep 2016 17:36:37
+0800

$ date +%z
+0800
$ date +%Z
CST
----代码结束----

5. 加强、改进,玩

大局已定,我们对手册里的其他工具做了些尝试。与其说是加强和改进实验结果,不如说像猫抓到老鼠以后行为,"总算抓到了,快让我玩会。"我在程序跑对了以后,也总喜欢再多跑两次,好像生怕它会跑出不同的结果,或者多享受几次正确地运行。

5.1 用命令行过滤数据

为了后续开发方便,我用命令行去除了数据中无用的部分。

----代码开始----
$ rrdtool fetch h3c12508_traffic_in_190.rrd -s -5min AVERAGE | tail -2 | head -1
1474879500: 1.9791172526e+08 5.0410319243e+08
----代码结束----

其中的 -s -5min 指数据截取的开始时间为从此刻回退5分钟,结束时间为此刻。

5.2. 查手册,得到解释及更丰富的语法

还有导出为xml格式

----代码开始----
$ rrdtool xport \
> --start='1474595681' \
> --end='1474595683' \
> DEF:a=h3c12508_traffic_in_190.rrd:traffic_in:AVERAGE \
> CDEF:cdefa='a,8,*' \
> XPORT:cdefa:"IN"
<?xml version="1.0" encoding="ISO-8859-1"?>

<xport>
  <meta>
    <start>1474596000</start>
    <step>1800</step>
    <end>1474596000</end>
    <rows>1</rows>
    <columns>1</columns>
    <legend>
      <entry>IN</entry>
    </legend>
  </meta>
  <data>
    <row><t>1474596000</t><v>9.0713941203e+08</v></row>
  </data>
</xport>
----代码结束----


导出为json格式

----代码开始----
$ rrdtool xport \
> --start='1474595681' \
> --end='1474595683' \
> --json \
> DEF:a=h3c12508_traffic_in_190.rrd:traffic_in:AVERAGE \
> CDEF:cdefa='a,8,*' \
> XPORT:cdefa:"IN"
{ about: 'RRDtool xport JSON output',
  meta: {
    start: 1474596000,
    step: 1800,
    end: 1474596000,
    legend: [
      'IN'
          ]
     },
  data: [
    [ 9.0713941203e+08  ]
  ]
}
----代码结束----

5.3. 后备方法 rrdcgi, librrd, rrddump

我们还知道些后备的方法,在当前项目中不会用到。

估计可以用于http输出的rrdcgi, 估计可以与其他语言 (C?)联合开发用的librrd,估计可以把数据库倒出来的工具rrddump。

6. 总结

猜测在学习新工具中的作用如此重要,以至于如果你没有猜测的话,就不要按下回车。哪怕你有很多种猜测也好,只要列出一张表来,一个个试过去,留下看起来最正确的那个。但是如果你没有猜测,就失去了主动性,而是被动地观察实验现象,却对支配实验现象背后的物理图景毫无察觉。

据说,李靖与李世民讨论兵法,他说: 千章万句,不出乎"致人而不致于人"而已。

------------------------------------------------------------

博客会手工同步到以下地址:

[http://zhuanlan.zhihu.com/younggift]

[https://younggift.net/] 悄然支持http2,再次感谢高博先生

[http://blog.csdn.net/younggift]

[http://giftdotyoung.blogspot.com]


20160925

读书的层次



我读书少,不敢妄谈读书,更不敢讨论层次。只不过还是因为读书少这个原因,想不出来别的文字,题目才取此下策。我只想讲几个故事。

1.

因为家里没有几本书,我小学三四年级的时候开始经常去市图书馆。图书馆的大部分不对少年儿童开放,只有两处除外。一处是少儿外借,以童话和科普为主,没有习题集,另一种只能在阅览室里看,花花绿绿的少儿杂志。我当时对少儿杂志颇为不屑,觉得怎么那么幼稚呢,都是大人模仿孩子说话,内容明显骗人,感觉作者以为你很弱智的样子。所以我大多数时候只读外借的那些,觉得自己很与众不同的样子。想借大人的书,不让。

这正是当今不少成年读书人的写照。就是那种感觉,我很孤独,我的观点如此帅呆,我如此卓而不群,与传说中的萨特叔本华尼采有得一拼,只是现在还没有成名罢了,你们这群盲人。也不是一样一样的,相去不远也。

现在的你当然一眼就看出来我当年的幼稚了,三四年级的孩子中的一个孩子,不过如此。

很多时候,孤独仅仅因为视野狭窄,没有找到同路人,没有看到引路人。我至今经常为想到某个观点沾沾自喜,后来发现早有人提出,而且深刻得多,完备得多。说来还是见识少。如果多些这样的打击,孤独感顿消,在古今了不起的思想中,你我的看法连渺然众矣的资格怕都没有。某些人的"祖上早已有之"也在此列,包括莱布尼兹的二进制即我周易之阴阳,包括康德的道德不就是己所不欲勿施于人么,那都是你的肤浅理解。肤浅二字,正是字面含义,不是替你自谦。

2.

前一段王宝强新闻,有人提到在《唐人街探案》中早有伏笔。我怎么也想不起来,几经启发还是毫无印象。后来到douban上找剧照,才一拍脑袋,啊对对对。有些电影电视情节,看了就忘,甚至连"不好"二字的评价都没有印象。当年李记者、小刘同学大力推荐 The Big Bang Theory,我看了半集实在难以继续。后来跟Johan Lilius 教授提起这剧集,他说,不错。我说,是么,如果你推荐的话倒是值得再试一次啊。他笑着补充,看的时候记着把脑子关掉一会儿。我试了,果然灵验。如果你只保持那么几分钟的记忆 (金鱼七分钟记忆是扯淡,你喂过就知道,它们见到人影挥手就会有巴浦洛夫条件反射,决不是七分钟前训练出来的),只关注隐约的印象,不要太过于深究细节和合理性,bang,整个世界都好了,很幽默。

我用同样的方法看《破产姐妹》也很好。当年流行过的《学习的革命》《给加西亚的信》《少年派的奇幻飘流》如果我能持这样的态度,估计读起来也会顺畅很多。

但是并非所有的作品都适合这种骑马观花一样的心态,那些需要拿来真正干活儿的知识,松懈不得。可惜有些人读什么都是"在这个夏天,我度过了人生中难忘的一段,读到了如此感人的作品",除了感觉,别无其他留下。当然,还有,可以吹嘘,比如我读过《飘》《乱世佳人》《呼啸山庄》《简爱》《傲慢与偏见》《瓦尔登湖》。然后呢,这些作品的细节你还记得哪些,这些作品改变了你的什么品质和观点,能背诵一段出来也陶冶一下我的情操么?注: 我举例这些女性喜欢枚举的作品决不是男权思想,而是因为男性通常连这些都不读,甚至连篇名都不知道。

3.

当年本科一年级,大家在宿舍吹牛,不记得怎么就说到了希特勒。我就说,希特勒他不是德国人,他出生在奥地利,就像拿破仑出生在科西嘉岛,那时候科西嘉属于意大利。有人使用了群嘲技能,我被各种嘲笑。

第二天,我去图书馆借来《第三帝国的兴亡》,指着其中的某行给那位最坚定不相信我的同学看。他先是奇怪我为什么举本书给他看,然后是大度地说,"哎呀,你还这么当真啊",中间唯独没有原来如此的表情。

不少人读书是这位同学的态度,忘了就忘了,能怎么样呢。另有不少人读书 (或者读摘要)是我当时的态度,你看这个你又不知道吧。

忘了就忘了的态度,我在科幻作者中见到不止一例。参加科幻的笔会,我带着对那些作品景仰的心去的,每遇到一位作者就巴巴地说,"我读过你的某某篇,那一段太感人啦,那个人物我太喜欢啦"。好几位作者对我说,"我不记得了啊,因为我写过好几个版本,发表的时候都不知道是哪个版本了。"我信以为真,直到遇到潘海天先生。我非常心潮澎湃地对他回忆了他写的斩蛟一段场景,他很淡淡地说,"大家都是作者,你不用这样。"然后奇怪的说,"这段发表的时候删了,你在哪看到的?"我在清韵论坛上看到的。他是我见到的科幻作者中第一位记得自己写过什么的,刘慈欣先生也记得自己写过些什么。

有些作者没有忘记自己写了什么,甚至比读者记得的更多。我拜见《构建之法》作者邹欣先生,说了我在教学和工程中的一些困惑。其中有几个问题解答时他提到,就在书里的某某处作过讨论,有一处甚至引用了一下原文。面对这样的作者/读书人,我不敢奢谈我读过。因为当时还有我以前的一位学生在场,我回顾了一个故事的细节,用来说明软件工程中的沟通困难。我讲完以后,邹欣老师补充说,这个故事出自 Malcolm Gladwell。我特别担心他接着说,你哪里哪里还讲错了。你精确地记着,才能说读过了。

当年我跟 Lars 教授讨论 Applying UML and Patterns 的教学体会,他委婉地指出,如果你仔细读的话,就会注意到领域模型和分析模型不是一回事。语气坚定到我不敢辩驳,只能感谢指点,我回去再仔细看看核对一下。相信他当时就是我面对某些同学瞎说教材骗人时的感觉--你真的读过书么?站在他对面的我的感觉要好得多,谢谢赐教,令我知道自己的无知,才能进步。

作为人群的分界线,除了忘了就忘了的态度,另一类是你看这个你又不知道吧,就是当初显摆知道希特勒的我的那种。摆出一大堆 (自以为) 你不知道的细节,以显示众人皆醉我独醒。比如,吾生也有涯而知也无涯 的后面还有半句,国民党在抗战正面战场中的作用被抹杀了,阿拉伯在中世纪非常发达--然后得出结论咱们都被课本害了。只有你被课本害了,不包括我。我清楚记得,你显摆的这些在课本里本来就有,吾生也有涯那段,在课本的脚注里提到了出处,还提到了后半句;抗战正面战场,我们的课本里有血战台儿庄,还配了某位将军的肖像插图,蔡廷锴和蒋光鼐的名字,在历史课本的八一宣言那节附近,不知道你学的什么课本;阿拉伯在中世纪对西方文化的保留,在奥斯曼土耳其一章里有。

另一种知识,汉字中笔画最多的是 齉,读作 nang,四声,36画,你知道么?我特别希望你回我一句,有用么。

4.

我有一次请教 Johan Lilius 教授一个性能相关的设计框架问题,该问题困惑了我不止一年。他一共回答了两点。第一点,他问我,你的显示器刷新频率是多少?我说,60Hz吧,怎么了。他说,你的程序为什么要比显示器刷新更快呢。我一拍大腿,对啊。他回答的第二点,说,"你等会"然后就开始翻笔记本电脑,过了一会给我一篇论文,说你看看就明白了。我一看,80年代的,再看内容,解决了我的困难/告诉我不必再沿此路继续。

我指着那篇文章说,老师啊,这太让人生绝望了。我想了这么多年解决不了,而1987年 (或者1986)年人家都写成论文了。他说,博士学习是这样的,你要阅读大量的文献,要了解别人做了哪些工作。我的导师牛老师和马老师也这么教导过我,只是我没有这么实践而已。

自觉站在一群俗人中间,以为自己不同于俗人,但是也只读着俗人的书,做着俗人的事,却寄希望于有超出朋侪的观点。这多么不现实。有些女性每天读着《小时代》以及诸如此类的情感糖块,幻想自己是世界的中心宇宙的未来,只等霸道总裁发现自己的美丽;有些男性读着周易、佛学、基督,长篇大论指出世界该当如何发展,如果中国/亚洲/世界按他那么整指定就好了。反正又不付出什么代价,大不了到头来一句,"啊呀我记错了"或者"肯定是你理解执行还有问题"。

如果说见识少的结果只是孤独,孤芳自赏就是另一个层次了。

5.

当年我有个学生是基督徒,她跟同学们谈起一些事迹和理论,我提醒 你某个地方可能记错了啊,补充某处如何如何。她说,老师你又不信,为什么会知道这些呢。

我当时有开玩笑的意思,"就是等着遇到像你这样信的人,然后指出你说错了啊。"

我现在有时会沉默,觉得你高兴就好。有时,我会站出来说,你别瞎扯了,你说的那些我们也知道,但还是得出了不同的结论。当我出声的时候,我想到的是邹欣、刘慈欣、潘海天、Johan Lilius、Lars 这些人。我向他们学习,像他们帮助我那样,也告诉你,1.并非所有的人都和你周围的人一样,你只是见得少;2.你可能和你周围的人并没有什么差别,得看得更仔细一些;3.你真的确信并敢于声称你读过某本书么?

仰之弥坚。

有时,吾生也有涯很令人绝望,到死也读不完也读不到那种程度,活着还有什么意思;有时,想想这样也很好,还有那么多书没有读那么多道理没有懂那么多细致的义理没有参透,怎么舍得去死。

------------------------------------------------------------

博客会手工同步到以下地址:

[http://zhuanlan.zhihu.com/younggift]

[https://younggift.net/] 悄然换成了https,再次感谢高博先生

[http://blog.csdn.net/younggift]

[http://giftdotyoung.blogspot.com]



我读书少,不敢妄谈读书,更不敢讨论层次。只不过还是因为读书少这个原因,想不出来别的文字,题目才取此下策。我只想讲几个故事。

1.

因为家里没有几本书,我小学三四年级的时候开始经常去市图书馆。图书馆的大部分不对少年儿童开放,只有两处除外。一处是少儿外借,以童话和科普为主,没有习题集,另一种只能在阅览室里看,花花绿绿的少儿杂志。我当时对少儿杂志颇为不屑,觉得怎么那么幼稚呢,都是大人模仿孩子说话,内容明显骗人,感觉作者以为你很弱智的样子。所以我大多数时候只读外借的那些,觉得自己很与众不同的样子。想借大人的书,不让。

这正是当今不少成年读书人的写照。就是那种感觉,我很孤独,我的观点如此帅呆,我如此卓而不群,与传说中的萨特叔本华尼采有得一拼,只是现在还没有成名罢了,你们这群盲人。也不是一样一样的,相去不远也。

现在的你当然一眼就看出来我当年的幼稚了,三四年级的孩子中的一个孩子,不过如此。

很多时候,孤独仅仅因为视野狭窄,没有找到同路人,没有看到引路人。我至今经常为想到某个观点沾沾自喜,后来发现早有人提出,而且深刻得多,完备得多。说来还是见识少。如果多些这样的打击,孤独感顿消,在古今了不起的思想中,你我的看法连渺然众矣的资格怕都没有。某些人的"祖上早已有之"也在此列,包括莱布尼兹的二进制即我周易之阴阳,包括康德的道德不就是己所不欲勿施于人么,那都是你的肤浅理解。肤浅二字,正是字面含义,不是替你自谦。

2.

前一段王宝强新闻,有人提到在《唐人街探案》中早有伏笔。我怎么也想不起来,几经启发还是毫无印象。后来到douban上找剧照,才一拍脑袋,啊对对对。有些电影电视情节,看了就忘,甚至连"不好"二字的评价都没有印象。当年李记者、小刘同学大力推荐 The Big Bang Theory,我看了半集实在难以继续。后来跟Johan Lilius 教授提起这剧集,他说,不错。我说,是么,如果你推荐的话倒是值得再试一次啊。他笑着补充,看的时候记着把脑子关掉一会儿。我试了,果然灵验。如果你只保持那么几分钟的记忆 (金鱼七分钟记忆是扯淡,你喂过就知道,它们见到人影挥手就会有巴浦洛夫条件反射,决不是七分钟前训练出来的),只关注隐约的印象,不要太过于深究细节和合理性,bang,整个世界都好了,很幽默。

我用同样的方法看《破产姐妹》也很好。当年流行过的《学习的革命》《给加西亚的信》《少年派的奇幻飘流》如果我能持这样的态度,估计读起来也会顺畅很多。

但是并非所有的作品都适合这种骑马观花一样的心态,那些需要拿来真正干活儿的知识,松懈不得。可惜有些人读什么都是"在这个夏天,我度过了人生中难忘的一段,读到了如此感人的作品",除了感觉,别无其他留下。当然,还有,可以吹嘘,比如我读过《飘》《乱世佳人》《呼啸山庄》《简爱》《傲慢与偏见》《瓦尔登湖》。然后呢,这些作品的细节你还记得哪些,这些作品改变了你的什么品质和观点,能背诵一段出来也陶冶一下我的情操么?注: 我举例这些女性喜欢枚举的作品决不是男权思想,而是因为男性通常连这些都不读,甚至连篇名都不知道。

3.

当年本科一年级,大家在宿舍吹牛,不记得怎么就说到了希特勒。我就说,希特勒他不是德国人,他出生在奥地利,就像拿破仑出生在科西嘉岛,那时候科西嘉属于意大利。有人使用了群嘲技能,我被各种嘲笑。

第二天,我去图书馆借来《第三帝国的兴亡》,指着其中的某行给那位最坚定不相信我的同学看。他先是奇怪我为什么举本书给他看,然后是大度地说,"哎呀,你还这么当真啊",中间唯独没有原来如此的表情。

不少人读书是这位同学的态度,忘了就忘了,能怎么样呢。另有不少人读书 (或者读摘要)是我当时的态度,你看这个你又不知道吧。

忘了就忘了的态度,我在科幻作者中见到不止一例。参加科幻的笔会,我带着对那些作品景仰的心去的,每遇到一位作者就巴巴地说,"我读过你的某某篇,那一段太感人啦,那个人物我太喜欢啦"。好几位作者对我说,"我不记得了啊,因为我写过好几个版本,发表的时候都不知道是哪个版本了。"我信以为真,直到遇到潘海天先生。我非常心潮澎湃地对他回忆了他写的斩蛟一段场景,他很淡淡地说,"大家都是作者,你不用这样。"然后奇怪的说,"这段发表的时候删了,你在哪看到的?"我在清韵论坛上看到的。他是我见到的科幻作者中第一位记得自己写过什么的,刘慈欣先生也记得自己写过些什么。

有些作者没有忘记自己写了什么,甚至比读者记得的更多。我拜见《构建之法》作者邹欣先生,说了我在教学和工程中的一些困惑。其中有几个问题解答时他提到,就在书里的某某处作过讨论,有一处甚至引用了一下原文。面对这样的作者/读书人,我不敢奢谈我读过。因为当时还有我以前的一位学生在场,我回顾了一个故事的细节,用来说明软件工程中的沟通困难。我讲完以后,邹欣老师补充说,这个故事出自 Malcolm Gladwell。我特别担心他接着说,你哪里哪里还讲错了。你精确地记着,才能说读过了。

当年我跟 Lars 教授讨论 Applying UML and Patterns 的教学体会,他委婉地指出,如果你仔细读的话,就会注意到领域模型和分析模型不是一回事。语气坚定到我不敢辩驳,只能感谢指点,我回去再仔细看看核对一下。相信他当时就是我面对某些同学瞎说教材骗人时的感觉--你真的读过书么?站在他对面的我的感觉要好得多,谢谢赐教,令我知道自己的无知,才能进步。

作为人群的分界线,除了忘了就忘了的态度,另一类是你看这个你又不知道吧,就是当初显摆知道希特勒的我的那种。摆出一大堆 (自以为) 你不知道的细节,以显示众人皆醉我独醒。比如,吾生也有涯而知也无涯 的后面还有半句,国民党在抗战正面战场中的作用被抹杀了,阿拉伯在中世纪非常发达--然后得出结论咱们都被课本害了。只有你被课本害了,不包括我。我清楚记得,你显摆的这些在课本里本来就有,吾生也有涯那段,在课本的脚注里提到了出处,还提到了后半句;抗战正面战场,我们的课本里有血战台儿庄,还配了某位将军的肖像插图,蔡廷锴和蒋光鼐的名字,在历史课本的八一宣言那节附近,不知道你学的什么课本;阿拉伯在中世纪对西方文化的保留,在奥斯曼土耳其一章里有。

另一种知识,汉字中笔画最多的是 齉,读作 nang,四声,36画,你知道么?我特别希望你回我一句,有用么。

4.

我有一次请教 Johan Lilius 教授一个性能相关的设计框架问题,该问题困惑了我不止一年。他一共回答了两点。第一点,他问我,你的显示器刷新频率是多少?我说,60Hz吧,怎么了。他说,你的程序为什么要比显示器刷新更快呢。我一拍大腿,对啊。他回答的第二点,说,"你等会"然后就开始翻笔记本电脑,过了一会给我一篇论文,说你看看就明白了。我一看,80年代的,再看内容,解决了我的困难/告诉我不必再沿此路继续。

我指着那篇文章说,老师啊,这太让人生绝望了。我想了这么多年解决不了,而1987年 (或者1986)年人家都写成论文了。他说,博士学习是这样的,你要阅读大量的文献,要了解别人做了哪些工作。我的导师牛老师和马老师也这么教导过我,只是我没有这么实践而已。

自觉站在一群俗人中间,以为自己不同于俗人,但是也只读着俗人的书,做着俗人的事,却寄希望于有超出朋侪的观点。这多么不现实。有些女性每天读着《小时代》以及诸如此类的情感糖块,幻想自己是世界的中心宇宙的未来,只等霸道总裁发现自己的美丽;有些男性读着周易、佛学、基督,长篇大论指出世界该当如何发展,如果中国/亚洲/世界按他那么整指定就好了。反正又不付出什么代价,大不了到头来一句,"啊呀我记错了"或者"肯定是你理解执行还有问题"。

如果说见识少的结果只是孤独,孤芳自赏就是另一个层次了。

5.

当年我有个学生是基督徒,她跟同学们谈起一些事迹和理论,我提醒 你某个地方可能记错了啊,补充某处如何如何。她说,老师你又不信,为什么会知道这些呢。

我当时有开玩笑的意思,"就是等着遇到像你这样信的人,然后指出你说错了啊。"

我现在有时会沉默,觉得你高兴就好。有时,我会站出来说,你别瞎扯了,你说的那些我们也知道,但还是得出了不同的结论。当我出声的时候,我想到的是邹欣、刘慈欣、潘海天、Johan Lilius、Lars 这些人。我向他们学习,像他们帮助我那样,也告诉你,1.并非所有的人都和你周围的人一样,你只是见得少;2.你可能和你周围的人并没有什么差别,得看得更仔细一些;3.你真的确信并敢于声称你读过某本书么?

仰之弥坚。

有时,吾生也有涯很令人绝望,到死也读不完也读不到那种程度,活着还有什么意思;有时,想想这样也很好,还有那么多书没有读那么多道理没有懂那么多细致的义理没有参透,怎么舍得去死。

------------------------------------------------------------

博客会手工同步到以下地址:

[http://zhuanlan.zhihu.com/younggift]

[https://younggift.net/] 悄然换成了https,再次感谢高博先生

[http://blog.csdn.net/younggift]

[http://giftdotyoung.blogspot.com]


20160912

7个少根筋的笑话



1.李记者第一次跟我提他有个朋友在兰博基尼工作,我问,"那是什么玩意?"

2.被提醒去日本过海关要是有假货会被没收,我问,"有个耐克/啊迪,看价格应该是假的,是不是不行。"老师说,"这种没事,LV啥的才不行。"我又问,"LV是什么。"

3.新闻说,"不喝茅台难道喝拉菲么。"我没问就能猜到,拉菲一定是某种好酒。

4.出差在外有人说,"现在某司存一万赠一万呐。"我困惑,"我们那儿是存一百赠一百啊。"

5.当年,我对导师说,"我想跟你学摄影行不行啊?"导师说行啊,然后开始讲各种技术,最后说,"相机最好先整台东海或者凤凰,便宜,坏了不心疼。"我问,"得多少钱呐。"他说,"一两千吧。"我马上说,"那我不学了。"后来导师送我了一台Nikon F3,我学了好几胶卷,然后珍藏着,有人想买也不卖。老外问我,你喜欢摄影啊,咋学的,我说,"用Nikon F3学的,我的第一台相机。"他表情很夸张,我想他一定认为我是富二代。

6.跟一位黎巴嫩的同学同办公室,印象里黎巴嫩总打杖,就问,"你们上一次战争是啥时候?"他说,"上周五。"

7.还是这位黎巴嫩,我问他,"你们阿拉伯人真的能娶四个媳妇么?"他笑,"你是不是觉得特别好?""没有,我就是好奇。"他大笑,"你是不是觉得特别好?""没有,我就是好奇。""哈哈,在我们那儿,你根本连一个媳妇也娶不到。""为啥?""因为你没钱。"

8.用微博,关注了叶卡编辑强烈推荐的邹欣老师,据说很多优秀信息。结果我发现邹欣老师已经将近一年没发消息了。最近某天为了用某个APP发微博,把微博APP升级了,瞬间发现,原来邹欣老师一直在发,只是我的APP版本太低,看不到。

9. 转了同事发的照片到某群里,内容是某团队纳新,3份申请的学生们填写的计划和心愿。群里某人提醒我,上面还有姓名和电话呢,太不尊重学生隐私了吧。对啊,我赶紧把照片上面的敏感信息都涂掉,然后发到群里了。这时发现脱敏的那些原照已经不能撤销了。

以上都是真事,不是笑话,是不是很好笑。

------------------------------------------------------------

博客会手工同步到以下地址:

[http://zhuanlan.zhihu.com/younggift]

[http://younggift.net/]

[http://blog.csdn.net/younggift]

[http://giftdotyoung.blogspot.com]


20160911

相忘于江湖

一年一度教师节,以及各种节日,同学们都要向导师表达敬意。表达敬意途径之一,是向导师献花,大家集钱买一束一篮或者一果盘,搬导师办公室去,导师好像儿女归省,很有面子的样子。

也有同事抱怨,"你看某某专业的学生啊,给每门课的老师都送了花,咱们的学生,啧啧。"还有的担心,这样的学生以后到社会上怎么能吃得开呢。我们这里文理混杂,理工科的学生相比人文类的,木讷有余,确实情商智商均低的样子。我开玩笑说,"你真想收礼物啊,那简单,你得'念央儿'。"'念央儿'我以为是东北方言,别的地方不知道怎么说,此处大体是在班级上很高兴地说,"某某届同学对我可好啦,还有谁谁和谁谁也是,给我一大筐鲜花,办公室都摆不下啦。"同事说,"我哪敢,那不得被投诉啊。"我哈哈大笑,"老师都是这样的,期待学生会有什么不同?"

除了教授知识、提供训练指导这类义务,教师对学生并无任何权利。

我的导师马老师收到果篮以后,就把同学们留下,请他们把果篮搬走分吃了,然后再给补几百块钱,"你们去喝酒庆祝一下吧,我就不去了,免得你们拘束。"

我的导师牛老师讲过另一个故事,差不多的寓意。他去芬兰的时候,合作的教授阿里依瓦斯卡亲自开车接机。牛老师说,"派你的学生来不就行了嘛。"阿里教授说,"他们是我的学生,接你是私事,我没有权利让他们做。"

牛老师讲这个故事的时候,我还没有毕业,并且从此开始领教每次吃饭只有导师可以付钱。毕业以后终于一次有机会我来请客,而且事先说好了,临期末了导师又要执意他买单。我急了,说,"这顿你要是不让我请,今天我就不吃了/以后永远不和你吃饭了。"这才得逞。

我本科的导师李老师教导过我,如果你收了学生的礼物,学生心里就会看不起你。

我的导师们都是这么做并且这么教导我的,我也尽力模仿。按中国的习俗,如果我对学生们说,"你们千万别给我送礼啊",这就会被理解为鼓励甚至督促。所以我演示。当偶有同学送我东西时,我一概问明价格,"因为买礼物送给你需要花时间,你又不一定喜欢,真是困扰我,所以我原价照付。"如果你不告诉我价格,我只好搜索,然后估算。凡是领毕业证之前,哪怕一天,我们都是师生,这一点你就只好服从我。

毕业以后的学生,我也极少跟任何其他同学提到他们送过我什么。事实上有不少,如果我一直不说,你们可能会以为严苛的老师同学们一定记恨一生。计有明信片,咖啡、杯子、勺子,印章,各种坚果,刚毕业时花大价钱买的我现在还没有穷尽玩法的玩具,花束,诸如此类的,亲自送来或者快递。

我之所以极少提到,是有原因的。当你鼓励的时候就是评价,即使正面评价的时候也一定包含对不同行为的贬低。佛教徒说,我本人不吃肉,我并不反对你吃肉,不过你修行到一定程度的时候,一定就不吃了。合理的推论就是: 你的修行不够,吃素是更好的,因此你不是"更好"的。所以,大张旗鼓地宣传学生对导师如何好,无异于鼓励这种行为,并否定其他同学。前几天我偶然提到某以前的学生送我啥啥之后的故事,一位没毕业的同学就私聊微信提到,限于我的规则所以啥也不能送我,只好努力干活云云。L哥,我讲那个故事的重点完全是后半截的情节,你心思太重了也。

我不期待跟你们建立任何超出知识和经验传递以外的关系,所有后来结下的情份都是我们一起战斗互相战斗产生的战斗友谊。仅仅这样,已经很好。我不希望你我之间产生任何人身依附,只有同生共死才能有人身依附,而你承担不了与我生死与共的负担。超出知识和经验传递以外的关系,这也包括没有能力向你提供道德训诫和演示。

前几天读到的一个小故事,作者说,流浪猫送给喂他食物的人一些小猎物,老鼠、鸟、兔子,并不是认为"人类太笨,不能养活自己",而是对他的爱--基督教意义中的爱你的邻人和爱你的亲人的相同的那种爱。这种爱就像两个侠客在江湖行走,偶尔小聚喝杯淡酒,聊聊人生和别后的际遇,比比剑法,然后"'今番良晤,豪兴不浅,他日江湖相逢,再当杯酒言欢,咱们就此别过。'"没有虚假的思念,也没有"有时间喝酒啊""一定一定",能相聚时自然相聚。

我希望,咱们就是这样,相忘于江湖。

------------------------------------------------------------

博客会手工同步到以下地址:

[http://zhuanlan.zhihu.com/younggift]

[http://younggift.net/]

[http://blog.csdn.net/younggift]

[http://giftdotyoung.blogspot.com]


20160815

继续背单词,8个月过去了

继续背单词,8个月过去了

8个月前,我在用百词斩背单词。当时背了49天,完成了托福、托福核心、GRE3000几本书,单词量测试从5000~8000上升到11000左右。向大家推荐[https://zhuanlan.zhihu.com/p/20468330?refer=younggift]了百词斩以后,我没有停止,而是继续背单词。

现在,我使用百词斩背了230天,8个月前的时间消耗只是至今的五分之一。之后我还使用 扇贝 背单词,一个更严厉 (反复复习考核、进度更缓慢) 和没有图片和视频的 (有声音)的不幽默的APP。使用扇贝至今188天,也远过了8个月前的持续49天,那时我觉得49天已经很是漫长。

只是那个时候还没有想到,49天之后有更加漫长的历程。我想起小学时读过的一段文字,说一位日本作家患了癌症,还有一年半的生命,写了本书叫做《一年有半》。有人说只有这么短的生命还写什么书,难道不应该去享受人生么。这位作家说,与无限长的死亡相比,有限的人的生命无论多么漫长也只是一瞬。我们感觉到的此刻的漫长,不过是因为还没有见到更漫长的所在。

百词斩因为进度太快,背完托福以后进入GRE,很多单词是我从来没见过的,维持速度的结果是记得不牢,等复习和测试的时候学习效果非常糟糕。1月1日完成GRE这本书的学习以后,为了巩固我设置了30天复习,结束以后又设置了30天、100天复习。每一次,我都在想,30天、100天,这么长,啥时候能整完呐。类似的,为了精细点学习,我开始 扇贝,那是2月4日。每天只能学习150个单词,其中新词25个,预计结束学习时间是7月28日。在1月1日看100多天,在2月4日时看7月28日,非常遥远。最终这些漫长的时间都已经过去了。

前些天开会,巧遇出国英语培训的高老师。我兴奋地报告,"老师我向您汇报一下,我背单词现在测单词量达到1万8啦,我背新概念第二册……",老师接着说,"全背完啦?"我说,"没有,背了从55课到92课啦。"老师说,"现在是还有出国机会是吧?"我同保持着兴奋响亮地回答说,"没有。"

不是为了现世的功利,只是补课以前落下的作业。以前看到有人说,GRE单词并不是什么高大上,而是英美的严肃日常中经常出现的词汇,我没有信;以前看英文小说的时候,跳过大段的景物或人物服饰或对话,觉得无聊 (中文小说我并不会跳过)。当背单词到某个阶段的时候,渐渐发现,小说和严肃课本中,都经常现出GRE词汇,GRE词汇就是常用词汇,渐渐发现,那些我跳过的内容,正是文章的精华之不可或缺的部分。

有时候我会感觉非常后悔,如果当年更努力一些,早一些拥有现在的词汇量,应该可以看到多少错过的风景。人生苦短,早些开始,早些受益。

我现在所花费的200多天,是我的一些同学当年就已经花费过的--而且不会短很多。在2月初看到7月末的时候,我被这么多个月震惊了,那就是从寒假看到暑假了啊。如果我被那时的漫长天数吓住没有开始,此刻,也还会有200多天在等着我。

总天数是降不下来的。如果降总天数,只有提高每天的工作量。每天一组百词斩然后150个单词扇贝的工作量并不小,有相当一段时间,我每天要花费1个小时。再增加时间,不是身体吃不消,就是老板们要愤怒。事实上,我见过同学们通过四级六级研究生英语,他们也都花费了100天或者几百天。在这么漫长的时间段里,就像马拉松一样,我甚至失去了突击的兴趣。有那么几天,我一天背下几天的单词量,然后在接下来的几天发现很快又忘记了,所以突击毫无值价。记忆和遗忘的规律限制我,突击无益,只有稳定而缓慢地前进。更重要的是,想想还有一二百天,突击这么三五天,又有什么意义,毕竟没有能力就这么一路突击下去。这种突击我甚至进行了好几次,每次兴致勃勃地开始最后灰心丧气地结束。但是这也没有什么负面影响,和三位数的天数相比,那些失败的尝试也只是战斗的伤疤,并带不来致命的影响。和漫长的时间相比,任何短期的成败在全局中都影响甚微。唯一影响巨大的,就是持续的时间。

在这段时间里,我也有过很多次动摇。我经常在夜深人静的时候,背完马上开始的这个今天的份额,然后开始质疑自己的动机和意义,"我这是图的什么呢?我多大多大年龄了,我再也不需要英语考试了,我有诸多理由不做这件事。"我安慰自己,如果此刻不背单词,就有更头疼更难办的任务等着。没错,另外一些甚至不知道如何开始的任务的压力是我开始并保持背单词的重要原因。我安慰自己,期待单词量2万的那天,期待 扇贝承诺的,开启看另一个世界的眼睛的时刻。我安慰自己,反正今天还剩3/4就背完了,还有1/3,还有20个。我发现自己醒过来,手指无意识地划错了好几个单词,刚刚睡着了,然后我靠在椅背上把一条腿直腿抬起,让自己更清醒一些,然后开始背下一组。

并不是有意想折磨自己,如果不是午夜开始,白天之繁忙可能让我根本没有时间背单词吧。

最令人沮丧的并不是时间的消耗,而是成绩上升之缓慢。百词斩GRE3000那本书刚结束的时候,每次测试100个单词,我能错到20多个,1/5。而且错误率长期居高不下,长期有多长,我已发不记得了。后来,错16个,保持了又很长时间,突然有一天,开始下降到错10个以下。然后反复,错多些,错少些。现在,每100个错5个左右,并且保持稳定了。

测试单词量也不停地波动。在百词斩里,可能由于算法调整,也可能是结果就应该不是非常稳定,单词里在1万以上以后就往复波动,从1万2到1万6来回调制我的喜忧,后来终于稳定地开始上升,1万2,1万4。

单词量测试一直在波动上升,不波动而是稳定变化的,是每天消耗时间的下降。因为错的数量慢慢变少,因为点击的信心越来越足,从最初的1小时到半小时,到后来十几分钟就能结束战斗。

单词量追求的目标是扇贝的2万。扇贝最初的测试,因为有百词斩的基础,虽然GRE如此糟烂,但单词量已经1万,有个1万词汇的奖牌。下一个此类奖牌就是2万。背完 扇贝 的GRE巴朗词表 以后,我隔几天就测一次单词量,有时候全对了,单词量也只有1万8多一点,可能随机出现的词汇难度和覆盖范围不同吧。我期待着终于有一天,"嘭"的一声,2万的奖牌就到手了。很多次,快测试结束的时候误操作错了一个。很多次,心跳加速得控制呼吸,又在最后关头出来个从来没见过的单词。很多次,全对,18500,19500,我大叫"你耍赖"。非常平静地又是一次全对,2万,系统送了奖牌。但是我已经不再为奖牌激动了,我得到了更可贵的。

当我在百词斩和扇贝里看到另一个APP中刚好背过的单词,当我在 冰与火之歌,在 幸福之路,在 Rework,在 Conqueror of the Seas,在诸多教科书里看到那些"刚刚"背完的单词,当我看到有些似乎眼熟,确切意思想不起来,查下词典,"啊,原来是你",这种感觉就像看到多年未见的老友远隔重洋打来电话,然后我一下听出他的声音。

此生共渡,你是不是偶然也感慨,如果早些相识多些珍惜,就更好了。

------------------------------------------------------------

博客会手工同步到以下地址:

[http://zhuanlan.zhihu.com/younggift]

[http://younggift.net/]

[http://blog.csdn.net/younggift]

[http://giftdotyoung.blogspot.com]