正在查看: 2009年06月日志归档(第 1 页 / 共 9 篇)

什么是Glue Code?

在编程资料中,经常会看到Glue Code这个词组。

Glue的意思是“胶水,粘合剂”的意思,那么顾名思义,Glue Code就是粘合代码的意思。

更确切的讲,按照维基百科上的解释:

In programming, glue code is code that does not contribute any functionality towards meeting the program's requirements, but instead serves solely to "glue together" different parts of code that would not otherwise be compatible.

翻译过来,大概意思就是:

在编程中,用glue code所描述的代码并不用来实现程序所需要的任何功能,它仅仅用来将多段代码粘合在一起,从而不至于产生兼容性问题。

(英文)如何合理选择.NET Remoting的内置Channel

.NET Remoting有三种内置通道(Channel),包括Http, Tcp和IPC通道。如何正确的选择一个通道对Remoting应用程序的传输效率和稳定性会有较大影响。

简单说来,当以下情况出现时推荐使用HTTP管道:

  • 分布式系统部署在WAN中,需要穿透防火墙或代理服务器
  • 有与其他Web Service系统进行交互的需要
  • 使用IIS来架设和部署分布式系统

当出现以下情况时,推荐使用TCP管道:

  • 对传输效率要求极高
  • 大文件传输

IPC管道的使用由其本身的定义和特性所限制,所以推荐在跨进程的分布式应用程序中使用。

这是我采用英文撰写的一篇关于.NET Remoting文章的一部分,现在仅摘录出其中关于Remoting Channel的部分,以下为原文:

Remoting channels should be properly selected when distributed a real-time system.  A good decision of choosing a channel may improve both the transportation efficiency and the availability of the distributed application.

One should keep in mind that whether to choose one built-in channel with specific formatters depends on the requirements of the real-world distributed applications.

Using the HTTP Channel

When the messages of the distributed system are mainly required to transport over the Internet, it is better to use the HTTP Channel because of the potential impacts of the firewalls. There is always a good chance that the HTTP communication over port 80 or 8080 in some case will be enabled on most firewalls to provide web services to their Internet browser users. In this case, the HTTP Channel with either binary formatter or SOAP formatter should be used to improve the availability of the whole system.

When the distributed system is required to communicate with other remoting or distributed technologies, XML Web Service for example, the HTTP Channel with SOAP formatter is recommended in order to improve the interoperability of the distributed system.

When using IIS to host the server-side distributed components, it is also recommended to use the HttpChannel with the binary formatter for any application which spans multiple hosts (Rammer 2002).  The reason is that IIS provides a host of built-in advantages: built-in authentication, built-in encryption (SSL), and the ability to disable HTTP keepalives which further increases the scalability of your application as it reduces dependencies on single servers. At the same time, the binary formatter helps increase the transportation efficiency of serialized messages.

Using the TCP Channel

When the distributed system requires high performance and all the components are located in LAN, it is better to utilize the TCP Channel. For example, it is given that the system is required to transport large files across different application domain in Intranet, there is no better choice than using the TCP Channel with binary formatter that suits this case. However, this can be also completed successfully by using the HTTP Channel with binary formatter.

Using the IPC Channel

When the distributed system is required to across processes on a single computer, it is recommended to use the IPC Channel. Because the IPC Channel uses named pipes, and compared to use the built-in HTTP or TCP Channel, applications can generally obtain the highest communication performance while still being able to use impersonation and delegation to control access to the remote object. 

Tags: .net,remoting

在PHP中进行3DES的加密和解密

PHP内置的mcrypt库支持多种块状加密算法,包括DES,3DES和Blowfish(默认算法)等。由于是块状加密(Block Ciper),mcrypt支持以下模式对输入字符串进行操作:CBC, OFB, CFB和ECB。

在这里,我写了一小段代码来测试PHP中的3DES加密和解密的实现过程。

以下示例所涉及到的参数如下:

  • 采用ECB模式
  • 192位Key (即24字节长度Key对超过Block Size的加密字符进行对应Mode操作)
  • ASCII Key 字节内容:ABCDEFGHIJKLMNOPQRSTUVWX
  • 需要加密字符串ASCII:www.cnSaturn.com

»阅读全文

给博客添加了“阅读分享”Bookmark功能

之前一直是在Java或.NET环境下编写Web Service客户端,今天编写了第一个在PHP下的WS客户端,而且应用在了这个博客程序上:本地调用Delicious的API服务,获取里面指定帐号的书签文章信息。

由于美味书签提供的是RESTful类型的WEB服务,所以客户端的编写与在Java下思想上没有差别,可能就是工具的不同:

组合出一个HTTP请求-->发出这个请求-->得到请求内容-->解析(解组)请求内容-->显示有用的信息。

具体来说,对于这个PHP调用Delicious API的实例上,上面的流程就变成了:

  • 使用CURL组合一个带用户验证的HTTPS请求
  • 得到响应内容信息,可以是XML或JSON其中之一
  • 使用PHP 5内置的SimpleXML来解析响应信息
  • 显示出来

经过大约1个小时的编写和调试,本博客的“分享阅读”(Bookmark)新功能就算测试成功了!

稍后我会写一篇文章完整介绍PHP下编写Delicious API客户端的思路,并且会提供实现代码。

关于Delicious

Delicious原名del.icio.us,是免费的社群性网络服务,用于交流网页书签网摘。它在2003年底上线,由约舒亚·沙科特(Joshua Schachter)开发。

Delicious不同于我的最爱或其他书签网站,主要用于和别人分享和交流书签,使用者亦可以在Delicious储存或管理私人书签(但需记得勾选"do not share")。

File:Delicious.pngDelicious的图示由四个不同色而同大小的正方形拼成一个较大的正方形,左上角为白色,右上角蓝色,左下角黑色,右下角透明。

Delicious已于2005年12月9日被Yahoo!所收购,但仍然会独立运作。在2008年中,网站推出2.0版本。新网站运行在新平台中,提高了页面的加载速度。亦使用了全新的搜寻引擎,令使用者更易找到所需。主域名亦会改为Delicious.com。

关于Delicious API

Delicious APIDelicious提供给第三方开发者的一个RESTful Web Service应用。通过这个Web服务,开发者可以按需获取Delicious提供的信息,比如书签信息和书签标签等,并将其显示在博客,其他网站或第三方应用程序上。

Dirty Markup:一个在线精简修复网页文件的工具

Dirty Markup 是一个abeautifulsite推出的在线修复、整理网页文件的工具。

它能够自动修正一个网页文件中潜在的错误HTML或XHTML写法,同时规范化网页源文件布局;使其尽可能符合W3C规范,让一个网页文件最大限度的兼容多浏览器。

用一个例子来说明Dirty Markup的用法。

首先,我写了一个很简单的错误的HTML布局代码。

<div id=h> 
<font color=red><p>www.cnSaturn.com</p>
</font> 

以上HTML代码至少有两处错误:

  1. div标签未闭合
  2. 块级元素p被font标签所包含

以上HTML代码还至少有两处安全隐患会导致它在不同浏览器中表现不同:

  1. 不是一个完整的HTML文件
  2. 标签的属性对应的值未使用双引号

»阅读全文

Tags: html

AJAX Sudoku: 网页版的超炫数独游戏

喜欢玩智力游戏的同学对数独这个游戏一定不陌生,但大多数情况下,大家玩得都是手机版、单机版和Flash版,很少有非Flash网页版的数独游戏。

今天在网上闲逛找项目灵感时,发现了一个基于AJAX的网页版数独游戏AJAX Sudoku

整个游戏基于jQuery+PHP+qqwing制作,不过这个游戏将IE浏览器彻底鄙视了一回:IE浏览器用户使用时将会出现很多问题,所以,要获得最佳游戏体验,最好使用Firefox,Opera,Safari或者Chrome中的一款

网页AJAX版数独游戏截图

游戏方法非常简单:

选定一个方格之后,按照数独游戏规则,通过电脑键盘输入一个数字即可。

游戏网址:http://deepliquid.com/projects/sudoku/

使用PHP编程获取Page Rank (PR)值

衡量一个网站和某个网页权重的两个非常重要的指标,分别是:Google Page Rank (简称PR值)和Alexa排名。虽然它们不是衡量一个网站好坏的绝对标准,但可以从一定程度上说明网站的受欢迎程度,访问流量等基本信息。

与Alexa提供第三方开发者API接口不同,Google本身并不提供API接口让程序员编写查询程序,所以要直截了当的从官方获取一个网站的PR值,唯一的方法可能就是Google工具条了。

现在问题来了,像我们经常查PR值的ChinaZ,123Cha这样的第三方网站的PR信息是从哪获取的?莫非他们与Google有“一腿”,Google单独为他们提供了接口?

事实上没那么神秘。正所谓“魔高一尺,道高一丈”,既然Google Toolbar提供PR值的显示,那么就从工具条上入手吧。事实上,很多先行者很早之前就已经为我们找到了关于这个问题的解决方案。

这个Page Rank Code网站提供的代码就是非常典型的通过破解Google工具栏获取PR值的一例。这个网站上已经提供了很详细的PHP执行PR值查询的函数以及具体使用办法,我这里就不贴了。

具体源代码和演示代码请点击这里查看。

需要特别注意的是:作者在下载页面中特别指出,某些服务器IP(比如我现在博客所在的服务器)如果被Google封掉的话,是查不到正确的PR值的

讲到这里,上面那个问题就自然而然的解决了,第三方查询PR值的核心思想都是破解Google工具条,可能区别就在平台和语言不同罢了。

绿坝花季护航的安全漏洞与有关部门的责任心

国外媒体(纽约时报华尔街日报)已经开始热烈的关注国内政府发布的这款信息监控软件了。于是,一个月前还名不见经传的一款软件,绿坝-花季护航,瞬时成为国内外媒体关注的焦点,也体验了一把如芙蓉姐姐式的一夜成名。

我这篇文章不想谈国家颁布这个政策的是与非,也不谈论这款软件的公关能力,只想谈一下这款软件的安全漏洞与“有关部门”的责任心问题。

美国密西根大学的研究者与昨天公布了一份对绿坝-花季护航的研究报告,原文可以在这里可以查看

绿坝花季护航的安全漏洞与流氓行径

密歇根大学的研究报告(以下简称“报告”)明确指出了当前版本的绿坝-花季护航存在的两个危险安全漏洞,这两个漏洞均可能导致安装此软件的电脑被恶意的控制

*部分内容翻译自这一报告,版权归原作者所有。

1. 网页过滤漏洞

绿坝软件其中一个网页过滤功能的原理是:首先拦截网络数据包,然后分析用户所访问的网站是否在黑名单内,如果是,则做出相应的反应。软件通过socket API引入了一个名叫SurfGd.dll的库文件来实现这一监控功能,当用户访问某个网站时,软件中对应的程序会检查这一网站的网址,并与“黑名单”列表相比较,最后记录这个网站的网址。

报告中指出,绿坝在处理网页请求时存在程序处理错误。由于程序代码在处理网址URLs时采用定长的缓存,一旦出现某个网址URL过长,会导致缓存溢出并中断程序堆栈。简单来说,任何一个恶意网站都可以通过网页重定向的方式将用户引导到非法URL,并控制此用户的电脑

报告中还科学性的给出了一个演示链接:通过网页重定向,将用户引导至一个超长URL,使程序产生上述缓存溢出,最终导致安装有此软件的用户浏览器崩溃。

安装有绿坝软件的朋友,不妨点这里试试。

2.黑名单列表更新漏洞

此漏洞由绿坝程序使用非安全的C String (字符串) 库读取过滤文件所引起。此漏洞可能导致绿坝的制作者,或任何第三方模仿用户行为——在更新黑名单过滤文件列表的同时,在客户机上运行恶意代码或安装非法软件。

用户可以在绿坝的配置选项中,选择自动更新“黑名单列表”的自动更新。

另外这份报告还发现了绿坝-花季护航一个比较流氓的地方:

绿坝允许拥有管理员权限的用户卸载这一软件。我们测试了这一卸载功能,并发现它的主程序部分确很快就被卸载移除,但是,一些日志文件并没有被自动清除,所以,网站访问记录仍然隐藏于用户的操作系统中。

从以上两点漏洞和一点流氓行径,我觉得或许可以得出以下几个结论:

有关部门的责任心

很难想象这么一款不负责任不成熟的软件将被安装在号称拥有网民世界第一的中国的千家万户的电脑上。

中国网民电脑的安全和隐私何在?一个“暴风影音门”就已经导致了几个省的网络中断,我相信如果出现大规模漏洞恶意攻击,这款软件也好不到哪去!

连那些非软件编程的非专业人士都能看得懂的漏洞都会出现,有关部门的责任心被谁吃了?被绿坝-花季护航吗?

在此我呼吁,如果你想保护你的电脑,希望你的隐私不被侵犯,请不要在电脑上安装绿坝-花季护航这款软件,至少现在这个版本不要安装。

Tags: 绿爸

Relationship between WebServices and Business Processes

What is the relationship between WebServices and business processes?

WebServices can be used as a implementations of activities within a business process.

Business processes in turn can be externalized as WebServices.

Web服务与商业流程的关系是什么?

简单来说,Web服务就是一个商业流程的具体实现,而反过来讲,商业流程是Web服务的抽象。

Tags: web service