Vim进阶索引

Mar 15th, 2010 | Filed under Vim
Comments Off

学习使用 Vim 大约已有4、5年了,直到今天仍然有很多不懂的东西,精通自然谈不上,只能说初窥门径。看 best of vim tips 的作者是怎么说的:

David Rayner (zzapper) 15 Years of Vi + 4 years of Vim and still learning

这位大叔,搞了 15 年的 Vi,又搞了 4 年的 Vim,可依旧在学习。看来 Vim 真的是一个可以学到死的文本编辑器。

奇妙的之处就在于,你并不需要完全精通 Vim才能应用到工作中。实际上你只需要了解一些基本的东西,比如模式,光标移动,几个基本的编辑命令就可以让你的编辑效率提高很多,其它的就在实际的工作中根据自己的需要慢慢发掘。

如果你初次接触 Vim,那么建议你运行一下 Vim 安装目录下下面的 vimtutor,了解一下 Vim 的基础知识,花几天时间你就能完全适应它;如果你已经被 manual 中各种眼花缭乱的指令吓傻了,建议你忘掉那些指令,就算暂时记住了,如果用不到你也很快会忘记。

下面是我在网上看到的一个牛人写的教程,涉及到了 Vim 中的很多高级特性,但没有太多让人眼花的指令,读完之后定会有所收获。

:lol:

Tags:

分析 fastcgi_temp 错误以及 Nginx 的 Buffer 机制

Mar 13th, 2010 | Filed under Ubuntu
Comments Off

最近在使用 phpMyAdmin 的时候,发现一个很让人蛋疼的问题,在每次修改表结构时,页面没有载入完成就自动停止了。因为一直使用 svn/trunk 版本的 PMA,开始以为是程序的问题,但是换成 stable 版本后,问题依旧存在,显然走错了方向。于是再查 error.log,终于找到的症结所在。

日志中显示类似下面的错误:

2010/03/13 02:52:19 [crit] 3396#0: *10 open()
"/usr/local/nginx/fastcgi_temp/2/00/0000000002" failed (13: Permission denied)

看起来是权限问题,要完全的解决这个问题,先要搞清楚 fastcgi_temp 目录的作用。

先简单的说一下 Nginx 的 buffer 机制,对于来自 FastCGI Server 的 Response,Nginx 将其缓冲到内存中,然后依次发送到客户端浏览器。缓冲区的大小由 fastcgi_buffers 和 fastcgi_buffer_size 两个值控制。

比如如下配置:

fastcgi_buffers      8 4K;
fastcgi_buffer_size  4K;

fastcgi_buffers 控制 nginx 最多创建 8 个大小为 4K 的缓冲区,而 fastcgi_buffer_size 则是处理 Response 时第一个缓冲区的大小,不包含在前者中。所以总计能创建的最大内存缓冲区大小是 8*4K+4K = 36k。而这些缓冲区是根据实际的 Response 大小动态生成的,并不是一次性创建的。比如一个 8K 的页面,Nginx 会创建 2*4K 共 2 个 buffers。

当 Response 小于等于 36k 时,所有数据当然全部在内存中处理。如果 Response 大于 36k 呢?fastcgi_temp 的作用就在于此。多出来的数据会被临时写入到文件中,放在这个目录下面。同时你会在 error.log 中看到一条类似 warning:

2010/03/13 03:42:22 [warn] 3994#0: *1 an upstream response is buffered to a temporary file
/usr/local/nginx/fastcgi_temp/1/00/0000000001 while reading upstream,
client: 192.168.2.1,
server: pma.verdana.cn,
request: "POST /tbl_structure.php HTTP/1.1",
upstream: "fastcgi://127.0.0.1:9000",
host: "pma.verdana.cn",
referrer: "http://pma.verdana.cn/tbl_structure.php"

显然,缓冲区设置的太小的话,Nginx 会频繁读写硬盘,对性能有很大的影响,但也不是越大越好,没意义,呵呵!

搞清楚了这些,再回到原来的问题上面,phpMyAdmin 生成的页面大小达到了 100+ Kb,内存中缓冲了 36Kb,剩下的会写入的文件中。而实际的情况是,运行 Nginx Process 的用户并没有 fastcgi_temp 目录的写权限,于是剩下的数据就丢失掉了,这也是为什么 phpMyAdmin 页面只显示了一部分的原因了。

找到原因后,解决方法就比较简单了,粗暴的删掉 fastcgi_temp 目录或者温柔的 chown + chmod 都可以解决问题。

:razz:

Tags: , ,

设置 SSH 自动登陆多个不同的主机

Feb 12th, 2010 | Filed under Ubuntu
Comments Off

在《使用 Putty 自动登陆远程 Linux 主机》一文中曾经讲过如何设置 SSH (客户端为 Putty) 来自动登陆 Linux 主机。当需要自动登陆的主机有多台的时候,上文的方法就有点不适合了。这里补全一下,如何搞定多台服务器的 SSH 自动登录。

