星际译王 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:考试完成,一身轻松!

使用 gtkaml 编写 GTK+ 界面

想必大家对 GTK+ 跑在 HTML5 上 已经不感到惊讶了,那么用 XML 编写 GTK+ 界面呢?好吧,Glade 是这样做的,不过今天介绍的不是它,而是 gtkaml。 按照 官网的介绍 ,gtkaml 是基于 Vala 的一种标记语言,旨在使用简洁的 XML 语法来描述 GTK+ 界面,乍看起来和 Glade 没有什么区别。 不过 gtkaml 采用的是类似于 Glade 2 的转换代码方式,将 XML 转换成 Vala 代码再进行编译。不过,不用担心图形界面和实际代码分离的问题,因为 gtkaml 在 XML 中预留了 Vala 代码的空间,也就是说,你不需要面对自动转换得到的很可能难懂的代码进行修改,而只需要在...

为 Chromium 调教的 Google Reader

今天把 Firefox 换成了 Chromium,当然要搜搜 Chromium 的技巧什么的,之前在扩展网站上看的 Google Reader 的扩展都略过了,直到看到谷奥这篇《 当 Google Reader 遇上 Chrome——打造 GR 专属浏览器 》,才猛然发现, Chromium 上面居然有这么多神奇的扩展,比 Firefox 上的 Better GReader 要强上不少(油猴用户请无视),具体的配置在这里就不说了,看文章自己了解吧。 上图,还能认出 Google Reader 么?

从 Firefox 到 Chromium

以前不是没有试过 Chromium,当时好像还是 5 或者 6,体验一下,发现扩展程序很不全,功能也很单一,于是不得不放弃。 这次的起因是更新了 AUR 中的 Chromium 10 之后,所有链接都莫名其妙从 Chromium 中打开,即使把 Firefox 设置成默认浏览器也不行,于是就想, Chrome OS 都出了,不知道 Chromium 现在神马样子了,试试看吧。 到 Google 浏览器扩展程序的官网上狂找一通,发现 Chromium 的扩展已经很全很完善了,Firefox 上面的扩展基本都能找到替代,功能有些比 Firefox 上面的还要强,比如 AdBlock,居然支持这样过滤广告: 在翻 Wall 方面, Proxy Switchy! 和 AutoProxy 的 list 结合实在是不二之选,详见 这篇文章...

关于 Linux 内核的几篇心得

这学期学业繁忙,一直没什么时间更新博客,不过由于学校开了不少 Linux 的课程,对 Linux 的学习和研究可是一点也没有落下哦。 其中一门课程是《Linux 操作系统分析》,推上的同学可能想起我之前说过的用 Kubuntu 的女老师了,没错,就是她! 讲得如何精彩在此就不详述了,有兴趣的同学可以访问 她的主页 ,里面还有全套的课件可供下载。 这里分享几篇我的作业,也就是老师主页上所说的 Project,希望对内核初学者有所帮助: x86 架构下 Linux 的启动过程分析 Linux 进程调度和切换过程分析 Linux 中进程创建分析 X86架构下Linux的系统调用分析 Linux定时器的使用与分析 当然,我也是初学,由于水平有限,分析得很浅显,有些不懂的问题也不方便在作业中列出,因此或是忽略掉,或是不懂装懂掉了,希望不要对人产生误导才好……

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

首先得说明,这个不是 GNOME 官方的计划,而是 Elementary 项目的一部分。 相信 nautilus-elementary 大家都很熟悉了,这个 Nautilus 的修改版,为 GNOME 用户提供了一个更加美观易用的文件管理器。不过, Elementary 小组为 Nautilus 做的一些修改被上游认为是 Hacks 而迟迟不被接受,现在,他们终于开始研究自己的文件管理器了! Marlin 采用 Vala 编写界面,而 C 用来编写底层函数。在界面的编写上,使用了 GTK+ 3 和其他的 GNOME3 的时髦技术;而在底层上,Marlin 则从 Nautilus 和 Thunar 里面“偷”了些代码。加上 Elementary 自己本身特长的发挥,相信 Marlin 相较于 Nautilus 会在多个方面有所突破!...

Compiz 0.9.2 发布

在使用 C++ 重写,而又沉寂了一段时间之后,Compiz 开发小组发布了新的 Compiz 0.9.2 版本,虽然仍然是实验性的版本,不过根据作者所言,这个版本已经可以用于日常应用。在 Arch 下安装新版 Compiz 的方法见这里。 这个版本修复了大量的 BUG,并且带来了一些新的特性: 新的 MultiAnim 类,帮助在动画中创建窗口图像的多个拷贝 查看最小化窗口的实时预览 (实验性的) 重写了“群组(Group)”插件 缩放(Scale)插件的 自然(Natural) 模式 简化 阴影在装饰器(Decorator)中的存储 此外,计划中的 0.9.4 具有如下特性: (通过 MPX 和 UTouch)支持多点触摸和多点输入 动画框架,允许插件轻易地创建动画,或者使用其他插件提供的动画 将插件编译进核心,大幅提高速度 PS:此版本发现了一些 BUG,稍后会发布 0.9.2.1 版本。 PS2:Ubuntu 11.04 将使用...

Arch Linux 下 Android 源码下载与编译

最近工程实践的老师让我把 Android 环境搭建起来,并且将界面换成黑白的,算是一个考验,这里就记录一下具体的做法。 Android 源码以前没有注意过,一直以为是 git 管理,看了一下文档,才知道 Google 在 git 上面又加了一个叫做 repo 的工具,用来管理大量的 git 仓库。 repo 这个工具在 AUR 里面有,叫做“repo-git”,首先要把这个工具安好。 按照 官网的下载说明 ,安装下面几个包:gperf sdl esound wxgtk valgrind,当然 base-devel 这个 group 也肯定都要装的了。64 位系统还要装 lib32-readline 和一些其他 32 位包,不过因为我装了 wine,所以所有依赖包都已经装好了。 官网说只能用 jdk5,不过我克服万难从 AUR 上安装好老掉牙没人管的...

学生用户 Dropbox 容量翻倍!

Dropbox 现在在搞活动了,看到推上还没有人说,赶紧告诉大家。 Dropbox 现在正在针对学生用户(准确说是 .edu 用户)开展活动,只要收封邮件激活一下,就可以将现有的容量翻倍(最多到 18G),而邀请他人所获得的容量也会翻倍(500M/用户,最多获得 16G)。 本人有学校分配的 .edu 邮箱,很容易就获得了超大容量,大家也赶快上吧~ 活动页面: https://www.dropbox.com/edu 另外,还没有 Dropbox 的同学赶快申请一个吧,我已经受到 Dropbox 很多好处了,以前系统误操作格式化掉,很容易就从网上恢复回来,另外,不同机器之间迁移、朋友间共享文件也变得很方便。从 我的邀请链接 进入,可以额外获得 250 M 流量哦!

使用 dbus-python 建立单实例进程

D-Bus 是 Linux 系统上广泛应用的消息总线,是 Linux 桌面程序常用的消息通信机制之一,熟悉 Linux 编程的同学可能对它已经很熟悉了,不过对于我来说,看了好长时间文档才算有点收获,赶紧记录下来。 大家知道 #yaner 得是个单实例(Single Instance)程序(不知道的同学赶紧知道),之前这种单实例的特性是由网上抄来的一段代码,用 Socket 的唯一地址实现的。功能虽然实现了,不过想要进一步扩展就比较难了,好吧,相比于 D-Bus,Socket 我更是一窍不通。 为什么要扩展呢?大家知道,作为一个下载器,是要支持浏览器滴,可是怎么支持浏览器呢?当然是浏览器来调用下载器的命令行。这样就要求,下载器是单实例程序的同时,运行其他实例的时候,不仅要提示用户已经有一个实例运行,还要从命令行接收参数,传输给之前存在的实例,这就需要进程间通信了。 下面就是一段简单的用 D-Bus 实现的单实例类,继承这个类的类都将获得单实例特性。目前它还没有通信相关的代码,将在后面加入。 import dbus import dbus.service import dbus.mainloop.glib class SingleInstanceAppMixin: "Single Instance Application" def __init__(self, bus_name): dbus.mainloop.glib.DBusGMainLoop(set_as_default = True) self.bus = dbus.SessionBus()...