杨贵福
东北师范大学 计算机科学与信息技术学院
--
Sincerely,
YANG Guifu
School of Computer Science and Information Technology
Northeast Normal University
Changchun, P.R.China
重剑无锋,大巧不工。
无不大工。
重剑无锋,大巧不工
无不大工。
我看到传闻,说很多人不理解姜戈里的医生为什么要杀奴隶主。他们说,明明已经忍气吞声了那么久,钱也付了,人也赎回来了,只剩了单单一个握手而已,为什么医生要大动干戈把对方杀了,而且甚至没有准备杀完之后的应对措施。
我还看到网上有人答复了这些困惑的同学,并且深以为然。医生为什么这么干,精神病一样,我想先讲个我的经历。就是今天的。
我经常去家附近的一家火锅店吃饭,今天发现手里还有一些代金券,快过期了,所以今天去吃,还带了二猫妈和二猫。整个吃的过程都很顺利,豆腐皮很难吃,而且一煮就碎,我按一般的流程处理,放在那不吃,不讨论,钱照付。到了付钱的时候,出了麻烦。
服务员说,代金券不能想花多少就花多少,限额要按当初领代金券的时候相同比例来,好像是100现金对20元券。二猫妈付钱,跟服务员柔声细语地讨论,领券的时候没说啊。领班路过,一口认定,说了。我对领班说,你别跟她说了,跟我说。
这时候貌似女经理的路过,拦下来。我说,券上没写你们说的这些附加条款。她说,也不能什么都写啊。我说,这个必须写上,我只按写的执行。她说,那也不能你想付100券就付100券啊。
我就喜欢这样的,我就喜欢不讲理的。我本来想说,那也不能你们口头说每次只可以用一块钱的,那就用一块钱的啊,得按协议来。但是我太喜欢不讲理的人了,所以我拍桌子站起来说,我不付钱了,一分钱也不付。然后告诉二猫妈和二猫,你们收拾东西走人,告诉女经理,你赶紧叫保安堵住门口,我不付钱。
女经理拉我袖子,说咱们到吧台说,这里有顾客。我说,对啊,这里有顾客,我就要让大家知道你们不讲信用。我对别人靠近和拉扯我有特别的反感,但是这只有熟悉我的人才知道,所以我不能对此发火,我只能说,你给我念念上面写着什么,我又不是不认识字。然后我态度不错地告诉她,你别碰我啊,你真别碰我。我得承认,这段话很容易令人误解,好像她要打我似的,但是我又不能推她,只好语言通知。
二猫问我,怎么了。我说,他们不讲信用,我跟他们讨论一下。我想起了园长说的话,父母是子女的表率。我想,我得用行动告诉二猫,如果什么东西是你的,如果你还想要,即使一分钱,那么别人谁也不能动,谁动杀谁。
随后我和二猫妈达成一致意见,算了。好吧,我告诉女经理,我准备付现金。女经理又同意我用券,想用多少用多少。我说,我不打算用了,准备留着发网上。女经理说,那也行,用也行,不用也行。我说,你能承认你们企业违背约定这么干是错的么。她鞠躬道歉,说这都是为了维护企业。我躲开不按受,说,你们企业太不讲信用了。背信的人理应承认,守信的人毫无义务原谅。
我想起了很多年前,大学还没毕业的时候,给一些地方干活,拖欠我工资的事。你当初答应我的,每一件事,都要兑现。你现在有困难,关我P事,你的困难是你的困难,不是我的,我有困难的时候也不会求助于你。你以为这是公事,这在我就是纯粹的私事。我会把你的设备抬走,我会跟你吵翻脸,我还可能会放弃工资从而换得痛骂你一顿让你的员工知道你是什么样的人。但是,即使粉身碎骨,没有我的同意,忘记了或者想试图忘记诺言的,都应该被整死。这样的原则,绝对不会变。如果你背弃这个原则,就由我来贯彻。
这些年来,我看到过很多视承诺和协议如无物的人,说完话转脸就忘。我就按他们的原则提醒他们,他们期待用暴力提醒的,我就用暴力提醒,他们期待用强权提醒的,我就用强权提醒。如果我是农民工,绝对不会爬塔吊,我更可能告诉老板,我是讲道理的人,所以我提前通知你,你什么时间前必须还我钱,不然就整死你。
好了,现在谈谈姜戈里的那位医生。网上那位兄弟说,医生的阵营是"守序善良"。善良容易理解,就是好人,比如很多大妈,还有悲惨世界里的超人冉阿让。守序是什么呢?网上那位兄弟提到,守序是中国人特别缺乏的精神,所以咱们不太容易理解医生的做法。守序就是悲惨世界里的沙威的世界观,他认为世界按某一规则工作,他是守序邪恶。这是医生和沙威信仰的共同部分。我信仰的核心部分也包括秩序,集中体现为承诺。医生杀奴隶主的原因,既不是因为羞辱,也不是因为他特别地憎恨奴隶主,并非因为这些积累到了最后一根稻草,而是因为奴隶主攻击了他的三观中的核心部分,秩序中的承诺。奴隶主在最后时刻变更或者说附加了条款,并且认为自己能占到便宜。这也正是我见到咱们中国人常干的一件事,"我再试试多得一点如何,不行就拉倒呗,反正也没损失。"他们不知道有人会在这一刻翻脸,就像女经理可能没想到有人会突然决定不讨论了,而是不付钱。他们不懂,承诺属于信仰,是不能讨论的。所以你想再多得那一星半点的利益可能真的不重要,但是你多于我们既有的协议所索要的,无论多么微小,都是在攻击我的信仰,在叫喊我的信仰是个P。
有人可能会说,这太教条了,难道承诺了你就不能再讨论一次吗?当然能,但是再讨论之是否可以实施,要单纯地取决于我的同意与否。如果我不同意,那么,连讨论也不必,我只要求你兑现诺言。
而且,从你试图背信的一刻起,契约本身就不再存在,我可以任意攻击。当初民国政府与满清末代皇族达成的协议是保留紫禁城,小皇帝在里面仍然是小皇帝。但是后来张勋复辟,溥仪再登基,协议就全部撕毁了,所以张勋倒了以后,皇帝只好去天津当平民。有人可能会说,那孩子都是被逼的。那孩子怎么样咱们不得而知,但是皇位的追求者是在试图投机。投机,就可能失败,就要付出代价。你可以拒绝,或者逃亡,唯独不能背约,背约就准备失去约定中的一切利益。
所以承诺要小心,所以承诺才值钱。所以,有些人一辈子也编不了程序,也学不了自然科学和工程,也无法与西方仍然是列强的民族平等讨论,也无法与任何人平等讨论,只有威逼和被威逼的命运。因为他们不平白,谁也不是谁的奴才,我们大家是诺言的奴隶。因为他们不明白,协议、约定、契约这种东西,是金子做的,只要你轻轻触碰一下,它就分文不值,垃圾一样臭不可闻。被期待遵守这一契约的人,与他们的契约等价。
--------------------
博客会手工同步到以下地址:
昨天长春的天气让人倍感生活丰富多彩。早上的时候是阴天,然后下了场小雨,小雨还没停,转成下雪。大雪,全年无休,春天以后每天一场,大家正期待这场有能耐的大雪持续到五一节。先是小雪,然后开始刮风,等风把雪吹成斜斜的线条的时候,转成了大雪片子。中午以前,大雪停了,出太阳。太阳晒了一会,起风,终于开始了正常的春天,沙尘暴开始了。
沙尘暴一直没停,到晚上九十点钟,PM10飙升至重度污染。尚未结束供暖期,但是暖气早就停了好几天,大家宅在家里,穿上羽绒服唱热水,透过玻璃看灯光照亮的满天沙子,听外面鬼哭一样的风声。
不过毕竟还是有过阳光,有点阳光,不然这日子可怎么过下去。今天和包师弟还有ZHUMAO分别讨论,解决了两个很有意思的小问题。
一. 解析解
跟包师弟先是听大李yang同学报告stm32的板子加以太网,与PC机间进行socket通信。然后去包师弟家,包师弟给我讲循环伏安法的实验参数间的约束关系,我把它们写成方程。我们打算把方程给偶像,然后看看是否可以有些合作。偶像当时问过我,你们的方程都要求什么计算。我说,有加减乘除,有指数对数啥的,没有找一堆数的最大值最小值。实践表明,有找最大值最小值这种运算。而且在最后一个方程里,我还看到了递代。
我说,这算什么运算,可咋写成方程啊。我还不知道偶像他们是否接受不是方程的东西。
包师弟说:是啊,原理就是这样,我也不知道用方程怎么表示。
我说,迭代啊,然后我讲了段故事。
故事的背景是大李yang同学每周五跟我讨论SICP上的题目,半个小时。那个时间正好是我七八节课和九十节课的课间,我们共进晚快餐,并讨论SICP上他感兴趣的题目。前两周有道题目,是证明斐波那契数列的递归或迭代算法,其结果等价于一个公式。当时我也不知道怎么证,只知道他给出的穷举测试是不够强有力的。回家查了下google,有位牛人给出了不到半屏的证明,提到一个词,我们都熟悉,但是似乎又忘记了,齐次线性方程的特征根。我又查了一下wikipedia,发现前人们早有结论,迭代算法可以等价于齐次线性方程的特征根的什么什么。
所以,我说,至少我们可以用齐次啥啥的把这个迭代法的公式写出来,是一堆指数和lambda什么的。
然后我俩闲扯了一会儿,我说,这个东西估计是个经典算法,就是咱们不知道它的名字啊……然后包师弟给我讲了一下这个迭代的原理是咋出来的。
这时,这一天的阳光时刻到了。我指着其中一行说,这个就是个公式啊,这不就是什么什么然后再什么什么吗。包师弟说,听着倒是像,不知道是不是等价。我请大李yang同学把包师弟的代码和我的公式分别实现一下。此时,包师弟在厨房开始炒菜,一边跟我们说,mvs设成多少多少,rs设成多少多少,再试一次;大李yang同学靠墙坐地板上,本子搁腿上pilipala敲键盘;我在包师弟找到一个木鱼,做成青蛙的形状,它嘴里叼个小木棍,拿这个小木棍刮它的后背,就发出蛙鸣,声音还非常像,我这个时候就负责刮它的后背,感叹,"真是什么牛人都有啊,这也能做出来。"
目前为止,我的公式与包师弟的迭代看起来还是等价的。这个公式的价值不在于让代码从五六行缩为一行,或者执行效率有多么高。让我兴奋的是,这是一个实例,我十多年前考研究生的时候寻找的东西,问题的解析解。虽然只是一个实例,正如阳光虽然只露了那么一下头,也足够令人高兴一下。
二. 有些人那么值钱的原因
跟包师弟讨论其间,给ZHUMAO打个电话,说,你们啥啥服务器坏了啊,我从什么什么链路上去,估计哪哪的用户也访问不到了啊,你们赶紧修吧,别让人投诉了啊。
ZHUMAO片刻之后说,修好了,然后说,你在哪呐。我说我在包师弟家,他说,你回不回家啊。我说,回,我没跟包师弟"在一起"。他说,那你吃完饭到我这来吧,我十点才走。然后,我和包师弟"分手"以后,就去找ZHUMAO。
去找ZHUMAO的过程挺现代化的。我在图书馆门口掏出一卡通,嘀,然后推三脚滚闸进门,上电梯,穿过阅览室,来来往往很多同学,空气里全是人味。刷卡,嘀,通过东北特色馆藏,灯明瓦亮空间开阔,一个工作人员对着墙沉思,画什么图。往里走,再刷卡,嘀,进门,看见大间办公室,办公室里很多小隔间,很多机器,嗡嗡地响,ZHUMAO一个人缩得小小的,坐在角落里。
我俩跟谁也没看见谁似的,我卸护膝护腰,他在那pilipala摘键盘。我说,你整啥呢。他给我看,你看,这个东西整差不多了。
我说,咋这么慢捏。
他说,是啊,在mysql里也没这么慢呢。
我凑过去看屏幕,他用JSP写的东西,从oracle里select东西。
我说,是,oracle值钱,值钱的都这样?
值钱的东西倒底比不值钱的东西好在哪里,有很多个故事,以后再说。
1. 你用 sqlplus 执行一下你那几个语句试试。
还是慢。
这个测试的动机是,分离性能问题的原因,到底是JSP,还是数据库部分。
我又抻头过去看,如果不贴到显示器上,我基本上啥也看不到。我说,哎呀,你用的不是我给你的select语句啊。他说,都一样。我说,别扯了,我看好几个字母都不一样,你查下我邮件,试试我的。
试了,还是慢。
2。我说,你加索引了吗?
加了啊。
在哪呢,你给我看看。
这呢。他展示了两个索引。
我说,那就是索引名字,我也不知道你索引的是哪个字段啊。
怎么显示索引的是哪个字段啊。
我也不知道。
重建一个吧。
好。
ZHUMAO又建了个索引,用我的SQL语句,在sqlplus上执行。啪,结果就出来了,瞬间。
ZHUMAO指着结果,但是数据不对啊,这都些什么玩意。
3. 对比一下我的语句和他的语句,啊,我没加 order by
所以顺序是乱的。加上,结果对了。
然后他用JSP一跑,完了,速度又下来了。JSP里一共两条SQL语句,一个升序排列的,一个降序排列的。我们刚才只测试了升序的,再单独在sqlplus下跑了一下降序的,非常慢。原来是降序那句把整个速度拖下来了。
4. 降序
也建索引了啊,这二分法查找,升序和降序还不一样吗。我自言自语,这建的都是啥索引呐。我的意思是,这都是些什么糟烂索引。ZHUMAO很正经和权威地回答,建的是B+树索引。
我突然想起来,B+树升序和降序好像根本不一样。我也不确认,不过,再建一个没有啥负面影响。
我们又建了降序的索引,select速度还是不行。至此,我算陷入绝境了,唯一知道的是,要么索引没建上,要么没用上。于是,我转去研究桌上的一根 不锈钢棍子,以前从来没见过。有不到20厘米长,直径二三厘米,上机标着USA。我说这是值更的时候砸坏人的么。ZHUMAO说,不是,这是签到的。我说做成这样干啥。他说,怕值更的人把它破坏了。我哈哈笑,脑海中浮现出ZHUMAO穿着教父里美国警察的制服,手里拎着个大手电筒一样的,银光闪闪的家伙,一边走,一边往沿墙的一排暖气片上嗑,当当当当地走过走廊。
我说,还是google吧,索引这玩意可能没那么简单。ZHUMAO说,不用了,我有书。一会他指着一行字给我看,优化器不知道你建立了索引,然后给我念一行代码,让我加在select里,告诉它用哪个索引。
瞬间,结果就出来了。性能问题完全没有了。
ZHUMAO拿的那本书一点也不厚,估计也就100页左右,名字叫《Oracle索引技术》。
我说,我现在知道为什么有些人那么值钱了,oracle dba的存在是有原因的啊。他们不会花费大半个晚上,才解决这种加上一行就能解决的问题,他们都是在问题上瞄上一眼,然后说,在这个位置锯开,把线圈去掉三匝。
新拍的照片和画在这里 [http://www.douban.com/photos/album/100752322/]。
--------------------
博客会手工同步到以下地址:
我准备用graphviz画机房的拓扑图。用excel或txt记录机器和VLAN什么的信息,用antlr写个工具解析,然后生成dot文件,最后用graphviz把dot画出来。
想到有这么几个基本技术,今天试了一下。下面的这段代码就是例子。行号是我加的,为了说明方便。执行结果如图所示。
建一同学提到用graphviz画UML,请参考 plantuml。不知道为什么被墙了。
1 // dot -Tpng test.dot -o test.png; eog test.png
2 digraph a
3 {
4 node1 [label="NODE1", shape=none, image="pc.png", labelloc=b]; // color=white,
5 node2 [shape=box3d];
6 node3;
7 node4;
8
9 // edge [weight=100, arrowhead=none];
10 node1 -> node2 [taillabel="tail", headlabel="head", labeldistance=3, labelangle=-45 ,label="label", sametail="a"];
11 // edge [weight=0.5, arrowhead=none];
12 node1 -> node3:se [sametail="a", weight=100];
13 node3 -> node4;
14
15 {rank = same; node2; node4; };
16
17
18 }
1. 定制节点
默认的节点是矩形圆形多边形这样规则的形状。可以使用图片,人类看起来漂亮一些。
参见第4行,image="pc.png"。
2. 线连接的位置
有些节点要连出去很多线,线连接的位置如果散开,有时候比较难看。sametail可以让它们都聚在一起,参见第10和第11行。
也许,有时候想从特别的角度连到节点上,可以指定方向,参见第12行node3:se,表示从东南方向连接。
3. 题注的位置
用了定制的图片以后,题注标在节点正中就有些不合习惯,可以用labelloc指定位置。参见第4行,lableloc=b,b表示底部。
线的题注 (这东西叫题注么?) 除了label本身以外,可以用taillabel,headlabel,分别标在箭尾或箭头。标在箭尾或箭头的题注,可以用labeldistance=3, labelangle=-45进一步修订,参见第10行。
4. 节点的位置
某个节点,如果希望它跟别的节点平级,用rank,参见第15行。rank不仅能same,还可以起名字。这一技术还可以用于水平的图,让时间与事件对齐。
还可以用node的属性pos指定节点位置。实验表明,1.需要给出所有的node的位置,2.要使用neato引擎,不能用dot本身。而且,我在实验中发现,想指定一个合理美观的节点位置实在太难了。如果想强调某个结点的核心位置,请参见下一条。
5. 连线的位置
如果想强调某根线,用weight。weight越大,线越直,线连接的节点间距离越近。参见第9、11、12行。
weight是edge的属性,因此既可以加在某条线的后的"[]"里,也可以如第9行的写法,从此向下的edge都具有这样的属性。
更多细节,请参考[http://www.graphviz.org/doc/info/attrs.html]。
--------------------
博客会手工同步到以下地址:
今天我生日,不过亲爱的各位请别祝贺了。前两天我下半夜睡着睡着,突然想
到,还有20年多一点我就退休了,如果按工作年限,就只有15年了。悚然一惊,
从梦里醒过来,翻来覆去想了很久。
也许15年或20年对有些人来说还很远,可是对我来说不太一样。从能够独立计
划,不必按老师安排学习以后,我一般订计划是以五年为期的。而今发现,这样
的周期只有三四次而已了,令人叹息。三次四计划,又能完成些什么呢。
我想起初中还是小学读到的一个日本作家的话。他当时确诊为癌症,医生说还能
活一年半吧,他写了本书,叫做《一年有半》。他说:一年半确实非常短暂,不
过无论谁,所余的生的日子与死后的无穷岁月相比,都不仅是短暂,而且趋近于
无。读到这一篇的时候,我只是感叹而已,心里倒是确认需要数日子的人里肯定
不会有我的。如今,各位,所余无多,当好好珍惜。
最近拍的照片,还有画的画,在
[http://www.douban.com/photos/album/100275452/]。
--------------------
博客会手工同步到以下地址:
那天和李记者喝酒,我说,你注没注意我跟你说话的时候从不注视你的眼睛,没有眼神交流,就盯着桌子或者墙。他说,我还一直以为你那是眼神空洞,表示睿智呢。我说,那是因为反正我也看不见,看哪都差不多。有的时候,只是傻看着这个世界,想说的很多,却不知从何说起。
今天说说创意吧。说说创意啥也不是的时候。当今之世,有人说这是个"创意"的时代。他有证据的,你看乔布斯吧,他的创意就好,手机啊MP3什么的,到了他的手里,就成了流行元素。这是"有人"最近的观点,他们在早些年举的例子是比尔盖茨。不过,他们刻意或无意地,回避了乔布斯其实很多年前就出过传记,那时候他还没死,还不是传说的时候。他创意过苹果和苹果II,最早的个人计算机,流行一时。不过如果你这就得出了创意无敌,还早点,他在苹果II以后还创意过好像叫Lisa的电脑,用据说第一款鼠标,还创意过一个NETX或者类似名字的公司,二者基本上都被认定为不怎么成功,如果避免用输得一塌糊涂这样的形容的话。
你只看到了贼偷,没看着贼挨打。
往远了说。春秋战国有个国君想拉拢人才,贴了告示,有啥能耐都用。来了个老头。问他会啥,说,我会小九九,就是九九乘法表。国君说你玩我呐。老头说,你想啊,大王,如果连像我这样会小九九的都能得到您的赏识和重用,那更有能耐的人不就接着来了吗。国君重用了老头,果然来了很多有能耐的人。这老头够有创意吧,故事的结局也不错,不过那老头后来呢?那老头从此淡出了历史。
再说。汉高祖刘邦对知识分子不礼貌,呼来喝去的。又来个老头,知识分子,说有大政方针指点。刘邦正洗脚呢,我忘了是一边擦脚还是坐那撇着腿了,就说,"啥事,说吧。"老头说,这可不是国君应该有的态度啊。刘邦然后就正式接见,然后就厉害了。故事又完了,那老头呢?这个老头后来倒是历史有点记载,不过跟洗脚这事没关系,他去当死间被人家烹了。
再说。李自成还是朱元璋进京以前,一片农民起义军。这个时候总会跳出来个人指点他,毛主席也遇到过这样的神仙,叫李鼎铭。他们说,"广积粮,缓称王"。然后大事遂成。怎么样,这个家伙也有创意吧。但是历史上,后来就没有他的事了。
这些有创意的人,他们都没有后来。
乔布斯的创意与这些才高八斗指点江山的家伙有所不同。乔布斯能在自己家车库(相当于仓房?)里把苹果机焊出来,而这些家伙的创意都是由别人去实现的。在这个世界上,创意从来不重要,除非你不把他拿出来。只要你拿出来,那就是全人类的,专利也只保护你那么几年。如果你不拿出来,那它就是不存在的,甚至也不属于你。没验证过的,不是创意,是吹牛。
所以,老板,如果你真的觉得自己的创意很好,那就亲自动手去干,或者出钱,证明它很好。老板们是不是脑袋都进水了,以为忽悠大家一起创意,然后这个世界就和谐了。没有一群工程师出力,谁替你把创意带到世界上来。
非老板们也以为自己一个创意就能救了自己。那是老板忽悠你的。上述春秋战国某王、刘邦、李自成的谋士的故事都告诉我们:未来的公司是属于跟老板一起光膀子打天下的。那个当初指指点点这么干能成的家伙,早就被大家忘光了。
别说,有一个人,他倒是例外。他当初指点他爹造反,建立了唐朝。他爹说过,要不是你那句话,咱们哪有今天。这位爹是李渊,儿子是李世民大帝。不过,他爹可不是没事回忆和感谢这位儿子当年的创意呢。李世民先是亲手跟老爹和兄弟们打了天下,后来杀了两个哥,逼李渊退位当太上皇。他爹对这位牛人的好评,可不是凭创意得到的。
《创世纪》里,上帝说,要有光。他老人家可不是说,我看有光不错,你们几个整一个试试。如果成了算我的,整出毛病来,反正也不是我整的。
作为工程师,少整点创意,多点实现创意的能力吧。
最后,我想起来十来年前给一位老板修机器时候的对话。他说,你为什么不考虑一下市场需求,创意很重要啊。不是原话,大致如此。我说,手头的活儿都干不过来,没工夫整创意。
有资本的人是有资本谈创意的,因为他有钱支持创意。如罗素所说,有闲阶级的太太们可以养活一大群无聊和不咋地的艺术家。没资本的人少扯点创意,多点实现别人创意的本事吧。
即使我有一千个创意,倒也不见得非得讲给无关的人听,又不是想拉他的投资。
--------------------
博客会手工同步到以下地址: