温暖的杭州人

2013-07-27 by lizherui

昨天傍晚我骑车去买水果,买完回去时忘记骑车了,没锁。快半夜才想起来这事,赶紧跑到已经关门的水果店门口,果然,车子没了。正当我郁闷地准备往回走时,没想到在水果店里看到了我的车子,一股暖意顿时涌上心头。

我每天早上上班的时候会去楼下那个早餐店买包子。有一次买了4块5的东西,但是我手里只有4块零钱和20块整钱。我正准备给他20块钱,没想到他说:给4块钱得了,下次来的时候再给剩下的5毛吧。

大家都知道江浙一代的人很会做生意,如今身临其境,确实开了眼界。这边做小本生意的人,不拘小节,也不看重短期的小利益,头脑、心态、眼光都很赞。

这方面我会多加留意,用心学习。

read more

滑雪

2013-07-21 by lizherui

没想到才来公司两周,就赶上了大型Outing。

第一次滑雪还是在大二的冬天,跟着班上几个要好的同学去的北京郊区一个雪场。从那时起就对滑雪很有好感,很刺激。

这次是跟着公司的人去滑雪。一路上让我愈发感到淘宝的人实在是太开放了,不停地开玩笑互黑。

到雪场后,我直接选择了中级滑道。果然,几年没滑,非常生疏,连摔两次,屁股很痛。

滑的途中我看到一个哥们不慎滑倒,更不幸的是脸砸到了滑板上,破了很大的一个口子,不住地流血,看样子是要破相了。他一脸黑线地坐在了一旁,一直用纸巾捂着脸上的伤口。

我不知道他那时在想什么。这种倒霉的事情发生在任何人身上都会感到很郁闷。

但是别忘了,滑雪是一个有风险的事情。

每次从高台上出发时,我都在纠结,刚滑下去时要不要刹车减速。如果一开始就刹车减速,虽然不容易滑倒,但整个滑雪过程由于速度慢就不太刺激了;如果一开始就全速出发,虽然整个滑雪过程感到很刺激,但又比较容易失控滑倒。

刺激or安全?风险or收益?怎么去平衡它们,怎么去不断地调节平衡点,是一件非常有意思的事情。

晚上回到出租房,陪美女室友看完电视,帮她装自行车装到很晚。

这些天,我感到这个出租房越来越有家的感觉了。白天各自上班,晚上大家一起看看电视聊聊天。

说一下这个室友吧。人非常漂亮 ...

read more

在cgdb中进行I/O交互

2013-10-07 by lizherui

cgdb,gdb -tui的加强版,非常优秀,中文教程在此:https://github.com/leeyiw/cgdb-manual-in-chinese/blob/master/contents.md,不再赘述。

cgdb有一个问题困扰了我很久:如何方便地进行I/O交互。

虽然cgdb自带了TTY模式,但不太靠谱,调试到某些Unix I/O接口时会卡死,如read函数。

今天我又反复看了下教程,发现了这样一句以前没注意的忠告:

如果被调试的程序需要读取终端用户输入,我们推荐用户在终端中启动被调试程序,然后在另一个终端使用CGDB去attach被调试程序,这是与被调试程序进行I/O交互最简单的方法。

但是教程没有说具体该怎么操作,摸索了下,终于完美解决,以调试redis-cli为例。

  1. 命令行先后启动redis-server和redis-cli;
  2. ps查到redis-cli进程号后直接cgdb -p [pid];
  3. 进入cgdb后不要慌,用bt看下阻塞I/O在哪里;
  4. 然后在阻塞I/O处设置断点,可以看到这里在linenoise.c的312行调用了read(),直接加断点b linenoise.c:312 ...
read more

Java设计模式在Common Lisp中的体现

2013-08-04 by lizherui

最近在进一步学习Java的过程中,我愈发感到Java把面向对象的编程思想玩到了登峰造极的地步。而Java中最能表现面向对象编程思想的,就是大名鼎鼎的设计模式了。

这是Wikipedia中对设计模式的定义:设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。面向对象设计模式通常以类型或对象来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类型或对象。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。

在学习了一些设计模式后,我们会发现这23种设计模式都围绕着以下三大基本原则:

  1. 中意于组合而不是继承。
  2. 依赖于接口而不是实现。
  3. 高内聚,低耦合。

不过,除了以上这些收获和感悟以外,我发现了一些更让人感兴趣的东西,这也是这篇文章马上要探讨的重点——Java设计模式在Common lisp中的体现。

Java和Common lisp, 前者作为OO的代表,喜欢玩类和对象;后者作为Functional Programming的代表,喜欢玩函数和闭包。乍一看它俩应该风马牛不相及,井水不犯河水,但实际上我们会惊讶地发现Java设计模式中有着太多Common Lisp的对照,这种现象让人越来越强烈地感觉:软件设计虽然有众多的门派、风格和表现形式,但总体思想上似乎是殊途同归的,比如构造抽象屏障和提高抽象层次。

Java至少有16种设计模式能对应到Common Lisp中,如下图:

aaa

Talk is cheap, let me ...

read more

今天我终于有了自己的独立域名

2013-08-01 by lizherui

今天折腾了半天,终于搞定了自己的独立域名:http://www.lizherui.com

整个过程颇为曲折:

  1. https://www.godaddy.com上用支付宝花80多块钱购买为期一年的顶级域名,并去修改Nameservers为这两个地址:f1g1ns1.dnspod.net、f1g1ns2.dnspod.net。
  2. https://www.dnspod.cn上添加新域名,并申请一条A记录指向Github Pages的ip:207.97.227.245;
  3. 在Pelican主目录新建CNAME文件,添上刚刚申请的域名:www.lizherui.com。

有了独立域名后,感觉非常爽,更加坚定了好好打理个人博客的决心。

read more
Fork me on GitHub