2007年一月月 发布的文章

云南,我来了!

一提到云南,想必很多人都会联想到’香格里拉’、’玉龙雪山’、’西双版纳’、’石林’、’滇池’、’丽江’、’大理’等等诸多耳熟能详的名词,这些地方不用去看,想着想着就会让你有一种热血沸腾的感觉,还好这次有机会到云南出差,虽然不能尽情享受云南的大好风光,但是能亲身到这感受一下这里的风土人情也是不错的吗。云南不仅景色美,吃的也很有特色哟,名满全国的过桥米线,气锅鸡等让我想起来就流口水,这次一定不能放过机会,一定要吃吃正宗的云南风味儿^_^。

周六沈阳的天气还好的不得了,周日天气急转直下,下起了大雪。桃仙机场上午10点半才开放,机场高速指到我到了机场还依然封闭着,毫无疑问了,’等’就一个字。下午14点的飞机,结果一直到17点才登机起飞。机场滞留了很多旅客,每个人脸上都显出焦急的神色,由于航班都乱了,登记口也是乱调了一气,我乘的那次航班登记口就换了三次,从5号到1号,最终换到了2号。下午一点我就到了机场,显然是去’早’了,百无聊赖的等了4个小时,闲来无事,拿着手机乱拍了一些^_^。

http://farm1.static.flickr.com/123/364631385_bbaad56d03.jpg?v=0
桃仙机场候机时’捉影’之小机待’哺’ 

http://farm1.static.flickr.com/116/364631677_b19516d0d6.jpg?v=0
桃仙机场候机时’捉影’之一号候机厅

16:15东航MU5824进港,16:40终于可以登机了,大家焦急的心情终于可以放下了。我提着行李步入机舱,我的座位靠窗,静静坐下,趁飞机未起飞前,再拿着手机拍拍,视野有限,只能拍机’翅膀’了^_^

http://farm1.static.flickr.com/175/364631195_f1ea7b426f.jpg?v=0
桃仙机场-MU5824之机’翅膀’

在机场等久了,腹中空空,坐在飞机中饥饿感更强烈了,可惜飞机不提供’午餐’,只有一袋饼干,勉强对付吧。飞机经停河南新郑机场,在空中飞行了一小时40分钟,等到新郑机场已经晚上19点了。新郑机场的设施真是不怎么好,候机厅太小,座位看起来有些像老火车站的那种,应该重新修缮修缮了。

http://farm1.static.flickr.com/172/364631898_6c5f09b9b1.jpg?v=0
新郑机场-MU5824

从郑州到昆明距离可不近,要在空中飞两个半小时左右,这次终于提供晚餐了,不过晚餐一般,连水果都没有,不是很满意。吃完东西就开始睡,真的有些累了。空姐甜美的声音把我唤醒,昆明巫家坝国际机场到了。收拾行李下飞机,一走一过发现昆明机场还是不错,在到达通道的各个景点的宣传牌,让我感受到了这个旅游大省的雄厚旅游资本。从’国内到达’出去,询问机场大巴在什么地方,得到的答案是太晚了没有了。心想不坐大巴,打的又要花好多钱而且自付。在机场停车场好多taxi司机主动上门服务,而且给出了一口价,到我的目的地,昆明春城之星-机械宾馆要30元,我一听心里就想怎么这么便宜,难道昆明机场不在郊区在市区,司机的答案证实了我的想法。呵呵,既然在市区就更不坐他的’黑车’了。前走没多远就是马路,随意叫了一辆taxi,到达机械宾馆才16元,看来以后出门一定不要轻信机场,火车站那些司机的话,小心被黑^_^。

春城之星-机械宾馆虽然级别不高,但是环境还是不错的,我订了一间大床房,价格还算划算,赠早餐,总之第一感觉还不错。

http://farm1.static.flickr.com/162/364631324_4b4c63aec8.jpg?v=0
昆明机械宾馆-大床房1

http://farm1.static.flickr.com/180/364631226_389fd9a112.jpg?v=0
昆明机械宾馆-大床房2

