2006年12月23日 星期六

现实需要模拟

地震损坏了海底光缆,导致我家访问国外网站比较困难。我原以为网速不好的时候用w3m这样的控制台浏览器上网会快点,但事实证明是徒劳。w3m装了插件后可以在控制台下显示图片,中文显示也没有问题,并且可以使用鼠标。的确很奇妙,但速度却似乎比图形的浏览器慢多了。

一直对模拟器这种东西很有兴趣。从模拟插到电视上玩的那种游戏机,到模拟计算机,模拟网络设备,都极令人兴奋。喜欢Mac的人,可以在x86的机器上用PearPC来模拟一台PowerPC的机器,然后安装苹果的操作系统。虽然昔日的开发者不幸因车祸去世,但好在后继有人。

需要学习使用思科设备的人,可以使用Boson公司的NetSim来模拟思科的IOS,并把他们连接成网络来实际运转。但这仅仅是提供了模拟使用IOS的途径。可以用Dynamips来完整模拟路由器硬件,然后在上面安装运行IOS。这样可以完成很多NetSim这样的玩具软件不能完成的功能。(找到两个它的前端,DynagenDynagui)

在系统管理,网络应用,软件调试,网络安全中,VMWare成为必不可少的x86虚拟机。既有Linux版本,也有Windows版本。接近真实地模拟一台计算机,在上面可以安装各种操作系统。可以模拟双CPU,可以像真实的计算机一样设置BIOS,安装系统,有虚拟网卡桥接或NAT两种方式接入宿主主机的网络。并且有免费的VMware Player可用。可以从Ubuntu的源中安装VMware Player,但它无法创建虚拟机配置文件。虚拟机配置文件可以自己编写,或用easyvmx这样的网站在线生成。

如果仅仅要模拟Linux操作系统,那么可以使用一些更加轻量的工具。在Linux中可以使用User-Mode-Linux,Windows中可以选择coLinux

如果要在Windows中模拟一个Linux的运行环境,以方便在Windows中开发Linux下的程序,或者想把Linux应用程序移植到Windows。那么Cygwin是很好的选择。同样,Linux中也有类似的工具,可以在Linux中模拟Windows的运行环境。Winecedega,都是为了在Linux上运行Windows应用程序而产生的。后者专注于运行Windows下的游戏。而这些,都仅仅是模拟一个运行环境,功能有限,但执行效率很高,并且资源占用远远低于虚拟机。

如果要调试一个操作系统内核,会有这样的尴尬。虽然可以用VMWare虚拟一个机器,然后装个操作系统,再然后使用内核调试器通过网络对该系统上的内核态驱动进行远程调试。但如果需要在内核启动的过程中调试怎么办?在系统启动的时候,没有应用软件可用,也没有网络协议栈可用,更别说软件的调试器了。可以买个硬件调试器来做这个工作,可是如果自己没有钱或者舍不得花那么多钱怎么办?

这时候,BochsQEMU就是救星。两者都是开源软件,都有Unix和Windows等各种版本,都可以完整模拟各种操作系统,并且都可以使用调试器连接到虚拟主机上充当硬件调试器来调试内核。这两个软件都可以从Ubuntu的源中安装编译好的Linux版本。QEMU在Bochs基础上做了更多工作,因此它似乎更好一些。例如Bochs需要安装特定的Kernel Patch,但QEMU不需要。并且QEMU安装加速器后据说速度约为真实机器的25%,约为Bochs的60倍。

如此看来,qemu+kqemu(这个并非QEMU的那个KDE的GUI前端,而是QEMU的加速器)似乎是更好的选择。另外发现一个qemu的Gnome图形前端qemu-launcher。Ubuntu的源里没有这个软件,可以从这里下载它的deb包。Windows用户可以使用QGui,喜欢KDE的人可以使用KQEMU。

标签:

2006年12月18日 星期一

Ubuntu和Laptop

一直抱怨为什么gnome不会记录我的屏幕亮度。无论我把显示器亮度调成什么,每次登录Gnome后,都会自动变为最亮。今天从论坛里看到一个说法,觉得不胜惭愧。在电源管理中把默认的亮度调一下不就行了么。

