<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[宝华的博客]]></title> 
<link>http://agileblog.cn/index.php</link> 
<description><![CDATA[专注于服务器端脚本语言、数据库的开发]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[宝华的博客]]></copyright>
<item>
<link>http://agileblog.cn/What-Is-Web-2-0/</link>
<title><![CDATA[What Is Web 2.0?]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[软件开发]]></category>
<pubDate>Sat, 04 Sep 2010 14:36:40 +0000</pubDate> 
<guid>http://agileblog.cn/What-Is-Web-2-0/</guid> 
<description>
<![CDATA[ 
	<span style="font-size: 18px;">Using standards-compliant HTML and CSS. </span>This allows sites to work across many platformsand helps with accessibility. This includes the use of microformats to generatefriendly HTML that can be used across a variety of platforms<br/>使用标准兼容的HTML和CSS<br/><span style="font-size: 18px;">Using Ajax to provide a rich user interface. </span>By performing trivial operations in thebackground using XMLHttpRequest, web pages can be more functional and intuitive.<br/>使用Ajax提供丰富的用户界面<br/><span style="font-size: 18px;">Sharing data using web feeds and web services. </span>Users like to aggregate many feeds toeasily receive content updates from their favorite sites using web feeds (such as RSS orAtom). Additionally, web services can enable one site to use data from other sites<br/>共享数据使用网络订阅源和网络服务<br/><span style="font-size: 18px;">Incorporating social networking tools.</span> Blogs and forums can enable users to communicatewith each other.<br/>结合社会网络工具<br/>Tags - <a href="http://agileblog.cn/tags/what-is-web-2.0/" rel="tag">what-is-web-2.0</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/PowerDesigner-Association/</link>
<title><![CDATA[PowerDesigner association失效的解决办法]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Java开发]]></category>
<pubDate>Fri, 03 Sep 2010 14:54:15 +0000</pubDate> 
<guid>http://agileblog.cn/PowerDesigner-Association/</guid> 
<description>
<![CDATA[ 
	新安装了PowerDesigner15.1，在建立数据概念模型的时候，association按钮便变灰了，无法使用。以下是截图<br/><a href="http://agileblog.cn/attachment.php?fid=211" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=211" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>解决办法是<br/>选择Tools====》<br/>Model Options====><br/>Notation===>E/R+Merise选项即可<br/><a href="http://agileblog.cn/attachment.php?fid=212" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=212" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://agileblog.cn/attachment.php?fid=213" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=213" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>Tags - <a href="http://agileblog.cn/tags/powerdesigner/" rel="tag">powerdesigner</a> , <a href="http://agileblog.cn/tags/association/" rel="tag">association</a> , <a href="http://agileblog.cn/tags/%25E5%25A4%25B1%25E6%2595%2588/" rel="tag">失效</a> , <a href="http://agileblog.cn/tags/%25E8%25A7%25A3%25E5%2586%25B3%25E6%2596%25B9%25E6%25B3%2595/" rel="tag">解决方法</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/eAccelerator-Configure/</link>
<title><![CDATA[eAccelerator配置和使用指南]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Fri, 03 Sep 2010 10:26:36 +0000</pubDate> 
<guid>http://agileblog.cn/eAccelerator-Configure/</guid> 
<description>
<![CDATA[ 
	目录：<br/>一、eAccelerator介绍<br/>1、背景<br/>2、原理<br/>二、安装和配置<br/>1、支持平台<br/>2、系统要求<br/>3、安装<br/>4、php.ini文件配置<br/>5、验证安装<br/>三、使用eAccelerator开发PHP代码<br/>1、API文档和接口说明<br/>2、开发范例<br/>四、附录和参考资料<br/>一、eAccelerator介绍<br/><br/>1、背景<br/>eAccelerator 是一个免费开源的PHP加速、优化、编译和动态缓存的项目，它可以通过缓存PHP代码编译后的结果来提高PHP脚本的性能，使得一向很复杂和离我们很远的PHP脚本编译问题完全得到解决。通过使用eAccelerator，可以优化你的PHP代码执行速度，降低服务器负载，可以提高PHP应用执行速度最高达10倍。<br/><br/>eAccelerator 项目诞生于2004年，当时它是作为 Turck MMCache 项目的一个分支提出并投入开发的。 Turck MMCache 由 Dmitry Stogov 开发，是个非常优秀的PHP内存缓存加速系统，如今仍然有很大部分 eAccelerator 的代码应用到该项目中，目前该项目有很长时间没有更新了，对于最新的PHP5.x的支持还未推出。 <br/><br/>2、原理<br/>eAccelerator 通过把经过编译后的PHP代码缓存到共享内存中，并在用户访问的时候直接调用从而起到高效的加速作用。它的效率非常高，从创建共享内存到查找编译后的代码都在非常短的时间内完成，对于不能缓存到共享内存中的文件和代码，eAccelerator还可以把他们缓存到系统磁盘上。 <br/><br/>eAccelerator 同样还支持PHP代码的编译和解释执行，你可以通过encoder.php脚本来对php代码进行编译达到保护代码的目的，经过编译后的代码必须运行在安装了eAccelerator的环境下。eAccelerator编译后的代码不能被反编译，它不象其他一些编译工具那样可以进行反编译，这将使得代码更加安全和高效。<br/><br/>二、eAccelerator安装配置<br/><br/>1、支持平台<br/>由于aAccelerator提供了大部分基于共享内存的API，所以在*nix的平台上将得到更好的支持，虽然也发布了基于windows平台的binary版本，但我在这里就只提供基于*nix平台的配置和说明，目前可以支持的平台包括Linux, FreeBSD, OpenBSD, Mac OS X, Solaris, AIX en HP-UX。<br/><br/>2、系统要求<br/>php4 or php5<br/>autoconf<br/>automake<br/>libtool<br/>m4<br/>eAccelerator 只支持使用 mod_php 或者 fastcgi mode 安装的PHP<br/>3、安装<br/>先去eAccelerator官方下载最新版的源码包：<a href="attachment.php?fid=210">点击这里下载文件</a><br/><br/><div class="code"><br/>#tar -zxvf ./eaccelerator-0.9.6.1.tar.bz2<br/>#cd eaccelerator-0.9.6.1-beta2<br/>#export PHP_PREFIX=&quot;/usr/local&quot; （把PHP安装目录导入到环境变量，FreeBSD默认是/usr/local）<br/>#$PHP_PREFIX/bin/phpize<br/>#./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config<br/>#make<br/>#make install<br/><br/></div><br/>4、ini文件配置<br/>安装完成，下面开始配置php.ini文件,eAccelerator提供了两种配置和调用方式，分别如下。<br/><br/>安装为 Zend extension 模式：<br/><div class="code"><br/>zend_extension=&quot;/usr/local/lib/php/20050922/eaccelerator.so&quot;<br/>eaccelerator.shm_size=&quot;16&quot;<br/>eaccelerator.cache_dir=&quot;/tmp/eaccelerator&quot;<br/>eaccelerator.enable=&quot;1&quot;<br/>eaccelerator.optimizer=&quot;1&quot;<br/>eaccelerator.check_mtime=&quot;1&quot;<br/>eaccelerator.debug=&quot;0&quot;<br/>eaccelerator.log_file = &quot;/var/log/httpd/eaccelerator_log&quot;<br/>eaccelerator.filter=&quot;&quot;<br/>eaccelerator.shm_max=&quot;0&quot;<br/>eaccelerator.shm_ttl=&quot;0&quot;<br/>eaccelerator.shm_prune_period=&quot;0&quot;<br/>eaccelerator.shm_only=&quot;0&quot;<br/>eaccelerator.compress=&quot;1&quot;<br/>eaccelerator.compress_level=&quot;9&quot;<br/></div><br/>如果你使用了thread safe模式安装的PHP，你必须使用 “zend_extension_ts” 替换第一行的 “zend_extension”. <br/><br/>安装为 PHP extension 模式：（这是大部分采用的方式）<br/><div class="code"><br/>extension=&quot;eaccelerator.so&quot;<br/>eaccelerator.shm_size=&quot;16&quot;<br/>eaccelerator.cache_dir=&quot;/tmp/eaccelerator&quot;<br/>eaccelerator.enable=&quot;1&quot;<br/>eaccelerator.optimizer=&quot;1&quot;<br/>eaccelerator.check_mtime=&quot;1&quot;<br/>eaccelerator.debug=&quot;0&quot;<br/>eaccelerator.log_file = &quot;/var/log/httpd/eaccelerator_log&quot;<br/>eaccelerator.filter=&quot;&quot;<br/>eaccelerator.shm_max=&quot;0&quot;<br/>eaccelerator.shm_ttl=&quot;0&quot;<br/>eaccelerator.shm_prune_period=&quot;0&quot;<br/>eaccelerator.shm_only=&quot;0&quot;<br/>eaccelerator.compress=&quot;1&quot;<br/>eaccelerator.compress_level=&quot;9&quot;<br/></div><br/>有关php.ini文件的详细配置说明，请参照源码目录的README文档或者访问官方文档：<a href="http://eaccelerator.net/wiki/Settings" target="_blank">ini setting</a><br/><br/>完成安装配置后，我们最后要创建缓存目录<br/><div class="code">#mkdir /tmp/eaccelerator<br/>#chmod 777 /tmp/eaccelerator<br/></div><br/>5、验证安装结果<br/>通过浏览器访问您的phpinfo()页面或者运行 php -i 得到php配置信息，里面如果看到类似下面的信息就表示安装成功了。<br/><div class="code"><br/>This program makes use of the Zend Scripting Language Engine:<br/>Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies<br/>&nbsp;&nbsp;&nbsp;&nbsp;with eAccelerator v0.9.5-beta2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator<br/></div><br/><br/>我的机器上同时还安装了Zend Optimizer3.0.1，所以看到的信息如下：<br/><div class="code"><br/>This program makes use of the Zend Scripting Language Engine:<br/>Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies<br/>&nbsp;&nbsp;&nbsp;&nbsp;with eAccelerator v0.9.5-beta2, Copyright (c) 2004-2006 eAccelerator, by eAccelerator<br/>&nbsp;&nbsp;&nbsp;&nbsp;with Zend Extension Manager v1.0.10, Copyright (c) 2003-2006, by Zend Technologies<br/>&nbsp;&nbsp;&nbsp;&nbsp;with Zend Optimizer v3.0.1, Copyright (c) 1998-2006, by Zend Technologies<br/></div><br/>如果你打开了eAccelerator的debug选项，可以从日志中看到类似下面的信息<br/><div class="code"><br/>#tail /var/log/httpd/eAccelerator_log<br/>EACCELERATOR hit: &quot;/var/www/toplee.com/blog/index.php&quot;<br/>EACCELERATOR hit: &quot;/var/www/toplee.com/blog/wp-blog-header.php&quot;<br/>EACCELERATOR hit: &quot;/var/www/toplee.com/blog/wp-config.php&quot;<br/>EACCELERATOR hit: &quot;/var/www/toplee.com/blog/wp-settings.php&quot;<br/>EACCELERATOR hit: &quot;/var/www/toplee.com/blog/wp-content/plugins/wp-cache/wp-cache-phase1.php&quot;<br/>...<br/></div><br/>以上信息表示文件都得到了缓存和命中。<br/><br/>至此，我们就完成了全部的安装和配置，好好享受eAccelerator带给你的惊喜吧，根据Michael的测试，效果的确相当的好。<br/>三、在PHP中可以使用eAccelerator的API开发<br/><br/>1、API和文档说明：<br/><br/>eAccelerator提供了便捷便捷而又稳定的本机缓存实现方式，由于大部分代码实现基于共享内存，所以只能在Unix平台中使用，Windows平台Michael就暂时不知道何时有这方面的支持了。<br/>eAccelerator提供如下的API接口和文件：（下述文件均在源码包的doc/php/目录下）<br/><br/>文件列表：<br/><div class="code"><br/>cache.php<br/>dasm.php<br/>encoder.php<br/>info.php<br/>loader.php<br/>session.php<br/>shared_memory.php<br/></div><br/>接口列表：<br/><div class="code"><br/>array eaccelerator_cached_scripts () <br/>void eaccelerator_cache_output (string $key, string $eval_code, &#91;int $ttl = 0&#93;) <br/>void eaccelerator_cache_page (string $key, &#91;int $ttl = 0&#93;) <br/>void eaccelerator_cache_result (string $key, string $code, &#91;int $ttl = 0&#93;)<br/>void eaccelerator_caching (boolean $flag) <br/>void eaccelerator_clean () <br/>void eaccelerator_clear ()<br/>array eaccelerator_dasm_file (mixed $filename) <br/>mixed eaccelerator_encode (mixed $src, &#91;mixed $prefix = &#039;&#039;&#93;, &#91;string $pre_content = &#039;&#039;&#93;, &#91;string $post_content = &#039;&#039;&#93;)&nbsp;&nbsp;<br/>void eaccelerator_gc ()<br/>mixed eaccelerator_get (string $key)&nbsp;&nbsp;<br/>array eaccelerator_info () <br/>array eaccelerator_list_keys ()<br/>void eaccelerator_load () <br/>boolean eaccelerator_lock (string $key)<br/>void eaccelerator_optimizer (boolean $flag)&nbsp;&nbsp;<br/>void eaccelerator_purge () <br/>boolean eaccelerator_put (string $key, mixed $value, &#91;int $ttl = 0&#93;) <br/>array eaccelerator_removed_scripts () <br/>boolean eaccelerator_rm (string $key) <br/>void eaccelerator_rm_page (string $key)&nbsp;&nbsp;<br/>boolean eaccelerator_set_session_handlers () <br/>boolean eaccelerator_unlock (string $key)<br/></div><br/>有关上述文档详细说明请参考官方文档：<a href="http://bart.eaccelerator.net/doc/phpdoc/" target="_blank">API Documents</a><br/>下面有部分网友翻译后的接口说明：<br/><div class="code"><br/>eaccelerator_put($key, $value, $ttl=0)<br/>&nbsp;&nbsp;将 $value 以 $key 为键名存进缓存(php4下支持对像类型，看源码好像zend2里不支持了)，$ttl 是这个缓存的生命周期，单位是秒，省略该参数或指定为 0 表示不限时，直到服务器重启清空为止。<br/> <br/>eaccelerator_get($key)<br/>&nbsp;&nbsp;根据 $key 从缓存中返回相应的 eaccelerator_put() 存进去的数据，如果这项缓存已经过期或不存在那么返回值是 NULL<br/> <br/>eaccelerator_rm($key)<br/>&nbsp;&nbsp;根据 $key 移除缓存<br/> <br/>eaccelerator_gc()<br/>&nbsp;&nbsp;移除清理所有已过期的 key <br/> <br/>eaccelerator_lock($key)<br/>&nbsp;&nbsp;为 $key 加上锁定操作，以保证多进程多线程操作时数据的同步。需要调用 eaccelerator_unlock($key) 来释放这个锁或等待程序请求结束时自动释放这个锁。<br/>&nbsp;&nbsp;例如:<br/>&nbsp;&nbsp;&lt;?php<br/>&nbsp;&nbsp;&nbsp;&nbsp;eaccelerator_lock(&quot;count&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;eaccelerator_put(&quot;count&quot;,eaccelerator_get(&quot;count&quot;)+1));<br/>&nbsp;&nbsp;?&gt;<br/> <br/>eaccelerator_unlock($key)<br/>&nbsp;&nbsp;根据 $key 释放锁<br/> <br/>eaccelerator_cache_output($key, $eval_code, $ttl=0)<br/>&nbsp;&nbsp;将 $eval_code 代码的输出缓存 $ttl 秒，（$ttl参数同 eacclerator_put）<br/>&nbsp;&nbsp;例如：<br/>&nbsp;&nbsp;&lt;?php eaccelerator_cache_output(&#039;test&#039;, &#039;echo time(); phpinfo();&#039;, 30); ?&gt;<br/> <br/>eaccelerator_cache_result($key, $eval_code, $ttl=0)<br/>&nbsp;&nbsp;将 $eval_code 代码的执行结果缓存 $ttl 秒，（$ttl参数同 eacclerator_put），类似 cache_output<br/>&nbsp;&nbsp;例如：<br/>&nbsp;&nbsp;&lt;?php eaccelerator_cache_result(&#039;test&#039;, &#039; time() . &quot;Hello&quot;;&#039;, 30); ?&gt;<br/> <br/>eaccelerator_cache_page($key, $ttl=0)<br/>&nbsp;&nbsp;将当前整页缓存 $ttl 秒。<br/>&nbsp;&nbsp;例如：<br/>&nbsp;&nbsp;&lt;?php<br/>&nbsp;&nbsp;&nbsp;&nbsp;eaccelerator_cache_page($_SERVER&#91;&#039;PHP_SELF&#039;&#93;.&#039;?GET=&#039;.serialize($_GET),30);<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo time();<br/>&nbsp;&nbsp;&nbsp;&nbsp;phpinfo();<br/>&nbsp;&nbsp;?&gt;<br/> <br/>eaccelerator_rm_page($key)<br/>&nbsp;&nbsp;删除由&nbsp;&nbsp;eaccelerator_cache_page() 执行的缓存，参数也是 $key<br/></div><br/>2、PHP代码中使用eAccelerator加速<br/><br/>下面有一个测试的代码，你可以测试一下eAccelerator强大的威力：（该代码在 cli 模式下可能无效）<br/><div class="code"><br/>&lt;?php<br/>class test_cache &#123;<br/>&nbsp;&nbsp;var $pro = &#039;hello&#039;;<br/> <br/>&nbsp;&nbsp;function test_cache() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo &quot;Object Created!&lt;br&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;function func() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo &#039;, the world!&#039;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;function now($t) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;echo date(&#039;Y-m-d H:i:s&#039;, $t);<br/>&nbsp;&nbsp;&#125;<br/>&#125;<br/> <br/>$tt = eaccelerator_get(&quot;test_tt&quot;);<br/>if (!$tt)<br/>&#123;<br/>&nbsp;&nbsp;$tt = new test_cache;<br/>&nbsp;&nbsp;eaccelerator_put(&quot;test_tt&quot;, $tt);<br/>&nbsp;&nbsp;echo &quot;no cached!&lt;br&gt;&#92;n&quot;;<br/>&#125;<br/>else &#123;<br/>&nbsp;&nbsp;echo &quot;cached&lt;br&gt;&#92;n&quot;;<br/>&#125;<br/> <br/>echo $tt-&gt;pro; <br/>$tt-&gt;func();<br/>$tt-&gt;now(time() + 86400);<br/>?&gt;<br/></div><br/>另外，据说在著名的vBulletin 3.60Beta版里面已经集成了对eAccelerator的支持，下面是一段来自vBulletin里面的代码<br/><div class="code"><br/>// ############################################################################# <br/>// eAccelerator <br/> <br/>/** <br/>* Class for fetching and initializing the vBulletin datastore from eAccelerator <br/>* <br/>* @package&nbsp;&nbsp;&nbsp;&nbsp;vBulletin <br/>* @version&nbsp;&nbsp;&nbsp;&nbsp;$Revision: 0.1 $ <br/>* @date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$Date: 2005/06/12 13:14:18 $ <br/>*/ <br/>class vB_Datastore_eAccelerator extends vB_Datastore <br/>&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;/** <br/>&nbsp;&nbsp;&nbsp;&nbsp;* Fetches the contents of the datastore from eAccelerator <br/>&nbsp;&nbsp;&nbsp;&nbsp;* <br/>&nbsp;&nbsp;&nbsp;&nbsp;* @param&nbsp;&nbsp;&nbsp;&nbsp;array&nbsp;&nbsp;&nbsp;&nbsp;Array of items to fetch from the datastore <br/>&nbsp;&nbsp;&nbsp;&nbsp;* <br/>&nbsp;&nbsp;&nbsp;&nbsp;* @return&nbsp;&nbsp;&nbsp;&nbsp;void <br/>&nbsp;&nbsp;&nbsp;&nbsp;*/ <br/>&nbsp;&nbsp;&nbsp;&nbsp;function fetch($itemarray) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!function_exists(&#039;eaccelerator_get&#039;)) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trigger_error(&quot;eAccelerator not installed&quot;, E_USER_ERROR); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach ($this-&gt;defaultitems AS $item) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;do_fetch($item); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (is_array($itemarray)) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach ($itemarray AS $item) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;do_fetch($item); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;check_options(); <br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// set the version number variable <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;registry-&gt;versionnumber =&amp; $this-&gt;registry-&gt;options&#91;&#039;templateversion&#039;&#93;; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;/** <br/>&nbsp;&nbsp;&nbsp;&nbsp;* Fetches the data from shared memory and detects errors <br/>&nbsp;&nbsp;&nbsp;&nbsp;* <br/>&nbsp;&nbsp;&nbsp;&nbsp;* @param&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;title of the datastore item <br/>&nbsp;&nbsp;&nbsp;&nbsp;* <br/>&nbsp;&nbsp;&nbsp;&nbsp;* @return&nbsp;&nbsp;&nbsp;&nbsp;void <br/>&nbsp;&nbsp;&nbsp;&nbsp;*/ <br/>&nbsp;&nbsp;&nbsp;&nbsp;function do_fetch($title) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data = eaccelerator_get($title); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($data === null) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123; // appears its not there, lets grab the data, lock the shared memory and put it in <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data = &#039;&#039;; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$dataitem = $this-&gt;dbobject-&gt;query_first(&quot; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SELECT title, data FROM &quot; . TABLE_PREFIX . &quot;datastore <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WHERE title = &#039;&quot; . $this-&gt;dbobject-&gt;escape_string($title) .&quot;&#039; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!empty($dataitem&#91;&#039;title&#039;&#93;)) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$data =&amp; $dataitem&#91;&#039;data&#039;&#93;; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;build($dataitem&#91;&#039;title&#039;&#93;, $dataitem&#91;&#039;data&#039;&#93;); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;register($title, $data); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/> <br/> <br/> <br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;/** <br/>&nbsp;&nbsp;&nbsp;&nbsp;* Updates the appropriate cache file <br/>&nbsp;&nbsp;&nbsp;&nbsp;* <br/>&nbsp;&nbsp;&nbsp;&nbsp;* @param&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;title of the datastore item <br/>&nbsp;&nbsp;&nbsp;&nbsp;* <br/>&nbsp;&nbsp;&nbsp;&nbsp;* @return&nbsp;&nbsp;&nbsp;&nbsp;void <br/>&nbsp;&nbsp;&nbsp;&nbsp;*/ <br/>&nbsp;&nbsp;&nbsp;&nbsp;function build($title, $data) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (!function_exists(&#039;eaccelerator_put&#039;)) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trigger_error(&quot;eAccelerator not installed&quot;, E_USER_ERROR); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eaccelerator_lock($title); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eaccelerator_put($title, $data); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eaccelerator_unlock($title); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&#125;</div><br/><br/>四、附录和参考资料<br/>eAccelerator 官方网站 ：<a href="http://eaccelerator.net" target="_blank">http://eaccelerator.net</a><br/>Websites using eAccelerator ?<br/><br/>•<a href="http://www.advfn.com/" target="_blank">http://www.advfn.com/</a> (2006/03/03) Advanced Financial Network, serves over 7 million page hits per day. <br/>•<a href="http://www.domaincity.co.uk/" target="_blank">http://www.domaincity.co.uk/</a> (2005/01/29) Andrew Hutchings – Linux Guru – Just a quick message to say we are now using eaccelerator as a replacement for mmcache on 2 of our 3 node round robin clusters, 2.5million hits per day. We will be doubling this in the next few week, as well as implementing new clusters. <br/>•<a href="http://www.ets-online.de/" target="_blank">http://www.ets-online.de/</a> (2005/02/07) Denny Reeh – System Developer – The e/t/s didactic media provides an elearning server (Distance Learning System) written in PHP. We are hosting the systems for our customers mainly by ourself. So we have 5 live-servers (freebsd, apache2, php4, eaccelerator) with 5.5 million hits per month. First without eAccelerator we should have installed more servers for good performance and secondly we improve the customer convenience by quartering the medium response time of a script. <br/>•<a href="http://www.gorgoyle.com/" target="_blank">http://www.gorgoyle.com/</a> (2005/08/03) Gorgoyle.com is Yet Another Debian Personal Server with just a few lost Internet wanderers passing by, powered by a glorious Celeron 433 that needed some fresh air… With eAccelerator the result is quite impressive: users say the server speed is now 10000% higher (no joke!) So thank you all and keep up the good work!!! Server: eAccelerator 0.9.5 beta 1 Apache/2.0.55 (Debian) mod_python/3.1.3 Python/2.3.5 PHP/4.4.2-1 mod_ssl/2.0.55 OpenSSL/0.9.8a mod_perl/2.0.2 <br/>•<a href="http://www.mafia-inc.de/" target="_blank">http://www.mafia-inc.de/</a> (2005/05/24) The Mafia-Incorporated is a succesfull Browser game with around 2.500.000 page impressions each day and over 5000 users. Server: PHP Version 4.3.10-9, eAccelerator 0.9.2a, Debian , Apache 2.0.53 <br/>•<a href="http://www.mondespersistants.com/" target="_blank">http://www.mondespersistants.com/</a> (2005/01/07) An other game oriented french website with 6 000 000 pageloads monthly. <a href="http://guildes.mondespersistants.com" target="_blank">http://guildes.mondespersistants.com</a> is a full PHP5 oo development. Theses websites are running under freebsd / apache 1.3 / php 5.0.3 / eaccelerator 0.9.2 <br/>•<a href="http://www.moviemaze.de/" target="_blank">http://www.moviemaze.de/</a> (2005/12/09) Markus Ostertag – Movie Maze is a large german online-magazine with trailer, wallpaper, reviews, news and much more. Currently we use three servers (Suse & Debian with Apache 2, PHP4) with eAccelerator and provide more than 3TB data to ~1 Mio. users each month. <br/>•<a href="http://www.rtvslo.si" target="_blank">http://www.rtvslo.si</a> (2005/01/04) The Slovenian National RTV Station and its news/misc portal with forums. Over 3500 users and more than 37000 forum messages in a year. Two round-robin servers for the masses, and an administrator server. 6 000 000 pageloads monthly. <br/>•<a href="http://www.shroomery.org/" target="_blank">http://www.shroomery.org/</a> (2006/03/28) A site about mushrooms and mycology, serving 20,000,000 pages per month. Web and database server are identical dual 64-bit Xeons with 4GB and SCSI RAID5 running Gentoo. eAccelerator help keep our page generation time under .1 second! <br/>•<br/>•<a href="http://www.sourceforge.net/" target="_blank">http://www.sourceforge.net/</a> (2005/04/25) SourceForge.net is the world’s largest Open Source software development web site, hosting more than 100,000 projects and over 1,000,000 registered users with a centralized resource for managing projects, issues, communications, and code. SourceForge.net has the largest repository of Open Source code and applications available on the Internet, and hosts more Open Source development products than any other site or network worldwide. SourceForge.net provides a wide variety of services to projects we host, and to the Open Source community. eAccelerator is used on the webserver cluster for their frontpage. <br/>Companies offering hosting with eAccelerator enabled ?<br/><br/>•<a href="http://lylix.net/" target="_blank">http://lylix.net/</a> (2006/04/29) Offering webhosting w/ Apache/2.0.55, PHP 5.0.5, and eAccelerator 0.9.5 beta1 on Gentoo Linux servers. Also a provider of quality Virtual Private Server (VPS) hosting, including 32 and 64-bit platforms. Most VPS images have a pre-installed LAMP environment w/ eAccelerator installed and configured. <br/>•<a href="http://www.ulyssis.org" target="_blank">http://www.ulyssis.org</a> A student organisation which provides shell and internet services for students at very cheap prices. <br/>本文为Michael原创和整理，转载请保留出处：<a href="http://www.toplee.com/blog/?p=100" target="_blank">http://www.toplee.com/blog/?p=100</a><br/><br/>Tags - <a href="http://agileblog.cn/tags/php-cache/" rel="tag">php-cache</a> , <a href="http://agileblog.cn/tags/eaccelerator%25E9%2585%258D%25E7%25BD%25AE/" rel="tag">eaccelerator配置</a> , <a href="http://agileblog.cn/tags/eaccelerator%25E4%25B8%258B%25E8%25BD%25BD/" rel="tag">eaccelerator下载</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Windows-Not-Update/</link>
<title><![CDATA[Windows update当前无法检查更新,因为未运行服务,您可能需要重新启动计算机的解决方法]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Windows]]></category>
<pubDate>Sat, 28 Aug 2010 00:30:14 +0000</pubDate> 
<guid>http://agileblog.cn/Windows-Not-Update/</guid> 
<description>
<![CDATA[ 
	很久没有开启WindowsUpdate进行更新了，IE出了点问题，想通过更新解决该问题，启动更新后，却出现<div class="code">Windows update 当前无法检查更新，因为未运行服务。您可能需要重新启动计算机。</div>的窗口。<br/>到网上搜索了一下，以下是我电脑在Windows Vista Business下的解决方法。<br/>打开运行命令<br/>输入cmd<br/>在cmd里面粘贴以下代码<br/><div class="code"><br/>for %1 in (%windir%&#92;system32&#92;*.dll) do regsvr32.exe /s %1<br/></div><br/>出现重新注册dll文件库的信息<br/>重新注册dll库完成之后即可在线更新了<br/><br/><br/>Tags - <a href="http://agileblog.cn/tags/windows/" rel="tag">windows</a> , <a href="http://agileblog.cn/tags/%25E6%259C%25AA%25E8%25BF%2590%25E8%25A1%258C%25E6%259C%258D%25E5%258A%25A1/" rel="tag">未运行服务</a> , <a href="http://agileblog.cn/tags/windows%25E6%259C%258D%25E5%258A%25A1/" rel="tag">windows服务</a> , <a href="http://agileblog.cn/tags/%25E5%259C%25A8%25E7%25BA%25BF%25E6%259B%25B4%25E6%2596%25B0/" rel="tag">在线更新</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/CERTMGR-MSC/</link>
<title><![CDATA[Windows打开证书管理器的命令]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Windows]]></category>
<pubDate>Fri, 20 Aug 2010 00:52:03 +0000</pubDate> 
<guid>http://agileblog.cn/CERTMGR-MSC/</guid> 
<description>
<![CDATA[ 
	经常换操作系统，有时候需要备份一下证书，但是却不知道怎么备份证书，以下方法可以交我们备份证书<br/>在开始菜单<br/>选择运行<br/>输入<br/><div class="code"><br/>CERTMGR.MSC<br/></div><br/>即可打开<br/>选择<br/>个人<br/>&nbsp;&nbsp;&nbsp;&nbsp;证书<br/>选择你要备份的证书<br/>点击右键 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;选择所有任务<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;导出<br/> 选择下一步<br/>选择 是，导出私钥<br/>下一步<br/>下一步<br/>输入密码<br/>浏览你要备份的证书路径<br/>输入你要备份的文件名<br/>选择 保存<br/>进入下一步<br/>点击完成即可<br/><br/>Tags - <a href="http://agileblog.cn/tags/windows/" rel="tag">windows</a> , <a href="http://agileblog.cn/tags/%25E8%25AF%2581%25E4%25B9%25A6%25E7%25AE%25A1%25E7%2590%2586%25E5%2599%25A8/" rel="tag">证书管理器</a> , <a href="http://agileblog.cn/tags/%25E5%2591%25BD%25E4%25BB%25A4/" rel="tag">命令</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Random-Password-Generator/</link>
<title><![CDATA[一款随机密码产生工具]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[软件工具]]></category>
<pubDate>Thu, 19 Aug 2010 11:12:38 +0000</pubDate> 
<guid>http://agileblog.cn/Random-Password-Generator/</guid> 
<description>
<![CDATA[ 
	如今大多数应用都要用到密码，比如我们的博客、论坛、社区等等都需要用到密码，其中很多时候，我们需要保护我们的数据或者是信息，不得不使用符合密码安全策略的密码。该软件是一款免费的随机密码生成软件，使用该软件我们可以帮助我们随机产生符合密码安全策略的密码。并且可以帮助我们把密码存放在该软件内。<br/>PS：记得每次重新安装软件之后，把数据库备份一下，以免丢失所产生的密码。<br/>软件下载地址：这个文件只能在登入之后下载。请先 <a href="http://agileblog.cn/login.php?job=register">注册</a> 或 <a href="http://agileblog.cn/login.php">登入</a><br/>Tags - <a href="http://agileblog.cn/tags/%25E9%259A%258F%25E6%259C%25BA%25E5%25AF%2586%25E7%25A0%2581%25E4%25BA%25A7%25E7%2594%259F%25E5%2599%25A8/" rel="tag">随机密码产生器</a> , <a href="http://agileblog.cn/tags/%25E5%25AF%2586%25E7%25A0%2581%25E5%25AE%2589%25E5%2585%25A8%25E7%25AD%2596%25E7%2595%25A5/" rel="tag">密码安全策略</a> , <a href="http://agileblog.cn/tags/download/" rel="tag">download</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Thunder7-download/</link>
<title><![CDATA[迅雷7限量测试第二版下载]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Java开发]]></category>
<pubDate>Thu, 19 Aug 2010 01:19:48 +0000</pubDate> 
<guid>http://agileblog.cn/Thunder7-download/</guid> 
<description>
<![CDATA[ 
	迅雷7已经发布几天，作为迅雷VIP也优先体验了一下，界面效果确实不错。由于是测试版本相对来说还是有很多bug的，经过几天的bug收集，又推出了第二版。以下是第二版的下载地址。<br/><a href="http://down.sandai.net/thunder7/Thunder7.1.0.1888.exe">点击这里下载文件</a><br/>迅雷7目前只能是迅雷会员才可以体验。需要体验的可以发送邮件给我，我将给你发送一个迅雷VIP的帐号进行体验。<br/>Email：webmaster#freezingsun.com&nbsp;&nbsp; <span style="color: #DC143C;">#==>@</span><br/>Tags - <a href="http://agileblog.cn/tags/%25E8%25BF%2585%25E9%259B%25B77/" rel="tag">迅雷7</a> , <a href="http://agileblog.cn/tags/thunder7/" rel="tag">thunder7</a> , <a href="http://agileblog.cn/tags/%25E5%2585%258D%25E8%25B4%25B9%25E4%25BD%2593%25E9%25AA%258C/" rel="tag">免费体验</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Xen-or-OpenVZ/</link>
<title><![CDATA[Xen与OpenVZ有什么区别？]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[操作系统]]></category>
<pubDate>Tue, 17 Aug 2010 08:41:21 +0000</pubDate> 
<guid>http://agileblog.cn/Xen-or-OpenVZ/</guid> 
<description>
<![CDATA[ 
	本文永久链接：<a href="http://agileblog.cn/Xen-or-OpenVZ/" target="_blank">http://agileblog.cn/Xen-or-OpenVZ/</a><br/><br/>经常使用VPS的人，肯定不会对Xen与OpenVZ两个陌生，但是往往有小白会问，什么是Xen？什么是OpenVZ？这两者有什么区别？下面便宜吧收集一篇文章，就当帮大家扫一下盲吧，这样也好更好地鉴别VPS的好坏，买到性价比更高的VPS。<br/><br/>一、Openvz和Xen的技术规格分析<br/><br/>　　1.Xen与Openvz的区别<br/><br/>　　Xen和Openvz同样是虚拟化主机技术，区别在于Xen是半虚拟化技术，它并不是一个真正的虚拟机，而是相当于自己运行了一个内核的实例，可以自由的加载内核模块，虚拟的内存和IO，稳定而且可预测。Openvz则是操作系统级别的虚拟化技术，是底层操作系统上的一层应用，这意味着易于理解和低权重开销，一般来说也意味着更优的性能。<br/><br/>　　这里有一个问题，可以看到实际上openvz因为免去了大量的公共开销，理论上来说性能会比xen更好。为什么大家都会认为openvz过分压榨性能呢?我认为是因为openvz配置起来比较灵活，给黑心 openvz服务商改低限制的机会。<br/><br/>　　比如mediatemple，号称512M内存的dv方案，kmemsize才12M，不了解的人看了512M觉得很哈皮啊，可是使用的时候一般这512M能分到你手里一半就不错了。此消彼长，所以才会有xen 能更好地利用机器性能的错觉。<br/><br/>　　2.Openvz的内核模型<br/><br/>　　首先当OpenVZ的主机说“256MB的保证”，它实际上意味着约232MB的“privvmpages”，14M的“kmemsize”和其他杂项资源。当应用程序调用 malloc()分配的内存将被添加到“privvmpages”。<br/><br/>　　当“privvmpages”超过限制，malloc()将失败并返回一个NULL。当主机服务器内存用光了，然后虚拟环境下的进程超过 “oomguarpages”的将被终止。<br/><br/>　　OpenVZ的内存管理方法既有问题也有优势。最大的问题之一是内存容量的应用程序使用的内存和应用程序实际上分配到的内存是不同的，不同的应用程序他们的差别可能会很大。以Java为例，它通常分配一大块的内存，但是，它可能只使用一小部分分配的内存。如果privvmpages受限，java会立即停止运行。调整参数可以解决一部分问题，但它处理得绝对没有Xen来得干净利落。事实上，几乎所有使用内存分配的应用程序都会受OpenVZ这个问题的影响。<br/><br/>　　/proc/meminfo 本身也有问题。虽然OpenVZ的已经为内存进行了虚拟，但是用”free”命令依然会返回主机的内存。这样就会使小内存的openvz的vps无法运行诸如java或者gcc编译这样的程序。<br/><br/>　　OpenVZ的内存模型的优点是， 它容易理解： 你几乎就只有privvmpages受限。与专用的服务器或Xen的服务器不一样的是，你的磁盘高速缓存和页面缓存并不计入您的总内存使用情况。因此，在一个没有过度销售的openvz主机上，由于拥有较大冗余的公共资源，它实际上可能会比同类规格的Xen的VPS表现更佳。<br/><br/>　　3.Xen的内存模型<br/><br/>　　Xen的系统模型更容易解释。256MB的Xen的VPS是就像一个256MB的专用服务器-该内存段是预留作VPS专用，没有其他VPS能够使用这部分内存，这就像一个真正的专用服务器。<br/><br/>　　此外，当内存不足时，VPS会使用Swap。一般每个VPS带有两倍大小的交换分区，当您的应用需要更多的内存，不常使用的页面从内存中被换出到交换分区，从而腾出使更多的房间。因此，256MB的Xen的VPS系统实际上共有768MB内存(256MB内存+ 512MB的交换空间)，请相信我，交换空间是非常有用的，特别是处理突发的需求高峰时。<br/><br/>　　这么说来，Xen是永远远优于OpenVZ?不然，你的256MB的VPS理论可以使用高达768MB内存，而实际上内核，高速缓存，缓冲，他们都占用内存。这部分系统开销也是可观的。另外，Swap会严重降低性能。<br/><br/>　　4.稳定性和可预测性<br/><br/>　　当内存耗尽时，xen和openvz表现大相径庭。xen会把不常用的内存页面换入Swap，这将大大降低性能，当Swap也用尽，那么xen的系统会响应得越来越慢，就像一台真实的服务器一样。<br/><br/>　　而openvz一旦内存用尽，则会突然死亡：开不出新的程序，只能等待系统资源可用。更有甚者，本来运行的好好的程序也可能因为不断增长而超过限制，然后突然死亡。这就像开车开到70码，然后突然撞墙上了，一般会死得很惨。<br/><br/>　　毫无疑问这点上我倾向于xen技术，可预测，稳定。<br/><br/>　　5.结论<br/><br/>　　如果xen和openvz一样贵，我肯定选xen，因为可预测性，即使openvz打8折，我还是追求稳定。<br/><br/>　　上面的话总结一下，得出几个结论：<br/><br/>　　1、XEN比openvz主机对买家更有利，比如分配给你512M内存后，这一部分内存就从服务器上专门划给你了，别人将无法使用，而openvz则是共用内存，比如分配给你512M内存是指最大你能使用512M内存，比如你占用了200M内存，那么就只从物体内存中分配200M给你，所以卖家非常容易在服务器上面超卖! <br/><br/>　&nbsp;&nbsp;2、openvz更高效，xen是硬件底层虚拟，更接近真实服务器，而openvz是操作系统虚拟，虚拟服务自身占用内存少，同样的程序执行效率更高!<br/><br/>　　3、如果购买openvz应看卖家是否会超卖，应选择良好声誉明确申明不会超卖的<br/><br/>　　4、如果购买xen主机，应同时关注swap大小<br/><br/>　　5、测试VPS主机性能使用Unixbench(很多人不知道)，国外非常流行这个东西!<br/><br/>　　这是它的一些参数说明<br/><div class="code"><br/>以下为引用的内容：<br/><br/>　　dhry2reg 内存的register性能<br/><br/>　　whetstone-double 双精度浮点性能<br/><br/>　　execl execl call性能<br/><br/>　　fstime 文件系统性能<br/><br/>　　fsbuffer 文件系统性能<br/><br/>　　fsdisk 文件系统性能<br/><br/>　　pipe 管道(pipe)的性能<br/><br/>　　context1 管道上下文切换的性能<br/><br/>　　spawn 创建进程的性能<br/><br/>　　shell shell并发性能<br/><br/>　　syscall 系统调用性能<br/><br/></div><br/><br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp;6、VPS用途：服务器、软交换、代理和反向代理、离线BT下载等等<br/><br/>　　7.通常一般的使用条件下，两者性能应该相差不大。<br/><br/>Tags - <a href="http://agileblog.cn/tags/xen/" rel="tag">xen</a> , <a href="http://agileblog.cn/tags/openvz/" rel="tag">openvz</a> , <a href="http://agileblog.cn/tags/%25E8%2599%259A%25E6%258B%259F%25E5%258C%2596%25E6%258A%2580%25E6%259C%25AF/" rel="tag">虚拟化技术</a> , <a href="http://agileblog.cn/tags/%25E5%2586%2585%25E5%25AD%2598%25E6%25A8%25A1%25E5%259E%258B/" rel="tag">内存模型</a> , <a href="http://agileblog.cn/tags/vps%25E6%25B5%258B%25E8%25AF%2595/" rel="tag">vps测试</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/windows-not-access-internet/</link>
<title><![CDATA[windows无法配置此无线连接的解决方法]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Windows]]></category>
<pubDate>Tue, 17 Aug 2010 02:46:44 +0000</pubDate> 
<guid>http://agileblog.cn/windows-not-access-internet/</guid> 
<description>
<![CDATA[ 
	本文永久链接：<a href="http://agileblog.cn/windows-not-access-internet/" target="_blank">http://agileblog.cn/windows-not-access-internet/</a><br/><br/>笔记本电脑的无线网卡在安装完系统之后，最麻烦的是无法找到驱动，有时候找到了驱动还是无法正常使用硬件。<br/>这里列出来解决无线网卡正常安装驱动之后还是无法连接网络的解决方法。以供日后使用。<br/>1.查看无线网卡的驱动是否安装正确，查看方法：右键“我的电脑” 单击 “属性” -> 硬件 -> 设备管理器 -> 网络适配器 ->&nbsp;&nbsp;找到无线网卡，如果驱动不正确，一般会有黄色问号提示，这个时候就需要你找到原配光盘来重新驱动。<br/>2.无线网卡没有打开，多数笔记本的无线网卡都会有一个物理开关，设置在笔记本后面或侧面，找到后确认打开，“on”为开，“off”为关。那有些型号的笔记本这个时候还有一个组合键开关操作。如联想E600，还需要功能键(Fn)+F4，来进行网卡的开关。打开后，笔记本会有亮灯显示。<br/>3.如果这个时候，仍然 “windows无法配置此无线连接”，那么就可以确定 wzc服务没有启动，方法：“开始”菜单 -> 控制面板 -> 管理工具 -> 服务，打开后找到 Wireless Zero Configuration 这项服务，双击进入，确认该服务是否启动，并且将服务启动方式改为自动，这样以后重启机器时，该服务就会自动启动了。 <br/><br/>Tags - <a href="http://agileblog.cn/tags/windows/" rel="tag">windows</a> , <a href="http://agileblog.cn/tags/%25E6%2597%25A0%25E7%25BA%25BF%25E7%25BD%2591%25E5%258D%25A1%25E9%2585%258D%25E7%25BD%25AE/" rel="tag">无线网卡配置</a> , <a href="http://agileblog.cn/tags/%25E6%2597%25A0%25E6%25B3%2595%25E8%25BF%259E%25E6%258E%25A5/" rel="tag">无法连接</a> , <a href="http://agileblog.cn/tags/wireless/" rel="tag">wireless</a> , <a href="http://agileblog.cn/tags/zero/" rel="tag">zero</a> , <a href="http://agileblog.cn/tags/configuration/" rel="tag">configuration</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/CentOS-Config-OpenVZ-VPS/</link>
<title><![CDATA[在CentOS5中安装OpenVZ配置VPS]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Linux ]]></category>
<pubDate>Mon, 16 Aug 2010 10:18:09 +0000</pubDate> 
<guid>http://agileblog.cn/CentOS-Config-OpenVZ-VPS/</guid> 
<description>
<![CDATA[ 
	本文永久链接：<a href="http://agileblog.cn/CentOS-Config-OpenVZ-VPS/" target="_blank">http://agileblog.cn/CentOS-Config-OpenVZ-VPS/</a><br/>本程序只在centos5各个版本中的32位系统测试，本程序方便新手快速搭建以openvz软件的vps服务器<br/>1、安装vps服务器主体文件openvz<br/>从Google的开源项目上下载OpenVZ程序<br/><div class="code"><br/>wget http://vbets.googlecode.com/files/openvz.tar.gz <br/>tar xvf openvz.tar.gz <br/>cd openvz <br/>chmod +x setup.sh.x <br/>./setup.sh.x<br/></div><br/>2、安装openvz的web控制程序webvz2.0(可选)<br/>从Google的开源项目上下载WebVZ程序，用于web管理VPS<br/><div class="code"><br/>wget http://vbets.googlecode.com/files/webvz.tar.gz <br/>tar xvf webvz.tar.gz <br/>cd webvz <br/>chmod +x setup.sh.x <br/>./setup.sh.x<br/></div><br/>web控制面版登陆<div class="code">http://ip:3000</div>&nbsp;&nbsp;ip指你分配的虚拟主机IP<br/>管理员帐号:admin 密码:admin123 <br/>Tags - <a href="http://agileblog.cn/tags/centos5/" rel="tag">centos5</a> , <a href="http://agileblog.cn/tags/openvz/" rel="tag">openvz</a> , <a href="http://agileblog.cn/tags/vps/" rel="tag">vps</a> , <a href="http://agileblog.cn/tags/%25E9%2585%258D%25E7%25BD%25AE/" rel="tag">配置</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/OpenVZ-And-Xen/</link>
<title><![CDATA[Xen与OpenVZ介绍]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[操作系统]]></category>
<pubDate>Mon, 16 Aug 2010 10:03:40 +0000</pubDate> 
<guid>http://agileblog.cn/OpenVZ-And-Xen/</guid> 
<description>
<![CDATA[ 
	本文永久链接：<a href="http://agileblog.cn/OpenVZ-And-Xen/" target="_blank">http://agileblog.cn/OpenVZ-And-Xen/</a><br/>Xen介绍&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Xen 是一个开放源代码虚拟机监视器，由剑桥大学开发。它打算在单个计算机上运行多达100个满特征的操作系统。操作系统必须进行显式地修改（“移植”）以在Xen上运行（但是提供对用户应用的兼容性）。这使得Xen无需特殊硬件支持，就能达到高性能的虚拟化。<br/>相对其他虚拟机技术xen具有以下几个特点<br/>1.虚拟机的性能更接近真实硬件环境<br/>2.在真实物理环境的平台和虚拟平台间自由切换 <br/>3.在每个客户虚拟机支持到 32个虚拟CPU，通过 VCPU热插拔 <br/>4.支持PAE指令集的x86/32, x86/64平台 <br/>5.通过Intel 虚拟支持VT的支持来用虚拟原始操作系统（未经修改的）支持（包括Microsoft Windows） <br/>6.优秀的硬件支持.支持几乎所有的Linux设备驱动<br/><br/>OpenVZ介绍<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;OpenVZ使用了一种叫做“process containers”的虚拟化形式。OpenVZ既不是硬件仿真器也不是虚拟机，它是操作系统级别的虚拟化，提供了一种方法：把程序（运行程序或系统服务）分类聚在一起以创建虚拟环境（VE）或虚拟专用服务器（vps）。<br/>OpenVZ主要由三部分组成：内核、一套工具程序及操作系统模板。<br/><br/>内核——OpenVZ为红帽Linux企业版本系统（RHEL，CentOS等）、Fedora Core 5和SUSE 10提供预构建内核套件。OpenVZ也被整合在最近发布的Mandriva Corporate Server里，并且通过Gentoo Portage系统在Gentoo也能用。对于那些喜欢对源码进行编辑的人，源编码在src.rpm格式下是可用的，同样也可以为主线Linux内核源码打补丁和配置。OpenVZ内核提供的主要新功能是程序ID虚拟化（PID）和更广泛的资源管理。<br/><br/>工具程序——OpenVZ提供几种工具程序以创建、监控和管理虚拟专有服务器、软件包管理和操作系统模板管理，并提供系统快照和热迁移。vzctl用于创建、配置、修改、开启和关闭vps。软件包管理工具包括vzrpm和vzyum。操作系统模板工具包括vzpkgadd和vzpkgcache。vzmigrate提供系统快照及热迁移的功能。<br/><br/>模板——为了使vps创建更容易，OpenVZ包括模板包，里面是用于定义一个Linux发行版的元数据的集合。OpenVZ也提供预创建发行版模板。这有什么不同呢？模板包方法允许下载一个已发行Linux版本的所有软件包，而不是一个big .tar.gz或vps的预创建模板。<br/><br/>只要你下载或安装了一个内核和一些附加的软件包，建立一个OpenVZ系统既快速又容易。创建一个操作系统模板或下载一个预创建操作系统模板需要比较多的时间和带宽，不过一旦你设置了模板指令，创建运行在任何支持的Linux版本上的vps非常快速和容易。创建一台vps和启动它只要不到两分钟的时间。<br/><br/>OpenVZ的process container方法<br/><br/>可扩展性——当与硬件仿真（VMware和Parallels）或准虚拟化（Xen和用户模式的Linux）方法相比，process container类型更轻量级和更有效率。一台虚拟专有服务器仅仅只占用你想要运行的程序和服务所需要的资源，既不需要一个独立的内核也不需要一整个操作系统所必须的基础要素。<br/><br/>所以，OpenVZ提供原生性能、动态资源分配，并具备高扩展性。扩展性怎么样呢？OpenVZ开发者作过一些基准测试，宣布在一个RAM为768MB的单核奔腾4处理器上可以运行高达120台的vps，在RAM为2GB的单核奔腾4处理器上可以运行高达320台的vps。<br/><br/>使用其他虚拟化方法，扩展性的主要障碍是RAM，因为每台虚拟机需要与一台典型的独立物理机相同数量的RAM。由于一台OpenVZ vps只是一套程序，一台vps只消耗运行这些程序所需要的CPU和RAM资源。例如，一台基础的vps（运行Apache Web服务器、sshd、sendmail和syslogd）大约只有15个程序。<br/><br/>功能——尽管OpenVZ非常轻便，但功能却没减少。一台vps是一台独立的机器，有自己的管理员（根用户）、用户（系统和用户帐户）、用户磁盘配额、服务及软件。OpenVZ有一个广泛的资源管理系统，主机系统管理员能在每台vps基础上配置及动态分配资源。OpenVZ也提供诸如系统快照和热迁移（把vps从一台物理主机迁移到另一台）这样先进的功能。热迁移执行不需要共享存储、维护网络连接，并且在不易察觉的几秒钟之内完成。<br/><br/>Tags - <a href="http://agileblog.cn/tags/openvz/" rel="tag">openvz</a> , <a href="http://agileblog.cn/tags/xen/" rel="tag">xen</a> , <a href="http://agileblog.cn/tags/process/" rel="tag">process</a> , <a href="http://agileblog.cn/tags/container/" rel="tag">container</a> , <a href="http://agileblog.cn/tags/virtualization/" rel="tag">virtualization</a> , <a href="http://agileblog.cn/tags/partition/" rel="tag">partition</a> , <a href="http://agileblog.cn/tags/%25E8%2599%259A%25E6%258B%259F%25E4%25B8%25BB%25E6%259C%25BA/" rel="tag">虚拟主机</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/CentOS-Install-Tutorial/</link>
<title><![CDATA[CentOS5.5安装教程]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Linux ]]></category>
<pubDate>Wed, 04 Aug 2010 09:35:26 +0000</pubDate> 
<guid>http://agileblog.cn/CentOS-Install-Tutorial/</guid> 
<description>
<![CDATA[ 
	CentOS（Community ENTerprise Operating System）是Linux发行版之一，它是来自于Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码，因此有些要求高度稳定性的服务器以CentOS替代商业版的Red Hat Enterprise Linux使用。两者的不同，在于CentOS并不包含封闭源代码软件。CentOS主要用于服务器而不是桌面环境，不少大型的企业服务器都使用CentOS操作系统，因为这样可以为企业省下一大笔操作系统的授权费用。本文具体将讲解一下CentOS的安装过程。<br/><br/>首先:我们要安装CentOS操作系统，就必须得准备好CentOS操作系统盘，我们可以到Verycd.com去下载，也可以到CentOS社区去下载。最新版的CentOS是5.5的版本。<br/>在Verycd的下载页面是：<a href="http://www.verycd.com/topics/2822023/" target="_blank">http://www.verycd.com/topics/2822023/</a> （只有32位的）<br/>5.4版本的下载页面：<a href="http://www.verycd.com/topics/2776496/&nbsp;&nbsp;(" target="_blank">http://www.verycd.com/topics/2776496/&nbsp;&nbsp;(</a>包含64位和32位)<br/>网易提供的BT种子<a href="http://mirrors.163.com/centos/5.5/isos/i386/CentOS-5.5-i386-bin-DVD.torrent">点击这里下载文件</a> (32位的)<br/>网易提供的BT种子<a href="http://mirrors.163.com/centos/5.5/isos/x86_64/CentOS-5.5-x86_64-bin-DVD.torrent">点击这里下载文件</a>(64位的)<br/><a href="http://mirrors.163.com/centos/5.5/isos/" target="_blank">http://mirrors.163.com/centos/5.5/isos/</a><br/>下载完成之后，就可以下载虚拟主机<br/>建议使用VMware Workstation虚拟主机<br/>也可以使用其他的虚拟主机。<br/>启动虚拟主机、<br/>建立新的虚拟主机<br/>选择典型虚拟主机<br/>选择Linux操作系统<br/>选择CentOS5版本<br/>输入虚拟主机的名称和本地存放虚拟主机的位置。<br/>提示：尽量把虚拟主机的位置存放在NTFS区域，因为在建立虚拟主机的时候有个硬盘大小的设置，一般生成的单个虚拟主机文件都会大于4G，所以建议将虚拟主机的位置存放到NTFS格式的磁盘。<br/>输入最大磁盘的大小，建议输入20G左右。<br/>点击下一步完成。<br/>在Commands区域选择Edit virture machine setting <br/>在hardware栏目选择CD/DVD（IDE），在connection栏目选择Use ISO Image File<br/>Browser 下载的DVD镜像，之后选择OK即可。<br/>这是前置工作。<br/>接下来就开始安装操作系统了。<br/>1、启动虚拟主机<br/>2、选择安装模式<br/>有文本方式和图形化界面安装模式<br/>我们选择图形化界面安装模式<br/><a href="http://agileblog.cn/attachment.php?fid=170" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=170" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>进入下一步<br/>3、是否检查光盘镜像<br/>这里我们就不检查了，下载下来之后一般用一个MD5工具校验一下就可以了。<br/>选择Skip<br/><a href="http://agileblog.cn/attachment.php?fid=171" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=171" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>4、选择Next<br/><a href="http://agileblog.cn/attachment.php?fid=172" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=172" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>5、选择安装的语言，我们这里选择简体中文，也可以选择英文的。<br/><a href="http://agileblog.cn/attachment.php?fid=173" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=173" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>6、选择键盘，我们选择美国英语式就是了，中国地区大多数都是美国英语式键盘。<br/><a href="http://agileblog.cn/attachment.php?fid=174" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=174" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>7、删除磁盘分区数据的警告<br/><a href="http://agileblog.cn/attachment.php?fid=175" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=175" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>8、对硬盘进行分区<br/>我们的硬盘只有这么大，所以只分一个区，其他的默认即可。<br/><a href="http://agileblog.cn/attachment.php?fid=176" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=176" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>9、删除分区警告<br/><a href="http://agileblog.cn/attachment.php?fid=177" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=177" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>10、设置网卡的IP，这里我们选择自动从DHCP服务器获取即可。<br/><a href="http://agileblog.cn/attachment.php?fid=178" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=178" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>11、选择区域<br/>默认即可<br/><a href="http://agileblog.cn/attachment.php?fid=179" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=179" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>12、输入root的密码<br/>大于6位即可。<br/><a href="http://agileblog.cn/attachment.php?fid=180" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=180" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>13、下一步，获取安装信息<br/><a href="http://agileblog.cn/attachment.php?fid=181" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=181" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>14、选择安装的一些软件<br/><a href="http://agileblog.cn/attachment.php?fid=182" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=182" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>15、下一步正式安装操作系统<br/><a href="http://agileblog.cn/attachment.php?fid=183" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=183" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>16、格式化磁盘进行安装<br/><a href="http://agileblog.cn/attachment.php?fid=184" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=184" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>17、开启安装进程<br/><a href="http://agileblog.cn/attachment.php?fid=185" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=185" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>18、安装完成<br/><a href="http://agileblog.cn/attachment.php?fid=186" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=186" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>19、启动过程中<br/><a href="http://agileblog.cn/attachment.php?fid=187" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=187" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://agileblog.cn/attachment.php?fid=188" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=188" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://agileblog.cn/attachment.php?fid=189" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=189" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://agileblog.cn/attachment.php?fid=190" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=190" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://agileblog.cn/attachment.php?fid=191" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=191" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://agileblog.cn/attachment.php?fid=192" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=192" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://agileblog.cn/attachment.php?fid=193" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=193" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://agileblog.cn/attachment.php?fid=194" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=194" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>所有的安装都已经完成，重新启动即可看到我们安装的CentOS操作系统了。<br/>其他的配置的话，将在以后的文章中陆续发布。<br/><br/><br/><br/>Tags - <a href="http://agileblog.cn/tags/centos5.5/" rel="tag">centos5.5</a> , <a href="http://agileblog.cn/tags/%25E5%25AE%2589%25E8%25A3%2585%25E6%2595%2599%25E7%25A8%258B/" rel="tag">安装教程</a> , <a href="http://agileblog.cn/tags/linux/" rel="tag">linux</a> , <a href="http://agileblog.cn/tags/redhatlinux5.4/" rel="tag">redhatlinux5.4</a> , <a href="http://agileblog.cn/tags/%25E7%25A4%25BE%25E5%258C%25BA%25E6%2593%258D%25E4%25BD%259C%25E7%25B3%25BB%25E7%25BB%259F/" rel="tag">社区操作系统</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Oracle-procedure-Function/</link>
<title><![CDATA[Oracle存储过程总结(二、字符串处理相关函数)]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[oracle]]></category>
<pubDate>Tue, 03 Aug 2010 12:40:43 +0000</pubDate> 
<guid>http://agileblog.cn/Oracle-procedure-Function/</guid> 
<description>
<![CDATA[ 
	项目中有涉及存储过程对字符串的处理，所以就将在网上查找到的资料汇总，做一个信息拼接式的总结。<br/><br/>以下信息均来自互联网，贴出来一则自己保存以待以后使用，一则供大家分享。<br/><br/>字符函数——返回字符值<br/><br/>这些函数全都接收的是字符族类型的参数(CHR除外)并且返回字符值.<br/><br/>除了特别说明的之外,这些函数大部分返回VARCHAR2类型的数值.<br/><br/>字符函数的返回类型所受的限制和基本数据库类型所受的限制是相同的。<br/><br/>字符型变量存储的最大值：<br/><br/> VARCHAR2数值被限制为2000字符(ORACLE 8中为4000字符)<br/><br/> CHAR数值被限制为255字符(在ORACLE8中是2000)<br/><br/> long类型为2GB<br/><br/> Clob类型为4GB<br/><br/>1、CHR<br/><br/>语法:&nbsp;&nbsp;chr(x)<br/><br/>功能：返回在数据库字符集中与X拥有等价数值的字符。CHR和ASCII是一对反函数。经过CHR转换后的字符再经过ASCII转换又得到了原来的字<br/><br/>符。<br/><br/>使用位置：过程性语句和SQL语句。<br/><br/><br/>2、CONCAT<br/><br/>语法： CONCAT（string1,string2）<br/><br/>功能：返回string1，并且在后面连接string2。<br/><br/>使用位置：过程性语句和SQL语句。<br/><br/><br/>3、INITCAP<br/><br/>语法：INITCAP（string）<br/><br/>功能：返回字符串的每个单词的第一个字母大写而单词中的其他字母小写的string。单词是用.空格或给字母数字字符进行分隔。不是字母的<br/><br/>字符不变动。<br/><br/>使用位置：过程性语句和SQL语句。<br/><br/><br/>4、LTRIM<br/><br/>语法：LTRIM（string1,string2）<br/><br/>功能：返回删除从左边算起出现在string2中的字符的string1。String2被缺省设置为单个的空格。数据库将扫描string1，从最左边开始。当<br/><br/>遇到不在string2中的第一个字符，结果就被返回了。LTRIM的行为方式与RTRIM很相似。<br/><br/>使用位置：过程性语句和SQL语句。<br/><br/>5、NLS_INITCAP<br/><br/>语法：NLS_INITCAP（string[,nlsparams]）<br/><br/>功能：返回字符串每个单词第一个字母大写而单词中的其他字母小写的string，nlsparams<br/><br/>指定了不同于该会话缺省值的不同排序序列。如果不指定参数，则功能和INITCAP相同。Nlsparams可以使用的形式是：<br/><br/>‘NLS_SORT=sort’<br/><br/>这里sort制订了一个语言排序序列。<br/><br/>使用位置：过程性语句和SQL语句。<br/><br/>6、NLS_LOWER<br/><br/>语法：NLS_LOWER（string[,nlsparams]）<br/><br/>功能：返回字符串中的所有字母都是小写形式的string。不是字母的字符不变。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nlsparams参数的形式与用途和NLS_INITCAP中的nlsparams参数是相同的。如果nlsparams没有被包含，那么NLS_LOWER所作的处理和<br/><br/>LOWER相同。<br/><br/>使用位置；过程性语句和SQL语句。<br/><br/>7、NLS_UPPER<br/><br/>语法：nls_upper（string[,nlsparams]）<br/><br/>功能：返回字符串中的所有字母都是大写的形式的string。不是字母的字符不变。nlsparams参数的形式与用途和NLS_INITCAP中的相同。如果<br/><br/>没有设定参数，则NLS_UPPER功能和UPPER相同。<br/><br/>使用位置：过程性语句和SQL语句。<br/><br/>8、REPLACE<br/><br/>语法：REPLACE（string，search_str[,replace_str]）<br/><br/>功能：把string中的所有的子字符串search_str用可选的replace_str替换，如果没有指定replace_str，所有的string中的子字符串<br/><br/>search_str都将被删除。REPLACE是TRANSLATE所提供的功能的一个子集。<br/><br/>使用位置：过程性语句和SQL语句。<br/><br/>9、RPAD<br/><br/>语法：RPAD（string1,x[,string2]）<br/><br/>功能：返回在X字符长度的位置上插入一个string2中的字符的string1。如果string2的长度要比X字符少，就按照需要进行复制。如果string2<br/><br/>多于X字符，则仅string1前面的X各字符被使用。如果没有指定string2，那么使用空格进行填充。X是使用显示长度可以比字符串的实际长度<br/><br/>要长。RPAD的行为方式与LPAD很相似，除了它是在右边而不是在左边进行填充。<br/><br/>使用位置：过程性语句和SQL语句。<br/><br/>10、RTRIM<br/>语法:&nbsp;&nbsp;RTRIM（string1,[,string2]）<br/><br/>功能:&nbsp;&nbsp;返回删除从右边算起出现在string1中出现的字符string2. string2被缺省设置为单个的空格.数据库将扫描string1,从右边开始.当遇<br/><br/>到不在string2中的第一个字符,结果就被返回了RTRIM的行为方式与LTRIM很相似.<br/><br/>使用位置：过程性语句和SQL语句。<br/><br/>11、SOUNDEX<br/><br/>语法:&nbsp;&nbsp;SOUNDEX（string）<br/><br/>功能:&nbsp;&nbsp;返回string的声音表示形式.这对于比较两个拼写不同但是发音类似的单词而言很有帮助.<br/><br/>使用位置：过程性语句和SQL语句。<br/><br/>12、SUBSTR<br/><br/>语法:&nbsp;&nbsp;SUBSTR（string,a[,b]）<br/><br/>功能:&nbsp;&nbsp;返回从字母为值a开始b个字符长的string的一个子字符串.如果a是0,那么它就被认为从第一个字符开始.如果是正数,返回字符是从左<br/><br/>边向右边进行计算的.如果b是负数,那么返回的字符是从string的末尾开始从右向左进行计算的.如果b不存在,那么它将缺省的设置为整个字符<br/><br/>串.如果b小于1,那么将返回NULL.如果a或b使用了浮点数,那么该数值将在处理进行以前首先被却为一个整数.<br/><br/>使用位置：过程性语句和SQL语句。<br/><br/>13、TRANSLATE<br/><br/>&nbsp;&nbsp; 语法:&nbsp;&nbsp;TRANSLATE(string,from_str,to_str)<br/><br/>&nbsp;&nbsp; 功能:&nbsp;&nbsp;返回将所出现的from_str中的每个字符替换为to_str中的相应字符以后的string. TRANSLATE是REPLACE所提供的功能的一个超集.<br/><br/>如果from_str比to_str长,那么在from_str中而不在to_str中而外的字符将从string中被删除,因为它们没有相应的替换字符. to_str不能为空<br/><br/>.Oracle把空字符串认为是NULL,并且如果TRANSLATE中的任何参数为NULL,那么结果也是NULL.<br/><br/>使用位置：过程性语句和SQL语句。<br/><br/><br/>14、UPPER<br/><br/>语法: UPPER（string）<br/><br/>功能: 返回大写的string.不是字母的字符不变.如果string是CHAR数据类型的,那么结果也是CHAR类型的.如果string是VARCHAR2类型的,那么<br/><br/>结果也是VARCHAR2类型的.<br/><br/>使用位置: 过程性语句和SQL语句。<br/><br/><br/>字符函数——返回数字<br/><br/>这些函数接受字符参数回数字结果.参数可以是CHAR或者是VARCHAR2类型的.尽管实际下许多结果都是整数值,但是返回结果都是简单的NUMBER<br/><br/>类型的,没有定义任何的精度或刻度范围.<br/><br/>16、ASCII<br/><br/>语法:&nbsp;&nbsp;ASCII（string）<br/><br/>功能: 数据库字符集返回string的第一个字节的十进制表示.请注意该函数仍然称作为ASCII.尽管许多字符集不是7位ASCII.CHR和ASCII是互为<br/><br/>相反的函数.CHR得到给定字符编码的响应字符. ASCII得到给定字符的字符编码.<br/><br/>使用位置: 过程性语句和SQL语句。<br/><br/>17、INSTR<br/><br/>语法:&nbsp;&nbsp;INSTR（string1, string2[a,b]）<br/><br/>功能:&nbsp;&nbsp;得到在string1中包含string2的位置. string1时从左边开始检查的,开始的位置为a,如果a是一个负数,那么string1是从右边开始进行<br/><br/>扫描的.第b次出现的位置将被返回. a和b都缺省设置为1,这将会返回在string1中第一次出现string2的位置.如果string2在a和b的规定下没有<br/><br/>找到,那么返回0.位置的计算是相对于string1的开始位置的,不管a和b的取值是多少.<br/><br/>使用位置: 过程性语句和SQL语句。<br/><br/>18、INSTRB<br/><br/>语法:&nbsp;&nbsp;INSTRB（string1, string2[a,[b]]）<br/><br/>功能:&nbsp;&nbsp;和INSTR相同,只是操作的对参数字符使用的位置的是字节.<br/><br/>使用位置: 过程性语句和SQL语句。<br/><br/>19、LENGTH<br/><br/>语法:&nbsp;&nbsp;LENGTH（string）<br/><br/>功能:&nbsp;&nbsp;返回string的字节单位的长度.CHAR数值是填充空格类型的,如果string由数据类型CHAR,它的结尾的空格都被计算到字符串长度中间.<br/><br/>如果string是NULL,返回结果是NULL,而不是0.<br/><br/>使用位置: 过程性语句和SQL语句。<br/><br/>20、LENGTHB<br/><br/>语法:&nbsp;&nbsp;LENGTHB（string）<br/><br/>功能:&nbsp;&nbsp;返回以字节为单位的string的长度.对于单字节字符集LENGTHB和LENGTH是一样的.<br/><br/>使用位置: 过程性语句和SQL语句。<br/><br/>21、NLSSORT<br/><br/>语法: NLSSORT（string[,nlsparams]）<br/><br/>功能: 得到用于排序string的字符串字节.所有的数值都被转换为字节字符串,这样在不同数据库之间就保持了一致性. Nlsparams的作用和<br/><br/>NLS_INITCAP中的相同.如果忽略参数,会话使用缺省排序.<br/><br/>使用位置: 过程性语句和SQL语句。<br/><br/><br/>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/squirrelRao/archive/2008/07/15/2654748.aspx" target="_blank">http://blog.csdn.net/squirrelRao/archive/2008/07/15/2654748.aspx</a><br/>Tags - <a href="http://agileblog.cn/tags/oracle/" rel="tag">oracle</a> , <a href="http://agileblog.cn/tags/procedure/" rel="tag">procedure</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Oracle-procedure/</link>
<title><![CDATA[Oracle存储过程总结(一、基本应用)]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[oracle]]></category>
<pubDate>Tue, 03 Aug 2010 12:38:50 +0000</pubDate> 
<guid>http://agileblog.cn/Oracle-procedure/</guid> 
<description>
<![CDATA[ 
	1、创建存储过程 <br/><br/>create or replace procedure test(var_name_1 in type,var_name_2 out type) as<br/><br/>--声明变量(变量名 变量类型)<br/><br/>begin<br/><br/>--存储过程的执行体<br/><br/>end test;<br/><br/>打印出输入的时间信息<br/><br/>E.g:<br/><br/>create or replace procedure test(workDate in Date) is<br/><br/>begin<br/><br/>dbms_output.putline(&apos;The input date is:&apos;&#124;&#124;to_date(workDate,&apos;yyyy-mm-dd&apos;));<br/><br/>end test;<br/><br/>2、变量赋值<br/><br/>变量名 := 值;<br/><br/>E.g：<br/><br/>create or replace procedure test(workDate in Date) is<br/><br/>x number(4,2);<br/><br/> begin<br/><br/> x := 1; <br/><br/>end test;<br/><br/>3、判断语句:<br/><br/>if 比较式 then begin end; end if;<br/><br/>E.g<br/><br/>create or replace procedure test(x in number) is<br/><br/>begin<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if x >0 then<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x := 0 - x;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end; <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;end if;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;if x = 0 then <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; begin<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;x: = 1;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;end; <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;end if; <br/><br/>end test;<br/><br/>4、For 循环<br/><br/>For ... in ... LOOP <br/><br/>--执行语句 <br/><br/>end LOOP; <br/><br/>(1)循环遍历游标<br/><br/>create or replace procedure test() as<br/><br/>Cursor cursor is select name from student; name varchar(20);<br/><br/>begin<br/><br/>for name in cursor LOOP <br/><br/>begin<br/><br/> dbms_output.putline(name);&nbsp;&nbsp;<br/><br/>end; <br/><br/>end LOOP;<br/><br/>end test;<br/><br/>(2)循环遍历数组<br/><br/> create or replace procedure test(varArray in myPackage.TestArray) as<br/><br/>--(输入参数varArray 是自定义的数组类型，定义方式见标题6)<br/><br/>i number;<br/><br/>begin <br/><br/>i := 1;&nbsp;&nbsp;--存储过程数组是起始位置是从1开始的，与java、C、C++等语言不同。因为在Oracle中本是没有数组的概念的，数组其实就是一张<br/><br/>--表(Table),每个数组元素就是表中的一个记录，所以遍历数组时就相当于从表中的第一条记录开始遍历<br/><br/>for i in 1..varArray.count LOOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>dbms_output.putline(&apos;The No.&apos;&#124;&#124; i &#124;&#124; &apos;record in varArray is:&apos;&#124;&#124;varArray(i));&nbsp;&nbsp; <br/><br/> end LOOP; <br/><br/>end test;<br/><br/>5、While 循环<br/><br/>while 条件语句 LOOP <br/><br/>begin<br/><br/>end; <br/><br/>end LOOP;<br/><br/>E.g<br/><br/>create or replace procedure test(i in number) as<br/><br/>begin<br/><br/>while i < 10 LOOP <br/><br/>begin&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/> i:= i + 1;<br/><br/>end; <br/><br/>end LOOP;<br/><br/> end test;<br/><br/>6、数组<br/><br/>首先明确一个概念：Oracle中本是没有数组的概念的，数组其实就是一张表(Table),每个数组元素就是表中的一个记录。<br/><br/>使用数组时，用户可以使用Oracle已经定义好的数组类型，或可根据自己的需要定义数组类型。<br/><br/>(1)使用Oracle自带的数组类型<br/><br/>x array; --使用时需要需要进行初始化<br/><br/>e.g:<br/><br/>create or replace procedure test(y out array) is<br/><br/> x array;&nbsp;&nbsp;<br/><br/> begin<br/><br/>x := new array();<br/><br/>y := x;<br/><br/>end test;<br/><br/>(2)自定义的数组类型 (自定义数据类型时，建议通过创建Package的方式实现，以便于管理)<br/><br/>E.g (自定义使用参见标题4.2) create or replace package myPackage is<br/><br/>&nbsp;&nbsp;-- Public type declarations&nbsp;&nbsp; type info is record(&nbsp;&nbsp;&nbsp;&nbsp; name varchar(20),&nbsp;&nbsp;&nbsp;&nbsp; y number);<br/><br/>&nbsp;&nbsp;type TestArray is table of info index by binary_integer;&nbsp;&nbsp; --此处声明了一个TestArray的类型数据，其实其为一张存储Info数据类型的Table而已，及TestArray 就是一张表，有两个字段，一个是<br/><br/>name，一个是y。需要注意的是此处使用了Index by binary_integer 编制该Table的索引项，也可以不写，直接写成：type TestArray is <br/><br/>table of info，如果不写的话使用数组时就需要进行初始化：varArray myPackage.TestArray; varArray := new myPackage.TestArray();<br/><br/>end TestArray;<br/><br/>7.游标的使用 Oracle中Cursor是非常有用的，用于遍历临时表中的查询结果。其相关方法和属性也很多，现仅就常用的用法做一二介绍：<br/><br/>(1)Cursor型游标(不能用于参数传递)<br/><br/>create or replace procedure test() is&nbsp;&nbsp; <br/><br/>cusor_1 Cursor is select std_name from student where&nbsp;&nbsp;...;&nbsp;&nbsp;--Cursor的使用方式1&nbsp;&nbsp; cursor_2 Cursor;<br/><br/>begin<br/><br/>select class_name into cursor_2 from class where ...;&nbsp;&nbsp;--Cursor的使用方式2<br/><br/>可使用For x in cursor LOOP .... end LOOP; 来实现对Cursor的遍历<br/><br/>end test;<br/><br/>(2)SYS_REFCURSOR型游标，该游标是Oracle以预先定义的游标，可作出参数进行传递<br/><br/>create or replace procedure test(rsCursor out SYS_REFCURSOR) is<br/><br/>cursor SYS_REFCURSOR; name varhcar(20);<br/><br/>begin<br/><br/>OPEN cursor FOR select name from student where ... --SYS_REFCURSOR只能通过OPEN方法来打开和赋值<br/><br/>LOOP<br/><br/> fetch cursor into name&nbsp;&nbsp; --SYS_REFCURSOR只能通过fetch into来打开和遍历 exit when cursor%NOTFOUND;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--SYS_REFCURSOR中可使用三个状态属性：&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---%NOTFOUND(未找到记录信息) %FOUND(找到记录信息)&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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ---%ROWCOUNT(然后当前游标所指向的行位置)<br/><br/> dbms_output.putline(name); <br/><br/>end LOOP;<br/><br/>rsCursor := cursor; <br/><br/>end test;<br/><br/>下面写一个简单的例子来对以上所说的存储过程的用法做一个应用：<br/><br/>现假设存在两张表，一张是学生成绩表(studnet)，字段为：stdId,math,article,language,music,sport,total,average,step&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一张是学生课外成绩表(out_school),字段为:stdId,parctice,comment<br/><br/>通过存储过程自动计算出每位学生的总成绩和平均成绩，同时，如果学生在课外课程中获得的评价为A，就在总成绩上加20分。<br/><br/>create or replace procedure autocomputer(step in number) is<br/><br/>rsCursor SYS_REFCURSOR;<br/><br/>commentArray myPackage.myArray;<br/><br/>math number;<br/><br/>article number;<br/><br/>language number;<br/><br/>music number;<br/><br/>sport number;<br/><br/>total number;<br/><br/>average number;<br/><br/>stdId varchar(30);<br/><br/>record myPackage.stdInfo;<br/><br/>i number;<br/><br/>begin<br/><br/>i := 1;<br/><br/>get_comment(commentArray); --调用名为get_comment()的存储过程获取学生课外评分信息<br/><br/>OPEN rsCursor for select stdId,math,article,language,music,sport from student t where t.step = step;<br/><br/>LOOP <br/><br/>fetch rsCursor into stdId,math,article,language,music,sport; exit when rsCursor%NOTFOUND;<br/><br/>total := math + article + language + music + sport;<br/><br/>for i in 1..commentArray.count LOOP <br/><br/> record := commentArray(i);&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>if stdId = record.stdId then&nbsp;&nbsp;<br/><br/> begin&nbsp;&nbsp;&nbsp;&nbsp; <br/><br/> if record.comment = &apos;A&apos; then&nbsp;&nbsp;&nbsp;&nbsp; <br/><br/>&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/><br/> total := total + 20;&nbsp;&nbsp; <br/><br/>&nbsp;&nbsp; go to next; --使用go to跳出for循环&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/><br/>&nbsp;&nbsp;end;&nbsp;&nbsp;&nbsp;&nbsp; <br/><br/>end if;&nbsp;&nbsp;<br/><br/>end;&nbsp;&nbsp;<br/><br/>end if; <br/><br/>end LOOP;<br/><br/><<continue>>&nbsp;&nbsp;average := total / 5;<br/><br/> update student t set t.total=total and t.average = average where t.stdId = stdId; <br/><br/>end LOOP;<br/><br/>end;<br/><br/>end autocomputer;<br/><br/>--取得学生评论信息的存储过程<br/><br/>create or replace procedure get_comment(commentArray out myPackage.myArray) is<br/><br/>rs SYS_REFCURSOR； <br/><br/>record myPackage.stdInfo; <br/><br/>stdId varchar(30); <br/><br/>comment varchar(1); <br/><br/>i number;<br/><br/>begin<br/><br/>open rs for select stdId,comment from out_school<br/><br/>i := 1;<br/><br/>LOOP<br/><br/> fetch rs into stdId,comment; exit when rs%NOTFOUND; <br/><br/>record.stdId := stdId;<br/><br/> record.comment := comment; <br/><br/>recommentArray(i) := record; <br/><br/>i:=i + 1; <br/><br/>end LOOP;<br/><br/>end get_comment;<br/><br/>--定义数组类型myArray <br/><br/>create or replace package myPackage is begin<br/><br/>type stdInfo is record(stdId varchar(30),comment varchar(1));<br/><br/>type myArray is table of stdInfo index by binary_integer;<br/><br/>end myPackage;<br/><br/><br/>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/squirrelRao/archive/2008/07/11/2639571.aspx" target="_blank">http://blog.csdn.net/squirrelRao/archive/2008/07/11/2639571.aspx</a><br/>Tags - <a href="http://agileblog.cn/tags/oracle/" rel="tag">oracle</a> , <a href="http://agileblog.cn/tags/procedure/" rel="tag">procedure</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Oracle-query-two-tables/</link>
<title><![CDATA[Oracle查询两张表的交集和并集问题]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[oracle]]></category>
<pubDate>Tue, 03 Aug 2010 11:46:47 +0000</pubDate> 
<guid>http://agileblog.cn/Oracle-query-two-tables/</guid> 
<description>
<![CDATA[ 
	1、intersect运算 <br/>返回查询结果中相同的部分既他们的交集<br/><div class="code"><br/>SQL&gt; select * from abc<br/>&nbsp;&nbsp;2&nbsp;&nbsp;intersect<br/>&nbsp;&nbsp;3&nbsp;&nbsp;select * from abc2 ;<br/></div><br/>2、minus运算 <br/>返回在第一个查询结果中与第二个查询结果不相同的那部分行记录,<br/>即两个结果的差集<br/><div class="code"><br/>SQL&gt; select * from abc2<br/>&nbsp;&nbsp;2&nbsp;&nbsp;minus<br/>&nbsp;&nbsp;3&nbsp;&nbsp;select * from abc ;<br/></div><br/>3、Union-Union all<br/>&nbsp;&nbsp; (1)UNION在进行表链接后会筛选掉重复的记录，所以在表链接后会对所产生的结果集进行排序运算，删除重复的记录再返回结果<br/>&nbsp;&nbsp; (2)UNION ALL只是简单的将两个结果合并后就返回。如果返回的两个结果集中有重复的数据，返回的结果集就会包含重复的数据<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp; 注：从效率上说，UNION ALL要比UNION快很多，如果可以确认合并的两个结果集中不包含重复的数据的话，就使用UNION ALL<br/><br/>使用 UNION 组合查询的结果集有两个最基本的规则：<br/><br/>(1)所有查询中的列数和列的顺序必须相同。 <br/><br/>(2)数据类型必须兼容<br/><div class="code"><br/>Union:<br/>SQL&gt; select d.code,d.name from abc d<br/>&nbsp;&nbsp;2&nbsp;&nbsp;union<br/>&nbsp;&nbsp;3&nbsp;&nbsp;select e.code,e.name from abc3 e ;<br/></div><br/><br/>Tags - <a href="http://agileblog.cn/tags/oracle/" rel="tag">oracle</a> , <a href="http://agileblog.cn/tags/%25E6%259F%25A5%25E8%25AF%25A2/" rel="tag">查询</a> , <a href="http://agileblog.cn/tags/query/" rel="tag">query</a> , <a href="http://agileblog.cn/tags/%25E4%25BA%25A4%25E9%259B%2586/" rel="tag">交集</a> , <a href="http://agileblog.cn/tags/%25E5%25B9%25B6%25E9%259B%2586/" rel="tag">并集</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/apache-tomcat-admin-download/</link>
<title><![CDATA[apache-tomcat-admin下载]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Sun, 01 Aug 2010 13:19:10 +0000</pubDate> 
<guid>http://agileblog.cn/apache-tomcat-admin-download/</guid> 
<description>
<![CDATA[ 
	本文永久链接:<a href="http://agileblog.cn/apache-tomcat-admin-download/" target="_blank">http://agileblog.cn/apache-tomcat-admin-download/</a><br/>这款软件已经收录了很久，刚才整理文件的时候看到了，所以把这款软件发布出来，之前一个朋友找我要过，但是当时没找到，所以现在发布出来。这款软件是一款收费的tomcat应用程序管理后台，现在免费发布出来。以供大家使用。<br/>最新版本的大家可以去下载，不过需要支付一定的money。<br/>文件名称：apache-tomcat-5.5.20-admin.zip<br/>应用版本：apache-tomcat-5.5或以上<br/><a href="http://agilebllog.cn/attachment/apache-tomcat-5.5.20-admin.zip">点击这里下载文件</a><br/><br/>Tags - <a href="http://agileblog.cn/tags/apache/" rel="tag">apache</a> , <a href="http://agileblog.cn/tags/tomcat/" rel="tag">tomcat</a> , <a href="http://agileblog.cn/tags/admin/" rel="tag">admin</a> , <a href="http://agileblog.cn/tags/download/" rel="tag">download</a> , <a href="http://agileblog.cn/tags/tomcat%25E5%2590%258E%25E5%258F%25B0%25E7%25AE%25A1%25E7%2590%2586/" rel="tag">tomcat后台管理</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/PHP-Regular-Expressions/</link>
<title><![CDATA[PHP中正则表达式使用详解(转)]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Sun, 01 Aug 2010 03:03:29 +0000</pubDate> 
<guid>http://agileblog.cn/PHP-Regular-Expressions/</guid> 
<description>
<![CDATA[ 
	本文永久地址： <a href="http://agileblog.cn/PHP-Regular-Expressions/" target="_blank">http://agileblog.cn/PHP-Regular-Expressions/</a><br/>如果我们问那些UNIX系统的爱好者他们最喜欢什么，答案除了稳定的系统和可以远程启动之外，十有八九的人会提到正则表达式；如果我们再问他们最头痛的是什么，可能除了复杂的进程控制和安装过程之外，还会是正则表达式。那么正则表达式到底是什么？如何才能真正的掌握正则表达式并正确的加以灵活运用？本文将就此展开介绍，希望能够对那些渴望了解和掌握正则表达式的读者有所助益。 <br/><br/>入门简介 <br/>　　简单的说，正则表达式是一种可以用于模式匹配和替换的强有力的工具。我们可以在几乎所有的基于UNIX系统的工具中找到正则表达式的身影，例如，vi编辑器，Perl或PHP脚本语言，以及awk或sed shell程序等。此外，象JavaScript这种客户端的脚本语言也提供了对正则表达式的支持。由此可见，正则表达式已经超出了某种语言或某个系统的局限，成为人们广为接受的概念和功能。 <br/>　　正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式，然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较，根据比较对象中是否包含匹配模式，执行相应的程序。 <br/>　　举例来说，正则表达式的一个最为普遍的应用就是用于验证用户在线输入的邮件地址的格式是否正确。如果通过正则表达式验证用户邮件地址的格式正确，用户所填写的表单信息将会被正常处理；反之，如果用户输入的邮件地址与正则表达的模式不匹配，将会弹出提示信息，要求用户重新输入正确的邮件地址。由此可见正则表达式在WEB应用的逻辑判断中具有举足轻重的作用。 <br/><br/>基本语法 <br/>　　在对正则表达式的功能和作用有了初步的了解之后，我们就来具体看一下正则表达式的语法格式。 <br/>　　正则表达式的形式一般如下： <br/>　　/love/ <br/>　　其中位于“/”定界符之间的部分就是将要在目标对象中进行匹配的模式。用户只要把希望查找匹配对象的模式内容放入“/”定界符之间即可。为了能够使用户更加灵活的定制模式内容，正则表达式提供了专门的“元字符”。所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符，可以用来规定其前导字符（即位于元字符前面的字符）在目标对象中的出现模式。 <br/>　　较为常用的元字符包括： “+”， “*”，以及 “?”。其中，“+”元字符规定其前导字符必须在目标对象中连续出现一次或多次，“*”元字符规定其前导字符必须在目标对象中出现零次或连续多次，而“?”元字符规定其前导对象必须在目标对象中连续出现零次或一次。 <br/>　　下面，就让我们来看一下正则表达式元字符的具体应用。 <br/>　　/fo+/ <br/>　　因为上述正则表达式中包含“+”元字符，表示可以与目标对象中的 “fool”, “fo”, 或者 “football”等在字母f后面连续出现一个或多个字母o的字符串相匹配。 <br/>　　/eg*/ <br/>　　因为上述正则表达式中包含“*”元字符，表示可以与目标对象中的 “easy”, “ego”, 或者 “egg”等在字母e后面连续出现零个或多个字母g的字符串相匹配。 <br/>　　/Wil?/ <br/>　　因为上述正则表达式中包含“？”元字符，表示可以与目标对象中的 “Win”, 或者 “Wilson”,等在字母i后面连续出现零个或一个字母l的字符串相匹配。 <br/>　　除了元字符之外，用户还可以精确指定模式在匹配对象中出现的频率。例如， <br/>　　/jim&#123;2,6&#125;/ <br/>　　上述正则表达式规定字符m可以在匹配对象中连续出现2-6次，因此，上述正则表达式可以同jimmy或jimmmmmy等字符串相匹配。 <br/>　　在对如何使用正则表达式有了初步了解之后，我们来看一下其它几个重要的元字符的使用方式。 <br/>　　&#92;s：用于匹配单个空格符，包括tab键和换行符； <br/>　　&#92;S：用于匹配除单个空格符之外的所有字符； <br/>　　&#92;d：用于匹配从0到9的数字； <br/>　　&#92;w：用于匹配字母，数字或下划线字符； <br/>　　&#92;W：用于匹配所有与&#92;w不匹配的字符； <br/>　　. ：用于匹配除换行符之外的所有字符。 <br/>　　（说明：我们可以把&#92;s和&#92;S以及&#92;w和&#92;W看作互为逆运算） <br/>　　下面，我们就通过实例看一下如何在正则表达式中使用上述元字符。 <br/>　　/&#92;s+/ <br/>　　上述正则表达式可以用于匹配目标对象中的一个或多个空格字符。 <br/>　　/&#92;d000/ <br/>　　如果我们手中有一份复杂的财务报表，那么我们可以通过上述正则表达式轻而易举的查找到所有总额达千元的款项。 <br/>　　除了我们以上所介绍的元字符之外，正则表达式中还具有另外一种较为独特的专用字符，即定位符。定位符用于规定匹配模式在目标对象中的出现位置。 <br/>　　较为常用的定位符包括： “^”, “$”, “&#92;b” 以及 “&#92;B”。其中，“^”定位符规定匹配模式必须出现在目标字符串的开头，“$”定位符规定匹配模式必须出现在目标对象的结尾，&#92;b定位符规定匹配模式必须出现在目标字符串的开头或结尾的两个边界之一，而“&#92;B”定位符则规定匹配对象必须位于目标字符串的开头和结尾两个边界之内，即匹配对象既不能作为目标字符串的开头，也不能作为目标字符串的结尾。同样，我们也可以把“^”和“$”以及“&#92;b”和“&#92;B”看作是互为逆运算的两组定位符。举例来说： <br/>　　/^hell/ <br/>　　因为上述正则表达式中包含“^”定位符，所以可以与目标对象中以 “hell”, “hello”或 “hellhound”开头的字符串相匹配。 <br/>　　/ar$/ <br/>　　因为上述正则表达式中包含“$”定位符，所以可以与目标对象中以 “car”, “bar”或 “ar” 结尾的字符串相匹配。 <br/>　　/&#92;bbom/ <br/>　　因为上述正则表达式模式以“&#92;b”定位符开头，所以可以与目标对象中以 “bomb”, 或 “bom”开头的字符串相匹配。 <br/>　　/man&#92;b/ <br/>　　因为上述正则表达式模式以“&#92;b”定位符结尾，所以可以与目标对象中以 “human”, “woman”或 “man”结尾的字符串相匹配。 <br/>　　为了能够方便用户更加灵活的设定匹配模式，正则表达式允许使用者在匹配模式中指定某一个范围而不局限于具体的字符。例如： <br/>　　/[A-Z]/ <br/>　　上述正则表达式将会与从A到Z范围内任何一个大写字母相匹配。 <br/>　　/[a-z]/ <br/>　　上述正则表达式将会与从a到z范围内任何一个小写字母相匹配。 <br/>　　/[0-9]/ <br/>　　上述正则表达式将会与从0到9范围内任何一个数字相匹配。 <br/>　　/([a-z][A-Z][0-9])+/ <br/>　　上述正则表达式将会与任何由字母和数字组成的字符串，如 “aB0” 等相匹配。这里需要提醒用户注意的一点就是可以在正则表达式中使用 “()” 把字符串组合在一起。“()”符号包含的内容必须同时出现在目标对象中。因此，上述正则表达式将无法与诸如 “abc”等的字符串匹配，因为“abc”中的最后一个字符为字母而非数字。 <br/>　　如果我们希望在正则表达式中实现类似编程逻辑中的“或”运算，在多个不同的模式中任选一个进行匹配的话，可以使用管道符 “&#124;”。例如： <br/>　　/to&#124;too&#124;2/ <br/>　　上述正则表达式将会与目标对象中的 “to”, “too”, 或 “2” 相匹配。 <br/>　　正则表达式中还有一个较为常用的运算符，即否定符 “[^]”。与我们前文所介绍的定位符 “^” 不同，否定符 “[^]”规定目标对象中不能存在模式中所规定的字符串。例如： <br/>　<div class="code">　/&#91;^A-C&#93;/ </div><br/>　　上述字符串将会与目标对象中除A，B，和C之外的任何字符相匹配。一般来说，当“^”出现在 “[]”内时就被视做否定运算符；而当“^”位于“[]”之外，或没有“[]”时，则应当被视做定位符。 <br/>　　最后，当用户需要在正则表达式的模式中加入元字符，并查找其匹配对象时，可以使用转义符“&#92;”。例如： <br/>　　<div class="code">/Th&#92;*/ </div><br/>　　上述正则表达式将会与目标对象中的“Th*”而非“The”等相匹配。<br/><br/>使用实例 <br/><br/>　　在对正则表达式有了较为全面的了解之后，我们就来看一下如何在Perl，PHP，以及JavaScript中使用正则表达式。 <br/><br/>　　通常，Perl中正则表达式的使用格式如下： <br/><br/>　　<div class="code">operator / regular-expression / string-to-replace / modifiers </div><br/><br/>　　运算符一项可以是m或s，分别代表匹配运算和替换运算。 <br/><br/>　　其中，正则表达式一项是将要进行匹配或替换操作的模式，可以由任意字符，元字符，或定位符等组成。替换字符串一项是使用s运算符时，对查找到的模式匹配对象进行替换的字符串。最后的参数项用来控制不同的匹配或替换方式。例如： <br/><br/>　　<div class="code">s/geed/good/ </div><br/><br/>　　将会在目标对象中查找第一个出现的geed字串，并将其替换为good。如果我们希望在目标对象的全局范围内执行多次查找?替换操作的话，可以使用参数 “g”，即s/love/lust/g。 <br/><br/>　　此外，如果我们不需要限制匹配的大小写形式的话，可以使用参数 “i ”。例如， <br/><br/>　　<div class="code">m/JewEL/i </div><br/><br/>　　上述正则表达式将会与目标对象中的jewel，Jewel，或JEWEL相匹配。 <br/><br/>　　在Perl中，使用专门的运算符“=~”指定正则表达式的匹配对象。例如： <br/><br/>　　<div class="code">$flag =~ s/abc/ABC/ </div><br/><br/>　　上述正则表达式将会把变量$flag中的字串abc替换为ABC。 <br/><br/>　　下面，我们就在Perl程序中加入正则表达式，验证用户邮件地址格式的有效性。代码如下： <br/><br/> <br/><br/><br/>　　如果用户更偏爱PHP的话，可以使用ereg()函数进行模式匹配操作。ereg()函数的使用格式如下： <br/>　　<div class="code"> ereg(pattern, string) </div><br/><br/>　　其中，pattern代表正则表达式的模式，而string则是执行查找替换操作的目标对象。同样是验证邮件地址，使用PHP编写的程序代码如下： <br/><div class="code"><br/>　　&lt;?php <br/>　　 if (ereg(“^(&#91;a-zA-Z0-9_-&#93;)+@(&#91;a-zA-Z0-9_-&#93;)+(&#92;.&#91;a-zA-Z0-9_-&#93;)+”,$email)) <br/>　　　 &#123; echo “Your email address is correct!”;&#125; <br/>　　 else <br/>　　　 &#123; echo “Please try again!”;&#125; <br/>　　 ?&gt; <br/></div><br/>　　最后，我们在来看一下JavaScript。JavaScript 1.2中带有一个功能强大的RegExp()对象，可以用来进行正则表达式的匹配操作。其中的test()方法可以检验目标对象中是否包含匹配模式，并相应的返回true或false。 <br/><br/>　　我们可以使用JavaScript编写以下脚本，验证用户输入的邮件地址的有效性。 <br/><div class="code"><br/>　　&lt;html&gt; <br/>　　 &lt;head&gt; <br/>　　　 &lt;script language=&#92;&quot;Javascript1.2&#92;&quot;&gt; <br/>　　　　 &lt;!-- start hiding <br/>　　　　 function verifyAddress(obj) <br/>　　　　　&#123; <br/>　　　　　　var email = obj.email.value; <br/>　　　　　　var pattern = /^(&#91;a-zA-Z0-9_-&#93;)+@(&#91;a-zA-Z0-9_-&#93;)+(&#92;.&#91;a-zA-Z0-9_-&#93;)+/; <br/>　　　　　　flag = pattern.test(email); <br/>　　　　　　if(flag) <br/>　　　　　　&#123; <br/>　　　　　　　alert(“Your email address is correct!”); <br/>　　　　　　　return true; <br/>　　　　　　&#125; <br/>　　　　　　else <br/>　　　　　　　&#123; <br/>　　　　　　　　alert(“Please try again!”); <br/>　　　　　　　　return false; <br/>　　　　　　　 &#125; <br/>　　　　　 &#125; <br/>　　　　 // stop hiding --&gt; <br/>　　　 &lt;/script&gt; <br/>　　　&lt;/head&gt; <br/>　　 &lt;body&gt; <br/>　　 &lt;form onSubmit=&#92;&quot;return verifyAddress(this);&#92;&quot;&gt; <br/>　　　&lt;input name=&#92;&quot;email&#92;&quot; type=&#92;&quot;text&#92;&quot;&gt; <br/>　　　&lt;input type=&#92;&quot;submit&#92;&quot;&gt; <br/>　　　&lt;/form&gt; <br/>　　&lt;/body&gt; <br/>　&lt;/html&gt;<br/></div><br/><br/>原文地址：<a href="http://clayz.javaeye.com/blog/217408" target="_blank">http://clayz.javaeye.com/blog/217408</a><br/>Tags - <a href="http://agileblog.cn/tags/php/" rel="tag">php</a> , <a href="http://agileblog.cn/tags/regular/" rel="tag">regular</a> , <a href="http://agileblog.cn/tags/expressions/" rel="tag">expressions</a> , <a href="http://agileblog.cn/tags/%25E6%25AD%25A3%25E5%2588%2599%25E8%25A1%25A8%25E8%25BE%25BE%25E5%25BC%258F/" rel="tag">正则表达式</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/PHP-Interview-questions/</link>
<title><![CDATA[PHP面试题目]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Sun, 01 Aug 2010 02:43:38 +0000</pubDate> 
<guid>http://agileblog.cn/PHP-Interview-questions/</guid> 
<description>
<![CDATA[ 
	1. echo count("abc"); 输出什么？<br/>答案是1<br/><br/>2. 用PHP写出显示客户端IP与服务器IP的代码<br/>获取客户端IP：<br/>A、<div class="code"><br/>&lt;?<br/>$iipp=$_SERVER&#91;&quot;REMOTE_ADDR&quot;&#93;;<br/>echo $iipp;<br/>?&gt; <br/></div><br/>B、<br/><div class="code"><br/>&lt;? <br/>//php获取ip的算法<br/>if ($HTTP_SERVER_VARS&#91;&quot;HTTP_X_FORWARDED_FOR&quot;&#93;) <br/>&#123; <br/> $ip = $HTTP_SERVER_VARS&#91;&quot;HTTP_X_FORWARDED_FOR&quot;&#93;; <br/>&#125; <br/>elseif ($HTTP_SERVER_VARS&#91;&quot;HTTP_CLIENT_IP&quot;&#93;) <br/>&#123; <br/> $ip = $HTTP_SERVER_VARS&#91;&quot;HTTP_CLIENT_IP&quot;&#93;; <br/>&#125;<br/>elseif ($HTTP_SERVER_VARS&#91;&quot;REMOTE_ADDR&quot;&#93;) <br/>&#123; <br/> $ip = $HTTP_SERVER_VARS&#91;&quot;REMOTE_ADDR&quot;&#93;; <br/>&#125; <br/>elseif (getenv(&quot;HTTP_X_FORWARDED_FOR&quot;)) <br/>&#123; <br/> $ip = getenv(&quot;HTTP_X_FORWARDED_FOR&quot;); <br/>&#125; <br/>elseif (getenv(&quot;HTTP_CLIENT_IP&quot;)) <br/>&#123; <br/> $ip = getenv(&quot;HTTP_CLIENT_IP&quot;); <br/>&#125; <br/>elseif (getenv(&quot;REMOTE_ADDR&quot;))<br/> &#123; <br/> $ip = getenv(&quot;REMOTE_ADDR&quot;); <br/>&#125; <br/>else <br/>&#123; <br/> $ip = &quot;Unknown&quot;; <br/>&#125; <br/>echo &quot;你的IP:&quot;.$ip ; <br/><br/></div><br/>获取服务器端IP<br/><div class="code"><br/>/**<br/> * Get Client/Server IP <br/> * <br/> * @author&nbsp;&nbsp;Yaron (http://yaron.org.cn)<br/> * @version&nbsp;&nbsp;0.1<br/> * @package&nbsp;&nbsp;<br/> */<br/> <br/>class getIP&#123;<br/> function clientIP()&#123;<br/>&nbsp;&nbsp;$cIP = getenv(&#039;REMOTE_ADDR&#039;);<br/>&nbsp;&nbsp;$cIP1 = getenv(&#039;HTTP_X_FORWARDED_FOR&#039;);<br/>&nbsp;&nbsp;$cIP2 = getenv(&#039;HTTP_CLIENT_IP&#039;);<br/>&nbsp;&nbsp;$cIP1 ? $cIP = $cIP1 : null;<br/>&nbsp;&nbsp;$cIP2 ? $cIP = $cIP2 : null;<br/>&nbsp;&nbsp;return $cIP;<br/> &#125;<br/> function serverIP()&#123;<br/>&nbsp;&nbsp;return gethostbyname($_SERVER_NAME);<br/> &#125;<br/>&#125;<br/> <br/>$getIP&nbsp;&nbsp;= new getIP();<br/>$clientIp = getIP::clientIP();<br/>$serverIp = getIP::serverIP();<br/> <br/>echo &#039;Client IP is &#039;,$clientIp,&#039;&lt;br /&gt;&#039;;<br/>echo &#039;Server IP is &#039;,$serverIp,&#039;&lt;br /&gt;&#039;;<br/></div><br/><br/>3. error_reporting(2047)什么作用？<br/><br/><br/>可以参考<a href="http://agileblog.cn/error-reporting-2047/" target="_blank">http://agileblog.cn/error-reporting-2047/</a><br/><br/>4. echo，print()和print_r()有什么区别？<br/><br/>echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用)&nbsp;&nbsp;<br/>print只能打印出简单类型变量的值(如int,string)&nbsp;&nbsp;<br/>print_r可以打印出复杂类型变量的值(如数组,对象)&nbsp;&nbsp;<br/>echo -- 输出一个或者多个字符串&nbsp;&nbsp;<br/><br/>5. 打开php.ini中的Safe_mode，会影响哪些参数？至少说出6个。<br/><br/>system,passthru,exec,shell_exec,popen,phpinfo等等大部分的文件操作函数。<br/>因为Safe_mode是php非常重要的内嵌的安全机制。默认是关闭的。 <br/><br/>6. 写个函数来解决多线程同时读写一个文件的问题。<br/><br/>思路：首先生成一个锁文件，读写时判断时否存在， 存在则返回假值， 不存在执行程序， 并生成一个锁文件， 程序结束删除此锁文件。 <br/><br/><br/>7. 请写一个函数验证电子邮件的格式是否正确（要求使用正则）<br/><div class="code">&lt;?php<br/>function validateEmail($email)&#123;//使用正则表达式判断Email地址是否合法的函数<br/>return ereg(&quot;^&#91;a-zA-Z&#93;+@&#91;a-zA-Z&#93;+&#92;.&#91;a-zA-Z&#93;+$&quot;,$email);<br/>&#125;<br/>echo validateEmail(&quot;myname@isstudy.com&quot;);//调用验证函数<br/>?&gt;<br/></div><br/>非正则的代码<br/><div class="code"><br/>&lt;?php<br/>function validateEmail($email)&#123;//判断Email地址是否合法的函数<br/>$hasAtSymbol=strpos($email,&quot;@&quot;);//判断是否存在@<br/>$hasDot=strpos($email,&quot;.&quot;);//判断是否存在点号<br/>if($hasAtSymbol and $hasDot)// 如果包含@和点号，则返回true<br/>return true;<br/>else&nbsp;&nbsp;//否则返回false<br/>return false;<br/>&#125;<br/>echo validateEmail(&quot;domain@freezingsun.com&quot;);//调用验证函数<br/>?&gt;<br/></div><br/><br/>8. 考SQL语句的题，题太长了，实在不好回忆了。<br/><br/>9. MySQL数据库，一天一万条以上的增量，怎么优化？<br/>做数据库负载即可。或者做数据仓库。<br/>多台数据库服务器，设置一台为主数据库服务器，其他的为从数据库服务器。<br/>也可参考：Query Cache 原理<a href="http://agileblog.cn/Query-Cache-Principle/" target="_blank">http://agileblog.cn/Query-Cache-Principle/</a><br/><br/>10. 写出一种排序算法（要写出代码），并说出优化它的方法。<br/>以下是三种常见的排序算法，这些代码的话，无须优化了。可以说是一个标准的排序算法了。<br/><div class="code"><br/>&lt;?<br/>//插入排序（一维数组）<br/>function insert_sort($arr)&#123;<br/>　$count = count($arr);<br/>　for($i=1; $i&lt;$count; $i++)&#123;<br/>　　$tmp = $arr&#91;$i&#93;;<br/>　　$j = $i - 1;<br/>　　while($arr&#91;$j&#93; &gt; $tmp)&#123;<br/>　　　$arr&#91;$j+1&#93; = $arr&#91;$j&#93;;<br/>　　　$arr&#91;$j&#93; = $tmp;<br/>　　　$j--;<br/>　　&#125;<br/>　&#125;<br/>　return $arr;<br/>&#125;<br/>　　<br/>//选择排序（一维数组）<br/>function select_sort($arr)&#123;<br/>　$count = count($arr);<br/>　for($i=0; $i&lt;$count; $i++)&#123;<br/>　　$k = $i;<br/>　　for($j=$i+1; $j&lt;$count; $j++)&#123;<br/>　　　if ($arr&#91;$k&#93; &gt; $arr&#91;$j&#93;)<br/>　　　　$k = $j;<br/>　　　if ($k != $i)&#123;<br/>　　　　$tmp = $arr&#91;$i&#93;;<br/>　　　　$arr&#91;$i&#93; = $arr&#91;$k&#93;;<br/>　　　　$arr&#91;$k&#93; = $tmp;<br/>　　　&#125;<br/>　　&#125;<br/>　&#125;<br/>　return $arr;<br/>&#125;<br/>　　<br/>//冒泡排序（一维数组）<br/>function bubble_sort($array)&#123;<br/>　$count = count($array);<br/>　if ($count &lt;= 0) return false;<br/>　<br/>　for($i=0; $i&lt;$count; $i++)&#123;<br/>　　for($j=$count-1; $j&gt;$i; $j--)&#123;<br/>　　　if ($array&#91;$j&#93; &lt; $array&#91;$j-1&#93;)&#123;<br/>　　　　$tmp = $array&#91;$j&#93;;<br/>　　　　$array&#91;$j&#93; = $array&#91;$j-1&#93;;<br/>　　　　$array&#91;$j-1&#93; = $tmp;<br/>　　　&#125;<br/>　　&#125;<br/>　&#125;<br/>　return $array;<br/>&#125;<br/>　　<br/>//快速排序（一维数组）<br/>function quick_sort($array)&#123;<br/>　if (count($array) &lt;= 1) return $array;<br/>　　<br/>　$key = $array&#91;0&#93;;<br/>　$left_arr = array();<br/>　$right_arr = array();<br/>　for ($i=1; $i&lt;count($array); $i++)&#123;<br/>　　if ($array&#91;$i&#93; &lt;= $key)<br/>　　　$left_arr&#91;&#93; = $array&#91;$i&#93;;<br/>　　else<br/>　　　$right_arr&#91;&#93; = $array&#91;$i&#93;;<br/>　&#125;<br/>　$left_arr = quick_sort($left_arr);<br/>　$right_arr = quick_sort($right_arr);<br/>　<br/>　return array_merge($left_arr, array($key), $right_arr);<br/>&#125;<br/>　　<br/>?&gt;<br/></div><br/><br/>11. 写个函数用来对二维数组排序。<br/><div class="code"><br/>public class TestSort &#123;<br/>public static void main(String&#91;&#93; args) &#123;<br/>&nbsp;&nbsp; int&#91;&#93;&#91;&#93; a=&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#123;1,1,2,4,2&#125;,<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#123;1,79,21,65&#125;,<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#123;111,23,6,2&#125;,<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#123;98,98,2,100&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#125;;<br/>&nbsp;&nbsp; int result=0;<br/><br/>&nbsp;&nbsp; for(int i=0;i&lt;a.length;i++)<br/>&nbsp;&nbsp; &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for(int j=0;j&lt;a&#91;i&#93;.length;j++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; for(int k=j;k&lt;a&#91;i&#93;.length;k++)<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int temp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(a&#91;i&#93;&#91;j&#93;&gt;a&#91;i&#93;&#91;k&#93;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; temp=a&#91;i&#93;&#91;j&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a&#91;i&#93;&#91;j&#93;=a&#91;i&#93;&#91;k&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a&#91;i&#93;&#91;k&#93;=temp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result++;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; System.out.println(&quot;result=&quot;+result);<br/>&nbsp;&nbsp; for(int m=0;m&lt;a.length;m++)<br/>&nbsp;&nbsp; &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for(int n=0;n&lt;a&#91;m&#93;.length;n++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; System.out.print(a&#91;m&#93;&#91;n&#93;+&quot;, &quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println();<br/>&nbsp;&nbsp; &#125;<br/>&#125;<br/>&#125;<br/></div><br/><br/><br/>12. 写5个不同的自己的函数，来截取一个全路径的文件的扩展名，允许封装php库中已有的函数。<br/><div class="code"><br/>1. substr($sPath, -3)<br/>2. $arPath = explode(&quot;/&quot;, $sPath); $arPath&#91; count($arPath)-1 &#93;<br/>3. $arPath = explode(&quot;.&quot;, $sPath); $arPath&#91; 1 &#93;<br/>4. $arPath = pathinfo( $sPath ); $arPath&#91;&quot;extension&quot;&#93;<br/>5. preg_match(&quot;/.(&#92;w+)$/&quot;, $sPath, $arPath); $arPath&#91;1&#93;<br/></div><br/><br/>13. 一群猴子排成一圈，按1，2，...，n依次编号。然后从第1只开始数，数到第m只,把它踢出圈，从它后面再开始数，再数到第m只，在把它踢出去...，如此不停的进行下去，直到最后只剩下一只猴子为止，那只猴子就叫做大王。要求编程模拟此过程，输入m、n, 输出最后那个大王的编号。<br/><br/><div class="code"><br/>&lt;?php<br/>/**<br/>* 猴子选大王<br/>*<br/>* @param int $m 猴子数<br/>* @param int $n 出局数<br/>* @return array<br/>*<br/>*/<br/>function king($m ,$n)<br/>&#123;<br/>//构造数组<br/>for($i=1 ;$i&lt;$m+1 ;$i++)&#123;<br/>&nbsp;&nbsp; $arr&#91;&#93; = $i ;<br/>&#125;<br/>$i = 0 ;&nbsp;&nbsp;&nbsp;&nbsp;//设置数组指针<br/><br/>while(count($arr)&gt;1)<br/>&#123;<br/>&nbsp;&nbsp; //遍历数组，判断当前猴子是否为出局序号，如果是则出局，否则放到数组最后<br/>&nbsp;&nbsp; if(($i+1)%$n ==0) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;unset($arr&#91;$i&#93;) ;<br/>&nbsp;&nbsp; &#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;array_push($arr ,$arr&#91;$i&#93;) ; //本轮非出局猴子放数组尾部<br/>&nbsp;&nbsp;&nbsp;&nbsp;unset($arr&#91;$i&#93;) ;&nbsp;&nbsp; //删除<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; $i++ ;<br/>&#125;<br/>return $arr ;<br/>&#125;<br/><br/>var_dump(king(6,4));<br/><br/></div><br/>Tags - <a href="http://agileblog.cn/tags/php%25E9%25AA%258C%25E8%25AF%2581%25E9%2582%25AE%25E4%25BB%25B6/" rel="tag">php验证邮件</a> , <a href="http://agileblog.cn/tags/%25E5%25A4%259A%25E7%25BA%25BF%25E7%25A8%258B/" rel="tag">多线程</a> , <a href="http://agileblog.cn/tags/mysql%25E8%25B4%259F%25E8%25BD%25BD/" rel="tag">mysql负载</a> , <a href="http://agileblog.cn/tags/%25E6%258E%2592%25E5%25BA%258F%25E7%25AE%2597%25E6%25B3%2595/" rel="tag">排序算法</a> , <a href="http://agileblog.cn/tags/%25E4%25BA%258C%25E7%25BB%25B4%25E6%2595%25B0%25E7%25BB%2584%25E6%258E%2592%25E5%25BA%258F/" rel="tag">二维数组排序</a> , <a href="http://agileblog.cn/tags/%25E8%258E%25B7%25E5%258F%2596%25E6%2596%2587%25E4%25BB%25B6%25E6%2589%25A9%25E5%25B1%2595%25E5%2590%258D/" rel="tag">获取文件扩展名</a> , <a href="http://agileblog.cn/tags/%25E8%258E%25B7%25E5%258F%2596%25E5%25AE%25A2%25E6%2588%25B7%25E7%25AB%25AFip/" rel="tag">获取客户端ip</a> , <a href="http://agileblog.cn/tags/%25E8%258E%25B7%25E5%258F%2596%25E6%259C%258D%25E5%258A%25A1%25E5%2599%25A8%25E7%25AB%25AFip/" rel="tag">获取服务器端ip</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/error-reporting-2047/</link>
<title><![CDATA[error_reporting(2047)什么作用]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Sun, 01 Aug 2010 01:54:33 +0000</pubDate> 
<guid>http://agileblog.cn/error-reporting-2047/</guid> 
<description>
<![CDATA[ 
	error_reporting 设定错误讯息回报的等级<br/>2047我记得应该是E_ALL。<br/><br/>php.ini 文件中有许多配置设置。您应当已经设置好自己的 php.ini 文件并把它放在合适的目录中，就像在 Linux 上安装 PHP 和 Apache 2 的文档说明中所示的那样（请参阅 参考资料）。在调试 PHP 应用程序时，应当知道两个配置变量。下面是这两个变量及其默认值：<br/>display_errors = Off <br/>error_reporting = E_ALL<br/><br/>E_ALL能从不良编码实践到无害提示到出错的所有信息。E_ALL 对于开发过程来说有点太细，因为它在屏幕上为一些小事（例如变量未初始化）也显示提示，会搞糟浏览器的输出<br/>所以不建议使用2047，最好把默认值改为：error_reporting = E_ALL & ~E_NOTICE<br/><br/><br/>2047 = E_X &#124; E_Y &#124;.....<br/><br/>1 E_ERROR&nbsp;&nbsp; <br/>2 E_WARNING&nbsp;&nbsp; <br/>4 E_PARSE&nbsp;&nbsp; <br/>8 E_NOTICE&nbsp;&nbsp; <br/>16 E_CORE_ERROR&nbsp;&nbsp; <br/>32 E_CORE_WARNING&nbsp;&nbsp; <br/>64 E_COMPILE_ERROR&nbsp;&nbsp; <br/>128 E_COMPILE_WARNING&nbsp;&nbsp; <br/>256 E_USER_ERROR&nbsp;&nbsp; <br/>512 E_USER_WARNING&nbsp;&nbsp; <br/>1024 E_USER_NOTICE&nbsp;&nbsp; <br/><br/>2048 E_STRICT&nbsp;&nbsp; <br/>6143 E_ALL&nbsp;&nbsp; <br/>4096 E_RECOVERABLE_ERROR&nbsp;&nbsp; <br/>8192 E_DEPRECATED&nbsp;&nbsp; <br/>16384 E_USER_DEPRECATED&nbsp;&nbsp; <br/><br/>似乎是E_STRICT之前所有的累积啊<br/><br/><br/>思路：2047 = 1024 + 512 + 256 + 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1<br/><br/>Tags - <a href="http://agileblog.cn/tags/php/" rel="tag">php</a> , <a href="http://agileblog.cn/tags/%25E8%25AE%25BE%25E7%25BD%25AE%25E6%258A%25A5%25E9%2594%2599%25E7%25AD%2589%25E7%25BA%25A7/" rel="tag">设置报错等级</a> , <a href="http://agileblog.cn/tags/%25E6%2589%2593%25E5%258D%25B0%25E6%258A%25A5%25E9%2594%2599/" rel="tag">打印报错</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Work-Flow-System/</link>
<title><![CDATA[工作流系统主要的概念]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Java开发]]></category>
<pubDate>Sat, 31 Jul 2010 10:33:33 +0000</pubDate> 
<guid>http://agileblog.cn/Work-Flow-System/</guid> 
<description>
<![CDATA[ 
	本文永久链接：<a href="http://agileblog.cn/Work-Flow-System/" target="_blank">http://agileblog.cn/Work-Flow-System/</a><br/>流程定义：预先定义的业务流程逻辑<br/>流程实例:业务的一次实际流转过程<br/>参与者：任务的执行者<br/>活动（任务）：组成流程定义的节点<br/>活动实例：组成流程实例的元素<br/>流转：从一个节点到另一个节点这一行为<br/>工作列表：当前需要办理的任务集合<br/>工作了引擎：工作流的核心组件，对流程实例、任务实例以及其状态进行管理。<br/><br/><br/>工作流系统研究切入点<br/><br/>1、如何编写流程定义<br/>2、如何部署流程<br/>3、如何加载流程<br/>4、如何启动流程<br/>5、如何执行任务<br/>6、如何完成任务<br/><br/>编写工作流引擎的步骤<br/>1、创建流程定义<br/>2、部署流程定义<br/>3、启动流程实例<br/>4、获取任务列表<br/>5、执行任务<br/>6、结束任务<br/>Tags - <a href="http://agileblog.cn/tags/%25E5%25B7%25A5%25E4%25BD%259C%25E6%25B5%2581/" rel="tag">工作流</a> , <a href="http://agileblog.cn/tags/%25E5%25B7%25A5%25E4%25BD%259C%25E6%25B5%2581%25E7%25B3%25BB%25E7%25BB%259F/" rel="tag">工作流系统</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Permalink/</link>
<title><![CDATA[WordPress永久链接格式对比及设置参考(转)]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[SEO]]></category>
<pubDate>Fri, 30 Jul 2010 23:53:25 +0000</pubDate> 
<guid>http://agileblog.cn/Permalink/</guid> 
<description>
<![CDATA[ 
	本文地址：<a href="http://agileblog.cn/Permalink/" target="_blank">http://agileblog.cn/Permalink/</a><br/>WordPress永久链接又叫固定链接，官方称Permalink，就是对日志、分类、标签等URL路径进行友好格式化显示，也就是看起来舒服一点，更方便搜索引擎的收录和分析，而真正意义上的固定链接，应该是伴随着静态化的，合理的URL结构会让日志、分类和标签管理更加合理，更加方便归类和整理，比如Windows方面文章放到Windows目录下，汽车方面文章放到auto下当然更加合理，既然Wordpress使用的都是伪静态或说伪动态，那么URL永久链接就纯粹为了好看和搜索引擎优化，优点就是实时生效，天缘博客则是真静态化，整体设置只要修改就要刷新全部静态页，各有优缺点。<br/><br/>一、Wordpress固定链接全是假的<br/>这个标题有点外行，只是为了方便理解，实际上应该叫Mod Rewrite，打个比方就是网上很多IDC留下的电话号码，为了给别人大、正规的假象，往往设置很多分机，比如888888-741、888888-874等等，实际上，你打任何分机过去，可能都是一个人在接，公司也可能只有一个员工，这堆分机放到本文理解就是Mod Rewrite。这个员工就是index.php。<br/><br/>使用WordPress永久链接的前提，要求所在主机必须支持Mod Rewrite重写。<br/><br/>WordPress默认URL格式：<br/><br/>/?p=postid<br/><br/>/?cat=cateid<br/><br/>/?tag=mytag<br/><br/>这三种类型地址格式是真的，根下的index.php确实存在这些参数的接收和处理，所以即使没有重写功能，也并不影响这类默认URL格式使用，但如要使用自定义的固定链接格式，则必须具有Rewrite功能，否则会全部报告404错误。<br/><br/>二、如何设置WordPress永久链接<br/>登录到WordPress后台，然后点击左侧工具栏菜单Setting（设置）-》Permalink Setting（固定链接）<br/><br/>固定链接包含两个部分：<br/><br/>日志路径——有五个选项，默认格式就是上文提到的动态参数格式。<br/><br/>分类和标签路径——只有日志处于默认设置时，分类和标签默认路径才是上文的动态参数形式。<br/><br/>日志永久链接包括的标签变量有：<br/><br/>%year%、 %monthnum%、%day% 、%hour% 、%minute% 、%second%——分别代表年月日时分秒<br/><br/>%post_id%——日志ID<br/><br/>%postname%——日志别名<br/><br/>%category%——日志分类<br/><br/>%tag%——日志标签<br/><br/>%author%——日志作者<br/><br/>由于分类和标签URL格式，可能会随着日志永久链接变化而变化，所以设置设置好日志永久链接后一定要检查分类和标签链接格式是否合意，否则需对应修改，修改方法参考下文，或结合官方说明地址。<br/><br/>三、WordPress日志永久链接设置<br/><br/>1、若非特殊用途，%hour% 、%minute% 、%second%和%author%、%category%、%tag%慎用，感觉对个人博客完全没有必要，WordPress似乎纯粹为了功能完整性而设计出来。如果日志URL中带有%category%和%tag%，某天日志分类或标签被修改掉，URL可能就会变化。<br/><br/>2、%year%、 %monthnum%、%day%建议只在多人博客或多具有时效性日志的博客上使用，当博客上每天都多篇日志或具有时效性的新闻发布时，可以考虑这种格式，典型URL格式如下：<br/><br/>/%year%/%monthnum%/%postname%<br/><br/>/%year%/%monthnum%/%day%/%postname%<br/><br/> <br/><br/>/%year%/%monthnum%/%postname%/<br/><br/>/%year%/%monthnum%/%day%/%postname%/<br/><br/>这四种格式，后面两种可以在上面图中直接选择，上面自定义一下，去掉反斜线即可，如果你的日志并不多，没必要使用此种格式。<br/><br/>3、个人博客建议下面三种形式之一：<br/><br/>方式1：<br/><br/>/archives/%postname%.html<br/><br/>/archives/%post_id%.html<br/><br/>/%postname%.html<br/><br/>——这三种看起来比较标准，对搜索引擎也比较友好。其中archives也可换成自己喜欢的单词，比如blog等，也可把尾标换成.html、.htm、.php等，也可自定义尾标。把路径直接定位到网站根目录的（第三种），在很多国外网站上也很常见。<br/><br/>方式2：<br/><br/>/archives/%post_id%<br/><br/>/archives/%postname%<br/><br/>/%postname%<br/><br/>——这三种地址更短一点，看起来也很不错，打算一直似乎也Wordpress的用户可以优先考虑，如果哪天换系统或突然主机不支持重写了可能会带来麻烦。<br/><br/>方式3：<br/><br/>/archives/%post_id%/<br/><br/>/archives/%postname%/<br/><br/>/%postname%/<br/><br/>——个人感觉这三种地址最古怪，据说对搜索引擎更好，还是认为带个直接没有反斜杠或带个尾标似乎更好。因为那样更像一个标准的路径及目标文件名，而且带尾标的的路径即使在不支持MOD REWRITE的主机上也很容易实现“真静态”。<br/><br/>另外，类似/index.php/2010/06/27/windows-7/这样的地址就更不要采用了，已经完全脱离URL的样子，太另类了。<br/><br/>更多讨论：天缘征询：关于博客日志、分类和归档目录路径的讨论<br/><br/>四、WordPress分类及标签永久链接设置<br/>默认的分类和标签路径也都是动态的，所以一旦修改了日志永久链接，默认的WordPress分类及标签链接可能也会变化，需注意检查。<br/><br/>假设日志路径选择的是/archives/%post_id%.html，下面的分类和标签路径可能默认如下：<br/><br/>/archives/category/mycate<br/><br/>/archives/tag/mytag<br/><br/>很明显，这个默认路径有点长，如果再存在二级分类，那么URL很容易超过四五级，可以改成下面的样子（如上文插图，试验一下就知道）：<br/><br/>设置为“category”后：/category/windows-7<br/><br/>设置为“tag”后：/tag/mytag<br/><br/>这样的路径更简短一些，这样从访客角度看来，日志放到archives（blog）目录下，分类放到category目录下，标签放到tag目录下，各得其所，非常明了。<br/><br/>五、关于WordPress永久链接的几点事项<br/>1、最好不要在URL中出现中文，天缘也看到有些博客的URL使用到中文字符串，可能是为了方便，也可能是个人爱好，多字节字符作为URL就像是“.中国”域名那样，还有中文网址，毕竟太中国特色，在互联网上还是抛弃掉吧。<br/><br/>2、是否设置为伪静态URL格式，比如带.html等扩展名，看个人爱好。<br/><br/>3、链接深度不要太多，十不过三最好不要超过三级、带子分类别超过四级，每天有多篇文章更新的博客的，可以考虑带年月日的URL路径，个人博客写不了那么多篇原创文章的，就无需使用年月日URL。比如天缘目前使用的archives/id.html格式，也可使用blog/post-name.html格式，对个人博客足够使用的了。<br/><br/>4、是否使用post_id也要看个人爱好了，因为WordPress跟zblog还不同，自动保存草稿、页面等都保存在一个数据表中，所以这个ID是不连续的，所以博客路径看起来很不爽（可能天缘有洁癖，呵呵，总希望ID是连续的），所以使用WordPress还是建议使用postname，尤其是英文博客几乎清一色的都是有postname，中文博客可能对英文有点要求，也可以找找插件，要么就用id了，汉语拼音用在URL上怎么讲还是有点长。<br/><br/>5、永久链接在博客建立之初就需设置好，一经设置就最好别动了，错就错到底就是没有错。<br/><br/>转载自 天缘博客 及本文链接地址:<a href="http://www.metsky.com/archives/467.html" target="_blank">http://www.metsky.com/archives/467.html</a><br/><br/>Tags - <a href="http://agileblog.cn/tags/wordpress/" rel="tag">wordpress</a> , <a href="http://agileblog.cn/tags/permalink/" rel="tag">permalink</a> , <a href="http://agileblog.cn/tags/rewrite/" rel="tag">rewrite</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Using-javascript-to-do-basic-verification-page/</link>
<title><![CDATA[使用JS做基本的页面验证]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[JavaScript]]></category>
<pubDate>Fri, 30 Jul 2010 14:16:15 +0000</pubDate> 
<guid>http://agileblog.cn/Using-javascript-to-do-basic-verification-page/</guid> 
<description>
<![CDATA[ 
	本文永久链接：<a href="http://agileblog.cn/Using-javascript-to-do-basic-verification-page/" target="_blank">http://agileblog.cn/Using-javascript-to-do-basic-verification-page/</a><br/><br/>不能为空 <br/><div class="code">&lt;input onblur=&quot;if(this.value.replace(/^ +&#124; +$/g,&#039;&#039;)==&#039;&#039;)alert(&#039;不能为空!&#039;)&quot;&gt;</div><br/><br/>只能输入英文和数字<br/><div class="code">&lt;input onblur=&quot;if(/&#91;^0-9a-zA-Z&#93;/g.test(value))alert(&#039;有错&#039;)&quot;&gt;<br/>&lt;input onkeyup=&quot;value=value.replace(/&#91;^0-9a-zA-Z&#93;/g,&#039;&#039;)&quot;/&gt;<br/>&lt;input type=&quot;text&quot; onkeyup=&quot;value=value.replace(/&#91;^&#92;a-&#92;z&#92;A-&#92;Z0-9&#93;/g,&#039;&#039;)&quot;&gt;<br/></div><br/>判断字符由字母和数字，下划线,点号组成.且开头的只能是下划线和字母 <br/><div class="code">/^(&#91;a-zA-z_&#93;&#123;1&#125;)(&#91;&#92;w&#93;*)$/g.test(str)</div><br/><br/>只能输入数字<br/><div class="code">&lt;input name=&quot;text&quot; type=&quot;text&quot; id=&quot;NewPage&quot; onKeyUp=&quot;value=value.replace(/&#92;D/g,&#039;&#039;)&quot; onafterpaste=&quot;value=value.replace(/&#92;D/g,&#039;&#039;)&quot; &gt;<br/></div><br/>只能输入中文<br/><div class="code">&lt;input type=&quot;text&quot; onkeyup=&quot;value=value.replace(/&#91;^&#92;u4E00-&#92;u9FA5&#93;/g,&#039;&#039;)&quot;&gt;</div><br/><br/>只能输入英文<br/><div class="code">&lt;input type=&quot;text&quot; onkeyup=&quot;value=value.replace(/&#91;^&#92;a-&#92;z&#92;A-&#92;Z&#93;/g,&#039;&#039;)&quot;&gt;<br/>&lt;input type=&quot;text&quot; onkeyup=&quot;value=value.replace(/&#91;^a-zA-Z&#93;/g,&#039;&#039;)&quot;&gt;<br/></div><br/>只能输入中文、英文、数字、@符号和.符号<br/><div class="code">&lt;input type=&quot;text&quot; onkeyup=&quot;value=value.replace(/&#91;^&#92;a-&#92;z&#92;A-&#92;Z0-9&#92;u4E00-&#92;u9FA5&#92;@&#92;.&#93;/g,&#039;&#039;)&quot;&gt;</div><br/><br/>只允许输入英文，且不能粘贴也无法弹出粘贴菜单<br/><div class="code"><br/>&lt;input type=&quot;text&quot; onkeyup=&quot;value=value.replace(/&#91;^&#92;a-&#92;z&#92;A-&#92;Z&#93;/g,&#039;&#039;)&quot; onkeydown=&quot;fncKeyStop(event)&quot; onpaste=&quot;return false&quot; oncontextmenu = &quot;return false&quot;/&gt;<br/></div><br/>只能输入数字和点号(注意:在[^&#92;d&#92;.]里的d不能写成大写D,否则就变成除了数字以外的所有字符)<br/><div class="code">&lt;input type=&quot;text&quot; size=&quot;8&quot; maxlength=&quot;8&quot; &gt;<br/><br/>总而言之:先在&lt;input&gt;里输入onkeyup=&quot;value=value.replace(/&#91;^&#92;X&#93;/g,&#039;&#039;)&quot; 然后在(/&#91;&#92;X&#93;/g,&#039;&#039;)里的X换成你想输入的代码就可以了<br/></div><br/>中文：u4E00-u9FA5<br/>数字：d、0-9<br/>英文：a-z、A-Z<br/>其它符号@,点或其它符号.也可以多个,用&#92;隔开就行了.<br/>例如:<br/>中、英文和数字加@符号加点符号：&#92;a-&#92;z&#92;A-&#92;Z0-9&#92;u4E00-&#92;u9FA5&#92;@&#92;.<br/><br/><div class="code">若想在文本框里不能右键弹出菜单和不能粘贴进复制的信息的话就要在&lt;input&gt;里输入 onKeyDown=&quot;fncKeyStop(event)&quot; onpaste=&quot;return false&quot; oncontextmenu=&quot;return false;&quot;<br/></div><br/>Tags - <a href="http://agileblog.cn/tags/javascript/" rel="tag">javascript</a> , <a href="http://agileblog.cn/tags/verification/" rel="tag">verification</a> , <a href="http://agileblog.cn/tags/text/" rel="tag">text</a> , <a href="http://agileblog.cn/tags/content/" rel="tag">content</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Oracle-DBA-How-do-Work/</link>
<title><![CDATA[做一个Oracle数据库管理员应该做到的]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Java开发]]></category>
<pubDate>Fri, 30 Jul 2010 14:00:03 +0000</pubDate> 
<guid>http://agileblog.cn/Oracle-DBA-How-do-Work/</guid> 
<description>
<![CDATA[ 
	本文永久地址：<a href="http://agileblog.cn/Oracle-DBA-How-do-Work/" target="_blank">http://agileblog.cn/Oracle-DBA-How-do-Work/</a><br/>如何做好Oracle数据库管理员Oracle数据库管理员应按如下方式对Oracle数据库系统做定期监控： <br/><br/>(1).每天 对Oracle数据库的运行状态,日志文件,备份情况,数据库的空间使用情况,系统资源的使用情况进行检查,发现并解决问题。 <br/><br/>(2).每周 对数据库对象的空间扩展情况,数据的增长情况进行监控,对数据库做健康检查,对数据库对象的状态做检查。 <br/><br/>(3).每月 对表和索引等进行Analyze,检查表空间碎片,寻找数据库性能调整的机会,进行数据库性能调整,提出下一步空间管理计划。对ORACLE数据库状态进行一次全面检查。 <br/><br/>每天的工作 <br/><br/>(1).确认所有的INSTANCE状态正常登陆到所有数据库或例程,检测ORACLE后台进程: $ps –ef&#124;grep ora <br/><br/>(2).检查数据文件的状态记录状态不是“online”的数据文件，并做恢复。　　 <br/><div class="code"><br/>Select file_name, status <br/>from dba_data_files <br/>where status=’UNAVAILABLE’; <br/></div><br/>(3).检查日志文件和trace文件记录alert和trace文件中的错误。 <br/><br/>连接到每个需管理的系统 <br/><br/>使用‘telnet’ <br/>对每个数据库,cd到bdump目录,通常是<div class="code">$ORACLE_BASE//bdump </div><br/>使用Unix‘tail’命令来查看alert_.log文件 <br/>如果发现任何新的ORA-错误,记录并解决。 <br/>(4).检查数据库当日备份的有效性。 <br/><br/>对RMAN备份方式: 检查第三方备份工具的备份日志以确定备份是否成功 <br/><br/>对EXPORT备份方式: 检查exp日志文件以确定备份是否成功 <br/><br/>对其他备份方式: 检查相应的日志文件 <br/><br/>(5).检查文件系统的使用(剩余空间)。如果文件系统的剩余空间小于20%，需删除不用的文件以释放空间。 <br/><br/>$df –k <br/><br/>(6).检查表空间的使用情况　　 <br/><div class="code"><br/>SELECT tablespace_name, max_m, count_blocks free_blk_cnt, sum_free_m,to_char(100*sum_free_m/sum_m, &#039;99.99&#039;) &amp;#124;&amp;#124; &#039;%&#039; AS pct_free <br/>FROM (SELECT tablespace_name,sum(bytes)/1024/1024 AS sum_m <br/>FROM dba_data_files <br/>GROUP BY tablespace_name), <br/>(SELECT tablespace_name AS fs_ts_name, max(bytes)/1024/1024 AS max_m, count(blocks) AS count_blocks, sum(bytes/1024/1024) AS sum_free_m <br/>FROM dba_free_space <br/>GROUP BY tablespace_name ) <br/>WHERE tablespace_name = fs_ts_name; <br/></div><br/>(7).检查剩余表空间 <br/><div class="code"><br/>SELECT tablespace_name, sum ( blocks ) as free_blk , trunc ( sum ( bytes ) /(1024*1024) ) as free_m, <br/>max ( bytes ) / (1024) as big_chunk_k, count (*) as num_chunks <br/>FROM dba_free_space <br/>GROUP BY tablespace_name; <br/></div><br/>(8).监控数据库性能 <br/><br/>运行bstat/estat生成系统报告或者使用statspack收集统计数据 <br/><br/>(9).检查数据库性能，记录数据库的cpu使用、IO、buffer命中率等等 <br/><br/>使用vmstat,iostat,glance,top等命令 <br/><br/>(10).日常出现问题的处理。 <br/><br/>每周的工作 <br/><br/>(1).监控数据库对象的空间扩展情况 <br/><br/>根据本周每天的检查情况找到空间扩展很快的数据库对象,并采取相应的措施： <br/><br/>--删除历史数据 <br/><br/>扩表空间 <br/><div class="code">alter tablespace add datafile ‘’ size <br/></div><br/>调整数据对象的存储参数 <br/><div class="code"><br/>next extent <br/>pct_increase <br/></div><br/><br/>(2).监控数据量的增长情况 <br/><br/>根据本周每天的检查情况找到记录数量增长很快的数据库对象,并采取相应的措施： <br/><br/>删除历史数据 <br/><br/>扩表空间 <br/><div class="code"><br/>alter tablespace add datafile ‘’ size <br/></div><br/><br/>(3).系统健康检查 <br/><br/>检查以下内容:　 <br/><div class="code"><br/>init.ora <br/>controlfile <br/>redo log file <br/>archiving <br/>sort area size <br/>tablespace(system,temporary,tablespace fragment) <br/>datafiles(autoextend,location) <br/>object(number of extent,next extent,index) <br/>rollback segment <br/>logging &amp;tracing(alert.log,max_dump_file_size,sqlnet) <br/></div><br/>(4).检查无效的数据库对象　 <br/><div class="code"><br/>col owner for a20 <br/>col object_name for a30 <br/>SELECT owner, object_name, object_type <br/>FROM dba_objects <br/>WHERE status= ’INVALID’; <br/></div><br/><br/>(5).检查不起作用的约束　　 <br/><div class="code"><br/>SELECT owner, constraint_name, table_name, constraint_type, status <br/>FROM dba_constraints <br/>WHERE status = &#039;DISABLED’ AND constraint_type = &#039;P&#039; ; <br/></div><br/><br/>(6).检查无效的trigger　 <br/><div class="code"><br/>SELECT owner, trigger_name, table_name, status <br/>FROM dba_triggers <br/>WHERE status = &#039;DISABLED’; <br/></div><br/><br/>每月的工作 <br/><br/>(1). Analyze Tables/Indexes/Cluster　 <br/><br/>analyze table estimate statistics sample 50 percent; <br/><br/><br/>(2).检查表空间碎片 <br/><br/>根据本月每周的检查分析数据库碎片情况,找到相应的解决方法; <br/><br/>(3).寻找数据库性能调整的机会 <br/><br/>比较每天对数据库性能的监控报告,确定是否有必要对数据库性能进行调整; <br/><br/>(4).数据库性能调整 <br/><br/>如有必要,进行性能调整; <br/><br/>(5).提出下一步空间管理计划 <br/><br/>根据每周的监控,提出空间管理的改进方法;<br/><br/>Tags - <a href="http://agileblog.cn/tags/%25E6%2595%25B0%25E6%258D%25AE%25E5%25BA%2593%25E7%259B%2591%25E6%258E%25A7/" rel="tag">数据库监控</a> , <a href="http://agileblog.cn/tags/%25E6%25A3%2580%25E6%259F%25A5/" rel="tag">检查</a> , <a href="http://agileblog.cn/tags/%25E7%258A%25B6%25E6%2580%2581/" rel="tag">状态</a> , <a href="http://agileblog.cn/tags/%25E6%2580%25A7%25E8%2583%25BD/" rel="tag">性能</a> , <a href="http://agileblog.cn/tags/%25E7%25A9%25BA%25E9%2597%25B4%25E7%25AE%25A1%25E7%2590%2586%25E8%25AE%25A1%25E5%2588%2592/" rel="tag">空间管理计划</a> , <a href="http://agileblog.cn/tags/%25E6%2597%25A5%25E5%25BF%2597%25E5%25A4%2587%25E4%25BB%25BD/" rel="tag">日志备份</a> , <a href="http://agileblog.cn/tags/%25E6%2595%25B0%25E6%258D%25AE%25E5%25A4%2587%25E4%25BB%25BD/" rel="tag">数据备份</a> , <a href="http://agileblog.cn/tags/%25E5%2589%25A9%25E4%25BD%2599%25E8%25A1%25A8/" rel="tag">剩余表</a> , <a href="http://agileblog.cn/tags/%25E6%2595%25B0%25E6%258D%25AE%25E5%25BA%2593%25E6%2589%25A9%25E5%25B1%2595/" rel="tag">数据库扩展</a> , <a href="http://agileblog.cn/tags/%25E7%25A9%25BA%25E9%2597%25B4%25E7%25A2%258E%25E7%2589%2587/" rel="tag">空间碎片</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Notebook-not-install-the-system/</link>
<title><![CDATA[宏碁笔记笨重装系统找不到硬盘驱动器的解决方法]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Windows]]></category>
<pubDate>Fri, 30 Jul 2010 13:45:09 +0000</pubDate> 
<guid>http://agileblog.cn/Notebook-not-install-the-system/</guid> 
<description>
<![CDATA[ 
	本文永久链接：<a href="http://agileblog.cn/Notebook-not-install-the-system/" target="_blank">http://agileblog.cn/Notebook-not-install-the-system/</a><br/>问题描述<br/><div class="code"><br/>光驱中插入一张操作系统盘，采用光驱启动，加载系统配置文件，到达系统安装的时候，却发现不了硬盘，并提示：<br/>安装程序没有找到安装在此计算机的硬盘驱动器。 <br/>请确认硬盘驱动器已接通电源，并且跟计算机连接是正确的； <br/>同时，确认与磁盘有关的硬件配置是正确的。 <br/>这可能需要运行制造厂商提供的诊断程序或安装程序。 <br/>安装程序无法继续，要退出安装程序，请按F3。 <br/></div><br/>遇到以上问题，其实并不是系统盘的问题，也不是笔记本硬盘线真的插好，而是因为你的主板芯片是965的，采用的是串口硬盘，只有采用IDE方式连接硬盘才可以解决该问题。<br/>具体如何解决呢？<br/>首先：重新启动电脑<br/>这个是在装系统时提示的&nbsp;&nbsp;解决方法是 可以开机进BIOS设置 关掉串口模式<br/>开机按F2键，进入BIOS设置<br/>关掉串口模式<br/>就可以顺利安装了<br/><br/>Tags - <a href="http://agileblog.cn/tags/%25E5%25AE%258F%25E7%25A2%2581%25E7%25AC%2594%25E8%25AE%25B0%25E6%259C%25AC/" rel="tag">宏碁笔记本</a> , <a href="http://agileblog.cn/tags/%25E5%25AE%2589%25E8%25A3%2585/" rel="tag">安装</a> , <a href="http://agileblog.cn/tags/%25E6%2593%258D%25E4%25BD%259C%25E7%25B3%25BB%25E7%25BB%259F/" rel="tag">操作系统</a> , <a href="http://agileblog.cn/tags/windows/" rel="tag">windows</a> , <a href="http://agileblog.cn/tags/xp/" rel="tag">xp</a> , <a href="http://agileblog.cn/tags/bios%25E8%25AE%25BE%25E7%25BD%25AE/" rel="tag">bios设置</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/xvidcore-dll/</link>
<title><![CDATA[Error xvidcore.dll not found]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Windows]]></category>
<pubDate>Thu, 29 Jul 2010 08:34:28 +0000</pubDate> 
<guid>http://agileblog.cn/xvidcore-dll/</guid> 
<description>
<![CDATA[ 
	本文永久链接地址：<a href="http://agileblog.cn/xvidcore-dll/" target="_blank">http://agileblog.cn/xvidcore-dll/</a><br/>用卡巴斯基杀毒软件杀毒之后，打开有媒体文件的文件夹，Windows就弹出来一个窗口，提示Error xvidcore.dll not found。<br/>xvidcore.dll是一个媒体文件支持库，一般安装完媒体播放器之后，都会存在于操作系统的Windows/system32文件夹下。但是有时候因为播放媒体文件而导致xvidcore.dll 文件进行感染，所以每次杀毒的时候，杀毒软件都会将其当做病毒杀掉的。<br/>以下是弹出窗口的截图：<br/><a href="http://agileblog.cn/attachment.php?fid=168" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=168" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>解决该问题的办法是下载一个xvidcore.dll 文件，并将其拷贝到系统盘下的Windows目录的system32文件夹下。我的操作系统是system32文件夹下，有些系统是Windows目录下，你可以查看一下，Windows文件夹下哪个文件夹下很多.dll的文件，就拷贝过去就可以了。<br/>以下是本博客提供文件的下载地址：<br/><a href="attachment.php?fid=169">点击这里下载文件</a><br/><br/>Tags - <a href="http://agileblog.cn/tags/xvidcore.dll/" rel="tag">xvidcore.dll</a> , <a href="http://agileblog.cn/tags/error/" rel="tag">error</a> , <a href="http://agileblog.cn/tags/windows/" rel="tag">windows</a> , <a href="http://agileblog.cn/tags/vista/" rel="tag">vista</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/local-website/</link>
<title><![CDATA[将网站搬到自己的电脑上]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[服务器技术]]></category>
<pubDate>Tue, 27 Jul 2010 02:34:43 +0000</pubDate> 
<guid>http://agileblog.cn/local-website/</guid> 
<description>
<![CDATA[ 
	最近注册了几个免费的域名，并且都绑定到了VPS里面去了，由于自己VPS是在国外，在国内访问不怎么理想，所以想把网站程序部署到自己的电脑里面来。这样自己就非常的好维护网站，只需在本地维护就可以了，并且通过公网可以访问到最新修改的程序，这对于我们项目组以后一起异地开发程序要非常的好。并且公司这边提供的是2M的带宽，一个网站完全可以满足，不过毕竟自己的电脑不是服务器，还是需要休息的，所以访问网站的话，也只能是我在线的时候才可以访问的。<br/>今天我只是实现了通过域名访问我电脑上的tomcat服务器<br/>以后还会实现DNS服务器的搭建的<br/>以下是需要的设备：<br/>1、一台电脑<br/>2、一条宽带<br/>3、一个moden<br/>4、一个路由<br/>首先必须保证能联网，要不然一切都是扯淡。<br/>我这边的路由是TENDA的W311R无线路由。<br/>第一步：登录路由<br/><a href="http://192.168.0.254" target="_blank">http://192.168.0.254</a><br/>我修改了默认的IP地址<br/>默认的登录地址是：192.168.0.1<br/>默认帐号：admin<br/>默认密码：admin<br/>说明一下：我这使用的是路由拨号上网，要是你直接用电脑拨号上网的话，就没有以下的操作，只需看一下你的IP即可。<br/><a href="http://agileblog.cn/attachment.php?fid=164" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=164" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://agileblog.cn/attachment.php?fid=165" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=165" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://agileblog.cn/attachment.php?fid=166" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=166" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>我个人电脑的IP是192.168.0.100<br/>WEB服务器采用的是TOMCAT，WEB服务器的端口是80，刚好是HTTP的默认端口。<br/>修改Tomcat端口可以到Tomcat 6.0&#92;conf&#92;文件夹下的server.xml文件中修改<br/>具体的修改是搜索8080，再修改成80即可<br/>以下是修改的代码<br/><div class="code"><br/>&lt;Connector port=&quot;80&quot; protocol=&quot;HTTP/1.1&quot; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; connectionTimeout=&quot;20000&quot; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; redirectPort=&quot;8443&quot; /&gt;<br/></div><br/>这些配置好后，你可以通过IP直接访问服务器，检查服务器是否正常运行。<br/>浏览：<a href="http://118.249.151.74" target="_blank">http://118.249.151.74</a> 及可<br/>你们访问自己电信分配的IP即可<br/>具体查看可以到路由器中查看状态里面会显示的。<br/><br/>接下来是把域名解析到电脑上来，要是没有域名的，可以到<a href="http://www.dot.tk" target="_blank">http://www.dot.tk</a>去注册一个顶级的免费域名。具体的注册流程就不多说了。<br/><br/>里面有DNS管理，直接使用dot.tk的DNS服务器，到DNS服务器里面添加A记录即可，将域名转发到自己的IP即可。我之前注册了几个.tk的免费域名，现在只需到VPS里面的DNS服务器里面进行添加相应的记录即可。<br/>添加A记录也不列举出来了。<br/><br/>添加记录之后，稍等片刻，就可以通过域名访问你在本地建立的站点了，你也可以邀请别人访问你的站点。<br/>我已经做好了一个，你可以通过<a href="http://middleware.tk" target="_blank">http://middleware.tk</a>访问我电脑里面的网站了。<br/>以下是截图：<br/><a href="http://agileblog.cn/attachment.php?fid=167" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=167" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>Tags - <a href="http://agileblog.cn/tags/%25E6%259C%25AC%25E5%259C%25B0%25E7%25BD%2591%25E7%25AB%2599/" rel="tag">本地网站</a> , <a href="http://agileblog.cn/tags/%25E5%2585%258D%25E8%25B4%25B9%25E5%259F%259F%25E5%2590%258D/" rel="tag">免费域名</a> , <a href="http://agileblog.cn/tags/%25E8%25B7%25AF%25E7%2594%25B1%25E6%258B%25A8%25E5%258F%25B7/" rel="tag">路由拨号</a> , <a href="http://agileblog.cn/tags/middleware.tk/" rel="tag">middleware.tk</a> , <a href="http://agileblog.cn/tags/dns%25E6%259C%258D%25E5%258A%25A1%25E5%2599%25A8/" rel="tag">dns服务器</a> , <a href="http://agileblog.cn/tags/web%25E6%259C%258D%25E5%258A%25A1%25E5%2599%25A8/" rel="tag">web服务器</a> , <a href="http://agileblog.cn/tags/%25E9%2585%258D%25E7%25BD%25AE%25E8%25B7%25AF%25E7%2594%25B1/" rel="tag">配置路由</a> , <a href="http://agileblog.cn/tags/%25E5%25A4%2596%25E7%25BD%2591%25E8%25A7%25A3%25E6%259E%2590%25E5%2588%25B0%25E5%2586%2585%25E7%25BD%2591/" rel="tag">外网解析到内网</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/text-align/</link>
<title><![CDATA[text-alignCSS水平对齐]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[JavaScript]]></category>
<pubDate>Mon, 26 Jul 2010 11:31:21 +0000</pubDate> 
<guid>http://agileblog.cn/text-align/</guid> 
<description>
<![CDATA[ 
	水平对齐（text-align），用以设定元素内文本的水平对齐方式。<br/>1.语法<br/><br/>　　text-align具体参数如下：<br/>语法：text-align : left &#124; right &#124; center &#124; justify<br/>说明：设定元素内文本的水平对齐方式。<br/>参数：left : 左对齐；right : 右对齐；center :&nbsp;&nbsp;居中；justify :&nbsp;&nbsp;两端对齐<br/>初始值：跟浏览器的设置有关<br/>继承性：可继承<br/>适用于：block元素<br/><br/>　　其各参数在浏览器内的显示如图1所示。<br/><a href="http://agileblog.cn/attachment.php?fid=157" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=157" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><p align="center">图1 水平对齐方式</p><br/>前三种对齐方式都很好理解，而最后一种两端对齐（text-align:justify）可以让大段的文本看起来比较整齐，不过两端对齐的表现可能会因为浏览器的不同而有所不同，如图2所示。<br/><a href="http://agileblog.cn/attachment.php?fid=158" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=158" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><p align="center">图2 不同浏览器对于两端对齐的不同表现</p><br/>2.适用于：block元素<br/><br/>　　text-align属性只有对block元素设定才会生效。例如有如下设定：<br/><div class="code">&lt;p style=&quot;text- align:right;&quot;&gt;&lt;img src=&quot;img/ddcat_anim.gif&quot; alt=&quot;图片&quot; style=&quot;text- align:center;&quot; /&gt;&lt;/p&gt;</div><br/>虽然对图片<div class="code">&lt;img&gt;&#91;code&#93;设定了居中对齐，但是在浏览器内的效果如图3所示。<br/>&#91;img&#93;&#91;attach&#93;159&#91;/attach&#93;&#91;/img&#93;<br/>&#91;p align=center&#93;图3 图片与对齐方式&#91;/p&#93;<br/>由图3读者可以看到，因为图片&lt;img&gt;默认为inline元素，所以即使定义了“text-align:center;”，也仍然同文字一起右对齐。因此不能直接通过对图片的设定来达到单独图片的对齐。<br/>　　如果想让单个图片达到居中的效果，应该在其外嵌套一个block元素，然后设置这个元素的对齐方式为居中对齐，如下所示：<br/>&#91;code&#93;&lt;p style=&quot;text- align:center;&quot;&gt;&lt;img src=&quot;img/ddcat_anim.gif&quot; alt=&quot;图片&quot; /&gt;&lt;/p</div><br/>其效果如图4所示。<br/><a href="http://agileblog.cn/attachment.php?fid=160" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=160" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><p align="center">图4 图片居中</p><br/>3.继承性<br/><br/>　　text-align属性是可继承的。当设定了某个元素的水平对齐方式以后，其子孙元素的水平对齐方式都将继承该设定，如图5所示。<br/><a href="http://agileblog.cn/attachment.php?fid=161" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=161" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><p align="center">图5 text-align的继承性</p><br/>4.应用：整体居中<br/><br/>　　虽然text-align用以设定文本的水平对齐方式。但是在IE中，对齐会应用在此元素内所有的子孙元素上，例如有如下代码：<br/><div class="code">&lt;div id=&quot;textAlign3&quot; style=&quot;text-align:center;&quot;&gt;<br/>&nbsp;&nbsp;&lt;p style=&quot;width:70%;&quot;本段落会在IE内居中显示，而在Firefox和Opera内居左显示。&lt;/p&gt;<br/>&lt;/div&gt;<br/></div><br/>其在Windows IE 6.0、Firefox 2.0和Opera 8.5中显示的效果如图6所示。<br/><a href="http://agileblog.cn/attachment.php?fid=162" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=162" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><p align="center">图6 不同浏览器的差别</p><br/><div class="code"><br/>读者可以看到，&lt;p&gt;元素本身也居中显示了，因此可以利用此特性来设置页面内容在IE内的整体居中效果，例如有html结构如下：<br/>&lt;body&gt;<br/>&nbsp;&nbsp;&lt;div id=”wrap”&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;页面居中&lt;/h1&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;p&gt;设置CSS使页面整体居中。&lt;/p&gt;<br/>&nbsp;&nbsp;&lt;/div&gt;<br/>&lt;/body&gt;<br/><br/>　　要使&lt;div id=” wrap”&gt;在浏览器内居中，则需要设置CSS如下：<br/>body &#123;<br/>text-align: center;&nbsp;&nbsp;/* 在 IE内居中 */<br/>&#125;<br/>#wrap &#123;<br/>width: 90%;&nbsp;&nbsp;/* 设定宽度才能显示出居中的效果。*/<br/>margin: 0 auto;&nbsp;&nbsp;/* 在 Firefox及Opera等浏览器内居中。*/<br/>&#125;<br/></div><br/>　　此时在浏览器内浏览，页面内的元素都将居中显示，如图7所示。<br/><a href="http://agileblog.cn/attachment.php?fid=163" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=163" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><p align="center">图7 浏览器内页面整体居中</p><br/>注意：此时页面内所有的文本都继承<div class="code">&lt;body &gt;</div>的的设定而居中显示，因此实际应用中，可以再设定wrap层的对齐方式为左对齐。<br/>Tags - <a href="http://agileblog.cn/tags/css/" rel="tag">css</a> , <a href="http://agileblog.cn/tags/%25E6%25B0%25B4%25E5%25B9%25B3%25E5%25AF%25B9%25E9%25BD%2590/" rel="tag">水平对齐</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/css-div-posation/</link>
<title><![CDATA[用CSS使DIV层水平居中]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[CSS]]></category>
<pubDate>Mon, 26 Jul 2010 10:42:00 +0000</pubDate> 
<guid>http://agileblog.cn/css-div-posation/</guid> 
<description>
<![CDATA[ 
	一、用CSS使DIV层水平居中<br/>对需要水平居中的DIV层添加以下属性:<br/><div class="code"><br/>margin-left: auto;<br/>margin-right: auto; <br/></div><br/>这样在FF中已经居中了,可是在IE中看还是没有居中!<br/><br/>问题并不在CSS而在XHTML网页本身.<br/>需要加上这样的代码才能使得上述设置有效果:<br/><div class="code"><br/>&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;<br/></div><br/>如何使DIV居中<br/><br/>主要的样式定义如下<br/><div class="code"><br/>body &#123; TEXT-ALIGN: center; &#125;<br/>#center &#123; MARGIN-RIGHT: auto; MARGIN-LEFT: auto; &#125;<br/></div><br/>说明：<br/>首先在父级元素定义TEXT-ALIGN: center;这个的意思就是在父级元素内的内容居中；对于IE这样设定就已经可以了。但在mozilla中不能居中。解决办法就是在子元素定义时候设定时再加上“MARGIN-RIGHT: auto;MARGIN-LEFT: auto; ”<br/>需要说明的是，如果你想用这个方法使整个页面要居中，建议不要套在一个DIV里，你可以依次拆出多个div，只要在每个拆出的div里定义MARGIN-RIGHT: auto;MARGIN-LEFT: auto; 就可以了。<br/>如何使图片在DIV 中垂直居中<br/><br/>用背景的方法。举例：<br/><div class="code"><br/>body&#123; BACKGROUND: url(背景图片路径) #FFF no-repeat center; &#125; <br/></div><br/><br/>关键就是最后的center,这个参数定义图片的位置。还可以写成“top left”(左上角)或者"bottom right"等，也可以直接写数值"50 30"<br/><br/>如何使文本在DIV中垂直居中<br/><br/>果是文字，便不能用背景方法，可以用增高行距的办法变通实现垂直居中，完整代码如下：<br/><div class="code"><br/>&lt;html&gt;<br/>&lt;head&gt;<br/>&lt;style&gt;<br/>body&#123; TEXT-ALIGN: center; &#125;<br/>#center&#123; MARGIN-RIGHT: auto;<br/>MARGIN-LEFT: auto;<br/>height:200px;<br/>background:#F00;<br/>width:400px;<br/>vertical-align:middle;<br/>line-height:200px;<br/>&#125;<br/>&lt;/style&gt;<br/>&lt;/head&gt;<br/>&lt;body&gt;<br/>&lt;div id=&quot;center&quot;&gt;&lt;p&gt;test content&lt;/p&gt;&lt;/div&gt;<br/>&lt;/body&gt;<br/>&lt;/html&gt;<br/></div><br/><br/><div class="code"><br/>说明：<br/>vertical-align:middle;表示行内垂直居中，我们将行距增加到和整个DIV一样高line- height:200px;然后插入文字，就垂直居中了。<br/>CSS DIV控制页面中元素垂直居中代码 全局和区域垂直居中<br/><br/>&lt;style type=&quot;text/css&quot; media=screen&gt;<br/>body<br/>&#123;<br/>text-align: center;<br/>&#125;<br/>#a<br/>&#123;<br/>width: 200px;<br/>height: 400px;<br/>background: #000;<br/>&#125;<br/>#b<br/>&#123;<br/>margin-top: expression((a.clientHeight-50)/2);<br/>width: 50px;<br/>height: 50px;<br/>background: #FFF;<br/>&#125;<br/>#c<br/>&#123;<br/>position: absolute;<br/>left: expression((body.clientWidth-50)/2);<br/>top: expression((body.clientHeight-50)/2);<br/>width: 50px;<br/>height: 50px;<br/>background: #F00;<br/>&#125;<br/>&lt;/style&gt;<br/>&lt;div id=&quot;a&quot;&gt;<br/>&lt;div id=&quot;b&quot;&gt;&lt;/div&gt;<br/>&lt;/div&gt;<br/>&lt;div id=&quot;c&quot;&gt;&lt;/div&gt;<br/><br/></div><br/><br/>另一方法:<br/><div class="code"><br/>&lt;div style=&quot;background:blue;position:absolute;left:expression((body.clientWidth-50)/2);top:expression((body.clientHeight-50)/2);width:50;height:50&quot;&gt;&lt;/div&gt;<br/></div><br/>***************************************<br/><br/>二，用JS使层居中<br/><br/>把如下代码加入<body&nbsp;&nbsp;>区域中<br/><div class="code"><br/>&lt;DIV id=L1 style=&quot;HEIGHT: 107px; LEFT: 341px; POSITION: absolute; TOP: 585px; WIDTH: 205px; Z-INDEX: 1&quot;&gt;<br/>&lt;TABLE bgColor=#ffffff border=1 borderColorDark=#ffffff borderColorLight=#000000 cellPadding=0 cellSpacing=0 width=&quot;100%&quot;&gt;<br/>&lt;TR&gt;<br/>&lt;TD height=1 width=178&gt;sss&lt;/TD&gt;<br/>&lt;TD align=middle onclick=&quot;L1.style.visibility=&#039;hidden&#039;&quot;<br/>style=&quot;CURSOR: hand&quot; width=21&gt;х&lt;/TD&gt;&lt;/TR&gt;<br/>&lt;TR vAlign=top&gt;<br/>&lt;TD colSpan=2<br/>height=91&gt;欢迎光临本站!&lt;BR&gt;&lt;BR&gt;本站域名:&lt;BR&gt;&amp; lt;a href=&quot;http://www.agileblog.cn&quot; target=&quot;_blank&quot;&gt;http://www.agileblog.cn&lt;/a&gt;<br/>&lt;/TD&gt;&lt;/TR&gt;&lt;/TABLE&gt;&lt;/DIV&gt;<br/>&lt;SCRIPT LANGUAGE=&quot;JavaScript&quot;&gt;<br/>function moveit() //这个函数用于把层放到浏览器中间<br/>&#123;<br/>L1.style.left=((document.body.offsetWidth-parseFloat (L1.style.width))/2) document.body.scrollLeft;<br/>L1.style.top=((document.body.offsetHeight-parseFloat (L1.style.height))/2) document.body.scrollTop;<br/>&#125;<br/>window.onload=moveit; //网面打开时时执行moveit()<br/>window.onresize=moveit; //当调整浏览器大小时执行moveit()<br/>window.onscroll=moveit; //当拉动滚动条时执行moveit()<br/>&lt;/SCRIPT&gt;<br/></div><br/>三，用定位方法居中<br/><div class="code"><br/>&lt;div style=&quot;background:#f00; width:740px; height:340px; left:50%; margin:0px 0 0 -370px; position:absolute;&quot;&gt;<br/><br/><br/></div><br/>解释：这个方法以前只是知道，但一次一个朋友问我方法的原理，那时我没有答上来，前几天看了一文章后才突然明白了它的原理！以前我的理解是先左边界-370px,然后是想position问题，所以始终想不通。其实我们可以反过一想先定位后边界，这样就很容易理解了。position:absolute;它是对浏览器定位的，left:50%;正好在中间的位置上，也就是这个 DIV块左边界上处于游览器的中间位置，在加入样式margin-left:-370px,这个370是算出来的，它恰好是div740的一半，我们让 DIV往回走370，这样DIV的中线与浏览器的中线重合所以看到的DIV总是在中间的！这个方法也有一个缺点就是如是你的浏览器小于WIDTH的话，对你来说要不是一件另人愉快的事！<br/>过程请看下图：<br/><br/>补充说一下left与margin-left的区别：<br/>left此属性仅仅在对象的定位( position )属性被设置时可用。否则，此属性设置会被忽略. <br/>Tags - <a href="http://agileblog.cn/tags/css/" rel="tag">css</a> , <a href="http://agileblog.cn/tags/div/" rel="tag">div</a> , <a href="http://agileblog.cn/tags/%25E6%25B0%25B4%25E5%25B9%25B3%25E5%25AF%25B9%25E9%25BD%2590/" rel="tag">水平对齐</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/css-position/</link>
<title><![CDATA[CSS 绝对定位]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[CSS]]></category>
<pubDate>Mon, 26 Jul 2010 10:35:16 +0000</pubDate> 
<guid>http://agileblog.cn/css-position/</guid> 
<description>
<![CDATA[ 
	设置为绝对定位的元素框从文档流完全删除，并相对于其包含块定位，包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭，就好像该元素原来不存在一样。元素定位后生成一个块级框，而不论原来它在正常流中生成何种类型的框。<br/><hr><br/>CSS 绝对定位<br/><br/>绝对定位使元素的位置与文档流无关，因此不占据空间。这一点与相对定位不同，相对定位实际上被看作普通流定位模型的一部分，因为元素的位置相对于它在普通流中的位置。<br/><br/>普通流中其它元素的布局就像绝对定位的元素不存在一样：<br/><div class="code"><br/>#box_relative &#123;<br/>&nbsp;&nbsp;position: absolute;<br/>&nbsp;&nbsp;left: 30px;<br/>&nbsp;&nbsp;top: 20px;<br/>&#125;<br/><br/></div><br/>如下图所示：<br/><a href="http://agileblog.cn/attachment.php?fid=156" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=156" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>绝对定位的元素的位置相对于最近的已定位祖先元素，如果元素没有已定位的祖先元素，那么它的位置相对于最初的包含块。<br/><br/>对于定位的主要问题是要记住每种定位的意义。所以，现在让我们复习一下学过的知识吧：相对定位是“相对于”元素在文档中的初始位置，而绝对定位是 “相对于”最近的已定位祖先元素，如果不存在已定位的祖先元素，那么“相对于”最初的包含块。<br/><br/>注释：根据用户代理的不同，最初的包含块可能是画布或 HTML 元素。<br/><br/>提示：因为绝对定位的框与文档流无关，所以它们可以覆盖页面上的其它元素。可以通过设置 z-index 属性来控制这些框的堆放次序。<br/>Tags - <a href="http://agileblog.cn/tags/css/" rel="tag">css</a> , <a href="http://agileblog.cn/tags/%25E6%25A0%25B7%25E5%25BC%258F/" rel="tag">样式</a> , <a href="http://agileblog.cn/tags/%25E7%25BB%259D%25E5%25AF%25B9%25E5%25AE%259A%25E4%25BD%258D/" rel="tag">绝对定位</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Cable-Production/</link>
<title><![CDATA[网线的制作]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[网络工程]]></category>
<pubDate>Mon, 26 Jul 2010 03:14:45 +0000</pubDate> 
<guid>http://agileblog.cn/Cable-Production/</guid> 
<description>
<![CDATA[ 
	网线的制作 <br/>一、工具和材料的认识 <br/>在制作网线前，大家必须准备相应的工具和材料。首要的工具是RJ-45工具钳，该工具上有三处不同的功能，最前端是剥线口，它用来剥开双绞线外壳。中间是压制RJ-45头工具槽，这里可将RJ-45头与双绞线合成。离手柄最近端是锋利的切线刀，此处可以用来切断双绞线。接下来需要的材料是RJ-45头和双绞线。由于RJ-45头像水晶一样晶莹透明，所以也被俗称为水晶头，每条双绞线两头通过安装RJ-45水晶头来与网卡和集线器(或交换机)相连。而双绞线是指封装在绝缘外套里的由两根绝缘导线相互扭绕而成的四对线缆，它们相互扭绕是为了降低传输信号之间的干扰。 <br/>俗话说：“工欲善其事，必先利其器”。在这里我们要向大家介绍如何使你的工具很“利”，以达到事半功倍的效果。像上面我们看到的RJ-45工具钳，有时会出现制作出不合格的网线，这是因为工具钳的齿口没有对准水晶头上的金属片，从而导致金属片不能与网线正确接触，因此就出现网线连不通等现象。所以在选择RJ-45工具钳时，一定要注意工具钳压下来后它上面的每个齿口都能与水晶头上的金属片一一对应好，这样才能保证制作出合格的网线。 <br/><br/>二、网线的标准，和连接方法： <br/>双交线做法有两种国际标准：EIA/TIA568A和EIA/TIA568B，而双交线的连接方法也主要有两种：直通线缆和交叉线缆。直通线缆 的水镜头两端都遵循568A或568B标准，双交线的每组线在两端是一一对应的，颜色相同的在两端水晶头的相应槽中保持一致。它主要用在交换机（或集线器）Uplink口连接交换机（或集线器）普通端口或交换机普通端口连接计算机网卡上。而交叉线缆 的水晶头一端遵循568A，而另一端则采用568B标准，即A水晶头的1、2 对应B水晶头的3、6 ，而A水晶头的3、6 对应B水晶头的1、2 ，它主要用在交换机（或集线器）普通端口连接到交换机（或集线器）普通端口或网卡连网卡上。 <br/><br/>三、网线的制作： <br/>1)剪断:利用压线钳的剪线刀口剪取适当长充的网线。 <br/>2)剥皮:用压线钳的剪线刀口将线头剪齐,再将线头放入剥线刀口,让线头角及挡板,稍微握紧压线钳慢慢旋转,让刀口划开双绞线的保护胶皮,拔下胶皮。(注意:剥与大拇指一样长就行了) <br/>【小提示】 <BR>网线钳挡位离剥线刀口长度通常恰好为水晶头长度，这样可以有效避免剥线过长或过短。剥线过长一则不美观，另一方面因网线不能被水晶头卡住，容易松动；剥线过短，因有包皮存在，太厚，不能完全插到水晶头底部，造成水晶头插针不能与网线芯线完好接触，当然也不能制作成功了。 <br/>3)排序:剥除外包皮后即可见到双绞线网线的4对8条芯线，并且可以看到每对的颜色都不同。每对缠绕的两根芯线是由一种染有相应颜色的芯线加上一条只染有少许相应颜色的白色相间芯线组成。四条全色芯线的颜色为：棕色、橙色、绿色、蓝色。 每对线都是相互缠绕在一起的,制作网线时必须将4个线对的8条细导线一一拆开,理顺,捋直,然后按照规定的线序排列整齐。 <br/>目前,最常使用的布线标准有两个,即T568A标准和T568B标准。T568A标准描述的线序从左到右依次为:1-白绿、2-绿、3-白橙、4-蓝、5-白蓝、6-橙、7-白棕、8-棕。T568B标准描述的线序从左到右依次为：1-白橙、2-橙、3-白绿、4-蓝、5-白蓝、6-绿、7-白棕、8-棕。在网络施工中，建议使用T568B标准。当然，对于一般的布线系统工程，T568A也同样适用。 <br/>排列水晶头8根针脚： 将水昌头有塑造料弹簧片的一面向下，有针脚的一方向上，使有针脚的一端指向远离自己的方向，有方型孔的一端对着自己，此时，最左边的是第1脚，最右边的是第8脚，其余依次顺序排列。 <br/>4)剪齐：把线尽量抻直（不要缠绕）、压平（不要重叠）、挤紧理顺（朝一个方向紧靠），然后用压线钳把线头剪平齐。这样，在双绞线插入水晶头后，每条线都能良好接触水晶头中的插针，避免接触不良。如果以前剥的皮过长，可以在这里将过长的细线剪短，保留的去掉外层绝缘皮的部分约为14mm，这个长度正好能将各细导线插入到各自的线槽。如果该段留得过长，一来会由于线对不再互绞而增加串扰，二来会由于水晶头不能压住护套而可能导致电缆从水晶头中脱出，造成线路的接触不良甚至中断。 <br/>5)插入：一和以拇指和中指捏住水晶头，使有塑料弹片的一侧向下，针脚一方朝向远离自己的方向，并用食指抵住；另一手捏住双绞线外面的胶皮，缓缓用力将8条导线同时沿RJ-45头内的8个线槽插入，一直插到线槽的顶端。 <br/>6)压制：确认所有导线都到位，并透地水晶头检查一遍线序无误后，就可以用压线钳制RJ-45头了。将RJ-45头从无牙的一侧推入压线钳夹槽后,用力握紧线钳(如果您的力气不够大,可以使用双手一起压),将突出在外面的针脚全部压入水晶并头内。 <br/><br/>三、结束语 <br/>在把水晶头的两端都做好后即可用网线测试仪进行测试，如果测试仪上8个指示灯都依次为绿色闪过，证明网线制作成功。如果出现任何一个灯为红灯或黄灯，都证明存在断路或者接触不良现象，此时最好先对两端水晶头再用网线钳压一次，再测，如果故障依旧，再检查一下两端芯线的排列顺序是否一样，如果不一样，随剪掉一端重新按另一端芯线排列顺序制做水晶头。如果芯线顺序一样，但测试仪在重夺后仍显示红色灯或黄色灯，则表明其中肯定存在对应芯线接触不好。此时没办法了，只好先剪掉一端按另一端芯线顺序重做一个水晶头了，再测，如果故障消失，则不必重做另一端水晶头，否则还得把原来的另一端水晶头也剪掉重做。直到测试全为绿色指示灯闪过为止。对于制作的方法不同测试仪上的指示灯亮的顺序也不同，如果是直通线测试仪上的灯应该是依次顺序的亮，如果做的是双绞线那测试仪的一段的闪亮顺序应该是3、6、1、4、5、2、7、8。 <BR>上面向大家介绍了常用的T568A、T568B国际标准网线制作方法，希望无论是初学者还是网络老手都能够按照标准的方法去制作网线，这样对以后网络的维护会带来许多便利。 <br/>另：买线时注意一下,用的是5类线,3类线只能达到16M,4类线20M,只有5类线以及超5类等才能到达100M的.线的长度不能超过100米。 <br/>Tags - <a href="http://agileblog.cn/tags/%25E5%2588%25B6%25E4%25BD%259C%25E7%25BD%2591%25E7%25BA%25BF/" rel="tag">制作网线</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Analysis-of-project-progress/</link>
<title><![CDATA[影响项目进度的软因素分析(转)]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[软件开发]]></category>
<pubDate>Sun, 25 Jul 2010 02:22:45 +0000</pubDate> 
<guid>http://agileblog.cn/Analysis-of-project-progress/</guid> 
<description>
<![CDATA[ 
	本文地址：<a href="http://agileblog.cn/post/Analysis-of-project-progress.php" target="_blank">http://agileblog.cn/post/Analysis-of-project-progress.php</a><br/><br/>时间,既意味着机会,又意味着成本。进度的加快,很大程度上直接表现为生产力的提高。一个电厂的建设项目,能提早一天发电,就意味着能提前一天支付贷款的利息,还意味着能提前一天收取电力的利润;一个客户关系信息系统项目,提前一天投入使用,就意味着客户能更便利地享受产品和服务,从而对我们产生比竞争对手更加良好的预期,带来更多的利润。因而,一个项目能否在预定的时间里完成,就成为项目管理所要追求的重要目标之一。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于制定进度计划的工具主要是甘特图和网络图(包括cpm/ pert ,关键路径法和计划评审技术) ,所以很多人一想到进度管理就是绘制甘特图或网络图,而对其他影响项目进度的因素反而忽视了。许多项目经理出现了不学项目管理,还有很多解决的办法,学了项目管理,反而只知甘特图和网络图的局面。甘特图和网络图等工具是项目时间管理的硬技巧,容易被接受和应用,而项目协调、需求调研的方法、团队磨合时间等软技巧就容易被大家忽视,而这些软技巧所起到的作用是非常大的。本文就试图从这些方面来探讨影响项目进度的若干软因素。<br/><br/>一、进度应与项目范围、成本、质量、采购协调 <br/><br/>　　美国项目管理学会(pmi) 的最大贡献就是将项目管理规范为九大知识体系:项目整体管理、项目范围管理、项目进度管理、项目成本管理、项目质量管理、项目人力资源管理、项目沟通管理、项目风险管理、项目采购管理。其中,项目整体管理从本质上讲,就是从全局的观点出发,以项目全体利益最大化作为目标,以项目各专项管理的协调和统一为主要内容,所开展的综合性管理过程。<br/><br/>　　我们开展项目管理就要有项目管理的观念,就要有项目各要素、项目各专项管理进行综合、协调和集成的观念。 <br/><br/>　　首先,项目范围会影响项目进度。一般来讲(指假设其他要素不变,下同) ,项目范围越大,项目所要完成的任务越多,项目耗时越长;反过来,项目范围越少,项目所要完成的任务越少,项目耗时越短。那么,如果我们项目进度很紧张,或者进度拖延非常严重,我们就可以考虑与客户讨论,是否能够将范围进行收缩。如果客户同意缩小范围,那么进度就能得到有效的缩短。<br/><br/>　　同样地,项目成本、质量也都会影响进度。一般来讲,追加成本,可以增加更多的资源,比如设备和人力,从而使某些工作能够并行完成或者加班完成。当然,进度与成本不是线性替代关系,成本增加的速度一般都比进度缩短的速度高。 <br/><br/><br/>&nbsp;&nbsp;<br/>　　最后,如果项目不能按进度完成,可以考虑有些原定项目组内部自己完成任务是否可以外包出去,这就是项目采购管理与进度管理的协调内容之一。当然,采用分包,有时会增大项目的风险,特别是供应商未经过认真评估时。 <br/><br/>　　从上面的论述可以知道,缩小项目范围、降低项目质量、借用采购资源的分包,以及追加项目成本都可以有效地缩短项目的进度。对于进度是第一约束的项目,上述专项管理之间协调的观念是非常重要的。显然,在考虑进度缩减时,可以整体考虑上述各专项管理之间协调,也即砍掉部分任务、降低部分任务的质量、分包部分任务、追加部分任务的成本。当然,其中的“部分任务”是需要项目组认真分析的。<br/><br/>　　二、正确的需求调研方法有助于加快进度 <br/><br/>　　不管哪类项目,在立项之初,都需要对项目最终用户的需求作充分的调研和分析。很多项目组一想到需求调研,就马上想到与用户访谈。并且项目一开始,就开始与用户进行面对面的访谈。 但是访谈作为项目组采用的第一种方法并不好。<br/><br/>　　一般来讲,项目承建方不一定十分了解用户的业务术语,这一点在信息化项目中尤为普遍。这样,在访谈的过程中,用户讲到的一些术语有可能被忽略,因为问得太多了,给用户的感觉不好。但这些术语并没有得到解决,怎么办呢? 只好开始第二次调研,回过头来问前面提到的术语。有的项目组这个过程可能会重复两三遍。这时,用户的信赖感会下降,用户会认为这么简单的问题还需要问几次? 因为某些术语可能确实是用户行业中的基本术语。这种情况下,差旅费、顾问费等调研成本不断增加,项目的调研时间也相应拉长,而客户的信赖感和配合程度逐渐降低。显然,一上来就采取访谈用户的办法是不明智的。<br/><br/>　　正确的方法应该首先请用户提供能反映用户业务的相关资料和书籍,开始文献调研。在阅读文献的过程中,对方的一些基本业务术语就能够搞清楚,并且对用户的业务流程有一个初步的认识;<br/>&nbsp;&nbsp;<br/>　　其次,如果需要的话,请用户带领项目组参观用户现场的业务流程,从而对某些字面上不容易理解的术语和业务环节建立感性认识。<br/><br/>　　第三,在此基础上,可以根据文献调查和实地考察中发现的问题,有针对性地列出访谈大纲,与用户进行访谈。这时访谈的效率和访谈的质量都会很高,用户也会因为项目组提到的问题很专业很有针对性,从而产生较强的信赖感。<br/><br/>有的项目组访谈完后就认为得到了用户的真实、完整的需求,就开始进行项目的设计了。事实上,有些项目比较敏感,由于访谈的结果是要纪录的,用户为了回避自己的“风险”,会按照“官方”的口径讲话,这样,需求就可能被扭曲,项目推进过程中的风险也就种下了。正确的方法应该是接着访谈继续进行第四项,发放无记名需求调查表。由于是无记名的,一般都能收集到较真实的需求信息。 <br/><br/>　　最后,由于访谈是单个进行或按部门进行的,每个具体的用户或部门对于自己的业务非常清楚,而对于与其他岗位、其他部门的业务“接口”和联系就不清楚。这时,一定要请用户的高层业务主管作一个用户企业的全面业务报告,这个报告应该是总括性的,既能使项目组看到用户业务的全貌,也能看到各部门、各岗位之间的联系或接口。 <br/><br/>　　从上面的论述可知,正确的需求调研方法既可以了解到真实、完整的用户需求信息,也可以确立客户的信心,节约项目的成本,大大缩短项目的调研时间。这就是为什么有的项目组花三个月甚至半年也没有将需求调研清楚,而掌握了正确的方法的项目组可能一个月就得到了高质量的需求。调研时间缩短了,设计、实施的时间就比较富裕了。如果调研时间拉得很长,甘特图、网络图再有威力,恐怕也缩短不了那么多的进度! 我们可以用数字来说明。假设一个项目总工期为12 个月。如果我们需求调研就花了3 个月,那实际上设计阶段和实施阶段只有9 个月了。而如果我们只花1 个月时间调研,那实际上设计阶段和实施阶段就延长至11 个月了。很显然,要想通过甘特图、网络图这样的项目管理工具调整出2 个月的有效时间,那是很难的。 <br/><br/>　　三、缩短团队组建与磨合时间有助于加快进度 <br/>&nbsp;&nbsp;<br/>　　任何一个项目组从接受任务到任务完成、团队解散,项目团队一般都会经历五个阶段:组建阶段,磨合阶段,正规阶段,表现阶段,解散阶段。 <br/><br/>　　在组建阶段(又叫形成阶段) ,项目组成员从各个方面抽调或招募而来,每个人在这一阶段都有许多疑问:我们的目的是什么? 其他团队成员的技术、人品都怎么样? 每个人都急于知道他们能否与其他成员合得来,担心他们在项目中的角色是否会与他们的个人兴趣及职业发展相一致。这一阶段项目成员的情绪特点包括激动、希望、怀疑、焦急和犹豫。 <br/><br/>　　进入磨合阶段(又叫震荡阶段) ,项目成员们开始运用技能着手执行分配到的任务,开始缓慢推进工作。现实也许会与个人当初的设想不一致。例如,任务比预计的更繁重或更困难,成本或进度计划的限制可能比预计的更紧张。成员们越来越不满意项目经理的指导或命令。工作过程中,每个成员根据其他成员的情况,对自己的角色及职责产生了更多的疑问。震荡阶段的特点是人们有挫折、愤怨或者对立的情绪。 <br/><br/>　　经受了磨合阶段的考验后,项目团队就进入了发展的正规阶段(又叫规范阶段) 。团队成员之间、团队与项目经理之间的关系已确立好了。项目团队逐渐接受了现有的工作环境,项目规程也得以改进和规范化。控制及决策权从项目经理移交给了各活动或工作承包的负责人,团队的凝聚力开始形成,每个人觉得他是团队的一员,他们也接受其他成员作为团队的一部分。 <br/><br/>　　正规阶段的下一个阶段是表现阶段(又叫实干阶段) 。这时,项目团队积极工作,急于实现项目目标。这一阶段的工作绩效很高,团队有集体感和荣誉感,信心十足。项目团队能开放、坦诚、及时地进行沟通。团队相互依赖度高,他们经常合作,并在自己的工作任务外尽力相互帮助。团队能感觉到高度授权,如果出现技术难题,就由适当的团队成员组成临时攻关小组,解决问题后再将有关的知识或技巧在团队内部快速共享。 随着工作的进展并得到表扬,团队获得满足感。个体成员会意识到为项目工作的结果正在使他们获得职业上的发展。<br/><br/><br/>&nbsp;&nbsp;<br/>　　随着所有项目任务的完成,项目团队进入解散阶段(又叫消亡阶段) ,项目团队成员面临着重新的分配。 <br/><br/>　　在上述五个阶段中,解散阶段由于项目任务已经完成,对于项目的影响不大。对于一个项目经理来讲,一定要清楚,真正作工作的阶段是正规和表现阶段。因而,项目经理的重要职责就是使项目团队的组建和磨合的阶段耗时尽量短,这样,对于一个项目总进度已经确定的项目,团队组建和磨合阶段耗时越短,项目团队的正规和表现阶段的历时就会越长,项目团队在布置任务和执行任务时就更加从容。为使项目团队组建阶段的时间缩短,项目经理一定要向团队说明项目目标,并设想出项目成功的美好前景以及成功所产生的益处,公布有关项目的工作范围、质量标准、预算及进度计划的标准和限制。项目经理要公开讨论项目团队的组成、选择团队成员的原因、他们的互补能力和专门知识,以及每个人为协助完成项目目标所充当的角色。这样,公开的信息就构成一项重要的激励———信息激励,团队意识就会加快形成。 <br/><br/>　　为使项目团队磨合阶段的时间缩短,在这个阶段,项目经理要引导所有成员参与到项目计划的制定、规章制度的制定和任务的分配中来,同时要允许成员表达他们所关注的问题。这样,主动的参与对成员来讲就构成一项重要的激励———参与激励,团队成员就会更加容易接受团队的规章制度以及分配到的工作,团队意识就能得到进一步强化。 <br/><br/>　　我们可以举一个例子来说明。假设一个项目总工期为12 个月。如果我们团队组建就花了3 个月,再磨合1 个月。那实际上正规阶段和表现阶段只有不到8 个月了。而如果我们团队组建只花了0. 5 个月,再磨合0. 5 个月。那正规阶段和表现阶段就延长至11 个月了。很显然,要想通过甘特图、网络图这样的项目管理工具调整出3 个月的有效时间,那真是太难了。 <br/><br/>　　众所周知,2008 年7 、8 月间将在北京举办第29 届夏季奥运会,我们中国是2001 年7 月13 日申奥成功的。根据国际奥委会规定,所有奥运会比赛场馆都必须进行一年的单项比赛。那就是说,2007 年7 月前所有场馆、设施必须竣工。而场馆中的信息系统和通信网络一般都有半年的试运行期,显然,奥运会场馆建设这个大项目( program:项目群,由一系列项目———project 组成) 的建设起止时间是2001 年7 月～2006 年12 月,共五年半的总工期。因此,作为陈述北京2008 年奥运会竞赛总体构想的北京奥申委体育主任楼大鹏,表示北京将在2006 年底完成体育场馆建设。然而,第二十九届奥委会组委会是什么时间组建的? 是2001 年12 月13 日组委会主席、北京市市长刘淇在成立仪式上表示,北京奥运会组委会是组织、管理、实施第二十九届奥运会筹备工作的专门机构。也就是说,项目团队的组建时间花了半年时间。笔者写作该文时,已经是2003 年年中了,不少场馆还在招标阶段。实际建设时间还是比较紧张的。<br/><br/><br/>&nbsp;&nbsp;<br/>　　综上所述,采用正确的方法、正确的思路进行项目管理,就能有效地缩短项目进度,提高项目团队的生产力。事实上,除上述三大因素之外,影响项目进度的因素还有很多,比如项目成员个人时间管理的好坏,项目团队的工作风格是否统一等等。试想,如果项目成员连个人时间都管理不好,整个项目的进度还有保证吗? 如果每个人的工作风格都不统一,需要在每个人工作完成后再来统一风格,甚至推倒重来,那么既会大大延长项目的工期,又会增大项目开支。正确的做法是科学地管理个人时间、在项目之初就统一工作风格或工作模板。由于篇幅所限,就不再赘述。<br/><br/><br/>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/Mac_cm/archive/2010/06/30/5704708.aspx" target="_blank">http://blog.csdn.net/Mac_cm/archive/2010/06/30/5704708.aspx</a><br/>Tags - <a href="http://agileblog.cn/tags/%25E9%25A1%25B9%25E7%259B%25AE%25E8%25BF%259B%25E5%25BA%25A6/" rel="tag">项目进度</a> , <a href="http://agileblog.cn/tags/%25E5%2588%2586%25E6%259E%2590/" rel="tag">分析</a> , <a href="http://agileblog.cn/tags/%25E8%25BD%25AF%25E4%25BB%25B6%25E5%25BC%2580%25E5%258F%2591/" rel="tag">软件开发</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/System-Analysis/</link>
<title><![CDATA[系统分析的一些经验（转）]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[软件开发]]></category>
<pubDate>Sun, 25 Jul 2010 02:17:58 +0000</pubDate> 
<guid>http://agileblog.cn/System-Analysis/</guid> 
<description>
<![CDATA[ 
	本文地址：<a href="http://agileblog.cn/post/System-Analysis.php" target="_blank">http://agileblog.cn/post/System-Analysis.php</a><br/><br/>刚在一家公司离职，因为公司上市后规模迅速状大，急于开发几款战略产品支承，公司高层对我们之前进行的一个项目非常重视，投入巨大。系统开发之初需求原本很明确，但新的需求总是在开发的过程中不断地被提出，今天来了个推广部经理，明天来了个市场部总监，各有各的想法，并且各个部门、分公司经常找开发小组开会提出新的需求变更。由于项目经理的“软弱”，我们一般很难拘绝。因为老总总是要先看到做出的效果再提意见，所以项目做的很急，系统框架在刚开始设计时没有被充分讨论、简化，感觉在后续开发中遇到很多问题， <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;现已离职，也无所顾忌，特谈一谈对系统分析的看法，总结一下之前的工作的经验，有不当之处请指正。 <br/><br/>&nbsp;&nbsp;做需求分析，我觉得最重要的任务是简化业务流程、规则、逻辑；丰富用户体验； <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;0. 尽量将复杂的用户需求抽像成最简单的业务规则、数据库结构来实现。因为需求是不可能一下子就确定的，假设我们刚开始对核心需求的实现方式增加了一点点的复杂性，比如说多加了一个表，一个藕合字段，那么对于以后的扩展我们就有可能要去制定更加复杂的规则去适应，从而“被逼”消耗更多的工作，使用更加复杂的结构和业务规则。尤其当需求发生不断变化时，改变这种体系所要花费的代价也会随之几何级上升（因为一般是不可逆的），用户的可操作性也会随之越低，并增加了其使用上的难度，从而不得不对其进行培训。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;1. 对于一个面向公共（大用户群、非公司内部系统）的系统，要充分进行“二八“划分；一个系统不可能满足所有人的需求；要关注最广大的80%的用户，因为另外20%的需求很可能会使另外的80%的人产生困扰；一般人最容易记得7个字以内的句子，同样大部分软件只有20%的功能是经常使用到的，对于互联网公众平台来讲对另外不常用的80%需求的“重视”，只会分散开发人员的注意力，使用户体验、易用性、可操作性下降，并增加系统复杂性、维护和运营成本；因此要将主要精力放到那20%功能的开发上。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;2. 对于核心产品，业务规则和逻辑的设计万不可草率，并且不要集中由“一类”人去做；要从全局的角度制定业务流程，最好一开始就将最终使用和开发者纳入业务流程、规则、逻辑设计队伍。并充分讨论精简后完成产品的整体构架设计，然后进入编码阶段。综合考量成本/效果的比例，舍弃对系统可能产生混乱的设计，并想办法最寻找简单的替代方案。而且尽可能一开始就确定数据库的主体框架，而非去制定每一步的细节。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;3. 对于功能宠大、业务复杂的系统，我认为用户需求接受比在 5:3:2 左右是正常的, 相当于10条需求中有5条可以完全接受的，有3条需要将实现方式略加改变而达目的，但一般有1~2条无法实现是正常的，因为可能会对系统造成较大的复杂性或不利于扩展，而且很有可能跟现有系统的功能产生冲突。不利于系统结构最简化，增加系统运营成本的不可控风险。 <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;4. 当公司的主打产品经历过数次功能扩展、升级后，而造成的构架复杂性、数据库负载、稳定性、可操作性和用户友好度下降达到一定程度时，就应该考虑将关联性不大的功能分离成相对独立的几个系统，只进行核心数据表进行共享，以此增强各个分系统的可重用和可靠性。从而避免只向一个大型系统输出复杂性，造成可靠性下降，以及维护、运营成本的上升。<br/><br/><br/>本文来自CSDN博客，转载请标明出处：<a href="http://blog.csdn.net/Mac_cm/archive/2010/07/13/5732021.aspx" target="_blank">http://blog.csdn.net/Mac_cm/archive/2010/07/13/5732021.aspx</a><br/><br/>Tags - <a href="http://agileblog.cn/tags/%25E7%25B3%25BB%25E7%25BB%259F%25E5%2588%2586%25E6%259E%2590/" rel="tag">系统分析</a> , <a href="http://agileblog.cn/tags/%25E8%25BD%25AF%25E4%25BB%25B6%25E5%25BC%2580%25E5%258F%2591/" rel="tag">软件开发</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/CSS3-Demo/</link>
<title><![CDATA[使用CSS3画机器猫]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[脚本语言]]></category>
<pubDate>Sat, 24 Jul 2010 03:02:13 +0000</pubDate> 
<guid>http://agileblog.cn/CSS3-Demo/</guid> 
<description>
<![CDATA[ 
	<a href="http://agileblog.cn/attachment.php?fid=155" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=155" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>测试各个浏览器对CSS3的解释效果，上边的“图像”并非图片，而是纯CSS。<br/>目前各个浏览器对CSS3的支持效果不一样，其中IE系的浏览器支持效果最差。<br/>上面是Firefox和Google chrome以及IE7、IE8的效果图 ，用谷歌浏览器打开的话，它的眼睛会动哦！<br/>演示地址：<a href="http://klfy.org/test/Demo/css3.html" target="_blank">http://klfy.org/test/Demo/css3.html</a><br/>以下是源码<br/><div class="code"><br/>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD XHTML 1.1//EN&quot; &quot;http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd&quot;&gt; <br/>&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;&lt;head&gt; <br/>&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt; <br/>&lt;title&gt;CSS3 - 有图有真相&lt;/title&gt; <br/>&lt;meta name=&quot;description&quot; <br/>content=&quot;CSS3 - 有图有真相&quot;&gt; <br/>&lt;meta http-equiv=&quot;adimage&quot; content=&quot;200&quot;&gt; <br/>&lt;style&gt; <br/>body&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#fff; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:901px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;margin:auto; <br/>&#125; <br/>#doraemon&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:fixed; <br/>&nbsp;&nbsp;&nbsp;&nbsp;margin:50px;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;float:left; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:500px; <br/>&#125; <br/>#instr&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;float:right; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:400px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;font-size:14px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-left:2px solid black; <br/>&nbsp;&nbsp;&nbsp;&nbsp;padding-left:20px; <br/>&#125; <br/>#head_light&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:50px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:50px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;transform: rotate(20deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-transform: rotate(20deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-transform: rotate(20deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-o-transform: rotate(20deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;box-shadow:80px 20px 50px #fff; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-box-shadow:80px 20px 55px #fff; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-box-shadow:80px 20px 50px #fff; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-radius:45px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-radius:45px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius:60px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:-20px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:170px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;opacity:0.5 <br/>&#125; <br/>#face&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:310px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:300px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-radius:146px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-radius:146px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius:146px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#07beea;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -webkit-gradient(linear, right top, left bottom, from(#fff) ,color-stop(0.20, #07beea), color-stop(0.73, #10a6ce),color-stop(0.95, #000), to(#444));&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -moz-linear-gradient(right top, #fff,#07beea 20%, #10a6ce 73% ,#000 95% ,#000 155%); <br/>&nbsp;&nbsp;&nbsp;&nbsp;border:#333 2px solid; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:-15px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;box-shadow:-5px 10px 15px rgba(0,0,0,0.45); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-box-shadow:-5px 10px 15px rgba(0,0,0,0.45); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-box-shadow:-5px 10px 15px rgba(0,0,0,0.45); <br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#125; <br/>#base&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:-5px; <br/>&#125; <br/>#base_white&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border:#000 2px solid; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:264px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:196px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-radius: 150px 150px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-radius: 150px 150px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius: 150px 150px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#FFF; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -webkit-gradient(linear, right top, left bottom, from(#fff),color-stop(0.75,#fff),color-stop(0.83,#eee),color-stop(0.90,#999),color-stop(0.95,#444), to(#000));&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -moz-linear-gradient(right top, #fff,#fff 75%, #eee 83%,#999 90%,#444 95%, #000); <br/>&nbsp;&nbsp;&nbsp;&nbsp;z-index:1; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:85px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:22px;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#125; <br/>#eyes&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:-5px; <br/>&#125; <br/>div.eye&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-radius: 35px 35px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-radius: 35px 35px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius: 35px 35px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border:2px solid #000; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:72px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:83px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;z-index:20; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#fff; <br/>&#125; <br/>div.black_eye&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:15px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:15px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-radius:10px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-radius:10px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius:10px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#333; <br/>&nbsp;&nbsp;&nbsp;&nbsp;z-index:21; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-animation-name: cate; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-animation-duration: 3s; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-animation-timing-function: linear; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-animation-iteration-count: 200; <br/>&#125; <br/>@-webkit-keyframes cate&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;0%&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin:0 0 0 0; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;80%&nbsp;&nbsp;&nbsp;&nbsp;&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin:0px 0 0 0; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;85%&nbsp;&nbsp;&nbsp;&nbsp;&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin:-20px 0 0 0; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;90%&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin:0 0 0 0; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;93%&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin:0 0 0 7px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;96%&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin:0 0 0 0; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&nbsp;&nbsp;&nbsp;&nbsp;100%&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;margin:0 0 0 0; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>&#125; <br/>div.black_left&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:100px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:130px; <br/>&#125; <br/>div.black_right&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:100px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:170px; <br/>&#125; <br/>div.eye_left&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:45px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:82px;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#125; <br/>div.eye_right&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:45px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:156px;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#125; <br/>#nose&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:32px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:32px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border:2px solid #000; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-radius:50px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-radius:50px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius:50px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#c93e00; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:117px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:139px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;z-index:30; <br/>&#125; <br/>#nose_light&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:10px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:10px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-radius:5px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-radius:5px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius:5px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;box-shadow:19px 8px 5px #fff; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-box-shadow:19px 8px 5px #fff; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-box-shadow:19px 8px 5px #fff; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:0px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:0px; <br/>&#125; <br/>#nose_line&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#000; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:4px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:100px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:125px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:156px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; <br/>&#125; <br/>#nose_line&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#333; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:3px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:100px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:140px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:155px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;z-index:20; <br/>&#125; <br/>#mouth&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:240px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:500px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-bottom:3px solid #333; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-radius:120px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-radius:120px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius:120px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:-263px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:36px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;z-index:10; <br/>&#125; <br/>#mouth_rewrite&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#fff; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:240px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:90px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:115px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:35px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;z-index:12; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-radius:45px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-radius:45px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius:60px; <br/>&#125; <br/>#firefox_mouth, x:-moz-broken, x:last-of-type, x:indeterminate &#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:170px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:150px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius:85px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border:3px solid #000; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#FFF; <br/>&nbsp;&nbsp;&nbsp;&nbsp;z-index:11; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:-3px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:70px; <br/>&#125; <br/>.whiskers&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#333; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:2px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:60px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; <br/>&nbsp;&nbsp;&nbsp;&nbsp;z-index:20; <br/>&#125; <br/>.whi_right&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:165px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:210px;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#125;&nbsp;&nbsp;&nbsp;&nbsp; <br/>.whi_right_top&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:145px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:210px; <br/>&#125;&nbsp;&nbsp;&nbsp;&nbsp; <br/>.whi_right_bottom&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:185px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:210px; <br/>&#125;&nbsp;&nbsp;&nbsp;&nbsp; <br/>.whi_left&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:165px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:50px;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#125;&nbsp;&nbsp;&nbsp;&nbsp; <br/>.whi_left_top&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:145px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:50px; <br/>&#125;&nbsp;&nbsp;&nbsp;&nbsp; <br/>.whi_left_bottom&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:185px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:50px; <br/>&#125; <br/>.rotate20&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;transform: rotate(20deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-transform: rotate(20deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-transform: rotate(20deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-o-transform: rotate(20deg);&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#125; <br/>.rotate160&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;transform: rotate(160deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-transform: rotate(160deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-transform: rotate(160deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-o-transform: rotate(160deg);&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#125; <br/>#choker&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:-55px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:35px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;z-index:100; <br/>&#125; <br/>#belt&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:230px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:20px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border:#000 solid 2px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#ca4100; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -webkit-gradient(linear, left top, left bottom, from(#ca4100), to(#800400));&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -moz-linear-gradient(top, #ca4100, #800400); <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-radius:10px;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-radius:10px;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius:10px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:5px; <br/>&#125; <br/>#bell&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-radius:50px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-radius:50px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius:50px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border:2px solid #000; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#f9f12a; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -webkit-gradient(linear, left top, left bottom, from(#f9f12a),color-stop(0.5, #e9e11a), to(#a9a100));&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -moz-linear-gradient(top, #f9f12a, #e9e11a 75%,#a9a100); <br/>&nbsp;&nbsp;&nbsp;&nbsp;box-shadow:-5px 5px 10px rgba(0,0,0,0.25); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-box-shadow:-5px 3px 5px rgba(0,0,0,0.25); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-box-shadow:-5px 5px 10px rgba(0,0,0,0.25); <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:-15px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:100px; <br/>&#125; <br/>#bell_line&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:36px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:2px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#f9f12a; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border:#333 solid 2px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:10px; <br/>&#125; <br/>#bell_circle&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:12px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:10px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-radius:5px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-radius:5px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius:5px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#000; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:14px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:14px; <br/>&#125; <br/>#bell_under&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:3px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:15px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#000; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:10px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:18px; <br/>&#125; <br/>#bell_light&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:10px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:10px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-radius:10px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-radius:10px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius:10px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;box-shadow:19px 8px 5px #fff; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-box-shadow:19px 8px 5px #fff; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-box-shadow:19px 8px 5px #fff; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;opacity:0.7; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:-35px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:5px; <br/>&#125; <br/>#doutai&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:220px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:165px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#07beea; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -webkit-gradient(linear, right top, left top, from(#07beea),color-stop(0.5, #0073b3),color-stop(0.75,#00b0e0), to(#0096be));&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -moz-linear-gradient(right, #07beea, #0073b3 50%,#0096be 75%,#00b0e0 ,#0096be 100% ,#333 114%); <br/>&nbsp;&nbsp;&nbsp;&nbsp;border:#333 2px solid; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:262px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:46px; <br/>&#125; <br/>div.base_white2&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:170px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:170px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-radius:85px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-radius:85px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius:85px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border:2px solid #000; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#FFF; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -webkit-gradient(linear, right top, left bottom, from(#fff),color-stop(0.75,#fff),color-stop(0.83,#eee),color-stop(0.90,#999),color-stop(0.95,#444), to(#000));&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -moz-linear-gradient(right top, #fff,#fff 75%, #eee 83%,#999 90%,#444 95%, #000); <br/>&#125; <br/>.doutai_center&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:230px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:72px; <br/>&#125; <br/>#circle&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:130px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:130px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-radius:65px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-radius:65px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius:65px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#fff; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -webkit-gradient(linear, right top, left bottom, from(#fff),color-stop(0.70,#fff),color-stop(0.75,#f8f8f8),color-stop(0.80,#eee),color-stop(0.88,#ddd), to(#fff));&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -moz-linear-gradient(right top, #fff, #fff 70%,#f8f8f8 75%,#eee 80%,#ddd 88% , #fff); <br/>&nbsp;&nbsp;&nbsp;&nbsp;border:2px solid #000; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:-120px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:92px; <br/>&#125; <br/>#circle_rewrite&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:134px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:60px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#fff;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-bottom:2px solid #000; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:-250px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:92px; <br/>&#125; <br/>#hand_right&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:272px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:248px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:100px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:100px; <br/>&#125; <br/>#arm_right&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:80px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:50px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#07beea; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -webkit-gradient(linear, left top, left bottom, from(#07beea),color-stop(0.85,#07beea), to(#555));&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -moz-linear-gradient(top, #07beea, #07beea 85%, #555); <br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border:solid 1px #000; <br/>&nbsp;&nbsp;&nbsp;&nbsp;z-index:-1; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:17px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;transform: rotate(35deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-transform: rotate(35deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-transform: rotate(35deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-o-transform: rotate(35deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;box-shadow:-10px 7px 10px rgba(0,0,0,0.35); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-box-shadow:-10px 7px 10px rgba(0,0,0,0.35); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-box-shadow:-10px 7px 10px rgba(0,0,0,0.35); <br/>&#125; <br/>#hand_left&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:272px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:-46px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:100px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:100px; <br/>&#125; <br/>#arm_left&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:80px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:50px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#0096be; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border:solid 1px #000; <br/>&nbsp;&nbsp;&nbsp;&nbsp;z-index:-1; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:17px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:36px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;transform: rotate(145deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-transform: rotate(145deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-transform: rotate(145deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-o-transform: rotate(145deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;box-shadow:5px -7px 10px rgba(0,0,0,0.25); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-box-shadow:5px -7px 10px rgba(0,0,0,0.25); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-box-shadow:5px -7px 10px rgba(0,0,0,0.25); <br/>&#125; <br/>div.hand_circle&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:60px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:60px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-radius:30px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-radius:30px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius:30px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border:2px solid #000; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#fff; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -webkit-gradient(linear, right top, left bottom, from(#fff),color-stop(0.5,#fff),color-stop(0.70,#eee),color-stop(0.8,#ddd), to(#999));&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -moz-linear-gradient(right top, #fff, #fff 50%, #eee 70%, #ddd 80%,#999); <br/>&#125; <br/>.hand_right&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:32px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:40px;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#125; <br/>.arm_rewrite_right&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:4px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:45px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#07beea; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:-51px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:18px; <br/>&#125; <br/>.hand_left&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:34px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:10px;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&#125; <br/>.arm_rewrite_left&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:4px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:50px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#0096be; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:-52px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:92px; <br/>&#125; <br/>#foot&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:280px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:-141px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:20px; <br/>&#125; <br/>#foot_left&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:125px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:30px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#fff; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -webkit-gradient(linear, right top, left bottom, from(#fff),color-stop(0.75,#fff),color-stop(0.85,#eee), to(#999));&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -moz-linear-gradient(right top, #fff,#fff 75%, #eee 85%, #999); <br/>&nbsp;&nbsp;&nbsp;&nbsp;border:solid 2px #333; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-top-left-radius:80px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-bottom-left-radius:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-top-right-radius:60px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-bottom-right-radius:60px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-top-left-radius:80px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-bottom-left-radius:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-top-right-radius:60px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-bottom-right-radius:60px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius-topleft:80px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius-bottomleft:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius-topright:60px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius-bottomright:60px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:8px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:2px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;box-shadow:-6px 0px 10px rgba(0,0,0,0.35); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-box-shadow:-6px 0px 10px rgba(0,0,0,0.35); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-box-shadow:-6px 0px 10px rgba(0,0,0,0.35); <br/>&nbsp;&nbsp;&nbsp;&nbsp;z-index:-1; <br/>&#125; <br/>#foot_right&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:125px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:30px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#fff; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -webkit-gradient(linear, right top, left bottom, from(#fff),color-stop(0.75,#fff),color-stop(0.85,#eee), to(#999));&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -moz-linear-gradient(right top, #fff,#fff 75%, #eee 85%, #999); <br/>&nbsp;&nbsp;&nbsp;&nbsp;border:solid 2px #333; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-top-left-radius:60px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-bottom-left-radius:60px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-top-right-radius:80px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-bottom-right-radius:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-top-left-radius:60px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-bottom-left-radius:60px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-top-right-radius:80px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-bottom-right-radius:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius-topleft:60px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius-bottomleft:60px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius-topright:80px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius-bottomright:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:-32px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:141px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;box-shadow:-6px 0px 10px rgba(0,0,0,0.35); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-box-shadow:-6px 0px 10px rgba(0,0,0,0.35); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-box-shadow:-6px 0px 10px rgba(0,0,0,0.35); <br/>&nbsp;&nbsp;&nbsp;&nbsp;z-index:-1; <br/>&#125; <br/>#foot_rewrite&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:20px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:10px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#fff; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -webkit-gradient(linear, right top, left bottom, from(#666),color-stop(0.83,#fff), to(#fff));&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background: -moz-linear-gradient(right top, #666, #fff 83%, #fff); <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:-76px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:127px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-top:2px solid #000; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-right:2px solid #000; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-left:2px solid #000; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-top-right-radius:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-top-left-radius:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-top-right-radius:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-top-left-radius:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius-topleft:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius-topright:40px; <br/>&#125; <br/>#shadow_doutai_left&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:30px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:200px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;box-shadow:-10px 10px 15px rgba(0,0,0,0.45); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-box-shadow:-10px 10px 15px rgba(0,0,0,0.45); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-box-shadow:-10px 10px 15px rgba(0,0,0,0.45); <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:250px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:46px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;z-index:-10; <br/>&#125; <br/>#shadow_doutai_right&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:30px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:200px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;box-shadow:10px 10px 15px rgba(0,0,0,0.35); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-box-shadow:10px 10px 25px rgba(0,0,0,0.35); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-box-shadow:10px 10px 15px rgba(0,0,0,0.35); <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:240px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:230px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;z-index:-10; <br/>&#125; <br/>#shadow_doutai_arm&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:85px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:165px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;box-shadow:-100px 10px 15px rgba(0,0,0,0.0); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-box-shadow:-100px 10px 15px rgba(0,0,0,0.25); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-box-shadow:-100px 10px 15px rgba(0,0,0,0.25); <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:230px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:113px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;z-index:10; <br/>&nbsp;&nbsp;&nbsp;&nbsp;opacity:0.5; <br/>&nbsp;&nbsp;&nbsp;&nbsp;transform: rotate(-20deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-transform: rotate(-20deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-transform: rotate(-20deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-o-transform: rotate(-20deg); <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-bottom-left-radius:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-bottom-left-radius:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius-bottomleft:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-top-left-radius:20px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-top-left-radius:20px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius-topleft:20px; <br/>&#125; <br/>#shadow_belt&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;width:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;height:30px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;box-shadow:-100px 10px 15px rgba(0,0,0,0); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-box-shadow:-100px 10px 15px rgba(0,0,0,0.25); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-box-shadow:-100px 10px 15px rgba(0,0,0,0.25); <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:absolute; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:240px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;left:130px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;z-index:10; <br/>&nbsp;&nbsp;&nbsp;&nbsp;border-bottom-left-radius:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-webkit-border-bottom-left-radius:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-moz-border-radius-bottomleft:40px; <br/>&nbsp;&nbsp;&nbsp;&nbsp;z-index:300; <br/>&#125; <br/>#arm_left:not(&#92;*&#124;*), .arm_rewrite_left:not(&#92;*&#124;*)&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#07beea; <br/>&#125; <br/>#arm_left, .arm_rewrite_left&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;background:#07beea&#92;9; <br/>&nbsp;&nbsp;&nbsp;&nbsp;*background:#07beea; <br/>&nbsp;&nbsp;&nbsp;&nbsp;_background:#07beea; <br/>&#125; <br/>#kiji&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;position:relative; <br/>&nbsp;&nbsp;&nbsp;&nbsp;top:-150px; <br/>&#125; <br/>&lt;/style&gt; <br/>&lt;/head&gt; <br/>&lt;body&gt; <br/>&lt;div id=&quot;doraemon&quot;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;face&quot;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;head_light&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;eyes&quot;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class=&quot;eye eye_left&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class=&quot;black_eye black_left&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class=&quot;eye eye_right&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class=&quot;black_eye black_right&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;base&quot;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;base_white&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;nose&quot;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;nose_light&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;nose_line&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;mouth&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;mouth_rewrite&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;firefox_mouth&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class=&quot;whiskers whi_right_top rotate160&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class=&quot;whiskers whi_right&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class=&quot;whiskers whi_right_bottom rotate20&quot;&gt;&lt;/div&gt; <br/>&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;&lt;div class=&quot;whiskers whi_left_top rotate20&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class=&quot;whiskers whi_left&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class=&quot;whiskers whi_left_bottom rotate160&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;choker&quot;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;belt&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;bell&quot;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div id=&quot;bell_line&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;bell_circle&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;bell_under&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;bell_light&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;body&quot;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;doutai&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class=&quot;base_white2 doutai_center&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;pocket&quot;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;circle&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;circle_rewrite&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;hand_right&quot;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;arm_right&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class=&quot;hand_circle hand_right&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class=&quot;arm_rewrite_right&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;hand_left&quot;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;arm_left&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class=&quot;hand_circle hand_left&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div class=&quot;arm_rewrite_left&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;foot&quot;&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;foot_left&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;foot_right&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;foot_rewrite&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;shadow_doutai_arm&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;shadow_doutai_left&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;shadow_doutai_right&quot;&gt;&lt;/div&gt; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div id=&quot;shadow_belt&quot;&gt;&lt;/div&gt; <br/>&lt;/div&gt; <br/>&lt;/body&gt; <br/>&lt;/html&gt;<br/><br/></div><br/><br/>Tags - <a href="http://agileblog.cn/tags/css3/" rel="tag">css3</a> , <a href="http://agileblog.cn/tags/%25E6%259C%25BA%25E5%2599%25A8%25E7%258C%25ABchrome/" rel="tag">机器猫chrome</a> , <a href="http://agileblog.cn/tags/firefox/" rel="tag">firefox</a> , <a href="http://agileblog.cn/tags/ie7/" rel="tag">ie7</a> , <a href="http://agileblog.cn/tags/ie8/" rel="tag">ie8</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/yulu-hanhan/</link>
<title><![CDATA[韩寒十年142条经典语录]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Reading]]></category>
<pubDate>Sat, 17 Jul 2010 14:18:44 +0000</pubDate> 
<guid>http://agileblog.cn/yulu-hanhan/</guid> 
<description>
<![CDATA[ 
	1. 真理往往是在少数人手里，而少数人必须服从多数人，到头来真理还是在多数人手里，人云亦云就是这样堆积起来的。第一个人说一番话，被第二个人听见，和他一起说，此时第三个人反对，而第四个人一看，一边有两个人而一边只有一个人，便跟着那两个人一起说。可见人多口杂的那一方不一定都有自己的想法，许多是冲着那里人多去的 。<br/><br/>2. 我这辈子说得最让人无从反驳的话就是被子不用叠——本来就是要摊开睡的——然而这也是第一个被人反驳掉的。懂么，这就是规矩。我们之所以悲哀，是因为我们有太多规矩。<br/><br/>3. 我觉得我是全世界最聪明绝顶的人。因为有些博士其实见识没有多少长进，只是学会了怎么把一句人都听得懂的话写得鬼都看不懂<br/><br/>4. 如果现在这个时代能出全才，那便是应试教育的幸运和这个时代的不幸。如果有，他便是人中之王，可惜没有，所以我们只好把“全”字人下的“王”给拿掉。时代需要的只是人才。<br/><br/>5. 我们最终需要的人才是专长于一类的，当然我们也要有各科的基础，不能从小学一年级就专攻什么，为直达目的扔掉一切，这就仿佛准备要去公共浴室洗澡而出门就一丝不挂；但也不能穿了棉袄洗澡。我曾从《知音》杂志上看见一个处境与我一样又相反的人，他两次高考数学物理全部满分，而英语语文不及格，最终他没能去大学，打工去了。所以，现在教育的问题是没有人会一丝不挂去洗澡，但太多人正穿着棉袄在洗澡。<br/><br/>6 我觉得，现在的情况就是：家乐福就像一个充气娃娃，让一帮人抱着发泄，一方面可能的确平时活得太压抑，要找个没什么代价的出口。一方面边发泄还要边问这充气娃娃和充气娃娃的制造商，我强不强啊，我强不强啊，看见旁边那些对于搞充气娃娃没兴趣的人还指责他们性无能<br/><br/>7. 中国看不起说大话的人。而在我看来大话并无甚，好比古代妇女缠惯了小脚，碰上正常的脚就称“大脚”；中国人说惯了“小话”，碰上正常的话，理所当然就叫 “大话”了。敢说大话的人得不到好下场，吓得后人从不说大话变成不说话。<br/><br/>8. 我成为现象，思想品德不及格，总比没思想好。<br/><br/>9. 因为以前说过，文学往往是政治的妓女，所以，像上文一样，我伺候的评论家们舒服不舒服啊？要不要我叫上陈丹青给大家也认个错，双飞更舒服哦……如果大家觉得我这样的服务很好的话，以后一直点我哦，我的工号是 18 万 4531 号，工号是有点难记，唉，没办法，作家里干这行的太多了……<br/><br/>10. 我生性不爱受困，常常违反班规，班主任常罚我抄班规 20 遍，我只好三支笔一起握。我常对人说，我的一手好字就是这么练出来的。<br/><br/>11. 街上美女很少，因为这年头，每天上一次床的美女比每天上一次街的美女多。举凡女孩子，略有姿色，都在大酒店里站着；很有姿色，都在大酒店里睡着；极有姿色，都在大酒店经理怀里躺着。<br/><br/>12. 周庄的大门口停满了各式各样的公车，可见我国政府对提高官员的艺术修养是十分注重的。<br/><br/>13. 占着茅坑不拉屎是可恶的，其实，最可恨的却是拉完了屎还要占着茅坑。<br/><br/>14. 一个男子失恋以后，要么自杀，要么再恋一次爱，而第二次找对象的要求往往相近于第一个，这种心理是微妙的，比如一样东西吃得正香，突然被人抢掉，自然要千方百计再想找口味相近的——这个逻辑只适用于女方背叛或对其追求未果。若两人彼此再无感情，便不存在这种“影子恋爱”，越吃越臭的东西是不必再吃一遍的。<br/><br/>15. 名气就仿佛后脑勺的头发，本人是看不见的，旁人却一目了然。<br/><br/>16. 数理化语文英语全很好，音乐体育计算机都零分，连开机都不会，我还是一个优等生。但如果我音乐体育计算机好得让人发指，葡萄牙语说得跟母语似的，但是数学英语和化学全不及格，我也是个差生。<br/><br/>17. 一个十八岁以上的成年人，居然还不知道自己以后的理想是什么，自己喜欢的是什么，那真是教育的失败。<br/><br/>18. 数学就是做，不断做，做到你考试的时候发现试卷上所有的题目都做过，就行了。<br/><br/>19. 我在上学的时候，喜欢踢球。有人讽刺我说再踢也踢不到国家队，踢再好也好不过罗纳尔多，踢了有什么意思。不许踢了。那么，如果你自己喜欢开车，我对你说，你再开也开不到迈凯轮车队去，开再快也快不过舒马赫，开了有什么意思，驾照没收了。<br/><br/>20. 恋爱的话很大程度是为了自己的面子，比如学校里觉得长得好看有面子，而办公室里觉得找个有钱的有面子一样，其实爱的都是面子。<br/><br/>21. 在抗击“非典”的时候，有的航空公司推出了教师和医护人员机票打六折的优惠措施，这让人十分疑惑。感觉好像是护士不够用年轻女老师全上前线了。但是，我实在看不到老师除了教大家勤洗手以外有什么和“非典”扯上关系的。那我是清洁工坐飞机能不能打六折？<br/><br/>22. 文章这个东西，在语句通顺，错别字不多到影响阅读的情况下，好坏完全没有评判的标准。我随便拿一篇朱自清的文章交上去，没有一个老师会觉得自己的学生写作文好到有名家的水平了，并且照样会作出很多修改意见。<br/><br/>23. 有一年学校在交学费的时候强行多收取 100 元，理由是向家长的贷款，以用于教育建设，至于还款，不仅无期，而且无息。到最后反正被借钱的人谁都不知道这钱究竟建设了一个什么。<br/><br/>24. 语文，“秘诀”有二：一是不看语文书；二是不看作文书。<br/><br/>25 、我看书有我的原则，我不喜欢语文书、作文课，因为我仇恨这些东西赚人的钱又扼杀人的个性和创造力。我更喜欢王朔，这小子很聪明，而且很真诚。我的写作特点更像钱钟书的《围城》，因为我很欣赏他骂人骂得深刻又不露骨。<br/><br/>26 、学生给我寄来一份试卷，里面有一道题是用我的文章作分析，问我的文章到底选自以下那个大赛： A ：全国首届新概念作文大赛； B 、首届全国新概念作文大赛； C ：新概念首届全国作文大赛。你说这是什么玩意儿！考试的目的是什么？我们的语文教育真是伟大！<br/><br/>27 、我的小说主人公基本上没干什么事，就这么混混沌沌过着。这就是生活。为什么一定要高于生活？<br/><br/>28 、数学，我想我只要上到初二就够了。 一个人全面发展当然好，但可能越全面发展越是个庸才。说一个人学习高等数学是为了培养逻辑能力，我觉得逻辑能力是与生俱来的东西，并不是培养出来的东西。古人不学高等数学，难道就没有逻辑能力吗？<br/><br/>29 、七门功课红灯，照亮我的前程。<br/><br/>30 、我想，时候差不多越来越多的社会名流们要到这里来演出和慰问了，我也该走了。<br/><br/>31 、我是一块上海大镜子，我会让很多人反思自己。<br/><br/>32 、我很难概括自己的个性。我对那些模式化的人格尤为反感，我只是按我喜欢的做事而已。我不愿随大流，我是写不出那种“啊，我们光荣的大桥”一类的东西的。<br/><br/>33 、休学后的安排胸有成竹， 5 月为《三重门》在上海作发行宣传，到同龄人中搞签名售书，暑假约几个同伴去西藏……岁末几个月把自己锁在家里，将一年体验付诸笔端。<br/><br/>34. 紧张的人说话时的体现不是忘记内容，而是忘记过渡，全然不知道自己在说什么，两句毫无因果关系的句子居然能用“所以”串起来。<br/><br/>35. 家庭就像一座山，双方都要拼命往上爬，而山顶只容一个人站住脚。说家像山，更重要的是一山难容二虎，一旦二虎相向，必须要恶斗以分轩轻。通常男人用学术之外的比如拳脚来解决争端, 所以说，一个失败的女人背后大多会有一个成功的男人。<br/><br/>36. 问题涉及到了钱上，爱的寿命就不同了。我常可以见到恶丑无比的男人拥着一个美若天仙的女子。<br/><br/>37. 我们有理由相信，创建在爱情上的爱情是短暂的，因为爱情自身是短暂的；而创建在金钱上的爱情是永远的，因为金钱是永远的。<br/><br/>38. 上海的美女走在街上向来目不斜视，高傲地只看前方，穿马路也不例外；上海的男人却大多目不正视，竭力搜索美女，脸上的肌肉已经被培训得可以不受大脑控制而独立行动，见到美女就会调出个笑，因为如此的关注，所以，在上海只听到车子撞老太婆，鲜闻有车子撞上美女。<br/><br/>39. 城市好比女人，白天我们看见的只是大施粉黛的脸蛋，待到夜深时才可以见到她卸妆后的容颜。那才是最真实的。<br/><br/>40. 潮流是只能等不能追的，这和在火车站等候火车是一个道理，乖乖留在站上，总会有车来，至于刚开走的车，我们泛泛之辈是追不上的。<br/><br/>41. 痛恨一个人四年比喜欢一个人四年更加厉害。喜欢只是一种惯性，痛恨却需要不断地鞭策自己才行。<br/><br/>42. 一帮毫无成就的人居然还指责一个世界冠军的教育模式有问题，就是中国逻辑。<br/><br/>43. 什么坛到最后也都是祭坛，什么圈到最后也都是花圈。<br/><br/>44. 教师不吃香而家教却十分热火，可见求授知识这东西就像谈恋爱，一拖几十的就是低贱，而一对一的便是珍贵。珍贵的东西当然真贵，一个小时几十元，基本上与妓女开的是一个价。同是赚钱，教师就比妓女厉害多了。妓女赚钱，是因为妓女给了对方快乐；而教师给了对方痛苦，却照样收钱，这就是家教的伟大之处。<br/><br/>45. 和女性争辩是不明智的。无论这个女性是不是明智。<br/><br/>46. 权力高于你尽全力扞卫的权利。<br/><br/>47. （海淀区是）全国有名的迫害学生的源头。<br/><br/>48. 大部分的现代诗其实就是把一篇三流散文拆成一句一行写，而所谓比较大师的或者先锋的就是把一篇三流散文每句句子的顺序捣乱了再拆成一句一行写。<br/><br/>49. 只要不要脸，谁一天都能写几十首现代诗。<br/><br/>50. 所谓压力大，学习苦，名额少，全是老百姓的事情，有钱有权的人，从没有说过教育有什么不好，因为这完全是他们所不能体会的东西。<br/><br/>51. 我们主要到你们这里来学习，话是好听，但是你在学校里都干什么来着？<br/><br/>52. 先人也很可怜，引用他们的很多话，很多时候不是因为尊敬他们，而是凑巧他们和自己想的一样，利用一下这些话，去反驳或者批评一个和自己想的不一样的人罢了。<br/><br/>53. 欠人钱和欠人情有很大的不同。比如别人欠你一笔钱，拖着久久不还，你已经断然失望，这时，那人突然还钱了，你便会觉得那仿佛是身外之财，不是你的钱，然后挥霍花掉；但若是别人欠你一份情，也久久不还，待到那人还你情时，你会备加珍惜这情。<br/><br/>54. 对男子而言，最难过的事就是旅行途中二男一女这样内部永远团结不了。<br/><br/>55. 不漂亮的女孩子撒娇成功率其实比漂亮女孩子要高，因为漂亮女孩子撒娇时男的会忍不住要多看一会儿，再在心里表决是否值得；不漂亮的女孩子撒的娇，则像我国文人学成的西方作家写作手法，总有走样的感觉；看她们撒娇，会有一种罪恶感，所以男的都会忙不迭答应，以制止其撒娇不止。<br/><br/>56. 骂人时最痛苦不过于别人用你的话来回骂你，分量也会猛增许多。<br/><br/>57. 看来最保险的还是常备一只信鸽。<br/><br/>——韩寒评中国移动与中国联通的手机网络。<br/><br/>58. 这年头，杀了爹或者被爹杀了都不算新闻。<br/><br/>男学生以不知天高地厚想法幼稚盲目自大为主，女学生就不那么想法幼稚了，而且有一部分想法还很成熟。<br/><br/>59. 答非所问；没有一个问题能在二十句话内解决；不论什么东西最后都要引到自己研究的领域中去，哪怕嫖娼之类的问题也是；喜欢打断别人话，不喜欢别人打断他的话；对无论什么东西都要分成几个方面去说，哪怕说的是一个道理；在否定一样东西前一定要肯定一下；在他们回答问题回答到一半的时候问他们记不记得刚才的问题是什么他们八成不记得了；偏胖；说话的时候手一定要挥舞；被逼到没辙的时候总拿自己经历过文化大革命作为比别人强的本钱，但不能解释像他这样的学术权威为什么没有被打倒；被打倒的一定要让人知道自己曾经被打倒；总结性的话都能在死掉的人写的书里找到。<br/><br/>——韩寒谈“专家”的特点。<br/><br/>60. 他们的最大理想估计是文坛能变成一个敬老院。<br/><br/>中国文学没有起色的很大原因是有这些做事说话极其不负责任但又装出一副很诲人不倦的样子的人长期占据文学评论的权威位置。<br/><br/>61. 越小的官就越喜欢滥用职权。<br/><br/>62. 我们 Chinese 总不能拿英语互相问路到长城怎么走吧。<br/><br/>——韩寒认为，普及普通话比普及英语更重要。<br/><br/>63. 闭上眼睛以为是在牛津，睁开眼一看是在天津。<br/><br/>64. 什么东西被神化以后下一步必然是说很多胡话。<br/><br/>65. 开个小卖部还恨不得能上市呢。<br/><br/>——韩寒谈大学生眼高手低的现象。<br/><br/>66. 不可思议居然还有在花父母钱上学吃饭的二十几岁的人洋洋自得自己的综合能力。<br/><br/>67. 建议以后的作文评分取消优良中差，改成“正合我意”，“相差不远”，“参考大纲”，“逆我者亡”四种得了。<br/><br/>一个人，没有资格判定甲的文章是优秀，而乙的文章不及格。只能说我喜欢甲的文章不喜欢乙的文章，或者说，甲的文章和教学大纲上要求的差不多，乙的差得有点远。<br/><br/>68. 爱国之心在看中国队踢世界杯或者中国使馆被炸时都在体现和培养，实在不会因为一个班级在烈日之下曝晒了几十小时而增加。<br/><br/>——韩寒谈中学军训。<br/><br/>69. 连个未成年人都教育不了居然要去教育成年人。<br/><br/>——韩寒评“叫你的家长来一趟”。<br/><br/>70. 教师本来就是一个由低能力学校培训出来的人，像我上学的时候，周围只有成绩实在不行，而且完全没有什么特长，又不想去当兵，但考大专又嫌难听的人才选择了师范，而在师范里培养出一点真本事，或者又很漂亮，或者学习优异的人都不会选择出来做老师，所以在师范里又只有成绩实在不行，而且完全没有特长，又不想去当兵，嫌失业太难听的人选择了做教师。所以可想教师的本事能有多大。<br/><br/>71. 中国几千年来一直故意将教师的地位拔高，终于拔到今天这个完全不正确的位置。<br/><br/>——韩寒：“其实说穿了，教师只是一种职业，是养家糊口的一个途径，和出租车司机，清洁工没有本质的区别。”<br/><br/>72. 假的传千里，真的没人理。<br/><br/>73. 我们不能借着管理的名义欺负压榨一些穷苦百姓，也不能借着无法管理的名义放纵一些贪官贵人。如果像城管抓小商贩一样抓中国的大小腐败，那社会肯定更加和谐。国家肯定更加强大。<br/><br/>74. 明明下流的人，凑一起就叫上流社会？<br/><br/>75. 生活实在是最无辜的事物，它明明最公正，却被无数人用作自己做坏事的借口。一切都是生活所迫，而生活却从来没有被抓住过。<br/><br/>76. 不管老师处于什么样的用心，我觉得这都是很可笑的事情，并且侵犯到人权。最最至少的，你可以不提倡，但是你不能够打击。<br/><br/>我实在不能想象当两个人很相爱的时候，突然会出现一个既不是我爸妈，也不是对方爸妈的人说：不行，你们不能在一起。<br/><br/>——韩寒评老师干预早恋<br/><br/>77. 从不服输的我承认，我输给你了。<br/><br/>—— 2007 年 12 月 15 日韩寒自曝被一女幼教电话骚扰多年<br/><br/>78. 其实高考的压力是完全的经济压力，如果高考前一天，忽然告诉你你爹妈都死了，但是居然卖烧饼的爹妈有几个亿的遗产，我想绝大部分的人会以居高临下的姿态参加考试，并且在碰到一个诸如叫你分析“居然”和“竟然”两词除了笔画不一样多以外有什么区别之类的题目的时候高呼一声：爷不考了 !<br/><br/>79 有句话说“爱情是女人最好的化妆品”，这话其实不对，爱情没这威力，爱情只是促使女人去买最好的化妆品，仅此而已。<br/><br/>80. 九十年代女中学生的文章仿佛是个马厩，里面尽是黑马王子和无尽的青梅竹马。<br/><br/>81. 前几年考重点高中成风，现在已经成疯。<br/><br/>82. 规矩其实是温饱以后的消遣，温饱都不能了，还要规矩吗。<br/><br/>83. 赠人玫瑰，手有余香，你赠人黑锅，你的手还是黑的。<br/><br/>84. 所谓脚痛踢脚，头痛踢头，另一个外援在国内联赛里眼睛又被踢残了。的确不太文明，弄不好国际社会对中国队的印象就是在原始森林海边踢椰子的一群狒狒。<br/><br/>85. 我几年前在电视上看到过一个广告，大意是这样的，在公共汽车上，一个老者垂头丧气，人家问，你怎么了。老头说，我得了癌。车上的售票员说，没事，我几年前也得了癌，在前面某站的一个医院治疗了，现在好了。司机接着说，是的，我的癌也是那里治好的。然后一车的乘客纷纷说，我们的癌，都是在那里治好的。<br/><br/>86. 刘翔，居然有人觉得他应该谦虚点．已经是世界记录保持者了，如果非要在那说，不行不行，我跑的还不行．可能某些人听着心里舒服，但这样的谦虚其实是对别人更大的侮辱，这都叫不行，那你们都是残废了．<br/><br/>87. 都是从那个年代过来的，蹉跎岁月嘛，总离不开一个“蹉”字，“文革”下乡时搓麻绳，后来混上镇长了搓麻将，搓麻将搓得都驼了背，乃是真正的蹉跎意义的体现。<br/><br/>88. 我会不会加入作协？如果我去了就能当主席，我就去，我下一秒就把作协给解散了。<br/><br/>89. 就算我是个名人了，但我也特清高特清高特清高特清高特清高特清高，清高到高晓松不胜韩寒的程度，所以我不喜欢做什么评委。<br/><br/>——“高处不胜寒”，韩寒一句话压过高晓松<br/><br/>90. 你是否像鞭炮一样一点就着？一点就着的下场就是炮灰。<br/><br/>91. 失恋的人的伤心大多不是因为恋人的离开，而是因为自己对自己处境的同情和怜悯。<br/><br/>92. 世界上逻辑分两种，一种是逻辑，一种是中国逻辑。<br/><br/>93. 低级趣味也是趣味，娱乐自己始终不易。<br/><br/>94. 自己觉得自己特聪明，把别人都想得特别的别有用心，什么拙劣博出位之类。如果一件事情，凭他们的脑袋就知道是拙劣的，难道我还能不知道。<br/><br/>95. 虽然我不会参加任何影视的表演，但其实我是一个好演员，只是没有人有资格来导演我罢了。不要学我。你让我重来，我都学不像自己。<br/><br/>96. 有些人，居心叵测惯了，看出去觉得全世界的人都居心叵测。<br/><br/>97. 事实上，在长途旅行的时候，你愿意带上谁，她便是好姑娘。<br/><br/>98. 对于车手的心态，我个人认为任何一个在中国可以生存下去的人，都具备了很强大心态，不需要再进行单独的心态训练了。<br/><br/>99. 除了罪犯，这个世界上没有一个人在做自己喜欢的事情。<br/><br/>100. 这是一种真正的无所事事，无所事事到让外人看着就仿佛是在谋划着干大事。<br/><br/>101. 他首先觉得自己是做大事的人，不应该去贪图这些小便宜，这不是他的性格，但是最郁闷的是，既然决定义无反顾的去贪了，结果一如既往地没有贪着。<br/><br/>102. 不要以为在巴黎铁塔下就很时尚。<br/><br/>103. 你觉得这个奶不好喝是因为你挤的奶更好喝 ? 你觉得这个蛋不好吃是因为你下的蛋更好吃 ?<br/><br/>——韩寒说他不喜欢巴金等名家，被人指责时韩寒这样说道 .<br/><br/>104. 踩死人总是不对的。<br/><br/>105. 我最怀念某年，空气自由新鲜，远山和炊烟，狗和田野，我沉睡一夏天。<br/><br/>106. 我想对他说，我和你看到的人都在最好的时光里，我们都很开心，而你在最好的时光里离开了，这都是最好的事情。好风光似幻似虚，多一分钟又如何，你丫把它留住了，但我不会输你的。<br/><br/>107. 和吃喝玩乐有关的，不用考虑预算，和群众安全有关的，考虑不用预算。<br/><br/>108. 老师都下意识暗自鼓励学生鄙视成绩差的，原因是拉了班级的后腿。每次听见这个我都觉得很可笑，班级又不是狗，还分前腿后腿的，况且许多老师都以为这是个可以说说就解决的问题，有能耐你先把外边贫富差距解决了。是不是一个班级只有一个学生才行？但是在大家鄙视的眼光下，成绩差的，不会做试卷而被无数人认为没前途的心理素质倒是比所谓优等生好多了。<br/><br/>109. 很多人都觉得我是叛逆的，其实不是。叛逆和做自己喜欢的事情在当今中国是两回事情。叛逆其实是种幼稚行为，就是说，比如，我，虽然很喜欢 F4 ，偷偷也看了好几遍《流星花园》，但是因为同学们都喜欢，所以我当众要表示，我不喜欢 F4 。这样，碰巧遇见傻逼还以为你很有深度。这是叛逆的初级。而叛逆的中级暴力型就是大骂 F4 ，顺便把喜欢的人一起骂了，装疯卖傻型就是眼皮都不抬一下，说没听说过 F4 ，没看过《流星花园》，但背地里还偷偷看八卦杂志分析《流星花园 2 》什么时候出来。叛逆的最高级就不能拿 F4 来说事了，看出去什么都是反的了，就算学校提倡多走楼梯有益健康都觉得不顺耳非得跳楼才满意。<br/><br/>110. 看不看太阳根本无所谓，这段时间里其实应该花十五分钟和心上人做一个最简短的爱，这样日后就可以大言不惭的对别人说，想当年，我年轻的时候和女朋友上床，时间最短的一次都从天亮做到了天黑又做到了天亮。所以我认为，年轻的情侣们起大早跑到街上去看日全食绝对是失策。望文生义，日全食当然要日全时嘛。 — 对于 7 月 22 日的日全食，韩寒如是说<br/><br/>111. 今天接受一个采访，我说，我是一个看重结果而不看重过程的人，我不相信虽败犹荣，我不相信享受过程。现在想想，所谓结果，深远来说，都是别了，不是你别我，就是我别你，要不就是别了世界，对于别了，我们心里总是说，别啊。所谓别了，有分别，暂别，告别，吻别，但我认为都没鸡巴什么区别，每次都可能是永别的前奏。所以，比如种一个菜，究竟播种是过程，开花是结果还是开花是过程，结果是结果还是结果是过程，凋零是结果还是凋零是过程，播种是结果呢？对于这颗菜来说，晕菜才是结果。 — 韩寒的博客<br/><br/>112. 相关部门说，他们用两年的时间做了大量的调查研究和广泛征询意见，我周围的朋友很多开车，包括所有的汽车论坛上，从来没有看见过有人是被征询意见的。我认为，征询了老婆情人二奶的意见不能算是广泛征询意见。相信这只是相关部门自己决定以后的随口一说，就像那 100 个 250 一样，都是他们的惯性谎言。其实，我认为，高速公路的标示用中文也挺好，高 1 高 2 高 3 ，国道就叫大 1 大 2 大 3 ，省道就叫初 1 初 2 初 3 ，终点都是天安门，广场上竖一个大路牌，毕业。然后索性多花点钱，把所有的路牌都换成电子大屏幕，可谓一劳永逸，从国库的角度来说，其实是节省的，你不光可以按照心情随时更换路牌路名，也可以经常进行一些政策的宣传，放一些领导的头像或者通缉犯的头像，总之，电子大屏幕是很方便操作的，也正符合我们政府随性洒脱的决策风格。<br/><br/>113. 大家似乎都不为前途担心，找不到工作了，变成一个小混混了，万一又什么本事没有，至少还可以做城管嘛。<br/><br/>114. 可是，这是对死去的写了一辈子文章的人的最大不尊重。就像张国荣死了一样，猜测他的死因其实没什么意义了，他肯定有自己的想法，我们谁都不知道，所以谁都没有资格断定，说真的，谁知道鲁迅写我家门前有一棵枣树，还有另一棵枣树是什么意思，可能什么意思都没有，自己想玩票呢，或者说写了一棵以后忽然记起来还有一颗呢。反正我不敢断定，因为我不知道。<br/><br/>如果真要出这样的题目（作者已去世的文章的阅读题），那答案也一定是无穷的，除了不知道和淫秽反动的，想到就有分数，比如写了一棵忽然想起来另外一颗也是枣树这个答案，也应该是满分。<br/><br/>我写《三重门》的时候，出现了两次“一张寂寞的脸消融在夕阳里”，一次还是结尾。作者想表达什么意思呢？为什么连用两次呢？是前后呼应体现主人公的落寞吗？作者给出的答案是，作者觉得这句话很好，但是因为写作时间拉的过长，写到最后时忘了前面用过一次，所以不小心又用了一次。<br/><br/>我的长篇小说《像少年啦飞驰》里出现过一些人物，但是到后来再也没有交代，为什么？<br/><br/>是因为这样体现了人生的飘忽和沧桑，很多生命都像过客一样闪过，都不能在人生里留下痕迹而感到的无奈？<br/><br/>不是。<br/><br/>是因为《像少年啦飞驰》是一段一段写的，作者没有打草稿，有些人写到后面就忘了使了。<br/><br/>回答“写丢了”一样满分。<br/><br/>115. 美丽故事的开始，悲剧就在倒计时。<br/><br/>116. 现实理想，中间隔着南墙，墙下站着无数的姑娘。<br/><br/>117. 你可以经常看见其他国家地区的领导因为屁大的事情就引咎辞职，但我国的领导哪怕出了天大的事情都巍然不动，最多就道歉一下完事，原因其实很简单，你忍心法办经常和你一张桌子上吃饭的朋友吗？你忍心法办和你在一张床上嫖娼的兄弟吗？所以，解决问题的根本中的根本就是，严禁公务员在一张桌子上吃饭。<br/><br/>118. 十年修得同船渡，百年修得共枕眠，千年修得同性恋，但两百年绝对修不成三个人共枕眠，也修不成 3P 。<br/><br/>119. 赌场出疯子，情场出傻子。<br/><br/>120. 总会有光明的东西的，在未来。<br/><br/>121. 你能发光，你应该飞在我的前面。<br/><br/>122. 我们上了十年的思想政治课，学习了这么多的鸟毛，除了建起了一个鸟巢以外，我们学到了什么？<br/><br/>123. 既然不能洗脑，那还不如去洗澡，所以，建议教委将所有的思想政治课改为游泳课，强身健体，还学会一项求生技能，这门课程一举从害人变成救人，功德无量。<br/><br/>124. 我们再做一下除法（学会做除法很重要），我们发现，上海的高速公路每公里需要更换的路牌是 40 块，也就是说，你在上海的高速公路上开车，每开 25 米，你就能看到一块牌子，假设你的速度是 120 公里每小时，也就是说，你每秒钟行进了 33.333333333 米，这代表着，你在上海的高速公路上开车，两秒钟内你差不多能看见三块路牌或指示牌。太狠了，如果我开的足够快，上海市公路管理处在路牌上画点图，我就能看动画片了。<br/><br/>125. 电瓶车是这个城市里倒数第二弱势的人群使用的交通工具，他们往往是疲于奔命的人，你不能让他们以 70 码的速度去送命，你也不能让他们以 15 码的速度去奔命。无论如何，我认为相关部门不能再多收他们一分钱了。有些人可以吃鲍鱼，但不能因为看见吃咸菜的人吃太多咸菜而制定一个标准，说你每天必须吃规定量的咸菜，否则太咸了有害身体健康，但解决的办法又不是给人家肉吃，而是将人家已经多吃的或者即将多吃的咸菜按照肉来收费。你以为人家那么乐意吃咸菜吗，你吃一个试试。当然，可能你偶然吃咸菜还觉得挺好吃，就像 XX 省省长偶然在机动车道里骑自行车上班一次感觉很不错一样。牛逼你就天天吃。<br/><br/>126. 城市，让人民死的早。<br/><br/>127 ，况且我只是一介书生，在这个又痛又痒的世界里写了一些不痛不痒的文章而已，百无一用，既不能改变社会的残酷，也不能稀释傻逼的浓度。<br/><br/>128. 好比你是公司的部门经理，你要买一个市场价是 1000 的打印机，于是你给了你的一个员工 1000 元整，结果你的员工花了 300 块钱就把这个打印机给强行买来了，还给你开了一张 1000 的发票，又给了你 400 ，他自己拿走 300 。不光如此，你还不用负责这个员工的伙食，因为他饿了可以自己钓鱼吃。这个员工唯一的问题是开车赶路的时候压死的几条狗，导致你的办公室外面经常有一堆狗对着你吼，你说，你会不会开除这个员工呢？当然不会。你只会想，这些狗真麻烦。是的，那些倒霉蛋就是那几只狗，而我们就是那一堆狗。<br/><br/>129. 这到底是进步还是退步呢？我认为这是进步，因为十年之前，他们还穿着内衣，十年之后，他们赤裸裸了。但是新疆的姑娘们真的好漂亮，希望你们能一起进步。<br/><br/>130. 你要是把这样好的人民给饿死了病死了穷死了逼死了毒死了吃死了气死了冤死了喝水喝死了，你去哪里找比他们更老实的人民呢。<br/><br/>131. 我们只是站在这个舞台上被灯光照着的小人物。但是这个剧场归他们所有，他们可以随时让这个舞台落下帷幕，熄灭灯光，切断电闸，关门放狗，最后狗过天晴，一切都无迹可寻。我只是希望这些人，真正的善待自己的影响力，而我们每一个舞台上的人，甚至能有当年建造这个剧场的人，争取把四面的高墙和灯泡都慢慢拆除，当阳光洒进来的时候，那种光明，将再也没有人能摁灭。<br/><br/>132. 只有众善够重，诸恶才能被诛。<br/><br/>133. 我们见识了，我们都很害怕，但是我们也不知道，你们都在害怕些什么。<br/><br/>134. 至今我一直有一个疑惑，就是比如某处灾难，救灾最终需要一亿，民众积极捐款，捐到了五千万，那到底意味着救灾总款变成了一亿五千万呢，还是救灾款依然是一亿，但是我们捐给了政府五千万？它困扰了我很久，最终解决的方法是各帮各的，各行其善。<br/><br/>135. 但是，我们可怜的孩子们，奶粉毒害的是你们，疫苗伤害的是你们，地震压死的是你们，被火烧死的是你们。就算是成人们的规则出了问题，被成人用刀报复的也是你们。<br/><br/>136. 心理辅导是没有用的，当我看见我们的女人搂着有钱人，有钱人搂着官员，官员搂着老板，老板搂着林志玲，你怎么给我心理辅导？一打听，同学们混的都更惨，有混的好的男同学，那是靠家里，有混的好的女同学，那是嫁的好，别人都羡慕你在富士康有社会保障，按时发工资，安排住宿，加班还给钱，你说你像个机器，别人说自己像包屎，方圆几百公里内，连个现实的励志故事都没有，这就是很多中国年轻人的生活。——韩寒谈富士康跳楼事件。<br/><br/>137. 为什么我们的政客能在世界的政治舞台上挺起了腰杆，还能来几下政治博弈，耍几下政治手腕，是因为你们，每一个廉价劳动力，你们是中国的筹码， GDP 的人质。无论这是中国特色的社会主义还是封建特色的资本主义，在未来的十年里，这些年轻人都是无解的，多么可悲的事情，本该在心中的热血，它涂在地上。 ——博文《青春》<br/><br/>138. 还有一个原因是在我的祖国，我的身边是中国贪官，如果换了一个国家，发现身边还是不少中国贪官，我肯定崩溃了。——博文《把酒言欢 言无不尽》当加拿大记者问韩寒：“如果你有机会定居海外，比如加拿大，你会不会去，为什么？”时，韩寒的回答。<br/><br/>139. 我看好阿根廷。——韩寒谈 2010 南非世界杯<br/><br/>140. 热血一定要洒在它该洒的地方，否则它就叫鸡血。——博文《 2010 年 6 月 12 日》<br/><br/>141. 事实上，我一点都不怀念谷歌。谷歌就像一个姑娘，有一天她跑过来说，我要离开你。我说，不要这样亲爱的。让人伤心的是，最后她还是离开了。但是我发现，其实当我想上她的时候，我还是随时能上她。唯一的不同就是以前我上她的时候能从她身上搜出胡萝卜，但是现在，我问她，胡萝卜呢，她就嗖一下不见了。 ——- 博文< 把酒言欢 言无不尽 ><br/><br/>142. 无论你是什么阶级，无论你是哪个思想家，哪个政治家，哪个军事家，研究出如何获得权力的都不伟大，研究出如何限制权力的才是伟人。<br/><br/>Tags - <a href="http://agileblog.cn/tags/%25E9%259F%25A9%25E5%25AF%2592%25E8%25AF%25AD%25E5%25BD%2595/" rel="tag">韩寒语录</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/t-163-com/</link>
<title><![CDATA[推累了，休息下]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[心情文摘]]></category>
<pubDate>Tue, 13 Jul 2010 10:44:03 +0000</pubDate> 
<guid>http://agileblog.cn/t-163-com/</guid> 
<description>
<![CDATA[ 
	刚到网易微博去，便出现了以下画面，很多人预测，是不是接二连三的微博都将受到关闭呢？我们拭目以待。不过像我个人的触摸微博还是不会有问题的，服务器在国外，随他怎么弄，我都还是可以通过IP进行访问的。<br/><a href="http://agileblog.cn/attachment.php?fid=152" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=152" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>Tags - <a href="http://agileblog.cn/tags/%25E7%25BD%2591%25E6%2598%2593%25E5%25BE%25AE%25E5%258D%259A/" rel="tag">网易微博</a> , <a href="http://agileblog.cn/tags/%25E8%25A7%25A6%25E6%2591%25B8%25E5%25BE%25AE%25E5%258D%259A/" rel="tag">触摸微博</a> , <a href="http://agileblog.cn/tags/beta/" rel="tag">beta</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/magnet/</link>
<title><![CDATA[磁力链接]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[软件工具]]></category>
<pubDate>Tue, 13 Jul 2010 09:23:15 +0000</pubDate> 
<guid>http://agileblog.cn/magnet/</guid> 
<description>
<![CDATA[ 
	今天使用迅雷的时候，突然发现多了一个新的功能，就是添加磁力链接。<br/>以下是磁力链接的截图<br/><br/><a href="http://agileblog.cn/attachment.php?fid=146" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=146" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>在迅雷官方博客有这样的描述，摘抄下来供大家分享<br/>原文地址：<a href="http://yangtai.xunlei.com/?p=593" target="_blank">http://yangtai.xunlei.com/?p=593</a><br/>什么是磁力链接（Magnet URI）？<br/> <br/><br/>　　简单的说：类似下面这样以“magnet:?”开头的字符串，就是一条“磁力链接”<br/><br/>【magnet:?xt=urn:sha1:YNCKHTQCWBTRNJIV4WNAE52SJUQCZO5C】<br/><br/>　　在网页中，“磁力链接”的下载按钮，通常具有类似下面这样的图标<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://agileblog.cn/attachment.php?fid=147" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=147" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><br/><br/>　　确切的说：“磁力链接”的主要作用是识别【能够通过“点对点技术（即：P2P）”下载的文件】。<br/><br/>　　这种链接是通过不同文件内容的Hash结果生成一个纯文本的“数字指纹”，来识别文件的。而不是基于文件的位置或者名称（例如：<a href="http://www.123.com/123.exe" target="_blank">http://www.123.com/123.exe</a>）。<br/><br/>　　这就类似生活中消费品包装上常见的条码。不同的是这个“数字指纹”可以被任何人从任何文件上生成，这也就注定了“磁力链接”不需要任何“中心机构”的支持（例如：BT Tracker服务器），且识别准确度极高。<br/><br/>　　因此任何人都可以生成一个Magnet链接并确保通过该链接下载的文件准确无误。<br/><br/><br/>磁力链接（Magnet URI）扮演什么角色？<br/> <br/><br/>　　在传统的BT下载方式中让各个下载者之间相互联系，有2种途径：<br/><br/>1、通过连接BT种子中记录的BT Tracker服务器，获取下载者列表<br/><br/>2、利用BT种子中记录的“数字指纹”通过DHT网络进行搜索，获取下载者列表<br/><br/>（噢，不过现实是，存活的BT Tracker服务器越来越少。而BT种子文件也需要服务器保存。）<br/><br/>　　我们假设“BT Tracker服务器被干掉了，BT种子文件服务器也被干掉了。。”<br/><br/>　　那么显而易见的是第1种途径完全走不通，第2种途径只能帮你“寻找”，却没办法知道你在寻找什么。<br/><br/>　　“磁力链接”的主要作用就是把“数字指纹”告诉DHT网络，你需要寻找什么。<br/><br/> <br/><br/>如何使用迅雷下载“磁力链接”？（迅雷5.9.17及后续版本支持）<br/> <br/><br/>1、你可以像下载普通任务一样，左键点击网页上“磁力链接”的下载按钮，或右键点击下载按钮，选择“使用迅雷下载”然后迅雷就会启动并建立任务。<br/><br/><br/><br/> <a href="http://agileblog.cn/attachment.php?fid=148" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=148" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://agileblog.cn/attachment.php?fid=149" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=149" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>2、如果你在网页上看到一段明文显示“磁力链接”<br/><br/>　2.1、如果你的迅雷开着，只要复制该链接，迅雷会弹出“正在获取磁力链接信息”的提示，稍等一会，就会弹出新建面板。<br/><br/>　2.2、如果你的迅雷没有开启，只能打开迅雷，点击新建按钮旁的“箭头”，选择“磁力链接任务”把复制的“磁力链接”填入弹出的输入框内，点击“立即下载”即可。<br/><br/><br/><a href="http://agileblog.cn/attachment.php?fid=150" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=150" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://agileblog.cn/attachment.php?fid=151" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=151" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><br/><br/> <br/><br/>对于可能出现的问题。。。<br/>　　前面我们说过，“磁力链接”是通过DHT网络来索引需要下载的文件的，因此在某些环境下可能出现“获取磁力链接信息”时间较长，或者获取失败的问题。由于目前相关问题经验的积累很少，因此除了重试还没有明确的解决办法。<br/><br/>Tags - <a href="http://agileblog.cn/tags/%25E7%25A3%2581%25E9%2593%25BE%25E6%258E%25A5/" rel="tag">磁链接</a> , <a href="http://agileblog.cn/tags/dht%25E7%25BD%2591%25E7%25BB%259C/" rel="tag">dht网络</a> , <a href="http://agileblog.cn/tags/%25E7%25A3%2581%25E5%258A%259B%25E9%2593%25BE%25E6%258E%25A5/" rel="tag">磁力链接</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/software-develop-english-word/</link>
<title><![CDATA[软件技术类的相关英语词汇]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[软件工具]]></category>
<pubDate>Fri, 09 Jul 2010 00:47:20 +0000</pubDate> 
<guid>http://agileblog.cn/software-develop-english-word/</guid> 
<description>
<![CDATA[ 
	原文地址：<a href="http://javac.tk/?p=9" target="_blank">编译运行时</a><br/><br/>Academy 专科学院，研究院，学会<br/><br/>Account for 说明<br/><br/>Accurate 正确的<br/><br/>Acronym 首字母缩略词<br/><br/>Administration 企业、机构等的管理部门，行政部门<br/><br/>Agenda （会议的）议程表，议事日程<br/><br/>Alphanumeric 文字数字的，包括文字与数字的<br/><br/>Alternative 可供选择的办法，事物<br/><br/>Analysis 分析者，化验员<br/><br/>Anticipate 预期，期望，过早使用，预订，预见，可以预料<br/><br/>Apart from 除了……外（还）<br/><br/>Appendix 附录<br/><br/>Application 应用程序，应用软件<br/><br/>Application server 应用服务器<br/><br/>Approach 接近，逼近，走进，方法，步骤，途径，通路<br/><br/>Appropriate 适当的<br/><br/>Approval 赞成，承认，正式批准<br/><br/>Approve 赞成，同意，批准，通过，认可，核准<br/><br/>Architecture 体系架构<br/><br/>Attachment 附件，附加装置，配属<br/><br/>Attractive 引起注意的人<br/><br/>Audience 听众，读者，观众<br/><br/>Authority 权限，权利<br/><br/>Authorization 授权，认可<br/><br/>Automated tools 自动化工具<br/><br/>Backup 做备份<br/><br/>Backup system 备份系统<br/><br/>Batch 一批<br/><br/>Bcc&nbsp;&nbsp;(Blind&nbsp;&nbsp;Carbon Copy)隐蔽副本<br/><br/>Be prone to 倾向于<br/><br/>Boundary 边界，分界线<br/><br/>Briefly 简要的<br/><br/>Browser/server 浏览器/服务器<br/><br/>Cc (Carbon Copy）抄送<br/><br/>Check and accept 验收<br/><br/>Cleaning-house 信息交换机构，信息交流所<br/><br/>Coding specification 编码规格说明<br/><br/>Collapse 倒塌，奔溃，倒塌，奔溃<br/><br/>Comment 注释，评论，意见<br/><br/>Compatibility 兼容性<br/><br/>Compile 编译<br/><br/>Complete 全部的，完全的，完成的<br/><br/>Comprehensive 综合的，全面的<br/><br/>Concise 简明的，简练的<br/><br/>Concurrent users 并发用户<br/><br/>Conduct 引导，管理，进行，开展，行为，品行，举止<br/><br/>Conference （通常持续几天的大型正式）会议，研讨会<br/><br/>Conference confirmation 会议通知<br/><br/>Configure 配置<br/><br/>Confuse 混淆<br/><br/>Confusion 混乱，混淆<br/><br/>Connectivity 连通性<br/><br/>Constantly 始终，一直，重复不断地<br/><br/>Constraint 约束，强制<br/><br/>Construct 搭建<br/><br/>Consume 消费，消耗<br/><br/>Contact 联系<br/><br/>Content 内容<br/><br/>Context 背景，环境 ，来龙去脉 ，上下文，语境<br/><br/>Contract 合同，契约，婚约，使缩短，感染，订约<br/><br/>Coordinate 使协调，使相配合<br/><br/>Corresponding 相应的<br/><br/>Critical 评论的，鉴定的，评论的，危机的，临界的<br/><br/>Data&nbsp;&nbsp;design 数据设计<br/><br/>Data flow diagram 数据流程图<br/><br/>Database server 数据库服务器<br/><br/>Decomposition 分解<br/><br/>Deduction 演绎，推论，推理，扣除，减去<br/><br/>Deliverable 应交付的产品<br/><br/>Deploy 配置<br/><br/>Designate 指明，指出，任命，指派<br/><br/>Development strategy 开发策略<br/><br/>Device 装置，仪器，设备，手段，策略，技巧<br/><br/>Disaster recovery 灾难恢复<br/><br/>Documentation 必备资料，文件<br/><br/>Duplicate 重复，再做一次，完全一样的，复制的，副本的<br/><br/>Economic 经济上的<br/><br/>Economic feasibility 经济可行性<br/><br/>Eligible 符合条件的<br/><br/>Emergency 紧急情况<br/><br/>Entering 插入，输入，计入<br/><br/>Enterprise modeling 企业建模<br/><br/>Entity 独立存在物，实体<br/><br/>Entrance 入口<br/><br/>Estimate 估计，估价，评估<br/><br/>Evaluate 评价，估计，求的值<br/><br/>Executable 可执行的<br/><br/>Execution 实行，实施，执行<br/><br/>Fact-finding 事实发现<br/><br/>Faculty 全体教师<br/><br/>Fall into&nbsp;&nbsp;可以分为，能够分成<br/><br/>Feasibility 可行性，可能性<br/><br/>Feasibility report 可行性报告<br/><br/>Feedback 回授，反馈，反应<br/><br/>File processing 文件处理<br/><br/>File-oriented 面向文件的<br/><br/>Financial 财务的<br/><br/>Flexible 灵活的，柔软的，能变形的，可通融的<br/><br/>Folder 文件夹<br/><br/>Free of charge 免费<br/><br/>Functional requirements 功能需求<br/><br/>Functioning system 功能系统<br/><br/>Glossary 术语汇编，词汇表<br/><br/>Graceful 优美的<br/><br/>Graphical interface 图形界面<br/><br/>Graphical user interface 图形用户界面<br/><br/>Graphically 以书画或图表形式，形象地，生动地，逼真地<br/><br/>Identify 确认，认出，鉴定，找到，发现<br/><br/>Implements 使生效，贯彻，执行，实施<br/><br/>Implementation 执行<br/><br/>In&nbsp;&nbsp;a sense 从某种意义上说<br/><br/>Tags - <a href="http://agileblog.cn/tags/%25E8%25BD%25AF%25E4%25BB%25B6%25E6%258A%2580%25E6%259C%25AF/" rel="tag">软件技术</a> , <a href="http://agileblog.cn/tags/%25E8%258B%25B1%25E8%25AF%25AD%25E8%25AF%258D%25E6%25B1%2587/" rel="tag">英语词汇</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/internet-reader/</link>
<title><![CDATA[网络阅读，为什么人会浮躁？(转载)]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Reading]]></category>
<pubDate>Thu, 08 Jul 2010 07:13:13 +0000</pubDate> 
<guid>http://agileblog.cn/internet-reader/</guid> 
<description>
<![CDATA[ 
	声明：本文章来自于javaeye.com，原文地址：<a href="http://www.javaeye.com/topic/698774" target="_blank">http://www.javaeye.com/topic/698774</a><br/>为什么转载这边文章，只是想和大家一起分享一下，在当今信息爆炸的时代，我们该如何去网络阅读。仅此而已。<br/>原文：<br/><div class="code"><br/>这篇文章放到这个版面，因为我认为它属于管理的范畴：个人管理(时间管理、知识管理)。 <br/><br/>是不是大家也有这种体会： <br/><br/>•网站注册越来越没耐心，看到页面全是文本框、下拉框，就心烦，咔一下关了。 <br/>•文章超过两屏的，就没勇气往下看。 <br/>•看到文章的相关链接，没完没了，两小时后，脑袋一片混乱，真想凉水冲冲。 <br/>•Google Reader的未读项又是1000+了，看吧，压力太大，不看吧，有种挫败感，干脆，全部设置为已读。 <br/><br/>焦虑、挫败、恐惧，什么感觉都来了，唯独没有愉悦感。 <br/><br/>以上种种问题我都体验过，08年尤其突出，现在已经适应了，能够平静地进行网络阅读。 <br/><br/>其实，阅读时浮躁，可能反映你对知识的渴求。比如你对IT技术很感兴趣，上JavaEye一篇篇读啊读，恨不得一晚看100篇，于是导致每篇都是蜻蜓点水。其实，没必要这么大压力，就说我吧，以前写技术文章，如1，2，3，一篇就是一整天，你一个晚上看10篇，收获已经很大了。如果你上猫扑，我估计你不会这么大压力，因为那些无聊文章你可看可不看。 <br/>是不是你会有种自我安慰？不过我还是要打击打击你：看理解类文章别太贪婪了，看了解类文章才可以略读。 <br/>打个现实的比方，如果有三个mm都在追你，除了让你心花怒放，会不会更让你心神不安患得患失，如果是你追求一个魂牵梦绕的mm，你是不是会很专注？ <br/><br/>浮躁往往是因为自己不能驾驭导致的。比如keso做donews主编时，订阅的RSS是1500，每天还写一篇精品博客，因为他扫一眼就知道文章大概。你现在去读初中语文，就会理解我说的意思。 <br/>而不能驾驭，往往是因为对该专业不精通。记得以前自己通读过dojo框架源码，并做过小改进，后来有什么dojo新闻，我扫一眼就知道文章的含量，但对于财经、房地产类文章，我至今还很容易被人忽悠，即使咬文嚼字地读。 <br/><br/>判断力是你决定一篇文章是否值得阅读的条件，它是资讯的过滤器。专业能力决定了你的判断力水平。 <br/>浮躁在看资讯类文章时很明显，特别是你关注的领域，比如我现在很关注电子商务，这类文章会带给我压力。但我看企业管理类文章时，就会轻松得多，因为我大致知道企业管理有哪些方面，哪些方面我深入思考过，比如沟通、决策、激励，哪些方面我现在很想了解。 <br/><br/>为什么网站注册时会很浮躁呢？也许根源于是你的期望值，更确切地说，是你的投入产出比，如果只是因为想下载一篇文章而不得不注册，你肯定会浮躁。如果你在携程上订打折机票，相信你不会浮躁。当你觉得一个网站分量很重时，它复杂的注册流程，可能会更赢得你的信赖，比如招商银行网站。 <br/><br/>那么，怎么改掉浮躁的坏习惯呢？ <br/>我上面其实都给出了答案，虽然是我的主观分析。 <br/>我从阅读工具说起，因为这比上面可操作性强。 <br/>就从iPhone展开吧。 <br/>我用iPhone近两年了，最近半年对它爱不释手，当然不是iPhone控。我以前用我的ThinkPad T60看Google Reader时，我会很烦，现在用iPhone看就不烦了。用过iPhone的，对iPhone不支持多任务咬牙切齿，后来我终于明白乔布斯这个洁癖和偏执狂，为什么不让iPhone支持多任务了，从技术角度，iPhone是基于Unix内核，支持多任务很简单。乔布斯想让iPhone提供了一种浸入式阅读体验。浸入式体验，我的理解是：只专注于一件事。比如iPhone上看天气、看股票。 <br/>那为什么PC不能提供浸入式呢？因为PC的多任务，我们会一会儿和QQ好友搭讪两句，一会儿看看股票，一会儿看看文章。打个比方，当你看到一位时尚美女的衣领处若隐若现时，你会不心动吗？虽然你可能不会行动。 <br/>而iPhone剥夺了你选择的权利。你用iPhone上douban，看新浪微博，你会很专注的。注意，我说的这两个是iPhone APP，不是手机网站。 <br/><br/>看互联网文章，之所以让我们浮躁，我认为互联网的本质属性超链接为罪魁祸首，超链接会让人在网站之间频繁跳转。我上面说的iPhone APP，如douban和微博是没有超链接的。没有超链接怎么可能遨游豆瓣的信息海洋？试试iPhone就知道了。iPhone这种没有超链接的导航模式，会顺应你的意图高效阅读，而不是漫无目的的跳转。 <br/>iPad之所以是一款颠覆性产品，可能就是因为它的纸质阅读风格，对电子阅读体验做了很大提升，很多人说它是报刊和杂志的救星。那么，它一定会想办法提升它的深阅读体验，让人尽量不浮躁。iPad也不提供多任务哦。 <br/>有时想，为什么我07年前看书不浮躁，那时候我啃过很多本技术类书籍，如《Core Java》第一册我啃了三遍。也许，是因为选择权太少。如果你可以把新华书店几个橱柜搬到你的客厅，你试试看，你还能否静下心来阅读一本书。所以我建议那些电子书搜集狂，该收敛一下了。 <br/><br/>阅读环境，我发现对降低浮躁很有帮助。比如我喜欢去咖啡厅上网，在河边草坪上用iPhone阅读RSS。 <br/>以前回家我喜欢把客厅房间卫生间厨房等全部打开，然后坐在沙发上看书。现在晚上我喜欢把所有灯灭了，把路由器关了，静心认真阅读几个优秀的PPT。 <br/>另外，我特地买了一个上网本HP Mini 210，专门为了上网。而没有在上面装任何开发或工作相关软件。 <br/><br/>控制阅读量也非常重要。有段时间，我iPhone上的微博实在多得看不过来，根本没法思考。后来，我仔细分析了一下每天的几个空闲时间段，如中午20分钟，睡前25分钟等。如果我只有45分钟时间，我该订阅多少微博？因为每看一篇有思想的微博，我都会问自己四个问题，而这个思考时间不能省：这篇微博说了什么？怎么说的？说得对吗？对我有用吗？总之，我会心里想着给作者一个回复。 <br/>我看有很知名的博主也受不了微博的骚扰，比如工作时频繁MSN弹出。我只想告诉他：可能你利用微博的方式不对。 <br/><br/></div><br/>Tags - <a href="http://agileblog.cn/tags/%25E7%25BD%2591%25E7%25BB%259C%25E9%2598%2585%25E8%25AF%25BB/" rel="tag">网络阅读</a> , <a href="http://agileblog.cn/tags/%25E6%25B5%25AE%25E8%25BA%2581%25E7%259A%2584%25E4%25BA%25BA%25E4%25BB%25AC/" rel="tag">浮躁的人们</a> , <a href="http://agileblog.cn/tags/iphone/" rel="tag">iphone</a> , <a href="http://agileblog.cn/tags/hp%25E4%25B8%258A%25E7%25BD%2591%25E6%259C%25AC/" rel="tag">hp上网本</a> , <a href="http://agileblog.cn/tags/%25E6%2589%258B%25E6%259C%25BA%25E9%2598%2585%25E8%25AF%25BB/" rel="tag">手机阅读</a> , <a href="http://agileblog.cn/tags/googlereader/" rel="tag">googlereader</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/php-ini-configue/</link>
<title><![CDATA[php.ini文件配置]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Mon, 05 Jul 2010 11:14:01 +0000</pubDate> 
<guid>http://agileblog.cn/php-ini-configue/</guid> 
<description>
<![CDATA[ 
	<div class="code"><br/>PHP由于其开源性，收到很多网站编程人员的欢迎，现在倍受欢迎的cms（drupal，dedecms，ecms），博客程序（sblog，wordpress，bo-blog）都是由php编程的。<br/><br/>php.ini是php的配置文件，下面一起来学习，如何配置php.ini，来改变php的性能。<br/><br/><br/><br/>--------------------------------------------------------------------------------<br/><br/>一般来说你不需要改变PHP设置，它根据默认的配置通常就能很好的工作。但作为PHP设计者的开发人员们考虑到用户可能偶尔需要针对特定应用程序对PHP语言的一些功能进行调整。因此，他们将一些PHP变量通过名为php.ini的配置文件显示出来。此配置文件允许用户调整PHP多项功能，包括设置文件路径以及目录、改变会话以及数据库参数，以及激活扩展选项（activating extensions）等。<br/><br/>　　在开始我们的介绍之前，我们将对PHP配置文件的组织方式进行简要的说明。文件命名为php.ini的原因之一就是它遵循许多Windows应 用程序中INI文件的常见结构。它是一个ASCII文本文件，并且被分成几个不同名称的部分，每一部分包括与之相关的各种变量。每一部分类似于如下结构：<br/><br/>　　&#91;MySection&#93;<br/>variable=&quot;value&quot;<br/>anothervariable=&quot;anothervalue&quot;<br/><br/>　　各部分的名称通过方括号括起来放在顶部，然后将是一对对任意数量的“变量名——值”，每一对占单独一行。同常规的PHP代码要求一样，变量名区分大小写且不能包含空格，变量的值可以是数字、字符串，或者布朗型（Boolean）。<br/><br/>　　每一行如果以分号开头则表明该行是注释语句。这也使得允许或禁止PHP功能变得非常简单。你只需要将相关语句注释而无需删除，该语句就不会被系统解析。特别是当你希望在一段时间以后重新打开某种功能的时候特别方便，因为你不需要在配置文件中将此行删除。<br/><br/>　　为了便于PHP识别，php.ini文件必须要么放在当前目录，要么放在$PHPRC环境变量所定义的目录中，或者是在编译时所指定的目录（对Windows PHP来说即Windows主目录）。<br/><br/>　　在通过修改php.ini文件改变PHP配置之后，需要重启Web服务器以使配置改变生效（当然这是在通过Web服务器使用PHP的情况下）。对于PHP命令行使用模式，每次只要涉及到PHP二进制程序的时候系统都会读取配置文件。<br/><br/>这是配置文件漫游的第一站也是非常重要的一站：语言解释程序相关选项。第一行是引擎变量，它将控制PHP引擎是“on”还是“off”。关闭引擎则意味着嵌入的PHP代码将不会被Web服务器所解析。通常将其关闭是毫无意义的，所以保持开启状态。<br/><br/>engine = On<br/><br/>short_open_tag则控制解析器是否识别简写的&amp;lt;?…?&amp;gt;标志，即将其等价为标准&amp;lt;?php…?&amp;gt;标志。如果预计简写标志会和别的语言产生冲突，或者希望对PHP代码采用严格的语法规则，那么可以将其关闭。<br/><br/>short_open_tag = On<br/><br/>通常而言，在PHP脚本中的会话、cookie或者HTTP文件头数据必须在脚本产生任何输出之前发送出去。如果在你的应用程序中不可能实现，你可以通过允许PHP称之为output buffering功能来达到这一目的，此功能通过output_buffering变量进行控制。<br/><br/>如果打开output buffering，PHP将把脚本产生的运行结果存放在特殊的内存缓冲区域内，并在得到明确指示时才将其发送出去。通过这样的方式，你甚至可以在脚本中部或者脚本尾部发送特殊的HTTP文件头以及cookie数据。当然，这样会造成脚本运行性能一定程度的下降。<br/><br/>output_buffering = Off<br/><br/>你还可以为output_buffering变量赋值以指定缓冲区域大小，例如：<br/><br/>output_buffering = 2048<br/><br/>当PHP启动的时候，它将在Web服务器标准头信息中添加PHP版本号信息。如果希望关闭此功能，可以将expose_php设置为false。这项功能非常有用，例如，可以在Web服务器上屏蔽此信息以防范潜在的黑客攻击。<br/><br/>expose_php = On<br/><br/>现在来看看如何设置查找路径以及差错控制。<br/><br/>可以通过include_path变量设置PHP查找路径。它允许包括一系列目录。在相关文件调用缺少指定路径的情况下，PHP将自动检查这些目录。<br/> <br/><br/>如果有频繁使用的函数库或类，也可以将其位置写在这里以方便查找。这也是一个很好的添加PHP的PEAR目录路径的地方，此路径将包括很多可重用的类。<br/><br/>include_path = &quot;.:/usr/local/lib/php/pear:&quot;<br/><br/>Windows用户可以通过分号分割路径名来指定多路径；UNIX用户则需要使用冒号。<br/><br/>另外两个有趣的变量是auto_prepend_file以及auto_append_file。这些变量指定PHP自动添加到任何PHP文档文件头或文件尾的其他文件。这对于为PHP产生的页面添加页眉或页脚非常有用，可以节省为每个PHP文档添加代码的时间。但需要注意这里的指定文件将会添加到所有的PHP文档中，所以这些变量必须适合单应用程序（single-application）的服务器。<br/><br/>所包含的文件要么是PHP脚本，要么是普通的HTML文档。嵌入式PHP代码必须用标准&amp;lt;?php…?&amp;gt;标记括起来。<br/><br/>auto_prepend_file = /home/web/includes/header.php<br/><br/>auto_append_file = /home/web/includes/legal.php<br/><br/>PHP的差错可以分为四类：解析错误、关于代码小问题的提示（notice）（例如变量未初始化）、警告（除了非致命错误），以及致命错误（fatal errors）。通常而言，当PHP遇到除第二种（关于代码小问题的提示）以外的错误时，将显示错误信息，并且如果属于致命错误则会立即停止代码处理。你可以通过修改error_reporting变量来对此功能进行修改。此变量可以接收一比特位的错误代码，且只显示同这些代码相同的错误。<br/><br/>error_reporting = E_ALL<br/><br/>要关闭显示所有错误——在产品代码中通常建议这么做——可以将display_errors变量设置为false，并使用log_errors变量将信息写入错误日志（error log）。<br/><br/>此举可以提高系统的安全性能——通过关闭错误显示，你可以将系统的特定信息隐藏起来，恶意用户就无法利用这些信息试图入侵站点或应用程序。但你应当通过将error_log变量指定为文件名或特殊值“syslog”，从而将这些错误信息写入到自定义日志文件或者系统日志中。请记住定期检查这些文件，以知道在应用程序内部到底发生了什么。<br/>display_errors = Off<br/>log_errors = On<br/>error_log = &quot;error.log&quot;<br/><br/>PHP可以使用很多不同的扩展选项。在UNIX系统中，扩展选项需要在编译时创建；而对于Windows，二进制DLL文件将随PHP发布而将自己包括进去。变量extension_dir包括了PHP应当查看相关扩展选项的目录名。<br/><br/>extension_dir = &quot;C:Program FilesInternet ToolsApacheinphp4extensions&quot;<br/><br/>Windows下的PHP包括了20种不同的扩展选项，并且全部都列在了php.ini文件中（通过注释）。要激活某个特定的扩展选项只需要将相应行首的分号去掉并重启服务器就可以了。如果要禁用某个扩展选项（比如在需要提升系统性能的情况下），只需要在行首重新添加分号。<br/><br/>如果扩展选项没有列在php.ini文件中，可以使用变量extension，然后将相应DLL文件名传递给此变量。<br/><br/>extension=php_domxml.dll<br/><br/>extension=php_dbase.dll<br/><br/>设置extension-specific变量<br/><br/> 变量extension-specific被存放在配置文件中一个单独的区域。比如，所有同MySQL扩展功能相关的变量都应当存储在php.ini中的&#91;MySQL&#93;区域。<br/><br/>如果需要使用PHP的mail()函数，则需要设置以下三个变量。当通过PHP mail()函数发送电子邮件信息时需要使用SMTP以及变量sendmail_from（Windows系统）或变量 sendmail_path（UNIX系统）。对于Windows，这些变量设置了所用到的SMTP服务器以及显示在电子邮件信息中的“From:”地址；而对于UNIX，变量sendmail_path则对邮件传输设置了MTA（邮件传输代理，mail transfer agent）的路径。<br/> <br/><br/> 　　SMTP = myserver.localnet.com<br/>sendmail_from = &lt;A href=&quot;mailto:me@localhost.com&quot;&gt;me@localhost.com&lt;/A&gt;<br/>sendmail_path = /usr/sbin/sendmail<br/><br/> 变量java.class.path、 java.home、java.library以及java.library.path全部用来设置查找Java类以及库的路径。这些值将被Java扩展所使用，所以如果希望PHP能正确的同Java程序进行集成，则必须确保这些变量被正确的设置。<br/>java.class.path = .php_java.jar<br/>java.home = c:jdk<br/>java.library = c:jdk/jre/inhotspotjvm.dll<br/>java.library.path= .<br/><br/>变量session.save_path指定了保存会话信息所需的临时目录。通常而言，此目录默认为/tmp，但由于在Windows系统中此默认目录并不存在，所以你必须将其重新设置为正确的Windows临时目录，否则会话处理程序将会在调用session_start()函数时弹出讨厌的出错信息。同时可以通过变量session.cookie_lifetime来控制会话cookie的有效期。<br/><br/>session.save_path = c:windows　　emp<br/><br/>session.cookie_lifetime = 1800<br/><br/>在php.ini中，有很多同PHP安装的安全问题相关的变量。其中最有趣的是safe_mode变量，建议针对ISP以及共享主机服务（shared-hosting services）对其进行设置，此变量将对用户对PHP的使用范围进行限制。<br/><br/><br/>safe_mode = Off<br/><br/>当safe mode打开的时候，可以通过变量safe_mode_include_dir指定在何目录中查找相关文件。通过将二进制程序放在特定目录并使用 safe_mode_include_dir变量将目录告之PHP，PHP将对可使用exec()命令运行PHP脚本的程序种类进行限制。在此目录中仅二进制文件可以通过exec()命令进行访问。<br/> <br/><br/>safe_mode_include_dir = /usr/local/lib/php/safe-include<br/><br/>safe_mode_exec_dir = /usr/local/lib/php/safe-bin<br/><br/>还可以通过变量open_basedir来限制文件操作。此变量将设置作为文件操作根（root）的目录名。此变量设置后，对于PHP来说，存放在此目录树以外的文件将无法访问。这对于在共享系统中将用户限制在各自的home或者Web目录是一种很好的方法。<br/><br/>open_basedir = /home/web/<br/><br/>变量max_execution_time设置了在强制终止脚本前PHP等待脚本执行完毕的时间，此时间以秒计算。当脚本进入了一个无限循环状态时此变量非常有用。然而，当存在一个需要很长时间完成的合法活动时（例如上传大型文件），这项功能也会导致操作失败。在这样的情况下必须考虑将此变量值增加，以避免PHP在脚本正在执行某些重要过程的时候将脚本关闭。<br/><br/>max_execution_time = 90<br/><br/>刚提到了上传，现在来看看如何配置uploads变量以及form变量。<br/><br/>如果我们在文章前面所讨论安全配置所提供的安全强度还不能满足你的要求，可以通过关闭文件上传或设置每次上传最大文件尺寸限制来进一步提高安全强度。以上两种功能将分别通过变量file_uploads和upload_max_filesize来实现。通常来说，除非系统中有为接收文件而设计的应用程序（例如基于Web FTP服务的图片册），你应当设置一个相对较小的文件尺寸限制值。<br/><br/>file_uploads = On<br/><br/>upload_max_filesize = 2M<br/><br/>如果你对于上传文件并不关心，但在PHP应用程序中使用了大量的表单，这里有两个变量将会让你产生很大的兴趣。首先是变量 register_globals，它解决了PHP开发人员长期以来的心头之痛。在PHP 3.x中，此变量默认为On。由此当提交表单时表单变量将自动的转换成PHP变量。<br/> <br/><br/>　　在PHP 4.x中，出于安全考虑，此变量默认设置为Off。由此，表单变量将只能通过特定的$_GET以及$_POST进行访问。这也造成了很多用PHP 3.x编写的脚本在运行时出现问题，要求开发人员重写脚本并对其重新测试。比如，输入到表单域&amp;lt;input type=&quot;text&quot; name=&quot;email&quot;&amp;gt;中的值对于PHP 3.x脚本来说将可以理解为$email；而在PHP 4.x脚本中却被作为$_POST&#91;&#039;email&#039;&#93;或者$_GET&#91;&#039;email&#039;&#93;。<br/><br/>　　通常情况下可以将此变量设置为Off，这样可以对通过表单进行的脚本攻击提供更为安全的防范措施。如果需要考虑到对早期PHP 3.x脚本的兼容问题，则应当置于On。<br/><br/>　　register_globals = Off<br/><br/>　 　同表单提交相关的一个变量是post_max_size，它将控制在采用POST方法进行一次表单提交中PHP所能够接收的最大数据量。似乎不大可能需 要将默认的8 MB改得更大。相反，应当适当将其降到更为实际的数值。但如果希望使用PHP文件上传功能，则需要将此值改为比upload_max_filesize还 要大。<br/><br/>　　post_max_size = 8M<br/><br/>　　在PHP 5中增加了max_input_time变量。此变量可以以秒为单位对通过POST、GET以及PUT方式接收数据时间进行限制。如果应用程序所运行环境处在低速链路上，则需要增加此值以适应接收数据所需的更多时间。<br/><br/>　　max_input_time = 90<br/><br/>　　你还可以通过调整一些变量值来提升PHP解析器的性能。为了避免正在运行的脚本大量使用系统可用内存，PHP允许定义内存使用限额。通过memory_limit变量来指定单个脚本程序可以使用的最大内存容量：<br/><br/>　　memory_limit = 8M<br/><br/>　　变量memory_limit的值应当适当大于post_max_size的值。<br/><br/>　　另一项可以用于提高性能的方法是禁用变量$argc以及$argv，这两个值被用于存放在命令行中传递给应用程序的参数数量以及实际参数值。<br/><br/>　　register_argc_argv = false<br/><br/>　 　类似，还可以禁用$HTTP_GET_VARS以及$HTTP_POST_VARS，因为在使用$_GET以及$_POST的今天你不大可能用到前两种 方式。禁用此功能可以带来性能上的提升，但这只能通过PHP 5中的变量register_long_arrays实现。<br/><br/>　　register_long_arrays = false<br/><br/>　　函数ini_set()<br/><br/>　 　最后，需要注意ini_set()函数。当PHP读取php.ini配置文件中的所有设置信息的同时，它还提供了采用ini_set()函数根据 per-script原则更改这些设置的功能。此函数接收两个参数：需要调整的配置变量名，以及变量的新值。例如，在某脚本出现时增加最大执行时间 （maximum execution time）：<br/><br/>　　&lt;?php<br/>ini_set(&#039;max_execution_time&#039;, 600)<br/>// more code<br/>?&gt;<br/><br/>　　这样的设置将仅仅影响被设置的脚本。一旦脚本执行完毕，该变量将自动恢复到原始值。<br/><br/>　　如果PHP应用程序运行在一个共享服务器上，你不大可能可以访问到主php.ini配置文件。这时，函数ini_set()就可以允许根据特殊要求对PHP配置做动态修改，这将会给你带来很大的方便。<br/><br/></div><br/>Tags - <a href="http://agileblog.cn/tags/php.ini/" rel="tag">php.ini</a> , <a href="http://agileblog.cn/tags/%25E6%2596%2587%25E4%25BB%25B6%25E9%2585%258D%25E7%25BD%25AE/" rel="tag">文件配置</a> , <a href="http://agileblog.cn/tags/php/" rel="tag">php</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/nearly-status/</link>
<title><![CDATA[近期状况]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[心情文摘]]></category>
<pubDate>Mon, 05 Jul 2010 02:23:43 +0000</pubDate> 
<guid>http://agileblog.cn/nearly-status/</guid> 
<description>
<![CDATA[ 
	放假已经有几天了，如今是到了长沙市区这边做办公用品这一块。放假了，意味着自己已经毕业了，虽然说真正要拿到毕业证的时间是要到明年上半年去，但是事实上自己已经离开了校门，所以需要面对的事情很多，如今是和朋友一起做办公用品这一块。既然在这边做办公用品这一块，就必须努力做好这一块，所谓--真正的生活不是做自己喜欢的事，而是喜欢自己做的事。社会中，要是不能及时的得出抉择，你就面临着淘汰，这几天我深刻的体会到在大学里面你可以不用去想那么多事，但是你到了社会上你必须得把很多事情去做好，并且想方设法的去做好。大学里面你可以去逃避事情，但是社会里面你就不行，因为你的工作会影响到整个公司的发展，所以有时候你必须得快速的作出抉择。<br/>暂时是这样决定的，先暑假一边考驾照，一边在在朋友这边做事，也可以说得上是创业。到了暑假过后，到时应该还有其他的安排。<br/>博客有一段时间没有更新了，最近还要考驾照，所以说，自己得多花点时间去做事情。天气是比较热，但是克服一下应该不是很大的问题。<br/>今天查询了一下软考的成绩，没想到和自己预期的一样，上午42分，下午49分，比总成绩多一分，但是这个成绩是我自己在考完后自己对照参考答案就猜到的结果，不过这一次的考试，总结一下，主要还是心态问题，这次没有过，下次继续考，一般来说，第三次应该不是很大问题。<br/>来到这边做办公用品这一块，发现很多问题，但是有时候，毕竟不是自己去创业，就算是朋友做，自己也提出一些要求或者是建议，不一定合适，所以接受事实，做一个智者。<br/>过两天会去驾校考理论，所以这几天需要复习一下理论知识。<br/>考完驾照之后，买火车票回一趟深圳。毕竟自己也有很长一段时间没有回深圳了。不过九月份的时候，还是会回深圳找工作，毕竟这里不是我长久呆的地方。做出这样的选择，并不是我自己有其他的想法，而是我一开始就没有想过来这边创业。人生的规划中，在这边做事只是一个起点，但是不是终点。我相信有两个月的积累，九月份的时候去找工作，应该有一定的优势。<br/>不管怎么样，这两个月内，我必须尽心尽力去做好个人的工作。就当是一次实习吧！
]]>
</description>
</item><item>
<link>http://agileblog.cn/HyperSpace-download/</link>
<title><![CDATA[HyperSpace下载一款瞬间启动的操作系统]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[软件工具]]></category>
<pubDate>Mon, 21 Jun 2010 10:13:31 +0000</pubDate> 
<guid>http://agileblog.cn/HyperSpace-download/</guid> 
<description>
<![CDATA[ 
	HyperSpace Hybrid就是一款即时启动操作系统，但它的特别之处在于能够和Windows系统同时运行，因此在Windows启动这样的等待时间内可以暂时提供一 些简单功能。而随时按下键盘上的F4键，就可以在Windows操作系统和HyperSpace之间切换。HyperSpace提供了网络浏览、收发 Email、YouTube视频、FaceBook等功能，据称还可以令笔记本续航时间延长30%。该操作系统需要一个约3GB的独立分区，并且只能和英语版的Vista SP1 x86操作系统共存。<br/><br/>HyperSpace的即时切换功能基于Intel的VT虚拟机技术，因此要想实现该特性，必须使用支持VT技术的Core、Core 2处理器，系统要求还包括2GB内存，Intel GMA 3000/3100/X3500/X4500显卡。Phoenix测试可用的笔记本包括联想ThinkPad T400、X300、X301、X200，技嘉W466U、宏碁4720、东芝E105、富士通1010等。<br/><br/>除了能够支持即时切换的HyperSpace Hybrid，Phoenix还提供了一个只能重启进入，独立运行的版本HyperSpace Dual。该版本的的系统要求大大降低，512MB内存以上的Atom、赛扬M上网本即可支持，由于不需要即时切换功能，也不再限制Windows操作系 统版本。两个版本都提供21天的免费试用，此后Hybrid版年费59.95美元，Dual版年费39.95美元。<br/>有需要的朋友可以进行下载<br/>以下是切换版本的HyperSpace软件下载，该软件只有1.59MB。由于没找到Hybrid版，所以本博客也不给出下载地址；<br/>以下是本站下载地址：<a href="http://agileblog.cn/attachment/HyperSpace_Installer.exe">点击这里下载文件</a><br/>Tags - <a href="http://agileblog.cn/tags/hyperspace/" rel="tag">hyperspace</a> , <a href="http://agileblog.cn/tags/download/" rel="tag">download</a> , <a href="http://agileblog.cn/tags/%25E4%25B8%258B%25E8%25BD%25BD/" rel="tag">下载</a> , <a href="http://agileblog.cn/tags/phoenix/" rel="tag">phoenix</a> , <a href="http://agileblog.cn/tags/dual/" rel="tag">dual</a> , <a href="http://agileblog.cn/tags/windows/" rel="tag">windows</a> , <a href="http://agileblog.cn/tags/inter/" rel="tag">inter</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/hibernate-mysql-unicode/</link>
<title><![CDATA[Hibernate+mysql乱码问题终极解决方案]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Java开发]]></category>
<pubDate>Mon, 21 Jun 2010 09:56:26 +0000</pubDate> 
<guid>http://agileblog.cn/hibernate-mysql-unicode/</guid> 
<description>
<![CDATA[ 
	<div class="code"><br/>1, mysql安装时设置字符集utf-8（包括数据库字符集，以及表的字符集）, jdbc驱动用最新的 <br/>2. hibernate配置文件（hibernate.cfg.xml）中,加上属性 <br/>&lt;property name=&quot;connection.useUnicode&quot;&gt;true&lt;/property&gt; <br/>&lt;property name=&quot;connection.characterEncoding&quot;&gt;UTF-8&lt;/property&gt; <br/><br/>3. web.xml设置Filter <br/>================================================= <br/><br/>&lt;filter&gt;<br/>&nbsp;&nbsp;&lt;filter-name&gt;<br/>&nbsp;&nbsp; Set Web Application Character Encoding <br/>&nbsp;&nbsp;&lt;/filter-name&gt;<br/>&nbsp;&nbsp;&lt;filter-class&gt;com.util.SetEncodeFilter&lt;/filter-class&gt;<br/>&nbsp;&nbsp;&lt;init-param&gt;<br/>&nbsp;&nbsp; &lt;param-name&gt;defaultencoding&lt;/param-name&gt;<br/>&nbsp;&nbsp; &lt;param-value&gt;UTF-8&lt;/param-value&gt;<br/>&nbsp;&nbsp;&lt;/init-param&gt;<br/> &lt;/filter&gt;<br/> &lt;filter-mapping&gt;<br/>&nbsp;&nbsp;&lt;filter-name&gt;<br/>&nbsp;&nbsp; Set Web Application Character Encoding <br/>&nbsp;&nbsp;&lt;/filter-name&gt;<br/>&nbsp;&nbsp;&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br/> &lt;/filter-mapping&gt;<br/>============================================= <br/>SetEncodeFilter.java <br/><br/><br/><br/> 1package com.util;<br/> 2<br/> 3import java.io.IOException;<br/> 4<br/> 5import javax.servlet.Filter;<br/> 6import javax.servlet.FilterChain;<br/> 7import javax.servlet.FilterConfig;<br/> 8import javax.servlet.ServletException;<br/> 9import javax.servlet.ServletRequest;<br/>10import javax.servlet.ServletResponse;<br/>11<br/>12public class SetEncodeFilter implements Filter &#123; <br/>13&nbsp;&nbsp;&nbsp;&nbsp; <br/>14&nbsp;&nbsp;&nbsp;&nbsp;protected FilterConfig filterConfig = null; <br/>15 <br/>16&nbsp;&nbsp;&nbsp;&nbsp;protected String defaultEncoding = null; <br/>17 <br/>18&nbsp;&nbsp;&nbsp;&nbsp;/** *//**//* (non-Javadoc) <br/>19&nbsp;&nbsp;&nbsp;&nbsp; * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) <br/>20&nbsp;&nbsp;&nbsp;&nbsp; */ <br/>21&nbsp;&nbsp;&nbsp;&nbsp;public void init(FilterConfig arg0) throws ServletException &#123; <br/>22&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// TODO Auto-generated method stub <br/>23&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.filterConfig = arg0; <br/>24&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.defaultEncoding = filterConfig.getInitParameter(&quot;defaultencoding&quot;); <br/>25&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>26 <br/>27&nbsp;&nbsp;&nbsp;&nbsp;/** *//**//* (non-Javadoc) <br/>28&nbsp;&nbsp;&nbsp;&nbsp; * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, javax.servlet.ServletResponse, javax.servlet.FilterChain) <br/>29&nbsp;&nbsp;&nbsp;&nbsp; */ <br/>30&nbsp;&nbsp;&nbsp;&nbsp;public void doFilter( <br/>31&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletRequest request, <br/>32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ServletResponse response, <br/>33&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FilterChain chain) <br/>34&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throws IOException, ServletException &#123; <br/>35&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// TODO Auto-generated method stub <br/>36&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;request.setCharacterEncoding(selectEncoding(request)); <br/>37&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chain.doFilter(request, response); <br/>38&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>39 <br/>40 <br/>41&nbsp;&nbsp;&nbsp;&nbsp;public void destroy() &#123; <br/>42&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>43&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.defaultEncoding = null; <br/>44&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.filterConfig = null; <br/>45&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>46 <br/>47 <br/>48&nbsp;&nbsp;&nbsp;&nbsp;protected String selectEncoding(ServletRequest request) &#123; <br/>49 <br/>50&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return this.defaultEncoding; <br/>51&nbsp;&nbsp;&nbsp;&nbsp;&#125; <br/>52 <br/>53&#125; 4.提交表单的jsp页面设置<br/>&lt;%@ page language=&quot;java&quot;&nbsp;&nbsp;contentType=&quot;text/html; charset=UTF-8&quot;%&gt;<br/><br/><br/>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/cdredfox/archive/2006/09/18/1236347.aspx<br/></div><br/>Tags - <a href="http://agileblog.cn/tags/hibernate/" rel="tag">hibernate</a> , <a href="http://agileblog.cn/tags/mysql/" rel="tag">mysql</a> , <a href="http://agileblog.cn/tags/%25E4%25B9%25B1%25E7%25A0%2581%25E9%2597%25AE%25E9%25A2%2598/" rel="tag">乱码问题</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/mysql-character/</link>
<title><![CDATA[处理MYSQL乱码问题]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[MYSQL]]></category>
<pubDate>Wed, 16 Jun 2010 13:46:09 +0000</pubDate> 
<guid>http://agileblog.cn/mysql-character/</guid> 
<description>
<![CDATA[ 
	<div class="code"><br/>在之前的文章里，我已经提过如何解决JSP中乱码问题（解决tomcat下中文乱码问题 ），其中也详细解说了MYSQL乱码问题，相信通过里面的办法，肯定都已经解决了JSP里的乱码问题，不过还是有些人的MYSQL乱码问题没有得到解决，包括我自己，所以又找了一些资料，希望这次能完全解决MYSQL数据库的乱码问题。<br/><br/><br/>--------------------------------------------------------------------------------<br/><br/><br/>第一种方法，很精辟的总结：<br/><br/>经常更换虚拟主机,而各个服务商的MYSQL版本不同,当导入数据后,总会出现乱码等无法正常显示的问题,查了好多资料,总结出自己的一点技巧: <br/><br/>WINDOWS 下导入应该这样<br/>使用MYSQL的命令<br/>在DOS命令下进入mysql的bin目录下,输入mysql -uroot -p密码 数据库名称&lt;要恢复的数据库, 例如我们要把D盘的一个名称为test.sql的数据库恢复到本地的test2这个数据库,那么就这样: mysql -uroot -p密码 test2以前的国外主机用的Mysql是4.x系列的，感觉还比较好，都无论GBK和UTF-8都没有乱码，没想到新的主机的Mysql是5.0版本的，导入数据后，用Php读出来全是问号，乱码一片，记得我以前也曾经有过一次切换出现乱码的经验，原因肯定是Mysql版本之间的差异问题。 <br/><br/>只好查资料，发现了一个解决方法，就是在mysql_connect后面加一句SET NAMES UTF8，即可使得UTF8的数据库消除乱码，对于GBK的数据库则使用SET NAMES GBK，代码如下： <br/><br/>$mysql_mylink = mysql_connect($mysql_host, $mysql_user, $mysql_pass); <br/>mysql_query(&quot;SET NAMES &#039;GBK&#039;&quot;);<br/> <br/><br/>数据库字符集为utf-8 <br/><br/>连接语句用这个 <br/>mysql_query(&quot;SET NAMES &#039;UTF8&#039;&quot;); <br/>mysql_query(&quot;SET CHARACTER SET UTF8&quot;); <br/>mysql_query(&quot;SET CHARACTER_SET_RESULTS=UTF8&#039;&quot;);<br/><br/>还有个方法就是,如果你自己的机器的话,可以更改MYSQL字符集,一般在MYSQ4和MYSQL5这两个版本中有效<br/><br/><br/><br/>--------------------------------------------------------------------------------<br/><br/><br/>第二个方法：很不错的解说，可以试一下<br/><br/>mysql乱码处理总结:<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (1)java中处理中文字符正常,在cmd client中显示乱码是字符集的问题.<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (2)字段长度设置够长,但插入中文字符时提示com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column错误是字符集的问题.<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (3)乱码问题归根到底是字符集的问题,那就从字符集设置方面考虑,不外乎下面几个方面:server,client,database,connection,results.<br/><br/>-------------------------解决办法----------------------<br/><br/>(1)修改 my.ini(MySQL Server Instance Configuration 文件)<br/><br/># CLIENT SECTION<br/><br/>&#91;client&#93;<br/><br/>port=3306<br/><br/>&#91;mysql&#93;<br/><br/>default-character-set=gbk<br/><br/><br/># SERVER SECTION<br/><br/>&#91;mysqld&#93;<br/><br/>default-character-set=gbk <br/><br/>(2)修改data目录中相应数据库目录下的db.opt配置文件<br/><br/>default-character-set=gbk<br/>default-collation=gbk_chinese_ci<br/><br/>(3)数据库连接串中指定字符集<br/><br/>URL=jdbc:mysql://yourIP/college?user=root&amp;password=yourPassword&amp;useUnicode=true&amp;characterEncoding=gbk 注:在mysql4.1.0版 要加useUnicode=true&amp;characterEncoding=gbk 如果是5.0版以上的，加不加都是没有关系的！<br/><br/>(4)在创建数据库时指定字符集<br/><br/>create database yourDB CHARACTER SET gbk;<br/><br/><br/>(5)在dos命令上要设置<br/><br/>set names gbk<br/><br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 好了,经过检查上面四个方面的设置,应该 OK 了!不会出现诸如<br/>com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column等问题. <br/><br/> <br/><br/> <br/><br/> <br/><br/>Mysql中文乱码解决<br/>原来常常在群里看到mysql的乱码问题，但是由于本人一直在用oracle和sql server所以没多在乎，昨天用了用mysql结果就遇到了传说中的乱码…..。现在我们来讲讲mysql的乱码问题。首先你进入的你mysql<br/>用show variables查看<br/><br/><br/>这里可以查看到你的字符集，character_set_server是服务器编码。现在我们默认的是latin1要改变服务器的编码必须重新启动服务器，我们先用mysqladmin –uroot shutdown关闭服务器,然后mysqld –C GBK启动服务器 –C是character_set_server的一个简写（可以也可以写成mysqld –character_set_server gbk）.这样修改以后我们再进入mysql查看就会显示：<br/><br/>这样我们就把服务器和数据库的编码改为了GBK。<br/>现在我们就可以插入中文字符串了，但是为什么有时间还是会显示<br/>Exception in thread &quot;main&quot; com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column &#039;name&#039; at row 1<br/>这是因为你只是修改了mysql的服务器的字符编码，并没有修改已经有数据库的编码，这时候你需要手动的把data目录下的数据库中的db.opt中的编码改为<br/>default-character-set=gbk<br/>default-collation=gbk_chinese_ci<br/>这样修改以后你在重启服务器就可以插入中文了。<br/>但是这时候还有个问题就是在你应用程序当中显示的是中文字符，但是在命令窗口还是乱码。<br/>这时候你注意我们上面图中的character_set_client字符还是latin1当然显示的是乱码咯哟。所以你进入mysql客户端程序的时候因该把客户端默认的编码改为gbk才能显示正常。<br/>你可以在mysql里修改，也可以在登陆的时候mysql –uroot –default-character-set=gbk修改<br/>如此以来就解决了中文问题了。<br/>我刚开始的时候在程序中加入了一个characterEncoding变量（下图），但是想来想去都觉得这个变量没什么用，所以后来去掉也能显示正常。<br/>jdbc:mysql://127.0.0.1:3306/ee?characterEncoding=gbk&quot;<br/><br/><br/><br/>--------------------------------------------------------------------------------<br/><br/><br/>第三种方法，说有太复杂了，反到不知道怎么弄了，你试试，也许可以用得上<br/><br/>1.修改/etc/my.cnf文件，改成这样：<br/>&#91;mysqld&#93;<br/>datadir=/var/lib/mysql<br/>socket=/var/lib/mysql/mysql.sock<br/>default-character-set=utf8<br/>&#91;mysql.server&#93;<br/>user=mysql<br/>basedir=/var/lib<br/>&#91;mysqld_safe&#93;<br/>err-log=/var/log/mysqld.log<br/>pid-file=/var/run/mysqld/mysqld.pid<br/>注意：就是加入了一句default-character-set=utf8。<br/>2./etc/init.d/mysqld restart 重新启动mysql；<br/>3.打开phpmyadmin，选择lang为&quot;Chines simplifies(zh-utf-8)&quot;,选择&quot;MySQL 连接校对&quot;为&quot;utf8_general_ci &quot;点“显示 MySQL 的运行信息”--“变量”，可以看到：<br/>character set client utf8 utf8<br/>character set connection utf8 utf8<br/>character set database utf8 utf8<br/>character set results utf8 utf8<br/>character set server utf8 utf8<br/>character set system utf8 utf8<br/>collation connection utf8_general_ci utf8_general_ci<br/>collation database utf8_general_ci utf8_general_ci<br/>collation server utf8_general_ci utf8_general_ci<br/>从这里可以看到character全部变成utf8了。<br/>有人要问，为什么都要改成utf8呢？改成GB2312不行吗？<br/>解释如下：<br/>我也不想改成utf8，只是phpmyadmin2.6在mysql4.1的时候只会用utf8，连其他页面的charset也都是utf8，改成gb2312一定会乱码，我们只能凑phpmyadmin了。<br/>只有在mysql3.23的时候，phpmyadmin才会多一个gb2312的页面charset，这时候是正常的。<br/>3.将以前的mysql3的库文件导入mysql4.1的库<br/>有两种情况：<br/>一是从phpmyadmin上导入，这时候你要注意的是在选择库文件的页面左下脚有个“文件的字符集：”，默认是utf8，要改成gb2312，否则导进去乱码；<br/>二是在linux下导入，这时候你需要先在库文件的头部加一行:<br/>SET NAMES &#039;gb2312&#039;; 注意最后也是;号，别漏了。<br/>然后执行mysql -u用户名 -p密码 xxx.sql &gt; 库名<br/>导入完成以后再用phpmyadmin打开看，里面的中文字就是正确的。<br/>4.从mysql4.1里导出库文件<br/>一.用phpmyadmin导出<br/>导出倒是问题不大，如果phpmyadmin的浏览页面里显示的中文是正常的，那么导出肯定也是正常的<br/>二.在linux上导出<br/>如果用mysqldump导出出现了乱码也没有关系，可以运行iconv来转换一下<br/>iconv -c -f UTF-8 -t GB2312 库文件名 &gt; 新的gb2312的库文件名<br/>综上所述，你要注意：<br/>1。尽量在需要导入的库文件的开头加入SET NAMES &#039;gb2312&#039;;告诉mysql你要导入的是一个gb2312的文件；<br/>2。可能你需要这个：<br/>SET NAMES &#039;utf8&#039;;<br/>在登陆到mysql后用，把character的一些默认参数改到utf8上，有时可以减少一些困扰，不过也不是必须的。<br/>在mysql上使用:<br/>SHOW VARIABLES LIKE &#039;character_set_%&#039;;<br/>用来查看当前的状态。<br/>3.如果出现乱码也不要怕，一是你要注意留存原有的备份，二是用iconv来进行转化。<br/>在正常使用之前注意做导入导出的测试，确保万无一失。<br/>最后加一句：www.quicklinux.org原创文章，转载请注明出处。呵呵<br/>邮件：support@quicklinux.org <br/>作者: MySQL 发布日期: 2005-12-14 <br/>我升级了MYSQL到4.1.2，phpmyadmin用的是2.6.2。数据表里面有中文的字段中文都变成了乱码，导出数据也是乱码。我用以前的2.5.7没有问题，想问一下，应该在phpmyadmin的那个文件里改哪个设置一下才能显示出来的是正常的中文字？<br/>和字符相关的变量中这几个和sql很有关系：<br/>character_set_client<br/>character_set_connection<br/>character_set_results<br/>此外就是数据库中对相应字段设置的charact set，如果没有对字段设置，缺省是table的charact set，table也没有指定则缺省使用database的。<br/>上面3个变量的作用是这样的，client表示客户端发送过来的字符集，results表示发送到客户端的字符集（这两个分开是因为发送过来和发送过去的不一定是同一个客户端），connection则在客户端和数据库起一个连接作用。<br/>具体是这样：比如我在mysql命令行设置client为gbk，connection为utf8，results为gbk，数据库为big5，<br/>当我发送一个insert语句的时候，这个语句作为gbk代码，先转为utf8代码（connection），再转为big5（database）插入数据库。<br/>而运行一个select语句的时候，从数据库得到的结果则相反的过程，由big5转为utf8，再转为gbk，你得到gbk的结果。<br/>因此最主要的是让client和results和你使用的客户端一致。比如你的网页是utf8编码，你就要设置这两个为utf8。<br/>而在mysql命令行的时候，我用的是2000，需要设置为gbk<br/>而我们用的set names XXX，实际上就是同时设置这3个变量为XXX。<br/>在这样的情况下，我们可以把一个数据库中的不同表或不同字段设为不同的字符集，只要上面3个设置正确，就可以在数据库中同时使用不同的字符集。<br/>注意要保证你的数据库中的字符已经使用了正确的字符集，比如如果一开始你设置错误，插入数据后，本身数据的编码就是不正确的，然后即使设置改回来，也不可能得到正确的显示了。<br/><br/>好了，随便弄了下，希望对你有所帮助<br/><br/></div><br/>Tags - <a href="http://agileblog.cn/tags/mysql/" rel="tag">mysql</a> , <a href="http://agileblog.cn/tags/%25E5%25AD%2597%25E7%25AC%25A6%25E5%25A4%2584%25E7%2590%2586/" rel="tag">字符处理</a> , <a href="http://agileblog.cn/tags/%25E4%25B9%25B1%25E7%25A0%2581%25E5%25A4%2584%25E7%2590%2586/" rel="tag">乱码处理</a> , <a href="http://agileblog.cn/tags/%25E4%25B8%25AD%25E6%2596%2587%25E4%25B9%25B1%25E7%25A0%2581/" rel="tag">中文乱码</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/MySQL-OrderBy-Desc/</link>
<title><![CDATA[MYSQL 排序 索引]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[MYSQL]]></category>
<pubDate>Wed, 16 Jun 2010 13:35:50 +0000</pubDate> 
<guid>http://agileblog.cn/MySQL-OrderBy-Desc/</guid> 
<description>
<![CDATA[ 
	以下是一些关于MySQL数据库的排序和索引的知识。供大家分享一下。<br/><br/><div class="code"><br/>性能测试中碰到关于mysql排序消耗非常之巨，使用索引来去除排序，可以比较好的降低load。我对mysql是比较初学的<br/><br/>root@orphean 02:19:27&gt;select count(*) from tmp_info;<br/>+----------+<br/>&#124; count(*) &#124;<br/>+----------+<br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;42916 &#124; <br/>+----------+<br/>1 row in set (0.02 sec)<br/><br/>root@orphean 02:29:27&gt;select count(*) from tmp_info where status = 1;<br/>+----------+<br/>&#124; count(*) &#124;<br/>+----------+<br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;32911 &#124; <br/>+----------+<br/>1 row in set (0.02 sec)<br/><br/>root@orphean 02:29:40&gt;select count(*) from tmp_info where status = 2;<br/>+----------+<br/>&#124; count(*) &#124;<br/>+----------+<br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;10005 &#124; <br/>+----------+<br/>1 row in set (0.00 sec)<br/><br/>root@orphean 02:33:16&gt;select count(*) from tmp_info <br/>-&gt; where status = 1 and outer_sys_code = 1 and <br/>-&gt; level &lt;=10000 and appraise &lt;=1000 and open_date &gt;=&#039;2009-06-15 11:27:39&#039; and category like &#039;%,1048,%&#039;;<br/>+----------+<br/>&#124; count(*) &#124;<br/>+----------+<br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;32888 &#124; <br/>+----------+<br/>1 row in set (0.19 sec)<br/><br/>--可以看到虽然加了很多查询条件，但是过滤性并不好，返回的数据量还是比较大，占了增加的表3/4<br/>--看一下全表扫描和用索引的消耗<br/>索引字段：`status`, `level`, `appraise`, `open_date`, `outer_sys_code`, `gmt_modified`<br/><br/>root@orphean 04:06:20&gt;explain select count(*) from tmp_info <br/>-&gt; where status = 1 and outer_sys_code = 1 and <br/>-&gt; level &lt;=10000 and appraise &lt;=1000 and open_date &gt;=&#039;2009-06-15 11:27:39&#039; and category like &#039;%,1048,%&#039; &#92;G<br/>*************************** 1. row ***************************<br/>id: 1<br/>select_type: SIMPLE<br/>table: tmp_info<br/>type: ref<br/>possible_keys: IDX_RECRUIT_STATUS<br/>key: IDX_RECRUIT_STATUS<br/>key_len: 1<br/>ref: const<br/>rows: 1626<br/>Extra: Using where<br/>1 row in set (0.00 sec)<br/><br/>+----------+<br/>&#124; count(*) &#124;<br/>+----------+<br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;32888 &#124; <br/>+----------+<br/>1 row in set (0.17 sec)<br/><br/>=======================<br/>root@orphean 04:07:08&gt;explain select count(*) from tmp_info IGNORE INDEX (IDX_RECRUIT_STATUS)<br/>-&gt; where status = 1 and outer_sys_code = 1 and <br/>-&gt; level &lt;=10000 and appraise &lt;=1000 and open_date &gt;=&#039;2009-06-15 11:27:39&#039; and category like &#039;%,1048,%&#039; &#92;G<br/>*************************** 1. row ***************************<br/>id: 1<br/>select_type: SIMPLE<br/>table: tmp_info<br/>type: ALL<br/>possible_keys: NULL<br/>key: NULL<br/>key_len: NULL<br/>ref: NULL<br/>rows: 42277<br/>Extra: Using where<br/>1 row in set (0.00 sec)<br/><br/>+----------+<br/>&#124; count(*) &#124;<br/>+----------+<br/>&#124;&nbsp;&nbsp;&nbsp;&nbsp;32888 &#124; <br/>+----------+<br/>1 row in set (0.14 sec)<br/><br/>可以看到全表扫描速度要快，其实这个也是可想而知的，用索引扫描返回了表70%多的数据，上面的是count语句，下面看一下分页list语句<br/><br/>root@orphean 04:12:49&gt;explain select * from tmp_info&nbsp;&nbsp; where status = 1 and outer_sys_code = 1 and <br/>-&gt; level &lt;=10000 and appraise &lt;=1000 and open_date &gt;=&#039;2009-06-15 11:27:39&#039; and category like &#039;%,1048,%&#039;<br/>-&gt; ORDER BY gmt_modified desc<br/>-&gt; LIMIT 1,20 &#92;G<br/>*************************** 1. row ***************************<br/>id: 1<br/>select_type: SIMPLE<br/>table: tmp_info<br/>type: ref<br/>possible_keys: IDX_RECRUIT_STATUS<br/>key: IDX_RECRUIT_STATUS<br/>key_len: 1<br/>ref: const<br/>rows: 21041<br/>Extra: Using where<br/>1 row in set (0.00 sec)<br/><br/>---------------------------+------------------------+---------------------+---------------------+<br/>20 rows in set (0.00 sec)<br/><br/><br/>root@orphean 04:13:19&gt;explain select * from tmp_info&nbsp;&nbsp; IGNORE INDEX (IDX_RECRUIT_STATUS)<br/>-&gt; where status = 1 and outer_sys_code = 1 and <br/>-&gt; level &lt;=10000 and appraise &lt;=1000 and open_date &gt;=&#039;2009-06-15 11:27:39&#039; and category like &#039;%,1048,%&#039;<br/>-&gt; ORDER BY gmt_modified desc<br/>-&gt; LIMIT 1,20 &#92;G<br/>*************************** 1. row ***************************<br/>id: 1<br/>select_type: SIMPLE<br/>table: tmp_info<br/>type: ALL<br/>possible_keys: NULL<br/>key: NULL<br/>key_len: NULL<br/>ref: NULL<br/>rows: 42082<br/>Extra: Using where; Using filesort<br/>1 row in set (0.00 sec)<br/><br/>---------------------------+-------------<br/>20 rows in set (0.33 sec)<br/><br/>这个非常明显，看到使用索引去掉filesort之后，sql的效率非常高，显示执行的时间是0.00s（基本在几个毫秒），而使用全表就需要非常330ms<br/>如果我把索引中的gmt_modifid字段移后，是排序用不到索引，那是什么效果呢<br/><br/>ALTER TABLE `orphean`.`tmp_info` DROP INDEX `IDX_RECRUIT_STATUS`,<br/>ADD INDEX `IDX_RECRUIT_STATUS` USING BTREE(`status`, `level`, `appraise`, `open_date`, `outer_sys_code`， `gmt_modified`);<br/><br/>root@orphean 04:58:50&gt;EXPLAIN select * from tmp_info <br/>-&gt; where status = 1 and outer_sys_code = 1 and <br/>-&gt; level &lt;=10000 and appraise &lt;=1000 and open_date &gt;=&#039;2009-06-15 11:27:39&#039; and category like &#039;%,1048,%&#039;<br/>-&gt; ORDER BY gmt_modified desc<br/>-&gt; LIMIT 1,20 &#92;G<br/>*************************** 1. row ***************************<br/>id: 1<br/>select_type: SIMPLE<br/>table: tmp_info<br/>type: ref<br/>possible_keys: IDX_RECRUIT_STATUS<br/>key: IDX_RECRUIT_STATUS<br/>key_len: 1<br/>ref: const<br/>rows: 11234<br/>Extra: Using where; Using filesort<br/>1 row in set (0.00 sec)<br/><br/>---------------------------+------------------------+---------------------+---------------------+<br/>20 rows in set (0.35 sec)<br/><br/>没有用到排序索引消耗的代价比全表扫描来的还大，可惜排序对于mysql的消耗是非常非常大的。 上面的sql比较是将30000多条记录排序啊，代价昂贵！<br/><br/>在性能测试的时候，使用全表扫描或者没有用上索引排序的时候，数据库CPU在50%（16个CPU用掉了8个），load在8以上，而在用索引去掉排序之后，使CPU下降到4%，load在1以下<br/><br/>小结：1. 尽可以去除mysql的排序，使用索引。 要使用索引来用作排序，必须索引列都在查询条件中，而且排序字段前面的查询条件是用=号连接，<br/>因此可能会创建多个索引，前面的字段都相同，只是排序字段的位置不一样的情况。 这个时候用强制索引去提示吧<br/>2. 如果在确定查询返回的结果集太大，查询条件的筛选度太下，那就干脆用全表扫描吧，用 IGNORE INDEX (IDX_NAME)来忽略索引。<br/></div><br/><br/><br/>MySQL排序的话，可以使用以下语句<br/><div class="code"><br/>select * from news order by publishdate desc limit 0,10;<br/>说明一下，news是表名 publishdate是列名 desc是降序 limit 是限制在多少道多少之间的记录，相当于mssql中的top语句<br/></div><br/>Tags - <a href="http://agileblog.cn/tags/mysql/" rel="tag">mysql</a> , <a href="http://agileblog.cn/tags/%25E6%258E%2592%25E5%25BA%258F/" rel="tag">排序</a> , <a href="http://agileblog.cn/tags/%25E7%25B4%25A2%25E5%25BC%2595/" rel="tag">索引</a> , <a href="http://agileblog.cn/tags/%25E9%2599%2590%25E5%2588%25B6%25E8%258C%2583%25E5%259B%25B4/" rel="tag">限制范围</a> , <a href="http://agileblog.cn/tags/%25E5%258F%2596%25E8%258C%2583%25E5%259B%25B4%25E5%2586%2585%25E7%259A%2584%25E8%25AE%25B0%25E5%25BD%2595/" rel="tag">取范围内的记录</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/flash-page/</link>
<title><![CDATA[Flash动态图片切换效果]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[flex开发]]></category>
<pubDate>Wed, 16 Jun 2010 11:52:29 +0000</pubDate> 
<guid>http://agileblog.cn/flash-page/</guid> 
<description>
<![CDATA[ 
	<a href="http://agileblog.cn/attachment.php?fid=134" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=134" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>1. 首先用EMBED标签将Flash文件载入网页<br/><embed src=”picbox.swf” width=”520″ height=”250″ quality=”high” pluginspage=”<a href="http://www.macromedia.com/go/getflashplayer" target="_blank">http://www.macromedia.com/go/getflashplayer</a>” type=”application/x-shockwave-flash” wmode=”transparent” allowScriptAccess=”always” menu=”false” FlashVars=”null”></embed><br/><br/>2. 然后利用FlashVars参数向picbox.swf传递参数<br/>image（图片地址列表）, url（点击后的链接地址列表）, info（显示的文字列表），三个参数间用&号连续，顺序任意。如：<br/><br/>image=i1.jpg&#124;i2.jpg&#124;i3.jpg&#124;i4.jpg&url=http://www.xgto.cn&#124;<a href="http://www.9966.info" target="_blank">http://www.9966.info</a> &#124;<a href="http://www.xiaobai.info&#124;http://www.yaocai123.com" target="_blank">http://www.xiaobai.info&#124;http://www.yaocai123.com</a> &info=淘宝网手机商城&#124;9966电视剧&#124;小白影视馆&#124;中药材百科<br/><br/>Flash动态图片切换效果源码下载地址：<a href="http://www.phplamp.org/wp-content/uploads/2010/04/flash-picbox-code.zip">点击这里下载文件</a><br/><br/>文章转载：<a href="http://www.phplamp.org/2010/04/flash-picbox-code-download/" target="_blank">http://www.phplamp.org/2010/04/flash-picbox-code-download/</a><br/>Tags - <a href="http://agileblog.cn/tags/flash/" rel="tag">flash</a> , <a href="http://agileblog.cn/tags/page/" rel="tag">page</a> , <a href="http://agileblog.cn/tags/%25E5%258A%25A8%25E6%2580%2581%25E5%259B%25BE%25E7%2589%2587%25E5%2588%2587%25E6%258D%25A2%25E6%2595%2588%25E6%259E%259C/" rel="tag">动态图片切换效果</a> , <a href="http://agileblog.cn/tags/%25E6%2596%25B0%25E9%2597%25BB%25E7%2583%25AD%25E5%259B%25BE%25E6%258E%25A8%25E8%258D%2590flash/" rel="tag">新闻热图推荐flash</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/blogeffect/</link>
<title><![CDATA[添加博客加载特效]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[JavaScript]]></category>
<pubDate>Tue, 15 Jun 2010 03:26:25 +0000</pubDate> 
<guid>http://agileblog.cn/blogeffect/</guid> 
<description>
<![CDATA[ 
	<div class="code"><br/>为了加强浏览者的体验,不在等待页面加载时感到枯燥，从而关闭网页，很多网站都会制作一个“网页正在加载中”的提示效果或显示加载进程，加载完成后提示消失，大部分都应用在网站的首页，今天我教大家把这一特效添加到WordPress主题中。要实现该特效同样要用到jQuery，如果大家和我目前用的主题一样，为了实现其它特效已提前加载了jquery，那么正好充分利用jquery的强大功能，添加此特效何乐而不为呢？当然仅仅为了实现这个特效，而去加载50几K的jquery就有点得不偿失了。<br/>实现方法：<br/><br/>打开header.php模板文件<br/><br/>第一步：加载jquery.min.js<br/><br/>外链接格式：<br/><br/>&lt;script type=&quot;text/javascript&quot; src=&quot;http://jqueryjs.googlecode.com/files/jquery-1.2.3.min.js&quot;&gt;&lt;/script&gt;<br/>内链格式：<br/><br/>&lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php bloginfo(&#039;stylesheet_directory&#039;); ?&gt;/js/jquery.min.js&quot; &gt;&lt;/script&gt;<br/>第二步：在&lt;/head&gt;前添加一段JS代码<br/><br/>&lt;script type=&quot;text/javascript&quot;&gt;<br/>jQuery(function()&#123;<br/>jQuery(&#039;#loading-one&#039;).empty().append(&#039;页面加载完毕.&#039;).parent().fadeOut(&#039;slow&#039;);<br/>&#125;);&lt;/script&gt;<br/>第三步：在&lt;body&gt;后添加显示效果样式<br/><br/>&lt;div id=&quot;loading&quot; style=&quot;position:fixed !important;position:absolute;top:0;left:0;height:100%; width:100%; z-index:999; background:#000 url(这里输入一个图片地址) no-repeat center; opacity:0.6; filter:alpha(opacity=60);font-size:14px;line-height:20px;&quot; onclick=&quot;javascript:turnoff(&#039;loading&#039;)&quot;&gt;<br/>&lt;p id=&quot;loading-one&quot; style=&quot;color:#fff;position:absolute; top:50%; left:50%; margin:50px 0 0 -50px; padding:3px 10px;&quot; onclick=&quot;javascript:turnoff(&#039;loading&#039;)&quot;&gt;页面载入中,请稍后...&lt;/p&gt;<br/>&lt;/div&gt;<br/>图片大小格式不限，不加图片也可以，到此该特效添加完毕<br/><br/></div><br/>Tags - <a href="http://agileblog.cn/tags/%25E5%258A%25A0%25E8%25BD%25BD%25E7%2589%25B9%25E6%2595%2588/" rel="tag">加载特效</a> , <a href="http://agileblog.cn/tags/jquery/" rel="tag">jquery</a> , <a href="http://agileblog.cn/tags/javascript/" rel="tag">javascript</a> , <a href="http://agileblog.cn/tags/%25E5%258D%259A%25E5%25AE%25A2/" rel="tag">博客</a> , <a href="http://agileblog.cn/tags/%25E9%25A1%25B5%25E9%259D%25A2%25E5%258A%25A0%25E8%25BD%25BD/" rel="tag">页面加载</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Windows-Install-Server/</link>
<title><![CDATA[在Windows下安装和卸载服务]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Windows]]></category>
<pubDate>Mon, 14 Jun 2010 14:20:18 +0000</pubDate> 
<guid>http://agileblog.cn/Windows-Install-Server/</guid> 
<description>
<![CDATA[ 
	最近安装的的软件比较多，刚才还差点把机器给崩溃了。想了想还是把一些没用到的服务给卸载一下。这样的话，可以使机器运行得更加顺畅。再者，要是自己想写一个集成服务器软件的话，也需要这方面的知识，所以到互联网上查找了一下。以便以后使用。<br/><div class="code"><br/>第一种方法：<br/><br/>1. 开始 -&gt;运行 -&gt;cmd<br/> 2. cd到C:&#92;WINDOWS&#92;Microsoft.NET&#92;Framework&#92;v2.0.50727(Framework版本号按IIS配置)<br/> 3. 安装服务： 运行命令行 InstallUtil.exe E:/test.exe<br/>&nbsp;&nbsp;&nbsp;&nbsp;卸载服务： 运行命令行 InstallUtil.exe -u E:/test.exe<br/><br/>这样就能删除了，但如果还是不能删除的话，沒关系下面还有一种方法。<br/><br/> <br/><br/>第二种方法：<br/><br/>运行--&gt;cmd--&gt;到c:&#92;windows&#92;system32文件夹下--&gt;输入sc delete &lt;服务名称&gt;,然后就可以把服务卸载了<br/><br/>这时候，我们可以用另外一个命令来卸载，如下：<br/><br/>C:&#92;WINDOWS&#92;system32&gt;sc delete mysql<br/><br/>sc delete &quot;mysql&quot;<br/><br/>当然你也可以用这个工具create,start,stop服务。比如，我们就可以用下面的命令，安装服务，并把服务启动起来。<br/><br/>installutil fsshare.exe<br/>sc start &quot;冰点阳光工作室共享&quot;<br/><br/><br/></div><br/>Tags - <a href="http://agileblog.cn/tags/windows/" rel="tag">windows</a> , <a href="http://agileblog.cn/tags/%25E5%25AE%2589%25E8%25A3%2585%25E6%259C%258D%25E5%258A%25A1/" rel="tag">安装服务</a> , <a href="http://agileblog.cn/tags/install/" rel="tag">install</a> , <a href="http://agileblog.cn/tags/server/" rel="tag">server</a> , <a href="http://agileblog.cn/tags/and/" rel="tag">and</a> , <a href="http://agileblog.cn/tags/deleteserver/" rel="tag">deleteserver</a> , <a href="http://agileblog.cn/tags/%25E5%2588%25A0%25E9%2599%25A4%25E6%259C%258D%25E5%258A%25A1/" rel="tag">删除服务</a> , <a href="http://agileblog.cn/tags/%25E5%25BC%2580%25E5%2590%25AF%25E6%259C%258D%25E5%258A%25A1/" rel="tag">开启服务</a> , <a href="http://agileblog.cn/tags/%25E5%2581%259C%25E6%25AD%25A2%25E6%259C%258D%25E5%258A%25A1/" rel="tag">停止服务</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/post/147/</link>
<title><![CDATA[关于子域名无法访问的通告]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[心情文摘]]></category>
<pubDate>Sun, 06 Jun 2010 15:40:38 +0000</pubDate> 
<guid>http://agileblog.cn/post/147/</guid> 
<description>
<![CDATA[ 
	从一个小时前，网站子域名就出现无法访问，直接跳转到了一个新的页面，页面信息提示为域名服务器更新，需要一段时间才能解决。不过这不会影响顶级域名的访问，我们虚拟主机的用户使用的是子域名的话，网站可能近期内无法访问，我将继续跟踪那边最新的状况，将第一时间发布域名状态信息。
]]>
</description>
</item><item>
<link>http://agileblog.cn/Struts-Spring-Hibernate/</link>
<title><![CDATA[Struts，Spring，Hibernate三种框架知识]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Java开发]]></category>
<pubDate>Sun, 30 May 2010 12:18:51 +0000</pubDate> 
<guid>http://agileblog.cn/Struts-Spring-Hibernate/</guid> 
<description>
<![CDATA[ 
	我现在大二快毕业了，也要准备找工作了，所以积累一些面试知识是非常有必要的。以下是我找到的一篇关于SSH框架的面试题目，在此和大家分享以下。<br/><br/><div class="code"><br/>Struts，Spring，Hibernate面试题总结<br/><br/>1、Action是不是线程安全的？如果不是 有什么方式可以保证Action的线程安全？如果是，说明原因。 <br/>不是 <br/>声明局部变量，或者扩展RequestProcessor，让每次都创建一个Action，或者在spring中用scope=&quot;prototype&quot;来管理 <br/><br/><br/>2、MVC，分析一下struts是如何实现MVC的 <br/>m：JavaBean 或结合 EJB 组件或者pojo构成 <br/>c：Action 来实现 <br/>v：一组 JSP 文件及其标签构成。 <br/>＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝<br/>注：POJO的解释如下：<br/>在http://www.webopedia.com/TERM/P/POJO.htm查到解释如下：<br/>POJO, or Plain Old Java Object, is a normal Java object class (that is, not a JavaBean, EntityBean etc.) and does not serve any other special role nor does it implement any special interfaces of any of the Java frameworks. This term was coined by Martin Fowler, Rebbecca Parsons and Josh MacKenzie who believed that by creating the acronym POJO, such objects would have a &quot;fancy name&quot;, thereby convincing people that they were worthy of use.<br/>&nbsp;&nbsp;&nbsp;&nbsp;基本意思是说POJO一个正规的Java对象（不是JavaBean，EntityBean等），也不担当任何的特殊的角色，也不实现任何Java框架指定的接口。<br/>&nbsp;&nbsp;&nbsp;&nbsp;我觉得上面的解释很准确，POJO应该不是我们开始认为的JavaBean，当然更不是EJB，它不应该依赖于框架即继承或实现某些框架类或接口。例如：Struts1中的Action和ActionForm当然不属于POJO了，而在Struts2中的Action由于可以不继承任何的接口，所以在这种情况下Action是POJO，但是Struts2中的Action也可以继承ActionSupport类就不再属于POJO了。POJO里面是可以包含业务逻辑处理和持久化逻辑，也可以包含类似与JavaBean属性和对属性访问的set和get方法的。<br/>&nbsp;&nbsp;&nbsp;&nbsp;最后，我们总结一下给一个定义把，POJO是一个简单的、正规Java对象，它包含业务逻辑处理或持久化逻辑等，但不是JavaBean、EntityBean等，不具有任何特殊角色和不继承或不实现任何其它Java框架的类或接口。<br/>文章出处：http://www.diybl.com/course/3_program/java/javashl/200845/108451.html<br/>＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝<br/><br/><br/>3、struts中的几个关键对象的作用(说说几个关键对象的作用) <br/>Action：控制器类，ActionForm：表单对象，DynaValidatorForm：动态form，ActonMapping：配置文件中action节点的信息...... <br/><br/><br/>4、说说AOP和IOC的概念以及在spring中是如何应用的。 <br/>AOP:面向切面编程，即Aspect-Oriented Programming的缩写<br/>IOC就是Inversion of Control，控制反转。在Java开发中，IoC意味着将你设计好的类交给系统去控制，而不是在你的类内部控制。这称为控制反转。详细参考http://dev.csdn.net/develop/article/24/24397.shtm<br/>(DI: 依赖注入(Dependency Injection)和控制反转(Inversion of Control)是同一个概。具体含义是:当某个角色(可能是一个Java实例，调用者)需要另一个角色(另一个Java实例，被调用者)的协助时，在 传统的程序设计过程中，通常由调用者来创建被调用者的实例。但在Spring里，创建被调用者的工作不再由调用者来完成，因此称为控制反转;创建被调用者 实例的工作通常由Spring容器来完成，然后注入调用者，因此也称为依赖注入。)<br/><br/><br/>5、Hibernate有哪几种查询数据的方式 <br/>hql查询，sql查询，条件查询 <br/><br/><br/>6、load()和get()的区别 <br/>hibernate对于load方法认为该数据在数据库中一定存在，可以放心的使用代理来延迟加载，load默认支持延迟加载，在用到对象中的其他属性数据时才查询数据库，但是万一数据库中不存在该记录，只能抛异常ObjectNotFoundEcception；所说的load方法抛异常是指在使用该对象的数据时，数据库中不存在该数据时抛异常，而不是在创建这个对象时。由于session中的缓存对于hibernate来说是个相当廉价的资源，所以在 load时会先查一下session缓存看看该id对应的对象是否存在，不存在则创建代理（load时候之查询一级缓存，不存在则创建代理）。get() 现在一级缓存找，没有就去二级缓存找，没有就去数据库找，没有就返回null ；而对于get方法，hibernate一定要获取到真实的数据，否则返回null。 <br/><br/><br/>7、谈谈hibernate的延迟加载和openSessionInView <br/>延迟加载要在session范围内，用到的时候再加载；opensessioninview是在web层写了一个 <br/><br/>filter来打开和关闭session，这样就表示在一次request过程中session一直开着，保证了延迟 <br/><br/>加载在session中的这个前提。 <br/><br/><br/>8、spring的事务有几种方式？谈谈spring事务的隔离级别和传播行为。 <br/>声明事务和编程事务 <br/>隔离级别： <br/>- DEFAULT使用数据库默认的隔离级别 <br/>- READ_UNCOMMITTED会出现脏读，不可重复读和幻影读问题 <br/>- READ_COMMITTED会出现重复读和幻影读 <br/>- REPEATABLE_READ会出现幻影读 <br/>- SERIALIZABLE最安全，但是代价最大，性能影响极其严重 <br/>和传播行： <br/>- REQUIRED存在事务就融入该事务，不存在就创建事务 <br/>- SUPPORTS存在事务就融入事务，不存在则不创建事务 <br/>- MANDATORY存在事务则融入该事务，不存在，抛异常 <br/>- REQUIRES_NEW总是创建新事务 <br/>- NOT_SUPPORTED存在事务则挂起，一直执行非事务操作 <br/>- NEVER总是执行非事务，如果当前存在事务则抛异常 <br/>- NESTED嵌入式事务 <br/><br/><br/>9、Hibernate中的update()和saveOrUpdate()的区别. <br/>摘自hibernate说明文档： <br/>saveOrUpdate()做下面的事: <br/>如果对象已经在本session中持久化了，不做任何事 <br/>如果另一个与本session关联的对象拥有相同的持久化标识(identifier)，抛出一个异常 <br/>如果对象没有持久化标识(identifier)属性，对其调用save() <br/>如果对象的持久标识(identifier)表明其是一个新实例化的对象，对其调用save() <br/>如果对象是附带版本信息的（通过 &lt;version&gt;或 &lt;timestamp&gt;） 并且版本属性的值表明其是一个新实例化的对象，save()它。 否则update() 这个对象 <br/><br/>10、Spring对多种ORM框架提供了很好的支持，简单描述在Spring中使用Hibernate的方法，并结合事务管理。 <br/>getHiberanteTemplate里面提供了save，update，delete，find等方法。 <br/>简单说一个：如果配置了声明式事务，当执行getHibernateTemplate的各种方法的时候，事务会 <br/><br/>自动被加载 <br/>如果没有配置事务，那么以上操作不会真正的被同步到数据库，除非配置了hibernate的 <br/><br/>autocommit=true <br/><br/>11、spring的事务有几种方式？谈谈spring事务的隔离级别和传播行为。 <br/>spring事务分两种形式，声明式事务和编程式事务，spring提供了一个事务的接口 <br/><br/>PaltformTractionManager接口，针对不同的事务，spring进行了不同的实现,对hibernate事务 <br/><br/>的实现HIbernateTractionManager,对JDBC的JdbcTractionManager， <br/><br/>DataSourceTractionManager以及JdoTractionManager。接口platformTractionManager提供了三 <br/><br/>个方法，获取事务，提交和回滚的方法。 <br/><br/><br/>12、Hibernate工作原理及为什么要用？ <br/>原理： <br/>&nbsp;&nbsp;1、读取并解析配置文件 <br/>&nbsp;&nbsp;2、读取并解析映射信息，创建SessionFactory <br/>&nbsp;&nbsp;3、打开Sesssion <br/>&nbsp;&nbsp;4、创建事务Transation <br/>&nbsp;&nbsp;5、持久化操作 <br/>&nbsp;&nbsp;6、提交事务 <br/>&nbsp;&nbsp;7、关闭Session <br/>&nbsp;&nbsp;8、关闭SesstionFactory <br/><br/>为什么要用： <br/>&nbsp;&nbsp;1、对JDBC访问数据库的代码做了封装，大大简化了数据访问层繁琐的重复性代码。 <br/><br/>&nbsp;&nbsp;2、Hibernate是一个基于JDBC的主流持久化框架，是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作 <br/><br/>&nbsp;&nbsp;3、hibernate使用Java反射机制，而不是字节码增强程序来实现透明性。 <br/><br/>&nbsp;&nbsp;4、hibernate的性能非常好，因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库，从一对一到多对多的各种复杂关系。 <br/><br/>13、Hibernate是如何延迟加载? <br/>&nbsp;&nbsp;1、Hibernate2延迟加载实现：a)实体对象 b)集合（Collection） <br/>&nbsp;&nbsp;2、Hibernate3 提供了属性的延迟加载功能 <br/>&nbsp;&nbsp;当Hibernate在查询数据的时候，数据并没有存在与内存中，当程序真正对数据的操作时，对象才存在与内存中，就实现了延迟加载，他节省了服务器的内存开销，从而提高了服务器的性能。 <br/><br/>14、Hibernate中怎样实现类之间的关系?(如：一对多、多对多的关系) <br/>&nbsp;&nbsp;类与类之间的关系主要体现在表与表之间的关系进行操作，它们都市对对象进行操作，我们程序中把所有的表与类都映射在一起，它们通过配置文件中的many-to-one、one-to-many、many-to-many、 <br/><br/>15、说下Hibernate的缓存机制 <br/>&nbsp;&nbsp;1、内部缓存存在Hibernate中又叫一级缓存，属于应用事物级缓存 <br/>&nbsp;&nbsp;2、二级缓存： <br/>&nbsp;&nbsp;&nbsp;&nbsp;a) 应用及缓存 <br/>&nbsp;&nbsp;&nbsp;&nbsp;b) 分布式缓存 <br/>&nbsp;&nbsp;条件： <br/>&nbsp;&nbsp;&nbsp;&nbsp;数据不会被第三方修改、数据大小在可接受范围、数据更新频率低、同一数据被系 统频繁使用、非关键数据 <br/>c) 第三方缓存的实现 <br/><br/>16、Hibernate的查询方式 <br/>&nbsp;&nbsp;Sql、Criteria,object comptosition <br/>&nbsp;&nbsp;Hql： <br/>&nbsp;&nbsp;&nbsp;&nbsp;1、 属性查询 <br/>&nbsp;&nbsp;&nbsp;&nbsp;2、 参数查询、命名参数查询 <br/>&nbsp;&nbsp;&nbsp;&nbsp;3、 关联查询 <br/>&nbsp;&nbsp;&nbsp;&nbsp;4、 分页查询 <br/>&nbsp;&nbsp;&nbsp;&nbsp;5、 统计函数 <br/><br/>17、如何优化Hibernate？ <br/>&nbsp;&nbsp;1、使用双向一对多关联，不使用单向一对多 <br/>&nbsp;&nbsp;2、灵活使用单向一对多关联 <br/>&nbsp;&nbsp;3、不用一对一，用多对一取代 <br/>&nbsp;&nbsp;4、配置对象缓存，不使用集合缓存 <br/>&nbsp;&nbsp;5、一对多集合使用Bag,多对多集合使用Set <br/>&nbsp;&nbsp;6、继承类使用显式多态 <br/>&nbsp;&nbsp;7、表字段要少，表关联不要怕多，有二级缓存撑腰 <br/><br/>18、Struts工作机制？为什么要使用Struts？ <br/>工作机制： <br/>Struts的工作流程: <br/>在web应用启动时就会加载初始化ActionServlet,ActionServlet从 <br/>struts-config.xml文件中读取配置信息,把它们存放到各种配置对象 <br/>当ActionServlet接收到一个客户请求时,将执行如下流程. <br/>&nbsp;&nbsp;(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息; <br/>&nbsp;&nbsp;(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中; <br/>&nbsp;&nbsp;(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法; <br/>&nbsp;&nbsp;(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功; <br/>&nbsp;&nbsp;(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Action实例不存在,就先创建这个实例,然后调用Action的execute()方法; <br/>&nbsp;&nbsp;(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给 ActionForward对象指向的JSP组件; <br/>&nbsp;&nbsp;(7)ActionForward对象指向JSP组件生成动态网页,返回给客户; <br/><br/>为什么要用： <br/>&nbsp;&nbsp;JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱，所以在此之上，我们需要一个规则、一个把这些技术组织起来的规则，这就是框架，Struts便应运而生。 <br/><br/>基于Struts开发的应用由3类组件构成：控制器组件、模型组件、视图组件 <br/><br/>19、Struts的validate框架是如何验证的？ <br/>&nbsp;&nbsp;在struts配置文件中配置具体的错误提示，再在FormBean中的validate()方法具体调用。 <br/><br/>20、说下Struts的设计模式 <br/>&nbsp;&nbsp;MVC模式:web应用程序启动时就会加载并初始化ActionServler。用户提交表单时，一个配置好的ActionForm对象被创建，并被填入表单相应的数据，ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证，如果需要就调用ActionForm的 Validate（）验证后选择将请求发送到哪个Action，如果Action不存在，ActionServlet会先创建这个对象，然后调用 Action的execute（）方法。Execute（）从ActionForm对象中获取数据，完成业务逻辑，返回一个ActionForward对象，ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件，ActionForward对象指定的jsp生成动态的网页，返回给客户。 <br/><br/>21、spring工作机制及为什么要用? <br/>&nbsp;&nbsp;1、spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。 <br/>&nbsp;&nbsp;2、DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller. <br/>&nbsp;&nbsp;3、DispatcherServlet请请求提交到目标Controller <br/>&nbsp;&nbsp;4、Controller进行业务逻辑处理后，会返回一个ModelAndView <br/>&nbsp;&nbsp;5、Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象 <br/>&nbsp;&nbsp;6、视图对象负责渲染返回给客户端。 <br/><br/>为什么用： <br/>&nbsp;&nbsp;AOP让开发人员可以创建非行为性的关注点，称为横切关注点，并将它们插入到应用程序代码中。使用 AOP 后，公共服务 （比 如日志、持久性、事务等）就可以分解成方面并应用到域对象上，同时不会增加域对象的对象模型的复杂性。 <br/>&nbsp;&nbsp;IOC 允许创建一个可以构造对象的应用环境，然后向这些对象传递它们的协作对象。正如单词 倒置 所表明的，IOC 就像反 过来的 JNDI。没有使用一堆抽象工厂、服务定位器、单元素（singleton）和直接构造（straight construction），每一个对象都是用其协作对象构造的。因此是由容器管理协作对象（collaborator）。 <br/>&nbsp;&nbsp;Spring即使一个AOP框架，也是一IOC容器。 Spring 最好的地方是它有助于您替换对象。有了 Spring，只要用 JavaBean 属性和配置文件加入依赖性（协作对象）。然后可以很容易地在需要时替换具有类似接口的协作对象。<br/></div><br/><br/>本文章转自<a href="http://zhanghongliang-cyj.javaeye.com/blog/678970" target="_blank">http://zhanghongliang-cyj.javaeye.com/blog/678970</a><br/>Tags - <a href="http://agileblog.cn/tags/struts/" rel="tag">struts</a> , <a href="http://agileblog.cn/tags/spring/" rel="tag">spring</a> , <a href="http://agileblog.cn/tags/hibernate/" rel="tag">hibernate</a> , <a href="http://agileblog.cn/tags/ssh%25E6%25A1%2586%25E6%259E%25B6/" rel="tag">ssh框架</a> , <a href="http://agileblog.cn/tags/%25E9%259D%25A2%25E8%25AF%2595%25E9%25A2%2598%25E7%259B%25AE/" rel="tag">面试题目</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/ecshop-modefy/</link>
<title><![CDATA[ecshop修改参考]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Sat, 29 May 2010 11:25:49 +0000</pubDate> 
<guid>http://agileblog.cn/ecshop-modefy/</guid> 
<description>
<![CDATA[ 
	最近在改一个网上商城，网址是<a href="http://nicedayoffice.com" target="_blank">http://nicedayoffice.com</a>.主要是做办公用品的一个网站。网站名称：长沙市中雅办公用品有限公司。<br/><div class="code"><br/>1:如何修改网站&quot;欢迎光临本店&quot;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;回答:languages&#92;zh_cn&#92;common.php文件中， $_LANG&#91;&#039;welcome&#039;&#93; = &#039;欢迎光临本店&#039;;将他修改成你需要的字样。<br/><br/>&nbsp;&nbsp; 2:如何修改首页&quot;热门搜索关键字&quot;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp; 回答:后台-&gt;系统设置-&gt;网店设置-&gt;显示设置-&gt;首页搜索关键字，修改他的内容，然后保存<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;3:如何修改首页标题 &quot;Powered by ECShop&quot;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;回答：includes/lib_main.php,找到$page_title = $GLOBALS&#91;&#039;_CFG&#039;&#93;&#91;&#039;shop_title&#039;&#93; . &#039; - &#039; . &#039;Powered by ECShop&#039;;修改成$page_title = $GLOBALS&#91;&#039;_CFG&#039;&#93;&#91;&#039;shop_title&#039;&#93;就可以了。<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;4:如何去除cshop底部查询信息的显示<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;回答：library/page_footer.lbi中，删除 &#123;insert name=&#039;query_info&#039;&#125;<br/><br/>　5:如何发布首页公告<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;回答:后台-&gt;系统设置-&gt;商店设置-&gt;网店信息-&gt;商店公告.填写你需要的公告就可以了．<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;6:如何发布站内新闻<br/><br/>　回答:参考http://www.chinab4c.com/html/shangchengchengxu/ecshopchangjianwenti/2009/0615/42.html<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;7:如何修改网站logo<br/><br/>&nbsp;&nbsp; 回答:用你的logo图片替换/themes/default/images/logo.gif中图片就可以了<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;8:如何修改产品图片的大小<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;回答:在ecshop/themes/default/style.css中，找到.goodsItem .goodsimg&#123;width:100px; height:100px; border:4px solid #eef8ff; margin-bottom:4px;&#125;就可以控制产品图片的大小．<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;9:如何管理首页flash播放器<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;回答:后台 -&gt; flash播放器管理 -&gt; 增加自定义，你就可以上传和控制图片的位置&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;10:如何修改首页＂精品推荐＂栏目的more小图片<br/><br/>　回答:模板文件中library/recommend_best.lbi中，&lt;div class=&quot;more&quot;&gt;&lt;a href=&quot;../search.php?intro=best&quot;&gt;&lt;img src=&quot;http://www.blzaixian.com/home/images/more.gif&quot;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;<br/>中more.gif图片换成你要的图片，或者将图片换成你需要的文字．<br/><br/>&nbsp;&nbsp; 11:如何修改首页&quot;新品上市&quot;栏目的more小图片<br/><br/>&nbsp;&nbsp; 回答：模板文件library/recommend_new.lbi中，&lt;div class=&quot;more&quot;&gt;&lt;a href=&quot;../search.php?intro=new&quot;&gt;&lt;img src=&quot;http://www.blzaixian.com/home/images/more.gif&quot;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;<br/>more.gif修改成你需要的图片或者是换成你需要的文字．<br/><br/>&nbsp;&nbsp; 12:如何手动修改支付方式排列顺序<br/><br/>&nbsp;&nbsp; 回答：数据库表中，找到payment表，pay_order字段就是用来控制顺序的，你如果想让A支付方式排在第一，那么你需要修改该字段的值稍微大一些。<br/><br/>&nbsp;&nbsp;<br/><br/><br/>图片1<br/><br/>&nbsp;&nbsp; 13:如何去除ecshop产品详细页产品电击率<br/><br/>　回答：模板文件中，打开goods.dwt，删除&lt;strong&gt; &#123;$lang.goods_click_count&#125;：&lt;/strong&gt;&#123;$goods.click_count&#125;<br/><br/>&nbsp;&nbsp; 14:首页模板在哪个文件，头部模板，底部模板个什么文件名称<br/><br/>&nbsp;&nbsp; 回答：首页模板在为index.dwt, 头部模板在library/page_header.lbi,底部文件在library/page_footer.lbi<br/><br/>&nbsp;&nbsp; 15:网站关闭了注册，如何修改“该网店暂停注册”字样<br/><br/>回答：languages&#92;zh_cn&#92;common.php 中$_LANG&#91;&#039;shop_register_closed&#039;&#93; = &#039;该网店暂停注册&#039;;修改该文字就可以了<br/><br/>&nbsp;&nbsp; 16:收货人详细信息js弹出框的提示脚本在哪个文件<br/><br/>&nbsp;&nbsp; 回答：languages&#92;zh_cn&#92;shopping_flow.php &#91;比如 $_LANG&#91;&#039;flow_js&#039;&#93;&#91;&#039;country_not_null&#039;&#93; = &#039;请您选择收货人所在国家！&#039;;&#93;<br/><br/>&nbsp;&nbsp; 17:网站公告代码段在那里<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;回答: index.php文件中, $smarty-&gt;assign(&#039;shop_notice&#039;,&nbsp;&nbsp;&nbsp;&nbsp; $_CFG&#91;&#039;shop_notice&#039;&#93;);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 商店公告代码段控制公告<br/><br/>&nbsp;&nbsp; 18:网站首页＂精品推荐＂显示数量在那里设置<br/><br/>　回答：请参考http://www.chinab4c.com/html/shangchengchengxu/ecshopchangjianwenti/2009/0613/39.html文章里面第三点<br/><br/>&nbsp;&nbsp; 19:网站首页＂新品上市＂显示数量在那里设置<br/><br/>　回答：参照http://www.chinab4c.com/html/shangchengchengxu/ecshopchangjianwenti/2009/0613/39.html里面第二点<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;20:如何修改产品的库存<br/><br/>&nbsp;&nbsp; 回答:商品管理 -&gt; 商品列表 -&gt; 选中(库存),编辑就可以了.<br/><br/>&nbsp;&nbsp; 21:如何修改ecshop表的前缀<br/><br/>回答:修改data/config.php下的$prefix&nbsp;&nbsp;&nbsp;&nbsp;= &quot;ecs_&quot;;将ecs_修改成你需要的前缀.其次,在数据库中，修改表名比如ecs_goods修改为&quot;xxx_goods&quot;;<br/><br/>&nbsp;&nbsp; 22:如何去除首页flash下面的空白区域<br/><br/>回答:参照http://www.chinab4c.com/html/shangchengchengxu/ecshopchangjianwenti/2009/0616/46.html<br/><br/>&nbsp;&nbsp; 23:如何修改ecshop导航栏目名称<br/><br/>回答:后台 -&gt; 系统设置 -&gt; 自定义导航栏 -&gt; 编辑 -&gt; 修改导航栏名称<br/><br/>&nbsp;&nbsp; 24:如何将最新产品栏目显示在导航栏里面？<br/><br/>　回答：后台 -&gt; 系统设置 -&gt; 自定义导航栏 -&gt; 增加自定义导航,在链接的栏目中输入&quot;search.php?intro=new&quot;<br/><br/>&nbsp;&nbsp; 25:如何更换ecshop模板<br/><br/>&nbsp;&nbsp; 回答：比如新模板“test”,你将放在themes目录下，形成的路径为themes/test,然后在后台 -&gt; 模板管理 -&gt; 模板选择 ，起用你新加的模板就OK了。<br/><br/>&nbsp;&nbsp; 26:ecshop产品相关的图片有那几种<br/><br/>回答：$goods_img&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= &#039;&#039;; // 初始化商品图片<br/>&nbsp;&nbsp;&nbsp;&nbsp;$goods_thumb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= &#039;&#039;; // 初始化商品缩略图<br/>&nbsp;&nbsp;&nbsp;&nbsp;$original_img&nbsp;&nbsp;&nbsp;&nbsp; = &#039;&#039;; // 初始化原始图片<br/>&nbsp;&nbsp;&nbsp;&nbsp;$old_original_img = &#039;&#039;; // 初始化原始图片旧图<br/><br/>&nbsp;&nbsp; 27：ecshop首页如何设置“新品”，“精品”，“热卖”商品<br/><br/>&nbsp;&nbsp; 回答：参照http://www.chinab4c.com/html/shangchengchengxu/ecshopchangjianwenti/2009/0706/82.html<br/><br/>&nbsp;&nbsp; 28:如何修改“支付方式”显示顺序<br/><br/>回答：打开ecs_payment表,如果你想让他显示在前面，你将设置pay_order值小一些，比如想让“支付宝”排第一，“快钱”排第二，你就可以设置支付宝pay_order=1,快钱pay_order=2<br/><br/>&nbsp;&nbsp; 29:详细页面的积分<br/><br/>　回答：详细页面的积分在模板&lt;strong&gt; &#123;$lang.goods_give_integral&#125;&lt;/strong&gt;&lt;font class=&quot;f4&quot;&gt;&#123;$goods.give_integral&#125; &#123;$points_name&#125;&lt;/font&gt;中来控制的<br/><br/>&nbsp;&nbsp; 30:如何修改产品缩略图大小<br/><br/>&nbsp;&nbsp; 回答：后台 -&gt; 系统设置 -&gt; 网店设置 -&gt; 显示设置 -&gt; 缩略图宽度.,当然你也可以设置缩略图高度<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;31:如何设置ecshop货币格式和日期格式。<br/><br/>回答：后台 -&gt; 系统设置 -&gt; 网店设置 -&gt; 显示设置 -&gt; 货币格式(￥%s元)或者时间格式(Y-m-d H:i:s)<br/><br/>&nbsp;&nbsp; 32:如何开取和关闭ecshop登陆验证码<br/><br/>&nbsp;&nbsp; 回答:后台 -&gt; 系统设置 -&gt; 验证码管理 ,在这里你可以操作各种验证码,开启和关闭<br/><br/>&nbsp;&nbsp; 33:如何修改个人帐户信息里面，出生年月的范围<br/><br/>&nbsp;&nbsp; &#123;html_select_date field_order=YMD prefix=birthday start_year=-60 end_year=+1 display_days=true month_format=%m day_value_format=%02d time=$profile.birthday&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;start_year=-60意思是从今天开始，推前面60年。 end_year+=1就是今年开始，往后推一年。就是表示这个范围。如果你需要更大的范围，将他们修改的更大一些。比如 start_year=-100,end_year+=100。这样范围够大了把。呵呵<br/><br/>&nbsp;&nbsp; 34:ecshop中的模板中如何包含模板<br/><br/>回答:查看includes/cls_template.php中，发现php中的include方式在smarty中依然有用. &#123;include file=&#039;library/dd.lbi&#039;&#125;所以,你用include方式,就可以在ecshop中的lbi中包含lbi<br/><br/>&nbsp;&nbsp; 35:如何调整ecshop flash播放器播放速度<br/><br/>回答：// 0xffffff:文字颜色&#124;1:文字位置&#124;0x0066ff:文字背景颜色&#124;60:文字背景透明度&#124;0xffffff:按键文字颜色&#124;0x0066ff:按键默认颜色&#124;0x000033:按键当前颜色&#124;8:自动播放时间(秒)&#124;2:图片过渡效果&#124;1:是否显示按钮&#124;_blank:打开窗口<br/>var swf_config = &quot;&#124;2&#124;&#124;&#124;0xFFFFFF&#124;0xFF6600&#124;&#124;2&#124;3&#124;1&#124;_blank&quot;<br/><br/>&nbsp;&nbsp; 以上表明，后面的2是控制速度的，如果你感觉他快了。你就把2修改成比2大的数。这样ecshop flash播放器速度就会慢些<br/><br/>&nbsp;&nbsp; 36:ecshop2.7.0首页轮换图片如何管理<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;回答：后台 -&gt; 系统设置 -&gt; 首页主广告管理 -&gt; 系统默认，自定义。。。在这里。你可以进行首页flash图片管理<br/><br/>&nbsp;&nbsp; 37.ecshop订单中，哪个字段是控制折扣的<br/><br/>回答：order_info表格中，discount字段控制折扣。<br/><br/>&nbsp;&nbsp; 38:如何显示销售排行:<br/><br/>回答:显示销售排行，首先你需要有交易的定单,而且该定单已经交易完成,并且该定单中的产品库存不为零.如果库存为零,还是不能显示.<br/><br/>&nbsp;&nbsp; 39:Notice: Undefined variable: _LANG in D:&#92;cms&#92;new&#92;includes&#92;init.php on line 179错误如何解决<br/>　回答：认真检查语言包require(ROOT_PATH . &#039;languages/&#039; . $_CFG&#91;&#039;lang&#039;&#93; . &#039;/common.php&#039;);文件是否存在，或者遗漏<br/><br/>&nbsp;&nbsp; 40:ecshop flash播放器文件和图片在哪个文件夹里面<br/><br/>　回答：flash播放器程序在data&#92;flashdata，图片在data&#92;afficheimg里面<br/><br/>&nbsp;&nbsp; 50:如果不小心把ecshop 的install.lock文件删除了怎么办<br/><br/>　回答：很简单．在data 目录下，建立一个名字为install.lock的文件就好了。甚至内容都不需要．<br/><br/>&nbsp;&nbsp; 51:如何设置快递单的打印模板<br/><br/>&nbsp;&nbsp; 回答：系统设置 -&gt; 配送方式 -&gt; 编辑打印模板<br/><br/>&nbsp;&nbsp; 52:ecshop如何删除“注册用户”，“VIP用户”价格<br/><br/>回答：会员管理 -&gt; 会员等级 -&gt; 删除或者不显示对应会员等级的价格<br/><br/>&nbsp;&nbsp; 53：如何调整分类列表也分页显示产品的个数。<br/><br/>回答：后台 -&gt; 系统设置 -&gt; 商店设置 -&gt; 显示设置 -&gt; 商品分类页列表的数量<br/><br/>&nbsp;&nbsp; 54:用户中心，产品推荐，分成细节文字在那里修改：<br/><br/>回答：languages&#92;zh_cn&#92;user.php 文件中的 $_LANG&#91;&#039;affiliate_intro&#039;&#93;&#91;0&#93; 内容，进行修改　　<br/><br/>&nbsp;&nbsp; 55:购物车中的文字信息如何修改“您的购物车中有 0 件商品，总计金额 ￥0.00元”<br/><br/>回答：languages&#92;zh_cn&#92;common.php 文件中，修改$_LANG&#91;&#039;cart_info&#039;&#93; = &#039;您的购物车中有 %d 件商品，总计金额 %s。&#039;;文字修改成你需要的文字<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp; 56:如何控制ecshop文件的编码。<br/><br/>回答：header(&quot;Content-type: text/html; charset=UTF-8&quot;);<br/><br/>&nbsp;&nbsp; 57:如何修改调整ecshop用户中心左侧栏目<br/><br/>回答：模板文件library/user_menu.lbi中。修改和去除一些栏目，就可以了<br/><br/>ecshop2.7，现在用加密方法，很难去掉。<br/>一定要去的话，可以在淘宝上找专业人士帮忙去。不过好像是收费的。<br/><br/>以前的版本只要在下面操作就行了。<br/>&nbsp;&nbsp; 1. 删除顶部标题栏&quot;Powered by Ecshop&quot;信息:<br/>使用文本编辑器(推荐UltraEdit)打开 ecshop根目录/includes/lib_main.php, 找到如下代码:<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/* 初始化“页面标题”和“当前位置” */<br/>&nbsp;&nbsp;&nbsp;&nbsp;$page_title = $GLOBALS&#91;&#039;_CFG&#039;&#93;&#91;&#039;shop_title&#039;&#93; . &#039; - &#039; . &#039;Powered by ECShop&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ur_here&nbsp;&nbsp;&nbsp;&nbsp;= &#039;&lt;a href=&quot;.&quot; mce_href=&quot;.&quot;&gt;&#039; . $GLOBALS&#91;&#039;_LANG&#039;&#93;&#91;&#039;home&#039;&#93; . &#039;&lt;/a&gt;&#039;;<br/><br/>将蓝色部分删除或修改为自己的网站信息.<br/><br/>&nbsp;&nbsp; 2. 修改底部&quot;Powered by Ecshop 2.x.x&quot;<br/><br/>使用文本编辑器打开文件: ecshop根目录/themes/当前模板名/library/page_footer.lbi, 找到如下代码:<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#123;insert name=&#039;query_info&#039;&#125;&lt;br /&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a href=&quot;http://www.ecshop.com&quot; target=&quot;_blank&quot; style=&quot;font-size:10px&quot;&gt;Powered by<br/><br/>&lt;strong&gt;&lt;span style=&quot;color: #3366FF&quot;&gt;ECShop&lt;/span&gt; &lt;span style=&quot;color: #FF9966&quot;&gt;&#123;$ecs_version&#125;<br/><br/>&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;<br/><br/>将蓝色部分删除或修改加粗部分为自己网站信息.<br/><br/>&nbsp;&nbsp; 58、如何删除用户评论<br/><br/>答案是：进入&#92;themes&#92;default&#92;library&#92;comments_list.lbi 把这个页面的整个源码注释掉，在开头加上 &lt;!-- 在最后尾部加上 --&gt;<br/><br/>&nbsp;&nbsp; 59、在首面的最上面的logo边添加banner 的方法<br/><br/>修改模板文件里的page_header.lbi文件，在里面添加相关的代码文件即可，如下演示：<br/><br/>&lt;p id=&quot;logo&quot;&gt;&lt;a href=&quot;../index.php&quot;&gt;&lt;img src=&quot;http://www.blzaixian.com/home/../images/logo.gif&quot;&quot; alt=&quot;logo&quot; /&gt;&lt;/a&gt;　　&lt;img src=&quot;http://www.blzaixian.com/home/../images/banner.gif&quot;&quot; alt=&quot;banner广告&quot; /&gt;&lt;/p&gt;&nbsp;&nbsp;<br/><br/>红色的地方就是添加的banner图片代码。至于大小，大家根据情况自己再调整下吧。<br/><br/>&nbsp;&nbsp; 60、如何在文件里加入JS代码，如果按一般平常添加方法，会出错，解决的方法：<br/><br/>把script套在&#123;literal&#125;&#123;/literal&#125;之间试试看，例如：<br/><br/>&#123;literal&#125;<br/>&lt;script type=&quot;text/javascript&quot;&gt;<br/>....<br/>&lt;/script&gt;<br/>&#123;/literal&#125;<br/><br/>&nbsp;&nbsp; 61:ecshop后台如何设置产品价格格式<br/><br/>回答:后台-&gt;系统设置-&gt;网店设置-&gt;显示设置-&gt;商品价格显示规则<br/><br/>&nbsp;&nbsp; 62:如何删除ecshop底部查询<br/><br/>回答：模板文件中library/page_footer.lbi中，删除&#123;insert name=&#039;query_info&#039;&#125;<br/><br/>&nbsp;&nbsp; 63：如何给网站底部增加第三方统计代码<br/><br/>回答：后台-&gt;系统设置-&gt;基本设置-&gt;统计代码。点保存<br/><br/>&nbsp;&nbsp; 64:页面标题和中间导航,程序在那里?<br/><br/>回答:includes/lib_main.php中的assign_ur_here()函数中<br/><br/>&nbsp;&nbsp; 65:如何手动调节一个ecshop会员的等级<br/><br/>回答:后台-&gt;会员管理-&gt;会员列表-&gt;选中某个会员 -&gt; 查看帐目明细 -&gt; 调节会员帐户 -&gt; 等级积分帐户(增加或者减少)相对应的分,调节到需要调节的会员等级的积分。就能达到手动调节会员等级的效果<br/><br/>&nbsp;&nbsp; 66:如何改变ecshop首页flash显示的大小<br/><br/>回答：模板文件中，index.dwt.<br/><br/>&lt;script type=&quot;text/javascript&quot;&gt;<br/>var swf_width=534;<br/>var swf_height=218;<br/>&lt;/script&gt;<br/><br/>修改他的值就可以了<br/><br/>&nbsp;&nbsp; 67:如何修改网站关闭后的提示信息？<br/><br/>回答：languages&#92;zh_cn&#92;common.php 中，把这句中文，修改成你要的文字$_LANG&#91;&#039;shop_closed&#039;&#93; = &#039;本店盘点中，请您稍后再来...&#039;;<br/>68:js如何取select的值<br/><br/>回答：var t = document.getElementById(&quot;typeController&quot;);<br/>alert(t.options&#91;t.selectedIndex&#93;.value);<br/><br/>&nbsp;&nbsp; 69:让ecshop属性下拉格式显示<br/><br/>回答：后台－系统设置－商店设置－商品显示设置 第六行 商品属性显示样式: 单选按钮下拉列表<br/><br/>&nbsp;&nbsp; 70:如何控制评论的审核状态<br/><br/>回答：后台-&gt;系统设置-&gt;商店设置-&gt;基本设置-&gt;用户评论是否需要审核<br/><br/>&nbsp;&nbsp; 71:ecshop中奇兵夺宝的时间和信息在哪个表<br/><br/>回答：ecs_snatch_log里面装着出价的时间和价格。还有用户ID,出价时间是bid_time<br/><br/>72:如何编辑“ecshop用户协议”<br/><br/>回答：后台-&gt;文章管理-&gt;文章列表 -&gt;编辑“用户协议”那篇文章。<br/><br/>73:如何修改后台操作栏目条<br/><br/>回答：languages&#92;zh_cn&#92;admin&#92;common.php中修改<br/><br/>74:如何在ecshop自定义导航栏增加ecshop积分商城<br/><br/>回答：exchange.php增加进去，就可以了。<br/><br/>75:ecshop数据库备份的文件放在哪个目录<br/><br/>回答：data&#92;sqldata目录下面<br/><br/>76、如何加强ecshop搜索<br/><br/>回答:<br/><br/>word_list = explode(&#039; &#039;, $keyword);<br/>foreach ($word_list as $word)<br/>&#123;<br/>$conditions .= &quot; AND (g.goods_name LIKE &#039;%&quot; . trim($word) . &quot;%&#039;)&quot;;<br/>&#125;<br/><br/>根据ecmall论坛上朋友的思路，可以更加方便搜索.<br/><br/>77:如何增加在ecshop中增加和&quot;中国&quot;同一级别的地区地址。<br/><br/>回答：insert into ecs_region values(&#039;&#039;,&#039;0&#039;,&#039;美国&#039;,&#039;0&#039;,&#039;0&#039;);在根据该region_id.插入不同级别地区。<br/><br/>78:如何修改ur_here.lbi中的信息<br/><br/>回答：includes/lib_main.php函数中，修改assign_ur_here()函数<br/><br/>79:如何修复mysql的myd文件。<br/><br/>回答：执行REPAIR TABLE 命令<br/><br/>80:如何控制ECSHOP商品浏览历史数量<br/><br/>回答：系统设置-&gt;商店设置-&gt;显示设置-&gt;浏览历史数量设置<br/><br/>81：如何删除用户评论<br/><br/>答案是：进入&#92;themes&#92;default&#92;library&#92;comments_list.lbi 把这个页面的整个源码注释掉，在开头加上 &lt;!-- 在最后尾部加上 --&gt;<br/><br/>82、在首面的最上面的logo边添加banner 的方法<br/><br/>修改模板文件里的page_header.lbi文件，在里面添加相关的代码文件即可，如下演示：<br/><br/>&lt;p id=&quot;logo&quot;&gt;&lt;a href=&quot;../index.php&quot;&gt;&lt;img src=&quot;http://www.blzaixian.com/home/../images/logo.gif&quot;&quot; alt=&quot;logo&quot; /&gt;&lt;/a&gt;　　&lt;img src=&quot;http://www.blzaixian.com/home/../images/banner.gif&quot;&quot; alt=&quot;banner广告&quot; /&gt;&lt;/p&gt;<br/><br/>红色的地方就是添加的banner图片代码。至于大小，大家根据情况自己再调整下吧。<br/><br/>83、如何在文件里加入JS代码，如果按一般平常添加方法，会出错，解决的方法：<br/><br/>把script套在&#123;literal&#125;&#123;/literal&#125;之间试试看，例如：<br/><br/>&#123;literal&#125;<br/>&lt;script type=&quot;text/javascript&quot;&gt;<br/>....<br/>&lt;/script&gt;<br/>&#123;/literal&#125;<br/><br/>84、如何修改商品浏览记录的格式<br/><br/>在includes/lib_insert.php文件中搜索insert_history()就能找到浏览记录的样式！<br/><br/>85:ecshop模板如何控制字符长度<br/><br/>回答：&#123;$article.short_title&#124;truncate:10:&quot;...&quot;:true&#125;这样就可以截取字符串长度了<br/><br/>86、修改后台的登陆地址，这个比较复杂<br/><br/>http://bbs.ecshop.com/viewthread.php?tid=66040&amp;highlight=%BA%F3%CC%A8里面有详细说明！<br/><br/>87:ecshop后台管理员权限中站外广告管理<br/><br/>回答：<br/>1、首先在数据库中esc_admin_action表中添加一条记录如图<br/><br/>2、 在 languages&#92;zh_cn&#92;admin&#92;priv_cation.php文件里定义如下一个$_LANG<br/>$_LANG&#91;&#039;z_clicks_stats&#039;&#93; = &#039;站外投放js&#039;;<br/>3、 在 admin&#92;includes&#92;inc_priv.php文件里定义如下一个数组元素<br/>将$purview&#91;&#039;z_clicks_stats&#039;&#93;&nbsp;&nbsp;&nbsp;&nbsp;= &#039;ad_manage&#039;;改为$purview&#91;&#039;z_clicks_stats&#039;&#93;&nbsp;&nbsp;&nbsp;&nbsp;= &#039;z_clicks_stats&#039;;<br/>这样你就可以在管理员管理中添加此权限了<br/><br/>88、在订单列表页中 调用每笔订单的支付方式的问题<br/><br/>在 includes/lib_transaction.php这个文件查找function get_user_orders ，然后往下看$arr&#91;&#93; =&#123;&#125;在这里面加上&#039;pay_name&#039;&nbsp;&nbsp;&nbsp;&nbsp;=&gt; $row&#91;&#039;pay_name&#039;&#93;,<br/>清除缓存即可！<br/><br/>88、在后台商品添加编辑器里面设定默认值<br/><br/>在admin/goods.php里面搜索create_html_editor(&#039;goods_desc&#039;, $goods&#91;&#039;goods_desc&#039;&#93;);<br/>然后把这个改成<br/>if($_REQUEST&#91;&#039;act&#039;&#93; == &#039;add&#039;)&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; $input_value=&#039;默认值&#039;;<br/>&nbsp;&nbsp;&nbsp;&nbsp; create_html_editor(&#039;goods_desc&#039;, $input_value);<br/>&nbsp;&nbsp; &#125;else&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; create_html_editor(&#039;goods_desc&#039;, $goods&#91;&#039;goods_desc&#039;&#93;);<br/>&nbsp;&nbsp; &#125;这样就OK啦~~<br/><br/>89、ECshop如何显示用户会员等级<br/><br/>a)/includes/lib_clips.php 文件中搜索如下代码<br/>$sql = &quot;SELECT pay_points, user_money, credit_line, last_login, is_validated FROM &quot; .$GLOBALS&#91;&#039;ecs&#039;&#93;-&gt;table(&#039;users&#039;). &quot; WHERE user_id = &#039;$user_id&#039;&quot;;<br/>改成<br/>$sql = &quot;SELECT pay_points, user_money, user_rank, credit_line, last_login, is_validated FROM &quot; .$GLOBALS&#91;&#039;ecs&#039;&#93;-&gt;table(&#039;users&#039;). &quot; WHERE user_id = &#039;$user_id&#039;&quot;;<br/>b)随后插入代码<br/>if($row&#91;&#039;user_rank&#039;&#93;==&#039;0&#039;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql2 = &quot;SELECT b.rank_name as userrank FROM &quot;. $GLOBALS&#91;&#039;ecs&#039;&#93;-&gt;table(&#039;users&#039;) .&quot; as a,&quot;.$GLOBALS&#91;&#039;ecs&#039;&#93;-&gt;table(&#039;user_rank&#039;).&quot; as b WHERE a.rank_points &gt; b.min_points AND a.rank_points &lt; b.max_points AND a.user_id = &#039;$user_id&#039;&quot;;<br/>&nbsp;&nbsp; &#125;else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; $user_rank = $row&#91;&#039;user_rank&#039;&#93;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sql2 = &quot;SELECT b.rank_name as userrank FROM &quot;. $GLOBALS&#91;&#039;ecs&#039;&#93;-&gt;table(&#039;users&#039;) .&quot; as a,&quot;.$GLOBALS&#91;&#039;ecs&#039;&#93;-&gt;table(&#039;user_rank&#039;).&quot; as b WHERE a.user_rank = b.rank_id AND a.user_id = &#039;$user_id&#039;&quot;;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; $row2 = $GLOBALS&#91;&#039;db&#039;&#93;-&gt;getRow($sql2);<br/>c)然后在<br/>$info = array();<br/>$info&#91;&#039;username&#039;&#93;&nbsp;&nbsp; = $_SESSION&#91;&#039;user_name&#039;&#93;;<br/>$info&#91;&#039;shop_name&#039;&#93; = $GLOBALS&#91;&#039;_CFG&#039;&#93;&#91;&#039;shop_name&#039;&#93;;<br/>$info&#91;&#039;integral&#039;&#93;&nbsp;&nbsp; = $row&#91;&#039;pay_points&#039;&#93; . $GLOBALS&#91;&#039;_CFG&#039;&#93;&#91;&#039;integral_name&#039;&#93;;<br/>下面插入<br/>if ($row2&#91;&#039;userrank&#039;&#93; != null)&#123;<br/>$info&#91;&#039;userrank&#039;&#93; = $row2&#91;&#039;userrank&#039;&#93;;&#125;<br/>else &#123;<br/>$info&#91;&#039;userrank&#039;&#93; = &quot;普通会员&quot;;<br/>&#125;<br/>d) /thems/当前模板/user_clips.dwt写入<br/>&lt;h3 style=&quot;margin:0px;color:#555;&quot;&gt; 您的会员级别为：&#123;$info.userrank&#125; &lt;/h3&gt;<br/>即可显示会员等级<br/><br/>新的ecshop2.7.0版本 首先看library.lbi/page_footer.lbi中的一段程序 &#123;foreach from=$lang.p_y item=pv&#125;<br/><br/>　　<br/>新的ecshop2.7.0版本要问世了，前些阶段在出新的测试版.<br/>ecshop2.7.0的底部版本信息和之前相比,有了较大的修改和改变。首先看library.lbi/page_footer.lbi中的一段程序 &#123;foreach from=$lang.p_y item=pv&#125;&#123;$pv&#125;&#123;/foreach&#125;&#123;$licensed&#125;,这里就是用来控制版本信息的,这个数组在$lang中.<br/><br/>打开文件D:&#92;APMServ5.2.6&#92;www&#92;htdocs&#92;ec&#92;languages&#92;zh_cn&#92;common.php,查看下面数组<br/>$_LANG&#91;&#039;p_y&#039;&#93;&#91;&#039;link_start&#039;&#93; = &#039;&lt;a href=&quot;http://www.ecshop.com&quot; target=&quot;_blank&quot; style=&quot; font-family:Verdana; font-size:11px;&quot;&gt;&#039;;<br/>$_LANG&#91;&#039;p_y&#039;&#93;&#91;&#039;link_p&#039;&#93; = &#039;Powe&#039;;<br/>$_LANG&#91;&#039;p_y&#039;&#93;&#91;&#039;link_r&#039;&#93; = &#039;red &#039;;<br/>$_LANG&#91;&#039;p_y&#039;&#93;&#91;&#039;link_b&#039;&#93; = &#039;by &#039;;<br/>$_LANG&#91;&#039;p_y&#039;&#93;&#91;&#039;main_start&#039;&#93; = &#039;&lt;strong&gt;&lt;span style=&quot;color: #3366FF&quot;&gt;&#039;;<br/>$_LANG&#91;&#039;p_y&#039;&#93;&#91;&#039;main_e&#039;&#93; = &#039;E&#039;;<br/>$_LANG&#91;&#039;p_y&#039;&#93;&#91;&#039;main_c&#039;&#93; = &#039;CSho&#039;;<br/>$_LANG&#91;&#039;p_y&#039;&#93;&#91;&#039;main_p&#039;&#93; = &#039;p&lt;/span&gt;&#039;;<br/>$_LANG&#91;&#039;p_y&#039;&#93;&#91;&#039;v_s&#039;&#93; = &#039;&lt;span style=&quot;color: #FF9966&quot;&gt;&#039;;<br/>$_LANG&#91;&#039;p_y&#039;&#93;&#91;&#039;v&#039;&#93; = VERSION;<br/>$_LANG&#91;&#039;p_y&#039;&#93;&#91;&#039;link_end&#039;&#93; = &#039;&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;&#039;;<br/><br/><br/>如果你需要修改版权,就在这里进行修改,保存就可以了。<br/><br/>开始没注意到下面那个乱飞的版权,<br/>现在告诉大家怎么去掉吧!!<br/>js/common.js<br/>这里的面版权<br/>第244行:<br/>函数如下:<br/>onload = function()<br/>&#123;<br/>var link_arr = document.getElementsByTagName(String.fromCharCode(65));<br/>var link_str;<br/>var link_text;<br/>var regg, cc;<br/>var rmd, rmd_s, rmd_e, link_eorr = 0;<br/>var e = new Array(97, 98, 99,<br/>100, 101, 102, 103, 104, 105, 106, 107, 108, 109,<br/>110, 111, 112, 113, 114, 115, 116, 117, 118, 119,<br/>120, 121, 122<br/>);<br/>try<br/>&#123;<br/>for(var i = 0; i &lt; link_arr.length; i++)<br/>&#123;<br/>link_str = link_arr.href;<br/>if (link_str.indexOf(String.fromCharCode(e&#91;22&#93;, 119, 119, 46, e&#91;4&#93;, 99, e&#91;18&#93;, e&#91;7&#93;, e&#91;14&#93;,<br/>e&#91;15&#93;, 46, 99, 111, e&#91;12&#93;)) != -1)<br/>&#123;<br/>if ((link_text = link_arr.innerText) == undefined)<br/>&#123;<br/>throw &quot;noIE&quot;;<br/>&#125;<br/>regg = new RegExp(String.fromCharCode(80, 111, 119, 101, 114, 101, 100, 46, 42, 98, 121, 46, 42, 69, 67, 83, e&#91;7&#93;, e&#91;14&#93;, e&#91;15&#93;));<br/>if ((cc = regg.exec(link_text)) != null)<br/>&#123;<br/>if (link_arr.offsetHeight == 0)<br/>&#123;<br/>break;<br/>&#125;<br/>link_eorr = 1;<br/>break;<br/>&#125;<br/>&#125;<br/>else<br/>&#123;<br/>link_eorr = link_eorr ? 0 : link_eorr;<br/>continue;<br/>&#125;<br/>&#125;<br/>&#125; // IE<br/>catch(exc)<br/>&#123;<br/>for(var i = 0; i &lt; link_arr.length; i++)<br/>&#123;<br/>link_str = link_arr.href;<br/>if (link_str.indexOf(String.fromCharCode(e&#91;22&#93;, 119, 119, 46, e&#91;4&#93;, 99, 115, 104, e&#91;14&#93;,<br/>e&#91;15&#93;, 46, 99, 111, e&#91;12&#93;)) != -1)<br/>&#123;<br/>link_text = link_arr.textContent;<br/>regg = new RegExp(String.fromCharCode(80, 111, 119, 101, 114, 101, 100, 46, 42, 98, 121, 46, 42, 69, 67, 83, e&#91;7&#93;, e&#91;14&#93;, e&#91;15&#93;));<br/>if ((cc = regg.exec(link_text)) != null)<br/>&#123;<br/>if (link_arr.offsetHeight == 0)<br/>&#123;<br/>break;<br/>&#125;<br/>link_eorr = 1;<br/>break;<br/>&#125;<br/>&#125;<br/>else<br/>&#123;<br/>link_eorr = link_eorr ? 0 : link_eorr;<br/>continue;<br/>&#125;<br/>&#125;<br/>&#125; // FF<br/>try<br/>&#123;<br/>rmd = Math.random();<br/>rmd_s = Math.floor(rmd * 10);<br/>if (link_eorr != 1)<br/>&#123;<br/>rmd_e = i - rmd_s;<br/>link_arr&#91;rmd_e&#93;.href = String.fromCharCode(104, 116, 116, 112, 58, 47, 47, 119, 119, 119,46,<br/>101, 99, 115, 104, 111, 112, 46, 99, 111, 109);<br/>link_arr&#91;rmd_e&#93;.innerHTML = String.fromCharCode(<br/>80, 111, 119, 101, 114, 101, 100,38, 110, 98, 115, 112, 59, 98,<br/>121,38, 110, 98, 115, 112, 59,60, 115, 116, 114, 111, 110, 103,<br/>62, 60,115, 112, 97, 110, 32, 115, 116, 121,108,101, 61, 34, 99,<br/>111, 108, 111, 114, 58, 32, 35, 51, 51, 54, 54, 70, 70, 34, 62,<br/>69, 67, 83, 104, 111, 112, 60, 47, 115, 112, 97, 110, 62,60, 47,<br/>115, 116, 114,<br/></div><br/>Tags - <a href="http://agileblog.cn/tags/nicedayoffice.com/" rel="tag">nicedayoffice.com</a> , <a href="http://agileblog.cn/tags/%25E4%25B8%25AD%25E9%259B%2585%25E5%258A%259E%25E5%2585%25AC/" rel="tag">中雅办公</a> , <a href="http://agileblog.cn/tags/%25E9%2595%25BF%25E6%25B2%2599%25E5%25B8%2582%25E5%258A%259E%25E5%2585%25AC%25E7%2594%25A8%25E5%2593%2581/" rel="tag">长沙市办公用品</a> , <a href="http://agileblog.cn/tags/%25E5%258A%259E%25E5%2585%25AC%25E6%2596%2587%25E5%2585%25B7/" rel="tag">办公文具</a> , <a href="http://agileblog.cn/tags/%25E5%258A%259E%25E5%2585%25AC%25E8%2580%2597%25E6%259D%2590/" rel="tag">办公耗材</a> , <a href="http://agileblog.cn/tags/ecshop/" rel="tag">ecshop</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/JSP-object-scope/</link>
<title><![CDATA[JSP九大内置对象及四个作用域]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Java开发]]></category>
<pubDate>Thu, 20 May 2010 12:22:14 +0000</pubDate> 
<guid>http://agileblog.cn/JSP-object-scope/</guid> 
<description>
<![CDATA[ 
	九大对象：<br/>　　内置对象（又叫隐含对象，有9个内置对象）:不需要预先声明就可以在脚本代码和表达式中随意使用<br/>　　1-out:<br/>　　javax.servlet.jsp.JspWriter类型，代表输出流的对象。作用域为page（页面执行期）<br/>　　request：javax.servlet.ServletRequest的子类型，此对象封装了由WEB浏览器或其它客户端生成地HTTP<br/>　　请求的细节（参数，属性，头标和数据）。作用域为request(用户请求期）。<br/>　　方法由可查看API<br/>　　response：javax.servlet.ServletResponse的子类型，此对象封装了返回到HTTP客户端的输出，向页面<br/>　　作者提供设置响应头标和状态码的方式。经常用来设置HTTP标题，添加cookie，设置响应内容的类型和状<br/>　　态，发送HTTP重定向和编码URL。作用域为page（页面执行期）。<br/>　　pageContext：javax.servlet.jsp.PageContext（抽象类）类型，作用域为page（页面执行期）。此对象<br/>　　提供所有四个作用域层次的属性查询和修改能力，它也提供了转发请求到其它资源和包含其他资源的方法<br/>　　：<br/>　　该对象的方法都是抽象方法<br/>　　session：javax.servlet.http.HttpSession类型，主要用于跟踪对话。作用域session(会话期—）。<br/>　　HttpSession是一个类似哈希表的与单一WEB浏览器会话相关的对象，它存在于HTTP请求之间，可以存储任<br/>　　何类型的命名对象。<br/>　　如果不需要在请求之间跟踪会话对象，可以通过在page指令中指定session="false"<br/>　　需要记住的是pageContext对象也可以与session.getAttribute(),session.setAttribute()一样的方式取<br/>　　得并设置会话属性。<br/>　　application：javax.servlet.ServletContext类型，servlet的环境通过调用getServletConfig<br/>　　().getContext()方法获得。作用域是application(整个程序运行期）。它提供了关于服务器版本，应用<br/>　　级初始化参数和应用内资源绝对路径，注册信息的方式<br/>　　config：javax.servlet.ServletConfig,作用域为page（页面执行期）<br/>　　exception:java.lang.Throwable,通过JSP错误页面中一个catch块已经益出但没有捕获的<br/>　　java.lang.Throwable的任意实例，传向了errorPage的URI。作用域为page（页面执行期）。注意<br/>　　exception只有在page指令中具有属性isErrorPage="true"时才有效。<br/>　　page:java.lang.Object类型，指向页面自身的方式。作用域为page（页面执行期<br/>　　JSP中九大内置对象为：<br/>　　request&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;类型 javax.servlet.ServletRequest&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;作用域 Request<br/>　　response&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; 类型 javax.servlet.SrvletResponse&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 作用域&nbsp;&nbsp;Page<br/>　　pageContext&nbsp;&nbsp;&nbsp;&nbsp;页面上下文对象&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 类型 javax.servlet.jsp.PageContext&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;作用域&nbsp;&nbsp;&nbsp;&nbsp;Page<br/>　　session&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; 类型 javax.servlet.http.HttpSession&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 作用域&nbsp;&nbsp;&nbsp;&nbsp;Session<br/>　　application&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 应用程序对象&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;类型 javax.servlet.ServletContext&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;作用域&nbsp;&nbsp;&nbsp;&nbsp;Application<br/>　　out&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;&nbsp;&nbsp; 类型 javax.servlet.jsp.JspWriter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 作用域&nbsp;&nbsp;&nbsp;&nbsp;Page<br/>　　config&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;类型 javax.servlet.ServletConfig&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;作用域&nbsp;&nbsp;&nbsp;&nbsp;Page<br/>　　page&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;类型 javax.lang.Object&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;Page<br/>　　exception&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;例外对象&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 类型 javax.lang.Throwable&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 作用域&nbsp;&nbsp;&nbsp;&nbsp;page<br/>　　request 对象代表的是来自客户端的请求，例如我们在FORM表单中填写的信息等，是最常用的对象<br/>　　常用的方法有：getParameter、getParameterNames 和getParameterValues 通过调用这几个方法来获取请求对象中所包含的参数的值。<br/>　　response 对象代表的是对客户端的响应，也就是说可以通过response 对象来组织发送到客户端的数据。但是由于组织方式比较底层，所以不建议普通读者使用，需要向客户端发送文字时直接使用<br/>　　pageContext 对象直译时可以称作“页面上下文”对象，代表的是当前页面运行的一些属性<br/>　　常用的方法有 ：findAttribute、getAttribute、getAttributesScope 和getAttributeNamesInScope<br/>　　一般情况下pageContext对象用到得也不是很多，只有在项目所面临的情况比较复杂的情况下，才会利用到页面属性来辅助处理。<br/>　　session&nbsp;&nbsp;&nbsp;&nbsp;对象代表服务器与客户端所建立的会话，当需要在不同的JSP页面中保留客户信息的情况下使用，比如在线购物、客户轨迹跟踪等。“session” 对象建立在cookie的基础上，所以使用时应注意判断一下客户端是否打开了cookie。常用的方法包括getId、 getValue、 getValueNames和putValue等。<br/>　　概要<br/>　　HTTP是无状态（stateless）协议；<br/>　　Web Server 对每一个客户端请求都没有历史记忆；<br/>　　Session用来保存客户端状态信息；<br/>　　由Web Server 写入；<br/>　　存于客户端；<br/>　　客户端的每次访问都把上次的session记录传递给Web Server；<br/>　　Web Server读取客户端提交的session来获取客户端的状态信息<br/>　　application 对象负责提供应用程序在服务器中运行时的一些全局信息，常用的方法有getMimeType和getRealPath等。<br/>　　out 对象代表了向客户端发送数据的对象，与“response” 对象不同，通过“out” 对象发送的内容将是浏览器需要显示的内容，是文本一级的，可以通过“out” 对象直接向客户端写一个由程序动态生成HTML文件。常用的方法除了pirnt和println之外，还包括clear、clearBuffer、 flush、getBufferSize和getRemaining，这是因为“out” 对象内部包含了一个缓冲区，所以需要一些对缓冲区进行操作的方法<br/>　　“config” 对象提供一些配置信息，常用的方法有getInitParameter和getInitParameterNames，以获得Servlet初始化时的参数。<br/>　　“page” 对象代表了正在运行的由JSP文件产生的类对象，不建议一般读者使用。<br/>　　“exception” 对象则代表了JSP文件运行时所产生的例外对象，此对象不能在一般JSP文件中直接使用，而只能在使用了“<%@ page isErrorPage="true "%>”的JSP文件中四个作用域：<br/>　　何为作用域<br/>　　先让我们看看效果：<br/>　　大概流程是这样的，我们访问04-01/index.jsp的时候，分别对pageContext, request, session,<br/>　　application四个作用域中的变量进行累加。（当然先判断这个变量是不是存在，如果变量不存在，则要<br/>　　把变量初始化成1。）计算完成后就从index.jsp执行forward跳转到test.jsp。在test.jsp里再进行一次<br/>　　累加，然后显示出这四个整数来。<br/>　　从显示的结果来看，我们可以直观的得出结论：<br/>　　page里的变量没法从index.jsp传递到test.jsp。只要页面跳转了，它们就不见了。<br/>　　request里的变量可以跨越forward前后的两页。但是只要刷新页面，它们就重新计算了。<br/>　　session和application里的变量一直在累加，开始还看不出区别，只要关闭浏览器，再次重启浏览器访问<br/>　　这页，session里的变量就重新计算了。<br/>　　application里的变量一直在累加，除非你重启tomcat，否则它会一直变大。<br/>　　而作用域规定的是变量的有效期限。<br/>　　如果把变量放到pageContext里，就说明它的作用域是page，它的有效范围只在当前jsp页面里。<br/>　　从把变量放到pageContext开始，到jsp页面结束，你都可以使用这个变量。<br/>　　如果把变量放到request里，就说明它的作用域是request，它的有效范围是当前请求周期。<br/>　　所谓请求周期，就是指从http请求发起，到服务器处理结束，返回响应的整个过程。在这个过程中可能使<br/>　　用forward的方式跳转了多个jsp页面，在这些页面里你都可以使用这个变量。<br/>　　如果把变量放到session里，就说明它的作用域是session，它的有效范围是当前会话。<br/>　　所谓当前会话，就是指从用户打开浏览器开始，到用户关闭浏览器这中间的过程。这个过程可能包含多个<br/>　　请求响应。也就是说，只要用户不关浏览器，服务器就有办法知道这些请求是一个人发起的，整个过程被<br/>　　称为一个会话（session），而放到会话中的变量，就可以在当前会话的所有请求里使用。<br/>　　如果把变量放到application里，就说明它的作用域是application，它的有效范围是整个应用。<br/>　　整个应用是指从应用启动，到应用结束。我们没有说“从服务器启动，到服务器关闭”，是因为一个服务<br/>　　器可能部署多个应用，当然你关闭了服务器，就会把上面所有的应用都关闭了。<br/>　　application作用域里的变量，它们的存活时间是最长的，如果不进行手工删除，它们就一直可以使用。<br/>　　与上述三个不同的是，application里的变量可以被所有用户共用。如果用户甲的操作修改了application<br/>　　中的变量，用户乙访问时得到的是修改后的值。这在其他scope中都是不会发生的，page, request,<br/>　　session都是完全隔离的，无论如何修改都不会影响其他人的数据。<br/>　　我们使用public Object getAttribute(String name)获得变量值，使用public void setAttribute<br/>　　(String name, Object value)将变量值保存到对应作用域中。举个pageContext的例子就是：<br/>　　// page<br/>　　Integer countPage = (Integer) pageContext.getAttribute("countPage");<br/>　　if (countPage == null) &#123;<br/>　　pageContext.setAttribute("countPage", 1);<br/>　　&#125; else &#123;<br/>　　pageContext.setAttribute("countPage", countPage + 1);<br/>　　&#125;<br/>　　这里先从pageContext中取出名为countPage的整数，因为返回的都是java.lang.Object类型，所以需要强<br/>　　制转换成我们需要的整形。这里取得的变量如果不存在就会返回null，通过判断countPage == null来辨<br/>　　别变量是否存在，如果不存在就设置为1，如果存在就进行累加，最后使用setAttribute()方法将修改后<br/>　　的变量值放入pageContext。<br/>　　将其中的pageContext换成request, session, application就可以操作其他三个作用域中的变量。<br/>Tags - <a href="http://agileblog.cn/tags/jsp/" rel="tag">jsp</a> , <a href="http://agileblog.cn/tags/%25E4%25B9%259D%25E5%25A4%25A7%25E5%2586%2585%25E7%25BD%25AE%25E5%25AF%25B9%25E8%25B1%25A1/" rel="tag">九大内置对象</a> , <a href="http://agileblog.cn/tags/%25E5%259B%259B%25E4%25B8%25AA%25E4%25BD%259C%25E7%2594%25A8%25E5%259F%259F/" rel="tag">四个作用域</a> , <a href="http://agileblog.cn/tags/java/" rel="tag">java</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Query-Cache-Principle/</link>
<title><![CDATA[Query Cache原理]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[MYSQL]]></category>
<pubDate>Mon, 17 May 2010 14:11:43 +0000</pubDate> 
<guid>http://agileblog.cn/Query-Cache-Principle/</guid> 
<description>
<![CDATA[ 
	QueryCache(下面简称QC)是根据SQL语句来cache的。一个SQL查询如果以select开头，那么MySQL服务器将尝试对其使用QC。每个Cache都是以SQL文本作为key来存的。<br/>原理 <br/>QueryCache(下面简称QC)是根据SQL语句来cache的。一个SQL查询如果以select开头，那么MySQL服务器将尝试对其使用QC。每个Cache都是以SQL文本作为key来存的。在应用QC之前，SQL文本不会被作任何处理。也就是说，两个SQL语句，只要相差哪怕是一个字符（例如大小写不一样；多一个空格等），那么这两个SQL将使用不同的一个CACHE。 <br/>不过SQL文本有可能会被客户端做一些处理。例如在官方的命令行客户端里，在发送SQL给服务器之前，会做如下处理： <br/><br/>过滤所有注释 <br/>去掉SQL文本前后的空格,TAB等字符。注意，是文本前面和后面的。中间的不会被去掉。 <br/><br/>下面的三条SQL里，因为SELECT大小写的关系，最后一条和其他两条在QC里肯定是用的不一样的存储位置。而第一条和第二条，区别在于后者有个注释，在不同客户端，会有不一样的结果。所以，保险起见，请尽量不要使用动态的注释。在PHP的mysql扩展里，SQL的注释是不会被去掉的。也就是三条SQL会被存储在三个不同的缓存里，虽然它们的结果都是一样的。 <br/><br/>select * FROM people where name='surfchen'; <br/>select * FROM people where /*hey~*/name='surfchen'; <br/>SELECT * FROM people where name='surfchen'; <br/>目前只有select语句会被cache，其他类似show,use的语句则不会被cache。 <br/><br/>因为QC是如此前端，如此简单的一个缓存系统，所以如果一个表被更新，那么和这个表相关的SQL的所有QC都会被失效。假设一个联合查询里涉及到了表A和表B，如果表A或者表B的其中一个被更新（update或者delete），这个查询的QC将会失效。 <br/><br/>也就是说，如果一个表被频繁更新，那么就要考虑清楚究竟是否应该对相关的一些SQL进行QC了。一个被频繁更新的表如果被应用了QC，可能会加重数据库的负担，而不是减轻负担。我一般的做法是默认打开QC，而对一些涉及频繁更新的表的SQL语句加上SQL_NO_CACHE关键词来对其禁用CACHE。这样可以尽可能避免不必要的内存操作，尽可能保持内存的连续性。 <br/><br/>那些查询很分散的SQL语句，也不应该使用QC。例如用来查询用户和密码的语句——“select pass from user where name='surfchen'”。这样的语句，在一个系统里，很有可能只在一个用户登陆的时候被使用。每个用户的登陆所用到的查询，都是不一样的SQL文本，QC在这里就几乎不起作用了，因为缓存的数据几乎是不会被用到的，它们只会在内存里占地方。 <br/><br/>存储块 <br/>在本节里“存储块”和“block”是同一个意思 <br/>QC缓存一个查询结果的时候，一般情况下不是一次性地分配足够多的内存来缓存结果的。而是在查询结果获得的过程中，逐块存储。当一个存储块被填满之后，一个新的存储块将会被创建，并分配内存（allocate）。单个存储块的内存分配大小通过query_cache_min_res_unit参数控制，默认为4KB。最后一个存储块，如果不能被全部利用，那么没使用的内存将会被释放。如果被缓存的结果很大，那么会可能会导致分配内存操作太频繁，系统系能也随之下降；而如果被缓存的结果都很小，那么可能会导致内存碎片过多，这些碎片如果太小，就很有可能不能再被分配使用。 <br/><br/>除了查询结果需要存储块之外，每个SQL文本也需要一个存储块，而涉及到的表也需要一个存储块（表的存储块是所有线程共享的，每个表只需要一个存储块）。存储块总数量=查询结果数量*2+涉及的数据库表数量。也就是说，第一个缓存生成的时候，至少需要三个存储块：表信息存储块，SQL文本存储块，查询结果存储块。而第二个查询如果用的是同一个表，那么最少只需要两个存储块：SQL文本存储块，查询结果存储块。 <br/><br/>通过观察Qcache_queries_in_cache和Qcache_total_blocks可以知道平均每个缓存结果占用的存储块。它们的比例如果接近1:2，则说明当前的query_cache_min_res_unit参数已经足够大了。如果Qcache_total_blocks比Qcache_queries_in_cache多很多，则需要增加query_cache_min_res_unit的大小。 <br/><br/>Qcache_queries_in_cache*query_cache_min_res_unit（sql文本和表信息所在的block占用的内存很小，可以忽略）如果远远大于query_cache_size-Qcache_free_memory，那么可以尝试减小query_cache_min_res_unit的值。 <br/><br/>调整大小 <br/>如果Qcache_lowmem_prunes增长迅速，意味着很多缓存因为内存不够而被释放，而不是因为相关表被更新。尝试加大query_cache_size，尽量使Qcache_lowmem_prunes零增长。 <br/>启动参数 <br/>show variables like 'query_cache%'可以看到这些信息。 <br/>query_cache_limit:如果单个查询结果大于这个值，则不Cache <br/>query_cache_size:分配给QC的内存。如果设为0，则相当于禁用QC。要注意QC必须使用大约40KB来存储它的结构，如果设定小于40KB,则相当于禁用QC。QC存储的最小单位是1024 byte，所以如果你设定了一个不是1024的倍数的值，这个值会被四舍五入到最接近当前值的等于1024的倍数的值。 <br/>query_cache_type:0 完全禁止QC，不受SQL语句控制（另外可能要注意的是，即使这里禁用，上面一个参数所设定的内存大小还是会被分配）；1启用QC，可以在SQL语句使用SQL_NO_CACHE禁用；2可以在SQL语句使用SQL_CACHE启用。 <br/>query_cache_min_res_unit:每次给QC结果分配内存的大小 <br/>状态 <br/>show status like 'Qcache%'可以看到这些信息。 <br/>Qcache_free_blocks:当一个表被更新之后，和它相关的cache blocks将被free。但是这个block依然可能存在队列中，除非是在队列的尾部。这些blocks将会被统计到这个值来。可以用FLUSH QUERY CACHE语句来清空free blocks。 <br/>Qcache_free_memory:可用内存，如果很小，考虑增加query_cache_size <br/>Qcache_hits:自mysql进程启动起，cache的命中数量 <br/>Qcache_inserts:自mysql进程启动起，被增加进QC的数量 <br/>Qcache_lowmem_prunes:由于内存过少而导致QC被删除的条数。加大query_cache_size，尽可能保持这个值0增长。 <br/>Qcache_not_cached:自mysql进程启动起，没有被cache的只读查询数量（包括select,show,use,desc等） <br/>Qcache_queries_in_cache:当前被cache的SQL数量 <br/>Qcache_total_blocks:在QC中的blocks数。一个query可能被多个blocks存储，而这几个blocks中的最后一个，未用满的内存将会被释放掉。例如一个QC结果要占6KB内存，如果query_cache_min_res_unit是4KB，则最后将会生成3个blocks，第一个block用来存储sql语句文本，这个不会被统计到query+cache_size里，第二个block为4KB，第三个block为2KB（先allocate4KB，然后释放多余的2KB）。每个表，当第一个和它有关的SQL查询被CACHE的时候，会使用一个block来存储表信息。也就是说，block会被用在三处地方：表信息，SQL文本，查询结果。 <br/>详细出处参考：<a href="http://www.jb51.net/article/15179.htm" target="_blank">http://www.jb51.net/article/15179.htm</a><br/>Tags - <a href="http://agileblog.cn/tags/query/" rel="tag">query</a> , <a href="http://agileblog.cn/tags/cache/" rel="tag">cache</a> , <a href="http://agileblog.cn/tags/mysql/" rel="tag">mysql</a> , <a href="http://agileblog.cn/tags/%25E9%25AB%2598%25E9%2580%259F%25E7%25BC%2593%25E5%25AD%2598/" rel="tag">高速缓存</a> , <a href="http://agileblog.cn/tags/%25E6%2595%25B0%25E6%258D%25AE%25E5%25BA%2593/" rel="tag">数据库</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/window-Vista-Business-language/</link>
<title><![CDATA[windowVistaBusiness安装多语言工具]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Windows]]></category>
<pubDate>Sun, 16 May 2010 13:39:00 +0000</pubDate> 
<guid>http://agileblog.cn/window-Vista-Business-language/</guid> 
<description>
<![CDATA[ 
	最近找了款軟件可以把繫統更換成任何一國傢的預言界麵<br/>有需要的朋友來試試<br/><br/>用法：<br/><br/>1.下载<a href="http://www.froggie.sk/download/Vistalizator_1.36.zip]Vistalizator">点击这里下载文件</a><br/>2.下载想要装的语言包（请用 计算机-属性 确认自己的Vista版本，简体中文在连接里有选）<br/><a href="http://www.froggie.sk/lp_rtm_32.html" target="_blank">32-bit Vista RTM</a><br/><a href="http://www.froggie.sk/lp_sp1_32.html" target="_blank">32-bit Vista SP1</a><br/><a href="http://www.froggie.sk/lp_rtm_64.html" target="_blank">64-bit Vista RTM</a><br/><a href="http://www.froggie.sk/lp_sp1_64.html" target="_blank">64-bit Vista SP1</a><br/>3.解压缩Vistalizator到某地方并运行<br/>4.点左上角的“Add Language”然后选择刚刚下载的语言包文件 (选择后需要等一小下)<br/>5.点Install即可<br/>6.重新启动后就能看到崭新的中文操作界面了<br/><br/>*如果要换回英文，或者换到其他语言，打开程序，在下拉列表里选择装过的语言，点“Change Language”就Ok了。<br/>Tags - <a href="http://agileblog.cn/tags/window/" rel="tag">window</a> , <a href="http://agileblog.cn/tags/vista/" rel="tag">vista</a> , <a href="http://agileblog.cn/tags/business/" rel="tag">business</a> , <a href="http://agileblog.cn/tags/%25E8%25AF%25AD%25E8%25A8%2580%25E5%2588%2587%25E6%258D%25A2/" rel="tag">语言切换</a> , <a href="http://agileblog.cn/tags/%25E5%25B7%25A5%25E5%2585%25B7/" rel="tag">工具</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/windows-Vista-language-Package-download/</link>
<title><![CDATA[windows vista 语言包下载地址]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[软件工具]]></category>
<pubDate>Sun, 16 May 2010 12:08:05 +0000</pubDate> 
<guid>http://agileblog.cn/windows-Vista-language-Package-download/</guid> 
<description>
<![CDATA[ 
	突然间想下载一个操作系统的语言包，主要是想下载日文语言包。毕竟对于日语的操作系统还没玩过，要是专门去装一个日文版的操作系统的话，可能还没有那个水平，使用过程中也有很大的问题，所以在现有的基础上安装日语语言包，可以轻送切换到中文和日文。<br/>以下是各种语言包的下载地址：<br/>32位：<br/><br/>简体中文：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://download.windowsupdate.com/msdownload/update/software/updt/2009/06/lp-zh-cn_8926a1895c8b071557e5a2f86085ec518624e10b.exe">点击这里下载文件</a><br/>繁体中文(香港)： <a href="http://download.windowsupdate.com/msdownload/update/software/updt/2009/06/lp-zh-hk_4369ca586419afae78f85c3f053efd4fab9d3e50.exe">点击这里下载文件</a><br/>日语：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://download.windowsupdate.com/msdownload/update/software/updt/2009/06/lp-ja-jp_30178fcc94adb29cad5a14b535efeb555ab39e0b.exe">点击这里下载文件</a><br/>韩语：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://download.windowsupdate.com/msdownload/update/software/updt/2009/06/lp-ko-kr_46f0d34468f897ec8669d02849e8ffcead6554b9.exe">点击这里下载文件</a><br/>英文： <a href="http://download.windowsupdate.com/msdownload/update/software/updt/2009/06/lp-en-us_0fdcd67c8bab347e756310dcf2229c9e030270c2.exe">点击这里下载文件</a><br/><br/><br/>64位：<br/><br/>简体中文：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://download.windowsupdate.com/msdownload/update/software/updt/2009/06/lp-zh-cn_3ca6c8279a780a6a5de332b5a7c7315321656742.exe">点击这里下载文件</a><br/>繁体中文(香港)：<a href="http://download.windowsupdate.com/msdownload/update/software/updt/2009/06/lp-zh-hk_0b1b29a105470f2fe95e8925ad091bb218209643.exe">点击这里下载文件</a><br/>日语：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://download.windowsupdate.com/msdownload/update/software/updt/2009/06/lp-ja-jp_b5c738909d89874df55d3bbca1e09a37eb7a5485.exe">点击这里下载文件</a><br/>韩语：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://download.windowsupdate.com/msdownload/update/software/updt/2009/06/lp-ko-kr_faf266897b3ed22756d1751f25f2ff6374194b67.exe">点击这里下载文件</a><br/>Tags - <a href="http://agileblog.cn/tags/windows/" rel="tag">windows</a> , <a href="http://agileblog.cn/tags/vista/" rel="tag">vista</a> , <a href="http://agileblog.cn/tags/%25E8%25AF%25AD%25E8%25A8%2580%25E5%258C%2585/" rel="tag">语言包</a> , <a href="http://agileblog.cn/tags/%25E4%25B8%258B%25E8%25BD%25BD/" rel="tag">下载</a> , <a href="http://agileblog.cn/tags/%25E7%25AE%2580%25E4%25BD%2593%25E4%25B8%25AD%25E6%2596%2587/" rel="tag">简体中文</a> , <a href="http://agileblog.cn/tags/%25E7%25B9%2581%25E4%25BD%2593%25E4%25B8%25AD%25E6%2596%2587/" rel="tag">繁体中文</a> , <a href="http://agileblog.cn/tags/%25E6%2597%25A5%25E8%25AF%25AD/" rel="tag">日语</a> , <a href="http://agileblog.cn/tags/%25E9%259F%25A9%25E8%25AF%25AD/" rel="tag">韩语</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/kas11-0-0-232Verson-download/</link>
<title><![CDATA[卡巴斯基2011RC版本下载--多语言下载]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[软件工具]]></category>
<pubDate>Sat, 15 May 2010 01:40:46 +0000</pubDate> 
<guid>http://agileblog.cn/kas11-0-0-232Verson-download/</guid> 
<description>
<![CDATA[ 
	一大早跑到卡巴365去兑换激活码，最近下载了英文版的卡巴斯基，没想到拿自己之前的激活码却激活不了，大概是中国地区买的卡巴斯基只能使用中文版的卡巴斯基吧！这个问题还得问一下卡巴斯基的客服才知道。在兑换激活码的同时，逛了一下卡巴斯基中文论坛。发现卡巴斯基2011的RC版本都已经发布很多天了。很不幸的是还没有中文版，不过等到2011正式版发布的时候，我想中文版的2011正式版的也会有的。<br/>目前能下载到的RC版本中只有俄语、英语、法语、德语<br/>以下是下载地址：<br/>德语下载地址：<br/><a href="http://81.176.69.68/devbuilds/11.0.0.232/kav11.0.0.232de.exe">点击这里下载文件</a><br/><a href="http://81.176.69.68/devbuilds/11.0.0.232/kis11.0.0.232de.exe">点击这里下载文件</a><br/>法语下载地址：<br/><a href="http://81.176.69.68/devbuilds/11.0.0.232/kav11.0.0.232fr.exe">点击这里下载文件</a><br/><a href="http://81.176.69.68/devbuilds/11.0.0.232/kis11.0.0.232fr.exe">点击这里下载文件</a><br/>俄语下载地址：<br/><a href="http://81.176.69.68/devbuilds/11.0.0.232/kav11.0.0.232ru.exe">点击这里下载文件</a><br/><a href="http://81.176.69.68/devbuilds/11.0.0.232/kis11.0.0.232ru.exe">点击这里下载文件</a><br/>英文下载地址：<br/><a href="http://81.176.69.68/devbuilds/11.0.0.232/kav11.0.0.232en.exe">点击这里下载文件</a><br/><a href="http://81.176.69.68/devbuilds/11.0.0.232/kis11.0.0.232en.exe">点击这里下载文件</a><br/>Tags - <a href="http://agileblog.cn/tags/%25E5%258D%25A1%25E5%25B7%25B4%25E6%2596%25AF%25E5%259F%25BA2011/" rel="tag">卡巴斯基2011</a> , <a href="http://agileblog.cn/tags/%25E4%25B8%258B%25E8%25BD%25BD%25E5%259C%25B0%25E5%259D%2580/" rel="tag">下载地址</a> , <a href="http://agileblog.cn/tags/%25E5%25A4%259A%25E8%25AF%25AD%25E8%25A8%2580%25E7%2589%2588%25E6%259C%25AC/" rel="tag">多语言版本</a> , <a href="http://agileblog.cn/tags/%25E6%25BF%2580%25E6%25B4%25BB%25E7%25A0%2581/" rel="tag">激活码</a> , <a href="http://agileblog.cn/tags/%25E6%259D%2580%25E6%25AF%2592%25E8%25BD%25AF%25E4%25BB%25B6/" rel="tag">杀毒软件</a> , <a href="http://agileblog.cn/tags/%25E8%258B%25B1%25E6%2596%2587%25E7%2589%2588/" rel="tag">英文版</a> , <a href="http://agileblog.cn/tags/%25E5%25BE%25B7%25E8%25AF%25AD%25E7%2589%2588/" rel="tag">德语版</a> , <a href="http://agileblog.cn/tags/%25E6%25B3%2595%25E6%2596%2587%25E7%2589%2588/" rel="tag">法文版</a> , <a href="http://agileblog.cn/tags/%25E4%25BF%2584%25E6%2596%2587%25E7%2589%2588/" rel="tag">俄文版</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/slf4fx-Plugins-Download/</link>
<title><![CDATA[Flex开发下的日志插件slf4fx]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[flex开发]]></category>
<pubDate>Fri, 14 May 2010 02:01:20 +0000</pubDate> 
<guid>http://agileblog.cn/slf4fx-Plugins-Download/</guid> 
<description>
<![CDATA[ 
	slf4fx是。一个集成开源Flex 3的日志API套件与Java的日志框架。<br/>可以用来配合Java+FLex开发。<br/>以下是下载地址：<br/><a href="http://slf4fx.googlecode.com/files/slf4fx-1.11-bin.zip">点击这里下载文件</a><br/>Tags - <a href="http://agileblog.cn/tags/slf4fx/" rel="tag">slf4fx</a> , <a href="http://agileblog.cn/tags/flex/" rel="tag">flex</a> , <a href="http://agileblog.cn/tags/%25E6%258F%2592%25E4%25BB%25B6/" rel="tag">插件</a> , <a href="http://agileblog.cn/tags/%25E4%25B8%258B%25E8%25BD%25BD/" rel="tag">下载</a> , <a href="http://agileblog.cn/tags/%25E6%2597%25A5%25E5%25BF%2597%25E8%25AE%25B0%25E5%25BD%2595/" rel="tag">日志记录</a> , <a href="http://agileblog.cn/tags/%25E6%25A1%2586%25E6%259E%25B6/" rel="tag">框架</a> , <a href="http://agileblog.cn/tags/flexapi/" rel="tag">flexapi</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Add-vmware-NIC/</link>
<title><![CDATA[VMware下添加多块网卡的问题]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[网络安全]]></category>
<pubDate>Wed, 12 May 2010 00:57:54 +0000</pubDate> 
<guid>http://agileblog.cn/Add-vmware-NIC/</guid> 
<description>
<![CDATA[ 
	在看网络视频教程的时候，看到安装的虚拟主机里面有几块网卡，自己也安装了虚拟主机，但是默认每次都只有一块网卡，所以对此到互联网查了一下。<br/>原来很简单，只需要在<div class="code">Edit virtual machine settings</div>选项里面的Hardware选项卡里面有一个Add按钮，只需在点击Add按钮，即可选择你要添加的虚拟硬件。<br/>这样就解决了我们的需要。<br/>具体的操作如下图：<br/><a href="http://agileblog.cn/attachment.php?fid=128" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=128" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://agileblog.cn/attachment.php?fid=129" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=129" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://agileblog.cn/attachment.php?fid=130" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=130" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://agileblog.cn/attachment.php?fid=131" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=131" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://agileblog.cn/attachment.php?fid=132" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=132" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><a href="http://agileblog.cn/attachment.php?fid=133" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=133" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>Tags - <a href="http://agileblog.cn/tags/add/" rel="tag">add</a> , <a href="http://agileblog.cn/tags/vmware/" rel="tag">vmware</a> , <a href="http://agileblog.cn/tags/nic/" rel="tag">nic</a> , <a href="http://agileblog.cn/tags/%25E8%2599%259A%25E6%258B%259F%25E4%25B8%25BB%25E6%259C%25BA/" rel="tag">虚拟主机</a> , <a href="http://agileblog.cn/tags/%25E6%25B7%25BB%25E5%258A%25A0%25E8%2599%259A%25E6%258B%259F%25E7%25BD%2591%25E5%258D%25A1/" rel="tag">添加虚拟网卡</a> , <a href="http://agileblog.cn/tags/windows2003/" rel="tag">windows2003</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/163mail-setting/</link>
<title><![CDATA[网易域名邮箱客户端设置]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[软件工具]]></category>
<pubDate>Tue, 11 May 2010 07:47:47 +0000</pubDate> 
<guid>http://agileblog.cn/163mail-setting/</guid> 
<description>
<![CDATA[ 
	下载了一个网易的闪电邮，自己也把域名邮箱转移到了网易的域名邮箱。在国内来说，邮箱做得最好的还是属于网易了。这是众所周知的。<br/>以下是用闪电邮的设置<br/><div class="code"><br/>您可以通过电脑客户端软件更好地收发邮件，服务器地址：<br/>　　POP3：pop.ym.163.com　　&nbsp;&nbsp;默认端口为：110<br/>　　SMTP：smtp.ym.163.com　　默认端口为：25<br/></div><br/>以下是我的邮件客户端的配置<br/><a href="http://agileblog.cn/attachment.php?fid=127" target="_blank"><img src="http://agileblog.cn/attachment.php?fid=127" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>Tags - <a href="http://agileblog.cn/tags/%25E5%259F%259F%25E5%2590%258D%25E9%2582%25AE%25E7%25AE%25B1/" rel="tag">域名邮箱</a> , <a href="http://agileblog.cn/tags/%25E5%25AE%25A2%25E6%2588%25B7%25E7%25AB%25AF/" rel="tag">客户端</a> , <a href="http://agileblog.cn/tags/%25E9%2585%258D%25E7%25BD%25AE/" rel="tag">配置</a> , <a href="http://agileblog.cn/tags/%25E7%25BD%2591%25E6%2598%2593%25E9%2597%25AA%25E7%2594%25B5%25E9%2582%25AE/" rel="tag">网易闪电邮</a> , <a href="http://agileblog.cn/tags/%25E5%2586%25B0%25E7%2582%25B9%25E9%2598%25B3%25E5%2585%2589%25E5%25B7%25A5%25E4%25BD%259C%25E5%25AE%25A4/" rel="tag">冰点阳光工作室</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Poser-2010-key/</link>
<title><![CDATA[Poser 2010 激活码]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[软件工具]]></category>
<pubDate>Thu, 06 May 2010 14:06:10 +0000</pubDate> 
<guid>http://agileblog.cn/Poser-2010-key/</guid> 
<description>
<![CDATA[ 
	之前下载了一个名为Poser 2010 的软件，这个软件是用来设计任务造型的软件，对于我来说，没有多大用处，毕竟自己不是搞这一方面的，今天由于学校的客户端的问题，导致自己重新安装系统。安装系统之后，便是安装软件的过程，无意间看到自己之前下载的这个软件，便安装了一下，整个安装过程是非常的长啊。大概需要20多分钟，这个时间，我可以重新安装一次系统了。安装完之后便启动该软件，谁知，需要序列号，该软件需要注册的。到网上找了一下，结果发现都是国外的一些下载站点，下载还需要钱。但是那些并不是激活码，而是软件而已。自己寻找了一段时间，终于发现原来，激活码就在下载的软件的一个文件夹里面。打开一个文本文件，里面就是激活码具体的文件在下载的文件的CYGi<div class="code">Smith_Micro_Poser_Pro_2010_v8.0-CYGiSO--------------------------------------Poser Pro&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: XP20CCD-0001-00AQ-ZAS0-000D-JAC8Queue Manager&nbsp;&nbsp;: QM20CCD-9999-00AD-HTP0-100N-BBP0Cinema4D&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : PC20CCD-0001-00AT-KVY0-600C-YFA2Maya&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : PM20CCD-0001-00BH-MBC0-200V-XUU4Max&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: PX20CCD-0001-00AW-RTB0-800U-UXT4Of course unselect &#039;Submit Registration Online&#039; and block the App with firewallEnjoy, Team CYGiSO</div><br/>Tags - <a href="http://agileblog.cn/tags/poser-2010-key/" rel="tag">poser-2010-key</a> , <a href="http://agileblog.cn/tags/%25E4%25BA%25BA%25E7%2589%25A9%25E9%2580%25A0%25E5%259E%258B%25E8%25AE%25BE%25E8%25AE%25A1%25E8%25BD%25AF%25E4%25BB%25B6/" rel="tag">人物造型设计软件</a> , <a href="http://agileblog.cn/tags/%25E6%25BF%2580%25E6%25B4%25BB%25E7%25A0%2581/" rel="tag">激活码</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/cmd-color-command/</link>
<title><![CDATA[cmd设置背景]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[操作系统]]></category>
<pubDate>Tue, 04 May 2010 13:11:20 +0000</pubDate> 
<guid>http://agileblog.cn/cmd-color-command/</guid> 
<description>
<![CDATA[ 
	在Windows平台，我们可以使用cmd命令来操作一些基本的的命令。<br/>默认的颜色是黑色的背景，白色的字体颜色。<br/>我们通常需要切换过来。<br/>使用以下命令即可<br/><div class="code"><br/>cmd<br/> color f1;<br/></div><br/>我们也可以直接敲一个color就可以显示默认的颜色。<br/>自定义输入color fc即可查看其它的颜色。<br/><br/>Tags - <a href="http://agileblog.cn/tags/cmd%25E8%25AE%25BE%25E7%25BD%25AE/" rel="tag">cmd设置</a> , <a href="http://agileblog.cn/tags/%25E8%2583%258C%25E6%2599%25AF/" rel="tag">背景</a> , <a href="http://agileblog.cn/tags/%25E5%25AD%2597%25E4%25BD%2593%25E9%25A2%259C%25E8%2589%25B2/" rel="tag">字体颜色</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Php-Running-Windows-Abuse/</link>
<title><![CDATA[PHP运行到Windows上的几个弊端]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Tue, 04 May 2010 07:49:18 +0000</pubDate> 
<guid>http://agileblog.cn/Php-Running-Windows-Abuse/</guid> 
<description>
<![CDATA[ 
	PHP是Linux的原生服务，运行到Windows上究竟有什么不好呢？<br/><br/>尽管PHP是一个多平台语言,在Windows上运行PHP还是一个挑战。这是因为PHP是基于UNIX平台开发的，每个请求由一个不同的进程来处理。然 而在Windows平台下面,同一类型的请求是由同一进程的不同线程来处理的。这个区别意味运行着PHP的IIS的频繁崩溃。进一步来说,对这一问题的唯 一的解决方案就是把PHP运行在外部方式下(CGI)。最终导致PHP性能的降低。关键问题还是以下几点：<br/><br/>多线程:<br/>PHP原生为多处理器环境(APACHE)，因此最常用于LAMP (Linux, Apache, MySQL, PHP) 平台。windows的工作方式不同，web服务器，不管是iis还是apache都是多线程运行，即一个处理器上跑所有客户请求。为了使php在 多线服务器上跑的好，必须考虑线程安全的问题。如果线程安全处理失败，会导致php运行不稳定是当然的，同时是iis或apache崩溃的情况也经常发 生。还有更糟糕，一个崩溃的线程会导致整个web服务器挂掉，这也是为什么iis进程池会频繁的崩溃。相对于多进程环境，就算一个进程崩溃又有什么关系， 第web 服务器没有影响，下一个请求来的时候自动唤醒一个新的进程就可以了，就跟没发生过一样。时至今日，唯一防止php在windows上崩溃的做法还是把 php设置为外部CGI，但会比ISAPI慢很多。<br/><br/>CGI:<br/>CGI表示 “通用网关接口”。CGI是一个联接平台，用于web服务器和web应用程序之前的对话连接，PHP就是CGI。CGI按照web服务器的应用标准被创 建，接口的好处是简单，更重要是和开发语言无关，而且相互直接是隔离的。这种隔离方式有效的阻止了崩溃程序错误引起的web服务器崩溃。要知道2003 sp2之前的asp程序错误会异常频繁引起整个web服务器崩溃，可想而知当时的主机商是生活在地狱中一样。CGI并都是好处，显著地缺点是-严重的拖慢 服务器性能。CGI 机制本身就包含了巨大的系统开销，为一个新的请求生成PHP进程的初始化工作最终导致了极端的性能地下，一个新进程的生成需要的内存分配和代码载入对于每 次http请求都要重复一次，而且请求结束后还会清理掉，对操作系统来说是严重的拖累。<br/><br/>本地web服务器模块：<br/>为了解决CGI的性能问题，web服务器提供商会提供为web服务器提供API。知名的API包括netscape的NSAPI和MS的ISAPI. 这些API支持PHP跑在几个服务进程里面，每个处理进程处理一组请求，而不是一个，这样做能节约进程初始化的过多开销。API运行在单个处理器上，但不 是多线程的服务器。当部分PHP被修改成线程安全的，那线程安全版本绝不会比多进程版更稳定和高效。一个php中的一个小错，不管来自于一个模块调用，或 第三方库，都可能导致线程挂掉，并传播到整个服务器线程导致web 服务器停止。这点从IIS的进程池监控可以看出来，在LInux上并不需要这个监管程序。为此，在windows上使用本地服务模块或插件，不管是 apache还是iis，都被证明是不具备大规模的应用价值，常常会不可预期的出现崩溃，即使使用ISAPI模式。<br/><br/>Tags - <a href="http://agileblog.cn/tags/php/" rel="tag">php</a> , <a href="http://agileblog.cn/tags/windows/" rel="tag">windows</a> , <a href="http://agileblog.cn/tags/%25E5%25BC%258A%25E7%25AB%25AF/" rel="tag">弊端</a> , <a href="http://agileblog.cn/tags/iis/" rel="tag">iis</a> , <a href="http://agileblog.cn/tags/cgi/" rel="tag">cgi</a> , <a href="http://agileblog.cn/tags/linux/" rel="tag">linux</a> , <a href="http://agileblog.cn/tags/isapi/" rel="tag">isapi</a> , <a href="http://agileblog.cn/tags/apache/" rel="tag">apache</a> , <a href="http://agileblog.cn/tags/lamp/" rel="tag">lamp</a> , <a href="http://agileblog.cn/tags/%25E5%25A4%259A%25E7%25BA%25BF%25E7%25A8%258B/" rel="tag">多线程</a> , <a href="http://agileblog.cn/tags/%25E5%258D%2595%25E7%25BA%25BF%25E7%25A8%258B/" rel="tag">单线程</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/domain-email/</link>
<title><![CDATA[工作室邮箱已经转移到网易企业域名邮箱服务]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[心情文摘]]></category>
<pubDate>Mon, 03 May 2010 04:30:33 +0000</pubDate> 
<guid>http://agileblog.cn/domain-email/</guid> 
<description>
<![CDATA[ 
	原文地址：<a href="http://freezingsun.com/news/domain-email/" target="_blank">http://freezingsun.com/news/domain-email/</a><br/>之前，冰点阳光工作室的域名邮箱一直使用的是腾讯的QQ域名邮箱服务。如今网易推出了免费的企业域名邮箱，工作室将freezingsun.com的MX记录修改到了ym.163.com，在此感谢网易的免费提供。<br/>目前网易的企业域名邮箱还是测试版，很多功能不是很完善，但是对于我们来说已经可以满足了。<br/>网易将在不久的将来，会推出个性化域名登录邮箱的服务，以及提供一些用户注册的服务。<br/>目前还不提供用户注册功能，只能由管理员手动添加用户，有需要的用户可以发送邮件到：webmaster@freezingsun.com，进行注册@.freezingsun.com的域名。<br/><br/>Tags - <a href="http://agileblog.cn/tags/ym.163.com/" rel="tag">ym.163.com</a> , <a href="http://agileblog.cn/tags/%25E5%2586%25B0%25E7%2582%25B9%25E9%2598%25B3%25E5%2585%2589%25E5%25B7%25A5%25E4%25BD%259C%25E5%25AE%25A4%25E9%2582%25AE%25E7%25AE%25B1/" rel="tag">冰点阳光工作室邮箱</a> , <a href="http://agileblog.cn/tags/%25E5%259F%259F%25E5%2590%258D%25E9%2582%25AE%25E7%25AE%25B1%25E6%259C%258D%25E5%258A%25A1/" rel="tag">域名邮箱服务</a> , <a href="http://agileblog.cn/tags/%25E7%25BD%2591%25E6%2598%2593%25E4%25BC%2581%25E4%25B8%259A%25E5%259F%259F%25E5%2590%258D/" rel="tag">网易企业域名</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/J2SE-HTML-DEMO/</link>
<title><![CDATA[在面板中使用HTML的Demo]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Java开发]]></category>
<pubDate>Wed, 28 Apr 2010 13:59:18 +0000</pubDate> 
<guid>http://agileblog.cn/J2SE-HTML-DEMO/</guid> 
<description>
<![CDATA[ 
	新建一个HtmlDemo类<br/>以下是源码<br/><div class="code"><br/>package components;<br/><br/>/* HtmlDemo.java needs no other files. */<br/><br/>import javax.swing.*;<br/>import java.awt.*;<br/>import java.awt.event.*;<br/><br/>public class HtmlDemo extends JPanel<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;implements ActionListener &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;JLabel theLabel;<br/>&nbsp;&nbsp;&nbsp;&nbsp;JTextArea htmlTextArea;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public HtmlDemo() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String initialText = &quot;&lt;html&gt;&#92;n&quot; +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Color and font test:&#92;n&quot; +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&lt;ul&gt;&#92;n&quot; +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&lt;li&gt;&lt;font color=red&gt;red&lt;/font&gt;&#92;n&quot; +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&lt;li&gt;&lt;font color=blue&gt;blue&lt;/font&gt;&#92;n&quot; +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&lt;li&gt;&lt;font color=green&gt;green&lt;/font&gt;&#92;n&quot; +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&lt;li&gt;&lt;font size=-2&gt;small&lt;/font&gt;&#92;n&quot; +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&lt;li&gt;&lt;font size=+2&gt;large&lt;/font&gt;&#92;n&quot; +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&lt;li&gt;&lt;i&gt;italic&lt;/i&gt;&#92;n&quot; +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&lt;li&gt;&lt;b&gt;bold&lt;/b&gt;&#92;n&quot; +<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;&lt;/ul&gt;&#92;n&quot;;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;htmlTextArea = new JTextArea(10, 20);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;htmlTextArea.setText(initialText);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JScrollPane scrollPane = new JScrollPane(htmlTextArea);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JButton changeTheLabel = new JButton(&quot;Change the label&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changeTheLabel.setMnemonic(KeyEvent.VK_C);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changeTheLabel.setAlignmentX(Component.CENTER_ALIGNMENT);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changeTheLabel.addActionListener(this);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;theLabel = new JLabel(initialText) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public Dimension getPreferredSize() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new Dimension(200, 200);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public Dimension getMinimumSize() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new Dimension(200, 200);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public Dimension getMaximumSize() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return new Dimension(200, 200);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;theLabel.setVerticalAlignment(SwingConstants.CENTER);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;theLabel.setHorizontalAlignment(SwingConstants.CENTER);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JPanel leftPanel = new JPanel();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.PAGE_AXIS));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leftPanel.setBorder(BorderFactory.createCompoundBorder(<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BorderFactory.createTitledBorder(<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;Edit the HTML, then click the button&quot;),<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BorderFactory.createEmptyBorder(10,10,10,10)));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leftPanel.add(scrollPane);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leftPanel.add(Box.createRigidArea(new Dimension(0,10)));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;leftPanel.add(changeTheLabel);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JPanel rightPanel = new JPanel();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.PAGE_AXIS));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rightPanel.setBorder(BorderFactory.createCompoundBorder(<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;BorderFactory.createTitledBorder(&quot;A label with HTML&quot;),<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;BorderFactory.createEmptyBorder(10,10,10,10)));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rightPanel.add(theLabel);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setBorder(BorderFactory.createEmptyBorder(10,10,10,10));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(leftPanel);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(Box.createRigidArea(new Dimension(10,0)));<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;add(rightPanel);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;//React to the user pushing the Change button.<br/>&nbsp;&nbsp;&nbsp;&nbsp;public void actionPerformed(ActionEvent e) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;theLabel.setText(htmlTextArea.getText());<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;&nbsp;&nbsp; * Create the GUI and show it.&nbsp;&nbsp;For thread safety,<br/>&nbsp;&nbsp;&nbsp;&nbsp; * this method should be invoked from the<br/>&nbsp;&nbsp;&nbsp;&nbsp; * event dispatch thread.<br/>&nbsp;&nbsp;&nbsp;&nbsp; */<br/>&nbsp;&nbsp;&nbsp;&nbsp;private static void createAndShowGUI() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Create and set up the window.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JFrame frame = new JFrame(&quot;HtmlDemo&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Add content to the window.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.add(new HtmlDemo());<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Display the window.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.pack();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frame.setVisible(true);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String&#91;&#93; args) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Schedule a job for the event dispatch thread:<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//creating and showing this application&#039;s GUI.<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SwingUtilities.invokeLater(new Runnable() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public void run() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Turn off metal&#039;s use of bold fonts<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UIManager.put(&quot;swing.boldMetal&quot;, Boolean.FALSE);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;createAndShowGUI();<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#125;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&#125;<br/><br/></div><br/>Tags - <a href="http://agileblog.cn/tags/j2se/" rel="tag">j2se</a> , <a href="http://agileblog.cn/tags/html/" rel="tag">html</a> , <a href="http://agileblog.cn/tags/demo/" rel="tag">demo</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Resin4-0-6-Version-Suport-IPV6/</link>
<title><![CDATA[Resin 4.0.6支持IPV6]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[软件工具]]></category>
<pubDate>Wed, 28 Apr 2010 13:33:02 +0000</pubDate> 
<guid>http://agileblog.cn/Resin4-0-6-Version-Suport-IPV6/</guid> 
<description>
<![CDATA[ 
	 the open source Web Profile leader for Java EE application server, announced today that Resin 4.0.6 features support for IPv6, Internet Protocol Version 6.<br/><br/>IPv6 is the next-generation Internet protocol that addresses the issue of IPv4 address exhaustion with added benefits of improved network auto-configuration, routing and security. Government and business mandates across the globe are increasing demand for the technology in a variety of applications, including the web and enterprise spaces. Rapid growth in Asian network infrastructure is driving heavy regional investment, requiring compatibility throughout hardware and software stacks.<br/><br/>“Caucho is poised to support our international customers and partners in their transitions to IPv6,” said Emil Ong, Chief Evangelist of Caucho Technology. “We share a close technological relationship with our customers. When one of our partners in Japan recently requested enhanced IPv6 support, we responded quickly with the release of Resin 4.0.6.” Ong added, “because of our developer-driven culture at Caucho, we are able to address our users’ needs with incredibly fast turnaround.”<br/><br/>Resin, Caucho’s open source Java application server, features Hessian serialization protocol and Quercus Java-PHP solutions. Resin is the Web Profile of choice for high performance Java EE applications. Leading companies including Salesforce, the Toronto Stock Exchange and CNET uses Resin to power web applications with high demands for reliability and performance.<br/>Resin 4.0.6下载地址：<br/>Pro版本：<br/><a href="http://www.caucho.com/download/resin-pro-4.0.6.zip">点击这里下载文件</a><br/>TAR.GZ版本<br/><a href="http://www.caucho.com/download/resin-pro-4.0.6.tar.gz">点击这里下载文件</a><br/>Ubuntu用户下载版本<br/><a href="http://www.caucho.com/download/debian/dists/unstable/multiverse/binary-i386/resin-pro_4.0.6-i386.deb">点击这里下载文件</a><br/><br/>Tags - <a href="http://agileblog.cn/tags/resin4.0.6/" rel="tag">resin4.0.6</a> , <a href="http://agileblog.cn/tags/%25E6%2594%25AF%25E6%258C%2581ipv6/" rel="tag">支持ipv6</a> , <a href="http://agileblog.cn/tags/%25E6%2596%25B0%25E7%2589%25B9%25E6%2580%25A7/" rel="tag">新特性</a> , <a href="http://agileblog.cn/tags/resin4.0.6%25E4%25B8%258B%25E8%25BD%25BD/" rel="tag">resin4.0.6下载</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/PHP-TO-RSS/</link>
<title><![CDATA[用PHP生成RSS实例]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[PHP]]></category>
<pubDate>Wed, 28 Apr 2010 12:14:39 +0000</pubDate> 
<guid>http://agileblog.cn/PHP-TO-RSS/</guid> 
<description>
<![CDATA[ 
	<div class="code"><br/>&lt;?php<br/>/**<br/> * rss操作类<br/> *<br/> * FeedCreator class v1.7.2<br/> * originally (c) Kai Blankenhorn<br/> * www.bitfolge.de<br/> * kaib@bitfolge.de<br/> *<br/> */<br/>// your local timezone, set to &quot;&quot; to disable or for GMT<br/>define(&quot;TIME_ZONE&quot;,&quot;&quot;);<br/>/**<br/> * Version string.<br/> **/<br/>define(&quot;FEEDCREATOR_VERSION&quot;, &quot;www.273.cn&quot;);<br/>/**<br/> * A FeedItem is a part of a FeedCreator feed.<br/> *<br/> * @author Kai Blankenhorn &lt;kaib@bitfolge.de&gt;<br/> * @since 1.3<br/> */<br/>class FeedItem extends HtmlDescribable &#123;<br/> /**<br/>&nbsp;&nbsp;* Mandatory attributes of an item.<br/>&nbsp;&nbsp;*/<br/> var $title, $description, $link;<br/> <br/> /**<br/>&nbsp;&nbsp;* Optional attributes of an item.<br/>&nbsp;&nbsp;*/<br/> var $author, $authorEmail, $image, $category, $comments, $guid, $source, $creator;<br/> <br/> /**<br/>&nbsp;&nbsp;* Publishing date of an item. May be in one of the following formats:<br/>&nbsp;&nbsp;*<br/>&nbsp;&nbsp;* RFC 822:<br/>&nbsp;&nbsp;* &quot;Mon, 20 Jan 03 18:05:41 +0400&quot;<br/>&nbsp;&nbsp;* &quot;20 Jan 03 18:05:41 +0000&quot;<br/>&nbsp;&nbsp;*<br/>&nbsp;&nbsp;* ISO 8601:<br/>&nbsp;&nbsp;* &quot;2003-01-20T18:05:41+04:00&quot;<br/>&nbsp;&nbsp;*<br/>&nbsp;&nbsp;* Unix:<br/>&nbsp;&nbsp;* 1043082341<br/>&nbsp;&nbsp;*/<br/> var $date;<br/> <br/> /**<br/>&nbsp;&nbsp;* Any additional elements to include as an assiciated array. All $key =&gt; $value pairs<br/>&nbsp;&nbsp;* will be included unencoded in the feed item in the form<br/>&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp; &lt;$key&gt;$value&lt;/$key&gt;<br/>&nbsp;&nbsp;* Again: No encoding will be used! This means you can invalidate or enhance the feed<br/>&nbsp;&nbsp;* if $value contains markup. This may be abused to embed tags not implemented by<br/>&nbsp;&nbsp;* the FeedCreator class used.<br/>&nbsp;&nbsp;*/<br/> var $additionalElements = Array();<br/> // on hold<br/> // var $source;<br/>&#125;<br/> <br/>/**<br/> * An FeedImage may be added to a FeedCreator feed.<br/> * @author Kai Blankenhorn &lt;kaib@bitfolge.de&gt;<br/> * @since 1.3<br/> */<br/>class FeedImage extends HtmlDescribable &#123;<br/> /**<br/>&nbsp;&nbsp;* Mandatory attributes of an image.<br/>&nbsp;&nbsp;*/<br/> var $title, $url, $link;<br/> <br/> /**<br/>&nbsp;&nbsp;* Optional attributes of an image.<br/>&nbsp;&nbsp;*/<br/> var $width, $height, $description;<br/>&#125;<br/> <br/>/**<br/> * An HtmlDescribable is an item within a feed that can have a description that may<br/> * include HTML markup.<br/> */<br/>class HtmlDescribable &#123;<br/> /**<br/>&nbsp;&nbsp;* Indicates whether the description field should be rendered in HTML.<br/>&nbsp;&nbsp;*/<br/> var $descriptionHtmlSyndicated;<br/> <br/> /**<br/>&nbsp;&nbsp;* Indicates whether and to how many characters a description should be truncated.<br/>&nbsp;&nbsp;*/<br/> var $descriptionTruncSize;<br/> <br/> /**<br/>&nbsp;&nbsp;* Returns a formatted description field, depending on descriptionHtmlSyndicated and<br/>&nbsp;&nbsp;* $descriptionTruncSize properties<br/>&nbsp;&nbsp;* @return&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;the formatted description&nbsp;&nbsp;<br/>&nbsp;&nbsp;*/<br/> function getDescription() &#123;<br/>&nbsp;&nbsp;$descriptionField = new FeedHtmlField($this-&gt;description);<br/>&nbsp;&nbsp;$descriptionField-&gt;syndicateHtml = $this-&gt;descriptionHtmlSyndicated;<br/>&nbsp;&nbsp;$descriptionField-&gt;truncSize = $this-&gt;descriptionTruncSize;<br/>&nbsp;&nbsp;return $descriptionField-&gt;output();<br/> &#125;<br/>&#125; <br/>/**<br/> * An FeedHtmlField describes and generates<br/> * a feed, item or image html field (probably a description). Output is <br/> * generated based on $truncSize, $syndicateHtml properties.<br/> * @author Pascal Van Hecke &lt;feedcreator.class.php@vanhecke.info&gt;<br/> * @version 1.6<br/> */<br/>class FeedHtmlField &#123;<br/> /**<br/>&nbsp;&nbsp;* Mandatory attributes of a FeedHtmlField.<br/>&nbsp;&nbsp;*/<br/> var $rawFieldContent;<br/> <br/> /**<br/>&nbsp;&nbsp;* Optional attributes of a FeedHtmlField.<br/>&nbsp;&nbsp;* <br/>&nbsp;&nbsp;*/<br/> var $truncSize, $syndicateHtml;<br/> <br/> /**<br/>&nbsp;&nbsp;* Creates a new instance of FeedHtmlField.<br/>&nbsp;&nbsp;* @param&nbsp;&nbsp;$string: if given, sets the rawFieldContent property<br/>&nbsp;&nbsp;*/<br/> function FeedHtmlField($parFieldContent) &#123;<br/>&nbsp;&nbsp;if ($parFieldContent) &#123;<br/>&nbsp;&nbsp; $this-&gt;rawFieldContent = $parFieldContent;<br/>&nbsp;&nbsp;&#125;<br/> &#125;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;* Creates the right output, depending on $truncSize, $syndicateHtml properties.<br/>&nbsp;&nbsp;* @return string&nbsp;&nbsp;&nbsp;&nbsp;the formatted field<br/>&nbsp;&nbsp;*/<br/> function output() &#123;<br/>&nbsp;&nbsp;// when field available and syndicated in html we assume <br/>&nbsp;&nbsp;// - valid html in $rawFieldContent and we enclose in CDATA tags<br/>&nbsp;&nbsp;// - no truncation (truncating risks producing invalid html)<br/>&nbsp;&nbsp;if (!$this-&gt;rawFieldContent) &#123;<br/>&nbsp;&nbsp; $result = &quot;&quot;;<br/>&nbsp;&nbsp;&#125; elseif ($this-&gt;syndicateHtml) &#123;<br/>&nbsp;&nbsp; $result = &quot;&lt;!&#91;CDATA&#91;&quot;.$this-&gt;rawFieldContent.&quot;&#93;&#93;&gt;&quot;;<br/>&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp; if ($this-&gt;truncSize and is_int($this-&gt;truncSize)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$result = FeedCreator::iTrunc(htmlspecialchars($this-&gt;rawFieldContent),$this-&gt;truncSize);<br/>&nbsp;&nbsp; &#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$result = htmlspecialchars($this-&gt;rawFieldContent);<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;return $result;<br/> &#125;<br/>&#125;<br/><br/>/**<br/> * UniversalFeedCreator lets you choose during runtime which<br/> * format to build.<br/> * For general usage of a feed class, see the FeedCreator class<br/> * below or the example above.<br/> *<br/> * @since 1.3<br/> * @author Kai Blankenhorn &lt;kaib@bitfolge.de&gt;<br/> */<br/>class UniversalFeedCreator extends FeedCreator &#123;<br/> var $_feed;<br/> <br/> function _setFormat($format) &#123;<br/>&nbsp;&nbsp;switch (strtoupper($format)) &#123;<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp; case &quot;2.0&quot;:<br/>&nbsp;&nbsp;&nbsp;&nbsp;// fall through<br/>&nbsp;&nbsp; case &quot;RSS2.0&quot;:<br/>&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;_feed = new RSSCreator20();<br/>&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp; case &quot;0.91&quot;:<br/>&nbsp;&nbsp;&nbsp;&nbsp;// fall through<br/>&nbsp;&nbsp; case &quot;RSS0.91&quot;:<br/>&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;_feed = new RSSCreator091();<br/>&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp; default:<br/>&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;_feed = new RSSCreator091();<br/>&nbsp;&nbsp;&nbsp;&nbsp;break;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;$vars = get_object_vars($this);<br/>&nbsp;&nbsp;foreach ($vars as $key =&gt; $value) &#123;<br/>&nbsp;&nbsp; // prevent overwriting of properties &quot;contentType&quot;, &quot;encoding&quot;; do not copy &quot;_feed&quot; itself<br/>&nbsp;&nbsp; if (!in_array($key, array(&quot;_feed&quot;, &quot;contentType&quot;, &quot;encoding&quot;))) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;_feed-&gt;&#123;$key&#125; = $this-&gt;&#123;$key&#125;;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp;&#125;<br/> &#125;<br/> <br/> /**<br/>&nbsp;&nbsp;* Creates a syndication feed based on the items previously added.<br/>&nbsp;&nbsp;*<br/>&nbsp;&nbsp;* @see&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FeedCreator::addItem()<br/>&nbsp;&nbsp;* @param&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;format&nbsp;&nbsp;&nbsp;&nbsp;format the feed should comply to. Valid values are:<br/>&nbsp;&nbsp;*&nbsp;&nbsp; &quot;PIE0.1&quot;, &quot;mbox&quot;, &quot;RSS0.91&quot;, &quot;RSS1.0&quot;, &quot;RSS2.0&quot;, &quot;OPML&quot;, &quot;ATOM0.3&quot;, &quot;HTML&quot;, &quot;JS&quot;<br/>&nbsp;&nbsp;* @return&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;the contents of the feed.<br/>&nbsp;&nbsp;*/<br/> function createFeed($format = &quot;RSS0.91&quot;) &#123;<br/>&nbsp;&nbsp;$this-&gt;_setFormat($format);<br/>&nbsp;&nbsp;return $this-&gt;_feed-&gt;createFeed();<br/> &#125;<br/> <br/> <br/>&nbsp;&nbsp;/**<br/>&nbsp;&nbsp;* Saves this feed as a file on the local disk. After the file is saved, an HTTP redirect<br/>&nbsp;&nbsp;* header may be sent to redirect the use to the newly created file.<br/>&nbsp;&nbsp;* @since 1.4<br/>&nbsp;&nbsp;* <br/>&nbsp;&nbsp;* @param string format format the feed should comply to. Valid values are:<br/>&nbsp;&nbsp;*&nbsp;&nbsp; &quot;PIE0.1&quot; (deprecated), &quot;mbox&quot;, &quot;RSS0.91&quot;, &quot;RSS1.0&quot;, &quot;RSS2.0&quot;, &quot;OPML&quot;, &quot;ATOM&quot;, &quot;ATOM0.3&quot;, &quot;HTML&quot;, &quot;JS&quot;<br/>&nbsp;&nbsp;* @param string filename optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER&#91;&quot;PHP_SELF&quot;&#93; with the extension changed to .xml (see _generateFilename()).<br/>&nbsp;&nbsp;* @param boolean displayContents optional send the content of the file or not. If true, the file will be sent in the body of the response.<br/>&nbsp;&nbsp;*/<br/> function saveFeed($format=&quot;RSS0.91&quot;, $filename=&quot;&quot;, $displayContents=true) &#123;<br/>&nbsp;&nbsp;$this-&gt;_setFormat($format);<br/>&nbsp;&nbsp;$this-&gt;_feed-&gt;saveFeed($filename, $displayContents);<br/> &#125;<br/><br/>&nbsp;&nbsp; /**<br/>&nbsp;&nbsp;&nbsp;&nbsp;* Turns on caching and checks if there is a recent version of this feed in the cache.<br/>&nbsp;&nbsp;&nbsp;&nbsp;* If there is, an HTTP redirect header is sent.<br/>&nbsp;&nbsp;&nbsp;&nbsp;* To effectively use caching, you should create the FeedCreator object and call this method<br/>&nbsp;&nbsp;&nbsp;&nbsp;* before anything else, especially before you do the time consuming task to build the feed<br/>&nbsp;&nbsp;&nbsp;&nbsp;* (web fetching, for example).<br/>&nbsp;&nbsp;&nbsp;&nbsp;*<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @param&nbsp;&nbsp; string&nbsp;&nbsp; format&nbsp;&nbsp; format the feed should comply to. Valid values are:<br/>&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;PIE0.1&quot; (deprecated), &quot;mbox&quot;, &quot;RSS0.91&quot;, &quot;RSS1.0&quot;, &quot;RSS2.0&quot;, &quot;OPML&quot;, &quot;ATOM0.3&quot;.<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @param filename&nbsp;&nbsp; string&nbsp;&nbsp; optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER&#91;&quot;PHP_SELF&quot;&#93; with the extension changed to .xml (see _generateFilename()).<br/>&nbsp;&nbsp;&nbsp;&nbsp;* @param timeout int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;optional the timeout in seconds before a cached version is refreshed (defaults to 3600 = 1 hour)<br/>&nbsp;&nbsp;&nbsp;&nbsp;*/<br/>&nbsp;&nbsp; function useCached($format=&quot;RSS0.91&quot;, $filename=&quot;&quot;, $timeout=3600) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;_setFormat($format);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;_feed-&gt;useCached($filename, $timeout);<br/>&nbsp;&nbsp; &#125;<br/>&#125;<br/><br/>/**<br/> * FeedCreator is the abstract base implementation for concrete<br/> * implementations that implement a specific format of syndication.<br/> *<br/> * @abstract<br/> * @author Kai Blankenhorn &lt;kaib@bitfolge.de&gt;<br/> * @since 1.4<br/> */<br/>class FeedCreator extends HtmlDescribable &#123;<br/> /**<br/>&nbsp;&nbsp;* Mandatory attributes of a feed.<br/>&nbsp;&nbsp;*/<br/> var $title, $description, $link;<br/> <br/> <br/> /**<br/>&nbsp;&nbsp;* Optional attributes of a feed.<br/>&nbsp;&nbsp;*/<br/> var $syndicationURL, $image, $language, $copyright, $pubDate, $lastBuildDate, $editor, $editorEmail, $webmaster, $category, $docs, $ttl, $rating, $skipHours, $skipDays;<br/> /**<br/> * The url of the external xsl stylesheet used to format the naked rss feed.<br/> * Ignored in the output when empty.<br/> */<br/> var $xslStyleSheet = &quot;&quot;;<br/> <br/> <br/> /**<br/>&nbsp;&nbsp;* @access private<br/>&nbsp;&nbsp;*/<br/> var $items = Array();<br/>&nbsp;&nbsp;<br/> <br/> /**<br/>&nbsp;&nbsp;* This feed&#039;s MIME content type.<br/>&nbsp;&nbsp;* @since 1.4<br/>&nbsp;&nbsp;* @access private<br/>&nbsp;&nbsp;*/<br/> var $contentType = &quot;application/xml&quot;;<br/> <br/> <br/> /**<br/>&nbsp;&nbsp;* This feed&#039;s character encoding.<br/>&nbsp;&nbsp;* @since 1.6.1<br/>&nbsp;&nbsp;**/<br/> var $encoding = &quot;utf-8&quot;;<br/> <br/> <br/> /**<br/>&nbsp;&nbsp;* Any additional elements to include as an assiciated array. All $key =&gt; $value pairs<br/>&nbsp;&nbsp;* will be included unencoded in the feed in the form<br/>&nbsp;&nbsp;*&nbsp;&nbsp;&nbsp;&nbsp; &lt;$key&gt;$value&lt;/$key&gt;<br/>&nbsp;&nbsp;* Again: No encoding will be used! This means you can invalidate or enhance the feed<br/>&nbsp;&nbsp;* if $value contains markup. This may be abused to embed tags not implemented by<br/>&nbsp;&nbsp;* the FeedCreator class used.<br/>&nbsp;&nbsp;*/<br/> var $additionalElements = Array();<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/> /**<br/>&nbsp;&nbsp;* Adds an FeedItem to the feed.<br/>&nbsp;&nbsp;*<br/>&nbsp;&nbsp;* @param object FeedItem $item The FeedItem to add to the feed.<br/>&nbsp;&nbsp;* @access public<br/>&nbsp;&nbsp;*/<br/> function addItem($item) &#123;<br/>&nbsp;&nbsp;$this-&gt;items&#91;&#93; = $item;<br/> &#125;<br/> /**<br/>&nbsp;&nbsp;* 清空当前数组值<br/>&nbsp;&nbsp;*<br/>&nbsp;&nbsp;* @param object FeedItem $item The FeedItem to add to the feed.<br/>&nbsp;&nbsp;* @access public<br/>&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;function clearItem2Null() &#123;<br/>&nbsp;&nbsp;$this-&gt;items = array();<br/> &#125; <br/> <br/> /**<br/>&nbsp;&nbsp;* Truncates a string to a certain length at the most sensible point.<br/>&nbsp;&nbsp;* First, if there&#039;s a &#039;.&#039; character near the end of the string, the string is truncated after this character.<br/>&nbsp;&nbsp;* If there is no &#039;.&#039;, the string is truncated after the last &#039; &#039; character.<br/>&nbsp;&nbsp;* If the string is truncated, &quot; ...&quot; is appended.<br/>&nbsp;&nbsp;* If the string is already shorter than $length, it is returned unchanged.<br/>&nbsp;&nbsp;* <br/>&nbsp;&nbsp;* @static<br/>&nbsp;&nbsp;* @param string&nbsp;&nbsp;&nbsp;&nbsp;string A string to be truncated.<br/>&nbsp;&nbsp;* @param int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;length the maximum length the string should be truncated to<br/>&nbsp;&nbsp;* @return string&nbsp;&nbsp;&nbsp;&nbsp;the truncated string<br/>&nbsp;&nbsp;*/<br/> function iTrunc($string, $length) &#123;<br/>&nbsp;&nbsp;if (strlen($string)&lt;=$length) &#123;<br/>&nbsp;&nbsp; return $string;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;$pos = strrpos($string,&quot;.&quot;);<br/>&nbsp;&nbsp;if ($pos&gt;=$length-4) &#123;<br/>&nbsp;&nbsp; $string = substr($string,0,$length-4);<br/>&nbsp;&nbsp; $pos = strrpos($string,&quot;.&quot;);<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;if ($pos&gt;=$length*0.4) &#123;<br/>&nbsp;&nbsp; return substr($string,0,$pos+1).&quot; ...&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;$pos = strrpos($string,&quot; &quot;);<br/>&nbsp;&nbsp;if ($pos&gt;=$length-4) &#123;<br/>&nbsp;&nbsp; $string = substr($string,0,$length-4);<br/>&nbsp;&nbsp; $pos = strrpos($string,&quot; &quot;);<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;if ($pos&gt;=$length*0.4) &#123;<br/>&nbsp;&nbsp; return substr($string,0,$pos).&quot; ...&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;return substr($string,0,$length-4).&quot; ...&quot;;<br/>&nbsp;&nbsp; <br/> &#125;<br/> <br/> <br/> /**<br/>&nbsp;&nbsp;* Creates a comment indicating the generator of this feed.<br/>&nbsp;&nbsp;* The format of this comment seems to be recognized by<br/>&nbsp;&nbsp;* Syndic8.com.<br/>&nbsp;&nbsp;*/<br/> function _createGeneratorComment() &#123;<br/>&nbsp;&nbsp;return &quot;&lt;!-- generator=&#92;&quot;&quot;.FEEDCREATOR_VERSION.&quot;&#92;&quot; --&gt;&#92;n&quot;;<br/> &#125;<br/> <br/> <br/> /**<br/>&nbsp;&nbsp;* Creates a string containing all additional elements specified in<br/>&nbsp;&nbsp;* $additionalElements.<br/>&nbsp;&nbsp;* @param elements array an associative array containing key =&gt; value pairs<br/>&nbsp;&nbsp;* @param indentString string a string that will be inserted before every generated line<br/>&nbsp;&nbsp;* @return&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;the XML tags corresponding to $additionalElements<br/>&nbsp;&nbsp;*/<br/> function _createAdditionalElements($elements, $indentString=&quot;&quot;) &#123;<br/>&nbsp;&nbsp;$ae = &quot;&quot;;<br/>&nbsp;&nbsp;if (is_array($elements)) &#123;<br/>&nbsp;&nbsp; foreach($elements AS $key =&gt; $value) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$ae.= $indentString.&quot;&lt;$key&gt;$value&lt;/$key&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;return $ae;<br/> &#125;<br/> <br/> function _createStylesheetReferences() &#123;<br/>&nbsp;&nbsp;$xml = &quot;&quot;;<br/>&nbsp;&nbsp;if ($this-&gt;cssStyleSheet) $xml .= &quot;&lt;?xml-stylesheet href=&#92;&quot;&quot;.$this-&gt;cssStyleSheet.&quot;&#92;&quot; _fcksavedurl=&quot;&#92;&quot;&quot;.$this-&gt;cssStyleSheet.&quot;&#92;&quot;&quot; type=&#92;&quot;text/css&#92;&quot;?&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;if ($this-&gt;xslStyleSheet) $xml .= &quot;&lt;?xml-stylesheet href=&#92;&quot;&quot;.$this-&gt;xslStyleSheet.&quot;&#92;&quot; type=&#92;&quot;text/xsl&#92;&quot;?&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;return $xml;<br/> &#125;<br/> <br/> <br/> /**<br/>&nbsp;&nbsp;* Builds the feed&#039;s text.<br/>&nbsp;&nbsp;* @abstract<br/>&nbsp;&nbsp;* @return&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;the feed&#039;s complete text <br/>&nbsp;&nbsp;*/<br/> function createFeed() &#123;<br/> &#125;<br/> <br/> /**<br/>&nbsp;&nbsp;* Generate a filename for the feed cache file. The result will be $_SERVER&#91;&quot;PHP_SELF&quot;&#93; with the extension changed to .xml.<br/>&nbsp;&nbsp;* For example:<br/>&nbsp;&nbsp;* <br/>&nbsp;&nbsp;* echo $_SERVER&#91;&quot;PHP_SELF&quot;&#93;.&quot;&#92;n&quot;;<br/>&nbsp;&nbsp;* echo FeedCreator::_generateFilename();<br/>&nbsp;&nbsp;* <br/>&nbsp;&nbsp;* would produce:<br/>&nbsp;&nbsp;* <br/>&nbsp;&nbsp;* /rss/latestnews.php<br/>&nbsp;&nbsp;* latestnews.xml<br/>&nbsp;&nbsp;*<br/>&nbsp;&nbsp;* @return string the feed cache filename<br/>&nbsp;&nbsp;* @since 1.4<br/>&nbsp;&nbsp;* @access private<br/>&nbsp;&nbsp;*/<br/> function _generateFilename() &#123;<br/>&nbsp;&nbsp;$fileInfo = pathinfo($_SERVER&#91;&quot;PHP_SELF&quot;&#93;);<br/>&nbsp;&nbsp;return substr($fileInfo&#91;&quot;basename&quot;&#93;,0,-(strlen($fileInfo&#91;&quot;extension&quot;&#93;)+1)).&quot;.xml&quot;;<br/> &#125;<br/><br/></div><br/><div class="code"><br/>以下为引用的内容：<br/><br/>/**<br/>&nbsp;&nbsp;* @since 1.4<br/>&nbsp;&nbsp;* @access private<br/>&nbsp;&nbsp;*/<br/> function _redirect($filename) &#123;<br/>&nbsp;&nbsp;// attention, heavily-commented-out-area<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;// maybe use this in addition to file time checking<br/>&nbsp;&nbsp;//Header(&quot;Expires: &quot;.date(&quot;r&quot;,time()+$this-&gt;_timeout));<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;/* no caching at all, doesn&#039;t seem to work as good:<br/>&nbsp;&nbsp;Header(&quot;Cache-Control: no-cache&quot;);<br/>&nbsp;&nbsp;Header(&quot;Pragma: no-cache&quot;);<br/>&nbsp;&nbsp;*/<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;// HTTP redirect, some feed readers&#039; simple HTTP implementations don&#039;t follow it<br/>&nbsp;&nbsp;//Header(&quot;Location: &quot;.$filename);<br/>&nbsp;&nbsp;Header(&quot;Content-Type: &quot;.$this-&gt;contentType.&quot;; charset=&quot;.$this-&gt;encoding.&quot;; filename=&quot;.basename($filename));<br/>&nbsp;&nbsp;Header(&quot;Content-Disposition: inline; filename=&quot;.basename($filename));<br/>&nbsp;&nbsp;readfile($filename, &quot;r&quot;);<br/>&nbsp;&nbsp;die();<br/> &#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/> /**<br/>&nbsp;&nbsp;* Turns on caching and checks if there is a recent version of this feed in the cache.<br/>&nbsp;&nbsp;* If there is, an HTTP redirect header is sent.<br/>&nbsp;&nbsp;* To effectively use caching, you should create the FeedCreator object and call this method<br/>&nbsp;&nbsp;* before anything else, especially before you do the time consuming task to build the feed<br/>&nbsp;&nbsp;* (web fetching, for example).<br/>&nbsp;&nbsp;* @since 1.4<br/>&nbsp;&nbsp;* @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER&#91;&quot;PHP_SELF&quot;&#93; with the extension changed to .xml (see _generateFilename()).<br/>&nbsp;&nbsp;* @param timeout int&nbsp;&nbsp;optional the timeout in seconds before a cached version is refreshed (defaults to 3600 = 1 hour)<br/>&nbsp;&nbsp;*/<br/> function useCached($filename=&quot;&quot;, $timeout=3600) &#123;<br/>&nbsp;&nbsp;$this-&gt;_timeout = $timeout;<br/>&nbsp;&nbsp;if ($filename==&quot;&quot;) &#123;<br/>&nbsp;&nbsp; $filename = $this-&gt;_generateFilename();<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;if (file_exists($filename) AND (time()-filemtime($filename) &lt; $timeout)) &#123;<br/>&nbsp;&nbsp; $this-&gt;_redirect($filename);<br/>&nbsp;&nbsp;&#125;<br/> &#125;<br/> <br/> <br/> /**<br/>&nbsp;&nbsp;* Saves this feed as a file on the local disk. After the file is saved, a redirect<br/>&nbsp;&nbsp;* header may be sent to redirect the user to the newly created file.<br/>&nbsp;&nbsp;* @since 1.4<br/>&nbsp;&nbsp;* <br/>&nbsp;&nbsp;* @param filename string optional the filename where a recent version of the feed is saved. If not specified, the filename is $_SERVER&#91;&quot;PHP_SELF&quot;&#93; with the extension changed to .xml (see _generateFilename()).<br/>&nbsp;&nbsp;* @param redirect boolean optional send an HTTP redirect header or not. If true, the user will be automatically redirected to the created file.<br/>&nbsp;&nbsp;*/<br/> function saveFeed($filename=&quot;&quot;, $displayContents=true) &#123;<br/>&nbsp;&nbsp;if ($filename==&quot;&quot;) &#123;<br/>&nbsp;&nbsp; $filename = $this-&gt;_generateFilename();<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;$feedFile = fopen($filename, &quot;w+&quot;);<br/>&nbsp;&nbsp;if ($feedFile) &#123;<br/>&nbsp;&nbsp; fputs($feedFile,$this-&gt;createFeed());<br/>&nbsp;&nbsp; fclose($feedFile);<br/>&nbsp;&nbsp; if ($displayContents) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;_redirect($filename);<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp;&#125; else &#123;<br/>&nbsp;&nbsp; echo &quot;&lt;br /&gt;&lt;b&gt;Error creating feed file, please check write permissions.&lt;/b&gt;&lt;br /&gt;&quot;;<br/>&nbsp;&nbsp;&#125;<br/> &#125;<br/> <br/>&#125; <br/> /**<br/> * FeedDate is an internal class that stores a date for a feed or feed item.<br/> * Usually, you won&#039;t need to use this.<br/> */<br/>class FeedDate &#123;<br/> var $unix;<br/> <br/> /**<br/>&nbsp;&nbsp;* Creates a new instance of FeedDate representing a given date.<br/>&nbsp;&nbsp;* Accepts RFC 822, ISO 8601 date formats as well as unix time stamps.<br/>&nbsp;&nbsp;* @param mixed $dateString optional the date this FeedDate will represent. If not specified, the current date and time is used.<br/>&nbsp;&nbsp;*/<br/> function FeedDate($dateString=&quot;&quot;) &#123;<br/>&nbsp;&nbsp;if ($dateString==&quot;&quot;) $dateString = date(&quot;r&quot;);<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;if (is_integer($dateString)) &#123;<br/>&nbsp;&nbsp; $this-&gt;unix = $dateString;<br/>&nbsp;&nbsp; return;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;if (preg_match(&quot;~(?:(?:Mon&#124;Tue&#124;Wed&#124;Thu&#124;Fri&#124;Sat&#124;Sun),&#92;&#92;s+)?(&#92;&#92;d&#123;1,2&#125;)&#92;&#92;s+(&#91;a-zA-Z&#93;&#123;3&#125;)&#92;&#92;s+(&#92;&#92;d&#123;4&#125;)&#92;&#92;s+(&#92;&#92;d&#123;2&#125;):(&#92;&#92;d&#123;2&#125;):(&#92;&#92;d&#123;2&#125;)&#92;&#92;s+(.*)~&quot;,$dateString,$matches)) &#123;<br/>&nbsp;&nbsp; $months = Array(&quot;Jan&quot;=&gt;1,&quot;Feb&quot;=&gt;2,&quot;Mar&quot;=&gt;3,&quot;Apr&quot;=&gt;4,&quot;May&quot;=&gt;5,&quot;Jun&quot;=&gt;6,&quot;Jul&quot;=&gt;7,&quot;Aug&quot;=&gt;8,&quot;Sep&quot;=&gt;9,&quot;Oct&quot;=&gt;10,&quot;Nov&quot;=&gt;11,&quot;Dec&quot;=&gt;12);<br/>&nbsp;&nbsp; $this-&gt;unix = mktime($matches&#91;4&#93;,$matches&#91;5&#93;,$matches&#91;6&#93;,$months&#91;$matches&#91;2&#93;&#93;,$matches&#91;1&#93;,$matches&#91;3&#93;);<br/>&nbsp;&nbsp; if (substr($matches&#91;7&#93;,0,1)==&#039;+&#039; or substr($matches&#91;7&#93;,0,1)==&#039;-&#039;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$tzOffset = (substr($matches&#91;7&#93;,0,3) * 60 + substr($matches&#91;7&#93;,-2)) * 60;<br/>&nbsp;&nbsp; &#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if (strlen($matches&#91;7&#93;)==1) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; $oneHour = 3600;<br/>&nbsp;&nbsp;&nbsp;&nbsp; $ord = ord($matches&#91;7&#93;);<br/>&nbsp;&nbsp;&nbsp;&nbsp; if ($ord &lt; ord(&quot;M&quot;)) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$tzOffset = (ord(&quot;A&quot;) - $ord - 1) * $oneHour;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#125; elseif ($ord &gt;= ord(&quot;M&quot;) AND $matches&#91;7&#93;!=&quot;Z&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$tzOffset = ($ord - ord(&quot;M&quot;)) * $oneHour;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#125; elseif ($matches&#91;7&#93;==&quot;Z&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$tzOffset = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;switch ($matches&#91;7&#93;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; case &quot;UT&quot;:<br/>&nbsp;&nbsp;&nbsp;&nbsp; case &quot;GMT&quot;: $tzOffset = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; $this-&gt;unix += $tzOffset;<br/>&nbsp;&nbsp; return;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;if (preg_match(&quot;~(&#92;&#92;d&#123;4&#125;)-(&#92;&#92;d&#123;2&#125;)-(&#92;&#92;d&#123;2&#125;)T(&#92;&#92;d&#123;2&#125;):(&#92;&#92;d&#123;2&#125;):(&#92;&#92;d&#123;2&#125;)(.*)~&quot;,$dateString,$matches)) &#123;<br/>&nbsp;&nbsp; $this-&gt;unix = mktime($matches&#91;4&#93;,$matches&#91;5&#93;,$matches&#91;6&#93;,$matches&#91;2&#93;,$matches&#91;3&#93;,$matches&#91;1&#93;);<br/>&nbsp;&nbsp; if (substr($matches&#91;7&#93;,0,1)==&#039;+&#039; or substr($matches&#91;7&#93;,0,1)==&#039;-&#039;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$tzOffset = (substr($matches&#91;7&#93;,0,3) * 60 + substr($matches&#91;7&#93;,-2)) * 60;<br/>&nbsp;&nbsp; &#125; else &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;if ($matches&#91;7&#93;==&quot;Z&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; $tzOffset = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; $this-&gt;unix += $tzOffset;<br/>&nbsp;&nbsp; return;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;$this-&gt;unix = 0;<br/> &#125;<br/> /**<br/>&nbsp;&nbsp;* Gets the date stored in this FeedDate as an RFC 822 date.<br/>&nbsp;&nbsp;*<br/>&nbsp;&nbsp;* @return a date in RFC 822 format<br/>&nbsp;&nbsp;*/<br/> function rfc822() &#123;<br/>&nbsp;&nbsp;//return gmdate(&quot;r&quot;,$this-&gt;unix);<br/>&nbsp;&nbsp;$date = gmdate(&quot;Y-m-d H:i:s&quot;, $this-&gt;unix);<br/>&nbsp;&nbsp;if (TIME_ZONE!=&quot;&quot;) $date .= &quot; &quot;.str_replace(&quot;:&quot;,&quot;&quot;,TIME_ZONE);<br/>&nbsp;&nbsp;return $date;<br/> &#125;<br/> <br/> /**<br/>&nbsp;&nbsp;* Gets the date stored in this FeedDate as an ISO 8601 date.<br/>&nbsp;&nbsp;*<br/>&nbsp;&nbsp;* @return a date in ISO 8601 format<br/>&nbsp;&nbsp;*/<br/> function iso8601() &#123;<br/>&nbsp;&nbsp;$date = gmdate(&quot;Y-m-d H:i:s&quot;,$this-&gt;unix);<br/>&nbsp;&nbsp;$date = substr($date,0,22) . &#039;:&#039; . substr($date,-2);<br/>&nbsp;&nbsp;if (TIME_ZONE!=&quot;&quot;) $date = str_replace(&quot;+00:00&quot;,TIME_ZONE,$date);<br/>&nbsp;&nbsp;return $date;<br/> &#125;<br/> <br/> /**<br/>&nbsp;&nbsp;* Gets the date stored in this FeedDate as unix time stamp.<br/>&nbsp;&nbsp;*<br/>&nbsp;&nbsp;* @return a date as a unix time stamp<br/>&nbsp;&nbsp;*/<br/> function unix() &#123;<br/>&nbsp;&nbsp;return $this-&gt;unix;<br/> &#125;<br/>&#125;<br/><br/>/**<br/> * RSSCreator10 is a FeedCreator that implements RDF Site Summary (RSS) 1.0.<br/> *<br/> * @see http://www.purl.org/rss/1.0/<br/> * @since 1.3<br/> * @author Kai Blankenhorn &lt;kaib@bitfolge.de&gt;<br/> */<br/>class RSSCreator10 extends FeedCreator &#123;<br/> /**<br/>&nbsp;&nbsp;* Builds the RSS feed&#039;s text. The feed will be compliant to RDF Site Summary (RSS) 1.0.<br/>&nbsp;&nbsp;* The feed will contain all items previously added in the same order.<br/>&nbsp;&nbsp;* @return&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;the feed&#039;s complete text <br/>&nbsp;&nbsp;*/<br/> function createFeed() &#123;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;$feed = &quot;&lt;?xml version=&#92;&quot;1.0&#92;&quot; encoding=&#92;&quot;&quot;.$this-&gt;encoding.&quot;&#92;&quot;?&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;$feed.= $this-&gt;_createGeneratorComment();<br/>&nbsp;&nbsp;if ($this-&gt;cssStyleSheet==&quot;&quot;) &#123;<br/>&nbsp;&nbsp; $cssStyleSheet = &quot;http://www.w3.org/2000/08/w3c-synd/style.css&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;$feed.= $this-&gt;_createStylesheetReferences();<br/>&nbsp;&nbsp;$feed.= &quot;&lt;rdf:RDF&#92;n&quot;;<br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;xmlns=&#92;&quot;http://purl.org/rss/1.0/&#92;&quot;&#92;n&quot;;<br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:rdf=&#92;&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&#92;&quot;&#92;n&quot;; <br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:slash=&#92;&quot;http://purl.org/rss/1.0/modules/slash/&#92;&quot;&#92;n&quot;;<br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;xmlns:dc=&#92;&quot;http://purl.org/dc/elements/1.1/&#92;&quot;&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&lt;channel rdf:about=&#92;&quot;&quot;.$this-&gt;syndicationURL.&quot;&#92;&quot;&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;&quot;.htmlspecialchars($this-&gt;title).&quot;&lt;/title&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;&quot;.htmlspecialchars($this-&gt;description).&quot;&lt;/description&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;link&gt;&quot;.$this-&gt;link.&quot;&lt;/link&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;if ($this-&gt;image!=null) &#123;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;image rdf:resource=&#92;&quot;&quot;.$this-&gt;image-&gt;url.&quot;&#92;&quot; /&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;$now = new FeedDate();<br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dc:date&gt;&quot;.htmlspecialchars($now-&gt;iso8601()).&quot;&lt;/dc:date&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;items&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;rdf:Seq&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;for ($i=0;$i&lt;count($this-&gt;items);$i++) &#123;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;rdf:li rdf:resource=&#92;&quot;&quot;.htmlspecialchars($this-&gt;items&#91;$i&#93;-&gt;link).&quot;&#92;&quot;/&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/rdf:Seq&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/items&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/channel&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;if ($this-&gt;image!=null) &#123;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&lt;image rdf:about=&#92;&quot;&quot;.$this-&gt;image-&gt;url.&quot;&#92;&quot;&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;&quot;.$this-&gt;image-&gt;title.&quot;&lt;/title&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;link&gt;&quot;.$this-&gt;image-&gt;link.&quot;&lt;/link&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;url&gt;&quot;.$this-&gt;image-&gt;url.&quot;&lt;/url&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/image&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;$feed.= $this-&gt;_createAdditionalElements($this-&gt;additionalElements, &quot;&nbsp;&nbsp;&nbsp;&nbsp;&quot;);<br/>&nbsp;&nbsp;<br/>&nbsp;&nbsp;for ($i=0;$i&lt;count($this-&gt;items);$i++) &#123;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&lt;item rdf:about=&#92;&quot;&quot;.htmlspecialchars($this-&gt;items&#91;$i&#93;-&gt;link).&quot;&#92;&quot;&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; //$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;dc:type&gt;Posting&lt;/dc:type&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;dc:format&gt;text/html&lt;/dc:format&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; if ($this-&gt;items&#91;$i&#93;-&gt;date!=null) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$itemDate = new FeedDate($this-&gt;items&#91;$i&#93;-&gt;date);<br/>&nbsp;&nbsp;&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;dc:date&gt;&quot;.htmlspecialchars($itemDate-&gt;iso8601()).&quot;&lt;/dc:date&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; if ($this-&gt;items&#91;$i&#93;-&gt;source!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;dc:source&gt;&quot;.htmlspecialchars($this-&gt;items&#91;$i&#93;-&gt;source).&quot;&lt;/dc:source&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; if ($this-&gt;items&#91;$i&#93;-&gt;author!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;dc:creator&gt;&quot;.htmlspecialchars($this-&gt;items&#91;$i&#93;-&gt;author).&quot;&lt;/dc:creator&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;&quot;.htmlspecialchars(strip_tags(strtr($this-&gt;items&#91;$i&#93;-&gt;title,&quot;&#92;n&#92;r&quot;,&quot;&nbsp;&nbsp;&quot;))).&quot;&lt;/title&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;link&gt;&quot;.htmlspecialchars($this-&gt;items&#91;$i&#93;-&gt;link).&quot;&lt;/link&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;&quot;.htmlspecialchars($this-&gt;items&#91;$i&#93;-&gt;description).&quot;&lt;/description&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; $feed.= $this-&gt;_createAdditionalElements($this-&gt;items&#91;$i&#93;-&gt;additionalElements, &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;);<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/item&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;$feed.= &quot;&lt;/rdf:RDF&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;return $feed;<br/> &#125;<br/>&#125;<br/> <br/>/**<br/> * RSSCreator091 is a FeedCreator that implements RSS 0.91 Spec, revision 3.<br/> *<br/> * @see http://my.netscape.com/publish/formats/rss-spec-0.91.html<br/> * @since 1.3<br/> * @author Kai Blankenhorn &lt;kaib@bitfolge.de&gt;<br/> */<br/>class RSSCreator091 extends FeedCreator &#123;<br/> /**<br/>&nbsp;&nbsp;* Stores this RSS feed&#039;s version number.<br/>&nbsp;&nbsp;* @access private<br/>&nbsp;&nbsp;*/<br/> var $RSSVersion;<br/> function RSSCreator091() &#123;<br/>&nbsp;&nbsp;$this-&gt;_setRSSVersion(&quot;0.91&quot;);<br/>&nbsp;&nbsp;$this-&gt;contentType = &quot;application/rss+xml&quot;;<br/> &#125;<br/> <br/> /**<br/>&nbsp;&nbsp;* Sets this RSS feed&#039;s version number.<br/>&nbsp;&nbsp;* @access private<br/>&nbsp;&nbsp;*/<br/> function _setRSSVersion($version) &#123;<br/>&nbsp;&nbsp;$this-&gt;RSSVersion = $version;<br/> &#125;<br/> /**<br/>&nbsp;&nbsp;* Builds the RSS feed&#039;s text. The feed will be compliant to RDF Site Summary (RSS) 1.0.<br/>&nbsp;&nbsp;* The feed will contain all items previously added in the same order.<br/>&nbsp;&nbsp;* @return&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;&nbsp;&nbsp;&nbsp;the feed&#039;s complete text <br/>&nbsp;&nbsp;*/<br/> function createFeed() &#123;<br/>&nbsp;&nbsp;$feed = &quot;&lt;?xml version=&#92;&quot;1.0&#92;&quot; encoding=&#92;&quot;&quot;.$this-&gt;encoding.&quot;&#92;&quot;?&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;$feed.= $this-&gt;_createGeneratorComment();<br/>&nbsp;&nbsp;$feed.= $this-&gt;_createStylesheetReferences();<br/>&nbsp;&nbsp;$feed.= &quot;&lt;rss version=&#92;&quot;&quot;.$this-&gt;RSSVersion.&quot;&#92;&quot;&gt;&#92;n&quot;; <br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&lt;channel&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;&quot;.FeedCreator::iTrunc(htmlspecialchars($this-&gt;title),100).&quot;&lt;/title&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;$this-&gt;descriptionTruncSize = 500;<br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;&quot;.$this-&gt;getDescription().&quot;&lt;/description&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;link&gt;&quot;.$this-&gt;link.&quot;&lt;/link&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;$now = new FeedDate();<br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;lastBuildDate&gt;&quot;.htmlspecialchars($now-&gt;rfc822()).&quot;&lt;/lastBuildDate&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;generator&gt;&quot;.FEEDCREATOR_VERSION.&quot;&lt;/generator&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;if ($this-&gt;image!=null) &#123;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;image&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;url&gt;&quot;.$this-&gt;image-&gt;url.&quot;&lt;/url&gt;&#92;n&quot;; <br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;&quot;.FeedCreator::iTrunc(htmlspecialchars($this-&gt;image-&gt;title),100).&quot;&lt;/title&gt;&#92;n&quot;; <br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;link&gt;&quot;.$this-&gt;image-&gt;link.&quot;&lt;/link&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; if ($this-&gt;image-&gt;width!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;width&gt;&quot;.$this-&gt;image-&gt;width.&quot;&lt;/width&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; if ($this-&gt;image-&gt;height!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;height&gt;&quot;.$this-&gt;image-&gt;height.&quot;&lt;/height&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; if ($this-&gt;image-&gt;description!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;&quot;.$this-&gt;image-&gt;getDescription().&quot;&lt;/description&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/image&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;if ($this-&gt;language!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;language&gt;&quot;.$this-&gt;language.&quot;&lt;/language&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;if ($this-&gt;copyright!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;copyright&gt;&quot;.FeedCreator::iTrunc(htmlspecialchars($this-&gt;copyright),100).&quot;&lt;/copyright&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;if ($this-&gt;editor!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;managingEditor&gt;&quot;.FeedCreator::iTrunc(htmlspecialchars($this-&gt;editor),100).&quot;&lt;/managingEditor&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;if ($this-&gt;webmaster!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;webMaster&gt;&quot;.FeedCreator::iTrunc(htmlspecialchars($this-&gt;webmaster),100).&quot;&lt;/webMaster&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;if ($this-&gt;pubDate!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp; $pubDate = new FeedDate($this-&gt;pubDate);<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;pubDate&gt;&quot;.htmlspecialchars($pubDate-&gt;rfc822()).&quot;&lt;/pubDate&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;if ($this-&gt;category!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;category&gt;&quot;.htmlspecialchars($this-&gt;category).&quot;&lt;/category&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;if ($this-&gt;docs!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;docs&gt;&quot;.FeedCreator::iTrunc(htmlspecialchars($this-&gt;docs),500).&quot;&lt;/docs&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;if ($this-&gt;ttl!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ttl&gt;&quot;.htmlspecialchars($this-&gt;ttl).&quot;&lt;/ttl&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;if ($this-&gt;rating!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;rating&gt;&quot;.FeedCreator::iTrunc(htmlspecialchars($this-&gt;rating),500).&quot;&lt;/rating&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;if ($this-&gt;skipHours!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;skipHours&gt;&quot;.htmlspecialchars($this-&gt;skipHours).&quot;&lt;/skipHours&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;if ($this-&gt;skipDays!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;skipDays&gt;&quot;.htmlspecialchars($this-&gt;skipDays).&quot;&lt;/skipDays&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;$feed.= $this-&gt;_createAdditionalElements($this-&gt;additionalElements, &quot;&nbsp;&nbsp;&nbsp;&nbsp;&quot;);<br/>&nbsp;&nbsp;for ($i=0;$i&lt;count($this-&gt;items);$i++) &#123;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;item&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;&quot;.FeedCreator::iTrunc(htmlspecialchars(strip_tags($this-&gt;items&#91;$i&#93;-&gt;title)),100).&quot;&lt;/title&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;link&gt;&quot;.htmlspecialchars($this-&gt;items&#91;$i&#93;-&gt;link).&quot;&lt;/link&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;description&gt;&quot;.$this-&gt;items&#91;$i&#93;-&gt;getDescription().&quot;&lt;/description&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; <br/>&nbsp;&nbsp; if ($this-&gt;items&#91;$i&#93;-&gt;author!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;author&gt;&quot;.htmlspecialchars($this-&gt;items&#91;$i&#93;-&gt;author).&quot;&lt;/author&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; /*<br/>&nbsp;&nbsp; // on hold<br/>&nbsp;&nbsp; if ($this-&gt;items&#91;$i&#93;-&gt;source!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;source&gt;&quot;.htmlspecialchars($this-&gt;items&#91;$i&#93;-&gt;source).&quot;&lt;/source&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; */<br/>&nbsp;&nbsp; if ($this-&gt;items&#91;$i&#93;-&gt;category!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;category&gt;&quot;.htmlspecialchars($this-&gt;items&#91;$i&#93;-&gt;category).&quot;&lt;/category&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; if ($this-&gt;items&#91;$i&#93;-&gt;comments!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;comments&gt;&quot;.htmlspecialchars($this-&gt;items&#91;$i&#93;-&gt;comments).&quot;&lt;/comments&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; if ($this-&gt;items&#91;$i&#93;-&gt;date!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp; $itemDate = new FeedDate($this-&gt;items&#91;$i&#93;-&gt;date);<br/>&nbsp;&nbsp;&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;pubDate&gt;&quot;.htmlspecialchars($itemDate-&gt;rfc822()).&quot;&lt;/pubDate&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; if ($this-&gt;items&#91;$i&#93;-&gt;guid!=&quot;&quot;) &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;guid&gt;&quot;.htmlspecialchars($this-&gt;items&#91;$i&#93;-&gt;guid).&quot;&lt;/guid&gt;&#92;n&quot;;<br/>&nbsp;&nbsp; &#125;<br/>&nbsp;&nbsp; $feed.= $this-&gt;_createAdditionalElements($this-&gt;items&#91;$i&#93;-&gt;additionalElements, &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;);<br/>&nbsp;&nbsp; $feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/item&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;$feed.= &quot;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/channel&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;$feed.= &quot;&lt;/rss&gt;&#92;n&quot;;<br/>&nbsp;&nbsp;return $feed;<br/> &#125;<br/>&#125;<br/> <br/>/**<br/> * RSSCreator20 is a FeedCreator that implements RDF Site Summary (RSS) 2.0.<br/> *<br/> * @see http://backend.userland.com/rss<br/> * @since 1.3<br/> * @author Kai Blankenhorn &lt;kaib@bitfolge.de&gt; */<br/>class RSSCreator20 extends RSSCreator091 &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;function RSSCreator20() &#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;parent::_setRSSVersion(&quot;2.0&quot;);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&#125; <br/><br/></div><br/>PHP生成RSS类的具体实现<br/><div class="code"><br/><br/>使用：<br/>include_once(&#039;Rss.class.php&#039;); <br/>$rss = new UniversalFeedCreator(); <br/>$rss-&gt;title = &quot;PHP开源项目&quot;; <br/>$rss-&gt;link = &quot;http://www.coderhome.net&quot;;<br/>$rss-&gt;description = &quot;最全最新最丰富的PHP开源项目&quot;; <br/>$softList = $query-&gt;select(&#039;select * from soft_list where status=1 order by id desc&#039;,&#039;array&#039;,1,100);<br/>foreach ($softList as $rs) &#123;<br/>$item = new FeedItem(); <br/>$item-&gt;title = $rs&#91;&#039;title&#039;&#93;; <br/>$item-&gt;link = &#039;http://www.coderhome.net/?id=&#039;.$rs&#91;&#039;id&#039;&#93;; <br/>$item-&gt;description = $rs&#91;&#039;content&#039;&#93;; <br/>$rss-&gt;addItem($item);<br/>&#125;<br/>$rss-&gt;saveFeed(&quot;RSS2.0&quot;, &quot;rss.xml&quot;);<br/></div><br/>Tags - <a href="http://agileblog.cn/tags/php/" rel="tag">php</a> , <a href="http://agileblog.cn/tags/rss/" rel="tag">rss</a> , <a href="http://agileblog.cn/tags/%25E5%25AE%259E%25E7%258E%25B0rss%25E8%25BE%2593%25E5%2587%25BA/" rel="tag">实现rss输出</a> , <a href="http://agileblog.cn/tags/%25E8%25AE%25A2%25E9%2598%2585rss/" rel="tag">订阅rss</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/XWork-Code/</link>
<title><![CDATA[XWork 源码下载 ]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Java开发]]></category>
<pubDate>Tue, 27 Apr 2010 09:59:59 +0000</pubDate> 
<guid>http://agileblog.cn/XWork-Code/</guid> 
<description>
<![CDATA[ 
	由于学习Struts2的需要，所以需要下载XWork源码拿来参考参考。如今很多的开放源码都使用的是SVN作为源码分享的服务器。像前两年都是使用CVS作为代码库，如今大多数都是采用SVN，XWork也不例外。<br/>安装SVN客户端之后使用右键的Checkout，输入以下地址即可<br/><div class="code"><br/>http://svn.opensymphony.com/svn/xwork/trunk<br/></div><br/><br/>Tags - <a href="http://agileblog.cn/tags/xwork%25E6%25BA%2590%25E7%25A0%2581/" rel="tag">xwork源码</a> , <a href="http://agileblog.cn/tags/%25E4%25B8%258B%25E8%25BD%25BD/" rel="tag">下载</a> , <a href="http://agileblog.cn/tags/svn%25E5%259C%25B0%25E5%259D%2580/" rel="tag">svn地址</a> , <a href="http://agileblog.cn/tags/checkout/" rel="tag">checkout</a> , <a href="http://agileblog.cn/tags/struts2%25E5%25AD%25A6%25E4%25B9%25A0/" rel="tag">struts2学习</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/Struts2-Abnormal-Error/</link>
<title><![CDATA[struts2 异常处理总结]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[Java开发]]></category>
<pubDate>Mon, 26 Apr 2010 14:24:34 +0000</pubDate> 
<guid>http://agileblog.cn/Struts2-Abnormal-Error/</guid> 
<description>
<![CDATA[ 
	<div class="code"><br/><br/>1—:java.lang.NoClassDefFoundError: org/apache/struts2/dojo/views/jsp/ui/HeadTag<br/><br/>解决办法：原因缺少了dojo的JAR包，引入即可:struts2-dojo-plugin-2.1.2.jar<br/><br/>(<br/><br/>The &quot;head&quot; tag renders required JavaScript code to configure Dojo and is required in order to use any of the tags included in the Dojo plugin.<br/><br/>——————–<br/><br/>If you are planning to nest tags from the Dojo plugin, make sure you set parseContent=&quot;false&quot;, otherwise each request made by the inner tags will be performed twice. <br/><br/>)<br/><br/> <br/><br/>2—:Unable to load configuration. - bean - jar:file:/F:/Struts2/Struts2/WebRoot/WEB-INF/lib/struts2-core-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.1.2.jar!/struts-default.xml:46:178<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Caused by: Unable to load bean: type:org.apache.struts2.dispatcher.multipart.MultiPartRequest class:org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bean - jar:file:/F:/Struts2/Struts2/WebRoot/WEB-INF/lib/struts2-core-2.1.2.jar!/struts-default.xml:46:178<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Caused by: java.lang.NoClassDefFoundError: org/apache/commons/fileupload/RequestContext <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解决办法：缺少JAR包，引入commons-fileupload-1.2.1.jar，commons-io-1.3.2.jar即可<br/><br/> <br/><br/>3—:No tag &quot;datetimepicker&quot; defined in tag library imported with prefix &quot;s&quot;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 原因版本问题：缺少struts-dojo-plugin JAR包，以及HTML的,&lt;HEAD&gt;&lt;/HEAD&gt;中没有使用&lt;s:head/&gt;标签<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If you’re using Struts 2.1.x you’re probably missing the&gt; struts-dojo-plugin.&nbsp;&nbsp;Michaël’s reference below applies to Struts 2.1.xonly. In the lasts versions (since 2.0.9 I guess), all AJAX are in dojo&gt; plugin.<br/><br/>&gt; &gt; So you need to include &lt;%@ taglib uri=&quot;/struts-dojo-tags&quot; prefix=&quot;sx&quot;%&gt;<br/><br/>&gt; &gt; and &lt;sx:head/&gt;<br/><br/>&gt; &gt;( Temp1:<br/><br/>&nbsp;&nbsp; &lt;sx:datetimepicker name=&quot;picker&quot; /&gt;<br/><br/>&nbsp;&nbsp; Temp2:<br/><br/>&nbsp;&nbsp; &lt;sx:datetimepicker type=&quot;time&quot; name=&quot;picker&quot; /&gt;&lt;br/&gt;<br/><br/>&nbsp;&nbsp; Temp3:<br/><br/>&nbsp;&nbsp; &lt;sx:datetimepicker value=&quot;%&#123;’2008-06-08′&#125;&quot; name=&quot;picker&quot; /&gt;<br/><br/>&nbsp;&nbsp; Temp4:<br/><br/>&nbsp;&nbsp; &lt;sx:datetimepicker value=&quot;date&quot; name=&quot;picker&quot; /&gt;)<br/><br/>&gt; &gt; and call&nbsp;&nbsp;:&lt;sx:datetimepicker …/&gt;<br/><br/><br/><br/> <br/><br/> <br/><br/>4—:使用TILES框架&nbsp;&nbsp;&nbsp;&nbsp; <br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;If you use the Tiles 2 plugin, check your tiles.xml file(s) to ensure they contain a DOCTYPE.<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;!DOCTYPE tiles-definitions PUBLIC &quot;-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp; &quot;http://tiles.apache.org/dtds/tiles-config_2_0.dtd&quot;&gt;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&lt;tiles-definitions&gt;<br/>5---:struts2中不支持EL表达式 Convert EL expressions to OGNL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Struts2.1 tags do not allow evaluation of JSP EL within their attributes.<br/>&nbsp;&nbsp;&nbsp;&nbsp;Instead, Struts2 tags evaluate attribute values as OGNL. Allowing both<br/>&nbsp;&nbsp;&nbsp;&nbsp;expression languages within the same attribute opens major security<br/>&nbsp;&nbsp;&nbsp;&nbsp;vulnerabilities. 6---文件上传过程中取不到文件名和文件类型，即都取到NULL&nbsp;&nbsp;&nbsp;&nbsp;原因：如果页面中file的name=“a”则我们ACTION中设置String aContentType,String aFileName;(此两个其实无所谓，关键是SET方法)&nbsp;&nbsp;&nbsp;&nbsp;setA(File file)()&#123;&#125;; setAContentType(String s)&#123;&#125;;setAFileName(String name)&#123;&#125; 即格式如下：setXContentType() setXFileName().X代表你给FILE取的NAME名字&nbsp;&nbsp;&nbsp;&nbsp;必须和它相同，固定格式7---严重: Unable to parse request&nbsp;&nbsp;&nbsp;&nbsp;org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (8523356) exceeds the configured maximum (2097152)&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.&lt;init&gt;(FileUploadBase.java:914)2008-5-27 17:46:51 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn&nbsp;&nbsp;&nbsp;&nbsp;警告: Could not find property &#91;struts.valueStack&#93;&nbsp;&nbsp;&nbsp;&nbsp;2008-5-27 17:46:51 com.opensymphony.xwork2.util.logging.commons.CommonsLogger error&nbsp;&nbsp;&nbsp;&nbsp;严重: the request was rejected because its size (8523356) exceeds the configured maximum (2097152)&nbsp;&nbsp;&nbsp;&nbsp;2008-5-27 17:46:51 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn&nbsp;&nbsp;&nbsp;&nbsp;警告: Could not find property &#91;org.apache.catalina.jsp_file&#93; 原因：上传文件大小超过预定大小，可以在struts.properties配置文件中设置struts.multipart.maxSize=XXX（XXX为文件大小） 8---配置了文件类型限制后，当传错误类型可以拦截不让用户上传该文件，可是跳转的页面却没有跳转到input配置的错误页面，而是返回&nbsp;&nbsp;&nbsp;&nbsp;到了success正确页面。&nbsp;&nbsp;&nbsp;&nbsp;严重: Content-Type not allowed: filedata &quot;upload__5b01657_11a329d4dcf__8000_00000000.tmp&quot; text/plain&nbsp;&nbsp;&nbsp;&nbsp;《我的打印输出DEBUG语句内容:File:null&nbsp;&nbsp;FlieName:null&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type:null》即拦截类型成功了&nbsp;&nbsp;&nbsp;&nbsp;java.lang.NullPointerException&nbsp;&nbsp;&nbsp;&nbsp; at java.io.FileInputStream.&lt;init&gt;(FileInputStream.java:103)&nbsp;&nbsp;&nbsp;&nbsp; at com.study.web.util.FileUploadUtil.uploadFile(FileUploadUtil.java:36)&nbsp;&nbsp;&nbsp;&nbsp; at com.study.web.action.UploadFileAction.execute(UploadFileAction.java:58)&nbsp;&nbsp;&nbsp;&nbsp; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)。。。&nbsp;&nbsp;&nbsp;&nbsp;2008-5-29 10:59:07 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn&nbsp;&nbsp;&nbsp;&nbsp;警告: Could not find property &#91;org.apache.catalina.jsp_file&#93;&nbsp;&nbsp;&nbsp;&nbsp;2008-5-29 10:59:07 com.opensymphony.xwork2.util.logging.commons.CommonsLogger warn&nbsp;&nbsp;&nbsp;&nbsp;警告: Could not find property &#91;struts&#93;&nbsp;&nbsp;&nbsp;&nbsp;2008-5-29 10:59:07 com.opensymphony.xwork2.util.logging.commons.CommonsLogger info&nbsp;&nbsp;&nbsp;&nbsp;信息: Removing file filedata &#92;tmp&#92;upload__5b01657_11a329d4dcf__8000_00000000.tmp&nbsp;&nbsp;&nbsp;&nbsp;原因及解决办法：在该文件上传Action中只配置了FileUploadInterceptor后缺少配置了defaultStack拦截器.&nbsp;&nbsp;&nbsp;&nbsp;在ACTION中配置玩defaultStack拦截器后改错误消失。9---struts.properties中全局配置文件大小，再使用默认FileUploadInterceptor拦截器时候能实现拦截的功能但是后台出现异常。&nbsp;&nbsp;&nbsp;&nbsp;严重: Unable to parse request&nbsp;&nbsp;&nbsp;&nbsp;org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (380) exceeds the configured maximum (10)&nbsp;&nbsp;&nbsp;&nbsp; at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.&lt;init&gt;(FileUploadBase.java:914)原因：未知。将全局配置中的限制大小去掉，再重新在ACTION中覆盖配置FileUploadInterceptor拦截器设置大小和文件类型限制，可消除异常。10---多文件上传中，其中一个传被限制的文件如限制aplication/msword(即.doc)文件，允许传文本文件。然而当夹杂在一起传的时候，后台能截获类型错误不可传信息，但是&nbsp;&nbsp;&nbsp;&nbsp;实际却还是上传成功。严重: Content-Type not allowed: filedata &quot;upload_4d958287_11a33e76ab9__8000_00000007.tmp&quot; application/mswordfile is :&#92;tmp&#92;upload_4d958287_11a33e76ab9__8000_00000006.tmp&nbsp;&nbsp;fileName:project.txt&nbsp;&nbsp;fileType:text/plainfile is :&#92;tmp&#92;upload_4d958287_11a33e76ab9__8000_00000007.tmp&nbsp;&nbsp;fileName:application base.doc&nbsp;&nbsp;fileType:application/mswordfile is :&#92;tmp&#92;upload_4d958287_11a33e76ab9__8000_00000008.tmp&nbsp;&nbsp;fileName:zhongqi-bug.txt&nbsp;&nbsp;fileType:text/plain原因：忘记了继承ActionSupport类。继承后异常消失。11--文件上传异常，不能创建File文件&nbsp;&nbsp;&nbsp;&nbsp;Cannot create type class java.io.File from value C:&#92;Documents and Settings&#92;admin&#92;桌面&#92;OrderReporterServiceImp.java - &#91;unknown location&#93;&nbsp;&nbsp;&nbsp;&nbsp;原因：忘记了在form表单里将enctype设置成文件上传格式：enctype=&quot;multipart/form-data&quot;12--当使用限制文件类型和大小的时候抛出空指针异常&nbsp;&nbsp;&nbsp;&nbsp;java.lang.NullPointerException<br/>&nbsp;&nbsp;demo.struts2.action.ValidatFileUploadAction.execute(ValidatFileUploadAction.java:71)<br/>&nbsp;&nbsp;sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br/>&nbsp;&nbsp;&nbsp;&nbsp;原因：在ACTION中配置了fileUpload拦截器后忘记了配置默认拦截器：defautlStack。注意当ACTION中配置自己的拦截器后需要显示配置默认&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;拦截器defaultStack13--在国际化时候抛空指针异常：<br/>&nbsp;&nbsp;&nbsp;&nbsp; 16:31:12,812 ERROR &#91;jsp&#93;:253 - Servlet.service() for servlet jsp threw exception&nbsp;&nbsp;&nbsp;&nbsp;java.lang.NullPointerException&nbsp;&nbsp;at java.text.MessageFormat.applyPattern(MessageFormat.java:414)<br/>&nbsp;&nbsp;&nbsp;&nbsp; at java.text.MessageFormat.&lt;init&gt;(MessageFormat.java:350)&nbsp;&nbsp;&nbsp;&nbsp; at com.opensymphony.xwork2.DefaultTextProvider.getText(DefaultTextProvider.java:70)<br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; 原因：忘记了在struts.xml中配置国际化常量，或者在struts.properties中配置全局国际化常量 struts.custom.i18n.resources=globeMessage<br/> <br/>14-- struts action的配置文件加载失败：<br/>&nbsp;&nbsp;&nbsp;&nbsp;Unable to load configuration. - result - file:/D:/Java/apache-tomcat-5.5.20/webapps/mysts/WEB-INF/classes/test.xml:10:26<br/>&nbsp;&nbsp;&nbsp;&nbsp; Caused by: No result type specified for result named &#039;error&#039;, perhaps the parent package does not specify the result type? - result - file:/D:/Java/apache-tomcat-5.5.20/webapps/mysts/WEB-INF/classes/test.xml:10:26&nbsp;&nbsp;&nbsp;&nbsp; at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.buildResults(XmlConfigurationProvider.java:609)<br/> <br/>&nbsp;&nbsp;&nbsp;&nbsp; 原因：忘记了继承包struts-default<br/>15-- struts action 配置文件注意事项：<br/>&nbsp;&nbsp;&nbsp;&nbsp; 1. 别忘记了继承struts-default默认配置包<br/>&nbsp;&nbsp;&nbsp;&nbsp; 2.如果配置命名空间，一定要以&quot;/&quot;开始，例如：namespace=&quot;/test&quot;<br/>&nbsp;&nbsp;&nbsp;&nbsp; 3.每个模块struts action配置文件中都可以配置全局result，global-result 经测试不会冲突，STRTUS会智能寻找该Action请求的<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 模块STRUTS ACTION配置包<br/><br/></div><br/>Tags - <a href="http://agileblog.cn/tags/struts2/" rel="tag">struts2</a> , <a href="http://agileblog.cn/tags/error/" rel="tag">error</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/office2010-msdn-sn/</link>
<title><![CDATA[office 2010 MSDN版激活码 绝对可以安装]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[软件工具]]></category>
<pubDate>Sun, 25 Apr 2010 10:24:17 +0000</pubDate> 
<guid>http://agileblog.cn/office2010-msdn-sn/</guid> 
<description>
<![CDATA[ 
	众所周知，微软前几天在MSDN上发布了Office 2010正式版，网友也在第一时间分享了出来给大家下载<br/>Microsoft Office 2010 MSDN版简体中文正式版下载<br/><br/>但是安装需要输入产品密钥，很多网友下载了Office 2010正式版由于没有密钥，所以都无法安装，今天某网友在网上发现了一枚office 2007密钥可以用来输入验证以完成安装激活MSDN Office 2010！在此分享给大家！<br/><div class="code"><br/><br/>Office 2010密钥（序列号）：<br/><br/>6QFDX-PYH2G-PPYFD-C7RJM-BBKQ8<br/>BDD3G-XM7FB-BD2HM-YK63V-VQFDK<br/>VYBBJ-TRJPB-QFQRF-QFT4D-H3GVB<br/><br/></div><br/>（以上KEY有朋友直接输入后即激活的！未通过的按照下面操作进行激活！）<br/>使用方法和之前分享过的经验分享：使用windows 7密钥+电话成功激活windows 7系统大致相同；<br/>激活具体要点：<br/>1，所安装的office 2010必须是 MSDN原版；<br/>2，安装过程中不要选择联网自动激活，安装结束后，重启电脑，打开Word或其他，它会提示你激活，选择电话激活。<br/>电话激活过程中提示： <br/>（1）“是不是在同一台机器上重新安装系统？”—选“是”，即"1"； <br/>（2）“是不是已经卸载了前一个安装？”—选“是”，即“1”。 <br/>&nbsp;&nbsp; <br/>3，不要尝试人工激活（你忽悠不过微软的！）<br/>使用此KEY有人激活过，也有朋友未能够激活，未能激活的可以尝试，禁用网卡试试！<br/>目前的安装步骤比较另类（先输入密钥才能安装），所以激活方法比较单一，另一种“替换法”因为要替换程序文件，所以就不分享了！<br/>Tags - <a href="http://agileblog.cn/tags/office2010/" rel="tag">office2010</a> , <a href="http://agileblog.cn/tags/msdn%25E7%2589%2588/" rel="tag">msdn版</a> , <a href="http://agileblog.cn/tags/%25E6%25BF%2580%25E6%25B4%25BB%25E7%25A0%2581/" rel="tag">激活码</a> , <a href="http://agileblog.cn/tags/%25E5%25AE%2589%25E8%25A3%2585%25E5%25AF%2586%25E9%2592%25A5/" rel="tag">安装密钥</a> , <a href="http://agileblog.cn/tags/%25E4%25BA%25A7%25E5%2593%2581%25E6%25BF%2580%25E6%25B4%25BB%25E7%25A0%2581/" rel="tag">产品激活码</a> , <a href="http://agileblog.cn/tags/rsm%25E7%2589%2588%25E6%259C%25AC/" rel="tag">rsm版本</a>
]]>
</description>
</item><item>
<link>http://agileblog.cn/ecshop-power-by-ecshop/</link>
<title><![CDATA[ecshop去掉Powered by ECShop和底部信息]]></title> 
<author>admin &lt;webmaster@freezingsun.com&gt;</author>
<category><![CDATA[心情文摘]]></category>
<pubDate>Sun, 25 Apr 2010 03:53:07 +0000</pubDate> 
<guid>http://agileblog.cn/ecshop-power-by-ecshop/</guid> 
<description>
<![CDATA[ 
	<div class="code">当你刚刚装ecshop的时候，他的标题的版权Powered by ECShop显示如此信息．很多时候需要修改，或者是去除．此信息不但不是在模板中，而是在php公共文件中。 打开includes/lib_main.php,找到as<br/></div><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当你刚刚装ecshop的时候，他的标题的版权Powered by ECShop显示如此信息．很多时候需要修改，或者是去除．此信息不但不是在模板中，而是在php公共文件中。<br/>&nbsp;&nbsp;&nbsp;&nbsp; 打开includes/lib_main.php,看到ecshop函数 assign_ur_here()，找到$page_title = $GLOBALS['_CFG']['shop_title'] . ' - ' . 'Powered by ECShop';这句，只要把'Powered by ECShop去掉，修改成$page_title = $GLOBALS['_CFG']['shop_title'] ;就可以了。更新后台缓存，就可以去掉他．<br/>&nbsp;&nbsp;&nbsp;&nbsp;如果要修改网站底部信息，你可以找到library/page_footer.lbi文件，修改你所需要的文字和变量．保存就可以．<br/>改完以上的之后，还会出现power by ecshop的一个链接<br/><br/><br/>接下来我们去除那个链接<br/><br/>找到js文件夹下的common.js文件<br/>查找<div class="code">onload = function() </div><br/>把代码块去掉就可以了<br/>以下是需要去掉的代码<br/><div class="code"><br/>onload = function()<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;var link_arr = document.getElementsByTagName(String.fromCharCode(65));<br/>&nbsp;&nbsp;&nbsp;&nbsp;var link_str;<br/>&nbsp;&nbsp;&nbsp;&nbsp;var link_text;<br/>&nbsp;&nbsp;&nbsp;&nbsp;var regg, cc;<br/>&nbsp;&nbsp;&nbsp;&nbsp;var rmd, rmd_s, rmd_e, link_eorr = 0;<br/>&nbsp;&nbsp;&nbsp;&nbsp;var e = new Array(97, 98, 99,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;100, 101, 102, 103, 104, 105, 106, 107, 108, 109,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;110, 111, 112, 113, 114, 115, 116, 117, 118, 119,<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;120, 121, 122<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br/><br/>&nbsp;&nbsp;try<br/>&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;for(var i = 0; i &lt; link_arr.length; i++)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link_str = link_arr&#91;i&#93;.href;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (link_str.indexOf(String.fromCharCode(e&#91;22&#93;, 119, 119, 46, e&#91;4&#93;, 99, e&#91;18&#93;, e&#91;7&#93;, e&#91;14&#93;, <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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n