2009年6月3日星期三

男女关系大实话

恋爱篇

  1.爱情是一种神奇的力量,会使人从哪里摔倒就从哪里爬起来,除非摔得(感情)残废了;

  2.男的追女的,只要男的坚持不懈,最后一般可以追到;而女的追男的,只要男的不愿意,肯定追不到;因为男人皮较厚、心较硬,而女人则相反。

  3.男人往往可以同时有几个同性好朋友,这些朋友可以互相认识或不认识,可以相差很大;而女人的同性好朋友往往只能有一个,且是排他的。男人的朋友可以是有男有女且年长年幼的,而女人的朋友大多是男的且比自己年长的。

  4.女孩对男人的爱很多是从崇拜开始的。

  婚姻篇

  1.夫妻双方千万不要试图去改变对方,而应该去适应对方。因此,在结婚前就要想清楚,自己婚后能不能适应对方,如果不能,还是不结婚为妙。婚前,特别是女人,对对方的某种遗憾和不满,婚后迟早会以更剧烈的形式爆发。

  2.夫妻双方门当户对(不仅仅是经济上的)的肯定比门不当户不对的家庭更容易稳定。有钱的家庭不一定幸福,但成天为经济发愁的家庭肯定不幸福。

  3.千万不要找比自己多太多钱的女人,除非你更看重金钱。千万不要找学位比自己高比自己名牌的女人,除非你忍受得了她的心高和对你的轻蔑。

  4.男人娶女人,最重要的是娶一个忠诚的人;女人嫁男人,最重要的是嫁一个负责的人。

  5.爱情是天生的,可以一见钟情,但决不会自动维持长久。而婚姻是可以靠夫妻双方不断努力和外界各种约束而得到稳定的。

  6.只有夫妻之间的爱情转化为亲情时,婚姻才可称之为婚姻,才会稳固。

  7.婚姻是一条船,而爱情和孩子是两块最重要的压船石。

  情人篇

  1.人的本性其实都是花的,无论男女,只是受法律、舆论、机遇和自己的脸皮厚薄及胆量大小等制约,各人花的程度才表现不同。花和不花的人就好象 桔子和橙子。花的人的感情是可分的,分给不同的情人不同的桔瓣,虽大小不同,但都有桔子的汁。不花的人的感情是较难分的,就象橙子,要 么只能给一个人独享,要么就会分破分漏了。

  2.男人有钱就变坏,女人变坏就有钱。

  3.女人偷情,有第一次就会有第二次;有第一个人就会有第二个人。

  4.一个女人,明知一个男人有妻子,如果还愿意和他单独来往,不管她出于什么目的,他们迟早会成为长期或短期情人的。

  5.女人勾引男人,认识五分钟就可以上床;而男人勾引女人,有可能一辈子也成功不了。

  6.女人使用美人计,正常的男人都会将计就计。

  7.男女交往,如果不是以爱情为目的,则男方多为sex-driven,而女方多为profit-driven

  8.男人花主要是寻找自信和刺激,大多并不愿以拆散自己的婚姻作代价;而女人花要么是寻找她所认为的爱情、要么是为了得到某些利益,但都可能放弃自己原来的婚姻。

  9.人的感情需要是多层次的,如父母儿女之情、兄弟姐妹之情、夫妻之情、同性异性朋友之情、情人之情、同事之情等等,如果缺了某种,总会试图去寻找和弥补。

  10.婚前花的人婚后不一定还那么花,但婚前不花的人婚后可能更花,婚前缺的往往更容易婚后补。

Linux下6款值得推荐的博客工具

常在网上飘,岂能不写博。如果你有多个博客需要更新的时候,每次打开博客后台,重复使用ctrl+c,ctrl+v,也会浪费很多不必要的时候,甚至运气不好的时候,在后台辛辛苦苦写了一些文字,结果发布的时候发生一个错误,辛苦写的日志就这么没了,那绝对是一件很郁闷的事情。子曰:“君欲善其事,必先利其器“,所以寻找一款写博利器,好比是blogger选一把适合自己的武器一样。这里介绍6款可能适合你的写博利器,这些博客工具不一定最好,但是相信总有一款能满足你的写博要求。

KBlogger
homepage:http://kblogger.pwsp.net/

KBlogger是一款基于KDE环境简单易用博客工具(支持KDE4),集成在KDE kicker中。KBlogger功能相对简单支持日记修改、英文单词拼写检查、附件上传,值得一提的是:支持代理功能,需要代理翻墙的朋友应该需要这个代理功能,比如最近被射杀的blogspot等。kblogger支持blogger和其他的blog系统的API接口,例如著名的wordpress、MSN Spaces等。在fedora、ubuntu下,kblogger都可以在各自的软件中仓库中找到并安装。

QTM
homepage:http://qtm.blogistan.co.uk/

QTM,顾名思义,是一款基于Qt的博客工具,他内含博客模板、支持快速发布链接、日志跟踪(trackbacks)、ping、标签(technoratitags)、草稿保存和其他更多的功能选项。QTM支持目前大多数流行的博客程序接口,比如logger,MetaBlogAPI(包括Wordpress,Drupal和WindowsLive Spaces)和Movable Type。QTM还是跨平台支持linux、Mac OS、windows系统。该工具的主页上提供了源码及打包程序,比如rpm、deb。

BloGtk
homepage:http://blogtk.sourceforge.net/

BloGtk是一款Gnome环境下的写博软件,使用Python和PyGTK编写,快速、简单易用。支持Blogger, Movable Type, WordPress及其他支持Atom发布协议的blog,还可以自定义标签功能。尽管BloGtk有很多排版编辑功能,却不支持“所见即所得”模式,这是让人比较郁闷的,但是程序提供了一个预览模式配合博客内容排版,习惯了“所见即所得”写博客的朋友,使用起来可能有点不习惯。

GNOME Blog
homepage:http://www.gnome.org/~seth/gnome-blog/

GNOME blog是GNOME套件中的博客工具。界面简洁,支持所见即所得、英文拼写检查。GNOME blog支持包括Blogger,MetaBlogAPI(包括 Wordpress,Drupal,和Windows LiveSpaces),Movable Type及Pyblosxom、Advogato、LiveJournal等大多数流行博客。有一个比较特殊功能是定时发布,比如你可以在白天像记流水帐一样的增加日志内容,然后定时在晚上10点发布。

