静夜思门犹在

  • 读书
  • 关于
16
三

一个符号引发的血案

By 思门|工作|Be the first to comment!

今天,本人遭遇了自工作以来最黑暗的一次线上事故,十分深刻。

事情的起因是为了排查一个用户短信漏发的问题,故同时操作线上生产环境和线下测试环境,为了调试代码,本应在测试环境进行的调试操作,误在线上执行,将代码中的一个“==”符号改成了“===”,从之前的值相等变成了类型值均相等的判断。随后就引发了此次事故,导致用户已正常接收的短信重发,有部分用户在事故影响周期内接收到了上百条短信。所幸运营同学及时发现反馈了这次事件,并及时对线上代码做了修正,否则周末将会影响大量的用户。

为了警醒自己不再范类似错误,今日必须把事故的起因,经过和结果一一记录,今后在操作生产环境代码时必须冷静谨慎,否则下次可能就不仅仅是骚扰用户这种等级的事故了。

07
二

读《布道之道》所想到的

By 思门|工作|4 Comments

用两天时间,读完了仅百余页的《布道之道》,颇有感触。

作为一名布道者,你必须知道自己为何布道?布道的原则是有效解决正确的问题,此时此刻,布道者需要明白,你是真的希望帮助团队成员提升工作效率,还是只是希望说服别人跟你一样称为某种新技术的粉丝。如果是后者,那么对于团队其他成员而言可能会是一种痛苦,因为他们在不必要的技术方案上浪费了学习成本,更加不幸的是若你推荐的技术并不适合现有团队,需要对项目伤筋动骨甚至推倒重来,导致项目延误将是必然发生的事情。

这时你一定会说,我的布道是为了改变团队。没错,某人也经常说自己的存在,是为了改变世界。但是一个团队的技术沉淀不是一天两天的事情,可能需要三五年的时间才将技术框架成熟,事实证明,历经反复的技术团队往往都会散掉。所以当你团队每个人都熟悉php的时候,你非要让他们转而使用ruby,使用rails,从短期来看,好像技术是炫了,敏捷开发,orm,元编程等等,但是长期来看,团队各成员对新技术热情不一,水平不同,长短板效应,加上你自己可能也只是刚学了半桶水,没办法对更高级的语言特性有深入理解,那么项目后期暴露出的种种诡异问题将不得而解。当初,为什么不考虑借鉴ruby的优势,去改进现有的项目,完善框架,让每个人都能从中受益呢?切记,不要引入对团队现状改变无意义的技术,以及对其它成员学习成本过高的技术,在能轻松驾驭新技术前不要轻易推行。

还有一类人是技术极客型,专用别人之所不用,什么技术偏门学什么,其实这类人是值得尊敬的,当别人在随波逐流的时候,他却依然在自我发掘(因为偏门的技术资料少的可怜),看源码学语言者也不稀罕。倘若三五精英,用偏门技术创业其实也未尝不可,但是在百号人的大团队中推行一些不适合大规模生产的技术,实属不易,且如果团队中没有几个该技术的专家,我想领导层也断然不敢贸然犯险。

虽然书中定义了七种布道怀疑者,但是我个人理解为只有愿意接受新技术的人和不愿意接受新技术的人。对于前者,容易推广你的技术,但是要有所把持,小心物极必反,在恰当的场景用合适的技术;对于后者,则上升为人际交往学的高度(别笑,对于相对单纯的程序员而言,交际能力往往是个人短板),你需要以理服人,投其所好,用各种方法和手段去推行你认为正确的道。

我认为,成功的布道者,应该是能清晰看到团队中的长处与不足,理性推广技术理念,与团队成员充分理解与信任,且具有号召感染力的人。

本文只是个人对技术布道的一些见解,只言片语未经揣度,如有不慎误伤者请绕道。

22
一

HTTP协议之状态码

By 思门|程序设计|1 Comment

今天闲来无事,翻看HTTP1.1协议RFC2616,摘录了一些笔记,还是收获不少,遂将整理的HTTP状态码部分写下。

HTTP状态码规则:
1xx:信息——收到请求,继续处理
2xx:成功——动作成功收到、理解并接受
3xx:重定向——为了完成请求必须采取进一步行动
4xx:客户端错误——请求包含错误语法或无法完成
5xx:服务器错误——服务器无法完成似乎有效的请求

