2月 15, 2009

但凡以技艺混饭吃,必有上下、高低之分。如此区别待之,倒不是社会不公平现象,而是发展使然。因为唯有此次,才能使在下者,有奋斗之目标,在上者则有危机之感,各自不断奋发向前,促进社会整体地发展。

程序员十层楼:

程序员的十层楼(1~3层)

程序员的十层楼(4~5层)
程序员的十层楼(6~7层)
程序员的十层楼(8~9层)
程序员的十层楼 10层(上)
程序员的十层楼 10层(下)
程序员的十层楼 11层(上帝)

就是一系列论述程序员技艺高低之文。虽然文中的分类有诸多不妥之处,往上区分,已然超出程序界,至纯科学,哲学的范畴。但从中也可以循迹到自己身在 何处,也可估量一下,以自身的精力和才情可以发展至那层,以此明晰奋斗目标。而且文中诸多程序界的8g、趣闻,读来也是盎然有趣。故推荐之。

Tags: .
12月 31, 2008

Lucene真的是一个很强大的东东。把索引和检索这么复杂的处理,抽象出来,包装成一个库,提供几个简单地接口就可以搞定很多事情。其接口的简洁和优雅,非常值得我们去学习。

相对于其他的开源库,Lucene的各种开发文档,还算比较丰富。《Lucene in Action》(其中文版,我查阅各大书店都没找到,看来买的很火爆)这本书上面也把各种示例讲的比较详细。但要想用好,仍然不是件容易的事情。有许多tricky的地方。需要针对自己的需求,采取一些优化的手段。这样就不得不读这两篇文章:
ImproveIndexingSpeed
ImproveSearchingSpeed

就在Lucene官方站点的wiki里面找到的。嗯,谨记!一定要多读官方文档。在网上搜寻各种优化策略,大致脱离不来这两篇文章中总结的几个要点。我对其中“在搜索中多用filter”体会颇深。

在我的搜素第一跑起来时,那个慢啊,搜索一个结果比较多的内容,需要2秒左右,非常吓人。经分析和测试在知道,时间都耗费在我的Collector器中的collect(id, score)中。因为我在其中做了很多通过id获取文档内容,在根据其中字段的值来过滤id的操作。这样导致每。获取一个id,就需要去获取整个文档的内容,然后取出某个域的内容来做过滤逻辑。如果搜索词有上万的结果的话,这个操作就非常吓人。而把这些过滤利用filter来做,速度一下子就上来了,每个查询就在几毫秒级。虽然好像还是不够理想,但暂时已经足够用了。进一步的优化可以放在后面来做。

另外很都时候需要搜索数据库的很多个字段,这样每个字段去建立一个域,然后去每个字段搜素一遍,也是很不靠谱的事情。第二篇中就清晰地指出:多域查找,在建立索引的时候放在一起,而且存储属性设置为不存储。这样既可以提高搜索效率,又对索引的大小没影响。非常好使。

Tags: ,.

Apache做为功能强大的web服务器,经常把用来作为前端服务器,服务的处理逻辑通过module传递给后台的服务。大致这样一个结构:
 client <—-> Apache<—>Module<—>Server
这样做的好处在于:
1. 服务器省掉负责的并发处理环节,把这些交给久经考验的Apache。
2. 服务走标准的http协议,扩展能力强,便于分布式处理。而且服务不容易不防火墙、杀毒软件之类的封掉。部署和配置起来也很方便。便利多多啊
3. 把连接和处理逻辑分离开。保持各自的简单性。

ApacheModule的开发就属于中间比较重要的环节了。把一个东西,插入Apache中,来处理请求。听起来有点复杂,高深的样子,不过做上两个module就明白不是什么艰难的事情。说白了,就是要弄清楚Apache的工作模式和处理请求的链,然后把自己的module插入到某一个处理环节之中。可以见《The.Apache.Modules.Book.2007》,讲的比较详细。另外在写module的时候,Apache就是你的工作平台,需要熟悉它的内存分配,IO处理、日志处理、读取配置之类的东西。这方面最让人郁闷的就是没有详细的文档,不像jdk或者python的文档那样分类详细,具体。不明白只有看源码,看示例。它自带的几个示例还是很有得看的。

当然了,非常重要的一点是需要知道http协议,至少有一个大致了解。http请求头,回复格式, cache控制之类的。

