2009年12月29日星期二

Fedora 12 中的 3D加速

Fedora 12 中的 3D加速

========================================
3D accelated in Fedora 12
LinFeiYu 2009,12,27

我的笔记本是 Gateway T6832c ,显卡为 HD2400XT ,Fedora 12 及 RPMFusion 中暂时没有 AMD 官方驱动的 rpm 包。默认情况下没有开启显卡的 3D加速功能。glxgear 帧速不到 300fps ,也开不了桌面特效。虽然是这样,但是视频播放还是挺流畅的。
不过偶然的一次我装了一个包之后就有了 3D加速功能啦,这个包就是 mesa-dri-drivers-experimental 。根据 yum info mesa-dri-drivers-experimental 得知这个包其实是一个试验性质的 DRI 驱动。不过挺好的,装完之后 glxgear 的帧速将近 2000fps 。桌面特效很流畅!

2009年11月30日星期一

Fedora 11 到 Fedora 12 升级历险

Fedora 11 到 Fedora 12 升级历险

===========================
Fedora 11 upgrade to Fedora 12 travel
LinFeiYu, 2009,11,28

按照官方的升级建议使用 preupgrade 满以为可以很快地升级成功。不过过程很是辛苦,因为 preupgrade 并不完美。

1. 下载升级安装所需要的文件

