发布时间:2012-01-22 22:19:32 | 分类:
生活 | 标签:
生活 |
抢沙发
虽然公历2012已经来到,但对于我等天朝屁民而言,过了今晚,才算是迎来正统的世界末日之年。
赶在末日前的最后几个小时,对照去年的年度计划,制订的挺多,实现的没多少。书是看了几本,但身体锻炼方面,没有新爬的山,没有打过羽毛球,远门旅游都推迟到明年阳春三月了。不过虽然计划内的事情没完成多少,但计划外的事——求偶,却在不经意间很自然地完成了。她开朗、幽默、乐观、大方;与我兴趣相投;第一眼看到就会喜欢;有点小肉,还有各种我喜欢的的小优点。
今年就不制定计划了,把去年还没完成的实现就OK了。
有些事情,现在不做,你就得抓紧时间做了。
谢谢五月天,谢谢《第二人生》。
发布时间:2012-01-22 21:30:47 | 分类:
Mac | 标签:
Mac |
抢地板
- MacBook Air合上盖子前把手机连上,合上盖子后就是一个巨大的移动电源。回家这一路上15个小时,Meizu MX这个耗电大户居然还能一直玩到家。
- 回家后拿出电源,发现竟然无法充电。把电脑放在火炉边烤了一晚上,也没啥反应,MagSafe接口一直不亮灯,后来急得走投无路,病急乱投病地把白色电源也放到火炉边烤了下,竟然行了。这才知道,网上说把电脑热一下,是指把电源热一下。
- 病急乱投医时,打了苹果的客服热线,客服小姐说有一招:按住shift+option+command+开机键 十五秒,然后松开,重新开机,不过好像不适用于我这种。
- TotalTerminal是个随手呼出的终端,在Linux下爱用Tilda的朋友应该会很喜欢这个软件。
发布时间:2011-10-22 14:59:59 | 分类:
Vim | 标签:
Vim |
抢沙发
处理文本时,有这么一个需求:一个包含大量聊天记录的文本文件,有两列。一列是时间,一列是内容。大致如:
1319265479, 你好啊。
...
现要将第一列的Unix时间戳转换成”2011-10-22 14:37:59″这种形式。
我第一反应就是用Vim。但发现,每一行的时间戳都不一样,不能直接简单的查找替换。其次,使用sed来处理每行,使用某个程序来将时间戳转换成直观的时间。但据我查找,Linux下的date可以将时间戳转成直观的时间,但Mac OS X下的date却不能做到。再次,我只好回到Vim里,打算从文档看看查找替换时能不能支持函数来转换匹配的字符串,结果还真有。
因为这文件里的时间戳已经很有规律了,都是以131开头的,所以我就用简单的匹配来做了。
:%s/\(131\d+\),/\=strftime("%Y-%m-%d %H:%I:%S", submatch(1)) . ", "/g
下面简要解释下这个正则表达式。:表示进入Vim的命令模式,%s表示进行全局替换,\(131\d+\),表示匹配以逗号结尾的时间戳,\=strftime()表示将先执行函数strftime(),将返回的结果进行替换,submatch(1)表示将匹配的时间戳当作strftime()的参数,.”,”表示将strftime()的结果与”,”组合起来(.号表示连接两个字符串)。这个正则表达式应用在文首的例文,进行展开后的结果如下:
:%s/1319265479,/=\stftime("%Y-%m-%d %H:%I:%S", 1319265479).","/g
等同于:
:%s/1319265479,/2011-10-22 14:37:59,/g
关于这种用法,可以Vim中使用
:h sub-replace-\=
来查看相关文档。
发布时间:2011-09-29 16:39:59 | 分类:
生活 | 标签:
诗歌 | 要查看留言请输入您的密码。
还记得我刚接触到Ubuntu的时候,是在06年那会儿。Ubuntu 6.06刚出来,国内有个组织将其做成了适合国情的版本,名为Hiweed。那时,Hiweed吸引我的最主要一个特性就是3D桌面。在我内存为512Mb的电脑上,安装好Hiweed,竟然都不用安装任何其它驱动程序,就顺利开启Compiz桌面特效。鼠标滚轮在桌面上一拔,桌面立方体就转得异常欢快,且感觉不到一丝迟钝。
从那以后,我但凡在自己电脑上安装Linux,首选就是Ubuntu。从6.06一直到最近的11.04,基本上每个版本都有用过。但最近在那台”Air”上,Ubuntu的表现,却不能再让我满意。
“Air”是10年7月买的,到手之后我便格了自带的Windows Vista,装了上最新的10.04,尔后一路升级到11.04。可是自从升级到11.04,我就一直沉浸在Unity和Classic GNOME & GNOME 3的“三角恋”中了。总的来讲就是:我讨厌Unity的界面,又丑又慢;不能适应GNOME 3的剧变,顶上的Panel消失,让我很不能适应;喜欢传统的GNOME 2,但升级之后,总是出现网卡不能激活,X突然重启,键盘突然不能击键诸如此类的烦心事。”Air”机身内存总共就2G,开个Chromium,再加上系统内存泄漏,内存基本就吃没了。不堪忍受此等罪后,刚好KDE 4.7适时发布了,便决定第N次尝试KDE。果然带着对GNOME的怨念,这一次的KDE之旅异常舒适。就连那看着软软控件都觉得非常顺眼了。
KDE统一的用户体验,做得比GNOME要好。至少从应用程序的命名上可见一斑。应用程序菜单里,清一色的K***。至于KDE的其它优点,我在此不多讲(跑题已经很远了)。现在数数我离开它的理由:虽然说漂亮,虽然说用户体验一致,但桌面环境Plasma时不时的Crash,其它KDE程序也跟着起哄,这让我不能接受。我也想尽一份力去提交Crash Report,结果又是注册,又是填说明,最后还要我查看一个庞大的问题列表以确认我的问题是否位列其中,顿时放弃了。不过,这些理由都不够让我离开它。最关键的还是我对MacBook Air 2011向往已久的心,以及在我多方找人试图从香港私带过关的关键时候,沙子钧居然暴殄天物地在日本买了Air 2011的高配版。就这样,他成为了让我离开KDE的最后一根稻草。
谢谢寻文凯,让我以低于行货价1500¥的价格,拿到了垂涎已久的MacBook Air。轻薄的机身和它的上任Asus UX30比起来,还是要略胜一筹。对于它们俩,我有个不恰当和不适宜的类比:UX30和Air就像是波多野结衣和林志玲。“像”和“是”果然还是有差别的。不仅外在有差别,而且内在更明显。
以后,我会写一些关于Mac OS X的软件推荐及使用心得,这次就到这里了。放上”Air”和Air的合影作为结尾。