Drivel Journal Editor
homepage:http://www.dropline.net/drivel/

Drivel是一款GNOME环境下的博客工具,登录界面跟诸多IM软件的一样,编辑界面设计很简单,拥有日志发布、编辑、删除、预览最新日志等常用功能,支持离线写作和编辑、拼写检查,HTML语法高亮、所见即所得写作,如果在写作过程总发生错误导致程序关闭,还能恢复刚才编辑的日志。Drivel支持LiveJoumal,Blogger,MovableType,Advogato等博客协议以及支持使用Atom发布日志的其他博客。

ScribeFire(好东西总要放在最后的)
homepage:http://www.scribefire.com/
Scribefire这是我重点推荐的写博利器,也是我目前最喜欢的一款写博工具。这是一款以firefox扩展插件形式发布的写博程序。Scribefire功能是相当强大的,常用的编辑功能,该有的都有了,日志编辑、发布、修改、删除、注解、多媒体,支持离线写作和编辑、所见即所得写作,还支持TAG,在浏览网页的时候,看到一些好的文字,可以在通过firefox中的右键菜单,直接将文字发布到自己的博客中去。scribefre添加站点的时候,能自动侦测API协议文件,这样就免去了不用知道这个博客用了什么程序接口也能轻松设置连接博客。Scribefire目前支持Blogger、LiveJournal、MetaBlogAPI(包括 Wordpress,Drupal,和Windows Live Spaces)、Jeeran、Performancing、MovableType、Textpattem、Roller(测试中)。

免费好用的翻墙软件OpenVPN - Alonweb

最近 GFW 牛A的不行,愈发的生猛,blogger,twitter,flickr,bing 等国外优秀网站相继落难,当然这是难不倒 geek 们的,翻墙方法千千万,使用VPN便是其中之一,今天给大家介绍一款免费又好用的VPN - Alonweb。

Untitled1 免费好用的OpenVPN Alonweb

首先你需要注册一个用户名:http://alonweb.com/user/register

Untitled2 免费好用的OpenVPN Alonweb

注册完毕后你需要下载 Alonweb 的认证和配置文件,当然前提是你有安装 ,如果没有的话跟着我一步步来吧。

在 Ubuntu 上安装

打开终端,输入:

sudo apt-get install

安装完毕。

下载 Alonweb 配置和认证文件

打开终端,输入:

wget http://static.alonweb.com/downloads/alonweb.tar.gz

sudo tar -C /etc -zxvf alonweb.tar.gz

现在可以运行 了,打开终端,输入:

sudo /etc/init.d/ start

Untitled3 免费好用的OpenVPN Alonweb

提示输入文章开头注册的用户名和密码,OK。

现在你可以随心所欲的 Taste the freedom of internet 了。

2009年6月2日星期二

vim实用技术(1)

Vim 简介

作为开源世界最重要的编辑器之一(另一个是Emacs),Vim以其强大的功能和可定制能力被众多开发者所喜爱。不过,也许就是因为Vim的功能太 强大了,要真正用好Vim并不容易。本文作者在多年的实际使用中逐渐掌握了一些实用技术,在此介绍给大家。--本文并不企图对Vim作全面而系统的介绍, 但也绝非零星地点到即止;而是希望通过介绍一些重要特性和提供相关参考信息,引起大家的兴趣,去深入挖掘其能力,真正把这一强大的工具用好。

下面首先对Vim做一下最基本的介绍,并给出一些参考信息,以方便对Vim不熟悉的读者也能够理解并自己查阅进一步信息。

与大部分其它编辑器不同,进入Vim后,缺省状态下键入的字符并不会插入到所编辑的文件之中。Vim的模式(mode,可以简单地理解为"状态")概念非常重要。需要知道,Vim有以下几个模式:

  • 正常(normal)模式,缺省的编辑模式;下面如果不加特殊说明,提到的命令都直接在正常模式下输入;任何其它模式中都可以通过键盘上的Esc键回到正常模式。
  • 命令(command)模式,用于执行较长、较复杂的命令;在正常模式下输入":"(一般命令)、"/"(正向搜索)或"?"(反向搜索)即可进入该模式;命令模式下的命令要输入回车键(Enter)才算完成。
  • 插入(insert)模式,输入文本时使用;在正常模式下键入"i"(insert)或"a"(append)即可进入插入模式(也有另外一些命令,如"c",也可以进入插入模式,但这些命令有其它的作用)。
  • 可视(visual)模式,用于选定文本块;可以在正常模式下输入"v"(小写)来按字符选定,输入"V"(大写)来按行选定,或输入"Ctrl-V"来按方块选定。
  • 选择(select)模式,与普通的Windows编辑器较为接近的选择文本块的方式;在以可视模式和选择模式之一选定文本块之后,可以使用"Ctrl-G"切换到另一模式--该模式很少在Linux上使用,本文中就不再介绍了。

Vim带有完整的帮助文档。在当前的Vim 6.4的标准发布中,有一百多章、近六十万英文词的帮助文件,进入Vim后输入":help"(命令模式中输入的命令要敲回车键才结束输入,下面不再说明 这一点)即可访问。本文在介绍特性时,对文档中已经说明得很详细的内容只会提纲挈领地加以简短说明和提供应用范例,并提供访问相应的Vim文档的命令。

一般的发布版中还常常带有一个简单的30分钟的Vim教程,新手在操作系统的命令行上输入"vimtutor" 命令即可开始学习。除上面的简单说明外,本文并不介绍最基本的Vim命令,Vim的新手应该先通过教程熟悉一下Vim,再继续往下阅读。

建议所有的Vim用户经常访问Vim的主站点[1]。上面除了基本的发布、安装、下载等信息外,最有用的内容是用户可以上传自己写的Vim脚本 (script)和撰写自己认为有用的提示(tip),供其他Vim用户使用。在写这一段的时候,Vim站点上已有一千三百多个脚本,提示数刚好超过了一 千。对于序号为nn的脚本,直接访问的URL是http://www.vim.org/scripts/script.php?script_id= nn;对于序号为nn的提示,直接访问的URL是http://www.vim.org/tips/tip.php?tip_id=nn

不另加说明的话,本文讨论的内容适用于Vim版本6(即从6.0到6.4)。建议认真的Vim用户升级到Vim 6.4,最好是自己编译升级所有的补丁包。相关信息网站上都有,此处不再赘述。

中文支持

Vim支持世界上的主要语言,当然也包括中文。如果你用Vim编辑中文,而中文不能正确显示,那有两种可能性:一是使用的Vim不完整,不含多字节语言支持(multi_byte特性);二是某个配置出了问题。

说到多语言支持,最基本的概念有两个:一是文件的语言编码,而是环境的内部编码。在较老的操作系统中,不管Linux还是Windows,这两个编 码都是一样的,也就意味着,一次只能处理一种编码的文件:要么只能处理西文编码(Latin1,即ISO-8859-1 [5]),要么只能处理中文编码(GB2312 [2])。而在新的操作系统中,这两者可以是不一样的。在Linux上,常见的情况是环境的内部编码使用UTF-8 [6],而UTF-8可以同任何一种语言编码作无损转换,这就保证了系统的多语言处理能力。Vim这方面秉承了Unix/Linux的传统,在内部编码使 UTF-8的时候,可以同时处理不同意语言编码的文件。

以下列出了和语言编码的相关的设置:

  • 环境变量LANG(使用的语言);
  • 环境变量LC_CTYPE(使用的内部编码);
  • Vim选项encoding(Vim的内部编码);
  • Vim选项termencoding(Vim在与屏幕/键盘交互时使用的编码);
  • Vim选项fileencoding(Vim当前编辑的文件在存储时的编码);
  • Vim选项fileencodings(Vim打开文件时的尝试使用的编码);
  • Vim选项ambiwidth(对"不明宽度"字符的处理方式;Vim 6.1.455后引入)。

如果你的环境只需要处理简体中文的话,那么,最简单的方式就是所有的设定全部使用简体中文。只需要:设定LANG=zh_CN.GB2312,不设 定LC_CTYPE(默认跟LANG一样),不设定与编码相关的Vim选项(默认由LANG和LC_CTYPE决定),也无需设定Vim选项 ambiwidth。也就是说,我们把语言设定为中国(CN)使用的中文(zh),编码为GB2312(注意:Vim内部并不识别国标GB18030 [3],所以此处只能设GB2312;参看下面关于UTF-8的讨论)。

不过,如果按照目前Linux下的惯例,内部编码一律使用UTF-8的话,会有一些额外的好处,其中之一就是在这种情况下Vim支持同时编辑多种不 同编码的文件,如简体中文和繁体中文(见下图);另外,此时Vim也可以通过编码转换支持GBK [4]和GB18030了。这样,众多关于语言编码的Vim选项就有了用武之地了。下面进一步说明一下这些选项和推荐设定(如果适用的话):



  • encoding=utf-8:不管文件的编码如何,不管如何显示和输入,Vim内部使用的编码是UTF-8;这是国际化支持的基础。
  • termencoding:取决于实际的终端或X Window的设定。举例来说,如果选择语言简体中文登录到X Window,或者正在使用CXTERM [10]的话,那么该选项应被设为GB2312;如果使用缺省的语言(LANG=en_US.UTF-8)登录到X Window,或者使用PuTTY [11]远程访问Linux机器、并且设定里的字符编码(配置中Window-Translation)设为UTF-8的话,该选项就应该设为utf- 8。从Windows下使用PuTTY远程连接Linux的请特别注意,测试表明,仅在使用UTF-8的情况下,PuTTY才能可靠地支持中文的显示和输 入(显示字体必须设成中文字体)。
  • fileencoding:文件载入时,该选项被置为Vim认定的文件编码,因此,存储时文件的编码不会改变。此处和下面 fileencodings可使用的编码为libiconv支持的所有几百种编码(如果编译时包含了iconv特性的话),与中文相关的有gb2312、 gbk、gb18030、hz-gb-2312、iso-2022-cn、big5、cp936、cp950等。如果创建新文件,你又不希望使用UTF- 8作为文件编码时,那么,你可能需要手工设定该选项,如":set fileencoding=gb2312"。需要注意的一点是,使用"set"来设定该选项的话会改变以后新建文件的缺省编码,而使用 "setlocal"的话则只影响当前文件(参考":help setlocal")。 fileencodings=ucs-bom,utf-8,chinese:Vim会首先判断文件的开头是否是一个Unicode [7]的BOM(byte order mark)字符[8],是的话则把文件的其余内容解释成相应的Unicode序列;否的话再试图把文件内容解释成UTF-8的序列;再失败的话,则把文件 解释为简体中文(chinese是一个跨平台的简体中文字符集的别名,Linux下相当于gb2312和euc-cn;此处也可以根据需要以 gb2312、gbk或gb18030等编码替代)。需要注意的是,该顺序不能颠倒,并且在后面再添加其它编码如big5、latin1也是没有意义的, 因为Vim不能识别8比特编码中的错误,因此这些编码后列的编码永远不会被用到。
  • ambiwidth=double:把所有的"不明宽度"字符[9]--指的是在Unicode字符集中某些同时在东西方语言中使 用的字符,如省略号、破折号、书名号和全角引号,在西方文字中通常字符宽度等同于普通ASCII字符,而在东方文字中通常字符宽度等同于两倍的普通 ASCII字符,因而其宽度"不明"--的宽度置为双倍字符宽度(中文字符宽度)。此数值只在encoding设为utf-8或某一Unicode编码时 才有效。需要额外注意的是,如果你通过终端使用Vim的话,需要令终端也将这些字符显示为双宽度。比如,XTERM [12]的情况下应该使用选项"-cjk",即使用命令"uxterm -cjk"来启动使用双宽度显示这些字符的Unicode X终端;使用PuTTY远程连接的话则应在配置的Window-Translation中选中"Treat CJK ambiguous characters as wide"(参见下图)。


需要设定的选项通常放在用户的Vim资源配置文件中,即在~/.vimrc文件中加入:

