last working day

明天是我入职人人网第五年的第一天, 今天是第四年的最后一天, 如果我还在人人网, 我可以说我在一个地方工作有五年了, 但是我不在了, 今天是我的last working day.  我在人人网完整了工作了 4×365 天.

记得第一年, 一位前辈说, 在一个行业工作5年以上才能算得上这个行业的专家, 作为一个平凡人, 我一直以这个可以量化的数字督促自己. 但是我没有坚持下去. 4年虽然也不短, 但是和脆弱未知的生命比起来真的很长.

第一次来笔试, 我把百度地图打出来, 坐地铁到了东直门, 却怎么也找不多换乘的公交车, 上了一辆出租车, 却坐到了静安市场. 笔试完后走到了东直门.

第一次面试, 在楼道里面看见一个人用英文打电话, 我进了办公室, 老白给我做的面试, 我忘记老白都问了什么,  只记得面试结束后, 老白说, 你下次来吧, 找不到老大了, 你下次来让他跟你聊聊.

第二次面试, 一个看起来很年轻的人, 快速的把我从23楼领到了25楼, 他就是老大, 就是那个在楼道里打电话的人, 后来知道他叫”黄晶”. 和现在进来的技术同学比起来, 我还真是幸运, 是黄晶和老白给我的面试.

最后人事面试的, 人事问我, “你为什么要来人人网?”, 我说, “我想和更聪明和更优秀的人一起工作”.

结果, 我实现了愿望, 我确实和聪明的, 优秀的人一起工作了完完整整的4×365天.

第一天上班, 老洪带我认识了一个人, 介绍他是校内最牛的DBA, 那个人自嘲了一下, 说自己是个NBA. 那个人叫做启容.

我拿到一台机器, 是一个叫做”小熊”的刚刚离职的同学留下的, 拿到机器后, 一个个子不高, 头发很短, 甚至没有, 说话有些结巴的人, 他给了我一张机器领取单, 让我签字, 我从那个NBA手中借了一管钢笔, 歪歪扭扭的把自己名字写在上面. 交给了那个说话结巴的”内网同学”, 后来我知道, 这个”内网同学”有一间叫做”3J”的办公室, 而且就在我的对面, 大家都叫他 Jack.

在后来, 我认识了, 小白, 曲浩, 孙际, 赵芳, 静思, 张健… 以上排名按照我认识的时间顺序.

我在这四年学到了很多, 经历了也不少, 身边的同学来来往往, 大家不断的挑战新的任务, 与自我. 每一个人都是那么的友善, 谢谢每一个帮助过我的同学.

2012年5月21日

我的thinkpad x200s 最近总丢失无线网卡,忘记了是升级ubuntu12.04后还是之前的事情了。

不过在网上看到了一个解决方案,安装linux-firmware-nonfree就好了,我已经安装了,但是还没有重启。先记录一下。

 

2012-5-24日,重启后,使用无线网卡运行又丢失了。依旧没有解决问题。

Google, Mozilla, 的中文名跟Evernote一比简直弱爆了

Evernote中文名称出来了,叫做“印象笔记”,不是“印像笔记”哦,虽然“印象”和“印像”同义,但现实对于Evernote来说”印象”更加贴切啊,“印着大象的笔记”。

Mozilla叫做“谋智”,简直体现不出来霸气,应该叫做“怪兽”。

Google的“谷歌”这个弱智名字一点都不geek,听起来毫无感觉,非常官僚,应该叫做“无限大”或则“100次幂”。

还有Facebook,虽然还没有进入中国市场,但是在中国专利档案上面可以查到中文名字,我记得叫做“菲斯布克”,反正是一个音译的名字,我建议就叫做“花名册”,或着干脆就叫“通讯录”的了,反正他本来也是这个意思。或着“一个通讯录”(thefacebook)。

Bash 小技巧 !!

标题中的’!!’并不是感叹词,而是要提到的主角’!!’

  • ln -s ~/tools    /usr/bin/tools
  • Permission denied

遇到过这种情况?

一般人会…

  • sudo ln -s ~/tools    /usr/bin/tools

更简单的做法: 

  • sudo !!

忘记初始化kerberos也一样 

  • ssh 10.3.x.xx #no permission
  • kinit && !!

=?gb2312?B?zfXMqQ?= 什么意思? — 编码小知识普及