刚刚迈完了云南行的第一步,现在的任务呢就是好好休息,养精蓄锐,那么多秀美的景点等着我呢,呵呵,当然在保证工作顺利完成的情况下。^_^

工作中的故事-0是'TRUE'还是'FALSE'?

这个故事源于今天测试组测出的一个BUG,BUG被测试人员转给了我,故事便从这里开始了。

我们的系统是一个后台服务器程序,用C写的,运行在Solaris上,数据存储在数据库中,每次系统启动都要从数据库中读取配置数据。系统根据配置数据对输入的消息数据进行处理。今天的这个BUG现象就是对于一定的输入消息,系统根据配置数据的指导进行处理,结果得到的结果本应该是A,但是却得到了B。

首先咱抱着谨慎负责的态度,先从头到尾,再从尾到头检查自己的程序是否有漏洞或者疏忽大意之处,许久后,未发现问题,疑惑中,怎么经过我的程序这么一番处理,结果就是这样呢?

由于测试数据较简单,所以我对照着数据库中的数据,然后用输入消息数据在我脑子中根据程序的处理步骤人工处理了一次,终于发现了一处’不和谐的音符’。我发现数据库中一业务层配置表中的一字段的数据值有出入,赶忙打开数据库设计报告查看,一找一个准儿,问题就在这儿。

这个表中的这个字段的含义是’是否为默认项’,数据库设计报告中其值的定义是这样的:0 – 默认项;1 – 非默认项。首先我不去评论数据值设计是否合理,我们先来看看程序是如何处理的。
int is_default_item;
…..

if (is_default_item == 1) {
 /* 按照默认项处理 */
} else {
 /* 按照非默认项处理 */
}

看到这所有人都能看出问题所在了,没错,程序里想当然的以为’1′就是默认项,其他就是’非默认项’了。虽然问题找到了,但是我的心里却有了嘀咕,到底是谁错了,这个问题很显然有两个改法,一个是程序修改’1′->’0′;另一个是数据库修改,让1代表默认项。首先这里我要说我不是数据库设计的高手,可以说我自己没做过相关的数据库设计,数据库表中各字段取值设计有无经验可循我也不是很清楚。写到这可以把故事升华一下,升华成一个问题,也就是本篇的题目-0到底是’TRUE’还是’FALSE’?,这里的’TRUE’和’FALSE’并不仅仅代表真与假,而是代表更广义的含义,比如’TRUE’我们可以理解为’成功’、’正确’、’与预期目标一致’等;’FALSE’则可理解为’失败’、’错误’、’与预期目标不一致’等。

在UNIX上用C写过系统程序的人可能清楚Unix提供的API多以返回0代表调用成功,这就是一个典型的0表示’TRUE’的例子,这种返回值方式也被很多人用于程序设计中;在我们自己实现的底层库中,我们同样遵循了这样一种方式。还就我们上述的问题而言,数据库设计中’0′代表’默认项’是否就一定合理呢,相信也是见仁见智的问题;但是从程序角度,你认为:
if (is_default_item == 1) {
 /* 按照默认项处理 */
} else {
 /* 按照非默认项处理 */
}
更合逻辑还是
if (is_default_item == 0) {
 /* 按照默认项处理 */
} else {
 /* 按照非默认项处理 */
}
更合逻辑一些呢?起码我觉得第一种比较符合逻辑一些,代码可读性好些。当然如果按照下面的使用manifest constant的方式处理会比直接用literal constant更好些^_^,这样无论用0还是用1代表’默认项’起码从代码里都是逻辑通顺的,可读性好的。
#define DEFAULT_ITEM 1

if (is_default_item == DEFAULT_ITEM) {
 /* 按照默认项处理 */
} else {
 /* 按照非默认项处理 */
}

这个故事叙述到这就结束了,故事没有完,因为它在我们日常生活工作中还会时常发生,0是’TRUE’还是’FALSE’,把决定权留给大家^_^。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 商务合作请联系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