Life is either a daring adventure, or nothing.
-- Helen Keller

Break Your Limit And Reach What Is Beyond

周二写的视听说演讲作业,经过英语母语者修改后我自己再编辑的,现在应该没什么语法错误了。

“Creativity is a talent that some people have and others do not.”

My English speech assignment is to comment on this sentence. Please correct it on grammar and suggest a more native usage of the language.

I do believe people have different innate abilities, including creative thinking. But I don't agree that talent is everything. One's achievements depend on many factors, not only talent. In fact, so-called talent may be the least contributing factor to a person's success, or even a limit to further studies.

We can't see anyone is great just because of his or her talents. Rather than that, we can see many people succeed by their hard work. As Issac Newton said, "If I am anything, which I highly doubt, I have made myself so by hard work." So I think the word "talent" is a word to describe the ability to achieve something great through one's hard work.

Therefore, I think creativity is an ability that we can learn. Even though you may have some talent, you also need to learn how to use it. Pasteur, who is a French chemist and microbiologist, once said, "Luck favors the prepared mind." Maybe you need luck to get inspirations, but how do you recognize good ideas and how do you turn them into really good works? The only way is to study and work hard.

I believe everyone has some talent in the form of creativity or something else. Maybe talent is just the starting point. Some people may think that talent is an invisible limit on your achievements, but even if it is, you'll come closer to this limit the harder you work. Maybe one day, you'll even break your limit and reach what is beyond.

gmailto bash script

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
#!/bin/sh
usage()
{
    echo "Compose email in gmail for mailto-url in default browser"
    echo "Usage: $0 mailto-url"
    echo
    echo "Example: $0 mailto:joe@example.com?cc=bob@example.com&body=hello"
    echo "Note: mailto-url should be url-encoded"
}
MAILTO_URL=$1
 
#Parse mailto URL
export TO=$(echo "$MAILTO_URL" | grep -oE "mailto:[A-Za-z0-9@\_\.\-]+" | cut -d ':' -f 2 )
export CC=$(echo "$MAILTO_URL" | grep -oE "(^|[?&])cc=[^&]+" | cut -f 2 -d "=" )
export BCC=$(echo "$MAILTO_URL" | grep -oE "(^|[?&])bcc=[^&]+" | cut -f 2 -d "=" )
export SUBJECT=$(echo "$MAILTO_URL" | grep -oE "(^|[?&])subject=[^&]+" | cut -f 2 -d "=" )
export BODY=$(echo "$MAILTO_URL" | grep -oE "(^|[?&])body=[^&]+" | cut -f 2 -d "=" )
 
PROVIDER_URL="http://mail.google.com/mail/?view=cm&fs=1&to=$TO&su=$SUBJECT&body=$BODY&cc=$CC&bcc=$BCC&tf=1"
 
case "$1" in
    "" | "-h" | "-help" | "--help" | "usage")
    usage
    exit 1
esac

这个脚本配合 xdg-open, xdg-email 使用,让 gmail 成为 mailto: 链接默认的写邮件工具。

Ubuntu 下编译安装 mldonkey

没什么特别的,就是要注意一下依赖性的问题。这里以 2.9.6 版本为例来说明。

去 mldonkey 主页 http://mldonkey.sf.net/ 下载源码,解压缩:

1
2
tar -xvf mldonkey-2.9.6.tar.bz2
cd mldonkey-2.9.6/

解决依赖性问题。一般来说,会遇到 O’Caml 和 Zlib 的依赖性问题。O’Caml 会在 ./configure 时自动询问下载安装,建议不要这样,因为这样是下载源码编译速度较慢。可以用 APT 直接安装。而 Zlib 在 Ubuntu 8.10 里面的名字是 zlib1g-dev,所以解决依赖问题用:

1
sudo apt-get install ocaml zlib1g-dev

接下来自动配置和编译:

1
2
./configure
make

用 make 命令编译后没有通常的 make install 这一步,直接可以 ./mlnet 使用。不过把 mlnet 这个文件复制到 /usr/bin 要更方便一点:

1
sudo cp mlnet /usr/bin

用以下命令启动 mldonkey:

1
mlnet&

