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

8五/1019

神秘软件 Yaner 截图

我就发图,我不说话。

yaner-main.png
yaner-normal.png
yaner-bt.png
yaner-metalink.png

8五/102

两个新的 pacman 外壳:clyde 和 packer

Linux 独特的 包管理器是其备受亲睐的原因之一,作为一款命令行包管理器,它深谙 K.I.S.S. 原则,在使用上甚至比很多图形界面的包管理器还要强大,还要方便、直观。

然而,Arch 的用户总是挑剔的,总是希望日常使用的包管理器更加的 Simple and Stupid,于是有了 pacman-color、yaourt 等等,种种扩展、外壳更是把 pacman 武装成了神兵利器,再加上如我一般的用户更是用 alias 将各种命令简化,简简单单的 ysyu 命令就更新了整个系统,实在是把 Linux 下的包管理简化到了一个极点。

不过,总是有更加挑剔的用户,Linux 世界才有这么多的优秀软件,据我所知,今年又有两个 Arch 用户不满 yaourt 的缓慢、低效、丑陋(虽然我没感觉),开发出了两个新的 pacman 的外壳(wrapper):clydepacker

Clyde 由 DigitalKiwi 和 Ghost1227 开发,主要是不满基于 Bash 的 yaourt 太过缓慢,和对 支持的低能。他们希望使用小巧快速的 Lua 语言重写一个 wrapper(底层用 C 编写),能够提供多线程下载的支持,并且容易在此基础上构建图形界面包管理器。

Clyde.png

Clyde 保留了 pacman 和 yaourt 的选项用法,界面也很类似,使后两者的用户更加容易迁移,开发者表示,Clyde 已经足够稳定来应付日常使用,“不过如果它破坏了你的系统,烧坏你的主板,吃了你的孩子,可不要找开发者算帐,警告过你了哦!”

Clyde 可以通过 AUR 安装,软件包名 clyde-git。

packer 的开发者是 bruenig,他开发 packer 的主要目的是整合 pacman和 AUR,看来也是对 yaourt 对两者分别处理,还在不必要的时候对 pacman 来回调用、拖慢速度十分不满。

作者认为 packer 主要实现四个 pacman 和 AUR 的整合功能就可以了:搜索(-Ss)、查看信息(-Si)、安装(-S)、升级(-Su),在这四个功能上做到 pacman 和 AUR 一视同仁。

packer.png

如果你对 packer 感兴趣,可以从 AUR 里面安装 packer,或者 nightly 源里面也可以。

8五/102

简单实现 Python 有序字典(Ordered Dict)

的 Dict 类型很好用,不过有一点可惜就是它的 keys() 是乱序的,想要用它来保存有序的 key-value 对(比如配置文件)就比较困难,碰巧我的毕设就要用到这样一个类型来存放配置文件,怎么办呢?
搜索了一下,Python 2.7 / 3.1 才有 Ordered Dict 的支持,我总不能去 Python 源码里面拽吧……
还有些方法比较陈旧,继承自 UserDict,不支持 iter*() 系列方法,虽然不碍事,不过心里还是不舒服。
不过找来找去,还是让我找到了相对比较简洁,功能有符合要求的代码,见下:

from UserDict import DictMixin

class odict(DictMixin):

    def __init__(self):
        self._keys = []
        self._data = {}

    def __setitem__(self, key, value):
        if key not in self._data:
            self._keys.append(key)
        self._data[key] = value

    def __getitem__(self, key):
        return self._data[key]

    def __delitem__(self, key):
        del self._data[key]
        self._keys.remove(key)

    def keys(self):
        return list(self._keys)

    def copy(self):
        copyDict = odict()
        copyDict._data = self._data.copy()
        copyDict._keys = self._keys[:]
        return copyDict

代码来自 ActiveState ,PSF 许可。

标签: 2 评论