set encoding=utf-8
set fileencoding=chinese
set fileencodings=ucs-bom,utf-8,chinese
set ambiwidth=double
如果想进一步了解这些选项的话,可以使用":help '选项'"查看帮助文档中的相关(英文)信息。帮助中也可以查到这些选项(以及命令)的缩写:本文中为方便理解,除一些极少有人使用完整拼写的命令如": e(dit)"、":s(ubstitute)"等之外,一般使用完整拼写而不说明或使用缩写。关于配置文件.vimrc,可以使用":help .vimrc"查看相关信息。

在使用内部编码UTF-8的情况下,如需编辑fileencodings之外(其不能自动识别)的文件,则可以使用以下命令:":e ++enc=编码 文件名"。详情可参考":help ++enc"。

鼠标支持

不管是文本界面还是图形界面的Vim,都支持鼠标。不过,在文本界面中,鼠标支持缺省没有被激活;这就意味着,在终端上使用鼠标,所有的功能仍和没 有使用Vim时相同,并不受Vim影响。要激活文本界面中的鼠标支持也很容易,只需要执行一句 ":set mouse=a"即可。

启用了鼠标支持之后,Vim主要支持的鼠标操作有:

  • 单击移动光标到点击的位置;
  • 在帮助的关键字上双击显示该关键字相关的帮助信息;
  • 在普通文本上双击选中点击位置的单词;
  • 拖动鼠标选中文本;
  • 使用鼠标滚轮滚动当前缓冲区中的文本;
  • 多窗口编辑时可以拖动窗口分栏的位置。

进一步的信息可参看":help 'mouse'"、":help mouse-using"和":help scroll-mouse-wheel"。

特别需要值得一提的是,在远程访问Linux系统时也是可以使用鼠标的。如果使用X Window系统,自然不必说;而使用SSH远程连接时,大部分Linux下的终端客户程序,如XTERM、GNOME-Terminal [13]、较新版本的Konsole [14],以及Windows下的PuTTY,支持鼠标的使用:你只需简单地启动Vim、执行一句":set mouse=a"就可以了(当然,也可以把上面的语句去掉起始的冒号放到.vimrc文件中)。

空格、制表符和缩进

对于编写代码,缩进是最基本的概念之一。至于缩进是使用空格还是制表符(Tab),或者缩进是否正好使用一个制表符来表示,很多程序员,特别是 Windows开发出身的程序员,很容易混淆。幸好,Vim对于这些概念有非常完整的支持,足以应付各种复杂的情况。以下是相关的主要Vim选项:

  • shiftwidth(缩进的空格数);
  • tabstop(制表符的宽度);
  • expandtab(是否在缩进和遇到Tab键时使用空格替代;使用noexpandtab取消设置);
  • softtabstop(软制表符宽度,设置为非零数值后使用Tab键和Backspace时光标移动的格数等于该数值,但实际插入的字符仍受tabstop和expandtab控制);
  • autoindent(自动缩进,即每行的缩进值与上一行相等;使用noautoindent取消设置);
  • cindent(使用C语言的缩进方式,根据特殊字符如"{"、"}"、":"和语句是否结束等信息自动调整缩进;在编辑C/C++等类型文件时会自动设定;使用nocindent取消设置);
  • cinoptions(C语言缩进的具体方式,请参考":help cinoptions-values");
  • paste(粘贴模式,会取消所有上述选项的影响来保证后面的操作--通常是从剪贴板粘贴代码--保持原有代码的风格;使用nopaste取消设置)。

