<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>N.S.thoughts &#187; Java</title>
	<atom:link href="http://nightsailer.com/category/coding/java/feed" rel="self" type="application/rss+xml" />
	<link>http://nightsailer.com</link>
	<description>...silent is golden...</description>
	<lastBuildDate>Wed, 01 Sep 2010 17:01:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>优化IndexModifier失败</title>
		<link>http://nightsailer.com/2007/01/10/22.html</link>
		<comments>http://nightsailer.com/2007/01/10/22.html#comments</comments>
		<pubDate>Tue, 09 Jan 2007 16:39:25 +0000</pubDate>
		<dc:creator>nightsailer</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[lucene]]></category>

		<guid isPermaLink="false">http://nightsailer.chinavisual.com/2007/01/10/22.html</guid>
		<description><![CDATA[之前曾经写了一个FastIndexModifier，直接继承的Lucene的IndexModifier，使用RAMDirectory进行索引，然后flush的时候回写到
FS目录中，之前的索引一直很正常，但今天在对论坛的帖子进行索引中，发现磁盘写入总是失败，没有任何异常抛出，但是没有实际
的数据被写入磁盘，只有一个Segments。写了几个UnitTest，不论如何测试，总是不能成功。很奇怪以前为什么跑得很正常。
最后只能换回IndexModifier，通过调整MaxBufferDocs来增大IndexWriter的RAM的使用。
虽然如此，还是不满意Lucene的IndexModifier的实现，缺乏一些灵活性。明天自己重写一个类吧，其实按说很简单：
创建1个RAMDirectory的IndexWriter，addDocument时对其进行操作，打开一个IndexReader,deleteDocument时使用它对FSDirectory操作，
flush的时候,关闭IndexReader，此时新打开一个IndexWriter用于实际的fs，将RAMDirectory加入到indexs中，回写，关闭,ok。
挺简单的，当初太懒，想少写几行代码，就直接继承了IndexModifier，现在好，被搞晕了，呵呵。
updated：问题找到了,在回写的时候，顺序出现了小小的问题。必须先关闭ramWriter，否则RAMDirectory里面没有数据.代码如下：



public void flushIndexWriter() throws IOException {
        if(ramWriter!=null) {
            logger.info("flush ram indexwriter... ");
            ramWriter.close();
            ramWriter=null;
  [...]]]></description>
			<content:encoded><![CDATA[<p><del datetime="2007-01-18T12:03:52+00:00">之前曾经写了一个FastIndexModifier，直接继承的Lucene的IndexModifier，使用RAMDirectory进行索引，然后flush的时候回写到<br />
FS目录中，之前的索引一直很正常，但今天在对论坛的帖子进行索引中，发现磁盘写入总是失败，没有任何异常抛出，但是没有实际<br />
的数据被写入磁盘，只有一个Segments。写了几个UnitTest，不论如何测试，总是不能成功。很奇怪以前为什么跑得很正常。</del><br />
最后只能换回IndexModifier，通过调整MaxBufferDocs来增大IndexWriter的RAM的使用。<br />
虽然如此，还是不满意Lucene的IndexModifier的实现，缺乏一些灵活性。明天自己重写一个类吧，其实按说很简单：</p>
<p>创建1个RAMDirectory的IndexWriter，addDocument时对其进行操作，打开一个IndexReader,deleteDocument时使用它对FSDirectory操作，<br />
flush的时候,关闭IndexReader，此时新打开一个IndexWriter用于实际的fs，将RAMDirectory加入到indexs中，回写，关闭,ok。</p>
<p>挺简单的，当初太懒，想少写几行代码，就直接继承了IndexModifier，现在好，被搞晕了，呵呵。</p>
<p>updated：问题找到了,在回写的时候，顺序出现了小小的问题。必须先关闭ramWriter，否则RAMDirectory里面没有数据.代码如下：<br />
<span id="more-22"></span></p>
<pre>
<code>
public void flushIndexWriter() throws IOException {
        if(ramWriter!=null) {
            logger.info("flush ram indexwriter... ");
            ramWriter.close();
            ramWriter=null;
            IndexWriter index = new IndexWriter(directory,analyzer,created);
            created=false;
            index.addIndexes(new Directory[] {this.ramDir});
            index.close();
            index=null;
        }
    }
</code>
</pre>
<p>不过最后还是自己重新写了一个IndexModifier.</p>
]]></content:encoded>
			<wfw:commentRss>http://nightsailer.com/2007/01/10/22.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>中文分词技术小结[转自SegWord::BruceSolo]</title>
		<link>http://nightsailer.com/2007/01/06/21.html</link>
		<comments>http://nightsailer.com/2007/01/06/21.html#comments</comments>
		<pubDate>Sat, 06 Jan 2007 15:27:37 +0000</pubDate>
		<dc:creator>nightsailer</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://nightsailer.chinavisual.com/2007/01/06/21.html</guid>
		<description><![CDATA[中文分词技术属于自然语言处理技术范畴，对于一句话，人可以通过自己的知识来明白哪些是词，哪些不是词，但如何让计算机也能理解？其处理过程就是分词算法。
现有的分词算法可分为三大类：基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。
    1、基于字符串匹配的分词方法
这种方法又叫做机械分词方法，它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配，若在词典中找到某个字符串，则匹配成功（识别出一个词）。按照扫描方向的不同，串匹配分词方法可以分为正向匹配和逆向匹配；按照不同长度优先匹配的情况，可以分为最大（最长）匹配和最小（最短）匹配；按照是否与词性标注过程相结合，又可以分为单纯分词方法和分词与标注相结合的一体化方法。常用的几种机械分词方法如下：
    1）正向最大匹配法（由左到右的方向）；
    2）逆向最大匹配法（由右到左的方向）；
    3）最少切分（使每一句中切出的词数最小）。
还可以将上述各种方法相互组合，例如，可以将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。由于汉语单字成词的特点，正向最小匹配和逆向最小匹配一般很少使用。一般说来，逆向匹配的切分精度略高于正向匹配，遇到的歧义现象也较少。统计结果表明，单纯使用正向最大匹配的错误率为1/169，单纯使用逆向最大匹配的错误率为1/245。但这种精度还远远不能满足实际的需要。实际使用的分词系统，都是把机械分词作为一种初分手段，还需通过利用各种其它的语言信息来进一步提高切分的准确率。
一种方法是改进扫描方式，称为特征扫描或标志切分，优先在待分析字符串中识别和切分出一些带有明显特征的词，以这些词作为断点，可将原字符串分为较小的串再来进机械分词，从而减少匹配的错误率。另一种方法是将分词和词类标注结合起来，利用丰富的词类信息对分词决策提供帮助，并且在标注过程中又反过来对分词结果进行检验、调整，从而极大地提高切分的准确率。
对于机械分词方法，可以建立一个一般的模型，在这方面有专业的学术论文，这里不做详细论述。

    2、基于理解的分词方法
这种分词方法是通过让计算机模拟人对句子的理解，达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析，利用句法信息和语义信息来处理歧义现象。它通常包括三个部分：分词子系统、句法语义子系统、总控部分。在总控部分的协调下，分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断，即它模拟了人对句子的理解过程。这种分词方法需要使用大量的语言知识和信息。由于汉语语言知识的笼统、复杂性，难以将各种语言信息组织成机器可直接读取的形式，因此目前基于理解的分词系统还处在试验阶段。
    3、基于统计的分词方法
从形式上看，词是稳定的字的组合，因此在上下文中，相邻的字同时出现的次数越多，就越有可能构成一个词。因此字与字相邻共现的频率或概率能够较好的反映成词的可信度。可以对语料中相邻共现的各个字的组合的频度进行统计，计算它们的互现信息。定义两个字的互现信息，计算两个汉字X、Y的相邻共现概率。互现信息体现了汉字之间结合关系的紧密程度。当紧密程度高于某一个阈值时，便可认为此字组可能构成了一个词。这种方法只需对语料中的字组频度进行统计，不需要切分词典，因而又叫做无词典分词法或统计取词方法。但这种方法也有一定的局限性，会经常抽出一些共现频度高、但并不是词的常用字组，例如“这一”、“之一”、“有的”、“我的”、“许多的”等，并且对常用词的识别精度差，时空开销大。实际应用的统计分词系统都要使用一部基本的分词词典（常用词词典）进行串匹配分词，同时使用统计方法识别一些新的词，即将串频统计和串匹配结合起来，既发挥匹配分词切分速度快、效率高的特点，又利用了无词典分词结合上下文识别生词、自动消除歧义的优点。
到底哪种分词算法的准确度更高，目前并无定论。对于任何一个成熟的分词系统来说，不可能单独依靠某一种算法来实现，都需要综合不同的算法。笔者了解，海量科技的分词算法就采用“复方分词法”，所谓复方，相当于用中药中的复方概念，即用不同的药才综合起来去医治疾病，同样，对于中文词的识别，需要多种算法来处理不同的问题。
]]></description>
			<content:encoded><![CDATA[<p>中文分词技术属于自然语言处理技术范畴，对于一句话，人可以通过自己的知识来明白哪些是词，哪些不是词，但如何让计算机也能理解？其处理过程就是分词算法。</p>
<p>现有的分词算法可分为三大类：基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法。</p>
<p>    1、基于字符串匹配的分词方法<br />
这种方法又叫做机械分词方法，它是按照一定的策略将待分析的汉字串与一个“充分大的”机器词典中的词条进行配，若在词典中找到某个字符串，则匹配成功（识别出一个词）。按照扫描方向的不同，串匹配分词方法可以分为正向匹配和逆向匹配；按照不同长度优先匹配的情况，可以分为最大（最长）匹配和最小（最短）匹配；按照是否与词性标注过程相结合，又可以分为单纯分词方法和分词与标注相结合的一体化方法。常用的几种机械分词方法如下：<br />
    1）正向最大匹配法（由左到右的方向）；<br />
    2）逆向最大匹配法（由右到左的方向）；<br />
    3）最少切分（使每一句中切出的词数最小）。</p>
<p>还可以将上述各种方法相互组合，例如，可以将正向最大匹配方法和逆向最大匹配方法结合起来构成双向匹配法。由于汉语单字成词的特点，正向最小匹配和逆向最小匹配一般很少使用。一般说来，逆向匹配的切分精度略高于正向匹配，遇到的歧义现象也较少。统计结果表明，单纯使用正向最大匹配的错误率为1/169，单纯使用逆向最大匹配的错误率为1/245。但这种精度还远远不能满足实际的需要。实际使用的分词系统，都是把机械分词作为一种初分手段，还需通过利用各种其它的语言信息来进一步提高切分的准确率。</p>
<p>一种方法是改进扫描方式，称为特征扫描或标志切分，优先在待分析字符串中识别和切分出一些带有明显特征的词，以这些词作为断点，可将原字符串分为较小的串再来进机械分词，从而减少匹配的错误率。另一种方法是将分词和词类标注结合起来，利用丰富的词类信息对分词决策提供帮助，并且在标注过程中又反过来对分词结果进行检验、调整，从而极大地提高切分的准确率。</p>
<p>对于机械分词方法，可以建立一个一般的模型，在这方面有专业的学术论文，这里不做详细论述。<br />
<span id="more-21"></span><br />
    2、基于理解的分词方法</p>
<p>这种分词方法是通过让计算机模拟人对句子的理解，达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析，利用句法信息和语义信息来处理歧义现象。它通常包括三个部分：分词子系统、句法语义子系统、总控部分。在总控部分的协调下，分词子系统可以获得有关词、句子等的句法和语义信息来对分词歧义进行判断，即它模拟了人对句子的理解过程。这种分词方法需要使用大量的语言知识和信息。由于汉语语言知识的笼统、复杂性，难以将各种语言信息组织成机器可直接读取的形式，因此目前基于理解的分词系统还处在试验阶段。<br />
    3、基于统计的分词方法</p>
<p>从形式上看，词是稳定的字的组合，因此在上下文中，相邻的字同时出现的次数越多，就越有可能构成一个词。因此字与字相邻共现的频率或概率能够较好的反映成词的可信度。可以对语料中相邻共现的各个字的组合的频度进行统计，计算它们的互现信息。定义两个字的互现信息，计算两个汉字X、Y的相邻共现概率。互现信息体现了汉字之间结合关系的紧密程度。当紧密程度高于某一个阈值时，便可认为此字组可能构成了一个词。这种方法只需对语料中的字组频度进行统计，不需要切分词典，因而又叫做无词典分词法或统计取词方法。但这种方法也有一定的局限性，会经常抽出一些共现频度高、但并不是词的常用字组，例如“这一”、“之一”、“有的”、“我的”、“许多的”等，并且对常用词的识别精度差，时空开销大。实际应用的统计分词系统都要使用一部基本的分词词典（常用词词典）进行串匹配分词，同时使用统计方法识别一些新的词，即将串频统计和串匹配结合起来，既发挥匹配分词切分速度快、效率高的特点，又利用了无词典分词结合上下文识别生词、自动消除歧义的优点。</p>
<p>到底哪种分词算法的准确度更高，目前并无定论。对于任何一个成熟的分词系统来说，不可能单独依靠某一种算法来实现，都需要综合不同的算法。笔者了解，海量科技的分词算法就采用“复方分词法”，所谓复方，相当于用中药中的复方概念，即用不同的药才综合起来去医治疾病，同样，对于中文词的识别，需要多种算法来处理不同的问题。</p>
]]></content:encoded>
			<wfw:commentRss>http://nightsailer.com/2007/01/06/21.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在windows下编译Php-Java-Bridge for php4/apache2</title>
		<link>http://nightsailer.com/2006/08/20/18.html</link>
		<comments>http://nightsailer.com/2006/08/20/18.html#comments</comments>
		<pubDate>Sun, 20 Aug 2006 02:27:49 +0000</pubDate>
		<dc:creator>nightsailer</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://nightsailer.chinavisual.com/2006/08/20/18.html</guid>
		<description><![CDATA[PJB可以实现java+php的无缝整合，所谓鱼翅和熊掌均可兼得。不过，官方的发布的版本中windows版本只有for php 5的，对于我来说，短期内不会迁移到php5上，于是，如何编译就成为一个棘手的问题，以前没有在windows下编译过php4，昨晚摸索了半天终于编译成功了，下面是过程：
 1. download mingw.exe
 (http://prdownloads.sourceforge.net/mingw/MinGW-4.1.0.exe?download) &#8211;
 这是安装程序,运行并安装到默认目录c:\mingw.
 install current/full version of core, compilers, utilities (不需要sources)
 完成后，将c:\mingw\bin加入到windows path路径，检验：
 start->run->cmd
 gcc -v 
 2. download and run msys.exe
 (http://prdownloads.sourceforge.net/mingw/MSYS-1.0.10.exe?download) &#8211;
 install to c:\msys\1.0 directory
 修改 c:\msys\1.0\etc\fstab ,add the following line:
 c:/src	/src
 c:/j2sdk1.4.2_06 /java   {make sure this is the path to your j2sdk} &#8211;
 [...]]]></description>
			<content:encoded><![CDATA[<p>PJB可以实现java+php的无缝整合，所谓鱼翅和熊掌均可兼得。不过，官方的发布的版本中windows版本只有for php 5的，对于我来说，短期内不会迁移到php5上，于是，如何编译就成为一个棘手的问题，以前没有在windows下编译过php4，昨晚摸索了半天终于编译成功了，下面是过程：<br />
 1. download mingw.exe<br />
 (http://prdownloads.sourceforge.net/mingw/MinGW-4.1.0.exe?download) &#8211;<br />
 这是安装程序,运行并安装到默认目录c:\mingw.<br />
 install current/full version of core, compilers, utilities (不需要sources)<br />
 完成后，将c:\mingw\bin加入到windows path路径，检验：<br />
 start->run->cmd<br />
 gcc -v </p>
<p> 2. download and run msys.exe<br />
 (http://prdownloads.sourceforge.net/mingw/MSYS-1.0.10.exe?download) &#8211;<br />
 install to c:\msys\1.0 directory<br />
 修改 c:\msys\1.0\etc\fstab ,add the following line:<br />
 c:/src	/src<br />
 c:/j2sdk1.4.2_06 /java   {make sure this is the path to your j2sdk} &#8211;</p>
<p> 3. download and run msys-dtk<br />
 (http://prdownloads.sourceforge.net/mingw/msysDTK-1.0.1.exe?download)</p>
<p> 4. download the php source (我的为4.3.11 )<br />
 and install to a directory (c:\src\php-4.3.11)</p>
<p> 5. download the win32build.zip<br />
 (http://www.php.net/extra/win32build.zip) and install to a directory<br />
 (c:\src\win32build)<br />
 copy win32build/bin下的文件到c:/mingw/bin，否则下面的php的configure无法运行</p>
<p> 6. 在 win32build/include创建几个空文件，为了避免#include找不到文件:<br />
 /sys/poll.h<br />
 /sys/wait.h</p>
<p> 7. download the javabridge source (tar.bz2 版本);<br />
 解压到php-4.3.11/ext/java 目录下(原来的内容删除)</p>
<p> 8. Update the &#8220;m4_include&#8221; paths in<br />
      ext\java\config.m4 将目录以 &#8220;ext/java/&#8221;开始; e.g.:<br />
       m4_include(ext/java/tests.m4/function_checks.m4)</p>
<p> 9. 打开 msys window (C:\msys\1.0\msys.bat)（或双击桌面上的msys图标)<br />
 cd /src/php-4.3.11<br />
 ./buildconf &#8211;force (会有一些警告，不用理会)<br />
 ./configure</p>
<p> 10. Edit the php source for the following:<br />
 in php-4.3.11/main/win95nt.h 注释下列几行代码 (add // in<br />
 front of each line):<br />
 #include <io.h><br />
 typedef unsigned int uint;<br />
 typedef unsigned long ulong;<br />
 typedef long pid_t;</p>
<p> in php-4.3.11/tsrm/tsrm_virtual_cwd.h 注释下列几行代码  (add<br />
 // in front of each line):<br />
 typedef unsigned short mode_t;</p>
<p> in php-4.3.11/tsrm/tsrm_config.w32.h 注释下列几行代码  (add //<br />
 in front of each line):<br />
 #include <crtdbg.h> </p>
<p> 10. 创建一个build.bat文件到ext/java目录中：<br />
<code><br />
 set BRIDGE_VERSION=3.1.7<br />
 set PHP_JAVA=<br />
 set COND_GCJ=0<br />
 set EXTENSION_NAME=JAVA<br />
 set PHP_JAVA_BIN=javaw<br />
 set EXTENSION_DIR=../..<br />
 set PHP=../..</p>
<p> set SYS_INCLUDE=../../../win32build/include<br />
 set SYS_INCLUDE2=c:/mingw/include<br />
 set SYS_WIN32=../../win32</p>
<p> set PHPTS="../../../php-4.3.11/php4ts/php4ts"<br />
 set GCC=c:/mingw/bin/mingw32-gcc.exe<br />
 sed "s*@PHP_JAVA@*%PHP_JAVA%*;s*@COND_GCJ@*%COND_GCJ%*;s*@PHP_JAVA_BIN@*%PHP_JAVA_BIN%*;s*@EXTENSION@*%EXTENSION_NAME%*;s*@BRIDGE_VERSION@*%BRIDGE_VERSION%*" <./init_cfg.c.in >./init_cfg.c<br />
 sed "s*@PHP_JAVA@*%PHP_JAVA%*;s*@COND_GCJ@*%COND_GCJ%*;s*@PHP_JAVA_BIN@*%PHP_JAVA_BIN%*;s*@EXTENSION@*%EXTENSION_NAME%*;s*@BRIDGE_VERSION@*%BRIDGE_VERSION%*" <./init_cfg.h.in >./init_cfg.h<br />
 rm *.o<br />
 %GCC% -w -I%SYS_INCLUDE% -I%SYS_INCLUDE2% -I. -I%SYS_WIN32% -I%PHP% -I%PHP%/main -I%PHP%/Zend -I%PHP%/TSRM  -D"ZEND_DEBUG=0"  -D"TSRM_EXPORTS" -D"LIBZEND_EXPORTS" -D"ZTS" -D"_MBCS"  -DCOMPILE_DL_JAVA -DPHP_WIN32 -DZEND_WIN32 -DCFG_JAVA_SOCKET_INET -D__MINGW__ -DWIN32 -DEXTENSION_DIR=\"%EXTENSION_DIR%\" -c *.c<br />
 dllwrap  --export-all-symbols -k  *.o -L%PHP% -l%PHPTS% -lws2_32 -o php_java_bridge.dll<br />
 </code><br />
 11. 在文件管理器中双击build.bat，开始编译，并生成一个php_java_bridge.dll </p>
<p> 12. copy the php_java.dll 到其它php extensions的目录下&#8230;(in my case c:\apps\php-4.3.11\extensions</p>
<p> 13. Edit and add to php.ini(c:/windows/php.ini):<br />
<code><br />
 ;;start php.ini addendum<br />
 [javabridge]<br />
 extension = php_java.dll</p>
<p> ;; log level between 0 (log off) and 4 (log debug). The default "log<br />
 ;; file" is the standard output. The default level is 2.</p>
<p> java.log_level=3</p>
<p> ;; If you don't have a servlet engine, double-click on JavaBridge.jar<br />
 ;; to start the backend and uncomment the following option.</p>
<p> java.socketname=9267</p>
<p> ;; If you have a servlet engine or an application server, deploy<br />
 ;; JavaBridge.war and re-start the servlet engine or the application<br />
 ;; server. Comment out the "java.socketname" option and uncomment<br />
 ;; the following options.</p>
<p> ;java.hosts="127.0.0.1:8080"<br />
 ;java.servlet=On<br />
</code><br />
 上面是一个简单的配置，用于独立运行，适合测试，具体product环境的部署方式参考pjb的README。 </p>
<p> 14. 重起服务器,运行一个<?phpinfo();?> php 文件，如果看到java extension，就说明成功了。<br />
 15. 剩下的就可以按照pjb的readme文档，修改和使用其运行方式了。<br />
通过PJB，我在CRM中使用Lucene作为一个核心，实现复杂的全文检索和预搜索（避免一些关系数据库无法实现的瓶颈），同时使用了mq实现一些异步事件模型，php负责view，一些复杂的工作交由java<br />
应用完成，这样开发效率达到最高。</p>
]]></content:encoded>
			<wfw:commentRss>http://nightsailer.com/2006/08/20/18.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google发布了GWT</title>
		<link>http://nightsailer.com/2006/05/24/14.html</link>
		<comments>http://nightsailer.com/2006/05/24/14.html#comments</comments>
		<pubDate>Wed, 24 May 2006 02:17:43 +0000</pubDate>
		<dc:creator>nightsailer</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://nightsailer.chinavisual.com/2006/05/24/14.html</guid>
		<description><![CDATA[Google发布了GoogleWebTookit，可以用java编写ajax应用，其内含一个java-javascript的编译器，可以将java类编译为普通的html+javascript，类似Gmail，googlemaps这样。而且，GWT是基于Apache的许可，这意味着可以免费用于你的程序，包括商业应用。在GWT的FAQ中多次强调这点。
以前曾经看见过有类似的，java=〉js的compiler，不过没有像google这样系统，真是诱人。有时间希望能够研究一下，看看如何集成到php+smarty的环境中，估计难度很大。
更新：
已经有人做了类似的工作：
http://angel.hurtado.googlepages.com/tutorialgwt2
]]></description>
			<content:encoded><![CDATA[<p>Google发布了GoogleWebTookit，可以用java编写ajax应用，其内含一个java-javascript的编译器，可以将java类编译为普通的html+javascript，类似Gmail，googlemaps这样。而且，GWT是基于Apache的许可，这意味着可以免费用于你的程序，包括商业应用。在GWT的FAQ中多次强调这点。<br />
以前曾经看见过有类似的，java=〉js的compiler，不过没有像google这样系统，真是诱人。有时间希望能够研究一下，看看如何集成到php+smarty的环境中，估计难度很大。<br />
更新：<br />
已经有人做了类似的工作：</p>
<p>http://angel.hurtado.googlepages.com/tutorialgwt2</p>
]]></content:encoded>
			<wfw:commentRss>http://nightsailer.com/2006/05/24/14.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
