<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Blogger on Tony Bai</title><link>https://tonybai.com/tags/blogger/</link><description>Recent content in Blogger on Tony Bai</description><generator>Hugo</generator><language>zh-cn</language><copyright>2004-2026 Tony Bai. 版权所有.</copyright><lastBuildDate>Mon, 23 Dec 2024 00:00:00 +0800</lastBuildDate><atom:link href="https://tonybai.com/tags/blogger/index.xml" rel="self" type="application/rss+xml"/><item><title>使用issue2md将Github issue转换为Markdown</title><link>https://tonybai.com/2024/12/23/convert-github-issue-to-markdown-with-issue2md/</link><pubDate>Mon, 23 Dec 2024 00:00:00 +0800</pubDate><guid>https://tonybai.com/2024/12/23/convert-github-issue-to-markdown-with-issue2md/</guid><description>使用issue2md将Github issue转换为Markdown | Tony Bai =============== Tony Bai一个程序员的心路历程 * Google Go语言编码风格规范 * Google Go语言编码风格规范：指南篇 * Google Go语言编码风格规范：决定篇 * Google Go语言编码风格规范：最佳实践篇 * Go语言第一课FAQ * 关于我 * 文章列表...</description></item><item><title>又当爸爸了！</title><link>https://tonybai.com/2020/07/29/my-second-daughter-was-born/</link><pubDate>Wed, 29 Jul 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/07/29/my-second-daughter-was-born/</guid><description>2020年7月23日早6点46分，随着我家二宝(小名：七月)的呱呱坠地，**我又当爸爸了**! 图：二宝出生后的第一张照片 距离我家大宝(果果)的出生已经十年了。在这十年间，果果已经出落成一个聪明可爱、灵通剔透、漂亮温柔的大姑娘了，妥妥的是**妈妈的小棉袄，爸爸的小情人:)，姥姥的小粘包，爷爷奶奶的乖孙女**。 图：大宝果果是大姑娘了 但每每当果果提到其同班同学多数都有姐妹或兄弟陪伴上学、上才艺课...</description></item><item><title>果果十周岁了！</title><link>https://tonybai.com/2020/05/03/guoguo-ten-years-old/</link><pubDate>Sun, 03 May 2020 00:00:00 +0800</pubDate><guid>https://tonybai.com/2020/05/03/guoguo-ten-years-old/</guid><description>好久没有在我的博客上写关于果果的事情了，因为很多关于果果成长的经历都记录在她自己的博客中了。但今天是她十周岁的生日，是个值得纪念的日子。闺女成长的十年，也是我学习为人父的十年。作为父亲，我发自内心地想说点啥，是回顾，也是感受，亦有些寄语^\_^。 图：果果成长的十年 出生 老婆在2009年7月怀上了果果。那时我们刚刚新婚不久，二人世界还没过够^\_^，小家伙的突然到来还让我们有些“手足无措”。为此...</description></item><item><title>源创会2017沈阳站讲稿：基于Harbor的高可用企业级私有容器镜像仓库部署实践</title><link>https://tonybai.com/2017/10/23/the-speech-script-practice-on-deploying-a-ha-harbor-cluster-for-osc-shenyang-2017/</link><pubDate>Mon, 23 Oct 2017 00:00:00 +0800</pubDate><guid>https://tonybai.com/2017/10/23/the-speech-script-practice-on-deploying-a-ha-harbor-cluster-for-osc-shenyang-2017/</guid><description>上周六开源中国的源创会在沈阳举办了一次技术活动，很荣幸以本地讲师的身份和大家交流了一个topic: “基于Harbor的高可用企业级私有容器镜像仓库部署实践”。之所以选择这个topic，是因为这是我们团队的项目实践心得。很多企业和组织在深入使用Docker之后，都会有类似的高可用私有容器仓库搭建的需求，于是我就把我们摸索的实践和填坑过程拿出来，用30分钟与大家分享一下。另外这算是一个入门级的分享，...</description></item><item><title>将Blog迁移到DigitalOcean的VPS上</title><link>https://tonybai.com/2014/11/28/migrate-blog-to-digitalocean-vps/</link><pubDate>Fri, 28 Nov 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/11/28/migrate-blog-to-digitalocean-vps/</guid><description>自从2012年初将Blog从Blogbus搬出来放到同事代理的虚拟主机上后，Blog运行一直很稳定，我也算 是比较满意。但同事的主机代理生意这两年来每况愈下，这促使他在前些时候做出了在今年年末放弃这门生意的决定，于是我又不得不为Blog另找落脚儿地了。 这次不想再单纯的买Wordpress虚拟主机了，一来功能有限，二来国外的入门级VPS价格已经与虚拟主机价格逐渐缩小，尤其是像 DigitalOce...</description></item><item><title>探讨Docker容器中修改系统变量的方法</title><link>https://tonybai.com/2014/10/14/discussion-on-the-approach-to-modify-system-variables-in-docker/</link><pubDate>Tue, 14 Oct 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/10/14/discussion-on-the-approach-to-modify-system-variables-in-docker/</guid><description>探讨完Docker对共享内存状态持久化的支持状况后，我将遗留产品build到一个pre-production image中，测试启动是否OK。很显然，我过于乐观了，Docker之路并不平坦。我收到了shmget报出的EINVAL错误码，提示参数非法。 shmget的manual对EINVAL错误码的说明如下： EINVAL： A  new  segment  was  to  be  create...</description></item><item><title>探讨docker容器对共享内存的支持情况</title><link>https://tonybai.com/2014/10/12/discussion-on-shared-mem-support-in-docker/</link><pubDate>Sun, 12 Oct 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/10/12/discussion-on-shared-mem-support-in-docker/</guid><description>我们的遗留系统广泛使用了性能最佳的IPC方式 – 共享内存，而且用到了两种共享内存的实现方式：System V共享内存(shmget、shmat、shmdt)以及Mmap映射Regular File。System V共享内存支持一定程度上的内存数据持久化，即当程序创建共享内存对象后，如果不显式删除或物理主机重启，该IPC对象会一直保留，其中的数据也不会丢 失；mmap映射Regular File的...</description></item><item><title>docker容器内服务程序的优雅退出</title><link>https://tonybai.com/2014/10/09/gracefully-shutdown-app-running-in-docker/</link><pubDate>Thu, 09 Oct 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/10/09/gracefully-shutdown-app-running-in-docker/</guid><description>近期在试验如何将我们的产品部署到docker容器中去，这其中涉及到一个技术环节，那就是如何让docker容器退出时其内部运行的服务程序也 可以优雅的退出。所谓优雅退出，指的就是程序在退出前有清理资源（比如关闭文件描述符、关闭socket），保存必要中间状态，持久化内存数据 （比如将内存中的数据flush到文件中）的机会。docker作为目前最火的轻量级虚拟化技术，其在后台服务领域的应用是极其广泛的...</description></item><item><title>Golang Channel用法简编</title><link>https://tonybai.com/2014/09/29/a-channel-compendium-for-golang/</link><pubDate>Mon, 29 Sep 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/09/29/a-channel-compendium-for-golang/</guid><description>在进入正式内容前，我这里先顺便转发一则消息，那就是Golang 1.3.2已经正式发布了。国内的golangtc已经镜像了golang.org的安装包下载页面，国内go程序员与爱好者们可以到&amp;#34;Golang中 国&amp;#34;，即golangtc.com去下载go 1.3.2版本。 Go这门语言也许你还不甚了解，甚至是完全不知道，这也有情可原，毕竟Go在TIOBE编程语言排行榜上位列30开外。但近期使用Gola...</description></item><item><title>Ubuntu Server 14.04安装docker</title><link>https://tonybai.com/2014/09/26/install-docker-on-ubuntu-server-1404/</link><pubDate>Fri, 26 Sep 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/09/26/install-docker-on-ubuntu-server-1404/</guid><description>近期在研究docker这一轻量级容器引擎，研究docker对日常开发测试工作以及产品部署运维工作能带来哪些便利。前些时候刚刚将工作环境从 Ubuntu搬到了Mac Air上，对Mac OS X的一切均不甚熟悉，给docker研究带来了不便，于是打算在VirtualBox中安装一Ubuntu Server作为docker之承载平台。这里记录一下安装配置过程，主要为了备忘，如果能给其他人带来帮助，我会...</description></item><item><title>Cocos2d-x集成Amazon内购和GameCircle服务</title><link>https://tonybai.com/2014/08/04/amazon-inapp-purchasing-and-gamecirle-in-cocos2dx/</link><pubDate>Mon, 04 Aug 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/08/04/amazon-inapp-purchasing-and-gamecirle-in-cocos2dx/</guid><description>由于种种原因，这篇文章已经拖延了N多时间了。今天花了些时间把如何在Cocos2d-x(我用的版本是2.2.2)游戏中集成Amazon的内购和GameCircle服务(仅适用于Android版本)整理一下，发出来，作备忘。 之前在做“手指足球世界杯2014”时，想给这款小游戏加上内购(In-App Purchasing)和积分榜(ScoreBoard)功能。说到Android手机游戏的内购，人们第一...</description></item><item><title>Cocos2d-x屏幕适配之Sprite绘制原理</title><link>https://tonybai.com/2014/05/13/sprite-draw-principles-of-cocos2dx-screen-adaptation/</link><pubDate>Tue, 13 May 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/05/13/sprite-draw-principles-of-cocos2dx-screen-adaptation/</guid><description>手机(智能终端)游戏绝大多数为全屏(Full Screen)显示，这样开发人员在制作游戏时势必要考虑不同手机(智能终端）屏幕大小、宽高比的不同给游戏画面带来的影响，并且要将这种影响降低到最 小，努力使用不同终端的游戏玩家拥有几乎相同的游戏画面体验。为此各种游戏引擎在屏幕适配方面都给出了自己的方案，Cocos2d-x也不例外。 在Cocos2d-x官网Wiki上特地撰写了一篇讲解Cocos2d-x多...</description></item><item><title>Cocos2d-x 3.0rc0集成Google AdMob SDK</title><link>https://tonybai.com/2014/05/01/integrate-cocos2dx3rc0-with-admob/</link><pubDate>Thu, 01 May 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/05/01/integrate-cocos2dx3rc0-with-admob/</guid><description>话说Cocos2d-x 3.0上一周迫不及待地发布了正式版，本是一件值得庆幸的事情。但由于不可解决的技术问题，引擎无奈将Android平台的NativeActivity 实现重新回退到了Cocos2d-x 2.2.x版本的实现方案。由于之前已经将 GameDemo移植到了Cocos2d-x 3.0rc0版，直观感受到了NativeActivity方案带来的游戏操作体验上的提升（触屏事件的响应），因...</description></item><item><title>Cocos2d-x 3.0多线程异步资源加载</title><link>https://tonybai.com/2014/04/28/multithreaded-resource-loading-in-cocos2dx-3/</link><pubDate>Mon, 28 Apr 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/04/28/multithreaded-resource-loading-in-cocos2dx-3/</guid><description>Cocos2d-x从2.x版本到上周刚刚才发布的Cocos2d-x 3.0 Final版，其引擎驱动核心依旧是一个单线程的“死循环”，一旦某一帧遇到了“大活儿”，比如Size很大的纹理资源加载或网络IO或大量计算，画面将 不可避免出现卡顿以及响应迟缓的现象。从古老的Win32 GUI编程那时起，Guru们就告诉我们：别阻塞主线程(UI线程)，让Worker线程去做那些“大活儿”吧。 手机游戏，即便...</description></item><item><title>Cocos2d-x 3.0rc2集成ShareSDK</title><link>https://tonybai.com/2014/04/25/integrate-cocos2dx3rc2-with-sharesdk/</link><pubDate>Fri, 25 Apr 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/04/25/integrate-cocos2dx3rc2-with-sharesdk/</guid><description>给自己的手机游戏增加些社交分享功能，有助于游戏宣传和提升知名度，是一种不错的社交营销手段。国内这方面的第三方插件有不少，比如ShareSDK、友 盟分享组件、Baidu分享组件等，之前在研究2.2.2版本时，集成了ShareSDK这个组件，这次迁移到Cocos2d-x 3.0rc2依旧选择集成ShareSDK，这里就来说说集成的过程，遇到的一些问题以及解决方法。这里仅以Android平台游戏集成为...</description></item><item><title>Cocos2d-x 3.0rc2针对Android平台的变动</title><link>https://tonybai.com/2014/04/23/changes-in-cocos2dx-3-rc2-for-android/</link><pubDate>Wed, 23 Apr 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/04/23/changes-in-cocos2dx-3-rc2-for-android/</guid><description>《Hello, Cocos2d-x 3.0》一文发出后没多久，我就迫不及待地将手头的一个习作尝试从2.2.2版本迁移到3.0rc0引擎上。 核心代码迁移相对顺利，大致流程如下： **\* 创建项目** 1) cd cocos2d-x-3.0rc0；     2) 执行setup.py，设置引擎依赖的环境变量，脚本会将COCOS\_CONSOLE\_ROOT和ANT\_ROOT写入到~/.bash\...</description></item><item><title>Hello, Cocos2d-x 3.0rc0</title><link>https://tonybai.com/2014/04/22/hello-cocos2dx-3-rc0/</link><pubDate>Tue, 22 Apr 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/04/22/hello-cocos2dx-3-rc0/</guid><description>Cocos2d-x 3.0版本已经发布了rc2，这让这段时间用熟了Cocos2d-x 2.2.2的我也有些蠢蠢欲动。按照触控科技主创人员在CocoaChina2014大会上的讲解，Cocos2d-x 3.0版本相比2.x版本在各方面都有不错的提升，于是乎就想把手头上的一款习作移植到3.0版本引擎下，看看运行效果如何。不过在移植之前，我先来看看 3.0与2.0相比在整体代码结构以及引擎驱动核心方面到...</description></item><item><title>ShareSDK Cocos2d-x专用组件的一个Bug</title><link>https://tonybai.com/2014/04/17/a-bug-from-sharesdk-componet-for-cocos2dx/</link><pubDate>Thu, 17 Apr 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/04/17/a-bug-from-sharesdk-componet-for-cocos2dx/</guid><description>近期研究了一下Game App做社交分享，最后选择了ShareSDK来集成，不仅是因为ShareSDK支持国内外主流社交平台，更重要的是ShareSDK提供了专门的 cocos2d-x集成方案，有专门的文档和代码Demo供开发者参考。 文档中提到了三种集成方式：纯Java方式、plugin-x方式以及Cocos2d-x专用组件方式，这里选择了ShareSDK Cocos2d-x专用组件（v2.3....</description></item><item><title>Cocos2d-x内存管理-绕不过去的坎</title><link>https://tonybai.com/2014/03/18/cocos2dx-memory-management/</link><pubDate>Tue, 18 Mar 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/03/18/cocos2dx-memory-management/</guid><description>Cocos2d-x引擎的核心是用C++编写的，那对于所有使用该引擎的游戏开发人员来说，内存管理是一道绕不过去的坎。 关于Cocos2d-x内存管理，网上已经有了许多参考资料，有些资料写的颇为详实，因为在内存管理这块我不想多费笔墨，只是更多的将思路描述清 楚。 **一、对象内存引用计数** Cocos2d-x内存管理的基本原理就是对象内存引用计数，Cocos2d-x将内存引用计数的实现放在了顶层父类...</description></item><item><title>Hello, Cocos2d-x</title><link>https://tonybai.com/2014/03/11/hello-cocos2dx/</link><pubDate>Tue, 11 Mar 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/03/11/hello-cocos2dx/</guid><description>女儿从两岁半开始接触iPad，在这个年龄段也只有一些幼教类游戏适合她玩。虽然知道iPad玩久了对视力有伤害，但有时候还真拗不过果果，索性 也就让她玩一会儿。之前对智能终端上的东西不是很在意，也没啥兴趣，这大概与当年在大学时做Win32 GUI开发的糟糕经历多多少少有点关系。不过智能终端是大势所趋，历史的潮流不能违抗。虽然自己并非以Android/iOS编程为主业，但适当学习学习 总归没有坏处，万一...</description></item><item><title>说说执行力</title><link>https://tonybai.com/2014/03/05/thought-on-executive-power/</link><pubDate>Wed, 05 Mar 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/03/05/thought-on-executive-power/</guid><description>_You are never to dictate what I can and can not do. The only two words I want to hear from you when I ask you to do something are &amp;#34;Yes&amp;#34; and &amp;#34;Sir&amp;#34;。（我能做什么不能做什么，你管不着。我吩咐你做事的时候，只想听到两个词，&amp;#34;是的&amp;#34;和&amp;#34;先生&amp;#34;。）       ...</description></item><item><title>关于2014团队改善的考量</title><link>https://tonybai.com/2014/03/03/considerations-on-team-improved-in-2014/</link><pubDate>Mon, 03 Mar 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/03/03/considerations-on-team-improved-in-2014/</guid><description>_一个人的品行，不取决于这人如何享受胜利，而在于这人如何忍受失败。                                                                        — 《纸牌屋》第一季_ 团队改善，不是那种很快见到成果或者效益的活儿。 但这件事你做不做呢？坦诚的说，今年我在这方面的“热情”真的不是那么高，肯定是不如前两年了，因为是时候更多地为自己的“前...</description></item><item><title>厨房里的领导课</title><link>https://tonybai.com/2014/02/18/mentoring-in-the-kitchen/</link><pubDate>Tue, 18 Feb 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/02/18/mentoring-in-the-kitchen/</guid><description>_生活中永远不缺少大道理，缺的是一颗善于思考和发现它们的心。                                                                         – Tony Bai_ 晚上回到家，家人端上来热腾腾的饭菜。吃了几口，感觉味道较为普通。盘子里那些被加工过的食材是昨天刚刚买到的，又好又新鲜。顿然一种可惜的赶脚油然而 生。为什么这么上好新鲜的食...</description></item><item><title>2013小结</title><link>https://tonybai.com/2014/01/04/my-summary-of-2013/</link><pubDate>Sat, 04 Jan 2014 00:00:00 +0800</pubDate><guid>https://tonybai.com/2014/01/04/my-summary-of-2013/</guid><description>2013年的个人年终总结比以往来得晚了一些，至于原因，我也说不清楚，拖延症也罢，其他原因也罢，总之是晚了。 写年终小结已经有小几年了，风格一直如一，无非是老三样：工作得失、生活酸甜以及新年展望，今年也不利外。 **\* 工作篇** 我们部门在所在行业里已经摸爬滚打了10多年了，经 历和见证了这个行业从诞生、增长、成熟到如今的衰退的整个过程。也正是由于处于行业的衰退期，2013年部门的运营十分艰难。...</description></item><item><title>向安德学指挥</title><link>https://tonybai.com/2013/12/27/learn-how-to-command-from-ender/</link><pubDate>Fri, 27 Dec 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/12/27/learn-how-to-command-from-ender/</guid><description>_指挥官必须有良好的精神素质，必须具备果敢、坚定的性格和冷静的智慧；必须了解和 学习控制部队对于死亡和痛苦的反应。                                                                                                            — 克劳塞维茨 《战争论》_ 指挥，看起来并非是程序员的本职工作。 在...</description></item><item><title>只为那一抹释然</title><link>https://tonybai.com/2013/12/26/just-for-being-relieved/</link><pubDate>Thu, 26 Dec 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/12/26/just-for-being-relieved/</guid><description>_一切没有目标的努力，都是瞎忙活儿。_                                                     _\- Tony Bai_ 刚实施回来，就又投入到新工作中，到今天才有那么一点点时间写写这件事儿。 **\* 缘起** 我们的遗留系统性能一直不高，导致这一局面的因素有很多，比如最初设计和实现的“考虑不足”、后续维护人员的“随波逐流”甚至缺少勇气对影响性能...</description></item><item><title>团队与创造的平衡</title><link>https://tonybai.com/2013/12/21/the-balance-between-team-and-creativity/</link><pubDate>Sat, 21 Dec 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/12/21/the-balance-between-team-and-creativity/</guid><description>_“安德来了之后，我们必段保持一个巧妙的平衡。要让他保持一定程度的孤立，使他创造性不至于消失，否则他就会和这儿的整个团体融合在一起，我们会失去他的天赋。同时，我们也必须确定他有足够的能力去领导别人。”                                                                     — 《安德的游戏》作者：奥森·斯科特·卡德_ 上面的引述是《安...</description></item><item><title>Recommended C Style and Coding Standards中文版全文</title><link>https://tonybai.com/2013/11/26/the-full-text-of-recommended-c-style-and-coding-standards/</link><pubDate>Tue, 26 Nov 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/11/26/the-full-text-of-recommended-c-style-and-coding-standards/</guid><description>今天无意中打开了托管在Google Code上的“Recommended C Style and Coding Standards”翻译项目，忽感觉通过目录链接的方式查看译文缺少整体感，于是花了点时间将译文全文以single page的形式贴在博客里面，方便大家查看，也算是对该翻译内容的一个备份吧。 **C语言编码风格和标准** **0\. 摘要** 本文翻译自《Recommended C Sty...</description></item><item><title>再谈那些代码中的“中国式”命名</title><link>https://tonybai.com/2013/11/22/those-chinese-style-naming-in-code-again/</link><pubDate>Fri, 22 Nov 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/11/22/those-chinese-style-naming-in-code-again/</guid><description>近期博客访问量提高了不少，分析了下原因，发现是有几篇近期写的文章被某个好心网友提交到dbanotes的Startup News上了。与此同时，一些反馈也随之而来。从反馈来看，《那些代码中的“中国式”命名》一文似乎受到了更多的关注，或许是文章标题比较容易引起好奇的 缘故吧。但文章的本意仅是想阐述一些事实罢了，并没有“哗众取宠”的意思。网友的观点也促使我重新对“中国式”命名做了反思。 **\* “中国...</description></item><item><title>代码是怎么腐化的</title><link>https://tonybai.com/2013/11/12/how-code-corrupt/</link><pubDate>Tue, 12 Nov 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/11/12/how-code-corrupt/</guid><description>_新三年，旧三年，修修补补又三年。                                                              — 中国俗语。_ 上面的这句俗语用来形容很多遗留软件系统(legacy software system)的现状是再合适不过了。 今天下午做了一下午的代码评审，对象是一个运行了7年的遗留系统。会上除了几处明显的代码逻辑错误我发言指了出来外，涉及...</description></item><item><title>那些代码中的“中国式”命名</title><link>https://tonybai.com/2013/11/06/those-chinese-style-naming-in-code/</link><pubDate>Wed, 06 Nov 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/11/06/those-chinese-style-naming-in-code/</guid><description>10月中旬，有人在Quora网站上发起一个调查：“程序员职业生涯中最难的事是什么？”，调查结果让人实感意外。世界范围内的程序员同胞们普遍认为： “命名是让大家感觉最困难的事情”。对于主流的欧美程序员尚且如此，对于英文非母语的中国程序员来说，苦逼程度可想而知了:(。 虽说中国程序员大多也都学了10年以上的英语了，但能“地道”的表达和书写甚至是选词的程序员们比例却不高。而在编写程序的过程中，给变量、常...</description></item><item><title>Memcached CAS应用一例</title><link>https://tonybai.com/2013/11/01/a-case-of-applying-memcached-cas/</link><pubDate>Fri, 01 Nov 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/11/01/a-case-of-applying-memcached-cas/</guid><description>近期收到客户一个需求，我将该需求转述为下面这个等价的问题。 **【问题】** \* 有一个产品包装系统_S_，为某种产品_P_提供产品包装服务; \* 系统_S_由若干个处理节点组成，每个节点都可以单独处理组件; \* 产品_P_的一个可出厂的**成品**由包装盒+N个产品组件组成，包装盒与产品组件上都贴有一个标签，该标签上包含该成品的唯一编号ID（一定时间范围内有效）、每个组件自己的序号(uni...</description></item><item><title>关于程序员的构思能力的一些体会</title><link>https://tonybai.com/2013/10/27/some-experience-about-ideation-of-programmer/</link><pubDate>Sun, 27 Oct 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/10/27/some-experience-about-ideation-of-programmer/</guid><description>_有一段时间，我完全沉迷于在脑海中**想象**机械绘图和设计新机型所带来的极致享受，这是我一生中有过的最完美的精神愉悦。创造的灵感像泉水般源 源不断 地涌出，我遇到的唯一困难就是必须设法牢牢抓住它们。对我来说，**构思**中的设备零件都绝对是真实的，所有细节都触手可及，甚至最细微的标识和磨损状态也是如 此。想象发动机在持续不断地运转，仿佛一道迷人的风景呈现在面前，令我欣喜若狂。_         ...</description></item><item><title>为阻塞型函数调用添加超时机制</title><link>https://tonybai.com/2013/10/25/add-timeout-to-blocking-function-call/</link><pubDate>Fri, 25 Oct 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/10/25/add-timeout-to-blocking-function-call/</guid><description>我们产品中的一个子模块在进行Oracle实时数据库查询时，常常因数据库性能波动或异常而被阻塞在OCI API的调用上，为此我们付出了“惨痛”的代价。说来说去还是我们的程序设计的不够完善，在此类阻塞型函数调用方面缺少微小粒度的超时机制。 调用阻塞多发生在I/O操作（磁盘、网络、低速设备）、第三方API调用等方面。对于文件/网络I/O操作，我们可利用在非阻塞文件描述符上select /poll的超时机...</description></item><item><title>关于编程语言学习的一些体会</title><link>https://tonybai.com/2013/10/22/some-experience-about-learning-programming-language/</link><pubDate>Tue, 22 Oct 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/10/22/some-experience-about-learning-programming-language/</guid><description>_Learn at least one _new language every year_.                                               — Andy Hunt and Dave Thomas_ 自己一直是“每年学习一门新语言”的忠实拥趸，曾先后认真地学习了Haskell、Common Lisp、Python、Go等语言，对Prolog、Scala、...</description></item><item><title>当Bug A遇到Bug B</title><link>https://tonybai.com/2013/10/14/when-bug-a-encounter-bug-b/</link><pubDate>Mon, 14 Oct 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/10/14/when-bug-a-encounter-bug-b/</guid><description>_2002年的Bug A与2008年的Bug B同时穿越到2013年，并在某个场合相遇了。_ 上周六，项目组本应以一个愉快的心情结束一天的工作的，但一个2002年的Bug A与另外一个2008年的Bug B同时穿越时空来到了2013年，并且恰恰在那时那刻（下班前）相遇了，于是项目组由放松变成了忙碌，由愉快变成了紧张，17：30的下班点也因此延迟到了凌晨1：30。 Bug A来源于2002年我们发布...</description></item><item><title>爱上跑步</title><link>https://tonybai.com/2013/10/09/love-running/</link><pubDate>Wed, 09 Oct 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/10/09/love-running/</guid><description>_**生命在于运动。**_                         _– 伏尔泰_ 我无论如何都没有想到自己居然爱上了跑步。 **\* 缘起** 这要追溯到2011年，当时的我感觉自己的身体状况十分不好，各种疲劳感和不适感统统找了上来，精力也严重不足，于是乎给自己开了副药方 – **晨跑**， 期望通过锻炼身体恢复身体各个部分的机能。我坚持跑了一个多月，效果甚好：精力充沛，心情舒畅，工作效...</description></item><item><title>程序 – 程序员的avatar</title><link>https://tonybai.com/2013/10/08/program-the-avatar-of-programmers/</link><pubDate>Tue, 08 Oct 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/10/08/program-the-avatar-of-programmers/</guid><description>程序是什么？ 大师们曾给过这样的诠释：        _程序 = 数据 + 指令     程序 = 数据结构 + 算法_ 对此我也表示十分认同。但感觉这些观点更多是从机器运行模型或逻辑抽象的角度看待程序的，是左脑的产物。我的右脑告诉我：_**程序是程序员的avatar**_（化身）。这个隐喻式的诠释会让“程序”更有温度，并有些许人性的色彩。 计算机（CPU、主板、内存、磁盘、网络）为程序提供了一个...</description></item><item><title>站在更高的平台上</title><link>https://tonybai.com/2013/09/24/stand-on-a-higher-platform/</link><pubDate>Tue, 24 Sep 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/09/24/stand-on-a-higher-platform/</guid><description>中秋休假期间，在PPS上看了最新一集的龙珠Z剧场版“龙珠Z：神与神”。《七龙珠》是我最喜欢的一部日本漫画，年少时曾为之疯狂过。其对应的动画片《龙珠》以及《龙珠Z》我也是集集不落的，这部“龙珠Z：神与神”延续了龙珠Z的精彩。 片中主人公孙悟空与破坏神比鲁斯有过两次交手。第一次在界王星上，变身为超级塞亚人3的孙悟空被破坏神几乎“秒杀”；第二次是为了保护地球，孙悟空在悟饭、悟天、贝吉塔、特兰克斯的帮助下...</description></item><item><title>结婚五周年纪念</title><link>https://tonybai.com/2013/09/09/fifth-wedding-anniversary/</link><pubDate>Mon, 09 Sep 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/09/09/fifth-wedding-anniversary/</guid><description>今天是一个特别值得纪念的日子 – 我和老婆的**结婚五周年纪念日**。五年前的今天我和老婆领了证，正式步入了围城。平时总被她抱怨不浪漫的我这次特意准备了一对黄金玫瑰耳钉作为我们“木婚” （结婚五年）纪念日的礼物。老婆也蛮喜欢，我也甚是Happy（以前LP总是不中意我给她买的礼物）。 很想对这五年来的婚姻生活做一次“精彩”的回顾，但想了许久，也不得思路。于是我发现这几年的婚姻生活和大多数家庭一样 –...</description></item><item><title>把所有东西都放入版本控制系统</title><link>https://tonybai.com/2013/09/04/putting-absolutely-everything-in-version-control/</link><pubDate>Wed, 04 Sep 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/09/04/putting-absolutely-everything-in-version-control/</guid><description>本文翻译自Dr. Dobb’s杂志主编Andrew Binstock的&amp;#34;Putting Absolutely Everything in Version Control&amp;#34;一文。 **持续交付(Continuous Delivery)的一个关键原则就是将所有东西都放入版本控制系统中。这解决了一些重大问题，但也引入了一些其他问题。** 持续交付是持续集成(CI)的一个自然扩展。后者旨在每次代码签入后运...</description></item><item><title>我的工作原则2</title><link>https://tonybai.com/2013/09/03/my-personal-work-principles-2/</link><pubDate>Tue, 03 Sep 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/09/03/my-personal-work-principles-2/</guid><description>_自我认知是循序渐进的，体会到了，就想将其整理出来，给自己一个交代。_                                                                             _\- Tony Bai_ 关于我的工作原则，感觉之前的那篇总结的还不够，这两天通过观察自己的所言所行，又有了些思绪，这里记录下来。 **\* 重塑标准** 简单来说就是根据组...</description></item><item><title>利用ZooKeeper服务实现分布式系统的配置数据同步</title><link>https://tonybai.com/2013/08/28/implement-config-sync-for-distributed-system-with-zookeeper-services/</link><pubDate>Wed, 28 Aug 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/08/28/implement-config-sync-for-distributed-system-with-zookeeper-services/</guid><description>_很多时候，一旦习惯了某些事情，也就习惯了它们的恶劣，习惯了它们的丑陋，习惯了它们“赋予”你的各种痛苦。                                                                                                                                                    ...</description></item><item><title>利用ZooKeeper服务实现分布式系统的Leader选举</title><link>https://tonybai.com/2013/08/23/leader-election-using-zookeeper/</link><pubDate>Fri, 23 Aug 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/08/23/leader-election-using-zookeeper/</guid><description>每次与Java组的同事们坐下来谈技术、谈理想、谈人生时，Java组的同事总会向我们投来羡慕的眼光：卧槽！又是自己开发的工具，太NB了。这时C程序 员们的脸上就会洋溢出自豪的笑容，然后内心骂道：谁让我们没有现成的呢。另一个空间里的某些“无C不欢”们或者某些“C Guru”们会骂道：靠，有了也不用，自己写！ 有时候，C程序员真的有一种下意识：不情愿使用其他语言开发的工具、框架或服务，且比其他程序员更爱...</description></item><item><title>我的工作原则</title><link>https://tonybai.com/2013/08/19/my-personal-work-principles/</link><pubDate>Mon, 19 Aug 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/08/19/my-personal-work-principles/</guid><description>想了若干种开场白，但无论哪种都不能令我满意，于是索性就这么开场了。 工作了若干年，不经意间就形成了自己的行事和决策风格，这里权且称之为工作原则吧。这些原则引导我制定工作目标、实施过程改善、作出方案决策、选择和培养团队人员以及进行自我改进等。我也相信这些原则是主观的、具有时间和环境局限性的。也许若干年后，随着我的角色和工作的变化，许多原则将 不再适用，但这不妨碍我现在将其总结和分享出来。 **\* ...</description></item><item><title>Ubuntu 12.04修复记</title><link>https://tonybai.com/2013/08/07/ubuntu-12-04-repairing-notes/</link><pubDate>Wed, 07 Aug 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/08/07/ubuntu-12-04-repairing-notes/</guid><description>今天一早发现Ubuntu 12.04坏掉了，于是用了大半天对其做了修复，修复过程十分坎坷，但结果还不错，遂记之以备忘。 **\* 毁掉Ubuntu** Ubuntu坏掉完全是由于我的错误决策。昨天一天Ubuntu桌面右上方的状态拦一直有一个红色的错误提示符，提示系统包冲突，建议执行sudo apt-get install -f解决。apt-get也提示索引冲突，无法卸载和安装任何包。于是执行了su...</description></item><item><title>再谈组织工作效率提升</title><link>https://tonybai.com/2013/08/04/more-thoughts-on-improving-efficiency/</link><pubDate>Sun, 04 Aug 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/08/04/more-thoughts-on-improving-efficiency/</guid><description>工作效率提升，是所有企业组织都追求的一个目标。高效率意味着用更少到人可以做更多的活儿，赚取更多的利润。员工收入也会有较大提升，有面子；管理层的收 入就更水长船高了。但说起来容易，做起来难。工作效率低下一直是让各个组织的管理者头疼的问题，组织无论大小，无论中外，皆如此。 从大的方面来看，提高效率的策略不会很多，万变不离其中，关键是落实，措施要与自己的组织实际情况匹配。两年前自己曾经写过一篇博文“提升...</description></item><item><title>毕业九年 – 忆我的大学同学</title><link>https://tonybai.com/2013/07/30/recall-my-college-classmates-after-graduating-9-years/</link><pubDate>Tue, 30 Jul 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/07/30/recall-my-college-classmates-after-graduating-9-years/</guid><description>又是一年毕业季。自从九年前坐车驶出母校大门，我就再也没有回过母校，确是十分怀念，但更是怀念那些一起生活了四年的大学同学们。刚毕业那会儿，与同学们 还都保持着联系。后来大家都有了自己的新圈子，渐渐的联系少了，甚至断了。最初的校友录也荒废了，QQ我早就不用了，于是乎与大家天各一方，各自发展。 上周五去北京开会，会后我的直接领导去见他的大学同学，我也被邀请同去了^\_^（要么也是无聊地等火车）。饭桌上两...</description></item><item><title>也谈代码行统计</title><link>https://tonybai.com/2013/07/24/thoughts-about-lines-of-code-statistics/</link><pubDate>Wed, 24 Jul 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/07/24/thoughts-about-lines-of-code-statistics/</guid><description>一直在纠结要不要就这个话题写点什么，之前梳理过一些思路，但感觉这个题目似乎没什么大意义。不过将东西憋在肚子里的滋味总是不好受的，最终我还是选择写出来一些，即便它真的没有什么意义^\_^。 事情缘于近期领导让我负责的一个内部任务：制定组织内的代码行统计标准并实现标准化的工具。就是这个任务促使了我对代码行统计重新做了一番考量。 **对代码行统计的理解** 代码行统计这个活动不是软件开发过程中的关键路径...</description></item><item><title>给新手程序员的建议</title><link>https://tonybai.com/2013/07/18/advice-to-a-new-programmer/</link><pubDate>Thu, 18 Jul 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/07/18/advice-to-a-new-programmer/</guid><description>本文翻译自Dr. Dobb’s杂志主编Andrew Binstock的&amp;#34;Advice to a new programmer&amp;#34;一文**。** **总是有太多的建议摆在新手程序员面前，以致他们难于选择从何处开始。然而，所有这些建议都是建构在下面这五条实践的基础之上的。** 每隔几个月，我就会收到一些勤奋有加的新手程序员的求助，他们希望知道如何才能成为一名真正优秀的程序员。在一些程序员论坛上，我也能看...</description></item><item><title>buildc 0.3.1版本发布</title><link>https://tonybai.com/2013/07/15/buildc-0-3-1-release/</link><pubDate>Mon, 15 Jul 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/07/15/buildc-0-3-1-release/</guid><description>随着buildc在内部应用的深入，buildc逐渐进入了以内部需求和问题为主要驱动力的演化模式。我们内部的C应用多是后端服务类应用，个人 觉得具有一定代表性。buildc最初就是为了针对这类C应用而设计的。因此我们内部的需求和问题应该也同样具有一定代表性，而这种演化模式在一 段时间范围内还是有意义的。 buildc 0.3.1版本修正了上一版本的若干bug，并增加了两个新功能。 **\* 提高容错...</description></item><item><title>Python脚本命令行变量的实现</title><link>https://tonybai.com/2013/07/09/an-implementation-of-python-commandline-variables/</link><pubDate>Tue, 09 Jul 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/07/09/an-implementation-of-python-commandline-variables/</guid><description>我们知道Make工具是支持命令行变量的，这种手段为我们提供了很好的灵活性，我们可以通过敲入不同的命令行参数来决定Makefile脚本的行为。 make \[variable1=value1 variable2=value2 ... ... \]。 \Makefile CMODE = 64-bit ifeq ($(CMODE), 64-bit)     CFLAGS += -m64 endif al...</description></item><item><title>代码评审，由人治过渡到“法治”</title><link>https://tonybai.com/2013/07/08/code-review-from-rule-of-man-to-rule-of-law/</link><pubDate>Mon, 08 Jul 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/07/08/code-review-from-rule-of-man-to-rule-of-law/</guid><description>事实证明：有效的代码评审(Code Review，也有叫代码审查的），对保证代码质量具有十分重要的作用。因此这两年来我一直尝试着在这块不断改进和完善，以期望能形成一套合理、规范、有 效且高效的代码评审流程，这包括引入在线代码评审系统、走查和在线评审结合、规范评审Request的规模与有效性、设立评审专员等，用心不可谓不良苦 ^\_^。大家也的确形成了及时提交Code Review Request或...</description></item><item><title>港澳行记</title><link>https://tonybai.com/2013/06/18/a-hongkong-macau-trip/</link><pubDate>Tue, 18 Jun 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/06/18/a-hongkong-macau-trip/</guid><description>_我来也匆匆，去也匆匆。_                                     _— 某歌词_ 记忆中和LP一起出去旅行的次数少的可怜，上一次还是在结婚蜜月时，去的是九寨。二人一起出游是很美妙的，印象也是深刻的，至今当时在九寨的情形 还能历历在目。于是年初就和LP定下了今年的一个家庭目标：一起出去玩一次。 不过真正要确定何时以及去哪出游还是很困难的，毕竟工作上的事情和照顾孩子的...</description></item><item><title>跨过BUG查找的"最后一公里"</title><link>https://tonybai.com/2013/06/18/walk-through-the-last-mile-of-bugfix/</link><pubDate>Tue, 18 Jun 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/06/18/walk-through-the-last-mile-of-bugfix/</guid><description>_如果你看到一个C程序员在通宵熬夜神情紧张地对着电脑敲代码或阅读代码，多数只有两种可能：一是为了赶进度；二就是查找内存Bug。_                                                                                                                               _— 个人感悟_ ...</description></item><item><title>《Understanding and Using C Pointers》要点先睹为快</title><link>https://tonybai.com/2013/05/28/understanding-and-using-c-pointers-keypoint-preview/</link><pubDate>Tue, 28 May 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/05/28/understanding-and-using-c-pointers-keypoint-preview/</guid><description>_如果你问十个C程序员：你觉得C语言的核心是什么？这十个程序员都会回答：指针。_ 指针具备成为C语言核心的两个关键要素：**强大**与**争议**。 \* **指针的强大**源自于其天生与机器内存模型的适配。使用指针让代码紧凑，并可获得仅次于汇编代码的执行效率；使用指针可以让C程 序员毫不费力地尽情操纵着内存中的每个byte甚至是bit；使用指针可以为C程序员提供无与伦比的操作灵活性。总之，在C语...</description></item><item><title>再谈C语言位域</title><link>https://tonybai.com/2013/05/21/talk-about-bitfield-in-c-again/</link><pubDate>Tue, 21 May 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/05/21/talk-about-bitfield-in-c-again/</guid><description>我在日常工作中使用C语言%E2%80%8E)中的位域(bit field)的场景甚少，原因大致有二： \* 一直从事于服务器后端应用的开发，现在的服务器的内存容量已经达到了数十G的水平，我们一般不需要为节省几个字节而使用内存布局更加紧凑的位域。 \* 结构体中位域的实现是平台相关或Compiler相关的，移植性较差，我们不会贸然地给自己造“坑”的。 不过近期Linux技术内核社区（www.linu...</description></item><item><title>果果3周岁了</title><link>https://tonybai.com/2013/05/18/daughter-is-3-years-old/</link><pubDate>Sat, 18 May 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/05/18/daughter-is-3-years-old/</guid><description>果果已经3周岁了，这是一个不争的事实。这意味着我又变老了^\_^。过去的东西已经无法抓住了，目前我能做的就是欣赏现实了^\_^。 3岁的果果长的越来越有女孩儿的味道了^\_^。 3岁的果果生长发育一切良好，个头还是比同龄的孩子高出那么一截。 3岁的果果说起话来越来越有逻辑性了，我们时常惊诧于其时而冒出的“妙语”。 3岁的果果总是说“喜欢爸爸”，因为妈妈总是加班，而无暇陪着果果玩。 3岁的果果很有自...</description></item><item><title>buildc 0.3.0版本发布</title><link>https://tonybai.com/2013/05/11/buildc-0-3-0-release/</link><pubDate>Sat, 11 May 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/05/11/buildc-0-3-0-release/</guid><description>自buildc正式在项目中应用以来，我们收到了许多同事针对buildc演进的意见和建议。其中确实有些易用性的问题是在最初设计时未考虑周全的，尤其是.buildc.rc中的配置，同事们对该文件的配置已经“怨声载道”了。 .buildc.rc是用来配置某开发者在开发过程中使用的第三方库所在subversion repository信息的，例如： a\_repository = (&amp;#39;SVN库地址&amp;#39;, &amp;#39;...</description></item><item><title>也谈Commit log</title><link>https://tonybai.com/2013/05/09/also-talk-about-commit-log/</link><pubDate>Thu, 09 May 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/05/09/also-talk-about-commit-log/</guid><description>在版本控制工具大行其道的今天，作为程序员，势必要每天与各种版本控制系统（比如Subversion、Git、Mercurial等）打交道， 每天不commit几次代码都不好意思说自己是专业程序员^\_^。不过commit代码可不止敲入commit命令这么简单，对于一个专业程序员 来说，我们还要关注每次commit所携带的背景信息，这里暂且称之为“commit context”。在每次commit时，...</description></item><item><title>推动知识管理的这两年</title><link>https://tonybai.com/2013/05/03/the-past-two-years-to-promote-the-knowledge-management/</link><pubDate>Fri, 03 May 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/05/03/the-past-two-years-to-promote-the-knowledge-management/</guid><description>掐指算来，部门知识管理的推广工作已有两年了。两年时间不能算短，但对于知识管理这件事来说，只能算是热身阶段，我们依旧站在起跑线上，或者稍乐 观地讲我们只是刚刚迈出了万米长跑的第一步。 下面是这两年来部门内部知识库建设的一个Timeline： \- 2011年中旬，我所在产品线私下在一台PC上建立了基于MediaWiki的知识库。 \- 2011年末产品线在部门内部做了有关知识库与知识管理实践的分享。...</description></item><item><title>libiconv库链接问题一则</title><link>https://tonybai.com/2013/04/25/a-libiconv-linkage-problem/</link><pubDate>Thu, 25 Apr 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/04/25/a-libiconv-linkage-problem/</guid><description>与在Solaris系统上不同，Linux的libc库中包含了libiconv库中函数的定义，因此在Linux上使用libiconv库相关函数，编译时是不需要显式-liconv的。但最近我的一位同事在某redhat enterprise server 5.6机器上编译程序时却遇到了找不到iconv库函数符号的链接问题，到底是怎样一回事呢？这里分享一下问题查找过程。 **一、现场重现** 这里借用一下...</description></item><item><title>C,C++开源项目中的100个Bugs</title><link>https://tonybai.com/2013/04/10/100-bugs-in-c-cpp-opensource-projects/</link><pubDate>Wed, 10 Apr 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/04/10/100-bugs-in-c-cpp-opensource-projects/</guid><description>俄罗斯OOO Program Verification Systems公司用自己的静态源码分析产品PVS-Studio对一些知名的C/C++开源项目，诸如Apache Http Server、Chromium、Clang、CMake、MySQL等的源码进行了分析，找出了100个典型的Bugs。个人觉得这份列表对C/C++ 程序员有一定参考意义。与其说事后用静态工具分析，倒不如在编码时就提高自知自觉...</description></item><item><title>Hello，Sublime Text 2</title><link>https://tonybai.com/2013/04/01/hello-sublime-text-2/</link><pubDate>Mon, 01 Apr 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/04/01/hello-sublime-text-2/</guid><description>用惯了Vim后，也会有一种尝试新Editor的冲动，这回Sublime Text 2满足了我的这个需求。据说Sublime Text是目前最火的代码编辑器之一，我周围为数不多的几个比较Geek的同事都已经开始使用Sublime Text 2或用了很长时间了，其官方网站首页的Feature Demo也的确非常地炫。 **安装Sublime Text 2** 我的实验环境Ubuntu 12.04.1 ...</description></item><item><title>简析指针与多维数组</title><link>https://tonybai.com/2013/03/28/pointer-and-multi-dimension-array-in-c/</link><pubDate>Thu, 28 Mar 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/03/28/pointer-and-multi-dimension-array-in-c/</guid><description>上一篇文章中对多级指针做了简要分析，其实只有当指针与多维数组以及函数联合在一起使用时，麻烦才算真正到来。 **零、数组****与数组名** C语言)中的数组的一般声明形式如下： T arr\_name\[n\]; /\* T为类型，n为数组元素个数 \*/ 从**内存布局**角度来说，数组T arr\_name\[n\]就是内存中连续的内存单元，每个内存单元的长度为sizeof(T)，数组的起始内...</description></item><item><title>简析多级指针解引用</title><link>https://tonybai.com/2013/03/23/multi-dimension-pointer-in-c/</link><pubDate>Sat, 23 Mar 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/03/23/multi-dimension-pointer-in-c/</guid><description>指针是C语言)中公认的最为强大的语法要素，但同时也是最难理解的语法要素，它曾给程序员带来了无数麻烦和痛苦，以致于在C语言之后诞生的很多新兴 语言中我们再也难觅指针的身影了。 下面是一个最简单的C语言指针的例子： int a = 5; int \*p = &amp;amp;a; 其中p就是一个指针变量。如果C语言中仅仅存在这类指针，那显然指针不会形成“大患”。经常地我们会在代码中看到下面的情形： int \*\*q...</description></item><item><title>一种基于内存映射文件的系统运行数据提取方法</title><link>https://tonybai.com/2013/03/18/sys-running-data-extraction-method-using-mmap/</link><pubDate>Mon, 18 Mar 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/03/18/sys-running-data-extraction-method-using-mmap/</guid><description>这是我无意中想到的一个方法，估计这个方法已经不是什么新鲜的东西了，很可能在类似的问题场景中早已经被使用了。不过这里还是要说说我的思维过程。 近期在学习一些Linux性能查看和分析方面的工具，比如top、iostat、vmstat以及sar等。在学习过程中我发现这些工具有个共同的特点，那就是她们采集的Linux运行数据都是从/proc下的文件中实时获取并计算而得出的。众所周知，/proc是Linux...</description></item><item><title>SVN命令输出结果的语言选择</title><link>https://tonybai.com/2013/03/15/choose-lang-for-svn-cmd-output/</link><pubDate>Fri, 15 Mar 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/03/15/choose-lang-for-svn-cmd-output/</guid><description>今天一位网上的朋友在使用reviewboard时遇到了问题，我们在评论中探讨了一下。他的问题目前已经定位，大致是这样的：他在Windows上用svn diff生成的patch文件在提交给reviewboard时出错，但在linux上生成的patch文件是没有问题的。后来他发现这两个patch文件内容稍有区别：Windows上的patch文件中的diff结果包含中文，比如“版本 10”；而在linu...</description></item><item><title>谋划2013</title><link>https://tonybai.com/2013/03/11/2013-plan/</link><pubDate>Mon, 11 Mar 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/03/11/2013-plan/</guid><description>眼看2013年已经过去1/6了，这个谋划显然有些晚了。之所以晚，根本原因还是之前有些很多事情没有想清楚，即便是现在可能依旧比较朦胧。鉴于去年的目标执行情况不甚理想，尤其是工作目标方面，因此今年在谋划策略方面变得更加务实和收敛，期望能说到做到或做的尽可能的多。 **一、个人目标** \* 鉴于去年的执行情况，今年将blog定在80篇（大约每5天一篇）应该问题不大，毕竟blog已经成为我生活的一个重要...</description></item><item><title>也谈C语言的Struct Hack</title><link>https://tonybai.com/2013/03/07/struct-hack-in-c/</link><pubDate>Thu, 07 Mar 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/03/07/struct-hack-in-c/</guid><description>今天在浏览网友huangz编写的“Redis源码分析”时，看到如下redis中的代码： struct sdshdr {     int len;     int free;     char buf\[\]; }; 说实话，这类代码我见过很多，但直到这次我才知道这种coding trick的真实英文称谓是：Struct Hack。 到底什么是Struct Hack？其实倒也没有什么明确定义。首先它...</description></item><item><title>玩转top</title><link>https://tonybai.com/2013/03/02/deep-into-top/</link><pubDate>Sat, 02 Mar 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/03/02/deep-into-top/</guid><description>相信很多人和我一样，top是自己日常使用最多的linux资源查看工具。不过仅限于一些简单的日常场景罢了：敲入top命令，看看哪些进程占用 CPU较多，然后对这些CPU占用较多的进程逐一处理一下。显然这样使用top有些大才小用了。 以前在监控工具使用方面总是浅尝辙止，并未做过多深入研究。近来愈来愈觉得有必要针对几种常用工具好好学习一下了。而top便首当其冲。top是一款 以查看进程(task)信息为...</description></item><item><title>为什么还用C编程？</title><link>https://tonybai.com/2013/02/27/why-code-in-c-anymore/</link><pubDate>Wed, 27 Feb 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/02/27/why-code-in-c-anymore/</guid><description>本文翻译自Dr. Dobb&amp;#39;s杂志主编Andrew Binstock的文章“Why Code in C Anymore?”，以下是翻译正文。 **传统的那些选择C而不是C++的理由的说服力已经逐渐地被削弱。还有什么继续使用C的更好的理由么？** 一个 Dr. Dobb&amp;#39;s的老读者最近问我：为何人们还在使用C编程。这个话题最近曾在我们站点的评论中出现过。早期也曾出现在与一些行业公司的对话过程中，尤其...</description></item><item><title>果果的蛇年春节独白</title><link>https://tonybai.com/2013/02/18/my-daughter-monologue-about-2013-spring-festival/</link><pubDate>Mon, 18 Feb 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/02/18/my-daughter-monologue-about-2013-spring-festival/</guid><description>我叫果果，现在两岁零9个月了。我的身高快到1米了，人家都说我长得又高又大^\_^，我比邻居家的小哥哥还要高，要知道他可比我年长8个月呢。 最近我很开心，因为我和爸爸妈妈一起回老家与爷爷奶奶过春节了。春节是什么，我还不是很清楚。但我的印象中一到春节周围的人都很开心，家家户户都挂上了红灯笼，门上都贴着福字和对联，还燃放那种让我怕怕的很响的鞭炮。春节最让我高兴的是爸爸妈妈都不用去上班了，可以天天陪我一起...</description></item><item><title>期待过年</title><link>https://tonybai.com/2013/02/06/look-forward-to-spring-festival/</link><pubDate>Wed, 06 Feb 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/02/06/look-forward-to-spring-festival/</guid><description>此时此刻，离2013年农历蛇年还有3天了。外面零星地飘起了雪花，也好，这可以让城市的空气变得更加清新。办公室里早已不复以往的“喧嚣”，大家工作的 积极性也不再那么高涨，这的确不是一个比拼职业性的好时候；会议室里灯也都是关着呢，大家似乎已经没什么心情开会了。约1/4的工位已经空了，也许明天后 天这个比例就会变成1/3或者1/2；街上的车流感觉也没有以前那么多了，这一切一切都预示着中国人的农历春节即将...</description></item><item><title>Go defer的C实现</title><link>https://tonybai.com/2013/02/03/implement-go-defer-in-c/</link><pubDate>Sun, 03 Feb 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/02/03/implement-go-defer-in-c/</guid><description>Go语言中引入了一个新的关键字defer，个人认为这个语法关键字让异常处理也变得得心应手许多，对改善代码的可读性和可维护性大有裨益，是典型的语法棒棒糖^\_^。 像下面这种代码（伪代码）： void foo() {     apply resource1; retv = action1;     if not success         release resource1 apply reso...</description></item><item><title>关于Python Package下的Module import方式</title><link>https://tonybai.com/2013/01/24/the-module-import-way-under-python-package/</link><pubDate>Thu, 24 Jan 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/01/24/the-module-import-way-under-python-package/</guid><description>2012年有一个目标我没有达成，那就是深入学习和使用Python语言。这个目标被其他学习任务和工作无情的抢占了，当然最主要的原因还是我重视不够^\_^。 近期恰逢有一些Python工程的开发工作要做，就顺便略微深入地学习了一下Python：看了几本Python的英文大部头，比如《Learning Python 4th Edition》、《Python Essential Reference 4th...</description></item><item><title>梅西与四座金球</title><link>https://tonybai.com/2013/01/17/leomessi-with-four-ballon-dor/</link><pubDate>Thu, 17 Jan 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/01/17/leomessi-with-four-ballon-dor/</guid><description>如发现本站页面被黑，比如：挂载广告、挖矿等恶意代码，请朋友们及时联系我。十分感谢！ 商务合作请联系bigwhite.cn AT aliyun.com 欢迎使用邮件订阅我的博客 输入邮箱订阅本站，只要有新文章发布，就会第一时间发送邮件通知你哦！ 名字： 邮箱: 这里是 Tony Bai的个人Blog，欢迎访问、订阅和留言！ 订阅Feed请点击上面图片。 如果您觉得这里的文章对您有帮助，请扫描上方二维...</description></item><item><title>buildc 0.2.2版本发布</title><link>https://tonybai.com/2013/01/15/buildc-0-2-2-release/</link><pubDate>Tue, 15 Jan 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/01/15/buildc-0-2-2-release/</guid><description>随着buildc在项目中的深入使用，开发和测试人员都提出了不少良好意见，让我们有些应接不暇了，这次的版本更新也是为了满足这些意见和建议。 由于忙于应对这些眼前的需求，原本0.3.0的改进计划也被推迟了一些。 buildc 0.2.2版本包含了两个主要修正。 \* 增加了–ignore-error命令行选项 自从buildc cache相关命令严格区分–cmode=32-bit还是64-bit后，用...</description></item><item><title>梅西，金球之王</title><link>https://tonybai.com/2013/01/08/leomessi-the-king-of-ballon-dor/</link><pubDate>Tue, 08 Jan 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/01/08/leomessi-the-king-of-ballon-dor/</guid><description>在2012年末，FIFA公布了金球奖最终三位候选人：梅西、伊涅斯塔和C罗，各大博彩公司也就此奖项纷纷开出赔率。从赔率来看，梅西似乎肯定会 赢得今年的FIFA金球。在昨天之前，从金球制作方名签的摆放位置或又法国足球杂志最新一期的封面，也都暗示了梅西即将获奖。不过不到最后，我还 真是没底，毕竟梅西与其他两位对手相比缺少年度重量级冠军荣誉。 今天凌晨，纠结于此事的我睡得十分不踏实。半夜醒来，本以为结果已...</description></item><item><title>说说工作幸福感</title><link>https://tonybai.com/2013/01/04/my-opinion-on-improving-work-happiness/</link><pubDate>Fri, 04 Jan 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/01/04/my-opinion-on-improving-work-happiness/</guid><description>职场上的朋友可能经历过以下两种截然不同的状态： （一） 每天早晨起来都有一种强烈要上班工作的冲动； 一到公司，立即感觉精力充沛，并希望尽快开始做事，不能浪费一分一秒； 每天下班前回顾一天的工作时，都能感觉到收获和进步，并带着笑容下班； 每天回到家里，暂时忘记工作，与家人共度良霄，养足精力； 生活与工作保持一定距离，这始终让你与工作之间有美的感觉。 （二） 每天早晨一想到要上班，就愁云遮面，总想在床...</description></item><item><title>2013新年快乐</title><link>https://tonybai.com/2013/01/01/2013-happy-new-year/</link><pubDate>Tue, 01 Jan 2013 00:00:00 +0800</pubDate><guid>https://tonybai.com/2013/01/01/2013-happy-new-year/</guid><description>这篇文章发出来有些迟了，眼看2013年的第一天就将过去了，不过这里依然要**祝福大家2013新年快乐！** 之所以“迟到”，是因为果果最近生病了。自从上周日凌晨到医院输液之后，今天已经是第四次带果果去医院了。不过小家伙儿今天表现十分勇敢，有史以来第一次 在医生扎针的时候表现的泰然自若，没有流出半滴眼泪。不过即便如此，几天的病症也让果果略显消瘦，食欲很差。作为父母的，的确是看在眼里，疼在心里。 元旦...</description></item><item><title>我的博客观</title><link>https://tonybai.com/2012/12/19/my-blog-outlook/</link><pubDate>Wed, 19 Dec 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/12/19/my-blog-outlook/</guid><description>打开我的Google Reader，发现诸多博客达人的博客已经不再更新了，顿颇感遗憾。不过看到还有更多和我一样一直并快乐地写博客的朋友们，心头又是一番欣喜。 如果你问我为何可以长期持续地将博客写下去，我会告诉你：这与我的博客观息息相关。 人有三观：人生观、价值观和世界观。这三观是在你的成长过程中潜移默化地形成的，即便你自己无法表达出来，甚至没有意识到其存在，但这三观却真真切切地在 影响着你人生道路...</description></item><item><title>2012小结</title><link>https://tonybai.com/2012/12/18/my-summary-of-2012/</link><pubDate>Tue, 18 Dec 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/12/18/my-summary-of-2012/</guid><description>趁着世界末日尚未到来，赶紧将2012年总结一番，即便是末日也不能留遗憾不是^\_^。 2012年总体过得还算充实： \*《七周七语言》终于出版了； \* 写了近80篇Blog，虽离目标预期还有差距，但也给我带来了不小的精神愉悦； \* 为《程序员》杂志写了两篇文章，虽然都是短文； \* 读了30多本书，还有10多本尚未读完，不过年初制定的“扫存书”目标没能达成，因为依然不断地有大量的新书加入^\_...</description></item><item><title>关于绩效面谈的一些拙见</title><link>https://tonybai.com/2012/12/13/some-opinions-about-performance-interview/</link><pubDate>Thu, 13 Dec 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/12/13/some-opinions-about-performance-interview/</guid><description>《程序员》杂志的“一分钟先生”专栏之前曾约稿，有两个主题可供选择：制定绩效目标或如何进行绩效面谈。本打算两个主题都写写的，但碍于时间有限，最终只写了一个主题：《制定绩效目标的几个重要因素》。进入12月，想必各个公司或组织都会开展年终绩效考核，我这里也不例外。 关于绩效面谈，印象中组织里似乎没人告诉我应该如何去做。很久以前是小兵的时候没有过多考虑，成为项目负责人后也没有接受过什么系统的培训，都是按照...</description></item><item><title>梅西，足球新王</title><link>https://tonybai.com/2012/12/10/leomessi-the-new-king-of-soccer/</link><pubDate>Mon, 10 Dec 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/12/10/leomessi-the-new-king-of-soccer/</guid><description>话说上一场欧冠主场对阵本菲卡，梅西下半场替补登场，但在比赛结束前受伤离场，那真是一个叫梅西迷们伤心的日子，梅西在记录面前倒下了。梅西本希望与主场 球迷分享打破世界纪录的快乐，但事与愿违。这正应验了中国那句俗话：“有心栽花花不开，无心插柳柳成荫”。赛后，有关梅西的伤势报告有诸多版本，直到昨天 梅西进入客战贝蒂斯大名单，球迷们的心才真正落下：梅西的确伤的不重！ 相信所有巴萨和梅西的球迷在今晨巴萨客场对...</description></item><item><title>buildc 0.2.1版本发布</title><link>https://tonybai.com/2012/12/06/buildc-0-2-1-release/</link><pubDate>Thu, 06 Dec 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/12/06/buildc-0-2-1-release/</guid><description>buildc 0.2.1版本是一个bugfix版本，修正了两个重要问题。 \* 修正执行buildc pack –cmode=32-bit时无法创建32位安装包的问题 之前的buildc pack命令在打包安装程序时忽略了–cmode这个选项，这样即便传入32-bit这个参数，打出的安装包中的应用程序依旧是64位编译的。这次修正了这个问题，让buildc真正支持打32位程序的安装包。 \* 修正b...</description></item><item><title>将Unity换成Gnome3</title><link>https://tonybai.com/2012/12/06/replace-unity-with-gnome3/</link><pubDate>Thu, 06 Dec 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/12/06/replace-unity-with-gnome3/</guid><description>Ubuntu 12.04已经体验一天多了，Unity还是用的不大习惯，左侧的程序启动栏感觉还是别扭，以前用windows的时候就不喜欢将任务栏放在左侧或右侧； 应用窗口的菜单栏融合到桌面顶端也没给我太多惊喜；总而言之，给自己找几个换回Gome的理由还是很容易的^\_^。况且Gnome也发生了巨变， 由传统的Gnome2更新到了全新的Gnome3，正好我也想体验一下Gnome3，于是继续折腾。 Ub...</description></item><item><title>升级到Ubuntu 12.04LTS</title><link>https://tonybai.com/2012/12/04/upgrade-ubuntu-to-1204-lts/</link><pubDate>Tue, 04 Dec 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/12/04/upgrade-ubuntu-to-1204-lts/</guid><description>Ubuntu 10.04 LTS已经伴随我两年了，经过我这么长时间的折腾，Ubuntu早已不堪重负^\_^。在未升级前，Ubuntu 10.04已经表现出诸多问题： \- 在家中连接无线路由器时间漫长，且经常掉线； \- 在公司用有线网络经常掉线； \- 由于反复安装软件，系统中残留较多垃圾数据； \- Ubuntu 10.04官方源中的软件版本都有些低，很多软件手工安装高版本比较费力； 另外原先...</description></item><item><title>谈谈如何高效地组织和实施内部会议</title><link>https://tonybai.com/2012/12/03/how-to-organize-and-hold-meetings-efficiently/</link><pubDate>Mon, 03 Dec 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/12/03/how-to-organize-and-hold-meetings-efficiently/</guid><description>我个人一直追求高效的工作，无论是在职场中的哪个环节，在我眼中总是应该有提效的空间的，我甚至感觉我在这方面似乎形成了一种偏执，有些时候一看到低效的环节，我就有些情绪激动^\_^。 如果要大家投票表决组织内部最低效地活动环节，估计大多数人会将选票投给**会议**。关于内部会议的组织和实施，有很多反模式，这里列举一二： \- 会议组织人突然发出会议通知，两个小时后举行某会议； \- 会议通知中没有会议的...</description></item><item><title>谈谈如何写好Mail</title><link>https://tonybai.com/2012/11/28/how-to-write-a-good-email/</link><pubDate>Wed, 28 Nov 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/11/28/how-to-write-a-good-email/</guid><description>Mail(在这个时代，Mail默认的含义早已变成了Email，也就是电子邮件)是我们在工作中常用的表达和沟通方式之一。与IM工具、拿起电话直接Call、会议等相比，Mail容许相关干系人用更多的时间去了解背景、理解问题和思考解决方案，而不用立即予以答复。 我们每天都会发出和收到几十封甚至上百封Mail，但这并不意味着我们写的Mail就都是合格的。一些人的Mail，无论从格式还是内容，都会让人看起来...</description></item><item><title>果果2岁以来的成长记录</title><link>https://tonybai.com/2012/11/27/some-growing-up-details-of-my-two-years-old-daughter/</link><pubDate>Tue, 27 Nov 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/11/27/some-growing-up-details-of-my-two-years-old-daughter/</guid><description>好久没有写有关果果的事情了，作为爸爸的，心中不免有些惭愧啊^\_^。今天就来补一下果果这大半年来的成长情况，主要是说说两周岁后果果的成长变化。没有什么系统的思路，就是想到哪说到哪。 果果现在已经两岁半了，小家伙个头不小，身体力量和运动能力突出，在同龄小朋友中都是佼佼者。唯一缺憾就是语言能力发育延后。有人说：“小女孩说话晚，聪明”。不管大家信不信，反正我是信啦^\_^。 就果果语言发育延迟的事情，之...</description></item><item><title>个人时间管理的一些实践体会</title><link>https://tonybai.com/2012/11/23/some-experience-on-personal-time-management/</link><pubDate>Fri, 23 Nov 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/11/23/some-experience-on-personal-time-management/</guid><description>时间是人类最宝贵的财富之一，我十分认同这点，因此我在个人时间管理以及工作效率上也是一直追求持续改善的，期望能在最短的时间内产出更多有价值的成果，尤其是工作时间里。 我知道的时间管理思想主要有三种： \* 四象限理论。这是我们经常谈到的传统时间管理理论，它告诉我们如何根据待办事项的重要和紧急两个属性对待办事项进行分类和优先级确定。我个人觉得这个理论是时间管理的基础，后续无论是GTD理论还是番茄时间理...</description></item><item><title>使用squid搭建http代理</title><link>https://tonybai.com/2012/11/21/setup-http-proxy-with-squid/</link><pubDate>Wed, 21 Nov 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/11/21/setup-http-proxy-with-squid/</guid><description>近期在做一些基础设施搭建的过程中，又遭遇到了公司http代理的问题。主要是很多主机上的工具只支持不带身份鉴权信息的http\_proxy设置，如只 支持诸如：export http\_proxy=&amp;#39;http://10.10.1.1:8090&amp;#39;，而不支持export http\_proxy=&amp;#39;http://tonybai:passwd@10.10.1.1:8090&amp;#39;这种形式的配置。 或是其命令行选项...</description></item><item><title>新速腾首保小记</title><link>https://tonybai.com/2012/11/18/note-for-my-2012-sagitar-first-maintenance/</link><pubDate>Sun, 18 Nov 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/11/18/note-for-my-2012-sagitar-first-maintenance/</guid><description>自从今年5月份新车入手以来，我的新速腾恰好开了5000公里，其间LP开了一段时间，让5000公里这个点的到达时间延后了一个多月。 一汽大众新速腾手册上建议的首保是不超过7500公里，但4S的Sale在交车时明确告知5000公里首保。考虑到是新车，而且恰逢由秋入冬天气转冷的季节，我们决定还是5000公里去保，最主要的目的其实是在入寒冬前做一次全车检查。 考虑到一汽大众4S店比较繁忙，这周一我就电话做...</description></item><item><title>制定绩效目标的几个重要因素</title><link>https://tonybai.com/2012/11/17/several-important-factors-in-making-performance-goals/</link><pubDate>Sat, 17 Nov 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/11/17/several-important-factors-in-making-performance-goals/</guid><description>本文是笔者发表在《程序员》杂志2012年11期上的那篇“制定绩效目标的几个重要因素”文章的完整版。 软件开发是一种创造性的工作，这种工作的成果具有不确定性且很难量化，因此经理们在给员工制定绩效目标时多没有统一标准(即便有也不一定准确，而且在一定程度上还可能会扼杀创造性)，所采用的方法也是五花八门。不过即便如此，经理们也没有放弃寻找一种更为适合软件开发领域绩效目标制定的方法。笔者也是其中一份子，在这...</description></item><item><title>buildc 0.2.0版本发布</title><link>https://tonybai.com/2012/11/06/buildc-0-2-0-release/</link><pubDate>Tue, 06 Nov 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/11/06/buildc-0-2-0-release/</guid><description>buildc的演进先后经历了构建管理和安装包工程管理两个阶段。其中buildc的构建管理功能在项目中应用较早，目前相对稳定可靠。但其支持的安装包工程是直到最近才被大家所正式使用的。不出意料，大家在使用过程发现了一些问题，于是我们也是边用边改。 目前一个setup工程一般具有类似如下源码组织结构： distributions/ setup.cfg src/     – README     – ap...</description></item><item><title>知识管理的几点野路子经营策略</title><link>https://tonybai.com/2012/11/04/the-amateur-way-of-knowledge-management/</link><pubDate>Sun, 04 Nov 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/11/04/the-amateur-way-of-knowledge-management/</guid><description>时间真是过得飞快，遥想一年前的这个时候我们在产品线的知识管理试水有了一点成绩，便在组织内力推知识管理。领导经过权衡后，也认同了知识管理的重要性， 并随即安排人在组织内部快速建立起了知识库。在最初的一两个月里，临时的知识管理负责人热情很高，做得还算不错，初步地将知识库是什么、如何使用以及组织 知识管理的第一版规范和大家交待清楚了。但随着热情的消逝，知识库管理也随波逐流了，知识管理开始变得名存实亡，这...</description></item><item><title>辩证地看待“重新发明轮子”</title><link>https://tonybai.com/2012/11/02/treat-reinventing-the-wheel-dialectically/</link><pubDate>Fri, 02 Nov 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/11/02/treat-reinventing-the-wheel-dialectically/</guid><description>C程序员骨子里都有一种“重新发明轮子(Reinventing the Wheel)”的特质。在面向对象、组件化流行以及崇尚复用的今天，这种特质似乎总是被认为是反面教材。但伟大的毛主席教导我们：要辩证地看待一切事物， 凡事无绝对。事物都是有两面性的，有好就有坏，有坏就有好。拿“重新发明轮子”这事而言，我们除了看到其弊端外，还要充分领会到其好的一面，不能一棒子打 死，这样才能在特定的场景下作出正确合理...</description></item><item><title>关于团队经营的若干体会</title><link>https://tonybai.com/2012/11/01/some-experience-on-team-management/</link><pubDate>Thu, 01 Nov 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/11/01/some-experience-on-team-management/</guid><description>在近两年的持续不断的投入和努力下，近期我在团队经营方面看到了一些成果，但这却引来了同僚们的“羡慕嫉妒恨”^\_^，他们希望了解到我是“如何将0变成 1的”。关于团队运营方面，我始终认为自己只是个初级选手，充其量就是个实践者而已。以前我也只是按照我的思路和直觉在做，并未有过什么细致的考量，也没 有人给我这方面系统的指导。这几天闲暇时回顾了一下这两年的经营历程，形成了些许体会，这里也和大家分享一下。 ...</description></item><item><title>改善技术布道效果的几个实践</title><link>https://tonybai.com/2012/10/26/some-practice-on-improving-tech-preach/</link><pubDate>Fri, 26 Oct 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/10/26/some-practice-on-improving-tech-preach/</guid><description>本文是笔者发表在《程序员》杂志2012年08期上的那篇“改善技术布道效果的几个实践”文章的完整版。 技术布道不易，想取得良好的效果就更难了。下面是笔者总结的几个有助于改善技术布道效果的有效实践,这里给大家分享一下。 **自我认知** 技术布道前,布道者首先要做好自我认知,这将有助于布道者确认自己是否胜任此次布道以 及采用何种布道策略以赢得更好的效果。认知的内容包括:自己是否精通这方面的技术。若 只...</description></item><item><title>也谈Go语言代码包分发</title><link>https://tonybai.com/2012/10/25/go-package-distributing/</link><pubDate>Thu, 25 Oct 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/10/25/go-package-distributing/</guid><description>Go语言目前(截至1.0.2版本)尚不支持直接链接.a文件(这里的.a文件指的不是传统静态共享库，而是对golang的非main包build后的产物)。这样一来Go的第三方库包或组织内部的公共代码库包只能以源码的形式分发了。 Go提供了get命令用于获取他人分发的代码包。我们通过get命令既可以获取一些知名代码托管站点上的代码，也可以获取组织内部版本控制服务器上的公共代码。 Go get支持的托管...</description></item><item><title>由一个软件库存问题想到的</title><link>https://tonybai.com/2012/10/22/thoughts-on-software-inventory/</link><pubDate>Mon, 22 Oct 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/10/22/thoughts-on-software-inventory/</guid><description>近期产品线出现这样一个“怪现象”：许多已经完成编码并具备提交给测试组的版本没有测试人员对应。测试部那边给出的策略是：按版本优先级从高到低依次测 试。这样一来一些重要版本需要到3个月甚至更长时间之后才能开始测试。可以肯定这种现象是生产环节的一个问题，但用什么理论去解释和分析这个问题呢？我想 到了“库存” – 软件库存。 《Joel说软件》的那个Joel曾写过一篇名为《软件库存》的文章，也正是看了那篇...</description></item><item><title>也谈Go语言声明语法</title><link>https://tonybai.com/2012/10/11/understanding-go-declaration-syntax/</link><pubDate>Thu, 11 Oct 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/10/11/understanding-go-declaration-syntax/</guid><description>一直在从事C语言服务端应用开发，对C的变量声明语法早已烂熟于胸，同时也深知复杂的C变量声明十分晦涩难解。记得若干年前还特意花了一些时间研究理解复 杂C变量声明的方法，记忆中这些方法包括：《C专家编程》中提到的“优先级”规则、right-left规则以及顺时针/螺旋形规则等，幸运地是我们日常 开发中少有使用极为复杂的变量声明(如void (\*signal (int signo, void (\*f...</description></item><item><title>编程语言进入“拼爹”时代</title><link>https://tonybai.com/2012/10/08/the-new-age-of-programming-language/</link><pubDate>Mon, 08 Oct 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/10/08/the-new-age-of-programming-language/</guid><description>近期看到一则新闻，说是Microsoft推出了一门开源的编程语言叫TypeScript，该Project的主要负责人是大名鼎鼎的Anders Hejlsberg，就是那个Turbo Pascal 、Delphi以及C#)之父。结合近几年来出现的颇受关注的其他几门编程语言，如Go、Rust、Dart)等，让我感觉到编程语言似乎进入了&amp;#34;拼爹&amp;#34;时代。 我们来列举一下这几门新兴语言的“老爹”(设计者)： ...</description></item><item><title>Go与C语言的互操作</title><link>https://tonybai.com/2012/09/26/interoperability-between-go-and-c/</link><pubDate>Wed, 26 Sep 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/09/26/interoperability-between-go-and-c/</guid><description>Go有强烈的C背景，除了语法具有继承性外，其设计者以及其设计目标都与C语言有着千丝万缕的联系。在Go与C语言互操作(Interoperability)方面，Go更是提供了强大的支持。尤其是在Go中使用C，你甚至可以直接在Go源文件中编写C代码，这是其他语言所无法望其项背的。 在如下一些场景中，可能会涉及到Go与C的互操作： 1、提升局部代码性能时，用C替换一些Go代码。C之于Go，好比汇编之于C。...</description></item><item><title>Go中的系统Signal处理</title><link>https://tonybai.com/2012/09/21/signal-handling-in-go/</link><pubDate>Fri, 21 Sep 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/09/21/signal-handling-in-go/</guid><description>我们在生产环境下运行的系统要求优雅退出，即程序接收退出通知后，会有机会先执行一段清理代码，将收尾工作做完后再真正退出。我们采用系统Signal来 通知系统退出，即kill pragram-pid。我们在程序中针对一些系统信号设置了处理函数，当收到信号后，会执行相关清理程序或通知各个子进程做自清理。kill -9强制杀掉程序是不能被接受的，那样会导致某些处理过程被强制中断，留下无法恢复的现场，导致消...</description></item><item><title>Go语言标准库概览</title><link>https://tonybai.com/2012/09/08/a-brief-tour-of-go-standard-library/</link><pubDate>Sat, 08 Sep 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/09/08/a-brief-tour-of-go-standard-library/</guid><description>本文翻译自Dr.Dobb&amp;#39;s的&amp;#34;A Brief Tour of the Go Standard Library&amp;#34;一文。 **在Go语言五周系列教程的最后一部分中，我们将带领大家一起来浏览一下Go语言丰富的标准库。** Go标准库包含了大量包，提供了丰富广泛的功能特性。这里提供了概览仅仅是有选择性的且非常简单。本文发表后，标准库的内容还可能继续增加，因此 建议大家最好是通过在线查阅库API或使用go...</description></item><item><title>Go程序设计语言(三)</title><link>https://tonybai.com/2012/08/28/the-go-programming-language-tutorial-part3/</link><pubDate>Tue, 28 Aug 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/08/28/the-go-programming-language-tutorial-part3/</guid><description>本文译自Rob Pike的Go语言PPT教程 – &amp;#34;The Go Programming Language Part3(updated June 2011)&amp;#34;。由于该教程的最新更新时间早于Go 1版本发布，因此该PPT中的一些内容与Go 1语言规范略有差异，到时我会在相应的地方做上注解。 第三部分大纲 ------ * 并发与通信 * Goroutines * 通道(Channel) * 并发相关...</description></item><item><title>Go程序设计语言(二)</title><link>https://tonybai.com/2012/08/27/the-go-programming-language-tutorial-part2/</link><pubDate>Mon, 27 Aug 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/08/27/the-go-programming-language-tutorial-part2/</guid><description>重写工作方式正如字段一样。 type NamedPoint struct {     Point     name string } func (n \*NamedPoint) Abs() float64 {    return n.Point.Abs() \* 100. } n := &amp;amp;NamedPoint{Point{3, 4}, &amp;#34;Pythagoras&amp;#34;} fmt.Println(n.Abs...</description></item><item><title>Go程序设计语言(一)</title><link>https://tonybai.com/2012/08/23/the-go-programming-language-tutorial-part1/</link><pubDate>Thu, 23 Aug 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/08/23/the-go-programming-language-tutorial-part1/</guid><description>int          uint int8      uint8 = byte int16       uint16 int32       uint32         float32      complex64 int64       uint64         float64      complex128 还有uintptr，一个大小足够存储一个指针的数值。 这些都是互不相同的类型；...</description></item><item><title>也谈Go语言编程 – Hello，Go!</title><link>https://tonybai.com/2012/08/17/hello-go/</link><pubDate>Fri, 17 Aug 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/08/17/hello-go/</guid><description>_**Go is expressive, concise, clean, and efficient. Its concurrency mechanisms make it easy to write programs that get the most out of multicore and networked machines, while its novel type system ena...</description></item><item><title>项目跳票成常态，组织基因难逃干系</title><link>https://tonybai.com/2012/08/15/bouncing-check-and-organization-gene/</link><pubDate>Wed, 15 Aug 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/08/15/bouncing-check-and-organization-gene/</guid><description>上周得知今年一个重点项目跳票了！项目计划正在重新修订中，原计划今年10月末完成的项目很可能因此推迟到明年上旬了。 工作这么多年，印象中除了一些短期小项目外，50人月以上的项目就少有未跳票的，无论是我带的项目还是其他负责人带的项目，莫不如此。无论是产品负责人，还是项目负责人，高质量按期交付都是第一目标。但残酷的现实真切地摆在我们面前。问题到底出在哪里呢？ 项目成功的原因都是相似的，但项目跳票的原因却...</description></item><item><title>开始学Go</title><link>https://tonybai.com/2012/08/14/getting-going-with-go/</link><pubDate>Tue, 14 Aug 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/08/14/getting-going-with-go/</guid><description>本文翻译自Dr.Dobb&amp;#39;s的&amp;#34;Getting Going with Go&amp;#34;。 **本文是有关Google新的系统原生语言的五周教程的第一部分，这里将先向大家展示如何建立Go语言开发环境以及构建程序，然后带领大家浏览 一些代码范例来着重了解一下这门语言的一些有趣的特性。** _这个教程系列将连续刊登五周。在今天这一部分中，Go语言专家Mark Summerfield将讲解如何建立Go语言开发环境，...</description></item><item><title>为什么不用用Go？</title><link>https://tonybai.com/2012/08/08/why-not-go/</link><pubDate>Wed, 08 Aug 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/08/08/why-not-go/</guid><description>本文翻译自 Dr. Dobb&amp;#39;s主编Andrew Binstock的文章&amp;#34;Why Not Go?&amp;#34;。 Go是一种对系统原生语言的重要反思，它对C语言做了重大的改善，同时还保持了语言的极简性。 今年早些时候，我们写了一篇有关新兴系统原生(native)语言的文章。这些语言包括D、Go、Rust以及Vala。当时我们承诺将会对这些语言进行 细致的探索。从本周开始，我们将开启一系列对来自Google的新...</description></item><item><title>《改善技术布道效果的几个实践》勘误</title><link>https://tonybai.com/2012/08/07/errata-of-some-practice-to-improve-tech-sermon/</link><pubDate>Tue, 07 Aug 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/08/07/errata-of-some-practice-to-improve-tech-sermon/</guid><description>如发现本站页面被黑，比如：挂载广告、挖矿等恶意代码，请朋友们及时联系我。十分感谢！ 商务合作请联系bigwhite.cn AT aliyun.com 欢迎使用邮件订阅我的博客 输入邮箱订阅本站，只要有新文章发布，就会第一时间发送邮件通知你哦！ 名字： 邮箱: 这里是 Tony Bai的个人Blog，欢迎访问、订阅和留言！ 订阅Feed请点击上面图片。 如果您觉得这里的文章对您有帮助，请扫描上方二维...</description></item><item><title>知识管理推广难的几点原因</title><link>https://tonybai.com/2012/08/06/reasons-for-promote-km-difficult/</link><pubDate>Mon, 06 Aug 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/08/06/reasons-for-promote-km-difficult/</guid><description>去年在产品线内部尝试了一些知识管理的实践：建立了知识库，初步在产品线内部养成了知识整理和总结的习惯，建立了工作流程与知识库之间的粘性，取得了一定效果。今年年初在事业部内部做了有关知识库实践方面的分享，大家也都认识到这几年我们在知识积累方面上的不足，也都很赞同知识管理的重要性与必要性。会后领导决定建立事业部级知识库，并安排专人负责知识库的维护与推广。 于是乎负责知识库搭建的那个部门申请服务器、安装和...</description></item><item><title>做正确的事要趁早</title><link>https://tonybai.com/2012/08/02/do-right-things-early/</link><pubDate>Thu, 02 Aug 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/08/02/do-right-things-early/</guid><description>最近闲暇时间在策划实施两件事儿：一是产品的自动化回归测试；二是尝试在项目中使用一些静态代码语义分析工具。我觉得这两件事是应该做的正确的事，对提升产品质量，提前发现产品中潜在的缺陷都大有裨益。但在做的过程中才感觉到：现在做有些晚，正确的事要趁早做。 去年自动化测试组发布了自动化测试框架的第一个版本，我们的产品参加了试点。但经过自动化测试组大半年的投入，效果十分有限，根本没有达到我的预期。最主 要的问...</description></item><item><title>绥中电厂海滩之旅</title><link>https://tonybai.com/2012/07/30/a-trip-to-suizhong-beach/</link><pubDate>Mon, 30 Jul 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/07/30/a-trip-to-suizhong-beach/</guid><description>上周末，部门组织了一年一度的集体出游活动，这次的目的地是位于葫芦岛市附近的绥中电厂海滩。 周六(北京时间7月28号)，恰逢伦敦奥运会举行开幕式，很遗憾不能完整的看完现场直播。在看完憨豆先生的精彩表演后，我就从家里出发了。本来这次旅游我是想带LP和果果一起去的，之前用一周时间已经做好了所有准备（吃的、穿的、玩的、用的），但人算不如天算，果果居然感冒了，早上起来一量体温：38度。唉，果果与大海第一次邂...</description></item><item><title>buildc 0.1.9版本发布</title><link>https://tonybai.com/2012/07/19/buildc-0-1-9-release/</link><pubDate>Thu, 19 Jul 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/07/19/buildc-0-1-9-release/</guid><description>随着buildc使用的深入，越来越多的新需求暴露了出来。为了满足这些需求，我们组的小兄弟又对buildc进行了一些改造，这些变化如下： 1、支持将多个子工程打包到一个安装包中 最初buildc的设计思想是为每个子工程单独制作安装包，这样具有很强的灵活性。但在对现有N个工程进行构建脚本改造的过程中发现，有些工程间存在严重 依赖，比如工程A是一个业务级公共库工程，工程B和工程C都依赖工程A构建后生成的...</description></item><item><title>读《How Google Tests Software》</title><link>https://tonybai.com/2012/07/10/read-how-google-tests-software/</link><pubDate>Tue, 10 Jul 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/07/10/read-how-google-tests-software/</guid><description>一直对Google这个牛X公司的内部开发过程很是感兴趣，毕竟像Google Search Engine、Google云计算平台这些伟大产品都是在这个开发过程下缔造出来的。但也许是Google保密工作做的很好，或许人家不是刻意保密，只是 因为工作太忙或人员太低调，没空派人出来宣讲罢了。外界对Google内部的开发流程知之甚少；知道一些，诸如20%项目，也只是皮毛。 终于有一天，Google的三位工程...</description></item><item><title>buildc 0.1.8版本发布</title><link>https://tonybai.com/2012/07/02/buildc-0-1-8-release/</link><pubDate>Mon, 02 Jul 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/07/02/buildc-0-1-8-release/</guid><description>buildc这个小工具逐渐在项目组内部扩大了使用范围，还有一名专门的同事负责为每个项目制作安装包工程，这样也可以在使用中发现buildc的问题。 本次buildc 0.1.8的相关修正以及新增的feature就是我的这位年轻同事一手操刀完成的，他也是一个python新手，同样也是边翻手册边进行编码的。这次改动主要集中在templates目录下的几个文件，这里的文件多为因工程的不同而异的。 这次bu...</description></item><item><title>1000公里驾车感受</title><link>https://tonybai.com/2012/06/21/some-feeling-after-driving-for-1000km/</link><pubDate>Thu, 21 Jun 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/06/21/some-feeling-after-driving-for-1000km/</guid><description>不知不觉我的车的总里程表上的数字已经达到了1029公里了，我的&amp;#34;驾龄&amp;#34;也马上要到一个月了^\_^，这里谈谈驾车感受，备忘一下。 1、总体感受：累！ 车是不开不知道，一开真叫累啊。特别是在一二线城市开车上下班，短程的还好，路程稍长的，像我这样上下班来回50公里，那真是累啊。 累的原因之一首先就是堵车。像东北这地，每年冬天是无法修路的，一到春夏，各路工程纷纷上马 – &amp;#34;要修一起修&amp;#34;，这样一来，痛苦的就...</description></item><item><title>暴雨·冰雹·涉水·夜路·堵车·行车记</title><link>https://tonybai.com/2012/06/04/drive-in-rainstorm/</link><pubDate>Mon, 04 Jun 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/06/04/drive-in-rainstorm/</guid><description>上周六是六一儿童节过后的第一个周末，由于六一是工作日，没能带果果出去玩，因此周六我和LP一起带果果到太原街购物游玩。 早就听到天气预报说沈城会有雷阵雨，不过早上的天气还是蛮好的，不是很热，于是乎也没有太在意，只是带了简单的雨具。 也许是受到天气预报的影响，商业中心区居然也能很顺利找到停车位，一切安顿好后，就带着果果直奔商场。逛街顺序与往常没啥两样，先购 物，再带果果到商场楼上的儿童娱乐城玩。下午1...</description></item><item><title>新速腾提车与第一次上路</title><link>https://tonybai.com/2012/05/25/new-sagitar-and-my-first-driving-experience/</link><pubDate>Fri, 25 May 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/05/25/new-sagitar-and-my-first-driving-experience/</guid><description>一直以来我都不是特别喜欢开车，因为平时喜欢思考，每天坐在公司的班车上可以有大把的思考时间，另外在高速行驶的车上，感觉思维也变得更加&amp;#34;敏捷&amp;#34;，但如果自己开车，这一切就不复存在了，因为你要集中精力应付马路上那绵长的&amp;#34;车水马龙&amp;#34;，还要躲避&amp;#34;玩命&amp;#34;穿马路的行人以及像我这样的新手开的新车^\_^。 不过有了孩子后，没有自己的车实在算不上方便，特别是在工作日如果孩子打个预防针，或平时出去玩，打车是件很费力的事...</description></item><item><title>勇于面对</title><link>https://tonybai.com/2012/05/21/to-face-it/</link><pubDate>Mon, 21 May 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/05/21/to-face-it/</guid><description>刚刚过去的这一周搞得我十分疲惫，起因是岳母生病了。 果果自出生以来一直是岳母照顾，这个五一岳母将果果带回老家待了一周，也许是太过操劳导致旧病复发(腰椎肩盘轻微突出)，无法坚持照顾果果了。可这段时间 又恰逢我和我LP都很忙碌，但无奈身边没有亲戚，只能我请假待果果(LP那里集团领导检查，实在无法脱身)，还要照顾生病的岳母。本以为病两三天就能好 转，但观察两天后仍不见好转，于是我只能将母亲大人请来照顾果...</description></item><item><title>使用ssh通过http代理访问bitbucket</title><link>https://tonybai.com/2012/05/09/ssh-access-bitbucket-via-http-proxy/</link><pubDate>Wed, 09 May 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/05/09/ssh-access-bitbucket-via-http-proxy/</guid><description>在很多公司内部，要想访问外部互联网都需要设置代理，我所在公司也是这样，有些时候这种限制真的可以让人骂娘。不过经过几年与代理的&amp;#34;斗争&amp;#34;后，大部分需 要访问外部网络的软件(比如subversion、apt-get、git、wgetc、filezilla等)经过设置后还都可以正常工作。不过前些日 子在折腾bitbucket上的源码库时又遇到了代理问题：无论通过https方式还是ssh方式都无法clone...</description></item><item><title>翻译《七周七语言》的那些事儿</title><link>https://tonybai.com/2012/05/08/translate-seven-languages-in-seven-weeks/</link><pubDate>Tue, 08 May 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/05/08/translate-seven-languages-in-seven-weeks/</guid><description>今天在互动出版网看到《七周七语言：理解多种编程范型》一书已经开卖了。看到自己参与翻译的第一本书出版了，心中还是很愉悦的，因为自己的辛苦付出终于有了结果。 **一、缘起** 能够参与到这本书的翻译完全是机缘巧合。记得2011年初我启动了一个《Programming in Haskell》的公共翻译项目，可是由于欠缺版权的考虑，中途不得不终止了该书的翻译。当时经dreamhead介绍联系到图灵的刘江总...</description></item><item><title>也谈技术布道 – 影响因素及有效实践</title><link>https://tonybai.com/2012/04/24/influencing-factors-and-effective-practice-about-driving-technical-changes/</link><pubDate>Tue, 24 Apr 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/04/24/influencing-factors-and-effective-practice-about-driving-technical-changes/</guid><description>昨天中午收到图灵出版的《布道之道 – 引领团队拥抱技术创新》一书，晚上就迫不及待地翻看开来。这是我读过的第一本有关推动组织内部技术变更/创新实践方面的书，感觉书作者对受众的分类很是准 确到位，很多布道技巧也十分值得借鉴。但就我个人多年来的体验来看，组织内部技术布道的结果，不仅仅与受众的类型有关，还与布道者自身的资历、所担任的角 色、组织内部的文化和环境、布道路线以及布道时机和对象的选择有一定关系。...</description></item><item><title>buildc 0.1.7版本发布</title><link>https://tonybai.com/2012/04/19/buildc-0-1-7-release/</link><pubDate>Thu, 19 Apr 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/04/19/buildc-0-1-7-release/</guid><description>最近针对buildc又有了一些新想法，于是今天上午又对buildc进行了多处修改，并相继发布了0.1.6版本和0.1.7版本。 \* 对buildc cache upgrade的实现进行了修改。 在执行全量更新本地cache前，先对本地cache的情况进行一些检查，并判断是否与当前.buildc.rc中的配置相符。如果两者是一致的，那么只进行update操作；否则则执行真正的upgrade(rem...</description></item><item><title>一场关于“何时发布版本”的论战</title><link>https://tonybai.com/2012/04/17/a-discussion-about-when-to-release/</link><pubDate>Tue, 17 Apr 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/04/17/a-discussion-about-when-to-release/</guid><description>气氛太平静，投石起波澜。 昨天下午无意中在内部发起了一场关于&amp;#34;何时发布版本&amp;#34;的论战。 论战的背景是这样的：部门内部有这样的一个项目A，它的目标是开发出可被其他项目或产品复用的组件(这里就暂称之为组件吧，我们内部称这类组件为可复用资产)。这个项目已经开发了大半年了，目前处于收尾阶段，绝大部分开发工作已经完成。测试(包括压力测试等)已经测试过至少一轮了；我们的产品线近期准备复用项目A成产出的这些组件，...</description></item><item><title>buildc 0.1.5版本发布</title><link>https://tonybai.com/2012/04/13/buildc-0-1-5-release/</link><pubDate>Fri, 13 Apr 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/04/13/buildc-0-1-5-release/</guid><description>这两天对buildc的改动比较频繁，今天又修正了一些问题，也增加了一些小功能。主要包括这么几点： 1、在Make.rules.in中增加了STATIC\_LIBS和DYNAMIC\_LIBS 项目源代码和项目中单元测试代码使用同一个Make.rules，也此编译时也就共享同一个LIBS变量。对于静态共享库还好说，但对于动态共享库，诸如Oracle的instantclient库，单元测试代码中即使没...</description></item><item><title>buildc 0.1.4版本发布</title><link>https://tonybai.com/2012/04/12/buildc-0-1-4-release/</link><pubDate>Thu, 12 Apr 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/04/12/buildc-0-1-4-release/</guid><description>年后buildc开始逐渐在产品线的项目里应用了，随之而来的是大家反馈的各种意见和bug。尤其是bug，我都会很认真地应对，也会及时发布相应的版本修复这些bug。buildc 0.1.4版本就是一个bugfix版本，其修复的bug源于今天上午的一次持续集成的失败。 上午收到Jenkins发送的一个&amp;#34;build failed&amp;#34;的mail，一个安装包项目的CI job执行失败了，于是到Jenkins w...</description></item><item><title>关于编译阶段符号多重定义的问题</title><link>https://tonybai.com/2012/04/11/multiple-definitions-of-the-compiling-phase/</link><pubDate>Wed, 11 Apr 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/04/11/multiple-definitions-of-the-compiling-phase/</guid><description>印象中关于编译以及链接的问题早已是老生常谈了。但今天又遇到了一个这样的问题，这里还总想提及一下下^\_^。 这次要说的问题依旧发生在使用lcut进行单元测试的过程中。一位同事在编译使用了mock函数的测试用例代码时出现了&amp;#34;multiple definition of &amp;#39;xxx&amp;#39;“的错误。这里简单模拟其场景如下： /\* testall.c \*/ /\* mock lib function \*/...</description></item><item><title>lcut 0.3.0版本发布</title><link>https://tonybai.com/2012/04/10/lcut-0-3-0-release/</link><pubDate>Tue, 10 Apr 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/04/10/lcut-0-3-0-release/</guid><description>lcut单元测试框架在我的项目中应用已经有一段时间了，项目组的同事对lcut的使用也是越来越熟悉，这不今天一位同事还提出了一个新需求，需求大致是这样的。 在实际项目中，经常遇到这类情况： int bar(…) { int ret; ret = foo(…); /\* assert ret \*/ … ret = foo(…); /\* assert ret \*/ … ret = foo(…); ...</description></item><item><title>如何加入Linux内核开发社区(7)</title><link>https://tonybai.com/2012/04/09/how-to-participate-linux-community-section-7/</link><pubDate>Mon, 09 Apr 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/04/09/how-to-participate-linux-community-section-7/</guid><description>本文翻译自The Linux Foundation的《How to Participate in the Linux Community》(基于2012-03-21最新版本)，原作者为Jonathan Corbet(corbet@lwn.net)。 下面是该文章第七章、第八章以及第九章节的中译文。 **7、高级主题** 但愿此时此刻，你已经理解了内核开发过程是如何进行的。但仍然还有很多东西要学习！...</description></item><item><title>如何加入Linux内核开发社区(5)</title><link>https://tonybai.com/2012/04/05/how-to-participate-linux-community-section-5/</link><pubDate>Thu, 05 Apr 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/04/05/how-to-participate-linux-community-section-5/</guid><description>本文翻译自The Linux Foundation的《How to Participate in the Linux Community》(基于2012-03-21最新版本)，原作者为Jonathan Corbet(corbet@lwn.net)。 下面是该文章第五章节的中译文。 **5、发布补丁** 迟早有一天你的工作将提交到开发社区进行评审，并最终合入内核主线。不出所料，内核开发社区在发布补丁...</description></item><item><title>如何加入Linux内核开发社区(6)</title><link>https://tonybai.com/2012/04/05/how-to-participate-linux-community-section-6/</link><pubDate>Thu, 05 Apr 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/04/05/how-to-participate-linux-community-section-6/</guid><description>本文翻译自The Linux Foundation的《How to Participate in the Linux Community》(基于2012-03-21最新版本)，原作者为Jonathan Corbet(corbet@lwn.net)。 下面是该文章第六章节的中译文。 **6、将补丁工作进行到底** 此时此刻，你已经遵循了这里到目前为止给出的所有指导原则，并且由于你自己的工程技能，你已...</description></item><item><title>如何加入Linux内核开发社区(4)</title><link>https://tonybai.com/2012/03/31/how-to-participate-linux-community-section-4/</link><pubDate>Sat, 31 Mar 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/03/31/how-to-participate-linux-community-section-4/</guid><description>本文翻译自The Linux Foundation的《How to Participate in the Linux Community》(基于2012-03-21最新版本)，原作者为Jonathan Corbet(corbet@lwn.net)。 下面是该文章第四章节的中译文。 **4、正确地编写代码** 关于那个可靠的面向社区的设计过程我们已经说的够多了，任何内核开发项目的证据都是最终的代码。...</description></item><item><title>如何加入Linux内核开发社区(3)</title><link>https://tonybai.com/2012/03/29/how-to-participate-linux-community-section-3/</link><pubDate>Thu, 29 Mar 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/03/29/how-to-participate-linux-community-section-3/</guid><description>本文翻译自The Linux Foundation的《How to Participate in the Linux Community》(基于2012-03-21最新版本)，原作者为Jonathan Corbet(corbet@lwn.net)。 下面是该文章第三章节的中译文。 **3、早期规划** 当考虑一个Linux内核开发项目时，人们可能很想尽快投入并开始编码。但和任何重要的项目一样，推动...</description></item><item><title>如何加入Linux内核开发社区(2)</title><link>https://tonybai.com/2012/03/28/how-to-participate-linux-community-section-2/</link><pubDate>Wed, 28 Mar 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/03/28/how-to-participate-linux-community-section-2/</guid><description>本文翻译自The Linux Foundation的《How to Participate in the Linux Community》(基于2012-03-21最新版本)，原作者为Jonathan Corbet(corbet@lwn.net)。下面是该文章第二章节的中译文。 **2、内核开发过程是如何进行的** 在20世纪90年代初，当时的Linux内核开发是一件非常松散的事情，涉及的用户和开...</description></item><item><title>如何加入Linux内核开发社区(1)</title><link>https://tonybai.com/2012/03/27/how-to-participate-linux-community-section-1/</link><pubDate>Tue, 27 Mar 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/03/27/how-to-participate-linux-community-section-1/</guid><description>本文翻译自The Linux Foundation的《How to Participate in the Linux Community》(基于2012-03-21最新版本)，原作者为Jonathan Corbet(corbet@lwn.net)。下面是该文章第一章节的中译文。 **1、内核开发过程指南** 本文旨在帮助那些在参与开发社区(community)工作过程中遭遇些许挫折的开发人员(以及...</description></item><item><title>也谈Linux Kernel Hacking – Kconfig与Kbuild</title><link>https://tonybai.com/2012/03/18/linux-kernel-hacking-series-kconfig-and-kbuild/</link><pubDate>Sun, 18 Mar 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/03/18/linux-kernel-hacking-series-kconfig-and-kbuild/</guid><description>**_挖掘简单现象背后的复杂本质。_**– Tony Bai^\_^ 上文讲到Linux Kernel的配置和编译十分简单，甚至简单到可以与一个用户层应用相媲美。这一切都是因为Linux Kernel实现了一套易于使用、变更和后期维护的配置和编译体系。要知道最新Linux Kernel版本的代码量可是千万级别的，并且模块众多，其背后的配置和编译体系一定不那么简单，这次我们就来尝试Hack一下这套体...</description></item><item><title>也谈Linux Kernel Hacking – 内核配置、编译与安装</title><link>https://tonybai.com/2012/03/15/linux-kernel-hacking-series-kernel-config-compile-and-install/</link><pubDate>Thu, 15 Mar 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/03/15/linux-kernel-hacking-series-kernel-config-compile-and-install/</guid><description>_**Linux Kernel之于C程序员，就好比世界之巅珠穆朗玛之于专业登山客。**_ — Tony Bai^\_^ 作为到目前为止最为成功的开源项目，Linux Kernel总是散发着无穷的魅力，就好比那珠穆朗玛，让人魂牵梦绕，心潮澎湃并总是想尝试征服。 记得2006年初我曾花了些时间研究Linux Kernel，但后来迷失在了Linux Kernel引导阶段，无法自拔，最终选择了&amp;#34;知难而退&amp;#34;...</description></item><item><title>C语言编码风格和标准</title><link>https://tonybai.com/2012/03/07/the-chinese-translation-of-recommended-c-style-and-coding-standards/</link><pubDate>Wed, 07 Mar 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/03/07/the-chinese-translation-of-recommended-c-style-and-coding-standards/</guid><description>近期在为产品线的知识库编写一些指南类的文档，其中有一项就是对现有的C语言编码规范进行一些修订。为了&amp;#34;有米下锅&amp;#34;，我还特意在网上找了一些相关资料。关于C语言编码风格和标准的资料大多都成稿于上个世纪90年代，也就是在C90发布之后的若干年里；在C99发布后，部分资料根据最新的规范做了修订，但也有些资料认为C99对整体风格影响不大，也就保持了原样。 在这些资料中，我重点关注了一下这份文档《Recomme...</description></item><item><title>Adapter模式的C实现</title><link>https://tonybai.com/2012/03/05/implement-adapter-pattern-in-c/</link><pubDate>Mon, 05 Mar 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/03/05/implement-adapter-pattern-in-c/</guid><description>Adapter(适配器)模式是《Design Pattern》一书中结构类模式集中的第一个模式，也是一个真正被我的同事在产品代码中应用的模式。 Adapter模式也是一个相对容易理解的模式，多数书籍和网络资料在描述这个模式时都使用了一个与电源适配器有关的例子，说不定Adapter模式还真的是源于对电源适配器的再思考和挖掘呢。 我们在重构遗留代码时引入了Adapter模式。遗留系统中存在的问题大致是...</description></item><item><title>Blog新起点 – 从BlogBus搬家到WordPress</title><link>https://tonybai.com/2012/02/29/a-new-departure-of-my-blog-move-from-blogbus-to-wordpress/</link><pubDate>Wed, 29 Feb 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/02/29/a-new-departure-of-my-blog-move-from-blogbus-to-wordpress/</guid><description>今天着实是一个值得纪念的日子，因为我终于完成了从BlogBus到WordPress的搬家工作，从此我的Blog将站在一个新的起点上。 自从2004年开博以来，我坚持了七年多，至今仍孜孜不倦，写博客已经成为我的生活中不可或缺的一部分，即使在微博等大行其道的今天，我亦然如此。作出搬家的决定显然是十分痛苦的，因为要抛弃已经建立起来的使用习惯以及Blog人气(包括搜索引擎索引、外部引用的等)是十分艰难的。...</description></item><item><title>使用Jenkins实现多平台并行集成</title><link>https://tonybai.com/2012/02/15/intergating-on-multiple-platforms-simultaneously-using-jenkins/</link><pubDate>Wed, 15 Feb 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/02/15/intergating-on-multiple-platforms-simultaneously-using-jenkins/</guid><description>我们的后端C应用都是支持跨平台的，至少目前在Linux和Solaris上运行是没有问题的，这样一来我们在配置持续集成环境时就要考虑如何实现在代码Commit后触发多平台并行(同时)集成这个需求。 之前使用Buildbot时是通过为一个Scheduler配置多个Builder满足这个需求的。但现在要换成Jenkins，我们如何来实现呢？昨天在折腾Jenkins时我把问题想简单了，今天细致查看了一下B...</description></item><item><title>折腾Jenkins</title><link>https://tonybai.com/2012/02/14/install-and-configure-jenkins/</link><pubDate>Tue, 14 Feb 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/02/14/install-and-configure-jenkins/</guid><description>Buildbot是产品线C应用项目中采用的唯一持续集成工具，一直以来用得还不错。但前些日子部门负责过程改善的同事找到我，说今年部门计划统一各个项目组所使用的Continuous Integration工具，Buildbot有些小众，没有入大家的法眼，部门期望使用的是Jenkins(即原来的Hudson)。既然组织有统一规划，那我自然积极支持。但首先要做的就是评估Jenkins是否能满足我们的需求，...</description></item><item><title>为buildc添加安装包制作相关功能</title><link>https://tonybai.com/2012/02/10/add-packing-feature-to-buildc/</link><pubDate>Fri, 10 Feb 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/02/10/add-packing-feature-to-buildc/</guid><description>在&amp;#34;也谈C应用安装包制作与部署&amp;#34;一文中，我提到了为每一个源码工程建立单独的安装包制作工程(setup project)的想法，这两天我就一直在折腾这件事儿^\_^。 最初我并没有想去搞一个通用的安装包制作工具，只是为一个现有的源码工程建立了一个试验性质的安装包工程，并实现了其构建脚本(build.py)。但之后考虑到各个项目都要建立一个对应的安装包工程，安装包工程的构建脚本build.py势必会沦...</description></item><item><title>为buildc添加setup脚本</title><link>https://tonybai.com/2012/02/07/add-setup-script-for-buildc/</link><pubDate>Tue, 07 Feb 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/02/07/add-setup-script-for-buildc/</guid><description>buildc在发布0.1.0版时并没有做好安装脚本，当时的建议是直接下载0.1.0的源码包或svn export/checkout源码包，并手工将buildc目录位置加入到用户的PATH环境变量中。近期buildc计划正式投入到项目中使用，为了方便大家安装以及以后的统一升级维护，我花了些时间给buildc加上了setup脚本。 Python有标准的程序分发方案，不过我对这些了解不多。buildc本...</description></item><item><title>也谈C应用安装包制作与部署</title><link>https://tonybai.com/2012/02/01/also-talk-about-c-app-install-package-making-and-deploying/</link><pubDate>Wed, 01 Feb 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/02/01/also-talk-about-c-app-install-package-making-and-deploying/</guid><description>虽然部门一直在做C应用，但这么多年来，在C应用的安装包制作以及部署方面做得还是很初级，可以说还没有达到规范的程度。各个产品线的C应用安装包种类多样，水平参差不齐：有些产品的源码包即是安装包，把源码包拿到生产环境下编译后使用；有的项目则将编译好的目标文件(.o)以及第三方库放在安装包中，在生产环境下重新链接生成可执行文件；有的组则稍微专业一些，安装包中放的是编译好的可执行文件，但在目标主机上安装和执...</description></item><item><title>谋划2012</title><link>https://tonybai.com/2012/01/29/plan-and-design-2012/</link><pubDate>Sun, 29 Jan 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/01/29/plan-and-design-2012/</guid><description>对于我这个上班族来说，这假期真的不能太长，否则就适得其反了：不但不会得到很好的休息，反而感觉更累了。也许很多朋友和我有同样的感受^\_^。这不，这个春节在家待得就比较&amp;#34;闹心&amp;#34;，特别是后几天，想上班的冲动那叫一个此起彼伏啊，终于今天如愿了^\_^。 今天是壬辰龙年春节后的第一个工作日。如以往一样，办公室里比较冷清，很多同事还尚未结束休假。这可真是做整年谋划的黄金时间啊，我是这么想的，也是这么做的。 ...</description></item><item><title>也谈C语言应用构建</title><link>https://tonybai.com/2012/01/17/also-talk-about-building-c-app/</link><pubDate>Tue, 17 Jan 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/01/17/also-talk-about-building-c-app/</guid><description>构建是软件开发过程中最常见的活动之一，也是很容易被忽视的环节。规范以及高效的构建对软件开发过程而言是大有裨益的。C语言并非一门年轻的语言，其历史已甚为悠久了(相对于还年轻的IT领域^\_^)。从C语言诞生以来，市面上存在的C语言应用何止千千万万。这些C应用的源码组织形式种类万千，从最简单的单个源文件，到复杂的诸如Apache httpd server这样庞大的Project。不过无论这些C应用的源...</description></item><item><title>2011·工作中的成长</title><link>https://tonybai.com/2012/01/12/my-grow-up-in-2011/</link><pubDate>Thu, 12 Jan 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/01/12/my-grow-up-in-2011/</guid><description>每至年关，回首一年工作中的成长，便有一种充实和幸福的感觉。 2011年我在工作中的成长可概括为如下几点： 1、建立并围绕原则为中心开展工作 现在想来，以前的工作有些盲从，心中没有原则，自然也就没有主线，也许这与当初的职位角色有关。2011年职位提升了，思维方式也有所了转变。我花了更多的时间对当前的工作进行考量，而且考量的过程不是过去那种仅仅从项目组或产品线的角度，而是尽量上升到组织的角度，并针对当...</description></item><item><title>由劝退一名员工所想到的</title><link>https://tonybai.com/2012/01/08/thoughts-from-persuading-somebody-to-quit/</link><pubDate>Sun, 08 Jan 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/01/08/thoughts-from-persuading-somebody-to-quit/</guid><description>这周五我做了一件&amp;#34;恶事&amp;#34; – 劝退了一名员工。这样的事情在部门成立10年的历史中发生的次数都是屈指可数的，但却真实地让我给碰到了。 我以前只是有招人的经验，但从未做过&amp;#34;开人&amp;#34;的事情，这是第一次，心里总有些不忍。原计划由这名同事的直接Leader与他谈这件事情，但这名女leader更是抹不开面子，索性我就直接上阵了。过程还算顺利，这名同事表面上也没有太多意见，但我心里清楚：他肯定很郁闷，这个周末估计...</description></item><item><title>关于组织内部建立良性提议反馈机制的一些考量</title><link>https://tonybai.com/2012/01/06/thoughts-on-establishing-a-benign-feedback-mechanisms-inside-the-organization/</link><pubDate>Fri, 06 Jan 2012 00:00:00 +0800</pubDate><guid>https://tonybai.com/2012/01/06/thoughts-on-establishing-a-benign-feedback-mechanisms-inside-the-organization/</guid><description>近期完成了与组员的年终绩效面谈，收集上来一些意见和建议，其中有一些涉及到部门对大家反馈的意见和建议处理不妥的情况，对此我也做了认真的考量，于是就有了这篇短文。 组织的基本单元是人(即组员)，组织的运行依靠的也是组员，组员对组织的运行情况最有发言权，组织内部存在的问题他们会第一时间感知到，也许他们也是第一个尝试解决问题并作出改进的人，因此他们的意见和建议是最最宝贵的，作为一个组织的领导者首先应该认识...</description></item><item><title>2011·读过的书</title><link>https://tonybai.com/2011/12/22/book-list-i-have-read-in-2011/</link><pubDate>Thu, 22 Dec 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/12/22/book-list-i-have-read-in-2011/</guid><description>2011年我的确读了不少书，掐指算来纸版和电子版加在一起近50本，其中以技术类居多，但其他方面的也有一些。这里列出来做个简单回顾。 一、技术类 · 《你必须知道的495个C语言问题》 早在这本书出版前，其译者已经在网上完成了C FAQs的翻译(在这里)。这本书是基于最新C FAQs做了重新整理(包含C99)。虽说是最新，但因C语言近几年来变化很小，内容与之前译者在网上公开的那个免费版本相差不多。这...</description></item><item><title>2011小结</title><link>https://tonybai.com/2011/12/21/my-year-end-summary-of-2011/</link><pubDate>Wed, 21 Dec 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/12/21/my-year-end-summary-of-2011/</guid><description>2011年眼看就要接近尾声了，这里也对自己在2011年的&amp;#34;所作所为&amp;#34;做个小结^\_^。 这一年来工作之外的我过得还是比较充实的，从下面的数字也可以看出： \- 写了81篇博文 \- 开源了2个工具(CBehave和buildc) \- 合译了一本书（&amp;#34;Seven Languages in Seven Weeks&amp;#34;，不过尚未出版） \- 读了近50本书（通过豆瓣读书统计） \- 新学了一门语言 – ...</description></item><item><title>C语言项目构建管理辅助工具 – buildc</title><link>https://tonybai.com/2011/12/08/buildc-a-building-assistant-tool-for-c-app/</link><pubDate>Thu, 08 Dec 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/12/08/buildc-a-building-assistant-tool-for-c-app/</guid><description>这几年我一直从事C语言项目的开发。这些项目的规模都不算小，少则十几万代码，多则几十万行代码，至少也都算得上是中型项目吧。项目构建工具使用的是传统的Make工具，构建脚本都是自行编写的，构建时直接在顶层目录下敲入make即可。 这种传统的构建方式其实是很耗时费力的。比如执行make之前你需要根据项目代码的实际路径重新设定一些环境变量或修改Makefile中的某些标识路径的变量；你还要将项目依赖的各种...</description></item><item><title>利用缓冲区溢出漏洞Hack应用</title><link>https://tonybai.com/2011/12/01/hack-app-by-buffer-overflow-leak/</link><pubDate>Thu, 01 Dec 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/12/01/hack-app-by-buffer-overflow-leak/</guid><description>我们在平时编码过程中很少考虑代码的安全性(security)，与正确性、高性能和可移植性相比，安全性似乎总被忽略。昨天从安全性角度泛泛地Review了一下现有的代码，发现了不少具有安全隐患的地方。我们的程序员的确缺乏系统地有关安全编码方面的训练和实践，包括我在内，在安全编码方面也都是初级选手，脑子中对安全性编码缺乏系统的理解。 市面上讲解编码安全性方面的书籍也不是很多，在C编码安全性方面，CERT...</description></item><item><title>知识管理那些事儿</title><link>https://tonybai.com/2011/11/23/those-things-about-knowledge-management/</link><pubDate>Wed, 23 Nov 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/11/23/those-things-about-knowledge-management/</guid><description>我不是知识管理领域的专家，但我认为知识的积累和管理对一个期望长久稳定发展的组织来说很重要。今天我这个&amp;#34;门外人&amp;#34;就来说几句&amp;#34;门外话&amp;#34;。 我所在的部门已经成立10余年了，但说实话部门在知识积累和管理方面做的比较一般。例如，没有统一的知识积累和管理平台，知识分享多靠mail列表，或将知识存储在文件中放入Microsoft Visual SourceSafe，若干日子后，再无人能找到之前的知识(VSS绝对...</description></item><item><title>也谈C语言的restrict类型修饰符</title><link>https://tonybai.com/2011/11/18/also-talk-about-restrict-type-qualifier-in-c/</link><pubDate>Fri, 18 Nov 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/11/18/also-talk-about-restrict-type-qualifier-in-c/</guid><description>restrict关键字是C99标准中新引入的一个类型修饰符(type qualifier)。如果你看过GNU C库的源码或是其manual，你就会发现restrict修饰符被广泛地应用在GNU C库中。restrict关键字到底是用来做什么的呢？估计很多对C语言细节研究不够的程序员都无法给出答案，我个人也只是停留在&amp;#34;知道&amp;#34;这一关键字的层次上，于是乎今天我又对着C99规范钻研了一番，略有收获，这里也...</description></item><item><title>State模式的C实现</title><link>https://tonybai.com/2011/11/07/implement-state-pattern-in-c/</link><pubDate>Mon, 07 Nov 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/11/07/implement-state-pattern-in-c/</guid><description>上个周末花了些时间将《Pro Git》（Git高手进阶之必读书籍，严重推荐^\_^）快速地浏览了一遍，在感叹于Git强大的同时，也见识到了Git的复杂。可以肯定的是Git学习曲线远没有学习Subversion那样平坦。比如，Subversion工作目录下的文件只有三种状态：Untracked、Modified和Committed(即Unmodified)；而以Git本地工作目录下则有四种状态：Un...</description></item><item><title>Transaction模式的C实现</title><link>https://tonybai.com/2011/11/04/implement-transaction-pattern-in-c/</link><pubDate>Fri, 04 Nov 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/11/04/implement-transaction-pattern-in-c/</guid><description>提到Transaction模式(即事务模式)，很多人会感到陌生。这并不奇怪，在大名鼎鼎的GoF的《Design Pattern》一书中，它仅仅是Command模式的别名罢了。不过在实际的开发中，我们却经常会遇到可以应用事务模式的场景。本文可以理解成Command模式在事务领域的应用，但这样说有些麻烦，我们莫不如直接称之为Transaction模式。 与前几篇设计模式C实现系列文章一样，这篇文章也源...</description></item><item><title>提高效率不是口号</title><link>https://tonybai.com/2011/10/31/improving-efficiency-should-not-only-be-a-slogan/</link><pubDate>Mon, 31 Oct 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/10/31/improving-efficiency-should-not-only-be-a-slogan/</guid><description>当前任何一个组织 — 无论是私企，还是国企，无论是政府还是民间组织，无论是在国内还是在国外 — 都在强调提高效率。但&amp;#34;提高效率&amp;#34;不简单是一句口号，还需要脚踏实地的真正去做。 说到&amp;#34;提高效率&amp;#34;，大家首先就会想到工作的行为主体-人！促进人员能力的提升是提升个体工作效率的一个很好的办法。在软件开发领域也有一个公认的事实，那就是一个顶尖程序员的效率可以十倍甚至百倍于一个普通程序员。为此，很多组织都投入巨资...</description></item><item><title>Chain of Responsibility模式的C实现</title><link>https://tonybai.com/2011/10/25/implement-chain-of-responsibility-pattern-in-c/</link><pubDate>Tue, 25 Oct 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/10/25/implement-chain-of-responsibility-pattern-in-c/</guid><description>又是一个行为类的模式，似乎这类模式在使用C语言开发的项目中适应性更强，而另外两类模式创建型和结构型则略显不受待见^\_^。 Chain of Responsibility模式（中文名：职责链模式）是一个不算复杂的模式。虽不复杂，但用好了同样可以解决大问题。个人觉得其最大的好处就在于可以动态地重组针对一类对象的处理流程。正是得益于这一优势，它才可以在纷繁芜杂的业务领域站稳脚跟。 我们遇到的问题是这样...</description></item><item><title>Strategy模式的C实现</title><link>https://tonybai.com/2011/10/20/implement-strategy-pattern-in-c/</link><pubDate>Thu, 20 Oct 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/10/20/implement-strategy-pattern-in-c/</guid><description>与那些复杂的模式相比，Stragegy Pattern(策略模式)是一个相对简单的模式，很直观，也易于理解。 同时它也是我们在开发过程中使用最多的模式之一。 问题是设计模式使用的驱动力，只有当我们遇到问题时，设计模式才会向我们伸出援助之手。这里我也想通过对问题以及解决方法演化的阐述来说明策略模式是如何更好地帮助我们的。我们从问题出发！ Tony最近接到了一个新任务，任务的内容是实现一个通用的平衡二...</description></item><item><title>C语言的现状</title><link>https://tonybai.com/2011/10/17/the-state-of-c/</link><pubDate>Mon, 17 Oct 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/10/17/the-state-of-c/</guid><description>本文翻译自Dr. Dobb&amp;#39;s Journal官网上的一篇由Brian W. Kernighan和Dennis M. Ritchie共同撰写的名为&amp;#34;The State of C&amp;#34;的文章。这里谨将此篇译文献给不久前刚刚离我们而去的C语言之父 – Dennis M. Ritchie，愿一代计算机科学巨匠一路走好。 **不再只是为了系统级编程(system programming)** C是一门通用的计...</description></item><item><title>Observer模式的C实现</title><link>https://tonybai.com/2011/10/14/implement-observer-pattern-in-c/</link><pubDate>Fri, 14 Oct 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/10/14/implement-observer-pattern-in-c/</guid><description>设计模式) (Design Pattern，以下简称DP)的定义有很多种。我个人的理解：DP是人们在软件开发过程中所总结出来的一些典型问题的经验解决方法模板。使用它们可以使我们的代码更易被复用，更易扩展，更好地适应变化以及更便于后期维护。 人们都说设计模式是独立于语言的，但这里的&amp;#34;语言&amp;#34;更多的是指面向对象语言，比如Java、C++、C#、Python和Ruby等。使用面向对象语言(OO)在实现设计...</description></item><item><title>秋游天华山</title><link>https://tonybai.com/2011/09/26/the-tour-of-tianhua-moutain-in-autumn/</link><pubDate>Mon, 26 Sep 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/09/26/the-tour-of-tianhua-moutain-in-autumn/</guid><description>不知为何，一到秋天我就有了爬山的冲动。于是乎我和同事一行六人在一个秋高气爽的周末来到了位于丹东宽甸的天华山。 辽宁境内的山我爬过的不多，之前只是去过千山和关门山。选择天华山也是再三考虑了同事们久疏于运动之后做出的决定，其实我个人更加向往征服另一座更为难爬的山峰 – 位于凤城的凤凰山，看来我的这个目标只能等来年再实现了^\_^。 景区的自费倒站车将我们送到了此次登山的起点-通天峡广场。一上来我们就要...</description></item><item><title>C程序员驯服Common Lisp – 函数</title><link>https://tonybai.com/2011/09/23/c-programers-tame-common-lisp-series-functions/</link><pubDate>Fri, 23 Sep 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/09/23/c-programers-tame-common-lisp-series-functions/</guid><description>Common Lisp是函数式编程语言，其基本组成单元自然是函数。对Common Lisp函数的理解也是学习Common Lisp语言的关键。另外与C语言以内存单元修改为主要编程方法不同，Common Lisp的主要编程方法是将函数应用于参数。这里我们分别用两种范式风格实现同一个函数，该函数用于取得第n个fibonacci数（n从0开始）： ;; 命令式风格 (defun imperative-f...</description></item><item><title>C程序员驯服Common Lisp – 变量</title><link>https://tonybai.com/2011/09/20/c-programers-tame-common-lisp-series-variables/</link><pubDate>Tue, 20 Sep 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/09/20/c-programers-tame-common-lisp-series-variables/</guid><description>变量是C语言中最常用的、不可或缺的语言元素。C语言是命令式编程语言（imperative programming language），其基本编程方法是基于对内存单元的修改，而变量又恰是对内存单元的抽象表示，比如：&amp;#34;int a = 0xff&amp;#34;这行语句告诉我们在内存中有一块大小为4个字节的区域，该区域可以通过a这个变量直接访问，该区域初始时存储的值为0xff。由此看来C语言的主要操作就是变量操作。 C...</description></item><item><title>C程序员驯服Common Lisp – 控制结构</title><link>https://tonybai.com/2011/09/14/c-programers-tame-common-lisp-series-control-structure/</link><pubDate>Wed, 14 Sep 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/09/14/c-programers-tame-common-lisp-series-control-structure/</guid><description>光有表达式，我们依旧无法写出实用的程序，我们还缺少控制结构(Control Structures)。 C语言主要有三种控制结构：顺序结构、条件分支结构和循环结构。Common Lisp 也实现了类似的控制结构，我们逐一来看。 一、顺序结构 顾名思义，顺序结构中的语句或表达式是按其位置的先后顺序依次执行的，这也是最简单也最容易理解的一种结构。在C语言中，绝大多数代码块(code block)中的代码...</description></item><item><title>当可执行程序版本信息变更时</title><link>https://tonybai.com/2011/09/09/when-program-version-changed/</link><pubDate>Fri, 09 Sep 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/09/09/when-program-version-changed/</guid><description>在Unix/Linux上，我们一般可以通过两种方法查看到一个可执行程序的版本信息，以下以Ubuntu中的Gcc为例。 第一种方法：我们可以直接通过程序名字得到版本信息，例如: $ which gcc /usr/bin/gcc $ ls -l /usr/bin/gcc lrwxrwxrwx 1 root root 7 2010-08-21 00:18 /usr/bin/gcc -&amp;gt; gcc-4.4\...</description></item><item><title>C程序员驯服Common Lisp – 表达式</title><link>https://tonybai.com/2011/09/02/c-programers-tame-common-lisp-series-expressions/</link><pubDate>Fri, 02 Sep 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/09/02/c-programers-tame-common-lisp-series-expressions/</guid><description>Common Lisp程序由一组表达式构成。在&amp;#34;入门&amp;#34;一文中我提到过：Common Lisp使用S-expressions作为表达式(Expressions)的基本语法格式。S-expressions由原子(atoms)和S-expressions列表组成，或者说原子和列表(List)是组成S-expression的基本元素。复杂的源程序都是由简单的表达式组成的，我们在学习编写实用的Common ...</description></item><item><title>使用C99特性简化代码编写</title><link>https://tonybai.com/2011/08/31/simplify-coding-in-c99/</link><pubDate>Wed, 31 Aug 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/08/31/simplify-coding-in-c99/</guid><description>至今我还记得第一次听说C99标准还是在读大一时，那时同寝一位兄弟手头有一本Herbert Schildt编写的《C: The Complete Reference，Fourth Edition》(中文名：C语言大全)，书封皮的右上角上赫然写着&amp;#34;详解C99 ANSI/ISO最新标准&amp;#34;，那时离C99标准发布仅仅才一年。 那个时候我们大学授课以及实验用的还是Borland的Turbo C 2.0，C99...</description></item><item><title>C程序员驯服Common Lisp – 入门</title><link>https://tonybai.com/2011/08/30/c-programers-tame-common-lisp-series-introduction/</link><pubDate>Tue, 30 Aug 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/08/30/c-programers-tame-common-lisp-series-introduction/</guid><description>毫无疑问，Common Lisp是一门庞大且复杂的语言，学习曲线并不平坦。对于一个从未接触过函数式语言、交互式语言以及动态类型语言的C程序员来说，学习Common Lisp显然是一个很大的挑战。 也许有人会问：&amp;#34;C语言已经无所不能了，为何还要学习Common Lisp？&amp;#34;在这里我不想说太多冠冕堂皇的话，至少对我而言，理由有三： 一是好奇，在C语言的世界里待得久了，总想探出头来吸几口新鲜空气，这次我...</description></item><item><title>使用autoconf解决可移植性问题</title><link>https://tonybai.com/2011/08/23/solve-portable-problem-with-autoconf/</link><pubDate>Tue, 23 Aug 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/08/23/solve-portable-problem-with-autoconf/</guid><description>昨天在编译项目代码时遇到了这样一个错误： xx\_base.h:72:2: 错误：#error &amp;#34;One of \_BIG\_ENDIAN or \_LITTLE\_ENDIAN must be defined.&amp;#34; 这是预编译器的错误输出。原因很明显：预编译器在处理xx\_base.h时没有发现\_BIG\_ENDIAN或\_LITTLE\_ENDIAN的定义，#error预处理宏输出了如上错误。...</description></item><item><title>Bambook使用手记</title><link>https://tonybai.com/2011/08/16/some-notes-on-using-bambook/</link><pubDate>Tue, 16 Aug 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/08/16/some-notes-on-using-bambook/</guid><description>自从去年7月末盛大的Bambook(中文名称：锦书)上市起，我就一直关注着这款产品。不过考虑到刚上市的产品价位较高，功能和应用有限，缺陷较多等因素，我也一直没有下单购买。期间我还差点买入Kindle，后据说Kindle对PDF及中文的支持不佳而暂时打消了念头。上周在京东看到Bambook价格降到了499，而且据网上评测Bambook在经过一年的固件升级后，增加了许多功能，其中就包括对原生pdf文件...</description></item><item><title>CBehave – 一个C语言行为驱动开发框架</title><link>https://tonybai.com/2011/08/15/cbehave-a-bdd-framework-for-c/</link><pubDate>Mon, 15 Aug 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/08/15/cbehave-a-bdd-framework-for-c/</guid><description>Behaviour-Driven Development，即行为驱动开发在业界早已不是什么新鲜玩意了。我之前也略有了解，不过一直没有&amp;#34;深入钻研&amp;#34;。直到今年年初InfoQ的几篇有关BDD的文章才让我对BDD有了更多的认识。与TDD一样，C语言在BDD领域依旧是一个&amp;#34;后进分子&amp;#34;，在多数主流语言(Java，C#，Ruby等)都已经拥有比较成熟的BDD框架(如JBehave、SpecFlow和Cucumb...</description></item><item><title>行为驱动开发导引</title><link>https://tonybai.com/2011/08/10/introducing-bdd/</link><pubDate>Wed, 10 Aug 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/08/10/introducing-bdd/</guid><description>本文翻译自Dan North的文章&amp;#34;Introducing BDD&amp;#34;。 我遇到了一个问题。当我在不同环境的多个项目中使用和教授类似测试驱动开发(test-driven development, TDD)这样的敏捷实践时，我总是能遇到来自程序员们相同的困惑和误解。他们想知道从哪里开始、测什么不测什么、一次测试多少、谁来调用他们的测试以及如何理解为什么一个测试失败了。 越是深入TDD，我越能感觉到我对...</description></item><item><title>Common Lisp初学点滴</title><link>https://tonybai.com/2011/08/05/some-experience-of-common-lisp-beginner/</link><pubDate>Fri, 05 Aug 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/08/05/some-experience-of-common-lisp-beginner/</guid><description>Common Lisp是一门Interactive语言，比较容易上手。无论你是用CLISP，SBCL还是Clozure CL，你都可以很快地写出一个&amp;#34;Hello, World&amp;#34;程序出来。不过千万不要因此低估了Common Lisp，前人的经验表明：Common Lisp是门庞大且复杂的语言，其学习曲线可并不低。要想真正掌握它，需要你有持续的热情、足够的耐心和不断的练习。我接触Common Lisp...</description></item><item><title>偿还N年前的一笔技术债</title><link>https://tonybai.com/2011/07/21/pay-for-a-tech-debt-of-several-year-ago/</link><pubDate>Thu, 21 Jul 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/07/21/pay-for-a-tech-debt-of-several-year-ago/</guid><description>记得刚来公司时曾参与过一个项目，项目中用到了部门基础库中的一个B+树接口。不过在程序调试过程中我们发现可执行程序总是dump core（在sparc solaris上），经初步分析，断定问题就出在B+树接口处，但一时又找不到问题原因。还好这个B+树的实现者就坐在我的旁边。他分析后告诉我：这个B+树接口要求用户自定义的索引结构体的size应该为4的整数倍。按照他的说法，我为结构体打了padding，...</description></item><item><title>为函数添加enter和exit级trace</title><link>https://tonybai.com/2011/07/13/add-enter-and-exit-trace-for-your-function/</link><pubDate>Wed, 13 Jul 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/07/13/add-enter-and-exit-trace-for-your-function/</guid><description>日常开发中，我们为了辅助程序调试常常在每个函数的出入口(entry/exit)增加Trace，一般我们多用宏来实现这些Trace语句，例如： #ifdef XX\_DEBUG\_ #define TRACE\_ENTER() printf(&amp;#34;Enter %s\\n&amp;#34;, \_\_FUNCTION\_\_) #define TRACE\_EXIT() printf(&amp;#34;Exit %s\\n&amp;#34;, \_\_...</description></item><item><title>也谈共享库2</title><link>https://tonybai.com/2011/07/07/also-talk-about-shared-library-2/</link><pubDate>Thu, 07 Jul 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/07/07/also-talk-about-shared-library-2/</guid><description>我之前写过一篇名为&amp;#34;也谈共享库&amp;#34;的博文，对共享库的查找和符号解析机制做了还算比较详细的说明，不过百密一疏，总有一些意想不到的情况发生。这不今天我又遇到了一个有关共享库的新问题，这里将这个问题及其解决过程记录下来，也算是对上一篇文章中未涉及内容的一个补充吧。 N年前我曾参与过部门的一个可复用系统的设计开发，当时我们设计了一种插件式的系统结构，其中所谓的&amp;#34;插件&amp;#34;是以共享库的形式提供。主程序通过读取配置...</description></item><item><title>也谈C语言编译器的标准编译阶段</title><link>https://tonybai.com/2011/07/04/also-talk-about-standard-compile-stage-of-c-compiler/</link><pubDate>Mon, 04 Jul 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/07/04/also-talk-about-standard-compile-stage-of-c-compiler/</guid><description>了解C编译器的工作流程有助于C程序员解决编译代码过程中出现的问题。市面上凡是讲解得还算全面的C语言书籍中都或多或少对此有所提及。 让我们在这里来回顾一下C编译器的工作流程！一般C编译器的工作流程大致分为：预编译、编译、生成目标代码（汇编）和连接这四个主要步骤。我们用实例具体描述一下这四个步骤，以最著名的GCC编译器结合helloworld.c文件为例: /\* helloworld.c \*/ i...</description></item><item><title>也谈阿根廷队2011美洲杯首演</title><link>https://tonybai.com/2011/07/02/also-talk-about-the-first-match-of-agentina-on-2011-copa-america/</link><pubDate>Sat, 02 Jul 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/07/02/also-talk-about-the-first-match-of-agentina-on-2011-copa-america/</guid><description>相信今天上午进行的2011美洲杯阿根廷队的首演又让广大阿根廷球迷&amp;#34;上火&amp;#34;了。同为阿根廷球迷，我和大家的心情是一样一样的。 事实上我也只是看了下半场比赛。这里我还是要提醒那些尚未亲眼观看阿根廷的比赛的朋友们：你需要有一颗坚强的心，否则伤不起啊。一句话概括这场比赛：后防风声鹤唳、中场平庸无奇、前场单打独斗。这似乎是这几年来阿根廷队一贯所表现出来的风格。 阿根廷球迷，真悲哀啊。我们遇到阿根廷足球一个低谷...</description></item><item><title>也谈C语言对国际化的支持</title><link>https://tonybai.com/2011/07/01/also-talk-about-the-internationalization-support-in-c/</link><pubDate>Fri, 01 Jul 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/07/01/also-talk-about-the-internationalization-support-in-c/</guid><description>C语言对国际化的支持由来已久，最初开始于其第一版标准，即C89标准。在C89中我们可以看到用于支持国际化的locale.h、宽字符、宽字符串以及多字节字符(串)。而之后的&amp;#34;C89增补1&amp;#34;标准，即C90标准，以及C95标准又进一步完善了C语言对国际化的支持，增加了wchar.h、 wctype.h以及大量用于操作宽字符(串)和多字节字符(串)的标准库函数。最新一版C语言标准，即C99，让C语言对国际...</description></item><item><title>使用Apache2配置多个站点</title><link>https://tonybai.com/2011/06/27/configure-multiple-websites-with-apache2/</link><pubDate>Mon, 27 Jun 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/06/27/configure-multiple-websites-with-apache2/</guid><description>部门虽然不是做Web开发的，但是部门内部很多服务器也是使用Apache作为Web Server的。不过一直一来我这边都是用一个Apache Server对应一套Web应用。不过今天有了新的要求：在一个已经部署了一套应用的Apache2上再部署另外一套应用。这也让我不得不深入了解一下Apache的配置。不过还好，过程还是顺利的，这里记下此文意在备忘，如果同时也能给大家带来一些有价值的参考那就再好不过...</description></item><item><title>也谈C语言的内联函数</title><link>https://tonybai.com/2011/06/22/also-talk-about-inline-function-in-c/</link><pubDate>Wed, 22 Jun 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/06/22/also-talk-about-inline-function-in-c/</guid><description>有这样一段代码： /\* foo.c \*/ #include  &amp;#34;stdio.h&amp;#34; inline void foo() {     printf(&amp;#34;inline foo in %s\\n&amp;#34;, \_\_FILE\_\_); } int main() {     foo();     return 0; } 我采用C99标准，并在不加任何优化选项的情况下编译之： $ gcc -std=c99 foo...</description></item><item><title>Hello，Common Lisp</title><link>https://tonybai.com/2011/06/21/hello-common-lisp/</link><pubDate>Tue, 21 Jun 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/06/21/hello-common-lisp/</guid><description>Paul Graham不愧被誉为Lisp)的超级推手，他的煽动力真的是很强悍。这不才刚刚看完一遍他编写的《黑客与画家》后，我就决定将Common Lisp作为今年计划学习的那门新语言，而且从现在就开始。 去年曾囫囵吞枣般的学习过Haskell，一门通用且庞大的纯函数式编程语言。在惊叹于Haskell如此与众不同且功能强大的同时，也为Haskell Monad那魔鬼般的蹩脚语法所苦恼，而Monad的...</description></item><item><title>解决一个IP路由选择问题</title><link>https://tonybai.com/2011/06/21/solve-a-problem-about-ip-route/</link><pubDate>Tue, 21 Jun 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/06/21/solve-a-problem-about-ip-route/</guid><description>大学时曾旁听过计算机专业的专业课-&amp;#34;计算机网络&amp;#34;（我非科班出身，只能偷偷旁听），现在还能清晰地记得当初他们使用的教材是高教社影印版的《计算机网络——自顶向下方法与Internet特色》。不过记忆中课程的内容却渐渐模糊了。有些当时并没有深刻地理解的概念，现在依旧没理解，因为平时少有涉及。 上周在搭建CI环境时遇到了两个服务器(均安装的是RHEL 5.5 OS)之间网络不通的问题。这两个服务器分处于两...</description></item><item><title>小试番茄工作法</title><link>https://tonybai.com/2011/06/14/try-pomodoro-technique/</link><pubDate>Tue, 14 Jun 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/06/14/try-pomodoro-technique/</guid><description>番茄工作法（Pomodoro Technique），你可能没有听说过，呵呵，它年纪也不小了，官方说它是在1980s时发明的一种时间管理方法，只不过它最近又被一些人“挖掘”了出来，并被大力推广了一番。特别是在软件开发圈子里，被包装后的番茄工作法披上了光鲜的外衣，拥有了不少粉丝（我还算不上粉丝，充其量算是个试用者 ^\_^）。 不过和历史上诸多的时间管理方法一样，番茄工作法不是银弹，它无法将你彻底地从...</description></item><item><title>让BuildBot服务于多个项目</title><link>https://tonybai.com/2011/06/07/use-buildbot-serves-serveral-projects-simultaneously/</link><pubDate>Tue, 07 Jun 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/06/07/use-buildbot-serves-serveral-projects-simultaneously/</guid><description>多数公司不会仅有一个项目，当你为一个项目引入持续集成实践后，其他项目就会接踵而来。这时你会重新考量BuildBot，考虑如何让BuildBot可以服务于多个项目。 如果你有足够的主机资源和人力资源，那为每个项目单独搭建一套CI环境是再好不过的了，每个项目都有专人维护CI环境，各个项目的配置互不干扰。不过对于一些公司来说，这显然有些浪费，BuildBot Master的资源消耗是不大的，我们完全可以...</description></item><item><title>把握好编码的节奏</title><link>https://tonybai.com/2011/06/03/hold-the-coding-rhythm/</link><pubDate>Fri, 03 Jun 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/06/03/hold-the-coding-rhythm/</guid><description>最近观察到这样一种情况，项目组内的两位比较资深同事似乎都习惯于这样来编码：他们可能会花上两、三周时间将一个模块的成百上千行代码一气呵成的编写完，然后再去与其他人编写的代码集成在一起编译，测试，最终提交。这种情况让我有些惊讶，因为我觉得一个良好的编码节奏不应该是这样的，原因有三： .这样的节奏不利于问题的早发现早解决 我们都知道问题发现越早，其解决成本越小。如果只是一味地编写代码，甚至连一次编译都不...</description></item><item><title>解决BuildBot构建结果mail无法发送的问题</title><link>https://tonybai.com/2011/05/31/solve-the-problem-that-buildbot-can-not-send-mail/</link><pubDate>Tue, 31 May 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/05/31/solve-the-problem-that-buildbot-can-not-send-mail/</guid><description>在“使用BuildBot搭建持续集成环境”一文中我曾经说到：公司使用的mail服务器只支持SSL连接，而BuildBot似乎对SSL连接的支持有些问题，导致构建结果mail无法发送“。BuildBot实际上使用的是Twisted的mail库来发送邮件的，我下载了Twisted的一些mail发送的例子程序，并使用我的公司mail账户配置，但依旧发送失败。看来这个问题与Twisted的实现有关了。 这...</description></item><item><title>使用Make的命令行变量</title><link>https://tonybai.com/2011/05/19/use-command-line-vars-of-make/</link><pubDate>Thu, 19 May 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/05/19/use-command-line-vars-of-make/</guid><description>有了BuildBot搭建的持续集成环境还远未结束，具体的构建脚本还得自己来写。我们用的是Make工具，对应要编写的脚本就是Makefile。 Make是日常代码构建常用的工具，尤其是绝大多数C和C++项目都会将Make作为首选构建工具。平时多数情况大家都是直接敲入make命令便开始了构建过程，很少有人为make传入什么参数的（调试Makefile的情况除外）。但是有些时候自定义的Make命令行变量...</description></item><item><title>使用BuildBot搭建持续集成环境</title><link>https://tonybai.com/2011/05/18/set-up-ci-environment-with-buildbot/</link><pubDate>Wed, 18 May 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/05/18/set-up-ci-environment-with-buildbot/</guid><description>部门的持续集成一直做的不太好，我们开发部这边甚至一直没能做起来，这其中有各种原因：工具、意识、执行力、沟通等等。将持续集成引入到我们的开发过程中也一直是我的一个目标。去年末启动的一个项目让我感到时机变得成熟了。 新项目的代码是完全重写的，这样的机会甚是难得。因为大多数情况下大家都是在维护现有系统：做些添添补补、修正Bug以及优化之类的事情。项目初期，我特别向大家强调了要严格遵守统一代码风格并将as...</description></item><item><title>聆听编程“古训”</title><link>https://tonybai.com/2011/05/10/listen-to-old-maxim-respectfully/</link><pubDate>Tue, 10 May 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/05/10/listen-to-old-maxim-respectfully/</guid><description>市面上关于优秀编程风格和习惯养成的书籍还真不少，其中“叫好又叫座”的书诸如《代码大全》、《编程精粹:编写高质量C语言代码》、《编程匠艺》、《重构》以及《Clean Code》等。不过前些天我在网上下载了一本名为《The Elements of Programming Style》的电子书，看过此书后，我才知道开创编写优秀风格代码之路的鼻祖是谁（不知道是否还有比这本书更加古老的且系统地讲述优良编程元...</description></item><item><title>只对代码无法表达的东西写注释</title><link>https://tonybai.com/2011/05/05/comments-only-what-the-code-cannot-say/</link><pubDate>Thu, 05 May 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/05/05/comments-only-what-the-code-cannot-say/</guid><description>本文翻译自”Comments Only What the Code Cannot Say“，来自于《程序员应该知道的97件事》一书中的某个章节。 我们知道理论与实践之间存在差异。在实践中，这个差异远大于其在理论中所描述的那样 – 一份对注释（comments）的观察数据也证实了这一点。理论上，通常的注释代码的想法听起来是值得的：它可以为读者提供更多的细节，可以解释发生了什么事情。有什么能比自我帮助...</description></item><item><title>Ubuntu一年使用感受</title><link>https://tonybai.com/2011/04/29/feel-experience-after-using-ubuntu-for-one-year/</link><pubDate>Fri, 29 Apr 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/04/29/feel-experience-after-using-ubuntu-for-one-year/</guid><description>今天是Ubuntu 11.04版本(Natty Narwhal)发布的正日子！想必全世界的Ubuntu Fans们都会或多或少的兴奋上一阵儿。我接触Ubuntu这个Linux发行版较早，甚至可以追溯到Ubuntu 5.10。不过真正将Ubuntu作为我日常工作学习的第一操作系统还是在去年Ubuntu 10.04LTS版本发布之后。从那时起到现在整整有近一年时间了。这里我也来说说这一年来使用Ubun...</description></item><item><title>童子军规则</title><link>https://tonybai.com/2011/04/23/the-boy-scout-rule/</link><pubDate>Sat, 23 Apr 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/04/23/the-boy-scout-rule/</guid><description>本文翻译自&amp;#34;The Boy Scout Rule&amp;#34;，来自于《程序员应该知道的97件事》一书中的某个章节。 童子军有一条规则：“永远保持离开时的露营地比你发现它时更整洁”。如果你在地面上发现了脏东西，那么无论是否是你留下的，你都要将它清理干净。你有意地为下一组露营者改善环境。（实际上，由童子军之父罗伯特·斯蒂芬森·史密斯·贝登堡编写的原版规则是这样的：“尝试让这个世界在你离开时比你发现它时变得更美好...</description></item><item><title>应用C语言代码风格检查</title><link>https://tonybai.com/2011/04/21/apply-style-check-to-c-code/</link><pubDate>Thu, 21 Apr 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/04/21/apply-style-check-to-c-code/</guid><description>代码风格（style）一直是一个见仁见智的问题，但是对于一个团队而言，如果能在代码风格上达成一致，显然无论对团队还是对个人来讲都是大有裨益的。 在这方面我们也曾做过努力，包括在团队中引入astyle工具，并在astyle的代码美化风格配置上，团队成员也集体达成过一致。但是在开发过程中还是出现了一些问题。最主要的就是对astyle工具使用不足：一些同事总是记得不停地写代码，但却忘记了按约定好的风格要...</description></item><item><title>使用正确的算法和数据结构</title><link>https://tonybai.com/2011/04/19/use-the-right-algorithm-and-data-structure/</link><pubDate>Tue, 19 Apr 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/04/19/use-the-right-algorithm-and-data-structure/</guid><description>本文翻译自”Use the Right Algorithm and Data Structure“，来自于《程序员应该知道的97件事》一书中的某个章节。 _一家拥有多个分行的大银行抱怨说他们为出纳员新买的计算机运行得太慢了。这件事儿发生在电子银行以及ATM机使用普及程度远不及现在的那个年代。人们更多的是亲自到银行办理业务，这些运行超慢的计算机使得大家排起了长队。因此，这家银行威胁计算机供货商要结束...</description></item><item><title>借开源实现你的雄心壮志</title><link>https://tonybai.com/2011/03/26/fulfill-your-ambitions-with-opensource/</link><pubDate>Sat, 26 Mar 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/03/26/fulfill-your-ambitions-with-opensource/</guid><description>本文翻译自&amp;#34;Fulfill Your Ambitions with Open Source&amp;#34;，来自于《程序员应该知道的97件事》一书中的某个章节。 如果你在工作中没能开发那些可以实现你雄心壮志的软件，那你将有很不错的机会。也许你正在为一家庞大的保险公司开发软件，然而你实际上却宁愿供职于Google、Apple、Microsoft或是你自己初创的公司去开发下一个对世界影响巨大的软件。如果你去为你根本...</description></item><item><title>也谈SVN冲突解决</title><link>https://tonybai.com/2011/03/23/also-talk-about-solving-the-svn-conflicts/</link><pubDate>Wed, 23 Mar 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/03/23/also-talk-about-solving-the-svn-conflicts/</guid><description>当今的软件开发更多是团队合作，团队的所有成员均工作在同一份代码库上。这样即便是有了先进的版本控制管理工具（诸如Subversion、Git等），出现冲突（Conflict）的情况也是在所难免的。这就需要你学会解决冲突。 以Subversion为例，多数人在学习这类工具时都选择了浅尝辄止，仅仅停留在会使用update和commit这些常用的命令上。这样大家就错过了那些可以帮助你快速解决冲突的命令，以...</description></item><item><title>你应该关心你的代码</title><link>https://tonybai.com/2011/03/22/you-gotta-care-about-the-code/</link><pubDate>Tue, 22 Mar 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/03/22/you-gotta-care-about-the-code/</guid><description>本文翻译自”You Gotta Care about the Code“，来自于《程序员应该知道的97件事》一书中的某个章节。 即使不用大侦探福尔摩斯，我们也能知道优秀的程序员能写出好代码。糟糕的程序员…则不能。他们生产出代码巨兽，而其他人则不得不去清理。你想写出好代码，对不对？你渴望成为一名优秀的程序员。 好代码不会凭空冒出来。它也不是什么需要各大行星排成一列时靠运气才发生的事情。为了写出好代码...</description></item><item><title>别放弃你的标准</title><link>https://tonybai.com/2011/03/21/do-not-give-up-your-standard-first/</link><pubDate>Mon, 21 Mar 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/03/21/do-not-give-up-your-standard-first/</guid><description>上周末和LP一起到一家烤肉店吃饭。这家店在本地算是一家很有名气的以经营韩式烤肉为主的饭店了。记得在LP怀孕前我们经常在周末光顾这家店。那时这家店生意甚是火爆，门庭若市。烤肉量足且好吃，环境整洁，服务员业务也是十分熟练。后来LP怀了果果，再加上果果出生后一直母乳喂养，我们也就好久没有去过这家店了。这次又和LP来到这家店，不过我们看到的却是另外一番景象：门庭若市换成了门可罗雀；服务员早已经换了一批，服...</description></item><item><title>升级Thunderbird</title><link>https://tonybai.com/2011/03/21/upgrade-thunderbird/</link><pubDate>Mon, 21 Mar 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/03/21/upgrade-thunderbird/</guid><description>自从换装Ubuntu后，就一直使用Thunderbird。很是喜欢Thunderbird超快的搜索速度、按主题组织和展示Mail以及易用的快捷键。不过这两天Thunderbird一直在给我制造麻烦。通过Top查看，我发现我的Thunderbird一直在持续占用20%-30%的CPU，这导致我的本子变得很慢。虽然能看到这个进程，但是并不清楚Thunderbird究竟在做什么。开始怀疑它在后台压缩文件...</description></item><item><title>通过精减来改善代码</title><link>https://tonybai.com/2011/03/17/improve-code-by-removing-it/</link><pubDate>Thu, 17 Mar 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/03/17/improve-code-by-removing-it/</guid><description>本文翻译自&amp;#34;Improve Code by Removing It&amp;#34;，来自于《程序员应该知道的97件事》一书中的某个章节。 少即是多。这是一句有些陈腐的短小格言，但有时它确实是正确的。 在过去的几周里我对代码库所作的改善工作之一就是删除了其中的几大块代码。 我们编写软件时一直遵循着XP的（译注：极限编程，eXtreme Programming）原则，包括YAGNI（即You Aren&amp;#39;t Gonn...</description></item><item><title>知道如何使用命令行工具</title><link>https://tonybai.com/2011/03/16/know-how-to-use-command-line-tool/</link><pubDate>Wed, 16 Mar 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/03/16/know-how-to-use-command-line-tool/</guid><description>本文翻译自”Know How to Use Command-line Tool“，来自于《程序员应该知道的97件事》一书中的某个章节。 现今，很多软件开发工具被打包成集成开发环境（Integrated Development Environments，IDE）提供给开发者。微软的Visual Studio和开源的Eclipse就是两个颇受欢迎的IDE，当然还有很多其他类似的工具。很多程序员喜欢使用...</description></item><item><title>现实版灾难片-日本大地震</title><link>https://tonybai.com/2011/03/12/the-earthquake-happened-in-japan/</link><pubDate>Sat, 12 Mar 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/03/12/the-earthquake-happened-in-japan/</guid><description>这两天我们的邻国日本正上映着一部&amp;#34;现实版灾难片&amp;#34;–一场8.8级的大地震。这次地震让日本成为了全世界瞩目的焦点。我想很多国人看到这一幕时心里肯定很纠结，当然纠结的原因无非是两国之间的那个几乎永远无法弥合的宿怨。我是一个&amp;#34;灾难片控&amp;#34;，口碑好的灾难片几乎一个都没有放过，口碑烂的片子有空时也会好奇的去品味一下到底有多烂。而这部现实版的&amp;#34;灾难片&amp;#34;自然不会放过，所以今天我几乎是一直守在电视前，通过新闻台的直播...</description></item><item><title>Review Board的几点使用体会</title><link>https://tonybai.com/2011/03/04/some-experience-on-using-review-board/</link><pubDate>Fri, 04 Mar 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/03/04/some-experience-on-using-review-board/</guid><description>近期产品线研发体系正式将Review Board这款优秀的基于Web的代码评审开源工具引入到开发过程中，作为产品线内各项目组进行代码评审的辅助工具。我对Review Board近两年多的关注总算没有白费，算是有了一个还算不错的结果。不过Review Board的正式使用并不代表一种结束，反而恰恰是一个新的开始。我们下一步要关注的是如何用好Review Board，让它真真正正地为改善产品质量和开发...</description></item><item><title>买了把人体工学座椅</title><link>https://tonybai.com/2011/03/01/buy-an-ergonomic-chair/</link><pubDate>Tue, 01 Mar 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/03/01/buy-an-ergonomic-chair/</guid><description>作为程序员，每天最主要的姿势就是坐姿。随之而来的就是各种职业病：腰酸、背痛、颈椎疼，重者要么是腰间盘突出，要么是严重的颈椎病。每个程序员心里都清楚，避免这些职业病的最好方法就是工作期间记得多做些身体活动。但一旦进入工作状态后，我们就没有了时间概念，很难“自拔”。 去年因意外闪了腰，医院大夫给出的诊断结果是小关节脱位。虽说并不严重，但是腰痛的那种感觉还是在我心里留下了阴影，所以今年春节后立即给自己制...</description></item><item><title>专业程序员</title><link>https://tonybai.com/2011/02/24/the-professional-programmer/</link><pubDate>Thu, 24 Feb 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/02/24/the-professional-programmer/</guid><description>本文翻译自&amp;#34;The Professional Programmer&amp;#34;，来自于《程序员应该知道的97件事》一书中的某个章节。 什么是专业程序员？ 一个专业程序员的唯一的、最重要的特点是个人的责任。专业程序员会对他们的职业生涯负责，会对他们的估计负责，会对他们的计划承诺负责，会对他们的错误负责，会对他们的技艺负责。一个专业程序员绝不会将他们的责任推到其它人身上。 ·如果你是一名专业程序员，你将对你自己...</description></item><item><title>持续学习</title><link>https://tonybai.com/2011/02/23/continous-learning/</link><pubDate>Wed, 23 Feb 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/02/23/continous-learning/</guid><description>本文翻译自&amp;#34;Continuous Learning&amp;#34;，来自于《97 Things Every Programmer Should Know》一书中的某个章节。 我们生活在一个引人入胜的时代。软件开发分布在全球各地，你知道那里有很多人可以胜任你的工作。你需要不断学习以保持你在市场上的竞争力。否则，你将变成一条恐龙，专心从事某一个工作，直到有一天，你不再被需要或者你的工作被外包给了其它更为廉价的开发人...</description></item><item><title>代码评审</title><link>https://tonybai.com/2011/02/22/code-reviews/</link><pubDate>Tue, 22 Feb 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/02/22/code-reviews/</guid><description>本文翻译自&amp;#34;Code Reviews&amp;#34;，来自于《97 Things Every Programmer Should Know》一书中的某个章节。 你应该做代码评审。为什么呢？因为代码评审可以提高代码质量并且降低缺陷比例。但进行代码评审未必是因为你想到的那些理由。 由于之前有过一些代码评审的糟糕体验，因此许多程序员不喜欢代码评审。我曾经见过一些组织，它们要求所有代码在部署到生产环境之前必须通过一个正...</description></item><item><title>把一切都纳入版本控制</title><link>https://tonybai.com/2011/02/18/put-everything-under-version-control/</link><pubDate>Fri, 18 Feb 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/02/18/put-everything-under-version-control/</guid><description>本文翻译自&amp;#34;Put Everything Under Version Control&amp;#34;，来自于《97 Things Every Programmer Should Know》一书中的某个章节。 把项目中的一切都纳入版本控制。你需要的资源包括：免费的工具，比如Subversion，Git，Mercurial和CVS；充足的磁盘空间；便宜且性能强大的服务器；无处不在的网络；甚至包括项目托管服务。安装好...</description></item><item><title>将你的编码标准自动化</title><link>https://tonybai.com/2011/02/16/automate-your-coding-standard/</link><pubDate>Wed, 16 Feb 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/02/16/automate-your-coding-standard/</guid><description>本文翻译自”Automate Your Coding Standard“，来自于《97 Things Every Programmer Should Know》一书中的某个章节。 也许你也曾经经历过。在一个项目开始阶段，每个人都有着很多良好的意愿，我们称这些意愿为“新项目决议”。多数情况下，这些决议都会被记在文档中。关于代码的那些决议最终成了项目的编码标准。在项目启动会议上，主程序员带着大家一起浏...</description></item><item><title>在你重构之前</title><link>https://tonybai.com/2011/02/15/before-you-refactor/</link><pubDate>Tue, 15 Feb 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/02/15/before-you-refactor/</guid><description>本文翻译自&amp;#34;Before You Refactor&amp;#34;，来自于《97 Things Every Programmer Should Know》一书中的某个章节。 在某些时候，每个程序员都需要重构现有的代码。不过在你动手之前，请考虑一下下面的内容，因为这可以节省你和他人的大量时间（以及痛苦）。 · 重构开始的最好方式就是对现有代码库及其测试代码进行总结和评估。 这将帮助你理解现有代码的优点和不足，你也...</description></item><item><title>眼神儿太差了</title><link>https://tonybai.com/2011/01/28/terrible-eyes/</link><pubDate>Fri, 28 Jan 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/01/28/terrible-eyes/</guid><description>昨天晚饭后，打开本子继续工作，却发现无法连上无线路由器。最初以为路由器忘记打开了，可拿起路由器看了下，不是那么回事儿，路由器工作一切正常。我这才看到发现本子的无线网卡的指示灯不亮了，以前在这台x60本子上还从未出现此类情况，于是开始查找故障原因。 故障查找过程是痛苦的，一次次燃起希望，又一次次被冷水破灭： \* 最初怀疑是我误点击了Fn + F5而把无线网卡关了，于是我又无数次的点击Fn + F5...</description></item><item><title>2011·同事对我的期望</title><link>https://tonybai.com/2011/01/26/the-expectations-of-my-colleagues-in-2011/</link><pubDate>Wed, 26 Jan 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/01/26/the-expectations-of-my-colleagues-in-2011/</guid><description>眼看就要到春节假期了，公司E-HR平台上我的账户下还有一项待处理的工作：填写一份&amp;#34;领导力发展回顾与提升计划&amp;#34;表格。表格很简单，5分钟就能填完，不过其中有一项我自己很难填写：&amp;#34;您了解或感知同事/或下属对您的期望&amp;#34;。虽说可以自我感知，不过我更想听到我的同事真实的声音。 于是乎我就在产品线内发出了一封Mail，希望能够得到大家真实的想法。 小半天，我就收到同事的十几封反馈Mail，多数Mail中大家都提...</description></item><item><title>说书单2011.01.24</title><link>https://tonybai.com/2011/01/24/booklist-2011-01-24/</link><pubDate>Mon, 24 Jan 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/01/24/booklist-2011-01-24/</guid><description>2010年末的网上卖书大战进行的如火如荼，在这场大战初期我就低价收了《深入理解计算机系统》第二版，放在书柜里待有时间重温。记得当初还是在LP学校的图书馆里借到了这本书的第一版，并在第一个借阅期内看完了除第四章”处理器体系结构”之外的所有章节。之后又恋恋不舍，让LP续借了一次。我对这本书还真有一种相见恨晚的感觉，真遗憾我在大学期间怎么没发现这样一本好书呢。 网络卖书大战到现在也基本接近尾声了，不过我...</description></item><item><title>应对库接口原型变更</title><link>https://tonybai.com/2011/01/24/response-for-the-interface-prototype-change/</link><pubDate>Mon, 24 Jan 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/01/24/response-for-the-interface-prototype-change/</guid><description>也许你经常遇到这类情况：你在代码里使用了别人提供的第三方库，当库升级为新版本后，你的代码在编译时无法通过，提示接口原型错误，经查发现原来是该第三方库提供的某接口的原型发生了变化，比如原接口被删除、增加了参数、参数减少了、修改了参数类型以及返回类型发生变化了等等。你也许会不由自主的大骂一句：F\*\*k。 我们换位思考一下，假如你是某个库的Owner，当你遇到需要修改接口原型的情形时，你应该如何去做...</description></item><item><title>又遇字节序问题</title><link>https://tonybai.com/2011/01/21/encounter-byte-order-problem-again/</link><pubDate>Fri, 21 Jan 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/01/21/encounter-byte-order-problem-again/</guid><description>今天上午处理了一个线上产品的故障。分析来分析去，最后定位问题还是出在字节序转换的环节上。 其实测试组早在产品上线前就曾报告了这个问题，但是对应的开发人员并未对该问题进行深入地分析，而是有些草率地将该问题归结为客户端模拟器的实现不符合标准。因为这位同事比较资深，所以当时我也没有给予足够关注。 产品今天凌晨上线，9点左右业务量开始增大，这个问题立即就被我们在现场的运维人员发现，还好我们的系统是集群式的...</description></item><item><title>小试git-svn</title><link>https://tonybai.com/2011/01/20/try-git-svn/</link><pubDate>Thu, 20 Jan 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/01/20/try-git-svn/</guid><description>部门一直使用Subversion作为源码版本的管理工具。说实话，Subversion比较适合目前部门的绝大多数项目：没有异地团队开发，代码中心化管理；基本上都在trunk上开发，较少使用分支，基本上没有在各个branch间切换的成本。但对于我来说，有些情况下Subversion并不能满足我的需求。 问题主要集中在本地代码的备份和版本管理上。也就是说对于尚未或暂无法提交到Subversion服务器的...</description></item><item><title>梅西给力，蝉联金球</title><link>https://tonybai.com/2011/01/11/leomessi-defend-his-ballon-dor/</link><pubDate>Tue, 11 Jan 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/01/11/leomessi-defend-his-ballon-dor/</guid><description>今天凌晨国际足联公布并颁发了2010年度国际足坛的各大奖项，最让我感到欣喜的是巴萨国王梅西当选首届国际足联金球先生，蝉联了金球奖。 说实话，真的没有想到我的期望能变成现实。不过最终结果出炉前还是有种种迹象表明梅西是有机会的。首先就是梅西压倒去年表现优异的斯奈德，与两位世界冠军队友哈维和伊涅斯塔携手入围金球三甲。其次就是在今天凌晨当普斯卡什年度最佳进球奖被授予土耳其人阿尔滕托普后，我的内心对梅西的当...</description></item><item><title>别忘了测试你的假定</title><link>https://tonybai.com/2011/01/08/do-not-forget-to-test-your-assumption/</link><pubDate>Sat, 08 Jan 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/01/08/do-not-forget-to-test-your-assumption/</guid><description>周四下午，收到同事的一封mail，他告诉我他的业务代码中使用的一个库接口的行为与预期不同，并在mail中给出了测试代码和测试结果。而这个接口是之前由我封装实现的。 这个库仅仅是对libevent做了一层薄薄的封装，目的是使其接口的使用方式符合部门的一贯风格。虽说封装简单，但单元测试也是一应俱全，不敢马虎，必要的地方mock也一并上阵，总体来说我个人还是比较满意的。 不过还是出现了问题，问题出在li...</description></item><item><title>关于年终总结</title><link>https://tonybai.com/2011/01/04/about-year-end-summary/</link><pubDate>Tue, 04 Jan 2011 00:00:00 +0800</pubDate><guid>https://tonybai.com/2011/01/04/about-year-end-summary/</guid><description>年终岁尾，又到了该做年终总结的时候了。有些人觉得年终总结很难写，于是自欺欺人的在网上到处高价找枪手；亲自动手写总结的人也是抓耳挠腮，迟迟无法下笔。其实我倒不觉得总结有这么难，自己做过的事写出来又有何难呢!也许是你的心魔在作怪罢了(什么心魔，你懂的!)。对自己负责的人肯定是会主动积极地去做总结的，总结的第一对象也一定是自己，其次它的另外一个用途才是用来提交给领导看的。你的总结无需文采飞扬，关键要言之...</description></item><item><title>基于svn diff结果的有效代码量统计</title><link>https://tonybai.com/2010/12/24/an-effectual-method-based-on-svn-diff-for-code-quantity-statistics/</link><pubDate>Fri, 24 Dec 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/12/24/an-effectual-method-based-on-svn-diff-for-code-quantity-statistics/</guid><description>很多公司的过程中都有阶段性统计新增或修改的有效代码行数这一环节，这里先不论统计出的结果用于做什么，就统计本身而言，常常存在诸多问题，比如统计过程耗时且繁琐、统计结果中估算成分较大，不精确等。这些问题以前也一直困扰着我们，并且长时间没有想出很好的解决办法。 今天脑子里突然冒出一个想法：能否根据svn diff得到的结果分析出来有效代码量呢？ svn diff的结果一般是这样的，分为几类： 纯新增代码...</description></item><item><title>关于在线代码评审的几点考量</title><link>https://tonybai.com/2010/12/18/thoughts-on-online-coding-review/</link><pubDate>Sat, 18 Dec 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/12/18/thoughts-on-online-coding-review/</guid><description>记得上次折腾Review Board这个在线代码评审工具还是在一年前，那时的Review Board版本是1.0.3；这周部门的一位同事也在折腾Review Board，不过现在的版本已经升级到了1.5.1了。新版Review Board显然修正了许多旧版本中存在的问题，另外无法支持ssl邮件端口的问题也被我这位同事通过更换django源文件的方式搞定了。Review Board好用了，下一步需要...</description></item><item><title>"%05s"行为未定义</title><link>https://tonybai.com/2010/12/17/undefined-behavior-of-05s/</link><pubDate>Fri, 17 Dec 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/12/17/undefined-behavior-of-05s/</guid><description>下班前，一位同事发来的mail中提到这样一个问题：在Solaris上，新添加到Project中的一段代码编译有Warning，由于我们在Makefile的GCC命令行中设置了&amp;#34;视警告如错误&amp;#34;的-Werror编译选项，导致了项目无法成功Build。 这个Warning内容如下： warning: \`0&amp;#39; flag used with \`%s&amp;#39; printf format 产生这个Warning的...</description></item><item><title>使用Libtool创建库文件</title><link>https://tonybai.com/2010/12/14/create-libraries-with-libtool/</link><pubDate>Tue, 14 Dec 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/12/14/create-libraries-with-libtool/</guid><description>除了autoconf和automake，GNU的autotools工具包中还有一种工具，它就是libtool。顾名思义，libtool是一个关于库文件制作、安装和使用的工具，它屏蔽了各个平台在库制作、安装和使用方面的差异，为上层提供了统一的接口。你可以直接使用libtool创建静态或共享库，也可以将libtool与autoconf、automake结合在一起使用。第二种方式显然更具实际意义，也更为...</description></item><item><title>也谈共享库</title><link>https://tonybai.com/2010/12/13/also-talk-about-shared-library/</link><pubDate>Mon, 13 Dec 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/12/13/also-talk-about-shared-library/</guid><description>近两天一直在考量产品安装包改进的事宜。说实话，我们的安装包做得不够&amp;#34;专业&amp;#34;，不仅没有按照各个平台的标准安装包形式(比如redhat的rpm，debian的deb或solaris上的pkg包)制作，而且安装包在生产环境中还需要再进行一次链接才能得到最终的可执行程序。这样一来，每次制作安装包都很费时费力(虽然有自动打包脚本)，安装包的&amp;#34;体积&amp;#34;也很是庞大，因为包中要包含所有.o目标文件和一部分自有库以及...</description></item><item><title>别为代码的"Bad Smell"提供土壤</title><link>https://tonybai.com/2010/12/06/do-not-provide-soil-for-bad-smell-code/</link><pubDate>Mon, 06 Dec 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/12/06/do-not-provide-soil-for-bad-smell-code/</guid><description>上周初参加了一次代码评审，评审时发现一位同事在自己负责的子模块代码里定义了一个私用宏，&amp;#34;重复&amp;#34;这个Bad Smell立马在我头脑中闪现。当时我给出了一个建议：检查一下这个宏定义的必要性，依次检查一下C运行库头文件中是否已经有了同功用宏定义，基础库头文件中是否已经有了同功用宏定义，业务层代码的共用头文件中是否已经有了同功用宏定义。 周末这位同事给出了答复：C运行库、基础库和业务层代码中都没有定义此功...</description></item><item><title>在TeX文档中插入源代码</title><link>https://tonybai.com/2010/12/01/insert-source-code-into-tex-document/</link><pubDate>Wed, 01 Dec 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/12/01/insert-source-code-into-tex-document/</guid><description>近期有了在TeX文档中插入源代码的需要。TeX的\\verbatim可以帮助你保留输入text的原始格式，但用于输入源代码还是显得不够专业。Google了一下发现TeX中支持插入源代码的包也有不少，如LGrind、Listings等。LGrind似乎没有包含在TeX Live的默认安装包中，用apt-get尝试安装LGrind，发现居然要占用近200M的空间，遂放弃之，最后我选择了Listings...</description></item><item><title>尝试博客搬家</title><link>https://tonybai.com/2010/11/30/try-to-move-blog/</link><pubDate>Tue, 30 Nov 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/11/30/try-to-move-blog/</guid><description>早在若干年前就有朋友建议我搭建一个独立博客，可当时的我觉得blogbus提供的服务很不错，自己没有必要去折腾，费钱又费力，所以我选择了继续留在blogbus。 这两年blogbus服务一直在不断的提高，自己也一直很欣赏blogbus的简单、清新、无广告的风格，大巴后台管理中心的功能也变得越来越强大了。不过这期间blogbus也出现过几次较为严重的故障，导致长时间的无法提供服务。上周blogbus再...</description></item><item><title>给assert加上返回值，不给力！</title><link>https://tonybai.com/2010/11/24/it-is-not-gelivable-to-add-return-value-for-assert/</link><pubDate>Wed, 24 Nov 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/11/24/it-is-not-gelivable-to-add-return-value-for-assert/</guid><description>众所周知，assert是程序调试阶段的一柄利器，可以帮助程序员快速的定位代码问题。但一般来说当程序部署到生产环境的时候，我们会选择关闭assert。不过由于历史原因，我们运行在生产环境下的程序中的assert依旧发挥着作用，这样一把双刃剑就悬在了我们头上。 我们用的是自己的assert实现，这个实现没有C标准库中assert实现那么普适，不过可以满足我们自己需要的功能，它在运行时可以将断言失败信息...</description></item><item><title>有选择的保留遗留“惯例”</title><link>https://tonybai.com/2010/11/15/keep-legacy-conventions-selectively/</link><pubDate>Mon, 15 Nov 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/11/15/keep-legacy-conventions-selectively/</guid><description>在工作中，我们常常会听到这样的声音：“原来的系统就是这么做的！”。 没错儿，在工作中我们潜移默化地受到了遗留系统的一些设计和实现的“惯例”的影响，另外天生携带的懒惰基因使我们很少去思考和判断这些惯例的正确性和保留的必要性。但事实上，我们确应该经常重新审视这些遗留的“惯例”，有选择的保留，并敢于放弃。 每种“惯例”的引入和使用都是有其特定原因的：或是可以简化代码编写，或是便于代码跟踪，或是利于代码调...</description></item><item><title>《Programming in Haskell》中文版翻译项目</title><link>https://tonybai.com/2010/11/14/the-chinese-translation-project-for-programming-in-haskell/</link><pubDate>Sun, 14 Nov 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/11/14/the-chinese-translation-project-for-programming-in-haskell/</guid><description>_&amp;#34;A language that doesn&amp;#39;t affect the way you think about programming， is not worth knowing&amp;#34;._ — Alan Perlis(ACM 第一任主席，图灵奖得主，1922-1990) 《程序员修炼之道》这本书建议程序员每年应至少学习一门新的语言，以拓宽思维，避免墨守成规。今年我选择了函数式编程语言Haskell。...</description></item><item><title>一个制作朴素幻灯片的TeX模板</title><link>https://tonybai.com/2010/11/08/a-tex-template-for-making-plain-ppt/</link><pubDate>Mon, 08 Nov 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/11/08/a-tex-template-for-making-plain-ppt/</guid><description>自从有了For book的中文TeX模板后，我对TeX的热情便&amp;#34;继续&amp;#34;一发而不可收拾^\_^。上周原本计划为内部的一个交流准备一个PPT，但在开始构思之前却突然想到：是否可以使用TeX完成幻灯片制作呢？Google了一下，果然有成熟解决方案-使用BEAMER。 有了TeX基础后，学习使用Beamer构建幻灯片就显得容易了许多，用TeX创建幻灯片文档与编写普通文档差别并不大。TeX制作的幻灯片文档也...</description></item><item><title>一个基于XeTeX和xeCJK的TeX模板</title><link>https://tonybai.com/2010/11/02/a-tex-template-based-on-xetex-and-xecjk/</link><pubDate>Tue, 02 Nov 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/11/02/a-tex-template-based-on-xetex-and-xecjk/</guid><description>与&amp;#34;Hello World&amp;#34;作为编程入门时迈出的第一步相似，&amp;#34;Hello TeX&amp;#34;也只是学习博大精深的TeX的一块儿敲门砖，离真正的实用还差的远。 两周前开始体验TeX，直到今天才东拼西凑地倒腾出一个够自己使用的且相对实用的基于XeTeX和xeCJK的小模板。这里分享一下，希望能给大家带来一些帮助，同时对自己也算作是一个备忘。关于TeX网上资料很多，这个模板里的东西也都是参考和融会各种资料并试验后...</description></item><item><title>lcut增加对mock的支持</title><link>https://tonybai.com/2010/10/29/lcut-add-mock-support/</link><pubDate>Fri, 29 Oct 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/10/29/lcut-add-mock-support/</guid><description>记得恰好是在一个月前的今天，我发布了lcut(轻量级C语言单元测试框架)0.1.0版本 。由于发布仓促，文档没能及时跟上。在stackoverflow的一个关于单元测试的帖子 上，一位叫Craig McQueen的朋友也给出了建议：&amp;#34;Some documentation would be helpful. Project background and goals, a features list,...</description></item><item><title>关于Makefile.am中与Build相关的变量设置</title><link>https://tonybai.com/2010/10/26/about-variables-related-to-building-in-makefile-am/</link><pubDate>Tue, 26 Oct 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/10/26/about-variables-related-to-building-in-makefile-am/</guid><description>今天尝试使用autoconf和automake重新构建一个遗留库的Build环境。之前改造的lcut的目录结构还是相对简单，改造时并未遇到什么难题，不过今天就没那么幸运了，我在头文件目录包含设置这个看似简单的环节上遇到了一些小麻烦。 这个库结构其实也没那么复杂，只是源文件和头文件不在一个目录下罢了： testproj/     – Makefile.am     – configure.in   ...</description></item><item><title>由bool类型引发的一个问题</title><link>https://tonybai.com/2010/10/21/a-problem-caused-by-bool-type/</link><pubDate>Thu, 21 Oct 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/10/21/a-problem-caused-by-bool-type/</guid><description>C99 原生支持布尔类型，类型名字为\_Bool。对C程序员来说，这个名字有些“不伦不类”，还好一般C标准库 实现的头文件中都用宏bool来替代\_Bool。C99虽说是C语言当前的最新标准，但是它也有10年历史之久了。据说C1x标准 正在讨论制定中，有兴趣的朋友可以到标准C工作组 官方站点上去瞧瞧。 有些跑题了^\_^！其实这篇文章想说的不是C1x标准，而是一个与布尔类型有关的问题的分析解决过程...</description></item><item><title>你好，TeX</title><link>https://tonybai.com/2010/10/18/hello-tex/</link><pubDate>Mon, 18 Oct 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/10/18/hello-tex/</guid><description>由于某种原因，上周末开始学习使用TeX进行文档排版。哦，当然不是直接使用Donald Knuth他老人家设计的最原始的TeX命令。经过这么多年的发展，TeX领域早已出现了各种各样基于TeX开发的层次更高、易用性更好、更加让作者关注内容的好工具。在Ubuntu下，我选择了&amp;#34;TeX Live&amp;#34;。 周末的时间比较零碎(有了果果后，除了晚上外白天很难拿出一长段的时间钻研些东西了)，TeX Live安装和体...</description></item><item><title>从mock malloc说起</title><link>https://tonybai.com/2010/10/11/start-with-mock-malloc/</link><pubDate>Mon, 11 Oct 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/10/11/start-with-mock-malloc/</guid><description>上午对一段代码进行单元测试，由于需要用到mock，所以选择使用cmockery 作为Unit Testing框架(lcut还未提供mock功能)。测试代码里需要mock malloc以模拟分配内存失败的异常情况。 编写一个用例后，Build，提示出错：multiple definition of \`malloc&amp;#39;。经检查发现Makefile中定义mock malloc的那个目标文件(.o文件)居...</description></item><item><title>遭遇“死循环”</title><link>https://tonybai.com/2010/10/01/encounter-endless-loop/</link><pubDate>Fri, 01 Oct 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/10/01/encounter-endless-loop/</guid><description>昨天看了“外刊IT评论”上的一篇名为《软件编程21法则》的文章，文章中提到的一条法则是：“软件直到被变成产品运行至少6个月后，它最严重的问题才会被发现”，当时表示认同。不过仅仅相隔一天，这条法则就变成了眼前的现实。 今天上午我们的某版本系统在某省出现了故障，该版本在这个省上线恰好将近6个月^\_^，系统上线以来一直运行良好，直到这次故障。故障现象为&amp;#34;挂死&amp;#34;:所有进程都挂死在某一把锁的lock上。以...</description></item><item><title>发布一款轻量级C语言单元测试框架</title><link>https://tonybai.com/2010/09/30/opensource-a-lightweight-c-unit-test-framework/</link><pubDate>Thu, 30 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/30/opensource-a-lightweight-c-unit-test-framework/</guid><description>基于各种xUnit框架的单元测试早已不是什么新鲜玩意儿，不过在&amp;#34;古老&amp;#34;的C语言领域，还尚未有哪种框架可以成为“寡头”。 记得2005年末的时候，初出茅庐的我吸取xUnit的设计思想在业余时间编写了一个轻量级的C单元测试框架lcut(Lightweight C Unit Test framework)，当时还写了一篇文章《C单元测试包设计与实现》记录了最初的设计和实现思路。本打算将这个小工具在部门内...</description></item><item><title>Hello，autoconf和automake</title><link>https://tonybai.com/2010/09/26/hello-autoconf-and-automake/</link><pubDate>Sun, 26 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/26/hello-autoconf-and-automake/</guid><description>部门绝大多数的产品都运行在Sun的小型机上，底层的操作系统是Solaris。这两年公司开始主推刀片机(物美价廉^\_^)，不过刀片机上运行的也是Solaris 10 for x86版本。基于同种OS的前提下在Sparc和x86两种体系之间做移植比较简单，主要考虑字节序问题就可以了。不过对于可移植性的考虑不足还是让我们付出了较大的工作量。 在即将进行的新版本产品开发中，可移植性依旧没有被列入到必须要...</description></item><item><title>果果的百岁照</title><link>https://tonybai.com/2010/09/23/one-hundred-days-photos-of-my-daughter/</link><pubDate>Thu, 23 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/23/one-hundred-days-photos-of-my-daughter/</guid><description>&amp;#34;百岁照是一种民间传统，一种在小孩100天时候拍的照片，代表了人们对孩子的祈福，希望孩子能长命百岁。&amp;#34; — 百度百科 在果果103天的时候我和LP一起带着果果去拍了一套百岁照。拍摄的过程很“艰苦”^\_^:从上午9点一直持续到下午3点，其间果果睡了三次，哭了若干次，不过结果还是不错的，这不今天我和LP把照片取了回来。和我们那一代相比，现在的小孩子幸福多了。在我LP的钱包里放着我的一张儿时的照片，那...</description></item><item><title>做好个人代码备份与版本管理</title><link>https://tonybai.com/2010/09/19/personal-code-backup-and-revision-control/</link><pubDate>Sun, 19 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/19/personal-code-backup-and-revision-control/</guid><description>今天下午花了一个小时分别和两位同事做了一些代码讨论，这两位同事正在编写的代码都具有一定的试验性质(暂不能进入项目代码库)。这里不谈代码如何如何，而是就我发现的一个问题谈谈我的看法。 问题其实也很简单：那就是两位同事“不约而同”的都没有对这类试验性质的代码进行很好的备份和版本管理。 也许你看到这里会觉得这个芝麻粒儿大的问题不值得一提。没错，可能很多人都不以为然，不过有过以下经历的朋友们也许会与我产生...</description></item><item><title>经典设计原则背后的本质</title><link>https://tonybai.com/2010/09/17/the-nature-of-some-classical-design-rules/</link><pubDate>Fri, 17 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/17/the-nature-of-some-classical-design-rules/</guid><description>近一段时间重读了一些经典书籍，诸如《敏捷软件开发：原则、模式与实践》、 《程序员修炼之道》、《Unix编程艺术》等。这些书中关于如何衡量或评价一个类或函数设计好坏的几个原则(Principle)让人印象深刻。《敏捷软件开发》中谈到了SRP、OCP、DIP; 程序员修炼之道则以DRY、“正交性”为话题展开;《Unix编程艺术》围绕紧凑性、SPOT、分离等阐述作者立场。这么多经典原则，如何学习把握？我...</description></item><item><title>果果的第一张照片</title><link>https://tonybai.com/2010/09/13/the-first-photo-of-my-daughter/</link><pubDate>Mon, 13 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/13/the-first-photo-of-my-daughter/</guid><description>今天收到LP的一封题为“宝贝儿两天”的mail，mail里附了几张照片，遂打开瞧瞧，看看是谁家宝宝。照片里的宝宝给我的第一眼感觉是似曾相识，可再定睛观瞧：这不是我家果果吗！没错，就是我家果果。 果果出生后，我居然兴奋的忘记给果果拍照了，以至于现在我们连果果出生那天的照片都没有。这几张照片是LP的同事在果果出生后第二天来医院探望时拍下的，这居然是果果的第一张照片！果果长的真快，我都有点快认不出她当时...</description></item><item><title>使用Ubuntu文档模板</title><link>https://tonybai.com/2010/09/10/use-the-document-template-of-ubuntu/</link><pubDate>Fri, 10 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/10/use-the-document-template-of-ubuntu/</guid><description>每次安装Ubuntu后，主文件夹(你的$HOME目录)下都会默认建立起一些目录，诸如：下载、音乐、图片等，这些目录的用途通过其名字都可以猜个八九不离十，只有一个叫作“模板”的目录一直让我摸不到头脑。直到这次彻底迁移到Ubuntu，我才发现这个“模板”目录的妙用！ 平时工作中常常需要新建一些文档，以前用Windows时都会使用右键菜单，点击“新建”，然后选择不同的文档类型。但在Ubuntu上却发现右...</description></item><item><title>修改SVN中文件的可执行属性</title><link>https://tonybai.com/2010/09/08/modify-the-executable-property-of-files-in-svn-repository/</link><pubDate>Wed, 08 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/08/modify-the-executable-property-of-files-in-svn-repository/</guid><description>今天做了一些项目版本库的搭建工作，主要是将相关模块和库目录建立好，将Makefile编写好，并添加到SVN库中。 工作接近尾声时，无意中发现提交到SVN库中的文件居然都带着可执行权限(以下称x属性)，如： \-rwxr-xr-x  1 tonybai tonybai    203 2010-04-21 17:26 Makefile\* 这着实让人觉得别扭！Svn居然记录了文件的权限信息，至少我以前...</description></item><item><title>一个关于Vim扩展TAB键的问题</title><link>https://tonybai.com/2010/09/07/a-problem-about-vim-expand-tab/</link><pubDate>Tue, 07 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/07/a-problem-about-vim-expand-tab/</guid><description>今天遇到一个奇怪的问题：明明我在.vimrc中开启了expandtab选项，但是当我编辑Makefile文件时，敲入的TAB就是无法被VIM自动转换为四个空格(已经设置tabstop=4，shiftwidth=4)，通过&amp;#34;:set expandtab?&amp;#34;查看该选项值也居然是&amp;#34;noexpandtab&amp;#34;;编辑其他文件（如.c、.h文件甚至是无扩展名的文件)时expandtab却都是开启的，TAB也可被...</description></item><item><title>视警告为错误</title><link>https://tonybai.com/2010/09/05/view-warning-as-error/</link><pubDate>Sun, 05 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/05/view-warning-as-error/</guid><description>每当你Build Project代码的时候，如果看到的是满屏的Warning，那么提醒你小心了，不妨看看《高效程序员的45个习惯》中对Warning的态度和处理方式。该书中的第34个习惯讲的是“警告就是错误”！ 当然这个“习惯”所阐述的内容并不是这本书首创，在很多经典的传授编程之道的书中也都提到过。 将警告作为错误来处理，说起来容易，可作起来可并不那么简单。这不仅仅只是一个态度的问题，有时候还需要...</description></item><item><title>Ubuntu一周体验</title><link>https://tonybai.com/2010/09/04/one-week-experience-of-ubuntu/</link><pubDate>Sat, 04 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/04/one-week-experience-of-ubuntu/</guid><description>安装Ubuntu已有一周多，无论是在工作单位还是在家里，Ubuntu都作为我的第一OS，Win7基本上处于被打入“冷宫”状态。事实证明对我来说，Ubuntu完全可以取代Windows。 公司提供有线和无线网络两种接入方式，对于致力于追求“理想的无线世界”的我来说，无线接入是我的第一选择。公司的无线接入采用TTLS认证方式，在WinXP和Win7上都有相应的客户端(SecureW2)可供使用，但在U...</description></item><item><title>一次函数设计讨论</title><link>https://tonybai.com/2010/09/02/an-discussion-on-function-design/</link><pubDate>Thu, 02 Sep 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/09/02/an-discussion-on-function-design/</guid><description>近期在考虑对底层函数库进行一些重构，今天下午花了两个小时考量现有的函数库的接口设计，发现目前函数库的实现存在着一个普遍的问题：与特定的内存分配实现耦合的太紧。 我们的应用是多进程结构的，并使用了共享内存这种最快捷的IPC机制，鉴于此很多同事在实现一些数据结构或者算法时可能只考虑到了我们常见的应用场景-多进程共享，而对非共享内存分配的情况考虑不足。那如何将目前某些库函数实现与内存分配之间的强耦合解开...</description></item><item><title>Ubuntu扫盲</title><link>https://tonybai.com/2010/08/31/ubuntu-eliminate-illiteracy/</link><pubDate>Tue, 31 Aug 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/08/31/ubuntu-eliminate-illiteracy/</guid><description>今天下午例行项目例会，例会内容乏善可陈(但都还是比较重要的事情^\_^)，无非是跟踪进度、跟踪之前未解决的问题等。近几次的例会或技术交流会我都会给大家分享些东西，哪怕是告诉大家如何从C Shell迁移到更高效的Bash Shell这样的小事情。 这次给大家带来的是如何使用分支以及TiddlyWiki这款小工具。过程较为平淡，大家也基本以沉默为主，零星有几个问题提出。 尾声阶段，大家注意到了我刚刚用...</description></item><item><title>初用TiddlyWiki</title><link>https://tonybai.com/2010/08/30/learn-tiddlywiki/</link><pubDate>Mon, 30 Aug 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/08/30/learn-tiddlywiki/</guid><description>2008年末和一位同事在山西出差，发现那位同事在用TiddlyWiki写一些日记，那时候算是第一次知道TiddlyWiki，但不知是为什么，当时的我并没有被TiddlyWiki所吸引，也就失去了一次使用TiddlyWiki的机会。 近期新启动了一个产品版本的开发任务，该版本是对之前遗留系统版本的重构和优化，我们想趁此机会将梳理遗留系统时总结下来的东西以及一些新的设计想法记录下来，以便于后人参考并迅...</description></item><item><title>也谈使用分支</title><link>https://tonybai.com/2010/08/26/also-talk-about-branch/</link><pubDate>Thu, 26 Aug 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/08/26/also-talk-about-branch/</guid><description>近期在为一个新项目作版本库规划，并策划一些即将应用于该项目的版本控制和发布流程的Rules。借此机会我也花上一些时间对我们之前的版本控制和发布流程进行一下反思，也翻看了一些书籍(比如《版本控制之道-使用subversion》、社区自由图书《Subversion与版本控制》等)，了解一下Best Practice是什么样子的，同时也纠正一下我之前理解不正确的地方。 我们这些年来一直在使用CVS/Su...</description></item><item><title>彻底迁移到Ubuntu</title><link>https://tonybai.com/2010/08/25/move-to-ubuntu-thoroughly/</link><pubDate>Wed, 25 Aug 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/08/25/move-to-ubuntu-thoroughly/</guid><description>自从知道Ubuntu这个linux发行版后，就有了彻底迁移到Linux上的想法。但迫于各种各样的因素一直未能下定决心，这期间Ubuntu发行版已经从6.10进化到了10.04。经过长时间(近四年，时间长的的确有些夸张^\_^)的准备，再借着Ubuntu 10.04 LTS发布的东风， 我终于下决心彻底走进Ubuntu的世界。 安装Ubuntu对我来说已经是驾轻就熟的事情了，这里也没什么好说的。对我...</description></item><item><title>重新定制VIM</title><link>https://tonybai.com/2010/08/22/reconfigure-vim/</link><pubDate>Sun, 22 Aug 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/08/22/reconfigure-vim/</guid><description>这周五工作状态实在不好，也许是工作得有些疲劳的缘故。没有了心思工作，那莫不如利用这些时间读读书。在存储电子书的目录中左翻翻右看看，发现了那本久违了的中文版VIM手册，我决定索性打开温习一下，拣一拣那些已经生疏了的但却极其实用的命令。 下班前400多页的手册居然被我走马观花的浏览完了，其间将遇到的觉得实用的且以前不知道的或不常用的命令记录了下来，一共有50多项，其中不乏令我大呼过瘾的能显著提升工作效...</description></item><item><title>一周琐事</title><link>https://tonybai.com/2010/08/13/some-trifles-of-this-week/</link><pubDate>Fri, 13 Aug 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/08/13/some-trifles-of-this-week/</guid><description>刚刚在China-pub下了订单，买了三本口碑都不错的技术类书籍。之所以在China-pub买，这得益于豆瓣的购书单功能，经过购书单的比价发现China-pub的总价格最实惠。另外这笔交易成交后，我在China-pub的会员级别也将升到三星，到时候就有资格“淘二手书”了。 三本书中名气最大的应属Andrew Hunt和David Thomas于十年前合著的《程序员修炼之道》了，这本书的电子书我看过...</description></item><item><title>使用svn pre-commit hook</title><link>https://tonybai.com/2010/08/07/use-svn-pre-commit-hook/</link><pubDate>Sat, 07 Aug 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/08/07/use-svn-pre-commit-hook/</guid><description>一直以来我们对项目代码的提交管理都是粗放型的，即对大家提交代码的时间、频率和提交日志的形式都没有严格的要求，可谓比较随意。主要发现的问题包括： \- 某些提交没有规划，甚至随意增加一些并无太大意义的注释都作一次提交。 \- 提交的代码甚至没有经过REVIEW和UT，这样的代码即使内部发布，也会带来后续工作量的严重浪费（测试、发现问题、定位问题、重新fix、重新验证等）； \- 提交日志无实际意义，...</description></item><item><title>使用astyle美化代码</title><link>https://tonybai.com/2010/07/29/use-astyle-to-beautify-your-code/</link><pubDate>Thu, 29 Jul 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/07/29/use-astyle-to-beautify-your-code/</guid><description>昨天一位同事发了一篇小文档，文档中介绍了一种开源格式化代码的工具，名为Artistic Style(astyle)，功能看起来还是很不错的。之前我写代码时比较注意代码的风格，一直按照自己的思路来美化自己的代码，用的最多的辅助工具就是Vim自带的indent功能，对这之外的格式化工具少有涉猎。记得几年前部门曾推广一款名为checkstyle的Java代码格式规范检查工具，由于当时基本不接触Java，...</description></item><item><title>果果会翻身了</title><link>https://tonybai.com/2010/07/24/my-daughter-can-turn-over-in-bed/</link><pubDate>Sat, 24 Jul 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/07/24/my-daughter-can-turn-over-in-bed/</guid><description>果果，我宝宝的小名。之前我给宝宝起的诸多小名均被LP大人一一否决了。后来有一天下班回家，LP说给宝宝起了个小名，叫“果果”。我觉得还行，也就这样叫开了。后来看徐峥和王宝强主演的“人在囧途”，发现片中李成功的孩子小名也叫果果，也许只是巧合^\_^。 上个周末和部门同事一起到北戴河游玩，在旅游结束回城的路上收到了LP的短信，说是：果果会翻身了。看到短信后心里很是高兴，宝宝身体很结实，刚刚70多天就会翻...</description></item><item><title>阿根廷出局，世界杯结束！</title><link>https://tonybai.com/2010/07/04/agentina-out-my-worldcup-ends/</link><pubDate>Sun, 04 Jul 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/07/04/agentina-out-my-worldcup-ends/</guid><description>如发现本站页面被黑，比如：挂载广告、挖矿等恶意代码，请朋友们及时联系我。十分感谢！ 商务合作请联系bigwhite.cn AT aliyun.com 欢迎使用邮件订阅我的博客 输入邮箱订阅本站，只要有新文章发布，就会第一时间发送邮件通知你哦！ 名字： 邮箱: 这里是 Tony Bai的个人Blog，欢迎访问、订阅和留言！ 订阅Feed请点击上面图片。 如果您觉得这里的文章对您有帮助，请扫描上方二维...</description></item><item><title>阿根廷，继续前进！</title><link>https://tonybai.com/2010/06/29/agentina-come-on/</link><pubDate>Tue, 29 Jun 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/06/29/agentina-come-on/</guid><description>昨天凌晨阿根廷不出意料的3:1击败墨西哥队，墨西哥复仇的梦想彻底破灭！虽说比赛中因裁判误判出现了不和谐的场面，但是这个结果应该是两队真实实力的写照。墨西哥队现在的水平还不足以撼动拥有豪华前场阵容的阿根廷队。 这届世界杯“功利”盖过了“华丽”，阿根廷也不例外，3球的领先优势让阿根廷更多的投入精力组织防守，下半场老马也先后换下特维斯和迪马利亚两名进攻球员加强防守，墨西哥人也趁机围攻阿根廷球门，这也造成...</description></item><item><title>阿根廷出线，梅西小憾</title><link>https://tonybai.com/2010/06/17/agentina-foot-team-promote-from-group-match/</link><pubDate>Thu, 17 Jun 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/06/17/agentina-foot-team-promote-from-group-match/</guid><description>作为阿根廷球迷，等待阿根廷队比赛的这段时间是最难熬的，感觉时间过得咋这么慢，工作状态也难免受到影响，终于等到7点30比赛开始了。 本场比赛马大帅在阵容上仅用马克西替换了受伤的贝隆，不过战术上变化倒是很大，特别是梅西做出了很大牺牲，回撤中场较深，干脆就是一个中场球员，和马克西、马斯切拉诺共同做阿根廷的进攻组织工作。这应该是马大帅应对韩国人的一种战术变化。赛前韩国队就放话：要盯死梅西。而梅西后撤，吸引...</description></item><item><title>说说斗牛士首演被爆冷</title><link>https://tonybai.com/2010/06/17/spain-lose-the-first-match-of-2010-worldcup/</link><pubDate>Thu, 17 Jun 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/06/17/spain-lose-the-first-match-of-2010-worldcup/</guid><description>上次说过阿根廷队首场比赛之日才是我的南非世界杯开始之时，阿根廷是我的最爱，但是除了阿根廷我还关注两只球队，一个是巴西，另外一个就是西班牙。五星巴西，每一届世界杯的夺冠热门，无论其队中星光是否够亮，我们都应该关注它；巴萨是我最喜爱的俱乐部球队，而本届西班牙的就是以巴萨的人员作为班底构建的，特别是当比利亚转会巴萨后，西班牙三条线都是以巴萨的球员挑大梁的。 昨晚进行了本届世界杯首轮小组赛最后一个小组H组...</description></item><item><title>快乐的“阿根廷梅西”回来了！</title><link>https://tonybai.com/2010/06/13/the-happy-agentina-messi-return-back/</link><pubDate>Sun, 13 Jun 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/06/13/the-happy-agentina-messi-return-back/</guid><description>昨晚2010年南非世界杯B组焦点战潘帕斯雄鹰阿根廷队凭借老将海因策的头球小胜尼日利亚，取得开门红，作为阿迷的我来说，我的2010世界杯从这场比赛起才正式开始。 一场比赛的胜利完全不足以将阿根廷与夺冠联系在一起，阿根廷队还有很多问题亟待解决。从阿迷角度去看其实这场比赛更大的意义在于：我们收获了一个快乐的“阿根廷梅西”。这场比赛中那个在巴萨无所不能、进球如探囊取物的梅西似乎又出现了，梅西几乎参与了阿根...</description></item><item><title>最赏心悦目的中国武者形象</title><link>https://tonybai.com/2010/05/12/the-most-eyeable-image-of-chinese-warrior/</link><pubDate>Wed, 12 May 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/05/12/the-most-eyeable-image-of-chinese-warrior/</guid><description>甄子丹的《叶问2》在4月底在大陆上映了，片子我还没看，也无法给出什么具体的评价，不过其在满大街BUS站点广告板上贴出来的影片海报却让我甚是触动。 中国近代武者形象(无论是真实世界的还是电影中演绎的)成千上万，但是最赏心悦目的还是海报中的那个由甄子丹演绎的咏春大师叶问的形象 – 武之力、武之美、武之心，三者和谐统一，且具厚积而薄发之势。 叶问2电影海报 叶问2剧照</description></item><item><title>当爸爸了！</title><link>https://tonybai.com/2010/05/11/now-i-am-a-father/</link><pubDate>Tue, 11 May 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/05/11/now-i-am-a-father/</guid><description>十月等待，今朝得女；初为人父，甚是欣喜。 十个月之前，一次“意外”让LP怀了我们爱情的结晶，虽然尚未做好为人父母的准备，但是我们还是接受了她。十月怀胎期间，我们小心翼翼，精心呵护，定期产检，宝宝发育一切正常。 5月1日凌晨，老婆小便“见红”； 5月2日凌晨，老婆出现“假临产”症状（不规律宫缩）； 5月3日凌晨，老婆宫缩频度增加且稳定，疼痛感增强，已达到难忍的程度。2点左右穿好衣服带老婆去医院做内检...</description></item><item><title>五一逛北陵</title><link>https://tonybai.com/2010/05/01/a-tour-of-beiling-park-on-may-vacation/</link><pubDate>Sat, 01 May 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/05/01/a-tour-of-beiling-park-on-may-vacation/</guid><description>这一周过的有些“提心吊胆”，4月30日是LP的预产期，可是我们的宝贝并未如期而至（网上搜过，很多产妇都有过相同经历^\_^），甚至是没有哪怕一点点的产前迹象。无论是LP还是我都有些坐不住了。以前周数少，我们还未曾如此担心过，现在是越到收官阶段日子越难熬，特别是心理压力很大。我们都期望宝贝能自然顺产，剖宫产能不做就不做，后者对大人和小孩都是弊多利少。但是通过彩超结果来看，LP的胎盘已经成熟，我们都怕...</description></item><item><title>巴萨双杀皇马，憧憬卫冕</title><link>https://tonybai.com/2010/04/11/barca-expect-defend-the-championship/</link><pubDate>Sun, 11 Apr 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/04/11/barca-expect-defend-the-championship/</guid><description>今天凌晨2009-10赛季西班牙国家德比第二回合在皇家马德里主场伯纳乌上演，技高一筹的巴萨以2:0干净利落的赢得了这场关键战役。世界足球先生、金球先生、巴萨国王梅西继在欧冠四分之一决赛以一己之力击溃兵工厂阿森纳后，又在本场比赛中为巴萨先把头筹。这场比赛的胜利是巴萨整个团队的胜利，但是梅西绝对是这个团队中最最耀眼的那颗星。 梅西打入个人在国家德比中的第七粒进球 事实证明以这几批拉玛西亚青训营出产的巴...</description></item><item><title>慎用线程取消</title><link>https://tonybai.com/2010/04/09/be-careful-about-thread-cancellation/</link><pubDate>Fri, 09 Apr 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/04/09/be-careful-about-thread-cancellation/</guid><description>本周二，我们产品在某省的一个节点应用运行时出现了“死锁”情况，由于监控得力，我们在“死锁”后一分钟内就发现了这个情况，并及时重启了这个节点应用。由于是集群式系统，一个节点的故障对整个系统业务的运行几乎没造成什么影响。不过，这确是一个潜在的隐患。 经过对系统当时运行日志的分析，我们将问题锁定在“线程取消”这个机制的使用上。在“生产者-消费者”实现思路这篇文章中，我曾经提到过我们目前采用的一种通知机制...</description></item><item><title>Win7下招行专业版通讯问题解决</title><link>https://tonybai.com/2010/03/24/solve-the-problem-of-china-merchants-bank-professional-on-windows/</link><pubDate>Wed, 24 Mar 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/03/24/solve-the-problem-of-china-merchants-bank-professional-on-windows/</guid><description>昨天，也就是23号是我的信用卡还款日，由于新本子还没来得及安装招行个人网上银行专业版，我就计划回家后用家里的本子还款。到家后也没急着上网还款，待吃完晚饭后发现联通的网络居然上不去了。打客服电话报故障，但等到今天早晨起来也不见网络恢复，只好到公司再还了。 到了公司，安装招行专业版，然后准备恢复证书，居然发现网络不通；开始以为是公司代理设置的不正确，又反复调整了几次代理设置，甚至重启的本子也不见网络连...</description></item><item><title>梅西，我的神啊！</title><link>https://tonybai.com/2010/03/22/leomessi-my-god/</link><pubDate>Mon, 22 Mar 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/03/22/leomessi-my-god/</guid><description>公元前后，罗马暴政统治着地中海，在地中海沿岸人们交口相传着：“弥赛亚”将会降临拯救人世，这个传说传到了犹太人的耳朵里，他们在《圣经》中记录下来，后来将耶稣当作了“弥赛亚”。而在西班牙语里，“弥赛亚(Messiah)”的发音与梅西(Messi)是一摸一样的。     — 以上摘自网友们从圣经故事和希腊神话里得到的启发：他们发现梅西(Messi)其实还就是神的化身。 今天凌晨，梅西以神的化身降临萨拉戈...</description></item><item><title>工作装备更新了</title><link>https://tonybai.com/2010/03/20/upgrade-r51-to-thinkpad-x60/</link><pubDate>Sat, 20 Mar 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/03/20/upgrade-r51-to-thinkpad-x60/</guid><description>这里卖了个小关子，所谓工作装备就是指我的笔记本。 本周三伴随了我三年多的R系Thinkpad终于因显卡故障再也无法正常启动了，至于它是否就此光荣退役，那还要看设备修理部门同事是否能修好它。 我这边只能重新申请装备了。公司近两年采购的办公设备都是HP的，HP的东西质量如何想必大家通过今年央视的&amp;#34;3.15&amp;#34;晚会也都有所了解了，商用采购的设备质量也好不了哪去，黑屏、蓝屏、过热、烧主板的情况我从使用HP本...</description></item><item><title>也谈Configure脚本问题的解决</title><link>https://tonybai.com/2010/03/19/also-talk-about-solving-the-problem-of-configure-script/</link><pubDate>Fri, 19 Mar 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/03/19/also-talk-about-solving-the-problem-of-configure-script/</guid><description>开了一个下午的技术交流会，回到办公室时离下班时间已经不远，天气预报说今晚有暴雪，外面阴沉的天气似乎也证实了这一点。这时一个同事遇到了一个软件包编译的问题，一时无法解决，向我求助。 这是一个libmemcached的编译问题，我们用的是libmemcached 0.34版本，我的同事在PC Solaris上执行libmemcached的configure脚本时遇到如下错，Configure脚本提示：...</description></item><item><title>“MT710”请回了家</title><link>https://tonybai.com/2010/03/16/buy-moto-mt710/</link><pubDate>Tue, 16 Mar 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/03/16/buy-moto-mt710/</guid><description>近期中国移动推广3G业务普惠大众，推出多款3G定制机参加存话费增手机活动。先是一位同事存了一款多普达的强机，这让我心痒不已^\_^。但是Windows Mobile的系统我是不喜欢的。到辽宁移动网站上查看了一下参加活动的机型，发现了一款心仪的型号：摩托罗拉MT710，就是近期电视广告里频频曝光的那款黑红机，上周六我就迫不及待的到营业厅将这款强机请回了家。 MOTO的机子说实话不咋样，机子谈不上精致...</description></item><item><title>试用Libmemcached</title><link>https://tonybai.com/2010/03/15/try-libmemcached/</link><pubDate>Mon, 15 Mar 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/03/15/try-libmemcached/</guid><description>近期一直在做一个项目架构演化的讨论交流，为了解决产品中存在的某些问题，我们有意引入某种类Memcached的开源产品，但我们的应用场景并非经典Memcached的“Cache”场景，这里也不详述细节了，大致就是这么一件事儿。 我们的第一选择是日本小伙儿Mikio Hirabayashi实现的Tokyo Tyrant，主要基于三点原因： \-&amp;gt; 支持数据的持久化 \-&amp;gt; 快！（性能数据来自于网上的第...</description></item><item><title>HelloWorld.s</title><link>https://tonybai.com/2010/02/28/helloworld-in-assembly/</link><pubDate>Sun, 28 Feb 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/02/28/helloworld-in-assembly/</guid><description>都说汇编不易学习和使用，的确不假。自己自大学以来也曾多次尝试学习汇编，甚至大学时还有相应课时，但是自己对汇编依旧是浅尝辄止。工作后也少有使用，对汇编的认识也就停留在基础层面。汇编的学习与对计算机系统的理解是密不可分的。工作这些年也算是一直浸淫于系统层面，经过多本底层相关书籍的教诲以及工作中的实践，对计算机系统的理解就自然而然加深了。昨天下载了一本名为：“Professional Assembly ...</description></item><item><title>也谈指针运算</title><link>https://tonybai.com/2010/02/23/also-talk-about-pointer-arithmetics/</link><pubDate>Tue, 23 Feb 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/02/23/also-talk-about-pointer-arithmetics/</guid><description>指针在C语言中的位置这里就不多说了，这里说一下C的指针运算。指针运算一般针对的是同一连续内存块，不同内存块之间的指针运算无意义，甚至可能导致异常情况。 指针运算主要针对数组，常见的运算类型：+i, -i, ++, –以及 等。 我们以+i操作为例。运算时编译器需要知道一些必要的信息，比如p = p + 1操作时编译器需要知道这个运算后，p这个指针需要移动多少个字节，那这个信息哪里来呢，由指针p所指...</description></item><item><title>命令行选项解析-备忘</title><link>https://tonybai.com/2010/02/09/parse-command-line-options/</link><pubDate>Tue, 09 Feb 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/02/09/parse-command-line-options/</guid><description>翻看一本关于Shell方面的书，有一章节对命令行选项的讲解比较详细，这里总结了一下： 命令行选项分类： 1、无命令行选项(option) 如：mv file1 file2； 在命令后名显示增加一个&amp;#39;-&amp;#39;，也是一种显式无option的表达。比如：mv – file1 file2 2、有命令行选项，但无Option参数 如：rm -f file1 rm -f -r dir1 无参数的option可组合...</description></item><item><title>雨中游三坊七巷</title><link>https://tonybai.com/2010/02/04/a-tour-of-san-fang-qi-xiang-in-the-rain/</link><pubDate>Thu, 04 Feb 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/02/04/a-tour-of-san-fang-qi-xiang-in-the-rain/</guid><description>连续多个星期都没有休息了，身体倒还可以，但是心情却有些烦躁。恰好今天事情不多，就和领导请示了一下，和同事出去散散心。来福州多次了，每次都是在客户现场和酒店两点一线间忙碌，还从未有时间游览过福州的景点。因为只有一下午时间，所以我们选择了一条常规路线：三坊七巷 – 乌山。 近两天福州降温，外面温度也就10度左右，天上还飘着蒙蒙细雨，心想：雨中的古街也许更有魅力。我们住在桥南，坐77路公交到双抛桥车站下...</description></item><item><title>iterator的C实现</title><link>https://tonybai.com/2010/01/30/implement-iterator-in-c/</link><pubDate>Sat, 30 Jan 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/01/30/implement-iterator-in-c/</guid><description>这几天一直处于编码状态，也找回了一些对代码的良好感觉。 昨天晚上闲暇时翻阅“Head First设计模式”，当翻到迭代器模式时，突然有了想法：实现一个iterator。这几天编码时恰好也写了一个简单的带有遍历功能的小数据结构，不妨用iterator改造一下这个数据结构的遍历接口，看是否能成行。 迭代器模式较为简单，网上的文章也多得很，这里就不再贽述了，直接看实现思路和代码吧。 在迭代器模式中，有几...</description></item><item><title>人在福州，忙！</title><link>https://tonybai.com/2010/01/29/working-busy-at-fuzhou/</link><pubDate>Fri, 29 Jan 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/01/29/working-busy-at-fuzhou/</guid><description>掐指算来，这次在福州出差已有近三周多了，这期间经历了几次产品升级和测试，大家都变得疲惫不堪，最突出的表现就是精神头不再像刚来是那么足了，饭量开始减少，食欲下降，睡眠质量也下降了。 从这周开始这边的Team基本分成了两拨儿人，一拨儿人在客户现场驻守，协助解决产品运行中的问题，另一拨人则跟着我“宅”在酒店里进行新版本的开发和测试。说起来，大家在一个大屋子里办公还是很其乐融融的。由于一个新模块的开发，我...</description></item><item><title>逛台江步行街</title><link>https://tonybai.com/2010/01/17/shopping-at-taijiang-pedestrian-street/</link><pubDate>Sun, 17 Jan 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/01/17/shopping-at-taijiang-pedestrian-street/</guid><description>算起来这已经是我第三次到榕城了，不过这次待在这儿的时间可能会更长。 周三到这儿后就一直在客户现场做保障工作，每天工作10多个小时，大家都挺累的。周六下午大家休息差不多后就商量着出去转转。我们住在闽江大桥南侧的国谊酒店，江北不远处就是台江步行街-福州一条商业街，我们就将目的地定在了那。 走出酒店正门已是下午4点半，向北登上闽江大桥，边走边欣赏闽江的景致。北方人对南方的大江大河还是蛮有兴致的，每当有大...</description></item><item><title>闲话梅西百球</title><link>https://tonybai.com/2010/01/17/leomessi-one-hundred-goals-for-barca/</link><pubDate>Sun, 17 Jan 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/01/17/leomessi-one-hundred-goals-for-barca/</guid><description>在北京时间今天凌晨展开的2009-10赛季西甲联赛第18轮较量中，巴萨在诺坎普主场4:0痛宰死敌塞维利亚队，双料先生梅西打入其个人代表巴萨一线队在正式比赛中的第100个和第101个进球。梅西也因此成为巴萨历史上最年轻的百球先生，而完成这百粒入球梅西仅用了五年时间，这五年也是梅西以火箭速度成长的黄金五年。 西甲处子球 2005年的荷兰世青赛让世界球迷认识了一位年仅18岁的阿根廷小个子球员，他就是梅西...</description></item><item><title>T400终于到手了</title><link>https://tonybai.com/2010/01/10/thinkpad-t400-is-available/</link><pubDate>Sun, 10 Jan 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/01/10/thinkpad-t400-is-available/</guid><description>近期由于Blogbus被停止DNS解析，让我着实闹心了许久。曾经尝试了多种&amp;#34;招式&amp;#34;试图能进入BlogBus，比如使用OpenDNS、使用4624.info等，都不尽如人意，往往开始时还是可以访问到Bus的，但随着时间的推移，似乎也受到了影响，以至于后来就再也无法进入大巴了。今天直接采用了修改hosts文件的方式终于进来了，而且大部分功能都能使用，不过还是期望Blogbus能尽早恢复正常访问。 这周...</description></item><item><title>2010·做快乐的事</title><link>https://tonybai.com/2010/01/04/wish-to-do-happy-things-in-2010/</link><pubDate>Mon, 04 Jan 2010 00:00:00 +0800</pubDate><guid>https://tonybai.com/2010/01/04/wish-to-do-happy-things-in-2010/</guid><description>“征尘未洗又出发”！2010年的这个元旦假期我依旧是在忙碌和压力下度过的。元旦三天假期本来是计划静下心来好好回顾和总结一下2009的，但事与愿违。由于年前的最后一天，我们的产品因性能问题招致客户的不满，所以这几天一直在写问题报告和改进方案。节没过好，心情自然也就低落了一些。 2009年，总体来说是五味杂陈。对我来说，最大的一件快事莫过于结婚了。虽说2008年就和老婆将证书领到了手，但毕竟中国人更看...</description></item><item><title>平安夜“宅”在酒店</title><link>https://tonybai.com/2009/12/24/stay-in-hotel-on-christmas-eve/</link><pubDate>Thu, 24 Dec 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/12/24/stay-in-hotel-on-christmas-eve/</guid><description>这个平安夜，我是“宅”在福州的一个酒店内度过的。 中国人过平安夜好比美国人过春节，态度上虽谈不上有多么积极，但是随着全球化的影响^\_^，平安夜渐渐也让人们有了一种“合家团聚”的期盼。 和两个同事一起出差福州已近两周了，经历了三次产品升级的“折磨”，身心早已疲惫不堪，再加之北方人对福州当地的伙食甚是不适应，身体状况是每况愈下。因产品保障需要，笔记本常常是在待机状态下，放到枕头边的，这样一有问题，马...</description></item><item><title>梅西，2009世界足球先生</title><link>https://tonybai.com/2009/12/22/leomessi-fifa-world-player-of-2009/</link><pubDate>Tue, 22 Dec 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/12/22/leomessi-fifa-world-player-of-2009/</guid><description>在今天凌晨国际足联FIFA年度颁奖典礼上，2009欧洲金球奖得主梅西终于获得了“世界足球先生”大奖，为自己的2009年画上了一个完美的句号，同时梅西也完成了自己在2009年个人荣誉和俱乐部荣誉的大满贯。 梅西加冕2009FIFA先生 地球上最棒的足球运动员</description></item><item><title>巴萨，六冠王！</title><link>https://tonybai.com/2009/12/20/barca-historically-win-six-champions-in-one-season/</link><pubDate>Sun, 20 Dec 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/12/20/barca-historically-win-six-champions-in-one-season/</guid><description>不得不承认: 2009-10赛季西甲开赛以来我半夜爬起来看巴萨比赛的次数与2008-09赛季相比减少了许多，记得上一次爬起来看巴萨比赛还是本赛季的西班牙国家德比，而上一次亲眼见证巴萨夺冠的比赛还是更久以前的欧洲超级杯。昨天就知道周日凌晨有巴萨的世俱杯决赛，之前巴萨已经捧得五冠了，如果能拿下这场比赛，那巴萨将成为世界足球史上第一支全满贯的俱乐部球队。为了亲眼见证这一伟大纪录的诞生，我决定半夜爬起来看...</description></item><item><title>福州震感明显</title><link>https://tonybai.com/2009/12/19/feel-earthquake-obviously-at-fuzhou/</link><pubDate>Sat, 19 Dec 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/12/19/feel-earthquake-obviously-at-fuzhou/</guid><description>这周应客户要求到现场做产品新版本升级过程的支持工作，这次是我第二次来到榕城了。我们选择住在五四路附近的一家经济型酒店内，这里离福州分公司较近。昨晚产品第一次升级，在客户现场熬了一宿，今天上午8点多才回到酒店。工作了一宿，头昏脑胀的，洗漱完毕后倒在床上便睡，这一觉一直持续到下午3点，就再也睡不着了。由于隔天还有一次升级操作，所以起床后做些升级前的准备工作。晚饭后躺在床上看电视消遣，晚上9点多，我正在...</description></item><item><title>睡了十二个小时</title><link>https://tonybai.com/2009/12/13/sleep-for-12-hours/</link><pubDate>Sun, 13 Dec 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/12/13/sleep-for-12-hours/</guid><description>早上起床，看时间已是7点半，这一觉竟整整睡了12个小时，记忆中还未曾睡过如此的长觉。 这一周一直在郑州出差，原计划是给客户做三天的培训，不料中途却发生些事故，培训的效果打了折扣，同时也延迟了返程的时间。在客户现场，压力大自不必说，又逢事故，正迎合了那句古语：”屋漏偏逢连阴雨”。于是乎身心受累，自然也得不到很好的休息。 回来的前一天偶感呼吸不畅，肺部不适，伴有咳嗽，似乎有感冒的迹象，返程的那天病情有...</description></item><item><title>今年金球奖属于梅西</title><link>https://tonybai.com/2009/12/01/leomessi-win-ballon-dor/</link><pubDate>Tue, 01 Dec 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/12/01/leomessi-win-ballon-dor/</guid><description>今天上午在公车上收到一则手机报-体育新闻：“巴萨球星梅西获得2009年欧洲金球奖！”，虽然作为梅西球迷的我早已猜到梅西会获得这份荣誉，但是当梅西真正拿到金球奖的时刻，我的心里还是充满了喜悦。 《法国足球》杂志创立的金球奖在1995年改制后已经成为了表彰世界最优秀足球运动员的最权威奖项，金球奖也是每一名足球运动员在职业生涯全力奋斗的目标。梅西在2007和2008年先后与金球奖失之交臂后，终于在今年凭...</description></item><item><title>Thunderbird跨平台共享邮件设置</title><link>https://tonybai.com/2009/11/20/cross-platform-configuration-of-thunderbird/</link><pubDate>Fri, 20 Nov 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/11/20/cross-platform-configuration-of-thunderbird/</guid><description>对于我个人来说，将工作环境切换到Ubuntu上来有几个“坎儿”要迈过，其中最为迫切的一个就是Mail如何在Windows和Linux下共享的问题，今天我找到了解决方法。 Thunderbird和Firefox一样，都来自Mozilla组织。和Outlook等软件不同的是，Thunderbird是可以跨平台的，更有甚者，Thunderbird可以帮助我们在Windows和Linux共享邮件，当然需要...</description></item><item><title>升级到Ubuntu 9.10</title><link>https://tonybai.com/2009/11/16/upgrade-to-ubuntu-9-10/</link><pubDate>Mon, 16 Nov 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/11/16/upgrade-to-ubuntu-9-10/</guid><description>Ubuntu 9.10版本在10月29日发布，虽然没有太多吸引我的地方，但是看了网上很多关于Ubuntu 9.10的文章后，心里面还是痒痒的，终于在上周五我用午间休息时间完成了Ubuntu 9.10版本的安装。 光盘是让同事帮我下载并刻录的，安装过程和以前没什么两样，由于本本中已经有了9.04版本，直接插入光盘升级安装就可以了。大约40分钟后，安装完毕，重启进入Ubuntu 9.10。首先感受到的...</description></item><item><title>梅西版狮子吼</title><link>https://tonybai.com/2009/11/15/lion-roaring-of-leo-messi/</link><pubDate>Sun, 15 Nov 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/11/15/lion-roaring-of-leo-messi/</guid><description>梅西版狮子吼 图片中梅西的狮子吼功夫似曾相识，对了，那应该是N多年前的一张图片了，那张图片的主人公是另外一位我最喜欢的阿根廷球星，外号战神的巴蒂斯图塔，同样是身穿阿根廷蓝白杉，同样留着短发（因国家队主教练不允许留长发），同样是进球后的激情怒吼。很遗憾，那张照片暂时没能找到。 今晨踉踉跄跄地以南美区第四名闯入2010年南非世界杯的阿根廷队应邀在客场与西班牙队进行一场友谊赛。不出所料，阿根廷输了，输得...</description></item><item><title>大雪下，路漫漫</title><link>https://tonybai.com/2009/11/13/heavy-snow-and-long-journey/</link><pubDate>Fri, 13 Nov 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/11/13/heavy-snow-and-long-journey/</guid><description>清晨拉开窗帘，外面已是白茫茫一片，漫天飞舞的已经从昨晚的雪粒变成了一片片大大的雪花了。小区里的积雪已经有了一定的厚度，这让人不禁想起了2007年元宵节那次暴雪经历。这是今年沈城的第二场雪了，第一场雪我没有赶上，那时我恰好远在福州。 沈城是从昨天下午开始降雪的，在那之前中原地区（河北、山西等）已经被几十年不遇的大雪折腾了够呛。虽说省气象中心早已发布了大雪暴雪警报，但是大雪到来时大家仍准备不足。在昨晚...</description></item><item><title>这下桌面干净了</title><link>https://tonybai.com/2009/11/09/clean-my-desktop/</link><pubDate>Mon, 09 Nov 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/11/09/clean-my-desktop/</guid><description>我有一个不算是很好的习好，那就是喜欢将物品摆放在面上，而不喜欢将物品收纳到很隐蔽的箱子或柜子里，这样我就能直接看得到，摸得到，用的时候直接取之。如果你到我家里，你就会发现桌子上、茶几上、床上、沙发上到处平铺堆放着物品：衣服、食品、书等。LP很讨厌我乱放东西，尤其是书（喜欢买纸板书，书也就多了起来），每天转圈的收拾（或指挥我收拾^\_^），可以过了一段时间后，就又如初了。这个习好也直接延伸到了我的电...</description></item><item><title>一个Solaris x86平台64位编译的问题</title><link>https://tonybai.com/2009/11/05/a-64bit-compiling-problem-on-x86-solaris/</link><pubDate>Thu, 05 Nov 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/11/05/a-64bit-compiling-problem-on-x86-solaris/</guid><description>上午在做一个Solaris 10 on x86代码移植测试过程中，发现一个Gcc编译问题，这里记录下来以作备忘。 我们的代码在一台安装了Solaris 10 for x86平台的机器A上进行64位编译(gcc -m64)时报错，错误信息如下： &amp;#34;xx.c:1: sorry, unimplemented: 64-bit mode not compiled in&amp;#34;。 而奇怪的是在另外一台同为Solar...</description></item><item><title>使用iconv做内码转换</title><link>https://tonybai.com/2009/10/31/internal-code-transform-by-iconv/</link><pubDate>Sat, 31 Oct 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/10/31/internal-code-transform-by-iconv/</guid><description>前不久某南方省份的客户反馈说我们的产品对某些生僻字(如“赟”)的转码支持的不好，终端收到后无法显示这个字。 经分析，发现类似“赟”这样的字在GB2312编码标准中并未收录，要想支持这样的生僻字的内码转换需要产品支持目前最新的中文编码标准GB18030。而我们的产品在诞生到现在就一直只支持GB2312，这就是导致这一问题的直接原因。 产品以前的代码库中内码转换的接口都是自己实现的，仅支持GB2312...</description></item><item><title>说书单2009.10.28</title><link>https://tonybai.com/2009/10/28/booklist-2009-10-28/</link><pubDate>Wed, 28 Oct 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/10/28/booklist-2009-10-28/</guid><description>十月以来，自已通过网购或换购还真收了不少书，这里说说： 国内关于伟大领袖毛主席的传记实在让我无法提起兴致，但哈佛大学教授Ross Terrill的《毛泽东传》我早在其出版时就关注过，它可以让我弄清楚毛主席在一个西方人眼中的事实形象。昨天偶然发现该书在卓越网的卖价居然比其他网店（诸如当当网）便宜近十元，这个“便宜”怎能不捡^\_^，遂在昨天下了订单。今天再一看卓越的定价居然涨到了35.8元，涨了仅5...</description></item><item><title>榕城走一回</title><link>https://tonybai.com/2009/10/24/a-trip-to-fuzhou/</link><pubDate>Sat, 24 Oct 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/10/24/a-trip-to-fuzhou/</guid><description>应客户之邀，本周一到福州做业务需求调研，周三返回沈阳。 以前从未去过榕城福州，领导下达调研任务时已是上周五。时间比较仓促，而且要求周一上午务必到达福州，因为客户方领导都较忙，也只有在周一才有机会见到客户领导。 安抚了LP后，周日下午我背上本子，带了几件随身衣物，就匆忙赶往机场。从沈阳出发到福州的航班都是有经停的，而且多是厦航、川航这样的小航空公司。为了能多陪LP一会儿，我选择了起飞较晚的航班，计划...</description></item><item><title>Review Board中文支持</title><link>https://tonybai.com/2009/10/05/chinese-support-for-review-board/</link><pubDate>Mon, 05 Oct 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/10/05/chinese-support-for-review-board/</guid><description>Review Board安装成功至今已半月有余，这期间我一直在试用它，虽欣喜于其提供的强大的功能，但还是有若干使用中的问题一直让我头痛不已，同时也阻碍了在部门推广该工具的进程。 首当其冲的就是对中文的支持问题。按照默认的步骤安装和配置后， 输入和保存英文均没有问题，但是一旦输入中文，保存后页面显示的都是乱码，甚至某些时候在保存中文数据时Review Board还提示错误。我的 Ubuntu的loc...</description></item><item><title>这个十一没回家</title><link>https://tonybai.com/2009/10/02/not-visit-parents-during-this-golden-vacation/</link><pubDate>Fri, 02 Oct 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/10/02/not-visit-parents-during-this-golden-vacation/</guid><description>以往每逢重要节假日，我一般都会回到老家看望父母和亲戚朋友。不过这个十一因工作和其他一些原因，我决定不回家了。八天长假确也不短，事先也做了一些计划和准备。 这个十一是祖国六十周年的生日，国家将举行盛大的庆典，所以十月一日这天我和LP选择在家里守在电视旁，看庆典、看阅兵、看游行。自从1999年第一次看国庆庆典以来，一晃已是十年，不禁感叹一下时光荏苒、岁月如梭啊。中国已经有了多次组织大型庆典活动的经验了...</description></item><item><title>也谈VIM字符集编码设置</title><link>https://tonybai.com/2009/09/28/also-talk-about-vim-charset-configuration/</link><pubDate>Mon, 28 Sep 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/09/28/also-talk-about-vim-charset-configuration/</guid><description>安装完中文语言包支持后，Ubuntu的默认locale是zh\_CN.UTF-8(即简体中文语言环境，字符集内码UTF-8)。这与我们日常开发环境中Unix设定的环境有所区别，我们日常使用的环境一般为zh\_CN.GBK或zh。我们的源代码文件的字符编码也都是GBK的编码，直接在Ubuntu下用默认设置的VIM打开后，中文的注释会显示乱码。如果你直接编辑这个文件并提交，那么其他在Unix下开发的同...</description></item><item><title>“找回”自己的密码</title><link>https://tonybai.com/2009/09/23/my-password-get-back/</link><pubDate>Wed, 23 Sep 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/09/23/my-password-get-back/</guid><description>继续昨天的情况道来。话说昨天因瞬时“失忆”，导致将公司办公账户的密码忘记了。这给工作带来的不便是我没有想到的。今天一上班就询问秘书密码重置的进度，得到的回复是已经发给公司HR并催促多次了。但是直到近中午也未曾收到密码重置的通知，耐不住性子的我终于决定亲自跟踪这件事，电话直接打到HR部门负责此事的专员那，结果无人接听，一连多次，估计是那个同事不在Office。遂直接拨打公司IT服务部门的电话，说明了...</description></item><item><title>瞬时“失忆”，密码忘记</title><link>https://tonybai.com/2009/09/22/forget-the-password-of-mailbox/</link><pubDate>Tue, 22 Sep 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/09/22/forget-the-password-of-mailbox/</guid><description>密码这东西在信息化的今天真是很重要，估计大家一张口就能说出5个以上使用密码的地方：登录网银、上淘宝、上亚马逊购书、写博客、登录Gmail等等。平时在公司，我的mail就是我的ID，公司所有内部网络服务都需要使用这个ID登录，甚至包括内部无线网络也是如此，所以在公司办公，内部mail账户和密码很重要。 公司为了加强信息安全管理，要求每位员工的密码都要符合SOX规范，而且要每隔若干个月就要对密码做一次...</description></item><item><title>Firefox变身Vim</title><link>https://tonybai.com/2009/09/20/vimperator-plugin-for-firefox/</link><pubDate>Sun, 20 Sep 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/09/20/vimperator-plugin-for-firefox/</guid><description>在&amp;#39;IDEAL Garden&amp;#39;上看到作者在文章中提到一个名为Vimperator的FireFox插件，该插件功能甚是强大，可以让你以Vim的操作方式来使用Firefox，对于我这个天天都用Vim写代码的人来说，Vimperator可谓有非凡的吸引力，它可以让你的手指留在键盘上。 安装Vimperator这个插件仅需十几秒的时间，重启Firefox后你就可以以Vim的操作方式来尽情操作Firefox...</description></item><item><title>Review Board安装和配置札记</title><link>https://tonybai.com/2009/09/19/review-board-installation-and-configuration/</link><pubDate>Sat, 19 Sep 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/09/19/review-board-installation-and-configuration/</guid><description>目前部门还没有采用Pair Programming那种时时刻刻都在review代码的工作方式，代码Review多采用走查方式，即代码写完后召开一个Code Review的Meeting，集中时间和经验丰富的人力对重点代码进行筛查，这种方式的代码Review有利，但也有弊。其弊端在于低效和覆盖面小。做一次走查需要N多人参与若干个小时，而在这段时间里不是每个参与者都能极其高效的参与到走查中的，实践证明...</description></item><item><title>充实的一周</title><link>https://tonybai.com/2009/09/18/this-week-is-fully/</link><pubDate>Fri, 18 Sep 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/09/18/this-week-is-fully/</guid><description>六十年之国庆日即将到来，对我们来说也算是个“利好消息”，因为这段时间里来自客户方面压力会减小不少，我们可以更多的做回自己-静下来做一些想做的、该做的事情。 上周末重温了一遍李开复的《做最好的自己》，三年前从书市买下了这本书，但仅仅翻了前三章后就将之束之高阁了。三年后的今天再次完整的阅读这本书，也许是工作的年头多了，关于理想、学习和沟通等方面的共鸣和感悟也就多了些。最欣赏书中引用《读者》中的那一段话...</description></item><item><title>Solaris 10安装二三事</title><link>https://tonybai.com/2009/09/10/something-about-installing-solaris-10/</link><pubDate>Thu, 10 Sep 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/09/10/something-about-installing-solaris-10/</guid><description>部门服务器资源向来都比较紧张，每当忙碌季节到来，服务器资源消耗都较大，开发人员总是抱怨编辑代码慢、Build慢以及磁盘空间不足等问题，严重时甚至无法工作。部门也一直在尝试改善这个问题，无非加服务器、加磁盘等，但是这些措施似乎都难以满足开发和测试人员日益增长的对服务器资源的索求。 为了尽量在组内杜绝上述现象的发生，决定搭建多台PC Server给组内开发人员使用，让大家工作的更有效率，更独立自由，不...</description></item><item><title>Bash文件描述符重定向符号的另类理解</title><link>https://tonybai.com/2009/09/08/the-alternative-understanding-on-file-descriptor-redirection/</link><pubDate>Tue, 08 Sep 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/09/08/the-alternative-understanding-on-file-descriptor-redirection/</guid><description>在Unix平台工作的人都使用过Shell的重定向功能，多数人接触较多的是简单的重定向，比如： cmd &amp;gt; some\_file 将cmd命令的标准输出重定向到some\_file中 cmd &amp;amp;1 1&amp;gt;build.log”为例，看起来挺头疼，符号增多了，加了一个&amp;#39;&amp;amp;&amp;#39;这个符号，有些晕。不能看表面，我们要看原理：打开“Unix环境高级编程(APUE)”中关于文件内核数据结构的说明，回顾一下，再对应上面...</description></item><item><title>手机做MODEM实现无线上网</title><link>https://tonybai.com/2009/08/30/make-pc-surfing-the-internet-through-mobile-phone/</link><pubDate>Sun, 30 Aug 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/08/30/make-pc-surfing-the-internet-through-mobile-phone/</guid><description>前不久和一位售前同事到北京出差，途中在动车上看到他把本子连到Nokia手机上并通过手机上网。现如今通过手机上网也不是什么新鲜事，关键看是否需要。平时上班有公司网络，下班家里有宽带，路途中可通过手机直接浏览WAP站点，所以对于我这样的开发人员而言倒是没有特别充分的让本子通过做MODEM的手机上网的需求。 公司信息安全改造屏蔽了外部的许多站点，其中包括BLOGBUS，而且目前BUS不支持WAP浏览。这...</description></item><item><title>cmockery支持mock输出参数</title><link>https://tonybai.com/2009/08/26/cmockery-support-mocking-out-parameter/</link><pubDate>Wed, 26 Aug 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/08/26/cmockery-support-mocking-out-parameter/</guid><description>近两天一有空就会去看看项目代码，思考一下如何利用cmockery对项目里已有的代码进行测试。项目代码中很多被调用的接口都带有输出参数，而且在这些接口中多利用返回值指示执行成败也否，而利用输出参数返回一些关键结果，这些结果值甚至影响着后续的函数执行流程。前期研究cmockery时没有注意到cmockery是否可以设置被mock接口的输出参数的值，不过回顾了一下cmockery实现的原理，觉得cmoc...</description></item><item><title>C单元测试之使用cmockery</title><link>https://tonybai.com/2009/08/22/introduce-cmockery-for-c-unit-test/</link><pubDate>Sat, 22 Aug 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/08/22/introduce-cmockery-for-c-unit-test/</guid><description>这么久以来一直没有找到一款很好的支持mock测试的C语言单元测试工具包，但前不久在一网友的评论中得知：去年Google曾发布了一款c语言的轻量级单元测试framework — “cmockery”，cmcokery很小巧，对其他开源包没有依赖，对被测试代码侵入性小；它支持mock test，同样也可以支持常规的单元测试。 之前在博客中曾描述过C语言实现mock的一个思路，不过和cmockery对比...</description></item><item><title>分享一个Oracle OCI库的BUG</title><link>https://tonybai.com/2009/07/31/a-bug-of-oracle-oci-lib/</link><pubDate>Fri, 31 Jul 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/07/31/a-bug-of-oracle-oci-lib/</guid><description>上周测试组反馈在一台HP X86-64主机Solaris 10 for X86环境下部署的应用无法连接Oracle数据库，错误码ORA-12154。而另外一个产品的部署在这台主机上的应用却能正常连接到数据库。本周安排专人对该问题进行查找，在先后排除了用户环境设置、Oracle数据库服务端等问题后，我们最终把目光集中在了Oracle客户端的OCI库上。 定位过程如下： 1、SQLPLUS可以访问数据...</description></item><item><title>周末“捉虫”记</title><link>https://tonybai.com/2009/07/18/debugging-notes-at-weekends/</link><pubDate>Sat, 18 Jul 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/07/18/debugging-notes-at-weekends/</guid><description>周六，对于上班族来说是多么好的日子，能在家里享受自由的无拘无束的生活而且不用担心第二天的工作，应该说是一周中最没有压力的一天。六点半起床，慢慢喝下一杯225ml左右的凉白开（保健医生说20-25摄氏度的凉白开比较适宜作为起床后的第一杯水），套上运动短裤和上衣，打开MP3播放器，塞上耳机，出门在园区内慢跑。昨晚下了一场雨，所以园区早上的空气很好。耳畔酷玩乐队的“Viva La Vida”让我跑起来很...</description></item><item><title>体检·SSH·Safari4</title><link>https://tonybai.com/2009/07/17/physical-examination-and-ssh-and-safari4/</link><pubDate>Fri, 17 Jul 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/07/17/physical-examination-and-ssh-and-safari4/</guid><description>一年一度的公司福利体检结果刚刚出炉不久，与去年相比，我今年身体状况有些“不妙”：体重超重、血压有些偏高，另外谷丙转氨酶也略高于正常值。今天中午公司委托体检机构安排一名老医生给我们说说体检结果。老医生针对从全体员工体检结果中统计出的TOP3问题状况给出了具体的讲解和预防/缓解措施。这三个常见身体状况是：超重/肥胖、高血脂/血糖和脂肪肝，相信不仅我们公司的员工有这些问题，大多数做IT的人都或多或少有类...</description></item><item><title>“牢骚”几句</title><link>https://tonybai.com/2009/07/12/some-complaints/</link><pubDate>Sun, 12 Jul 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/07/12/some-complaints/</guid><description>饭否无法访问，Twitter也无法访问，不知道是否是被GOV和谐了，弄得我想“牢骚”几句都没有地方。 下午在家里“关门闭户”独自一人通过家庭影院重温了2007年上映的真人版“Transformers”以及一张花絮盘。虽然这部片子看过多次了，但是今天看起来依旧还是那么“起劲儿”。从花絮里看到了幕后电影制作人员努力和智慧，要知道仅仅一个擎天柱身上的零件就达到了10000多个，而且制作人员为了提高逼真度...</description></item><item><title>家中新绿</title><link>https://tonybai.com/2009/07/04/a-hint-of-green-appear-in-house/</link><pubDate>Sat, 04 Jul 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/07/04/a-hint-of-green-appear-in-house/</guid><description>我们俩都不敢养真花，原因只有一个：怕养不活。但是上周还是没能抑制住心底对绿色植物的喜爱，用“不菲价格”购入了两盆“大家伙”。 花匠称其中的一盆花为“香牡丹”，我在网上搜了半天也没找到“香牡丹”这种花；还是LP发现这盆花与一种叫“栀子花”的形神俱似，而且查了一下栀子花的资料，发现栀子花又名“木丹”，“牡丹” vs. “木丹”，发音也接近^\_^，姑且把它看作是小叶栀子花吧。这种花最大的特点就是“香”...</description></item><item><title>成都行记</title><link>https://tonybai.com/2009/07/02/the-tour-of-chengdu/</link><pubDate>Thu, 02 Jul 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/07/02/the-tour-of-chengdu/</guid><description>去九寨的必经路之一就是成都。公司在成都有分舵，位于风景秀丽的青城山上，但5.12地震时青城山毁坏严重，公司也受到了不小的损失。公司总部这边的很多人到过成都出差，凡去多的人都说成都不错：东西不贵，生活节奏慢，是个宜居城市。 乘国航班机从沈阳飞往成都，途中遇到气流较多，飞机颠簸的较为厉害，那些日子恰逢法航的空难震惊世界，心中恐惧不免油然而生，只能加大耳机的音量麻痹自己的恐惧神经^\_^。还好，飞机有惊...</description></item><item><title>走进九寨</title><link>https://tonybai.com/2009/06/24/the-tour-of-jiuzhaigou/</link><pubDate>Wed, 24 Jun 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/06/24/the-tour-of-jiuzhaigou/</guid><description>工作这几年去过全国很多地方，名山秀水也见识了不少，但是心底依然时常涌动着一种向往，那就是到九寨沟看看。九寨沟之美想必大家也都有所耳闻，但耳闻不如亲历。这不我终于有机会达成这一夙愿了：和LP一起走进童话世界-九寨沟。 九寨风光，美在秋冬之际。红黄蓝绿四种颜色交相辉映，那才是真正的童话般的世界，如果你有幸再遇到一场白雪，那景色将不能不说是上天的恩赐。而六月份九寨的美则打了一些折扣，原因有二：颜色少+水...</description></item><item><title>巴萨问鼎欧冠，梅西引领“梦三”</title><link>https://tonybai.com/2009/05/28/barca-win-the-champion-league/</link><pubDate>Thu, 28 May 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/05/28/barca-win-the-champion-league/</guid><description>巴塞罗那队 vs. 曼彻斯特联队，这绝对是一场世界足球公认的巅峰对决： 1、它是西甲冠军与英超冠军的对决； 2、它是艺术足球与实用足球风格的对决； 3、它是梅西与C.罗之间为争取个人最高荣誉的对决； 4、它也是“菜鸟少帅”瓜迪奥拉与“大虾老爵爷”弗格森之间的首次对决。 对于两只球队来说，本场比赛也必将是一场“刷数据”的较量，曼联若获胜将成为冠军杯改制以来首个卫冕成功的球队，并成为史上第一个“五冠王...</description></item><item><title>手绘</title><link>https://tonybai.com/2009/05/20/hand-painted/</link><pubDate>Wed, 20 May 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/05/20/hand-painted/</guid><description>如发现本站页面被黑，比如：挂载广告、挖矿等恶意代码，请朋友们及时联系我。十分感谢！ 商务合作请联系bigwhite.cn AT aliyun.com 欢迎使用邮件订阅我的博客 输入邮箱订阅本站，只要有新文章发布，就会第一时间发送邮件通知你哦！ 名字： 邮箱: 这里是 Tony Bai的个人Blog，欢迎访问、订阅和留言！ 订阅Feed请点击上面图片。 如果您觉得这里的文章对您有帮助，请扫描上方二维...</description></item><item><title>对着电脑发呆</title><link>https://tonybai.com/2009/05/06/sit-in-front-of-the-pc-and-do-nothing/</link><pubDate>Wed, 06 May 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/05/06/sit-in-front-of-the-pc-and-do-nothing/</guid><description>突然觉得最近自己对着电脑发呆的时间变长了，面对着笔记本屏幕，时常是大脑变得空白，不愿去想工作上的事情，上网也提不起兴趣，想写文章又不知从何下笔，旁边厚厚的一摞技术书籍也懒得去翻看，每天都觉得很累，晚饭后总想去用睡眠来麻醉自己，真怀疑自己是不是有了心理问题。回过头来再想想这应该不是一个偶然的现象，而是一种积蓄了很久的情绪的爆发。 自己工作时间也不算短了，按理说自己的发展曲线还算是不错的，但是近来我却...</description></item><item><title>网上淘二手书</title><link>https://tonybai.com/2009/04/21/buy-second-hand-books-on-the-internet/</link><pubDate>Tue, 21 Apr 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/04/21/buy-second-hand-books-on-the-internet/</guid><description>计算机类图书&amp;#34;贵&amp;#34;就一个字，而且计算机领域知识更新快、新书迭出；程序员们为了跟上知识更新的步伐，不得不花上大把银子采购图书，久而久之，哪个程序员的家里没有几箱子书呢^\_^。以前我买书的哲学也是非新书不买，但自从同事告诉我互动出版网有&amp;#34;二手书&amp;#34;可淘之后，我就渐渐喜欢上网上淘二手书了。 China-pub上所谓的&amp;#34;二手书&amp;#34;，实际上和新书也没差多少，基本都在9成新，有些书可以说还是“崭新”的，但是这些...</description></item><item><title>简说GLIBC strncpy实现</title><link>https://tonybai.com/2009/04/15/glibc-strncpy-source-analysis/</link><pubDate>Wed, 15 Apr 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/04/15/glibc-strncpy-source-analysis/</guid><description>比较以下两组代码，你认为哪组运行的更快些呢？ Example1：         int n   = 100;         int n4  = n &amp;gt;&amp;gt; 2;         int i   = 0; int a\[100\]; for (i = 0; i = 4)         {                 size\_t n4 = n &amp;gt;&amp;gt; 2; /\* n4 = n / 4， n...</description></item><item><title>GLIBC strlen源代码分析</title><link>https://tonybai.com/2009/04/11/glibc-strlen-source-analysis/</link><pubDate>Sat, 11 Apr 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/04/11/glibc-strlen-source-analysis/</guid><description>直接操作C标准库提供的字符串操作函数是有一定风险的，稍有不慎就会导致内存问题。这周用业余时间写了一个小型的安全字符串操作库，但是测试之后才发现自己的实现有很大的性能缺陷。 在Solaris上初步做了一个简单的性能比对，以下是得到的性能数据(以strlen的数据为例)： 当传入的字符串长度为10时，执行100w次： strlen 执行时间是：32762毫秒 my\_strlen执行时间是：49183...</description></item><item><title>有关单元测试的“只言片语”</title><link>https://tonybai.com/2009/04/08/only-a-word-or-two-about-unit-test/</link><pubDate>Wed, 08 Apr 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/04/08/only-a-word-or-two-about-unit-test/</guid><description>如发现本站页面被黑，比如：挂载广告、挖矿等恶意代码，请朋友们及时联系我。十分感谢！ 商务合作请联系bigwhite.cn AT aliyun.com 欢迎使用邮件订阅我的博客 输入邮箱订阅本站，只要有新文章发布，就会第一时间发送邮件通知你哦！ 名字： 邮箱: 这里是 Tony Bai的个人Blog，欢迎访问、订阅和留言！ 订阅Feed请点击上面图片。 如果您觉得这里的文章对您有帮助，请扫描上方二维...</description></item><item><title>网购飞利浦家庭影院小记</title><link>https://tonybai.com/2009/03/24/buy-philips-home-theater-from-internet/</link><pubDate>Tue, 24 Mar 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/03/24/buy-philips-home-theater-from-internet/</guid><description>今天上午我在京东商城订购的飞利浦HTS3156/93型入门级家庭影院终于到货了。从去年年末开始就一直关注着这款家庭影院，只是当时地柜还没有选好，影院买回来也是无用武之地。总体来说这款影院物美价廉，比较适合我。我不是什么发烧友，不是很追求音质，自己也没长出那么好的耳朵，再好的音响估计也听不出来太大差别；这款影院颜色和外观与客厅里以黑色为主的家具比较搭配；还有家里液晶电视就是飞利浦的，同样牌子的东西显...</description></item><item><title>用电压力锅制作酱焖鸡腿</title><link>https://tonybai.com/2009/03/24/use-electric-pressure-cooker-cook-roast-chicken-with-soy-sauce/</link><pubDate>Tue, 24 Mar 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/03/24/use-electric-pressure-cooker-cook-roast-chicken-with-soy-sauce/</guid><description>如发现本站页面被黑，比如：挂载广告、挖矿等恶意代码，请朋友们及时联系我。十分感谢！ 商务合作请联系bigwhite.cn AT aliyun.com 欢迎使用邮件订阅我的博客 输入邮箱订阅本站，只要有新文章发布，就会第一时间发送邮件通知你哦！ 名字： 邮箱: 这里是 Tony Bai的个人Blog，欢迎访问、订阅和留言！ 订阅Feed请点击上面图片。 如果您觉得这里的文章对您有帮助，请扫描上方二维...</description></item><item><title>IE8的糟糕体验</title><link>https://tonybai.com/2009/03/23/terrible-experience-on-ie8/</link><pubDate>Mon, 23 Mar 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/03/23/terrible-experience-on-ie8/</guid><description>北京时间2009年3月20日零点，软件巨头微软公司正式发布了其Internet Explorer系列的最新版本8.0，简称IE8。早上上班后我第一时间下载了IE8的简体中文版For Windows XP。执行安装文件，重启电脑，IE8很容易就安装完毕了。 自己平时最常用的浏览器是Mozila的Firefox，但考虑到公司内部办公网以及中国内地诸多网站对Firefox糟糕的兼容性，让我还不得不继续使...</description></item><item><title>也谈软件调试</title><link>https://tonybai.com/2009/03/22/also-talk-about-debugging-software/</link><pubDate>Sun, 22 Mar 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/03/22/also-talk-about-debugging-software/</guid><description>每年二月末到三月初，公司都会安排一批实习生到各个部门实习。虽说去年经济危机了，但公司的实习生数量似乎并没有减少。起码我们部门&amp;#34;新同事&amp;#34;的数量基本与去年持平。按惯例，每位新同事都会有一名导师，与此同时各个部门还会根据自身的业务特点对这批学生进行有针对性的集中培训和交流。比起我入司那会儿，现在的实习生已经算是幸福多了。我那会儿实习生人数少，部门没有安排什么培训，完全靠导师安排自己努力学习。此次培训的内...</description></item><item><title>发掘Trac</title><link>https://tonybai.com/2009/03/18/learn-trac/</link><pubDate>Wed, 18 Mar 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/03/18/learn-trac/</guid><description>使用何种工具做Feature或Defect或Task的跟踪一直是挺让我闹心的一件事。用Excel记录，但却不便于共享、统计和直观展示；Jira算是做的好的工具之一了，但无奈它是商业软件，咱没付那份儿钱，所以也就&amp;#34;无福享用&amp;#34;；Mingle是著名的Thoughtworks公司的产品，虽说不到5个license是可以免费使用的，但它却是出了名的&amp;#34;内存杀手&amp;#34;，无奈我的机器配置太差，运行起来实在太慢，遂没有...</description></item><item><title>惊蛰日身边事小记</title><link>https://tonybai.com/2009/03/05/small-things-during-jingzhe/</link><pubDate>Thu, 05 Mar 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/03/05/small-things-during-jingzhe/</guid><description>今天是3月5日，雷锋纪念日，36年前的今天，伟大领袖毛主席亲笔写下：“向雷锋同志学习”。对于雷锋，相信80年代前期出生的人都应该不陌生，记得小时候经常会被要求在全班同学面前讲雷锋的故事，那也是我最头疼的事，最不会讲故事了^\_^。 梅西进球了，巴萨晋级了。在今天凌晨举行的西班牙国王杯半决赛第二回合比赛中，巴萨客场1:1逼平马洛卡，以两轮3:1的总比分晋级决赛。值得一提的是巴萨国王梅西连续两轮比赛都...</description></item><item><title>“扶正”Bash Shell</title><link>https://tonybai.com/2009/02/27/make-bash-my-default-shell/</link><pubDate>Fri, 27 Feb 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/02/27/make-bash-my-default-shell/</guid><description>近日，Bash Shell正式发布了其4.0版本，该版本可以看作3.x的bugfix版，同时增加了诸如&amp;#34;Associative Arrays&amp;#34;等新特性。在Bash Shell的官方站点你可以下载到最新的4.0版本，不过在GNU的Bash主页上，似乎还找不到4.0版本的所在。Bash作为Linux系统默认Shell，一直受到广泛关注，而且它还是目前几大Shell(Bourne Shell, C Sh...</description></item><item><title>“中国人史纲”和ThinkPad红点背包</title><link>https://tonybai.com/2009/02/26/an-outline-history-of-china-and-thinkpad-pack/</link><pubDate>Thu, 26 Feb 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/02/26/an-outline-history-of-china-and-thinkpad-pack/</guid><description>“中国人史纲”和“ThinkPad红点背包”，这两个八杆子也打不到的东西被我搁在一起放到本篇文章的题目中，这都源于近期的网购。 上下班一直拎着公司配发的又重又难看的单肩包，早有换掉它的计划。平时忙，虽说有三好街这样的电脑配件集中的&amp;#34;大集市&amp;#34;，但也很少去“逛”，记忆中应该有一年多没有去过三好街了；在网购越来越“红火”的今天，我也选择了后者。上周六在“京东商城”看到了一款TARGUS代工的ThinkP...</description></item><item><title>CSCOPE使用中问题小解</title><link>https://tonybai.com/2009/02/23/solve-some-problems-when-using-cscope/</link><pubDate>Mon, 23 Feb 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/02/23/solve-some-problems-when-using-cscope/</guid><description>拥有了某种工具，往往不等于就能使用好这种工具。拥有工具简单，用好工具、发挥出最大作用则较难。CSCOPE让VIM的使用者有了与SourceInsight&amp;#34;平起平坐“的机会，但是能否将CSCOPE的功能发挥出来还要看你是如何使用它了。 自从VIM”重装上阵“以后，我一直在使用CSCOPE。在使用过程中还是发现了一些”别扭“的事情。一般我会在一个大型Project的源代码的顶层目录使用CSCOPE -...</description></item><item><title>又见梅西上演帽子戏法</title><link>https://tonybai.com/2009/01/07/leo-messi-play-another-hat-trick/</link><pubDate>Wed, 07 Jan 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/01/07/leo-messi-play-another-hat-trick/</guid><description>西班牙国王杯的赛程真是难找，看直播也就更难了。昨天下班前才在新浪体育了解到晚上巴萨可能有国王杯的比赛，又到巴萨中文网寻了一圈，才把&amp;#34;可能&amp;#34;变为&amp;#34;确定&amp;#34;。今早起来迫不及待的打开笔记本&amp;#34;敲开&amp;#34;新浪体育首页，一行红字&amp;#34;国王杯-梅西帽子戏法&amp;#34;登时&amp;#34;窜入&amp;#34;眼帘^\_^。 上一次梅西在巴萨的帽子戏法是在06-07赛季主场与皇家马德里的比赛中上演的，时隔两年梅西再次给巴萨球迷们献上了厚礼，也使他个人在08-09...</description></item><item><title>2009·第一个工作日</title><link>https://tonybai.com/2009/01/04/2009-the-first-working-day/</link><pubDate>Sun, 04 Jan 2009 00:00:00 +0800</pubDate><guid>https://tonybai.com/2009/01/04/2009-the-first-working-day/</guid><description>2009年的第一个工作日，一切尽在平淡中度过。 往往大家都有这样的体会，那就是&amp;#34;长假“过后的第一个工作日身体多不在状态，假期中身体的懒散的惯性还没有彻底消除掉，也许脑子里还在回忆着与亲人朋友聚会时的那抹快意。但元旦后上班的第一天或许有些不同，毕竟这是新年后在同事面前的第一次亮相，要有蓬勃向上的气质和神态^\_^。 晨会上，组内同事围在椭圆会议桌，大家似乎都较为沉默，要不是我打开话题，各位似乎还停留...</description></item><item><title>VIM“重装上阵”</title><link>https://tonybai.com/2008/12/30/in-depth-study-vim/</link><pubDate>Tue, 30 Dec 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/12/30/in-depth-study-vim/</guid><description>国内很多学习Python的人都喜欢看&amp;#34;A Byte of Python&amp;#34;，这是一本由印度小伙儿Swaroop C H写的书，之所以受到大家关注和欢迎，想必其简单而实用的写作风格是其中的重要原因吧，作为入门书很适合。我的Laptop中就有一本中文翻译版，不过书中用的还是Python 2.3.4版本。本月3日(2008-12-3)Python 3.0 Release版祭出，Swaroop C H也在其...</description></item><item><title>做了一回“圣诞老人”</title><link>https://tonybai.com/2008/12/25/play-as-a-santa-claus/</link><pubDate>Thu, 25 Dec 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/12/25/play-as-a-santa-claus/</guid><description>今天是圣诞节。往年圣诞节那天部门总会举行一个庆祝活动，活动中每个人都能抽到自己心仪的礼品作为圣诞礼物，还有美味的蛋糕分享。然而今年再也没有这种“好事”了，由于经济危机的影响，公司三令五申的要求各个部门“勒紧裤腰带过穷日子”。我们的圣诞庆祝活动就这样被Cancel了。 昨天下午突然有了一个想法：部门不活动，我们项目组自己搞，不能让大家在圣诞节产生“失落感”。就这样和我们组内的&amp;#34;CCO（首席文化官^\...</description></item><item><title>曙光</title><link>https://tonybai.com/2008/12/23/the-dawn/</link><pubDate>Tue, 23 Dec 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/12/23/the-dawn/</guid><description>近一两年来我在博客少有提及公司项目的事情，除了一些技术bug引起我对问题的思考。这样一是为了“避嫌”，公司年初发生了多次因员工在个人博客泄露源代码或者客户资料的事件，公司管理层也加强了对公司“信息安全”的管理，无非是学习华为那一套-“封锁”：使用websense限制员工上外网，使用桌面监控系统监控员工电脑系统，封掉一切可能泄露机密信息的接口。还特地发挥了一下“数字课件”部门兄弟们的聪明才智，搞了一...</description></item><item><title>使用Scons改造现有项目</title><link>https://tonybai.com/2008/12/21/use-scons-to-build-current-projects/</link><pubDate>Sun, 21 Dec 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/12/21/use-scons-to-build-current-projects/</guid><description>今天是冬至，也是入冬以来感觉最冷的一天，毫不夸张的说：你一张嘴，牙就冻上了。上午LP在家收拾卫生，我继续用Scons改造现有的项目。下午出去理发，头发长长了后，似乎会造成思维迟钝^\_^。 试验性的用Scons改造现有的project，过程中对Scons了解又多了一些。上篇文章对Scons的性能没有给出定论，经过对Scons的深入后，发现Scons在执行初始时的性能的确不够快，这是因为Scons启...</description></item><item><title>为Ubuntu下的Firefox提速</title><link>https://tonybai.com/2008/12/17/accelerate-the-firefox-on-ubuntu/</link><pubDate>Wed, 17 Dec 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/12/17/accelerate-the-firefox-on-ubuntu/</guid><description>部门的一套基础库刚刚移植到Linux上，为了测试该库，我将工作环境切换到了Ubuntu Linux下面。切换后居然发现Ubuntu下的Firefox访问网页巨慢无比，Firefox显示时明时暗，总是被挂起。同样的公司网络环境在Windows下使用Firefox访问互联网很顺畅，没有卡的现象。看来是时候给Ubuntu下的firefox提提速了。 Google了一下才发现反映类似现象的人为数不少啊，在...</description></item><item><title>发掘Scons</title><link>https://tonybai.com/2008/12/14/learn-scons/</link><pubDate>Sun, 14 Dec 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/12/14/learn-scons/</guid><description>发现或者说知道SCons是缘于Google的comp.lang.c group上的一则名为&amp;#34;Best Build Tool for large C projects &amp;#34;的帖子，帖子的作者列出了11条他认为&amp;#34;Best Build Tool&amp;#34;应该具备的特点，并欲找到这样的Build Tool。在该帖子的回复中，有人提到了Scons，说来惭愧，这是我第一次听说到有这样一个工具。一直在Unix下编写C程序...</description></item><item><title>看西班牙国家德比需要耐心</title><link>https://tonybai.com/2008/12/14/you-should-be-patient-when-watching-spanish-national-derby/</link><pubDate>Sun, 14 Dec 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/12/14/you-should-be-patient-when-watching-spanish-national-derby/</guid><description>在今晨的西班牙国家德比之前，我在饭否留下这样一条信息：&amp;#34;Barcelona vs. Real Madrid，比赛未结束前一切皆有可能&amp;#34;。而国家德比的过程也正如我所料，一切皆有可能，不过需要耐心的等待。 昨晚就把闹钟定到了今晨5点，闹钟响了，在床上左右翻转后还是决定起来看西班牙国家德比，毕竟特别喜欢梅西，因梅西而逐渐开始喜欢巴萨。但因西甲联赛的比赛时间特别晚，一般都在北京时间凌晨以后，所以我很少能坚...</description></item><item><title>地热维修小记</title><link>https://tonybai.com/2008/12/10/maintain-the-terrestrial-heat-of-my-house/</link><pubDate>Wed, 10 Dec 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/12/10/maintain-the-terrestrial-heat-of-my-house/</guid><description>东北地区早已进入寒冬，前些阶段外面的温度已经降到了零下22度，而我家里的温度也从+25度降到了+20度了。以前在屋里可以只穿睡衣睡裤，现在不行了，套上一套毛衣毛裤后，如果在沙发上坐的时间长了也会感觉有些凉嗖嗖的。每天上下班都摸一下地热的进出水管，进水管很热，出水管一直没感觉，真希望有一天出水管也能热起来，但是这一天还是没有到来。终于下定决心要把地热搞定，遂电话到物业处预约维修，由于维修的预约较多，...</description></item><item><title>常量类型的识别-一个小例子</title><link>https://tonybai.com/2008/12/02/an-example-for-recognizing-the-const-variable/</link><pubDate>Tue, 02 Dec 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/12/02/an-example-for-recognizing-the-const-variable/</guid><description>今天闲时写了一个Demo测试程序，目的：测试64位编译下使用mmap映射共享内存的能力。程序很简单，大致如下结构： #define MAP\_SPACE\_SIZE  (4\*1024\*1024\*1024) unsigned long int ms\_sz = MAP\_SPACE\_SIZE; …. …. ptr = mmap( NULL, ms\_sz, PROT\_READ|PROT\_...</description></item><item><title>这张梅西的照片我最喜欢</title><link>https://tonybai.com/2008/11/18/i-like-this-picture-of-leo-messi-most/</link><pubDate>Tue, 18 Nov 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/11/18/i-like-this-picture-of-leo-messi-most/</guid><description>这幅图片是梅西2008-09赛季对阵维尔瓦打入世界波进球后的庆祝场面，图片中梅西的姿态很舒展，面目很清晰，在新浪体育的评论栏中居然有网友说这里的梅西像哈利波特^\_^。另外2008-09赛季巴萨的队服我也甚是喜欢。不知道真品巴萨队服(M10的)是不是很昂贵呢，以前没有关注过。 注：图片来源于新浪体育</description></item><item><title>被推荐为最具Bus气质的优秀Blogger首批参选者</title><link>https://tonybai.com/2008/11/14/being-one-of-the-candidates-of-excellent-bloggers-on-blogbus/</link><pubDate>Fri, 14 Nov 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/11/14/being-one-of-the-candidates-of-excellent-bloggers-on-blogbus/</guid><description>下班回家，坐在沙发上抱着本本打开&amp;#34;Bus&amp;#34;的后台管理中心，发了一篇文章后，发现居然有5条短消息未读。遂打开查看。发现其中有一条题为&amp;#34;恭喜您被推荐为‘全球最具Bus气质的Blogger’&amp;#34;的消息，而且是&amp;#34;blogbus&amp;#34;发来的，看第一眼很兴奋，后一想是不是Bus在后台给每个bus用户群发的消息呢。再往上又看到一条&amp;#34;BlogBus六周年庆典开始啦!&amp;#34;的消息，里面恰好有一个&amp;#34;全球最具Bus气质的Blog...</description></item><item><title>说说年假</title><link>https://tonybai.com/2008/11/14/thoughts-on-pay-vacation/</link><pubDate>Fri, 14 Nov 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/11/14/thoughts-on-pay-vacation/</guid><description>快到年根儿了，劳顿了一年的同事们坐在一起突然提到了年假，很多同事今年的年假还没有休呢，这里也包括我自己。去年国家新出台的劳动法非但没让我们多享受到更多的假期，反倒使我们的福利&amp;#34;缩水&amp;#34;了。今天年初公司内部还因为此事闹得很不愉快，具体情况这里就不说了。大家更关心的是如果今年不休年假是否确定拿到法定的经济补偿，因为去年很多没休年假的人也没得到什么好处。 入司已经有几个年头了，但回过头来却发现自己从来没有...</description></item><item><title>代码评审·CC2e·断言·其它</title><link>https://tonybai.com/2008/11/13/coding-review-and-cc2e-and-assertion-and-others/</link><pubDate>Thu, 13 Nov 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/11/13/coding-review-and-cc2e-and-assertion-and-others/</guid><description>一口气读了七章&amp;#34;Code Complete 2nd(以下称CC2e)&amp;#34;中的内容，从第七章的&amp;#34;高质量的子程序&amp;#34;到第十三章的&amp;#34;不常见的数据类型&amp;#34;。之所以一口气读这么多，是因为被其中的内容吸引了。这两天的下午一直在做代码评审，所以晚上看CC2e的时候，思维不停的在项目代码和书中内容之间跳转。一直把&amp;#34;代码大全2nd&amp;#34;当作一门百科全书式的手册类图书，买回来后一直陈放在书架上没有问津。直到今天在考虑一个关于断...</description></item><item><title>离开太原</title><link>https://tonybai.com/2008/10/31/leave-taiyuan/</link><pubDate>Fri, 31 Oct 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/10/31/leave-taiyuan/</guid><description>飞机缓缓的降落在沈阳桃仙机场，我完成了近10天的出差任务，终于回到家了。沈阳的温度和太原相比还是有些低的。坐大巴到马路湾，打车回家。家里还未给供暖，身体感觉有些凉，还好心还是温暖的，毕竟到家了，回家的感觉真好。 今天上午应客户要求做一个产品升级后的培训，这可是出差期间的最后一个任务了。早上7:30起床，洗漱后下楼吃早饭。9:00出发直奔客户的大楼。我们一行四人，还有两位技术支持工程师去客户那参加一...</description></item><item><title>游永祚寺和迎泽公园</title><link>https://tonybai.com/2008/10/26/the-tour-of-two-tower-temple-and-yingze-park/</link><pubDate>Sun, 26 Oct 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/10/26/the-tour-of-two-tower-temple-and-yingze-park/</guid><description>今天是周日，本打算在酒店休息一天，并把下周要进行的工作好好计划一下的。但是同事在耳边不断&amp;#34;扇风&amp;#34;让我也动了心。毕竟太原市内还有双塔寺和迎泽公园没有去逛呢，下周就要回沈阳了，估计没机会出去玩了。午饭后，我们出发了。 双塔寺是人们的俗称，其真正的名字是&amp;#34;永祚寺&amp;#34;。在火车站广场做812或820花费1.5元都可以直达。目前是淡季，绝对的淡季，到永祚寺游览的游客屈指可数啊。寺院不大，如果走马观花的话，30分...</description></item><item><title>太原晋祠游记</title><link>https://tonybai.com/2008/10/25/the-tour-of-jin-memorial-hall-of-taiyuan/</link><pubDate>Sat, 25 Oct 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/10/25/the-tour-of-jin-memorial-hall-of-taiyuan/</guid><description>初到晋地，又逢周末；和同事商量好拿出一天时间放松。我个人每到一个新的地方一般都是要去这个省的博物馆看看的，所以山西省博物馆就成为了必选目标。博物馆一般很短时间就可以逛完，我们还要选择另外一个景点游览。在山西太原，几乎所有人都推荐去晋祠。到山西太原不到晋祠就好比到首都北京不到长城一样。而且据说晋祠这个景点还是不错的，这样我们就确定了今天的行程：晋祠+山西省博物院。 由于考虑到这两个景点游览时间都不是...</description></item><item><title>初到山西</title><link>https://tonybai.com/2008/10/22/first-trip-to-shanxi/</link><pubDate>Wed, 22 Oct 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/10/22/first-trip-to-shanxi/</guid><description>因工作原因，和同事到山西出差，目的地太原。从沈阳飞往太原的航班不多，出发时间也不甚好，不是太早就是太晚，机型多为老旧的波音的M90，从这方面也可以看出太原这座城市在中国的省会城市中的地位。早上六点，送机场的司机已经在我家小区门口等候了。由于还要同时接几个其他部门的同事，车在市内转悠了大约1个半小时，到机场的时候，离我们的飞机起飞还有不到40分钟了。按照常理这个时间比较紧促，不过还不至于赶不上飞机。...</description></item><item><title>秋游关门山</title><link>https://tonybai.com/2008/10/20/a-tour-of-guanmen-mountain-in-autumn/</link><pubDate>Mon, 20 Oct 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/10/20/a-tour-of-guanmen-mountain-in-autumn/</guid><description>十一之前就计划组织一次项目组活动，由于各种原因没能成行。十一之后，我的想法和我们组内的&amp;#34;CEO-Chief Entertainment Officer”不谋而合，即入冬之前出去玩一次。深秋季节，省内短程旅游是我们首选。而这个季节的最佳目的地就是有着&amp;#34;东北小黄山&amp;#34;之称的关门山。北京有香山，东北有关门山，我们此行就是为了那红彤彤的枫叶，听起来很美哦。经过报名，统计等流程，我们最终筛选出9位登山“勇士+...</description></item><item><title>重返足球场</title><link>https://tonybai.com/2008/10/16/return-back-to-football-field/</link><pubDate>Thu, 16 Oct 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/10/16/return-back-to-football-field/</guid><description>在巴西举行的五人制室内世界杯足球赛激战正酣，我们部门内部同事也开始&amp;#34;蠢蠢欲动&amp;#34;了(真实情况是：大家纯粹是为了锻炼身体，活跃气氛^\_^)，叫嚣着组织内部对抗赛-开发部内部两大项目组对抗，而且计划将对抗赛作为部门内部活动长期举办下去。对抗赛给了我重返足球场的机会啊，这不今天是就是系列对抗赛首场比赛的比赛日。 在不知情的情况下，我就被组织者任命为了其中一个队的队长，无奈硬着头皮干吧。自从大三的时候一次...</description></item><item><title>国民素质·信息化·效率</title><link>https://tonybai.com/2008/10/15/national-quality-and-information-and-efficiency/</link><pubDate>Wed, 15 Oct 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/10/15/national-quality-and-information-and-efficiency/</guid><description>今天身体不适，已经和领导打了招呼，先去医院看病，然后在家里SOHO。 从医院回来，顺便路过银行把今年冬天的采暖费交上。今年煤和石油的价格都狂涨，不过目前采暖费还没有上调，据说沈阳市政府正在起草方案，准备听证，涨估计是肯定的了，大家最关心的还是涨多少的问题。涨得太多，很多老百姓肯定是承受不了的。我个人认为整个中国只有北方有采暖，这笔钱就应该是政府全部解决掉的，不应该由老百姓承担。而现状是政府部门的职...</description></item><item><title>分布式编译让你的工作更高效</title><link>https://tonybai.com/2008/10/14/distributed-compiling-make-you-work-more-effectivly/</link><pubDate>Tue, 14 Oct 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/10/14/distributed-compiling-make-you-work-more-effectivly/</guid><description>随着工程代码量的增加，往往完整的编译一次Proj消耗的时间可能足够你喝两杯咖啡了，我现在build一次我所在proj的代码需要5分多钟，这是很痛苦的，颇让人懊恼的。为了解决这个工作中的别扭事儿，我在网上搜寻了一番，找到了distcc这个分布式编译工具。 先看看distcc能帮助我节省多少时间吧。我在公司的一台Sun SPARC Solaris9主机下对整个项目源代码按照以前的编译方式进行了一次bu...</description></item><item><title>领导意志</title><link>https://tonybai.com/2008/10/11/the-leader-will/</link><pubDate>Sat, 11 Oct 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/10/11/the-leader-will/</guid><description>昨天是周五，按照工作计划，上午和组内同事做个人阶段性目标沟通。在与一位曾经在国外公司里做过项目的同事沟通时，他给我讲了这么一个故事：某一年的圣诞节前夕(圣诞节在西方人眼里是地位最高的节日了吧)他所在的那家公司的经理预感到圣诞节那天他们公司的网站的访问量激增的可能性会很大，为了保证网站在那圣诞节那天能&amp;#34;挺住&amp;#34;，他要求手下的人对网站进行一次压力测试，并决定让手下用jmeter来做这件事情。手下人没有异...</description></item><item><title>使用双显示器工作</title><link>https://tonybai.com/2008/10/08/work-with-dual-monitors/</link><pubDate>Wed, 08 Oct 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/10/08/work-with-dual-monitors/</guid><description>组内同事与公司合购了一台ThinkPad T400的本子，按照公司规定，公司分配给她的台式机是要收回的，就在没收回之前，我将其显示器借来(没办法，无奈公司在“白菜价”的硬件上也斤斤计较)，搭建我的双显示器环境。 曾经使用过部门的投影试过双显，第一感觉很爽，只是当时扩展桌面后，我的本本一直只能作为第二显示器(辅助显示器)，桌面都显示到了投影上，调试了半天也没搞懂，略有遗憾。这次搬来同事的那个17寸液...</description></item><item><title>第一次给父母做饭</title><link>https://tonybai.com/2008/09/30/cook-meal-for-my-parents-the-first-time/</link><pubDate>Tue, 30 Sep 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/09/30/cook-meal-for-my-parents-the-first-time/</guid><description>一个月前就已经计划好了，这个十一黄金周，父母过来到新房子看看。由于我和LP的家都不在这，所以从买房子到装修父母都不曾来看过。这次是第一次。为了给父母一个良好的印象，我和LP也是下了不少功夫，包括打扫卫生和考虑如何招待我的父母。 一直是我们两个人生活，家里的东西，比如筷子、碗、盘子等，也都是按照“两个人够用”这个水准购置的。这次父母来，势必我们要出去采购些。以前回到家里都是吃现成的，父母把饭菜端到桌...</description></item><item><title>坚持</title><link>https://tonybai.com/2008/09/28/stick-with-my-blog/</link><pubDate>Sun, 28 Sep 2008 00:00:00 +0800</pubDate><guid>https://tonybai.com/2008/09/28/stick-with-my-blog/</guid><description>2004年初，那时的我刚刚来到现在的公司实习，大约几个月后受Dreadhead的影响，在Blogbus上申请了自己的第一个Blog，并作为自己的主blog站点(后迁至tonybai.com)，居然一直至今。当初申请blog的时候并没有多想，一切都只是模仿Dreamhead，包括他采用的“清新模板”以及他的Blog上方的那一行字：“一个小程序员的信口开河”，我将之改为：“一个程序员的心路历程”，当时...</description></item></channel></rss>