
程序设计与软件工程
文章平均质量分 80
吹泡泡的小猫
着迷与计算机有关的任何东西,关注软件开发团队能力提升和敏捷开发
展开
-
再读《架构整洁之道》
时至今日,软件开发技术中最热闹的领域就是前端开发了,各种 xxxScript 语言,各种前端框架,以至于很长时间都没有再听过“面向对象”这种“古老”的词汇了。作为上了年纪的人,当有人问起什么是软件设计的时候,脑子里本能地就会出现 SRP、OCP、DIP 这样的东西。这些“古董”东西现在还有用吗?函数式编程都没有变量了,面向对象的封装还有学习的必要了吗?现在流行分布式系统,“架构师”们言必称分布式设计,在这种体系中各种抽象和接口设计的原则还用得上吗?就在 SRP、LSP、OCP、DIP 这些词汇快要从记忆原创 2021-07-22 10:38:04 · 473 阅读 · 1 评论 -
TDD,测试代码可以代替文档吗?
曾经,我认为只要做好详细设计工作,软件编码就成为一种体力活。在我印象中传统软件工程理论好像是这么说得:分析和设计是软件生产过程中最重要的两个阶段,好的设计产生好的结果,坏的设计产生坏的结果,详细设计文档是软件过程中最重要的部分,甚至比代码还重要。国内某人的书中还提到,“只要有了详细设计,哪怕原来的开发人员都离开了,换一批人照着详细设计仍然能把软件做完”。一提到详细设计我的脑子里也已经出现了这原创 2008-11-25 22:23:00 · 5482 阅读 · 5 评论 -
用C++ TR1 生成随机数
用C++ TR1 生成随机数 原作 :[英文原文]翻译 :Orbit(阿猫阿狗) 介绍 本文将介绍如何使用C++ TR1(C++ 标准委员会 Technical Report 1) 提供的随机数生成功能 除了介绍基本的一致随机数生成之外,还会介绍随机样本的可能分布,包括:柏努利分布,二项分布,指数分布,伽马分布,几何分布,正态分布和泊松分布。我会指出一些针对特定分翻译 2008-10-05 20:52:00 · 11110 阅读 · 3 评论 -
装配线(工作站)问题的两种解法
上学的时候有一道题目一直困扰着我,那就是厨师摆盘子问题,问题的描述是这样的:厨师的所有盘子都放在一个架子上,每天工作结束他都要将盘子按照从小到大的顺序排好,问题是架子不太稳,如果一次拿出一个或几个盘子,架子可能要倒掉,所以他必须只能从一边翻动盘子,由于他只有两只手,所以只能用两只手将拿起的盘子一起翻转。问题是当给出一个杂乱的盘子序列时,如何以最小的翻转次数将其排序。 当时用穷举的方法解原创 2008-08-26 21:32:00 · 4030 阅读 · 0 评论 -
只有通过实践才能真正了解TDD
软件构建学问中总有一些理论上很美好,但是一使用就面目全非的东西,比如传统的瀑布模型。敏捷里很多被称之为思想的东西,恰恰没有太高深的理论,但都是一些实践的艺术,强调动手做而不是用理论论证。TDD就是这样一种东西,单纯去研究它的理论,分析它的优点和缺点没有任何意义,因为它本身就是一个很单纯的东西,再对其抽象也得不出象“相对论”那样深厚的理论。问题是你做了没有?支持TDD的人有没有从实践中真正体原创 2008-08-27 22:54:00 · 3831 阅读 · 2 评论 -
Handling Multiple Versions in a Single Project Team
原作 :Mark Levison [英文原文:http://www.infoq.com/news/2008/06/multiple_versions ]翻译 :oRbIt 产品的第一个版本发布出去以后,你和你的团队就必须面临一个进退两难的局面--如何在维护已经发布的版本的基础上继续开发下一个版本。针对这个问题,Michael Dubakov(Target Process的创建者和CEO)翻译 2008-06-03 23:02:00 · 1889 阅读 · 0 评论 -
自己动手编译firefox,thunderbird 方法补充
自己动手编译firefox,thunderbird 方法补充 去年,我在博文《自己动手编译Mozilla Firefox和Thunderbird》介绍了mozilla旗下的两款开源软件firefox和thunderbird在Windows平台上的编译方法,不过从去年年底开始,mozilla为了简化编译方法,将所有编译firefox和原创 2008-08-18 22:09:00 · 5378 阅读 · 0 评论 -
《编程之美》一摞烙饼问题探讨
《编程之美》一摞烙饼问题探讨 这类问题我最早遇到是厨师摆盘子问题,就是厨师要把一个架子上的盘子按照从大到小排列,只能象本题中翻动烙饼的方式翻动盘子,当时我给出了这样的答案:int FindMaxIdx(int *pDishes, int nBegin, int nEnd){ int i,maxIdx = nBegin; for(i = nBegin + 1; i {原创 2008-08-18 21:58:00 · 5249 阅读 · 1 评论 -
关于《编程之美》CPU曲线控制例子的探讨
上个月到福州路“扫”书店,本来想买几本敏捷和TDD的书,确意外发现了《编程之美》这本书。一开始被吸引是因为书名下面的副标题:微软面试。。。。,因为2005年毕业的时候曾有一次失败的微软面试,所以抱着事后看客的心态拿起来翻翻,这一翻就决定立刻买下这本书。从第一章开始,每一章的例子都很吸引我,虽然有一些题目早知道解法,但看到有更巧妙的方法时还是忍不住击节,要是但是面试的时候能先看看这本书就好了原创 2008-08-04 23:09:00 · 7710 阅读 · 0 评论 -
从VC6到VC9移植代码问题总结
当年在学校学习C编程的时候用的是TC2.0,后来学C++用TC3.0,有一天突然发现Borland C++ 3.1的IDE比较好用,于是改用BC31,然后是BC4,但是到了BC5(还有BC5.02)的时候就玩不下去了,因为我那台只有16M内存的P100实在是跑不动这个庞然大物,在OWL和MFC之间“痛苦地”抉择了一部电影的时间后,我决定放弃添加内存的计划,改用Visual C++试试。因为原创 2008-11-28 21:53:00 · 25648 阅读 · 21 评论 -
算法系列之十六:使用穷举法解猜结果游戏
一、 引言 穷举是解决问题的一种常用思路,当对一个问题无从下手的时候,可以考虑在问题域允许的范围内将所有可能的结果穷举出来,然后根据正确结果的判断规则对这些结果逐个验证,从而找出正确的结果。采用穷举的方法求解问题的答案比较适合计算机做,对这种体力活它们没有怨言,本文就以常见的两个猜结果的题目为例,介绍一下如何通过计算机程序解决此类问题,顺便介绍一下穷举法常见的算法结构和实现方式。原创 2012-05-27 23:01:37 · 13161 阅读 · 12 评论 -
递归和Windows系统的栈保护
对于使用默认栈空间大小的线程来说,调用算法系列文章第7篇提到的递归版本的IsEvenNumber()函数时,当n的值大于10000时就会导致栈溢出。在Windows系统上栈溢出会导致线程的意外终止,这种线程的意外终止通常都会导致整个软件无法正常工作。如果在递归计算的过程中能够提前预知到这种情况的堆栈溢出并终止后续的递归运算,对提高程序的安全性和健壮性都很有帮助,本话题就讨论了一种能够应用与Windows系统的检测方法。原创 2014-01-13 10:05:43 · 8015 阅读 · 0 评论 -
基于文件过滤驱动的透明加密那点事儿
文件透明加密这点事儿,从2001年开始出现基于API HOOK的方式开始到现在,已经十几年了,有细心人按技术实现的方式将其细分为4代,分别是基于API HOOK的第一代技术、基于文件过滤驱动(加清缓存)的第二代技术、使用Layerfsd的双缓冲第三代技术和基于微软新一代minifilter框架的Layerfsd双缓冲第四代技术。第一代和第二代的技术划分基本上没有异议,所谓的第四代很多人并不认同,认原创 2013-08-11 23:22:16 · 18811 阅读 · 4 评论 -
算法系列之十八:用天文方法计算二十四节气(下)
【接上篇】 经过上述计算转换得到坐标值是理论值,或者说是天体的几何位置,但是FK5系统是一个目视系统,也就是说体现的是人眼睛观察效果(光学位置),这就需要根据地球的物理环境、大气环境等信息做进一步的修正,使其和人类从地球上观察星体的观测结果一致。 首先需要进行章动修正。章动是指地球沿自转轴的指向绕黄道极缓慢旋转过程中,由于地球上物质分布不均匀性和月球及其它行星的摄动力原创 2012-09-04 23:20:27 · 27291 阅读 · 35 评论 -
TabSiPlus发布1749版本
拖了几天,终于可以发布了,下载地址如下: http://www.winmsg.com/download/TabSiPlus_0_99b2_1749.rar 这个包里没有附带VC的运行库,考虑到大多数人的机器上都有这个东东了,就没有包含在这个包里。如果在你的系统上无法运行,请至微软网站呢下载VS2008的VC运行库,或者下载TabsiPlus的1510 版本,这个版本中带有VC运行库,安装这个运行库原创 2012-06-29 14:56:55 · 20952 阅读 · 25 评论 -
创建有个性的对话框之MFC篇(一)
想使自己的软件与众不同就要给软件加点“色”,一个颜色搭配协调的窗口要比windows千篇一律的灰底黑字更能吸引别人的眼球。设想如果html浏览器显示的网页都是白底黑字,还会有那么多的mm喜欢上网吗?可能互联网的人气将下降一半。做个出色的界面对于老手来说可能不在话下,但是对于新手来说还是无从下手,使用BCGControlBar和Xtreme Toolkit是个很好的选择,不过对于一个小程序使用这么大原创 2005-08-23 19:48:00 · 5339 阅读 · 2 评论 -
创建有个性的对话框之MFC篇(二)
HBRUSH CCustDlgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); TCHAR szClassName[64]; ::GetClassName(pWnd->GetSafeHwnd(),szClassName,64)原创 2005-08-23 20:07:00 · 5201 阅读 · 2 评论 -
Source Insight做个外挂系列之五--Insight “TabSiPlus”
“TabSiPlus 外挂插件”主要有两部分组成,分别是“外挂插件加载器”和“插件动态库”。“插件动态库”完成Source Insight窗口的Hook,显示Tab标签栏,截获Source Insight的窗口消息并根据消息调整Tab标签栏等功能,这是一个动态链接库,不能主动执行,所以还需要一个“外挂插件加载器”,“外挂插件加载器”是一个独立的可执行文件,它的主要功能就是发现Source原创 2008-01-09 20:31:00 · 12445 阅读 · 5 评论 -
用表驱动代替switch-case
不知道从什么时候开始,switch-case语句成了代码坏味道的代名词,写代码的时候小心翼翼地避开它,看到别人代码中的switch-case就皱眉头,想想其实大可不必这样,switch-case语句并不是代码坏味道的根源,坏味道来自糟糕的代码(结构)设计,比如过多的switch-case分支,或者多重switch-case嵌套等等,这些都将导致代码可读性下降,如果再加上代码风格较差,代码原创 2008-02-25 21:28:00 · 9521 阅读 · 11 评论 -
C++0x,崭新的C++,还是另一个JAVA?
输入您的搜索字词 提交搜索表单 C++0x,崭新的C++,还是另一个JAVA? 最近,从全球最活跃的C++社区boost传来消息,新的C原创 2007-02-12 01:02:00 · 19530 阅读 · 38 评论 -
VC6功能增强插件TabBars代码编译和调试说明
首先说明,如果您只是想了解“TabBars”的功能和使用方法,请查看相关的两篇文章:“VC6功能增强插件TabBars介绍”和“VC6功能增强插件TabBars安装、使用说明”。一 如何获得“TabBars”的源代码(1)通过http://www.winmsg.com/cn/orbit.htm下载,但是网站是朋友的,不能保证及时更新到最新版(2)通过本链接下载(http://blog.csdn.n原创 2005-09-05 19:12:00 · 5896 阅读 · 8 评论 -
VC6功能增强插件TabBars安装、使用说明
目前“TabBars”插件还没有做安装程序,不过VC插件的安装很简单,对于程序员来说不是什么难事。在“TabBars”发布的插件安装包内通常包含有英文版和中文版两个版本的插件二进制文件,还有相应的配置文件、软件版权说明以及GNU协议等文档。安装的过程就是将插件文件TabBars.dll和配置文件TabBars.ini复制到VC指定的插件安装目录即可,具体过程是:首先关闭所有VC窗口,然后用Winz原创 2005-09-05 19:10:00 · 4964 阅读 · 3 评论 -
VC6功能增强插件TabBars介绍
输入您的搜索字词 提交搜索表单 Visual C++ 6.0的集成开发环境对项目文件的管理功能比前几个版本有了很大的增强,但是对打开文档窗口的管理和普通的MDI编辑软件一样,只能通过窗口菜单切原创 2005-09-05 19:07:00 · 8266 阅读 · 0 评论 -
操作QQWary.dat数据文件的类
操作QQWary.dat数据文件的类摘要:QQwry是目前使用很广泛的IP地址数据库,本文研究了QQwry数据文件的格式,编写了一个读取数据文件,查询IP地址信息的类,并附带完整的演示例子的VC代码。关键字:IP地址查询,QQwry 2002年末的时候,我想给我的一个软件添加ip地址查询功能,当时很多QQ版本都支持显示ip地址信息,记得这种功能最早有一个名为“追捕”的软件原创 2005-08-18 19:58:00 · 3934 阅读 · 7 评论 -
函数调用约定与函数名称修饰规则(一)
作者:星轨(oRbIt) E_Mail:inte2000@163.com 转载请注明原作者,否则请勿转载 使用C/C++语言开发软件的程序员经常碰到这样的问题:有时候是程序编译没有问题,但是链接的时候总是报告函数不存在(经典的LNK 2001错误),有时候是程序编译和链接都没有错误,但是只要调用库中的函数就会出现堆栈异常。这些现象通常是出现在C和C++的代码混合使原创 2005-08-10 20:06:00 · 5024 阅读 · 1 评论 -
在下拉列表框中显示树状结构
作者:星轨(oRbIt) E_Mail :inte2000@163.com 转载请注明原作者,否则请勿转载 在下拉列表框中显示树状结构 下拉列表框(或称组合列表框)是在Windows系统下开发软件最常用的控件之一,该控件适用性强且使用简单,因而深受开发人员喜爱。一个典型的用户界面就是使用下拉列表框(或称组合列表框)显示数据库中相关表名或某个表中的某个字段的全部数据原创 2005-08-08 18:15:00 · 7027 阅读 · 0 评论 -
函数调用约定与函数名称修饰规则(三)
作者:星轨(oRbIt) E_Mail:inte2000@163.com 转载请注明原作者,否则请勿转载函数调用约定和名字修饰规则不匹配引起的常见问题 函数调用时如果出现堆栈异常,十有八九是由于函数调用约定不匹配引起的。比如动态链接库a有以下导出函数:long MakeFun(long lFun); 动态库生成的时候采用的函数调用约定是__stdcal原创 2005-08-10 20:25:00 · 3175 阅读 · 0 评论 -
函数调用约定与函数名称修饰规则(二)
作者:星轨(oRbIt) E_Mail:inte2000@163.com 转载请注明原作者,否则请勿转载函数名字修饰(Decorated Name)方式 函数的名字修饰(Decorated Name)就是编译器在编译期间创建的一个字符串,用来指明函数的定义或原型。LINK程序或其他工具有时需要指定函数的名字修饰来定位函数的正确位置。多数情况下程序员并不需要知道函数原创 2005-08-10 20:16:00 · 3411 阅读 · 2 评论 -
TabBars代码解读之——Tabbar栏与其他窗口之间的关系
输入您的搜索字词 提交搜索表单 集成开发环境中各个窗口的行为都是事先实现的,比如,文档编辑窗口对应着多文档类的视图窗口,负责对用户的输入进行响应,更新窗口的内容,主窗口负责调度各个视图窗口。V原创 2005-09-19 08:34:00 · 3398 阅读 · 0 评论 -
TabBars代码解读之——Visual Studio的自动化接口
Microsoft的Visual Studio开发工具为软件开发人员提供了强大的功能,通过集成开发环境(IDE)的构建平台提供的菜单和工具条,开发人员可以生成项目,编写代码,调试直到最终生成应用程序。除此之外,Visual Studio还提供了一套完整的自动化对象,通过操作这些自动化对象提供的方法,开发人员在不使用菜单和工具条的情况下也能够完成诸如打开文件、激活窗口或改变窗口大小等操作。V原创 2005-09-12 11:48:00 · 4080 阅读 · 3 评论 -
创建有个性的对话框之ATL/WTL篇
输入您的搜索字词 提交搜索表单 前记 这几个嵌入类其实很早之间就完成了,2003年的时候我在CodeProject上发布了这些代码,不过当时使用了紫色作为按钮的边框,导致几个无聊的LY在哪里争吵原创 2005-09-19 20:10:00 · 10928 阅读 · 6 评论 -
给Source Insight做个外挂之一--发现Source Insight
作者:星轨(oRbIt) E_Mail :inte2000@163.com 输入您的搜索字词 提交搜索表单 一提到外挂程序,大家肯定都不陌生,QQ就有很多个版本的去广告外挂,很多原创 2006-08-20 17:43:00 · 27742 阅读 · 11 评论 -
用C/C++实现代码的动态修改(SMC)
作者:星轨(oRbIt) E_Mail :inte2000@163.com 摘要:所谓SMC(Self Modifying Code)技术,就是一种将可执行文件中的代码或数据进行加密,防止别人使用逆向工程工具(比如一些常见的反汇编工具)对程序进行静态分析的方法,只有程序运行时才对代码和数据进行解密,从而正常运行程序和访问数据。计算机病毒通常也会采用SMC技术动态修改内存中的可执行代码原创 2006-08-02 19:11:00 · 9001 阅读 · 1 评论 -
静态代码检查工具PC-Lint(二)
输入您的搜索字词 提交搜索表单 3.5 格式检查 PC-Lint会检查printf和scanf(及其家族)中的格式冲突,例如:printf( "%+c", ... )将产生566告警,因为加原创 2006-07-24 23:33:00 · 24194 阅读 · 10 评论 -
静态代码检查工具PC-Lint(一)
作者:星轨(oRbIt) E_Mail :inte2000@163.com 输入您的搜索字词 提交搜索表单 [本文部分内容和例子都来自于PC-Lint用户手册,翻译得时候加上了点自己的理原创 2006-06-23 09:44:00 · 19779 阅读 · 3 评论 -
设计模式应用实例(序言)
序言 输入您的搜索字词 提交搜索表单 我从上大学的时候开始编程,不过直到2000年左右才开始原创 2006-06-02 22:05:00 · 6703 阅读 · 3 评论 -
修正TaskManagerEx2.0的一个BUG
摘要:简要介绍一个Windows 任务管理器(Task Manager)功能扩展工具TaskManagerEx,同时指出了TaskManagerEx 2.0的一个与中文文件名有关的BUG并修正了这个BUG。关键字:任务管理器 Task Manager 扩展 从Windows NT开始,Microsoft给Windows提供了一个功能强大的任务管理器(Task Manager),任务管理器功能原创 2005-11-25 18:34:00 · 2775 阅读 · 1 评论 -
使用Rational PureCoverage测试代码覆盖率
输入您的搜索字词 提交搜索表单 软件测试是软件构建过程中非常重要的一环,测试可以完成许多事,但最重要的是可以衡量正在开发的软件的质量。有一种观点认为,在开发周期中,越早使测试成为投入的一部分越原创 2005-11-26 11:09:00 · 9746 阅读 · 2 评论 -
WTL for MFC Programmers, Part VIII - Property Sheets and Wizards
WTL for MFC Programmers, Part VIII - Property Sheets and Wizards原作 :Michael Dunn [英文原文]翻译 :Orbit(星轨 oRbIt) [http://www.winmsg.com/cn/orbit.htm]翻译 2005-05-24 20:50:00 · 2699 阅读 · 0 评论 -
进程与线程
作者:星轨(oRbIt) E_Mail:inte2000@163.com 转载请注明原作者,否则请勿转载 输入您的搜索字词 提交搜索表单 什么是进程?什么是线程?它们之间到底原创 2005-07-30 16:45:00 · 8438 阅读 · 3 评论