常见HTTP状态码含义:
200 OK 请求已经成功。
301 Moved Permanently 所请求的资源已经指定到一个新的永久URI,且将来任何对该资源的引用都应该使用所返回的URI之一。(永久重定向)
302 Found 所请求的资源临时存在于不同的URI。(临时重定向)
304 Not Modified 如果客户端执行条件GET请求,且允许访问,但文档没有变化,服务器应该返回该状态码。
400 Bad Request 服务器由于畸形的语法,不能理解请求。
401 Unauthorized 请求需要用户认证。
403 Forbidden 服务器理解请求,但拒绝完成。
404 Not Found 服务器不能发现匹配Request-URI的任何东西。
500 Internal Server Error 服务器发生非预期状况,阻止它完成请求。
501 Not Implemented 服务器不提供完成请求所需的功能。
502 Bad Gateway 当作为网关或代理时,服务器从它靠近的上游服务器收到试图完成请求的无效响应。
503 Service Unavailable 服务器当前不能处理请求,因为临时性的负载过重或服务器维护中。
504 Gateway Timeout 当作为网关或代理时,服务器试图完成请求时没有URI指定上游服务器或一些其它所需访问的辅助服务器收到定时响应。

对于互联网开发者而言,虽不需直接书写协议,但是理解协议有助于你更好的编写代码,毕竟浏览器中的网页都是基于HTTP形式展现给用户,所以协议本身还是值得反复研读的。参考资料:
HTTP1.1协议:Hypertext Transfer Protocol — HTTP/1.1

19
一

回顾2011

By 思门|生活|Be the first to comment!

之前因为虚拟主机商的反复不靠谱,导致自己很长一段时间没有心情认真写博客。在2012农历年到来之际,将博客迁移到Linode日本机房的VPS上,目前看来还是相当靠谱。

2011年上半年在前公司履行完一年期的工作合同,决定休息一段时间,调整一下心态,这一年确实太累了,身体也开始落下不少毛病。尽管只做了短短一年,但这一年在工作中的技术积累绝对是一笔宝贵的财富。

而后抽空从上海去了一趟天津,回母校看了看,站在宿舍楼下回想四年前的往事,仿佛如昨。我想今后再也回不去那个曾经熟悉的校园,因为在那之后这块土地将转为他用。

从天津回来之后,七月,开始有猎头电话陆续打来,但基本都婉言谢绝了。因为很清楚自己想要的不再只是一份工作,或者丰厚的待遇这么简单,我期望的是一家能提供长期稳定收入,有挑战性的工作内容,有自我成长空间的企业。

就这样,我离开了工作生活四年的上海,当公积金销户提取之后,我的社会关系从这座国际化大都市转移到“人间天堂”杭州。酷夏高温找房看房,异地搬家,也着实是场不小的折腾,当时感叹为什么在杭州想找个独居的一室比上海还难!

8月4号,正式加入阿里云。

从入职到现在,有近半年的时间了,经历过部门的人员调整,业务的需求变更。。。其实阿里巴巴也是一家普普通通的大公司,有一些人会犯错,有一些事会做错,它并不完美。但所幸的是,有更多清醒的人在做事,路走对了,就不怕远。

来杭州后,我终于能在每天晚上6点准时吃上晚饭,也有机会可以在饭后和同事打几局台球,早上不用急忙早起赶早高峰,仿佛生活节奏渐渐的慢下来。最重要的是,我开始存钱了。

来杭州后,我买了一台Macbook Pro,看了几本自认为不错的技术书籍,在公司做了两个相对还算重要的项目,拿到了公司的年终奖。

我的2011,感谢这么多年来长期支持理解和鼓励我的家人,以及不离不弃陪伴在我身边的可爱女人。

我的2012,开心工作,认真生活!

23
十

分享vim配置文件

By 思门|工作|Be the first to comment!

作为大多数*nix环境自带的编辑器,不得不说vim是一款功能强大而且灵活的IDE,折腾了半天,参考不少资料,结合自身的开发需求,整理出了一份自认为还不错的vim配置,在此留底,已备后用,也希望能对vimer有所帮助。

