温故而知新

也许很多人将孔子所说的“温故而知新”理解为:温习学过的知识,从中获得新的领悟。但是,我更倾向于另一种解释:温习学过的知识,继续学习新的知识。本文借助一个更加平易和现实的示例用以温习文档 [1-3] 中的 GObject 知识,并进一步学习类与对象的方法。

继续阅读

zeitgeist 试用

Gentoo Portage 中出现了 zeitgeist,版本是 0.7.0,便 emerge 了一下,确切的说,是开启了 fts 这个 USE Flag 之后 emerge 的。

继续阅读

GObject 子类私有属性的外部访问

之前,写了一篇 GObject 劝学的文章 [1],还有两篇有关 GObject 子类对象数据封装的文章 [2, 3]

虽然,创建一个 GObject 子类对象需要一些辅助函数和宏的支持,并且它们的内幕也令人费解,但是只要将足够的信任交托给 GObject 开发者,将那些辅助函数和宏当作“语法”糖一样享用,一切还是挺简单的。至于细节,还是等较为全面的掌握 GObject 库的用法之后再去挖掘!

现在,我们基本上知道了如何将数据封装并藏匿于 GObject 子类的实例结构体中。本文打算再向前走一步,关注如何实现在外部比较安全的访问(读写)这些数据。

继续阅读

GObject 子类对象的私有属性模拟

上一篇文章“使用 GObject 库模拟类的数据封装形式”讲述了 GObject 子类化过程,本文以其为基础,进一步讲述如何对数据进行隐藏,即对面向对象程序设计中的“私有属性”概念进行模拟。

继续阅读

使用 GObject 库模拟类的数据封装形式

上一篇:要相信 GObject 是有用并且简单的!

事实上,有关 GObject 库的学习与使用,GObject 库参考手册提供了一份简短且过于晦涩的指南。如果你能够理解它,那么完全可以无视这篇以及后续的几篇文章。倘若没有明白那份指南,那么建议最好能克制一下,先不要急于去做文档 [1] 中所列举那些探索,谨记 Knuth 所说的,过早优化是诸恶之源。

这篇文档主要讲述如何使用 GObject 库来模拟面向对象程序设计的最基本的要素,即基于类的数据封装,所采用的具体示例是一个双向链表的设计。

继续阅读

要相信 GObject 是有用并且简单的!

很多人被灌输了这样一种概念:要写面向对象程序,那么就需要学习一种面向对象编程语言,例如 C++、Java、C# 等等,而 C 语言是用来编写结构化程序的。事实上,面向对象只是一种编程思想,不是一种编程语言。换句话说,面向对象是一种游戏规则,它不是游戏。GObject 告诉我们,使用 C 语言编写程序时,可以运用面向对象这种编程思想。

阅读全文

那个遗传算法的继续改进

本文是“Hello,遗传算法!”的续集。

想了一下,还是决定把种群的最佳个体从历史课本里拿出来,用它来替换每一代种群中最差的个体。虽然这样做容易导致局部最优个体的基因片段会急速增加从而使进化有可能限于局部解,但是我们可以通过增大变异概率的方法来提高种群中个体染色体的多样性来帮助种群跳离局部最优。

继续阅读

HELLO,遗传算法!

这篇文章讲述如何利用遗传算法解决一个二元函数的最大值求解问题。由于我对遗传算法的理解还处于菜鸟级别,所以本文所讲的方法以及所写的程序不一定 正确。之所以写这篇文章,是因为我已经烦透了教科书或论文里对遗传算法那么刻板的叙述,所以很想写一篇稍微轻松一点的入门文档,娱乐一下。

继续阅读

gnome shell 的工作区是按需分配的

前两天玩 gnome 3 的时候,对 gnome shell 的桌面工作区不是很满意,但是出于吹捧 gnome 3 的需要,没声张。刚才更新了一下 gentoo gnome overlay 里的 gnome-shell-9999,发现工作区功能改进了。

继续阅读

GLib 学习笔记(未完成)

用 ConTeXt MkIV 排的,源文档及 pdf 位于 http://code.google.com/p/way2ctx/downloads/list

继续阅读