2007年9月10日星期一

回应: Linux之父炮轰C++:"糟糕程序员的垃圾语言"

涉及到编程语言之争的帖子,在CSDN上一定会吵得不可开交,这不:
"Linux之父Linus Torvalds为了Linux内核开发而专门打造的版本控制软件Git已经引起了业界的广泛关注。昨天,有一位Dmitry Kakurin老兄在查看了源代码之后,发现使用的是纯C而非C++,表示不可理解,他直言:“别拿可移植性说事儿,这是屁话(BS,bullshit)。“(此外,他还批评Git蛮力地直接操作文本,既啰嗦又易错,而且很难跟上高层代码逻辑。)这个BS引起了Torvalds的强烈反应,他用“*YOU* are full of bullshit.“(你才满嘴屁话呢)作为自己反驳的开场白。接着,他先转向了对C++的罕见的火药味十足的炮轰..."
从几年的实践来看,我觉得从面向对象这个角度来看,C++很好,但C++这个东西太复杂,太容易导致错误,用上几个模版后,编译时搞出一大堆不知所云的信息也是常事。俺是觉得C++写的东西很容易变得不可维护,尤其是有C++"高手"加入以后。而且印象中用C++做出来的可重用的库比较少。

大 家都说“我们在没有掌握得好的时候,不妨只用我们了解的那些特性。那些高级特性并不妨碍,你可以不用啊”,但这都是从单独一个人的角度来说的。放到一个团 队来说,你的队伍中有C++高手,有新手,还有更多的半生不熟的人,怎么办?Linus的考虑也是从这个角度出发的,就算你Dmitry Kakurin很懂C++,不会出什么问题,能写出漂亮的代码,但其他人怎么维护你的代码?


不过俺没有帖子里面各位这么确信,对很多事物都抱着一种敬畏的态度,因为我不知道是不是本人不够聪明,没有认识到C++的各个方面。



刚 才我统计了一下sourceforge.net上用C++和C的项目数,以及各自的处于stable和mature阶段的项目数。


































total stable mature
C++ 22462 4326(19.26%) 427(1.90%)
C 19623 4792(24.42%) 615(3.13%)
Java 26454 5097(19.27%) 353(1.33%)
Python 7224 1287(17.81%) 109(1.5%)

从总数上看似乎C++更适合大家写东西,但从stable和mature项目比率上看似乎C项目更容易稳定和成熟,可维护性高些。

不过也许这不能说明什么,因为sf.net上只是些开源软件,上面各位又说C++在windows上应用普遍,而windows上素来没有多少开源传统。又或者商业软件又有不同。各位自己乱炖吧。

参考:

2007年8月28日星期二

Mozilla/XUL Links 2007-08-28


Google Search (xul version)

在侧边栏打开这个地址效果不错

IBM developerWorks : Blogs : Bring information and collaboration into the context of your daily business processes using composite applications

一篇blog,讲述在Lotus Notes 8 (现在是基于Eclipse的了)中如何嵌入XULRunner来显示一个XUL应用,从而形成Composite Application

XUL Explorer 0.7
近来试验了一些XUL IDE的半成品,这个东西的主要长处在于可以预览XUL,而且支持简单调试。新版本0.7相对0.4改动不大,主要是为一个XUL文件可以提供一个chrome环境了(但这个功能很有用,因为一般xul文件都不是独立的,给定一个chrome环境后overlay和dtd都可以正常加载进来了,这样预览才比较接近最后的效果)。如果完全要手工编写xul以及js,我觉得Spket还不错,里面还有Firefox 1.5和2.0的XPCOM接口列表。


2007年8月26日星期日

XUL是如何传递事件源和参数的

代码这个东西就是这样,你一路看下来,挺好懂的,没啥稀奇,但一旦自己写起来,就觉得好多细节搞不清楚了。我在试验XUL的时候碰到一个典型的这样的问题:多个控件的onclick事件可以绑到同一个javascript函数,但它怎么识别是那个控件触发了这个事件呢? 怎么传递点击的位置呢?如果传递多个参数的话,控件触发事件的代码要分开写么?

查了一下DOM Level 2 Event Model规范(mozilla.org上说明),发现HTML/XUL里面是传递了一个event对象来解决这个问题,这个对象有很多属性,但不是每次这个对象里面所有属性都有所用:event.target表示触发事件的对象,event.clienX是点击事件中的点击位置,event.keyCode是按键事件中的键码。

Windows上几个免费反病毒工具

在Windows上如果不安装反病毒/反木马工具而上网冲浪(我们俗称“裸奔”),那是相当危险的。俺家另外一台电脑就因为反病毒程序过期了,昨晚就蓝屏一次,两次系统重启。
  • Avast! 它的Home Edition是免费的,只需要用e-mail登记一下,就可以免费使用一年,到期后再重新登记就可以。功能很全,有文件监控、网络监控、邮件监控等,可自动升级。俺目前在用这个
  • AVG Anti-Virus,它也提供了免费版本,另外还有AVG Anti-Spyware, AVG Anti-Rootkit这两个工具
  • Avira AntiVir,大家俗称“小红伞”,其Personal Edition Classic是免费的,口碑也很不错
  • Clam AntiVirus, 这个是完全GPL的,所以也有各种UNIX版本(不过似乎UNIX病毒比较少,不装问题也不大)。据说查杀病毒的能力相当强,不过没有实时监控能力。另外有一个完全针对Windows的变种ClamWin

2007年8月2日星期四

做了个xulplanet的镜像chm

最近研究Mozilla XUL, 发现老是要到Mozilla Developer Center, Mozilla Wiki, XULPlanet这几个网站查阅文档,今天干脆用Teleport Pro拉了它们的镜像下来。考虑到小文件比较占空间,而且没有索引,于是想把它们进一步做成CHM。

首先搞定的是XULPlanet:
http://bamanzi.inlsd.org/xul/xulplanet.chm



写了一个小的Python脚本(html2hhk.py),把所有的XUL Element属性/方法、XPCOM组件/接口都搜了出来转换为CHM的索引(其实这个脚本的功能是读出HTML的title和keywords meta tag作为关键字,改一改也可以输出devhelp的keyword列表)。

这个CHM文件还有些问题:
1. 目录还没有做,至少一些大的分类得列上去吧,这个东西好像没有什么简单方法;
2. 内容部分每页左边都有一个侧栏,供导航用的,这个东西在CHM里面没有作用,得用sed什么的批量处理一下。

2007年8月1日星期三

Google Talk in sidebar!


在网上搜索"Firefox sidebar"相关资料时,发现了这个。
  1. 将http://talkgadget.google.com/talkgadget/client 添加为书签,注意选中”在侧栏打开此书签“
  2. 点击此书签,当当!