CWEB 不权威指南

为了准备上次所说的 Haskell 文学编程项目,这两天浅尝辙止的学习了一点 CWEB 的知识,勉强可以进行 C 语言的文学编程了。

继续阅读

Cikada 0.5 发布

自从版本 0.0.2 发布后,工作和学习上的事情比较多,所以一直未进行更新。上个月,决定要将以前的设计推倒重来之后,这一个多月的时间里将全部的代码重写了一遍,现在又基本上可以用了,功能也多了一些。

继续阅读

可以监视目录变化的小程序

这是我在写 Cikada 时遇到的一个小问题,发现利用 GIO 库的 GFileMonitor 类与 GLib 提供的 GMainLoop 主循环可以很方便的解决它。

继续阅读

将 Cikada 推倒重来

很长一段时间以来,因为要处理的主要矛盾太多了,Cikada 这种次要矛盾只好推到一边,虽然它是我最想做的一件事情。这是 Cikada 项目自发布 0.0.2 版本之后一直都没什么进展的主要原因。

虽然这个项目搁置了好久,但是也不是坏事情,在这段时间中我对报告中的演示需求有了更多的体会。下面是一些粗略的新的规划:

  • 去掉那个时钟模式的概览视图。主要因为用了一段时间感觉很不方便,观看进度时画面是不应该切换成概览模式的。
  • 保持只有“淡入/淡出”的页面切换效果不变。
  • 提供演示文档的“剧本”支持。基本思想是:演示文档的每一页,用户都可以将其视为演员,可通过“剧本”来控制文档主题树、演讲时间,甚至添加一些辅助文本、图形与视频。
  • 报告的进度应当直接呈现在演示画面当中,并且进度的测度不应当由当前页数与总页数的比值来表示,应当将其表示为预期的报告时间以及各个页面对应的报告时间。
  • 分段加载页面时,在各段的起点时页面切换会出现停滞,决定使用一个线程负责页面切换,另一个线程负责预加载页面。
  • 以树状图的形式建立概览视图,这样可以快速的跳转到各个子主题。

C 库的编写 [2]

这是有关 C 库编写经验的一系列文档的第二部分,讲述了事件处理、主循环、同步与异步 I/O 等功能的实现经验。原文见:http://davidz25.blogspot.com/2011/06/writing-c-library-part-2.html

本文只是对原文的不完全翻译及意译,对其中所有错误不负任何责任。

继续阅读

C 库的编写 [1]

这是有关 C 库编写经验的一系列文档的一部分,原文见:http://davidz25.blogspot.com/2011/06/writing-c-library-part-1.html

本文只是对原文的不完全翻译及意译,对其中所有错误不负任何责任。

继续阅读

基于 ASCIIMathML.js 的 is-programmer 博客数学公式书写及显示

本来是为了解决实验室内部 Wiki(基于MoinMoin 引擎)的数学公式支持问题,在 MoinMoin 官方 Wiki 上看到了基于 ASCIIMathML.js 的解决方案,感觉这种方案要比使用 TeX 引擎更好一些[1]。当然,缺点也不是没有,最大的问题可能是这种方案需要网页的浏览者安装一些字体或软件。不过,由于网络上创造内容的人通常是无偿的劳动,如果浏览者觉得能够从所读内容中有所收获,他们也不至于懒到无动于衷的地步。所以,基于 ASCIIMathML.js 的数学公式支持所能带来的好处应当远大于它的缺点。

下面我根据实验室内部 Wiki 的解决方案,谈一下让 is-programmer 博客通过 ASSCIIMathML.js 获得数学公式支持的方法,希望对 is-programmer 博客的其他用户有所帮助。

继续阅读

有趣的 M4

通过一个示例演示了 GNU M4 的基本用法。

阅读全文

在 X11 中实现 GTK+ 3 的 OpenGL 支持

最近,开始思考 GTK+ 3.0 的 OpenGL 支持的问题。由于 GtkGLExt 现在还不支持 GTK+ 3.0,其维护者对此没有任何表示。现在最务实的办法是使用 clutter-gtk 库,通过 Clutter 的底层库 Cogl(OpenGL 的面向对象封装)在 GTK+ 3 的 Widget 中绘制 OpenGL 图形。但是,目前 Cogl 功能尚不完善,例如不支持用户自定义帧缓存格式,缺乏光照支持,以及图形渲染方式过于单调,仅支持顶点缓存(Vertex Buffer)渲染。考虑到 GTK+ 在 X11 是通过封装 xlib 实现的,而 xlib 可通过 GLX 实现 OpenGL 支持[1]。因此,通过 xlib 与 GLX 结合的途径,理论上必然可实现 X11 环境中 GTK+ 3.0 的 OpenGL 支持。

继续阅读

那个遗传算法的继续改进

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

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

继续阅读