下面给出一些常用的组合:

  • shiftwidth=4 tabstop=4:很多Windows出身的程序员会习惯这样的设置,让缩进等于制表符宽度。
  • shiftwidth=4 tabstop=8:很多Unix程序员的设置,仍使用较常用的4格缩进,但制表符宽度为标准的8。
  • cinoptions=>4,n-2,{2,^-2,:2,=2,g0,h2,p5,t0,+2,(0,u0,w1,m1 shiftwidth=2 tabstop=8:标准的GNU编码风格的设置,对Vim缺省的C缩进风格作了很多微调,比如,if语句下的"{"、"}"要在"if"后缩进两格,但 函数定义部分"{"、"}"仍和函数名一行对齐。开源软件经常使用该种缩进风格。

在编辑代码时一个很有用的命令是调整代码缩进,可以很方便地增加(或减少)若干级缩进,并自动根据选项设定使用正确的空格或制表符。只需要使用 "V"选中你要调整的代码行,然后键入"<"(或">")即可增加(或减少)一级缩进;在键入"<"(或">")之前键入数字则 可以指定增加(或减少)的缩进级数。

我们要讨论的最后一个相关的命令是":retab"。在设定了expandtab选项时,该选项会把所有的制表符转换成空格。在没有设定 expandtab选项时,使用":retab!"可把空白字符转换成制表符(可能误转换,慎用),使用":retab n"可以把tabstop重置为n,并转换含制表符的连续空白字符为适当的制表符和空格的组合以保证含制表符的行看起来没有任何变化。详细信息请参看": help :retab"。

模式行(modeline)

没人愿意每次都手工输入一大堆的Tab和缩进设定。可是,放在.vimrc文件中似乎也不是个好主意:如果我编辑的代码不止一种风格呢?--考虑一 下,如果你参加开源软件项目,你能保证你参加的所有项目,还有你公司里的软件项目,代码风格都一样吗?--Vim是我用过的第一个支持在文件中记录代码风 格设定的编辑器。这个特性在Vim中叫做模式行,实际上,它所做的是在打开文件时根据文件中的Vim指令设定相关的Vim选项。下面就是一个嵌在C源代码 中的模式行:

/* vim: set tabstop=4 shiftwidth=4 expandtab: */
模式行有好几种形式。本文只介绍上面的这种形式(其它形式类似,请自行参考":help modeline"):行首的"/*"和尾部的"*/"告诉C编译器这是一行注释,不是代码的一部分;而Vim可通过后面的"vim:"识别出模式行的开 始(必须出现在行首或前面有一个空白字符);后面则是"set"和空格间隔开的一串Vim选项;":"表示模式行结束。

这种方式非常简单,功能也非常强大。另外请注意,出于安全的考虑,模式行中的选项只影响当前文件(":help modeline-local"),也不能做任何设置选项以外的工作。

提升Ubuntu用户体验的10大应用程序

Ubuntu作为一个高度易用性而出名的Linux发行版,在提高Linux知名度以及推动更多的电脑使用者愿意来涉及体验Linux的作用上,绝对是功不可没。以往的Linux系统,总给外界的印象是“兼容性差、可用软件少、操作命令化”等诸多难以靠近的冰美人形象,如果你看完以下这10款Ubuntu上的应用程序(当然有些也可以用在其他Linux发行版上),你会觉得说,原来Linux还可以让使用者这么体验,Linux并非什么冰美人,等你熟悉之后,很可能是你想象中的那个尤物。其实以下10款应用程序,只是众多Linux平台软件的冰山一角而已,更多优秀的软件还等着各位linuxer慢慢发掘分享…

1.Ubuntu Tweak - 易用性体验
http://ubuntu-tweak.com/
Ubuntu Tweak是一款专门为Ubuntu(GNOME桌面)准备的配置、调整工具。主要面向新手级的普通用户。它可以设置很多并不能在系统首选项中设置的隐藏选项,以满足用户自定义的乐趣。即使是新手,也可以方便地通过它来进行适合自己的系统调整。

2.screenlets - DIY体验
http://www.screenlets.org/
Screenlets是基于Python语言的,在Ubuntu下能够在桌面上添加各种小玩意的一款软件,如即时贴、时钟、天气预报、月历等等。这个软件和 Mac OS X 中的 Dashboard 很类似,可与 Compiz 或 Beryl 配合使用,以便装饰或扩展桌面。Screenlets给用户的体验可以说是带来无穷无尽的乐趣。

3.Handbrake - 多媒体体验
http://handbrake.fr/
Handbrake一款开源并遵从GPL协议的跨平台的多媒体文件转换软件。无需特别技巧便可直接将 DVD 电影转换成 AVI/MPEG4 格式,还有 MP4 及 OGM 输出、AAC 及 Vorbis 编码.HandBrake 能转换被加密的(encrypted)DVD,转换时以多任务方式工作,同时让你选择语言,声音及画面质量,转换后的画面大小等.具备 x264 的多线程 H.264 编码和 H.264 Baseline 选项.

4.Yakuake - 终端体验
http://yakuake.uv.ro/
Yakuake基于KDE桌面的Quake风格终端,要是基于gnome就更好了,拥有热键控制,背景透明,阴影,动画效果,带标签,可定制等强大的终端集成化特色功能,如果用一个字来形容,那就是:酷!

5.UNetbootin - 安装体验
http://unetbootin.sourceforge.net/
unetbootin为一款跨平台的,用来建立各种LINUX USB系统,也可以加载各种系统工具,允许将各种Linux/BSD的发行版或者其他操作系统安装到一个真正的分区,而且可以不用光盘,因为可以透过网络自动下载,让一切linux安装变得更简单!

6.Songbird - 多媒体体验
http://getsongbird.com/
Songbird是一款媒体播放器自由软件,Songbird整合了桌面网络播放器、数位播放器与网页浏览器,是如iTunes等私有媒体播放器的替代器之一。Songbird基于Mozilla的XULRunner平台,因此只需经少量修改就可在Windows、Mac OS X、与大多数的Linux个人电脑上运行。Songbird使用GStreamer媒体框架来播放媒体及使用SQLite作为媒体柜的存储引擎。这种集成化的软件,应该是未来软件的一个发展方向。

7.Conky - 系统监视
http://conky.sourceforge.net/
Conky是一款用于X桌面下的系统监视软件。Conky具有很高的可配置性,可以监视许多系统参数,如:CPU、内存、交换内存、硬盘使用情况等状态;各种硬件的温度;系统的进程(top);网络状态;电池电量;系统信息和邮件收发;各种音乐播放器MPD、XMMS2、BMPx、Audacious)的控制。不像其他系统监视器那样需要高级别的部件工具箱来渲染他们的信息,Conky可以直接在X视窗下渲染,这意味着在相同配置下Conky可以消耗更少的资源来达到效果,很多朋友在问某某的桌面可以看到这么多参数,怎么如此酷,也许就在用conky。

8.VirtualBox - 虚拟机
http://www.virtualbox.org/
VirtualBox应该说是目前仅次于VM的虚拟机软件了,不久前,SUN又归入甲骨文门下,相信甲骨文将会让virtualbox的功能得到更大提升。使用者可以在virtualbox上安装并且执行Solaris、Windows、Linux、OS/2 Warp、OpenBSD及FreeBSD等系统。重要的一点,virtualbox之绝对遵循GPL的开源软件。VirtualBox特别功能包括Remote Desktop Protocol(RDP)、iSCSI及USB的支援,如果用Ubuntu或其他的linux发行版加上virtualbox的组合,绝对可以让你的电脑成为单系统机器。

9.DropBox - 分享体验
https://www.getdropbox.com/
Dropbox其实是一个供跨平台(Windows, Mac OS,Linux)的网络在线存储、同步以及分享的客户端软件(在LINUX下确切说是nautilus的一个插件),目前用户可以获得2Gb的免费存储容量空间,Dropbox将在你的主目录下生成一个虚拟的目录,把需要同步上传的东西往里放就可以,省事、省心。

10.GNOME Do - 易用性体验
http://do.davebsd.com/
GNOME Do是一款类似于Mac OS X平台下Quick Silver的软件,用于快速启动任何自己想启动的东西。

更多值得体验的软件,还有待各位linuxer慢慢挖掘。

2009年6月1日星期一

vim实用技术(2)

寄存器

通常的编辑器有一个剪贴板,以存储复制和剪切的内容。Vim中的类似概念叫做寄存器(register)。除了有一个无名寄存器外,Vim还有一大 堆有名的寄存器,可以通过"""(参见":help "")或"Ctrl-R"(参见":help i_CTRL-R"和":help c_CTRL-R")加寄存器名(字母、数字和某些特殊字符,参见":help registers";"无名"寄存器的名字是""")来访问。比如,你先使用""ayy"复制了一行,然后使用"dd"删掉了一行,然后移动光标到要复 制到的位置,就可以使用""aP"把先前复制的内容粘贴上去了。手工编辑是有名寄存器的作用还不是很大,但当你想让Vim通过类似于宏的方式自动完成工作 时,有名寄存器就变成不可缺少的重要功能了。下面我们还会用到。

