EverET.org

好记性不如烂笔头

Git-svn历险记

| Comments

引言

这段时间因为作业原因又用回了Google Code的svn服务,瞬间感觉又倒退了很多年。

想起以前使用Google Code的svn服务,每次提交,查看log都要等上几分钟,都几乎没了Commit的兴致了。以前,我只是怪罪于学校的网络环境实在太恶劣了。

后来,直到我遇上了Git,才发现,这不仅仅是网络的问题,svn的这种集中式的版本控制在广域网本身就是一种缺陷。

在Chrome Console中加载jQuery

| Comments

现在有时候会在console里面玩弄一下某些网站,而某些网站可能没有加载jQuery,所以我们就要自己手动加载。

粘贴到Chrome的Console中。

Load jQuery from Console
1
2
3
4
var jq = document.createElement('script');
jq.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js";
document.getElementsByTagName('head')[0].appendChild(jq);
jQuery.noConflict();

自动监控Nginx进程

| Comments

今天在长途车上,收到邮件说服务器挂了,马上手机登上去。发现nginx进程全部死掉了。

看了半个小时的日志,nginx和dmesg的都没有任何有意义的信息。不过估计又是out of memory,因为最近我把php-fpm的max_children从3调到了4。不过也很纳闷为啥每次nginx挂掉都没有任何日志留下。OpenVZ的vps真是蛋疼。

我的2012

| Comments

明天就要离开学校回家了,也预示着我的大四上学期已经要彻底结束了。借此机会,回顾一下我的2012。

2012是一个耳熟能详的词,估计也是源于电影《2012》。

2012年的第一天

2011年12月31日晚上,我们在爬广东第一峰(在韶关,湖南和广东交界,广东最高峰),希望可以看到2012年的第一缕阳光。于是我们一到山脚下就开始爬,从晚上8点开始,爬到了2012年1月1日凌晨4点才到山顶,中间山里鬼影没一个,黑得伸手不见五指,而且雾大到已经可以看到水滴在空气中悬浮。就这样,我们迎来了2012。

让Emacs显示Markdown中的图片

| Comments

用Octopress或者直接用Jekyll都会涉及到Markdown。我们在写Markdown的时候,会遇到插入截图或者本地图片的问题。如果我们自己手工写上图片的标记,会非常的麻烦,于是我在前文 在Emacs中插入截图或者本地图片 中讲述如何自动化插入图片,来解决插入的问题。

今天我们来看一下如何在Emacs中预览Markdown中的图片。

[学习HTTP] Transfer-Encoding: Chunked

| Comments

在HTTP/1.1中,如果需要保持连接的话,那么Content-Length是必须要提供的。否则就无法确定此次请求的结束位置。

但是,如果我们要在动态生成的过程中就想发送数据,是无法预先知道报文的长度的,所以也就不可能使用Content-Length来指明body长度。那为啥要边生成边发送呢?假设生成完整数据需要30秒,如果要生成完再发送的话,那么就浪费了这30秒的美好的传输时间了。chunked就解决了这个难题,只要服务器允许将body逐块发送,并说明每块的大小就可以了。

那如何边生成边发送呢?

我们可以通过将Transfer-Encoding指定为chunked,来进行分块传输。我们就可以将原本一整块需要说明长度的数据分解成了一小块一小块需要说明长度的数据。就可以边生成边发送了。

定制Emacs GDB调试窗口布局

| Comments

我们在Emacs中可以方便地使用GDB,具体操作在emacser.com有详细的快捷键的教程。不过我觉得其实GDB的CLI已经很好用了。

Emacs中默认可以方便打开多窗格模式,看起来就很像平时大家用的IDE了。

我们只需要M-x gdb-many-windows就可以打开多窗格了,默认布局如下图:

我们可以看到有6个窗格,其中有GDB命令行、局部变量、源代码、程序输出、栈、断点。功能看上去虽然很强大,不过我常用的只有其中几个,于是就决定开始定制Emacs的GDB调试窗口布局。

[学习HTTP] 206 Partial Content

| Comments

俺在把博客放在Github后,除了发现Github的Web Server将Cache-Control设置为max-age=86400外,还发现一个有趣的地方。Chrome在对于MP3文件的访问,Github返回的都是206 Partial Content,后来发现,原来Chrome在请求MP3的时候,会在请求头带上Range: bytes=0-

对于2xx的返回码,都是成功的,不过常见的基本都是200,206到时挺少见滴,于是俺决定看看206究竟有什么特别的地方。

rfc2616日:对于206的定义是请求必须包含Range头来标示我们想要的范围,于是这也就说明Chrome访问MP3的时候因为加了Range头,于是被返回了206。

我们来看一下下面的例子:用curl请求http://everet.org/2013/01/chrome-edit-with-emacs.html,返回200 OK,其中Content-Length: 15845

1
2
3
4
5
6
7
8
9
10
11
$ curl --head http://everet.org/2013/01/chrome-edit-with-emacs.html
HTTP/1.1 200 OK
Server: GitHub.com
Date: Sun, 06 Jan 2013 02:47:09 GMT
Content-Type: text/html
Content-Length: 15845
Last-Modified: Sat, 05 Jan 2013 10:30:34 GMT
Connection: keep-alive
Expires: Mon, 07 Jan 2013 02:47:09 GMT
Cache-Control: max-age=86400
Accept-Ranges: bytes

那根据rfc2616的说法,是不是加上Range后,Web Server就会返回206 Partial Content了呢?我们来通过telnet试一试:

Chrome Edit With Emacs

| Comments

大家在浏览器写长篇的东西时,有没觉得那个纯文本编辑框弱爆了?反正我是这么觉得。像Github、stackoverflow、Wiki等都支持Markdown,对于这种有语法的文本,最好就是用个语法高亮自动排版的编辑器编辑。

在Firefox有It’s All Text!这个插件,可以调用外部编辑器。

而在Chrome里面,也有插件,可以调用外部的Emacs进行编辑,而且可以根据规则自动选择模式,非常方便。它的名字叫Edit With Emacs

安装完插件后,Chrome所有的大Textarea都会出现一个蓝色的edit按钮,一按,就可以用Emacs编辑里面的内容了。