假设有两台远端 Linux 服务器,host-jack 和 host-vicki。

Read more…

Promise

Feb 3rd, 2010 | Filed under Music
Comments Off

Silent Hill 2: Restless Dreams
Akira Yamaoka

Theme of Laura

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

Promise

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

Tags: ,

Waiting For You ~LIVE AT Heaven’s Night~ (unreleased tunes)

Feb 3rd, 2010 | Filed under Music
Comments Off

Silent Hill 4: The Room
Akira Yamaoka

Waiting For You ~LIVE AT Heaven’s Night~ (unreleased tunes)

Audio clip: Adobe Flash Player (version 9 or above) is required to play this audio clip. Download the latest version here. You also need to have JavaScript enabled in your browser.

Read more…

Tags: ,

使用 Shell 上传代码

Jan 13th, 2010 | Filed under Ubuntu
Comments Off

自从法现 SSH 可以执行远端命令后,ftp 软件也渐渐很少用了。

每次更新服务器代码,都要打包、上传、登录到服务器修改文件权限、更新 Cache 等等,又慢又容易出错,所以做成脚本,一次帮我搞定,自己就点上一根烟坐在电脑面前发呆,要么就玩会儿《植物大战僵尸》啥的,悠闲!

PS: Ant 以及 Phing 用户,你们可以无视了… 我只是喜欢玩 Shell 而已。

Read more…

在 Cygwin 中编译 MySQL 客户端

Dec 30th, 2009 | Filed under Windows
Comments Off

MinTTY 是一个小巧但却很实用的 Cygwin 终端机,但有个严重的问题就是无法调用交互性的 Windows 原生程序,比如说 mysql.exe,当你在 MinTTY 中输入如下的命令:

1
$ mysql -uroot -p

本来 mysql.exe 会提示输入密码,但在 MinTTY 中程序会直接挂起,不再响应,实际上即使在 -p 参数后面跟上密码,也是一样的。

某些程序,比如 python,会提供参数 -i,使自身在终端中进入交互模式,可惜并非所有的程序都有这样的参数。

解决的办法,使用 Cygwin 版本的 MySQL 客户端,但 Cygwin 并没有提供,所以就只有自己动手编译一个!

Read more…

使用 Shell 更新 PHP5

Dec 29th, 2009 | Filed under Journal
Comments Off

我很迷恋 Shell,很喜欢看着字符在黑色的 Console 界面中跳跃着,奇怪的是,我居然没有因此成为一个 Linux/Unix 程序员,而只是个写 CGI 程序的倒霉蛋。大家都是怎么称呼 “PHP 程序员”的?对了——草根~ 嗯,在土里埋的太久,说不定哪天就烂掉了咯! :twisted:

可能是被 Windows 惯坏了,实在不想换个 OS,还好有 Cygwin,MinGW … 之类的东西, 适当的时候,可以拿出来装下 B,自我安慰一下~

我总喜欢从 windows.php.net 下载最新的 snapshot,不是我想体验最新的功能,只是强迫症的关系-,-。我机器上的所有软件,程序都是最新的,绝大部分都还挂着 beta 标签,甚至有一些是直接从 SVN,Git 上面拖下来的 trunk 版本,想想真是变态。如果你每天都爬上这些网站,人肉检查一下是不是有新的版本发布,以此满足一下自己变态的心理,那真是要疯掉了。

Read more…

Tags: , ,

检测 Cygwin 最快的镜像站点

Dec 27th, 2009 | Filed under Journal
Comments Off
检测 Cygwin 的最快镜像站

这是一个 shell 脚本,所以首先你需要安装一个基本的 Cygwin 环境,当然还有 curl。

原理很简单,先从 cygwin.com 下载最新的 mirrors.lst 镜像列表,简单处理一下后,利用 curl 以此检测每个站点的连接速度,并将结果记录下来,最后再排个序,显示出最快的几个站点。 :oops:

在使用的过程中,我发现检测到的最快的 mirror,实际上使用速度并不一定是最快的,这可能和服务器有关系,毕竟 curl 检测的时间只是读取 mirror 首页的时间。不过每个 mirror 一般都有两组服务器——http & ftp,如果其中一个速度不怎么样,那么可以选择另外一个试试看。

Read more…

Tags: ,

误删 site-packages 从来导致 YUM 无法使用的修复方法

Nov 26th, 2009 | Filed under Journal

在客户的服务器上面折腾 trac ,但 PySqlite2 一直编译出错,于是想删掉 PySqlite2 通过其它方式安装。

很自然的想输入如下命令:

#> rm -rf /usr/lib/python2.4/site-packages/PySqlite2

天太冷,没想到手一抖,变成了:

#> rm -rf /usr/lib/python2.4/site-packages/ PySqlite2

于是悲剧就这样发生了,site-packages 瞬间消失… :cry:

Centos 中很多重要服务都会依赖 Python,这个白痴的手误虽然不至于摧毁整个系统,但某些服务显然是不能用了,比如 Yum。

Read more…