在使用X Window系统时,有两个特殊的寄存器是需要注意一下的:""*"访问的寄存器是X的主选择区域(primary selection),""+"访问的寄存器是X的剪贴板(clipboard)。如果你要在Vim和其它的X应用程序之间复制文本内容,你可以试一下这 两个寄存器。

还有一个很特殊的"寄存器":"="。在插入模式或命令模式中,键入"Ctrl-R=",Vim会提示你输入一个表达式,普通的整数运算在此完全有效。如果想要进行浮点运算,请参见第3.2节中的技巧。

搜索、替换和正则表达式

大家应该都已经知道Vim里使用"/模式"(或"?模式")进行搜索,使用":s/模式/字符串/标志"进行替换,其中的"模式"是一个正则表达 式。关于正则表达式,不熟悉的话可以边用边学,本节也不打算对Vim的正则表达式作完整的阐述(那可能可以专门写一本小册子了),而只抛砖引玉式地给出一 些有用的例子加以说明,以及一些实用技巧。

先说一点点搜索。搜索里最最有用的一个快捷方式是"*"(向下完整匹配光标下的单词)。把光标移动到你要搜索的词(变量名、函数名等)上,比如 "test",然后按"*",Vim将自动产生一个对"\<test\>"(参见":help /\<"和":help /\>")的搜索,也就是说,搜索完整的单词"test"。不要小看这个技巧,它经常可以大幅度地提高搜索的速度。事实上,这是Vim网站上公布的 第1号技巧,也是被评价最高的技巧。相似的技巧还有"#" (向上完整匹配光标下的单词)、"g*" (向下部分匹配光标下的单词)等,请自行查看(":help #"等)。

Vim在搜索和替换时会对匹配成功的文本进行加亮,在已经完成搜索和替换任务后,这种加亮有时反而会妨碍显示。Vim专门提供一个命令取消这种加亮 (直到用户再一次使用搜索或替换命令):":nohlsearch"。建议用户创建一个键盘映射(key mapping)加入到.vimrc中,如:

nmap  :nohlsearch
以上命令表示,在正常模式下按F2键相当于输入":nohlsearch"后面跟一个回车,即取消搜索加亮显示。

再看几个搜索替换的实用例子。

  • 去掉所有的行尾空格:":%s/\s\+$//"。"%"表示在整个文件范围内进行替换,"\s"表示空白字符(空格和制表符),"\+"对前面 的字符匹配一次或多次(越多越好),"$"匹配行尾(使用"\$"表示单纯的"$"字符);被替换的内容为空;由于一行最多只需替换一次,不需要特殊标 志。这个还是比较简单的。

  • 去掉所有的空白行:":%s/\(\s*\n\)\+/\r/"。这回多了"\("、"\)"、"\n"、"\r"和"*"。 "*"代表对前面的字符(此处为"\s")匹配零次或多次(越多越好;使用"\*"表示单纯的"*"字符),"\n"代表换行符,"\r"代表回车符," \("和"\)"对表达式进行分组,使其被视作一个不可分割的整体。因此,这个表达式的完整意义是,把连续的换行符(包含换行符前面可能有的连续空白字 符)替换成为一个单个的换行符。唯一很特殊的地方是,在模式中使用的是"\n",而被替换的内容中却不能使用"\n",而只能使用"\r"。原因是历史造 成的,详情如果有兴趣的话可以查看":help NL-used-for-Nul"。

  • 去掉所有的"//"注释:":%s!\s*//.*!!"。首先可以注意到,这儿分隔符改用了"!",原因是在模式或字符串部分使 用了"/"字符,不换用其他分隔符的话就得在每次使用"/"字符本身时写成"\/",上面的命令得写成":%s/\s*\/\/.*//",可读性较低。 命令本身倒是相当简单,用过正则表达式的人估计都知道"."匹配表示除换行符之外的任何字符吧。

  • 去掉所有的"/* */"注释:":%s!\s*/\*\_.\{-}\*/\s*! !g"。这个略有点复杂了,用到了几个不太常用的Vim正则表达式特性。"\_."匹配包含换行在内的所有字符;"\{-}"表示前一个字符可出现零次或 多次,但在整个正则表达式可以匹配成功的前提下,匹配的字符数越少越好;标志"g"表示一行里可以匹配和替换多次。替换的结果是个空格的目的是保证像 "int/* space not necessary around comments */main()"这样的表达式在替换之后仍然是合法的。

希望上面的这些简单的例子能够引起你使用Vim的正则表达式高效完成任务的兴趣。进一步的信息可参考":help regexp"。

自动完成和路径设定

Vim支持单词的自动完成。比如,你前面使用了一个很长的变量名,叫aLongVariable,下面你在输入时,就不用完整键入了。很可能,你只 需要键入"aL",然后按下"Ctrl-P"(向前搜索可匹配的单词并完成)就可以得到完整的变量名(没有得到想要的结果的话,多按几下"Ctrl- P";或者前面多输入几个字符,如"aLongV")。类似的命令还有"Ctrl-N"(向后搜索可匹配的单词并完成)、"Ctrl-X Ctrl-L"(搜索可匹配的行并完成)、"Ctrl-X Ctrl-F"(搜索可匹配的文件名并完成)等,具体可参看":help ins-completion"。

如果你并不熟悉这些功能,但也并不觉得这有什么稀奇的话,下面这个例子可能会让你觉得吃惊。请尝试打开一个空白的C文件(vim test.c),并输入:

#include 
int main()

