Tian Zheng 2016-04-20T06:51:03+00:00 http://tzheng.us/ Tian Zheng naiTgnehZ@gmail.com 朝闻道 夕死可矣 2016-04-18T00:00:00+00:00 http://tzheng.us/cn/2016/04/find-truth <p>不知什么时候</p> <p>恋上了科学这迷信</p> <p>流连维基百科</p> <p>深度优先读取</p> <p>史前优雅语言</p> <p>深空最大天体</p> <p>编译时间优化</p> <p>耶稣救世降临</p> <p>刘慈欣写了小说</p> <p>朝闻道夕死可矣</p> <p>说外星人来到大地</p> <p>带着全宇宙真理</p> <p>可你听完就得嗝屁</p> <p>科学家们却说</p> <p>我愿意</p> <p>我和室友聊起</p> <p>却又左右顾虑</p> <p>他说哪有真理</p> <p>何况你有family</p> <p>对啊</p> <p>我还要养家糊口</p> <p>追求迷信不可取</p> Flappy Bird 2014-02-09T00:00:00+00:00 http://tzheng.us/cn/2014/02/flappy-bird <p>大众手机游戏文化被小鸟儿吸引已经不是第一次了。当年Angry Bird一夜爆红,上周Flappy Bird也是这样。与怒鸟推出种种周边公司做大不同,扬鸟的作者竟然宣布今天将该款游戏下架了。据说该游戏每天给作者带来广告费用多达8万美元,作者因平静生活受到影响决定将其下架。</p> <p>我以小人之心度君子之腹地看看,似乎背后的理由并非这么简单,如果我分析正确,这次的行为最终会成为一次营销学经典。这款游戏爆红的原因主要是其变态的难度,很多玩家被不断的死亡和失败折磨得身心惧疲,将该游戏推荐给身边的人。玩家分为两类——甲:一群闯关死忠为了不断追求更高的目标日夜刷分;乙:我等凑热闹的,下载玩两把发现太难就删除了的。</p> <p>该游戏免费,但在游戏界面有一长期显示的广告条。游戏作者通过该广告条获得收益。当前作者获得的绝大多数收益是来自乙类玩家一两次运行游戏所得,可以说这些收入是一次性的。这批玩家删除之后是不会再下载并运行这款游戏的。我们知道苹果应用商店的产品下架之后,已经在手机中的游戏并不会被删除。所以作者宣布22小时之后游戏下架,会有很多人特地跑去下载这款游戏并在手机中留存,甚至是再也没点开过这款游戏的我也不禁落入俗套留存了它。这样,终有一天,这款游戏会在原本一生只会点击它一次的人手中被点开第二次。游戏作者也由此实现了乙类玩家单次收入的多次化。而甲类玩家的收入并不受此举影响。</p> <p>这个游戏大约火了一周左右了,我属于后知后觉型。单位同事上周都在玩,连经理都在部门邮件列表中分享游戏经验。我属于后知后觉型,多半是最后几批加入到这流行文化狂潮中的。游戏作者深谙快餐内涵,通过下载量及广告收益可以分析得知潜在玩家增长率已经疲软。在放弃少量潜在玩家的情况下,既保持来自甲类玩家收入,又增加来自上千万乙类玩家的二次收入,何乐而不为?</p> <p>后记:2014年来到后没有更新过博客。最近形势发生了翻天覆地的变化,似乎想写点儿什么。也许是我孤陋寡闻,目前在网上还没有看见与我类似观点关于此事的分析。一夜爆红的成功不可复制,爆红后如此营销也非常人可以轻易运作。本人对以上观点持有最终解释权及有限法律责任。</p> 中西文化中的牧羊人们 2013-06-27T00:00:00+00:00 http://tzheng.us/cn/2013/06/shepherd-in-western-and-chinese-culture <p>说起牧羊人们,我要从汉字的“牧”字说起。汉字那么多,我为什么要单独说“牧”字呢?是因为这个字在中西方都十分重要。汉字中的“牧”,除了表示放牧牲畜之意外另有管理的意思;无独有偶,在西方文化中“牧羊人”一词除了表示本意外常被用作宗教用途,也有管理之意。</p> <p>“牧”一字在汉语中一字两义来源已久,春秋时期儒家经典《周礼》如此写道:</p> <div class="highlighter-rouge"><pre class="highlight"><code>以九两系邦国之民.一曰牧.以地得民.二曰长.以贵得民.三曰师.以贤得民.四曰儒.以道得民.五曰宗.以族得民.六曰主.以利得民.七曰吏.以治得民.八曰友.以任得民.九曰薮.以富得民. </code></pre> </div> <p>在此,“牧”作“畜牧”。而《周礼》中又写道:</p> <div class="highlighter-rouge"><pre class="highlight"><code>乃施典于邦国.而建其牧.立其监.设其参.傅其伍.陈其殷.置其辅. </code></pre> </div> <p>此处,“牧”作“管理”。</p> <p>对于“牧”一字作“管理”,以其官职用途理解更佳。据说舜帝将天下分为十二州,置州牧。沿袭至夏,天下分为九州,依旧设立州牧作为行政长官。但是此时的“牧”是京官,与汉朝割据地方的州牧们不是一回事儿。《礼记 曲礼》中有如此记述:</p> <div class="highlighter-rouge"><pre class="highlight"><code>九州之长,入天子之国,曰牧。 </code></pre> </div> <p>至于汉朝割据的诸位,就不一一列举了,袁绍是冀州牧,刘备诸葛亮都成做过益州牧,都是独揽一方大权者。</p> <p>“牧”这活儿到了西方可就更厉害了。牧羊人一词,拉丁文作pastor,希腊文作ποιμην,希伯来文作רעה。看见我列出这三个语言版本,您肯定猜出了我接下来要说的与基督教有关。正如我在耶稣基督后期圣徒教会中被按立的牧师一职有关,该职位在天主教与东正教中称”Priest”,在新教中众教会中称“Pastor”。</p> <p>如果您熟悉英语,一定知道英语中的牧羊人一词叫做shepherd。这个词在各英文版圣经中多次出现,代表耶稣基督。《希伯来书》第13章20节写道:</p> <div class="highlighter-rouge"><pre class="highlight"><code>愿赐平安的上帝,就是那位凭着立永恒之约的血使群羊的大牧人——我主耶稣从死里复活的上帝, </code></pre> </div> <p>在《摩尔门经》中,《尼腓一书》第13章41节写道:</p> <div class="highlighter-rouge"><pre class="highlight"><code>因为全世界只有一位神、一位牧人。 </code></pre> </div> <p>以牧人称耶稣基督,可见“牧”一字在西方不仅作“管理”,管理的能力更是极大。</p> <p>既然说到了宗教,再说点关于“牧人”的趣事吧。伊斯兰教的伟大先知穆罕默德也曾在人生中做过牧羊人。锡克教也有如下启示:</p> <div class="highlighter-rouge"><pre class="highlight"><code>我们是牲畜,全能的上帝是我们的牧人。 </code></pre> </div> <p>(锡克教甚是有趣,虽然发源自印度,却是一个一神教。耶稣基督后期圣徒教会有约一千五百万成员,是当今最大的新兴宗教,而锡克教是当今最大的传统非主流宗教,约两千八百万教徒。)</p> 谈谈语言中的映射现象 2013-06-20T00:00:00+00:00 http://tzheng.us/cn/2013/06/mapping-between-languages <p>今天是个好日子,所以我觉得写一篇博客谈谈自己最近对语言中映射现象的想法。什么是映射呢?我们在初中数学课上就已经学过,它是指两个元素集之间元素相互“对应”的关系。什么是语言学中的映射关系呢?就是说不同语言词语之间的对应关系,有一对一,多对多,一对多,多对一,还有些词语在一个语言中存在,在另一个语言中却需要一个很复杂的句子来叙述甚至完全无法描述。</p> <p>事情是这样的,我有个美国朋友Jason,一个越南朋友Lily,我们都住在巴黎。后来Jason到纽约了,刚走第二天Lily就问我:“When will Jason come to New York?”我当时大惊,思索了很久没有相同她在说什么,我们不是在巴黎么?Jason不是去纽约了么?什么叫来纽约?然后我回想了一下她生活中说的英语,好像哪里不太对,似乎她从来分不清go和come,而且像这样的问题换成go好像也有点不太对,arrive什么倒是有点对头。</p> <p>回家我一拍大腿,是不是越南语里come和go是同一个词啊?这个我知道,越南语有一个đi,还有一个đến。正好系里有个越南哥们儿,语言大师,我来向他请教一下。在这里引用一下他的原话:</p> <div class="highlighter-rouge"><pre class="highlight"><code>"đi" is translated more as "go" "đến" is the most used translation "come" but in some context, "đi" can be translated as come for example: Đi với tôi nhé? - "Come with me?" "đến" can also be used in other meaning For example: Đến đâu rồi? - "Where are you?" (usually when you ask your friend to come over and they are a little late) it's very complex in conversation sometimes both words can be used just to mean one thing as well: Tôi đi đến Baldwin rồi. -- "I arrive in Baldwin." (but the "đi đến does not necessarily mean "arrive") </code></pre> </div> <p>越南哥们儿很热情地解答了我的问题,原来这俩词确实生硬译成“来”或“去”的时候有相通的地方,但表示“到”的时候可以通用。这点与汉语很相似,如果我们将“他什么时候来北京”与“他什么时候去北京”弄混了,一定是很奇怪的,但如果我们说“他什么时候到北京?”就可以同时表达两个意思了,甚是有趣。</p> <p>汉英一对多的现象常查找汉英词典的朋友应该很常见,一个汉语词总有几个英语词与之对应。比如汉字“义”,英语中正义作“justice”,情谊作“relationship”,意义作“meaning”,耶稣基督后期圣徒教会的著名格言“Choose the right.”翻译成汉语竟然也可以言简意赅为一个“义”,不得不赞叹汉语的博大精深。同样的例子还有“看”:look, watch, see;“大”:big, large等,在此不再赘述了。</p> <p>汉英多对一的情况也很多,比如网络常用词turf,在英语中只是一个词,在汉语中却可以表示草皮、泥炭、跑马场等看似完全不相关的意思。小学生学英语经常被洋人困惑,为什么洋人干什么都是“玩”?弹钢琴是play,打篮球还是play,放音乐也是play,业精于勤荒于嬉啊!至于汉语的uncle分为叔伯舅,aunt分为姑婶姨,这可都够来华洋人喝一壶的。</p> <p>还有些词汉语有,翻译成英语简直没法弄。前两天和洋人说满洲美食酸汤子,琢磨了半分钟硬是没琢磨出来英语怎么翻译,你说这东西是酸的汤子吧,不完全是,你说是酸汤的子吧,那更不是了。索性直接音译给他们,很明确告诉他们,这东西太高档你们这里没有。同样的还有侧福晋,你说是小老婆吧,她不是,你说是情妇吧,更不是,这些词一和洋人说起来我就抓耳挠腮。</p> <p>很多人在国外生活久了回国会中英夹杂说话,招致他人反感,殊不知有的时候真的挺无奈,不夹杂不行啊。有的词外语有,汉语真没有。过去洋人流行一种发型,叫做mullet,这次原本是胭脂鱼的意思,翻译总不能叫胭脂鱼发型吧?您看了下图就知道这发型有多不像胭脂鱼了。</p> <p><img src="http://www.mullet-mania.webs.com/chink_kidnplay_mullet_combo.png" alt="Alt" /></p> <p>德语有一个非常常用的词,竟然在英语与汉语中都没有。德语中“doch”一词表示双重否定,比如咱俩吵架,我说:“烤鸡好吃。”你说:“不,炸鸡更好吃。”这时候按照汉语习惯我应该说:“不,还是烤鸡好吃。”但我个人总觉得重复一遍你说的“不”字总有些理亏,没压住你,德语这个双重否定就派上用场了:“Doch!还是烤鸡好吃!”你看这样反驳多带劲儿?可惜这一个词我在汉语和英语中都没有找到较好的替代品,每当想用但对方又不会德语的时候就要憋的全身发汗。</p> <p>当然,除了这些映射不对应的情况,其实还有很多巧合,在文末举两例</p> <div class="highlighter-rouge"><pre class="highlight"><code>轻如鸿毛 : as light as feather 趁热打铁 : strike the iron while it is hot </code></pre> </div> 贝叶斯定理——《思维的乐趣》笔记与思考 2013-04-18T00:00:00+00:00 http://tzheng.us/cn/2013/04/bayes-theorem <p>这两天我在读一本很有趣的书,书名叫《思维的乐趣》。我这人既不爱数学也不爱统计,但这本书偏偏是说他们的。做信息技术数学用的不多,但是做计算机科学有的时候是真的不得不学习一些。书里很多内容让我产生很多思考,在这里记录一下。作者顾森,是北大应用语言学专业的,拜读他的大作十分佩服,不知道他是否有出国深造的打算。</p> <div class="highlighter-rouge"><pre class="highlight"><code>社会学是应用心理学,心理学是应用生物学,生物学是应用化学,化学是应用物理学,物理学是应用数学。——顾森 </code></pre> </div> <p>这本书的第一部分是生活中的数学,第一节说的是概率论如何帮助我们更好地撒谎,真的很有意思。</p> <p>他先举例大学朋友联机打游戏,有一位打得一般。有一天他彻夜未归,大家便怀疑他偷偷去网吧练了一夜。结果他说自己与女朋友看通宵电影去了,还拿出了电影票。大家又开始怀疑他的电影票是买了别人的散场票根得来的。</p> <p>接着他引用了贝叶斯(Bayes)定理</p> <div class="highlighter-rouge"><pre class="highlight"><code>P(A|B)=(P(B|A)*P(A))/P(B) </code></pre> </div> <p>由此他通过统计学的方法,得到了生活中提高撒谎成功几率的应用。具体内容请详见他博客的<a href="http://www.matrix67.com/blog/archives/2517">链接</a>,因为版权原因我就不详细赘述了。</p> <p>原本我是把这本书当作睡前读物,心想数学嘛,肯定越看越困,一会儿就睡着了。谁知这本书越看越让人爱不释手,后来我竟然拿着笔记本各种证明推广。</p> <p>书里的例子是通过一样证据(B)证明自己没做某件事(A)。例子举得十分巧妙,引人思考。</p> <p>同样,通过小小的变化,我们也可以通过一样证据(B)证明自己做了某件事(A)。比如:</p> <div class="highlighter-rouge"><pre class="highlight"><code>P(A): 我说美国总统熬粑粑给我题词“一帆风顺” P(B): 我引入证据总统题词原件一张 P(A|B): 我拿出证据后,大家相信我的概率 P(B|A): 我说总统给我题词后拿出证据的概率 </code></pre> </div> <table> <tbody> <tr> <td>可以看出,在这里比较重要的是A</td> <td>B。因为一般我和大家吹牛逼,直接说A,大家觉得概率太低,不相信。我引入B来让大家相信,此时大家思考的概率是A</td> <td>B,我有B作为证明时,A发生的概率。A</td> <td>B的概率越大,大家越容易相信。</td> </tr> </tbody> </table> <table> <tbody> <tr> <td>从贝叶斯定理P(A</td> <td>B)=(P(B</td> <td>A)*P(A))/P(B)中我们可以看出:P(A</td> <td>B)与P(B</td> <td>A)及P(A)成正比,与P(B)成反比。所以要提高P(A</td> <td>B),我需要提高P(B</td> <td>A),P(A),降低P(B)。</td> </tr> </tbody> </table> <table> <tbody> <tr> <td>在我的例子中,首先我要提高我说总统给我题词后拿出证据的概率。那就是拿出证据要果断,一说完就拿出来,别扭扭捏捏找半天,大家一怀疑,P(B</td> <td>A)就下去了。第二是提高我平时做人的人品,我说熬粑粑给我题词大家倾向于相信我的话,而不是怀疑。第三是平时少没事儿伪造证据,别一还没拿出证据大家就觉得我吹牛逼窦有伪造证据,那就是P(B)太高了。</td> </tr> </tbody> </table> <p>结合他书中的例子,如果要通过一个证据证明自己没有做什么事儿,第一是证据不能太轻易拿出来了,要拖拖拉拉,显得没有做好准备。第二是平时要提高人品,说自己没做这事儿大家更容易相信。第三是平时提高一下收集证据的爱好。</p> <p>本着__不__支持大家撒谎的原则,我把这件事儿总结一下。利用贝叶斯定理撒好谎有如下三条原则:</p> <div class="highlighter-rouge"><pre class="highlight"><code>1. 人生如戏,全在演技。现场情况要会随机应变,根据情况及时针对立刻拿出证据或扭捏拿出证据。 2. 做诚实的人!大家平时相信你,你在紧急关头才更有机会。 3. 这个不太好准备,因为没有办法预见未来的情况下不知道未来会需要什么证据,会用在什么情况下,应该多准备还是少准备。所以首先平时要多给自己留后路,大部分事儿要秘密做,别让人摸清规律;再就是撒谎时随机应变很重要,需要立刻拿出的证据就挑大家不觉得你平时有的,需要扭捏拿证据的时候就要拿出大家觉得拿出来很平常的。 </code></pre> </div> <p>个人总结了这么三条,还是不推荐大家撒谎的。十诫中很重要的第九诫希望与大家分享一下:</p> <div class="highlighter-rouge"><pre class="highlight"><code>不可作假见证陷害人。——《出埃及记20章16节》 </code></pre> </div> 标签页表与物理地址 2013-04-04T00:00:00+00:00 http://tzheng.us/cn/2013/04/pagetable-frame <p>最近在学习操作系统的内存机制,研究了一下标签列表与物理地址,有一点心得,在这里做点笔记。</p> <p>我们都知道编译器和汇编器会把我们编写的程序翻译成机器语言,机器只要照着二进制的0和1执行就可以了。机器执行这些程序时是严格对应物理层的,机器语言里的内存地址就是物理上的内存地址。这就为我们带来了一个问题,今天我在我的机器上编译一个太阳神三国杀的程序,想拷贝给二子玩,但是我的操作是Win7,他的是XP,我们俩的无论如何,在运行的时候,太阳神三国杀在我们内存中的位置都不一定是一样的。那我已经编译好的可执行应用,又怎么能在他的机器上正确运行呢?</p> <p>聪明的你肯定已经想到办法了,就是用相对的__逻辑地址__来表示。很明显,单应用操作系统没有这个问题,早期的Mac OS以及DOS都只需要程序在编译时链接物理地址。后来操作系统钟可以同时运行多个程序了,就有了__加载时链接__和__运行时链接__两种方式。加载时链接是在程序进程创建之后,将一个常量便宜添加到逻辑地址中得到真正的物理地址,这种方式现代个人电脑使用较少,不多赘述。使用更多也更灵活的是运行时链接。程序真正的物理地址直到进程调度时才予以分配。这种方式也有利于CPU中硬件极限缓存器的设计,当然这也不是今天的话题。</p> <p>我嘚啵嘚啵嘚啵嘚说了这么半天,竟然完全没有提到标签页表,我真是服了我自己了。别着急,这就出现了。</p> <p>系统里只要有不止一个程序在内存中,就涉及到内存管理的问题。只有一个程序的时候,可以让他随便用,只要别碰内核就行。程序一多,谁放在哪儿总有个说法。相互之间离的太近,一个程序需要分配更多动态空间就不够;相互之间离的太远,内存又有太大浪费。有的时候离的距离俩程序分配动态空间够用,但是第三个程序塞不进去。。总之想当然这么用不科学。</p> <p>有人想个办法,把程序分为很多__页__,把内存分为很多__帧__,把一个程序打散,一页正好塞进一帧,多出来的帧不就可以有效利用别的程序了?我们来看看图理解一下。 <img src="http://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Virtual_address_space_and_physical_address_space_relationship.svg/300px-Virtual_address_space_and_physical_address_space_relationship.svg.png" alt="Alt" /> 所以咱们编译时有一个__标签页表__就可以了。这表里存折哪一页对应了哪一帧。而操作系统呢,他知道自己的帧大小,知道了逻辑地址,知道了偏移量,再通过标签页表就可以算出物理地址啦!</p> <p>写了一段小代码,大概就是操作系统中如何处理这件事儿的:</p> <figure class="highlight"><pre><code class="language-c--" data-lang="c++"> <span class="c1">// Input logical addresses and calculate physical address </span> <span class="k">while</span> <span class="p">(</span><span class="n">getline</span><span class="p">(</span><span class="n">cin</span><span class="p">,</span> <span class="n">line</span><span class="p">))</span> <span class="p">{</span> <span class="kt">int</span> <span class="n">logicalAddr</span> <span class="o">=</span> <span class="n">atoi</span><span class="p">(</span><span class="n">line</span><span class="p">.</span><span class="n">c_str</span><span class="p">());</span> <span class="n">uint</span> <span class="n">page</span> <span class="o">=</span> <span class="n">logicalAddr</span><span class="o">/</span><span class="n">size</span><span class="p">;</span> <span class="c1">// Test if logical address too big or too small </span> <span class="k">if</span> <span class="p">(</span><span class="n">page</span> <span class="o">&gt;=</span> <span class="n">table</span><span class="p">.</span><span class="n">size</span><span class="p">())</span> <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"Logical address "</span> <span class="o">&lt;&lt;</span> <span class="n">line</span> <span class="o">&lt;&lt;</span> <span class="s">": illegal address"</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span> <span class="k">else</span> <span class="p">{</span> <span class="n">frame</span> <span class="o">=</span> <span class="n">table</span><span class="p">.</span><span class="n">at</span><span class="p">(</span><span class="n">page</span><span class="p">);</span> <span class="c1">// Test if the page is in frame </span> <span class="k">if</span> <span class="p">(</span><span class="n">frame</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"Logical address "</span> <span class="o">&lt;&lt;</span> <span class="n">line</span> <span class="o">&lt;&lt;</span> <span class="s">": page fault"</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span> <span class="k">else</span> <span class="p">{</span> <span class="n">uint</span> <span class="n">offset</span> <span class="o">=</span> <span class="n">logicalAddr</span><span class="o">%</span><span class="n">size</span><span class="p">;</span> <span class="n">uint</span> <span class="n">phsicalAddr</span> <span class="o">=</span> <span class="n">frame</span> <span class="o">*</span> <span class="n">size</span> <span class="o">+</span> <span class="n">offset</span><span class="p">;</span> <span class="n">cout</span> <span class="o">&lt;&lt;</span> <span class="s">"Logical address "</span> <span class="o">&lt;&lt;</span> <span class="n">line</span> <span class="o">&lt;&lt;</span> <span class="s">" = physical address "</span> <span class="o">&lt;&lt;</span> <span class="n">phsicalAddr</span> <span class="o">&lt;&lt;</span> <span class="n">endl</span><span class="p">;</span> <span class="p">}</span> <span class="p">}</span> <span class="p">}</span></code></pre></figure> <p>这段代码因为不是直接应用在操作系统中,所以自己加了一段人工输入,现在贴上来删掉感觉有些虎头鼠尾,大家凑合着看看,请多指教!</p> 《送东阳马生序》 2013-01-02T00:00:00+00:00 http://tzheng.us/cn/2013/01/dongyang <p>今天看见有人发了一篇文言,读起来十分熟悉,竟然是自己当年的初中课文,应该是要求背诵的。那时的我不求甚解,虽然能背诵全文,但是没有认真思考。不知道是我不好学还是背诵的强制要求导致我兴趣全无呢?</p> <div class="highlighter-rouge"><pre class="highlight"><code>《送东阳马生序》宋濂 余幼时即嗜学。家贫,无从致书以观,每假借于藏书之家,手自笔录,计日以还。天大寒,砚冰坚,手指不可屈伸,弗之怠。录毕,走送之,不敢稍逾约。以是人多以书假余,余因得遍观群书。既加冠,益慕圣贤之道。又患无硕师名人与游,尝趋百里外从乡之先达执经叩问。先达德隆望尊,门人弟子填其室,未尝稍降辞色。余立侍左右,援疑质理,俯身倾耳以请;或遇其叱咄,色愈恭,礼愈至,不敢出一言以复;俟其欣悦,则又请焉。故余虽愚,卒获有所闻。当余之从师也,负箧曳屣,行深山巨谷中,穷冬烈风,大雪深数尺,足肤皲裂而不知。至舍,四支僵劲不能动,媵人持汤沃灌,以衾拥覆,久而乃和。寓逆旅,主人日再食,无鲜肥滋味之享。同舍生皆被绮绣,戴朱缨宝饰之帽, 腰白玉之环,左佩刀,右备容臭,烨然若神人;余则缊袍敝衣处其间,略无慕艳意。以中有足乐者,不知口体之奉不若人也。盖余之勤且艰若此。 今诸生学于太学,县官日有廪稍之供,父母岁有裘葛之遗,无冻馁之患矣;坐大厦之下而诵《诗》《书》,无奔走之劳矣;有司业、博士为之师,未有问而不告,求而不得者也;凡所宜有之书皆集于此,不必若余之手录,假诸人而后见也。其业有不精,德有不成者,非天质之卑,则心不若余之专耳,岂他人之过哉? 东阳马生君则在太学已二年,流辈甚称其贤。余朝京师,生以乡人子谒余。撰长书以为贽,辞甚畅达。与之论辨,言和而色 夷。自谓少时用心于学甚劳。是可谓善学者也。其将归见其亲也,余故道为学之难以告之。 </code></pre> </div> <p>现在再读起来感到自己真的很惭愧啊,努力远远不够,时常有贪图享乐的时候。这是罪啊。今天看见一位好友QQ签名挺励志的,也摘录一下与君共勉:</p> <div class="highlighter-rouge"><pre class="highlight"><code>纵然有众神庇佑,幸福仍靠双手创取。——《乌勒本》之乌布西奔妈妈箴言 </code></pre> </div> 曹操之妻丁夫人 2012-12-21T00:00:00+00:00 http://tzheng.us/cn/2012/12/her-majesty-Ding <p>说来也奇怪,这会儿还没睡,便读了《魏略》,其中有一段说到曹操之妻丁夫人,感到甚是有趣,为大家摘录在此。</p> <div class="highlighter-rouge"><pre class="highlight"><code> 太祖始有丁夫人,又刘夫人生子修及清河长公主。刘早终,丁养子修。子修亡于穰,丁常言:“将我儿杀之,都不复念!”遂哭泣无节。太祖忿之,遣归家,欲其意折。后太祖就见之,夫人方织,外人传云“公至”,夫人踞机如故。太祖到,抚其背曰:“顾我共载归乎!”夫人不顾,又不应。太祖却行,立于户外,复云:“得无尚可邪!”遂不应,太祖曰:“真诀矣。”遂与绝,欲其家嫁之,其家不敢。   初,丁夫人既为嫡,加有子修,丁视后母子不足。后为继室,不念旧恶,因太祖出行,常四时使人馈遗,又私迎之,延以正坐而己下之,迎来送去,有如昔日。丁谢曰:“废放之人,夫人何能常尔邪!”其后丁亡,后请太祖殡葬,许之,乃葬许城南。后太祖病困,自虑不起,叹曰:“我前后行意,于心未曾有所负也。假令死而有灵,子修若问‘我母所在’,我将何辞以答!” </code></pre> </div> <p>曹操一代枭雄,坐拥美女无数,却唯独对丁夫人低声下气,这夫人也是硬茬儿,一怒而去拒不返还。但是,直到死前曹操依然挂念着她,可见其魅力。回顾一下当年发生的事儿,也能让我们看见征战一生的曹操温情的一面。家家都有一本难念的经啊,以现在的标准来看,曹操事业如此成功,感情却不那么如意,谁没点儿短处呢?</p> <p>那年曹操登门,问丁夫人是否愿意与他同乘一车回去,夫人理都不理他。曹操一代帝王,如何能受如此凌辱啊,出门正要离开,心里一软,又求夫人一起走,夫人还是不理他。最后曹操都无奈了,说:“真的是决绝啊!”曹操一生用尽谋略,杀人无数,他临死前竟然和大家说:“我想了想,心里没啥亏欠的。”可见他对征伐天下一事的态度,他完全将自己得天下的事业当作自然。可他却又说:“如果人死后有灵魂,曹昂问起我:’妈妈在哪里?’,我可怎么回答他啊!”一生谁都不欠的,遗言里还不忘了丁夫人。这让卞夫人怎么想?这让曹丕怎么想?</p> <p>丁夫人真是狠人儿啊,硬是逼得曹操离了婚。</p> <p>安阳曹操大墓发掘,似乎丁夫人与曹操合葬。曹操疑冢七十二座,两千年下来还是被找到了。一生想给人以硬汉印象,死了还是不忘记儿女情长啊。还好,最终与丁夫人合葬,最爱的女人又回到了他的身边。这下曹昂问他,他可以笑着回答:“你妈妈一直都在我的身边啊!”</p> 高内聚,低耦合 2012-12-13T00:00:00+00:00 http://tzheng.us/cn/2012/12/cohesion-and-coupling <p>说来惭愧,作为计算机科学专业的学生,我竟然到了大三才第一次听说“高内聚,低耦合”这个软件工程的概念。原因上说一是我平时不认真好学,不主动学习软件工程,第二是之前的半年中我在计算机的学习上遇到了一些瓶颈,很多知识、概念学不进去。</p> <p>前两天在<em>CSDN</em>提问了一个关于MVC设计模式的问题,一直没人回答。昨天上线,发现楼下两个人都在给我说“高内聚,低耦合”这个事儿。内聚,我一听好家伙,这个肯定是化学的事儿,多半是有机化学什么的;耦合更厉害啦,电工口儿的事儿我更是一向学的不精。当时我也没多想,不懂装懂地把帖子结了。今天考完大物坐在这儿看<a href="http://coolshell.cn">酷客</a>这个我最近追的比较多的技术博客,陈皓老师刚写了一篇《如何理解面向对象编程》,看了一些对盲目使用面向对象结构的批判后,我又在文章末尾看见了“高内聚,低耦合”这东西。我一拍大腿,这不能忍啊,怎么半年不好好学电脑,全世界都在说我不知道是什么的东西啊!谷歌之!百度之!</p> <p>学习一下其实这俩词儿意思都很简单,高内聚说的是一个模块干一个事儿,低耦合是说增加模块的独立性。这两点导师无论是Java还是C++编程都一再和我强调(我导师挺固执的,不说这些设计模式要严格遵守,就连 <strong>{</strong> 在定义行末还是第二行起始都得按照他意思来)。听起来意思简单,理解起来还是有点困难的。一是为什么?二是怎么做?在学习Java的时候除了英文的教科书,我还曾使用过国内某一流大学使用的Java教材,该教材只能说把Java语言的格式交给了学生,但其中面向对象概念接近没有,所有例程无论多大多长全部使用一个.java文件完成,所有方法都直接扔在主类中。这直接造成了我很长时间对面向对象的困惑,有那么个几个月我都觉得整个源码就一个文件多好啊,看起来也方便。现在想想要是喜欢一个文件的源码,还不如不用面向对象呢,很多事儿反而方便些。至于怎么做,这真的就不是我能写写说说的了,我确实没有深入学习软件工程,自己的代码积累也不足够对此评述。</p> <p>其实我想说的根本不是什么软件工程的事儿,而是人生。</p> <p>今天我坐在这里想“高内聚,低耦合”到底有什么优点,我突然就想到人生是不是也该这样呢?现在的社会和18世纪已经不同了,信息大爆炸,博学家出现的几率较小了。我们更应该做的是专注做好一件事,在一个领域做精,而不是什么都会点儿,什么弄得都不好。“高内聚”说的正是专注做人的道理,“低耦合”告诉了我们如果对另外的方面感兴趣,可以在进行完一件事以后再进行另一件,减少不同任务相互之间的影响。从软件工程上说,高内聚低耦合的设计模式在短期内看不见较大回报,反而增加了设计难度;但从长远来看,重用性、扩展性大大提高,利于持续发展。生活中更是这样,今天对骑马感兴趣,学学骑马,明天对射箭感兴趣了,强忍着不去射箭,非要把骑马练好再去不可。短期上看,当时情绪被抑制的自己当然是不高兴;但从长远上说呢?如果一天骑马一天射箭,最后可能一事无成,练好骑马再去射箭,哪怕最后因为抑制自己导致了不再想射箭了,至少练好了骑马吧?要是都能练好了,以后至少拿得出手了吧?骑射也能练了吧?</p> <p>其实生活也讲究个重用、扩展,也讲究个可持续。</p> 新的开始,Jekyll 2012-08-15T00:00:00+00:00 http://tzheng.us/cn/2012/08/new-start <p>这是一个全新的开始,在GitHub托管了这个<em>Jekyll</em>的博客。</p> <p>技术是新的,博客是新的,人生也会是<em>新</em>的。</p> <p>我说这个Jekyll部署起来看起来容易其实还挺复杂的,要升级Ruby要升级gem。幸好用的是OS X,要是在Win下不知道要折腾多长时间。不了解的同学我给大概介绍一下,Jekyll是一个Ruby写的博客框架,整套系统部署在本地,其实原理很简单,你用markdown写页面,人家那头生成html的静态页面。框架嘛,高度可定制化。因为是静态页面,咱就占了个GitHub的便宜,可以直接托管,省钱还神速。本来不想多宣传,怕国内人学得太多最后GitHub吃不住让大家都用不了了,后来想想这静态的站点应用很不广泛,第一不是积极向上的程序员不一定知道GitHub,第二这么搭建一下不仅要会git,还有ruby啊markdown啊unix下的指令还要熟练啊,第三这东西太开放了没什么现成的可以用大家都是二次开发,所以估计一般站长也弄不了这么麻烦。得,给大家大概介绍介绍,具体的搭建教程大家百度或者谷歌都有很多,我也比较懒,在此就不再赘述了。</p> <p>十分感谢发明Jekyll的同志!感谢发明Ruby的同志!感谢发明Git的Linus同志(只能叫上这一个名字)!感谢创建GitHub还允许托管项目页面的同志!感谢发明Markdown的同志!感谢让我无意中看见这些的同志们!最后,我的模板起初是从 <a href="http://LeeZhong.com">无网不剩</a>的开源资源修改而来,后来看见<a href="http://yihui.name">Yihui Xie</a>的博客,爱不释手,照猫画虎模仿了一个首页,又从他的上家<a href="http://lhzhang.com">setlmpl</a>过去的commit里翻出了博客页面的模板。现在这里还有很多不完善的地方,十分感谢这几位无私的朋友!</p> <p>博客的搭建暂时告一段落,明天会更好! 又是一年八月十五日,引用当年的那句话吧:</p> <p><strong>旧耻已湔雪,中国应新生。</strong></p>