金山安全卫士代码批评
金山卫士开源了,参见金山卫士开源计划。 抱着学习研究的目的下了一份看看。看了一些代码,觉得被忽悠了。中国知名通用软件厂商,民族软件业的一面旗帜就这代码水平?代码显然达不到工业级的标准,只能算是实习生练手的水准。为了给有意拿这份代码当学习资料的初学者提个醒,不被误导,做出了一个艰难的决定,写博文来评论金山安全卫士的代码。
先说说代码中的几个突出问题
C++的应用不过关。该用const和static的时候不用代码封装做的不好,调用者知道被调用者很多细节,且对被调用者做了过多假设。文件和函数命名不规划。不能表达内容,且容易引起误解测试靠打印而不是assert,很难自动化验证。且测试代码未与工程代码分离。太多的if-else而不会用表驱动函数逻辑不严格,有明显漏洞。
一点一点的看
1 C++的应用不过关。该用const和static的时候不用
pp
http://www.cyqdata.cn/cnblogs/article-detail-127
系统架构技能之设计模式-抽象工厂模式
一、上篇回顾
上篇我们主要讲述了简单工厂模式和工厂模式。并且分析了每种模式的应用场景和一些优缺点,我们现在来回顾一下:
简单工厂模式:一个工厂负责所有类型对象的创建,不支持无缝的新增新的类型对象的创建。
工厂模式:多个工厂负责多个类型对象的创建,每个工厂只负责具体类型对象的创建,支持无缝的新增类型对象的创建,需要实现工厂接口类和具体的类型对象类。
我们来简单的对比下这2个模式的优缺点:
模式名称
优点
缺点
简单工厂模式
一个工厂负责所有对
http://www.cyqdata.cn/cnblogs/article-detail-126
Expression Blend使用笔刷
Expression Blend可以让我们十分方便的创建基于WPF的UI,在本文中,我会介绍如何使用WPF画图形,并使用颜色等元素去修饰图形。 什么是笔刷? MSDN是这样解释的:Everything visible on your screen is visible because it was painted by a brush. For example, a brush is used to describe the background of a button, the foreground of text, and the fill of a shape. This topic introduces the concepts of painting with Windows Presentation Foundation (WPF) brushe
http://www.cyqdata.cn/cnblogs/article-detail-125
跟我学做c#皮肤美化--Textbox
效果预览 还是先看看最终的效果图(和QQ登陆中的输入框效果差不多): 查看整个相册 效果说明: 1.实现了水印的效果 2.实现了鼠标移上去的时候周围产生辉光 3.输入前端可以设置图片 实现辉光效果 整体说明: 前面显示的那个图片我采用的是一个picturebox,当然如果你愿意也可以自己画(后续的“button再探讨”中就采用的是自己画的方式)。图片后面的输入文本框采用的是textbox控件,这样一来就避免了许多绘制textbox的麻烦(我一开始打算自己绘制用户输入的字符的,不过发现不理想)。然后边框和辉光都是画出来的
http://www.cyqdata.cn/cnblogs/article-detail-114
Socket 同步和异步模式
学习socket 的一些笔记,希望和大家一起讨论 。一.什么是socket 所谓socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 以J2SDK-1.3为例,Socket和ServerSocket类库位于java .net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
二 .开发原理: 服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些
http://www.cyqdata.cn/cnblogs/article-detail-113
使用PostSharp在.NET平台上实现AOP
摘要
本文首先介绍AOP(面向方面编程)的相关概念及理论,然后介绍如何使用PostSharp框架在.NET平台上实现AOP,最后对PostSharp的机制及AOP的优劣进行一个简单的分析。
AOP(Aspect-Oriented Programming)
AOP的基本定义及作用
根据维基百科的定义,“AOP(Aspect-Oriented Programming)是一种将函数的辅助性功能与业务逻辑相分离的编程泛型(programming paradigm),其目的是将横切关注点(cross-cutting concerns)分离出来,使得程序具有更高的模块化特性。AOP是面向方面软件开发(Aspect-Oriented Software Development)在编码实现层面上的具体表现(面向方面软件开发AOSD是一个囊括面向方面分析、面向方面设计和面向方面编程等一系列概念的完
http://www.cyqdata.cn/cnblogs/article-detail-112
关于大型asp.net应用系统的架构—如何做到高性能高可伸缩性
简介
前面一篇<<关于大型asp.net应用系统的架构-架构的选择>>写完之后,有一些同仁热心回复,有的是提问题,同时希望能举一些例子来说明;有的是提建议,希望下一篇写得更详细点;还有的同仁提出不同的观点。感谢大家的参与。会继续努力的。本文将针对层Layer和排Tier的区别做个辨析。并详细介绍3 Tier / N Tier架构中各排Tier的开发。各Tier的分布式方式。以及为了达到高性能,低延迟,高可伸缩性,需要采取哪些方法和手段。
关于“大型asp.net应用系统 ”的概念
意指能支持同时在线用户数目很多的asp.net应用系统。同时在线用户数目要达到多少才算大型。其实也没有一个可以作为共识的定义,个人认为如果一个应用系统能做到7x24小时同时在线用户数不少于5000的,应该可以称为大型应用系统。例如:微软的官网www.m
http://www.cyqdata.cn/cnblogs/article-detail-111
CRM 2011中的Web服务
CRM2011中,对其系统做了进一步的统一与集中,体现之一,就是其所提供的Web服务。 在CRM4时代,CRM提高的服务有三个,分别是: 名称 功能描述 DiscoveryService 提供搜索组织单位的途径 CrmService 提供访问所有实体的途径 MetadataService 提供访问元数据的途径 而在CRM2011中,将CrmService与MetadataService的角色进行整合,取而代之的是IOrganizationService,而DiscoveryService也演进为IDiscoveryService Web服务。这两个服务的功能如下: IDiscoveryService:用于获取组织列表以及相应组织的IOrganizationService的URL地址; IOrganizationService:访问数据以及元数据; IDiscov
http://www.cyqdata.cn/cnblogs/article-detail-110
【STM32 .Net MF开发板学习-22】超声波测距模块研究
智能小车目前已经可以通过各种方式进行遥控了,不过做到这一步还远远不够,我们需要智能小车有自己的“思维”,根据需要进行进退、转向或停止。要做到这一步,必须让智能小车有自己的感知“器官”,第一步我们先添加测距传感器,以后我们会陆续研究寻际、摄像头等传感器,让所谓的智能小车,更加“智能”。
目前市面上的超声波模块有两种硬件接口,一种是触发和脉冲输出方式,一种是串口通信(RS232),后一种编写通信接口程序比较简单,就是简单的串口编程,不过售价比较高。前一种对实时性要求很高,其测量精度和你的程序实现相关。
我们仅介绍前一种通信方式,模块的工作原理如下:
(1)采用IO触发测距,给至少10us的高电平信号;
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO输出一高电平,高电平持续的时间
http://www.cyqdata.cn/cnblogs/article-detail-109
Windows PowerShell 2.0 代码调试并排除bug
没有任何脚本或程序能够保证在任何情况下毫无错误地执行,在外界条件变化的情况下,需要预防可能出错之处。本文将着重讲解如何调试PowerShell代码,即查找并排除bug,这是每个开发人员都应该熟练掌握的技术。在本文将介绍PowerShell提供的解决方法,以及诊断和预防错误的方法,以使程序更加健壮和稳定。 大多数编程语言和环境提供了完整调试特性的系统,可以逐步跟踪程序的执行,保证所有的执行过程符合预定的算法。然而PowerShell并没有提供脚本调试程序,这样开发人员必须采取其他手段来调试错误。可以通过一些巧妙的手段贴近于对程序的逐步调试,临时挂起执行流并检查程序状态。 对于一些复杂的任务,通常情况下会将程序细化分解为多个相对独立的子模块来检查各自的功能。分解后的模块之间要尽可能不包含过多耦合,这样才不会在调试时造成太多的麻烦。 1 打印调试 通过打印来调试程序是最原始且很有
http://www.cyqdata.cn/cnblogs/article-detail-108
如何评价个人在团队中的绩效
来道数学题先
已知a,b>0, (a+b)/2, sqrt(ab) 和 2/(1/a+1/b) 谁大?
现实中的人就像上面的a和b一样,虽然个体都一样,但组成的团队却可以有各种生产力。一个积极的评价方式能很有效地减少内耗,提高生产力。这篇博客能为你制定一个积极的评价方式提供参考。
世界团队千奇百怪,找到一种通用的评价方式是,不靠谱的。一群人在搬砖头,您可以通过他们的搬运量来评价他们的绩效。但是如果服务业,比如一群老师 在教计算机系列课程,没有砖头就不好评论了。这时让学生自己来评价是一种很好的选择。但是如果医生和护士在合作手术,让病人来评价就不太合适了。也许病人 睡了或者永远睡了。这时,相互评价是一种很好的选择。有时合作者之间是信息不对称的,比如
一群码农合作开发软件。只有码农自己知道偷了多少菜。这时我们如何评价个人在团队中的绩效呢?
我们调查了现
http://www.cyqdata.cn/cnblogs/article-detail-107
从高效沟通开始
在很多关于沟通的培训中,有很多描述非常富有弹性,可以从多个角度出发进行考虑,作为信息系统的构建者,我们也非常需要很多的沟通技能。当然,像销售人员那样热情奔放,也不像我们的特点。
在我们的团队中,沟通是以组织结构为基础的,我们的信息传递依赖于组织结构,沟通的有效性也和组织结构有一定的关系。如果在整个团队中层级比较多的话,当然我们可以先画出组织结构图,标明沟通的方向等以帮助我们分析,我们就需要考虑信息是否能够有效传递,以及传递的效率怎么样。
在经历的项目当中,如果存在层级比较多的情况,顶层如果能真正理解并能有效分解任务,并能通过尽可能简单的方式来传达的话,一般情况下,执行的效率会比较快,最终的解决方案也会比较简单,如果顶层不加理解地分配任务时,可能会产生很多的混乱,而这些混乱可能是非常致命的。所以沟通需要使用简单有效的方式传递信息。
沟通在很多时候是双向的,有时候我们会很委屈,明明
http://www.cyqdata.cn/cnblogs/article-detail-106
SharePoint要在master page中动态显示List数据的几种方式
我们都知道,在SharePoint中,Content page继承自Page layout,而Page layout又继承自Master page。Master page的作用大家都知道,它定义了站点的的整体外观和公共元素,因此有了很强的页面重用性和很好的页面编辑体验,Page layout通过ContentPlaceHolder为一些内容相似性很强的页面进行了布局,所以到了Content page那里,我们所做的只是放我们每个页面想要显示的内容即可,剩下的布局和样式都可以不用操心了。
好了,前面算是开场白吧!现在我们正式说重点,先从需求说起,客户要求整个站点的Footer部分要求从站点的List里面动态读取数据来生成它,而不是写死在master page里面,例如下面的图示,也就是说客户希望将来他们可以通过维护一个List数据来动态更新站点的Footer部分,附加排序,是否
http://www.cyqdata.cn/cnblogs/article-detail-105
浅谈 C# 交互窗口
我们知道,F# 的编译器是 fsc.exe,F# 交互窗口是 fsi.exe。其他动态语言也可以交互执行,例如 Ruby 语言的解释器是 ruby,交互窗口是 irb。而 Python 语言中,python 既可以解释执行,也可以作为交互窗口。请参见我于2010年6月15日写的随笔“Ubuntu 中的编程语言(上)”。 C# 语言虽然不是动态语言,但是在 mono 中也有一个 C# 交互窗口: csharp,请参阅 CsharpRepl 。 ben@ben1520:~> csharp
Mono C# Shell, type "help;" for help
Enter statements below.
csharp> Environment.Version;
4.0.30319.1
csharp> Environment.OSVersion;
Unix 2.6.34.
http://www.cyqdata.cn/cnblogs/article-detail-104
DataGridView 经典用法总结(上)--附有可下载的Demo
一、DataGridView 单元格验证
比如只允许输入数字
要求:验证错误后焦点不离开。
有两种方法:
DataGridView.EditingControlShowing 事件和DataGridView.CellValidating 事件。
(1) DataGridView.EditingControlShowing 事件。
显示用于编辑单元格的控件时发生,命名空间: System.Windows.Forms
程序集: System.Windows.Forms(在 system.windows.forms.dll 中)。
如:
void dgvCs_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
&nb
http://www.cyqdata.cn/cnblogs/article-detail-103
《 敏捷宣言》及其背后的准则
敏捷宣言的诞生:
2001年2月11日到13日,17位软件开发领域的领军人物聚集在美国犹他州的滑雪胜地雪鸟(Snowbird)雪场。经过两天的讨论,“敏捷”(Agile)这个词为全体聚会者所接受,用以概括一套全新的软件开发价值观。这套价值观,通过一份简明扼要的《敏捷宣言》,传递给世界,宣告了敏捷开发运动的开始。
敏捷新的价值观:
Individuals and interactions over processes and tools 个体与交互 重于 过程和工具 Working software over comprehensive documentation &nb
http://www.cyqdata.cn/cnblogs/article-detail-101
Silverlight应用开发2webcam自拍保存和"录像"
1 题外话:缘起
2 开工ing
2.1Silverlight中的视频
2.2伪视频录像
3 展示
4 题外话二
我拍基地
我拍桌面:死循环。。。
题外话:缘起
前几天看到几个外国年轻人,搞了个利用kinect做的PC版本上的自然用户界面。。。很cool,当时没看明白,以为是通过摄像头+他的算法,就可以做出来。。。害我把它的chorme插件下载下来。翻出箱底的摄像头开始乱摆弄。。。结果发现需要 kinect。。。当时那个郁闷啊。。。
然后就想拿摄像头能做其他什么游戏的没。。。发现很少。。然后又突然来了兴趣给基地做个视频监控系统!嘿嘿。。。。好
http://www.cyqdata.cn/cnblogs/article-detail-100
挖掘经典:几乎被人遗忘的HTML七种用法
当今的WEB领域,新概念、新技术不断涌现 -- WEB2.0、AJAX、HTML5.0... ...
但在几乎被我们忽略的HTML和XHTML里,还有许多并不为人所知的,但却非常有用的一些TAG
以下就是其中的七种用法:
一、元素分组:<fieldset>、<legend>
示例:
1 <fieldset> 2 <legend>健康信息:</legend> 3 <form> 4 <label>身高:<input type="text" /></label> &
http://www.cyqdata.cn/cnblogs/article-detail-99
Windows Azure重磅消息!!!!!
在PDC10上演示了一些Windows Azure的新特性,包括新的Silverlight Portal,VM,以及Extra small VMs,其中包含最低的VM价格(每小时0.05美元),现在这些都可以体验了!!!
刚登陆Windows Azure Portal,已经是Silverlight版的了,你也可以选择旧的Portal,两者都可以使用,看到VM Role以及Extra small VMs都还处于beta阶段!!
其中还包括以前没有的功能,比如可以添加多个Windows Live ID共同管理一个订阅等!!
慢慢体验吧:
http://msdn.microsoft.com/en-us/library/gg441576.aspx
Portal:http://windows.azure.com
作者: hievis 发表于 2010-11-30 20:5
http://www.cyqdata.cn/cnblogs/article-detail-98
系统架构技能之设计模式-系列索引
园子里面有太多优秀的设计模式文章了,但是可能每个人的出发角度和关注点不同,可能会对每个模式理解的角度和切面不同,我想以我自己理解的方式来跟大家共同探讨下常用的设计模式,并且我会结合 工作中的开发实际场景来说明每个模式的用法和特点,希望能对大家有所帮助,当然这些内容都是个人在实际项目中的总结和实践,错误或者理解有误之处,还请大家多多指正,多谢大家前来交流! 创建型 1、系统架构技能之设计模式-单件模式 2、系统架构技能之设计模式-工厂模式
http://www.cyqdata.cn/cnblogs/article-detail-77