9月21
Mainsoft Grasshopper 2.5是一个可以把.NET代码动态翻译成Java代码的Visual Studio 2008 plugin。这个版本提供了对ASP.NET以及AJAX的全面支持。它也支持C# 3.0和Visual Basic 9的一些新语言特性,比如局部类型推理,匿名类型,对象和集合初始化器之类
。
Grasshopper可以从dev.mainsoft.com免费下载。Mainsoft也提供VS插件的商业版本。
。Grasshopper可以从dev.mainsoft.com免费下载。Mainsoft也提供VS插件的商业版本。
9月21
使用客户端数字证书和基本身份验证(Basic),域服务器的摘要式身份验证、集成 Windows 身份认证或自定义的 Form 认证等方式相比,虽然部署和管理方面稍微复杂一些,但安全性也更好一些,应用上也较为灵活。
在 ASP 和 ASP.NET 中处理和识别客户端数字证书是非常容易的,代码如下:
ASP (VBScript)语法:
ASP.NET(C#) 语法:
在 ASP 和 ASP.NET 中处理和识别客户端数字证书是非常容易的,代码如下:
ASP (VBScript)语法:
ASP.NET(C#) 语法:
9月21
有时候,我们不希望用户直接编辑TextBox,而是希望通过客户端脚本的方式来设置内容,一般的做法是设置TextBox的属性ReadOnly 为true。但在ASP.NET 2.0里有了变化,设置了ReadOnly为true的TextBox,在服务器端不能通过Text属性获取在客户端设置的新内容,在Reflector 里比较一下LoadPostData的实现
.NET 1.1中:
.NET 1.1中:
9月21
下面来谈下如何应用设计模式编写易于单元测试的代码
引言
设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述,通过在系统设计中引入合适的设计模式可以为系统实现提供更大的灵活性,从而有效地控制变化,更好地应对需求变更或者按需变更系统运行路径等问题。
单元测试是软件开发的一个重要组成部分,是与编码实现同步进行的开发活动,这一点已成为软件开发者的共识。适度的单元测试不但不会影响开发进度,反而可以为开发过程提供很好的控制,为软件质量、系统重构等提供有力的保障,并且,当后续系统需求发生变更、Bug Fix 或功能扩展时,能很好地保证已有实现不会遭到破坏,从而使得程序更易于维护和修改。 Martin Fowler、Kent Beck、Robert Martin 等软件设计领域泰斗更是极力倡导测试先行的测试驱动开发(Test Driven Development,TDD)的开发方式。
单元测试主要用于测试细粒度的程序单元,如类的某个复杂方法的正确性,也可以根据需要综合测试某个操作所涉及的多个相互联系的类的正确性。在很多情况下,相互联系的多个类中有些类比较简单,为这些简单类单独编写单元测试用例往往不如将它们与使用它们的类一起进行测试有意义。
模拟对象(Mock Objects)是为模拟被测试单元所使用的外围对象、设备(后文统一简称为外部对象)而设计的一种特殊对象,它们具有与外部对象相同的接口,但实现往往比较简单,可以根据测试的场景进行定制。由于单元测试不是系统测试,方便、快速地被执行是单元测试的一个基本要求,直接使用外部对象往往需要经过复杂的系统配置,并且容易出现与欲测试功能无关的问题;对于一些异常的场景,直接使用外部对象可能难以构造,而通过设计合适的 Mock Objects,则可以方便地模拟需要的场景,从而为单元测试的顺利执行提供有效的支持。
本文根据笔者经验,介绍了几种典型的设计模式在系统设计中的应用,及由此为编写单元测试带来的方便。
引言
设计模式是对被用来在特定场景下解决一般设计问题的类和相互通信的对象的描述,通过在系统设计中引入合适的设计模式可以为系统实现提供更大的灵活性,从而有效地控制变化,更好地应对需求变更或者按需变更系统运行路径等问题。
单元测试是软件开发的一个重要组成部分,是与编码实现同步进行的开发活动,这一点已成为软件开发者的共识。适度的单元测试不但不会影响开发进度,反而可以为开发过程提供很好的控制,为软件质量、系统重构等提供有力的保障,并且,当后续系统需求发生变更、Bug Fix 或功能扩展时,能很好地保证已有实现不会遭到破坏,从而使得程序更易于维护和修改。 Martin Fowler、Kent Beck、Robert Martin 等软件设计领域泰斗更是极力倡导测试先行的测试驱动开发(Test Driven Development,TDD)的开发方式。
单元测试主要用于测试细粒度的程序单元,如类的某个复杂方法的正确性,也可以根据需要综合测试某个操作所涉及的多个相互联系的类的正确性。在很多情况下,相互联系的多个类中有些类比较简单,为这些简单类单独编写单元测试用例往往不如将它们与使用它们的类一起进行测试有意义。
模拟对象(Mock Objects)是为模拟被测试单元所使用的外围对象、设备(后文统一简称为外部对象)而设计的一种特殊对象,它们具有与外部对象相同的接口,但实现往往比较简单,可以根据测试的场景进行定制。由于单元测试不是系统测试,方便、快速地被执行是单元测试的一个基本要求,直接使用外部对象往往需要经过复杂的系统配置,并且容易出现与欲测试功能无关的问题;对于一些异常的场景,直接使用外部对象可能难以构造,而通过设计合适的 Mock Objects,则可以方便地模拟需要的场景,从而为单元测试的顺利执行提供有效的支持。
本文根据笔者经验,介绍了几种典型的设计模式在系统设计中的应用,及由此为编写单元测试带来的方便。
9月21
引言
委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。
将方法作为方法的参数
我们先不管这个标题如何的绕口,也不管委托究竟是个什么东西,来看下面这两个最简单的方法,它们不过是在屏幕上输出一句问候的话语:
暂且不管这两个方法有没有什么实际意义。GreetPeople用于向某人问好,当我们传递代表某人姓名的name参数,比如说“heck”,进去的时候,在这个方法中,将调用EnglishGreeting方法,再次传递name参数,EnglishGreeting则用于向屏幕输出 “Morning, heck”。
现在假设这个程序需要进行全球化,哎呀,不好了,我是中国人,我不明白“Morning”是什么意思,怎么办呢?好吧,我们再加个中文版的问候方法:
委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。
将方法作为方法的参数
我们先不管这个标题如何的绕口,也不管委托究竟是个什么东西,来看下面这两个最简单的方法,它们不过是在屏幕上输出一句问候的话语:
暂且不管这两个方法有没有什么实际意义。GreetPeople用于向某人问好,当我们传递代表某人姓名的name参数,比如说“heck”,进去的时候,在这个方法中,将调用EnglishGreeting方法,再次传递name参数,EnglishGreeting则用于向屏幕输出 “Morning, heck”。
现在假设这个程序需要进行全球化,哎呀,不好了,我是中国人,我不明白“Morning”是什么意思,怎么办呢?好吧,我们再加个中文版的问候方法:
9月21
在使用apache的httpd服务器时,安全是你不得不考虑的一个问题。mod_security是为apache httpd服务器(1.x和2.x)设计的一个安全模块,mod_security可以阻止多种形式的攻击,比如SQL注入,跨站点脚本等等。这篇文章说明了如何在各种Linux上安装mod_security:
RHEL / CentOS
在CentOS / RHEL上安装mod_security,最简单的办法就是使用yum进行自动更新。首先需要新建一个更新的yum repository:
vi /etc/yum.repos.d/utterramblings.repo
在这个文件中加入以下内容:
RHEL / CentOS
在CentOS / RHEL上安装mod_security,最简单的办法就是使用yum进行自动更新。首先需要新建一个更新的yum repository:
vi /etc/yum.repos.d/utterramblings.repo
在这个文件中加入以下内容:
9月21
下面来介绍下这几本关于设模式的书。
《设计模式:可复用面向对象软件的基础》:这不是本简单的工具书,甚至可以说是有点学术著作的感觉。语言凝练,抽象深刻,很耐读(想一次读懂,可能吗?
高手可能,我们凡人就...)。对于设计模式不是有一定程度经验的,就不要从这本书开始入门了~_~。
《设计模式解析》:对设计模式做了一定的推理演示,有一定深度的。这本书,浏览过几次,总觉得不是一个适合入门的书,不知道网上有些书评为什么将其推荐为“最实用的设计模式入门书”。作者想谈的还不只是设计模式这么简单,两个作者甚至还在倡导一种基于模式的分析和设计的方法论。一句话,对学习设计模式新人可以看看本书,但是想理解作者说的很多东西,可能要等一段时间~_~ 中文版就不要读了,翻译的有点怪怪的~_~ 书中谈到的模式是最经常使用的模式。
《Java与模式》:没有完整看过,倒是经常翻翻,总体是本工具书,适合入门,也适合有一定经验的。虽然书的头几章谈了一些有关OO原则的东西,但是还是把它归类为工具书。 为什么推荐入门看,一是书中的话不是很抽象(前几章除外),适合入门理解,再者书中的例子和UML图,相信也更适合与入门的人,而且也比较实用。说明:绝对不是把本书归类为入门级别的书,毕竟是中国哥们搞出来的,顶一下~_~
《Head First Design Patterns》:真正适合入门的书,也非常实用。没有完整看过,闲着的时候翻翻电子版的,真的感觉很好,而且不没有觉得是本单纯的工具书。书中谈到的模式是最经常使用的模式。

《设计模式:可复用面向对象软件的基础》:这不是本简单的工具书,甚至可以说是有点学术著作的感觉。语言凝练,抽象深刻,很耐读(想一次读懂,可能吗?
高手可能,我们凡人就...)。对于设计模式不是有一定程度经验的,就不要从这本书开始入门了~_~。《设计模式解析》:对设计模式做了一定的推理演示,有一定深度的。这本书,浏览过几次,总觉得不是一个适合入门的书,不知道网上有些书评为什么将其推荐为“最实用的设计模式入门书”。作者想谈的还不只是设计模式这么简单,两个作者甚至还在倡导一种基于模式的分析和设计的方法论。一句话,对学习设计模式新人可以看看本书,但是想理解作者说的很多东西,可能要等一段时间~_~ 中文版就不要读了,翻译的有点怪怪的~_~ 书中谈到的模式是最经常使用的模式。
《Java与模式》:没有完整看过,倒是经常翻翻,总体是本工具书,适合入门,也适合有一定经验的。虽然书的头几章谈了一些有关OO原则的东西,但是还是把它归类为工具书。 为什么推荐入门看,一是书中的话不是很抽象(前几章除外),适合入门理解,再者书中的例子和UML图,相信也更适合与入门的人,而且也比较实用。说明:绝对不是把本书归类为入门级别的书,毕竟是中国哥们搞出来的,顶一下~_~
《Head First Design Patterns》:真正适合入门的书,也非常实用。没有完整看过,闲着的时候翻翻电子版的,真的感觉很好,而且不没有觉得是本单纯的工具书。书中谈到的模式是最经常使用的模式。
9月21
APT 常用指令如下:
apt-get update
更新软件包列表
apt-get dist-upgrade
升级 rpm
apt-cache search
搜索软件包,ex: apt-cache search httpd
apt-get install
安裝软件包,这里的软件包安裝,会考虑到依赖性的问题 ex: apt-get install httpd
apt-get remove
移除软件包,这里的软件包移除,也会考虑到依赖性的问题 ex: apt-get remove httpd
apt-get clean
清除安裝時下载的暂存软件包原始档案,位於 /var/cache/apt/archives
apt-get update
更新软件包列表
apt-get dist-upgrade
升级 rpm
apt-cache search
搜索软件包,ex: apt-cache search httpd
apt-get install
安裝软件包,这里的软件包安裝,会考虑到依赖性的问题 ex: apt-get install httpd
apt-get remove
移除软件包,这里的软件包移除,也会考虑到依赖性的问题 ex: apt-get remove httpd
apt-get clean
清除安裝時下载的暂存软件包原始档案,位於 /var/cache/apt/archives
9月21
一、引言
这么久以来,JavaScript在Web开发中一直处于被忽视的地位,甚至有相当一部分开发人员对它产生了误解,认为JavaScript只不过是用来完成一些花哨功能的雕虫小技。网络上广为流传的低质量的JavaScript代码对此也起到了推波助澜的作用...很多应用中JavaScript都采用了面向过程的编程方式,代码的可扩展性不好,复制粘贴的代码比比皆是...
随着Ajax等技术的广泛使用,YUI、Prototype等对JavaScript的应用可谓是淋漓尽致、出神入化。人们才发现原来JavaScript可以实现如此强大的功能,具备如此优雅的架构...
二、准备
1、概念
JavaScript是一种弱类型语言。包括:
基本类型:数字Number,字符串String,布尔值Boolean;
复合类型:对象Object,数组Array;
工具类型:全局对象Global,日期Date,数学对象Math,正则表达式RegExp,错误对象Error;
特殊类型:函数Function。
这里我只想说两点:
1)基本数据类型的包装对象
每一个基本数据类型都有一个对应的对象类。可以灵活地实现类型转换。简单地说,JavaScript不仅支持数字、字符串和布尔值这些数据类型,还支持Number、String、Boolean类,这些类是基本数据类型的包装(wrapper)。
例子:
这里,s保存了一个字符串,原始的字符串值是不会改变的。一个新的String对象被创建了,实现了对长度属性的访问,之后它就被销毁了。
这么久以来,JavaScript在Web开发中一直处于被忽视的地位,甚至有相当一部分开发人员对它产生了误解,认为JavaScript只不过是用来完成一些花哨功能的雕虫小技。网络上广为流传的低质量的JavaScript代码对此也起到了推波助澜的作用...很多应用中JavaScript都采用了面向过程的编程方式,代码的可扩展性不好,复制粘贴的代码比比皆是...
随着Ajax等技术的广泛使用,YUI、Prototype等对JavaScript的应用可谓是淋漓尽致、出神入化。人们才发现原来JavaScript可以实现如此强大的功能,具备如此优雅的架构...
二、准备
1、概念
JavaScript是一种弱类型语言。包括:
基本类型:数字Number,字符串String,布尔值Boolean;
复合类型:对象Object,数组Array;
工具类型:全局对象Global,日期Date,数学对象Math,正则表达式RegExp,错误对象Error;
特殊类型:函数Function。
这里我只想说两点:
1)基本数据类型的包装对象
每一个基本数据类型都有一个对应的对象类。可以灵活地实现类型转换。简单地说,JavaScript不仅支持数字、字符串和布尔值这些数据类型,还支持Number、String、Boolean类,这些类是基本数据类型的包装(wrapper)。
例子:
这里,s保存了一个字符串,原始的字符串值是不会改变的。一个新的String对象被创建了,实现了对长度属性的访问,之后它就被销毁了。
9月21
通常来说,我们用用例图来表示系统的需求
。用例图中包含如下元素:
1. 用例(Use Case):用例表示参与者(Actor)发起或者参加的一系列行为。
2.参与者(Actor):参与者是在系统中某一交互行为中特定角色的人,组织或者外部系统。
3.关联(Associataion):通常来说我们在参与者和用例之间用一条线连接,表示它们之间的关联关系,关联可以是带箭头的也可以不带箭头,箭头通常表示是谁发起了这次交互行为,或者表示谁是这次交互的主要角色。
4.系统边界:你可以在用例图中画一个方框表示系统边界。方框以内的用例才会被包含在系统中,方框以外的用例不被包含在系统中。
5.包(Package):你可以用包把不同的用例组织成不同的组
图1是一个学校开学时一些交互的用例图。从这个图中可以看到,学生,财务处,和教务处都是系统中的参与者。注意“交纳学费”这个用例有两个参与者(学生和财务处)。有一点需要强调的是关联本身并不表示数据的流向。如果要表示数据的流向更应该使用活动图。

