Archive for November, 2007

smart-snippet update: skip field with the same name

Friday, November 30th, 2007

Consider the following snippet for TeX:

1
2
3
\begin{$${env}}
$.
\end{$${env}}

You may want to fill env and go directly to $.. But pressing TAB will bring you to line 3, and then line 2 — where you want to go. Here the problem is when you’ve filled a field, what’s your next action by pressing a TAB?

  1. If there’s next field, go to that field.
  2. If there’s no next field, exit the snippet — go to the place marked by $. , or the end of snippet if no such marker.

Read the rest of this page »

org-mode 中打开链接

Thursday, November 29th, 2007

最近在准备在下次 Linux World 2007 @ ZJU 讲座的 Presentation ,其中有一个 video ,想在 org-mode 里面直接打开。org-mode 处理链接的能力还是比较强的,按 C-c C-o 打开链接

  • 如果是文件内部链接的话,它会直接跳到那里。
  • 如果是普通文本文件,会直接用 Emacs 新开一个 buffer 打开。
  • 其他各种类型的文件都会用合适的程序打开。例如我在 Debian 里装了 xloadimage ,它会用这个程序来打开图片。

不过当我打开 video 的时候它选择了 gmplayer ,而不是 mplayer 。我自己不太喜欢 gmplayer ,想换成 mplayer 。其实要定制也很方便,只要修改 org-file-apps 变量即可。可是我并没有在里面看到 gmplayer 的字样,所以对其处理办法有些好奇,决定一探。

Read the rest of this page »

Emacs Timeline

Thursday, November 29th, 2007

我曾经在我的 wiki 上帖过一个 Emacs 的 Timeline ,最近收集资料的时候想找新版本的 Timeline ,正好找到了画这个 Timeline 的作者:Jamie Zawinski ,他画的 Timeline 已经有更新了,把最新发布的 Emacs 22 也包含在了里面。我把他转帖过来了:

Read the rest of this page »

smart-snippet.el update: properly undoing in a snippet

Wednesday, November 28th, 2007

A user of smart-snippet reported a bug to me today. The behavior of undoing in a snippet is confusing. In fact I’ve noticed this bug a long time ago, even before I write smart-snippet.el — it’s a bug if snippet.el . But I never try to fix it, I thought it might be impossible or at least difficult to fix.

However, when I open my mailbox and receive a new mail asking for help of this bug. I suddenly feel that I should fix it, or at least try to. Then I sit down and open my Emacs. Only after a few minutes, the confusing behavior is gone! It’s very simple!

That’s it, you know, sometimes it’s not that we can’t solve the problem, it’s just that we are too lazy to even try to solve it. So never doubt about yourself. Make a decision. You can do it!

And the last point: It’s really happy to see many people using and enjoying your software! :)

关于抢 IP

Sunday, November 25th, 2007

忘记从什么时候开始,蓝田的 ip 严重不够用了,如果是晚上再开电脑的话,基本上就申请不到 ip 了,争夺非常惨烈。有时候申请不到 ip ,也很郁闷地想“抢”一个 ip 来用用,可惜我不知道方法。最近突然去图书馆借了那本《计算机网络,自顶向下方法和 Internet 特色》来看了看,大致上明白了其中的过程。

Read the rest of this page »

Emacs 生存指南

Wednesday, November 21st, 2007

Emacs 生存指南
pluskid
2007 年 11 月

作为一个历史悠久的程序,网上有不少相关资料,总结一下,大致可以分为一下几类:

  • 电子书:例如 O’ Reilly的《Learning GNU Emacs》以及 Sams系列的《Sams Teach Yourself Emacs in 24 Hours》等,从头至尾系统地讲解了 Emacs 的方方面面,非常详细。
  • 文档:Emacs 自带了有交叉索引的文档,其中还包括 Elisp 介绍以及详细文档等,在 Emacs 里查阅非常方便。
  • Blog 文章:多是介绍一些特性或者技巧之类的,比较零散。
  • 个人笔记:这方面有许多中文资料,例如王垠的笔记叶文彬的笔记以及我自己的一些笔记等等。相对于 Blog 文章要稍微系统一些。
  • Wiki 形式的资源:如 Emacs WikiThe very unofficial dotemacs home 等,由不同的用户贡献的内容,比较全面。

不过我觉得其中似乎还有一个空缺。学习用一个编辑器,如果专门照着一本书去学,多少有些不必要,一来有些枯燥,二来写书需要照顾所有人,同时却又是众口难调,对自己来说有些东西根本用不到,学了不用也会很快忘记的。大多是看一个入门的东西,大概上手了,需要用的地方才花心思去 Wiki 呀、别人的笔记等地方找找资料、查查文档之类的。

