- 博客(77)
- 资源 (3)
- 收藏
- 关注
原创 启用新的博客地址https://icerote.net/blog/
转移到个人网站https://icerote.net/blog/。以后不会再到CSDN写blog了万一同步回来呢?。
2014-03-22 18:40:39 2610 2
原创 梦断代码--一个程序员的自白 (源代码)
源代码在此,代码还是有很多问题。欢迎指正和批评,但请勿人身攻击。https://github.com/wingfiring/xirangzip包
2012-11-02 10:52:09 3685 2
原创 梦断代码--一个程序员的自白(九 完)
本文谢绝转载 http://www.weibo.com/0x2b Protein的性能瓶颈主要是在runtime,而runtime是基于FBX来写的。FBX已经停止开发,而且改动代价太高,因此,美国那边打算把把FBX从runtime中去掉。这是一个大工程。当时Protein的新经理M也刚来不久,我们都有点担心资源不够。这时,美国的架构师也忙于新的项目,也没时间给出Protein的新设
2012-10-29 13:03:43 9314 7
原创 梦断代码--一个程序员的自白(八)
本文谢绝转载 http://www.weibo.com/0x2b因为最初我只是想证明我的那个可扩展的类型系统,因此我给ADPLite改了个名字,叫“息壤”,喻意类型系统会像息壤一样,能够生长。到11年夏天的时候,息壤已经有了一些东西: 1.DBC库--这个是以前的工作。除了pre-condition,post-condition,invariant三个宏之外,允许用户自定义和设置
2012-10-18 14:30:37 4471 5
原创 梦断代码--一个程序员的自白(七)
本文谢绝转载 http://www.weibo.com/0x2b 大约是各方面对ADP的反响都不大好,ADP要想推销自己,必须找到新出路。最终,目标锁定到Protein,让Protein通过ADP来存储材质包。对于Protein项目,我至今也不知道最初的立项缘由。Protein后来被定位成一个内容(材质)管理库,为公司的所有产品提供统一的材质管理。最早,Protein是基于FBX(一
2012-10-15 10:37:41 3567
原创 梦断代码 --一个程序员的自白(六)
本文谢绝转载 http://www.weibo.com/0x2bPS:这一章水的比较狠,就当看盗版网络小说了吧。见谅。 我对公司有一个很不满意的地方,就是缺乏像样的职业培训。我来到这里之后一直是传授东西给别人--当然我对此并不抗拒,还很乐意--自身的水平却没什么提高。于是我打算还是学点东西。我把业余的时间都拿来玩Linux和开发板。我工作中接触的第一个操作系统就是Unix,
2012-09-27 22:02:54 14843 30
原创 梦断代码--一个程序员的自白(五)
本文谢绝转载 http://www.weibo.com/0x2b梦断代码--一个程序员的自白(五) O同事给我的回复中,除了强调控制内存使用外,原来还指望通过扩展string的实现来支持数组。他真是太高估我的结果了。但是同时,他又提出了一些让我难以理解和接受的内容:不喜欢暴露新的接口,数据必须保持为char*形态,模板不能跨边界分配和销毁。站在他预设的,str
2012-09-22 16:43:09 4472 18
原创 梦断代码--一个程序员的自白 (四)
本文谢绝转载梦断代码--一个程序员的自白 (四) 一个周末过去,对于我所回复的,如何在运行时存储字符串的问题的解决方案,O也有了回应。O对我的方案非常不满,认为我的方案是他之前就考虑过的,我完全没有解决他所担心的问题。应该说,这次合作不愉快,我也是有很大责任的,主要是在沟通方面。在之前的一周时间内,我除了问他问题,他回答,就没有真正双向的交流。他所担心的问题之一是内存碎片化,而我对
2012-09-19 15:58:32 12123 15
原创 梦断代码--一个程序员的自白 (三)
本文谢绝转载梦断代码--一个程序员的自白 (三) "程序员是工程师吗"?这是我在大约10年前初次接触敏捷方法时,让我有醍醐灌顶之感的一个问题。那个时候,称呼程序员为码农,IT民工,吃青春饭的,周围充斥着三十岁后能不能做技术的质疑。这个问题让我真正想明白自己从事的是怎样的一个职业。已经忘了最初在哪里看到这篇文章的,很幸运,我今天在Robert Martin的那本《敏捷软件开发》
2012-09-10 11:23:27 13154 29
原创 梦断代码--一个程序员的自白 (二)
本文谢绝转载梦断代码--一个程序员的自白 (二) AIRMax是一个庞大的项目计划,需要3~5年的时间来完成。这个缩写是取公司的主打产品首字母和特征单词组成的,也意味着这个项目要影响到所有这些支柱产品。公司的这些产品都是不同领域的设计软件。这个项目计划在三个方面做资源整合,即为所有产品提供统一的程序库或者框架:程序外观(GUI),渲染(主要是3D引擎),和文件格式(保存设计成果)
2012-09-03 14:33:51 12616 14
原创 梦断代码--一个程序员的自白 (一)
本文谢绝转载梦断代码--一个程序员的自白 (一) --当一个有价值的人或事物逝去,缅怀他的人便为之立碑,写下墓志铭。本文以此献给Protein。 看过一本同样叫做《梦断代码》的书,英文名叫《dream in code》 我总觉得翻译得不准确。 在那本书中,讲述了一个软件项目Chandler失败的前
2012-08-27 23:02:35 22502 43
原创 从设计模式到梁思成
Design Pattern已经成为软件设计中一个耳熟能详的词语了。并且,多半会联想到GOF的那本设计模式的名著。事实上,对我来说,尽管四位作者都是大牛,花边 新闻也关注了不少,但让我写出凭记忆写出四位作者的名字还是困难的。没办法,对老外的名字就是如此的不敏感。然而,GOF却很好记。 Gang of Four,第一次看到的反应,F4?F4挺有学问啊。起初,对于把GOF翻译成四人帮颇不以为然。干嘛搞
2008-01-06 20:18:00 4231
原创 f (p == NULL), if (p == 0) 还是 if(p) ?----再论空指针检测问题
转载请注明出处: http://blog.csdn.net/wingfiring某些C/C++编程的书中,曾经提到如何判断指针是否为空的问题.很显然,if (p == NULL), if (p == 0) 和if(p),都能够完成这一任务,差别在于可读性方面.我们分别加以讨论. 1. if (p == NULL) 相当多的文章建议采用,他们中的部分人甚至认为,其他做法都是错误的.这个形式一个变种是
2007-05-17 18:19:00 6787 1
原创 恐怖的代码,以及转载
项目中看到这样的代码:m_optimizedPolygons = false;if (gdi_compatible && (true == gdi_compatible->value().as_boolean())) m_optimizedPolygons = true;看到什么问题了吗?有没有人吐血身亡?哦,对不起,朋友,帮忙打个120......无数C++的文章和书籍----至少
2007-02-09 18:26:00 34011 10
原创 haskell笔记
经典的快速排序的实现代码: quicksort [] = [] quicksort (x:xs) = quicksort [y | y ++ [x] ++ quicksort [y | y =x]嘿嘿,用C/C++来实现的话,需要多少行代码呢? 好像某个人说过:
2006-10-11 09:39:00 3615
原创 开始学习haskell
曾经有人说数学是自然科学中的皇冠,而且总是尽力使自己和其他学科保持距离.而其他学科总是力求和数学搭上关系,如此便可以身价百倍.当年恩格斯曾经说唯一没有运用数学的学科生物学,最终也被孟德尔抓住了统计学的尾巴. Functional Programing是厕身于象牙塔里的精灵,总是力图保持和现实的距离,并以纯粹的血统为荣,如今,也越来越多的被其他语言所攀附,Lambda演算似乎要成为一波
2006-10-10 11:35:00 4357
原创 模式批判之Singleton
人们常说,模式是解决方案的重用,是经验的重用。借助已有的经验和典范,可以帮助我们少走弯路,还可以在更高的语言层次描述系统和相互沟通。然而,模式本身是如此的抽象,对于模式的理解和运用很大程度上依赖于程序员个人或团队的经验和技艺。模式是很好的东西,然而传授模式却是如此的困难。模式的适用性是一个非常重要的指标,错误地运用模式,将会加剧表达的不自然,恶化代码的可读性
2006-08-08 11:12:00 5016 7
翻译 错误和异常处理
错误和异常处理参考关于编写健壮的通用组件的一些问题,下面的论文给出了很好的介绍:D. Abrahams: ``Exception Safety in Generic Components, 由M. Jazayeri, R. Loos, D. Musser (eds.): Generic Programming, Proc. of a Dagstuhl Seminar, Lecture
2006-07-06 10:23:00 4209 2
原创 **乌托邦式的接口和实现分离技术**
《Imperfect C++》中展示了一种叫“螺栓”的技术,然而,这本书中的讨论并不足够深入。当然,我也相信Matthew是故意的,从而让我们这些“三道贩子”(Matthew自称是二道贩子)也能够获得一点点成就感。 非典型秃子http://blog.csdn.net/wingfiring/ 考虑这样一个接口设计: struct IRefCount; struct IReade
2006-07-01 17:08:00 4860 9
原创 感慨:编写坚固的代码(2)
我们要想写文章,最起码,要能认识足够多的字.但是,更重要的,是要知道我们想说什么。这两个方面都是不可或缺的。那么,是不是要等到认识了所有的字才能写文章?当然也不是。如果每写几个字就需要查字典恐怕也写不好文章--思路都被打断了。首先,我们应该在文字上自由了,然后就可以畅快地表达自己的思想、观点、感受,偶尔一两个成语典故需要查一查字典也无伤大雅。 就这方面来说,写文章和写程序是极其相似的
2006-06-26 15:04:00 4717
原创 感慨:编写坚固的代码
分析了公司的一个项目代码,结果令我非常沮丧。分析的这个项目大约有500个文件, 并不很大。我承认,这个项目的程序员都是训练有素的,然而,都是C语言的训练有素,不是C++的。 我们为什么选择C++作为一个软件项目的开发语言?我想,决不是因为C++更复杂华丽,也不是因为C++支持OO,OB,也决不是因为C++是支持GP的最佳选择。论二进制兼容性,C++不如C;论OO支持的干净利落,C++
2006-06-19 22:41:00 3544 3
原创 如何获得当前所在的DLL模块名称
起因: 因为工作需要,写了一个小工具,嵌入到各个项目中(这些项目都是DLL项目).然后,在这个工具可以输出一些信息到日志文件.当然,输出信息需要标明这些信息来自哪个程序模块.首先,就想到了GetModuleFileName,一查MSDN,第一个参数hModule无法提供,如果提供NULL,只能得到创建进程的那个EXE文件。又顺藤摸瓜,找到了GetModuleHandle函数。然而,问题仍然存
2006-05-31 10:48:00 10053 6
原创 如何编写异常安全的C++代码
如何编写异常安全的C++代码 关于C++中异常的争论何其多也,但往往是一些不合事实的误解。异常曾经是一个难以用好的语言特性,幸运的是,随着C++社区经验的积累,今天我们已经有足够的知识轻松编写异常安全的代码了,而且编写异常安全的代码一般也不会对性能造成影响。 使用异常还是返回错误码?这是个争论不休的话题。大家一定听说过这样的说法:只有在真正异常的时候,才使用异常。那
2006-04-12 19:52:00 11446 14
原创 《C++编程规范》笔记(设计风格)
第5条:一个实体应该只有一个紧凑的职责 单一职责原则。这个原则并不那么容易执行,即使是STL这样的程序库,也一样会犯违反该原则的错误。在这里,举了两个违反这一原则的著名实现:realloc和stl 中的basic_string。不过,对于basic_string,我想比起MFC中的CString还是好了不少。在《Exceptional C++ style》中,对basic_string作了剖
2006-04-11 00:21:00 5971 17
原创 设计模式笔记(12 STRATEGY & TEMPLATE METHOD)
STRATEGY(策略)适用性:1.许多相关的类仅仅是行为有异。”策略“提供了一种用多个行为中的一个行为来配置一个类册方法。2.需要使用一个算法的不同变体。3.算法使用客户不应该知道的数据。可使用策略避免暴露复杂的、于算法有关的数据结构。4.一个类定义了多种行为,并且这些行为在这个类的操作中以多个条件语句的行署出现。将相关的条件分支移入他们各自的strategy类中以代替这些条件语句。思考:
2006-04-10 16:38:00 2277
原创 设计模式笔记(11 OBSERVER & STATE)
OBSERVER(观察者)适用性:1.当一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这二者封装在独立的对象中以是他们可以各自独立地改变和复用。2.当对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变。3.当一个对象必须通知其他对象,而他有不能假定其他对象是谁。思考: 考虑MVC架构的一个GUI场景,当一个模型对象改变,需要在多个View中及时的更新,而模型并不关
2006-04-07 14:24:00 3619
原创 利用netsh编写网卡动态配置的脚本
当年华为和思科闹的沸沸扬扬的官司里,有一项是起诉华为的CLI和思科的雷同。其实,CLI这东西,不仅仅是华为这么干,其他的CLI大抵类似,这不,windowsXP和2000都有个netsh.exe程序,就是微软版本的网络配置CLI。 正好有个朋友问我,能不能写个程序切换网卡配置?要求能够在两种配置下切换:一是动态获取网址,二是静态配置。我一想,netsh不正好干这事情吗?打开netsh
2006-04-06 17:41:00 4279 2
原创 设计模式笔记(10 MEDIATOR & MEMENTO)
MEDIATOR(中介者)适用性:1.一组对象以定义良好但是复杂的方式进行通信,产生相互依赖关系混乱且难以理解。2.一个对象引用很多其他对象并且直接与这些对象通信,导致难以复用该对象。3.想定制分布在多个类中的行为,而又不想生成太多的子类思考: MEDIATOR模式虽然是协调对象的,但是对对象的组织方式也会带来重大影响。对于一组相互作用的对象,这种相互关系是网状的,搞清楚这组对象之间的联系是
2006-04-06 16:19:00 2031
原创 设计模式笔记(9 INTERPRETER & ITERATOR)
INTERPRETER(解释器)适用性:当有一个语言需要解释执行,并且你可以将语言中的句子表示为一个抽象语法树时,可使用解释器模式。思考:一个常见使用情况当然是操纵一种程序语言,例如JavaScript,Python。这个时候,我们通常使用一个脚本引擎库来实现解释器。然而,并不是所有语言都是程序语言,解释器模式更多的时候可以用来处理非程序语言,例如正则表达式。语言的规则也可以简单,也可以复杂,通常
2006-04-05 13:06:00 1965
原创 《C++编程规范》笔记(组织和策略)
这是C++信徒的摩西十戒,值得将其铭刻在显示器的边缘,供C++程序员们每日膜拜。我要将其铭刻在我的blog里,铭刻在我的记忆里,直到它们成为我思维的一部分。第0条:不要拘泥于细节(了解哪些东西不应该标准化) 缩进:不必规定如何缩进,每个人遵从一个自己喜欢的规则即可。 行长:今天已经没有太大的必要限制80个字符了,当然,越有利于阅读越好。 命名:不要太严苛,
2006-04-04 20:55:00 5962 7
原创 设计模式笔记(8 CHAIN OF RESPONSIBILITY & COMMAND)
CHAIN OF RESPONSIBILITY(职责链)适用性:1.有多个对象可以处理统一请求,但是,那个对象处理要到运行时刻决定。2.希望在不明确接收者的情况下,向多个对象中的一个提交一个请求。3.可处理一个请求的对象集合应该被动态指定。思考:既然要向未知的接收者提交请求,那么就需要统一的提交界面,也就是说,所有接收者应该实现一个公共接口,来接收请求,当然Delegate可以改变这一状况。一个典
2006-04-04 11:50:00 1725
原创 设计模式笔记(7 FLYWEIGHT & PROXY)
FLYWEIGHT(享元)意图:运用共享技术有效地支持大量细粒度的对象。适用性:1.一个程序应用了大量的对象,造成很大的存储开销。2.对象的大多数状态可变为外部状态。3.如果删除对象的外部状态,那么可以用相对较少的公象对象取代很多组对象。4.应用程序不依赖于对象标识思考: 上述的适用性和别的模式中介绍的不太一样。基本上,适合使用FlyWeight模式的场景需要同时满足上述四个条件,而别的模式
2006-04-03 14:17:00 2013
原创 vc7.1中nth_element的一个实现优化
今天在vc7.1下写了一个小例子,测试一下nth_element和partial_sort,结果partial_sort表现正常,但nth_element的表现却很奇怪。 代码是这样的:vector v;for (int i = 0; i v.push_back(i + 1);random_shuffle(v.begin(), v.end());nth_e
2006-03-29 17:51:00 2126 2
转载 Lambda演算学习笔记(转)
from:http://www.blogjava.net/wxb_nudt/archive/2005/05/15/4311.aspx作者:wxb_nudtLamda演算简介Wikipedia(维基百科全书)中关于lambda演算的解释如下:The lambda calculus is a formal system designed to investigate function de
2006-03-28 20:39:00 4287
原创 (旧贴)一个复杂的boost.lambda表达式的例子
这是当初发在论坛里的,可惜没有人感兴趣,渐渐的沉没了.虽说对一篇烂文章来说,沉没了反而是一件好事情,对我来说,却是学习中的一个足迹,为将来反省留个见证.老实说,这个例子过于华而不实,写的人好写,读的人却不太好读.不过其中撰写复杂lambda的总结,基本上还是可用的。 lambda库固然是非凡的,但是,Boost.Spirit.Phoenix更是锋利,也许下一次,我会研究研究Phoen
2006-03-28 20:11:00 2674 2
原创 设计模式笔记(6 FACADE)
FACADE(外观)适用性:1.需要为一个复杂子系统提供一个简单接口时,为子系统提供一个简单的外观。2.客户程序与抽象类的实现之间存在很大的依赖性3.当需要构建一个层次结构的子系统时,使用FACADE来定义子系统中每层的入口点。思考: 关于第一点,好处是明显的,它降低了客户的学习成本。但是,一般而言,如果这个子系统是一个定制的子系统,可能直接提供一个简单接口更省事。如果这个子系统来是已经实现
2006-03-28 11:46:00 2068
转载 (转贴)Boost Getting Started 安装文档(翻译1.33版本)
from: http://blog.csdn.net/goodboy1881/archive/2006/03/27/640004.aspx
2006-03-28 11:02:00 2626 7
原创 设计模式笔记(5 COMPOSITE & DECORATOR)
COMPOSITE(组合)适用性:1.想表示对象的部分整体层次结构2.希望用户忽略组合对象和单个对象的不同。思考:组合模式的所有组件应该具备同一个接口。一直感觉,这种组合是一种递归组合的概念。所有的组件,按照树的结构组织起来,树的叶结点行为可能和中间结点的行为并不一致,这看上去违背了Liskov原则,似乎是一个容易引起迷惑的地方。树的叶结点可能并不能增加子结点,删除子结点的行为也可能失败。而一个中
2006-03-27 23:49:00 2165 2
转载 不停说抱歉的程序员
from http://blog.csdn.net/redguardtoo/archive/2006/03/23/636479.aspxwtf看到现在最好笑的笑话原文见http://thedailywtf.com/forums/65091/ShowPost.aspx下面是那个好心肠的程序员写的代码,代码的注释我翻译成了中文 /* * 我的这段代码很烂。真的很烂。我真心诚意的
2006-03-27 22:32:00 2153
原创 dynamic_cast详解
作为四个内部类型转换操作符之一的dynamic_cast和传统的C风格的强制类型转换有着巨大的差别。除了dynamic_cast以外的转换,其行为的都是在编译期就得以确定的,转换是否成功,并不依赖被转换的对象。而dynamic_cast则不然。在这里,不再讨论其他三种转换和C风格的转换。首先,dynamic_cast依赖于RTTI信息,其次,在转换时,dynamic_cast会检查转换的sourc
2006-03-22 23:02:00 53688 10
CPU Cache Page-Coloring
2015-10-10
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人