Trade Off

supercalifragilisticexpialidocious

Beautiful PS1

今天又加了不少红绿颜色的字在各种输出上,看起来更加顺眼了,无奈server的网关被人修改了,我们也不敢轻易改动,因为编辑们正在使用,怕改了他们不能访问了。。。那个负责人到我们下班都没回来,真不知道干嘛去了。

研究了一下这种颜色是怎么回事,原来是在一个字符串前后加上颜色标记,就和html的标记一样,只不过颜色标记更加让人难以理解。临下班我想研究一下如何做一个autocomplete的veil出来,可惜都搜不到什么资料,可能这不是什么很值得人们写的东西吧,竟是些讲按Tab可以complete,但不说你怎么写code可以实现这种,猜想是有什么hook可以监听tab事件吧:)后来在这里找到一篇文章,介绍了一点原理和写法,准备翻翻我那本《Shell脚本学习指南》看看有没有帮助。

研究这个的副产品就是看到了PS1的介绍,可以搭配出漂亮而功能强大的PS1。

其实PS1就是一个字符串,Ta规定了提示符的那一行会怎么显示出来以及显示什么,这里面你可以写一些函数调用、配色什么的,terminal会自动帮你调用,然后就是显示出来。给你看个展示效果:

PS1 pic

是不是很好看呢?再看看让Ta显示成这个样的PS1字符串长什么样吧:

1
export PS1='\[$(tput bold)\]\[$(tput setaf 3)\]\u\[$(tput setaf 2)\] [\t] \[$(tput setaf 1)\]\W=>\\$\[$(tput sgr0)\] '

相关颜色可不是那么好记忆的如果你用\033、\032这样标记的话,推荐个网站,你可以直接设置好效果,然后复制过来就可以了:http://www.kirsle.net/wizards/ps1.html

Pragmatic Programmer Log2

Software Entropy主要讲了软件遵循物理中的熵增大原理,软件会逐渐变得rot,而这里面还存在一个broken window的问题,一旦开始rot了,到了一定程度,可以说是有了broken window,然后会有越来越多的broken window,因为人们已经不觉得clean code在现在有多么重要,一旦这样的想法形成,就会有跟多这样的想法,最终积累起来就把软件毁掉了。其实这看起来很想是马太效应不是么?

补充几个新单词:

immune:         免疫
delicate:       微妙的
decay:          腐化
hulk:           笨重的东西
crime:          犯罪
substantial:    大量的
graffiti:       涂鸦
infraction:     违法
offending:      冒犯的,违法的
substitite:     用…代替
deteriorate:    恶化
dumpster:       大型垃圾箱
obscenely:      猥亵的,淫秽的
acquaintance:   熟人
tapestry:       挂毯
antique:        古董
hoses:          水管
slip into:      陷入
crap:           粪便
pristinely:     未受损的

The most important factor that can contribute to software rot seems to be the psychology, or culture, at work on a project

Staging Server

加了一台staging server,这个就相当于有了生产环境后的测试环境,先在这里测试完毕后才会部署到真正的生产环境,本来我们是有测试环境的,但现在给了编辑们使用后那个环境就变成生产环境了,不能轻易改动,但还有不少部署相关的东西需要开发、测试,比如我要完善备份过程,还有灾难恢复什么的。今天把原来的两个不用的lxc容器开起来了当staging环境来用。

部署staging的时候出现了不少奇怪问题,taowen说installer过程很脆弱,要重写,有些东西就收工fix掉,能正常使用就好了。没想到部署staging花去了很长时间,差不多三四点才正常使用。

明天就要加固backup过程了,相信不会特别容易。还有一些小问题需要fix,虽然不影响使用,但积少成多会很难对付。

wanglei爆了一个autocomplete的插件的漏洞——先隐藏autocomplete后显示出来,输入要查询的内容时候提示div会跑到(0,0)这个位置,加我去pair了一段时间一下子没思路,让他push了代码我回到自己座位上凭着猜测加测试,发现问题——隐藏后再显示出来没有重新获取DOM的positon,这样可能取到空,然后默认放到了(0,0),幸好liufan把autocomplete写得够模块化,在适当位置调用一下initUI()即可解决问题。但。。。在我push代码的时候发现branch出乱子了,真是奇怪。照这个情况看下去,很有必要买本Git书看看了!

临下班的时候eric部署了代码到最新的生产环境,同时也能测试一下长数据库连接问题有没有被真正修复,早晨一去应该就有答案了。

Pragmatic Programmer Log