但是从入门到能够自己轻松地自己查阅资料进阶学习似乎还是有一段距离,比如别人介绍 setnu.el 和 setnu+.el 可以让 Emacs 显示行号,说了半天却没有说如何安装,或者说了放到 load-path 下,你却不知道什么是 load-path 。总是有这样类似的一些问题阻止大家深入,抹杀了继续使用的热情。我觉得主要还是缺少一个引导大家从入门级别到 serious Emacser 的文档。所以我写了这篇文章,希望能有所帮助。

Read the rest of this page »

纪念 cc98 威望彩蛋关闭

Tuesday, November 20th, 2007

今天去 cc98 Linux 天地版,看到阿杆发的一个帖子,说起 quark 泄露了威望彩蛋的事情。去的时候已经有四五页的帖子了,基本上就是技术组的几个人和 Linux 版上的一些人在争吵,吵着似乎有些跑题了,都在谈论态度,甚至有人身攻击的倾向,及其不和谐啊。也许是我老了,我不太明白大家为什么发这么大的火,不过这次的事情我自己也有份,所以也连忙去劝解。

Read the rest of this page »

售后服务的感想

Monday, November 19th, 2007

今天在 Bill Clementson 的 Blog 上看到一篇关于苹果公司售后服务的文章。他三年前买了一个 Mac Book ,最近屏幕上出现了一个细条,他拿去修理,那边的人告诉他屏幕需要更换,可是暂时缺货,他便准备先凑活着用。第二天那边打电话来告诉他可能 LCD 显示屏段时间内还到不了货,他这个问题无法及时得到解决,因此他可以用他的旧的 Mac Book 来换一个全新的 Mac Book Pro 。CPU 是从 1.67 GHz PPC 到 2.4 GHz Intel Core 2 Duo ,内存是从 1 GB 到 2 GB ,硬盘是从 100 GB 到 160 GB 。只是因为维修部件暂时缺货,不能及时解决用户的问题,所以干脆给用户换了一个全新的。

这种对待客户的态度,真是让人觉得非常舒服啊,难怪会有 The Cult of Mac 。我最近也经历过一次“售”后服务,虽然没有像 Bill 那样得到一个 Mac Book Pro ,不过我真的觉得好的服务是一个好的公司所必须的。

Read the rest of this page »

回忆录:KDB2

Saturday, November 17th, 2007

Memory Barrier

Thursday, November 15th, 2007

今天在 freecity 的 DistributedSys 版看到在讨论 memory consistency 的问题,潜水的时候看到 shifan 给的两篇文章,其中一篇 barrier 中有一个例子,就是在没有 barrier 的情况下顺序乱掉了,对这个东西一直一知半解,所以也决定实践一把,就照着类似地写了一个程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <windows .h>
#include <stdio .h>
 
#define ITERATIONS 500000000
 
typedef volatile unsigned int T;
T var1 = 0;
 
DWORD WINAPI writer(T *pvar2)
{
	while (1)
	{
		var1 = var1 + 1;
		*pvar2 = *pvar2 + 1;
	}
	return 0;
}
 
DWORD WINAPI reader(T *pvar2)
{
	SYSTEMTIME begin, end;
	unsigned int i, failcount = 0;
	double seconds;
 
	GetSystemTime(&begin);
 
	for (i = 0; i < ITERATIONS; ++i)
	{
		unsigned int v2 = *pvar2;
		unsigned int v1 = var1;
		if (v2 > v1)
			++failcount;
	}
 
	GetSystemTime(&end);
 
	seconds = (end.wMinute*60 + end.wSecond + end.wMilliseconds/1000.0)
		- (begin.wMinute*60 + begin.wSecond + begin.wMilliseconds/1000.0);
 
	printf("in %2.1lf seconds, failure count = %u(%2.1lf%%)\n",
			seconds,
			failcount,
			100.0 * failcount / ITERATIONS);
 
	return 0;
}
 
int main()
{
	T var2 = 0;
	HANDLE htwriter, htreader;
	htwriter = CreateThread(NULL, 0, writer, &var2, 0, NULL);
	htreader = CreateThread(NULL, 0, reader, &var2, 0, NULL);
 
	WaitForSingleObject(htreader, 1000000);
 
	return 0;
}</stdio></windows>

Read the rest of this page »