GNU Emacs是Linux里鼎鼎大名的文本编辑器,其实它的历史比Linux长得多,诞生于1975年,和微软公司都差不多年纪。其作者就是“GNU教主”--Richard Stallman。我以前好几次想好好学习这个工具的使用,可是每次都感觉入门困难,vi还好一点(其实vi的强大功能我都没用熟,有点好高鹜远,呵呵)。这两个编辑器与Windows和Linux其它的编辑器差别都很大,上手都感觉不轻松。
不过从网上那些很多用过Emacs,除了那些知难而退的,都对它的功能非常满意。学校也有一个老师会用Emacs,他对Emacs评价也是说非常好用,我也一直很眼馋他们。现在才开学不久,有些闲,所以趁此机会学习一下。
不过Emacs作为一个古老的程序,它的界面的字体配置就是一个麻烦事。我是一个非常注重字体的人,不管是什么程序,网页,乃至生活中的书,字体对于我来说都很重要的。对于要长久面对的程序,字体的漂亮当然是很重要的。目前在Linux里,作为代码和终端的字体,我唯一满意的只有Courier 10-Pitch和Consolas字体,其中前者是Magic Linux里自带的,后者是从网上下载的,其它的字体显示起来非常不好看。不过这两个字体也是只有放在Qt程序里才好看,在GTK+程序里,这两个字体总是显示得不好看。
我从网上查了不少资料,可能Emacs的图形界面程序是基于GTK+的原因,它显示Courier 10-Pitch和Consolas也是奇丑无比。没法,现在唯一能看就是文泉驿的字体了,文泉驿字体显示小号的汉字非常好看,但是英文相对而言就差一些,不过现在一时也找不到更好的选择了。
除了字体,还有一个就是配色,我本人还是喜欢那种深色调的。与终端类似的风格,我从FreeMind找到一个链接,它告诉一个Emacs配色扩展,名为color-theme,里面有很多主题,不过其中比较我的喜爱就是是arjen配色,目前就是这个配色为主。
FreeMind的的博主pluskid还在Google上弄了一个扩展:yasnippet,主要可以用来为各种编程语言添加代码片断,安装和使用都很方便。所以我也把它加到了我的.emacs文件里。待我学习的深入,.emacs文件也会越来越长,有时间的话,我还可以自己编写模式:scons-mode,可以用scons作为工程管理的工具,进行编译。
scons是一个比较有意思的软件构建工具,其本意是想替代著名的autotools系列,我没有用过autotools,不过看到网上的autotools使用教程就头晕,后来听说了scons,就仔细下载了它的文档看了一下,觉得很符合我的口味。scons与autotools和cmake等工具不同的是,它并不是从一个类似工程配置的文件中生成Makefile,再调用make进行编译,而是直接控制编译器,从这个意义上来说,它其实并不是替代autotools,而是make!下面是一个简单的例子,如果你想编译著名的hello.c文件:
只需在hello.c的当前目录下建立一个叫SConstruct的文件:
然后运行scons就可以了,scons会自动调用gcc(不是make)来编译生成可执行程序hello。如果hello.c中引用了foo.h这个头文件,而foo.h声明的函数定义在foo.c,则SConstrut可以写成:
Program的第一个参数是目标,后面可以是单个源文件名或源文件名数组。注意,scons是很智能的,它知道hello.c依赖于foo.h,所以当foo.h发生改变时,就会重新编译hello.c。这个依赖关系不需要我们额外写代码。如果源文件太多了,全写在那个数组里太长了,而源文件都是在同一个目录以.c为后辍时,我们可以简写如下:
如果程序引入了其它的库,库名为libbar.a,库的目录为/usr/local/lib:
如果使用了pkg-config来管理库,可以用环境(Enviroment)如下,例如我使用了GTK+ 2.0:
scons除了可以编译C/C++程序以外,它还可以编译LaTeX,如
就可以用latex命令来编译paper.dvi文件,scons还可以编译Java等其它类型的程序,具体内容见scons的官方文档。
scons本身有一些设计得很好的地方,SConstruct的本身是一个合法的Python程序,它并没有像c,make那样使用自有的配置文件格式,可以使用所有Python的实用库来完成更高级的运用。还有它判断文件更改是默认情况下不是根据时间戳,而是MD5码!所以上面foo.h被touch了,并不会导致重新编译。scons的缺点是其效率太低,速度太慢。
scons还可以与现有的一些IDE整合,如Eclipse,KDevelop,Visual Studio等。见这里。
这是另一种矩阵求逆的方法,其基本思想是若对A矩阵求逆,则在其右边附加一个同型的单位矩阵,然后对这个合并了的矩阵进行初等行变换至行最简形,此时再分割这个矩阵,矩阵左边的应该是一个单位矩阵,而右边的则是一就是原来A矩阵的逆。下面是相关的Lua代码,与以前代码相同的部分省略。
Windows使用久了,速度就会越来越慢。而且程序装多了,速度也会明显下降很多,真是麻烦。于是我决定重装Windows。
把Windows C盘里的东西转到D盘后,周围的同学都无一不使用Windows,可是有XP盘的居然一个也找不出来,我以前买过很多次,后来都丢掉了,反正留着有用,还是去外面再买一张Windows XP的重装盘算了。
先买了一张番茄花园的,结果出了问题,安装时选手动安装,结果上面出现一行“Setup is inspecting your computer hardware configuration”,然后屏幕就黑了,无论等多久都不亮了,难道是盘的问题,于是我又换了张,结果仍然不行,出现的问题根第一张一模一样,于是我只好跑到乐购附近的地中海数码中心买了张,也不能用,问题和先前的盘一样。
我不禁怀疑是不是我的电脑问题。我又在上面装了ArchLinux,这个以简洁号称的发行版不知道怎么回事,总是无法启动,GRUB的启动参数改了很多次都没用,于是后来又在上面装了一个FreeBSD,这次没问题,我以前也装过,只不过由于不能上网,只好又删了,现在由于对于网络的配置更熟了,所以解决了这个问题,可是在FreeBSD什么程序启动的程序实在是太慢了,只好又删了。
不过不管怎么说其它的安装是没问题的,我后来又找隔壁刘钰同学弄了张,不行,然后我从别的同学那里弄了张ghost的盘,ghost也出了问题,毛志盛后来也给我下载刻了张,都是同样的问题,真惨。我觉得屏幕黑是不是我的显示器的原因,于是借了台显示器,还是一样的问题。算了,还是等Destiny回来让他给我用Ghost恢复吧。
想起来Windows系统毛病还真不少,Linux无论多少装多少程序运行的速度都不会下降,而且不会因为用久了速度下降,Linux的浏览器虽然兼容性差点,有些网站有问题,但是多开页面也不会卡,Windows就不行了。
这里充分使用了Lua的元表来实现Lua风格的面向对象程序设计,用Lua编程的感觉还是不错的。
KDE4我以前也不是没有用过,主要是通过Kubuntu这个发行版来感觉。不过感觉都不好,字体等等各方面都不如意。今天一时心血来潮,就从MagicLinux的网站上通过apt-get下载了一下。
KDE4的RPM包是nihui编译的,其它的基于KDE4的发行版有很多配置上的问题,不过对于MagicLinux,我就放心多了。KDE4还依赖于Qt4,这是必然的,不过我的机器上已经自行编译好了Qt4.4,可apt-get依然给我下载了Qt4的编译包。
KDE4+Qt4比我预想的要小,只有200多M,我装好后,退回KDM,进入KDE4,启动画面真不错,黑色的基调,鼠标也是水晶黑,出来的图标也有模糊淡入效果,非常漂亮,只不过速度太慢了些。进入桌面,桌面的背景也非常好看,至于Oxygen主题,也是很不错,可是本来桌面上有一些原来的桌面图标,不过字体是文泉驿,因为都是英文,所以显示起来不好看。那些图标全放在一个框里,我本想把那个框拉大一点,结果出来什么Plasma崩溃什么的,一下子那个装图标的框就没了。
接着,我又去点KDE4的开始菜单,结果一点整个屏幕就白了,然后弹出一个Plasma的崩溃提示信息,连点几次也是这样。我于是右击把它改成经典菜单,结果就可以了,大部分的软件都在,只不过有些菜单项的图标是问号,还有几个有乱码。忍了。
然后开始启动Konsole,这个程序是我进KDE必启动的程序之一。它默认启动的是KDE4的那个Konsole,字体也是文泉驿,由于终端里主要的信息都是英文,所以显示起来也非常不好看,我于是改了一下设置,想改成Courier 10-Pitch,改是改成了,可是字体根本没变,真该死!字体不好看是一点,输入光标总与实际位置要往右偏,这也是一个问题,真麻烦。
然后我又启动了我写那个Qucifer播放器,结果它启动的是Bespin风格,这是我的Qt4程序风格设置不正确时的默认选择,真麻烦,可能是两个Qt4有冲突吧。
真麻烦,这个KDE4我是无福消受了,于是我就把花了半天心思建立起来的KDE4又给卸载了
矩阵的运算是通过Lua的metatable来完成的,用起来和C++的操作符重载一样方便,而矩阵的求逆就是通过求伴随矩阵再除以其行列式的值而得。即
在实现过程中遇到了一些麻烦,有一个是我的对于伴随矩阵的理解有问题,原来伴随矩阵不仅仅要每个元素由其代数余子式代替,还得转置一下。
这是书上1.4的内容,进度得加快
下面是一个例子:
输出是1,3,2,-1,符合书上答案
复习线性代数,写了一个计算行列式的Lua脚本: