K.I.S.S. – 简单哲学 Linux, Freedom, Arch, Python, Gtk+, C … Keep It Simple, Stupid!

15十一/1111

那些在 Python 3 中闪亮的

大家好,又到了科普时间,咳咳。

距离 3 发布已经有一段时间了,主流发行版都已经带了 3 的软件包,甚至 等发行版还将其设为了默认的 版本。多数的库也已经带了 3 的支持(也有 Twisted、Django 等例外),是不是偶尔也想着要不要将自己的程序升级一下呢?

昨天稍微有时间研究了一下 Python 3,就将我在文档中找到的有趣新特性分享给大家。

默认返回迭代器(Iterator)

print 成为一个函数、默认不用地板除(Floor Divide)之类的我就不说了,想必地球人都知道有这么回事。

值得一提的是,原来需要使用 xrange 、 iteritems 等等函数和方法才能返回的迭代器现在成为了默认,替代了原来返回列表的函数。就连 map 、 filter 、 zip 等函数都返回迭代器了。

大家都知道相对于返回完整的列表,迭代器省去了一次生成所有元素的开销,并且在循环 break 的时候,就停止迭代,防止了额外的开销,所以一般情况下迭代器要比列表快得多。

如果你仍然需要完整列表,可以通过 list(some_iter) 构造,不过这种问题往往使用列表解析(List comprehension)就能够解决。

字符串分为 str 和 bytes

在 Python 2 中,字符串分为 ASCII 码表示('some text')和 Unicode 表示(u'Unicode 字符串'),默认为 ASCII 码。

不过在 Python 3 中,默认就是万能的 Unicode 码了,所以字符串前面不用加字母 u 也可以写 Unicode 了,当然这不是重点,重点是不会有各种 ASCII 和 Unicode 转换和混用带来的错误了。

另外, Python 3 中增加了一种 bytes 对象(b'\xb6\xfe\xbd\xf8\xd6\xc6\xca\xfd\xbe\xdd'),专门用来表示编码后的(二进制)数据,所以现在对字符串的编码就是从 str 到 bytes 的转换,反之亦然,两者不能混用,这样编码与否一目了然,免除了很多错误。

源文件编码默认为 UTF-8

Python 3 在字符编码方面有很多改进,其中之一就是默认的源文件编码从 ASCII 变为 UTF-8 ,也就是说以前在文件头加上的各种花样的 coding=utf-8 不再需要了!

# coding: UTF-8
# vim:fileencoding=UTF-8
# -*- coding=UTF-8 -*-
# vim: set fileencoding=UTF-8

标识符支持非 ASCII 字符

这个自行理解,易语言表示压力很大。

>>> 所有 = all
>>>
>>> class 男人:
...     @classmethod
...     def 包括(cls, Ta):
...         return isinstance(Ta, cls)
...
>>> def 一起玩(人们):
...     if 所有(男人.包括(Ta) for Ta in 人们):
...         print('他们是基友')
...     else:
...         print('他们是朋友')
...
>>> 小攻 = 男人()
>>> 小受 = 男人()
>>> 一起玩([小攻,小受])
他们是基友
>>>

新的字符串格式化语法

原来的 %s %d %你妹 语法已经不推荐,并且很快会被弃用,新的字符串格式化方法(2.6 版引入)为 str.format 或者内置函数 format 。比如:

>>> 三青年 = {'小红':'普通青年','小明':'文艺青年','小亮':'二逼青年'}
>>> '{小红}说我想吃罐头,{小明}说更上一层楼,{小亮}说阿伊呀伊呦。'.format(**三青年)
'普通青年说我想吃罐头,文艺青年说更上一层楼,二逼青年说阿伊呀伊呦。'
>>>

字典解析和集合解析

有了列表解析,当然也少不了字典解析:

>>> {k: v + '青年' for k, v in [('小明', '文艺'), ('小红', '普通'), ('小亮', '二逼')]}
{'小明': '文艺青年', '小红': '普通青年', '小亮': '二逼青年'}
>>>

还有集合解析:

>>> {小吃 for 小吃 in ('豆浆', '油条', '包纸')}
{'油条', '包纸', '豆浆'}
>>>

有序字典与 configparser

默认 Python 字典是无序的,不过新引入的 collections.OrderedDict 类提供了一种有序字典实现,并且被 configparser 默认使用,现在使用 configparser 类就可以得到有序的 ini 格式配置文件了!

而 configparser 模块现在完全支持使用类字典的方法进行读写了!你妹,我之前的工作全白做了!

ABC

抽象基类(Abstract Base Classes),就是像 C++ 里面虚类一样的东西。作为其子类,只有将所有抽象方法都实现,才能实例化。

抽象基类是对 Duck Typing 的补充,由于引入了 @abstractmethod , @abstractstaticmethod , @abstractclassmethod , @abstractproperty 四个修饰符,强制抽象方法必须实现,所以可以一定程度上避免错误,用起来感觉比 Duck Typing 安心一些。

结局

以上就是我把 Python 3.0 到 3.2 的 What's new 看了一遍的成果,总体来说 Python 3 本身变得更加规范,更加灵活,如果你的程序不依赖于 Python 2 特有的库的话,来试试 Python 3 很不错!

结局?结局?结局就是小亮和小红幸福地生活在了一起,小明自己吃豆浆油条包纸。

(完)

标签: 11 评论
13一/1111

星际译王 StarDict 更新 3.0.2

提起 Linux 桌面上的翻译软件,就不得不想起星际译王,这个东西让人又爱又恨,它几乎是 Linux 上唯一一个稳定而功能强大的字典软件,无奈 BUG 多多,许久不更新了,作者胡正似乎沉迷于佛学和写书,久久也没有更新。

不过一位俄罗斯开发者 kubtek 的加入,让已经三年多没有更新过的星际译王重获了新生。事实上,从 2009 年 10 月开始,kubtek 就一直没有停止过开发星际译王,终于在两天前,发布了自开发以来第一个正式版本 3.0.2。

从修订记录来看, 3.0.2 相对于 3.0.1 的主要改变有:添加日志系统、新的文本词典格式、替换了广告插件、恢复在 Windows 和 Mac OS X 上的开发工作、Windows 版本特定的一些调整、修复了 Dict.cn 插件并在未找到单词时显示单词建议,当然 BUG 修复肯定不止这些。

总体来说,没有太多新的特性,属于调整期的维护版本。不过,想来在接下来的版本里,星际译王能够给我们更多惊喜。

更多信息可以在星际译王的项目主页上看到。

PS:考试完成,一身轻松!

9十一/104

Marlin —— GNOME 下新文件管理器启动!

首先得说明,这个不是 官方的计划,而是 Elementary 项目的一部分。

相信 -elementary 大家都很熟悉了,这个 的修改版,为 GNOME 用户提供了一个更加美观易用的文件管理器。不过, Elementary 小组为 做的一些修改被上游认为是 Hacks 而迟迟不被接受,现在,他们终于开始研究自己的文件管理器了!

采用 Vala 编写界面,而 C 用来编写底层函数。在界面的编写上,使用了 + 3 和其他的 GNOME3 的时髦技术;而在底层上,Marlin 则从 Nautilus 和 Thunar 里面“偷”了些代码。加上 Elementary 自己本身特长的发挥,相信 Marlin 相较于 Nautilus 会在多个方面有所突破!

当然,Marlin 的代码刚刚推送上 launchpad 还不到一天,不要期待能够马上用到稳定版本,不过 bzr 版本已经可以看出它的一些特色了:

marlin_preview.png

电脑上没有装 GTK+ 3 的主题引擎,所以看起来丑了点。可以看出,Marlin 现在默认是这种小栏模式,嵌套进入目录,有点像 Ranger 的样子,操作起来很方便。当然那三个五角星预示着 Marlin 肯定会有各种传统的视图模式,另外,隐藏菜单栏之类的原有功能也是少不了的。

虽然,Marlin 还处于早期开发阶段,不过 Elementary 小组的品质一向很有保证,让我们见证这一文件管理器闪耀出奇迹的光吧!

Marlin 的源代码目前托管在 launchpad 上,可以通过下面的命令获得源代码:

bzr branch lp:marlin
26十/102

Compiz 0.9.2 发布

在使用 C++ 重写,而又沉寂了一段时间之后, 开发小组发布了新的 0.9.2 版本,虽然仍然是实验性的版本,不过根据作者所言,这个版本已经可以用于日常应用。在 下安装新版 Compiz 的方法见这里

这个版本修复了大量的 BUG,并且带来了一些新的特性:

  • 新的 MultiAnim 类,帮助在动画中创建窗口图像的多个拷贝
  • 查看最小化窗口的实时预览(实验性的)
  • 重写了“群组(Group)”插件
  • 缩放(Scale)插件的自然(Natural)模式
  • 简化阴影在装饰器(Decorator)中的存储

此外,计划中的 0.9.4 具有如下特性:

  • (通过 MPX 和 UTouch)支持多点触摸和多点输入
  • 动画框架,允许插件轻易地创建动画,或者使用其他插件提供的动画
  • 将插件编译进核心,大幅提高速度

PS:此版本发现了一些 BUG,稍后会发布 0.9.2.1 版本。

PS2:Ubuntu 11.04 将使用 Unity 作为 Shell,而 Unity 的窗口管理器则将由 Mutter 换成 Compiz,也就是说 Compiz 得到了来自 Canonical 的支持!事实上,至少 Compiz 的开发者之一 smspillaz 已经被 Canonical 雇用了……为 Compiz 光明的未来喝彩吧!

相关链接: 原文 详细更新列表 源代码下载

标签: 2 评论
3十/106

学生用户 Dropbox 容量翻倍!

现在在搞活动了,看到推上还没有人说,赶紧告诉大家。

Dropbox 现在正在针对学生用户(准确说是 .edu 用户)开展活动,只要收封邮件激活一下,就可以将现有的容量翻倍(最多到 18G),而邀请他人所获得的容量也会翻倍(500M/用户,最多获得 16G)。

本人有学校分配的 .edu 邮箱,很容易就获得了超大容量,大家也赶快上吧~

dropbox_size.png

活动页面:https://www.dropbox.com/edu

另外,还没有 Dropbox 的同学赶快申请一个吧,我已经受到 Dropbox 很多好处了,以前系统误操作格式化掉,很容易就从网上恢复回来,另外,不同机器之间迁移、朋友间共享文件也变得很方便。从我的邀请链接进入,可以额外获得 250 M 流量哦!

标签: 6 评论
23九/093

快来使用 Git 翻译《Pro Git》

的中文教程和书籍比较少,大多已经陈旧不堪,前段时间 Linuxtoy 介绍了一本《Pro Git》,读了一下,写得很不错,可惜是英文的。

偶然间,在页面下面看到了 Chinese 的字样,原来《Pro Git》的翻译已经在进行中了,居然是用 Git 进行管理的!仔细想想,Git 的分布式开发的确非常适合翻译的情况,只能说 Git 功能太过强大了吧……

目前中文版的翻译已经到了第四章,看了一下,提交者主要是 chunzi 和 DaNmarner,已经翻译了一个多月了……看了前三章,翻译得很好,很容易理解,不过两个人翻译的话,可能会很辛苦……

各位正在学习和使用 Git 的各位同学,有英语比较好的能够帮助翻译么?既锻炼英语,又实践 Git 技能,好机会哦~

项目地址:http://github.com/progit/progit/

chunzi 的 fork:http://github.com/chunzi/progit/

DaNmarner 的 fork:http://github.com/DaNmarner/progit

PS:考研中没时间翻译,只能来号召大家一下了……羡慕 shellex 兄……

标签: 3 评论
12九/093

ATI Catalyst 9.9 for Linux 放出——仅仅是修正 BUG

在专门为 Ubuntu 9.10 定做的 9.10 泄漏出来之后, 很快又发布了催化剂 9.9,从 Release Note 上面看,新版 仅仅是修复 BUG 而已,新特性里面也仅仅是支持新的操作系统。

这版催化剂仍然不支持 Kernel 2.6.31,的确,按照 ATI 的惯例,既然出了支持 2.6.31 的泄漏版 9.10,那肯定是到 9.10 正式发布才会给予正式支持。

想更新新版,又想用新内核的同学,可以使用 9.10 泄漏版,或者使用 AUR 中  kozzi 提供的 patch(未经测试)来使用 9.9,不过无论哪种,都没有提供 XvBA 的支持,可恶的 ATI……

根据消息,Kernel 2.6.32 将提供 R600/R700 的 KMS 以及 3D 支持,估计到时候会有一大批人换上开源驱动了……

下载地址:Catalyst 9.9

标签: 3 评论
24七/093

Catalyst 9.7 for Linux 发布

/AMD 9.7 for Windows 显卡驱动已经在昨天发布,最新版的 /AMD Linux 版的显卡驱动也已经放出,Catalyst 9.7 For Linux 显卡驱动支持 x86 和 x86_64 平台。

按照惯例,技术人员总是先把安装文件上传到服务器,然后在几小时后发布 Release Note,里面包含新特性和已知 Bug 的说明。截止目前为止,Release Note 仍没有释出,可能正在撰写中。

建议大家不要使用此文件直接运行,而是使用与各发行版包管理系统相容的方式安装,以免出现问题。

下载地址:Catalyst 9.7 for Linux x86/x86_64

Update:

Release Note 已放出,主要更新:

支持新操作系统:

RedFlag DT 7.0

已解决问题:

  • X segmentation fault no longer occurs after applying reflections or rotations on some systems that support Xrandr 1.2 or higher
  • Catalyst Control Center hot plugging a secondary display no longer causes screen corruption in clone mode
  • Monitor are now disabled after removing the secondary display when system is in standby
  • Some systems now report CrossFire adapters available during re-install
  • On some multi-monitor configurations disabling one display no longer causes both displays to become disabled
  • X Server does not intermittently fail to start on some multi adapter configurations
  • Executing xrandr --prop no longer causes Ubuntu 9.04 X Server to stop responding
  • [Ubuntu 9.04] Segmentation fault no longer occurs with X server Xinerama is enabled

已知问题:

  • Toggling between terminals may cause the system to become unresponsive
  • Catalyst Control Center Display Manager may fail to display HDTV PAL modes
  • The mouse cursor may fail to switch between primary and secondary display in some dual-head configurations
  • “aticonfig -xinerama=o”n may result in different dimension and dpi settings between Ubuntu 8.10 and 9.04
  • RandR 1.2 specifying Rotate in xorg.conf may cause X startup to fail
  • The mouse cursor may show incorrect rotation and position on some systems with large desktop enabled
  • Removing secondary display may cause the login screen to appear on the ghost monitor
  • Moving the mouse cursor between two displays may show a the cursor on both displays simultaneously
  • System may stop responding when running Return to Castle Wolfenstein

PS:太晚了,不翻译了,又是双显示器和交火,有几个人用到啊……

标签: 3 评论
4七/093

开源 ATI R600/700 3D 驱动已接近可用状态

的开源驱动虽然一直在紧锣密鼓的开发,然而性能一直不佳,尤其是对高端显卡,甚至无法开启 3D 特效,这样很多有心支持开源驱动的 A 卡用户望而却步。

今天从 AMD 的 John Bridgman传出消息,Linux 版开源 R600/700 驱动即将可用,虽然很慢,但确实如此。在发行文档程序员指南示例代码发布几个月后,他们的 Mesa 驱动终于开始做有用的事,而不是单纯的渲染三角形

Radeon 驱动重写派生出的 ATI R600/700 3D 驱动现在在 Mesa 的一个分支中。而也不在 Mainline 中的 DRM 代码也被所有级别的 3D 支持所需。Bridgman 在他的 blog 中提到,他们的测试样例中有大约 25% 已经通过,不过其他的大多数样例不是崩溃就是渲染错误。

这个 3D 驱动现在对 ATI Radeon HD 2000/3000/4000系列显卡的用户还不是特别有用,毕竟它还没有达到 glxgears milestone(注:大概是硬件加速 Glxgears 的意思)。不过,夏末的时候它有可能达到应用的地步了。

via: Open-Source ATI R600/700 3D Driver Almost Working

标签: , 3 评论
24六/090

Arch Linux 消息三则

2.6.30 版内核移往 [core] 仓库

来自上游(Upstream)的修改:
http://kernelnewbies.org/LinuxChanges

来自 Linux 的修改:

- 移除了 acpi-dsdt-initramfs.patch,目前没有能够起作用的补丁,如果你需要一个自定义的 DSDT,请自行编译进你自定义的内核。

- 移除了 snd-pcspkr 模块 #14958

- 增加了 dccp #15071

- 增加了 SCHED_DEBUG=y

- 修改为 lzma 内核压缩算法

- 移除了 rt2500 模块,它已被内核驱动支持

portmap 被 rpcbind 所替代

[core] 仓库中的 portmap 已经被 rpcbind 所替代,rpcbind 有更多的特性,例如 ipv6 和 nfs4 的支持,请相应地修改你的 /etc/rc.conf 文件。

nfs-utils 重要更新

NFS4 支持现在已被应用。

这是一个相当重要的更新,你将不得不手动修改配置文件。

/etc/rc.conf 守护进程(daemons)修改:

1) 修改 portmap 为 rpcbind

2) 修改 nfslock 为 nfs-common

3) 修改 nfsd 为 nfs-server

NFS(客户端和服务器端)扩展配置在:

/etc/conf.d/nfs-common

/etc/conf.d/nfs-server

请根据需要自行修改。

标签: 没有评论
   下一页