后面的&符号表示让程序在后台运行。http://localhost:4080/ 是它的 web 界面,在最上面的输入框输入 ed2k 地址就可以开始下载了。输入 kill 可结束 mlnet 程序。

备忘,应该注意的设置选项:
enable_kademlia
ED2K-max_connected_servers
ED2K-port
max_hard_download_rate
max_hard_upload_rate
ED2K-force_high_id

学习另一个分布式版本控制系统 Mercurial(Hg)

如果你化学学得不错,那你该知道 Mercurial 是汞的意思,其元素符号是 Hg,这也是它在命令行中以 hg 出现的原因。而如果你英语学得不错的话,那你也该知道 mercurial 有无常多变的意思,如 a mercurial temperament 喜怒无常的性情。这个意思用来描述版本控制真是再好不过了。

之前用过一段时间的 Git,但在某次莫名其妙的小事件中(可能是我无意中 reset 了)我丢失了一些工作。之后我就没再用它了。但写程序不用版本控制系统可不是个明智的决定,所以我决定试试看其他软件。据说 Mercurial 也是个非常优秀的版本控制系统,NetBeans 就是用它的。而且 NetBeans 6.5 直接集成了对它的支持(Git 也有集成,但要去网上找插件)。

官方网站:http://www.selenic.com/mercurial/wiki/

主要参考教程:
官方中文教程,简单明了,着重于分布式开发的描述 http://www.selenic.com/mercurial/wiki/index.cgi/ChineseTutorial
英文 QuickStart http://www.selenic.com/mercurial/wiki/index.cgi/QuickStart
IBM 的教程 http://www.ibm.com/developerworks/cn/opensource/os-cn-mercurial/index.html
中文参考和快速入门,适合打印出来 http://www.linux.org.cn/hg.html
一本详细的英文书 Distributed revision control with Mercurial http://hgbook.red-bean.com/

等我看完了这些,再来这写个简要笔记。

最终选定了站在巨人肩膀上的 Hiweed 2.0

主要是想尝尝鲜,换用了几个发行版试试看。可以说把 RPM 家族的几个都逛遍了:Mandriva, Fedora, OpenSUSE, CentOS。前面几个试用的是最新版的 KDE 4.1.3,最后一个也是官方最新 5.2 版的,但是软件仍然旧得掉牙:Python 是 2.4 的,PHP 是 5.1 的。

之后得出一些结论。首先是我对 KDE 的好感已经完全没有了。以前是觉得 KDE 的软件有很好的一致性,Konqueror 浏览器和别的软件整合得很好。不过现在我主要用的都是 GTK 的程序(浏览器也主要用 Firefox 了),就没什么必要再用 KDE 了,而且 Konsole 在粘贴文本方面真的很不方便(不然的话 Yakuake 还是很好用的),比如说我习惯用鼠标选取文字后在终端窗口按 Shift + Insert 粘贴进来,这个操作 Gnome-Terminal 支持,URxvt 支持,xterm 支持,xfce 下的 Terminal 支持,就只有 Konsole 不支持。所以我是不再对它抱希望了。也许一两年后成熟一点再去试用吧。

其次,APT 包管理还是我的最爱。可能是因为 RPM 的图形界面看上去不那么稳定吧,在更新软件的时候会假死的样子。而且有时候还需要自己解决依赖性问题。如果你是新手,相信我,选择 Debian 和其派生的发行版(比如 Ubuntu 和即将要介绍到的 Hiweed)绝对会让你省去好多麻烦。

所以最后,只好选择回到 Debian 家族的怀抱或者学 Gentoo, Linux From Scratch 之类的自己造一个适合自己的发行版出来——只是目前还没那么好的耐心和热情。所以……本来想选择最新的 Debian 5.0 Lenny 试试看的。但发现了 Hiweed ,就下来试了试。很不错,完全对我胃口的:

基于 Ubuntu 8.10(1.x 版本是基于 Debian 的),因此有方便的 APT
几乎都是最新软件,今天(2008-11-22)运行 apt-get upgrade 升级只下载 23M 的东西。
中文环境(文泉驿字体、Ibus 输入法、QQ)做的非常好,很适合国内的小盆友们试用。
软件集成干净方便,该有的都有了,不该有的没有。比如音频视频解码器啦之类的。
总之是一个非常赞的发行版,从某方面体现了发行版的极致:帮你做好一切需要做的设置,直接拿来可用。我几乎就是安装上就直接使用的。所以如果你是新手或懒人或都是的话,那 Hiweed 一定最适合你了。

