Ant-Veil

Caspar Blog

[备忘] 最近用到的一些技巧

| Comments

1. VIM 操作

VIM 在每行行首或行尾插入指定字符串:

行首 :%s/^/YOUR_STR/

行尾 :%s/^$/YOUR_STR/

删除^M 标记 :%s/^M$//g,^M 的输入方法为^V^M

2. Openoffice3.0 在 Ubuntu8.10 中不能输入中文

将 libstdc++和 libgcc 的 so 文件软链到 OOo 的 ure 路径下即可:

sudo ln -snf /usr/lib/gcc/i486-linux-gnu/4.3.2/libstdc++.so \
/opt/openoffice.org/ure/lib/libstdc++.so.6
sudo ln -snf /usr/lib/gcc/i486-linux-gnu/4.3.2/libgcc_s.so \
/opt/openoffice.org/ure/lib/libgcc_s.so.1

动态测试中的覆盖率问题

| Comments

覆盖率(Coverage)的定义如下:

Coverage = (Object executed)/(Total objects) * 100%

常用的覆盖率指标有很多,这里只介绍我看到过的其中三种:

语句覆盖率(Statement Coverage),也称作“行覆盖率(Line Coverage)”、“段覆盖率(Segment Coverage)”,用于评价测试的代码语句覆盖率。

判定路径覆盖率(Decision-Decision Path Coverage, DDP Coverage),用于评价代码分支的覆盖率。

修正条件/决策覆盖率(Modified Condition/Decision Coverage, MC/DC),这个比较麻烦,稍后详述。

周年记

| Comments

1 周年,100 篇日志,100 个 Feedsky 订阅,10 个 Feedburner 订阅(- -|||),2w 次访问,20w 的 Alexa 排名。

写 Blog 也算有些年了,03 年开始学习 HTML,想做个个人主页,由于美工功底差,做出来的主页惨不忍睹,一度放弃;04 年在杂志上了解到 Blog,开始写,不过直到 06 年为止还是什么都不懂的涂鸦阶段,这两年主要停留在两个 BSP 上,Blogcn.comBlog.com.cn,选择这两个 BSP 是因为它们的域名很 NB;06 开始到 07 年末,是辗转时期,Blog.com.cn 的服务器太慢,抛弃了之后去了新浪,新浪有短时间服务器也开始抽风,于是去了网易,网易之后又去了博客大巴,反正一顿辗转,总是找不到满意的 BSP。最后在yegle的教唆之下,选择了自建 Blog

在这个 Blog 之前的日志,大多是写自己的生活,只是我这人毛病有二,一是不喜欢让自己日志太散,所以一个博客废弃了就喜欢删文章;另一个是喜欢回头去看文章,看到写得太流水的文章也删。所以现在基本上已经找不到我当年的文字了。

写技术 Blog 也纯属是兴趣,还是要感谢monnand带我进入 Linux 这个伟大的世界,摆弄久了就想分享一些文字,所以就有了这个技术博客。

文章开头的那些数字是堆很普通的数字,我没有能力没有时间也没有想过让我的 Blog 成为公众关注的站点,自娱自乐,并且能让需要得到信息的朋友们获取需要的信息,足矣。

Amarok 2 and WP-2.7 Released

| Comments

等了好久的 Amarok2 终于发布了。

Ubuntu 用户可以参考 Kubuntu 网站上的 Installation Instructions:

1. Follow the Kubuntu Repository Guide to enable Recommended Updates (backports) and add the following to your 'Third-Party Software' tab:

deb http://ppa.launchpad.net/kubuntu-members-kde4/ubuntu intrepid main

2. You can now update an existing Amarok 2 installation to the most recent version using the Adept Updater tool in your system tray.

If you do not have an existing Amarok 2 install, please follow the Adept How to and install the package called "amarok-kde4".

国内的网站服务商啊……

| Comments

今天去看了一下我在网易的一个帐户,发现"sword*****"这个帐号终于被删除了。曾经就一顿诟病国内的服务提供商,只提供帐号注册服务,却不提供帐号注销服务,像 163, sina, sohu, baidu,都有点像“这地方你想来就来但可不是想走就能走”的意味。看看 Google, Yahoo,他们做得多好……

前面提到的那个帐户是去年 7 月开始停止使用的,后来似乎间间断断又登录了几次,估计网易就是看着我的帐户已经一年没登录过了,所以就删除了。曾经在网易和新浪的帮助里面看到他们说 90 天不登录就会删除帐号,看来确实是假的。