虽然我使用几个非官方的软件源,但是升级中依赖的解决却很是顺利。在下载了大量的 metadata 之类的信息文件之后,开始漫长的软件包的下载,一共需要下载大约 1.1GB 。下载时候的速度并不受到 /etc/yum.conf 的控制,这点出乎我的意料。缓慢的下载速度导致我在下载中必须暂停,然而目前 preupgrade 的第一个大问题是,在继续下载升级的过程中出现了 bug ,经常出现的问题是由于所有用于 preupgrade 的 metadata 都下载在 /var/cache/yum 中了,所以继续升级的时候它要么出现可以重启升级的“成功”消息,要么是扔出一个 preupgrade Python执行代码的错误(也就是 bug538118 https://bugzilla.redhat.com/show_bug.cgi?id=538118),这些都使得升级无法正常继续。在我完全没有看完 bug538118 页面上的所有回帖之后做了一些傻事。google 到的大部分解决方案就是把所有 preupgrade 已经下载的 metadata 信息文件和软件包统统删除::

# rm -rf /var/cache/yum/preupgrade*

这导致了我又一次次的下载所有的升级相关文件,既浪费了大量的时间也浪费了大量的带宽。而且没有充足的时间一次性地完成这个艰巨的任务。知道我看到了 Comment #26 之后才摆脱这个没完没了的升级下载过程。Comment #26 提供的方法是只删除已经下载的 metadata 信息文件::

# rm /var/cache/yum/preupgrade-*/!(packages)

相对来说所有的软件包都保存,只需要在暂停之后重新下载几十 MB 的 metadata 信息文件,已经是很好的解决方法了。

等升级下载完成之后以为接下来会很顺利,然而这却让我浪费了将近一周的时间。。。

2. 安装新的软件包

preupgrade 升级下载完成之后,按照提示信息,重启了机器,恶梦于是真正开始了。preupgrade 添加了一条 GRUB 启动条目,重启之后就进入这个启动条目了。这是经典的 Fedora 安装界面。然而,升级并没有开始,而是出现无法设置 FAT32 分区的错误,我觉得很奇怪,重启机器进入原来的 Fedora 11,将 /etc/fstab 中 FAT32 分区挂载条目注释掉。重新进入安装程序己可开始真正的安装,晕。安装软件包安装完之后,是否有重新安装设置 GRUB 我已经不太清楚了,可能我就在这个地方出了问题。然后就是提示信息说安装已经成功,可以重启机器了,在忍受了安装 1400 多个安装包之后我想终于可以舒服地松口气了。然而!重启之后,我的笔记本再也无法找到硬盘上的任何系统了。

3. 进入新的系统

这里我需要说明下我的硬盘的分区情况::

/dev/sda1 NTFS C:\
/dev/sda5 NTFS D:\
/dev/sda6 NTFS E:\
/dev/sda7 NTFS F:\
/dev/sda8 NTFS G:\
/dev/sda9 NTFS H:\
/dev/sda10 NTFS I:\
/dev/sda11 FAT32 J:\
/dev/sda12 SWAP
/dev/sda13 ext3 Fedora
/dev/sda14 ext3 Fedorahome
/dev/sda15 ext3 Archlinux
/dev/sda16 ext3 Archlinuxhome

Fedora 安装在 /dev/sda13 , Fedora 的 /home 目录挂载于 /dev/sda14
Archlinux 安装在 /dev/sda15 , Archlinux 的 /home 目录挂载于 /dev/sda16
GRUB 安装在各自的分区,如 Fedora 的 GRUB 安装在 /dev/sda13 , Archlinux 的 GRUB 安装在 /dev/sda15 中。 /dev/sda1 中安装的是 Windows XP ,使用 GRUB4DOS 来进入各自的 GRUB 。比如对于 Fedora 的 GRUB4DOS 条目是这样的::

title Fedora Inside
root (hd0,12)
chainloader +1

无法找到硬盘上的任何操作系统?我一开始想到的是可能升级 Fedora 的时候不小心把 GRUB 安装到 MBR 上,而且猜测是安装了 GRUB2 所致,因为不久前我安装的 debian testing 中升级了 GRUB 之后就出现类似的问题。于是我找来自己的 128M U盘 WinPE ,从 U盘 启动进入支持 SATA硬盘 的 DOS 环境,希望通过 fdisk /mbr 去掉 MBR 上的 "GRUB2" 。然而这个命令却把 U盘 中的 WinPE 的 GRUB 去掉了。。。 U盘也启动不了 WinPE 了!于是我找了几张旧光盘,其中一张是 Fedora 8 LiveCD ,可能由于刻录的原因(比如刻录速度过快,盘片质量差)花了好长时间听着“咔咔咔”的声音进入 LiveCD 中,所有分区看上去均正常,都可以正常挂载和读取数据。看上去应该是硬盘分区表启动信息的问题。用 Windows XP SP3 (集成SATA驱动)启动进入故障控制台没有找到任何 Windows 系统!试着使用 fixmbr 命令和fixboot命令然后重启机器,还是无法找到硬盘上的任何操作系统,不过用 Windows XP 安装光盘进入故障控制台已经可以找到 /dev/sda1 上的 Windows XP 了。然而,无论怎么折腾都没有效果。同事刻录了一张 GParted 的光盘也显示硬盘分区好像都正常。等到做完 U盘 WinPE ,用 U盘 启动的时候,居然进入了我的 GRUB4DOS 菜单了!然而所有 chainloader 条目都不能进入其 GRUB ,按 c 进入命令行模式,才发现 U盘 现在是 (hd0,0) ,而笔记本硬盘的分区为 (hd1,N)。这样,我更改了 Archlinux 的 root 为 (hd1,14) 之后顺利地进入了 Archlinux 中。 chroot 到 /dev/sda13 的 Fedora 系统中,一开始试着使用 grub-install 的 --recheck 参数,出现了错误,找不到任何需要的字符串。进入 GRUB 环境,试图进行修复之类的操作都提示找不到任何需要的字符串的错误。不过最后还是执行了::

root (hd0,12)
setup (hd0,12)

然后退出,重启机器。依然无法找到任何操作系统!这个时候我想到了一个最有可能的问题就是:启动分区标志的丢失。再次使用 U盘 进入 Archlinux 中,进入 fdisk /dev/sda 发现的确地,/dev/sda13 被设置为启动分区。将其调整为 /dev/sda1 ,写入分区表,退出,重启系统之后终于可以顺利找到并进入 Windows XP 的 ntldr 菜单了。太好了!接下来就是试着进入 GRUB4DOS 中的 Fedora 的 GRUB 了,然而失败了。我记起了 Fedora 的 GRUB 条目中 kernel 中使用的是 UUID ,或许该分区的 UUID 已经被更改了?于是进入 Archlinux 中 chroot 到 Fedora 中。
使用 findfs 找不到原来的 /dev/sda13 的 UUID 的对应设备信息。
使用 blkid 命令查找 udev 信息::

# blkid -o udev /dev/sda13

没有返回任何信息!而使用 tune2fs 却可以得到所有信息当然包括其 UUID ::

# tune2fs -l /dev/sda13

于是一个大胆的猜测在我脑海中形成:因为某些兼容的原因,分区的某些信息比如 UUID 至少保留在两个地方,一些比较旧的程序只能读取到一部分地方的这些分区信息,而比较新的程序可以读取到这些新区信息新的设置地方,因为升级的原因可能把旧地方的某些分区信息去掉了。我进入 Ubuntu 9.04 LiveCD 中,使用其 GParted 可以读取到完整的分区信息,而使用 WinPE 中的 PM 工具却把 /dev/sda13 当成了一个 FAT32 分区,尽管其分区号是 83 !另外一个猜测是这些分区信息可能使用了新的规则,使得旧的程序读取不到。于是我尝试一些命令来将这些信息写入到旧地方中,但是没有一个凑效。最后我做了一个最下下策的方法:重新格式化 /dev/sda13 ,并将其新的 UUID 更新到 /boot/grub/grub.cfg 和 /etc/fstab 中。这个方法中我将 /dev/sda13 格式化为 ext4 了, /etc/fstab 根分区挂载文件系统格式当然也改成 ext4 了。做完这些之后就可以进入到 /dev/sda13 中的 Fedora 12 了!除了 SELinux 对 dbus 的一个设置有问题和其他一些小问题之外好像其他一些都正常工作了。终于升级到并使用上 Fedora 12 啦!

4. 一些想法

虽然 presto 升级技术已经非常稳定和有效了,但是从旧版本升级到新版本却没有这种处理,这也让人还有些遗憾。但无论如何也将是一个需要实现的功能,是吧。

令我感到很遗憾的是,所有 Fedora 12 的软件包都已经被清除得一干二净,虽然我的 /etc/yum.conf 中设置了 keepcache=1 。在下载 preupgrade 生成的 GRUB 相关的文件中可以看到最后是删除了 /var/cache/preupgrade* 所有目录的,这个问题没有解决之前最好备份一下所有 f12 安装包。正确的做法我想应该是让所有的 f12 安装包都放在了新的 /var/cache/yum/* 各自的目录中。/etc/yum.conf 的设置也发生了一个变化,就是 cachedir 的定义?另外软件源的设置也不见了。

最后, preupgrade 这种升级方法虽然技术性强,但是还是不够成熟稳定。我想目前比较好的升级方法还是 fedora-zh 论坛中 bbbush 转载的一个文章的方法: http://bbs.fedora-zh.org/showthread.php?t=356 。而且只需要 LiveCD 作为升级安装媒质。

2009年10月15日星期四

自定义一个 zope3 的 Python 2.5 开发环境

自定义一个 zope3 的 Python 2.5 开发环境

----------------------------
LinFeiYu 2009,10,10

1. 创建一个自定义环境的目录::

$ sudo mkdir /opt/py25
$ sudo chown your_login_name:your_login_name /opt/py25

2. 首先需要自己编译一个 zlib 库

参照 limodou 前辈的文章 ( 编译Python 2.5.4带zlib http://www.zeuux.com/blog/content/1553/ ) ::

$ tar xzvf zlib-1.2.3.tar.gz
$ cd zlib-1.2.3
$ ./configure --prefix=/opt/py25 --shared
$ make
$ make install
$ make clean

3. 然后开始编译 Python 2.5.4

这里的 configure 是从 http://aur.archlinux.org/packages/python25 的 PKGBUILD 抄来的,呵呵 ::

$ tar xzvf Python-2.5.4.tgz
$ cd Python-2.5.4
$ ./configure --prefix=/opt/py25 --enable-shared --with-threads --enable-unicode
$ make
$ make install
$ make clean

4. 设置 Python 2.5 库

如果你的操作系统中已经存在一个二进制的 Python 2.5 的话,你可能不需要这一步了。

检查是否存在 /usr/lib/libpython2.5.so ,如果没有的话 ::

$ sudo ln -s /opt/py25/lib/libpython2.5.so.1.0 /usr/lib/libpython2.5.so

注意:这个方法可能不大好,如果你有好的方法,请告诉我。

5. 安装 setuptools

::

$ tar xzvf setuptools-0.6c9.tar.gz
$ cd setuptools-0.6c9
$ /opt/py25/bin/python setup.py install
$ /opt/py25/bin/python setup.py clean

7. 安装 zc.buildout

同上。

8. 一些可能用到的 Python 包的安装

基本思路同上。比如 PIL, ReportLab, xapian-bindings 等。

脚本语言之于开发及部署相关

脚本语言之于开发及部署相关

----------------------------
LinFeiYu 2009,10,05

脚本语言的简便和高效致使它们得到广泛的应用。在 Linux 发行版系统中使用脚本语言开发管理工具、应用程序现在已经非常流行。比如很多发行版的包管理程序都是用 Python 开发的。相信大家在 Linux 上使用 Python, Ruby 等脚本语言进行开发或者产品部署的时候,特别是 Python ,经常有一些比较烦心的版本冲突问题。一个比较好的解决方法我想就是自己重新编译一个需要的版本,比如在 /opt/py25 编译一个 Python 2.5 的版本,然后使用这个版本来进行开发和部署。这样做其实是有很多好处的。

1. 首先是这个版本是从源码编译的,虽然不能说比发行版提供的二进制包或者定制的包性能上好,但是我认为它可以更加的简洁和稳定,而且你可以自定义一些选项,做一些有用的优化!

2. 其次是与操作系统本身的版本分离,完全不受干扰。虽然像 zc.buildout, virtualenv 等优秀的虚拟环境构造程序可以非常好的完成这个工作,但是他们还是在跟系统紧密相连的那些版本关联,偶尔还是会发生一些意想不到的故障。

3. 升级和卸载方便。由于和操作系统中的版本完全分离,所以啥时候升级,升级成什么样子都随你折腾。卸载的话就更加方便了,几乎把目录一删除就可以了。操作系统中的版本升级也很少会影响我们自己编译的版本。最多是自己重新编译一次。

2009年8月31日星期一

Ruby

Ruby

----------------------
LinFeiYu 2009,08,30

相信很多人开始接触 Ruby 都是从 Ruby on Rails 开始的。我就是这样子来的。
维基百科上介绍 Ruby on Rails 的历史上是这样说的:“于2004年7月,Rails 的创始人David Heinemeier Hanson从 37signals 公司的项目管理工具 Basecamp 里面分离出 Ruby on Rails,并且以开源方式发布。”于是对这个框架更加的有亲切感。为什么呢?因为公司的项目管理 SaaS 应用正是从 Basecamp 那里模仿汉化而来的。刚才偶尔翻阅旧文章时候发现了一篇介绍项目管理的文章:项目管理工具推荐:Redmine和DotProject ( http://www.kuangfeng.cn/blog/?p=1846 ) 。其中的 Redmine ( http://www.redmine.org/ ) 莫非就是由此而来?呵呵 :-)

学习 Ruby on Rails 当然要熟悉 Ruby 这个基本语言了。然而跟 Python 一样,中文资料还是比较缺乏的。刚又看了一个面向 Java 程序员的 Ruby 语言介绍: 脱离 Rails 看 Ruby ( http://www.ibm.com/developerworks/cn/java/j-ruby/ ) 。这篇文章中提到的 Ruby 的三个特色给我留下的印象比较深刻。

首先是迭代。 IBM developerWorks 的这篇文章中提到:“ Ruby 中支持 each 方法的任何类(比如 File)都允许以这种方式进行迭代。” Ruby 的 each 方法比较酷!而且非常常见,比如你在 Ruby on Rails 第一个教程中就可以看到它的身影。跟 Python 的链表推导式(List Comprehensions)相比复杂了一点点,还是比较好用好理解的。
Python 的链表推导式支持条件判断,那是相当的有用的。而 Ruby 也有,不过 Ruby 不仅用了 if 语句,还用到一个叫 unless 语句,估计比 Python 强一点点。可能就是在迭代出现符合条件的时候 break 跳出循环。
另外一个就是多态性了。在 Python 中我好像没找到多态性这个面向对象特性,因为默认情况下 Python 没有接口功能。尽管 zope 的组件思想中以接口为中心设计,而且把 zope 组件当成是 Python 组件,但是纯 Python 中并没有这个东西。而这篇文章中说 Ruby 中也不存在接口,但是却存在接口的功能,而且 Ruby 中的多态性只是对方法名进行匹配的问题。这是非常有趣的事情。

目前尚未真正接触 Ruby ,所以几乎一无所知。然而正如 IBM developerWorks 的这篇面向 Java 程序员的 Ruby 介绍文章中所提示的,掌握多种语言有非常多的好处。

关于 Python 和 Ruby 的细节比较,这里有一篇非常详细的介绍文章:Python vs Ruby ( http://regebro.wordpress.com/2009/07/12/python-vs-ruby/ )
确实地, Python 是一种非常优雅的语言。

关于 Ruby 的一个 web 服务器 Mongrel 作者的访谈录的中文翻译: 对SCGI/Mongrel的作者的访谈(关于Rails企业级应用、放弃SCGI等的言论) ( http://www.javaeye.com/topic/49543 )
其中提到的 “企业级应用” 这样的问题,在 Python 中也是非常的有争论的。比如在某些人的眼中,zope 就被定义为类似于 J2EE 等的 “企业级应用” ,而像 Django 等快速开发框架却被认为属于小型应用框架。然而, Django 之类的快速开发框架在 Python 社区的火爆,相对于 zope 的冷落没落,我们似乎应该改变些看法。也许只有当我们认真地去了解 Django 等快速开发框架之后我们才能作最后的结论!

Python Web Framework

Python Web Framework

---------------------------
LinFeiYu 2009,08,30

感觉 Python web 框架都在向 zope 方向进展。这是最近发现的一个地方。为什么呢?

zope 中有一个叫做注册表的东西,这个注册表分为本地注册表和全局注册表(globalSiteManager),所有的组件不是在本地注册表中就是在全局注册表中,可以通过 Python 代码方式将组件注册到注册表,也可以通过 zcml 文件直接注册组件。虽然有人跟我说过 zcml 中注册的组件是注册到全局注册表中,然而在我学习了 wsgi 中间件之间的调用之后,我发现那个说法应该是错误的。 zcml 中的组件注册应该只是注册到本地注册表,而不是注册到全局注册表!如果开发一个大型的应用的话,每个模块都有其组件注册到注册表上,这样 zope 的注册表将是非常的大的。在 zope组件架构 ( http://www.muthukadan.net/docs/zca.html#adapters ) 中提到:“局部组件是持久化组件,而全局组件是保存在内存之中。全局组件是根据应用的设置进行注册的,而局部组件是在应用启动的时候从数据库中加载到内存的。” 我想这个跟 Windows 的注册表有些神似,不过却不是真正的好方案,Windows 的注册表已经被批得一塌糊涂,比如《Unix编程艺术》中所指出的那样。使用 zcml 配置文件据说也是很多 Python 开发者拒绝 zope 的一个原因。

Django 的发展中也许遇到了类似的问题,它们必须把组件组装到一个地方,让整个框架可以方便地统一管理这些组件。于是,我们看到了 Django 的 admin 模块中也出现了一个类似注册表的东西,这篇文章中: 修正 Django Step by Step 的一些例子 ( http://www.vpsee.com/2009/07/update-examples-in-django-step-by-step/ ) 指出了这个问题。毫无疑问,注册表功能将会在 Django 中越来越多的出现,最后可能走向 zope 的注册表解决方案。

国内 Python 领袖人物之一的 limodou 在其尚未开发完成的 Uliweb 框架中更是使用了一种非常类似 zcml 的解决方案,不同的是作者使用的是 ini 配置文件。具体介绍看这里:第一章 Uliweb介绍 ( http://sites.google.com/site/learninguliweb/home/chapter1 ) 中的 “资源共享的处理方式” 一段。在资源的配置上它应该还没有做到 zope 中那样可以根据 weight 来调整合并资源文件的深度。更不用说 zope 的 viewlet 那样灵活的设计了。

总之,在这些或者非常火爆,或者尚在发展的轮子中,我们还是看到已经存在的设计,或许他们重新造轮子只是想把原来的设计简化而已。。。

今天,无意中看到同事 Youngking 很久以前的一篇文章:又一个框架-bobo ( http://blog.xmu.me/2009/06/14/framework-bob/ ),发表时间是 2009,06,14 ,而文章最后一句话,“这个框架目前还没有正式发布,Jim Fulton声称会在下周一发布。”估计这个东西已经出来很久了,那么有时间一定要去弄来玩玩,或许它带来了很多新的东西。呵呵 :-)

Fedora 11 GPRS

Fedora 11 GPRS

---------------------------
LinFeiYu 2009,08,30

刚才在 Fedora 11 试了一下连接手机的 GPRS 上网功能,非常好!

我的手机已经很老啦,是 06 年底的 MOTOROLA E770V 。以前我也试过在 Linux 发行版中将它当一个 Modem 来使用,但是都失败了。今天偶然的尝试,居然成功了,而且这个过程非常简单容易。

Fedora 11 系统中使用的网络连接程序是 NetworkManager ,这个程序还是不错的,特别是近来加入了对移动宽带、 VPN 等的支持。我使用 NetworkManager 连接 E770V 的 GPRS 上网的简单步骤:

1. 在 E770V 的 “USB设置” 中将 “默认连接” 方式设置为 “数据连接”。
2. 使用 USB数据线 将 E770V 连接到电脑的 USB接口 上。
3. 点击 NetworkManager 系统图标弹出连接选项,选择 “New Mobile Broadband (GSM) connection...” ,弹出配置向导。
4. 点击 “前进” 按钮,选择国家 “China”。
5. 点击 “前进” 按钮,选择手机卡的提供商,我使用的是中国移动的神州行卡,所以选择了 “China Mobile”。
6. 点击 “前进” 按钮,选择上网类型。在这里 NetworkManager 有个小 bug ,虽然我用的是 cmwap 的 APN ,而不是默认的 cmnet 。但是如果在这里就将 APN 改为 cmwap 的话,NetworkManager 将出错并退出!所以这时候还是选择默认的 cmnet 。
7. 拔掉 USB数据线 ,点击 “前进” 按钮,然后点击 “应用” 按钮。如果在这个时候不先拔掉 USB数据线 的话,很可能会导致接下来 NetworkManager 马上使用 E770V 的 cmnet APN 连接网络!
8. 右键单击 NetworkManager 系统图标,选择 “编辑连接”,然后选择 “移动宽带”。可以看到刚才的配置向导已经生成了一个配置,比如我的叫 “China Mobile Default” ,左键选择这个配置,然后点击右侧的 “编辑” 按钮,弹出编辑配置选项界面。这个时候将 APN 参数修改为 cmwap ,清空 Username 和 Password 参数。然后点击 “应用” 按钮。这里你也可以自定义其他参数,比如连接名称。这样配置就完成了。
9. 重新插上连着手机的 USB数据线 ,左键点击 NetworkManager 系统图标,选择刚才编辑配置中的连接名称项,比如我的 GPRS 连接名称是 “China Mobile Default” ,这时候 NetworkManager 就按照配置的内容开始连接了,连接成功后就会提示已经成功连接上了。
10. 打开浏览器或者 QQ 之类的网络应用程序,修改网络连接中的代理设置,将代理设置为:HTTP代理,IP 为 10.0.0.172 ,端口为 80 即可。然后就可以上网了。
11. Firefox 在使用以上代理的时候首次可能会出现下载 wap 什么文件之类的,只要多刷新一下或者多下就可以了。QQ 可能会出现输入什么码的,按照提示多次输入之后就可以了。我刚才上 google 搜索和 douban ,一切操作均正常。
12. 断开连接:左键点击 NetworkManager 系统图标,选择连接名称下方的 “断开” 就可以了。然后拔下 USB数据线。
13. 以后使用这个手机上网就可以直接使用这个连接配置了(从步骤9开始)。如果不使用这个手机连接配置的话,要把浏览器或者QQ之类的网络应用程序的代理设置改回原来的设置。

OK!所有操作就这些了,非常简单吧!应该比在 Windows 下还简单,因为在 Windows 下还要手动跑到 设备管理器 那里去设置 APN 。

Python

Python

----------------------
LinFeiYu 2009,08,29

Python 目前是我的工作程序语言。这个程序语言以简洁、优雅著称。
使用 Python 是让人愉快的。好像技术界的很多大牛都给了 Python 很高的评价。
然而,最近我却有些不大开心。
首先是版本的兼容问题。虽然 Python 2.x 大部分时候是向后兼容的,但是还是有一些地方让人比较难受。特别是新的版本中新增或者改进的功能在旧版本中几乎完全不能使用。而 Python 3.x 更是一下子去掉了向后兼容,大家几乎都要从头开始!当很多应用还停留在 Python 2.x ,甚至是 Python 2.4 的时候,Python 3.1 在 Python 3.0 刚发布不久之后就马上发布了。这个速度也太快了!
另外一个是性能问题。最近看《Unix编程艺术》,其中提到,不仅相对与编译语言,而且相对于其他脚本语言,Python 也是效率低下、速度缓慢的。
现在的 *nix 系统管理程序越来越多的看到 Python 的身影。这似乎是一件很鼓舞人心的事情。然而几个事情还是让我有些担忧。有一次我把 Ubuntu Server 从 6.06 升级到 8.04 ,中间出现了一个小问题,这个小问题直接导致了这个系统完全无法使用。这个问题是这样的:Debian/Ubuntu 最强劲的包管理系统 apt 是基于 Python 语言的,升级过程中,与 apt 相关的某个 python 脚本可能由于文件系统的逻辑错误导致无法使用,结果升级安装在这里失败了,整个安装升级到此为止。而此时我比较傻,重启了系统,结果进入不了系统,提示整个系统处于 Read Only 状态什么乱七八糟的。使用 single 模式进入最基本的系统还是提示缺失某些重要的命令,而这命令就跟 apt 有关。修复了 apt 软件包之后把整个系统重新升级,重启之后就完全恢复正常了。然而却浪费了我几个小时的时间。当然这似乎不能怪罪于 Python 了。然而这么重要的系统功能依赖于 Python 这样的脚本语言,我总觉得不大合适。
相信很多人都很不乐意于使用 Java 开发的应用程序,然而现在 Linux 下的很多应用程序使用的是 Python 语言。我已经看到过很多的问题,都是 Python 脚本引起的。比如 Fedora 的安装程序 Anaxxx 在分区阶段偶尔会出现一些问题,这些问题从出错的提示看都是 Python 脚本。Magic Linux 使用的 smart 程序是基于 Python 开发的,使用中也出现一些奇怪的问题。我的 Arch Linux 使用 wicd 程序管理网络,按照 Arch Linux 官方建议的设置,现在和 dbus 的通讯还是存在权限的问题,这个 wicd 也是用 Python 开发的。 PyQt 、 PyGTK 、 wxPython 等被广泛应用与 Linux 发行版的桌面程序开发,然而他们的运行缓慢,效率低下!也许 Python 真的非常适合于快速开发,然而性能问题不能不面对啊!

Python 现在是很多 Linux 发行版的一个必须的系统级脚本语言,就像 Perl 一样。这也不见得是一件好事情。Fedora 11 默认的 Python 安装了 Paste 、 setuptools 、 simplejson 等 Python 包,然而某些 Python 包,比如 Paste 和 setuptools 似乎被削去了很多东西,导致开发中出现问题,结果只能把这些包卸载了,重新从各自的源码安装。而由于 Python 版本升级的兼容问题,发行版面临另外一个问题,就是一旦 Python 版本需要升级,其他很多系统相关的包都需要重新调整编译等。一个很典型的例子是 Magic Linux ,他们在 2.0/2.1 版本中均使用 Python 2.4 版本。然而,当想将 Python 2.4 升级到 Python 2.5 的时候,他们发现好多好多的依赖,这个依赖太多了,所以他们打算等待下一个发布版本 2.5 再升级到 Python 2.5 。然而当他们开始发布 2.5 的 alpha 版本的时候他们已经将 Python 2.4 升级到 Python 2.6 了,而 Python 2.5 不见踪影。

相信我们都对“依赖”感到不爽,从 Windows 的 dll hell 到 Linux 发行版中各种软件包的依赖问题,简直不能忍受!然而,这个问题,的确很难解决啊!

想想 C/C++ 非常的稳定,根本不在乎新技术如何迅猛的发展,多年过后你还是可以用回你原来的技术创建非常高效的应用程序!

不久前,google 宣布了一项计划,将为 Python 提速。这是一件非常让人欣喜的事情。然而几个月过去了,我们没有看到 google 这项计划的半点进展。等待是痛苦的。。。

emacs 23

emacs 23

---------------------
LinFeiYu 2009,08,29

emacs 越来越好用了。特别是 23 版本的发布,对 unicode 的支持已经非常的好。应该是到时候从 vi 迁移到 emacs 了。

为什么要从 vi 迁移到 emacs 呢?
首先是缓冲区的问题,我已经有几次因为这个问题丢失数据了。或许是我太懒没有认真学习 vi ,总之如果我在 vi 中剪切一定数量的数据,保存退出 vi 之后再进入 vi 将刚才复制的内容粘贴的话,在复制的数据不大的情况下这样是没有问题的,不过数据量大的时候 vi 自动保持一定的数据去掉了多出的数据,这个做法完全没有任何提示,于是我丢失了部门的数据。在同一个 vi 进程中进行这个缓冲区之间的操作应该是没有这样的限制的,然而不同的 vi 进程中的这个操作居然有这样的提示,而且还不给任何提示!
然后是中文处理的问题。大部分情况下 vi 对于中文处理很正常,然而有些情况,比如中文标点符号,vi 就出现问题了。实在想不透为什么,中文标点符号不是和中文字符一样吗?按照中文字符的处理应该就可以了。

不过,emacs 的上手比较难。现在大概就只会 C-x C-s 和 C-x C-c 了。但是想起当初我学 vi 的时候也是很辛苦的,很多 vi 的基本操作一直都是慢慢地学习到的。那么对于 emacs 就不需要这样抱怨了。emacs 一个最大的问题应该是性能的问题,这个程序几乎无所不能,然而强大的功能带来了一个问题就是启动慢,系统资源消耗大。听说 emacs 已经开始尝试一种 daemon 运行方式,也许将来能更加快速地使用 emacs 。现在对于系统管理,恐怕还是 nano 和 vi 用起来比较合适。

什么东西都是一样的,如果你不去深入学习它,那么你很可能会在表面应用上犯下很多的错误,而你却还毫不知情。然而我们还是希望能比较快速地掌握简单的技能,快速地应用于我们的学习和工作之中。

Fedora 11

Fedora 11

---------------------
LinFeiYu 2009,08,29

自从 Fedora 11 正式发布之后,我就迫不及待地想从 Fedora 10 直接升级到 Fedora 11 。然而,却发生了很多事情,最后我还是回到了 Fedora 的怀抱。

我原来的 Fedora 10 是通过 LiveCD 媒介硬盘安装的,除了进入系统速度有些慢之外,其他几乎是无可挑剔的。为什么呢?当时由于工作的需要,我必须开启两个虚拟机来进行开发调试,我在我的 Fedora 10 上安装了 VMware Player 和 VirtualBox ,并分别运行 Ubuntu Server 和 Windows 2003 Server ,除了一次不知道搞了别的什么程序不小心挂掉之外,其他时候都是非常稳定和可靠的。Fedora 官方软件源提供了非常多已经打包的开发包,对于开发人员来说是非常好的,再加上 RPM Fusion 提供大量的非官方软件包,包括开发的、桌面媒体的等等,已经几乎可以满足需求了。再加上流行程序,像 Firefox 、 OpenOffice 等的更新非常快且稳定,于是 Fedora 已经是我的一个非常重要的选择了。Fedora 一个让人称道的地方是其技术创新性,最前沿的技术一般来自 Fedora ,像 PulseAudio ,Plymouth 等等。而 Fedora 对具有创新性的自由软件的支持更是让我非常的喜欢,像 ibus 等等。当然这些走在前头的技术并非非常完善,但是 Fedora 步调还是比较稳健的。这是我对 Fedora 的感觉。

从 Fedora 10 升级到 Fedora 11 的过程比较辛苦可能是我自己的问题。为什么呢?Fedora 官方推荐使用 PreUpgrade 的方式,然而我急于求成,经过几次在 PreUpgrade 等待过于漫长之后,居然把 Fedora 10 删除了!删除了 Fedora 10 之后我又开始了安装各种发行版的尝试。然而,“曾经沧海难为水,除却巫山不是云。”无论是哪一个发行版,虽然理论上他们的实质是相同的,但是他们还是有其各自的优点和缺点的。在重新体验了各个发行版之后,我发现 Arch Linux 和 Fedora 是比较适合我的发行版了。我一直保持安装两个 Linux 发行版的习惯,其中用于工作的是 Arch Linux ,原因非常简单,就是其 AUR 和包管理的优点,这让我可以非常容易的打包管理我需要的软件包。不过,我非常希望能将工作环境迁移到 Fedora 中。为什么这么说呢?Fedora 11 已经把 Python 升级到 Python 2.6 了,虽然我同时使用了 RPM Fusion 软件源,但是所有软件源中只有 Python 2.6 和 Python 2.4 。工作中我们已经从 Python 2.4 升级到了 Python 2.5 ,但是目前找不到 Fedora 11 的 Python 2.5 软件包。当然我可以自己手动编译 Python2.5 ,然而受 Arch Linux 的影响,我已经比较倾向于不使用手动编译的方式来安装软件包了,因为手动编译安装软件包对于关键包的管理比较麻烦。所以我最近开始学如何打包 rpm 包。在我逐步的学习中发现,其实 rpm 包的 spec 文件还是比较简单的,和 AUR 的 PKGBUILD 文件相比只是复杂了一点点。而稍微看了一下 deb 包的打包,那简直无法再看下去。当然这可能与我的智商有关。呵呵 :-) 由于打包 Python2.5 比较困难,所以我暂时使用 RPM Fusion 中的 Python 2.4 ,RPM Fusion 软件源已经提供了几个重要的 Python 2.4 的 Python 包了,有 compat-python24-libxml2 、 compat-python24-imaging 等,这两天我自己打包了一个精简的 compat-xapian-bindings-python24 ,修改了一个工作环境,终于可以在 Python2.4 下工作了。我尝试过在 Python 2.6 下进行 zope 3 的开发(工作环境),首先一个是 with 似乎开始成为一个关键词,于是我更换了一下 zope 3 中 with 所有的地方,这样在 Python 2.6 下我可以将 zope 3 的程序运行起来,然而 zope 3 却并不能正常工作,那些 adapter 等好像都不能工作。所以最后我放弃了。虽然现在我可以在 Python 2.4 上进行工作了,但是我还是希望能找到或者自己打包一个好用的 Python 2.5 的 rpm 包来。当然,我更希望 zope 3 的下一个版本 zope 3.5 能正常工作于 Python 2.6 之下,虽然这是很天真的想法,因为 zope 3.4 能正常运行在 Python 2.5 下已经是很让人欣喜的了。

这次我花了几天断断续续的时间第一次下载了 dvd 版的 Fedora 安装媒介,通过硬盘安装的方式安装了我的 Fedora 11 ,感觉良好。我又回到了这个赏心悦目的环境中!由于 Fedora 11 中 yum 对于 presto 技术的支持越来越好,于是我把 Fedora 11 的 dvd iso 镜像手动挂载到系统中,然后作为一个基础的软件源使用,这样在进行升级或者安装软件包的时候,利用 yum 对于 presto 技术的支持,升级和下载新的软件包所需要下载的体积已经大大减小。加上后来我使用多线程的插件 axelget ,安装和升级已经是比较容易的事情了。对于提高安装和升级 Fedora 软件包的速度来说,以下三个 yum 的插件是非常重要的:yum-plugin-fastestmirror 、 yum-presto 和 axelget 插件。有一个奇怪的地方是,Fedora 11 似乎默认把 keepcache 设置为0了,直接导致下载的包括 Presto 合并之后的安装包都没有被保存。这个问题有段时间让我感觉很不舒服,因为 man yum.conf 中是说这个选项默认是1.当然也可能是我不小心把它修改了。

对于工作站来说,我已经非常倾向于使用 Fedora 了。正如一些同学的观点,Fedora 相比其他某些发行版来说,是属于正规军的,而且是先锋部队!当然我这里说的是工作站,如果服务器的话,我想使用 FreeBSD 、 Gentoo 发行版会比较合适。有机会我一定会好好地学习这两种发行版,特别是 Gentoo 。 Gentoo 是我身边的同事 Youngking 最推崇的发行版,它的确也非常地吸引人。其中有一个让人印象非常好的地方是 Gentoo 提供了非常丰富的文档!无论是 Gentoo 发行版本身核心的文档,还是其他 GNU 自由软件的文档,都非常详细和准确,而且提供了非常多种语言的翻译。我还因此收藏了很多其中的文档!呵呵 :-)

非常喜欢 Fedora ,希望我能好好学习,也许将来我也能为她做点贡献,呵呵!

2009年7月28日星期二

让人又爱又恨的wps

不可否认,这是一款很好的软件,走过这么多年的风风雨雨。
然而,她曾经的辉煌早已成为历史。应该曾经是国产软件的一个骄傲。但不思进取让她落后了。这几年来似乎很努力,但是,还是不够。

自从2005年开始,我几乎会隔一段时间就会下载个个人版来试用,过了几个月之后我又把她卸载了。
这次之后恐怕不会再去动她了,这样挣扎是没有用的:她依然那么的弱——
我为什么这么说呢?在金山公司宣称她可以很好地生成 pdf文件 的时候我确实很兴奋!但是就算是这个并不算大亮点的功能她也没有真正做好,经常出错!特别是处理稍微大一点的文件。
换成 OpenOffice 就好了。

我已经下定决心了,以后就只用 OpenOffice 。为什么现在才决定呢?主要是因为 OpenOffice 的安装文件太大了,运行速度也粉慢。但是这些我已经能够忍受了。我可以忍受性能的低下,但不能忍受软件的不稳定!

最近的 wps 加入了在线储存,我觉得是类似 google 的 Picasa 的网络相册上传下载的功能,感觉没有创意,不过聊胜于无吧。

但是还是要祝愿她,希望她能更加完善。毕竟这是咱们中国人自己的东西,还是很有些感情的!

2009年7月20日星期一

Linux

我又要发牢骚了,以前也发过(以前的文章在这里: http://www.cppblog.com/whycrying/archive/2007/12/07/37937.html )。当然现在还是一样的幼稚。

这是两三个多星期的事情了。我千辛万苦的工作环境 Fedora10 用得还算可以。为什么说千辛万苦呢?这个指的是我的 ATI 显卡的安装问题。。。。不过 Fedora11 出来了,我当然要随着潮流走了。为什么说跟着 Fedora 就是跟着潮流呢?去看看 Fedora 每次的版本特性,都是走在了最前头。但是就也是因为这样,使得 Fedora 很激进?我不想下载 DVD 安装媒介,那个太大了!很浪费带宽,最重要的是浪费时间!我们必须把时间用在自己需要的地方。自从 Fedora8 以来我一直下载的是 LiveCD 版本,在 LiveCD 里玩玩觉得不错了就把它安装到硬盘上了。但是这次的 Fedora11 更加激进了,使用 LiveCD 它只允许你安装到ext4 的分区上!而现在的情况是 /boot 分区暂不支持从 ext4 分区启动。如果从 LiveCD 安装 Fedora11 的话,我必须划出一个大于100多MB的 /boot 分区。而我的硬盘已经有十多个分区了。原来的 Fedora10 只给了两个分区:根分区 / 在 /dev/sda13 , /home 分区在 /dev/sda14 。交换分区 swap 在 /dev/sda12 与后来安装在 /dev/sda15 和 /dev/sda16 的 Arch Linux 共同使用。其他是 Windows 的 NTFS 和 FAT32 分区。自从上次我把分区调整了一下导致出现分区的混乱之后我不想再去调整分区表了。

上次的分区表调整是这样的:我把原来 Windows 分区的一个隐藏主分区移到了逻辑分区。由于我的 Fedora10 和 Arch Linux 的 Grub 都是安装在其根分区上,以为很容易就更改过来。Arch Linux 使用分区号来挂载分区,确实很容易地就正常工作了。但是 Fedora10 使用的是 UUID 挂载分区,可能是更改分区导致 UUID 的变化?按照道理是 Fedora 所在的分区大小位置都没有变化 UUID 应该也没有变化才对,可是 Fedora10 死活就是挂不上,于是只好手工修改为使用分区号来挂载分区,汗!而且还死活挂不上 /dev/sda16 分区了。虽然说 Linux 内核确实在 sata 硬盘分区上有16个的限制,但是又好像不像,因为以前可以,现在更改了一下分区表就不行了?莫名其妙。。。

但是我的 Fedora10 还是为我的工作做了很多出色的贡献:几个月稳定的Web开发,还非常好地刻录了几张 DVD 碟。并且可以在同时运行 VMware Player 和 VirtualBox 各一个虚拟机的情况下很好很流畅地支持我的开发工作。这都是非常值得称赞的了。而 RPM Fusion 软件源也是非常值得称赞的地方。它让我装上了 ATI 的显卡驱动并可以很流畅地运行几个大型的游戏,开源的 ATI 显卡驱动性能上确实达不到这样的水平。

一开始我想通过 fedoraproject 官方推荐升级方式,即使用 Preupgrade ,也许我以后使用这种方式来升级会很放心。但是第一次使用这个方式的时候,我等了半天没有看到多少进度的进展,于是我取消了重来一次,效果还是一样。于是我很懊恼地放弃了这个方式,现在想来当时的放弃是错误的,我应该坚持使用 Pregrade 的方式升级的。接下来我按照官方提供的第二种方式,即使用 yum 来升级。问题是我忘记了先升级 yum 本身。还有一个问题是 ntp 包的降级问题,搞得我昏头转向的。在我想卸载 ntp 的时候从 yum 那里看到了好多依赖关系,如果要卸载 ntp 的话等于把几乎整个 Fedora10 都卸载了。但是我冒险把它单独卸载了,以为再也进不了 Fedora10 了。结果出乎意料的是,我仍然很正常地进入和使用虽然 release 变成 Fedora11 但所有包都还是 Fedora10 的系统。这样我使用 yum 来升级的时候是正确了,但是需要升级的包有1000多个,需要下载的包大小大约是1.1G。这太恐怖了!那还真的不如下载个安装媒介,重新安装系统。但是我还是尝试使用 yum 来升级,可 Fedora 官方源却经常出现 Permission Denied 的问题,听说是 yum 的问题。搞得我升级的动力也快消磨了,才想使用 Fedora11 的 LiveCD 来重新安装系统。却出现了上面的问题,即使用 Fedora11 的 LiveCD 只能安装到 ext4 分区的问题。晕!到这个时候我真的忍受不了了 Fedora 的这种激进的态度了。于是我想先放放 Fedora ,试试其他的发行版了。

我最想再次尝试的发行版当然是 Debian ,这个我最先接触早期最热衷的发行版当之无愧成了我的选择。于是我按照以前的思路来安装一个 基本系统 + Xfce4 桌面的环境。当然它的样子还是和以前那样简单和朴素。我使用 Fedora 的几个重要的原因中除了新特性、开发方便之外就是漂亮的外观了。Dedian在这方面虽然一直在努力,但是还是那么的“老土”。。。不过我安装了 slim 之后,发现 debian 源里的 slim 提供了一个很养眼的 slim 主题,必去 Arch Linux 提供的那几个 slim 主题漂亮了很多!而且好像不是“一个档次”。呵呵 :-) 但是还没有爽多久我就开始郁闷了。首先是 Firefox 和 Thunderbird 的问题,这是 Debian 中争论不休的一个问题。我也一直不赞同 Debian 将 Firefox 和 Thunderbird 改成这个样子。这个倒还不是什么大问题,最大的一个问题是 OpenGL 的问题。Debian 在我的心目中一直都是比较追求稳定的那种,虽然我以前因为 Nvidia 显卡的问题死机过几次,但是我还是以为 Debian 在硬件支持应该是非常好的。不过,事实让我无话可说。无论是开源的 ati 或者 radeonhd 还是 ATI 官方的 fglrx 显卡驱动,安装是都没有问题,可是 OpenGL 总是有问题,什么问题呢? direct rendering 一直都是 no !google 了很多解决方法,均以失败告终。当然我没有使用以前安装 Nvidia 显卡的方法使用 ATI 官方提供的 xxx.run 安装程序来安装。自从我使用了 Arch Linux 之后我对这个方式并鉴于以前出现过的类似问题我不再尝试这样的方式了。没有 OpenGL 加速的情况下很多桌面程序都不流畅,比如 Iceseal(Firefox) 在上下滚动的时候就一卡一卡的,这绝对让人狂抓!至少我是这样。更别谈其他比较高级一点的涉及到图形性能要求高的程序了,比如 3D 程序。这样的环境肯定不能满足我的需求。虽然 Debian 有很多的文档,但是大部分还是服务器方面的,那些复杂的配置对于现在的懒人来说确实是很浪费时间和精力了。Ubuntu 的成功一方面应该是因为配置上的复杂度已经降低了很多。

于是我又想尝试一直都在垂涎的 Gentoo ,这个是我的同事 Yongking 极力推荐的发行版。虽然在我的极力推荐下他也和我一起用 Arch Linux 。但是他还是会说 Gentoo 是非常棒的。我按照 Gentoo 官方的 “Gentoo Linux x86快速安装指南” 在我的 Arch Linux 上开始安装 Gentoo ,一切很顺利。这其实很多得益于 Yongking 所说的, Gentoo 官方的文档确实很全面,而且各种语系的翻译都很到位。真的是一个很值得称赞的发行版。然而,好戏在后头。我使用 stage3 安装了 Gentoo 的基本系统之后,重启机器,顺利进入 Gentoo 基本系统。于是我 #emerge world ,提示将升级一共82个软件包,而且不需要确认。我有点不爽,其他发行本在包升级的时候默认情况下一般都会给出确认与否。当时开始的时间是傍晚的 19:00 左右。我自己估算至少要一个小时。一个小时之后我看到进度是已经安装了大约 80 个软件包了。这时候我想夸自己很有预见能力。但是接下来的时间让我很是郁闷。最后两个包应该是 gcc 和 glibc。足足编译了2个小时!天哪!我饿着肚子一直等啊等啊的。。。一直想的就是就差这一两个包了,很快就好了。结果在我看完了一本去年的《程序员》杂志之后,它们还没编译完成。。。当然在等了漫长的两个小时完成了之后我马上关上笔记本,得马上回去吃饭了!第二天,我就把这个花了几个小时的 Gentoo 打包了。

我在 distrowatch 游离了很久。还下载了很多有趣的东西,比如 haiku raw 文件,FreeBSD livefs iso 文件,hurd live cd iso 文件等等。这些我都玩不起来,太高级的东西。。。

我想起几年前和热衷的国人的 Magic Linux,那只非常漂亮的蝴蝶曾经令我很是陶醉。但是 Magic Linux 2.1 却让我失去了使用它的欲望,KDE 是一个方面,美观设计的倒退更是一个重要的方面。正如 sejishikong 说的,毕竟 Magic Linux 2.0 的外观设计者菜花人家是专业的。不过随着 KDE4 的成熟,KDE4 的强大和美观已经超出了 Microsoft Vista 那样的饭桶了。KDE4 版本的 Magic Linux 2.5 随着几个 Alpha 版本的发布,更加漂亮了!简直太引诱人了,而且性能上非常的好!这不,几天前发布了 beta1 版本了。但是。。。但是什么呢?下载和更新的网速太慢了。。。。Magic Linux 的开发团队应该很小,大家精力比较有限吧。源 http://apt.magiclinux.org/ 很慢。而且几乎没有商业的支持。几个狂热分子 shejishikong,haulm,nihui 等真的非常值得敬佩!然而,Magic Linux 项目之一的 Magic Installer 似乎还不是很完善,至少不能支持我的硬盘控制器 SATA(AHCI) ,导致安装不上。系统的 locale 也有些问题。安装的时候的两种 locale 选择似乎没有效果,无论选择了 GB18030 还是 UTF-8,结果都是 GB18030 。我不知道 KDE 在这方面的处理,但是我在终端使用 export $LANG 没有任何效果确实是挺奇怪的,因为其他发行版没有这个问题。这样,Magic Linux 还是存在这样那样的问题,也还不是一个真正可以用于生产的发行版,所以还是得放着。

其实我的 Arch Linux 也使用了很长时间了。Arch Linux 真的是一个非常优秀的发行版!我是从 LinuxToy ( http://www.linuxtoy.org ) 那里开始认识这个优秀的发行版的。AUR 绝对是和 Portage 有得一拼的设计!然而在软件包的依赖问题上,我认为 Arch Linux 还做得不够,像刚开始接触 Arch Linux 的 Yongking 一样,他从一开始安装基本系统,然后安装他喜欢的桌面环境,结果不能把 X 启动,折腾了很久,发现 xorg 也没有安装完整,即使 xorg 安装完整了,还是没有驱动起来。他才开始看 Arch 的一些文档,使用 hwdetect 来检测和配置系统。当然最好他是否成功地将 Arch Linux 安装到他自己的 EEEPC 上我就不得而知了。Arch Linux 让我称赞的地方是他保留了软件包的原始名字,比如 xf86-video-* 等。在 Debian 里这些都被改名了,比如变成了 xserver-xorg-video-* 等。我觉得 Debian 在某些地方做了很无聊的事情。这两天的一个小问题,加重了我对 Arch Linux 软件包在依赖性上的软弱的感觉。虽然 Firefox 不属于 core 分支,但是这是一个比较重要的软件包。我在使用 pacman 升级系统的时候有时候比较奇怪,我不是一次性把所有的包都升级上去,而是一个或几个包来升级。结果那两天出现的问题是,我升级了几个软件包之后重启了 Arch Linux 结果进入 Xfce4 桌面环境发现除了 Terminal 其他都无法使用,比如 Xfce4 panel , 桌面等。我尝试重新安装 Xfce4 :$ sudo pacman -S xfce4 。发现有几个 Xfce4 的软件包需要升级。升级完这几个软件包之后 Xfce4 桌面环境就正常了。但是,Firefox 和 Thunderbird 罢工了。从终端运行时,出现一个错误: Coundn't load XPCOM! 我问了下 Yongking,他居然说重装系统吧!我晕~我自己 google 了一阵,认为这是和 xulrunner 有关的依赖性问题。于是我花了点时间安装了 xulrunner 及其关联的几个包。结果证明我的想法是正确的, Firefox 和 Thunderbird 又正常了。Arch Linux 现在是我最主要的生产环境,我信任她并使用她,特别是在 AUR 上我觉得非常的不错,有一些 python 包我就是自己打包的,包的使用和管理真的非常方便。但是在依赖性方面我觉得她还需要努力!

不可否认,Ubuntu 是个成功的发行版。为什么呢?有一个非常活跃的社区,这几乎是现在的 Linux 社区最活跃的一个了。还有对硬件的支持非常的全面和良好。然后她继承 Debian 很多优秀的特点,在软件包的管理方面非常优秀。在安装和升级方面真的是非常的人性化。许多人开始使用 Ubuntu 恐怕都是因为上面的这些原因吧!虽然 Ubuntu 的官方许诺这个 For Hunman Being 的发行版永远免费。但是我总觉得有那么些不大协调的感觉。我的感觉可能来源于 Ubuntu 与 Debian 的关系上:一个最 GNU 的发行版和一个最商业背景的发行版。从 Ubuntu 可以嗅到很多很重的商业味道,这是和 Debian 的完全 GNU 精神完全背道而驰的。但是她毫无疑问成为最流行的 Linux 桌面发行版,也是必须承认的。不是因为越来越多的人特别是不懂计算机技术的人开始能使用这个发行版而导致我们对这个发行版的态度产生不耻这样自以为高的可耻想法。希望 Ubuntu 确实能让人丢弃 GNU/Linux 是计算机高手才使用这样的陈旧观念,这样 Linux 桌面发展才能真正的壮大起来。不过,我一般选择使用的是 Xubuntu 这样轻量级的发行版,我就喜欢那只小老鼠!我认为我还是属于那种比较爱折腾的人,呵呵 :-)

最近看到有评论说,基于 Ubuntu 的发行版 Mint 继承了 Ubuntu 的很多优点,并兼容 Ubuntu 的软件源,而且在软件包管理和硬件支持上有很多亮点,Yongking 也说要去试试。在 distrowatch 上 Mint 的排名也真的是很靠前,那么也是有必要去尝试的。。。

国内的另外一个发行版 Everest 最近要改名为 Qomo 了。虽然这个发行版被诟病和红旗的发行版一样在外观上完全仿照微软的 Windows 系列,但是我安装过 Everest ,也看过其开发者的日志,觉得这个发行版还是很有前途的,至少现在很多人都很期待。为什么说它有前途呢?来自商业上的支持!毕竟有钱比较容易办事啊!相反,Magic Linux 和 Hiweed 那边进展慢等问题很突出。当然我最看好的是 Magic Linux ,什么时候她有了充足的支持(不仅指商业上的)了,那她肯定可以非常好的发展开来!一起为她祈祷吧!


-----------------------
LinFeiYu
2009,07,19

计算机书店

好久年没有买书了。。。最近越发感觉买书的必要。有几本重要的书还留在上一个城市,不知何时能过去带回来!
于是想去书店买书。当然最想去的是华师后门的天鼎书店,我还很穷,就不去购书中心了。

下午吃完饭后就出发。像上次一样,在师大后门转了两圈,这次却找不到天鼎书店了。天灰灰的,我想真的挂掉了,还想着那里有着基本C++的好书呢,还想着那里可以看到最新的计算机杂志呢。。。
只好悻悻而归。

坐在我旁边的同事 Yongking 经常买书。这不,前天又买了两本,一本计算机相关的,一本文学相关的。都是在 china-pub 上买的,送货上门再付费。我说如果他送上门然后我却不要了,怎么办?没事的,不要他的书就行了。那如果我买了100本书,然后说不要了呢?他们笑了起来,那也还是那样。。。

我还在读大学的时候,记得在学校的图书馆借了本 Flash 的书籍。结果不知怎么地就丢了。于是需要赔图书馆一本。于是我第一次网购,那时候应该是 2003年 吧。就是在网上搜索到了 china-pub ,别的找不到,而且还打了点折,加上运送费,还没有达到原来那本书原来的价钱,于是很快下单,并去邮局汇了款。

我翻了翻 Yongking 买的书,质量一般般。既然现在可以货到付款,那简直是太好了!好吧,以后就通过网购买书吧。

当然我还是很希望能找到天鼎书店那样的书店的,或许是我不小心看漏了眼,或许是它不久前才搬走了。。。。但无论如何,我都想最好能够再次找到它,因为我想出去走走,呼吸呼吸新鲜空气。。。

----------------
LinFeiYu
2009,07,19

2009年4月8日星期三

出来了个www.buildout.org

没想到最近出来了这个: http://www.buildout.org
大有将 python 中的 web 应用使用 zc.buildout 统一管理组件版本。
觉得这东西的使用似乎越来越微妙了。
pycon 2009 似乎提到相关的问题,即 distutils 某些功能要去除,转移到类似 virtualenv/zc.buildout 这样的非核心包中。
既然大家都这么热捧 zc.buildout ,似乎不应该对其有意见。
一个比较好的 pycon 2009 介绍:
Brett Cannon: PyCon 2009 recap: Best PyCon ever!

2009年4月4日星期六

grok似乎过于依赖zc.buildout

就算是用 virtualenv 来配置 grok 的运行环境,grok 还是要以 zc.buildout 的方式来管理包。
真是顽固!
真的看不到 grok 的希望,这个东西恐怕可以忽略了。。。。。

更新了fglrx

昨天下班前更新了一下 Fedora 10,幸亏没有在工作的时候重启,不然可够呛的了。
为什么呢?因为昨天更新了 fglrx 到 9.3 。
回家之后进入不了 Fedora 的 桌面,在进入 X 之前硬盘和显示器闪了一阵子,然后就停了,我一看,我晕,居然死机了!
当然我马上就知道是怎么回事了。
心疼地手动 Poweroff 机器,再冷启动机器。在加载 Fedora 10 分区的 Grub 的时候
(我一般把 grub 装到其对应的系统的根分区下,比如 Fedora 的 grub 就装在 /dev/sda11 ,而 Arch 的 grub 就装在 /dev/sda13 中,然后统一由 NTloader 中的 grub 来选择不同的 grub 以进入不同的系统,晕,很难说清楚这个东西)
按 Esc 键,看到 Fedora 10 的 grub 菜单,选择进入 Fedora 10 的启动条目,按 a 键进入该启动条目编辑,去掉 quiet参数,在最后面添加 single 参数,这样我们将进入单用户根用户模式。然后按 Enter 键。系统进入了单用户根用户模式后:
# vi /etc/X11/xorg.conf
把下面两行补加到 Section "Device" 中:
Option "OpenGLOverlay" "off"
Option "VideoOverlay" "on"
重启系统。
终于回到我的 Fedora 10 桌面了!
运行 ATI Catalyst Control Center,发现“信息”页面没有了原来的乱码,信息也更加详尽了。比如:
2D 驱动程序版本 8.59.2
OpenGL 版本 2.1.8543 Release

2009年3月31日星期二

ubuntu之python-ldap安装

这个东西够折腾人的,终于把它装上了!
你如是没有在 ubuntu 上把 python-ldap 2.3.6 装上,可以下载源码包:
http://downloads.sourceforge.net/python-ldap/python-ldap-2.3.6.tar.gz?use_mirror=jaist
然后解压缩,查看 setup.cfg 文件,其中的:
libs = ldap_r lber sasl2 ssl crypto
就是安装的重点啦!
记得把跟这些库及其开发包都装上:
$ sudo apt-get install libldap-2.4-2 ldap-utils libldap2-dev libsasl2-modules-ldap libsasl2-modules-ldap db4.6-util libssl-dev libsasl2-dev openssl
等。。。
然后:
$ python setup.py build
没有出现 error 就可以正常安装了。

俺一个包一个包的尝试,在几个小时之后终于把它装上了哇,受虐有时候就是这样的。

还是 Fedora 和 Arch 好,不需要这样折腾。

2009年3月26日星期四

精简后的xorg.conf文件

其实在 Fedora 和 Arch 上 xorg 的配置文件差不多一致,其他发行版也应该类似。现在我的精简 xorg.conf 文件:

=======================================================================

# Xorg configuration created by system-config-display

Section "ServerLayout"
Identifier "single head configuration"
Screen 0 "aticonfig-Screen[0]-0" 0 0
EndSection

Section "Files"
ModulePath "/usr/lib/xorg/modules/extensions/fglrx"
ModulePath "/usr/lib/xorg/modules"
EndSection

Section "Module"
EndSection

Section "ServerFlags"
Option "AIGLX" "on"
EndSection

Section "Monitor"
Identifier "aticonfig-Monitor[0]-0"
Option "VendorName" "ATI Proprietary Driver"
Option "ModelName" "Generic Autodetecting Monitor"
Option "DPMS" "true"
EndSection

Section "Device"
Identifier "aticonfig-Device[0]-0"
Driver "fglrx"
BusID "PCI:1:0:0"
EndSection

Section "Screen"
Identifier "aticonfig-Screen[0]-0"
Device "aticonfig-Device[0]-0"
Monitor "aticonfig-Monitor[0]-0"
DefaultDepth 24
SubSection "Display"
Viewport 0 0
Depth 24
EndSubSection
EndSection

Section "DRI"
Mode 0666
EndSection

Section "Extensions"
Option "Composite" "Enable"
EndSection



================================================================================
如果你有一天发现运行不了 ATI Catalyst Control Center 和 Compiz 等桌面特效的话,
请检查你的 xorg.conf 文件中 Section "Files" 中的内容是否被清空了。清空了的话请加上类似上面的两行 ModulePath 就可以了。出现这个问题我估计是升级 catalyst 驱动的时候弄丢的。

2009年3月11日星期三

yum 的依赖处理还是很弱

今天在使用 repoze.who.ldap 的时候,需要安装 python-ldap 包,在已经用 yum 安装上了 openldap 和 python-ldap 包的情况下,使用 repoze.who.ldap 还是出错。出错的信息看上去与 gcc 相关,于是猜测缺少一些头文件之类的开发包文件,就把 openldap-devel 等安装上,然后就可以了。所以估计在不安装 openldap-devel 的情况下, python-ldap 也无法正常使用。

另外,包列表的数据库非常巨大,特别是添加了 rpmfusion 源之后就更加恐怖了。这时候在使用了 fastestmirror presto 之后,系统更新安装包是比较快速了,不过对于 yum 使用 bash_complete 功能补全包名字,比如 $ yum install gstream 然后按 tab 按健将使得 yum 几乎假死。

2009年3月4日星期三

zope2 现在可以通过easy_install安装了

http://regebro.wordpress.com/2009/02/27/zope-2-now-in-egg-form/

Zope 2.12 alpha 1 has been released. It’s completely “eggified”, meaning that all parts of it are separate python modules, installable with setuptools easy_install command. The main egg is called just Zope2, and you can therefore now install Zope 2 with “easy_install Zope2″ from the command line. Of course, this will install it in the system library, which is probably not what you want. So you probably want to use virtualenv to create a separate installation, or use buildout.

Here are the commands I used to test this alpha version:

virtualenv zope212 # Create a python sandbox for testing

cd zope212

bin/easy_install Zope2 # Install Zope 2

# make coffee while Zope 2 gets downloaded and installed

bin/mkzopeinstance

cd testinstance # Or whatever you called it

bin/zopectl fg

Yeah, that’s it! Works like a charm. Even on Python 2.6! Zope 2.12 will be released probably around a similar time as Plone 4. Plone 3.2 is already completely eggyfied, but Plone buildouts still need to have special recipies for installing Zope 2. With Zope 2.12 this will no longer be necessary, and you can install Plone just by doing an easy_install Plone, and get all of the parts installed. Which is totally cool!

So thanks to everyone involved in this, and also to everyone involved in eggifying Zope3, without which this never could have happend!

Posted in python, zope Tagged: eggs, plone

==============================
这是一个好消息!
赶快试下。。。
希望能工作在 python2.5 和 python2.6 上。哈哈
不要像不久前发布的 zope 3.4.0 那样,一上来就只认 python 2.4
PyPi 上的说明:
http://pypi.python.org/pypi/Zope2/

2009年2月23日星期一

终于用上了Arch Linux

折腾了几天。首先是无限网卡问题,这个到很快从 ArchWiki 上得到解决的办法。
接下来很折腾的是 Xorg 上显卡的驱动问题。一开始 google 了一些资料,无论是使用了 vesa 驱动、开源驱动 vf86-video-ati 还是最新的 catalyst 驱动,均告失败。正在我准备放弃的时候,突然又乱搞搞好了。其实这个做法很简单,也不漂亮。首先要安装好 xorg 和 catalyst ,接下来具体就是:
1、安装 hwd :
$ sudo pacman -S hwd
自动生成 xorg.conf 文件:
$ sudo hwd -xa
2、初始化 catalyst 驱动:
$ sudo aticonfig --initial -f
配置 catalyst 驱动:
这个参照:终于在Fedora10上成功安装并使用ATI显卡驱动fglrx
最后我的 xorg.conf 是这样的:


# Auto-generated by Archie mkxcfg
# Auto-generated by Archie mkxcfg

Section "ServerLayout"

# PS/2 Mouse not detected
# Serial Mouse not detected
Identifier "Xorg Configured"
Screen 0 "aticonfig-Screen[0]-0" 0 0
InputDevice "Keyboard0" "CoreKeyboard"
InputDevice "USB Mouse" "CorePointer"
EndSection

Section "Files"

# Additional fonts: Locale, Gimp, TTF...
# FontPath "/usr/share/lib/X11/fonts/latin2/75dpi"
# FontPath "/usr/share/lib/X11/fonts/latin2/100dpi"
# True type and type1 fonts are also handled via xftlib, see /etc/X11/XftConfig!
ModulePath "/usr/lib/xorg/modules"
FontPath "/usr/share/fonts/misc:unscaled"
FontPath "/usr/share/fonts/misc"
FontPath "/usr/share/fonts/75dpi:unscaled"
FontPath "/usr/share/fonts/75dpi"
FontPath "/usr/share/fonts/100dpi:unscaled"
FontPath "/usr/share/fonts/100dpi"
FontPath "/usr/share/fonts/PEX"
FontPath "/usr/share/fonts/cyrillic"
FontPath "/usr/share/fonts/Type1"
FontPath "/usr/share/fonts/ttf/western"
FontPath "/usr/share/fonts/ttf/decoratives"
FontPath "/usr/share/fonts/truetype"
FontPath "/usr/share/fonts/truetype/openoffice"
FontPath "/usr/share/fonts/truetype/ttf-bitstream-vera"
FontPath "/usr/share/fonts/latex-ttf-fonts"
FontPath "/usr/share/fonts/defoma/CID"
FontPath "/usr/share/fonts/defoma/TrueType"
EndSection

Section "Module"

#Load "type1"
#Load "ddc" # ddc probing of monitor
#Load "dbe"
#Load "dri"
#Load "extmod"
#Load "glx"
#Load "bitmap" # bitmap-fonts
#Load "freetype"
#Load "record"
#Load "synaptics"
EndSection

Section "ServerFlags"
Option "AllowMouseOpenFail" "true"
Option "AutoAddDevices" "False"
Option "AIGLX" "on"
EndSection

Section "InputDevice"
Identifier "Keyboard0"
Driver "keyboard"
Option "CoreKeyboard"
Option "XkbRules" "xorg"
Option "XkbModel" "pc105"
Option "XkbLayout" "us"
Option "XkbVariant" ""
EndSection

Section "InputDevice"
Identifier "Serial Mouse"
Driver "mouse"
Option "Protocol" "Microsoft"
Option "Device" "/dev/ttyS0"
Option "Emulate3Buttons" "true"
Option "Emulate3Timeout" "70"
Option "SendCoreEvents" "true"
EndSection

Section "InputDevice"
Identifier "PS/2 Mouse"
Driver "mouse"
Option "Protocol" "auto"
Option "ZAxisMapping" "4 5"
Option "Device" "/dev/psaux"
Option "Emulate3Buttons" "true"
Option "Emulate3Timeout" "70"
Option "SendCoreEvents" "true"
EndSection

Section "InputDevice"
Identifier "USB Mouse"
Driver "mouse"
Option "Device" "/dev/input/mice"
Option "SendCoreEvents" "true"
Option "Protocol" "IMPS/2"
Option "ZAxisMapping" "4 5"
Option "Buttons" "5"
EndSection

Section "Monitor"
Identifier "aticonfig-Monitor[0]-0"
Option "VendorName" "ATI Proprietary Driver"
Option "ModelName" "Generic Autodetecting Monitor"
Option "DPMS" "true"
EndSection

Section "Device"
Identifier "aticonfig-Device[0]-0"
Driver "fglrx"
BusID "PCI:1:0:0"
Option "OpenGLOverlay" "off"
Option "VideoOverlay" "on"
EndSection

Section "Screen"
Identifier "aticonfig-Screen[0]-0"
Device "aticonfig-Device[0]-0"
Monitor "aticonfig-Monitor[0]-0"
DefaultDepth 24
SubSection "Display"
Viewport 0 0
Depth 24
EndSubSection
EndSection

Section "Extensions"
Option "Composite" "Enable"
EndSection

Section "DRI"
Mode 0666
EndSection

启动进入 X 有点慢,可能有些地方还没配置好,不过已经可以很好的工作了。
接下来享受 平滑升级 和 最新软件包 的乐趣了,还有强大的 abs 。

2009年2月22日星期日

Cygwin中的DAEMON程序

以前写过一篇文章:继续尝试Cygwin上运行zope
那时候得出的结论是错误的。那并不是 ZODB 的问题,而是在 Cygwin 中运行 DAEMON 程序的话,是需要注册成 Windows 服务的。
昨晚在 Cygwin 中尝试最新的 Zope3.4.0 时候发现了这个问题。在使用 zope3 创建的实例中的 bin/zopeservice.py 命令中有这样的说明:

You can view the usage options by running ntservice.py without any
arguments.

Note: you may have to register the Python service program first,

win32\PythonService.exe /register

就像在 Cygwin 中运行 Apache 服务器一样,都是需要注册成 Windows 服务的。

2009年2月14日星期六

终于在Fedora10上成功安装并使用ATI显卡驱动fglrx

主要参考这篇国人翻译的文章:http://linuxtoy.org/archives/rpmfusion-testing-added-fglrx-for-fedora10-added-uninstall.html
forum.fedoraforum.org 上的原文:http://forums.fedoraforum.org/showthread.php?t=155503

我在一个星期前曾经安装过,但是那个时候装完了却还是没有使用上已经装上去的 fglrx 驱动,那时很郁闷地卸载了。
今天我看到这个文章,才发现我以前没有完全正确安装 fglrx 驱动,导致没有使用上 fglrx 驱动。

没错, fglrx 相关的驱动包已经放到 rpmfusinon-nonfree-updates 中了。

参照了这篇文章,我的安装一开始就遇到了个小问题, google 了会终于解决了这个奇怪的依赖问题。
就是在执行:
$ sudo yum install akmod-fglrx xorg-x11-drv-fglrx xorg-x11-drv-fglrx-libs.i386
安装驱动包的时候, yum 的依赖关系出了个问题,提示 elfutils 和elfutils-libs 这两个包缺失。
google 一下, forum.fedoraforum.org 上已经有这个问题的解决方法了:
http://forums.fedoraforum.org/showthread.php?t=212336
按照 #4 的回帖,运行:
$ sudo yum install rpm-build rpmdevtools --enablerepo=updates-testing
安装了 testing 中几个相关联的包之后,再安装驱动就没问题了。
我安装的版本是:8.573
现在安装驱动的时候连 system-config-display 也都一起装上了。

接下来的配置非常重要,我原来没有完全装好就是因为下面四点:
1、显卡驱动配置初始化工作:
$ sudo aticonfig --initial -f
我原来就是少了个 -f 参数!
2、修改 /etc/X11/xorg.conf 配置文件:
添加的三个字段中其实前面两个已经有了,把最后一个补上:
Section "DRI"
Mode 0666
EndSection
暂时不知道不添加这个字段是否可行。
然后在 Device 字段内添加如下两行:
Option "OpenGLOverlay" "off"
Option "VideoOverlay" "on"
暂时也不知道这个是否可以不加。
3、禁止载入已有的 radeon 驱动:
先备份,运行:
$ sudo mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img.backup
然后重新生成新的 initrd,使 radeon 模块不会被强行载入:
$ sudo mkinitrd -v /boot/initrd-`uname -r`.img `uname -r`
我以前在 Debian 和 Ubuntu 中使用 Nvidia 官方提供的安装包安装 GF2MX400 显卡驱动的时候,看到的提示也是类似,都需要重新生成新的 inird 。
4、编辑 /boot/grub/grub.conf
在内核(kernel)所在行的最后添加 nopat参数
暂时也不知道这个是否可以不添加。

最后重启机器。不出意外的话,fglrx 驱动就已经成功安装上了。
使用 glxgears 命令可以看到现在的帧数有 3000fps 多,原来系统默认驱动的帧数只有 200fps 多!还有个 fgl_glxgears 命令,出来一个类似glxgears的东东,帧数有 700fps 多。
运行:
$ fglrxinfo
得到:
display: :0.0 screen: 0
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: ATI Mobility Radeon HD 2400 XT
OpenGL version string: 2.1.8395 Release

开启桌面特效(compiz),可以炫耀了,哈哈!原来系统默认驱动一点击“启用桌面特效”按钮,就黑屏了几十秒钟!晕~

不久前没有完全正确装上 fglrx 驱动的情况下,登录过程并不平滑,无论我对 /etc/X11/xorg.conf 做怎样的配置,在登录界面(gdm)上是我设置的 1280x800 分辨率,但是在过度到桌面的过程中,分辨率闪到了 1024x768 ,这对于使用宽屏的机器来说显示效果极其不好,而且不平滑的登录过程让人反感。最后我把 /etc/X11/xorg.conf 文件删除了,就恢复了原来的平滑过度和 1280x800 分辨率,真是怪事。

我的机器:Gateway T-6832c

Linux之hostname更正

我曾经写过一篇文章:Linux之hostname修改问题

这两天查看 hostname 的 Manual 才发现原来自己搞错了。
在我的 Fedora 10 里,
$ man hostname
中提到 hostname 命令只是临时的修改 hostname ,下次重启机器之后,hostname 将恢复原来的设置。
真正记录 hostname 的在
/etc/sysconfig/network
这个配置文件中。只要修改了其中的 HOSTNAME 参数的值,以后每次启动机器默认都是使用这个值作为 hostname 。
当然最好也修改 /etc/hosts 配置文件,这个文件和 Windows 下的 %system32%/drivers/etc/hosts 文件作用相同,写法类似。

--------------------------------
2009,02,16
最近迷上了 Arch Linux ,其 hostname 似乎存放在 /etc/rc.conf 的 “HOSTNAME”参数中。