顺便说一句,本来想说说 LinuxMint,这也是从 Ubuntu 演化而来的,也是预先设定了视频之类的东西,不过试过 Hiweed 之后,LinuxMint 就靠边站吧。毕竟 Hiweed 是国产的,中文支持做得就比 LinuxMint 好,后者甚至默认没有中文字体。

下面是截图,绿色的 Hiweed,绿色的 Firefox(主题是 Naver),还有韵竹同学绿色的博客:

Hiweed Screenshot

Hiweed Screenshot

如果装好后你打开新立得软件包管理器选择更新或者用 sudo apt-get update 命令,可能会得到下面的提示:

W: GPG签名验证错误: http://download.virtualbox.org intrepid Release: 由于没有公钥,下列签名无法进行验证: NO_PUBKEY DCF9F87B6DFBCBAE
W: GPG签名验证错误: http://wine.budgetdedicated.com intrepid Release: 由于没有公钥,下列签名无法进行验证: NO_PUBKEY 58403026387EE263

据 Google 结果,运行下面两行命令就行了:

1
2
gpg --keyserver keyserver.ubuntu.com --recv 387EE263 && gpg --export --armor 387EE263 | sudo apt-key add -
wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | sudo apt-key add -

Ubuntu 8.04 的视频色彩偏差

在 Ubuntu 8.04 里视频的颜色饱和度对比度等都太大了 xine 和 mplayer 都是这样, 以前都是傻傻的手动去调整,今天才能清楚这个问题,原来是设置中把视频输出默认设成了 xv,而只要设置成 x11 就好了。8.10 似乎已经修复了这个小问题。

Git 初入门:个人使用的常用命令

其实早就想要学习使用版本管理软件,但一直没有开始。因为 SVN 比较庞大不容易快速上手,至今也只会照着命令 checkout 别人的源码。也对什么 tag, trunk 之类的搞不清楚。

这两天在学习 Symfony 为学院制作网站。又想起来要用版本管理软件了。这次学习了 Git,真的是很容易上手,最多一个小时时间的学习就可以开始用了。以下是一点笔记。要注意的是 git 在 ubuntu 下是用 apt-get install git-core 命令安装而不是 apt-get install git,那是另一个软件。

开始一个项目:git init。会在当前目录下创建 .git 文件夹,此后你在此目录及其下的子目录中就可以使用 git 的其他命令了。

设置用户名和电子邮件,将在日志中显示:
git config –global user.name “Yu WANG”
git config –global user.email “btyuest@gmail.com”
–global 选项把设置储存在 ~/.gitconfig 文件,对多个项目有效。没有这个选项的话会把他储存在 .git/config 文件内,对当前项目有效。这个文件设置的优先级高于 ~/.gitconfig 文件。git clone 命令不会复制此文件。

最常用的 add 和 commit 命令:新创建或更改过的文件要用 git add 添加到 git,否则不会被提交。可以用 git add . 添加全部新增改的文件。git commit 提交更改,会启用默认的编辑器(或者你用 git config core.editor 命令指定的编辑器),要求你输入一段消息(强制的)。也可以用 git commit -m “message” 的方式提交。git commit -a 会提交所有更新过的文件,但默认不会提交新文件。

git log 查看各次版本提交。git status 查看本次未提交的修改。

git clone another_directory 可以在 another_directory 目录下创建一个副本,也包括一个 .git 文件夹。这是多人开发的事,本文不讨论。

git branch newbranch 命令创建一个名为 newbranch 的分支,再用 git checkout newbranch 转到这个分支下工作。两步可合为一步:git checkout -b newbranch。
分支开发完毕可以转到主分支用 git merge branch 合并分支。

git 似乎没有 svn 那样 checkout 特定版本的命令,知道的大侠告诉我一声。要返回之前的状态,用 git reset 命令。
可以新建一个分支,然后在此分支下 git reset –hard 之前的版本。而 git reset –mixed 只是改变 repo 里面的状态,并不实际作用于源码。看起来就像是没有提交过更改。没有提交更改的文件 checkout 不同分支后仍然保留,提交后 checkout 出的文件就是各分支中不同的文件了。建议你多试一下这些命令,自己找感觉。

