ic blogs
四月天
四月 4th, 2012 | ic
春天携带着它的微笑,
生命的流水不断的奔跑,
终日游荡的愿望,
穿过死亡和忧伤,
回到我的心中,浸满了日色和星光。
ps:今天有些失眠,就随便的翻看了ipad中的书,看了泰戈尔的诗选, 读到两首不错的,读了几遍,然后自己改写了一下,嘻嘻。
一瞬间
四月 3rd, 2012 | ic
在去泸沽湖的路上,看路边的风景,一块块的梯田,很像《龙猫》中的场景,看到路两边的山在青色和土黄色之间不断的变换,又想到《幽灵公主》的主题曲。在路上看了《生命的注释》,这个本书我以前看了好几遍,每次都有些收获。又想到某人,心中有些痛苦,求而不得的心结,到底还是很难解, 每次去解都会很痛苦,有时候希望每次的睡眠能够擦掉心上的尘埃,醒来能够全身心的感受一个清晨, 希望自己能够安心接受真相,不再去希望和绝望,只是无忧无虑的活着。
早晨在湖边散步,湖水拍打着岸边,野鸭子欢快的游着, 岸边有雪白的梨树和嫩绿的柳树,远处青蓝色的山脉,将一片湖水染成墨绿色。这些天地间的美景,透过双眼,倾进我的心中,这些无法言语的美,它如同镜子般照见了我的短暂和渺小,但我只是感到很安心的存在,如同一草一木活在这片天地间。
坐火车从丽江到昆明,和同事打了会牌,然后就睡了,之后醒了一次,我只是想单纯的爱一个人而已,为何如此的艰难?我知道这想法形成的原因,以及它的潜台词,我只是静静的看着这个情绪,看着它的升起和消逝, 还是被这个情绪感染的很伤心.
人总是会在某个阶段,认识到自己是彻底孤单的,认识到在自己在这个世界上过眼云般烟微不足道,在黑暗的孤独中慢慢的沉淀,洗尽年少的轻狂,从狭隘的自我中解脱,看到这世上每个生灵都是如此,而心生慈悲,对每个生灵都有感同身受的爱意.
一天
三月 25th, 2012 | ic
今天天气很好,一大片蓝色的云彩,下着金色的阳光,滴滴的阳光散落在街道,房顶,散落在人们的脸上,流光溢彩,阵阵清凉的风吹着树木,夹杂这树叶沙沙的低声细语,这是平凡的一天,也是美丽的一天。
因为懂得,所以慈悲
三月 22nd, 2012 | ic
人总是会在某个阶段,认识到自己是彻底孤独的,认识到在自己在这个世界上过眼云般烟微不足道,在黑暗的孤独中慢慢的沉淀,洗尽年少的轻狂,从狭隘的自我中解脱,看到这世上每个生灵都是如此,而心生慈悲,不是站在彼岸的怜悯,而是感同深受的爱意。
Finder for Vim
二月 21st, 2012 | ic
放到github上了
https://github.com/xieyu/Finder
Protype
上周末在家折腾了一个VIM 插件Finder,在脚本里面把path设置好以后,按ctrl-f之后 可以用正则表达式搜里面paths中文件名,搜到之后会将文件给列出来,自己选就是了。选完了按回车或者空格键开始编辑就完事了,:D。
今天晚上整理了一下发到github上了,只是个雏形吧,还有不少要修改的。
Update 1
Change log
这两天早上把finder for vim 改写了一下,主要是增加了以下几点:
1. cache 和多线程的支持(现在只是部分的支持), 因为在公司用的时候,发现文件太多了,每次search扫描一遍目录要十几秒,无法忍受,直接开个线程把filePath直接读取到内存里面了。 2. 增加了对bufferList查询, 输入的时候可以用 -b pattern, 来专门查找bufferList里面的FilePath 3.把findResults这个buffer设置为nofile的了,这样每次关闭vim,就不会要保存这个findResults了 4.把paths, 和paths_sep设置成vim的全局变量了,所以呢,现在可以在.vimrc里面设置这两个变量了,不过目前为了方面(主要是懒..,呵呵),还是留在了这边。 5.findResults窗口呢,增加了'o'快捷键,这个会调用系统的默认程序去打开这个文件,目前只在mac上试过有效。呵呵。如果直接按'ESC’呢,会把outputWindow给关掉。空格和Enter还是保留和上次一样。
ToDo:
1. 准实时的扫描文件目录,因为有时候git 切到另外一个branch上的时候,文件什么的可能都变掉了,所cache的文件目录都不对了。这个要用个线程在后台不断的刷新。额,还需要考虑效率的问题,目前扫描搜索的效率有些低。 2.增加搜索历史,将常用的文件排在前面 3.增加对文件目录的搜索,目前只支持对文件名的搜索。 4.自定义打开某种类型文件类型的app, 这样按'o'的时候,回调用相应的app去打开文件 5.增加filter, 这个意思是调用一个app, 处理完这个文件以后,把输出结果导入到一个临时buffer里面, 相当于vim 里面的!功能。
GTD时间管理
一月 30th, 2012 | ic
前几天看了几篇GTD时间管理的文章,这几天实践了一下,效果不错,能够静下心来专心的做事情了。
GTD主要思想就是把大脑中所有乱起八糟的事情都倒出来,列成一个清单。记住是所有的事情哦,鸡毛蒜皮的小事也要给列出来。这样就不会在被这些事情干扰了。然后对每件事情做个初步的判断,能短时间(2分钟左右)解决的给立刻解决了,对于剩下的事情分解成next action的清单,每个action要有预期达到的效果,然后给每个action根据情景归下类,比如@电脑旁,@超市,@网上,@在家 之类的,这样可以一起做。
之后就可以专心的做next action清单上的事情了,因为你知道,所有的事情都会被妥善处理的,所以能够专心的手头的事情了,效率就会很高,从而提高自己信心,慢慢的就可以达到心静如水的状态了。
十年
一月 17th, 2012 | ic
从14左右到25岁,这段动荡的时间里,死亡这个问题如一块石头一直压在我的心上,从最初的认识,极力的否认,痛苦的逃避到坦然的面对,用了人生中最动荡的十年,消耗了大部分的精力,最终不怎么恐惧了,有勇气转过身直视它,从它的双眼中我看到了充满热情的生命。
在奔腾的时间洪流中,短暂的人生不留痕迹的被吞噬,在寂静的宇宙中,人如尘埃般的渺小。这个事实压在心上,如同黑洞般沉重,捆绑了生命最初的光芒,它用恐惧压迫我,用焦虑驱逐我,用冷漠隔绝我,它如同高高的围墙,将我囚禁其中,对任何事情都提不起兴致与心不在焉,也慢慢的将我从真实的世界隔绝开来。
在孤单的高墙上,我看到各种情绪在在涌动着,我常常迷失在其中,我想找回曾经那个快乐而纯粹的自我,在内心世界中,我满地寻找,在不断的寻找中我越来越困惑,我发现“自我”在不断的消失,在不断的寻求中,抚平了民族和国家烙在心上的偏见,抛弃了社会给于的各种标签,忘掉了言语,忘记了曾经所有记忆,忘记了自己的名字,在寻找中不断的被消融,最终我看到一个无比喧闹的世界,形形色色的公民居住其中:
快乐,痛苦,愤怒,不甘心,委屈,报复,欢喜,贪恋,攀比,执着,愧疚,优越感,耻辱感,价值观,仁爱,慈悲,悲哀,微笑,惊恐,希望,盼望,自卑,自满,自信,自大,自责,阿Q, 勇敢,放弃,绝望,感动,哭泣,独立,依赖,虚荣,占有欲,好奇心,创造力,妄自菲薄,面具,挫败感,付出,割舍,离别,想象,重复无聊,逃避,傲慢,自怜,痛恨,害羞,慰藉,不满足,空寂,信任,欺骗,绝望,虚伪,孤独,苦闷,推石头的巨人。焦虑,恐惧,懒散,失望,后悔,同情。
有一天,我意识到,类似于地球和自然界的万物,我就是这个喧闹的世界。既然我想要纯粹的快乐,我就极力的压抑和否认各种负面的情绪,快乐和好奇心等正面的情绪也在压抑中渐渐的枯萎,这个世界变得如同沙漠般的死寂。后来我不在去压抑它们,我把它们看做内心世界生灵,我尝试去包容它们,理解它们,去了解它们形成的原因,渐渐的它们平息了下来。我周围的高墙也渐渐的消失。
有时候,我想如果我所生活在的这个宇宙也是某种意义上的“人”的话,它在那个世界也非常的短暂与渺小,它会不会想过这个问题,我身体的某个细胞如果有意识的话,会不会也曾想过这个问题,如同俄罗斯套娃那样层层的递归,在无穷的递归中,有着类似的结构,改变的只是时空的维度。
夏虫不可语冰,这个世界上万物有谁不是夏虫呢? 朝生暮死的虫子,几十年的人生,几十亿年的地球,几百亿年或不可测的宇宙都是某种意义上的夏虫。时空上的尺度并没有意义,每个生命的存在都是这天地间平等的一部分,萌芽,成长,成熟,衰落,消亡。这是个如同呼吸一般的自然过程。生命就在这呼吸之间,不断的萌芽与消亡,十年亦不过此刻的转眼一瞬间。
Notes on ply
十二月 25th, 2011 | ic
introduction
ply 是python版的lex 和yacc ,尝试了下document里面的calculator例子,感觉很好用,非常的python,呵呵。[1]有作者写的详细的文档。pycparser 是在ply上实现的,可以parse c和生成ast(abstract syntax tree) ,是个非常好的参考。本文的大部分内容源自[1]
ply.lex
首先要定义变量tokens, 这个变量是必须的有的。
有两种匹配token的方法,一种是简单的,如t_PLUS = r’\+’,另外一种token在遇到的时候,要做写些相应的处理,比如对于nummber来说,需要得到的它值,这个需要定义一个函数来处理。
ply.lex 使用函数的文档, 即 fun.__doc__作为匹配的正则表达式,还有另外一种方法是采用@Token修饰符。(详见[1])。这里的 r’\d+’ 是token NUMBER所对应的正则表达式. 这里面lex规则的前缀t_也是必须的。
另外ply.lex.input(text)可以输入文本,然后从ply.lex.token()里面取token.
tokens = (
"NUMBER",
"PLUS",
"MINUS",
"DIVIDE",
"TIMES",
"LPAREN",
"RPAREN",
)
#regular expression rule for simple tokens
t_PLUS = r'\+'
#a regular express rule with some action code. fun.__doc__ is related regular expression
def t_NUMBER(self, t):
r'\d+'
t.value = int(t.value)
return t
Demo
这里面Calclexer.build没有放到__init__的原因,见[1]:
you should construct the lexer from an instance of the class, not the class object itself. This is because PLY only works properly if the lexer actions are defined by bound-methods.
另外yacc里面的规则是可以合并的,这里没合并。[1]有介绍。
import ply.lex as lex
import ply.yacc as yacc
class Calclexer:
#list of token names.
tokens = (
"NUMBER",
"PLUS",
"MINUS",
"DIVIDE",
"TIMES",
"LPAREN",
"RPAREN",
)
#regular expression rule for simple tokens
t_PLUS = r'\+'
t_MINUS = r'-'
t_TIMES = r'\*'
t_DIVIDE = r'/'
t_LPAREN = r'\('
t_RPAREN = r'\)'
#a regular express rule with some action code. fun.__doc__ is related regular expression
def t_NUMBER(self, t):
r'\d+'
t.value = int(t.value)
return t
def t_newline(self, t):
r'\n+'
t.lexer.lineno += len(t.value)
#a string containsing ignored characters (space and tabs)
t_ignore = ' \t'
#error handling rules
def t_error(self, t):
print "illegal charcter '%s'" % t.value[0]
t.lexer.skip(1)
return
#Build the lexer
def build(self, **kwargs):
self.lexer = lex.lex(module=self, **kwargs)
def input(self, data):
self.lexer.input(data)
return
def token(self):
return self.lexer.token()
def test(self, data):
self.lexer.input(data)
while True:
token = self.lexer.token()
if not token: break
print token
class CalcParser:
def __init__(self, **kwargs):
self.calclex = Calclexer()
self.calclex.build()
self.tokens = self.calclex.tokens
self.calcparser = yacc.yacc(module=self)
def p_expression_plus(self, p):
'expression : expression PLUS term'
p[0] = p[1] + p[3]
def p_expression_minus(self, p):
r"expression : expression MINUS term"
p[0] = p[1] - p[3]
def p_expression_term(self, p):
"expression : term"
p[0] = p[1]
def p_term_div(self, p):
"term : term DIVIDE factor"
p[0] = p[1] / p[3]
def p_term_times(self, p):
"term : term TIMES factor"
p[0] = p[1] * p[3]
def p_term_factor(self, p):
'term : factor'
p[0] = p[1]
def p_factor_num(self, p):
"factor : NUMBER"
p[0] = p[1]
def p_factor_expr(self, p):
"factor : LPAREN expression RPAREN"
p[0] = p[2]
def p_errorr(self, p):
print "syntax error in input"
def parse(self, text):
return self.calcparser.parse(text, lexer=self.calclex)
def main():
parser =CalcParser()
while True:
try:
s = raw_input('calc >')
except EOFError:
break
if not s: continue
result = parser.parse(s)
print result
if __name__ == "__main__":
main()
References
关于爱情
十一月 29th, 2011 | ic
今天下午看了英国的《俩小无猜》(原名melody),简单纯美的爱情,里面的几首配乐都很喜欢。融化了所有的烦恼,只剩下被温暖的心扑腾扑腾的跳,我想这就是爱情的感觉吧
以前觉得如果爱一个人,而对方没感觉,空洞的内心中,好像塞满了冰块,怎么暖也不暖过来,很痛苦。后来看了很多书,渐渐的明白痛苦是因为自己更多的要求是被爱吧,还像个孩子一样看到喜欢的东西就想抓在手中。现在体会到爱一个人的时候,就像看到了世间最美的风景,无论最后有没有缘分走到一起,那份爱意与被珍藏的美丽一直在心中暖暖的流淌。
编程书单
十月 15th, 2011 | ic
Language
1. the c programming language.
2. dive into python.
3. on lisp
4. structure and interpretation of computer programs.
5. programming in objective c.
6. c interface and implementation.
Algorithm
1. introduce to algorithm
2. the art of computer programming.
System
1. Computer systems, A programmer’s perspective.
2. 程序员的自我修养,链接,装载与库, <-- links and loaders
3. understanding the linux kernel
4. linux 0.11内核完全注释
Design
1. clean code
2. code complete
3. Beautiful code.
4. The design of design.
5. hackers and painters
6. unix 程序设计艺术
Source code
1. python 源码剖析
2. the architecture of open source applications.
Compiler
1.现代编译原理 C语言描述
2.高级编译器设计与实现
3.编译原理。
4.parsing techniques.
Tools
1. pro git
2. learn vimscript hard way.
3. gnu make
Machine learning
1.the element of statistical learning.
2.pattern recognition and machine learning.
Most Important
1. 颈椎病康复指南 ,:-), Just Kidding, 要多多运动,保持身体健康。