你的邮件有没有收到类似这样发件人发来的邮件?收到的时候是否有崩溃的感觉??

其实很简单,我来告诉你这个什么意思吧,

首先这是一个字符串,并且按照’?'分割成5部分

‘=’ :一个转码过的字符串的开始
‘gb2312′:字符串原来的编码为gb2312
‘B’:现在的编码 ‘B-encoding’,也就是base64的意思
‘zfXMqQ’:真正的值,也就是编码过的字符串
‘=’:结束
怎么解码呢?把’zfXMqQ’这个base64编码的值转成gb2312,你就可以在gb*的系统中看了,如果你的系统是utf-8的,还需要把刚才的结果再转成utf-8。

也就是:

echo “zfXMqQ” | base64 -d | iconv -f gb2312 -t utf-8
如果你手头正好有台*nix,并且安装了base64和iconv这两个工具运行一下吧,是不是有点意思? ^_^

因为我一直用mutt看邮件,最近要写一个脚本,扫描一下所有邮件中的联系人,整理一个通讯录,所以研究了上面的内容。

用kindle 3看漫画

kindle看书的好处简直太多了,轻便易携带,不伤眼,可以调整字体大小,丰富的第三方云推送服务。现在在地铁上已经不习惯看纸制书。

但看漫画有些不方便,因为网上很多漫画都是rar格式,而且两页连在一起,很多漫画还是从右往左看的。

后来发现可以用工具ImageMagick轻松解决这些问题。

convert $i -crop 2×1@ +repage +adjoin $i

写了一个工具

可以输入漫画目录和zip/rar包,
支持左右两种方向阅读的漫画,
支持打包成zip
如果你用的是*uix, 并且安装了ImageMagick就可以体验一下了