以上就是我目前所知,有不足之处或建议请留言。

参考:
我是看的一篇名为《Git 使用入门》的 pdf,Google 可以找到。
IBM 的这边文章也可参考 http://www.ibm.com/developerworks/cn/linux/l-git/index.html

官方网站:http://git.or.cz/

(2008-08-01 注:Pro Git 最近也在网上免费公布了,还有一个社区手册,Git 教程多得很,可以自己 Google 一下看)

Dvorak 键盘布局使用感想以及一点忠告

关于 Dvorak 和 Qwerty 的故事,网上已有诸多介绍,还不清楚的同学可以自行 Google 了解一下。本文不是介绍 Dvorak 的文章,而是写给那些已经或正在了解关于 Dvorak 键盘的事情并试图尝试一下的同学(在搜索 Dvorak 键盘布局时看到本文是最好的),告诉他们我的使用感受和一些忠告,简单来说,我不鼓励你使用 Dvorak。

我们知道,Qwerty 的设计目的就是为了减慢打字的速度。什么常用左手和小指无名指啊,辅音元音分布不科学啊之类的。而 Dvorak,据说彻底改变了这些缺点,可以让你打字速度更快不容易疲劳。

在这样的诱惑下,我也尝试过这个键盘布局,并且用了近三年的时间。不过最近终于又改回 Qwerty 了。因此要说关于这东西的经验感想之类我还是有些资格的。

确实 Dvorak 用起来是较 Qwerty 舒服一些,手可以放在掌脱上几乎不用抬起或移动手臂只是动手指就可以了。应该说手指移动的距离总量算下来要比 Qwerty 的少一些。有说是 30%,我估计也差不多。速度也会稍快一点,我用 Dvorak 打英文能接近 300 键/分钟,而现在用 Qwerty 大概是 240。所以可以说 Dvorak 的确有其有点的。

而实际上 Dvorak 带来的好处并不是很显著,相比这么一点优点,我认为转换所付出的代价是不值得的。

首先是时间的付出,主键盘的更改可能不会有太大问题。用打字软件练上个把星期应该就行了。但某些不常用的按键,比如标点符号就要花更多时间去适应。如果你使用电脑有些年月了,快捷键的转换估计是最痛苦的。在 Windows 下,最常用的剪切复制粘贴键不能用了。而在 Linux 下则有更多的快捷键。而且很多软件的快捷键是专门为 Qwerty 设计的(Ctrl + X, C, V 其实就是)。这是转换的一大麻烦。

其次是中文输入。加上这个,你其实要做两次转换,一次是英文输入的,一次是中文输入的。因为打字时我们不是简单地记住字母在哪,打英文时我们是以音节来记,打中文时是以字或词按你的输入法对应的键组合来记。实际上这两年多来我一直没找到很合适的输入法,又是在 Linux 下折腾就让这情况更加严重了。这可能也是我这段时间内没写太多东西的原因之一,我无法像从前使用微软双拼时候那样有那么快的打字速度。如果你确实想试用一下 Dvorak 甚至想坚持下来把它作为你的默认布局,我建议你使用紫光的双拼方案,这个方案在 Dvorak 下比较合理一些。

如果你凭着坚韧不拔的惊人毅力真的完成了从 Qwerty 到 Dvorak 的转换。首先要恭喜你一下。然后你就会发现,现在有好多问题在等着你了。如果你到别人的电脑上或者网吧打字怎么办?你要在人家的电脑上装个 Dvorak 布局?还是勉强使用你已经不再熟悉的 Qwerty?在这里顺便插一句,很多网吧使用的是类似番茄花园那样的精简系统已经把这个布局删除了,你需要再去网上查找 kbddv.dll 下载到 C:\Windows\system32 文件夹里面,很麻烦吧。而且有时候能不能安装布局也说不定。你有没有想过现在基于计算机的那些考试,TOEFL, GRE, IETLS,听过好多人说过某人打字速度慢而影响了成绩。而你是电脑高手,打字速度竟然也那么慢?

现在到处都在用电脑,你不可能保证永远不用别人的(使用 Qwerty 键盘布局的)电脑。实际上促成我换回 Qwerty 键盘的原因是看了 Antitrust 这部电影,当主人公在查看那些公司秘密资料的时候真是为他捏了把汗。想想要是某天自己也遇到这样特殊的情况要在几分钟之内搞到些资料,而却因为键盘不熟悉……那可就不只是囧的问题了。

所以综上所述,作为一个用了两年多 Dvorak 键盘后又改正归斜的童鞋,这就是我的建议:能不用就不用。根本没有坚持使用的意义,而如果不坚持使用,试一试的意义也没有了。

我们时间和经历有限,所以该和大众步调一致的就得一致。要多把精力投入到真正不凡的事业,更大的革命创新才是。

关于 ArchLinux

几个月没有认真用 Linux,这两天又开始折腾起来了。

一开始选的是 Arch Linux,Arch 最适合我这种半吊子的开源爱好者了——没法自己搞一个系统出来,又有些厌倦 Ubuntu 的大众化。Arch Linux 很小巧,安装后可以按需要自己安装 WM(Window Manager),当然你选择安装 Gnome 或者 KDE 也是可以的。

包管理器 Pacman 和用户自定义软件安装脚本 AUR 都很容易上手。不过使用中 Pacman 会出现权限设置的问题。以前遇到过 X.org 的权限问题,最近又遇到 Apache2 的 403 Access Forbidden 问题,有时候玩 Arch 这些小问题确实会叫人抓狂的。另外 Arch 远不如 RH(及其变种)和 Ubuntu 流行,也就是说出现问题的社区支持肯定比不上人家,不过 LinuxSir 里面还是有些高手的。如果你对 Ubuntu 用得很熟悉了并且想进一步提高你的 Linux 水平,Arch (或者 SlackWare)是不错的选择,选择一个好的 WM——最好是 Tiling WM 如 Awesome,在 CLI 的环境下就很容易提高。坚持用 Linux 也是的。

一点心得,Arch Linux 安装好后先安装 aria2 包,再设置 pacman 使用 aria2,因为每次安装 Arch 都要上 LinuxSir 查找不方便,我就给它转到这来了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/bin/bash
#pacget script
 
cachedir=/var/cache/pacman/pkg
file=`echo $1|awk -F '/' '{ print $NF }'`
echo Downloading: $file|sed 's,/,,'
repo=`echo $1|awk -F '/' '{x=NF-3 } { print  $x }'`
echo repo: $repo
mirrors=`sed -n 's/^Server = //; s,$,/'"$repo/os/i686/$file"', ; /^ftp/p; /^http/p' /etc/pacget.conf`
 
if [[ $2 = *.db.tar.gz.part || $repo = "testing" ]]; then
       echo "(using one mirror)"
       mirrors=$1
       cachedir=/var/lib/pacman
fi

aria2c -t60 -m5 -l /var/log/pacget.log $mirrors -o $file.pacget
if [ -f $cachedir/$file.pacget.aria2 ]; then
    exit 130
fi
mv $file.pacget $2

2. /etc/pacget.conf

1
2
3
4
5
6
7
8
9
10
11
#pacget mirror list file
 
http://mirror.lupaworld.com/archlinux
http://download.ourlinux.net:81/Linux/ArchLinux
ftp://cle.linux.org.tw/pub/ArchLinux
ftp://ftp.archlinux.org
http://ftp.belnet.be/linux/archlinux
http://mirror.cs.vt.edu/pub/ArchLinux
http://mirrors.easynews.com/linux/archlinux
http://distro.ibiblio.org/pub/linux/distributions/archlinux
http://ftp.gigabit.nu/archlinux

3. 在 /etc/pacman.conf 里添加 XferCommand = pacget %u %o

另外就是,安装了 alsa-base alsa-utils 之后要记得运行 alsaconf 和 alsamixer。

最后推荐一下 LinuxToy 的关于 ArchLinux 的两篇文章

现在我已经不用 Arch 而改用 LinuxMint 了,下一篇文章介绍。

Archlinux 普通用户无法 startx 的问题

正在捣鼓 ArchLinux, 又遇上这个问题了,解决办法是用 root 运行命令:

chmod u+s /usr/bin/Xorg

稍后放出 ArchLinux 安装笔记。