其中整合了四款常用插件,这些在vim官网都提供下载。

  • NERDTree
  • NERD Commenter
  • Taglist
  • snipMate

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
" File: .vimrc
" Author: minh.shu<minh.shu@gmail.com>
" Description: minh's personal vim config file.
" Blog: http://blog.imminh.com/
" Since: 2011-10-22
if v:version < 700
echoerr 'This .vimrc requires Vim 7 or later.'
quit
endif
" 获取当前目录
func! GetPWD()
return substitute(getcwd(), "", "", "g")
endf
" ============
" 环境设置
" ============
" 设置字体大小
set guifont=Monaco:h12
" 隐藏工具栏
set guioptions=aAce
" 保留历史记录
set history=500
" 关闭 vi 兼容模式
set nocompatible
" 光标可以定位在没有实际字符的地方
set ve=block
" 自动切换当前目录为当前文件所在的目录
set autochdir
" 标签页个数和标签显示策略
set tabpagemax=9
set showtabline=1
" 行号和标尺
set nowrap
set number
set ruler
set rulerformat=%15(%c%V\ %p%%%)
" 命令行于状态行
set ch=1
set stl=\ [File]\ %F%m%r%h%y[%{&fileformat},%{&fileencoding}]\ %w\ \ [PWD]\ %r%{GetPWD()}%h\ %=\ [Line]%l/%L\ %=\[%P]
set ls=2 " 始终显示状态行
set wildmenu "命令行补全以增强模式运行
" 定义 <Leader> 为逗号
let mapleader = ","
" 搜索设置高亮忽略大小写
set hlsearch
set magic
set showmatch
set mat=2
set incsearch
set ignorecase
" 制表符
set tabstop=4
set expandtab
set smarttab
set shiftwidth=4
set softtabstop=4
" 状态栏显示目前所执行的指令
set showcmd
" 缩进
set autoindent
set smartindent
" 自动重新载入文件
set autoread
" 插入模式下使用 <BS>、<Del> <C-W> <C-U>
set backspace=indent,eol,start
" 设定在任何模式下鼠标都可用
set mouse=a
" 备份和缓存
set nobackup
set noswapfile
" =====================
" 多语言环境
" 默认为 UTF-8 编码
" =====================
if has("multi_byte")
set encoding=utf-8
if has('win32')
language english
let &termencoding=&encoding
endif
set fencs=utf-8,gbk,chinese,latin1
set formatoptions+=mM
set nobomb " 不使用 Unicode 签名
if v:lang =~? '^\(zh\)\|\(ja\)\|\(ko\)'
set ambiwidth=double
endif
else
echoerr "Sorry, this version of vim was not compiled with +multi_byte"
endif
" =============
" 快捷键绑定设置
" =============
nmap <C-t> :tabnew<cr>
nmap <C-p> :tabprevious<cr>
nmap <C-n> :tabnext<cr>
nmap <C-k> :tabclose<cr>
" 插入模式快捷键
inoremap <C-h> <Left>
inoremap <C-j> <Down>
inoremap <C-k> <Up>
inoremap <C-l> <Right>
inoremap <C-d> <Delete>
" 按下 Q 不进入 Ex 模式,而是退出
nmap Q :x<cr>
" =================
" 插件配置
" =================
" Windows环境默认字符集为gbk
if has("win32")
let g:fontsize#encoding = "cp936"
endif
" 开启插件
filetype plugin indent on
" NERDTree
let NERDTreeShowBookmarks=1
let NERDTreeAutoCenter=1
let NERDTreeShowFiles=1
let NERDTreeWinPos='left'
nmap <C-d> :NERDTreeToggle<cr>
" NERD commenter
let NERDSpaceDelims=1 "让注释符与语句之间留一个空格
let NERDCompactSexyComs=1 " 多行注释美化
" Taglist
if has("unix")
let Tlist_Ctags_Cmd = '/usr/local/bin/ctags'
endif
let Tlist_Show_Menu = 1
let Tlist_Show_One_File = 1
let Tlist_Exit_OnlyWindow = 1
let Tlist_Use_Right_Window = 1
" let Tlist_Auto_Open = 1 "插件自动打开
let Tlist_Auto_Update = 1
let Tlist_Auto_Highlight_Tag = 1
let Tlist_Highlight_Tag_on_BufEnter = 1
let Tlist_File_Fold_Auto_Close = 1
let Tlist_Process_File_Always = 1
let Tlist_Display_Prototype = 0
let Tlist_Compact_Format = 1
nmap <C-l> :TlistToggle<cr>
" =============
" 颜色主题设置
" =============
if has('syntax')
if has('gui_running')
set background=light
else
set background=dark
endif
colorscheme molokai
" 语法高亮
syntax on
endif

1 2 3 4 →

近期文章

  • 一个符号引发的血案
  • 读《布道之道》所想到的
  • HTTP协议之状态码
  • 回顾2011
  • 分享vim配置文件

分类目录

  • 数据存储 (6)
    • MySQL (1)
    • Redis (5)
  • 程序设计 (5)
    • Javascript (1)
    • PHP (3)
  • 随笔 (5)
    • 工作 (4)
    • 生活 (1)

文章归档

  • 2012 年三月 (1)
  • 2012 年二月 (1)
  • 2012 年一月 (2)
  • 2011 年十月 (1)
  • 2011 年九月 (2)
  • 2011 年六月 (2)
  • 2011 年二月 (1)
  • 2011 年一月 (4)
  • 2010 年十二月 (2)

链接表

  • army8735
  • Loki's Blog
  • PHPPan
  • YMMUSE
  • 先贝
  • 八岐社
  • 大罗(Giko)技术空间
  • 此处荒无人烟
  • 清枫流影
  • 落
  • 阿飞呓语

功能

  • 注册
  • 登录
  • 文章 RSS
  • 评论 RSS
  • WordPress.org

Powered by the inLine Minimal WordPress Theme