为了强制自己学习,每天晚上都要读书,如果时间允许就多读几种。今晚开始重读《The Pragmatic Programmer》(其实自己本来也没看多少)

强化几个英语单词吧:

picture:        描述
neglect:        忽视
responsible:    负责任的
inertia:        惯性
instigating:    鼓动
cautionary:     警告、注意
tale:           传说
amphibian:      两栖类
involved:       有密切关系的
pull...off:     努力实现
ongoing:        不断发展的
portfolio:      文件夹、公文包
keep...up:      保持
momentum:       动力
vacuum:         真空
unforeseen:     无法预料的
ethics:         道德标准
accountable:    负有责任的
contingency:    偶发事件
salvage:        抢救
in term of:     在任期内
cornerstone:    奠基石

pragmatic 哲学的奠基石之一:the idea of taking responsibility for youself and your actions in terms of your career advancement, your project, and your day-to-day work.

一开篇就在讲责任,这个无论是在个人生活还是工作中看来都占了很大的地位,要不然也不会开头就灌输这个,如果是一开始讲什么具体技术那这本书也就不会成为经典了,其实计算机方面很多的书都是在讲人生,只有到了那个高度,才会出现固话的精髓,才能传播。某种技术、语言,也就是几年、几十年的生命力(C除外,这是个未知对象),我一直期望能够从coding这方面找到一些人生中可用的哲学出来。

Ubuntu Network Configuration

今天去机房配置了一下测试服务器的network,以便于让所有编辑部的人都能用上新的产品录入功能,据说我们只需要修改gateway到200.200.200.204就可以了,但奇怪的是,今天我登录到了主机上发现gateway就是204了,好奇怪啊。

起初是用GUI来配置的network,但找不到Network Manager的配置文件在哪里,远程的话我们又没有装VNC只有命令行,索性跑去机房搞定。

ubuntu的netwok配置在/etc/network/interfaces中。

1
2
3
4
5
6
auto eth0 ##这个应该是决定是否启用这个端口 
iface eth0 inet static ##静态设置IP 
hwaddress ether 52:54:xx:51:xx:xx ##加入MAC地址,记得要放在IP地址之前 
address 202.198.151.17
netmask 255.255.255.0
gateway 202.198.151.254

这个样基本够我们现在用的了,据说配置好了要用sudo service networking restart,但我每次搞网络都发现重启这个不管用,似乎配置完了就生效了,不要忘记把原先Network Manager中的配置删除掉哦。今天我忘记加第一行auto eth0导致怎么启动都没效果:)

First Snow

昨晚竟然下了第一场雪,看着不怎么大,但确实是第一场。

first snow

这种天本来就是吃火锅的时候。

meal

这篇日志几乎和y.youth2009.org上的发重复了,以后我也在想,这种重复该怎么办呢?

大晚上的将要睡下,不料看了《饮食男女2012》,真的很好,而且我也感动的哭,心情大为激动,起来coding了,把taowen说的product link block和product list block问题都fix了。由于白天我把添加额外展示的小类功能给做完了,现在手上没工作了,下星期有我要做的特辑,可能要去忙那边了。taowen让我找本git书看看,想了半天也没买《Git权威指南》,估计暂时用不到那么深入的技巧,只要小心点在master上修改,到prod分支合并就好了都是fast-forward,没问题的,但最主要的不买的原因是,我怕买了后和那本《Shell编程指南》一样,躺在那里不知道干嘛。

