把握好编码的节奏

最近观察到这样一种情况,项目组内的两位比较资深同事似乎都习惯于这样来编码:他们可能会花上两、三周时间将一个模块的成百上千行代码一气呵成的编写完,然后再去与其他人编写的代码集成在一起编译,测试,最终提交。这种情况让我有些惊讶,因为我觉得一个良好的编码节奏不应该是这样的,原因有三:

.这样的节奏不利于问题的早发现早解决

 我们都知道问题发现越早,其解决成本越小。如果只是一味地编写代码,甚至连一次编译都不做,又怎么可能尽早发现自己代码中的问题?怎么可能提早发现其他人的提交对你的模块可能带来的影响呢?这样下去的最终结果很可能是大量的返工或某个隐藏很深的问题,需要花费你较大力气去解决。

.这样的节奏还可能会导致激情疲劳

 激情也会产生疲劳。想必很多朋友都有过类似的经历:一旦长时间投入在一件事情上,如若没有阶段性的成果或者中途遇到一些挫折,那激情也会疲劳,甚至是丧失。程序员都是很有激情的!你一定见过那些整天以方便食品度日,为了某个功能奋战N天N宿的蓬头垢面的程序员们。他们埋头于键盘与屏幕间,将用智慧加工后的字符输入到计算机中。但程序员也是人,如果一直这么下去,没有阶段性反馈,渐渐地,他们的效率就会降低,思维就会僵化,最终导致结果远不如预期。

.这样的节奏不利于自身信心的建立

 在这样只有编码,没有编译,没有必要单元测试的情况下,你如何确保代码质量是没问题的呢?你是否敢于站出来对着大家说我编写的代码是牢不可摧的。显然你不能,因为你没有收到任何关于代码质量评估的反馈。甚至于你的代码是否可以正确地通过编译器的检查都未曾而知,你又哪里有对代码的那份自信呢?

好了,说了这么多原因,那什么样的节奏算是良好的节奏呢?用一句话概括就是“小步快跑,迭代进行,循序渐进”。其主旨在于划大为小、快速完成、快速反馈(通过构建、单元测试)、快速调整,依此循环往复。划大为小是基础,也是一种任务分解的能力;快速完成和反馈能让你及早发现问题,包括自身的以及与他人集成过程中的;快速调整意为迅速应对发现的问题,及时变更设计、重构代码,直至满足。这样每轮下来,你会发现已经完成的任务都是相对健壮的,这种健壮同时也会给你一种正面的反馈,让你保持继续的激情和动力,同时也会给你带来充足的信心。这样一轮一轮下去,你就会持续不断地得到正反馈,这会促使你最终得到一个相对比较健壮的成果物,你的信心也会因此得到倍增。

如果你和我的同事采用了同样的编码节奏,那你不妨尝试调整一下^_^。

解决BuildBot构建结果mail无法发送的问题

在“使用BuildBot搭建持续集成环境”一文中我曾经说到:公司使用的mail服务器只支持SSL连接,而BuildBot似乎对SSL连接的支持有些问题,导致构建结果mail无法发送“。BuildBot实际上使用的是Twisted的mail库来发送邮件的,我下载了Twisted的一些mail发送的例子程序,并使用我的公司mail账户配置,但依旧发送失败。看来这个问题与Twisted的实现有关了。

这个问题已经折腾我许久了,难道非得让我去debug Twisted库?还好,今天我想到了另外一种方法:使用stunnel。原理是这样的:通过stunnel将非SSL连接转换为到公司mail服务器的SSL连接,通过stunnel建立的这条转化通道,mail发送的问题就应该可以解决了。想法归想法,实际上能否达到我的目标,还得通过试验验证。

首先我们需要在BuildBot的master服务器上安装stunnel。

Ubuntu服务器上安装stunnel很简单,执行sudo apt-get install stunnel即可。不过今天我却遇到了问题,我的Ubuntu服务器版本是9.04,执行install时发现似乎所有源都不可用了。执行了多次还是这样,sudo apt-get update也无法更新了。突然想到也许是9.04的支持年限到了,到网上一查,果不其然:去年10月份Ubuntu 9.04就不在支持范围了。难道没有专门for老旧Ubuntu版本的源可以使用了吗?还好Ubuntu中文论坛上有答案:Ubuntu官方有一个源http://old-releases.ubuntu.com/ubuntu是专为已经过了支持期限的版本服务的。将/etc/apt/sources.list备份后打开,将下面内容贴到该文件中:

deb http://old-releases.ubuntu.com/ubuntu jaunty main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu jaunty-security main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu jaunty-updates main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu jaunty-backports main restricted universe multiverse
deb http://old-releases.ubuntu.com/ubuntu jaunty-proposed main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu jaunty main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu jaunty-security main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu jaunty-updates main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu jaunty-backports main restricted universe multiverse
deb-src http://old-releases.ubuntu.com/ubuntu jaunty-proposed main restricted universe multiverse

保存后执行update,然后再重新install stunnel,这回一切OK了。

接下来,我们来配置stunnel。

我们先打开/etc/default/stunnel4,将其中的ENABLED配置项的值从0改为1,这样我们就允许stunnel在主机重启后可以被自动启动。

/etc/stunnel/stunnel.conf这个配置文件才是我们需要重点关注的。主要改动的配置项及说明如下:

; Use it for client mode
client = yes ; 我们使用的是stunnel的client模式,所以这里将no改为yes

; cert = /etc/stunnel/mail.pem ; 注释掉该行

; 打开debug模式以及log文件输出,便于我们在使用初期问题的查找
debug = 7
output = /var/log/stunnel4/stunnel.log

; 下面是关键配置,stunnel将接收本地到25端口的mail连接,并将该mail连接转换为到smtp.your_domain.com:465的SSL连接
[ssmtp]
accept  = 127.0.0.1:25
connect = smtp.your_domain.com:465

配置就是这些了。我们通过sudo /etc/init.d/stunnel4 start启动stunnel。如果你在启动时遇到问题,别忘了查看一下/var/log/stunnel4/stunnel.log中的内容,多数情况下你都会很快的发现问题所在。比如我第一次启动stunnel时就得到了如下错误信息:
[Failed: /etc/stunnel/stunnel.conf]
You should check that you have specified the pid= in you configuration file

这个错误信息可能会让你误以为是配置出现了错误,但通过查看log会发现,原来错误原因是25端口已经被占用了。占用25端口的程序是sendmail,停掉sendmail服务,再次启动stunnel,我们得到以下的成功信息:

Starting SSL tunnels: [Started: /etc/stunnel/stunnel.conf] stunnel.

最后,我们来测试一下stunnel是否可以真正解决我们的问题。修改BuildBot master的master.cfg中的mail发送配置:

c['status'].append(mail.MailNotifier(fromaddr="SENDER_MAIL_ADDR",
                                     extraRecipients=["RECIPIENT_MAIL_ADDR"],
                                     sendToInterestedUsers=False,
                                     useTls=False,
                                     relayhost="127.0.0.1",
                                     smtpUser='foo',
                                     smtpPassword='foo!',
                                     smtpPort=25))

有了stunnel,我们就可以使用非SSL连接来发送mail了,不过我们的buildbot连的是stunnel监听的本机25端口。

触发一次构建,稍等片刻,我的Thunderbird里就出现了BuildBot构建失败的提醒mail,我们成功了。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats