2010-07-30

ntpdate

前些日子 qhe 说我在 github 上的 commit 时间有点错乱,我看了一下果然如此。三台虚拟机中最离谱的是我笔记本上vmware workstation里跑的 ArchLinux,`date’ 命令的显示结果和真实时间差了几乎两天。

网上搜了一下,vmware 官方有份文档写的很赞:
Timekeeping in VMware Virtual Machines

我的解决方法很省事,直接用ntp吧:


yaourt -S ntpdate

sudo ntpdate pool.ntp.org

标签:

勇敢的虾

晚餐图省事,买了点基围虾。看着它们一个个活蹦乱跳的不想安分的呆在盆子里,于是我就在上面罩了一只塑料漏筛。没想到居然镇不住这些小东西。

丢了葱姜的水慢慢煮沸,翻过来拿起漏筛望锅里倒。虾之将死,其跳也快。没想到有一只居然凌空一个弧线跳在锅外。我一把抓住望锅里扔,在丢入的一刹那,它用力掀起一尾沸水,精准的打中我的右手臂。勇哉,斯虾!

有打破牢笼的强烈欲望,有求生的坚决意志,有玉石俱焚的无畏精神。吾为人尚不如虾。

标签:

2010-07-28

llscheme – 3 – interpreter

qhe 同学为 llscheme 加 了一个 interpreter 接口,安装好之后 `llscheme -i’ 即可进入解释器。然而在开发过程中间碰到了一个有趣的问题:我们有个lsrt_error(),调用它会导致进程结束。这对于编译出来的代码是没问题的, 然而对于解释器,大家可能希望它打印错误信息后能继续工作。

解决该问题的办法是在lsrt_error()调用exit(-1)之前插入一个钩子函数,并且该钩子函数式个弱符号(weak symbol),我们只在调用解释器的时候定义该钩子函数:


extern "C" void lsrt_exit_hook() { throw Error(""); }

函数lsrt_exit_hook()假模假式的抛了个异常,避免了对exit(-1)的调用,而解释器只要捕获改异常,然后继续REPL即可。完整补丁:

git diff 1a6bd0..6749de

标签: ,

2010-07-14

工作札记 (12)

工作中最不解的事情之一是人们喜欢以工作经验来衡量一个员工,而衡量工作经验的那个重要参数却是工作时间。比如:某某有两年工作经验。 窃以为这和论资排辈没啥区别。

前段时间在朋友分享的一篇文章中看到一句话:

你以为你有十几年工作经验,其实你只是一年工作经验用 了十几年;你以为你犯了几百个错误,其实你只是一个错误犯了几百次;舍近求远和原地踏步,是我们职业生涯里最容易习以为常的状态。

现实生活中少有对自己的梦想坚持不懈者。“有些人能清楚地听到自己内心深处的声音,并以此行事,这些人要么变成了疯子,要么成为传奇”。《秋日传 奇》

标签:

2010-07-09

llscheme - 2 - profiling

本文谈谈怎样对llscheme生成出来的代码进行性能剖析。假设有个示例程序fib.scm,它会算出第一千个斐波那契数。我想到两种方法:
  1. 利用传统的gprof工具链
    • CFLAGS='-lpg' ./autogen.sh --prefix=/usr (保证运行时库是以'-lpg'编译的)
    • sudo make install
    • llscheme -S -o fib.ll <>
    • llc fib.ll (得到 fib.s 本地CPU汇编代码)
    • gcc -pg fib.s -o fib -llsrt -lgc -lgmp
      这样运行./fib确实会得到gmon.out,但接下来跑 gprof 却得不到任何剖析数据。具体原因有待分析。
  2. 利用LLVM自己的profiler - llvm-prof,它需要一个LLVM bitcode文件作为输入。为此,我们得先把llscheme的运行时库打包成LLVM字节码,而不是用autotools那一套生成出来的共享库liblsrt.so。
    • cd llscheme/src/runtime
    • clang -emit-llvm -c *.c -I./include -I../include
    • llvm-ar rcs liblsrt.bca *.o
    • llvm-as fib.ll
    • llvm-ld fib.bc liblsrt.bca -lgmp -lgc -o fib (这一步会生成可执行文件fib,以及对应的字节码文件fib.bc - 会把老的覆盖掉)
    • perl profile.pl fib.bc -load /usr/lib/libgmp.so -load /usr/lib/libgc.so 这样就能输出详细的剖析数据。
