﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-Oliver's R&amp;D Lab-文章分类-IT article</title><link>http://www.cppblog.com/zenliang/category/15321.html</link><description>C/C++/Linux</description><language>zh-cn</language><lastBuildDate>Fri, 05 Nov 2010 01:56:27 GMT</lastBuildDate><pubDate>Fri, 05 Nov 2010 01:56:27 GMT</pubDate><ttl>60</ttl><item><title>10句编程谚语</title><link>http://www.cppblog.com/zenliang/articles/132325.html</link><dc:creator>oliver</dc:creator><author>oliver</author><pubDate>Wed, 03 Nov 2010 12:34:00 GMT</pubDate><guid>http://www.cppblog.com/zenliang/articles/132325.html</guid><wfw:comment>http://www.cppblog.com/zenliang/comments/132325.html</wfw:comment><comments>http://www.cppblog.com/zenliang/articles/132325.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zenliang/comments/commentRss/132325.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zenliang/services/trackbacks/132325.html</trackback:ping><description><![CDATA[所谓谚语，就是用言简意赅、通俗易懂的方式传达人生箴言和普遍真理的话，它们能很好地帮助你处理生活和工作上的事情。也正因如此，我才整理了10句编程谚语，每位开发人员都应该铭记他们，武装自己。<br><br><strong>1. 无风不起浪</strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 代码设计是否糟糕，从某些地方就可以看出来。比如：<br>
<p>a. 超大类或超大函数</p>
<p>b. 大片被注释的代码</p>
<p>c. 逻辑重复</p>
<p>d. If/else嵌套过深</p>
<br>程序员们通常称它们作代码异味(Code Smell)，但是就我个人认为&#8220;代码警报&#8221;这个名字更为合适一些，因为它有更高的紧迫感的含义。根本问题处理不当，终将引火烧身。<br><br>译注：Code Smell中文译名一般为&#8220;代码异味&#8221;，或&#8220;代码味道&#8221;，它是提示代码中某个地方存在错误的一个暗示，开发人员可以通过这种smell（异味）在代码中追捕到问题。<br><br><strong>2. 预防为主，治疗为辅<br></strong><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序员总会做出生产率就等同于快速编码的错误臆断。许多程序员都会不假思索地直接着手代码设计。可惜，这种鲁莽的做法多会导致软件的开发过程变得很邋遢，拙劣的代码需要不断的监测和修改——也可能会被彻底地替换。最终，生产率所涉及到的因素就 不仅仅是写代码所消耗的时间了，还要有调试的时间。稍不留神就会&#8220;捡了芝麻丢了西瓜&#8221;。（因小失大。）<br><br><strong>3. 不要孤注一掷</strong> （过度依赖某人）<br>　　一个软件开发团队的公共要素（bus factor）是指那些会影响整个项目进程的核心开发人员的总数。比如某人跳槽了，项目可能就会无序，甚至会搁置。<br><br>　　译注： bus factor 即指公共要素，比喻了开发过程中的一些共同因素。如果挤上 bus 的 factor 越多，bus 就越不稳定，所以要控制好 bus factor ，以免问题发生。<br><br>　　换句话说，如果你的团队突然失去了一个主力成员，你会怎么办？生意依旧进行还是戛然而止？<br>　　很不幸，大多数软件团队都陷入了后一种情况。这些团队把他们的开发员培养成了只会处理他们自己专业领域的&#8220;领域专家&#8221;。起初，这看起来是一个比较合理的方法。它 对汽车制造装配生产线很适用，但是为什么对软件开发团队就不行呢？毕竟，想让每个成员都掌握所编程序的细微差别也不太可能，对吧？<br>　　问题是开发人员不容易轻易替换掉。虽然当每位成员都可用时，&#8220;抽屉方法&#8221;很有效，但如果当&#8220;领域专家&#8221;突然因人事变动、疾病或突发事故而无法工作时，抽屉 方法立马土崩瓦解。所以，软件团队有一些看似多余实则重要的后备力量是至关重要。代码复查、结对编程和共有代码可用成功营造一个环境，在这个环境中， 每位开发人员至少表面上是熟悉自己非擅长领域之外的系统部分。<br><br><strong>4. 种瓜得瓜，种豆得豆</strong><br>《注重实效的程序员》一书中有这样一段话解释&#8220;破窗理论&#8221;：不要留着&#8220;破窗户&#8221;（低劣的设计、错误的决策或者糟糕的代码）不修。发现一个就修一个。如果没有足够的时间进行适当的修理，就先把它保留起来。或许你可 以把出问题的代码放到注释中，或是显示&#8220;未实现&#8221;消息，或用虚拟数据加以替代。采取一些措施，防止进一步的恶化。这表明局势尚在掌控之中。<br><br>　　我们见过整洁良好的系统在出现&#8220;破窗&#8221;之后立马崩溃。虽然促使软件崩溃的原因还有其他因素（我们将在其他地方接触到），但（对&#8220;破窗&#8221;）置之不理，肯定会更快地加速系统崩溃。<br><br>　　简而言之，好的代码会促生好的代码，糟糕的代码也会促生糟糕的代码。别低估了惯性的力量。没人想去整理糟糕的代码，同样没人想把完美的代码弄得一团糟。写好你的代码，它才更可能经得住时间的考验。<br><br>　　译注：《注重实效的程序员》，作者Andrew Hunt / David Thomas。该书直击编程陈地，穿过了软件开发中日益增长的规范和技术藩篱，对核心过程进行了审视――即根据需求，创建用户乐于接受的、可工作和易维护的代码。本书包含的内容从个人责任到职业发展，直至保持代码灵活和易于改编重用的架构技术。从本书中将学到防止软件变质、消除复制知识的陷阱、编写灵活、动 态和易适应的代码、避免出现相同的设计、用契约、断言和异常对代码进行防护等内容。<br><br>　　译注：破窗理论（Broken Window theory）：是关于环境对人们心理造成暗示性或诱导性影响的一种认识。&#8220;破窗效应&#8221;理论是指：如果有人打坏了一幢建筑物的窗户玻璃，而这扇窗户又得不到及时的维修，别人就可能受到某些暗示性的纵容去打烂更多的窗户。发现问题就要及时矫正和补救。<br><br><br>　　<strong>5. 欲速则不达</strong><br><br>　　经理、客户和程序员正日益变得急躁。一切都需要做的事，都需要马上就做好。正因如此，快速修复问题变得非常急迫。<br><br>　　没时间对一个新功能进行适当的单元测试？好吧，你可以先完成一次测试运行，然后你就可以随时回来继续测试它。<br><br>　　当访问Y属性时，会不会碰到奇怪的对象引用错误？无论怎样，把代码放到try/catch语句块中。我们要钓到大鱼啦！<br><br>　　是不是似曾相识呢？这是因为我们在以前已经都做到了。并且在某些情况下、它是无可非议的。毕竟，我们有最后期限，还得满足客户和经理。但不要过于频繁操 作，否则你会发现你的代码不稳定，有很多热修复、逻辑重复、未测试的方案和错误处理。最后，你要么是把事情草草做完，要么是把事情好好做完。<br><br>　　<strong>6. 三思而后行</strong><br><br>　　&#8220;敏捷开发&#8221;这个词最近被频繁滥用，经常被程序员用来掩饰他们在软件开发过程中的糟糕规划/设计阶段。我们是设计者，看到产品朝正当方向有实质进展，我们理应高兴。但意外的是，UML图和用例分析似乎并不能满足我们的愿望。所以，在不知自己做什么的情况下或者不知自己身处何处时，我们开发人员经常就稀里糊涂地写代码了。<br><br>　　<strong>7. 如果你惟一的工具是一把锤子，你往往会把一切问题看成钉子</strong><br>程序员有一种倾向，当一谈到他们工具时，其视野就变狭窄了。一旦某种方法在我们的一个项目上&#8220;行得通&#8221;，我们就会在接下来所有的项目上都用到它。学习新东 西仿佛是一种煎熬，有时候甚至会心神不定。从始至终都在想&#8220;如果我用之前的方法做、这个就不会这么麻烦了&#8221;。一定要摒弃这种想法，按我们所知道的去做，即使那不是最完美的解决方法。<br><br>　　坚持自己所知很简单，不过从长远的角度讲，选择一个适合这项工作的工具要容易得多。否则，就会与你的职业生涯格格不入。<br><br><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8. 沉默即赞同<br></strong>"破窗理论"与"变成惯性理论"有着宏观的联系。<br><br>　　编程社区就好像一个现实社区。每个作品都是一个开发者的缩影。糟糕的代码发布的越多，就越容易反映现状。如果你不去努力编写优秀、整洁和稳定的代码，那你每天都将和糟糕的代码相伴了。<br><br>　　同样地，如果你看到别人写出了糟糕的代码，你就要跟这个人提出来。注意，这时候机智就应该用上场了。一般情况下，程序员都愿意承认他们在软件开发中还是有不懂的地方，并且会感谢你的好意。互相帮助对大家都有利，而对问题视而不见，只会使问题一直存在。<br><br><br>　　<strong>9. 双鸟在林，不如一鸟在手 <br><br></strong>　　如果可以讨论系统架构和重构，那么就差找个时间把事情做完。为了使正常运作的东西更加简洁而做改动，权衡改动的利弊很重要。当然了，简洁是一个理想目标， 但总会有可以通过重构改进的代码。在编程世界中，为了代码不过时，会频繁简单改动代码。但有时候你又必须保证代码对客户有价值。那么，你面临一个简单窘 境：你不能一石二鸟。你在重构旧代码上所发时间越多，你编写新代码的时间就越少。在及时改进代码和维护程序之间，也需要找到平衡点。<br><br><strong>10. 能力越大，责任越大</strong><br><br>毫无疑问，软件已成为我们生活中一个既基本又重要的一部分。正因如此，开发优秀软件格外重要。乒乓球游戏中的Bug是一回事，航天飞机导向系统或者航空交通管制系统中的Bug是另外一回事。Slashdot曾发表一文，讲述了单单Google News的一个小失误使一家公司股票蒸发11.4亿美元。其他例子参见《<a href="http://www.jobbole.com/entry.php/97" target=_blank><font color=#5c9911>软件Bug引发的十次严重后果</font></a>》。这些例子便说明了我们正行使着多大的权利。你今天写的代码，无论你是否有意，说不定有朝一日在重要的应用程序中派上用场，这想想都令人害怕。编写正确合格的代码吧！<br><br>　　
<img src ="http://www.cppblog.com/zenliang/aggbug/132325.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zenliang/" target="_blank">oliver</a> 2010-11-03 20:34 <a href="http://www.cppblog.com/zenliang/articles/132325.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>10个最有前途的年轻开源项目</title><link>http://www.cppblog.com/zenliang/articles/132319.html</link><dc:creator>oliver</dc:creator><author>oliver</author><pubDate>Wed, 03 Nov 2010 12:09:00 GMT</pubDate><guid>http://www.cppblog.com/zenliang/articles/132319.html</guid><wfw:comment>http://www.cppblog.com/zenliang/comments/132319.html</wfw:comment><comments>http://www.cppblog.com/zenliang/articles/132319.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zenliang/comments/commentRss/132319.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zenliang/services/trackbacks/132319.html</trackback:ping><description><![CDATA[<p>当你完成一次呼吸时，世界上也许就多了一个开源项目，其中不乏创意独特和优秀的项目，我将它们称作是未经雕琢的钻石，本文列举10个最有前途或最值得关注的年轻开源项目，你现在就可以下载并享用它们。</p>
<p>1、<a href="http://www.oschina.net/p/dokuwiki">DokuWiki</a></p>
<p>DokuWiki是一个超级易用的Wiki项目，对于管理在线协作文档编写工作非常有用，它为开发团队和工作组设计，也适合于志愿者团队和小企业，可以说，任何需要与其他人进行远程文档协作编写的情况都可以使用它。</p>
<p style="TEXT-ALIGN: center"><img border=1 alt="" src="http://www.oschina.net/uploads/img/201010/28083336_AGxl.jpg"><br>图 1 DokuWiki</p>
<p>2、<a href="http://www.oschina.net/p/gtd-free">GTD-Free</a></p>
<p>David Allen的粉丝应该很喜欢这个小型桌面程序，它严格遵循GTD思想，帮助用户有条理地按项目、截至日期或优先级进行任务组织，并提供可编辑列表，棘手问题的想法等。</p>
<p style="TEXT-ALIGN: center"><img border=1 alt="" src="http://www.oschina.net/uploads/img/201010/28083336_RHvG.jpg"><br>图 2 GTD-Free</p>
<p>3、<a href="http://www.oschina.net/p/banshee">Banshee</a></p>
<p>Banshee是个全能播放器，它支持和你的iPod同步播客、音乐、视频和音频文件，你可以从在线音乐仓库创建播放列表，并根据相册或艺术家进行过滤，Banshee支持Linux和Mac OS X，它是iTunes的一个很好的替代品。</p>
<p style="TEXT-ALIGN: center"><img border=1 alt="" src="http://www.oschina.net/uploads/img/201010/28083336_cu2E.jpg"><br>图 3 Banshee</p>
<p>4、<a href="http://www.oschina.net/p/argentum">Argentum</a></p>
<p>Argentum是一个基于<span class=nounderline>服务器</span>的应用程序，适合小型企业和自由职业人员，它可以管理多个客户的联系信息，账单，发货和合同信息，支持多种货币，包括货币兑换，此外它还支持自定义插件。</p>
<p style="TEXT-ALIGN: center"><img border=1 alt="" src="http://www.oschina.net/uploads/img/201010/28083336_gQ1g.jpg"><br>图 4 Argentum</p>
<p>5、<a href="http://www.oschina.net/p/lemon+pos">Lemon POS</a></p>
<p>如果你有一个家庭式或小型办公室式商品业务，这个销售管理软件值得一试，它运行在Linux<a class=nounderline title=操作系统 href="http://product.it168.com/list/b/0501_1.shtml" target=_blank>操作系统</a>上，Lemon POS提供了一个数据库，可以为多个POS终端服务，它的界面做得非常漂亮。</p>
<p style="TEXT-ALIGN: center"><img border=1 alt="" src="http://www.oschina.net/uploads/img/201010/28083337_Xnsj.jpg"><br>图 5 Lemon POS</p>
<p style="TEXT-ALIGN: center">&nbsp;</p>
<p style="TEXT-ALIGN: left">6、<a href="http://www.oschina.net/p/digikam">DigiKam</a></p>
<p>DigiKam可以和任何专业的图像处理软件匹敌，并且它是免费的，支持Linux，Windows和Mac OS X，由一个摄影师团队开发，因此他们很懂你需要什么样的功能。</p>
<p style="TEXT-ALIGN: center"><img border=1 alt="" src="http://www.oschina.net/uploads/img/201010/28083337_rjaX.jpg"><br>图 6 DigiKam</p>
<p>7、Boxee</p>
<p>Boxee是一个开源媒体中心应用程序，利用Boxee可以在电视上观看在线电影，目前影片来源包括OpenFilm，Hulu，YouTube，MUBI和Indie影院在线，开发商表示还有更多的合作伙伴正在洽谈中。</p>
<p style="TEXT-ALIGN: center"><img border=1 alt="" src="http://www.oschina.net/uploads/img/201010/28083337_Y2Hq.jpg"><br>图 7 Boxee</p>
<p>8、<a href="http://www.oschina.net/p/openstreetmap">OpenStreetMap</a></p>
<p>Google地图是一个伟大的在线地图服务，但它也有缺点，OpenStreetMap填补了商业地图服务的缺陷，全球地图都是可以编辑的，但它不象 Google地图那样完整，如果你发现了错误，你可以进行修复，当你需要使用不受任何法律或版权限制的地理数据时，使用OpenStreetMap是最方 便的方法。</p>
<p style="TEXT-ALIGN: center"><img border=1 alt="" src="http://www.oschina.net/uploads/img/201010/28083337_N606.jpg"><br>图 8 OpenStreetMap</p>
<p>9、<a href="http://www.oschina.net/p/spaz">Spaz</a></p>
<p>如果你在寻找一个轻量级，开源的微博桌面客户端，Spaz是个不错的选择，它基于Adobe Air，可以跨平台运行，支持Twitter，Identi.ca和Laconi.ca，Spaz有微博客户端常用的功能，它背后有一个强大的开发团队在不断地改进它。</p>
<p style="TEXT-ALIGN: center"><img border=1 alt="" src="http://www.oschina.net/uploads/img/201010/28083337_Ap3L.jpg"><br>图 9 Spaz</p>
<p>10、<a href="http://www.oschina.net/p/performous">Performous</a></p>
<p>当你想舒舒服服地放松一下时，用这个卡拉OK软件配上摇滚乐可以让你极度享受音乐的魅力，缓解你一天的工作压力和疲惫，它可以帮助用户纠正音高，提高发声技巧，如果你有一点天赋，说不定还能助你成为一个很好的歌手。</p>
<p style="TEXT-ALIGN: center"><img border=1 alt="" src="http://www.oschina.net/uploads/img/201010/28083338_Gg0a.jpg"><br>图 10 Performous</p>
<p>特别推荐：</p>
<p><a href="http://www.oschina.net/p/mypaint">MyPaint</a>是一个轻量级的，易于使用的开源绘图程序，你以前可能从没听说过它，和其它成熟的图像处理软件(如Krita和Gimp)不一 样，MyPaint并不想包揽一切，它不是图片编辑器，没有路径、几何形状、文本操作或奇特的蒙板功能，相反，它的核心功能只有一个：绘图。</p>
<p style="TEXT-ALIGN: center"><img border=1 alt="" src="http://www.oschina.net/uploads/img/201010/28083338_VlI3.jpg"><br>图 11 MyPaint</p>
<p>原文出处：http://blog.worldlabel.com/2010/10-young-open-source-projects-to-watch.html</p>
<img src ="http://www.cppblog.com/zenliang/aggbug/132319.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zenliang/" target="_blank">oliver</a> 2010-11-03 20:09 <a href="http://www.cppblog.com/zenliang/articles/132319.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>云计算扫盲</title><link>http://www.cppblog.com/zenliang/articles/131951.html</link><dc:creator>oliver</dc:creator><author>oliver</author><pubDate>Mon, 01 Nov 2010 02:34:00 GMT</pubDate><guid>http://www.cppblog.com/zenliang/articles/131951.html</guid><wfw:comment>http://www.cppblog.com/zenliang/comments/131951.html</wfw:comment><comments>http://www.cppblog.com/zenliang/articles/131951.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/zenliang/comments/commentRss/131951.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/zenliang/services/trackbacks/131951.html</trackback:ping><description><![CDATA[<div style="FONT-SIZE: 14px" id=blogDetailDiv>一般的业界比较喜欢用一些新名词来体现自己的战略眼光和与对手的区隔。当几个月前google提出云计算的概念的时候，amazon说自己做的事情就是云计算，IBM、intel、sun都声称自己在云计算领域有深刻的计划。只可惜大家听了半天仍然不知道什么是云计算，依旧云里雾里知道这个与计算有关，干脆就叫&#8220;云计算&#8221;吧。<br><br>到底云计算是什么呢？<br><br>这个问题不好回答，专业一点的回答是：云计算是依靠强大的计算能力，使得成千上万的终端用户不担心所使用的计算技术和接入的方式等都能够进行有效的依靠网络连接起来的硬件平台的计算能力来实施多种应用。<br><br>非专业一点的回答就是，一堆你不需要搞清楚的硬件、软件在服务你。这堆硬件和软件构成的东东大的像朵云彩，又拥有极强的计算能力，这就叫云计算。<br><br>那么云计算是怎么来的？我们为什么又需要云计算？<br><br>1. 云计算的前身是grid computing ，说起grid computing 可能知道的人就很多了，就是传统的网格计算。网格计算就是将一个计算分割成片段，提交到网络系统上的各个计算机上（格点），工作做好进行汇总完成。比较流行的软件例如globe bus + afs（提供存储映射服务）。不过grid一般都是用在学术界，例如cern的几个实验都采用了大规模的grid计算，例如进行新粒子的发现，需要处理t级别的数据，单台计算机的运算和存储显然是不可能完成的，因此就必须使用网格计算了。<br><br>2. 云计算有实实在在的例子么？很幸运，我们还可以找到几个：google app engine（<a style="COLOR: #ff00ff" href="http://code.google.com/intl/zh-CN/appengine/">http://code.google.com/intl/zh-CN/appengine/</a>），Amazon的S3+EC2系统都是云计算的雏形。<br><br>3. 云计算的基础是什么？最基本的需求：存储+处理器，当然，要支持无数的应用请求并负责保证存储和计算的性能，这两方面都是挑战。<br><br>4. 我自己能够搭建一个云计算环境么？当然可以，我们可以利用开源的项目来搭建一个云计算环境：你可以利用hadoop+hbase+php(包装API)也许就实现一个简单的云计算环境。<br><br>5. 有没有更简单的例子？也许一个分布式的邮件系统就是一个云计算的雏形：计算分布在各个节点上，应用（邮件收发）通过一个统一的平台来处理，也算是符合云计算的定义了，不过只能支持最简单的一种固定应用。<br><br>6. 有没有复杂一点的例子？google的云计算的逻辑关系：gfs 实现存储，bigtable 实现结构化、半结构化数据存储，map/reduce 实现将分布在各个节点上的计算和merage起来，剩下的就是进行job的管理器，管理工作的提交和触发，然后就是我们看到的app engine了。<br><br>7. 应该关注哪些软件？hadoop 项目应该是一个比较有前途的一个，当然powerset在hadoop之上的Hbase应该是一个更接近能够替代简单database的应用。<br><br>8.我们为什么需要云计算？很简单，企业的雄心+个人电脑性能进展缓慢+我们处在数据指数膨胀的年代。当我们在google上提交一个搜索的时候，会有成千上万的计算机被卷入这一个简单的一个查询过程中，未来的计算越来越庞大，到了我们干脆说&#8220;云&#8221;来替代其中的一切细节的时候。<br><br>9. 云计算平台的下一步呢？云计算api的标准化也许是一个最需要进行竞争的，可惜基础的技术平台的完善还需要时日，而且云计算未来也许会是免费的，这个遵从&#8220;竞争导致利润下降&#8221;的原则，难度不是么？当更多的云计算平台出现的时候，然而跑在云上的应用却没有那么多，当然免费的午餐就会来。<br><br>10. 还有更有趣的么？当然，你可以提供一个云计算，利用google，amazon的云计算包含在你自己的云计算里，然后提供一个统一的api，或者也许未来的云计算会整合在一个，云里雾里，成为一个超大的云计算平台，那个时候，也许自己家的电脑也可以接入云计算平台成为其中的一个计算的提供者。这个听起来很有意思，不过13年前就已经存在了，那个分布在全球电脑上的寻找外星et的屏保就是一个云计算的平台，如果他们该行做云计算的话，估计能够盖过google和amazon。</div>
<img src ="http://www.cppblog.com/zenliang/aggbug/131951.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/zenliang/" target="_blank">oliver</a> 2010-11-01 10:34 <a href="http://www.cppblog.com/zenliang/articles/131951.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>