自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 资源 (1)
  • 收藏
  • 关注

原创 vSphere SDK C++ Wrapper 已经以BSD形式开源发布

如果使用C++工具链针对vSphere SDK做过开发,你会明白其中的复杂。这种复杂性导致的结果要么是重复的代码,要么就是别于vSphere对象系统的另一套语义。在深思熟虑之后,决定把这部分工作开源,使得节省vSphere开发者99%的时间。这个开源项目的亮点在于:

2011-09-07 22:10:55 1491 2

原创 什么是云计算?技术的观点

今天,和一个未谋面的朋友聊起了什么是云计算。按照他的说法,关于云计算的说法五花八门,每一个公司,每一个产品似乎都想吧与计算的标签贴在自己的身上。从技术人员的角度看,什么是云计算呢?这个问题其实非常好,尽管一直从事云计算的基础架构方面的开发工作,但是认真叙述什么的云计算也是个有挑战性的事情。我记得当时的评论是:云计算本质上不是新的东西,先前的分布式计算,网格计算,已经基本具备了云计算的所有的核心要素;虚拟化技术也不是新的。但是虚拟化技术的成熟以及并行计算的普及导致了云计算的广泛使用等等。这些论述其他太过简单化

2011-03-22 23:23:00 856

翻译 Monads for the Curious Programmer, Part 2 (中英文对照版)

Monads for the Curious Programmer: Part 2In my previous post I talked about categories, functors, endofunctors, and a little about monads. Why didn’t I just start with a Haskell definition of a monad and skip the math? Because I believe that monads a

2011-03-17 22:30:00 1685

翻译 Monads for the Curious Programmer, Part 1 (中英文对照版)

 Monads for the Curious Programmer, Part 1The Monad is like a bellows:单子就像一个风箱:it is empty yet infinitely capable.它什么也没有,却有无限能力The more you use it, the more it produces;用的越多,它产的也就越多;the more you talk about it, the less you understand.你谈论的越多,你理解的越少。–Monad T

2011-03-17 22:24:00 2776

原创 Programming VIM/vSphere SDK with a straight way

If you arelucky enough to program against ESX VIM/vSphere SDK before, you can selecteither Java or C#, as the sample codes use in SDK package. As a matter of fact,Java/C# is good at such job. However, you have to use C/C++ if they are bothunavailab

2011-03-08 12:18:00 1198

原创 C++中级程序员该往何处去

<br />有个同样是做一线开发工作的朋友评论一篇博文,表达了自己的忧虑和遇到的一些问题,其核心就是尽管做过几年的C++开发,市面上常见的书也基本涉略,但是却感觉很难跟上新思想,学到新知识。坦白地说,我也常常遇到过这样的问题。就C++的使用而言,我感觉算是入了门,但是走了很多的弯路。我可以简单共享一下我的经验教训,如果这可能对任何使用C++作为主要开发语言的人有用的话。但是我不希望谁不加思索就试图原样复制,因为毫无疑问每个人的个人喜欢,学习习惯,知识背景等都极不相同。这样说,就算是对本文可能造成的任何不好后

2010-10-16 00:28:00 1509 3

原创 使用C++构建最简单的动态类型系统

<br />为了说明动态类型系统和静态类型系统之间的差异和联系,这里简单叙述一下如何使用静态类型系统来构建动态类型系统。这个任务类似于为一门新的语言设计类型系统。所以如果你发现这个动态类型系统类似于你使用过的任何OO系统,请原谅我。应为所有的动态类型系统都是类似的,而且其背后的机理完全相同,只是实现上的差异而已。<br /> <br />先列出OO的核心技术,这样在我们设计的时候可以时刻对比我们是不是在这样做。<br />* 使用类来表达概念<br />* 使用消息在类之间传递信息<br /> <br />

2010-10-12 12:22:00 2321 4

原创 杂谈

此文对应于孟岩先生的博文(http://blog.csdn.net/myan/archive/2010/10/09/5928531.aspx)。似乎无法大段回复,所以直接贴在这里。急救之作,希望孟老大能包涵。回头在细细润色。1. 技术和工具。OO技术中,最核心的是使用类来表达概念。亦即,我们可以操作的元素的粒度不仅仅是一门具体的语言提供的基本元素了。对于过程式编程,你能操作的,用来构成语句的基本元素是基础类型,逻辑条件以及(进一步的)函数名字。当你拿着锤子(语言提供的基础元素)的时候,你看到的都是钉子(基础

2010-10-11 16:13:00 1543 10

原创 与孟岩先生商榷,就C++的一些一般问题的另一些观点

孟岩先生是本人非常尊敬的一位学者,尽管似乎不从事职业的开发工作,但是在C++方面有极深的造诣,在很早的时候就在国内C++技术社区推动真正的C++技术。在长时间的潜伏之后,孟岩兄宝剑再次出手,开始持续更新其在CSDN的官方博客。近日,在最新的一篇博客上,他谈到一些关于C++的思考和评论。由于文中设计的点非常广泛,很难在文后的评论中一一论及,所以专门撰此文。就几个问题请教与孟先生。第一个孟岩先生提到的所谓共识是“软件开发方面真正有价值的进步,应当是有利于用户、有利于项目管理、有利于解决领域问题,而不是有利于程序

2010-09-20 13:51:00 2333 12

原创 从代码到模式(三) 对象间关系

<br />对象间的交互关系构成了我们业务逻辑的基础。所以对象间的交互关系的复杂性决定了我们最终代码的复杂性。我们现在讨论对象交互可能遇到的问题。<br /> <br />对于两个对象包,他们中间可能有着复杂的相互调用关系。如果让每个包中的对象直接和另一个包中的对象交互,那么这两个包的接口会激起复杂而且难于扩展。俗话说,家有千口,主事一人。我们应该把关外部接口交互相关的事情都集中到一个单独的对象中,就好象所有的外事关系大都归外交部管一样。所以我们会在对象包之间加入一个专门用于接口协调以及转发的对象。该对象代

2010-08-19 16:54:00 1461

原创 从代码到模式(二) 对象的结构和表现

上面一文中,我们描述了对象的创建和销毁。从试图去掉对象初始化过程中的硬编码开始,我们逐渐推导出了几个各个GoF中的创建型模式。现在,有了对象,我们看看对象的行为。我们从最基本的需求开始,如何使得对象在运行过程中行为可变?这是一个非常一般的问题,我们从传统的方法说起。简单地说,对象的行为取决于对象的状态,而对象的状态由构成对象的成员的状态决定。这是毫无疑问的。所以明显的答案是改变对象的状态,最直观的是提供设置对象状态的接口,这样,通过操纵对象状态(直接修改或者对象某一行为的副作用),我们可以期望对象可以表现出

2010-08-12 13:31:00 756

原创 从代码到模式(一) 对象的构建和销毁

前段时间有一点空闲,重读了GoF的经典。GoF的书之所以经典,不仅仅是在于其整理的23个模式,而是整体叙述的字字珠玑,特别是前几章。我常常和别人举的例子就是第一章开篇的几句,简直道尽了OO设计的精髓。DP说:You must find pertinent objects, factor them into classes at the right granularity, define class interfaces and inheritance hierarchies, and establish k

2010-08-09 13:20:00 1331 4

原创 从头构建Linux系统 之先决条件

构建一个LFS不是一个简单的任务。需要一些对Unix系统管理的知识才能解决出现的问题以及执行列出的命令。特别地,你至少应该知道如何使用命令行(shell)来拷贝或者移动文件或者目录,列出目录或者文件的内容,以及更新当前目录。还要求你基本了解如何使用和安装Linux软件。 基于本书把这些作为最低的技能要求,LFS支持论坛很难提供这些方面的协助。你会发现关于这些基础知识的问题一般都得不到答案而

2010-05-26 10:27:00 678

原创 从头构建Linux系统 之 本书使用包之原理解释

前面已经提到,LFS的目标是提供一个完整的,功能级可用的系统。这包含了那些所有要把自己需要从一个相对小的基复制到用户定制的完整系统中的包。这并不意味着LFS是最小可能的系统。一些包含的重要包严格讲老并不是必须的。下面给出本书中使用的所有包的理由。 ·         Autoconf该包包含了从开发人员模板中产生用于自动配置代码的脚本文件的程序。当构建过程升级后重新编译一个包的时候往往

2010-05-25 15:35:00 661

原创 从头构建Linux系统 之 LFS和标准

LFS结构尽可能地遵循Linux的标准,基本标准是:The Single UNIX Specification Version 3 (POSIX). 注意,需要免费的注册Filesystem Hierarcy Standard (FHS)Linux Standard Base (LSB) Core Specification 4.0LSB有五个独

2010-05-25 14:04:00 881

原创 从头构建Linux系统 之 LFS目标平台

LFS的基本目标平台是32位的Intel处理器。如果你之前没有编译过LFS,那就应该从这个平台开始。32位的系统是Linux支持最广泛的系统,与开源软件或者私有软件也最兼容。 另一方面,本书中的指令稍作修改就可以适用于Power PC和64位的AMD/Intel处理器。要想编译一个可以使用上述CPU的系统,除了后面几页提到的工具之外的主要先决条件是一个现存的Linux系统,如早期的LFS,

2010-05-25 13:46:00 1171

原创 从头构建Linux系统 之 目标读者

为什么你应该读这本书有很多原因。许多人问的一个问题是“既然可以直接下载安装一个已存在的发布版本,为什么还要历经艰难险阻从头编译一个呢?” 该项目存在的一个重要原因是帮助你深入学习Linux是如何工作的。编译LFS系统有助于展示Linux是如何运作的,那些模块是如何黏在一起以及它们彼此的依赖关系。当然这个学习的最大好处就是由此你获得了根据特定需求定制Linux系统的能力。 LFS的另

2010-05-25 13:19:00 842

原创 从头构建Linux系统 之 前沿

早在1998年,我就开始了学习和理解Linux之旅,现在已逾十年。当时我第一次安装了Linux并且立即迷上了其背后的概念和哲学思想。 完成同样的事情总是有许多办法,这同样适用于Linux发行版。好多优秀的发行版已经存在多年,一些依然存在,一些演变为其他。还有一些则逐渐退出我们的视线。它们都以不同的方式满足各自目标群体的需求。看到如此多的可以达成最终目标的方式,我开始意识到我可以不再局限于任

2010-05-25 11:12:00 773

原创 C++为什么成功?第二部分

在上一部分中,我花了大量的精力强烈暗示使得C++如此成功的并不是由于所谓性能上的优势,而是其规范并升华了C的最佳实践。现在我要用同样的精力来证明C++在性能上的专门考虑和设计以及实践中的优越表现。C++根植与C的肥沃土壤,天然具有C所拥有的直接与物理硬件交互的优势。更要提到的是,每一个C++新特性的引入,无不是经过了详细的性能权衡。毫不奇怪,C++在绝大多数的情况下可以取得与C比肩的性能,并且有所

2009-10-19 22:26:00 698

原创 C++为什么成功?第一部分

不客气地说,CSDN论坛有一股不太好的风气,那就是喜欢空对空。常常就常识性的问题争个不可开交,而真正有价值的帖子却鲜有人问津。这样就很难留住真正有技术积累的且乐于贡献于社区的工程师。而且,由于基本的问题被一遍又一遍地问,总给人一种在低水平徘徊的感觉。道理上讲,还有一种可能是有太多的新人不断加入到C++之中,从而是C++的平均水平被稀释。我情愿是这样。同时,我真心希望,这一代C++工程师不是通过CS

2009-10-15 00:21:00 1377 1

原创 what makes you different?

最近,由于一个协作海外研发团队缩编,项目组需要招聘几个具有大约7年以上的C++资深研发工程师来充实这边的研发力量。我有幸和项目总监主持了一个笔试成绩相当不错的应聘者的技术面试。该应聘者有超过8年的研发经验,曾经是做过项目组长,在个人的知识积累和总结方面也颇有心得。但是由于其过去几年的研发背景是非windows平台,而且在windows平台上的训练也稍有不足,加上其他的一些因素,最后我们还是决定不接

2009-09-23 22:59:00 742 5

原创 C++基本功之 准确地理解术语

能有效地表达抽象的思想是人类和其他智能生物的根本区别。同样,可以使用准确的术语进行沟通交流是专业人员的基本的素质。可以这样说,一个人分析问题解决问题的能力正比于其熟练理解的概念的数量。《设计模式》是OO领域的抗鼎之作,其中一个重要的原因是她提供了一个抽象的,定义清晰的词汇集合,尽管后来我们发现其中的一些名词定义还是不够清楚。熟练的C程序员非常清楚诸如常量指针和指针常量的细微差别,而初学者则往往含糊

2009-09-11 11:50:00 871

原创 C++基本功之 对象序列化

稍微正式一点的应用都会用到对象的序列化/反序列化操作,常见的需求包括:对象的持久存储。比如把一个对象存储到文件;在需要的时候,再把对象从文件中读出来;对象的传递。比如要把一个对象通过管道,socket等任何手段传送到对端;从数据构建对象。对象类型未知,但是我们可以从数据中构建一个对象出来。 我们现在来分析这些需求。看看C++如何有效地序列化/反序列化对象。下文中,凡提到序列化,

2009-09-10 09:37:00 7631 7

原创 C++基本功之 const关键字

能否正确地使用const是判断一个C++程序员基本编程素质的有效手段。但是,能准确地理解该关键字的含义则是更高的要求。简单地说,和其他所有的用于提升C++之生产力的手段一样,它表征的根本含义是使得代码更具表达性,亦即,更能清楚地表明代码的含义。 在C++标准中,const是一个对象修饰符。一般地,初学者很容易按照字面意思,把它理解为常量。确实如此吗? 真正的常量和语义上的常量

2009-09-08 11:07:00 818

原创 资源管理:强鲁棒性应用的基石 (2)

3. 所有权的控制与转移 前一篇文章的资源封装实现,通过禁用资源封装类的拷贝和赋值,极大地简化了这些类的最终代码,然而同时也极大的限制了它们的使用范围。目前他们只能用在局部的资源管理以及作用常引用在作用域之间传递,这无疑是不方便的。我们要尝试去除这一限制。但是在开始之前,我们先要讨论资源的所有权问题,只有明确了资源的所有权,我们才能有效地在不同的作用域之间传递资源封装类,而不会引起混淆。因为一

2009-09-03 00:30:00 680

原创 编码标准:纪律和人因工程的双剑合璧

0. 引子说起编码风格,每个人都有一些自己的见解。简单牵狗一下,发现类似的资料层出不穷。除了不少开源项目使用的编码规范以外,还有不少据说是从业界一流公司流传出来的,甚至更有专门的论述。wikipedia上也可以发现专门的对C++常见编码风格的分类和一般讨论。这里,我们试图分析不同编码标准背后蕴含的真实意图。这样,我们就可以合适地评价不同的编码风格,并且可以在实际使用的时候做出合

2009-08-24 23:30:00 639

原创 WMI via C++: 一个C++风格的复杂性处理实例

WMI简介按照wikipedia的解释,WMI是Windows驱动模型的扩展集合,通过工具化的组件提供了操作系统的接口。WMI本身是基于Webm和CIM工业标准的管理架构Microsoft实现。相对于程序员,系统管理员可能更熟悉这些接口。WMI通过一种一致的面向对象的封装,提供了绝大部分操作系统核心功能的支持,可以直接使用在Windows 2000 SP4以上的机器中。对于缺省不支持WMI的O

2009-08-24 23:21:00 2334 3

原创 错误管理:把错误控制剔除在业务流程之外[TBD]

传统的错误管理评述基于异常的错误管理多线程环境中的异常错误管理实践

2009-08-24 23:15:00 418

原创 资源管理:强鲁棒性应用的基石 (1)

 0. 引子在正式讨论C++提供的资源管理技术之前,先简略回顾一下传统的C风格的资源管理技术。 本质上讲,C是非常初级的语言。实际的编程中,C程序员往往面临大量的机器相关的细节。诸多此类的细节中,最常见的,最令初学者迷惑的,令专家头痛的,就是内存管理问题。虽然C提供的内存管理接口极其简单,但是由于其灵活性以及内存管理固有的特性,使得大型程序的内存管理往往是最难以理解和容

2009-08-24 23:11:00 1018

原创 C++:初学者的指南

0. “hello world” 向先驱致敬,我们首先学习C++版本的“hello world”程序。需求:想控制台输出“hello world”字符串。C++是基于对象的。从对象的观点看,要有一个对象,用于打印该字符串。所以该需求可以实现为如下执行序列:// 声明对象g,其类型为greetings// 调用g的方法,传入参数为控制台对象和问候字串(std::cout,

2009-06-24 22:31:00 1190

原创 工业语言评审:应运而生,应运而长的C++

当Stroustrup博士开始到贝尔实验室开始他的第一份工作时,他并不知道自己应该做什么。他跑去问头儿,对方客气地回答他说,既然把您请来了,您想干什么就自己看着办吧。于是Stroustrup花了将近一年的时候找到了自己研究方向,但是他苦于没有合适的工具开展他的工作,基于自己的背景,他首先搞出来一个叫做C with Class这么一个东西供自己使用,它综合了C的强类型和Simula的类机制,前者对正

2009-06-19 22:56:00 973

原创 软件为什么如此复杂?

每当我们受命维护或者扩充一个既存系统的时候,恰当地理解原有的系统成为关键。毫无疑问,我们没有足够的时间完全理解它,但是我们一定要找到那个见鬼的合适地方以加入我们的修改。那么是什么阻碍了我们快速理解一个系统呢?一般想来,常见的原因可能包括:缺失必需的文档。没有合适文档是常态;有了文档,版本又是旧的;好不容易找到来的一个当前版本的,但是是以日文写成的(你熟悉日文的情况下,极有可能那是一个英文文

2009-06-13 14:26:00 1425 1

原创 22度观察-王志安和韩秀云:中华文化拯救世界经济?

今天偶尔看到了深圳卫视的一档经济类评论节目,是王志安先生主持的“22度观察”。一般来说,我并不特别关注经济类,政治类的评论节目,但是偶尔遇上,倒也看得津津有味。本期的主题是韩秀云女士(一位清华的教授)似乎新近出版了一本评论世界金融海啸的书籍,强调文化而经济发展中不可忽略的巨大作用。这是一个有意思的话题。 文化作为一种存在,主要体现了人们之间的相互沟通和影响;而经济则是强调其中的协作,并且创

2009-06-13 13:19:00 1193 1

原创 开始,就从今天,构建工业强度的实现!

按:作为09年个人计划的一部分,我将系统地讨论如何使用合适的语言工具构建工业强度的软件。这既是对个人经验的总结升华,也是对运行在千万的服务器和桌面中的不良代码的公开宣战。 感谢技术的积累和进步,原先作为科学家的工具的数字计算技术现在早已渗透到生活的方方面面,软件工程师的群体也在爆炸式增长。当9岁的孩子也可以使用代码涂鸦,有人可能以为编写软件的门槛已经低到极致。但是,有尊严的软件工程师仍然以

2009-06-06 00:18:00 764 1

Elements of Programming

Elements of Programming provides a different understanding of programming than is presented elsewhere. Its major premise is that practical programming, like other areas of science and engineering, must be based on a solid mathematical foundation. The book shows that algorithms implemented in a real programming language, such as C++, can operate in the most general mathematical setting. For example, the fast exponentiation algorithm is defined to work with any associative operation. Using abstract algorithms leads to efficient, reliable, secure, and economical software.

2011-03-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除