<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.2" -->
<rss version="0.92">
<channel>
	<title>Enabling Technology</title>
	<link>http://blog.enabling-tech.com</link>
	<description>Java, Technical Management, China Market, Game, Online Casual Game Industry</description>
	<lastBuildDate>Sun, 17 Aug 2008 02:33:31 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	
	<item>
		<title>Quck Dev env for PHP</title>
		<description>http://www.apachefriends.org/en/index.html

IDE: Eclipse PDT all in one. </description>
		<link>http://blog.enabling-tech.com/enabling-tech/php/php%e7%9a%84%e5%bf%ab%e9%80%9f%e5%bc%80%e5%8f%91%e7%8e%af%e5%a2%83%e3%80%82</link>
			</item>
	<item>
		<title>Swing thread articles</title>
		<description>&#160;  http://www.yesky.com/418/1743418_5.shtml  http://java.chinaitlab.com/line/10270.html  http://fanqiang.chinaunix.net/program/java/2005-07-04/3363.shtml  http://www.21tx.com/dev/2002/02/22/10107.html  http://www.ddvip.com/program/java/index2/79.htm  http://www.ddvip.com/program/java/index2/78.htm  http://www.21tx.com/dev/2005/04/07/14818.html  http://www.jspcn.net/htmlnews/11049310422031206.html  http://www.matrix.org.cn/resource/article/0/132.html </description>
		<link>http://blog.enabling-tech.com/enabling-tech/java/swing-thread-articles</link>
			</item>
	<item>
		<title>Implementation for running OS commands by using Java [Chinese]</title>
		<description>【enabling-tech.com原创】

Java 语言本身提供了执行外部程序的机制，那就是java.lang.Runtime。改类自Java诞生就已经从在，这个可以从见JDK帮助文档的Since得到。随着Java的发展，该类也多次修订。http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Runtime.html

改类提供了6个重载的方法（截至目前1.5版本），我们把它拷过来，用作参考：

Process exec(String command)
Executes the specified string command in a separate process.

Process exec(String[] cmdarray)
Executes the specified command and arguments in a separate process.

Process exec(String[] cmdarray, String[] envp)
Executes the specified command and arguments in a separate process with the specified environment.

Process exec(String[] cmdarray, String[] envp, File dir)
Executes the specified command and arguments in a separate ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/java/%e7%94%a8java%e8%bf%90%e8%a1%8c%e6%93%8d%e7%ba%b5%e7%b3%bb%e7%bb%9f%e4%b8%8b%e7%9a%84%e5%91%bd%e4%bb%a4%ef%bc%8c%e7%a8%8b%e5%ba%8f%e7%9a%84%e5%ae%9e%e7%8e%b0%e6%96%b9%e6%b3%95%e3%80%82</link>
			</item>
	<item>
		<title>What a good Engineering Code Review is</title>
		<description>   Contact the Key reviewer in advance and confirm when they are available     Having all codes packaged in a zip file and check into server and send out the link.    For changing existing code, print out the diff version in pdf ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/what-a-good-engineering-code-review-is</link>
			</item>
	<item>
		<title>Essence of Hiring a good engineer</title>
		<description>   Ask him /her to revise the bad code of the guy after one hour's long talk. This is to test:          good working attitude       willing do stuff even feel tired    ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/essence-of-hiring-a-good-engineer</link>
			</item>
	<item>
		<title>Essence of People Management</title>
		<description>General Management Sense     Demonstrate that you ARE ABLE TO work well with your peer managers.    When questions comes, try to get them solved with a reasonable way.    Don't quarrel which doesn't solve any problems and will lead you to a ...</description>
		<link>http://blog.enabling-tech.com/engineering-management/essence-of-people-management</link>
			</item>
	<item>
		<title>Protected: 得到地理解码</title>
		<description>
	This post is password protected. To view it please enter your password below:
	Password:  
	
	 </description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e5%be%97%e5%88%b0%e5%9c%b0%e7%90%86%e8%a7%a3%e7%a0%81</link>
			</item>
	<item>
		<title>Google Map to your website</title>
		<description>
http://www.google.com/intl/zh-CN/apis/maps/signup.html </description>
		<link>http://blog.enabling-tech.com/enabling-tech/google-technology-gadget-etc/google-map-to-your-website</link>
			</item>
	<item>
		<title>Wordpress Stats plug-in BSUITE [Chinese]</title>
		<description>http://www.maisonbisson.com/blog/post/10900/#section-3

bsuite是一款wordpress统计插件，它的前身是bstat，简单好用的来访者统计插件。
它的功能如下：

	跟踪网页点击次数。
	跟踪搜索引挚关键字。
	输出点击率最高的文章。
	输出最近的评论。
	输出最多的搜索关键字。
	输出整个网站或单篇文章的访问量脉冲图
	高亮搜索单词。
	在文章底部列出有联系的相关文章。
	与bsuite_speedcache结合一体。
	列出文章tag。

请到这儿点击下载，这儿是安装方法。 </description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/bsuite%e6%98%af%e4%b8%80%e6%ac%bewordpress%e7%bb%9f%e8%ae%a1%e6%8f%92%e4%bb%b6</link>
			</item>
	<item>
		<title>Test for finding job in Baidu.com(in Chinese)</title>
		<description> 百度笔试题目（转）  题目大致是这样的：  &#160;&#160; 第一部分选择题：有几道网络相关的题目，巨简单，比如第一题是TCP、RIP、IP、FTP中哪个协议是传输层的......。有一道linux的chown使用题目。其他的全是数据结构的题目！什么链，表，码的，不知所云~~~唉，我可以没有学过数据结构的人呐！真残忍！这一部分迅速猜完！  &#160;&#160;&#160; 第二部分简答题：  &#160;&#160;&#160; 1、在linux中如何编译C程序，使之成为可执行文件？如何调试？  答案：1)检查程序中.h文件所在的目录，将其加入系统PATH中；  &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 2)执行C编译：#gcc [源文件名] -o [目标文件名]  &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 执行C++编译：#g++ [源文件名] -o [目标文件名]  &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 3)改变目标文件为可执行文件：#chmod +x [目标文件名]  &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4)如需将多个可执行文件连续执行，可生成批处理文件：  &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; #vi [批处理文件名]  &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 可执行文件1  &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 可执行文件2  &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .........  &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/search-engine-optimization/%e7%99%be%e5%ba%a6%e7%ac%94%e8%af%95%e9%a2%98%e7%9b%ae%ef%bc%88%e8%bd%ac%ef%bc%89</link>
			</item>
	<item>
		<title>What People are searching for?</title>
		<description>http://searchenginewatch.com/showPage.html?page=2156041 </description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/what-people-are-searching-for</link>
			</item>
	<item>
		<title>Did You Mean: Lucene?</title>
		<description> All modern search engines attempt to detect and correct spelling errors in users' search queries. Google, for example, was one of the first to offer such a facility, and today we barely notice when we are asked "Did you mean x?" after a slip on the keyboard. This article ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/did-you-mean-lucene</link>
			</item>
	<item>
		<title>SpellChecker Java Search API</title>
		<description>&#160;July 9, 2007 on 9:20 pm &#124; InJava&#124;July9,2007on9:20pm&#124;InJava&#124; 在寫程式時，基本上都一定要為錯誤的輸入作檢查或修正。在写程式时，基本上都一定要为错误的输入作检查或修正。 這是基本可以用來檢查一個程式有沒有偷懶/偷工減料的最簡單方法。这是基本可以用来检查一个程式有没有偷懒/偷工减料的最简单方法。  在上電腦的基本課時，應該一定會提到有關 GIGO(garbagein,garbageout; 垃圾輸入, 無用輸出)。在上电脑的基本课时，应该一定会提到有关GIGO(garbagein,garbageout;垃圾输入,无用输出)。 就是說電腦很苯，當輸入的數據是垃圾，輸出就一定只會是垃圾。就是说电脑很苯，当输入的数据是垃圾，输出就一定只会是垃圾。 電腦會出錯，可是人類更易出錯，而且犯的錯誤更多。电脑会出错，可是人类更易出错，而且犯的错误更多。  最基本的，是能在輸入時即時先作出反應和指出錯誤。最基本的，是能在输入时即时先作出反应和指出错误。 最簡單是檢查數據的型態和空白(第一類)，而一個比較像樣的程式都有數字、時間、日期、大小和特定格式 (如 email 或 UUID) 的 Pattern 檢查(第二類)。最简单是检查数据的型态和空白(第一类)，而一个比较像样的程式都有数字、时间、日期、大小和特定格式(如email或UUID)的Pattern检查(第二类)。 造得仔細一點的程式都有會進一步的檢查，就是數據有效性的檢查；例如年月日的組合是否合理，沒有沒串錯字，重復性，在 database 能不能找到相對應的 ID 之類的(第三類)。造得仔细一点的程式都有会进一步的检查，就是数据有效性的检查；例如年月日的组合是否合理，没有没串错字，重复性，在database能不能找到相对应的ID之类的(第三类)。 而最好的則會著重與人的互動關係，清楚的錯誤說明，能在使用者保持集中力的時間內反應(好像大約三秒)，自動的修正、建議(第四類)。而最好的则会着重与人的互动关系，清楚的错误说明，能在使用者保持集中力的时间内反应(好象大约三秒)，自动的修正、建议(第四类)。  實例实例  第一類:Yahoo 字典第一类:Yahoo字典雖然它說 “請輸入單字查詢，中英文皆可” ，可是日文,法文,德文也能過。虽然它说“请输入单字查询，中英文皆可”，可是日文,法文,德文也能过。 假如輸入簡体字或日文漢字它也不會了解。假如输入简体字或日文汉字它也不会了解。  第二類: 一般的網頁上常見的 “E-mail this page” 表格(我一直很好奇誰會用)。第二类:一般的网页上常见的“E-mailthispage”表格(我一直很好奇谁会用)。 例如這頁的 footer。例如这页的footer。 ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/spellchecker-java-search-api</link>
			</item>
	<item>
		<title>我的一个Java xmlrpc-apache操纵wordPress blog的例子</title>
		<description>package com.enablingtech.rpc;  import java.net.MalformedURLException;import java.util.Hashtable;import java.util.Vector;  import org.apache.xmlrpc.XmlRpc;import org.apache.xmlrpc.XmlRpcClient;import org.apache.xmlrpc.XmlRpcException;  &#160; public class Test2 {&#160;&#160;&#160; public static void main(String[] args) {&#160;&#160;&#160;&#160;&#160;&#160;&#160; try {&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; XmlRpc.setDriver("org.apache.xerces.parsers.SAXParser");&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; XmlRpcClient xmlrpc = new XmlRpcClient(&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "http://网址/xmlrpc.php");&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Vector params = new Vector();&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; //params.addElement("1");&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; params.addElement("776");&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; params.add("用户名");&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; params.add("密码"); &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Vector mp = (Vector)xmlrpc.execute("mt.getRecentPostTitles",&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; params);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println(mp.get(0));&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; System.out.println(mp.get(1));&#160;&#160;&#160;&#160;&#160;&#160;&#160; ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/%e6%88%91%e7%9a%84%e4%b8%80%e4%b8%aajava-xmlrpc-apache%e6%93%8d%e7%ba%b5wordpress-blog%e7%9a%84%e4%be%8b%e5%ad%90</link>
			</item>
	<item>
		<title>小试XML-RPC（浏览器javascript与服务器java通信）[转]</title>
		<description>From http://www.blogjava.net/mstar/ &#160;&#160; 前些天无意中发现了XML-RPC（不过笑我才发现啊），总想找个机会摆弄摆弄。毕业论文基本上弄完了，所以决定今天把它弄明白。XML-RPC的最大用处，我首先想到的是浏览器在不刷新页面的情况下与服务器通信，请求数据。下面我就说一下我用XML-RPC是怎么实现的。 第一步：选择XML-RPC实现。XML-RPC的一个很大优势就是 它是一个标准，并且各种开发环境下都有实现（酷），这是它能够轻松跨平台的原因。javascript有3个实现。我看了一下最好的应该是jsolait（JavaScript o Lait）的实现了。因为他不仅仅是一个xml-rpc的实现，除此之外还有很多javascript库,详细内容请看这里（http://jsolait.net/）。java的实现就更多了，我当然毫不犹豫地选择apache的。详细内容看这里（http://ws.apache.org/xmlrpc/） 第二步：建立服务。用java建立xml-rpc有两种方式，一种是单独开个端口，一种是用servlet。我们客户端是用javascript，那么服务端用servlet是再好不过的了。如何使用apache的xml-rpc，请详细看apache的资料。（大哥你不会连servlet也不会建吧，那你还是不要往下看了）。代码如下：这是一个sayHello的服务类： public class&#160;HelloService&#160;{ public&#160;String&#160;sayHello(String&#160;name){ return "Hello:&#160;"+name+"&#160;!";&#160;}} 下面是一个Math服务类： public class&#160;MathService&#160;{ public double&#160;add(Vector&#160;v){ double&#160;a&#160;=&#160;Double.parseDouble((String)v.get(0)); double&#160;b&#160;=&#160;Double.parseDouble((String)v.get(1)); return&#160;a+b;&#160;} public double&#160;mult(Vector&#160;v){ double&#160;a&#160;=&#160;Double.parseDouble((String)v.get(0)); double&#160;b&#160;=&#160;Double.parseDouble((String)v.get(1)); return&#160;a*b;&#160;}} 接着是Servlet啦，作为RPC Server用的，这段代码比较经典，很多资料上都有。 public class&#160;RpcServer&#160;extends&#160;HttpServlet&#160;{ protected void&#160;doPost(HttpServletRequest&#160;request,&#160;&#160;&#160;HttpServletResponse&#160;response)&#160;throws&#160;ServletException,&#160;IOException&#160;{&#160;&#160;XmlRpcServer&#160;xmlrpc&#160;= new&#160;XmlRpcServer();&#160;&#160;xmlrpc.addHandler("HelloService",&#160;new&#160;HelloService());&#160;&#160;xmlrpc.addHandler("MathService",new&#160;MathService()); byte[]&#160;result&#160;=&#160;xmlrpc.execute(request.getInputStream());&#160;&#160;response.setContentType("text/xml");&#160;&#160;response.setContentLength(result.length);&#160;&#160;OutputStream&#160;out =&#160;response.getOutputStream(); out.write(result); out.flush();&#160;}} 主要是这三句：XmlRpcServer xmlrpc = new XmlRpcServer();xmlrpc.addHandler("HelloService", new HelloService());xmlrpc.addHandler("MathService",new MathService());一定要记牢Handler的名字，就是第一个参数，因为客户端就靠他来表示要调用的方法呢。 行了现在可以在web.xml中写入配置了：  &#60;servlet&#62; &#60;servlet-name&#62;RpcServer&#60;/servlet-name&#62; ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/%e5%b0%8f%e8%af%95xml-rpc%ef%bc%88%e6%b5%8f%e8%a7%88%e5%99%a8javascript%e4%b8%8e%e6%9c%8d%e5%8a%a1%e5%99%a8java%e9%80%9a%e4%bf%a1%ef%bc%89%e8%bd%ac</link>
			</item>
	<item>
		<title>Apache xml-rpc (转)</title>
		<description>&#160; 由于最近做的一个项目需要，使用了apache xml-rpc，顺便整理一下使用的方法。  &#160;&#160;&#160; xml-rpc是一套允许运行在不同操作系统、不同环境的程序实现基于internet过程调用的规范和一系列的实现。这种远程过程调用使用http作为传输协议，xml作为传送信息的编码格式。xml-rpc的定义尽可能的保持了简单，但同时能够传送、处理、返回复杂的数据结构。&#160;&#160;&#160; 关于xml-rpc更详细的信息，请参阅http://www.xmlrpc.com。 1，客户程序&#160;&#160;&#160; Apache xml-rpc提供两种客户类:&#160;&#160;&#160; org.apache.xmlrpc.XmlRpcClient：使用java.net.URLConnection。&#160;&#160;&#160; org.apache.xmlrpc.XmlRpcClientLite：自身提供轻量级的http client实现。&#160;&#160;&#160; 如果您需要完全的http支持（例如：代理，重定向等等），你应该使用XmlRpcClient。反之，如果您不需要完全的http支持并且更注重性能，那么你应该仔细的试验这两种客户类。在某些平台上，可能XmlRpcClient更快，但是在某些平台上XmlRpcClientLite更快。&#160;&#160;&#160; 这两个客户类提供相同的接口。 &#160;&#160;&#160; 在客户端使用apache xml-rpc是非常简单的，只需要完成下面的简单工作：&#160;&#160;&#160; // 建立xml-rpc客户&#160;&#160;&#160; XmlRpcClient client = new XmlRpcClient("http://" + server + ":" + port); &#160;&#160;&#160; // 设置调用参数&#160;&#160;&#160; Vector params = new Vector();&#160;&#160;&#160; params.addElement(name); &#160;&#160;&#160; // 调用并取得结果&#160;&#160;&#160; String result = (String) client.execute("hello.sayHello", params); &#160;&#160;&#160; ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/apache-xml-rpc-%e8%bd%ac</link>
			</item>
	<item>
		<title>XML-RPC 之 Apache XML-RPC 实例</title>
		<description>iTbulo.COM 2005-4-13 佚名(63)  作者：王恩建来源：http://www.sentom.netXML-RPC 是工作在 Internet 上的远程过程调用协议。通俗点讲，就是使用 HTTP 协议交互，交互的载体是 XML 文件。XML-RPC 具体的规范说 明请参考这里。图片来自XML-RPC官方网站  XML-RPC 规范定义了六种数据类型，下表是这六种数据类型与 Java 的数据类型对应表。  XML-RPCJava&#60;i4&#62; 或 &#60;int&#62;int&#60;boolean&#62;boolean&#60;string&#62;java.lang.String&#60;double&#62;double&#60;dateTime.iso8601&#62;java.util.Date&#60;struct&#62;java.util.Hashtable&#60;array&#62;java.util.Vector&#60;base64&#62;byte[ ]  XML-RPC 规范的各种平台都有具体实现，XML-RPC 规范的 Java 实现都有好几种，这里我们选择了 Apache XML-RPC。XML-RPC 服务端实现先定义一个简单业务对象 MyHandler，远程客户端将调用该对象的方法，具体代码如下：  package net.sentom.xmlrpc;  public class MyHandler {&#160;&#160;&#160; public String sayHello(String str) {&#160;&#160;&#160;&#160;&#160;&#160;&#160; return "Hello," + ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/xml-rpc-%e4%b9%8b-apache-xml-rpc-%e5%ae%9e%e4%be%8b</link>
			</item>
	<item>
		<title>XML RPC简介 和一个例子(java)</title>
		<description>1.xml rpc是什么1.1. xml rpc简介xml rpc是使用http协议做为传输协议的rpc机制，使用xml文本的方式传输命令和数据。一个rpc系统，必然包括2个部分:1.rpc client，用来向rpc server调用方法,并接收方法的返回数据;2.rpc server,用于响应rpc client的请求，执行方法，并回送方法执行结果。1.2. xml rpc的可用版本xml rpc client和xml rpc server都有很多版本的实现。一般而言,一个实现版本都会同时实现client/server。但由于都满足xml rpc规范，从理论上讲,任何一个版本的rpc client实现与任何一个版本的rpc server都能配套使用。更进一步，由于xml rpc以xml文本的方式,使用http协议传输，所以与编程语言无关。例如:rpc client的已实现版本包括了:perl,php,python,c/c++,java，等等;rpc server的实现语言包括perl,java,等。同一种编程语言所实现的版本也不止一个。例如java版的实现有:Marque的xmlrpc实现(http://xmlrpc.sourceforge.net/),apache的xmlrpc 实现(http://ws.apache.org/xmlrpc/) 1.3.xmlrpc的工作原理完整的需要参考xmlrpc规范(http://www.xmlrpc.com/spec)简单描述:rpcclient的工作原理:rpcclient根据URL找到rpcserver -&#62; 构造命令包，调用rpcserver上的某个服务的某个方法 -&#62; 接收到rpcserver的返回,解析响应包，拿出调用的返回结果。rpcserver的工作原理:启动一个webserver(在使用内置的webserver的情况下) -&#62; 注册每个能提供的服务，每个服务对应一个Handler类 -&#62;进入服务监听状态。1.4. xmlrpc规范区区6页，讲的非常清楚，建议细看。http://www.xmlrpc.com/spec 2.在java中使用xml rpc的几个例子2.0.环境准备:下载如下包并设置到CLASSPATH中apache xmlrpc软件包(http://ws.apache.org/xmlrpc/)commons-httpclient-3.0-rc4.jarcommons-codec-1.3.jar2.1.使用apache的java xmlrpc实现版本,实现简单的加/减服务。参考附录中test.XmlRPCClient类与test.JavaServer类2.2.使用apache的java xmlrpc实现版本，测试java的数据类型与xmlrpc数据类型的相互对应关系。参考附录中test2.XmlRPCClient类与test2.JavaServer类。在这里简单描述一下:&#62;xmlrpc中的Array类型，对应到java中的Vector类型例如:在RPC Server中的某个服务方法的返回值的声明类型是String[]，但在Client中接收到的将是Vector对象;反之，如果Client传送过去的调用参数为String[]，但在RPC Server中所接收到的将是Vector对象当然，如果我们不使用String[]，直接声明为Vector，也是可以的。&#62;xmlrpc中的struct类型，对应到java中的Hashtable类型&#62;其它的类型，如:String,int,double,boolean,Date等，都比较好对应。需要注意的是:在rpc Client中，如果使用到int/double/boolean这些基本类型时，需要将他们封装成一个相应的Object，例如:Integer/Double/Boolean。  2.3.使用apache的java xmlrpc实现版本,实现自定义类型的数据的传输这个sample中，假设所传输的object都实现了XmlRPCSerializable接口。这个例子的目的是:模拟unionmon中的 command对象。当假设所传输的数据是一个Object[]时，可以用这种方式传输。结合unionmon中的代码生成机制，每个vo的序列化/反序列化方法可以在代码生成过程中完成。同样地,vox的序列化/反序列化方法需要手写。参考代码:附录中的test3.XmlRPCSerializable , test3.AccountVO , test3.XmlRPCClient , test3.JavaServer  ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/xml-rpc%e7%ae%80%e4%bb%8b-%e5%92%8c%e4%b8%80%e4%b8%aa%e4%be%8b%e5%ad%90java</link>
			</item>
	<item>
		<title>开始研究 XML RPC Java Client</title>
		<description> http://ws.apache.org/xmlrpc/client.html 不知道Java的是否可以调用PHP的，如果可以，我就可以发布我的blog系统很方便了。 </description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/%e5%bc%80%e5%a7%8b%e7%a0%94%e7%a9%b6-xml-rpc-java-client</link>
			</item>
	<item>
		<title>使用WordPress的XMLRPC功能</title>
		<description>WordPress 内部就有XMLRPC功能，稍作修改，就可以通过XMLRPC服务达到不少高级的功能，比如两个Blogger站点内容进行同步，只要另一个支持 XMLRPC发布就行。My Donews就支持XMLRPC发布，比如我这篇文章，就是用Zoundry这个软件离线写作，然后发到网上的。 下面的代码来自http://hasin.wordpress.com/2006/07/15/using-blog-apis/ 这个地方也许国内无法访问，所以把文章拷贝过来了。 Almost every standard compliant blogs support three blogging API which are “Blogger API” , “MovableType API” and “MetaWeblog API”. Among these MW (or MetaWeblog) is used more than other two. Wordpress also supporst these three sets of API. If you are interesetd how to ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/%e4%bd%bf%e7%94%a8wordpress%e7%9a%84xmlrpc%e5%8a%9f%e8%83%bd</link>
			</item>
	<item>
		<title>在自己Windows上安装WordPress 开发/测试环境</title>
		<description>&#160; 参考了以下文章，为了避免网站过期，在此附上原文： 1.基本步骤 &#160; 文章翻译自 Installing WordPress Locally Under Windows XP 由 剑指天下 测试并校订 近几周，Denis 给大家分享了不少如何创建属于自己的 WordPress 主题，但是我们大部分用户都是在网络上的 BLOG 上来做测试，速度相对来说很慢，而且也不容易修改代码。这里给大家简单的讲一下如何在 Windows XP 系统上安装 WordPress 来做本地测试。 首先，你必须有一个基于Apache、MySQL、PHP的编程调试环境。我们推荐使用 XAMPP LITE，可以从下面的链接下载。 下载 XAMPP LITE 将 XAMPP LITE 安装好以后，打开服务器，将 Apache 和 MySql 两个服务打开。如下图所示。  下载最新版的 WordPress ZIP 文件夹，解压并存放在 C:\xampp\htdocs 目录下。 当你第一次使用 WordPress 的时候由于你并没有创建与 BLOG ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/%e5%9c%a8%e8%87%aa%e5%b7%b1windows%e4%b8%8a%e5%ae%89%e8%a3%85wordpress-%e5%bc%80%e5%8f%91%e6%b5%8b%e8%af%95%e7%8e%af%e5%a2%83</link>
			</item>
	<item>
		<title>解决MySQL 中文查询 条件问题</title>
		<description>public static Connection getConnection() {  &#160;&#160;&#160;&#160;&#160;&#160;&#160; Connection conn = null;&#160;&#160;&#160;&#160;&#160;&#160;&#160; try {&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Class.forName("com.mysql.jdbc.Driver").newInstance();&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; conn = DriverManager&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; .getConnection(&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "jdbc:mysql://server:3306/" +&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "schema??useUnicode=true&#38;characterEncoding=utf8",&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; "table", "passwd");&#160;&#160;&#160;&#160;&#160;&#160;&#160; } catch (Exception e) {&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; e.printStackTrace();&#160;&#160;&#160;&#160;&#160;&#160;&#160; }&#160;&#160;&#160;&#160;&#160;&#160;&#160; return conn;&#160;&#160;&#160; } </description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/%e8%a7%a3%e5%86%b3mysql-%e4%b8%ad%e6%96%87%e6%9f%a5%e8%af%a2-%e6%9d%a1%e4%bb%b6%e9%97%ae%e9%a2%98</link>
			</item>
	<item>
		<title>HTMLParser的两种使用方法 -forward</title>
		<description>&#160; 因为论文的关系，要用到HTMLParser这个项目（使用的HTMLParser版本是1.6） 一，数据组织分析： HtmlParser主要靠Node、AbstractNode和Tag来表达Html，因为Remark和Text相对简单，此处就将其忽略了。  Node是形成树结构表示HTML的基础，所有的数据表示都是接口Node的实现，Node定义了与页面树结构所表达的页面Page对象，定义了获取父、子、兄弟节点的方法，定义了节点到对应html文本的方法，定义了该节点对应的起止位置，定义了过滤方法，定义了Visitor访问机制。  AbstractNode是Node的一种具体的类实现，起到构成树形结构的作用，除了同具体Node相关的accetp方法，toString，toHtml，toPlainTextString方法以外，AbstractNode实现了大多基本的方法，使得它的子类，不用理会具体的树操作。  Tag是具体分析的主要内容。Tag分成composite的Tag和不能包含其他Tag的简单Tag两类，其中前者的基类是CompositeTag，其子类包含BodyTag,Div,FrameSetTag,OptionTag，等27个子类；而简单Tag有BaseHrefTag、DoctypeTag,FrameTag，ImageTag，InputTag，JspTag，MetaTag，ProcessingInstructionTag这八类。  Node分成三类：  RemarkNode:代表Html中的注释  TagNode：标签节点，是种类最多的节点类型，上述Tag的具体节点类都是TagNode的实现。  TextNode：文本节点  二，Visitor方式访问Html： 1，整体解析过程  用一个URL或页面String做一个Parser  用这个Parser做一个Visitor  使用Parser.visitAllNodeWith(Visitor)来遍历节点  获取Visitor遍历后得到的数据  2，Visit过程  做解析之前做的事情：visitor.beginParsing();  每次取到一个节点Node，让该Node接受accept该Visitor  做解析后做的事情：visitor.finishedParsing();  3，获取节点的过程：逐步遍历Html，分析出Node。此部分较为复杂，且对于我们应用来说无需很多了解，暂跳过。 4，节点访问 节点访问采用Visitor模式，Node的accept方法和具体Visitor的visit方法是关键。 首先三类Node来accept的方式各不相同：  对于所有TagNode都使用一个accept方法，即TagNode的accept方法。首先判断是否是标签结尾，如果是就visitor.visitEndTag (this)；否则visitor.visitTag (this);  如果是TextNode，那就visitor.visitStringNode (this);就可以了。  ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/htmlparser%e7%9a%84%e4%b8%a4%e7%a7%8d%e4%bd%bf%e7%94%a8%e6%96%b9%e6%b3%95-forward</link>
			</item>
	<item>
		<title>HtmlParser初步研究  -forwad</title>
		<description>&#160; &#160;这两天准备做一些网站编程的工作，于是对HtmlParse小研究了一下，目的是快速入手，而不是深入研究，做了一下整理，和大家共同讨论一下。 一，数据组织分析： HtmlParser主要靠Node、AbstractNode和Tag来表达Html，因为Remark和Text相对简单，此处就将其忽略了。  Node是形成树结构表示HTML的基础，所有的数据表示都是接口Node的实现，Node定义了与页面树结构所表达的页面Page对象，定义了获取父、子、兄弟节点的方法，定义了节点到对应html文本的方法，定义了该节点对应的起止位置，定义了过滤方法，定义了Visitor访问机制。  AbstractNode是Node的一种具体的类实现，起到构成树形结构的作用，除了同具体Node相关的accetp方法，toString，toHtml，toPlainTextString方法以外，AbstractNode实现了大多基本的方法，使得它的子类，不用理会具体的树操作。  Tag是具体分析的主要内容。Tag分成composite的Tag和不能包含其他Tag的简单Tag两类，其中前者的基类是CompositeTag，其子类包含BodyTag,Div,FrameSetTag,OptionTag，等27个子类；而简单Tag有BaseHrefTag、DoctypeTag,FrameTag，ImageTag，InputTag，JspTag，MetaTag，ProcessingInstructionTag这八类。  Node分成三类：  RemarkNode:代表Html中的注释  TagNode：标签节点，是种类最多的节点类型，上述Tag的具体节点类都是TagNode的实现。  TextNode：文本节点  二，Visitor方式访问Html： 1，整体解析过程  用一个URL或页面String做一个Parser  用这个Parser做一个Visitor  使用Parser.visitAllNodeWith(Visitor)来遍历节点  获取Visitor遍历后得到的数据  2，Visit过程  做解析之前做的事情：visitor.beginParsing();  每次取到一个节点Node，让该Node接受accept该Visitor  做解析后做的事情：visitor.finishedParsing();  3，获取节点的过程：逐步遍历Html，分析出Node。此部分较为复杂，且对于我们应用来说无需很多了解，暂跳过。 4，节点访问 节点访问采用Visitor模式，Node的accept方法和具体Visitor的visit方法是关键。 首先三类Node来accept的方式各不相同：  对于所有TagNode都使用一个accept方法，即TagNode的accept方法。首先判断是否是标签结尾，如果是就visitor.visitEndTag (this)；否则visitor.visitTag (this);  如果是TextNode，那就visitor.visitStringNode (this);就可以了。  ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/htmlparser%e5%88%9d%e6%ad%a5%e7%a0%94%e7%a9%b6-forwad</link>
			</item>
	<item>
		<title>Userful API Reference for Projects</title>
		<description>APIs:  JDOM: http://www.jdom.org/docs/apidocs/ HtmlParser:http://htmlparser.sourceforge.net/javadoc/ </description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/userful-api-reference-for-projects</link>
			</item>
	<item>
		<title>utf-8 JSP 文本文件读写的例子（原创）</title>
		<description>&#60;%@ page import="java.util.Date" %&#62;&#60;%@ page import="java.io.*" %&#62;&#60;%--&#160; Created by IntelliJ IDEA.&#160; User: Yang Yuan&#160; Date: Oct 29, 2005&#160; Time: 6:00:32 PM&#160; To change this template use File &#124; Settings &#124; File Templates.--%&#62;&#60;%@ page contentType="text/html;charset=UTF-8" language="java" %&#62;&#60;html&#62;&#60;head&#62;&#60;title&#62;Simple jsp page&#60;/title&#62;&#60;/head&#62;  &#60;body&#62;  &#60;%&#160;&#160;&#160; try {&#160;&#160;&#160;&#160;&#160;&#160;&#160; request.setCharacterEncoding("utf-8");&#160;&#160;&#160;&#160;&#160;&#160;&#160; String path = request.getSession().getServletContext().getRealPath("/~micas/WorkExperience.txt");&#160;&#160;&#160;&#160;&#160;&#160;&#160; FileOutputStream ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/utf-8-jsp-%e6%96%87%e6%9c%ac%e6%96%87%e4%bb%b6%e8%af%bb%e5%86%99%e7%9a%84%e4%be%8b%e5%ad%90%ef%bc%88%e5%8e%9f%e5%88%9b%ef%bc%89</link>
			</item>
	<item>
		<title>用JDOM创建XML</title>
		<description>package com.shanghai.waimai.xml.prototype;  //用jdom创建xml文档：CreateXML.javaimport java.io.FileWriter;import org.jdom.Document;import org.jdom.Element;import org.jdom.output.Format;import org.jdom.output.XMLOutputter;  public class CreateXML {&#160;&#160;&#160; /**&#160;&#160;&#160;&#160; * @param args&#160;&#160;&#160;&#160; */&#160;&#160;&#160; public static void main(String[] args) {&#160;&#160;&#160;&#160;&#160;&#160;&#160; // TODO Auto-generated method stub&#160;&#160;&#160;&#160;&#160;&#160;&#160; CreateXML createXML = new CreateXML();&#160;&#160;&#160; }  &#160;&#160;&#160; Element customer, name, age, sex, address, city, district, street;  &#160;&#160;&#160; public ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/%e7%94%a8jdom%e5%88%9b%e5%bb%baxml</link>
			</item>
	<item>
		<title>解决网站内容的抓取，分析，添加的流程。</title>
		<description>解析html，得到每一条的数据  数据要分类:分类的规则和标志  每个entry在每个分类的标志要明  用以上规则生成xml，附加类别和tag等附加信息  xml to db </description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/%e8%a7%a3%e5%86%b3%e7%bd%91%e7%ab%99%e5%86%85%e5%ae%b9%e7%9a%84%e6%8a%93%e5%8f%96%ef%bc%8c%e5%88%86%e6%9e%90%ef%bc%8c%e6%b7%bb%e5%8a%a0%e7%9a%84%e6%b5%81%e7%a8%8b%e3%80%82</link>
			</item>
	<item>
		<title>提取HTML中的文本信息</title>
		<description>我们拿到一个HTML文本的时候我们并不在意它的格式，而只是想提取其中包含的文本信息。例如说为了在手机上显示一个超文本，如果直接显示的话那肯定会收到一大堆的错误，很多手机根本没有能力显示HTML信息，因此我们需要把存在于HTML中的文本提取出来并使用WML来重新组合以便手机可以正确的查看，这样做虽然丢失了格式，但是毕竟这种情况下更关心的是数据。下面给出一段程序完成这个功能，很简单！/*&#160;* Created on 2004-7-11&#160;*/package com.clickcom.wcp.util;  import org.htmlparser.Node;import org.htmlparser.NodeFilter;import org.htmlparser.Parser;import org.htmlparser.util.NodeList;  /**&#160;* 用于处理HTML信息的工具集合&#160;* @author liudong&#160;*/public class HtmlUtils {  &#160;/**&#160; * 抽取纯文本信息&#160; * @param inputHtml&#160; * @return&#160; */&#160;public static String extractText(String inputHtml) throws Exception{&#160; StringBuffer text = new StringBuffer();&#160; Parser parser = Parser.createParser(new String(inputHtml.getBytes(),"8859_1"));&#160; //遍历所有的节点&#160; NodeList nodes = parser.extractAllNodesThatMatch(new ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/%e6%8f%90%e5%8f%96html%e4%b8%ad%e7%9a%84%e6%96%87%e6%9c%ac%e4%bf%a1%e6%81%af</link>
			</item>
	<item>
		<title>使用正则表达式提取网页中的有用内容</title>
		<description>东方细雨 发表于 2006-6-23 10:40:54  使用正则表达式提取网页中的有用内容，提取网页中的URL地址，提取网页中的电子邮件E-mail地址 在网上查了很多很多，都没有找到一个例子，只有一些什么把网页内的某些字替换成红色之类的垃圾源代码，VB代码Function RegExpTest(patrn, strng) 'patrn:需要查找的字符 strng:被查找的字符串&#160; Dim regEx, Match, Matches&#160;&#160;&#160;&#160; ' 创建变量。&#160; Set regEx = New RegExp&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ' 创建正则表达式。&#160; regEx.Pattern = patrn&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ' 设置模式。'"\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"'&#160; regEx.IgnoreCase = True&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ' 设置是否区分大小写。&#160; regEx.Global = True&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ' 设置全程匹配。&#160; Set Matches = regEx.Execute(strng)&#160;&#160;&#160; ' 执行搜索。&#160; For Each Match In Matches&#160;&#160;&#160;&#160; ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/%e4%bd%bf%e7%94%a8%e6%ad%a3%e5%88%99%e8%a1%a8%e8%be%be%e5%bc%8f%e6%8f%90%e5%8f%96%e7%bd%91%e9%a1%b5%e4%b8%ad%e7%9a%84%e6%9c%89%e7%94%a8%e5%86%85%e5%ae%b9</link>
			</item>
	<item>
		<title>解析Html页面:HTML Parser的试用(fwd)</title>
		<description>最近在研究lucene的全文检索,在很多地方需要解析或者说分析Html内容或者Html页面,Lucene本身的演示程序中也提供了一个Html Parser,但是不是纯Java的解决方案.于是到处搜索,在网上找到了一个"HTMLParser".网址是: http://htmlparser.sourceforge.net ,当前版本为1.5.下载下来,试用一番,感觉不错,完全能满足lucene解析Html的需求.过几天贴出lucene进行全文检索的代码.(检索本站的文章等).试用代码如下,供大家参考:package com.jscud.test;  import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.InputStreamReader;  import org.htmlparser.Node;import org.htmlparser.NodeFilter;import org.htmlparser.Parser;import org.htmlparser.filters.NodeClassFilter;import org.htmlparser.filters.OrFilter;import org.htmlparser.nodes.TextNode;import org.htmlparser.tags.LinkTag;import org.htmlparser.util.NodeList;import org.htmlparser.util.ParserException;import org.htmlparser.visitors.HtmlPage;import org.htmlparser.visitors.TextExtractingVisitor;  import com.jscud.util.LogMan; //一个日志记录类  /**&#160;* 演示了Html Parse的应用.&#160;*&#160;* @author scud http://www.jscud.com&#160;*/  public class ParseHtmlTest{  &#160;&#160;&#160; public static void main(String[] args) throws Exception&#160;&#160;&#160; {&#160;&#160;&#160;&#160;&#160;&#160;&#160; String ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/%e8%a7%a3%e6%9e%90html%e9%a1%b5%e9%9d%a2html-parser%e7%9a%84%e8%af%95%e7%94%a8fwd</link>
			</item>
	<item>
		<title>抓取html中的链接文字(fwd)</title>
		<description>这里面共有两个类第一个是ParserGetterpackage bot;  import javax.swing.text.html.HTMLEditorKit;  /**&#160;* @author lyz&#160;*&#160;* TODO To change the template for this generated type comment go to&#160;* Window - Preferences - Java - Code Style - Code Templates&#160;*/public class ParserGetter extends HTMLEditorKit{&#160;public HTMLEditorKit.Parser getParser(){&#160; return super.getParser();&#160;}  &#160;public static void main(String[] args) {&#160;}}  第二个类是SwingHTMLParser  ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/%e6%8a%93%e5%8f%96html%e4%b8%ad%e7%9a%84%e9%93%be%e6%8e%a5%e6%96%87%e5%ad%97fwd</link>
			</item>
	<item>
		<title>利用HttpClient获取网页内容(转）</title>
		<description>&#160; HTTP协议是目前互联网上最重要的协议，许多软件与服务都需要依赖HTTP协议。虽然java.net这个package中包含了对HTTP的基本支持，但还有很多高级和复杂的功能无法实现，这不能不说是一个遗憾。HttpClient作为Apache的开源项目项目之一，为基于HTTP协议的操作提供了强大的客户端执行支持，最新的版本为3.0RC3。下面通过一个例子简要展示HttpClient的使用方法：-------------------------------------------------------------------------------- import java.io.BufferedReader;import java.io.IOException;  import java.io.InputStream;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.util.*;import org.apache.commons.httpclient.Header;import org.apache.commons.httpclient.HostConfiguration;import org.apache.commons.httpclient.HttpClient;import org.apache.commons.httpclient.HttpConnection;import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;import org.apache.commons.httpclient.NameValuePair;import org.apache.commons.httpclient.methods.GetMethod;import org.apache.commons.httpclient.methods.PostMethod;  /**&#160;* @author steven&#160;*/public class HttpClientExample {&#160;&#160;&#160; // 获得ConnectionManager，设置相关参数&#160;&#160;&#160; private static MultiThreadedHttpConnectionManager manager = new MultiThreadedHttpConnectionManager();&#160;&#160;&#160; private static int connectionTimeOut = 20000;&#160;&#160;&#160; private static int socketTimeOut = 10000;&#160;&#160;&#160; private static int ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/%e5%88%a9%e7%94%a8httpclient%e8%8e%b7%e5%8f%96%e7%bd%91%e9%a1%b5%e5%86%85%e5%ae%b9%e8%bd%ac%ef%bc%89</link>
			</item>
	<item>
		<title>大众点评网的成功：网聚吃的力量</title>
		<description>&#160; 按照分类的方式找餐馆的用户，更像是‘搜索’，因为他们已经有了比较清晰的目标。但是使用标签不断跳转的用户，那就是真正在‘发现’了  “我家人都算比较会吃的啦。”大众点评网CEO张涛倚着靠背，乐呵呵地说道，“2002年刚回国的时候，想找吃的，只要打电话问家里人就可以了。那阵子觉得他们都很厉害。不过那么些地方很快就吃腻了，所以现在他们也都常上点评网看。”  作为一个餐饮类的发现型网站，大众点评网在上海市场的优势十分明显。在网络论坛或者即时通讯工具上，大部分“徐家汇一带有什么川菜馆比较正宗”或者 “复旦大学附近哪家西餐厅价廉物美”之类的问题最后都会被指引到大众点评网的某张页面上。虽然“大众点评网”听起来是一个包罗万象的名字，但实际上，它在很多网民眼中就是“餐饮指南”的代名词。  从搜索到发现  以“发现”为主要功能的网站正如雨后春笋般在互联网上崭露头角。  友播：发掘音乐的DNA大众点评网：网聚吃的力量若邻网络：发掘网上的真实人脉Verycd、豆瓣、EEmap在大众点评网的首页上，最醒目的位置是以四种标准划分的热门排行——餐馆排行、热门菜系、热门商区以及热门菜。网站会根据用户的IP地址自动显示区域首页：如果是上海用户，给出的商区就是徐家汇/体育场、淮海路、人民广场；如果是北京用户，同样的区域则被替换成了建外大街/国贸、王府井/东单、中关村/ 双榆树。任何用户都能以排行榜作为起点，通过种类、地区、价位等各种标准开始自己的发现之旅。  找到了满足条件的餐馆之后，用户会看到类似如下格式的商户简介：“料理共分9个区，‘日式生鲜是整个自助餐的精华’。虽然‘味道没有特别出众的’，但‘品种绝对丰富’——‘比任何一家五星级饭店的自助都多’。‘不同的时段有不同的价格’，感觉‘整体性价比还可以’。有歌手驻唱，环境‘不错’，但‘人很多’， ‘有点儿乱’。”  这些100字出头的简介都是由网站管理人员负责日常维护的，但是其中加引上号的描述短语都是来自普通用户的评价。 “餐饮这东西，不能像维基百科全书那样全部交由用户进行维护。因为吃饭喝酒的事情，主观性太强，你一言我一语的肯定打架。所以我们开放用户点评，但是简介文字还是由管理员来精选用户评论。如果20个人里有10个人说一家馆子‘正宗’，那我们就说它‘正宗’。”张涛说。  在大众点评网办公室的前台，还能看到他们过去的域名“zSurvey.com”。这个域名对于国内用户来说并不容易记住，但是对于熟悉国外餐饮业的食客来说，可以很容易地联想到“查氏餐馆调查” (Zagat Survey) 。实际上，大众点评网的推荐机制以及商户简介的整理方法都从“查氏”身上得到了启发。  张涛在美国的时候，了解到了在欧美餐饮业最受推崇的两本美食手册，一本是《米其林美食指南》 (Guide Michelin) ，一本就是《查氏餐馆调查》 (Zagat Survey) 。虽然在世界范围内的名气相当，但两者在方方面面都各有千秋。  由米其林轮胎公司出版的《米其林美食指南》被誉为“美食圣经”——这个雅号一方面显示出其权威性，另一方面也反映出了它高端的姿态。在《米其林美食指南》的发源地法国，米其林公司资助了大约十多人，他们的工作就是吃遍法兰西，然后根据严格的内部标准统一打分。这些评分人都是喜欢美食的大家，他们用餐挑剔，专注细节。入选该书的餐厅多数价格昂贵，但是“三颗星”代表了“完美绝顶的厨艺、精致的美食、无缺点的服务和极雅致的用餐环境”，成为法国主厨们终身的奋斗目标。  而《查氏餐馆调查》走的则是一条亲民路线。它拥有设计精美的网站Zagat.com，用户可以在网站上或者通过书面问卷对全美的大部分餐厅发表自己的评论，而它每年一册的书籍也是根据普通市民的评论加以整理汇集成册。所以，当《米其林美食指南》登陆纽约的时候，人们比较发现，相比于《查氏餐馆调查》中2000多家餐馆的容量，由于《米其林美食指南》的高端定位，里面只推荐了500家高档餐厅。所以在生活方式迥异的纽约，来自法国的《米其林美食指南》始终无法与《查氏餐馆调查》一较高下。  同样，张涛认为，在菜系繁多、口味千变万化的中国，采用《查氏餐馆调查》全民参与的方法更容易让食客找到理想的餐厅。“现在经济发展了，大家都有钱了，金山城吃腻了，就去海底?荩捞，再腻了就去川办。”张涛说，“我们要用互动的方式来整理这些信息，让大家知道下一顿上哪儿吃。”  在《查氏餐馆调查》的模式上，大众点评网加入了细致的标签 (Tag) 功能。同亚马逊网络书店的标签功能相似，大众点评网的标签也是由用户添加，并且商户的每条标签后面都会附上赞同该标签的用户数，同时点击标签链接即可查找满足条件的餐厅。  标签并不是按照既有的分类方式确定，而是用于描述用户的各种需求。比如选择北京的“海底捞火锅(牡丹园店)”，就可以看到“火锅”、“朋友聚餐”、 “可停车”、“需等位”、“可用信用卡”、“有表演”、“朋友聚会”、“休闲”、“情侣约会”、“商务宴请”等一系列标签。其中选择添加“火锅”标签的用户最多，而“商务宴请”最少。  如果将“北京—餐馆—海淀区—北太平庄/花园路—火锅—海底捞火锅(牡丹园店)”这样的逐层分类方式比作过去图书馆中常见的杜威分类方法的话，那么标签则像Google的出现，它打破了固定的分类，让同一个商店可以出现在五花八门的查询条件中。  “大众点评网上的标签和关键词又不太一样，它已经呈现在哪里了，用户看到一家餐厅就可以顺藤摸瓜地按照某个特点发现下一家，而不需要去绞尽脑汁地想某个已知的关键词或者某个餐厅。”张涛说，“按照分类的方式找餐馆的用户，更像是‘搜索’，因为他们已经有了比较清晰的目标。但是使用标签不断跳转的用户，那就是真正在‘发现’了。 </description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e5%a4%a7%e4%bc%97%e7%82%b9%e8%af%84%e7%bd%91%e7%9a%84%e6%88%90%e5%8a%9f%ef%bc%9a%e7%bd%91%e8%81%9a%e5%90%83%e7%9a%84%e5%8a%9b%e9%87%8f</link>
			</item>
	<item>
		<title>Nutch爬虫实验运行及抓取数据分析（一）</title>
		<description>&#160; 为了更深入地对Nutch爬虫进行了解，我们需要运行一个实际的抓取过程并对这个过程中的细节进行记录，对抓取生成的结果文件进行内容分析。首先你需要下载Nutch程序并搭建起可以令其运行的平台，这在网上都有详细的说明资料，我就不赘述了。我们需要做的第一步就是建立起一个实验用的Web站点，这个站点只包含了四个网页。图1描述了这四个网页之间的链接关系，并且C网页和C-dup网页的网页内容是相同的。   图1&#160; 实验站点结构图 我们首先需要设置种子URL，我们设置A网页为爬虫起始抓取网页。命令如下：echo ‘http://keaton/tinysite/A.html’ &#62; urls
另外我们需要限制Crawler只抓取这个实验站点的网页，Nutch爬虫使用一个Filter来识别URL是否需要抓取。我们可以通过对conf/crawl-urlfilter.txt文件的修改来实现这个Filter，将文件中的+^http://([a-z0-9]*.)*MY.DOMAIN.NAME/
内容修改为+^http://keaton/
接下来，我们执行下面的命令行来运行Crawler：bin/nutch crawl urls -dir crawl-tinysite -depth 3 &#62;&#38; crawl.log
在这个爬行命令中，我们设置抓取结果存储于crawl-tinysite文件夹中，抓取日志为crawl.log，另外限定了抓取深度为3，也就是告诉Crawler需要执行3次“产生/抓取/更新”循环就可以抓取完毕了。由于实验站点的简陋，深度为3就可以了，但是在实际运行时需要根据实际情况来进行设置。
下面就让我们通过对抓取产生文件的内容分析来进一步的了解Crawler的工作吧。
首先我们来看一下抓取过程中产生的所有文件有哪些，打开crawl-tinysite文件夹，里面有三个子目录，详细如图2所示：
 
图2 爬虫运行完毕所生成文件
Nutch自身带了很多查看结果文件的工具，我们利用它们来进行文件内容展示。
WebDB
首先我们需要看一下WebDB中的网页数目和链接数目，以确定站点爬行情况，执行下面的命令行：bin/nutch readdb crawl-tinysite/db -stats
结果为：Number of pages: 4Number of links: 4
正如所料，其中包括四个网页（A,B,C,C-dup）和四个链接。因为WebDB只能去除重复URL，所以其中仍然含有C-dup网页，但是A网页却并没有被抓取两次。接下来，看一下WebDB中的网页实体和链接实体的具体存储内容，执行命令：bin/nutch readdb crawl-tinysite/db -dumppageurl
生成结果：Page 1: Version: 4URL: http://keaton/tinysite/A.htmlID: fb8b9f0792e449cda72a9670b4ce833aNext fetch: Thu Nov 24 11:13:35 GMT 2005Retries since fetch: 0Retry interval: 30 daysNum ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/nutch%e7%88%ac%e8%99%ab%e5%ae%9e%e9%aa%8c%e8%bf%90%e8%a1%8c%e5%8f%8a%e6%8a%93%e5%8f%96%e6%95%b0%e6%8d%ae%e5%88%86%e6%9e%90%ef%bc%88%e4%b8%80%ef%bc%89</link>
			</item>
	<item>
		<title>抓取Web网页数据分析</title>
		<description>&#160; 　　通过程序自动的读取其它网站网页显示的信息，类似于爬虫程序。比方说我们有一个系统，要提取BaiDu网站上歌曲搜索排名。分析系统在根据得到的数据进行数据分析。为业务提供参考数据。　　为了完成以上的需求，我们就需要模拟浏览器浏览网页，得到页面的数据在进行分析，最后把分析的结构，即整理好的数据写入数据库。那么我们的思路就是：　　1、发送HttpRequest请求。　　2、接收HttpResponse返回的结果。得到特定页面的html源文件。　　3、取出包含数据的那一部分源码。　　4、根据html源码生成HtmlDocument，循环取出数据。　　5、写入数据库。程序如下：//根据Url地址得到网页的html源码&#160;&#160;&#160;&#160;&#160;&#160;&#160; private string GetWebContent(string Url)&#160;&#160;&#160;&#160;&#160;&#160;&#160; {&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; string strResult="";&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; try&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Url);//声明一个HttpWebRequest请求&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; request.Timeout = 30000;//设置连接超时时间&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; request.Headers.Set("Pragma", "no-cache");&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; HttpWebResponse response = (HttpWebResponse)request.GetResponse();&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Stream streamReceive = response.GetResponseStream();&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; Encoding encoding = Encoding.GetEncoding("GB2312");&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; StreamReader streamReader = new StreamReader(streamReceive, encoding);&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; strResult = streamReader.ReadToEnd();&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; catch&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; {&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; MessageBox.Show("出错");&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; return strResult;&#160;&#160;&#160;&#160;&#160;&#160;&#160; }为了使用HttpWebRequest和HttpWebResponse，需填名字空间引用　using System.Net;以下是程序具体实现过程：&#160;private ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/%e6%8a%93%e5%8f%96web%e7%bd%91%e9%a1%b5%e6%95%b0%e6%8d%ae%e5%88%86%e6%9e%90</link>
			</item>
	<item>
		<title>CURL库的一些用法总结（爬站&#8230;）</title>
		<description>&#160;  1.CURL库的基本步骤：  &#160;&#160;&#160;&#160; a)curl_init();  &#160;&#160;&#160; b)curl_setopt();  &#160;&#160;&#160; c)curl_exec();  &#160;&#160;&#160; d)curl_close();  2.重点解释curl_setopt里面的内容：  CURLOPT_RETURNTRANSFER：把他设置成1后，再执行curl_exec就不会直接输出到页面而是输出到制定的变量  CURLOPT_URL：设置连接，这个不用说了。  CURLOPT_HEADER：是否在输出的时候带着HTTP头。  CURLOPT_COOKIEFILE跟CURLOPT_COOKIEJAR：在这个里面设置好文件的打开句柄就可以将cookie以netscape方式保存下来  例子：  &#60;?php  $cookieFilePath = dirname(__FILE__)."/cookies/cookie-".getRand().".txt";  @unlink($cookieFilePath);  curl_setopt($login, CURLOPT_COOKIEFILE, $cookieFilePath);  curl_setopt($login, CURLOPT_COOKIEJAR, $cookieFilePath);  ?&#62;  CURLOPT_HTTPHEADER：在请求的时候，给远程服务器输入的HTTP头，以数组的形式给出：  例子：  ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/curl%e5%ba%93%e7%9a%84%e4%b8%80%e4%ba%9b%e7%94%a8%e6%b3%95%e6%80%bb%e7%bb%93%ef%bc%88%e7%88%ac%e7%ab%99%ef%bc%89</link>
			</item>
	<item>
		<title>爬虫爬取内容后的文章分析</title>
		<description> 用curl或者file_getcontent的远程文件打开方式得到网页的内容后，如何分析入库？一般来说，分为三类。 第一类：偏移量法 原理很简单，跟读文件的方式差不多，将网页当作一个普通文件处理，用curl_exec存入大字符串后，在其中遍历，获得需要的信息。 优点：速度快，简单 缺点：远程文件的改变直接影响到输出结果，灵活程序不够，需要写一大堆的代码 下面的代码是几个取得偏移的辅助函数 &#60;?php/**&#160;*&#160;取得从$start到$end的内容&#160;*&#160;*&#160;@param&#160;string&#160;$str&#160;*&#160;@param&#160;string&#160;$start&#160;*&#160;@param&#160;string&#160;$end&#160;*&#160;@return&#160;string */function&#160;getValue($str, $start, $end)&#160;{ $pos = strpos($str, $start); if($pos === false)&#160;return false; $a = $pos + strlen($start); $b = strpos($str, $end, $a); if($b === false)&#160;return false; return substr($str, $a, $b - $a);}/**&#160;*&#160;以$pos_num为偏移量,取出$start到$end的内容&#160;*&#160;*&#160;@param&#160;string&#160;$str&#160;*&#160;@param&#160;string&#160;$start&#160;*&#160;@param&#160;string&#160;$end&#160;*&#160;@param&#160;int&#160;$pos_num&#160;*&#160;@return&#160;string */function&#160;getPosValue($str, $start, $end,&#38;$pos_num)&#160;{ $pos = strpos($str, $start,$pos_num); if($pos === false)&#160;return false; ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e6%90%9c%e7%b4%a2%e6%8a%80%e6%9c%af/%e7%88%ac%e8%99%ab%e7%88%ac%e5%8f%96%e5%86%85%e5%ae%b9%e5%90%8e%e7%9a%84%e6%96%87%e7%ab%a0%e5%88%86%e6%9e%90</link>
			</item>
	<item>
		<title>wordPress 的google map 生成器</title>
		<description>
http://www.arnebrachhold.de/2005/06/05/google-sitemaps-generator-v2-final#P18INST </description>
		<link>http://blog.enabling-tech.com/sitemanagement/it-knowledge/wordpress-%e7%9a%84google-map-%e7%94%9f%e6%88%90%e5%99%a8</link>
			</item>
	<item>
		<title>icerocket.com</title>
		<description>http://blogs.icerocket.com/search?q=tag%3A%E4%B8%8A%E6%B5%B7

去这个网址，搜“上海”,发现都是我们的帖子，是不是有些太多了？！

blogs.icerocket.com </description>
		<link>http://blog.enabling-tech.com/sitemanagement/it-knowledge/icerocketcom</link>
			</item>
	<item>
		<title>测试使用Windows Live Writer</title>
		<description>&#160; &#160; </description>
		<link>http://blog.enabling-tech.com/sitemanagement/%e6%b5%8b%e8%af%95%e4%bd%bf%e7%94%a8windows-live-writer</link>
			</item>
	<item>
		<title>Protected: Nancy&#8217;s sister graduation photos</title>
		<description>
	This post is password protected. To view it please enter your password below:
	Password:  
	
	 </description>
		<link>http://blog.enabling-tech.com/enabling-tech/nancys-sister-graduation-photos</link>
			</item>
	<item>
		<title>（转）用好Windows Live Writer</title>
		<description>新版本的Windows Live Writer已经发布些日子了，不知道大家是否已经采用和熟悉了，在此提示一些技巧来和大家交流。  1. 安装问题：如果你安装过Windows Live Mail, Messenger或者Writer三者之一，再进行其它语言版本的任一款软件安装时，则会发生冲突而导致无法正常安装，这个时候需要卸载以前版本的Windows Live软件才行。微软官方已经给出了卸载程序，下载地址。  2. 启动假死：有些用户可能在启动WLW后，发生假死现象，在任务管理器中会查看到WLW的CPU占用率达到100%。问题原因便是Windows Live Setup Service的自动更新导致了严重的资源占用。解决方法当然是关闭掉它：开始菜单，点击“运行”，输入“cmd”，然后在弹出的命令窗口中输入以下字段：  net stop “Windows Live Setup Service” 回车sc config “Windows Live Setup Service” start=disabled 回车  然后关闭重新启动电脑即可。  3. 设置WP的Post Slug：添加WP的Blog后，会在编辑日志下面的属性中显示如下的设置框，其中的数据域即为设置Post Slug，而密码则是设置Post的保密属性。   &#160;4. 设置UTW的Tag：相信使用WP下UTW的Tag插件用户不在少数，一般我们会在后台管理中设置开启“Embedded Tags”来方便在日志中通过Post来添加Tag。而其实我们也是可以通过设置WLW的插入标记来方便添加的：    在插入标记中选择“自定义提供程序”，之后选择“添加”，进行如图所示的设置即可。然后添加时选择最正文的“UTW”便可以了。  5. 链接词汇表：可以添加常用的链接到链接词汇表，这样在插入链接时，可以选择地址栏右方的“链接到”，从词汇表项中选择即可。 ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%ef%bc%88%e8%bd%ac%ef%bc%89%e7%94%a8%e5%a5%bdwindows-live-writer</link>
			</item>
	<item>
		<title>Live Writer Beta2与WordPress乱码问题解决办法(转载）</title>
		<description>在”新版Live Writer和WordPress不兼容（中文乱码）“中提到过Windows Live Writer Beta2 发布blog到WordPress，中文会变成乱码的问题，当时提出了一个消极的解决办法，就是恢复到WLW 的老版本。  后来jerrycullet在http://www.cullet.cn/index.php/2007-06/21.jc中提到修改注册表的办法:  开始-运行-输入regedit-确定  找到一下位置：HKEY_CURRENT_USER\Software\Windows Live Writer\Weblogs\[Blog ID 号码]\ManifestOptions  删掉characterSet  此时，应该不再是乱码了  不过实际测试发现，如此设置后仍然乱码。研究后还需删除  HKEY_CURRENT_USER\Software\Windows Live Writer\Weblogs\[Blog ID 号码]\UserOptionOverrides下的characterSet   这样以来，乱码问题就解决了。 原文来自于：http://www.hamo.cn/archives/p409.html </description>
		<link>http://blog.enabling-tech.com/enabling-tech/live-writer-beta2%e4%b8%8ewordpress%e4%b9%b1%e7%a0%81%e9%97%ae%e9%a2%98%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95%e8%bd%ac%e8%bd%bd%ef%bc%89</link>
			</item>
	<item>
		<title>Windows Blog Authorizing Tool</title>
		<description>Download page: http://get.live.com/zh-chs-cn/betas/writer_betas Introduction Page: http://fairyfish.net/2007/06/27/use-windows-live-writer/ </description>
		<link>http://blog.enabling-tech.com/enabling-tech/windows-blog-authorizing-tool</link>
			</item>
	<item>
		<title>使用博客工具发布</title>
		<description>测试 </description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e4%bd%bf%e7%94%a8%e5%8d%9a%e5%ae%a2%e5%b7%a5%e5%85%b7%e5%8f%91%e5%b8%83</link>
			</item>
	<item>
		<title>Protected: 读取DingPing数据分析器</title>
		<description>
	This post is password protected. To view it please enter your password below:
	Password:  
	
	 </description>
		<link>http://blog.enabling-tech.com/sitemanagement/%e8%af%bb%e5%8f%96dingping%e6%95%b0%e6%8d%ae%e5%88%86%e6%9e%90%e5%99%a8</link>
			</item>
	<item>
		<title>Java读取文件中含有中文的解决办法[转]</title>
		<description>作者：beyondii[]  ：  
 
 
    折磨了一天的问题，终于在黄昏的时候解决了，现在一吐为快。
    众所周知，java的[tag]中文问题[/tag]一直是一个老大难的问题，这个现象可以在csdn中[tag]java[/tag]论坛里关于中文乱码的提问率就可以了解到，甚至软件巨人IBM专门开辟了一个解决中文问题的专区，作为一个俗人（一直梦想希望想金凯利那样成为一个“冒牌天神”，只是一直没有成功，也许是因为上帝不照顾中国吧），我也为同意的问题困扰，好在今天解决了。
    随着我对.net平台的彻底放弃（只是生活所迫，毕竟我还要生活），将原有的资源转到Java平台上来是我当前的一个重要任务之一，说到这里，不得不承认.net对中文问题解决的很好，虽然偶尔也会出现乱码。
    问题是这样的，我的box(http://www.ibeyond.org/box/)原来是使用asp.net写的（当时只是为了尝试新的技术），当时为了数据的可移植性我放弃了使用数据库，将全部数据保存为UTF－8编码的文本文件，在.net中读取这种文件秩序只要指定打开文件的编码方式，中文问题就可以避免。但是按照我以前的思维，java中不是这么作的，java中都是先读取后转换的，最后的结果证明我错了，看来经验主意害死人呀。
File f=new File((new BoxConfig()).getBaseDir()+"Data\\"+request.getParameter("ID")+".inc");
BufferedReader reader = new BufferedReader(new FileReader(f));
String line;
while((line=reader.readLine())!=null){
  strContent+=line;
}
这是我最初的代码f就是我要读取的UTF－8格式的文本文件，这一天中经过了无数次的尝试，包括new String(strContent.getBytes("UTF-8"))（其中尝试了N种编码转换），System.setProperty("file.encoding","UTF-8")（其中指定了N种编码转换），都失败了，其中甘苦相信各位经历过被程序折磨的各位看官都有所了解，在此略过。终于在Google中无数次查询中得到了一个后来被证明很重要的一条信息“读取文件时指定字符编码”，一语点醒梦中人，.net中不就是这么实现的吗？走了一圈弯路终于解决了这个问题。
File f = new File("E:\\eclipse\\workspace\\box\\Data\\2003-3-7-100.inc");
InputStreamReader read = new InputStreamReader (new FileInputStream(f),"UTF-8");
BufferedReader reader=new BufferedReader(read);
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
通过打开文件是指定文件编码的方法把这个问题轻松的解决了。
  最后总结一下：java要读取数据流的时候一定要指定数据流的[tag]编码方式[/tag](至少读取String流的时候要这么作。
  你也许可以通过Http://www.ibeyond.org/得到相关信息，你也可以通过csdn@ibeyond.org和我联系。
  本文的版权归iBeyond所有，转载时请注明转载出处。
  </description>
		<link>http://blog.enabling-tech.com/enabling-tech/j2ee/java%e8%af%bb%e5%8f%96%e6%96%87%e4%bb%b6%e4%b8%ad%e5%90%ab%e6%9c%89%e4%b8%ad%e6%96%87%e7%9a%84%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95%e8%bd%ac</link>
			</item>
	<item>
		<title>中文问题</title>
		<description>解决了[tag]中文问题[/tag]：

登录数据库把UTW产生的三个表wp_tag,wp_post2tag,wp_tags_synonyms中的字符串类型改成utf8的
2.出错产生了[tag]错误数据[/tag],要把上面提到的三个表清空
3.同样是 错误数据 在wp_postmeta里生成了一部分utw的数据是不准的,删除meta_key带_utw_tags_或者_utw_tags_0的.

[tag]版权所有[/tag]。 </description>
		<link>http://blog.enabling-tech.com/sitemanagement/%e4%b8%ad%e6%96%87%e9%97%ae%e9%a2%98</link>
			</item>
	<item>
		<title>SEO 数据 of 上海外卖网</title>
		<description>上海外卖网 waimai.shanghai-wai-mai.com

今天发现已经被

http://search.114.vnet.cn/

www.google.cn: site:shanghai-wai-mai.com

Yahoo!

收录。 </description>
		<link>http://blog.enabling-tech.com/enabling-tech/search-engine-optimization/seo-%e6%95%b0%e6%8d%ae-of-%e4%b8%8a%e6%b5%b7%e5%a4%96%e5%8d%96%e7%bd%91</link>
			</item>
	<item>
		<title>促能技术网</title>
		<description>促能技术网 是本站的中文名字，有点拗口，不过我还在思考中。 </description>
		<link>http://blog.enabling-tech.com/sitemanagement/%e4%bf%83%e8%83%bd%e6%8a%80%e6%9c%af%e7%bd%91</link>
			</item>
	<item>
		<title>ramp up</title>
		<description>Ramp up time

just means things are a bit harder and slower at first
 
bceause there's a lot to learn at first
 
then it'll get easier/faster </description>
		<link>http://blog.enabling-tech.com/english-learning-workhritetc/ramp-up</link>
			</item>
	<item>
		<title>Protected: test2</title>
		<description>
	This post is password protected. To view it please enter your password below:
	Password:  
	
	 </description>
		<link>http://blog.enabling-tech.com/enabling-tech/test2</link>
			</item>
	<item>
		<title>Google Javascript Library</title>
		<description>http://www.google.com/apis/gadgets/reference.html#JS_Ref

 My hacky testing file:

Google Javascript Library test file </description>
		<link>http://blog.enabling-tech.com/enabling-tech/google-technology-gadget-etc/google-javascript-library</link>
			</item>
	<item>
		<title>Protected: Poppit Google Gadget</title>
		<description>
	This post is password protected. To view it please enter your password below:
	Password:  
	
	 </description>
		<link>http://blog.enabling-tech.com/enabling-tech/test</link>
			</item>
	<item>
		<title>家装污染十大症状 空气净化器导购</title>
		<description>家装污染十大症状 空气净化器导购

　　南方网讯　可以说，我们没有哪个时候能像今天这样注重我们自家的空气质量，因为很多信息显示，很多人的新家实在是“太不健康”了。去年，中国室内装饰协会环境监测工作委员会在北京地区千户新装修家庭中进行的抽检结果显示，甲醛超标的占了60％。从青岛、南京、银川等其它地区有关部门的监测数据看，新装修家庭中的甲醛不合格比率都在60％以上。今年，该项统计数据显示，仍然有半数以上超标。同时，很多新购买的家具，其板材中的甲醛等物质超标也开始严重起来。甲醛过量，导致人体免疫力下降，严重者还可能患白血病。此外，装修中可能用到的苯、氨等有害有机物，也同样是人体健康的“谋杀者”。
　　“请问家里装修过后要除去空气中的甲醛，该买哪一种空气净化器好？”在北京路广百总店，林女士非常关切地向店员询问道。林女士刚刚装修完新家，正准备年前的时候搬进新家，但是听人家说，新家装修完不能马上搬，需要先净化一下室内的空气。前不久，她在央视新闻频道的《共同关注》节目中，看到了新居甲醛污染导致白细胞减少的报道，于是决定买个空气净化器。她说：“家还没搬，要先把新家除除味道才行。”

　　店员张小姐很耐心地给她做了介绍。张小姐告诉记者，“最近因为到了年底，很多人都开始收楼搬家了。现在的人都很注重自己的健康，所以很多人都会过来看一看问一问，我们的这些产品都卖得不错的。”而友谊、天河城等大型百货的销售记录也显示，新近空气净化器的销量也看好。

　　空气净化器这种新型的家电，具有调节室内温度、湿度、自动检测烟雾、滤去尘埃、消除异味及释放负离子等功能。在除去甲醛、苯、氨等有机物方面，大多数净化器采用的是活性炭的吸附功能，功能更强大的采用的是较先进的光触媒分解技术。不少产品的对比实验都显示，使用过净化器的室内空间比起没使用过的室内空间来，其有害物的比例是非常低的，基本上符合国家规定的标准。

　　当然，空气净化器的用武之地并不只是在装修之后。店员张小姐说：“我自己也感觉现在的空气都不算太好，净化器不光是装修后，其实什么时候都需要用的。比如在家里有人抽烟，空气不太好的时候就需要开一开，过滤一下空气。外面空气粉尘比较大的时候，也要开一开的。”事实上，净化器在空气过滤方面毫不逊色。超高能效的HEPA过滤网已经成为标志性的技术之一，HEPA是HighEfficiencyParticu鄄lateAir（高效空气微粒过滤）的缩写，它是一种国际公认的高效滤材，由非常细小的有机纤维交织而成，对微粒的捕捉能力较强，孔径微小，吸附容量大，净化效率高，并具备吸水性。最初HEPA应用于核能研究防护，现在大量应用于精密实验室、医药生产、原子研究和外科手术等需要高洁净度的场所。在日益重视室内空气的今天，HEPA也开始转为民用。其次，离子化除菌、纳米技术（松下EH3014）等也被运用到了净化器中，以更有效地除尘、杀菌。可以说，有了一件强效的空气净化器，也就有了一份健康的空间。
　　●净化空气好帮手

　　伊莱克斯Z8020
　　5重过滤杀菌系统：高效过滤网可以过滤较大脏物；空气高压离子化系统可除浮游物；臭氧消毒系　统，能杀菌、解毒、除臭；专用氧气过滤网相当于电子式的HEPA，可以将浮游物离子化；活性炭滤网能吸附甲醛、分解有毒气体。过滤器可以拆开水洗，方便操作。参考价格：6380元
　　夏普FU－6046NAS
　　活性炭、磷灰石抗菌滤网和HEPA高效能滤网多层强效滤网技术；派离克正负离子群技术，可以除菌除臭，提高负离子的释放比例，对香烟、厕所等异臭味有脱臭效果，并能分解香烟中的一氧化氮，提高空气质量。参考价格：4980元
　　松下EH3014
　　拥有4重净化功能：首层过滤网和高效抗菌HEPA过滤板，有效集尘除菌，有效率达到99.97％；强效除臭活性炭，能吸附异味；纳米离子技术，可以发出纳米离子深入织物内部，分解清除各种异味，消除空气中浮游霉菌的活性。参考价格：2980元
　　仟岛X5
　　纳米光触媒技术，可以杀灭有害细菌，分解甲醛、苯等有机物；医疗级的高效抗菌HEPA网，可以拦截直径0.3微米以上的颗粒物，并抑制细菌的活动能力，有效率达99.9％；活性炭可以吸收甲醛、苯、乙醇等各种有害气体。参考价格：1980元
　　康特31375
　　HEPAtech超高密度美国3M专利设计过滤网，过滤超过万分之一毫米微粒，有效率达到99.97％；负离子装置，可以除菌集尘；多重过滤系统，可以除尘、除烟、除味，对有严重过敏症的人士最为适用。参考价格：1700元
　　亚都KJF2801A
　　有多种空气净化技术：分子络合锁定技术，可以去处甲醛合氨气；催化活性炭，可以吸附挥发性有机化合物；颗粒无传感器及HEPA过滤层，可以监测净化颗粒物浓度；湿度和异味传感器，可以监测室内湿度和异味；AV-990灭菌整理技术，可杀灭空气中有害菌。参考价格：4980元
　　艾美特AC09R
　　拥有活性炭过滤网、高效集尘过滤网、PP水洗过滤网和可洗式光触媒过滤网4重“机关”，可以拦截吸附有害菌和甲醛、苯等气体；负离子发生器可以发射离子杀菌；粉尘智能感应系统，可以有效除尘。参考价格：1558元
　　相关链接

　　家装污染的十大症状
　　如果您发现有以下症状，应当注意检查是否是因为装修或者是家居内某些有害物质超标引起的：

　　清晨起床时经常感到憋闷、恶心；家人尤其是小孩子很容易感冒；经常感到嗓子不舒服，有异物感，呼吸不畅；家里小孩子经常咳嗽、打喷嚏，免疫力下降；家人常常皮肤过敏，而且是群发性的；新婚夫妇长时间不孕，而又查不出原因；孕妇在正常怀孕情况下发现胎儿畸形；新搬家或者新装修的房子里，室内植物不易成活，宠物莫名其妙地死掉；新装修的家庭或新买的家具有刺鼻、刺眼的气味，而且超过1年气味仍然不散；家人共有一种疾病，而且离开这个环境后，症状有明显变化和好转。
　　甲醛的主要来源
　　用作室内装饰装修的胶合板、细木工板、中密度纤维和刨花板等人造板材；用人造板制造的家具；含有甲醛成分的其它各类装饰材料，如白乳胶、泡沫塑料、油漆和涂料等；燃烧后会散发甲醛的某些材料，比如香烟及一些有机材料。
  </description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e5%ae%b6%e8%a3%85%e6%b1%a1%e6%9f%93%e5%8d%81%e5%a4%a7%e7%97%87%e7%8a%b6-%e7%a9%ba%e6%b0%94%e5%87%80%e5%8c%96%e5%99%a8%e5%af%bc%e8%b4%ad</link>
			</item>
	<item>
		<title>回国了，周日中午一点多飞，周一晚上约7点到上海。</title>
		<description>


上海至旧金山
CA985
2.4.5.6.7
1750
1155
CA986
2.5.7
1355
1930+1


NW5986
2.4.5.6.7
1750
1155
NW5986
2.5.7
1355
1930+1


UA858
1.2.4.6.7
1235
0700
UA857
2.4.5.6.7
1345
1900+1

 </description>
		<link>http://blog.enabling-tech.com/work/%e5%9b%9e%e5%9b%bd%e4%ba%86%ef%bc%8c%e5%91%a8%e6%97%a5%e4%b8%ad%e5%8d%88%e4%b8%80%e7%82%b9%e5%a4%9a%e9%a3%9e%ef%bc%8c%e5%91%a8%e4%b8%80%e6%99%9a%e4%b8%8a%e7%ba%a67%e7%82%b9%e5%88%b0%e4%b8%8a%e6%b5%b7</link>
			</item>
	<item>
		<title>Software Engineer, Client 客户端软件工程师（2/2）</title>
		<description>
帮朋友招人，公司是世界著名的游戏开发公司:EA,电子艺界
Location: Shanghai,China
Responsibilities:


	Develop and maintain client applications, and online games
	Work with internal product definition and operation team, to develop, integrate, maintain and enhance software applications
	Flexible with working hours to accommodate interaction with a global customer base (different time zones) and during ramp up times

Requirements:


	Self-motivated with strong work ethics
	Solid understanding of software ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/software-engineer-client-%e5%ae%a2%e6%88%b7%e7%ab%af%e8%bd%af%e4%bb%b6%e5%b7%a5%e7%a8%8b%e5%b8%88%ef%bc%8822%ef%bc%89</link>
			</item>
	<item>
		<title>Software Engineer-Online 软件工程师-网络游戏(1/2)</title>
		<description>帮朋友招人，公司是世界著名的游戏开发公司:EA,电子艺界 

Location: Shanghai,China
Responsibilities:


	Online game technical design, implementation and maintenance.
	Work with producers, artists and QA on implementing, maintaining and enhancing online games
	Flexible with working hours to accommodate interaction with a global customer base (different time zones) and during ramp up times

Requirements:


	Self-motivated with strong work ethics
	Solid understanding of software engineering and object oriented ...</description>
		<link>http://blog.enabling-tech.com/work/software-engineer-online-%e8%bd%af%e4%bb%b6%e5%b7%a5%e7%a8%8b%e5%b8%88-%e7%bd%91%e7%bb%9c%e6%b8%b8%e6%88%8f</link>
			</item>
	<item>
		<title>AOP = Proxy Pattern + Method Reflection + Aspect DSL + 自动代码生成</title>
		<description>学如逆水行舟，不进则退。
半年多来，居无常所，没有稳定的上网环境，这次抽空上来一看，又有好多陌生的名词漫天飞舞了。
落伍退化得很厉害。不过，我还能温故而知新，炒炒冷饭，写写基本的内容AOP。怀旧一番。

AOP = Proxy Pattern + Method Reflection + Aspect DSL + 自动代码生成

Declarative Programming &#38; DSL

Aspect Oriented Programming（面向方面编程，简称AOP）是一种Declarative Programming（声明式编程）。
Declarative Programming（声明式编程）是和Imperative Programming（命令式编程）相对的概念。
我们平时使用的编程语言，比如C++、Java、Ruby、Python等，都属于Imperative Programming（命令式编程）。Imperative Programming（命令式编程）的意思是，程序员需要一步步写清楚程序需要如何做什么（How to do What）。
Declarative Programming（声明式编程）的意思是，程序员不需要一步步告诉程序如何做，只需要告诉程序在哪些地方做什么（Where to do What）。比起Imperative Programming（命令式编程）来，Declarative Programming（声明式编程）是在一个更高的层次上编程。Declarative Programming编程语言是更高级的语言。Declarative Programming通常处理一些总结性、总览性的工作，不适合做顺序相关的细节相关的底层工作。
如果说Imperative Programming是拼杀在第一线的基层工作人员，Declarative Programming就是总设计师、规则制定者。
Declarative Programming Language的概念，和Domain Specific Language（领域专用语言，简称DSL）的概念有相通之处。DSL主要是指一些对应专门领域的高层编程语言，和通用编程语言的概念相对。DSL对应的专门领域（Domain）一般比较狭窄，或者对应于某个行业，或者对应于某一类具体应用程序，比如数据库等。
最常见的DSL就是关系数据库的结构化数据查询语言SQL。同时，SQL也是一门Declarative Programming Language。SQL只需要告诉数据库，处理符合一定条件的数据，而不需要自己一步步判断每一条数据是否符合条件。SQL的形式一般是 select … where …，update … where …，delete … where ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/aop-proxy-pattern-method-reflection-aspect-dsl-%e8%87%aa%e5%8a%a8%e4%bb%a3%e7%a0%81%e7%94%9f%e6%88%90</link>
			</item>
	<item>
		<title>纯java 的javascript引擎：rhino 【转】</title>
		<description>
关键字: 企业应用   纯java 的javascript引擎 rhino js引擎 java脚本引擎    




前段时间，在浏览javaeye论坛，看见有人征集如何在java中运行数学表达式。
结果方案五花八门：
1.jakarta commons JEXL.
2.Beanshell
3.Java Math Expression Parser jep
4.parse combinator jparsec
5.jdk 6.0的 script
6.利用SQL
7.自己写语法分析
如果自己写语法分析，没有个2000行估计搞不定。有人用sql来运行数学表达式，比较另类。
不过由于前段时间较深入的学习了一些java的javascript引擎，我给出的方案就是用javascript来计算了。
java中比较著名的js引擎当属mozilla开源的rhino，不过jdk6已经把它收归帐下，成了正规军。



public class MathEval   
	{   
    public static void main(String[] args)   
	    {   
        Context cx = Context.enter();   
	        try  
        {   
	            Scriptable scope = cx.initStandardObjects();   
            String str = "9*(1+2)";   
	            Object result = cx.evaluateString(scope, str, null, 1, null);   
            double res = Context.toNumber(result);   
	            System.out.println(res);   
        }   
	        finally  
        {   
	            Context.exit();   
        }   
	    }   
}  

下面总结一下前段时间学习rhino的心得（给自己的程序添加脚本功能，其实是很酷的）：

一：环境配置及运行js脚本：
在 http://www.mozilla.org/rhino/ 下载rhino：
把js.jar加入系统CLASSPATH中
可以以交互模式调用js解释器：
java org.mozilla.javascript.tools.shell.Main
然后您应该会看到解释器的版本号，后面跟着提示符 js&#62;
用法如下：
比如：有一个js文件：
D:\eclipse-workshop\rhinoExample\src\isPrime.js
内容如下：

js 代码



function isPrime (num)   
	{   
    if (num &#60;= 1) {   
	        print("Please enter a positive integer &#62;= 2.")   
        return false  
	    }   
       
	    var prime = true  
    var sqrRoot = Math.round(Math.sqrt(num))   
	       
    for (var n = 2; prime &#38; n &#60;= sqrRoot; ++n) {   
	        prime = (num % n != 0)   
    }   
	     ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/j2ee/%e7%ba%afjava-%e7%9a%84javascript%e5%bc%95%e6%93%8e%ef%bc%9arhino-%e3%80%90%e8%bd%ac%e3%80%91</link>
			</item>
	<item>
		<title>socket, nio socket，及xml传递object 方法 【转】</title>
		<description>
关键字:   nio socket xml base64    



最近在弄关于socket的东东，现总结如下：1：如何通过socket代理来访问服务端：

String proxyHost = "192.168.204.212";   
	String proxyPort = "1080";   
  
	//通知Java要通过代理进行连接。   
System.getProperties().put("socksProxySet","true");   
	//指定代理所在的机器   
System.getProperties().put("socksProxyHost",proxyHost);   
	//指定代理监听的端口。   
System.getProperties().put("socksProxyPort",proxyPort);    
	  
String host = "134.01.69.80";   
	int port = 12086;   
System.out.println("connetioning:" + host + ":" + port);   
	server = new Socket(host, port);  

二：老socket传递Object对象：

要传递的对象：

public class Employee implements Serializable {    
	  
       private int employeeNumber;    
	       private String employeeName;    
  
	       Employee(int num, String name) {    
          employeeNumber = num;    
	          employeeName= name;    
       }    
	  
        public int getEmployeeNumber() {    
	          return employeeNumber ;    
       }    
	  
       public void setEmployeeNumber(int num) {    
	          employeeNumber = num;    
       }    
	  
       public String getEmployeeName() {    
	          return employeeName ;    
       }    
	  
       public void setEmployeeName(String name) {    
	          employeeName = name;    
       }    
	    }   

client：

public class Client {   
	    public static void main(String[] arg) {   
        try {   
	            Employee joe = new Employee(150, "Joe");   
            System.out.println("employeeNumber= " + joe.getEmployeeNumber());   
	            System.out.println("employeeName= " + joe.getEmployeeName());   
            Socket socketConnection = new Socket("127.0.0.1", 11111);   
	            ObjectOutputStream clientOutputStream = new ObjectOutputStream(   
                    socketConnection.getOutputStream());   
	            ObjectInputStream clientInputStream = new ObjectInputStream(   
                    socketConnection.getInputStream());   
	            clientOutputStream.writeObject(joe);   
            joe = (Employee) clientInputStream.readObject();   
	            System.out.println("employeeNumber= " + joe.getEmployeeNumber());   
            System.out.println("employeeName= " + joe.getEmployeeName()); ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/distributedsystem/socket-nio-socket%ef%bc%8c%e5%8f%8axml%e4%bc%a0%e9%80%92object-%e6%96%b9%e6%b3%95</link>
			</item>
	<item>
		<title>nio socket 及其开源框架MINA学习总结(二) [转]</title>
		<description>
关键字:   nio socket MINA    




3：Socket网络框架 MINA
MINA是一个网络应用框架，在不牺牲性能和可扩展性的前提下用于解决如下问题：
1：快速开发自己的英勇。
2：高可维护性，高可复用性：网络I/O编码，消息的编/解码，业务逻辑互相分离。
3：相对容易的进行单元测试。

3.1 IoFilters：
IoFilter为MINA的功能扩展提供了接口。它拦截所有的IO事件进行事件的预处理和后处理(AOP)。我们可以把它想象成
Servlet的filters。
IoFilter能够实现以下几种目的：
事件日志
性能检测
数据转换(e.g. SSL support)，codec
防火墙…等等 

3.2 codec: ProtocolCodecFactory
MINA提供了方便的Protocol支持。如上说讲，codec在IoFilters中设置。
通过它的Encoder和Decoder，可以方便的扩展并支持各种基于Socket的网络协议，比如HTTP服务器、FTP服务器、Telnet服务器等等。

要实现自己的编码/解码器(codec)只需要实现interface: ProtocolCodecFactory即可.
在MINA 1.0版本，MINA已经实现了几个常用的(codec factory):

DemuxingProtocolCodecFactory,
NettyCodecFactory,
ObjectSerializationCodecFactory,
TextLineCodecFactory
 
其中：
TextLineCodecFactory:
 A ProtocolCodecFactory that performs encoding and decoding between a text line data and a Java
 string object. This codec is useful especially when you work with a text-based protocols such as SMTP and IMAP.

ObjectSerializationCodecFactory:
A ProtocolCodecFactory that serializes ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/distributedsystem/nio-socket-%e5%8f%8a%e5%85%b6%e5%bc%80%e6%ba%90%e6%a1%86%e6%9e%b6mina%e5%ad%a6%e4%b9%a0%e6%80%bb%e7%bb%93%e4%ba%8c-%e8%bd%ac</link>
			</item>
	<item>
		<title>nio socket 及其开源框架MINA学习总结(一) [转]</title>
		<description>
关键字:   nio socket MINA    



最近花了点时间研究了一下nio，及其开源框架MINA，现把心得总结如下：1：传统socket:阻塞式通信

每建立一个Socket连接时，同时创建一个新线程对该Socket进行单独通信（采用阻塞的方式通信）。这种方式具有很高的响应速度，并且控制起来也很简单，在连接数较少的时候非常有效，但是如果对每一个连接都产生一个线程的无疑是对系统资源的一种浪费，如果连接数较多将会出现资源不足的情况。

example:
server code:
java 代码


public class MultiUserServer extends Thread {   
	    private Socket client;   
       
	    public MultiUserServer(Socket c) {   
        this.client = c;   
	    }   
  
	    public void run() {   
        try {   
	            BufferedReader in = new BufferedReader(new InputStreamReader(client   
                    .getInputStream()));   
	            PrintWriter out = new PrintWriter(client.getOutputStream());   
            //  Mutil User but can't parallel   
	            while (true) {   
                String str = in.readLine();   
	                System.out.println(str);   
                SocketLog.debug("receive message: " + str);   
	                out.println("has receive....");   
                out.flush();   
	                if (str.equals("end"))   
                    break;   
	            }   
            client.close();   
	        } catch (IOException ex) {   
        }    
	    }   
  
	    public static void main(String[] args) throws IOException {   
        int port = 5678;   
	        if (args.length &#62; 0)   
            port = Integer.parseInt(args[0]);   
	        ServerSocket server = new ServerSocket(port);   
        SocketLog.debug("the server socket application is created!");   
	        while (true) {   
            //  transfer location change Single User or Multi User   
	            MultiUserServer mu = new MultiUserServer(server.accept());   
            mu.start();   
	        }   
    }   
	}  

client code：
java 代码


public class Client {   
	  
    static Socket server;   
	  
    public static void main(String[] args) throws Exception {   
	           
        //set socket proxy. ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/distributedsystem/nio-socket-%e5%8f%8a%e5%85%b6%e5%bc%80%e6%ba%90%e6%a1%86%e6%9e%b6mina%e5%ad%a6%e4%b9%a0%e6%80%bb%e7%bb%93%e4%b8%80-%e8%bd%ac</link>
			</item>
	<item>
		<title>Tomcat 6.0新特性[转]</title>
		<description>目前的Tomcat版本中处理用户请求都还是采用一个请求一个线程和线程池的方式，从某种程度上讲，是一个IO阻塞模式，而这种模式对于并发响应比较少的时候还很适用，比如并发数在100个左右，但对于并发数超过1000个时就有点吃不消了，毕竟不可能创建1000个线程吧？！(不过Tomcat的JK貌似采用了异步IO模式，它是用C语言编写的）

值得庆幸的是，Tomcat 6.0会解决这个问题。因为新版本的Tomcat采用了非阻塞模式，即使用了JDK 1.4 的NIO模块。虽然Tomcat 6.0还没有正式发布，具体情况还不清楚，但这一个特性是板上钉钉的，而且从SVN上获取的Tomcat最新代码中也可以看出这一点。

Java的NIO为Java处理高并发提供了有力的支持，用Java编写高性能的服务器也成为了可能，比如大型在线网络游戏等，以前这块是C/C++的天下，或者使用第三方的Java组件，比如SEDA。

另外，Tomcat 6.0的目录结构也更加简单了，删除了shared和common目录，只有了一个lib目录保存jar包，简单就是好，我很喜欢。

http://tomcat.apache.org/download-60.cgi </description>
		<link>http://blog.enabling-tech.com/enabling-tech/j2ee/tomcat/tomcat-60%e6%96%b0%e7%89%b9%e6%80%a7%e8%bd%ac</link>
			</item>
	<item>
		<title>回环转换 (Loopback ）</title>
		<description>当NAT的私网内部机器想通过公共地址来访问同一台局域网内的机器的时，NAT设备等价于做了两次NAT的事情，在包到达目标机器之前，先将私有地址转换为公网地址，然后再将公网地址转换回私有地址。我们把具有上叙转换功能的NAT设备叫做“回环转换”设备。 </description>
		<link>http://blog.enabling-tech.com/sitemanagement/it-knowledge/hui-huang-zhuan-huan-loopback</link>
			</item>
	<item>
		<title>iptables基础</title>
		<description>iptables基础(不错的文章，转来收藏着)

前言
防火墙在 校园内一直被认为陌晦高深，很少有系管师有勇气进行计划性的实验，基本上这份讲义也可以当成测试报告来阅读，是笔者秉持我不入地狱、谁入地狱的精神，冒着 生命危险，蛮干出来的成果，也藉此抛砖引玉，希望能带动国内能力高于笔者许多的众家高手，一起来进行有利于校园网络的公益研究！
壹、什么是防火墙
防火墙是一套能够在两个或两个以上的网络之间，明显区隔出实体线路联机的软硬件设备组合。被区隔开来的网络，可以透过封包转送技术来相互通讯，透过防火墙的安全管理机制，可以决定哪些数据可以流通，哪些资料无法流通，藉此达到网络安全保护的目的。
防火墙产品可以概略归类为硬件式防火墙和软件式防火墙，但实际上无论是硬件式或软件式防火墙，它们都需要使用硬件来作为联机介接，也需要使用软件来设定安全政策，严格说两者间的差别并不太大。我们只能从使用的硬件与操作系统来加以区分，硬件式防火墙是使用专有的硬件，而软件式防火墙则使用一般的计算机硬件，硬件式防火墙使用专有的操作系统，而软件式防火墙则使用一般的操作系统。
防火墙依照其运作方式来分类，可以区分为封包过滤式防火墙 (Packet Filter) 、应用层网关式防火墙 (Application-Level Gateway，也有人把它称为 Proxy 防火墙)、电路层网关式防火墙 (Circuit-Level Gateway)。其中被广为采用的是封包过滤式防火墙，本文要介绍的 iptables 防火墙就是属于这一种。
封包过滤是最早被实作出来的防火墙技 术，它是在 TCP/IP 四层架构下的 IP 层中运作。封包过滤器的功能主要是检查通过的每一个 IP 数据封包，如果其标头中所含的数据内容符合过 滤条件的设定就进行进一步的处理，主要的处理方式包含：放行（accept）、丢弃（drop）或拒绝（reject）。要进行封包过滤，防火墙必须要能分析通过封包的来源 IP 与目的地 IP，还必须能检查封包类型、来源埠号与目的埠号、封包流向、封包进入防火墙的网卡接口、TCP的联机状态等数据。
防火墙由于种种理由价格一直居高不下，对于贫穷的中小学来讲要采购一台防火墙，简直是不可能的任务，而由于 Linux 的风行，使用 Linux 来充作软件式防火墙，似乎是不错的解决之道，本文拟介绍以 Linux 上最新最强大的 iptables 防火墙软件，建置出适合学校使用的过滤规则，让缺钱的学校能有一套好用的防火墙来看守校园网络的大门。
贰、Linux 防火墙演变简史
Linux 最早出现的防火墙软件称为 ipfw，ipfw 能透过 IP 封包标头的分析，分辨出封包的来源 IP 与目的地 IP、封包类型、来源埠号与目的埠号、封包流向、封包进入防火墙的 网卡界面......等，并藉此分析结果来比对规则进行封包过滤，同时也支持 IP 伪装的功能，利用这个功能可以解决 IP 不足的问题，可惜这支程序 缺乏弹性设计，无法自行建立规则组合（ruleset）作更精简的设定，同时也缺乏网址转译功能，无法应付越来越复杂的网络环境，而逐渐被淘汰。
取 而代之的 ipchains，不但指令语法更容易理解，功能也较 ...</description>
		<link>http://blog.enabling-tech.com/sitemanagement/it-knowledge/iptables%e5%9f%ba%e7%a1%80</link>
			</item>
	<item>
		<title>应届生辞职该不该付违约金？</title>
		<description>案例回放：

  小张是上海某著名高校的应届毕业生，在校园招聘会上他与一家外资企业签订了就业协议。协议上约定了3年的服务期，1年的见习期，以及违约金4万元。同时还约定，双方的权利义务依报到后签订的劳动合同为准。小张毕业后到单位报到，与单位签订了为期4年，并有3个月试用期的劳动合同。

  小张工作了1个月后，发现该单位的管理和经营方面都与自己的想法很有大差距，觉得自己不适合这份工作，于是提出辞职。外资企业拿着就业协议要求小张赔偿违约金，小张说明明后来又签了劳动合同，怎么还以就业协议为准呢？双方争执起来。

  专家解析：

  人力资源管理师王雪峰先生指出，双方争执的焦点在于到底以就业协议还是劳动合同为准。

  《中华人民共和国劳动法》第二条规定，劳动法的适用范围是中国境内的企业、个体经济组织和与之形成劳动关系的劳动者。而劳动合同是劳动者与用人单位确立劳动关系、明确双方权利义务的协议。因此，就业协议中服务期限条款与劳动合同相冲突时，应以劳动合同为准。

  试用期是用人单位对劳动者是否合格进行考核，劳动者对用人单位是否适合自己要求进行了解的期限，试用期包含在劳动合同期限之内。在试用期间，《劳动法》规定劳动者可以随时解除劳动合同，不必考虑违约金的问题。因此外资企业要求小张支付违约金缺乏依据。此外，近两年就业协议版本中都有签订劳动合同后协议失效的规定，这样一来，从根本上杜绝了就业协议与劳动合同的冲突问题。

  对于大家最关心的就业协议问题，有必要给应届毕业生们提个醒。

  首先，重视签订就业协议。就业协议并不是单方面的对学生的约束，同时也保证了毕业生的利益。如果没有就业协议的制约，用人单位同样可以随意撕毁协议，毕业生的就业一样没有保障。所以，就业协议也是保护毕业生顺利走上工作岗位的法律保障。不管是毕业生还是用人单位，在就业协议签订以后，学生报到以前发生违约的，都按照协议承担违约责任。

  其次，就业协议的效力有限。一旦学生报到，用人单位就应该和学生签订劳动合同，这样才能形成法律意义上的劳动关系，此时就适用劳动合同的规定。因此，毕业生到用人单位报到后，就应该积极主动地向用人单位提出签订劳动合同的请求。

  再次，劳动合同比就业协议效力强。虽然上海有高校就业管理规定专门解决就业协议问题，但始终不能代替劳动法对劳动关系的调整。因此当毕业生发现就业协议有违反劳动合同之处时，以法律法规规定以及劳动合同的约定为准。
 
  </description>
		<link>http://blog.enabling-tech.com/work/yin-jie-sheng-ci-zhi-wei-yue-jin</link>
			</item>
	<item>
		<title>毕业生签约后提前辞职 公司收取违约金败诉</title>
		<description>中国法院网讯 用人单位录用应届大学毕业生时，须与学校共同签订三方就业协议，在就业协议中常有相应的违约金条款。毕业生就业后如签订了劳动合同，一旦提前辞职，这笔违约金究竟应不应当支付？小程与比亚迪公司、比亚迪上海公司就为这笔已付的2万余元违约金走上了法庭。日前，上海市第一中级人民法院终审判决支持小程讨回2万余元违约金。

　　小程是华中科技大学的研究生。2004年4月，小程以应届毕业生的身份与比亚迪股份公司及华中科技大学共同签订了毕业研究生就业协议书，约定：比亚迪股份有限公司同意录用小程；小程愿意到比亚迪股份有限公司就业；华中科技大学根据国家有关规定负责将小程列入就业建议计划并予派遣。任何一方不得违约，否则将承担违约责任。

　　同年6月2日，小程被比亚迪股份公司派遣至其子公司上海比亚迪公司工作，后双方签订了为期三年的劳动合同。2005年11月9日，小程提出辞职。在上海比亚迪公司的要求下，小程在离职时支付了违约金等2万元。

　　此后，小程认为，就业协议是自己与比亚迪股份公司签订的，因此，上海比亚迪公司无权按照就业协议的约定收取违约金。为讨回这笔2万余元违约金，小程将比亚迪股份公司和上海比亚迪公司都告上了法庭。比亚迪股份公司和比亚迪上海公司则认为自己收取违约金理由充分，拒绝退还。一审判决支持了小程的诉讼请求。

　　比亚迪股份公司上诉称，小程提前离职违反了就业协议，应当支付相应的违约金。上海比亚迪公司是代自己收取这笔就业协议约定的违约金的，故要求驳回小程的诉讼请求。

　　一中院审理后认为，高校学生在签订正式的劳动合同之前，其参加社会劳动不需缴纳社会保险，不纳入失业登记，不享受失业救济，所以，高校学生不具有劳动法上劳动者的主体身份。因此，劳动部《关于贯彻执行&#60;中华人民共和国劳动法&#62;若干问题的意见》第十二条规定，在校生利用业余时间勤工助学，不视为就业。本案中的毕业研究生就业协议书并非劳动法意义上的劳动合同，而是一般的民事协议，应适用民法通则而非劳动法。

　　就业协议的功能在于确保协议一方当事人按照协议的约定，在符合了就业主体资格的情况下，到对方或者对方指定的地点工作。此等协议因一方履行该义务、与对方或者对方指定的机构订立劳动合同而被劳动合同所替代。综观比亚迪股份公司将小程派遣到上海比亚迪公司工作、由小程与上海比亚迪公司签订正式的劳动合同并实际履行的情况，可以确认小程与比亚迪股份公司之间的协议已经履行完毕。该公司再要求小程依照就业协议的约定支付违约金，缺乏充分的事实依据，法院难以支持。

　　

来源：中国法院网　　
  </description>
		<link>http://blog.enabling-tech.com/work/lao-dong-fa-jiu-ye-xie-yi-wei-yue</link>
			</item>
	<item>
		<title>WordPress 插件——GooglePR</title>
		<description>

这是一个用来在您站点上显示当前页面的 Google PageRank 的插件。
该插件安装很简单。首先下载该插件：googlepr.zip。

然后解压缩到插件目录下，在管理后台中激活该插件。

最后修改您的模版。在您希望显示 Google PageRank 的地方，插入如下代码：
&#60;?php class_exists('GooglePR') ? GooglePR::bar(): ''; ?&#62; </description>
		<link>http://blog.enabling-tech.com/enabling-tech/google-technology-gadget-etc/wordpress-%e6%8f%92%e4%bb%b6%e2%80%94%e2%80%94googlepr</link>
			</item>
	<item>
		<title>安装好coolcode</title>
		<description>
package com.davidflanagan.examples.basics;

/**
* This program prints out all its command-line arguments.
**/
public class Echo {
public static void main(String[] args) {
int i = 0;

// Initialize the loop variable
while(i &#60; args.length) {

// Loop until the end of array
System.out.print(args[i] + " ");

// Print each argument out
i++;

// Increment the loop variable
}
System.out.println();

// Terminate the line
}
} </description>
		<link>http://blog.enabling-tech.com/sitemanagement/it-knowledge/%e5%ae%89%e8%a3%85%e5%a5%bdcoolcode</link>
			</item>
	<item>
		<title>Wordpress 显示摘要信息</title>
		<description>在抓虾里订阅的独立博客中，很多人采用了wordpress，郁闷的是，有些RSS只能看到摘要，无法看到原文，如“点石博客”。原因我知道，点石是一个SEO的社区，这样做是为了避免“内容复制”。这其实是显示摘要信息的原因之一。

为什么要显示摘要信息？

增加用户体验，使用户快速了解文章信息，决定是否阅读，在单位屏幕空间内显示更多的文章，减少用户不断的下拉屏幕的动作；
节省带宽，加快网站访问速度，当然，也节省了搜索引擎spider的带宽付出；
避免搜索引擎认为的“网页复制”问题。
关于第三点，很多博客默认设置为显示全文，并未受到搜索引擎“复制网页”的惩罚。显示摘要为了解决搜索引擎的“复制网页”问题，是一种“精益求精”的行为。我倒认为显示摘要信息重点是基于前面两个吧！

关于“文章列表”页面

内容网站的结构一般是“文章列表—-&#62;文章内容”，对于搜索引擎来说，一个“无序”的“文章列表”对其索引是没有意义的，只有“文章内容”才是有意义的。为什么要说“无序”呢？因为对于一个专题性比较强的“链接集合”，对于用户来说是有“用处”的，这体现了制作网页者的思考和整理过程。诚然，搜索引擎对于某个关键字的SERP也提供了这样的一个“链接集合”，但是它完美吗？它只是“关键字”的集合，一个关键字可以引申很多的关键字，这要人类的“发散性思维”或者“相关联想”加上其本身的知识结构才能做到，机器算法的搜索引擎是帮不到的。这就能搜索引擎为啥要收录那些很多链接的页面，如果它自身有人类的智慧，早就把文章列表全部noindex。

我看到有的文章为了解决“复制网页”问题，他们建议在网页的meta里面加上robots，对这些“列表网页”加上“follow,noindex”，意思是搜索引擎的机器人可以爬行，但不要索引这个网页，可惜百度是不支持这个的，对于中文网页来说，只能弃用这种方式。直接在robots文件里面设置，发现很难。方法就只有一个了，对“文章列表”页采取显示摘要的方式。

Wordpress文章列表页显示摘要信息

网上有很多wordpress显示摘要信息的插件，都不是太好，如“点石博客”就采取了，他的功能主要是截取第一段作为摘要信息，这个有两大缺陷：

第一段并不能完全说明文章的内容概要，当然可以通过写手有意识地写作可以达到，但有些时候会发现特别别扭；
在摘要里面无法显示html格式的东西，如链接和图片；
rss无法全文输出。
其实wordpress本身已经提供了这个功能，可以在选项Optional Excerpt里面填入相关html代码，然后在模板里面修改一下即可。这样就做到了摘要自由撰写，rss全文输出。（不推荐使用more标签，因为它不自由，只能截前面，不能截中间或者最后的文字。）

模板修改代码示例：

要修改的三个文件：

index.php 首页文件以及首页开始的上一页下一页等页面；

archive.php 存档页，如按月份、分类存档等；

search.php 搜索结果页。

上述页面里面遇到

&#60;?php  the_content(__('(more...)')); ?&#62;
改成

&#60;?php if(!is_single()) {
       the_excerpt();
  } else {
       the_content(__('(more...)'));
  } ?&#62;
说明，the_excerpt()表示显示摘要信息，the_content()表示显示全文，the_content(__(’(more…)’))表示启用more标签。 </description>
		<link>http://blog.enabling-tech.com/sitemanagement/it-knowledge/wordpress-%e6%98%be%e7%a4%ba%e6%91%98%e8%a6%81%e4%bf%a1%e6%81%af</link>
			</item>
	<item>
		<title>首页摘要而RSS全文输出解决方案文章发布者</title>
		<description> from: JasonIT 将文 
 说实话，我对于页面的整齐以及博客排版要求很高，常常要为了一篇文章的排版而多过写文章的时间，而且 现在Bloging还有个麻烦，就是Flickr被封我就不能用Flickr图片，但是我却很喜欢…非常喜欢Flickr的服务，以至于现在每次Blog都是博客中出现图片为我站点服务器图片，而连接地址引到Flickr上去。

最近 搬到WordPress平台，渐渐开始适应了，不过发现，因为我很喜欢引用图片来Blog，如果我文章图片较多的时候，会把博客首页页面拉得太长，影响打开速度和页面效果，所以我开始考虑在首页文章显示摘要，通常以2张图片为限：也就是博客内容除了文字以外，只显示2张截图，全文显示放置在文章页面里。要解决这个方案，我找到了编辑器中“More”的功能.
但是WordPress有个问题，一旦使用More,在RSS中 将会输出文章摘要而不是全文内容了。我曾经也承诺过，除了我操作失误，否则Blog内不会出现摘要输出 以及 付费评论这2大博客的毒瘤。为了这个，询问了朋友和查阅Google，最后找到解决办法 一劳永逸的方法，具体办法如下：

1. 首先在文章中 使用More的代码，插入到你需要的位置；
2. 然后，修改WordPress 里面wp-includes文件夹中的post-template.php文件，使用任何代码编辑器打开，在里面找到以下If 代码：

if( preg_match(’/&#60;!–more(.*?)?–&#62;/’, $content, $matches) ){
  $content = explode($matches[0], $content, 2);
  if ( !empty($matches[1]) &#38;&#38; !empty($more_link_text) )
  $more_link_text = strip_tags(wp_kses_no_null(trim($matches[1])));
 }

我们需要修改的就第一句话：

if ( preg_match(’/&#60;!–more(.*?)?–&#62;/’, $content, $matches ) ){

修改为(粗体字部分)：

if ( preg_match(’/&#60;!–more(.*?)?–&#62;/’, $content, $matches)   &#38;&#38; !is_feed() ){ 

如此一来，WordPress的More功能就不会影响到我们RSS的输出了。 </description>
		<link>http://blog.enabling-tech.com/sitemanagement/it-knowledge/%e9%a6%96%e9%a1%b5%e6%91%98%e8%a6%81%e8%80%8crss%e5%85%a8%e6%96%87%e8%be%93%e5%87%ba%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88%e6%96%87%e7%ab%a0%e5%8f%91%e5%b8%83%e8%80%85</link>
			</item>
	<item>
		<title>WordPress首页摘要的方法讨论</title>
		<description>1 不是真正意义上的摘要，是手动截断文章。more标签：在写文章的时候点击More 来截断，当然如果你用的不是所见即所得的界面，在工具条应该可以看到more的。点击就可以了，完成了。优点：当断则断、随心所欲；缺点：每次都要自己砍，有时候砍的自己手都酸了。

2其实wordpress在主页显示摘要还是全文可以自己设定的，这样只要修改一下代码就可以了。通常是在主题文件中的index.php文件中修改，当然很多主题作者会自己单独建个页不会是index.php，这个就要你自己找了。显示摘要的代码为：{?php the_excerpt();?}显示全文的代码为：{?php the_content();?}(因为wordpress中不能直接写代码{}替换为&#60;&#62;)。看到这里相信你也知道怎么修改了。如果全文想改为显示摘要只要替换th_content()为the_excerpt()，就ok了！反之相同。
可能写的不完全，欢迎指正。 </description>
		<link>http://blog.enabling-tech.com/sitemanagement/wordpress%e9%a6%96%e9%a1%b5%e6%91%98%e8%a6%81%e7%9a%84%e6%96%b9%e6%b3%95%e8%ae%a8%e8%ae%ba</link>
			</item>
	<item>
		<title>提交你的网站到主要的英文搜索引擎</title>
		<description>今天DavidYin先来介绍一下，主要的英文搜索引擎。
当你的网站初步架构完成，内容已经有了一部分，至少有一个主页吧，那么就可以去各大英文搜索引擎提交了。不要说没有用处，至少在网站建立之初，还是有用的，一旦搜索引擎收录了，就不需要再提交了。又有人说每个月提交一次，我觉得是没有必要。

好了言归正传，下面就依次介绍这些英文搜索引擎，（这些虽说是英文界面，可是同样也可以收录中文或者其他语种的网页），排名不分先后。 </description>
		<link>http://blog.enabling-tech.com/enabling-tech/search-engine-optimization/%e6%8f%90%e4%ba%a4%e4%bd%a0%e7%9a%84%e7%bd%91%e7%ab%99%e5%88%b0%e4%b8%bb%e8%a6%81%e7%9a%84%e8%8b%b1%e6%96%87%e6%90%9c%e7%b4%a2%e5%bc%95%e6%93%8e</link>
			</item>
	<item>
		<title>创建本地化的google gadget</title>
		<description>http://www.google.com/apis/gadgets/i18n.html#Introduction
 Creating a Localized Gadget
To create a localized gadget, the basic steps are as follows:

	Write the gadget.
	Extract any text that needs to be translated into message bundles.
	Find someone who can help you translate the gadget.
	The translator creates a new message bundle for a particular locale. This could be per language (French), ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/google-technology-gadget-etc/%e5%88%9b%e5%bb%ba%e6%9c%ac%e5%9c%b0%e5%8c%96%e7%9a%84google-gadget</link>
			</item>
	<item>
		<title>Google Gadget</title>
		<description>Dev guide:

http://www.google.com/apis/gadgets/index.html
Where to submit :

http://www.google.com/ig/submit

Help:

http://www.google.com/apis/gadgets/docs-home.html

Google provide a place to host gadget:
http://www.google.com/apis/gadgets/basic.html#Hosting </description>
		<link>http://blog.enabling-tech.com/enabling-tech/google-technology-gadget-etc/google-gadget</link>
			</item>
	<item>
		<title>SortUtil：</title>
		<description>package org.rut.util.algorithm;

import org.rut.util.algorithm.support.BubbleSort;
import org.rut.util.algorithm.support.HeapSort;
import org.rut.util.algorithm.support.ImprovedMergeSort;
import org.rut.util.algorithm.support.ImprovedQuickSort;
import org.rut.util.algorithm.support.InsertSort;
import org.rut.util.algorithm.support.MergeSort;
import org.rut.util.algorithm.support.QuickSort;
import org.rut.util.algorithm.support.SelectionSort;
import org.rut.util.algorithm.support.ShellSort;

/**
 * @author treeroot
 * @since 2006-2-2
 * @version 1.0
 */
public class SortUtil {
    public final static int INSERT = 1;
    public final static int BUBBLE = 2;
    public final static int SELECTION = 3;
    public final static int SHELL = 4;
    public final ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/java/sortutil%ef%bc%9a</link>
			</item>
	<item>
		<title>堆排序：</title>
		<description>package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

/**
 * @author treeroot
 * @since 2006-2-2
 * @version 1.0
 */
public class HeapSort implements SortUtil.Sort{

    /* (non-Javadoc)
     * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
     */
    public void sort(int[] data) {
        MaxHeap h=new MaxHeap();
        h.init(data);
        for(int i=0;i&#60;data.length;i++)
            h.remove();
        System.arraycopy(h.queue,1,data,0,data.length);
    }

     private static class MaxHeap{        
       
        void init(int[] data){
            this.queue=new int[data.length+1];
            for(int i=0;i&#60;data.length;i++){
                queue[++size]=data[i];
                fixUp(size);
            }
        }
        
        private int ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/java/%e5%a0%86%e6%8e%92%e5%ba%8f%ef%bc%9a</link>
			</item>
	<item>
		<title>归并排序：</title>
		<description>package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

/**
 * @author treeroot
 * @since 2006-2-2
 * @version 1.0
 */
public class MergeSort implements SortUtil.Sort{

    /* (non-Javadoc)
     * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
     */
    public void sort(int[] data) {
        int[] temp=new int[data.length];
        mergeSort(data,temp,0,data.length-1);
    }
   
    private void mergeSort(int[] data,int[] temp,int l,int r){
        int mid=(l+r)/2;
        if(l==r) return ;
        mergeSort(data,temp,l,mid);
        mergeSort(data,temp,mid+1,r);
        for(int i=l;i&#60;=r;i++){
            temp[i]=data[i];
        }
        int i1=l;
        int ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/java/%e5%bd%92%e5%b9%b6%e6%8e%92%e5%ba%8f%ef%bc%9a</link>
			</item>
	<item>
		<title>快速排序：</title>
		<description>package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

/**
 * @author treeroot
 * @since 2006-2-2
 * @version 1.0
 */
public class QuickSort implements SortUtil.Sort{

    /* (non-Javadoc)
     * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
     */
    public void sort(int[] data) {
        quickSort(data,0,data.length-1);       
    }
    private void quickSort(int[] data,int i,int j){
        int pivotIndex=(i+j)/2;
        //swap
        SortUtil.swap(data,pivotIndex,j);
       
        int k=partition(data,i-1,j,data[j]);
        SortUtil.swap(data,k,j);
        if((k-i)&#62;1) quickSort(data,i,k-1);
        if((j-k)&#62;1) quickSort(data,k+1,j);
       
    }
    /**
     * @param data
     * @param ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/java/%e5%bf%ab%e9%80%9f%e6%8e%92%e5%ba%8f%ef%bc%9a</link>
			</item>
	<item>
		<title>用Java实现几种常见的排序算法</title>
		<description>用Java语言实现的各种排序，包括插入排序、冒泡排序、选择排序、Shell排序、快速排序、归并排序、堆排序、SortUtil等。

插入排序：

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;
/**
 * @author treeroot
 * @since 2006-2-2
 * @version 1.0
 */
public class InsertSort implements SortUtil.Sort{

    /* (non-Javadoc)
     * @see org.rut.util.algorithm.SortUtil.Sort#sort(int[])
     */
    public void sort(int[] data) {
        int temp;
        for(int i=1;i&#60;data.length;i++){
            for(int j=i;(j&#62;0)&#38;&#38;(data[j]&#60;data[j-1]);j--){
                SortUtil.swap(data,j,j-1);
            }
        }       
    }

}
冒泡排序：

package org.rut.util.algorithm.support;

import org.rut.util.algorithm.SortUtil;

/**
 * @author treeroot
 * @since 2006-2-2
 * @version 1.0
 */
public class BubbleSort implements SortUtil.Sort{

    /* (non-Javadoc)
     * @see ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e7%94%a8java%e5%ae%9e%e7%8e%b0%e5%87%a0%e7%a7%8d%e5%b8%b8%e8%a7%81%e7%9a%84%e6%8e%92%e5%ba%8f%e7%ae%97%e6%b3%95</link>
			</item>
	<item>
		<title>/* 冒泡排序算法 */</title>
		<description>public class Test
{
    public static void main(String args[])
    {
        int[] m =
        { 2, 8, 43, 3, 33, 1, 35, 34, 6, 9 };
        int[] n = sort(m);
        for (int i = 0; i &#60; m.length; i++)
        {
            System.out.println(n[i] + "\n");
        }

    }

    /* 冒泡排序算法 */
    public static int[] sort(int[] ...</description>
		<link>http://blog.enabling-tech.com/enabling-tech/%e5%86%92%e6%b3%a1%e6%8e%92%e5%ba%8f%e7%ae%97%e6%b3%95</link>
			</item>
	<item>
		<title>J2EE项目危机</title>
		<description>避免这10项J2EE危机来确保你的企业JAVA项目成功
摘要

在你着手企业级JAVA 项目开发时，你需要像耍杂技掌控手中的球一样来处理一些问题：与工具商之间的关系，漫长的工程——不论是设计还是开发，还是保持健壮性。每一项都会带来固有的危险，一些是明显的，然而另外一些却不是。但所有这些危机均可避免。本文作者分析了10项危机企业级JAVA项目的最大的危险，并大致指出了避免它们的办法。（4，500字——此处是指英文字数）

By Humphrey Sheil

作者：Humphrey Sheil
原文出处：http://java.sun.com/developer/technicalArticles/J2EE/projectdangers/
翻译：gooing 2005-01-18
http://blog.csdn.net/gooing/
感谢金山词霸和薛叉叉，请指正!
在我作为开发者、高级开发者、架构师的经历中，我遇到过好的、差的甚至是丑陋的企业级JAVA项目。当我问自己，是什么使一个项目成功而使另外的失败，我发现很难得到一个完美的答案，就好像很难用成功来定义所有的软件项目。J2EE项目也不例外。因此，项目被分为不同级别的成功或失败。在这篇文章里，我主要想为您——读者朋友——揭示影响企业级JAVA项目的最大的10项危险。

一些危险只是简单的延迟项目进度，一些却是错误的征兆，而还有一些使项目彻底没有成功的希望。尽管如此，如果具有良好的准备，征程开始前相关的知识和熟悉地形的向导，所有的都可避免。

这篇文章结构简单，我会按以下方式来揭示各种危机：

危机的名称
项目阶段（Project phase）：危机所出现的项目阶段
所牵连的项目阶段（Project phase(s) affected）：大多情况下，这些危机对随后的“项目阶段”有一种顺带（knock-on）的影响
解决：避免危机的方式以及如何最小化它们的影响
注释：有关该危机我想透露的观点，但不适合以前的分类
如上所注，我们将在企业级JAVA项目背景和它的各个重要阶段中检查每一项危险。这些项目阶段包括：

供应商选择：在你启动J2EE工程之前，挑选你的最佳工具组合的过程——不论是应用服务器还是咖啡品牌
设计：不论是严格的瀑布模型还是"code it and see"（试翻译为：编码和运行查看）方式，我对设计都有这样一个观点：我做了充分的设计，因此我可以轻松的进入开发阶段。当我确切知道我在建造什么和如何建造时，我认为我的设计阶段完成。另外，在进入开发阶段之前，我使用设计模板来保证我对我自己问了所有正确的问题并且有了建议的解决方法。然而，我在该阶段同样也不害怕写代码；有时，这是回答问题的唯一方式，执行和模块化（ performance or modularity）。
开发：这个阶段早期有大量工作要做。选择好的工具加上一个良好的设计并不总是意味着开发阶段会非常顺利，但的确会很有用。
稳定性/负荷测试：在这个阶段，系统架构师和项目管理员将关注系统健壮性和构建质量，如确保系统的关键统计——并发用户数，失败的情境等。然而，直到这一阶段，代码质量和运行亦不应被忽略。事实上，你不能留一些差的或慢的代码到健壮性阶段来改。
存在阶段[live]：这并不是真正的项目阶段，it's a date set in stone（想了半天也不知道怎么翻译:-{）这是关于准备的阶段，也是以前的错误的鬼怪出没的地方，不论是差的设计、开发还是错误的（开发工具）卖主的选择。

供应商选择：在你启动J2EE工程之前，挑选你的最佳工具组合的过程——不论是应用服务器还是咖啡品牌
设计：不论是严格的瀑布模型还是"code it and see"（试翻译为：编码和运行查看）方式，我对设计都有这样一个观点：我做了充分的设计，因此我可以轻松的进入开发阶段。当我确切知道我在建造什么和如何建造时，我认为我的设计阶段完成。另外，在进入开发阶段之前，我使用设计模板来保证我对我自己问了所有正确的问题并且有了建议的解决方法。然而，我在该阶段同样也不害怕写代码；有时，这是回答问题的唯一方式，执行和模块化（ performance or modularity）。
开发：这个阶段早期有大量工作要做。选择好的工具加上一个良好的设计并不总是意味着开发阶段会非常顺利，但的确会很有用。
稳定性/负荷测试：在这个阶段，系统架构师和项目管理员将关注系统健壮性和构建质量，如确保系统的关键统计——并发用户数，失败的情境等。然而，直到这一阶段，代码质量和运行亦不应被忽略。事实上，你不能留一些差的或慢的代码到健壮性阶段来改。
存在阶段[live]：这并不是真正的项目阶段，it's a date set in stone（想了半天也不知道怎么翻译:-{）这是关于准备的阶段，也是以前的错误的鬼怪出没的地方，不论是差的设计、开发还是错误的（开发工具）卖主的选择。

供应商选择：在你启动J2EE工程之前，挑选你的最佳工具组合的过程——不论是应用服务器还是咖啡品牌
设计：不论是严格的瀑布模型还是"code it and see"（试翻译为：编码和运行查看）方式，我对设计都有这样一个观点：我做了充分的设计，因此我可以轻松的进入开发阶段。当我确切知道我在建造什么和如何建造时，我认为我的设计阶段完成。另外，在进入开发阶段之前，我使用设计模板来保证我对我自己问了所有正确的问题并且有了建议的解决方法。然而，我在该阶段同样也不害怕写代码；有时，这是回答问题的唯一方式，执行和模块化（ performance or modularity）。
开发：这个阶段早期有大量工作要做。选择好的工具加上一个良好的设计并不总是意味着开发阶段会非常顺利，但的确会很有用。
稳定性/负荷测试：在这个阶段，系统架构师和