我的笔记本上有几个快捷键,提供浏览网络,电源管理,开关触摸屏等功能。
原本以为它们只有用Windows才管用。后来发现只要我的ACPI被内核支持,那么这几个快捷键在Linux中也一样可以使用。很高兴。另外触摸屏也工作得很好,轻触的单击,双击,右击(轻触右下角的一个小区域)都没有问题。可惜开关触摸屏的快捷键无效。打字的时候我常常不小心碰到触摸屏,所以希望可以自由开关。于是找到一个说法,简便有效。

编辑/etc/X11/xorg.conf
查找"InputDevice",找到触摸屏设置部分。
例如我的Identifier是"Synaptics Touchpad"。
在改Section中添加一行:
Option "SHMConfig" "on"

然后,论坛中说可以添加一个Gnome启动项目:
syndaemon -i 1 -d
以通过减少触摸屏响应的延迟来缓解乱碰带来的麻烦。
而我则喜欢在不用触摸屏的时候直接关闭它:
synclient touchpadoff=1
用的时候可以再打开:
synclient touchpadoff=0
如果频繁使用这个命令,可以写成一个脚本,方便执行。

标签:

2006年12月14日 星期四

莫扎特密码

我一直觉得商业炒作情有可原,但对炒作艺术却万分反感。

这些日子晚上一换到CCTV-3就看到莫扎特密码这个节目。看到很多演奏的片断,极为美妙。节目中也常常播放一些景色,还有对一些外国人的采访片断。本来觉得挺好。可惜的是一看到标语,一听到主持人和嘉宾的评论,我就由衷地感到恶心。

与浪漫乐派的贝多芬,柴可夫斯基,肖邦,李斯特等人相比,我一直觉得莫扎特的音乐,虽然充满想像力和创造力,巧妙而优美,但没有起伏的情绪和锐利的思想。并且认为古典乐派的这些人的贵族音乐实在没什么意思。虽然贝多芬早期的作品也被列为古典时期的东西。

我喜欢的音乐家都集中在浪漫乐派。当然也有少数几位不是。比如巴洛克时期的维瓦尔第,充满了变幻和美妙的韵律。民族乐派的德沃夏克和格里格,无比地动人。尽管世人都狂赞莫扎特和海顿,我也觉得他们的一些作品很奇妙,但实在不觉得他们的音乐有什么过分的动人之处。当然这可能和我个人喜好有关。别人喜欢他们,自有他们的原因。但看到电视节目中对他们奇烂无比的评论,出于收视率或其他什么原因的炒作行径,我实在觉得是对音乐的一种玷污。

虽然有学识和见识的人通常不会当电视节目主持人,也不经常作为电视节目可笑的爪牙。但很难想像,一堆不懂音乐且没有思想的傻货,出于某种滑稽的原因竭尽他们低俗的文字能力评论一个音乐家。甚至把一个音乐人和密码学的名词扯到一起,让两者尽情地相互颠覆和嘲讽。实在是一种文化悲剧。

标签:

2006年12月8日 星期五

Ubuntu下的开发环境

如果还没有安装基本的编译调试工具,首先把gcc,g++,gdb安装了。源中的这些软件版本还是比较新的。最好把build-essential,内核头文件这类的软件包也一并安装了。

安装Sun的jdk,源中有Eclipse,但没有Netbeans。需要的话可到Sun的网站下载安装包。Netbeans不但是很好的Java开发环境,也可以安装C/C++包来开发C/C++程序。不过Java如果解释执行,速度还是比较慢。

如果想节约使用键盘,避免使用命令行的gdb来调试,可以使用gdb的图形前端DDD。如果需要使用一个IDE来开发C/C++程序,可以使用Anjuta或KDevelop。这样就不需要手工制作Makefile,也方便调试和发布。另外最好将推荐安装的软件包也一并装上,否则很多重要的功能无法启用。目前来看KDevelop要比Anjuta更好。

浏览源码,vim+ctag+cscope不爽的话,不妨试试Source Navigator。它在源中的名字叫sourcenav,安装后运行snavigator即出。它不会自动在菜单中添加项目,需要的话手工添加一个。

至于版本控制,默认安装已经有了cvs,可以安装一个它的图形前端gCVS以方便使用。gCVS自动添加了菜单项目,可惜有错,需要改改才能出来。我更喜欢SVN,到源中搜索svn,发现没有。很疑惑。后来搜索全称Subversion才找到。有一个值得推荐的GUI的SVN客户端,它叫RapidSVN。安装没有自动添加菜单项目,我手工添加了一个。RapidSVN并非svn的图形前端,而是一个独立的客户端。虽然Anjuta和Netbeans中有CVS和SVN的插件,但功能太弱了。找到一些SVN的资源,列出备忘。

http://subversion.tigris.org/
http://www.subversion.org.cn/
http://svnbook.red-bean.com/

标签:

2006年12月5日 星期二

Java和Python

不得不承认,我一直对解释型的计算机程序设计语言心存偏见。
直到亲眼看到很多牛人从C++阵营转投Java阵营,直到亲眼看到很多应用程序用Java和Python开发,生产效率大幅度提高。直到最近因项目要求而亲自体会到Java的强大,直到今天知道Java也可以不那么慢,甚至可以不靠解释执行。

由于喜欢系统程序,崇尚实时控制,所以一直把软件的性能看得很重。虽然我也知道,最好的解决方案,不一定是最快的。若非系统软件,可以牺牲性能来获得更好的生产效率。很多场合使用Java,并不图它的可移植性,而是为了更高的生产效率。日益壮大的程序库,良好的错误处理和安全特性,使得Java的开发效率和C/C++相比成倍提高。抛开B/S应用不谈,开发同样的应用程序,Java可能比C++容易实现。

Java解释执行确实很慢,但运行慢,是有办法解决的。从《Java编程思想》中得知了几个方法,顺手用Google搜索了一下,找到以下信息。通过JIT,Native code,或Sun推出的HotSpot技术提高Java程序的执行速度。在不要求应用程序可移植的情况下,我觉得native code是个不错的选择。这样编译后的Java程序,失去了移植性,却获得了接近C++程序的运行速度。

http://www.trl.ibm.com/projects/jit/index_e.htm
http://disordered.org/Java-JIT.html
why_native
java_native_code
http://java.sun.com/javase/technologies/hotspot

比Java更加方便,语言本身的演化也更快的Python,被人们认为是更适合编程的动态语言。
也列出几个Python的资源。
http://www.python.org/
http://docs.python.org/
http://python.cn/
python_doc_cn

Update:

经过一番将Java编译为native code的尝试,认为以下几个工具不错。

gcj(http://gcc.gnu.org/java/):
ubuntu默认安装了,但gcj不支持swt,awt等图形库。

JNC(http://jnc.mtsystems.ch/):
不是完全免费的,但支持awt/swing,似乎也支持swt。但功能依然很简陋。

Excelsior JET(http://www.excelsior-usa.com/jet.html):
支持swt,awt,IDE式的图形化集成环境,操作便利。有Linux版本和Windows版本。
可惜是商业软件,并且十分贵(1200-5000美金),但可以免费试用30-90天。
我试图用它编译巨慢无比的LumaQQ,出错了。
报告bug给该公司,他们说已经重现了问题,解决后会与我联系。
之后经过反复交流,他们修正了bug,态度非常积极热情。尽管我没有买他们的产品。
编译后的LumaQQ,使用JET的打包程序,可以安装到其他机器上使用。
不太满意的一点是,速度虽然比解释执行快了,但幅度似乎不大。
另外打包的时候,会把一个很大的JET的Runtime也一并打包进去,否则无法运行。
另外,试用版的JET会在LumaQQ退出的时候,显示一个关于版权的警告信息。
不过就功能而言,JET比前面两个工具要好很多。

找到一份关于解释型语言与C语言开发效率对比的文章:
动态语言开发效能的一个案例研究

另外听说Ruby on Rails可能与J2EE并存,成为Web开发的新模式。
很是激动人心。

标签: