自定义一个 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 等。
2009年10月15日星期四
脚本语言之于开发及部署相关
脚本语言之于开发及部署相关
----------------------------
LinFeiYu 2009,10,05
脚本语言的简便和高效致使它们得到广泛的应用。在 Linux 发行版系统中使用脚本语言开发管理工具、应用程序现在已经非常流行。比如很多发行版的包管理程序都是用 Python 开发的。相信大家在 Linux 上使用 Python, Ruby 等脚本语言进行开发或者产品部署的时候,特别是 Python ,经常有一些比较烦心的版本冲突问题。一个比较好的解决方法我想就是自己重新编译一个需要的版本,比如在 /opt/py25 编译一个 Python 2.5 的版本,然后使用这个版本来进行开发和部署。这样做其实是有很多好处的。
1. 首先是这个版本是从源码编译的,虽然不能说比发行版提供的二进制包或者定制的包性能上好,但是我认为它可以更加的简洁和稳定,而且你可以自定义一些选项,做一些有用的优化!
2. 其次是与操作系统本身的版本分离,完全不受干扰。虽然像 zc.buildout, virtualenv 等优秀的虚拟环境构造程序可以非常好的完成这个工作,但是他们还是在跟系统紧密相连的那些版本关联,偶尔还是会发生一些意想不到的故障。
3. 升级和卸载方便。由于和操作系统中的版本完全分离,所以啥时候升级,升级成什么样子都随你折腾。卸载的话就更加方便了,几乎把目录一删除就可以了。操作系统中的版本升级也很少会影响我们自己编译的版本。最多是自己重新编译一次。
----------------------------
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 等快速开发框架之后我们才能作最后的结论!
----------------------
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声称会在下周一发布。”估计这个东西已经出来很久了,那么有时间一定要去弄来玩玩,或许它带来了很多新的东西。呵呵 :-)
---------------------------
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 。
---------------------------
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 这项计划的半点进展。等待是痛苦的。。。
----------------------
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 用起来比较合适。
什么东西都是一样的,如果你不去深入学习它,那么你很可能会在表面应用上犯下很多的错误,而你却还毫不知情。然而我们还是希望能比较快速地掌握简单的技能,快速地应用于我们的学习和工作之中。
---------------------
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 用起来比较合适。
什么东西都是一样的,如果你不去深入学习它,那么你很可能会在表面应用上犯下很多的错误,而你却还毫不知情。然而我们还是希望能比较快速地掌握简单的技能,快速地应用于我们的学习和工作之中。
订阅:
评论 (Atom)