传送门 (https://github.com/wangtai/Kindle-Comic/blob/master/kindle_comic.bash)

==========

如果放到ipad中可以看彩色的

人人转发浏览器插件

javascript:(function() { var scripts = document.getElementsByTagName(‘script’); var i = 0; for (i; i < scripts.length; i++) { if ('http://widget.renren.com/js/forward.js' == scripts[i].src) { return false; } } var head = document.getElementsByTagName('head')[0]; var config = document.createElement('script'); config.type = 'text/javascript'; config.textContent = 'window.__fwdCfg = {"api_key" : "1822613f8b894453b268eaf733315da0","img_minWidth": 260,"img_minHeight": 260,"text_minCount":15};'; var renren = document.createElement('script'); renren.type = 'text/javascript'; renren.src = "http://widget.renren.com/js/forward.js"; renren.async = "true"; head.appendChild(config); head.appendChild(renren); })()

alias 菜单=’cd’

经常在中文输入法和英文中切换,有时候在使用终端的时候经常出错,例如将 cd打成’菜单’,所以还要删除掉很麻烦。今天在.bashrc中加了这个别名定义,^_^以后不怕打错了

alias 菜单=’cd’

ie 302 post cookie

今天遇到了一个倒霉问题。在ie下302 post set-cookie,cookie丢失。只有在ie会出现这个问题。ff & chrome会兼容掉这个错误,所以没有bug。

问题产生的原因:

The HTTP 1.0 standard per http://www.w3.org/Protocols/rfc2109/rfc2109 in section “4.3.5 Sending Cookies in Unverifiable Transactions” says that cookies should not be set from unverifiable transactions. It states specifically that “Unverifiable transactions typically arise when a user agent automatically requests inlined or embedded entities or when it resolves redirection (3xx) responses from an origin server.” So, “Set-Cookie” is not to be acted upon by browsers / user agents for 3xx redirects. Nothing in HTTP 1.1 changes this part of HTTP.
观察Http Header可以直观的了解到问题,关键部分已经标出:

here is FF header:
POST /app/account/process_login HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.example.com/app/account/login
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
back=&username=testuser&password=1234567
HTTP/1.x 302 Found
Server: Apache/1.3.36 (Unix) mod_auth_tkt/2.0.0rc2 mod_perl/1.29
Set-Cookie: auth_tkt=YTg3OWYyZjVlYmQ5ZTllM2Q3NWExNzdmMTRhMjI3ZGI0NzBlYzIzYnRlc3R1c2VyITI%3D; path=/;
Location: /app
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/plain
———————————————————-

http://www.example.com/app

GET /app HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://www.example.com/app/account/login
Cookie: auth_tkt=YTg3OWYyZjVlYmQ5ZTllM2Q3NWExNzdmMTRhMjI3ZGI0NzBlYzIzYnRlc3R1c2VyITI%3D
HTTP/1.x 200 OK
Server: Apache/1.3.36 (Unix) mod_auth_tkt/2.0.0rc2 mod_perl/1.29
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=ISO-8859-1
———————————————————-

here is IE header
POST /app/account/process_login HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*
Referer: http://www.example.com/app/account/login
Accept-Language: en-us,en;q=0.5
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)
Host: www.example.com
Content-Length: 40
Connection: Keep-Alive
Cache-Control: no-cache
back=&username=testuser&password=1234567
HTTP/1.1 302 Found
Server: Apache/1.3.36 (Unix) mod_auth_tkt/2.0.0rc2 mod_perl/1.29
Set-Cookie: auth_tkt=NmY4ZDFiZDZhODgxZTk0ZTkwNDIyZjU5MmRmNGMwY2Q0NzBlYjk1MXRlc3R1c2VyITI%3D; path=/; expires=Fri, 12-Oct-2007 01:01:21 GMT
Location: /app
Keep-Alive: timeout=15, max=99
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/plain
GET /app HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, */*
Referer: http://www.example.com/app/account/login
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)
Host: www.example.com
Connection: Keep-Alive
Cache-Control: no-cache
HTTP/1.1 200 OK
Date: Fri, 12 Oct 2007 00:01:21 GMT
Server: Apache/1.3.36 (Unix) mod_auth_tkt/2.0.0rc2 mod_perl/1.29
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=ISO-8859-1
啥也没有

简单的压力测试工具 ab

ab Apache HTTP server benchmarking tool,可以用作简单的http压力测试工具,在有些时候在没有运维组帮助的条件下我们可以完成一些压力测试。虽然使用简单但是功能却不简单,应该是很强大。

它的功能包括:

1. 单线程多次请求

2. 并发多次请求

3. 用户认证信息请求

4. 带Cookie信息请求

5. 设置发送数据大小

6. 支持 SSL/TLS 协议

7. 自定义header

8. PUT file

9. 报表

10. csv报表

… …

太多了,强大到所有类型的http协议压力测试都可以实现。感兴趣的同学可以看一下man ab。但使用起来却出奇的简单。 比如:

# 请求http://www.renren.com/home 2000次

ab -n 2000 http://www.renren.com/home

output:

This is ApacheBench, Version 2.3

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/

Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.renren.com (be patient)

Completed 200 requests

Completed 400 requests

Completed 600 requests

Completed 800 requests

Completed 1000 requests

Completed 1200 requests

Completed 1400 requests

Completed 1600 requests

Completed 1800 requests

Completed 2000 requests

Finished 2000 requests

Server Software: nginx/1.1.7

Server Hostname: www.renren.com

Server Port: 80

Document Path: /home

Document Length: 134 bytes

Concurrency Level: 1

Time taken for tests: 41.018 seconds

Complete requests: 2000

Failed requests: 0

Write errors: 0

Non-2xx responses: 2000

Total transferred: 724000 bytes

HTML transferred: 268000 bytes

Requests per second: 48.76 [#/sec] (mean)

Time per request: 20.509 [ms] (mean)

Time per request: 20.509 [ms] (mean, across all concurrent requests)

Transfer rate: 17.24 [Kbytes/sec] received

Connection Times (ms)

min mean[+/-sd] median max

Connect: 1 3 67.2 2 3007

Processing: 8 17 71.5 11 2270

Waiting: 8 17 71.5 11 2270

Total: 10 20 98.0 13 3017

Percentage of the requests served within a certain time (ms)

50% 13

66% 13

75% 14

80% 14

90% 15

95% 17

98% 45 #百分之98的请求时间小于45ms ,还不错

99% 195

100% 3017 (longest request)

上面的内容很多,Requests per second: 48.76 [#/sec] (mean) ; Time per request: 20.509 [ms] (mean)这是我们关心的。表示每秒可以请求48次,平均每次请求20ms。以上内容是在我本地做的测试。

当然,还有其他用法如下:

# 20个线程,请求总数2000次

ab -n 2000 -c 20 http://www.renren.com/home

#测试需要cookie的请求

ab -n 2000 -c 20 -C t=ticket http://www.renren.com/home