2005-06-29

习惯写程序解决问题

同事指出一个错误,存在于五六个文件中,每个文件里有那么几处,我答应马上改掉。一会儿同事来看,发现我在写Perl脚本,惊呼:“这也要写程序啊?直接改改好啦!”

我这么做有两个目的,一是检查,同类型文件很多,万一有所遗漏,岂不显得很不专业。二来最近Perl用得正爽,顺便玩玩。事后估算一下,所用时间与逐个手工修改差不多,也许还要多一点,区别是写程序很有趣,手工改十分枯燥。

写这段脚本的时候特意没有加use warningsuse strict,Perl的精神就是对于用过一次就扔掉的一小段程序,用不着写防御性代码。我以前写脚本时不管长短,都是顺手写上这两句,看似严谨,实则多余。

2005-06-28

从源代码到可执行程序

编译器做了两年多,对于从源代码到可执行程序的整个编译过程算是有了点感性认识,回想起当初大一学习C语言的时候,连什么是源代码、什么是可执行程序都不知道,更别提什么编译过程了。今天,虽然只能算是略知一二,但也足够作为一个开始,由此写一份文档,为编译型语言的初学者提供相应知识,使其能够通过实践来学习语言,避免我当初遭遇的尴尬。时至今日,仍然没有发现这方面的材料,鉴于开源的精神——“如果没有所需软件,便自己写一个”,我决定开始写这样一份文档,一则理顺自己掌握的知识,二则希望能够对后来者有所帮助。

目前还只是个想法,什么时候开始,如何开始,以及涉及哪些内容,暂时还胸中无数,特此记录,以免日后忘记。

Blogspot支持图片上传了

去普陀山和朱家尖玩了三天,回来写blog时发现blogger.com宣布支持图片上传了,目前空间大小限制为300M。我就传了几张照片上去,发现效果还不错,显示在blog上的是经过google处理的小图,点击小图后可以显示原图。唯一的遗憾是这些图片只能显示在blogspot网站上,对于中国大陆的浏览者非常不爽,因为通过代理就看不到图片了。

2005-06-27

普陀山朱家尖三日游

这是公司组织活动的三个目的地之一,星期五从上海出发,包车直奔朱家尖,中间还要经过轮渡,共需六个小时左右。这次活动每人花费共计930元,公司为员工补贴570元,但是我还要带老婆一齐去,一共交了1290元。由于行程比较紧凑,得以在星期日晚上8点多回到世贸商城。

这是朱家尖,在我们前往宾馆的路上,从车里向外拍的。自然风光十分怡人,不禁感慨,要是在这里上班多好啊。这种想法都快成了每次出游的例行感慨了,也难怪,在钢筋水泥的世界待久了,谁不腻味啊?

普陀山的观音像,号称普陀最高,其它建筑都不许比它高。

乌石塘的海景,可以做渔船出海,门票里包含一部分,但是要向到东海口的话要再加50元,我们没去。

石字多一点,据说是为了平衡重量。

不错的浮雕,还拍了一小段录像。

不愧是佛教圣地,很有底蕴,比那些骗钱的小庙强多了,即使是无神论者(比如我),也不妨去看看,没人逼你一定要烧香、拜佛、求签……

2005-06-17

工作两年(六)——进入非C/C++语言的世界

大学时上过两门程序设计语言课,分别是C和C++,另外做项目用过Delphi,自学了点Pascal。后来读研的时候,正赶上C++学习热潮,跟着啃了几本名著,算是入了门,也是从那时开始,对程序设计着了迷。

工作之后,由于工作需要和个人兴趣,陆续接触了Perl、Emacs Lisp,还学了Shell编程以及一些标记语言如HTML和XML,每样都沾一点,但都学得不精,可以说这两年主要是一个开阔视野的过程。开始学HTML是为了写文档,因为不想用Word。后来还接触了一点CSS知识,才发觉网页设计也有很多变化和技巧,于是便试着美化我的blog。学Emacs Lisp是为了更好地使用、定制、甚至扩展Emacs,在05年春节利用假期时间把Introduction to Emacs Lisp和The Emacs Lisp Reference Manual通读了一遍,获得了一些感性认识,这些知识对于我后来深入学习Emacs很有帮助,虽然现在还无法做到用它来写程序,但由于能看懂一些,通过阅读代码,我就能掌握一些帮助里没有的知识。Dynamic scope的概念也是这时候碰到的,对我后面学Perl也起到了一定的作用。

学习Perl和XML则是为了做测试,由于公司QA人手不够,我就接手了部分测试工作,主要是开发测试环境,使用的语言就是Perl。想把Perl学精还是很有难度的,但上手却比较快,像Learning Perl讲授的知识有限,但也足够做些事情了。然而我感觉,越是上手快的语言越容易写出垃圾程序,因为很容易被表面现象所迷惑,不肯深入钻研这门语言的精髓。我认为,Perl的字符串处理、正则表达式和符号系统三个方面非常重要,Mastering Regular Expressions是讲正则表达式最好的一本书,到目前为止无出其右者,这在百花齐放的程序设计领域里显得很另类;而要深入理解Perl的符号系统,一定离不开Advanced Perl Programming,我还从这本书上学会了如何写Perl Module。学Perl不能光是看书写代码,Perl Cookbook要看,一些常用Module的代码也要看,对于Perl这么庞大(也很强大)、复杂的东西只是浅尝则止就有暴殄天物之嫌了。想做一个好的程序员就是要偏执,无论用什么,都要写得一手好程序,不可敷衍了事。

对语言接触得越多,越觉得自己视野狭窄、能力有限。这些工具就像软件开发的血肉,只有它们的存在,开发过程才显得丰满充实。回想起自己无知也无畏的年代,不禁汗颜。

如果没有自由软件?

昨天改好一段Perl脚本,正好到了下班时间,回想起前面调试的过程,不禁暗自庆幸,多亏了这些自由(和开源)软件。

下班的路上,通常是我胡思乱想的时候,反正到家要花近一个小时,也没什么别的事情可干。我就接着想,要是没有自由(和开源)软件,我该怎么写程序呢?我还能写程序吗?想着想着,不禁一身冷汗,这才有些理解了Richard Stallman的用意。没有自由(和开源)软件,没有同样自由的文档和HOWTO,我怎么可能达到今天的水平,没有了emacs、cvs、Perl、Graphviz等等工具,我还怎么写出象样的程序呢?还怎么能做到Test-Driven Development?还怎么Enjoy debugging?

描述一下我的调试过程吧,一段XML数据,按照我的理解,某些数据所在的entity必然是另外某种entity的子节点,然而测试程序显示我的假设不对,但我又不知道为什么?这段XML数据是自动生成了,数据量很大,层次很多,根本不知道问题出在哪里?是我的测试程序写错了还是我的假设错了?以前学过GraphViz的语法和应用,很适合可视化这种层次结构的数据。又想起来以前看到过有一个GraphViz的Perl Module,可以生成dot文件,就决定试一试,结果一目了然(一个同事用java写了一个强大的viewer,非常方便),是我的假设错了。

有目标,没管理

刚刚看了Money Magazine: 50 Smartest things to do with your money,顿时觉得自己对人生缺乏管理。

一直以来不会做管理,总是跟着感觉走,虽然没什么大收获,倒也平平坦坦。感觉自己是有人生目标的,但似乎又不太清晰,说不清楚。而且又有不喜欢记录的毛病,所以对人生这么大个主题就很难把握。已经是奔三的人了,必须得开始明确地管理自己的人生了,先从具体的、小范围的事情开始——饮食管理、财务管理,再到职业生涯管理、亲情友情人际关系管理,直至最终的人生管理。当然,如果有一套很好的管理软件就好了,仅仅是日程管理应该还是不够的。

最近开始看平衡计分卡理论,人生是不是也要平衡呢?而且要有意识的把握呢?应该是个技术含量很高的活吧!:-)

2005-06-16

耐着性子看帮助

不习惯(或者没耐心)看帮助就只能用一些显而易见的功能。

原来是一点都不愿意看帮助,宁可对着界面发呆、或者瞎猜一阵子,碰巧弄懂了算是赚的,不懂也就算了。现在要好多了,应该是从上班后开始吧,逐渐习惯了看帮助。最让我看得下去的是emacs的帮助,因为它的帮助系统是内嵌的,可以边看边试,互动性很强。

如今用blogger也有些时日了,还没正经看过它的帮助,因为都说它简单,不支持分类、tag等等。今天抽空看了一段,发现还是有些小功能可以用一用的,比如我刚刚加了“Email Post”的功能,还在SideBar上加了Previous Posts列表。而且帮助里还介绍了一个改变页面布局的方法,可以在每月存档里只显示标题,这样方便查找,有空的时候把自己的模板也改成这个样子。

看完之后不禁感慨,看帮助实在是要耐得住性子、坐得住板凳,不然是不会有收获的。

移动blog

因为手机被偷了,就买了一部MOTO E398,花哨的东西没有买,只添了一套座充和电池,大约1850元左右。已经用了近一个月了,只收发过几条短信,连电话都没打(和接)一个。

直到前两天才学会如何设置发邮件,试了试,gmail和163的都成功了。这里面还有个小插曲,一不小心把smtp写成了smpt,结果怎么也发不出信,心里这个郁闷,都按网上说的设置好了,怎么就是发不出去呢?后来仔细一项一项检查,突然发现smtp server看起来很怪异,发觉拼错后大呼faint,改过了这才发送成功。

然后准备试试blogger的mobile blogging,读了帮助才发现现在只支持美国的几个移动运营商,而且并不是我现在发的那种邮件,是另外一种。如果用我的手机实现移动blog的话只能利用blogger的Mail-to-Blogger方式,但是这样不能传图片,那岂不是浪费了我30万象素的偷拍机了嘛:-)

所以到现在移动blog还只是一个梦想,没有实现。

2005-06-13

区分摘要和全文的必要性

未完成 - Incomplete � 有点郁闷的RSS内容摘要输出:

"duduwolf则采用了一种很好的方式,如果提供的是全文输出,你会在文章后面看到“全文完”的字样,无疑这节省了我许多的脑力判断。虽然这只是一个小细节,但也是真正关心用户,从用户的需要出发。提供RSS摘要输出的blog是否能够响应duduwolf的号召应用这种方式呢。对于那些提供摘要的BSP们,是否也可以考虑如果某篇blog是已经是全文的话,可以由系统自动加上“全文完”,如果是摘要,则加上“浏览全文”的链接,这样可以为RSS读者提供很大的方便。"

netcasper: 可以看出duduwolf确实是个很注重用户体验的人,但对这个问题应该有更好的技术解决方案,没看过RSS的规范,但我想应该很容易区分摘要和全文吧,只要阅读器稍微在显示上区别一下就好了,不用麻烦blogger。

Linux究竟适合谁?

FedoraForum.org - Why Linux will Never Beat Windows!!!:

By pparks1: I guess it all depends upon what you are looking for. If you are looking for something that is very easy to use and doesn't require a fair amount of computer know-how, Windows is probably the best place for you.

However, if you want to run an extremely stable server (web, ftp, mail, dns, dhcp, nfs,), with a high level of security and customizability, Linux is fantastic.

As far as simple step by step solutions, I think you can find many of these on www.fedoranews.org. There is so much in terms of software, versions and distributions that it can be hard to find a set of instructions that work for everything. However, if you take the time to learn the OS and how it runs, you will find that many things are very common and once you know how to do it, the power of Linux unfolds right in front of your eyes.

For system admins, the ability to use tools like grep and awk and priceless. And by default, Windows doesn't really have anything right out of the box for that.

In addition, in the Windows world, most of the software that is any good has to be purchased. In Linux, a great deal of software is open source and free of charge. Here are some examples, IIS for Windows(webserver and ftp server)---not free, requires license for OS. In Linux world, Apache (web) and vsftpd (ftp), both very good, both heavily used on the web, both free. In windows, primary database platform is MSSQL. Certainly not free. In Linux world, postgres or mySQL---both very robust and both free. In windows world, Adobe Photoshop---quite pricey. PaintShopPro---not as pricey, but still with cost. IN Linux world, GIMP ----extremely powerful, robust and free.

So, my point.....Linux is NOT for everybody. However, it is a great, stable and secure system for those who want to take the time and explore the possibilities.

pparks1: I think the biggest problem is a misconception with Linux. So many people hear how great Linux is, but they don't actually have a use for it themselves. So, they aimlessly download something and load it up hoping to have something that works just like Windows. Then they find out that it isn't the same and that they do not know what they are doing. Then, they find a forum like this and just badmouth Linux.

I have spent a fair amount of time helping newbies and I honestly wonder sometimes why these guys are even trying to use LInux. They clearly have heard somebody say how cool it is, or how well it works, or "down with Microsoft, they are an evil monopoly"

For the people out there who need something that is a stable and inexpensive alternative to Windows, Linux is a great choice. For the developer, Linux is wonderful because the source is available, the software follows standards and the system can be customized EXACTLY how you like it.

For the average home user who doesn't get heavily into computers, Linux isn't for them. I think most of us hardcore LInux users would agree that Linux won't be the defacto standard on desktops anytime soon.

by the_profiler: i forgot where I had read the idea that there are 2 kinds of linux promotion.. one saying that.. "wow, Linux is cool" (nothing more said).. and the other.. "wow, Linux is cool! I don't think I can ever live without it!" which obviously is a very different but more effective way of promoting it.

cnarramoore: I haven't used Linux that long myself. I started playing with Mandrake 8 (I think) when I bought the XP upgrade. Didn't have much luck with it and then someone told me to try Redhat. RH9 was just out so I ordered the box set with all the manuals. I messed around with it and could do something things on it but nothing that really amounted to much. When I decided to go back to school I knew I would have to learn Linux enough for the 2 classes on had on it. The network teacher had downloaded FC2 and he said if we brought cds he would make us all a copy. Talk about everything seeming easier.

It must have been a combonation of the grand scheme of things and knowledge that leaked in but I could acutally do somethings on it. Still couldn't install programs worth a flip but it was a start. Fast forward a few months to Books-a-Million browsing session and I bought Fedora Unleashed complete with DVD. Now I can do almost everything I do on windows with Linux. I still stumble and ask stupid questions but I am getting there.

Seems the answers to the stupid questions lead to figuring out the harder stuff on your own easier.

Linux isn't for everyone. My mom cant use Windows XP for nothing, but my sister can surf the web with Linux if I show her where to click.

Linux has its place and Windows has it place. I don't look for Linux to beat Windows any time soon just because Linux was written for geeks by geeks and Windows was written for people who just want email, look at porn or shop of eBay.

2005-06-12

忘了关窗

星期五早上走的匆忙,忘了关窗户,晚上在去梅陇火车站的路上突然想起来,可已经没有时间回去关了,结果在杭州提心吊胆地过了两天,今天早上还做了梦,真是担心的不得了,我那刚买了不久的电脑和用了没两次的数码相机啊!要是房东的东西被偷了就更糟糕了。

回到家里发现机箱还在,又检查一下发现DC也安然无恙,这才一块石头落了地。上帝保佑,以后早上再也不开窗户了。

2005-06-06

一声叹息

致纪校长:“国学”应为“国故学” | 博客中国 | 吴祚来:

“其实,说穿了,国学是“故国之学”或“亡国故学”。在我看来它没有文气,只有死气!没有脊梁只有媚骨!从诗经、论语、唐诗宋词里我们如果说还能得到些什么的话,那就是一些智哲与诗意的语言碎片!它的整个体系是失败的!我们看看故宫就能说明问题,看似宏大的叙事,看似无限壮观,看似博收天下精品和五千年文明成果,其实你要真从中拿一件来用于当代社会,没有一样是有用的,因为中国文化的成果是为神与皇帝来制造的,不是为人民来制造的,我为什么如此强烈地反对国故学的所谓复兴,反对将国故学神圣化,我的立论核心就在这里!我个人没有与人大与纪校长过不去的。

……

大学精神应该是什么精神?

应该是时代精神!

我们时代精神是什么精神?

科学精神、民主精神、自由精神!”

2005-06-02

招人咋就这么难

每次面试都抱着很大的希望,以为可以结识牛人,可总是失望而归,今天这个还算是感觉好的,两个字——踏实,不像前面一些人,虚得很,胸无点墨还偏要硬充门面。

她是做QA的,我们也想招个QA,半个小时聊下来,可以看出她工作做得不错,有经验也有能力,可惜她这个QA做的事情和我们想让她做的事情差得太远。我们想要一个既会c又会Perl的,如果Perl不会也可以,但至少要有编程经验,还要学习能力强。但她做的工作几乎不需要编程,又是信电专业的,上学时也没怎么写过程序。表态时我投了反对票,尽管老板还是想要她的。至于最后招不招,还是由老板决定吧。

平时不注意联络感情,等到想招人的时候麻了爪,真应该学学人家Google,要不是只要学生,我也想参加Google代码之夏凑个热闹。

缓存的教训

昨天改一段程序,把原来写到文件里的内容缓存在内存里,直到所有数据都准备好再往文件里写。

由于是文本文件,数据是字符串,正好我们有个字符串类,就拿来做个buffer,每次获得一小段数据就构造一个字符串实例,然后和buffer做一个拼接,因为我们的字符串类可以自动管理内存,所以没费多大事就把程序写好了。