Vi/Vim作为我最值得炫耀的编辑器(没有之一),与它的对手Emacs相比,经常被提到的一个优点就是:这个世界上几乎所有的*nix服务器,都会自带Vi/Vim。这个优点带来的方便之处在于,只要会用Vi/Vim,你就可以在任何一台*nix服务器上使用神乎奇技的手法来编辑文件,而不用额外安装软件(Emacs去哭吧)。这个优点几乎在我所有的服务器操作中都用到过,但在今天,似乎略有不便。
我有一台VPS,这基本上是众所周知的事情了。但中美网速的差别与两国国民生活水平一样大,导致我娴熟的指头在服务器上用Vim直接修改文件时,遇到了十分强烈停顿感。这深深地挫伤了我文思如泉涌的灵感。便想把远程文件下载到本地,修改后再上传,就像Emacs一直以来无奈的做法一样。当然这事必须不能手工去做,不然不仅不能给Vimer长脸,还会被认为是其它阵营派来给Vim抹黑的。
本文的主角是netrw.vim,它可以让Vim直接编辑网络上的文件(当然是netrw已经把该文件下载到临时文件里了),并且还支持保存到网络上(如果有写权限的话)。不知道从什么开始,它便成为Vim默认自带的插件了。在大多数现代GNU/Linux发行版里,安装Vim时都会顺便把它给装上了。
netrw使用起来也很简单。在终端里可以直接:
$ vim ftp://user@some_url/path/filename
这样便可以编辑一个远程文件,其它操作,便与编辑本地文件无异,该’:w’或’:q’时都悉听尊便。
但并不是所有的远程文件都能这么方便的访问,像我今天修改的那个文件,只有通过ssh才能访问到,并且ssh还是有key认证的。但是呢,对于我而言丝毫不影响,因为我还可以这样:
$ vim scp://t@tigerlee.me/path/target_file
也许你这样做,并不会成功,当然不成功的原因是多样的,最主要原因可能是你不能顺利地(不用输入密码,没有任何交互的提示)使用
$ scp://t@tigerlee.me/path/target_file .
来将target_file拷贝到本地。如果能做到顺利,那么你也会成功的。要实现顺利地使用scp,无外乎就是去掉一些不必要的认证过程,使用不带密码的key是最方便的了。详细使用参见netrw的文档:‘netrw-ssh-hack’,有Vim的哥们呢,就直接使用’:h netrw-ssh-hack’来看好了。
当远程文件拥有一个冗长的路径时,直接输入全部路径可能比较麻烦,因为它又不能使用Tab补全。这时可以先输入:
$ vim scp://t@tigerlee.me/
然后再在稍后出现的路径列表里慢慢选了。
netrw共支持三种使用模式:远程编辑,远程浏览(包括浏览目录内容),远程写入。不同的模式,支持的协议也不同。这是理所当然了,不然对于HTTP地址的文件,怎么写入啊?以下是不同模式支持的协议:
远程编辑
:e dav://machine[:port]/path uses cadaver
:e fetch://[user@]machine/path uses fetch
:e ftp://[user@]machine[[:#]port]/path uses ftp autodetects <.netrc>
:e http://[user@]machine/path uses http uses wget
:e rcp://[user@]machine/path uses rcp
:e rsync://[user@]machine[:port]/path uses rsync
:e scp://[user@]machine[[:#]port]/path uses scp
:e sftp://[user@]machine/path uses sftp
远程浏览
:Nread ? give help
:Nread "machine:path" uses rcp
:Nread "machine path" uses ftp with <.netrc>
:Nread "machine id password path" uses ftp
:Nread "dav://machine[:port]/path" uses cadaver
:Nread "fetch://[user@]machine/path" uses fetch
:Nread "ftp://[user@]machine[[:#]port]/path" uses ftp autodetects <.netrc>
:Nread "http://[user@]machine/path" uses http uses wget
:Nread "rcp://[user@]machine/path" uses rcp
:Nread "rsync://[user@]machine[:port]/path" uses rsync
:Nread "scp://[user@]machine[[:#]port]/path" uses scp
:Nread "sftp://[user@]machine/path" uses sftp
远程写入
:Nwrite ? give help
:Nwrite "machine:path" uses rcp
:Nwrite "machine path" uses ftp with <.netrc>
:Nwrite "machine id password path" uses ftp
:Nwrite "dav://machine[:port]/path" uses cadaver
:Nwrite "ftp://[user@]machine[[:#]port]/path" uses ftp autodetects <.netrc>
:Nwrite "rcp://[user@]machine/path" uses rcp
:Nwrite "rsync://[user@]machine[:port]/path" uses rsync
:Nwrite "scp://[user@]machine[[:#]port]/path" uses scp
:Nwrite "sftp://[user@]machine/path" uses sftp
http: not supported!
小总结一下:
- 网速慢,文件小的情况下,可以使用此法编辑远程文件。
- 网速快,文件大的情况下,那就远程编辑文件吧。
- 网速慢,文件大或网速快,文件小的情况下,你应该明白怎样做吧?