嗯,大致这么多,一些泛泛而谈的东西,希望对你有所帮助。

Tags: .
11月 15, 2008

很久没有上来唠叨几句了,这阵子也是过得颇为忙碌。早上为了能多睡几分钟,每次都像赶命似的一路狂踩自行车到公司。晚上要么加班要么去健身房,几乎没有十点就到家的日子。

一个月就这么很快地过掉,没能赶上香山的红色,也没抽出时间去学校看两旁全是银杏树的路,在深秋之际,阳光斜斜地照在满树黄灿灿叶子上的光影,还有狂风下如雪花般飘落的树叶。北京的晚上就开始有些寒意料峭,房间里面的暖气终于冒出来,晚上睡觉时不要在蜷缩着。

每天几乎两点一线的生活,仍然可以藉由鼠标的点击之间,看到纷纷扰扰的世界。

金融海啸席卷全球,山姆大叔很着急,欧洲的小兄弟们也自顾难暇。中国受其影响,东部倒掉很多地工厂,互联网界也纷纷开始裁员,削减开始,准备过冬棉被。闹不明白,为什么世界一定要夹杂着过度的繁华与衰败,整个曲线发展的曲线为什么不能平缓一点?《华尔街》中所说:“贪婪就是一切形式之所在,对于生活要贪婪 对于爱情,对于知识 贪婪激发了人类向上的动力。”在过度的贪婪之后,我们需要为之付出代价,需要重新去审视和反省。

奥巴马(obama),这为年轻,帅气的黑人,算是这段时间最为耀眼的明星。他的先辈,大谈有一个梦想,只是说黑人和百人小孩能坐在一起吃饭,可他已经创造了历史,从一个平民,一个黑人当选为美国总统,全球最强大国家的领导人。他当选演讲辞的开头一句就是:“美国是一个任何事情都有可能发生的国家”。 这就是美国,这就是她最最吸引人的地方。我们的大明星巩俐加入新加坡国籍,网上就充斥着一片骂声和侮辱。在骂别人为什么要走的时候,要反省为什么不能留住他们。什么样子的国家和人民才值得人去爱,因为爱并不是无条件的。我们需要更多地理性和宽容,这点还需要好好向山姆大叔学习。

我们的林嘉祥局长那几句,“我就是干了,怎么样?要多少钱你们开个价吧。我给钱嘛!”,“我是北京交通部派下来的,级别和你们市长一样高。”,“你们这些人算个屁呀!”, 让广大人民大众为之寒心!经济体制是发展了,可我们的政治体制呢?特权阶级太多太多了。

当然了,几乎每段时间都有某某女,某某JJ,某某MM冒出来,从木子美开始,到芙蓉姐姐,天仙MM,张钰等等,你方唱罢我登台,各自娱乐大众一番。背后的各种目的也没法深究。嗯,这次主角是:上海Kappa女

还有更多,阿扁同志被逮捕,他以绝食抗议之;杨佳的母亲冒出来了,说被强制拖到精神病院待了一阵子,全国三个地方的的哥开始罢工……网上总是有看不完的人和事,网民们也从热点涌向另外一个,迅速热炒,迅速冷却。或娱乐,或发泄,总是热热闹闹的。

对了,中间还夹杂11.11–圣光棍节的。从知道这个节日的05年开始,我一路回忆过来,还隐约记得每一年的这一天的某些事情,为此差点于那一天就博文一篇,以记叙之。但发现,这些记忆没有多少是好点,还是淡化之好些,咱不凑这个热闹,网上相关的东西已经够多了,最有名的文章,算是这个:一个北大MM在光棍节的脱光全记录,成就了一对北大新人啊,羡煞旁人!

嗯,大致这些,不能在写了,夜已经很深,就此搁笔。

Tags: .
10月 17, 2008

在开心网发展得如火如荼的时候,伤心网也应运而生了。域名都有模仿之嫌:www.shangxin001.com。还真应了传统的观念:阴阳相生相克。可惜,还只是内测,看不到里面有些什么玩意儿。但凭借这个噱头,估计也可以吸引不少的用户。

嗯,算是比较有创意的了。毕竟人生不如意,十之八九。往往还是开心的少,不开心的多。但有人多少人愿意展示自己脆弱的一面呢?不知道在这点上,它如何去设计和引导用户。毕竟在弄些类似于停车啊,买卖好友之类的东西就太审美疲劳了。

话说开心网最近估计不怎么开心了。因为比它更正宗的开心网已经诞生,因为人家才是真正的开心:www.kaixin.com。你猜域名拥有者是谁:校内网。很搞吧,互联网就是这么江湖,尔虞我诈,恩怨情仇。网上就有人说陈一舟应该大度点,高调转赠kaixin给真正的开心。你说,这个有可能吗?

不过,万般无奈的开心网也想到一个下下策,弄个社交的域名:shejiao.com。说我就是搞SNS的,就是搞社交的,但开心网都说顺口,被广大网民认同了。你却来个社交,什么交的,未免过于牵强。没办法,这个就是中国互联网的环境,相互抄袭,发展起来还要被老巨头们千方百计地扼杀,还有媒体的敲诈,很难,很不容易!

但互联网仍然汇聚了全国最年轻,最优秀的人才,在上面挥洒青春和汗水,企望实现心中的梦想!

Tags: ,.
10月 15, 2008

今天惊闻IT媒体界的大佬之一:刘韧,被抓的消息。传言是与奇虎产生恩怨,恶性敲诈钱财。百度之,发现该消息已经被封锁得差不多了。由此可见,该消息可信度极高。也可以看出Donews在慢慢做大后,其蛮横与霸道。所谓的为IT业界服务、独立、公平、公正之类的,多半扯淡而已。天下熙熙皆为利来,天下攘攘皆为利往而,理想与道德何所值?

亏得我还一直很欣赏刘,一直订阅他的blog,看着他的刘韧体。这位老兄也经常在博客上树立光辉高大的形象,一副忧国忧民,对IT界忧心忡忡的模样。一不小心,颇有几分敬仰之情。哎!太让人失望了。

还有牛根生老大哥,在央视的《赢在中国》中,可称得上儒雅慈祥,高风亮节,高唱商人的社会责任感。嗯,蒙牛还发起了中国牛奶爱心行动的活动。不可不为之赞叹啊。结果呢?还不是查出三聚氰胺,还被人爆料,提前套现。整个一无良商人而已。

还有什么好说的呢?在这样的一个时代,我们不得不睁大眼睛,仔细瞅瞅这些光辉形象背后的东西。

Tags: .
10月 11, 2008

Beautiful Soup在前面关于利用它如何处理Python中文件编码的问题做过一些介绍。最近使用它来解析html文件,为之优雅,简洁的接口设计所折服。它的使用文档可以见这里

从中可以看到Beautiful Soup会读入html文档的内容,然后解析成树的结构,基于树在其中做查找和删除和修改的工作。使用中,有几点需要注意:

1. Beautiful Soup中一些基本元素的概念。

  • tag: html中的标签,可以根据“.”直接访问。如soup.html.head.titile  就可以访问到html中title中的内容。注意这访问到的是完整的title的内容<title>***</title>,而且是一个结构,如果需要赋值给一个串,需要使用str()或者unicode转化之。
  • name, string,attr属性。对于一个标签,如:<a href=”http://www.hongzhixong.com”>my blog</a>,我们可以如下访问到其中的url和熟悉值:
    soup = BeautifuSoup('<a href="http://www.hongzhixong.com">my blog</a>')</li>
    print soup.a   # result: <a href="http://www.hongzhixong.com">my blog</a>
    
    print soup.a.name # result: a
    
    print soup.a.string # result: my blog
    
    print soup.a["href"] # result: http://www.hongzhixong.com
    

    name就是具体tag的名字,string是它的值, 通过字典的形式访问tag的属性值。看起来是不是很方便?

  • contents:是这个树下面的所以子节点,可以通过contents[i]访问到。
  • next, parent,next,previous,nextSibling,previousSibling等属性当作一个树来看,就很容易理解是怎么回事了

2. findAll和find非常强大。使用起来也非常之方便。具体可以见文档。

3 . 比较需要注意的编码问题:在实际的使用过程中,发现Beautiful Soup内部是一unicode的编码来统一处理的,所以像上面的soup.a.string返回的unicode编码的串,你可以使用type(soup.a.string) 会发现这一点。所以,在程序使用find或者split之类操作,且设计到中文时,需要使用unicode编码,如: soup.a.string.find(u”小洪”)。在字符串前面加u。Python中Unicode编程可以见这里

4. 换行问题。Beautiful Soup会将换行作为一个子节点解析,所以建议将html文件的换行和空行做一个简单的过滤后再去解析。

嗯,大致就这么多,当然了,如果涉及到的信息查找不多,而且,效率要求很高,可以简单地使用string的find操作或者正则,因为Beautiful Soup的效率不是很高,需要仔细权衡。

最后,随便提一下Beautiful Soup的主页的标题中有一句话:we called him tortoise because he taught us。我google了一下,是《爱丽丝历险记》中某个章节的对话,Tortoise与taught us音相近。翻译起来是:叫它tortoise是因为它教我们。Tortoise本身是乌龟之意。对这本小说知之甚少,不知道有什么更深的意味。

Tags: .
10月 6, 2008

6月份看得一片长文,偶然见搜索龙应台是发现的。这两天想起来,拿出来分享一下,我把它保存在这里。一篇演讲辞,作者通过阐述文史哲存在的意义,来告诉我们了解和学习它们才能培养良好的人文素养,更好地爱人和服务于社会。

顺便贴上当初做的一个简单的笔记:

人文是什么呢?我们可以暂时接受一个非常粗略的分法,就是”文”、”史”、”哲”,三个大方向。先谈谈文学。我说的文学,指的是最广义的文学,包括文学、艺术、美学、广义的美学。

文学一一白杨树的湖中倒影

文学最重要、最实质、最核心的作用:使看不见的东西被看见

作家也分成三种吧!坏的作家暴露自己的愚味,好的作家使你看见愚昧,伟大的作家使你看见愚味的同时认出自己的原型而涌出最深刻的悲悯。

文学与艺术使我们看见现实背面更贴近生存本质的一种现实,在这种现实里,除了理性的深刻以外,还有直觉的对”美”的顿悟。美,也是更贴近生存本质的一种现实。

哲学一-一迷宫中望见星空

使我们能借着星光的照亮,摸索着走出迷宫。

史学一一沙漠玫瑰的开放

你给我一个东西、一个事件、一个现象,我希望知道这个事情在更大的坐标里头,横的跟纵的,它到底是在哪一个位置上?在我不知道这个横的和纵的坐标之前,对不起,我不敢对这个事情批判。

这种衡量自己的 “苛刻”,我认为其实应该是一个基本条件。我们不可能知道所有前人走过的路,但是对于过去的路有所认识,至少是一个追求。

文学、哲学跟史学。文学让你看见水里白杨树的倒影,哲学使你在思想的迷宫里认识星座,从而有了走出迷宫的可能;那么历史就是让你知道,沙漠玫瑰有它特定的起点,没有一个现象是孤立存在的。

让知识进入人的认知本体,渗透他的生活与行为,才能称之为素养。人文素养,是在涉猎了文、史、哲学之后,更进一步认识到,这些人文”学”到最后郡有一个终极的关怀,对 “人”的关怀。脱离了对 “人”的关怀,你只能有人文知识,不能有人文素养。

Tags: .
10月 5, 2008

CSDN上面,最近一篇《做程序做到五十岁》深入人心,再次引起大家对程序员职业生涯的广泛讨论。此文相当有力度。从程序员所需要的能力切入,指明这个职业三十岁的界限是没有根据的。然后又从产业和社会指出三十岁界限的深层原因:暴富心态,传统的管本主义和重道轻术思想。最后阐明做程序做到五十岁都没有问题的种种好处,娓娓道来,掷地有声。

哎,没办法,社会是在是太浮躁。每个人都想快速地赚很多地钱,买大房子,名车,拥有很多,却不想付出很多。找工作时,有些企业在招聘会上打出很诱人的口号:你想三十岁就退休吗?来我们这里!彻底地暴富和投机心态。而且真正的IT界常青树们,有几个在功成名就之后,不是仍然在努力拼杀,做新的东西,努力调整方向,更上发展的脚步。

也有不少人在焦虑,我都奔三,奔四的人了,还一事无成,怎么办,怎么办? 虽然张爱玲说过:成名要趁早。但人家是天才,能比吗?我们普通人还是老老实实,一步一个脚印地朝着一个方向走。很多时候,所谓的牛人,只是多花了些时间,不断地去积累,而且足够地专注。HP的孙振耀在退休感言中也告诫我们:看待工作,眼光要放远一点,一时的谁高谁低并不能说明什么。因而,只要我们拥有开放的心态,对未知的事物有足够的好奇,每天都能看到自己在进步和成长,规划好自己人生的方向,慢慢走下去,相信总有拨云见日的时候。