哪知本来是为了减少编译时间的修改却导致时间暴涨,后来大家分析,估计时间都花在字符串复制上面了,因为每次拼接的时候都要重新分配内存,然后把两段字符串都复制过去。现在我打算尝试构造一个字符串的链,每构造一个字符串就把它插入到链里,这样就节省了大量复制操作,希望能达到预计的效果。

Google的代码之夏

恐怕很多公司难以摆脱“招人难,难于上青天”的窘境。为什么呢?因为大家的圈子太小,因为大家其实也不认识几个人,招人就像买彩票一样,怎么可能称心如意呢?

其实,一个好的产品,总会是产品链中的一环,孤立的工具往往作用有限。但是限于时间和资源的不足,让一个公司开发整个产品链总是很困难,不如将一些次要产品或者开发过程中用到的辅助工具开放出来,作为开源项目,要求其他人参与,这样就可以在志愿者中发现人才,而其中愿意加入公司的人也有机会全面的展示自己的才能。

今天了解了Google代码之夏活动,这次活动的参与者限定为学生,可见Google的目标更长远,胸襟也更广阔,令人敬佩。

我命由我不由天

博客连载:走出单位(十九) | 博客中国 | 栗陆莎:

说到主人,一定有许多中国雇员要笑,因为大家都认为自己是“打工”的,讨生活而已。我觉得这样的认识是肤浅的,那种认为只有自己绝对拥有的企业才是自己的,自己才是“老板”或主人的观念也是脱离现代企业的事实的。有人会说,中国人在中国的企业里可以是主人,在外国的企业里是不可能做主人的,我同样也反对这个观点:职业经理人借助跨国公司的舞台、技术和资金,以双赢的方式建设有益于社会、民众和国家的事业,他们不是企业的主人吗?如果你问“这可能吗?”我的回答会是:“这不仅可能,还是事实。”

企业的主人是企业的决策者。有了决策权就可以决定做什么和怎么做。但决策权不仅仅指最高决策权。由于跨国公司的决策程序是民主的和协商的,参与决策的人遍布企业各个层级,而权力下放又使每个雇员都有一定的自主权,所以,做主人还是做“打工的”全在于雇员的个人选择。

2005-06-01

民族主义是一种幼稚病 | 博客中国

民族主义是一种幼稚病 | 博客中国 | 肖雪慧:

"民族主义具有托克维尔所说的“本能的爱国主义”那种轻率的激情,但还多了一种使本民族发展滞后的护短情绪和向外宣泄的破坏性情绪--仇外排外。民族主义往往还具有“本能的爱国主义”那种把国家人格化,拿君主当国家化身的特点。轻率、护短、仇外排外,再加上把国家人格化和视君主为国家化身,极易被政治野心家及其文化附庸诱向一个危险原则:爱国就是忠于国家政权。这一原则把人民的权利典押给政权,使爱国主义蜕化为对现实的奴颜婢膝,因而成为使强权永久化的工具。此外,民族主义是依恋故土和本民族的朴素情感无限夸张和过度膨胀的产物,它具有团体自恋倾向和夸大自己的民族、国家的历史、文化特殊性的倾向。团体自恋使民族主义与批评性的自我分析不相容,而批评性的自我分析却是一个民族在失误中得以走出迷误的自我矫正力量,从而也是防止灾难的基本条件。至于夸大特殊性的倾向被政客强化,便有了置特殊性于普遍性之上,藉此拒斥公理的特点。

……

正是后一种忠诚和关怀使得对祖国的爱并不模糊他们的是非感,不削弱他们对公义的尊重。在这些人身上,爱祖国最深切地表现在对于祖国文明、进步的热望和致力于使祖国成为全体人民自由和幸福的保障。这种爱类似于托克维尔说的富于理智的爱,但又超越了它。因为,对祖国的进步、文明和人民生存状况的关注意味着一种更具责任感的爱。这种责任感要求对自己的民族、国家的历史和现状进行批判性自我反思的精神以及兴利除弊的决心。他们忠实地为祖国服务,而当国家处于停滞和衰颓之际,他们不顾个人安危地为革除形形色色使祖国蒙羞含垢的丑恶现象而奔走呼号;当国家沦为某些人的囊中私物而陷于黑暗之时,又是他们勇敢地揭露黑暗、撞击黑暗,并致力于唤醒酣睡中的主权者……。

"