顺便说一句,163 的 POP3 地址似乎改了,改成了 pop3.163.com,以前都是 pop.163.com,今天早上 Gmail 提示不能从 163 邮箱收邮件,然后就看了看。以前很少有邮箱的 POP3 地址是 pop3 开头的,不知道网易此举是什么意思……

[周末休闲] God Wrote in LISP

| Comments

这是一首灰常有意思的歌曲,翻唱自 Julia Ecklar 的"God Lives on Terra"。

可以看看这里了解一下这首歌曲的歌词:http://www.gnu.org/fun/jokes/eternal-flame.html

GNU 社区还推荐了很多有意思的东东,可以去http://www.gnu.org/fun/humor.html查看,作为一个 Linuxer 和一个 Programmer,这些内容可算是相当不错的休闲佐料了~

顺便试一下 WP 的 1bit 插件:eternal-flame

囧,居然不支持 ogg 格式的播放……传个 MP3 格式的算了,ogg 格式下载点此

附上歌词一览:

Python Web 操作 MySQL 乱码问题的解决

| Comments

乱码,身为 CJK 语言国度的程序员永恒的主题……

乱码,在 stardict 里面查了一下翻译,居然出来这么一长串:

characters changed to be irrecognizable because different coder or other reasons

不管怎么说,这次是又碰上乱码了。

症状是这样的,写了几个 psp 文件,内容大概是通过 POST 方法从表单获取数据,写入数据库然后另一个页面调用数据库内容显示。结果在写完之后调用显示页面,提示错误:unicodeDecodeError: 'ascii' codec can't decode byte,看来是因为我数据库里的字段用了中文,显示不出来,然后在 MySQL 里面 SELECT * 了一下,发现含中文的内容都是???字样的乱码(以前怎么就没注意捏……)。

上网搜,发现了这个网页:http://blog.csdn.net/foyuan/archive/2007/07/27/1711100.aspx,文中提示了四个步骤确保乱码消失。

经典信号量例题“抽烟者问题”的 C 语言实现

| Comments

问题描述:The Cigarette-Smokers Problem. Consider a system with three smoker processes and one agent process. Each smoker continuously rolls a cigarette and then smokes it. But to roll and smoke a cigarette, the smoker needs three ingredients: tobacco, paper, and matches. One of the smoker processes has paper, another has tobacco, and the third has matches. The agent has an infinite supply of all three materials. The agent places two of the ingredients on the table. The smoker who has the remaining ingredient then makes and smokes a cigarette, signaling the agent on completion. The agent then puts out another two of the three ingredients, and the cycle repeats.

问题分析:通过问题描述,可以构建出一个 4 进程的系统,其中 3 个进程为 smoker 程序的实例,另一个是 agent 程序的实例。首先,Agent 执行提供材料的操作(原则上来说,抽烟者先就座等待也是可行的,代码上也易于实现,但是我编写了一段代码发现很累赘,这作为一个需要改进的部分,暂时在代码中做 TODO 标记),然后执行对 Smoker_i 的 V 操作唤醒 Smoker_i,其信号量增 1,i 的值由 Agent 随机确定。接着,Agent 开始等待,进程切换到 Smoker_i,Smoker_i 执行 P 操作,信号量减为 0,开始获取材料,卷烟,抽烟操作。抽完烟后 Smoker_i 执行 V 操作,通知 Agent,然后 Smoker_i 循环至开头,开始等待,进程切换回 Agent。Agent 也开始循环,如此周期往复。采用同步机制的 PV 操作伪码如下:

推荐: 飞信手机 3.0 体验版

| Comments

Summer 大人告知,飞信手机版已经有 3.0 测试版了。我最关心的问题是 3.0 版本能否支持震动提醒,其原因是我在教室上课的时候开着飞信,关闭了声音提示,结果某慕老是说我不回短信,我不是没收到提醒么……

前往这里查看,果然有 3.0 的测试版了,查看了下我的 N81 在支持列表上,可惜下下来之后是 N95 的,不过装好后能正常使用。

体验了一把,感觉相当 cool,类 iPhone 的界面(配在 N95 上确实会显得更合适),进飞信界面之后不是像 2.0 版本一样直接出聊天窗口,而是有一个集成界面,包含了设置、聊天、电话簿管理、资讯、掌上营业厅等功能,不过对我来说这些功能都是偶尔用到而已,我更关心的是飞信聊天。

震动提示果然有了,而且可以和手机情景模式关联了。就凭这一点,我就毫不犹豫地换下了原来的 2.0 版本。

不过毕竟是测试版,刚用了半个小时,就发现了好多 BUG,等下去社区提交吧,对这个版本还是非常期待的~~