{
pri

最后一行不要回车,直接在"pri"后面输入"Ctrl-P",你将看到"printf"出现。是的,虽然文件里没有"printf",但Vim知 道到哪里去寻找它!在作关键字匹配完成时,如果当前文件和其它打开的文件中没有想要的结果,Vim会自动到"#include"的文件中进行进一步的搜索 (为什么是"#include"呢?请查阅":help 'include'"),搜寻的目录则由选项path决定,其缺省值在Unix(含Linux)下为".,/usr/include,,",代表搜索的目 录依次是文件所在目录、/usr/include和当前目录。根据实际情况,你可能需要在.vimrc文件中设置该选项,加入项目相关的包含目录,注意一 般要保留最后的",,",除非你不需要在当前目录下搜索。

设置了合适的path后,另外带来的一个便利就是可以使用"gf"命令方便地跳转到光标下的文件名所代表的文件中。在上面的例子中,把光标移到 "stdio.h"的任一字符上,键入"gf",则Vim会自动打开/usr/include/stdio.h文件。使用"Ctrl-O"(参见": help CTRL-O")可返回到原先的文件中。

文件跳转和Tags

大家一般都知道,在Vim的帮助窗口中的关键字上双击鼠标或者键入"Ctrl-]"即可跳转至该关键字相关的帮助主题。不过,"跳转至匹配的关键字 "这一功能并不仅仅局限于帮助文件。只要有合适的tags文件(参见":help tags-file-format"),我们同样可以在源代码中使用这个方便的功能,跳转到与关键字匹配的"标记"处(通常是源代码中某一函数、类型、变 量或宏的定义位置)。

要产生tags文件,通常我们使用Exuberant Ctags [15]。一般的Linux发布版中均带有这一工具。Ctags带有的选项数量极多,此处我们仅简单介绍如何在一个典型的多文件、多层目录的项目中使用其 基本功能:我们只需在项目的根目录处键入"ctags -R .",Ctags即可自动在文件中查找、识别支持的文件格式、生成tags文件。目前Exuberant Ctags支持多达33种编程语言[16],包括了Linux下常用的C、C++、Java、Perl、PHP等。有了tags文件,以下的Vim命令就 可以方便使用了(进一步的信息可参考":help tags-and-searches"):

  • :tag 关键字(跳转到与"关键字"匹配的标记处)
  • :tselect [关键字](显示与"关键字"匹配的标记列表,输入数字跳转到指定的标记)
  • :tjump [关键字](类似于":tselect",但当匹配项只有一个时直接跳转至标记处而不再显示列表)
  • :tn(跳转到下一个匹配的标记处)
  • :tp(跳转到上一个匹配的标记处)
  • Ctrl-](跳转到与光标下的关键字匹配的标记处;除"关键字"直接从光标位置自动获得外,功能与":tags"相同)
  • g](与"Ctrl-]"功能类似,但使用的命令是":tselect")
  • g Ctrl-](与"Ctrl-]"功能类似,但使用的命令是":tjump")
  • Ctrl-T(跳转回上次使用以上命令跳转前的位置)

当我们在项目的根目录下工作时,上面这些命令工作得很好。但如果我们进到多层目录的里层再运行Vim打开文件时,这些命令的执行结果通常就变成了错 误信息"E433: No tags file"。这是因为缺省Vim只在文件所在目录和当前目录下寻找tags文件,而我们前面只在项目的根目录下生成了tags文件,Vim无法找到该文 件。解决方法有好几种,我认为一般较简单的做法是对每个项目都在.vimrc文件中增加一个路径相关设定。假设我们有两个项目,位置分别是 /home/my/proj1和/home/my/proj2,那我们可以使用

au BufEnter /home/my/proj1/* setlocal tags+=/home/my/proj1/tags
au BufEnter /home/my/proj2/* setlocal tags+=/home/my/proj2/tags
Vim选项tags用于控制检查的tags文件,缺省值为"./tags,tags",即前面所说的文件所在目录下和当前目录下的tags文件。上 面两行自动命令告诉Vim,在打开项目目录下的文件时,tags选项中的内容要增加项目的tags文件的路径。进一步信息可参看":help 'tags'"。

Make 和 grep

Make [17]和grep [18]应当算是Unix世界里无人不晓的基本工具了吧。很自然的,Vim对它们有着特殊的支持。该支持主要通过访问一个特殊的快速修订窗口 (quickfix window)来实现。直接在Vim的命令模式里输入相应的make或grep命令(如":grep foo *.c")即可将命令的执行结果放入该窗口,同时根据返回的结果跳转到第一个错误(make的情况;在使用grep时是匹配成功之处)。以下是常用的"快 速修订"命令:

  • :cn(显示下一个错误)
  • :cp(显示上一个错误)
  • :cl(列出所有的错误及其编号)
  • :cc(跳转到指定编号的错误)
  • :copen(打开快速修订窗口,在其中显示所有错误,可在错误上双击鼠标或按回车键跳转至该错误;示例参见下图)


  • :cclose(关闭快速修订窗口)

Vim 的这个特性也可以与make和grep以外的程序一起工作(事实上,在Windows XP上,":grep"命令一般调起的是"findstr /n")。具体调用那个程序由选项makeprg(Linux下缺省为"make")和grepprg(Linux下缺省为"grep -n $* /dev/null")控制,而如何解析返回的内容则由选项errorformat和grepformat控制。鉴于在Unix/Linux下一般不需更 改这些选项的内容,此处不再详述。

执行外部命令

在":make"这样的命令中,Vim会自动调用外部的程序。用户当然也可以自己执行外部的程序:估计很多的人都已经知道了用":!命令"可以在 Vim中执行一个外部命令。不过,估计大部分人都不知道,还有其它一些命令可以执行外部命令,并且,即使":!"命令里面也有一些技巧可以使用。

最正规的执行外部命令的方法,如前所述,就是":!"。比如,我们想要显示当前目录下的所有文件,就可以直接执行:":!ls"。Vim会在一个终 端窗口中进行文件列表,然后提示我们按键返回Vim中。事实上,这种方式对于"cp"、"rm"这样基本不需要输出的命令比较实用,而对于"ls"这样关 注于输出的命令并不太适用。

如果想把外部命令执行的结果插入到当前编辑的缓冲区中,可以考虑使用":r!"。比如,我们使用":r!ls",就可以把"ls"命令的执行结果插入到缓冲区中光标所在行下面。在使用宏时,这可能会特别有用。

Vim的":!"命令还有一个特别强大的技巧可以使用。拿一个实际例子,我们需要对在一个文件的每一行之前插入一个编号,该怎么做呢?--用Vim 的宏或者脚本可以完成这一工作,但这不是最高效、最灵活的工作方式。Linux下一般带有的GNU的nl,可以用非常灵活的方式来完成这一任务--要对所 有的非空行进行编号,只需要":%!nl";要对包含空行的所有行进行编号?OK,":%!nl -ba"。

稍作一点解释。当使用可视模式选中文本行后然后键入":!"(命令行上将出现":'<,'>!",表示命令的范围是选定的文本),或者 使用":%!"(表示命令的范围是整个缓冲区中的文本),Vim在执行后面的命令时,将把命令范围里的文本行作为后面执行的命令标准输入,并用命令执行后 的标准输出替换当前缓冲区中的这些文本行。这就是上面的命令行的工作原理。

定宽文本排版

在传统的Unix环境下,文本文件的定义是具有一定长度限制的文本行的组合[19]。虽然Vim本身对行的长度没有任何实际的限制,但有一些工具有 这样的限制。为了最大程度的兼容性,也为了在显示、打印等处理上比较方便,一般推荐在邮件和源代码中一般不要超出72列(最多不超出80列)。Vim在处 理定宽的文本方面具有特殊的支持能力。下面是一个在Vim中把行宽(使用选项textwidth)设为40后输入Harry Potter and the Half-Blood Prince的第一句话的结果:

It was nearing midnight and the Prime
Minister was sitting alone in his
office, reading a long memo that was

slipping through his brain without
leaving the slightest trace of meaning
behind.

输入时我只使用了英文字母和空格,换行符都是Vim自动插入的。如果在某一行加入或删除了一些字符后行不就不齐了吗,该如何处理?很简单,把光标移 到要重新格式化的文本开头,使用"gq"命令后面跟一个光标移动命令确定重新格式化的范围。比如"gq}"(格式化一段),"gq5j"(格式化5行), "gqG"(格式化至文件末尾)。

除了选项textwidth外,选项formatoptions确定了跟文本格式化有关的基本选项,常用的数值有:

  • t:根据textwidth自动折行;
  • c:在(程序源代码中的)注释中自动折行,插入合适的注释起始字符;
  • r:插入模式下在注释中键入回车时,插入合适的注释起始字符;
  • q:允许使用"gq"命令对注释进行格式化;
  • n:识别编号列表,编号行的下一行的缩进由数字后的空白决定(与"2"冲突,需要"autoindent");
  • 2:使用一段的第二行的缩进来格式化文本;
  • l:在当前行长度超过textwidth时,不自动重新格式化;
  • m:在多字节字符处可以折行,对中文特别有效(否则只在空白字符处折行);
  • M:在拼接两行时(重新格式化,或者是手工使用"J"命令),如果前一行的结尾或后一行的开头是多字节字符,则不插入空格,非常适合中文

上面提到的注释,可以是C/C++中的"//"和"/*",也可以是邮件中引用原文使用的">"等字符(具体由comments选项控制;参 见":help 'comments'")。Vim在遇到这些字符时,能够相当智能地进行处理,足以完成日常编辑源代码和邮件的需要。在使用一些处理纯文本不够强大的邮件 客户端时,我通常使用Vim编辑邮件(特别是英文邮件),然后把结果贴回到邮件编辑窗口中进行发送。

Vim中formatoptions的缺省值是"tcq",一般我会在.vimrc文件中加入一行"set formatoptions+=mM"来确保Vim能在中文字符之间折行而不要求空格的存在,并且在大部分情况下可以正确地处理中文重新格式化。

其它小技巧

也许你会觉得这些很有用:

  • %(跳转到与之匹配的括号处)
  • .(重复上次的修改命令)
  • `.(跳转到最近修改过的位置)
  • ZQ(无条件退出)
  • ZZ(存盘退出)
  • ga(显示光标下的字符在当前使用的encoding下的内码)
  • guw(光标下的单词变为小写)
  • gUw(光标下的单词变为大写)
  • :TOhtml(根据Vim的语法加亮的方式生成HTML代码;在图形界面中也可以使用菜单"Syntax-Convert to HTML"达到同样效果)

无聊的时候,还可以试试(呵呵!):

  • :help!
  • :help 42
  • :help holy-grail

2009年5月31日星期日

若干刘益谦语录

  1,我做小生意的时候就见过很多牛人,但是他们很多人都已经在这个市场倒下;人生不在于哪个阶段做得好,也不在于上什么排行榜,对于一场马拉松赛跑而言,前20公里跑第一又有什么意义呢?
  
  2,全世界股票没有流通和不流通的区别,中国的法人股最终是要流通,早晚都要解决。我看到它的差价,看到它的风险边际。很多人都认为法人股要放三年五年,心态浮躁不肯买。现在有人说'哎哟,你获利太多了',其实投资机会是永远公平的,关键看你有没有耐心。
  
  3,关于认购证的常识判断:我经过调研和简单的计算,大约算出这个中签率是10.3%,这也就表示理论上100张认购证至少有10张会中签,而每1000张理论上都会多出3个中签机会。当时每100张认购证成本价3000元,最高炒到了19000元,明天就要摇号,今天我以每百张20000多元的高价大量收购,但是我并不交付现金,而是与卖家约好,明天摇号结果出来后,再交款。实际情况是,每一张中签的认购证已经炒到了3万元。那么,我花20万元买的1000张认购证,理论上至少中100张,价值300万。"
  
  4,牛市只是个过程,熊市才是结果,如果人人都赚钱,赚的是谁的钱?真正大的获利,都是在熊市中兑现的。
  
  5,我从来不看K线图,K线图有什么用?所有的K线图都是对过去的呈现总结,它无法代表将来。
  
  6,人最难战胜的是自己的欲望。
  
  7,我以前是没做过实业,但是现在照样可以管理一个公司,当上市公司的董事长有什么难?还有比资本投资更难的事情吗?
  
  8,我确实从股市挣了不少钱,但是在我所有投资中,要讲回报率最高的当属艺术品。我其实弄不清楚这个行业,我是从什么心态去买的?占有,就是从人的欲望去买。我就买贵的、好的。有朋友跟我说,这幅画好在哪里,我根本搞不清楚,我知道大家都说它好,'为什么好'不是我研究的地方。