26 marzo
记得一个月前我徒弟就报告过 RealPlayer 在 ubuntu 中光有图像没有声音的问题;没想到现在我自己却撞上了。好在经过反复的 Google,终于找到了下面的解决方法:
* 首先安装 ALSA OSS 驱动程序:
$ sudo apt-get install alsa-oss
* 然后编辑启动脚本 (/usr/lib/realplay-10.0.8/realplay) 并将第 73 行从
$REALPLAYBIN “$@”
改成
aoss $REALPLAYBIN “$@”
对于我自己的 feisty fawn 而言,装的是 RealPlayer 10.0.7 版,需要修改的 realplay 文件中的那行位于第 70 行,而不是 73 行,呵呵。现在播放 .rmvb 文件终于有声音了!好棒哦~~~不必再通过用 VirtualBox 跑 WinXP 来看电影了,呵呵。
25 marzo
过去的这一周大部分时间用来找工作了,呵呵。好在工作比想象中的好找, 所以也没有花费我太多的精力。
这些日子在毕业设计项目上取得了以下进展:
- 为 Makefile::Parser 开辟了 gmake-db分支。
- 在 GNU make database 的基础上设计出了 GNU make AST 的结构。它由下列几个类组成:
- Makefile::AST
总的 AST 类,提供节点的添加与查询,比如 add_implicit_rule,apply_implicit_rules,add_explicit_rule,apply_explicit_rules,add_var,add_auto_var,get_var,还有许多其他工具函数,比如计算变量最终值的方法 eval_var_value,有关局部变量作用域 Pad 的 enter_scope 和 leave_scope 方法,等等。
- Makefile::AST::Rule::Base
它是 AST 中规则节点的基类,包含 normal_prereqs,order_prereqs,commands,colon 这些属性。
- Makefile::AST::Rule
该类表示非隐式规则以及隐式规则“应用”之后的形式,从 Makefile::AST::Rule::Base 继承,并新增了 target 和 other_targets 属性。
- Makefile::AST::Rule::Implicit
该类表示 AST 中的隐式规则节点,从 Makefile::AST::Rule::Base 继承,并新增了 targets,match_anything,is_terminal 等属性。
- Makefile::AST::StemMatch
该类封装了含 % 的文件模式的匹配与 stem 替换算法。
- Makefile::AST::Variable
它表示 AST 中的变量节点,包含 name,value,flavor,origin 等属性。
- 添加了 ast-basic.t,ast-rule.t,ast-var.t,和 ast-stem.t 脚本用于对 AST 及其相关类进行单元测试。
- 实现了 Makefile::Parser::GmakeDB 类,用于解析由
make -qp 命令生成的 GNU make database,并构造出对应的 Makefile::AST 对象(即 GNU Make AST).有趣的是,GNU make 生成的 database 报表也是完全合法的 Makefile 格式,而且只使用最最基本的语法结构,因此 Makefile::Parser::GmakeDB 直接使用 MDOM::Document::Gmake 进行解析。
- 实现了 Makefile::AST::Evaluator 类,用于按照 GNU make 的语义“执行”给定的 GNU make AST。
值得一提的是,包括显隐式规则的应用在内的拓朴图的构建算法其实大部分实现在了 Makefile::AST 及其子节点类中了。
- 将
`make -pq`,Makefile::Parser::GmakeDB,和 Makefile::AST::Evaluator 三者串联了起来,组装成了一个完整的 make 工具,即 pgmake-db.该工具可以运行基于 IPC 的 GNU make 测试集。目前已通过了 sanity/func-refs.t 测试文件中 95% 以上的测试用例。
下一周可能没有太多时间用来 hack 了,因为需要应付学校的结欠考试。但是顺着上一周的工作继续往下走应该是很容易的。我立刻能想到的工作有:
- 添加 Makefile::AST::Command 类,用于将 Makefile 命令相关的处理封装起来,并为之添加文件名和行号的属性支持(file 和 line).
- 为 Makefile::AST::Variable 类添加 file 和 line 属性,以便能通过 func-refs.t 中余下的那些测试。
- 让 pgmake-db 通过尽可能多的 GNU make 测试集,同时根据 GNU make Manual 设计更多的有关变量和规则应用的综合测试用例,从而不断地完善 AST 的结构以及 AST 执行组件(evaluator)。
07 marzo
从现在起,每周三我都将为毕业设计拟定下一周的工作计划,同时对前一周的相关工作进行总结。
过去一周已完成的工作
-
先后发布了 Makefile::GraphViz 0.11, 0.12 和 0.13 版,主要是旧内核的例行维护,包括 为 gvmake 脚本添加了有用的 -a 选项(从而能绘制 Makefile 中所有的根目标),以及修复了 RT bug #24828 和 #15070 。
-
开发了针对 Module::Install 的脚本 releng , 用于自动化 CPAN 模块发布前繁杂的准备工作。
我的 Makefile 项目涉及多个 CPAN 模块,每个模块需要发布的版本又是不计其数,因此 releng 脚本无疑会为我节省大量的时间。
-
基于 Linux::Smaps 开发了一个在 Linux 上统计任意 shell 命令所占用的最大内存量的脚本,名为 smem . 测试显示,Ubuntu 的 System Monitor 使用的也是来自 smaps 的内存占用信息。我在该脚本中首次实用了 Perl 的 fork 函数(一直想用都没用上,因为前面一直用的都是 Windows)。
鄙视 Linux 内核,因为至今它都没有完整地实现 getrusage 函数 , 从而使得 GNU time 在 Linux 上只能用来计时。同样的原因,CPAN 上的 BSD::Resource 在 Linux 上也没有太大的用处。
我的 smem 脚本可用于统计 Makefile 项目中各模块的内存占用情况。
下一周的工作计划