C/C++ Linux 程序员必须了解的 10 个工具

想成为 Linux 下专业的 C/C++ 程序员,下面工具都是必须要了解的。

1. 基本命令
http://mally.stanford.edu/~sr/computing/basic-unix.html
http://pangea.stanford.edu/computing/unix/shell/commands.php
http://infohost.nmt.edu/tcc/help/unix/unix_cmd.html

2. 编辑器– vi, Emacs
http://www.atmos.albany.edu/deas/atmclasses/atm350/vi_cheat_sheet.pdf
http://cmgm.stanford.edu/classes/unix/emacs.html

3. 构建工具 – make/Cmake
http://frank.mtsu.edu/~csdept/FacilitiesAndResources/make.htm
http://www.cmake.org/cmake/help/cmake_tutorial.html

4. 调试器 – gdb
http://www.cs.cmu.edu/~gilpin/tutorial/

5. 版本控制 – cvs, svn, git
http://mrsrl.stanford.edu/~brian/cvstutorial/
http://www.cs.ubc.ca/~vailen/svn_howto.htm
http://maverick.inria.fr/~Xavier.Decoret/resources/svn/index.html
http://www.vogella.com/articles/Git/article.html

6. 代码查看工具 – ctags, cscope
http://www.linux-tutorial.info/modules.php?name=Howto&pagename=C-editing-with-VIM-HOWTO/random.html
http://www.cs.washington.edu/education/courses/cse451/12sp/tutorials/tutorial_cscope.html
http://cscope.sourceforge.net/cscope_vim_tutorial.html

7. 进程间通讯机制
http://tldp.org/LDP/tlk/ipc/ipc.html

8. 多线程库 – Pthreads, BOOST library
https://computing.llnl.gov/tutorials/pthreads/
http://ashishgrover.com/boost-multi-threadingfor-c/

9. 内存工具 – Purify, Valgrind
http://www.cprogramming.com/debugging/valgrind.html
http://pages.cs.wisc.edu/~hasti/cs368/resources/purify.html

10. GUI – Qt
http://zetcode.com/gui/qt4/introduction/
http://www.digitalfanatics.org/projects/qt_tutorial/
http://doc.trolltech.com/4.3/tutorial.html

“好奇号”火星车和它搭载的软件

“好奇号”火星车和它搭载的软件(来自Erlang程序员的观点)

我十分好奇,忍不住想推测一下“好奇号”火星车上的软件究竟是个什么样的构造。我们已经知道,好奇号上的软件大部分都是用C语言写成的,这些代码加起来大概有250万行。有人可能会感到诧异,这样复杂的系统怎么能写出来而且能让它好用?下面是来自Erlang程序员的观点。

首先来些基础的。“好奇号”火星车使用的是核动力,它能持续的受控的方式提供给火星车能量。这个能量源同时还要负责平时对火星车进行加热——这是在火星表面极端天气环境下对火星车的必要保障。

“好奇号”基本上是自主控制的。它发送一条信息可能要用几分钟到几小时的时间,你只能在火星上一天里的有限时间段内给它发送信息。“好奇号”自己可 以和地球通话,但这条线路速度很慢。它也可以通过围绕火星飞行的人造卫星进行通信,把卫星作为上行线路中继,这样更快。这种情况表明:火星车必须要能自主 行动。我们不能让一个人坐在地球上的某个椅子里拿着操纵杆来指导它。

“好奇号”火星车上安装有两个完全一样的计算机。我们注意到美国宇航局正是按照Joe Armstrong(Erlang编程语言的创造人)的话做的:“要想获得一个可信赖的系统,你需要两台计算机”。一个一直处于休眠状态,一旦另一个由于 异常情况死机,它可以随时受命接管系统。这样的做法在Erlang语言系统里、在OpenBSD PF防火墙等其它软件里都是很典型的接管方案。“好奇号”上使用的计算机是BAE systems RAD750。处理器是PowerPC ISA,速度非常的快。200百万赫兹, 150或250纳米 的制造工艺,它工作时对能允许的温度范围的表现非常优秀。它是经过抗辐射加固的,能经受相当强的辐射侵袭。内存也是抗辐射的。“好奇号”上的计算机里的每 个硬件都不是随随便便一个东西能胜任的。

“好奇号”的操作系统使用的是VxWorks。它属于标准的的微内核系统。保守的估计,它的内核代码应该少于1万行,而且经过了严格的测试。也就是说,这个内核接近零bug。它的一个主要特征就是隔离。火星车上的各个模块都是相互隔离的。有些子系统对火星车的生命起着至关重要的作用,而另外一些只是用于科学观察的设备。所以,我们可以肯定这样一个事实,“好奇号”上的250万行代码中,只有一部分代码是深度测试杜绝了bug的。车上的有些程序并不是生命必须的。

美国宇航局使用了各种办法来确保代码质量。例如,递归调用是要求避免的,这是这因为C语言编译器不能保证递归堆栈不被撑破。循环要确保有终止点,这 通过一个静态分析器来发现这些问题。所有的内存使用都几乎是静态分配的,这样避免了突然的内存收集产生的混乱和不可预知的性能问题。我们还可以发现讯息传递(Message Passing)作为子系统间的消息传递方式在火星车是被当作了首选。不存在互斥,不存在软件事务性内存。同样,隔离概念也是编码指导原则上的一部分。通过对内存进行保护和数据的单一归属关系,子系统之间就很难影响对方。Erlang程序员都很习惯这样的做法。

“探路者”号火星车

当年的“探路者”号火星车的架构设计事实上也跟Erlang语言系统的理念相似。它有用于传递消息的“组件”。组件只在接收消息时才等待,发送消息的都是无返回值的函数。它们接受消息采用的是单事件循环,这跟Erlang语言中的 gen_server 工作方式很相似。不同的模块间通过某种协议传递消息进行通信,你可以访问其它模块使用的内存,但按照JPL编码指导原则,这种做法是要避免的。这跟 Erlang语言有所不同,Erlang语言完全禁止这样操作。火星探测漫游者(勇气号和机遇号)拥有更多的组件,但软件基础上相同的。“好奇号”也不例 外。它本质上是在老的软件上改造出来的。系统中的线程数有大几百个,这完美的和一个类似的如此规模的Erlang语言系统中的线程数相匹配。

机遇号火星车

在“好奇号”上,他们增加了“组件”的概念,组件由一组组的模块构成,以此用来控制复杂度。因为有两台计算机做冗余,很多子系统为了系统的稳固也是 冗余的,组件的概念也是处理这些情况需要的。有趣的是,Erlang语言的设计者也看到了这一点,只是在Erlang里被叫做Applictions。

对函数恒量的校验。输入参数必须要满足前置条件。后置条件约束返回值。各种恒量必须满足这些条件。Erlang程序员熟悉这种做法。有趣的是,“好 奇号”上的每个函数的长度限制在60行以内,这样它们可以被打印到单张纸上。Erlang程序员也喜欢简短的函数体,但没有这种限制。但都是为了让代码简 单。让代码易于理解。

勇气号火星车

还有另外一个有趣的事情,在过去,有个火星车发生过优先级颠倒的问题。他们在调试控制台里向火星车注入了一段纠正信息挽救了火星车。这也跟 Erlang语言系统里经常使用的方法相似。我们可以对运行中的系统进行修改,随时对系统进行升级和改造。我们对运行中的系统进行监控,确保它的运行状态 跟我们期望的一样。这种对系统进行热修复的能力非常的有用。当然,这种开发是配合了大量的跟踪和分析——例如使用Erlang QuickCheck/PropEr,错误记录以及跟踪工具。

很明显,Erlang语言系统的很多特征都跟火星车上的系统吻合。但我并不认为这是巧合。各种软件有自己不同的属性特征——火星车属于硬实时 (hard realtime)环境,Erlang语言系统是软实时环境。但大体上,写出健壮系统的条件是你需要隔离系统中的各个部分。这值得思考,看起来这种方式好用。这些对于高可靠性系统来说都是的重要的特征。也许比静态类型校验还要重要。

总结来看,对于火星车上的所有代码,我们也许并不必保障所有代码都达到最高级别的安全。我们可以把不同的模块进行隔离测试,对它们实施不同等级的正 确性检查。换句话说,我可以通过精心的设计来控制错误和管理风险。因此,对于某些模块,我们可以承认它们可能存在某些错误。如果上行通信中继坏了,我们可 以重启机器,这样来恢复它。如果这样不行,我们还有一个冗余的上行通信通道直接和地球通信,只是速度慢些——但可以替代另外一个通道。这种架构意味着只有 多个组件同时失败时才能导致任务无法完成。模块出错,重启,恢复,然后就可继续拍摄图片。这种设计的基本原理是非常可靠的,也许需要根据情况做一些小的调 整。毕竟它是经过了另外3个火星车的严格考验上发展出来的。

跟Erlang语言理念不相同的部分跟所对应的硬实时和软实时环境有关。在Erlang语言系统中我们可以暂缓服务。虽然不好,但可以这么干。在火 星车上,这会成为灾难。在飞行控制系统中尤其是这样。如果火箭启动晚了,你的麻烦就大了。这就是为什么“好奇号”上要使用静态分配内存和固定堆栈大小,而 不是使用动态分配的原因。这同样也是他们不喜欢递归的原因。而在Erlang语言系统里,我们不鼓励通过手动管理内存。我们对tail调用做了革命性的优 化,所以我们可以放心的使用它。

长话短说——“好奇号”火星车的软件在某些特征上跟Erlang语言系统在架构上非常是相似。这些特征是一个健壮的软件系统的基本特征吗?

[本文英文原文链接:On Curiosity and its software ]

8 个 Node.js 链接:HTML5游戏、数组等

这里有 8 个链接,主要关于 Node.js 开发者相关的 HTML5 游戏和数组:

Command Line Node.JS

A Very Cool Drawing Game in Node.JS with Source

Upping the Heap Limit in the v8 JavaScript Engine for Node.JS Usage

Hosting and Developing the HTML5 Game Cobalt Calibur with MongoDB, Node.js and OpenShift

A WorkQueue for Node.js

Font Package Manager written in Node.Js

Localised JavaScript

Javascript Array Tutorial

PC 市场正面临严峻考验

正当苹果高调的发布其良好的业绩的时候,那些PC厂商例如戴尔,HP却显得异常的暗淡。

苹果公司的股价在周一的时候达到每股$665.15,总市值为6200多亿美元,成为了历史上市值最大的公司。

苹果公司在97年的时候几乎濒临破产,但因为iPod,iPhone,Mac等电子产品为这个巨头注入了新的活力。

但当苹果洋洋得意的时候,其它厂商却闷闷不乐。

周四,IDC预测PC的增长较去年更慢。由于消费者担心经济的不确定性,以及对Windows 8 和Ultrabook的预测和评估。IDC预测今年的增加约为0.9%,去年为1.7%。

Dell,全球第三大PC生产商,在8月3号宣布其利润下降约18%,为7.32亿美元,收入下降8%,为144.8亿美元。苹果的大部分收入来自PC的销售,下降了9%,其它电子产品下降了19%。

HP似乎情况更加不容乐观。7月31日的财报显示其销售额降至86亿美元,下降了10%。消费类产品下降12%,商业产品下降9%。

PC市场到底该何去何从?

三星输了,苹果硬了,微软笑了

经过两天半的审议,陪审团就苹果公司与三星公司专利纠纷一案做出了判决。判决非常利于苹果公司,三星需要向苹果支付 10.49亿美元的罚金以赔偿剽窃知识产权为苹果所带来的损失。

综合报道:三星输了,苹果硬了,微软笑了。(附煎蛋er手机调查)
一切尽在不言中……

判决的重点之一是陪审团裁定苹果iOS系统用户操作界面中的三项专利成立,而三星的许多产品侵犯了这些专利。判决同时指出苹果的手机外形设计专利成立,三星的多款手机的外形设计对苹果的这一专利也造成了侵犯。尤其是三星产品对iphone一代和iphone3gs的仿造,酷似后者。

综合报道:三星输了,苹果硬了,微软笑了。(附煎蛋er手机调查)
的确很像啊……

另外,在三星反诉苹果的案件中,三星全军覆没。即使三星的几项专利已经被写入了3G网络标准,陪审团仍裁定苹果的产品无一侵犯三星的任何专利。
三星获得的唯一胜利是陪审团裁定其平板电脑没有剽窃ipad的设计。

这不得不说是苹果的一场决定性大胜。

也许最重要的一点是陪审团裁定三星的专利侵犯行为存在“主观故意”,也就是说,三星是赤裸裸的剽窃了苹果的多项专利。而高达10.49亿美元的罚金也正是在惩罚三星的这种故意剽窃的行为。这不得不说是苹果的一场决定性大胜。

苹果公司花了几个月的时间去说服陪审团相信iphone是一个原创的革命性产品。苹果公司花了5年的时间设计制作它。而三星公司只用了3个月时间去剽窃他们的设计,同时三星公司没有承担任何的设计制作成本以及产品投放市场的风险。
很明显,陪审团被说服了。更重要的是,即使三星公司花了大量时间想说明他们实际更早就在研制那些有争议专利,陪审团仍裁定了所有这些专利都是苹果研发并拥有的。

我们很快会看到这个裁决带来的连锁后果。

在短期,苹果会对涉及侵权的三星产品申请销售禁令。这些产品现在仍在销售,比如盖世SII(I9100)在全球范围内都可以买到。而这一裁定能让苹果较容易的申请到这些销售禁令。
事实上,在宣布裁决当天,法官Lucy Koh已经讨论了举行有关禁售涉及侵权的三星产品的听证会。现在确定的时间表是让苹果在27日列出它希望禁售的产品清单,三星应在2周内做出回应。9月20日听证会举办。法官说想尽量多给三星回应的时间,所以听证会时间可能会退后。
综合报道:三星输了,苹果硬了,微软笑了。(附煎蛋er手机调查)
当然了,三星肯定会对上述一系列法律裁定做出上诉。苹果也肯定会对ipad产品外观设计的独特性是否应被保护这一问题提起上诉。如果苹果能赢,它将得到很丰厚的回报。

在长期,我们会看到很多安卓系统用户操作界面的改变。此案证明苹果有弹力滑动浏览这一技术的专利,因此,许多公司会停止使用此技术。同样,点击放大和多点触控滑动浏览技术的应用也会在其他公司的新设备上受到影响。

此外,苹果证明了他们的耳机外形设计和专利是受到法律严格保护的,其他厂商若有侵犯,可能会受到严重惩罚。所以,我们将看到新的耳塞采用与现在设计非常不同的外观。事实上,这样的改变已经在发生,这也是件好事。在苹果公司起诉了三星公司后,我们看到三星最新的盖世sIII(I9300)已经采用了独特的设计。而其他没有被起诉的公司呢?他们很可能也会采用新设计以避免诉讼。市场上新设计越多,我们消费者就越得利。

也许是到了谷歌付钱结束僵局并让大家回到开发手机的时候了

苹果现在仍与在于多家安卓手机厂商进行专利权诉讼,比如HTC以及摩托罗拉。预计我们能看到许多这样的案件庭外和解。苹果已经证明了对剽窃行为的简单法律陈诉就已经能给对手带来沉重的法律惩罚。三星很有可能不会冒再次承受这样的打击的风险。
同样其他的厂商也很可能不想走三星的老路:花大笔的律师费却输的这么惨。传言谷歌一直在努力让他的合作伙伴庭外和解。不知道这个建议现在会不会被采取呢?

最后一点,我们估计也能看到谷歌和苹果间有关专利的僵局终于得到解决。安卓系统不可能被消灭,苹果也在为众多的专利诉讼支出高昂的律师费,收益甚少。双方在法律诉讼上花了大量的人力物力。如果这一裁定能让苹果说服谷歌支付一定的费用,并给安卓一个名正言顺的许可证,那也不错。因为那样,大家就能从法律诉讼中抽身,各回各家,好好做机。

综合报道:三星输了,苹果硬了,微软笑了。(附煎蛋er手机调查)

或者goolge和apple合并? 来个 Gopple?

陪审员的话

一些陪审员对他们做出对苹果有利的判决做出了解释。在接受CNet的采访时,llagan举出了让陪审员做出对苹果有利判决的证物,其中包括三星的内部电邮。“我们看到了三星高管间的电邮往来。这些电邮是在阐述苹果手机的特点以及三星应该采用这些功能。对我来说,这是充分的定罪证据了,”他解释道“很明显,三星侵犯了苹果的专利。”
Llagan还透露,陪审团主席Velvin Hogan自己拥有专利权,他现身说法,给了其他陪审员很多启示。“打那以后,审议就很简单了。”他说在第一天陪审团就弹性浏览和点击放大两项专利争论得“非常激烈”。他也指出了陪审团没有因为苹果是美国公司就偏向它。他说:“我们尊崇了法官就如何判决的指导并进行到底。我们没有在考虑有关三星和苹果的其他事情。

陪审团主席Velvin Hogan在今早接受透露社路透社时发表了意见:“我不想给任何公司任何的侵犯别人的知识产权的工具。”Hogan也指出了苹果索要的25亿美元的赔偿太高了。苹果声称他们因为三星的原因失去了很多市场。而这并不一定,苹果的产品本身质量问题也造成了销售下滑。(富士康躺枪……)

微软发来贺电:Windows 系统现在前景一片大好啊啊啊啊啊啊啊

微软员工Bill Cox windows是手机市场部的高级主任,他在得知裁决后发推:“Windows 系统现在前景一片大好啊啊啊啊啊啊啊”

微软的Frank Shaw企业沟通部门的副总裁,以前就因为在推上对谷歌说三道四而出名。今天他的推比较委婉。他讨论了windows手机的独特性:“我喜欢windows手机的UI,新鲜,独特,与众不同。就酱”
微软官方表示不会回应。[Via theverge]