图1
通常来说,在设计用例时,每个用例都应该以明确的动作开始,比如说“交纳电费”等等。用例中的用词应当使用业务术语,而不是计算机术语。
。用例图中包含如下元素:1. 用例(Use Case):用例表示参与者(Actor)发起或者参加的一系列行为。
2.参与者(Actor):参与者是在系统中某一交互行为中特定角色的人,组织或者外部系统。
3.关联(Associataion):通常来说我们在参与者和用例之间用一条线连接,表示它们之间的关联关系,关联可以是带箭头的也可以不带箭头,箭头通常表示是谁发起了这次交互行为,或者表示谁是这次交互的主要角色。
4.系统边界:你可以在用例图中画一个方框表示系统边界。方框以内的用例才会被包含在系统中,方框以外的用例不被包含在系统中。
5.包(Package):你可以用包把不同的用例组织成不同的组
图1是一个学校开学时一些交互的用例图。从这个图中可以看到,学生,财务处,和教务处都是系统中的参与者。注意“交纳学费”这个用例有两个参与者(学生和财务处)。有一点需要强调的是关联本身并不表示数据的流向。如果要表示数据的流向更应该使用活动图。
图1
通常来说,在设计用例时,每个用例都应该以明确的动作开始,比如说“交纳电费”等等。用例中的用词应当使用业务术语,而不是计算机术语。







