2009年4月23日星期四
为什么减少我的收录,Google?
对Google博客很失望,但是再坚持一段时间,本人博客很多都是自己在网站开发中的总结,都是非常有用的,绝对不是随便大量采集过来的。
北京2009年的第一场雪
晚上下了班之后骑车回来,烟雨朦胧了北京城,很舒服的感觉,突然有点江南的味道,只不过自己的裤子挨弄湿了。很长一段时间来沉于程序开发中,却忽略了环境,忽略了春意。
一场春雨,一份滋润,播种了我的希望。
如何防范网站挂马,网站漏洞
1、服务器漏洞
服务器的漏洞是最需要防范的,如果服务器是你自己的,那么就应该进行合理的权限配置和封堵已知的漏洞,这一点尤其在Windows主机上尤为重要,如果是Liunux服务器,则相对安全一些,但对管理员的水平要求也更高。而如果你的网站没有自己的服务器,或者只是简单的虚机租用,那就只能希望你所选择的ISP是一个过硬的服务商了。
2、网站程序漏洞
这一点也很要命,比如像脚本入侵,sql注入攻击等都是很经常的事情。这要靠开发人员不断提升自身能力外,没有别的办法。这里提醒一点,最好不要使用基于网上下载的源码的网站,因为这些公开源码的东西,早就被有心之人研究透了,如果你不熟悉就贸然使用,后果不堪设想。
我的网站就是因为服务器的windows补丁没有及时更新,服务器被入侵了,我一直坚信“魔高一尺,道高一丈”,没有不可攻克的黑客攻击,只要多注意就可以了。
网站实现架构:关于动态网站和静态网站的想法
对于这个问题很多人的见解都不一样,有些人认为网站应该静态,因为这样不会给数据库压力,而且简易,还可以优化搜索引擎;有些人则认为动态网站好,因为页面统一,方便修改,而且节省空间,更容易维护。
我自己是做网站的,而且大多是动态网站,其实没有说什么类型的好,关键在于使用范围,对于大型新闻网站,因为页面基本不变,最好肯定是静态化新闻;但是对于交互性的,或者变动性比较大的网站,最好使用动态网站。
静态网站流量大了之后压力在于web服务器,现在已经有F5这类的东西来解决了;动态网站的压力则在于数据库服务器,不过也有Memecached这样的分布是数据库缓存来解决。而对于不管是动态网站还是静态网站都需要的图片、文件信息,则有Squid这样的软件了左缓存,以保护文件信息.
开源框架CSLA.NET研究之框架设计
(1)、设计思想
开发人员最希望看到的是所有的非业务对象都已经存在了,比如数据库访问对象,UI对象、数据验证对象、字符串处理对象和权限验证等,这样就可以集中精力去创建、修改业务对象,从而能够很好地维护业务逻辑和数据访问层,应对时时刻刻变化的需求。
CSLA.NET框架把业务对象在各层的撤消能力、失效业务对象的跟踪、“脏”数据的判断、业务对象和业务对象集合的关系、自定义身份验证对象、权限规则对象、数据库写入和读取对象都封装起来,而且为开发人员提供简单调用接口,全面支持Web程序和桌面应用程序的数据绑定。上面提到的这些支持,在.NET里都有解决方案,只不过很零散,CSLA.NET框架运用面向对象设计的思想方法把他们封装起来。
(2)、框架设计
每一个框架本身是一个庞大负责的实体,由很多类组成,而对于开发人员,应该提供给他们尽可能少但又能够满足业务需求的类。CSLA.NET框架做到了这一点,整个框架由七大块组成,包括创建业务对象、数据门户访问、对业务对象在各层间的撤销能力的支持、数据验证支持、分布式事务处理支持、身份验证及授权、工具支持类,但是面向开发人员的只有业务对象中的几个类,开发人员只需要继承这几个类就可以调用框架的所有其他方法。
在上面提到的七大块中,创建业务对象、数据门户访问和分布式事务处理能力是整个框架设计最为关键的部分。
①创建业务对象
业务对象类的设计决定整个框架是否好用,这些类是开发人员最经常使用的类,下图显示了框架中关键的业务对象类:
图7:业务对象最常用的六个类
在开发基于CSLA.NET框架下的分布式应用程序开发时,开发人员就只需要继承这几个业务对象类,便可以调用到CSLA.NET中提供的方法和享受到它的分布式处理能力。
②数据门户访问
数据门户为服务器提供了一个单一的访问和设置入口,负责管理业务对象在服务器上进行数据访问代码的时候与其通信,CSLA.NET框架的数据门户设计是很好的,它提供了一致的访问模式、把客户机和服务器直接的通信方式抽象出来、能够对本地和远程运行的程序进行单点控制。以下是数据门户几个重要的组成部分:
(1)、客户端DataPortal
数据门户继承架构的主要入口,供业务开发代码使用
(2)、客户端代理
客户端通道适配器模式,将下层网络协议从应用层抽象出来
(3)、消息对象
想服务器发送并传回数据
(4)、服务端宿主类
为服务器宿主,包括远程调用、企业服务、Web服务
(5)、服务器DataPortal
实现分布式事务处理技术,与数据存储层打交道
业务对象在客户机与服务器之间有四种操作模式,即查询、创建、修改、删除,都要通过数据门户来执行。
.NET的Windows模拟身份验证,远程网络传输文件
可能很多高手一下子就知道如何解决,但是我确实是经过了一番努力才弄明白,下面就结束如何使用.NET的Windows模拟身份验证。
1、首先引用两个名称空间
using System.Security.Principal;
using System.Runtime.InteropServices;
2、其次定义好模拟权限的调用方法
#region 权限模拟
public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;
[DllImport("advapi32.dll", CharSet = CharSet.Auto)]
public static extern int LogonUser(String lpszUserName, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
[DllImport("advapi32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError = true)]
public static extern int DuplicateToken(IntPtr hToken, int impersonationLevel, ref IntPtr hNewToken);
///
/// 验证用户,并生成WindowsIdentity 实例
///
///
///
///
///
private static WindowsIdentity GetIdentity(String userName, String domain, String password)
{
IntPtr token = IntPtr.Zero;
IntPtr tokenDuplicate = IntPtr.Zero;
if (LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) == 0)
return null;
else if (DuplicateToken(token, 2, ref tokenDuplicate) == 0)
return null;
else
return new WindowsIdentity(tokenDuplicate);
}
public WindowsImpersonationContext GetContext()
{
WindowsIdentity identity = null;
WindowsImpersonationContext impersonationContext = null;
identity = string.IsNullOrEmpty(user) ? null : GetIdentity(user, null, pwd);
// 使用用户凭证进行用户模拟
impersonationContext = (identity == null) ? null : identity.Impersonate();
return impersonationContext;
}
#endregion
3、在调用身份模拟的函数中使用
WindowsImpersonationContext impersonationContext = Instance.GetContext("identityValues");
//中间是处理函数
// 取消用户模拟
if (impersonationContext != null)
{
impersonationContext.Undo();
impersonationContext = null;
}
2009年4月22日星期三
谷歌新添个人档案搜索[转自新闻网]
谷歌公司软件工程师布赖恩·施托勒在落款21日的谷歌博客中写到:“我们中很多人不时会在谷歌网站上搜索自己的或别人的姓名,这已不是秘密。”
“当你搜索自己的名字时,为的是知道别人在网上会搜索到什么样关于你的信息,你搜索到的结果可能各种各样,并且可能是你并不想让别人看到的结果,”他写到,“因此,我们想把这件事做得更好,给你更多帮助。”
C#实现代理访问网络资源,源代码实现,WebClient篇
private static string GetHtml(string url, EncodingType type, bool isByProxy)
{
WebClient webClient = new WebClient();//创建WebClient实例myWebClient
if (isByProxy)
{
//创建代理服务器设置对象的实例
System.Net.WebProxy wp = new System.Net.WebProxy("ISASRV:80");//代理名称很端口,要根据你的情况来设置
//代理服务器需要验证
wp.BypassProxyOnLocal = false;
//用户名密码,要根据你的情况来设置
wp.Credentials = new NetworkCredential("UserName", "PWD", "hold");
//将代理服务器设置对象赋予全局设定
GlobalProxySelection.Select = wp;
//获取或设置用于对向Internet 资源的请求进行身份验证的网络凭据。
webClient.Credentials = CredentialCache.DefaultCredentials;
}
byte[] pagedata = webClient.DownloadData(url);//先获取二进制的资源
}
就是这样,希望能够对你有帮助。
“谷歌街景”拍到外星人?
这张“外星人”照片拍自新泽西州Morristown机场8英里外的钻石山路,这里距离纽约城30英里。照片一经在网上发布便引起了众多猜疑,有人认为它可能是外太空生物的有力证明,也有人指出这只是一个简单的骗局而已。
而奇异现象研究组织主管马尔科姆·罗宾逊却形容此照片是“这一类型的首例”。他说:“根据近距离观察,它与外星人很相似,但也很难确定其究竟是什么。让人很感兴趣的是那道奇异的光束,然而我对它也无法做出解释。当时没有任何目击者可以依靠,如果没有更进一步的细节,我认为很难证明它就是外星人。”
许多网友都相信这张照片上的物体就是外星人,尼克·索哲也是其中之一,他补充说:“不管它是什么,你都无法否认它看上去与外星人十分相似。它的头呈长方形,同样有一个长脖子和肥胖的身体。它的身边有一道光束,你知道,那也许就是一个无法看见的飞碟。然而我也不能确定它究竟是什么,这个地区距离机场不远,同时也曾经有报道称在这个区域发现UFO。”
2007年5月,谷歌公司在其地图服务上加入了街头实景功能(简称“谷歌街景”),它使用户能便捷的查看各街道马路上清晰的实景图片。用户可以随意360度旋转,放大缩小查看,在十字路口还会显示街道方向与名称。因为有趣而新鲜,街景一经推出便受到用户的热烈追捧。
谷歌地球发现1000年前捕鱼场[转自钦州晚报]
这一新发现的渔栅呈“V”字型,在海底延绵长约250多米。这种渔栅主要用于守株待兔式捕鱼,而不再另外需要渔船或渔叉。科学家认为,该渔栅应该是世界上已发现的最大渔栅。渔栅位于英国威尔士德韦达郡泰非海域附近,是考古学家们在研究西威尔士海岸航空图片时偶然发现的。该渔栅就好象是一个岩石鱼塘,鱼类会主动随着潮汐的涌动而进入渔栅。在渔栅的尖顶部,那里有一个缺口。渔民用鱼网套住缺口就可以实现自动捕鱼。此外,他们还可以垫高缺口,从而就可以很容易地在浅水池中捞鱼。当然,现在这一渔栅已经无法使用。研究人员认为,数百年来海水的冲积是渔栅沉没于泥沙之中的主要原因。
英国彭布洛克郡学院海岸环境研究学者齐吉·奥托估计,该渔栅大约建造于1000多年前。奥托认为,“这是一个非常奇异的结构。从航空照片上看,它好象是经过专门设计和定义的。但当你潜入水中近距离观察时,它就好象是一个天然的暗礁。”虽然该渔栅只是近来才在一些航空照片中出现,不过考古学家们早就可以通过“谷歌地球”来研究它。谷歌公司声称,早在2006年12月,他们就已经在卫星和航空图片发现过这一“V”字型结构。大约1000年前,渔栅捕鱼的方式在英国相当普遍,但也存在一定争议。由于它的效率非常高,因此法律曾经禁止使用这种方式在内河捕鱼,只允许在海岸附近使用。
虽然“谷哥地球”可以帮助科学家们进行考古探测,但目前大多只是用于考古工作的规划阶段,用于确定需要在地面上做进一步调查的地点。尼科·特利普萨维奇博士使用这一软件进行了黑曜岩的采石和贸易研究,黑曜岩是一种火山岩,早在一万年以前,西班牙人以前的人就用这种岩石制造工具、武器和装饰物。但乌尔博士和其他一些人也意识到“谷哥地球”的考古潜能存在消极的一面:掠夺者也可以使用该软件发现可能的目标。乌尔博士说:“我们不能假定寻找考古遗址的所有用户都在做那种对古迹有积极意义的事情。”因此考古学家应该谨慎地公开宣布精确的坐标,乌尔博士表示:“如果是未挖掘的遗址,那么考古学家的任务可能是,在不公布可能会被掠夺者滥用的路线图的情况下,向公众公布关于古代定居点范围的一般想法。”
基于CSLA.NET的分布式架构
(1)、物理N层架构与逻辑N层架构
在软件开发行业,对架构探讨最多的是物理N层架构和逻辑N层架构,一个良好的物理N层架构可以带来高性能、可扩充性、容错能力强和很好的安全性;而一个良好的逻辑N层架构可以带来这些好处:逻辑的组织代码、更易于维护、更好的代码重用、更好的团队开发体验和更高的代码清晰性。
其实,物理架构依赖于逻辑架构,良好的逻辑N层架构都会带来一个好的物理N层架构,因为物理架构重点在于部署,如何部署都取决与应用程序逻辑架构的支持。
(2)、支持逻辑四层架构的CSLA.NET分布式架构
CSLA.NET框架是一个良好的逻辑四层架构,并且能够支持分布式事务处理,还可以很好地支持开发Windows、Web和Web Services清晰的接口。下面是CSLA.NET支持的四层架构的示意图:
图3:CSLA.NET框架逻辑架构
①表现层:表现层的职责是搜集用户在页面输入的信息,定制用户界面的外观、导航指示和解释用户输入的逻辑,这一层的设计涉及到艺术性的东西,良好优雅的表现层能够吸引用户,特别向Web这样展示在外面的程序。
②业务逻辑层:微软公司对业务逻辑的定义是:一个包含数据验证、登录确认、数据查找、策略方针和算法转换的集合,它定制了企业做业务的方式。业务逻辑层职责在于数据验证、数据操作、数据处理、负责的业务规则和应用程序安全性设置。这一层是最为复杂、也是最令开发人员感到头痛的,业务逻辑会随着需求变化。
CSLA.NET框架对业务逻辑提供异常强大的支持,所以它是一个对开发人员非常友好的分布式架构。
③数据访问层:数据访问独立于业务逻辑,为访问数据库提供统一的调用接口,这样极大地降低了业务逻辑于数据访问的耦合性;CSLA.NET在数据访问层中支持了分布式事务处理能力;
④数据存储和管理层:负责数据在一个持久的数据存储中的物理创建、查询、更新和删除,这一层的功能一般由数据库服务厂商提供。如何对数据库的部署则是构建分布式架构非常重要内容,这取决于数据访问层的分布式事务处理能力。
CSLA.NET在逻辑四层架构的基础上,集成.NET分布式技术支持和作者的设计,非常好地将分布式架构应用到框架中去。
(3)、在分布式架构上对业务逻辑的强大支持
表现层和业务逻辑层之间、业务逻辑和数据访问层之间、数据访问层和数据存储层之间都存在数据验证和数据处理,而为了实现分布式事务处理,这些层中的对象可能会运行在不同的计算机进程中,如何维护他们的统一性,这是是否能够实现分布式架构的关键之一。
为了解决这个问题,CSLA.NET引入了“移动业务对象”这一重要概念,下图是在CSLA.NET中设计的业务对象图:
图4:业务对象图
上图4 说明:所谓的移动的业务对象就是指可以在不同的进程或电脑之间移动的对象,它把每一个实体类的属性、字段、方法进行封装。在.NET应用程序中,创建“移动对象”非常方便,就是在类的前面加上[Serializable()],如下面所示:
[Serializable()]
Public class MobileClass
{ }
这是.NET提供的序列化方法。有一点需要注意:不能为移动对象添加太多的数据,否则在网络上面传输将会特别缓慢,最好使用简单的XML数据格式。
CSLA.NET设计了两种方式来传递移动对象,即程序设计中经常谈到的“值传递”和“引用传递”,下面是两种方式的图解:
图5:按值传递移动对象 图6:按引用传递移动对象
如不需要修改数据,应采用值传递的方式,否则应使用引用传递,引用传递的性能比值传递要差。
Js实现Cookie操作,JavaScript的Cookie操作,源代码
在JavaScript中如何实现Cookie操作呢,下面给出源代码实现:
function SetCookie(name,value,days)
{
if(days == null) days = 30;
var exp = new Date;
exp.setTime(exp.getTime() + days*24*60*60*1000);
document.cookie = name + "="+ escape(value) +";expires="+ exp.toGMTString() + "; path=/";
}
function GetCookie(name)
{
var arr = document.cookie.match(new RegExp("(^ )"+name+"=([^;]*)(;$)"));
if(arr != null) return unescape(arr[2]); return null;
}
在VS2008中让JQuery智能提示
JQuery不愧是一个非常优秀的框架,连微软的VS2008都专门为它提供智能提示了,看来势不可挡,我一直认为它将会成为跟.NET一样的优秀框架,只不过.NET真的C#语言,而JQuery真的JavaScript语言。网上有很多关于如何实现智能提示的文章,我本来是想网上找找,然后在我的这里总结发表,可是找了半天发现居然没有合适的,所以就自己写了。
第一步:下载JQuery和相应的提示VS版本(可以到这里来下载:http://csumath.blogspot.com/2009/04/jquery_21.html);
第二步:安装微软对VS2008的一个补丁VS90SP1-KB958502-x86(可以到这里来下载:http://code.msdn.microsoft.com/KB958502/Release/ProjectReleases.aspx?ReleaseId=1736);
这里注意,如果你的VS2008没有安装sp1,那么还要先安装sp1(可以到这里下载:http://www.microsoft.com/downloads/details.aspx?FamilyID=27673C47-B3B5-4C67-BD99-84E525B5CE61&displaylang=zh-cn)
这样,你就可以轻松地进行JQuery开发了。
2009年4月21日星期二
JQuery下载,最新版本持续更新
这篇日志我提供JQuery下载地址,并且持续更新,希望给各位带来方便:
1、JQuery下载地址(1.3.2版本——最新发布版本)
精简版本: http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.2.min.js
完全版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.2.js
VS2008职能提示版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.2-vsdoc2.js
2、JQuery下载地址(1.3版本)
精简版本: http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.min.js
完全版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3.js
VS2008职能提示版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.3-vsdoc.js
3、JQuery下载地址(1.2.6版本——这是现在用得最多的版本)
精简版本: http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.min.js
打包版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.pack.js
完全版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6.js
VS2008职能提示版本:http://code.google.com/p/jqueryjs/downloads/detail?name=jquery-1.2.6-vsdoc.js
