﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-VincentChen‘s Blog-文章分类-杂文</title><link>http://www.blogjava.net/Vencent/category/5790.html</link><description>&lt;font color='orange'&gt;本博客仅为收集所用。在此对原作者表示感谢。&lt;/font&gt;
&lt;div class="custom"&gt;
&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-6256612161572960";
google_ad_width = 728;
google_ad_height = 90;
google_ad_format = "728x90_as";
google_ad_type = "text";
google_ad_channel ="";
google_page_url = document.location;
google_color_border = ["FFDDAA","FFDDAA","FFDDAA","FFDDAA"];
google_color_bg = ["FFDDAA","FFDDAA","FFDDAA","FFDDAA"];
google_color_link = ["FFDDAA","0033FF","00008B","99CC33"];
google_color_url = ["999999","0033FF","00008B","FFCC00"];
google_color_text = ["0033FF","AA9999","0033FF","AA9999"];
//--&gt;&lt;/script&gt;
&lt;script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;/div&gt;</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 03:57:56 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 03:57:56 GMT</pubDate><ttl>60</ttl><item><title>Java VS Ruby</title><link>http://www.blogjava.net/Vencent/articles/58448.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Sun, 16 Jul 2006 11:17:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/58448.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/58448.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/58448.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/58448.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/58448.html</trackback:ping><description><![CDATA[
		<img src="http://www.blogjava.net/images/blogjava_net/vencent/7008/r_Java%20VS%20Ruby.jpg" />
		<br />
		<br />
		<br />小记一下。<br /><img src ="http://www.blogjava.net/Vencent/aggbug/58448.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-07-16 19:17 <a href="http://www.blogjava.net/Vencent/articles/58448.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Win32平台上编译 Apache (2.0.x - 2.2.x) + SSL</title><link>http://www.blogjava.net/Vencent/articles/44792.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Sat, 06 May 2006 11:07:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/44792.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/44792.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/44792.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/44792.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/44792.html</trackback:ping><description><![CDATA[
		<h3>1 介绍</h3>
		<p class="indent">Apache HTTP Server 是一款优秀的开放源码软件，从1996年以来已经被广泛地应用于多种操作系统。据Netcraft.com 2006年3月的统计，目前Internet上68.70%网站用的是Apache。

</p>
		<p class="indent">OpenSSL 是一个稳定的而且功能齐全的开放源码工具包，它实现了安全套接字层 (SSL v2/v3)和传输层层安全 (TLS v1)协议，也是一个强大的通用加密工具库。

</p>
		<p class="indent">不幸的是 Apache HTTP Server 官方提供的安装包目前不包含SSL功能，因为美国政府对“strong crypto redistribution”有意见。但是爱好者们可以自己DIY。

</p>
		<p class="indent">本人从03年起，编译了Apache (2.0.x - 2.2.x)和OpenSSL (0.9.6i - 0.9.8a)几乎每个版本。

</p>
		<h3>2 编译材料清单</h3>
		<h4>2.1 编译OpenSSL所需材料</h4>
		<ul>
				<li>
						<a href="http://www.openssl.org/source" target="_blank">OpenSSL源码</a>
				</li>
				<li>
						<a href="http://www.activestate.com/ActivePerl" target="_blank">Perl for Win32</a>
				</li>
				<li>以下C编译器之一:
    <ul><li>Visual C++ (我用这个)
        </li><li>Borland C
        </li><li>GNU C (Cygwin or MinGW)
    </li></ul></li>
				<li>以下汇编器之一:
    <ul><li>Microsoft MASM (aka "ml")
        </li><li><a href="http://www.kernel.org/pub/software/devel/nasm/binaries/win32" target="_blank">Free Netwide Assembler NASM</a> (我用这个)
    </li></ul></li>
		</ul>
		<h4>2.2 编译Apache所需材料</h4>
		<ul>
				<li>
						<a href="http://www.apache.org/dist/httpd/" target="_blank">Apache源码</a>
				</li>
				<li>
						<a href="http://cm.bell-labs.com/cm/cs/who/bwk" target="_blank">AWK Utility</a> 这个工具的作者Brian Kernighan发明了C语言，还写了几本牛书。
    </li>
				<li>
						<a href="http://unxutils.sourceforge.net/" target="_blank">bison, flex, sed</a>
				</li>
				<li>
						<a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=0BAF2B35-C656-4969-ACE8-E4C0C0716ADB&amp;displaylang=en">MS Platform SDK</a> (可选，如果用VC++ 6.0编译Apache 2.2.0必须)
</li>
		</ul>
		<h4>2.3 环境变量</h4>
		<ul>
				<li>把以下文件的路径放到PATH上: perl.exe, awk.exe, nasmw.exe, bison.exe, flex.exe, sed.exe, nmake.exe, mspdb60.dll。
	</li>
				<li>在INCLUDE和LIB里把MS Platform SDK放到VC 6.0前面。 
</li>
		</ul>
		<h3>3 编译OpenSSL</h3>
		<ul>
				<li>把OpenSSL源码解开到一个目录，比如 c:\openssl
	</li>
				<li>设置Perl
        <pre>    c:\openssl&gt;perl Configure VC-WIN32</pre></li>
				<li>生成Makefiles
        <pre>    c:\openssl&gt;ms\do_nasm</pre></li>
				<li>用VC++编译
        <pre>    nmake -f ms\ntdll.mak</pre></li>
				<li>测试
        <pre>    c:\openssl&gt;cd out32dll<br />    c:\openssl\out32dll&gt;..\ms\test</pre></li>
		</ul>
		<h3>4 编译Apache</h3>
		<ul>
				<li>把Apache源码解开到一个目录，比如 c:\httpd-2.2.0
	</li>
				<li>复制OpenSSL库
        <pre>    c:\httpd-2.2.0&gt;mkdir srclib\openssl<br />    c:\httpd-2.2.0&gt;xcopy/e openssl srclib\openssl</pre></li>
				<li>编译
        <pre>    nmake -f makefile.win SERVERNAME=myDomainName PORT=myPort <br />        INSTDIR=myInstallDir installr</pre></li>
				<li>删除多余文件 (可选)。以下语言文件一般可以删除：*.de *.es *.euc-jp *.euc-kr *.fr *.ja *.jis *.ko *.koi8-r *.pt-br。如果不想调试*.pdb文件也可删除。
</li>
		</ul>
<img src ="http://www.blogjava.net/Vencent/aggbug/44792.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-05-06 19:07 <a href="http://www.blogjava.net/Vencent/articles/44792.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>配置 Apache 2.2.x + Tomcat 5.5.x</title><link>http://www.blogjava.net/Vencent/articles/44791.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Sat, 06 May 2006 11:06:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/44791.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/44791.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/44791.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/44791.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/44791.html</trackback:ping><description><![CDATA[
		<h3>1 Apache端</h3>
		<h4>1.1 编辑APACHE_HOME/conf/httpd.conf</h4>
		<p class="indent">添加以下语句, 把APACHE_HOME改成相应目录.
</p>
		<pre>    LoadModule jk_module modules/mod_jk.so<br />    JkWorkersFile "APACHE_HOME/conf/workers.properties"<br />    JkLogFile "APACHE_HOME/logs/mod_jk.log"<br />    JkMount /*.jsp worker1<br />    JkMount /*/servlet/* worker1<br /></pre>
		<h4>1.2 生成workers.properties配置文件</h4>
		<p class="indent">生成如下配置文件文件,
</p>
		<pre>    worker.list=worker1<br />    worker.worker1.type=ajp13<br />    worker.worker1.host=localhost<br />    worker.worker1.port=8009<br /></pre>
		<h3>2 Tomcat端</h3>
		<h4>2.1 编辑TOMCAT_HOME/conf/server.xml</h4>
		<p class="indent">在Host element下添加相应Context,
</p>
		<pre>    &lt;!-- Test Context --&gt;<br />    &lt;Context path="/test" docBase="APACHE_HOME/htdocs/test" reloadable="true" <br />        crossContext="true"/&gt;<br /></pre>
		<h4>2.2 编辑TOMCAT_HOME/conf/web.xml (可选)</h4>
		<p class="indent">Tomcat 4.1.12之后的版本缺省配置下不能用/servlet/*的方式来调用/WEB-INF/classes路径下的servlet. 4.1.12的RELEASE-NOTES提及以下变化,

<tt></tt></p>
		<p>
				<tt>Starting with Tomcat 4.1.12, the invoker servlet is no
longer available by default in all webapps. Enabling it for all webapps
is possible by editing $CATALINA_HOME/conf/web.xml to uncomment the
"/servlet/*" servlet-mapping definition.
</tt>
		</p>
		<p>
				<tt>Using the invoker servlet in a production environment
is not recommended and is unsupported. More details are available on
the Tomcat FAQ at http://tomcat.apache.org/faq/misc.html#invoker.
</tt>
		</p>
		<p class="indent">其实还需要Tomcat 5.0之后的版本还需要去掉web.xml另一段语句的注释, 蹊跷的是官方文档没提到. 

</p>
		<p class="indent">也许因为无法消灭这个安全漏洞, 黔驴技穷的开发人员只好宣布, "Using /servlet/
to map servlets is evil, absolutely evil". 这个解决方案真是convenient,
absolutely convenient.
</p>
		<p class="indent">简而言之, 用户需要去掉以下段落的注释,
</p>
		<pre>    &lt;servlet&gt;<br />        &lt;servlet-name&gt;invoker&lt;/servlet-name&gt;<br />        &lt;servlet-class&gt;<br />          org.apache.catalina.servlets.InvokerServlet<br />        &lt;/servlet-class&gt;<br />        &lt;init-param&gt;<br />            &lt;param-name&gt;debug&lt;/param-name&gt;<br />            &lt;param-value&gt;0&lt;/param-value&gt;<br />        &lt;/init-param&gt;<br />        &lt;load-on-startup&gt;2&lt;/load-on-startup&gt;<br />    &lt;/servlet&gt;<br /><br />    &lt;servlet-mapping&gt;<br />        &lt;servlet-name&gt;invoker&lt;/servlet-name&gt;<br />        &lt;url-pattern&gt;/servlet/*&lt;/url-pattern&gt;<br />    &lt;/servlet-mapping&gt;<br /></pre>
<img src ="http://www.blogjava.net/Vencent/aggbug/44791.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-05-06 19:06 <a href="http://www.blogjava.net/Vencent/articles/44791.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>配置 Apache 2.2.x + PHP 5.x</title><link>http://www.blogjava.net/Vencent/articles/44789.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Sat, 06 May 2006 11:05:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/44789.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/44789.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/44789.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/44789.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/44789.html</trackback:ping><description><![CDATA[
		<h4>Apache端</h4>
		<p class="indent">打开conf/httpd.conf添加以下语句，记得把PHP_HOME改成相应目录。
</p>
		<pre>    LoadModule php5_module "PHP_HOME/php5apache2.dll"<br />    AddType application/x-httpd-php .php<br />    PHPIniDir "PHP_HOME"<br /></pre>
		<h4>PHP端</h4>
		<ul>
				<li>编辑php.ini中以下变量：doc_root, extension_dir (绝对路径)
	</li>
				<li>如使用MySQL, 去掉以下语句的注释，或添加相应语句,
        <pre>    extension=php_mysql.dll<br />    extension=php_mysqli.dll</pre></li>
				<li>把libmysql.dll拷贝到APACHE_HOME/bin
</li>
		</ul>
<img src ="http://www.blogjava.net/Vencent/aggbug/44789.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-05-06 19:05 <a href="http://www.blogjava.net/Vencent/articles/44789.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>配置 Apache 2.2.x + SSL</title><link>http://www.blogjava.net/Vencent/articles/44790.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Sat, 06 May 2006 11:05:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/44790.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/44790.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/44790.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/44790.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/44790.html</trackback:ping><description><![CDATA[
		<h4>1 基础 (可选)</h4>
		<ul>
				<li>编辑APACHE_HOME/conf/httpd.conf中的以下directives和tags,
    <pre>ServerRoot, ServerAdmin, ServerName, DocumentRoot, <br />&lt;Directory %DocumentRoot%&gt;, DirectoryIndex, ScriptAlias /cgi-bin/, <br />&lt;Directory %cgi-bin%&gt;</pre></li>
				<li>去掉以下语句的注释, 
    <pre>Include conf/extra/httpd-manual.conf</pre></li>
		</ul>
		<h4>2 生成RSA密钥 (private key)</h4>
		<p class="indent">下面两个命令都可以生成密钥,
</p>
		<pre>    openssl genrsa -des3 -out server.key<br />    openssl genrsa -out server.key</pre>
		<p class="indent">-des3选项可以加密生成的密钥, 但是Win32平台不支持加密密钥，启动Apache时会产生以下错误信息, <tt>"SSLPassPhraseDialog builtin is not supported on Win32"</tt></p>
		<h4>3 生成自签署证书 (self-signed certificate)</h4>
		<p class="indent">在OpenSSL源码的"openssl\apps"目录可以找到openssl.cnf (OpenSSL配置文件).
</p>
		<pre>    openssl req -config openssl.cnf -new -x509 -key server.key -out <br />        server.crt -days 365</pre>
		<h4>4 编辑APACHE_HOME/conf/httpd.conf</h4>
		<p class="indent">去掉以下语句的注释, 
</p>
		<pre>   Include conf/extra/httpd-ssl.conf</pre>
		<h4>5 编辑 conf/extra/httpd-ssl.conf</h4>
		<ul>
				<li>把<tt>SSLMutex</tt>标签的值改为default
	</li>
				<li>编辑以下directives(可选), 
    <pre>DocumentRoot, ServerName, ServerAdmin, ErrorLog, TransferLog, <br />SSLCertificateFile, SSLCertificateKeyFile</pre></li>
		</ul>
<img src ="http://www.blogjava.net/Vencent/aggbug/44790.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-05-06 19:05 <a href="http://www.blogjava.net/Vencent/articles/44790.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>xmlBean资料文档收集(转自david.turing's Blog)</title><link>http://www.blogjava.net/Vencent/articles/41547.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Mon, 17 Apr 2006 17:01:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/41547.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/41547.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/41547.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/41547.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/41547.html</trackback:ping><description><![CDATA[XMLBeans Tools
		<div class="section"><p><a href="http://xmlbeans.webappshosting.com/schemaToolsV103">XMLBeans Schema Tools (XMLBeans Version 1.0.3)</a>
 This site allows XML Schema validation and compilation tools. You can
submit an XML Schema (via file upload or cut and paste) or a set of XML
Schemas (zip file) and you can download the resulting XMLBeans JAR
file. </p><ul><li><a href="http://xmlbeans.webappshosting.com/schemaToolsV103/validate.do">XMLBeans V1.0.3 Schema Validation</a></li><li><a href="http://xmlbeans.webappshosting.com/schemaToolsV103/compile.do">XMLBeans V1.0.3 Schema Compilation</a></li></ul><p><a href="http://xmlbeans.webappshosting.com/schemaToolsV2">XMLBeans Schema Tools (XMLBeans Version 2.0)</a>  Same as above but for XMLBeans V2.0 </p><ul><li><a href="http://xmlbeans.webappshosting.com/schemaToolsV2/validate.do">XMLBeans V2.0 Schema Validation</a></li><li><a href="http://xmlbeans.webappshosting.com/schemaToolsV2/compile.do">XMLBeans V2.0 Schema Compilation</a></li></ul><p>Do you have or know of a tool that works with XMLBeans? Let us know and we will list it here.</p></div><a name="N1003E"></a><a name="XMLBeans+Articles"></a><h2 class="h3">XMLBeans Articles</h2><div class="section"><p><a href="http://dev2dev.bea.com/technologies/xmlbeans/articles/Configuring_XMLBeans.jsp">Configuring XMLBeans</a>, BEA dev2dev, Nov 30 2004<br /><a href="http://www.apache.org/%7Ekkrouse/apachecon/ac2004_XmlBeans_v2.ppt">Apache XMLBeans 2: Accessing the Full Power of XML in Java</a> (ppt), www.apache.com/~kkrouse, Nov 2004<br /><a href="http://www.onjava.com/pub/a/onjava/2004/07/28/XMLBeans.html">XML-Java Data Binding Using XMLBeans</a>, onJava.com, Jul 2004<br /><a href="http://dev2dev.bea.com/technologies/xmlbeans/articles/hanson_xmlbeans_ws.jsp">Using XMLBeans in Web Service Clients and User Interfaces</a>, BEA Dev2Dev, May 2004<br /><a href="http://dev2dev.bea.com/technologies/xmlbeans/articles/XMLBeans_raj.jsp">Leveraging Complex Schema Features in Java the XMLBeans Way</a>, BEA Dev2Dev, May 2004<br /><a href="http://dev2dev.bea.com/technologies/xmlbeans/articles/xmlbeans_andrei.jsp">Strongly Typed XML in Java with XMLBeans</a>, May 2004<br /><a href="http://dev2dev.bea.com/technologies/xmlbeans/articles/ryan_xml.jsp">XML Processing with Java Object Technology</a>, May 2004<br /><a href="http://dev2dev.bea.com/products/wlworkshop81/articles/xmlbeans_dynamic_config.jsp">Using XMLBeans to Implement Dynamic Configuration Files</a>, BEA Dev2Dev, April 2004<br /><a href="http://dev2dev.bea.com/technologies/xmlbeans/articles/conaty_xmlbeans.jsp">XMLBeans as First-Class Data Objects</a>, BEA Dev2Dev, May 2004<br /><a href="http://javaboutique.internet.com/reviews/xml_javabeans/">Converting XML to JavaBeans with XMLBeans</a>, JavaBoutique<br /><a href="http://dev2dev.bea.com/technologies/xmlbeans/articles/traut.jsp">Handling Mixed Content in a Strongly-Typed World</a>, BEA Dev2Dev, Nov 2003<br /><a href="http://davidbau.com/archives/2003/11/14/the_design_of_xmlbeans_part_1.html">The Design of XMLBeans (Part 1)</a>, davidbau.com, Nov 2003<br /><a href="http://davidbau.com/archives/2003/11/19/the_design_of_xmlbeans_part_2.html">The Design of XMLBeans (Part 2)</a>, davidbau.com, Nov 2003<br /><a href="http://davidbau.com/archives/2003/12/18/the_design_of_xmlbeans_part_3.html">The Design of XMLBeans (Part 3)</a>, davidbau.com, Dec 2003<br /><a href="http://www.devx.com/xml/Article/17495">XML Made Easy with XMLBeans</a>, DevX.com, Oct 2003<br /><a href="http://www.sys-con.com/xml/article.cfm?id=614">XML Beans: The Best of Both Worlds</a>, XML Journal, June 2003<br /><a href="http://dev2dev.bea.com/technologies/xmlbeans/articles/Bau.jsp">XML Beans (by David Bau)</a>, BEA Dev2Dev, Mar 2003<br /><a href="http://dev2dev.bea.com/technologies/xmlbeans/articles/DJ_003.jsp">Dear John (Column #3) - An XMLBeans Example: Address Book</a>, BEA Dev2Dev, Feb 2003 </p></div><img src ="http://www.blogjava.net/Vencent/aggbug/41547.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-04-18 01:01 <a href="http://www.blogjava.net/Vencent/articles/41547.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>110个知名Java项目集锦（包括url和描述）</title><link>http://www.blogjava.net/Vencent/articles/41283.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Sat, 15 Apr 2006 15:12:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/41283.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/41283.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/41283.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/41283.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/41283.html</trackback:ping><description><![CDATA[
		<table border="1" cellpadding="0" cellspacing="0">
				<tbody>
						<tr>
								<th>项目名称</th>
								<th colspan="3" rowspan="111"> </th>
								<th>项目描述</th>
						</tr>
						<tr>
								<td>
										<a title="Homepage for ASM" href="http://asm.objectweb.org/" target="_blank">ASM</a>
								</td>
								<td style="font-size: 75%;">Java bytecode manipulation framework</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for AspectWerkz" href="http://aspectwerkz.codehaus.org/" target="_blank">AspectWerkz</a>
								</td>
								<td style="font-size: 75%;">AspectWerkz - Dynamic AOP for Java</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Axis" href="http://ws.apache.org/axis/" target="_blank">Axis</a>
								</td>
								<td style="font-size: 75%;">Axis - an implementation of the SOAP (Simple Object Access Protocol) submission to W3C</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Batik" href="http://xml.apache.org/batik/" target="_blank">Batik</a>
								</td>
								<td style="font-size: 75%;">Batik SVG Toolkit - Toolkit using images in the Scalable Vector Graphics (SVG) format</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for BCEL" href="http://jakarta.apache.org/bcel" target="_blank">BCEL</a>
								</td>
								<td style="font-size: 75%;">Byte Code Engineering Library - Analyze, create and manipulate Java class files</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for BeanUtils" href="http://jakarta.apache.org/commons/beanutils/" target="_blank">BeanUtils</a>
								</td>
								<td style="font-size: 75%;">BeanUtils - Utilities for working with JavaBeans</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Catalina" href="http://jakarta.apache.org/tomcat/" target="_blank">Catalina</a>
								</td>
								<td style="font-size: 75%;">Catalina - Servlet and JSP based web server</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Cayenne" href="http://objectstyle.org/cayenne/" target="_blank">Cayenne</a>
								</td>
								<td style="font-size: 75%;">Professional Object Relational Mapping</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for CGLIB" href="http://cglib.sourceforge.net/" target="_blank">CGLIB</a>
								</td>
								<td style="font-size: 75%;">CGLIB - Dynamic byte code generator</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Chain" href="http://jakarta.apache.org/commons/chain/" target="_blank">Chain</a>
								</td>
								<td style="font-size: 75%;">Chain - Implementation of the GoF "Chain of Responsibility" pattern</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Checkstyle" href="http://checkstyle.sourceforge.net/" target="_blank">Checkstyle</a>
								</td>
								<td style="font-size: 75%;">Checkstyle - Development tool to help writing Java code that adheres to a coding standard</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for CLI" href="http://jakarta.apache.org/commons/cli/" target="_blank">CLI</a>
								</td>
								<td style="font-size: 75%;">Command Line Library - Simple API for working with the command line arguments and options</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Codec" href="http://jakarta.apache.org/commons/codec/" target="_blank">Codec</a>
								</td>
								<td style="font-size: 75%;">Commons Codec - Encoders and decoders like Base64, Hex, phonetic encodings and URLs</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Collections" href="http://jakarta.apache.org/commons/collections/" target="_blank">Collections</a>
								</td>
								<td style="font-size: 75%;">Collections - Filling the holes left in Sun's Collections API</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Configuration" href="http://jakarta.apache.org/commons/configuration/" target="_blank">Configuration</a>
								</td>
								<td style="font-size: 75%;">Commons Configuration - Generic API enabling configuration from a variety of sources</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for DBCP" href="http://jakarta.apache.org/commons/dbcp/" target="_blank">DBCP</a>
								</td>
								<td style="font-size: 75%;">DBCP - Connection pooling implementations</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for DBUtils" href="http://jakarta.apache.org/commons/dbutils/" target="_blank">DBUtils</a>
								</td>
								<td style="font-size: 75%;">DbUtils - Set of classes designed to make working with JDBC easier</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Digester" href="http://jakarta.apache.org/commons/digester/" target="_blank">Digester</a>
								</td>
								<td style="font-size: 75%;">Struts Digester - Configure an XML/Java mapping with actions when patterns are recognized</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Discovery" href="http://jakarta.apache.org/commons/discovery/" target="_blank">Discovery</a>
								</td>
								<td style="font-size: 75%;">Discovery - Discovering, or finding, implementations for pluggable interfaces</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for DNSJava" href="http://www.xbill.org/dnsjava" target="_blank">DNSJava</a>
								</td>
								<td style="font-size: 75%;">DNS in Java - Supporting common record types, queries, zone transfers and dynamic updates</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for doclet" href="http://java.sun.com/j2se/1.5.0/docs/guide/javadoc" target="_blank">doclet</a>
								</td>
								<td style="font-size: 75%;">JavaDoc Doclet - Custom output from the types methods and fields in a source tree.</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Dom4j" href="http://www.dom4j.org/" target="_blank">Dom4j</a>
								</td>
								<td style="font-size: 75%;">DOM4J - XML, XPath and XSLT library</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for DTDParser" href="http://wutka.com/dtdparser.html" target="_blank">DTDParser</a>
								</td>
								<td style="font-size: 75%;">DTDParse DTD Library - You can use this library to parse a DTD</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for EL" href="http://jakarta.apache.org/commons/el/" target="_blank">EL</a>
								</td>
								<td style="font-size: 75%;">EL - The JSP 2.0 Expression Language Interpreter from Apache</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for fastutil" href="http://fastutil.dsi.unimi.it/" target="_blank">fastutil</a>
								</td>
								<td style="font-size: 75%;">FastUtil - Type-specific maps sets and lists with a small memory footprint and fast access</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for FileUpload" href="http://jakarta.apache.org/commons/fileupload/" target="_blank">FileUpload</a>
								</td>
								<td style="font-size: 75%;">HTTP File Upload Library - Add robust, fast file upload capability to your web applications</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for FreeMarker" href="http://freemarker.sourceforge.net/" target="_blank">FreeMarker</a>
								</td>
								<td style="font-size: 75%;">HTML Template Engine</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for GJT" href="http://www.gjt.org/" target="_blank">GJT</a>
								</td>
								<td style="font-size: 75%;">Giant Java Tree - Java library consisting entirely of open source components</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for gnu-regex" href="http://www.cacas.org/java/gnu/regexp" target="_blank">gnu-regex</a>
								</td>
								<td style="font-size: 75%;">GNU Regular Expressions - Implementation of a traditional (non-POSIX) NFA regex engine</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Groovy" href="http://groovy.codehaus.org/" target="_blank">Groovy</a>
								</td>
								<td style="font-size: 75%;">Groovy - Scripting Language</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Hibernate" href="http://www.hibernate.org/" target="_blank">Hibernate</a>
								</td>
								<td style="font-size: 75%;">Hibernate - Relational Persistence For Idiomatic Java</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for HiveMind" href="http://jakarta.apache.org/hivemind/" target="_blank">HiveMind</a>
								</td>
								<td style="font-size: 75%;">HiveMind - A services and configuration microkernel</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for HSQLDB" href="http://hsqldb.sourceforge.net/" target="_blank">HSQLDB</a>
								</td>
								<td style="font-size: 75%;">HSQLDB - The Java SQL relational database</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for HTMLParser" href="http://htmlparser.sourceforge.net/" target="_blank">HTMLParser</a>
								</td>
								<td style="font-size: 75%;">HTML Parser - Java library used to parse HTML</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for HTTPClient" href="http://jakarta.apache.org/commons/httpclient/" target="_blank">HTTPClient</a>
								</td>
								<td style="font-size: 75%;">HTTP Client - Fills holes left by the java.net package, including most recent HTTP standards</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Informa" href="http://informa.sourceforge.net/" target="_blank">Informa</a>
								</td>
								<td style="font-size: 75%;">Informa - News aggregation library</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for IO" href="http://jakarta.apache.org/commons/io/" target="_blank">IO</a>
								</td>
								<td style="font-size: 75%;">Commons-IO - Utility classes, stream implementations, file filters and endian classes for IO</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for iText" href="http://www.lowagie.com/iText/" target="_blank">iText</a>
								</td>
								<td style="font-size: 75%;">iText - Generates PDF on the fly</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for J2EE" href="http://java.sun.com/j2ee/1.4/docs" target="_blank">J2EE</a>
								</td>
								<td style="font-size: 75%;">Java 2 Platform, Enterprise Edition</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for J2SE" href="http://java.sun.com/j2se/1.5.0/docs" target="_blank">J2SE</a>
								</td>
								<td style="font-size: 75%;">Java2 Standard Edition v5</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JAI" href="http://java.sun.com/products/java-media/jai" target="_blank">JAI</a>
								</td>
								<td style="font-size: 75%;">Java Advanced Imaging - Network-enabled, scalable, platform-independent image processing</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Jalopy" href="http://jalopy.sourceforge.net/" target="_blank">Jalopy</a>
								</td>
								<td style="font-size: 75%;">Jalopy Source Formatter - Formats Java source code according to widely configurable rules</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Jasper" href="http://jakarta.apache.org/tomcat/" target="_blank">Jasper</a>
								</td>
								<td style="font-size: 75%;">Jasper - Tomcat JSP engine</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JasperReports" href="http://jasperreports.sourceforge.net/" target="_blank">JasperReports</a>
								</td>
								<td style="font-size: 75%;">JasperReports - Free Java reporting library</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Java3d" href="http://java.sun.com/products/java-media/3D" target="_blank">Java3d</a>
								</td>
								<td style="font-size: 75%;">Java3D - Object-oriented interfaces that support a simple, high-level programming mode</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JavaComm" href="http://java.sun.com/products/javacomm/" target="_blank">JavaComm</a>
								</td>
								<td style="font-size: 75%;">Java Communications - API for technologies such as voice mail, fax and smartcards</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JavaGroups" href="http://www.javagroups.com/" target="_blank">JavaGroups</a>
								</td>
								<td style="font-size: 75%;">JavaGroups - Reliable multicast communication enable processes to send messages to each other</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Jaxen" href="http://jaxen.codehaus.org/" target="_blank">Jaxen</a>
								</td>
								<td style="font-size: 75%;">Jaxen XPath Processor - Object model walker; evaluate XPath expressions in dom4j and JDOM</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JAXME" href="http://ws.apache.org/jaxme/" target="_blank">JAXME</a>
								</td>
								<td style="font-size: 75%;">JaxMe 2 - Open source implementation of JAXB</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JClassLib" href="http://www.ej-technologies.com/products/jclasslib/overview.html" target="_blank">JClassLib</a>
								</td>
								<td style="font-size: 75%;">JClassLib - Library for reading, modifing and writing Java class files and bytecode</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JCommon" href="http://www.jfree.org/jcommon" target="_blank">JCommon</a>
								</td>
								<td style="font-size: 75%;">JCommon - Collection of useful classes used by JFreeChart, JFreeReport and other projects</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JCrontab" href="http://jcrontab.sourceforge.net/" target="_blank">JCrontab</a>
								</td>
								<td style="font-size: 75%;">JCronTab - Scheduler written in Java, provide a fully functional schedules for Java projects</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JDIC" href="https://jdic.dev.java.net/" target="_blank">JDIC</a>
								</td>
								<td style="font-size: 75%;">JDIC - JDesktop Integration Components</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JDNC" href="https://jdnc.dev.java.net/" target="_blank">JDNC</a>
								</td>
								<td style="font-size: 75%;">JDNC - JDesktop Network Components</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JDO" href="http://java.sun.com/products/jdo" target="_blank">JDO</a>
								</td>
								<td style="font-size: 75%;">Java Data Objects - Direct storage of Java domain model instances into a database</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JDOM" href="http://www.jdom.org/" target="_blank">JDOM</a>
								</td>
								<td style="font-size: 75%;">JDOM XML Library - For accessing, manipulating and outputting XML data from Java code.</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JetSpeed" href="http://portals.apache.org/jetspeed-1/" target="_blank">JetSpeed</a>
								</td>
								<td style="font-size: 75%;">JetSpeed - Java Portal Server</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JEXL" href="http://jakarta.apache.org/commons/jexl/" target="_blank">JEXL</a>
								</td>
								<td style="font-size: 75%;">Java Expression Language - is an embedable expression language engine</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JFreeChart" href="http://www.jfree.org/jfreechart" target="_blank">JFreeChart</a>
								</td>
								<td style="font-size: 75%;">JFreeChart - Free library for generating charts, including pie, bar, line and areas charts</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JGroups" href="http://www.jgroups.org/" target="_blank">JGroups</a>
								</td>
								<td style="font-size: 75%;">JGroups - Multicast communication toolkit</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JMeter" href="http://jakarta.apache.org/jmeter/" target="_blank">JMeter</a>
								</td>
								<td style="font-size: 75%;">JMeter - Load testing applcation</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JMF" href="http://java.sun.com/products/java-media/jmf/" target="_blank">JMF</a>
								</td>
								<td style="font-size: 75%;">Java Media Framework - Library for audio, video and other time-based media</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JMock" href="http://jmock.codehaus.org/" target="_blank">JMock</a>
								</td>
								<td style="font-size: 75%;">JMock - Testing library</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JSF" href="http://java.sun.com/j2ee/javaserverfaces" target="_blank">JSF</a>
								</td>
								<td style="font-size: 75%;">JavaServer Faces - Web Framework</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JSword" href="http://www.crosswire.org/jsword" target="_blank">JSword</a>
								</td>
								<td style="font-size: 75%;">JSword - Bible software in Java, compatible with the Sword project for C/C++</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JTidy" href="http://jtidy.sourceforge.net/" target="_blank">JTidy</a>
								</td>
								<td style="font-size: 75%;">JTidy - HTML syntax checker</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JUnit" href="http://www.junit.org/" target="_blank">JUnit</a>
								</td>
								<td style="font-size: 75%;">JUnit - Regression testing framework used by the developer who implements unit tests in Java</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for JXPath" href="http://jakarta.apache.org/commons/jxpath/" target="_blank">JXPath</a>
								</td>
								<td style="font-size: 75%;">JXPath Library - Simple interpreter of an expression language called XPath</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Lang" href="http://jakarta.apache.org/commons/lang/" target="_blank">Lang</a>
								</td>
								<td style="font-size: 75%;">Lang - Utilities including Enums, String manipulation, reflection, serialization and more</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Log4J" href="http://logging.apache.org/log4j/" target="_blank">Log4J</a>
								</td>
								<td style="font-size: 75%;">Log4J - Fast logging API that lets you configure logging at runtime</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Logging" href="http://jakarta.apache.org/commons/logging/" target="_blank">Logging</a>
								</td>
								<td style="font-size: 75%;">Commons Logging - Simple wrapper API around multiple logging APIs</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Lucene" href="http://jakarta.apache.org/lucene/" target="_blank">Lucene</a>
								</td>
								<td style="font-size: 75%;">Lucene - high-performance, full-featured text search engine written entirely in Java</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Math" href="http://jakarta.apache.org/commons/math/" target="_blank">Math</a>
								</td>
								<td style="font-size: 75%;">Math - Library of lightweight, self-contained mathematics and statistics components</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Net" href="http://jakarta.apache.org/commons/net/" target="_blank">Net</a>
								</td>
								<td style="font-size: 75%;">Network Library - Support for Finger, Whois, TFTP, Telnet, FTP, NNTP, etc developed by ORO</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for OJB" href="http://db.apache.org/ojb/" target="_blank">OJB</a>
								</td>
								<td style="font-size: 75%;">OJB - O/R tool that allows transparent persistence</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for OpenJMS" href="http://openjms.sourceforge.net/" target="_blank">OpenJMS</a>
								</td>
								<td style="font-size: 75%;">Open source JMS server</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for ORO" href="http://jakarta.apache.org/oro/" target="_blank">ORO</a>
								</td>
								<td style="font-size: 75%;">ORO - Text processing library</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for OSCache" href="http://www.opensymphony.com/oscache/" target="_blank">OSCache</a>
								</td>
								<td style="font-size: 75%;">OSCache - A high performance J2EE caching framework</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for PJA" href="http://www.eteks.com/pja/en/" target="_blank">PJA</a>
								</td>
								<td style="font-size: 75%;">Pure Java AWT - Toolkit for drawing graphics without any native graphics resources</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for PMD" href="http://pmd.sourceforge.net/" target="_blank">PMD</a>
								</td>
								<td style="font-size: 75%;">PMD - Scans Java source code for potential problems</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for POI" href="http://jakarta.apache.org/poi/" target="_blank">POI</a>
								</td>
								<td style="font-size: 75%;">POI - Java OLE 2 Manipulator</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Pool" href="http://jakarta.apache.org/commons/pool/" target="_blank">Pool</a>
								</td>
								<td style="font-size: 75%;">Commons Pooling - provides an generic, configurable Object-pooling API</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Primitives" href="http://jakarta.apache.org/commons/primitives/" target="_blank">Primitives</a>
								</td>
								<td style="font-size: 75%;">Primitives - Collection of types and utilities optimized for working with Java primitives</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Proxool" href="http://proxool.sourceforge.net/" target="_blank">Proxool</a>
								</td>
								<td style="font-size: 75%;">Java connection pool</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Quartz" href="http://www.opensymphony.com/quartz" target="_blank">Quartz</a>
								</td>
								<td style="font-size: 75%;">Quartz - J2EE open source job scheduler</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Regexp" href="http://jakarta.apache.org/regexp" target="_blank">Regexp</a>
								</td>
								<td style="font-size: 75%;">Jakarta Regular Expressions - Java RegEx library under BSD style license</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Rhino" href="http://www.mozilla.org/rhino" target="_blank">Rhino</a>
								</td>
								<td style="font-size: 75%;">Mozilla JavaScript - open-source implementation of JavaScript written entirely in Java</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Seraph" href="http://opensource.atlassian.com/seraph/" target="_blank">Seraph</a>
								</td>
								<td style="font-size: 75%;">Seraph - Atlassian Security Framework</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for SiteMesh" href="http://www.opensymphony.com/sitemesh" target="_blank">SiteMesh</a>
								</td>
								<td style="font-size: 75%;">A web-page layout and decoration framework</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Slide" href="http://jakarta.apache.org/slide/" target="_blank">Slide</a>
								</td>
								<td style="font-size: 75%;">Slide - Content repository, can serve as a basis for CMS</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for SOAP" href="http://ws.apache.org/soap/" target="_blank">SOAP</a>
								</td>
								<td style="font-size: 75%;">Apache Soap - implementation of the SOAP submission to W3C</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Speedo" href="http://speedo.objectweb.org/" target="_blank">Speedo</a>
								</td>
								<td style="font-size: 75%;">OSS JDO implementation</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Spring" href="http://www.springframework.org/" target="_blank">Spring</a>
								</td>
								<td style="font-size: 75%;">Server Side alternative to J2EE APIs</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Struts" href="http://struts.apache.org/" target="_blank">Struts</a>
								</td>
								<td style="font-size: 75%;">Jakarta Struts - open source framework for building web applications</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Tapestry" href="http://jakarta.apache.org/tapestry/" target="_blank">Tapestry</a>
								</td>
								<td style="font-size: 75%;">Tapestry - Web Framework</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Turbine" href="http://jakarta.apache.org/turbine/" target="_blank">Turbine</a>
								</td>
								<td style="font-size: 75%;">Turbine - Servlet based framework allowing developers to quickly build secure web applications</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for UDDI4J" href="http://uddi4j.sourceforge.net/" target="_blank">UDDI4J</a>
								</td>
								<td style="font-size: 75%;">UDDI4J - Library that provides an API to interact with a UDDI registry</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Validator" href="http://jakarta.apache.org/commons/validator/" target="_blank">Validator</a>
								</td>
								<td style="font-size: 75%;">Validtator - Validate data from user input</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Velocity" href="http://jakarta.apache.org/velocity/" target="_blank">Velocity</a>
								</td>
								<td style="font-size: 75%;">Velocity - Support for clean, quick MVC web development and support for the Struts framework</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Village" href="http://share.whichever.com/village" target="_blank">Village</a>
								</td>
								<td style="font-size: 75%;">Village - API that sits on top of the JDBC to make it easier to interact with a JDBC</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for WebWork 2" href="http://www.opensymphony.com/webwork/" target="_blank">WebWork 2</a>
								</td>
								<td style="font-size: 75%;">Next generation of WebWork</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Xalan" href="http://xml.apache.org/xalan-j/" target="_blank">Xalan</a>
								</td>
								<td style="font-size: 75%;">Xalan - XSLT processor for transforming XML documents into HTML, text, or XML</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for XDoclet" href="http://xdoclet.sourceforge.net/" target="_blank">XDoclet</a>
								</td>
								<td style="font-size: 75%;">XDoclet - Code generation engine</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for Xerces" href="http://xml.apache.org/xerces2-j" target="_blank">Xerces</a>
								</td>
								<td style="font-size: 75%;">Xerces2 - The next generation of high performance, XML parsers in the Apache Xerces family</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for XMLBeans" href="http://xmlbeans.apache.org/" target="_blank">XMLBeans</a>
								</td>
								<td style="font-size: 75%;">XMLBeans - XML-Java binding tool</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for XMLPull" href="http://www.xmlpull.org/" target="_blank">XMLPull</a>
								</td>
								<td style="font-size: 75%;">XMLPull - Defines a simple pull parsing API that does pull XML parsing from J2ME to J2EE</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for XMLRPC" href="http://ws.apache.org/xmlrpc/" target="_blank">XMLRPC</a>
								</td>
								<td style="font-size: 75%;">XML-RPC - Implementation of XML-RPC, using XML over HTTP to implement remote procedure calls</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for XNI" href="http://xml.apache.org/xerces2-j" target="_blank">XNI</a>
								</td>
								<td style="font-size: 75%;">Xerces Native Interface - Framework for streaming a document and constructing generic parsers</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for XOM" href="http://www.cafeconleche.org/XOM/" target="_blank">XOM</a>
								</td>
								<td style="font-size: 75%;">XML Object Model - Tree-based API for processing XML that strives for correctness and simplicity.</td>
						</tr>
						<tr>
								<td>
										<a title="Homepage for XStream" href="http://xstream.codehaus.org/" target="_blank">XStream</a>
								</td>
								<td style="font-size: 75%;">XML serialization</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/Vencent/aggbug/41283.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-04-15 23:12 <a href="http://www.blogjava.net/Vencent/articles/41283.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转贴]有效编写软件的75条建议</title><link>http://www.blogjava.net/Vencent/articles/41265.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Sat, 15 Apr 2006 12:39:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/41265.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/41265.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/41265.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/41265.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/41265.html</trackback:ping><description><![CDATA[ 1. 你们的项目组使用源代码管理工具了么？<br /><p>    应该用。VSS、CVS、PVCS、ClearCase、CCC/Harvest、FireFly都可以。我的选择是VSS。</p><p> 2. 你们的项目组使用缺陷管理系统了么？<br />    应该用。ClearQuest太复杂，我的推荐是BugZilla。 </p><p> 3. 你们的测试组还在用Word写测试用例么？<br />　  不要用Word写测试用例（Test Case）。应该用一个专门的系统，可以是Test Manager，也可以是自己开发一个ASP.NET的小网站。主要目的是Track和Browse。 </p><p> 4. 你们的项目组有没有建立一个门户网站？<br />　
　要有一个门户网站，用来放Contact Info、Baselined Schedule、News等等。推荐Sharepoint Portal
Server 2003来实现，15分钟就搞定。买不起SPS 2003可以用WSS (Windows Sharepoint Service)。 </p><p> 5. 你们的项目组用了你能买到最好的工具么？<br />　　应该用尽量好的工具来工作。比如，应该用VS.NET而不是Notepad来写C#。用Notepad写程序多半只是一种炫耀。但也要考虑到经费，所以说是"你能买到最好的"。 <br /> <br /> 6. 你们的程序员工作在安静的环境里么？<br />　　需要安静环境。这点极端重要，而且要保证每个人的空间大于一定面积。 </p><p> 7. 你们的员工每个人都有一部电话么？需要每人一部电话。而且电话最好是带留言功能的。当然，上这么一套带留言电话系统开销不小。不过至少每人一部电话要有，千万别搞得经常有人站起来喊："某某某电话"。《人件》里面就强烈谴责这种做法。 </p><p> 8. 你们每个人都知道出了问题应该找谁么？<br />　　应该知道。任何一个Feature至少都应该有一个Owner，当然，Owner可以继续Dispatch给其他人。</p><p> 9. 你遇到过有人说"我以为…"么？<br />　　要消灭"我以为"。Never assume anything。 </p><p>10. 你们的项目组中所有的人都坐在一起么？<br />　　需要。我反对Virtual Team，也反对Dev在美国、Test在中国这种开发方式。能坐在一起就最好坐在一起，好处多得不得了。 </p><p>11. 你们的进度表是否反映最新开发进展情况？ <br />　　应该反映。但是，应该用Baseline的方法来管理进度表：维护一份稳定的Schedule，再维护一份最新更改。Baseline的方法也应该用于其它的Spec。Baseline是变更管理里面的一个重要手段。</p><p>12. 你们的工作量是先由每个人自己估算的么？<br />　　应该让每个人自己估算。要从下而上估算工作量，而不是从上往下分派。除非有其他原因，比如政治任务工期固定等。 </p><p>13. 你们的开发人员从项目一开始就加班么？<br />　　不要这样。不要一开始就搞疲劳战。从项目一开始就加班，只能说明项目进度不合理。当然，一些对日软件外包必须天天加班，那属于剥削的范畴。 </p><p>14. 你们的项目计划中Buffer Time是加在每个小任务后面的么？<br />　　不要。Buffer Time加在每个小任务后面，很容易轻易的就被消耗掉。Buffer Time要整段的加在一个Milestone或者checkpoint前面。 </p><p>15. 值得再多花一些时间，从95%做到100%好值得，非常值得。<br />　　尤其当项目后期人困马乏的时候，要坚持。这会给产品带来质的区别。 </p><p>16. 登记新缺陷时，是否写清了重现步骤？<br />　　要。这属于Dev和Test之间的沟通手段。面对面沟通需要，详细填写Repro Steps也需要。 </p><p>17. 写新代码前会把已知缺陷解决么？<br />    要。每个人的缺陷不能超过10个或15个，否则必须先解决老的bug才能继续写新代码。 </p><p>18. 你们对缺陷的轻重缓急有事先的约定么？<br />　　必须有定义。Severity要分1、2、3，约定好：蓝屏和Data Lost算Sev 1，Function Error算Sev 2，界面上的算Sev 3。但这种约定可以根据产品质量现状适当进行调整。</p><p>19. 你们对意见不一的缺陷有三国会议么？<br />    必须要有。要有一个明确的决策过程。这类似于CCB (Change Control Board)的概念。 </p><p>20. 所有的缺陷都是由登记的人最后关闭的么？ <br />　　Bug应该由Opener关闭。Dev不能私自关闭Bug。 </p><p>21. 你们的程序员厌恶修改老的代码么？<br />　　厌恶是正常的。解决方法是组织Code Review，单独留出时间来。XP也是一个方法。 </p><p>22. 你们项目组有Team Morale Activity么？<br />　　每个月都要搞一次，吃饭、唱歌、Outing、打球、开卡丁车等等，一定要有。不要剩这些钱。 </p><p>23. 你们项目组有自己的Logo么？<br />　　要有自己的Logo。至少应该有自己的Codename。 </p><p>24. 你们的员工有印有公司Logo的T-Shirt么？<br />　　要有。能增强归属感。当然，T-Shirt要做的好看一些，最好用80支的棉来做。别没穿几次就破破烂烂的。</p><p>25. 总经理至少每月参加次项目组会议要的。<br />　　要让team member觉得高层关注这个项目。 </p><p>26. 你们是给每个Dev开一个分支么？<br />　　反对。Branch的管理以及Merge的工作量太大，而且容易出错。 </p><p>27. 有人长期不Check-In代码么？<br />　　不可以。对大部分项目来说，最多两三天就应该Check-In。 </p><p>28. 在Check-In代码时都填写注释了么？<br />　　要写的，至少一两句话，比如"解决了Bug No.225（给bug编号）"。如果往高处拔，这也算做"配置审计"的一部分。</p><p>29. 有没有设定每天Check-In的最后期限？<br />　　要的，要明确Check-In Deadline。否则会Build Break。 </p><p>30. 你们能把所有源码一下子编译成安装文件吗？ <br />　　要的。这是每日编译（Daily Build）的基础。而且必须要能够做成自动的。 </p><p>31. 你们的项目组做每日编译么？<br />　　当然要做。有三样东西是软件项目/产品开发必备的：1. bug management; 2. source control; 3. daily build。 </p><p>32. 你们公司有没有积累一个项目风险列表？<br />　　要。Risk Inventory。否则，下个项目开始的时候，又只能拍脑袋分析Risk了。</p><p>33. 设计越简单越好越简单越好。<br />　　设计时候多一句话，将来可能就带来无穷无尽的烦恼。应该从一开始就勇敢的砍。这叫scope management。 </p><p>34.
尽量利用现有的产品、技术、代码千万别什么东西都自己Coding。BizTalk和Sharepoint就是最好的例子，有这两个作为基础，可以把起点
提高很多。或者可以尽量多用现成的Control之类的。或者尽量用XML，而不是自己去Parse一个文本文件；尽量用RegExp，而不是自己从头操
作字符串，等等等等。这就是"软件复用"的体现。 </p><p>35. 你们会隔一段时间就停下来夯实代码么？<br />　　要。最好一个月左右一次。传言去年年初Windows组在Stevb的命令下停过一个月增强安全。Btw，"夯"这个字念"hang"，第一声。 </p><p>36. 你们的项目组每个人都写Daily Report么？<br />　　要写。五分钟就够了，写10句话左右，告诉自己小组的人今天我干了什么。一则为了沟通，二则鞭策自己（要是游手好闲一天，自己都会不好意思写的）。</p><p>37. 你们的项目经理会发出Weekly Report么？<br />　　要。也是为了沟通。内容包括目前进度，可能的风险，质量状况，各种工作的进展等。</p><p>38. 你们项目组是否至少每周全体开会一次？<br />　　要。一定要开会。程序员讨厌开会，但每个礼拜开会时间加起来至少应该有4小时。包括team meeting, spec review meeting, bug triage meeting。千万别大家闷头写code。 </p><p>39. 你们项目组的会议、讨论都有记录么？<br />　　会前发meeting request和agenda，会中有人负责主持和记录，会后有人负责发meeting minutes，这都是effective meeting的要点。而且，每个会议都要形成agreements和action items。</p><p>40. 其他部门知道你们项目组在干什么么？<br />　　要发一些Newsflash给整个大组织。Show your team's value。否则，当你坐在电梯里面，其他部门的人问："你们在干嘛"，你回答"ABC项目"的时候，别人全然不知，那种感觉不太好。 </p><p>41. 通过Email进行所有正式沟通 <br />　　Email的好处是免得抵赖。但也要避免矫枉过正，最好的方法是先用电话和当面说，然后Email来确认。 </p><p>42. 为项目组建立多个Mailing Group <br />　
　如果在AD+Exchange里面，就建Distribution List。比如，我会建ABC Project Core Team，ABC
Project Dev Team，ABC Project All Testers，ABC Project Extended
Team等等。这样发起Email来方便，而且能让该收到email的人都收到、不该收到不被骚扰。 </p><p>43. 每个人都知道哪里可以找到全部的文档么？<br />　　应该每个人都知道。这叫做知识管理（Knowledge Management）。最方便的就是把文档放在一个集中的File Share，更好的方法是用Sharepoint。 </p><p>44. 你做决定、做变化时，告诉大家原因了么？<br />　
　要告诉大家原因。Empower team
member的手段之一是提供足够的information，这是MSF一开篇的几个原则之一。的确如此，tell me why是人之常情，tell
me
why了才能有understanding。中国人做事喜欢搞限制，限制信息，似乎能够看到某一份文件的人就是有身份的人。大错特错。权威、权力，不在于
是不是能access information/data，而在于是不是掌握资源。 </p><p>45. Stay agile and expect change 要这样。<br />　　需求一定会变的，已经写好的代码一定会被要求修改的。做好心理准备，对change不要抗拒，而是expect change。 </p><p>46. 你们有没有专职的软件测试人员？<br />　　要有专职测试。如果人手不够，可以peer test，交换了测试。千万别自己测试自己的。 </p><p>47. 你们的测试有一份总的计划来规定做什么和怎么做么？<br />    这就是Test Plan。要不要做性能测试？要不要做Usability测试？什么时候开始测试性能？测试通过的标准是什么？用什么手段，自动的还是手动的？这些问题需要用Test Plan来回答。</p><p>48. 你是先写Test Case然后再测试的么？<br />　　应该如此。应该先设计再编程、先test case再测试。当然，事情是灵活的。我有时候在做第一遍测试的同时补上test case。至于先test case再开发，我不喜欢，因为不习惯，太麻烦，至于别人推荐，那试试看也无妨。 </p><p>49. 你是否会为各种输入组合创建测试用例？<br />　　不要，不要搞边界条件组合。当心组合爆炸。有很多test case工具能够自动生成各种边界条件的组合--但要想清楚，你是否有时间去运行那么多test case。 </p><p>50. 你们的程序员能看到测试用例么？<br />　　要。让Dev看到Test Case吧。我们都是为了同一个目的走到一起来的：提高质量。</p><p>51. 你们是否随便抓一些人来做易用性测试？ <br />　　要这么做。自己看自己写的程序界面，怎么看都是顺眼的。这叫做审美疲劳--臭的看久了也就不臭了，不方便的永久了也就习惯了。 </p><p>52. 你对自动测试的期望正确么？<br />　　别期望太高。依我看，除了性能测试以外，还是暂时先忘掉"自动测试"吧，忘掉WinRunner和LoadRunner吧。对于国内的软件测试的现状来说，只能"矫枉必须过正"了。 </p><p>53. 你们的性能测试是等所有功能都开发完才做的么？<br />　　不能这样。性能测试不能被归到所谓的"系统测试"阶段。早测早改正，早死早升天。 </p><p>54. 你注意到测试中的杀虫剂效应了么？<br />　　虫子有抗药性，Bug也有。发现的新Bug越来越少是正常的。这时候，最好大家交换一下测试的area，或者用用看其他工具和手法，就又会发现一些新bug了。</p><p>55. 你们项目组中有人能说出产品的当前整体质量情况么？<br />　　要有。当老板问起这个产品目前质量如何，Test Lead/Manager应该负责回答。 </p><p>56. 你们有单元测试么？<br />　　单元测试要有的。不过没有单元测试也不是不可以，我做过没有单元测试的项目，也做成功了--可能是侥幸，可能是大家都是熟手的关系。还是那句话，软件工程是非常实践、非常工程、非常灵活的一套方法，某些方法在某些情况下会比另一些方法好，反之亦然。 </p><p>57. 你们的程序员是写完代码就扔过墙的么？<br />　　大忌。写好一块程序以后，即便不做单元测试，也应该自己先跑一跑。虽然有了专门的测试人员，做开发的人也不可以一点测试都不做。微软还有Test Release Document的说法，程序太烂的话，测试有权踢回去。</p><p>58. 你们的程序中所有的函数都有输入检查么？<br />　　不要。虽然说做输入检查是write secure code的要点，但不要做太多的输入检查，有些内部函数之间的参数传递就不必检查输入了，省点功夫。同样的道理，未必要给所有的函数都写注释。写一部分主要的就够了。</p><p>59. 产品有统一的错误处理机制和报错界面么？<br />　
　要有。最好能有统一的error message，然后每个error message都带一个error
number。这样，用户可以自己根据error number到user manual里面去看看错误的具体描述和可能原因，就像SQL
Server的错误那样。同样，ASP.NET也要有统一的Exception处理。可以参考有关的Application Block。 </p><p>60. 你们有统一的代码书写规范么？<br />　　要有。Code Convention很多，搞一份来发给大家就可以了。当然，要是有FxCop这种工具来检查代码就更好了。 </p><p>61. 你们的每个人都了解项目的商业意义么？<br />　
　要。这是Vision的意思。别把项目只当成工作。有时候要想着自己是在为中国某某行业的信息化作先驱者，或者时不时的告诉team
member，这个项目能够为某某某国家部门每年节省多少多少百万的纳税人的钱，这样就有动力了。平凡的事情也是可以有个崇高的目标的。</p><p>62. 产品各部分的界面和操作习惯一致么？<br />　　要这样。要让用户觉得整个程序好像是一个人写出来的那样。</p><p>63. 有可以作为宣传亮点的Cool Feature么？<br />　　要。这是增强团队凝聚力、信心的。而且，"一俊遮百丑"，有亮点就可以掩盖一些问题。这样，对于客户来说，会感觉产品从质量角度来说还是acceptable的。或者说，cool feature或者说亮点可以作为质量问题的一个事后弥补措施。 </p><p>64. 尽可能缩短产品的启动时间要这样。<br />　　软件启动时间（Start-Up time）是客户对性能好坏的第一印象。</p><p>65. 不要过于注重内在品质而忽视了第一眼的外在印象程序员容易犯这个错误：太看重性能、稳定性、存储效率，但忽视了外在感受。而高层经理、客户正相反。这两方面要兼顾，协调这些是PM的工作。</p><p>66. 你们根据详细产品功能说明书做开发么？<br />　　要这样。要有设计才能开发，这是必须的。设计文档，应该说清楚这个产品会怎么运行，应该采取一些讲故事的方法。设计的时候千万别钻细节，别钻到数据库、代码等具体实现里面去，那些是后面的事情，一步步来不能着急。 </p><p>67. 开始开发和测试之前每个人都仔细审阅功能设计么？<br />　　要做。Function Spec review是用来统一思想的。而且，review过以后形成了一致意见，将来再也没有人可以说"你看，当初我就是反对这么设计的，现在吃苦头了吧" </p><p>68. 所有人都始终想着The Whole Image么？要这样。项目里面每个人虽然都只是在制造一片叶子，但每个人都应该知道自己在制造的那片叶子所在的树是怎么样子的。我反对软件蓝领，反对过分的把软件制造看成流水线、车间。参见第61条。</p><p>69. Dev工作的划分是单纯纵向或横向的么？<br />　　不能单纯的根据功能模块分，或者单纯根据表现层、中间层、数据库层分。我推荐这么做：首先根据功能模块分，然后每个"层"都有一个Owner来Review所有人的设计和代码，保证consistency。 </p><p>70. 你们的程序员写程序设计说明文档么？<br />　　要。不过我听说微软的程序员1999年以前也不写。所以说，写不写也不是绝对的，偷懒有时候也是可以的。参见第56条。</p><p>71. 你在招人面试时让他写一段程序么？<br />　　要的。我最喜欢让人做字符串和链表一类的题目。这种题目有很多循环、判断、指针、递归等，既不偏向过于考算法，也不偏向过于考特定的API。 </p><p>72. 你们有没有技术交流讲座？<br />　　要的。每一两个礼拜搞一次内部的Tech Talk或者Chalk Talk吧。让组员之间分享技术心得，这笔花钱送到外面去培训划算。 </p><p>73. 你们的程序员都能专注于一件事情么？<br />　
　要让程序员专注一件事。例如说，一个部门有两个项目和10个人，一种方法是让10个人同时参加两个项目，每个项目上每个人都花50%时间；另一种方法是
5个人去项目A，5个人去项目B，每个人都100%在某一个项目上。我一定选后面一种。这个道理很多人都懂，但很多领导实践起来就把属下当成可以任意拆分
的资源了。 </p><p>74. 你们的程序员会夸大完成某项工作所需要的时间么？<br />　　会的，这是常见的，尤其会在项目后期夸大做某个change所需要的时间，以次来抵制change。解决的方法是坐下来慢慢磨，磨掉程序员的逆反心理，一起分析，并把估算时间的颗粒度变小。 </p><p>75. 尽量不要用Virtual Heads 最好不要用Virtual Heads。<br />　
　Virtual heads意味着resource is not secure，shared
resource会降低resource的工作效率，容易增加出错的机会，会让一心二用的人没有太多时间去review spec、review
design。一个dedicated的人，要强过两个只能投入50%时间和精力的人。我是吃过亏的：7个part
time的tester，发现的Bug和干的活，加起来还不如两个full-time的。参见第73条。73条是针对程序员的，75条是针对
Resource Manager的。</p><img src ="http://www.blogjava.net/Vencent/aggbug/41265.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-04-15 20:39 <a href="http://www.blogjava.net/Vencent/articles/41265.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>恢复系统栏显示桌面快捷键命令(转自soff@newsmth)</title><link>http://www.blogjava.net/Vencent/articles/34579.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Thu, 09 Mar 2006 17:21:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/34579.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/34579.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/34579.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/34579.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/34579.html</trackback:ping><description><![CDATA[regsvr32 /n /i:U shell32<img src ="http://www.blogjava.net/Vencent/aggbug/34579.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-03-10 01:21 <a href="http://www.blogjava.net/Vencent/articles/34579.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Domain Pollution Resolution 域污染解除</title><link>http://www.blogjava.net/Vencent/articles/32205.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Thu, 23 Feb 2006 13:56:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/32205.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/32205.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/32205.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/32205.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/32205.html</trackback:ping><description><![CDATA[<table class="confluenceTable"><tbody><tr><td class="confluenceTd"><b>主题</b> </td>
<td class="confluenceTd"> Domain Pollution Resolution 域污染解除 </td>
</tr>
<tr>
<td class="confluenceTd"> <b>作者</b> </td>
<td class="confluenceTd"> buaawhl </td>
</tr>
</tbody></table>

<h2>Domain 名词解释</h2>

<p>首先说明一下 Domain 在本文中的意思。</p>

<p>&lt;&lt;Domain Driven Design&gt;&gt; 一书，令 Domain 这个词很火。引起了广泛争论：哪些
Logic 应该放在 Business Service Layer, 哪些应该放在 Domain Object
里面。这类争论纷纷扬扬，最后通常都上升到哲学高度，世界观高度，认知心理学高度。如果不幸发展到极端情况，双方很可能开始相互质疑对方的智商和对世界的
基本理解能力。这个层次的Domain 纷争，不是本文所关心的话题。</p>

<p>我一向认为，设计能够满足如下的条件，就可以称为是一个好的设计：<u>能够使用多态性，代替 Hard-Coded if else switch 等逻辑分支；新需求来的时候，不需要在旧代码里面添加 if else switch等逻辑分支，而只需要加入一个新的 Class；尽量避免 Package, Class 级别的交叉引用。</u></p>

<p>本文所关心的Domain 是一个更高的层次，类似于DSL, Domain Specific Language 里面的Domain的意思。</p>

<p>本文主要讨论如下议题：</p>
<ul><li>HTML是否只应该用来表示结构？</li><li>HTML是否应该包含逻辑？</li><li>HTML是否应该包含服务器端脚本逻辑？比如， JSP, Velocity, Freemarker.</li><li>HTML是否应该包含浏览器端脚本逻辑？比如， Java Script.</li><li>Java 代码中是否应该输出 HTML标签？比如，Taglib, Tapestry Page Component, etc?</li><li>Java 代码中是否应该使用框架特殊的 HTML View Model? 比如， XMLC, Wicket, Echo, etc.</li><li>HTTP
Web Server 本来的设计宗旨是无状态，支持大用户量，多连接。目前的server side的 page flow, web flow,
continuation, 力图使得HTTP Web Server 保持用户的流程状态。这种做法是否应该推荐？</li><li>SQL是一种可读性很好，应用广泛的一种 DSL。如何动态拼装SQL ，一直是一个难以解决的问题。</li><li>是否应该在Java 代码中嵌入SQL?</li><li>是否应该在Java 代码中使用 Criteria API?</li><li>是否应该在SQL Template 中加入动态语言脚本逻辑？比如 iBatis 使用XML if otherwise, OR Bridge 中使用velocity?</li><li>HQL, OQL 在SQL中引入了OO 语言的特性，似乎操作的是对象数据库，而不是关系数据库。这种做法是否应该推荐？</li><li>Hibernate 动态期间篡改用户代码的做法，是否应该推荐？</li><li>JDO静态期间篡改拥护代码的做法，是否应该推荐？</li><li>Dynamic Proxy, CGLib 等动态篡改用户代码的做法，是否应该推荐？</li><li>Reflection 绕开了 Java 的类型检查机制，是否应该推荐？</li><li>Thread Local 是一种隐式契约，相当于绕开了显式契约（方法签名method signature），这种做法是否应该推荐？<br>
这些属于开发模式、代码风格方面的问题，正如所谓 Code Smell的感觉一样，也避免不了主观的成分。所以，下面的陈述并非论断，而只是"在我看来"。</li></ul>


<h2>HTML Template Layer</h2>

<p>HTML应该尽量只用来表示结构，排除所有逻辑。</p>

<p>JSP, Velocity, Freemarker 等服务器端脚本逻辑，属于Java Code或者 Script Code对HTML 的污染。</p>

<p>不仅应该排除JSP, Velocity, Freemarker 等服务器端脚本逻辑，而且应该排除浏览器端脚本逻辑，比如Java Script.</p>

<p>当然，这里不是说，不用 Java Script，而是说，不要把Java Script 放在HTML里面。把Java Script
放在一个单独的.js 文件里面，在HTML中引入，并使用 CSS把HTML Element 和 Java Script Event
Handler 联系起来。</p>

<p>这方面的资料有：</p>

<p>Unobtrusive Javascript<br>
<span class="nobr"><a href="http://www.onlinetools.org/articles/unobtrusivejavascript/" title="Visit page outside Confluence" rel="nofollow">http://www.onlinetools.org/articles/unobtrusivejavascript/<sup><img class="rendericon" src="http://www.javaeye.com/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span><br>
<span class="nobr"><a href="http://www.kryogenix.org/code/browser/aqlists/" title="Visit page outside Confluence" rel="nofollow">http://www.kryogenix.org/code/browser/aqlists/<sup><img class="rendericon" src="http://www.javaeye.com/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span><br>
<span class="nobr"><a href="http://www.bobbyvandersluis.com/articles/goodpractices.php" title="Visit page outside Confluence" rel="nofollow">http://www.bobbyvandersluis.com/articles/goodpractices.php<sup><img class="rendericon" src="http://www.javaeye.com/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></p>

<p>如何排除HTML 中的Server Side Logic 呢？</p>

<p>Ajax!</p>

<p>Ajax fans 一定反应迅速，给出答案。</p>

<p>没错。Ajax 可以做到。Ajax 的主要问题在于使用和掌握难度。</p>

<p>除了Ajax 呢？</p>

<p>有几个选择，XMLC, Jivan, fastm, Wicket, Echo 等。(and Tapestry?)</p>

<p>fastm 是我做的一个模板层，具体内容可以在此下载。<br>
<span class="nobr"><a href="https://fastm.dev.java.net/files/documents/1911/25042/fastm1.0c.zip" title="Visit page outside Confluence" rel="nofollow">https://fastm.dev.java.net/files/documents/1911/25042/fastm1.0c.zip<sup><img class="rendericon" src="http://www.javaeye.com/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></p>

<p>fastm采用 XML Comment 作为文档结构标记。注意，是结构标记，而不是逻辑标记。不含有 for if else。</p>

<p>可见，fastm 并不是毫无污染，只是没有逻辑污染。fastm 只在HTML中添加了自定义的结构标签，也勉强算没有违背 HTML只用来表示结构的原意。</p>

<p>Ajax, XMLC, Jivan 的HTML很干净，而且对HTML 结构的控制能力很强，能够用代码动态控制布局。fastm
也能够动态控制布局。Site mesh, tiles taglib, jsp, velocity, freemarker 等做不到。</p>

<p>fastm 里面的例子中，包括一个分页的例子，和一个动态组装 SQL的例子</p>

<h2>Java Web Layer</h2>

<p>Taglib, Tapestry Page Component, Echo, Wicket 等在Java 代码中输出HTML
标签，这也是一种，而且要求在Java 代码中使用框架特殊的HTML View Model，比如 Table, List, Label,
Formbean 等View Object 。使用了这些框架，Java 代码的编译就需要依赖于这些框架了。</p>

<p>这相当于HTML 标签对Java 代码的污染。</p>

<p>JSP, Velocity, Freemarker 都不存在这种情况。Java 代码只是提供 POJO，然后 HTML 里面的Server Side Script使用这些 POJO．</p>

<p>fastm不支持逻辑，所以这个方面弱一些。 fastm要求Java Code 把if, else 等逻辑分支变成一个Map 结构。由于
Map属于java 的基本类，所以，fastm也不需要在 Java code中使用任何特殊的框架相关的view model 。</p>

<h2>Web Layer - Stateless or Stateful</h2>

<p>与其在服务器端支持 page flow, web flow, continuation，那不如在浏览器端支持状态。这种场合下，我觉得，正是使用 Ajax的最佳场所。</p>

<p>我倾向于这样的设计，服务器端尽量无状态，如果确实需要状态，那么尽量在浏览器段保持状态。</p>

<p>lightweb 是我做的一个Web框架。<br>
<span class="nobr"><a href="https://lightweb.dev.java.net/files/documents/4371/25044/lightweb0.9b.zip" title="Visit page outside Confluence" rel="nofollow">https://lightweb.dev.java.net/files/documents/4371/25044/lightweb0.9b.zip<sup><img class="rendericon" src="http://www.javaeye.com/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></p>

<p>主要的特点是，URL-Centric, 鼓励无状态的Service Oriented 设计。支持三种Service模型，</p>
<ul><li>Action (like WebWork Action),</li></ul>


<ul><li>Controller (like Spring MVC Controller),</li></ul>


<ul><li>Channel (like Struts Action Dispatcher),</li></ul>


<p>lightweb 支持多级模块寻找，使用几条匹配规则，代替庞大的Site Map 配置文件。</p>

<p>lightweb 查找View的时候，不是根据Site Map 文件里面的那种小型状态机的配置（success <del>&gt; showIt.jsp; fail</del>&gt; this page）, 而是直接资源定位。lightweb继承了 fastm的观点，把template 看作资源，而不是一段运行脚本。</p>

<p>Lightweb 设计为IoC友好。在各个环节都暴露出插件接口。程序员可以自己选择 IoC策略。可以采用一般的做法，用一个IoC
container 集中管理，比如，Spring IoC, Pico, Nano等；也可以分散到各子模块，进行管理；也可以分散到每个
Action Validator里面管理。</p>

<h2>ORM Layer</h2>

<p>Hibernate 动态期间篡改用户代码，JDO静态期间篡改用户代码。</p>

<p>令我想起黑客，木马，夹带，偷梁换柱等。这属于语义上的 Pollution。就是说，从原有的Source 看起来，Domain Object并没有那样的行为，运行起来却有那样的行为。</p>

<p>iBatis采用 reflection，确实干净。但是，性能、功能上又不够强大。某些功能的实现，确实需要代码生成。</p>

<p>lightor是我做的一个 ORM框架。</p>

<p><span class="nobr"><a href="https://lightor.dev.java.net/files/documents/4370/25043/lightor0.5a.zip" title="Visit page outside Confluence" rel="nofollow">https://lightor.dev.java.net/files/documents/4370/25043/lightor0.5a.zip<sup><img class="rendericon" src="http://www.javaeye.com/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></p>

<p>lightor也需要代码生成。区别在于， lightor不修改任何代码，只是产生新的 Mapper代码。Domain Object 运行的时候，还是你原来的Domain Object。这就避免了语义的污染。</p>

<p>lightor生成的 Mapper代码，可以编译期类型检查，可以阅读，跟踪，调试。这些生成的代码，也都遵循本文的原则。 Java 代码里面不含有SQL 片断，SQL 都存在于单独的资源文件中。</p>

<p>（另外，不采用CGLib ，也是为了实现的简单）</p>

<p>lightor直接使用 Native SQL。Lightor 的目的不是屏蔽关系数据库，而是恰好相反。lightor 的目的是，帮助程序员更清楚地认识关系数据库，SQL， JDBC。lightor 和JDBC不冲突，可以一起使用。</p>

<p>lightor努力的第一个主要方向就是效率。大数据量查询和处理的效率。</p>

<p>据我所知，目前只有 lightor才支持大数据量批量处理，因为只有lightor 不惜降低ORM的身份和封装层次，能够接受 ResultSet作为参数。</p>

<p>lightor的缓存策略比 Hibernate更前进了一步，把 query cache 和 ID Cache 集成在一起。以便得到更好的控制。并且，把缓存API暴露给程序员，以便智能的控制某个特定的缓存。</p>

<h2>SQL</h2>

<p>HQL, OQL 在SQL中引入了OO 语言的特性，似乎操作的是对象数据库，而不是关系数据库。</p>

<p>我感觉，这是一种语法层次上的 Domain Pollution。OO 语法对SQL语法的污染。</p>

<p>正如感觉LinkQ 是数据库查询语法对OO 语法的污染。</p>

<p>Java 代码中使用 Criteria API，也属于数据库查询领域对 OO领域的污染。</p>

<p>SQL是一种可读性很好，应用广泛的一种 DSL。</p>

<p>我的看法是，尽量把完整的 SQL放到单独的资源文件中，可以直接Copy 到SQL Client就可以运行。特殊优化过的 Native SQL，也是同样的地位。</p>

<p>HQL, OQL 阻碍了用户对SQL进行特殊优化。</p>

<p>如何动态拼装SQL ，一直是一个难以解决的问题。</p>

<p>直接在Java 代码中嵌入SQL ，肯定不行。前面说了，Java里面最好不要有 SQL片断，最好放到另外的资源文件中。</p>

<p>在Java 代码中使用 Criteria API? 前面也否定了。</p>

<p>在SQL Template 中加入动态语言脚本逻辑？比如 iBatis 使用XML if otherwise, OR Bridge 中使用velocity?</p>

<p>这种方法还是不错。不过仍然在 SQL里面引入了脚本逻辑。</p>

<p>我也没有好的做法。我采用 fastm来处理。在SQL 里面引入结构标记。这也相当于污染。因为SQL和 HTML不同。SQL 不是描述结构的，而是一门DSL。</p>

<p>这种做法的一个好处是，整段 SQL还是可以Copy 到SQL Client里面，稍微修改一番，就可以直接运行。</p>

<h2>A Demo Forum</h2>

<p>farum是我做的一个简单的 forum demo. 使用了 fastm, lightor, lightweb, 也尽量体现我前面提出的原则。<br>
<span class="nobr"><a href="https://farum.dev.java.net/files/documents/4372/25045/farum0.5a.zip" title="Visit page outside Confluence" rel="nofollow">https://farum.dev.java.net/files/documents/4372/25045/farum0.5a.zip<sup><img class="rendericon" src="http://www.javaeye.com/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></p>

<p>我觉得，使用一门语言，应该尽量发挥它的特长，而不是针对它的短处，修修补补。</p>

<p>Java作为静态类型编译语言的好处，就是编译期类型检查。那么如何发挥这个优势？前面说的 Mapper源代码生成，就是一种尝试。</p>

<p>另外，其它的类似的胶水粘合部分，比如， IoC, Validation等，都可以进行这方面的尝试。目前，farum
就是采用这样的做法，自己写的Validator Source进行 validation, value setting, service
implementation injection等工作。</p>

<p>farum没有使用 Dynamic Proxy, CGLib等动态篡改用户代码的做法。</p>

<p>尽量不使用Reflection ，因为Reflection 绕开了 Java 的类型检查机制。与其使用 reflection，真不如使用动态脚本语言。</p>

<p>当然，reflection 是非常难以避免的。farum 也少许使用了reflection。</p>

<p>Thread Local 是一种隐式契约，相当于绕开了显式契约（方法签名method signature）。 WebWork的一些用法，Spring Framework 的Open Session In View，等都是采用了 Thread Local。</p>

<p>farum没有采用 Thread Local，而是采用了另一种方法实现了 Open Session In view。而且如果缓存命中，甚至不需要从connection pool 中获取Connection 。</p>

<h2>总结</h2>

<p>&lt;&lt;Web 开发构想&gt;&gt;一文中，我提出了，理想中的 Web开发架构是这样的：</p>

<p>开发速度快，运行速度快，结构清晰优雅。</p>

<p>具体到每一层：</p>
<ul><li>Web 框架层主要追求 开发速度快。</li></ul>


<ul><li>O/R 层主要追求 运行速度快。</li></ul>


<ul><li>页面资源层和页面模板层主要追求 结构清晰优雅。</li></ul>


<p>下面就是我对这些理想的初步实现。</p>

<p>还远远达不到完美的程度，而只是朝这个方向努力。</p>

<h3>Template Layer</h3>

<p>fastm<br>
<span class="nobr"><a href="https://fastm.dev.java.net/files/documents/1911/25042/fastm1.0c.zip" title="Visit page outside Confluence" rel="nofollow">https://fastm.dev.java.net/files/documents/1911/25042/fastm1.0c.zip<sup><img class="rendericon" src="http://www.javaeye.com/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></p>

<h3>Web Layer</h3>

<p>lightweb<br>
<span class="nobr"><a href="https://lightweb.dev.java.net/files/documents/4371/25044/lightweb0.9b.zip" title="Visit page outside Confluence" rel="nofollow">https://lightweb.dev.java.net/files/documents/4371/25044/lightweb0.9b.zip<sup><img class="rendericon" src="http://www.javaeye.com/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></p>

<h3>ORM Layer</h3>

<p>lightor<br>
<span class="nobr"><a href="https://lightor.dev.java.net/files/documents/4370/25043/lightor0.5a.zip" title="Visit page outside Confluence" rel="nofollow">https://lightor.dev.java.net/files/documents/4370/25043/lightor0.5a.zip<sup><img class="rendericon" src="http://www.javaeye.com/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></p>

<h3>A forum demo using fastm + lightor + lightweb</h3>

<p>farum<br>
<span class="nobr"><a href="https://farum.dev.java.net/files/documents/4372/25045/farum0.5a.zip" title="Visit page outside Confluence" rel="nofollow">https://farum.dev.java.net/files/documents/4372/25045/farum0.5a.zip<sup><img class="rendericon" src="http://www.javaeye.com/images/icons/linkext7.gif" alt="" align="absmiddle" border="0" height="7" width="7"></sup></a></span></p>

<p>----------</p>

由于项目可能还没有通过java.net的申请流程，所以无法公开下载。<br>
我把所有的项目都放在fastm的这个目录下。<br>
<span class="nobr"><a href="https://fastm.dev.java.net/servlets/ProjectDocumentList?folderID=4520" title="Visit page outside Confluence" rel="nofollow">https://fastm.dev.java.net/servlets/ProjectDocumentList?folderID=4520</a></span><img src ="http://www.blogjava.net/Vencent/aggbug/32205.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-02-23 21:56 <a href="http://www.blogjava.net/Vencent/articles/32205.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为什么 char** 不能自动转化为 const char** (转)</title><link>http://www.blogjava.net/Vencent/articles/31945.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Wed, 22 Feb 2006 05:04:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/31945.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/31945.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/31945.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/31945.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/31945.html</trackback:ping><description><![CDATA[<div class="postTitle"><a id="viewpost1_TitleUrl" href="http://blog.vckbase.com/bruceteen/archive/2005/12/07/15691.html">为什么 char** 不能自动转化为 const char**</a> </div>
<div class="postText">
<p>一次偶然的情况下我发现以下代码竟然无法被编译通过（如果你的编译器，比如VC6或VC2003，允许它编译通过，我想你首先应该换个编译器，比如GCC或VC2005）：<br><font color="#0000ff">void foo( const char* [] ) { }<br>int main( void )<br>{<br>&nbsp;&nbsp;&nbsp; char* s[2];<br>&nbsp;&nbsp;&nbsp; foo( s );<br>}</font><br>简化成更一般的形式是：<br><font color="#0000ff">char** p1 = 0;<br>const char** p2 = p1;</font><br>错误是：<font color="#a52a2a">invalid conversion from `char**' to `const char**'</font>.</p>
<p><a href="http://blog.vckbase.com/lostpencil" target="_blank">lostpencil</a>更加仔细，使用C编译器给出的是一个警告：<br><font color="#a52a2a">initialization from incompatible pointer type</font>.</p>
<p>随后<a href="http://www.vckbase.com/bbs/userinfo.asp?id=hpho" target="_blank">hpho</a>给出了合理的解释，同时<a href="http://groups.google.com/group/comp.lang.c++.moderated" target="_blank">comp.lang.c++.moderated</a>上的<a href="mailto:eckhardt@satorlaser.com">Ulrich Eckhardt</a>也用代码进行了说明。</p>
<p>用代码来说明最直观了：<br><font color="#0000ff">const char* s = "abc";<br>int main( void )<br>{<br>&nbsp;&nbsp;&nbsp; char* p0 = 0;<br>&nbsp;&nbsp;&nbsp; char** p1 = &amp;p0;<br>&nbsp;&nbsp;&nbsp; const char** p2 = p1;</font> // 先假设这一句是合法的 ( 测试时，可以先强制类型转化一下 )<br><font color="#0000ff">&nbsp;&nbsp;&nbsp; *p2 = s;<br>&nbsp;&nbsp;&nbsp; *p0 = 'A';</font> // 通过p0在修改不应该被修改的s，这显然和const相违背，其运行结果不可知。<br><font color="#0000ff">}<br><br><br><br><br></font></p></div>
<p><font color="#0000ff">看了 **的 想到的<br>tekyDec 29, 2005 -&nbsp; Show original item </font></p>
<p><font color="#0000ff">看完后.明白**讲的为什么char** 不能自动转化为 const char**,(原文)但对我影响最深的是下面的话:</font></p>
<p><font color="#0000ff">==================================================================<br>char *p="abc" 能不能编译通过要看你使用的编译器。鉴于大量遗留代码的存在，大部分编译器允许其通过，或者给个警告。当然，程序员自己必须保证绝不去修改其值。 </font></p>
<p><font color="#0000ff">程序员不应该在代码中出现*p='A'这样的语句。这是当初约定好了的：编译器允许char *p="abc"通过，而程序员保证不去修改它。 <br>b. *p='A'编译时应该允许通过，因为单就这条语句而言，它完全合法。 <br>c. 运行时*p='A'能不能通过要看实际的运行环境，包括你使用的操作系统、编译器、编译器选项 等等，一句话，其运行结果由不得你，且不应该由你去关心，因为这种行为本身已经违反约定了。 <br>==================================================================</font></p>
<p><font color="#0000ff">工作关系吧,用CString 和string用的太多了,很少这样定义字符串 char *p=“abcde“了<br>匝一看,还不适应,:(,渐渐的回想才想起一些来(哎,还是太生疏,赶快写下来,以后别忘了)</font></p>
<p><font color="#0000ff">这样定义的字符串char *p=“abcde“ ; char *p1=“123445667“;</font></p>
<p><font color="#0000ff">正如上面提到的是不能再 *p='A',运行的时候会出错,同样,strcpy(p,p1)也会出错哟,</font></p>
<p><font color="#0000ff">"abcde"字符串可以看做是个常量字符串了,是不能被修改的,</font></p>
<p><font color="#0000ff">但如果 char p[]=“abcde“ 这样定义,就没有问题,你可以修改*p='A',只要不越界就ok.</font></p>
<p><font color="#0000ff">并且发现这样两种定义<br>char *p=“abcde“</font></p>
<p><font color="#0000ff">char p[]=“abcde“ </font></p>
<p><font color="#0000ff">在运行的时候,p指向的地址也不是一样的,可见char *p=“abcde“还是有特殊的处理 :),具体怎么处理就不知道了,高手请指教:)</font></p><font color="#0000ff">
</font><p><font color="#0000ff"><br>随着测试,又发现个问题,可能是个老问题了吧:</font></p>
<p><font color="#0000ff"><br>int main(int argc, char* argv[])<br>{ <br>&nbsp;int t[10];<br>&nbsp;char p1[7]="123456";<br>&nbsp;const char *p2="1234567890123213123";<br>&nbsp;<br>&nbsp;int len(0);<br>&nbsp;<br>&nbsp; //*p1='C';&nbsp; err</font></p>
<p><font color="#0000ff">&nbsp;len=strlen(p1);<br>&nbsp;printf("%d\n",len);<br>&nbsp;<br>&nbsp;strcpy(p1,p2);&nbsp;&nbsp; ///??????????<br>&nbsp;<br>&nbsp;printf("%s\n",p1);<br>&nbsp;<br>&nbsp;len=strlen(p1);<br>&nbsp;<br>&nbsp;printf("%d\n",len);<br>&nbsp;return 0;<br>}</font></p>
<p><font color="#0000ff">我定义的是7个字符数组, 但用strcpy把p2拷到p1中,p1是放不下的,但程序却正常执行,warning ,err都没有,运行也正常?</font></p>
<p><font color="#0000ff"><br>输出 </font></p>
<p><font color="#0000ff">6<br>1234567890123213123<br>19</font></p>
<p><font color="#0000ff">应该是使用内存越界了阿??怎么会正常运行呢?</font></p>
<p><font color="#0000ff">难道对于内存越界的使用,运气好才崩溃表现出来,运气不好就正常运行??</font></p><img src ="http://www.blogjava.net/Vencent/aggbug/31945.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-02-22 13:04 <a href="http://www.blogjava.net/Vencent/articles/31945.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Some Words of Valentine's Day</title><link>http://www.blogjava.net/Vencent/articles/30714.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Tue, 14 Feb 2006 15:29:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/30714.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/30714.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/30714.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/30714.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/30714.html</trackback:ping><description><![CDATA[<div class="postText">
				Valentine's Day 情人节<br><br>Date 约会<br><br>Bunch 花束<br><br>Rose 玫瑰<br><br>Candy 糖果<br><br>Chocolate 巧克力<br><br>Forget-Me-Not 勿忘我<br><br>Puppy Love/First Love 初恋<br><br>Cute Meet 浪漫的邂逅<br><br>Fall In Love 坠入爱河<br><br>Love At The First Sight 一见钟情<br><br>Propose 求婚<br><br>Valentine Cards 情人节卡片<br><br>Candlelight Dinner 烛光晚餐<br><br>Heart-Shaped/Cordate 心形的<br><br>Truelove 真爱<br><br>Enamored 倾心的<br><br>Saint Valentine\'s Day 情人节<br><br>The Chemical Feeling 奇妙的感觉，触电<br><br>Sweet Bitterness 甜蜜的痛苦<br><br>A Doomed Couple 天生一对<br><br>A Happy Ending 大团圆结局<br><br>Sweetheart 甜心<br><br>Lover 爱人<br><br>Cupid 爱神丘比特<br><br>Admirer 仰慕者<br><br>Romance 浪漫<br><br>Heartthrob 激情<br><br>Courtship 求爱<br><br>Infatuation 醉心<br><br>Promise/Pledge/Vow 誓言<br><br>Fidelity 忠心<br><br>Eternal/Immortal/Everlasting 永恒<br>
			</div>
			
			<img src ="http://www.blogjava.net/Vencent/aggbug/30714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-02-14 23:29 <a href="http://www.blogjava.net/Vencent/articles/30714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>https相关</title><link>http://www.blogjava.net/Vencent/articles/30677.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Tue, 14 Feb 2006 13:00:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/30677.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/30677.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/30677.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/30677.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/30677.html</trackback:ping><description><![CDATA[<font size="2"><strong>什么是HTTPS？<br></strong>当使用 基于SSL/TLS（通常使用
https://
URL）向站点进行HTTP请求时，从服务器向客户机发送一个证书。客户机使用已安装的公共证书通过这个证书验证服务器的身份，然后检查 IP
名称（机器名）与客户机连接的机器是否匹配。客户机生成一些可以用来生成对话的私钥（称为会话密钥）的随机信息，然后用服务器的公钥对它加密并将它发送到
服务器。服务器用自己的私钥解密消息，然后用该随机信息派生出和客户机一样的私有会话密钥。通常在这个阶段使用 RSA
公钥算法。然后，客户机和服务器使用私有会话密钥和私钥算法（通常是 RC4）进行通信。使用另一个密钥的消息认证码来确保消息的完整性。<br><br><strong>什么是数字签名？</strong><br>所
谓数字签名就是信息发送者用其私有密钥对从所传报文中提取出的特征数据（或称数字指纹）进行RSA算法操作，以保证发信人无法抵赖曾发过该信息（即不可抵
赖性），同时也确保信息报文在经签名后末被篡改（即完整性）。当信息接收者收到报文后，就可以用发送者的公钥对数字签名进行验证。<br></font><strong>Overview of SSL？<br></strong>&nbsp;&nbsp;&nbsp;&nbsp;
SSL, or Secure Socket Layer, is a technology which allows web browsers
and web servers to communicate over a secured connection. This means
that the data being sent is encrypted by one side, transmitted, then
decrypted by the other side before processing. This is a two-way
process, meaning that both the server AND the browser encrypt all
traffic before sending out data.<br>&nbsp;&nbsp;&nbsp;&nbsp; Another important aspect of
the SSL protocol is Authentication. This means that during your initial
attempt to communicate with a web server over a secure connection, that
server will present your web browser with a set of credentials, in the
form of a "Certificate", as proof the site is who and what it claims to
be. In certain cases, the server may also request a Certificate from
your web browser, asking for proof that <em>you</em> are who you claim
to be. This is known as "Client Authentication," although in practice
this is used more for business-to-business (B2B) transactions than with
individual users. Most SSL-enabled web servers do not request Client
Authentication.<br><strong>https与Tomcat<br></strong><font size="3">&nbsp;&nbsp;</font><font size="2"> <strong>The Apache Jakarta Tomcat 5 Servlet/JSP Container</strong></font><font size="2"><strong> SSL Configuration HOW-TO?<br></strong>利用快速配置：<br>&nbsp; 1，用jdk中的keytool生成一个tomcat keystore<br>&nbsp;&nbsp;&nbsp; 在命令行敲入：%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA<br>&nbsp;&nbsp;&nbsp; 会提示你输入keypassword 和 keystorepassword 以及其它相关信息。按提示确认完成。<br>&nbsp; 2， 在conf/server.xml中加入：<br>&nbsp;&nbsp;&nbsp;&nbsp; </font><font color="#0000ff"><connector><br port="8443"><font size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; enableLookups="false" disableUploadTimeout="true"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; acceptCount="100" debug="0" scheme="https" secure="true"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; clientAuth="false" keystorePass="password" sslProtocol="TLS" /&gt;<br>&nbsp; </font></connector></font><font size="2">3，启动tomcat,打开浏览器输入</font><a href="https://localhost:8443/"><font size="2">https://localhost:8443</font></a><font size="2"> 就OK了。<br>注意：用此方法生成的keystore文件置于C:\Documents and Settings\user下<br>注释：<connector><br></connector></font><font size="3">
<table border="1">
<tbody>
<tr>
<th>Attribute</th>
<th>Description</th></tr>
<tr>
<td><code>clientAuth</code></td>
<td>Set this value to <code>true</code> if you want Tomcat to require all SSL clients to present a client Certificate in order to use this socket. Set this value to <code>want</code> if you want Tomcat to request a client Certificate, but not fail if one isn't presented. </td></tr>
<tr>
<td><code>keystoreFile</code></td>
<td>Add this attribute if the keystore file you created is not in the default place that Tomcat expects (a file named <code>.keystore</code>
in the user home directory under which Tomcat is running). You can
specify an absolute pathname, or a relative pathname that is resolved
against the <code>$CATALINA_BASE</code> environment variable.</td></tr>
<tr>
<td><code>keystorePass</code></td>
<td>Add this element if you used a different keystore (and Certificate) password than the one Tomcat expects (<code>changeit</code>).</td></tr>
<tr>
<td><code>keystoreType</code></td>
<td>Add this element if using a PKCS12 keystore. The valid values are <code>JKS</code> and <code>PKCS12</code>.</td></tr>
<tr>
<td><code>sslProtocol</code></td>
<td>The encryption/decryption protocol to be used on this socket. It is
not recommended to change this value if you are using Sun's JVM. It is
reported that IBM's 1.4.1 implementation of the TLS protocol is not
compatible with some popular browsers. In this case, use the value <code>SSL</code>.</td></tr>
<tr>
<td><code>ciphers</code></td>
<td>The comma separated list of encryption ciphers that this socket is allowed to use. By default, any available cipher is allowed.</td></tr>
<tr>
<td><code>algorithm</code></td>
<td>The <code>X509</code> algorithm to use. This defaults to the Sun implementation (<code>SunX509</code>). For IBM JVMs you should use the value <code>IbmX509</code>. For other vendors, consult the JVM documentation for the correct value. </td></tr>
<tr>
<td><code>truststoreFile</code></td>
<td>The TrustStore file to use to validate client certificates.</td></tr>
<tr>
<td><code>truststorePass</code></td>
<td>The password to access the TrustStore. This defaults to the value of <code>keystorePass</code>.</td></tr>
<tr>
<td><code>truststoreType</code></td>
<td>Add this element if your are using a different format for the
TrustStore then you are using for the KeyStore. The valid values are <code>JKS</code> and <code>PKCS12</code>.</td></tr></tbody></table><br></font><font size="2"><strong>Java keytool工具的作用及使用方法?<br></strong>Keytool 是安全钥匙与证书的管理工具。它管理一个存储了私有钥匙和验证相应公共钥匙的与它们相关联的X.509 证书链的keystore(相当一个数据库)。<br>Keytool 是一个有效的安全钥匙和证书的管理工具。它能够使用户使用数字签名来管理他们自己的私有/公共钥匙对,管理用来作自我鉴定的相关的证书,管理数据完整性和鉴定服务。它还能使用户在通信时缓存它们的公共钥匙.<br>一个证书是某一实体(个人,公司等)的数字签名，指出其他实体的公共钥匙(或其他信息)的详细的值.当数据被签名后,这个签名信息被用来检验数据的完整性和真实性.完整性指数据没有被修改和篡改,真实性指数据从任何产生和签名的一方真正的传输到达。<br>Keytool 把钥匙和证书储存到一个keystore.默任的实现keystore的是一个文件。它用一个密码保护钥匙。而另外的一个工具jarsigner用keystore中的信息产生或检验Java aRchive(jar文件)中的数字签名。<br>Keystore有两个不同的入口:<br>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 钥匙入口:保存了非常敏感的加密的钥匙信息,并且是用一个保护的格式存储以防止未被授权的访问.以这种形式存储的钥匙是秘密钥匙,或是一个对应证书链中公有钥匙的私有钥匙.<br>2.&nbsp;&nbsp;&nbsp; 信任证书入口:包含一个属于其他部分的单一公共钥匙证书.它之所以被称为"信任证书",是因为keystore信任的证书中的公共钥匙真正属于证书所有者的身份识别.<br>&nbsp;<br>Keystore的别名:<br>所有的keystore入口(钥匙和信任证书入口)是通过唯一的别名访问.别名是不区分大小写的。如别名Hugo和hugo指向同一个keystore入口.<br>可以在加一个入口到keystore的时候使用-genkey参数来产生一个钥匙对(公共钥匙和私有钥匙)时指定别名.也可以用-import参数加一个证书或证书链到信任证书。<br>&nbsp;<br>如：keytool -genkey -alias duke -keypass dukekeypasswd<br>&nbsp;<br>其中duke为别名,dukekeypasswd为duke别名的密码。这行命令的作用是产生一个新的公共/私有钥匙对. 其中duke为别名,dukekeypasswd为duke别名的密码.这行命令的作用是产生一个新的公共/私有钥匙对.<br>假如你想修改密码,可以用：<br>keytool -keypasswd -alias duke -keypass dukekeypasswd -new newpass<br>将旧密码dukekeypasswd改为newpass.<br>&nbsp;<br>Keystore的产生:<br>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当使用-genkey 或-import或-identitydb命令添加数据到一个keystore,而当这个keystore不存在时,产生一个keystore.默认名是.keystore,存放到user-home目录.<br>2.&nbsp;&nbsp;&nbsp; 当用-keystore指定时,将产生指定的keystore.<br>&nbsp;<br>Keystore的实现:<br>Keytool
类位于java.security包下,提供一个非常好的接口去取得和修改一个keystore中的信息.
目前有两个命令行:keytool和jarsinger,一个GUI工具Policy
可以实现keystore.由于keystore是公开的,用户可以用它写一些额外的安全应用程序。<br>Keystore还有一个sun公司提供的內在实现.它把keystore作为一个文件来实现.利用了一个keystore类型(格式)"JKS".它用单独的密码保护每一个私有钥匙.也用可能不同的密码保护整个keystore的完整性.<br>&nbsp;<br>支持的算法和钥匙大小:<br>keytool允许用户指定钥匙对和注册密码服务供应者所提供的签名算法.缺省的钥匙对产生算法是"DSA"。假如私有钥匙是"DSA"类型，缺省签名算法是"SHA1withDSA"，假如私有钥匙是"RSA"类型,缺省算法是"MD5withRSA".<br>当产生一个DSA钥匙对,钥匙必须在512-1024位之间.对任何算法的缺省钥匙大小是1024位.<br>&nbsp;<br>1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 证书：一个证书是一个实体的数字签名,指出其他实体的公共钥匙有明确的值。<br>2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 公共钥匙：是同一个详细的实体的数字关联,并有意让所有想同这个实体发生信任关系的其他实体知道，公共钥匙用来检验签名;<br>3.&nbsp;&nbsp;&nbsp; 数字签名:假如数据已被签名,并用身份存储在一个实体中,一个签名能够证明这个实体知道这个数据.这个数据用实体私有钥匙签名并递交;<br>4.&nbsp;&nbsp;&nbsp; 身份:知道实体的方法.在一些系统中身份是公共钥匙,其他系统中可以是从一个X.509名字的邮件地址的Unix UID来的任何东西;<br>5.&nbsp;&nbsp;&nbsp; 签名:一个签名用实体私有钥匙来计算某些加密数据;<br>6.&nbsp;&nbsp;&nbsp; 私有钥匙:是一些数字,每一个私有钥匙只能被特定的拥有该私有钥匙的实体知道.私有和公共钥匙存在所有用公共钥匙加密的系统的钥匙对中.一个公共钥匙加密(如DSA),一个私有钥匙与一个正确的公共钥匙通信.私有钥匙用来计算签名。<br>7.&nbsp;&nbsp;&nbsp; 实体:一个实体可以是一个人,一个组织,一个程序,一台计算机,一个商业,一个银行,或其他你想信任的东西.<br>&nbsp;<br>Keytool应用实例:<br>&nbsp;<br>1.产生一个keystore:<br>&nbsp;<br>keytool -genkey -alias User(keystore的别名) -keyalg RSA -validity 7 -keystore keystore(指定keystore).<br>&nbsp;<br>运行这个命令,系统提示:<br>Enter keystore password:yourpassword(输入密码)<br>&nbsp;<br>What is your first and last name?<br>[Unknown]: your name(输入你的名字)<br>&nbsp;<br>What is the name of your organizational unit?<br>[Unknown]:your organizational(输入你所在组织单位的名字)<br>&nbsp;<br>What is the name of your organization?<br>[Unknown]:your organization name (输入你所在组织的名字)<br>&nbsp;<br>What is the name of your City or Locality?<br>[Unknown]:your city name(输入所在城市的名字)<br>&nbsp;<br>What is the name of your State or Province?<br>[Unknown]:your provice name(输入所在省份名字)<br>&nbsp;<br>What is the two-letter country code for this unit?<br>[Unknown]:cn(输入国家名字)<br>Is CN=your name, OU=your organizaion, O="your organization name",L=your city name, ST=your province name, C=cn correct?<br>[no]: yes<br>&nbsp;<br>3.&nbsp;&nbsp;&nbsp; 检查一个keystore:<br>keytool -list -v -keystore keystore<br>Enter keystore password:your password(输入密码)<br>&nbsp;<br>将显示keystore內容如:<br>Keystore type: jks<br>Keystore provider: SUN<br>&nbsp;<br>Your keystore contains 1 entry<br>Alias name: yourname<br>Creation date: Dec 20, 2001<br>Entry type: keyEntry<br>Certificate chain length: 1<br>Certificate[1]:<br>Owner: CN=yourname, OU=your organization, O="your organization name",<br>L=your city name, ST=your province name, C=CN<br>Issuer: CN=Duke, OU=Java Software, O="Sun Microsystems, Inc.", L=Palo Alto, ST=CA, C=US<br>Serial number: 3c22adc1<br>Valid from: Thu Dec 20 19:34:25 PST 2001 until: Thu Dec 27 19:34:25 PST 2001<br>Certificate fingerprints:<br>MD5: F1:5B:9B:A1:F7:16:CF:25:CF:F4:FF:35:3F:4C:9C:F0<br>SHA1: B2:00:50:DD:B6:CC:35:66:21:45:0F:96:AA:AF:6A:3D:E4:03:7C:74<br>&nbsp;<br>3．输出keystore到一个文件:testkey:<br>keytool -export -alias duke -keystore keystore -rfc -file testkey<br>系统输出：Enter keystore password:your password(输入密码)<br>Certificate stored in file <testkey>&lt; td&gt;<br>&nbsp;<br>4．输入证书到一个新的truststore:<br>keytool -import -alias dukecert -file testkey -keystore truststore <br>Enter keystore password:your new password.(输入truststore新密码)<br>&nbsp;<br>&nbsp;<br>5．检查truststore:<br>keytool -list -v -keystore truststore <br>系统将显示truststore的信息.<br>&nbsp;<br>现在可以用适当的keystore运行你的应用程序.如: <br>java -Djavax.net.ssl.keyStore = keystore <br>-Djavax.net.ssl.keyStorePassword=password Server<br>&nbsp;<br>和:<br>&nbsp;java -Djavax.net.ssl.trustStore=truststore<br>-Djavax.net.ssl.trustStorePassword=trustword Client</testkey></font><img src ="http://www.blogjava.net/Vencent/aggbug/30677.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-02-14 21:00 <a href="http://www.blogjava.net/Vencent/articles/30677.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>三步搞定!水货商坦言IBM本本验货指南</title><link>http://www.blogjava.net/Vencent/articles/30515.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Mon, 13 Feb 2006 13:42:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/30515.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/30515.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/30515.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/30515.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/30515.html</trackback:ping><description><![CDATA[<p aling="left"><b>第1页：对照IBM的装箱单核对包装箱内物品</b></p><br>一般情况下IBM随包装箱会放一张装箱单，这个东西现在一般机器都不带，没有多大用处，也难免香港人会把它扔掉，在他们看来除了机器，别的都无所谓。单子上会列出包装箱内的所有附件。 

<p align="center"><a href="http://www.pcpop.com/doc/App/ImageShow.aspx?category=article&amp;sn=000170359" target="_blank"><img style="border-color: black; border-width: 1px;" alt="三步搞定!水货商坦言IBM本本验货指南" src="http://img2.pcpop.com/ArticleImages/400x300/0/170/000170359.jpg" border="1"></a></p>
<p align="left">&nbsp;&nbsp;&nbsp; 1、机器一台</p>
<p>　2、电池一块 注意:按行货的装相方法，电池和机器是分开的，因为香港人拿到机器要先验屏有无坏点， 所以电池就装在机器上了。</p>
<p>　3、适配器一套3头为英制，香港货和新加坡货都是这种。2头为美制，美国货是这样的。</p>
<p>　4、电话线一根，接猫上网的，现在很少人用了。</p>
<p>　5、说明书一套。多数均为T40版的，猜测是IBM为了节约成本，所以T40，T41，T42，T43都用同一套说明书。</p>
<p>　6、小红帽两个。为将来原配的脏了更换的。</p>
<p>　7、固定螺丝一颗用来固定互换光区的，防止别人插拔。<br><br></p>
<p aling="left"><b>第2页：检查外观、验证SN号</b></p>
<p>&nbsp;&nbsp;&nbsp; 接下来就要看外观了，有没有划伤，毕竟外观也是很重要的，要检查外观有无硬商如果有及时更换。特别要注意平时不太注意的细节，比如机器底部、<a class="keyword" href="http://product.pcpop.com/Keyboard/00000_1.html" target="_blank">键盘</a>还有屏幕。 </p>

<div align="center"><a href="http://product.pcpop.com/000002570/Picture/000037318.html" target="_blank"><img style="border-color: black; border-width: 1px;" alt="三步搞定!水货商坦言IBM本本验货指南" src="http://img2.pcpop.com/ProductImages/Big/0/37/000037318.jpg" border="1"></a></div>
<p>&nbsp;　开机进BIOS，先查看机器大概的配置，主频，<a class="keyword" href="http://product.pcpop.com/Memory/00000_1.html" target="_blank">内存</a>，还有关键的两个号码，SN号和UUID号码。SN号是机器唯一的序列号，没有重复的，从BIOS里查到的SN号要和包装箱的，机器背面的，还有用测试软件测出来的都对上，才算完整。</p>
<p>　UUID号码是<a class="keyword" href="http://product.pcpop.com/MB/00000_1.html" target="_blank">主板</a>序列号。只显示在BIOS里和包装箱上，这两处也要对上。另外要和用测试软件测出的UUID号也对上。如果机器<a class="keyword" href="http://product.pcpop.com/MB/00000_1.html" target="_blank">主板</a>被动过，那UUID号是会改变的。<br><br></p>
<p aling="left"><b>第3页：检查屏幕、电池和保修</b></p>
<p>　开始进入系统，测试屏幕，可以用专业的测试软件，网上有很多像Nokia的软件等等，主要检查坏点和亮点。 </p>

<div align="center"><a href="http://product.pcpop.com/000013450/Picture/000058508.html" target="_blank"><img style="border-color: black; border-width: 1px;" alt="三步搞定!水货商坦言IBM本本验货指南" src="http://img2.pcpop.com/ProductImages/Big/0/58/000058508.jpg" border="1"></a></div>
<p>&nbsp;&nbsp;&nbsp; 查看电池充电次数，一般来说，不超过两次。如果是旧电池的，这一步是逃不过去的，而且以目前的技术，还没有哪个高手可以刷新充电次数</p>
<p>&nbsp;&nbsp;&nbsp; 一定要上网查询保修期限和核对附件的编号</p>
<p>&nbsp;&nbsp;&nbsp; 具体网址：<a href="http://www-3.ibm.com/pc/support/site.wss/warranty/warranty.vm">http://www-3.ibm.com/pc/support/site.wss/warranty/warranty.vm</a>&nbsp;</p>
<div align="center"><a href="http://www.pcpop.com/doc/App/ImageShow.aspx?category=article&amp;sn=000170360" target="_blank"><img style="border-color: black; border-width: 1px;" alt="三步搞定!水货商坦言IBM本本验货指南" src="http://img2.pcpop.com/ArticleImages/400x300/0/170/000170360.jpg" border="1"></a></div>
<p>&nbsp; 在TYPE一栏中输入机器型号，如2373在Serial#一栏中输入机器SN号，然后点Continue，或者点击开会出现保修信息。</p>

<div align="center"><a href="http://www.pcpop.com/doc/App/ImageShow.aspx?category=article&amp;sn=000170598" target="_blank"><img style="border-color: black; border-width: 1px;" alt="三步搞定!水货商坦言IBM本本验货指南" src="http://img2.pcpop.com/ArticleImages/400x300/0/170/000170598.jpg" border="1"></a></div>
<p>&nbsp;&nbsp;&nbsp; 有本机器的保修期限和销售地。</p>
<p>&nbsp;&nbsp;&nbsp; 特别说明：因为过海关是机器和包装箱分开过的，然后到深圳再一对一的装箱，难免适配器和电话线装错，有可能造成这两个部件的号码和网站显示号码难以对上。除此之外，机器的<a class="keyword" href="http://product.pcpop.com/HDD/00000_1.html" target="_blank">硬盘</a>编号，电池编号等等都是能对上的。另外次编号是IBM为自己的配件所做的出厂编号，很多测试软件是测不出来的。最后一点检查是否带有COA标 。</p>
	

<!--Beging Temp Save-->


<script>
			function TempSave(ElementID)
			{
				
				CommentsPersistDiv.setAttribute("CommentContent",document.getElementById(ElementID).value);
				CommentsPersistDiv.save("CommentXMLStore");
				
			}
			function Restore(ElementID)
			{
				CommentsPersistDiv.load("CommentXMLStore");
				document.getElementById(ElementID).value=CommentsPersistDiv.getAttribute("CommentContent");
			}
			
			
		
</script>
<!--Ene TempSave-->

	
		
			<table border="0" cellpadding="1" cellspacing="1"><tbody><tr>
			<td><br></td>
			<td><br></td></tr></tbody></table><img src ="http://www.blogjava.net/Vencent/aggbug/30515.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-02-13 21:42 <a href="http://www.blogjava.net/Vencent/articles/30515.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GOOGLE挑战赛练习题3及答案(1000分)</title><link>http://www.blogjava.net/Vencent/articles/30512.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Mon, 13 Feb 2006 13:38:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/30512.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/30512.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/30512.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/30512.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/30512.html</trackback:ping><description><![CDATA[<table><tbody><tr><td colspan="2"><h3>Problem Statement </h3></td></tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp; </td>
<td>When editing a single line of text, there are four keys that can be
used to move the cursor: end, home, left-arrow and right-arrow. As you
would expect, left-arrow and right-arrow move the cursor one character
left or one character right, unless the cursor is at the beginning of
the line or the end of the line, respectively, in which case the
keystrokes do nothing (the cursor does not wrap to the previous or next
line). The home key moves the cursor to the beginning of the line, and
the end key moves the cursor to the end of the line.<br><br>You will be given a int, <b>N</b>,
representing the number of character in a line of text. The cursor is
always between two adjacent characters, at the beginning of the line,
or at the end of the line. It starts before the first character, at
position 0. The position after the last character on the line is
position <b>N</b>. You should simulate a series of keystrokes and
return the final position of the cursor. You will be given a String
where characters of the String represent the keystrokes made, in order.
'L' and 'R' represent left and right, while 'H' and 'E' represent home
and end. </td></tr>
<tr>
<td colspan="2">
<h3>Definition </h3></td></tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp; </td>
<td>
<table>
<tbody>
<tr>
<td>Class: </td>
<td>CursorPosition </td></tr>
<tr>
<td>Method: </td>
<td>getPosition </td></tr>
<tr>
<td>Parameters: </td>
<td>String, int </td></tr>
<tr>
<td>Returns: </td>
<td>int </td></tr>
<tr>
<td>Method signature: </td>
<td>int getPosition(String keystrokes, int N) </td></tr>
<tr>
<td colspan="2">(be sure your method is public) </td></tr></tbody></table></td></tr></tbody></table>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);"><span style="color: rgb(0, 128, 128);">&nbsp;1</span><img src="../../Images/OutliningIndicators/None.gif" align="top"><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">class</span><span style="color: rgb(0, 0, 0);">&nbsp;CursorPosition<br></span><span style="color: rgb(0, 128, 128);">&nbsp;2</span><span style="color: rgb(0, 0, 0);"><img id="Codehighlighter1_28_1047_Open_Image" onclick="this.style.display='none'; Codehighlighter1_28_1047_Open_Text.style.display='none'; Codehighlighter1_28_1047_Closed_Image.style.display='inline'; Codehighlighter1_28_1047_Closed_Text.style.display='inline';" src="../../Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img id="Codehighlighter1_28_1047_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_28_1047_Closed_Text.style.display='none'; Codehighlighter1_28_1047_Open_Image.style.display='inline'; Codehighlighter1_28_1047_Open_Text.style.display='inline';" src="../../Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span id="Codehighlighter1_28_1047_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="../../Images/dot.gif"></span><span id="Codehighlighter1_28_1047_Open_Text"><span style="color: rgb(0, 0, 0);">{<br></span><span style="color: rgb(0, 128, 128);">&nbsp;3</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"><br></span><span style="color: rgb(0, 128, 128);">&nbsp;4</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">public</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;getPosition(String&nbsp;ks,</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;len)<br></span><span style="color: rgb(0, 128, 128);">&nbsp;5</span><span style="color: rgb(0, 0, 0);"><img id="Codehighlighter1_89_1044_Open_Image" onclick="this.style.display='none'; Codehighlighter1_89_1044_Open_Text.style.display='none'; Codehighlighter1_89_1044_Closed_Image.style.display='inline'; Codehighlighter1_89_1044_Closed_Text.style.display='inline';" src="../../Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_89_1044_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_89_1044_Closed_Text.style.display='none'; Codehighlighter1_89_1044_Open_Image.style.display='inline'; Codehighlighter1_89_1044_Open_Text.style.display='inline';" src="../../Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_89_1044_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="../../Images/dot.gif"></span><span id="Codehighlighter1_89_1044_Open_Text"><span style="color: rgb(0, 0, 0);">{<br></span><span style="color: rgb(0, 128, 128);">&nbsp;6</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;pos&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br></span><span style="color: rgb(0, 128, 128);">&nbsp;7</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">char</span><span style="color: rgb(0, 0, 0);">&nbsp;c&nbsp;;<br></span><span style="color: rgb(0, 128, 128);">&nbsp;8</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">for</span><span style="color: rgb(0, 0, 0);">(</span><span style="color: rgb(0, 0, 255);">int</span><span style="color: rgb(0, 0, 0);">&nbsp;i</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;i</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">ks.length();i</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">)<br></span><span style="color: rgb(0, 128, 128);">&nbsp;9</span><span style="color: rgb(0, 0, 0);"><img id="Codehighlighter1_208_1013_Open_Image" onclick="this.style.display='none'; Codehighlighter1_208_1013_Open_Text.style.display='none'; Codehighlighter1_208_1013_Closed_Image.style.display='inline'; Codehighlighter1_208_1013_Closed_Text.style.display='inline';" src="../../Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_208_1013_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_208_1013_Closed_Text.style.display='none'; Codehighlighter1_208_1013_Open_Image.style.display='inline'; Codehighlighter1_208_1013_Open_Text.style.display='inline';" src="../../Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_208_1013_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="../../Images/dot.gif"></span><span id="Codehighlighter1_208_1013_Open_Text"><span style="color: rgb(0, 0, 0);">{<br></span><span style="color: rgb(0, 128, 128);">10</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;c&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;ks.charAt(i);<br></span><span style="color: rgb(0, 128, 128);">11</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"><br></span><span style="color: rgb(0, 128, 128);">12</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(c</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">E</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">)<br></span><span style="color: rgb(0, 128, 128);">13</span><span style="color: rgb(0, 0, 0);"><img id="Codehighlighter1_312_381_Open_Image" onclick="this.style.display='none'; Codehighlighter1_312_381_Open_Text.style.display='none'; Codehighlighter1_312_381_Closed_Image.style.display='inline'; Codehighlighter1_312_381_Closed_Text.style.display='inline';" src="../../Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_312_381_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_312_381_Closed_Text.style.display='none'; Codehighlighter1_312_381_Open_Image.style.display='inline'; Codehighlighter1_312_381_Open_Text.style.display='inline';" src="../../Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_312_381_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="../../Images/dot.gif"></span><span id="Codehighlighter1_312_381_Open_Text"><span style="color: rgb(0, 0, 0);">{<br></span><span style="color: rgb(0, 128, 128);">14</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;len;<br></span><span style="color: rgb(0, 128, 128);">15</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);">16</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(c</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">H</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">)<br></span><span style="color: rgb(0, 128, 128);">17</span><span style="color: rgb(0, 0, 0);"><img id="Codehighlighter1_447_514_Open_Image" onclick="this.style.display='none'; Codehighlighter1_447_514_Open_Text.style.display='none'; Codehighlighter1_447_514_Closed_Image.style.display='inline'; Codehighlighter1_447_514_Closed_Text.style.display='inline';" src="../../Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_447_514_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_447_514_Closed_Text.style.display='none'; Codehighlighter1_447_514_Open_Image.style.display='inline'; Codehighlighter1_447_514_Open_Text.style.display='inline';" src="../../Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_447_514_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="../../Images/dot.gif"></span><span id="Codehighlighter1_447_514_Open_Text"><span style="color: rgb(0, 0, 0);">{<br></span><span style="color: rgb(0, 128, 128);">18</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos&nbsp;</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">;<br></span><span style="color: rgb(0, 128, 128);">19</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);">20</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(c</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">L</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">)<br></span><span style="color: rgb(0, 128, 128);">21</span><span style="color: rgb(0, 0, 0);"><img id="Codehighlighter1_580_753_Open_Image" onclick="this.style.display='none'; Codehighlighter1_580_753_Open_Text.style.display='none'; Codehighlighter1_580_753_Closed_Image.style.display='inline'; Codehighlighter1_580_753_Closed_Text.style.display='inline';" src="../../Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_580_753_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_580_753_Closed_Text.style.display='none'; Codehighlighter1_580_753_Open_Image.style.display='inline'; Codehighlighter1_580_753_Open_Text.style.display='inline';" src="../../Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_580_753_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="../../Images/dot.gif"></span><span id="Codehighlighter1_580_753_Open_Text"><span style="color: rgb(0, 0, 0);">{<br></span><span style="color: rgb(0, 128, 128);">22</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(pos</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">0</span><span style="color: rgb(0, 0, 0);">)<br></span><span style="color: rgb(0, 128, 128);">23</span><span style="color: rgb(0, 0, 0);"><img id="Codehighlighter1_656_727_Open_Image" onclick="this.style.display='none'; Codehighlighter1_656_727_Open_Text.style.display='none'; Codehighlighter1_656_727_Closed_Image.style.display='inline'; Codehighlighter1_656_727_Closed_Text.style.display='inline';" src="../../Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_656_727_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_656_727_Closed_Text.style.display='none'; Codehighlighter1_656_727_Open_Image.style.display='inline'; Codehighlighter1_656_727_Open_Text.style.display='inline';" src="../../Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_656_727_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="../../Images/dot.gif"></span><span id="Codehighlighter1_656_727_Open_Text"><span style="color: rgb(0, 0, 0);">{<br></span><span style="color: rgb(0, 128, 128);">24</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos</span><span style="color: rgb(0, 0, 0);">--</span><span style="color: rgb(0, 0, 0);">;<br></span><span style="color: rgb(0, 128, 128);">25</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);">26</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);">27</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">else</span><span style="color: rgb(0, 0, 0);">&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(c</span><span style="color: rgb(0, 0, 0);">==</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">R</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">)<br></span><span style="color: rgb(0, 128, 128);">28</span><span style="color: rgb(0, 0, 0);"><img id="Codehighlighter1_819_995_Open_Image" onclick="this.style.display='none'; Codehighlighter1_819_995_Open_Text.style.display='none'; Codehighlighter1_819_995_Closed_Image.style.display='inline'; Codehighlighter1_819_995_Closed_Text.style.display='inline';" src="../../Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_819_995_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_819_995_Closed_Text.style.display='none'; Codehighlighter1_819_995_Open_Image.style.display='inline'; Codehighlighter1_819_995_Open_Text.style.display='inline';" src="../../Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_819_995_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="../../Images/dot.gif"></span><span id="Codehighlighter1_819_995_Open_Text"><span style="color: rgb(0, 0, 0);">{<br></span><span style="color: rgb(0, 128, 128);">29</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">if</span><span style="color: rgb(0, 0, 0);">(pos</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">len)<br></span><span style="color: rgb(0, 128, 128);">30</span><span style="color: rgb(0, 0, 0);"><img id="Codehighlighter1_897_968_Open_Image" onclick="this.style.display='none'; Codehighlighter1_897_968_Open_Text.style.display='none'; Codehighlighter1_897_968_Closed_Image.style.display='inline'; Codehighlighter1_897_968_Closed_Text.style.display='inline';" src="../../Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img id="Codehighlighter1_897_968_Closed_Image" style="display: none;" onclick="this.style.display='none'; Codehighlighter1_897_968_Closed_Text.style.display='none'; Codehighlighter1_897_968_Open_Image.style.display='inline'; Codehighlighter1_897_968_Open_Text.style.display='inline';" src="../../Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span id="Codehighlighter1_897_968_Closed_Text" style="border: 1px solid rgb(128, 128, 128); display: none; background-color: rgb(255, 255, 255);"><img src="../../Images/dot.gif"></span><span id="Codehighlighter1_897_968_Open_Text"><span style="color: rgb(0, 0, 0);">{<br></span><span style="color: rgb(0, 128, 128);">31</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pos</span><span style="color: rgb(0, 0, 0);">++</span><span style="color: rgb(0, 0, 0);">;<br></span><span style="color: rgb(0, 128, 128);">32</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);">33</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"><br></span><span style="color: rgb(0, 128, 128);">34</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);">35</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);">36</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"><br></span><span style="color: rgb(0, 128, 128);">37</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 255);">return</span><span style="color: rgb(0, 0, 0);">&nbsp;pos;<br></span><span style="color: rgb(0, 128, 128);">38</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: rgb(0, 0, 0);"><br></span><span style="color: rgb(0, 128, 128);">39</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/InBlock.gif" align="top"><br></span><span style="color: rgb(0, 128, 128);">40</span><span style="color: rgb(0, 0, 0);"><img src="../../Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</span></span></div>
	
<h3>Feedback</h3>
	
			<div class="post">
				<div class="posthead">
					<h2>
						<a title="permalink: re: GOOGLE挑战赛练习题3及答案(1000分) " href="../../bibi/archive/2005/11/28/21624.html#21835">#</a>&nbsp;<a name="21835"></a>re: GOOGLE挑战赛练习题3及答案(1000分) &nbsp;&nbsp;<a onclick="SetReplyAuhor('superwu')" href="../../bibi/archive/2005/11/28/21624.html#post">回复</a>
						&nbsp;&nbsp;
					</h2>
					2005-11-29 16:08 by <a id="Comments1_CommentList__ctl0_NameLink" target="_blank">superwu</a>
				</div>
				<div class="postbody">public class CursorPosition {
<br>	public int getPosition(String keystrokes, int N){
<br>		int current=0;
<br>		int end=N;
<br>		int start=0;
<br>		
<br>		
<br>		for(int i=0;i&lt;keystrokes.length();i++){
<br>			char c=keystrokes.charAt(i);
<br>			switch(c){
<br>			case 'L':
<br>				if(current!=start)current--;break;
<br>			case 'R':
<br>				if(current!=end)current++;break;
<br>			case 'H':
<br>				current=0;break;
<br>			case 'E':
<br>				current=N;break;
<br>			}
<br>		}
<br>	return current;
<br>	}
<br>	public static void main(String[] args) {
<br>		CursorPosition c=new CursorPosition2();
<br>		System.out.println(c.getPosition("ERLLL",10));
<br>	}
<br>
<br>}
<br>这道题和你做的几乎一样，效率上应该没有太大差别
<br>但我的了920多分，我觉的是时间的原因，这道题我做的很快就提交了</div>
			</div><img src ="http://www.blogjava.net/Vencent/aggbug/30512.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-02-13 21:38 <a href="http://www.blogjava.net/Vencent/articles/30512.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GOOGLE挑战赛练习题2及答案(500分)</title><link>http://www.blogjava.net/Vencent/articles/30511.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Mon, 13 Feb 2006 13:37:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/30511.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/30511.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/30511.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/30511.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/30511.html</trackback:ping><description><![CDATA[<table><tbody><tr><td colspan="2"><h3>Problem Statement </h3></td></tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp; </td>
<td>A square matrix is a grid of NxN numbers. For example, the following is a 3x3 matrix: <pre> 4 3 5<br> 2 4 5<br> 0 1 9</pre>One
way to represent a matrix of numbers, each of which is between 0 and 9
inclusive, is as a row-major String. To generate the String, simply
concatenate all of the elements from the first row followed by the
second row and so on, without any spaces. For example, the above matrix
would be represented as "435245019".<br><br>You will be given a square
matrix as a row-major String. Your task is to convert it into a
String[], where each element represents one row of the original matrix.
Element i of the String[] represents row i of the matrix. You should
not include any spaces in your return. Hence, for the above String, you
would return {"435","245","019"}. If the input does not represent a
square matrix because the number of characters is not a perfect square,
return an empty String[], {}. </td></tr>
<tr>
<td colspan="2">
<h3>Definition </h3></td></tr>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp; </td>
<td>
<table>
<tbody>
<tr>
<td>Class: </td>
<td>MatrixTool </td></tr>
<tr>
<td>Method: </td>
<td>convert </td></tr>
<tr>
<td>Parameters: </td>
<td>String </td></tr>
<tr>
<td>Returns: </td>
<td>String[] </td></tr>
<tr>
<td>Method signature: </td>
<td>String[] convert(String s) </td></tr>
<tr>
<td colspan="2">(be sure your method is public) </td></tr></tbody></table></td></tr></tbody></table>
<p><br>public class MatrixTool<br>{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public String[]&nbsp; convert(String str)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] matrix = null;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(str==null || str.length()&lt;1)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return matrix;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int total = str.length();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; double d = total/1.0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int len = (int)Math.sqrt(d);</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //check</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;total;i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(str.charAt(i)&gt;='0' &amp;&amp; str.charAt(i)&lt;='9')<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("invaid charareter.");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return matrix;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(len*len == total)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; matrix = new String[len];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;len;i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; matrix[i] = "";<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int j=0;j&lt;len;j++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; matrix[i]+= str.charAt(i*len+j);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return matrix;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void main(String args[]){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MatrixTool mt = new MatrixTool();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] temp = mt.convert("435245019");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;temp.length;i++){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(temp[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>}<br></p>
	
<h3>Feedback</h3>
	
			<div class="post">
				<div class="posthead">
					<h2>
						<a title="permalink: re: GOOGLE挑战赛练习题2及答案(500分)" href="../../bibi/archive/2005/11/28/21623.html#21827">#</a>&nbsp;<a name="21827"></a>re: GOOGLE挑战赛练习题2及答案(500分)&nbsp;&nbsp;<a onclick="SetReplyAuhor('superwu')" href="../../bibi/archive/2005/11/28/21623.html#post">回复</a>
						&nbsp;&nbsp;
					</h2>
					2005-11-29 15:01 by <a id="Comments1_CommentList__ctl0_NameLink" target="_blank">superwu</a>
				</div>
				<div class="postbody">public class MatrixTool {
<br>	public String[] convert(String s){
<br>		String[] error={};
<br>		if(s==null)return error;
<br>		StringBuffer buffer=new StringBuffer(s);
<br>		int length=s.length();
<br>		if(!(length&gt;=1&amp;&amp;length&lt;=50))
<br>			return error;
<br>		double f=Math.sqrt(length);
<br>		
<br>		int n=(int)f;
<br>		if((n*n)!=length)
<br>			return error;
<br>		for(int i=0;i&lt;length;i++){
<br>			if(!Character.isDigit(s.charAt(i)))
<br>				return error;
<br>		}
<br>		int count=0;
<br>		for (int i=n;i&lt;length;i+=n){
<br>			buffer.insert(i+count,'#');
<br>			count++;
<br>		}
<br>		String [] s2=buffer.toString().split("#");
<br>		return s2;
<br>	}
<br>	}
<br>问问为什么我写的只得了202。33分和时间有关系么？</div>
			</div><img src ="http://www.blogjava.net/Vencent/aggbug/30511.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-02-13 21:37 <a href="http://www.blogjava.net/Vencent/articles/30511.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GOOGLE挑战赛练习题1及答案(200分)</title><link>http://www.blogjava.net/Vencent/articles/30510.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Mon, 13 Feb 2006 13:36:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/30510.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/30510.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/30510.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/30510.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/30510.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Problem Statement &nbsp;&nbsp;&nbsp;&nbsp; A simple line drawing program uses a blank 20 x 20 pixel canvas anda directional cursor that starts at the upper left corner pointingstraight down....&nbsp;&nbsp;<a href='http://www.blogjava.net/Vencent/articles/30510.html'>阅读全文</a><img src ="http://www.blogjava.net/Vencent/aggbug/30510.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-02-13 21:36 <a href="http://www.blogjava.net/Vencent/articles/30510.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>KMplayer常见问题整理</title><link>http://www.blogjava.net/Vencent/articles/30384.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Sun, 12 Feb 2006 14:54:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/30384.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/30384.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/30384.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/30384.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/30384.html</trackback:ping><description><![CDATA[<div><font color="Sienna"><b>近期开始尝试使用KMP，发现其还是有很多优点。目前的兼容性和功能还是强于Mplayer
（KK）的，但是发现其配置实在过于复杂，不是很容易上手。现整理出来自己遇到的一些常见问题以及解决方法，希望对于准备尝试KMP和对使用过程中一些问
题还存在疑 惑的朋友能够从这里找到答案，同时希望大家能够分享出自己的经验和心得，以完善和充实。（roebin）。</b></font><br>
<br>
<b>1、播放电影时，想显示中英文双字幕，如何实现双字幕显示？</b><br>
<br>
遇到这种情况可用外挂字幕支持<br>
<br>
1[参数选项]→[滤镜设置]→[滤镜管理器]→[添加扩展滤镜]→KMP目录有个VSFilter.dll(如果没有，下载最新的vobsub，里面有这个文件)，选上。<br>
<br>
2[参数选项]→[滤镜设置]→ 扩展字幕控制 将禁用取消即可<br>
<br>
但是注意在极速模式下不能自动启动vobsub<br>
<br>
<b>2、如何能够让字幕正确显示？</b><br>
<br>
[参数选项]→[字幕处理]→[字体]→语系设置为中文（简体），“默认字幕代码”设置成CHS GB。<br>
<br>
<b>3、Kmplayer拖动播放MOV文件停顿比较明显，这个如何优化？</b><br>
<br>
在[参数选项]→[滤镜设置]里面的Mplayer项内添加 .MOV，同时把QuickTime项内的.MOV删除。<br>
<br>
<b>4、如何让字幕显示在画面下的黑色区域？</b><br>
<br>
[参数选项]→[字幕处理]→绘制到图表层，或者右键菜单[平移与扫描]选择[4：3－纵向拉伸]就可以了。<br>
<br>
<b>5、Kmplayer如何实现多配置文件？</b><br>
<br>
设好一种配置后[参数选项]→[配置备份]将当前配置保存起来，然后在右键菜单里就会多一项选择[参数配置切换]的菜单，就可以恢复到你设置好的一系列参数。<br>
<br>
<b>6、如何下载最新的版本？</b><br>
<br>
KMP正式版下载地址：<a href="http://www.kmplayer.com/down/" target="_blank">http://www.kmplayer.com/down/</a><br>
<br>
KMP测试版下载地址：<a href="http://www.kmplayer.com/beta/" target="_blank">http://www.kmplayer.com/beta/</a><br>
<br>
Real解码器的下载地址：<a href="http://www.kmplayer.com/bbs/data/pds/" target="_blank">http://www.kmplayer.com/bbs/data/pds/</a>类似于KMP_RealMedia_的rar文件，解压到KMPlayer目录下面即可。<br>
<br>
<b>7、如何在不调整系统音量的情况下，增大播放的音量？</b><br>
<br>
选项-&gt;音频处理-&gt;独立音频控制-&gt;声音综合控制-&gt;基本音量调节，范围在0%-400%之间。可以通过Ctrl+TAB查看启用的[Audio DSP]是否设置成功。<br>
<br>
并且不能在极速模式下，要求启用音频特效。<br>
<br>
<b>8、插件目录下文件都有什么用途？</b><br>
<br>
[plugins]目录下都是用于Winamp的插件，允许删除。不过在KMP同步截取功能上可能有些影响，因为要用到里面的音频转换插件，如果保留可以多一些选择性。(enc_ 部分)<br>
<br>
<b>9、用KMP播放影片后，再用其他播放软件播放，影片的色彩就不对了，只有重启后才能正常。请问这个现象如何能够避免？</b><br>
<br>
不要使用硬件色彩控制E和Q来调整亮度，如果怕误调整，可以取消硬件色彩控制的快捷键定义。<br>
<br>
<b>10、看了一半的电影，下次打开该文件想接着继续看，能够实现吗？</b><br>
<br>
右键菜单[播放]→[记住播放位置]<br>
	<br>
<b>11、播放某影片CPU一直占用100％，如何解决？</b><br>
<br>
可以尝试使用下面的方法，更换默认的视频音频解码器。<br>
<br>
1用Tab键 查看一下目前的影片使用的解码器，我们假设视频和音频都是MPEG2编码，月光套件（Moonlight-Elecard MPEG2 Video Decoder）对于MPEG2解码效果很好，并且支持硬件加速，因此我们将解码器更换为月光套件。<br>
<br>
2取消目前MPEG2解码器。[参数选项]→[滤镜设置]→[解码器]→[内置视频解码器] 去选MPEG2。<br>
<br>
3[参数选项]→[滤镜设置]→[解码器]→[扩展视频解码器]，点击“搜索扩展解码器”，这是为了搜索我们安装过的“Moonlight MPEG2 video Decoder”<br>
<br>
4在弹出的窗口中点击“搜索”按钮，经过搜索之后，就会显示在系统中已经安装的解码器列表。<br>
<br>
5点击“确定”按钮后，返回到[扩展视频解码器]窗口，将“MPEG2 视频”的这一项设置为“月光三套件”之视频解码器（Moonlight-Elecard MPEG2 Video Decoder）<br>
<br>
6[参数选项]→[滤镜设置]→[解码器]→[扩展音频解码器]，将“MPEG2 音频”这一项设置为“月光三套件”之音频解码器（Moonlight Odio Dekoda）<br>
<br>
7[参数选项]→[滤镜设置]→[滤镜管理器]→[添加已注册的滤镜]，在滤镜列表中选择“月光三套件”之分离器（Moonlight-Elecard MPEG2 Demultiplexer），点击“确定”。<br>
<br>
8回到[滤镜管理器]窗口后，将这个滤镜的优先级设置为“强制使用”，此时“月光三套件”设置成功了。<br>
<br>
9按Alt＋F切换到急速模式，这样才能使用刚才定义的编码器。<br>
<br>
<b>12、如何播放在线节目？</b><br>
<br>
格式 hxxp://127.0.0.1:8888/X.rm 播放设置方法：<br>
<br>
1[参数选项]→[滤镜设置]→DirectShow中删除.RM。<br>
<br>
2[参数选项]→[滤镜管理器]→[添加已注册滤镜] 添加 RealMedia Source，并作为源过滤器勾选。<br>
<br>
首次打开因为存在缓冲过程需要等少许时间，出现定屏情况可按先暂停播放再继续播放。<br>
<br>
格式 hxxp://127.0.0.1:8888/XXX.asf 播放设置方法:<br>
<br>
1[参数选项]→[滤镜管理器]→[添加已注册滤镜] 添加 Windows Media source filter，并作为源过滤器勾选。<br>
<br>
播放如果出现严重跳帧停顿，可使用KMP预储装置[参数选项]→[滤镜设置]→[内置源滤镜]，预储容量调整为30～50兆。<br>
<br>
<b>13、为什么KMP目录下的文件会自动更新？</b><br>
<br>
如果您在[参数选项]→[一般选项]中选中了“检查是否有新版本”，主程序会自动链接到官方网站更新目录一次的。<br>
<br>
<b>14、为什么在KMP中注册了Vobsub，却不能配置DirectVobSub属性？</b><br>
<br>
如果仅仅是在[添加扩展滤镜]注册了Vobsub，没有安装Vobsub是不能配置DirectVobSub属性的，要想配置DirectVobSub属性，需要在系统中注册VSFilter.dll。注册方法：<br>
<br>
1复制VSFilter.dll到 C:\windows\system32<br>
<br>
2“开始－运行”，输入“regsvr32 vsfilter.dll” <br>
<br>
<b>15、为什么使用KMP显示多字幕，画面会有停顿现象？</b><br>
<br>
建议不要使用KMP自己来显示多字幕，还是使用Vobsub＋KMP的方法。比如让Vobsub来显示英文字幕，用KMP来显示中文字幕。<br>
<br>
禁止KMP显示多字幕的设置方法，[参数选项]→[字幕处理]→[字体]→立即显示SMI中的多国语言字幕 取消选中即可。<br>
<br>
另：vobsub调用字幕是按照字母顺序的。指定vobsub仅播放英文字幕的方法是（中文同理）：<br>
<br>
1播放影片。<br>
<br>
2手动选择播放英文字幕。<br>
<br>
3然后选中DirectVobSub属性中→[其他]→立即应用更改。<br>
<br>
以后vobsub会记住这种格式的字幕而优先选择了。<br>
<br>
<b>16、常用快捷键</b><br>
<br>
软件色彩调整 U增加，T降低。（使用kmp播放器内置解码器的时候使用）<br>
<br>
Ctrl+L 用来切换字幕语言。<br>
<br>
Ctrl+[ 下移字幕位置。<br>
<br>
Ctrl+] 上移字幕位置。 <br>
<br>
PageUp PageDown 用来播放上一集下一集。<br>
<br>
方向键 快进，后退。<br>
<br>
Scroll Lock 可以在屏幕右上角显示当前播放时间。</div>
		<!-- / message -->
	
		
		
		
		<!-- edit note -->
			
				<em>
				</em><img src ="http://www.blogjava.net/Vencent/aggbug/30384.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-02-12 22:54 <a href="http://www.blogjava.net/Vencent/articles/30384.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>昨天收到的email</title><link>http://www.blogjava.net/Vencent/articles/30303.html</link><dc:creator>Vincent Chen</dc:creator><author>Vincent Chen</author><pubDate>Sat, 11 Feb 2006 14:31:00 GMT</pubDate><guid>http://www.blogjava.net/Vencent/articles/30303.html</guid><wfw:comment>http://www.blogjava.net/Vencent/comments/30303.html</wfw:comment><comments>http://www.blogjava.net/Vencent/articles/30303.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Vencent/comments/commentRss/30303.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Vencent/services/trackbacks/30303.html</trackback:ping><description><![CDATA[<p>本邮件为公益邮件，非营利。随缘而发，若您有缘收到，读完全文，心生欢喜，那是您与佛有缘；如果您能将此邮件转发给10个以上的好友，让益世文选流通世上，您将得蒙菩萨慈护，福寿绵延，家运日隆</p>
<p><br>【拒女淫奔】</p>
<p>明朝宁波地方有位叫孙道的读书人，因家里贫穷，就靠着教导孩童读书，作为生活的经济来源。后来连这份职业也不保，于是寄身到塘西
张氏家，帮忙抄抄写写，换取衣食。有一天深夜，张家有一婢女，偷偷的跑到孙道的房间，孙道知其来意，严词的拒绝。而这情景，却被张家的私塾老师看见，老师
就私下招婢女相会。到了端午节时，该名老师疽疮发作，无法痊愈，这时主人只好请孙道升任老师。</p>
<p>有一天，孙道在江口碰到他的叔叔，他的叔叔惊讶的说：「我因儿子的病，在城隍庙祈祷，当天晚上就作了一个梦，梦见城隍爷坐在殿上，呼唤属下将命中本
要饿死的人，将其名字删改，名字一个一个的念，念到大概十几人，我就听到你的名字。我偷偷的问那冥官，为什么孙道可以改去？冥官说：『这个人的本命，在四
十六岁时，会饿死他乡。因为今年四月十八日夜晚，严拒婢女淫奔，所以延长寿命二纪（一纪等于十二年），改饥馑籍为禄籍。』」</p>
<p>后来，跟着孙道学习的学生，越来越多，每年学生所贡上的学资就百余两黄金。到了明万历三十六年，孙道四十六岁，也就是他命中本该饿死的那年，果然闹
饥荒，米价变得十分昂贵，穷人根本无钱购买，当时饿死的人很多。但是，孙道不但逃过这一劫，而且还十分的富裕，到了晚年，孙府已成巨富之家。在他七十岁
时，应验延寿二纪，无疾而终。</p>
<p><br>【艳福非福】</p>
<p>裴章，山西省河东地区人，他的父亲与神僧昙照法师极为友善。昙师精于相术，他看裴章的相，天庭饱满，地阁方圆，将来的功名事业，一定很有成就。</p>
<p>裴章二十岁时，娶妻李氏，隔年裴章到太原作官，妻子则留在家中。数年后，裴章又遇见昙照法师，昙师十分惊讶的说：「多年以前，我看你是显贵之相，现
在怎么变了呢？过去你的天庭饱满，现在怎么天庭有倾陷之象呢？过去你的地阁方圆，现在怎么地阁尖削了呢？再看你的掌心有黑气盘绕，恐有不测之祸，宜谨慎防
范。你的相变得这样多，不知做了什么缺德的事？」</p>
<p>裴章听了，自己反省数年来的所作所为，只有在太原与女人私通，算是有违伦理，其它并无做出有亏良心的事。昙照法师叹了一口气说：「你本来有美好的前
程，奈何不知珍重，与别的女人行淫，你这样自己摧残福德，实在太可惜。」过不多久，裴章真的如昙照法师预言有灾祸临身。有一次，裴章在浴室洗澡，他的部下
进入行刺，刀中腹部，五脏尽出而死。</p>
<p><br>【邪淫果报】</p>
<p>非正式夫妻而行淫事者，是为邪淫。此事天地所不容，神鬼所愤怒。一有此心，虽未行其事，已大损阴骘。实犯者，非仅己身必有灾祸，且殃及家室子孙；不惟现世感受苦果，更延及未来长劫。</p>
<p>邪淫之事，即是以短暫之時光，造弥天之罪恶。是故凡犯邪淫者，由此而夺命者有之，由此而减禄者有之，由此而破家者有之，由此而绝嗣者有之。或有命中
本该富贵尊荣，因而贫困潦倒终生；或有命中本是寿山福海，却遭外伤内病夭亡；或有妻女原是贞良贤淑，却成他人淫玩伴侣。邪淫现世恶报，莫论古之典籍记述甚
多，今之报章亦日日刊载。凡此报导，若细心探其前因后果，则知祸福无门，惟人自召；善恶之报，如影随形。</p>
<p><br>淫恶之报，天律最严。奸人妻女，玷人闺门，在地狱中受苦五百劫，方得脱生为驴为马，又五百劫，乃复人身，为娼为优。设谋造计，奸宿寡妇尼
僧，败人操履，在地狱中受苦八百劫，方得脱生为羊为豕，供人宰杀，又八百劫，乃复人身，为瞽为哑。以卑乱尊，以长乱幼，败坏纲常，在地狱中受苦一千五百
劫，方得脱生为蛇为鼠，又一千五百劫，方得人身，或在母胎中死，或在孩抱中亡，毕竟不享天年。」</p>
<p>地狱之苦，苦不堪言。书云：「地狱诸苦，极难堪忍；于一日中，以三百矛，无间猛刺，所有痛苦，于地狱中，微苦少分，亦莫能比。」若入无间地狱，超脱
之日更是遥遥无期。智者深思，一时半刻，换得长劫大苦。至愚者莫此为甚！至惨者莫此为甚！（劫：时间单位，约合十三亿四千三百八十四万年）</p>
<p><br>普劝世人，未曾犯邪淫者，当自庆幸，并务期懔懔守持，谨防失足。俊美面容，须知是带肉骷髅；姣好身躯，不过是缠筋骼骸。薄皮包裹脓血屎尿，
九孔常出不净秽物。花瓶盛粪，人不把玩；蒙衣漏厕，岂值贪恋！前贤云：「他诱我杀身破家、损寿折福，实害我性命的物事，该把作杀人利刃看、作虎狼看、作毒
蛇看、作勾魂鬼使看、作前生怨对看。」</p>
<p><br>当邪缘凑临时，要有斩钉截铁之气势，毅然立定脚跟；急思，身旁鬼神怒目切齿见我一举一动；头上三台明察秋毫看我一言一行。若一念失守，子孙
之富贵福禄在此断送；阎王之严惩簿上由此具名。现生则神诛鬼戮破家败身，殁后堕入地狱极刑伺候。知好歹者，能不忍乎哉！能不力退邪缘哉！</p>
<p>邪淫之罪已是极重，引发他人邪淫其罪更重。天戒录云：「造作淫书，坏人心术，死入无间地狱，直至其书灭尽，因其书而作恶者，罪报皆空，方得脱生。」
由此可知，印造淫书者，阴惩当是无量无边；贩卖流通者，果报必定非轻非浅。而今之色情光盘与网站，乱人心志尤甚淫书，凡制作者、租售者、展转流通者，其所
感之祸殃恶果，岂不更为凄惨酷烈乎！</p>
<p>引发他人邪淫之罪既重，则知杜防他人邪淫之功必广。杜防之道，展转流通福善祸淫之文以警世人，是为其一。若因而劝诫多人不犯邪淫，则阖潭将可久膺多
福，裔世也能长发其祥。若曾自犯邪淫者，或曾引发他人而犯者，应痛切悔改，力行此事。以杜邪之功，劝善之德，并以改往修来之恳到心，忏赎昔日之罪愆，庶几
可消减祸殃。若功深德厚，则灾障消而福星照临也。</p>
<p>【寿康宝鉴劝读文】</p>
<p>当今之世，古道沦亡。色情光盘，垂手可得；网际网络，助长嚣风。欲火焚烧，何能制心；心若不制，淫恶难除。望我同胞，切勿观看；一念稍疏，陷溺难
返。寿康宝鉴，欲海清流；圣贤垂训，福善祸淫。时时警惕，置之座右；日日阅读，神清气爽。盛德君子，贞洁淑媛；人人赞叹，鬼神钦敬。灾障消灭，福寿绵延；
家运日隆，民风日美。是为劝！</p>
<p>【如何取得寿康宝鉴】</p>
<p>电子书:请上</p>
<p><a href="http://www.bfnn.org/">http://www.bfnn.org</a></p>
<p>点选般若文海简体,再点选戒淫文选,再点选寿康宝鉴。文言文,词句优美,读诵较为顺畅。并可点选寿康宝鉴白话编译对照。</p>
<p>【放生免瘟疫】</p>
<p>江苏太湖附近的人家，多数是网鸟捉鱼为生，而沈文宝及其家人，却见人捕获鱼鸟，常常买来放生。有一年，瘟疫流行，有人夜里看见疫鬼拿旗一把说：「除了放生的沈家，其余的家门都要插旗。」没多久，全村感染疫病而死的超过大半，只有沈文宝家没人被传染。</p>
<p>【戒杀放生 增福延寿】</p>
<p>若想长寿，则应放生，《放生赞》云：「汝欲延生听我语，凡事惺惺须求己，汝欲延生须放生，此是循环真道理。他若死时你救他，你若死时天救你，延生生子无别方，戒杀放生而已矣。」又弥勒菩萨偈云：「劝君勤放生，终久得长寿，若发菩提心，大难天须救。」</p>
<p>有些人的病症，是宿世或今生杀业的果报，此种怨业病，医药很难起作用，若行放生增长善业，医治则较能得力。杭州有一个打鸟为业的人，背上长疮，大夫
无能为力，慢慢的，他自己知道是今生杀生的果报，于是发誓不再杀生，并作放生，此后诊治便有了效力而逐渐痊愈。在西藏也有很多被医生诊断为必死的病人，经
家人去放生、念经，就逐渐恢复生命的活力。尤其是医生无法诊断的怪病，均是自己宿世或今生杀害众生的业感现前，此时，惟有放生为好。</p>
<p><br>在清朝道光年间有一位太守，身患重病，正在生命垂危之际，他发誓愿云：「从今之后，饶益一切有情，忏悔自己的业障。」当夜，观世音菩萨在梦
中示现对他说：「你昔日杀业重，今得短命报，幸好此时，能发坚固誓愿，惟有放生可以延寿，且可增福禄。」他醒后大有感悟，于是全家戒杀，常常放生，后来其
病体真的痊愈了。</p>
<p>最近西藏炉霍县有一位牧民，多年患疾，十分痛苦，去过很多医院，皆无效益。后来有一位僧人打卦说：「妳前世杀生极多，若不放生，则短命多病。」此后她发心放生，渐渐就无病无苦，如今她特别相信因果，每年皆捐款放生。</p>
<p><br>若遭遇严重的疾病而接近死亡寿尽之时，只有放生，才能增福延寿。从前苏州有一位王大林，每当看见村中的小孩们捕捉玩弄鱼鸟等动物时，他就致
力劝止并给钱赎来放生，他说：「少年时，必须培养爱惜物命的美德，不可养成残忍好杀的坏习气。」他孜孜不倦劝人行善断恶，在他六十一岁将死时，于自己觉知
的境界中，听到圣尊告诉他说：「你平生放生，有极大功德，将可增福延寿三十六年。」后来在他九十七岁时无病善逝。</p>
<p>同样有一位叫果才的藏族人，由很多空行母等具神通者说，他只能活三十一岁，若能放生诵咒，尚可延寿，他立即放生甚多，每年放生护生，今已五十岁。还
有相同的实事，从前有一位屈师，到市镇去买一条赤色鲤鱼放生，后来屈师生病时梦见龙王，并对他说：「先生本来寿命已尽，因救龙子一命，增延福寿十二年。」
他救鲤鱼时四十八岁，后来活到六十岁。所以，在人间寿命不长的人，应当发心放生，才能增福延寿。</p>
<p><br>四川遂宁市有一位医生，她在海内外影响极大，她的家里挂满了锦旗，这些锦旗都是经其治疗而痊愈的病人所敬献的，以此感谢并表彰其医术的高
明，现在她已是成千上万人的救命恩人。经过她治愈的人都说，当医疗无效时，这位医生就劝病人放生、念经等，遵照嘱咐，广行放生等善行后，许多病人的身体就
慢慢康复。因此可说，放生是一种特异功能的治病方法。</p>
<p><br>相反，杀生则是短命多病的直接之因。本来能活长久的人，若喜欢杀生，则成短命。西藏阿梨阿旺扎巴云：「若行救命放生者，短命亦成长寿，若杀鱼蛇等含生，长寿者亦成短命。」自古以来，放生转短命为长寿者，不胜枚举。</p>
<p>我们若能时时以慈心推及物类，自己做到戒杀放生，又广劝他人戒杀放生，则一切事必能吉祥如意，正如《太上感应篇》所说的「吉神佑之，福禄随之。」华
智仁波切亦云：「恒时行善放生者，护法地神常佑彼。」《护生的故事》云：「如影随形，古今善恶报应，昭昭分明，感应事迹，历历在目，尚有何疑？」</p>
<p>【杀生为因 瘟疫为果】</p>
<p>世间至重者，性命也；天下最惨者，杀伤也。由杀生故，怨业积累，戾气所感，遂有瘟疫天灾。</p>
<p>【同念南无观世音菩萨，消灾免难】注:南无音拿摩</p>
<p>观世音菩萨，誓愿宏深，寻声救苦。若遇刀兵、水火、饥馑、虫蝗、瘟疫、旱涝、贼匪、怨家、恶兽、毒蛇、恶鬼、妖魅、怨业病、小人陷害等患难者，能发改过迁善，自利利人之心，至诚恳切念观世音，念念无间，决定得蒙慈护，不致有何危险。</p><img src ="http://www.blogjava.net/Vencent/aggbug/30303.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Vencent/" target="_blank">Vincent Chen</a> 2006-02-11 22:31 <a href="http://www.blogjava.net/Vencent/articles/30303.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>