转眼望去,床头一堆没怎么翻看的《程序员》杂志,《设计模式》、《重构》、《极限编程》、《Clean code》这样足够好的书都没怎么被我青睐,现在主要看《1Q84》,比较有吸引力。不怎么看技术书的原因我仍然不知道:(

Online

我们今天终于上线了,给编辑们用了一下,我还不知道他们的反馈如何,应该还不错吧,但很可惜由于公司内部网络的问题,我们的服务器不是所有人都能访问到,好像听说有个部门访问不到,具体问了一下工程部说改个gateway就能行了,当时正在抓图,就没动,下周再修改一下试试吧。

据说下周要开始主攻特辑这部分了,eric说我可能会很忙了,因为一直是我再搞特辑,哎,说特辑真别扭,原来我们一直在用topic,现在竟然换一个说法。

明天打算吃火锅,早晨早去买点菜,晚上happy一把。

Git Mass

原本以为今天能上线给编辑们使用,结果只是找了编辑部的几个人来现场的开发环境中玩了玩,提了提意见,明天下午1点我们正式开始用生产环境。

今天我又部署了好几次,期间也出现过一些问题,但都一一修复了,比较大的就是我把Git搞乱了,让周围几个人突然陷入困境。其实是我在生产分支上做了改动,发现应该去master做,结果我就跳到master上想要合并生产分支,后来被我不断rebase弄坏了,处于一种无分支所在的状况,taowen帮我reset到了之前的地方,还好改动不多,又凭记忆修复过来了。看来部署这个东西真不能让一个人来搞定,一合并就会出现不少冲突,有的你能解决,有的解决不了(现在还没遇到解决不了的)。

上午的standup持续了好久,大概又是在讨论需不需要这么多生产环境的纪律,昨天taowen只是加了commit前需要self-check,现在又出现了一个component不能超过xxx行的纪律,而且自动算出来,如果超了你就无法commit,wanglei今天早晨中招,顺便就开始说这个事儿了,我猜等我要做别的东西的时候也会这样吧。

backup、restore、restore-from-baseline这几个虽然看起来简单,但调试起来缺不怎么容易,而且在调试过程中还出现了不少突发问题,解决起来也是相当费时间的,现在部署后再做这些工作应该都没什么问题了。

晚上回来后我把web service的检查加入到了setting中,把部署打tag加入到了deploy流程中。明天去了打算把部署前lock所有sql脚本加入进去,这样每次部署就需要和大家说一下了。

Tomorrow Internal Test

也不知道怎么的,明天竟然就要内部测试了,首先是让编辑们录入商品,然后逐渐开始上一些主题、促销什么的东西,后者还没有时间表,不过从星期一就知道了星期四开始正式录入商品,也就是说我们的数据库从星期四就不能再drop了,只能migrate。

今天我们每个人都开始了带生产环境下的开发,一切操作都和上线了一样,包括提交之前必须有测试跑过才可以提交,这里被taowen监视着安装了一个hook,如果不跑一遍测试,根本没办法commit。还有数据库的baseline无法再被修改,这里也有一个licked文件管理着,如果需要修改只能migrate到baseline才可以。

部署方面今天我做了几个脚本方便使用——backup、restore、restore-from-baseline,分别是备份、恢复、远程恢复,备份既可以是server来做,也可以自己来做,只是自己做这个似乎没什么必要,server会自动在4点的时候备份一下var目录,远程恢复就是回复一个server的备份到本地开发使用。

今天还熟悉了一下tar的使用,现在是用tar打包,顺便压缩成了gz,所以打包需要czf参数,之所以这样排序是因为f参数后面是要跟着tar.gz文件名作为参数的,以前我以为随便排序,现在想想好傻啊。今天还遇到一个小问题,tar打包的时候如果你给出的路径是绝对的,那么打包也会从头开始帮你打包,比如你给了一个从根分区到你要打包目录的路径,那么打包完了,也是从根分区开始,恢复起来比较讨厌,此时需要一个C参数,大写C,Ta可以让你的工作目录Change到一个地方去,这样你就能在打包的时候把工作目录移动到需要的地方,这样就能不带那么长的路径了,当然解包的时候同样需要C参数指定好位置。

restore-from-baseline那里还有点问题,没有做测试找出漏洞,只能明天再去试试了,还有就是在部署的时候supervisor的配置文件有错误,导致web部署出问题,我看了看改起来比较费劲,让taowen干掉吧明天。

明天,可能会很紧张吧:)

Erp

终于把erp的所有接口测试完了,其中仍然不乏几个要命错误,只好记录下来发给开发方,又将是漫长的等待。

王总终于还是看不惯我们专业人士用的一些词汇和设计出来的使用流程,他似乎希望身边即便是初中毕业的员工都能自由使用我们开发的系统,这点有些像Jobs不是么,很可惜我们在做的产品不是面向广大用户,而是他的人数有限的编辑们,有时候我就怀疑需不需要这么人性化的设计。

taowen又把网站的架构修正了一番,这次改动似乎稍大,我更新了代码发现数据库帐号密码不对,经过邮件咨询,说删掉var重新install一遍能搞定,我又试了一次,这次直接提示数据库找不到,看来真陷入困境了。

今天上午姐姐请我去吃饭,我也没法fix这边的问题,下午回来又和豪猪碰面,帮他洗了几件衣服后出去海吃了一顿,羊蝎子,这个星期的油水满了,明天如果能把热水器fix了我就很满足了,要不然又要无休止的拖下去。我讨厌任何的拖延,并且认识到拖延和蝴蝶效应是伴生关系,一拖延影响的事情会逐渐影响后来的很多事,让你抓狂。