profile.pl 来自 LLVM 的 subversion 仓库,不过这个脚本有点问题。我有一个小补丁:
--- profile.pl.old 2007-09-12 01:09:54.000000000 +0800
+++ profile.pl 2010-07-07 13:13:55.282462603 +0800
@@ -65,10 +65,10 @@
my $libdir = `llvm-config --libdir`;
chomp $libdir;

-my $LibProfPath = $libdir . "/profile_rt.so";
+my $LibProfPath = $libdir . "/libprofile_rt.so";

system "opt -q -f $ProfilePass $BytecodeFile -o $BytecodeFile.inst";
system "lli -fake-argv0 '$BytecodeFile' -load $LibProfPath " .
- "$BytecodeFile.inst $ProgramOpts " . (join ' ', @ARGV);
+ (join ' ', @ARGV) . " $BytecodeFile.inst $ProgramOpts";
system "rm $BytecodeFile.inst";
system "llvm-prof $LLVMProfOpts $BytecodeFile $ProfileFile";

标签: ,

2010-07-07

爱情不等式

上周四晚上、周五早晨在Gtalk上分别收到两位朋友的在线消息:他们几个月前和自己的恋人分了手。我并不善于在言辞上安慰他们,只是心想,既然终 于告诉了我,那么至少我这两位朋友们已经不再纠结其中。我又何必再勾起再勾起那些伤心的回忆。天涯何处无芳草。

爱情是个奇妙的事情,奇妙的地方在于很多理性的思维规则在这里根本就不适用。爱情不是付出就有回报,否则也就不会有单恋了,它讲究两情相悦。在我看 来,爱情更像是个不等式,它不像方程式那样有确定的解(或者确定无解);而且你无法期待爱情中的双方有均衡的付出,等到你期待均衡的、在乎均衡的时候,它 就变成了一个确定无解的方程式。

当我在厨房汗流浃背,汗水啪嗒啪嗒的滴在砧板上的时候,我不能抱怨爱人躺在床上吹着空调上着网;因为当我键盘敲得欢快的瞬间对方也可能在拖地刷锅洗 衣服。多一点设身处地,少一些锱铢计较,生活会变得美好很多。

我以前常说,人世间最残酷的美丽或许就是,你可以后悔,却永远也无法重新来过。这或许也是世界唯一的公平。珍惜每一分钟(所以我不大愿意花很多时间 陪逛),每一份情感,就算分手也无怨无悔。忘却很难,新的生活也许并不容易,但一定要做一个真诚、理性、豁达的你!

祝福我的朋友们。

标签:

2010-07-05

微博体 - 3

刚出门五分钟,便下起瓢泼大雨。昨天更惨一点,和LP两人只有一把阳伞,雨也更大。没多久便被淋了个湿透,拧了拧俩裤管,流出半斤水。

其时刚过三点,天却阴沉得似乎夜晚已经逼近。江湾体育场下面的几家书店停电了,往五角场看去也是灰灰的一片。和大自然相比,人类其实还是很渺小。

万达里面的人似乎比平时多,连背景音乐也显得响亮一点。脑子里突然闪过一个比较“反动”的念头:难道今天人们出来庆祝国庆?WalMart里面一个 52寸液晶电视上正是新闻联播报导某高层安排国庆工作(显然是录播,显然WalMart更反动:-))。

LP逛商店。我站在店门外。门口还有另外两位稍微年长一点的男士。

我不喜欢站在店里。它们多数都有装修材料散发出的刺鼻味道,还有衣服、皮革中多少也会有一些难闻的气味。

单身的时候曾经想过,以后要陪MM逛商店,帮忙挑商品。可是结婚后才发现原来事情远远没有这么简单。因为购物的时候女性似乎从来都没有确定的目标, 而且那种状态下她们不会想到时间有多么珍贵。最后在审美有差异的情况下,我很多时候基本上很难提起兴致。

男士最难回答的问题之一是,女士拿起一件衣服问:好不好看?

我希望拥有一台iPad,这样在LP商店里的时候我在店门口可以同样兴致勃勃的做我想做的事情。用手机看电子书?不,我喜欢大一点的屏幕。

老鄢的这个域名七月八号过期。本博在 http://live4thee.blogspot.com/ 延续,访问不畅的朋友们可以通过Google Reader 订阅之。或者,像康总一样邮件订阅(给我电邮即可)。

标签: