Tian Zheng 2016-04-20T06:39:25+00:00 http://yihui.name/ Yihui Xie xie@yihui.name Swift Workshop Live 2014-09-24T00:00:00+00:00 http://tzheng.us/en/2014/09/swift-workshop-live <p>I am attending a Swift Workshop at CMU holds by Apple and it is awesome. I will put some of my notes here live.</p> <p>Auto Layout is Super Useful! Do not forget to update frame after set it.</p> <p>Each view need one view controller.</p> <p>UITableView, for more details, please check API.</p> <ul> <li> <p>It contains header, content, and footer</p> </li> <li> <p>You can use Reuse queue to limit resource usage</p> </li> <li> <p>auto completion is not only useful, but also a good way to see if something is wrong</p> </li> </ul> <p>Navigation view:</p> <p>Uses Segue to transite from one scene to another</p> <p>drag and release helps a ton in Xcode, much easier than Java</p> <p>Dinner time: Pizza and Sliders!!!</p> <p>Unwind(An-waind) Segue - pop out stack This pops the entered textfield to the previous view.</p> <p>Click Save after change some attribute in the GUI! A friend here has a program that functions weird. We analysed from the compiler’s point of view but failed to find out why. After a while, it is because that we did not click Save..</p> <p>Finally we will touch some Model! Item will be an NSObject.</p> <p>No more static software, we can actually add something to the software!</p> <p>I need to read more about the reuse queue thing.</p> <p>If you want to turn the software off and on but keep the data, you can use NSCoder.</p> <p>Something good to add: 1. text field first responder 2. make the photo smaller 3. found item details, delete items 4. Use UIDocument to properly encapsulate items in Items Manager 5. Use CloudKit for archive</p> <p>After the kick-off session, we have decided to use the word Air in our Team name. Here we start.</p> <p>And, after all, we won the “Audience Choice” Award! I got an 128GB iPad mini Retina for that. Tomorrow is the interview from Apple, let’s see how it works.</p> Shepherd in Western and Chinese Culture 2013-06-27T00:00:00+00:00 http://tzheng.us/en/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> Mapping Between Languages 2013-06-20T00:00:00+00:00 http://tzheng.us/en/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> Talk much, talk foolish 2013-06-16T00:00:00+00:00 http://tzheng.us/en/2013/06/talk-much-talk-foolish <p>回顾上次写作博客至今已两月有余,深感不安。</p> <p>我记得上高中的时候自己有个博客,那个时候租了个空间,每天忙的不亦乐乎,什么都放在博客上分享。那会儿一年可能能写个300篇博客,几乎都是原创。可惜除了个别零散资料,其他的数据都散失了。</p> <p>现在我明显懒了,平时生活里的想法很多,我都记下在随身笔记本中,但却很少深入思考总结成文。一是觉得想法和电脑有关的太少,发上网有不务正业的嫌疑;二是随着年龄的增长,我不再说话肆无忌惮,毕竟言多必失嘛。</p> <p>这段时间经常逛水木,语言学版面去的比较多,但是版里研究汉语言文学的占多数,我很少能插上话。偶尔说两句也是讨论语系分类啊世界语这些话题。</p> <p>这段时间经常吃沙拉,超市现买的比较多,主要是我最近又忙又懒,无心烹饪。</p> <p>我比较高兴的时刻是吃梨的时候,本地的亚洲杂货店有中国来的鸭梨,99美分一磅,还是很好的,我又很喜爱吃梨,自然每天都不放过。每个周五晚上我回去沃尔玛买一只烤鸡,边看三国演义边吃。每个月第一个周日晚上我会去台湾小饭馆吃一个人的小火锅,自认为自己还是比较小资的。大火锅第一是人多热闹,吃起来比较高兴,现在没人陪我吃;第二是自从戒酒以后啊,以前我喜欢的传统下酒食物火锅啊烧烤啊都味同嚼蜡,可能还需要一段时间适应。</p> <p>我就是觉得很长时间不写了,占着GitHub这个空间心里过意不去,人家听说我是大学生还特地给我账号升了级。给诸位汇报汇报我最近的情况吧。</p> Bayes' theorem, thoughts from "Fun of Thinking" 2013-04-18T00:00:00+00:00 http://tzheng.us/en/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> Page table and Physical Address 2013-04-04T00:00:00+00:00 http://tzheng.us/en/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> A Farewell to Ma Junze of Dongyang 2013-01-02T00:00:00+00:00 http://tzheng.us/en/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> Her Majesty Ding 2012-12-21T00:00:00+00:00 http://tzheng.us/en/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> High Cohesion, Low Coupling 2012-12-13T00:00:00+00:00 http://tzheng.us/en/2012/12/cohesion-and-coupling <p>It is a shame that as a junior student in computer science, this is my first time hearing the software engineering concept “High Cohesion, Low Coupling”. I am pretty sure that I have heard this somewhere. But the first time I heard this in Chinese, that was a big surprise.</p> <p>On the Chinese online forum <em>CSDN</em>, I asked something about MVC model a couple days ago and nobody seemed to be interested. I went back there yesterday, two people in the post were talking some cohesion and coupling stuff. If they were using English, I would know what they were talking about. But these two words in Chinese are just weird! Cohesion, this sounds like some chemistry thing, organic chemistry I promise. Coupling is something even more strange for me which I used to think it is a electrical engineer thing. So I didn’t think much and left the post there. After the college physics final today, I was sitting here reading <a href="http://coolshell.cn">酷客</a>, my favorite programming blog these days. The editor Mr. Chen has just post a new article called <em>How to understand object oriented programming</em>. After reading the whole critique of misusing object oriented programming, I read the worlds cohesion and coupling in Chinese at the end again. What an awkward moment! Everyone in IT industry were talking about things that I have never heard about! So I googled them and found what those are in English, which I have of course heard in my CS classes.</p> <p>学习一下其实这俩词儿意思都很简单,高内聚说的是一个模块干一个事儿,低耦合是说增加模块的独立性。这两点导师无论是Java还是C++编程都一再和我强调(我导师挺固执的,不说这些设计模式要严格遵守,就连 <strong>{</strong> 在定义行末还是第二行起始都得按照他意思来)。听起来意思简单,理解起来还是有点困难的。一是为什么?二是怎么做?在学习Java的时候除了英文的教科书,我还曾使用过国内某一流大学使用的Java教材,该教材只能说把Java语言的格式交给了学生,但其中面向对象概念接近没有,所有例程无论多大多长全部使用一个.java文件完成,所有方法都直接扔在主类中。这直接造成了我很长时间对面向对象的困惑,有那么个几个月我都觉得整个源码就一个文件多好啊,看起来也方便。现在想想要是喜欢一个文件的源码,还不如不用面向对象呢,很多事儿反而方便些。至于怎么做,这真的就不是我能写写说说的了,我确实没有深入学习软件工程,自己的代码积累也不足够对此评述。</p> <p>Actually I am not trying talking about software engineering at all. I am talking about life.</p> <p>今天我坐在这里想“高内聚,低耦合”到底有什么优点,我突然就想到人生是不是也该这样呢?现在的社会和18世纪已经不同了,信息大爆炸,博学家出现的几率较小了。我们更应该做的是专注做好一件事,在一个领域做精,而不是什么都会点儿,什么弄得都不好。“高内聚”说的正是专注做人的道理,“低耦合”告诉了我们如果对另外的方面感兴趣,可以在进行完一件事以后再进行另一件,减少不同任务相互之间的影响。从软件工程上说,高内聚低耦合的设计模式在短期内看不见较大回报,反而增加了设计难度;但从长远来看,重用性、扩展性大大提高,利于持续发展。生活中更是这样,今天对骑马感兴趣,学学骑马,明天对射箭感兴趣了,强忍着不去射箭,非要把骑马练好再去不可。短期上看,当时情绪被抑制的自己当然是不高兴;但从长远上说呢?如果一天骑马一天射箭,最后可能一事无成,练好骑马再去射箭,哪怕最后因为抑制自己导致了不再想射箭了,至少练好了骑马吧?要是都能练好了,以后至少拿得出手了吧?骑射也能练了吧?</p> <p>In fact in our daily life we also need reusability, augmentability, and of course sustainability.</p> New Start, Jekyll 2012-08-15T00:00:00+00:00 http://tzheng.us/en/2012/08/new-start <p>This is a brand new start that I have host this <em>Jekyll</em> blog on Github.</p> <p>New technology, new blog, and new <em>life</em>.</p> <p>It is actually a little bit complicate to deploy this Jekyll thing. There were some work to do with updating Ruby and gem. I feel so lucky that I am using OS X, it would be extremely hard if I was using a Windows operation System. For those who do not know, Jekyll is actually a blog framework written in Ruby and you can deploy the whole system locally. It is very simple, you can edit all your posts with markdown code and your page will be automatically generate in html. Framework means highly customizable. Since your whole blog is in static pages, we can host the whole thing on GitHub, free and fast. There are many How-to’s on the Internet. So google them and make your own blog!</p> <p>Thanks a lot for Jekyll developers! Thanks very much for Ruby developers! Thanks Linus for your Git! (I think that’s the only name here I know.) Thank you GitHub and GitHub pages! Thank you markdown developers! Many thanks for those who helped me during this process! I modified my template from <a href="http://LeeZhong.com">无网不剩</a> at the beginning. Then I found the one by <a href="http://yihui.name">Yihui Xie</a> and love it so much. From there I got a homepage design, and from his resource <a href="http://lhzhang.com">setlmpl</a>’s commit in the past got the template I am using. There are still many things that need your suggestions!</p> <p>Believe in a better tomorrow! It is Aug. 15 again, I am gonna quote this at the end:</p> <p><strong>旧耻已湔雪,中国应新生。</strong></p>