王石说:作为男人50岁才刚开始。所以我们的路还长着了,放下浮躁与焦虑,stay hungry, stay foolish。自勉,共勉之!

Tags: .
9月 29, 2008

首要我要说,这是一个很好的问题。学习和使用Python很有一段时间了。大致知道Python是个什么东西,懂得使用其中不少的module,也慢慢地了解到Python的更多地比较tricky的地方。

可是被师兄一句”为什么要用Python,究竟有什么好处“,我嘀咕了半天,绕老绕去,仍然很难抽象出几个比较重要的点来问答他的问题。是的,我知道了一下关于what和how的东西,但why, why python?知之甚少。

针对这个问题,这两天在网上找一些相关的资料。仍然不是很清晰,但就我所知,可以更大家分享一下。我想,可以从两个方面来回答这个问题。

1. Why Dynamic Language?

Python一般称之为脚本语言,这种源于其早期的使用范围,文本处理和系统管理。但现在Python早已应用于网络游戏,服务器编程,web开发等其他广泛的领域,更c/c++, Java等一样,是一门通用的高级语言,只是区别于它们,称之为:Dynamic Language(动态语言)。那动态语言有什么好处呢?

维基百科的动态语言的对动态语言词条中指出,其定义是比较模糊。但也可以找到这样一个定义:”动态编程语言是一类可以在运行时刻改变自身结构的语言————功能(方法、函数)可以被加入或去除,新的类或对象可以被建 立,新的模块可以出现。“大致可以定义它。

动态语言在类型检查在运行时进行,作为解释性语言,编辑好后就立即运行。不像C++,需要很多的编译时间,一大堆的编译信息。还需要写比较复杂的Make文件,编译选项以及库之间的繁复依赖。

从论文《Dynamic Languages—ready for the next challenges, by design》我们可以看到动态语言具有以下的一些特性:

1) 技术纯粹。动态语言的创造源于需要解决某个特定领域的问题,而不是由商业公司的推动,比如C#.

2) 节省个人的时间,而不是机器的时间。专注于提供程序员的工作效率,而不是提高程序的执行速度。这使得动态语比C/C++更接近自然语言,更具表达性。

3) 深度开源。完全开源,全球大量的人参与进来,贡献自己的智慧和热情。

4) 精英领导和自然选择想结合。动态语言一般沿着两个不同的方向发展:首先是语言的内核以及核心设计原则由少量的大牛来掌控,以保证朝着正确的方向发展;其次语言的容量,在小巧,精致的内核上开各个领域的库,为应用提供便利。

5) 平台中性。动态语言一般都可以运行于各种平台之上,为跨平台提供便利。

另外,由于动态语言导致传统的很多静态语言编译器的很多优化技术无法由于其上,导致效率问题一直深受诟病。但随着技术的发展,也从各个方面大大提供了效率。文章《Dynamic Languages Strike Back 》在这个方面做了深入的研究。

总之,动态语言对于小型的项目,不需要考虑太多程序效率的情况下,可以专注于业务的处理逻辑,快速地开发出原型系统。

2. Why Choose Python?

类似于Python的比较流行的动态语言还有Perl, Ruby, TCl等。但为什么要选择Python呢?正如不少人所说:语言的选择是一种信仰。大凡涉及信仰,就很难有理性地分析,参杂太多的偏见。在这里我只想说,python优雅简洁,很流行,做事情很简单,上手很快,有丰富而友好的库,文档也很丰富和齐全,社区很庞大,而且还在不断地往前发展,非常不错。关于这个问题也可以去google上搜索一把,你可以看到计算机大牛Eric Raymond的文章:Why Python。其中先抑后扬,从具体的某个程序的角度,来展现Python的优雅、简洁和便利。另外,Python的使用者们还创造了一个词汇Pythonic,据说就是大道至简的意思,具体可以看What is Pythonic

最后,关于我们可以在看看Python’s Philosopy:  The Zen of Python

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren’t special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one– and preferably only one –obvious way to do it.
Although that way may not be obvious at first unless you’re Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it’s a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea — let’s do more of those!

enjoy python, have fun:)

Tags: .
 Page 2 of 4 « 1  2  3  4 »