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

<channel>
	<title>AgilePHP &#187; 软件</title>
	<atom:link href="http://www.agilephp.net/category/%e8%bd%af%e4%bb%b6/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.agilephp.net</link>
	<description>开发可以敏捷，人生需要慢慢体味</description>
	<lastBuildDate>Fri, 09 Jul 2010 14:37:06 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>使用JDK进行Performance Tuning</title>
		<link>http://www.agilephp.net/2010/04/performance-tuning-with-jdk-tools/</link>
		<comments>http://www.agilephp.net/2010/04/performance-tuning-with-jdk-tools/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 13:40:41 +0000</pubDate>
		<dc:creator>bbiao</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[软件]]></category>
		<category><![CDATA[jconsole]]></category>
		<category><![CDATA[jdk]]></category>
		<category><![CDATA[jmap]]></category>
		<category><![CDATA[jps]]></category>
		<category><![CDATA[jvisualvm]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[tuning]]></category>

		<guid isPermaLink="false">http://www.agilephp.net/2010/04/%e4%bd%bf%e7%94%a8jdk%e8%bf%9b%e8%a1%8cperformance-tuning/</guid>
		<description><![CDATA[JDK里有三个很好用的工具，jmap，jconsole和jvisualvm，三个工具都各有所侧重，但是如果你的系统遇到性能瓶颈（内存不足或是CPU占用率过高），你可以通过这三个工具来发现应用里的hot spot。我今天只记一下大概的用法，给自己做个备忘，详细的使用说明，等忙完了这段时间，整理一下。
先介绍一个小工具，jps，这也是jdk自带的工具之一，可以列出系统里所有的java进程。
jmap可以查看程序中堆的使用情况，具体的用法是：
jmap –histo:live &#60;pid&#62;；
以及可以将堆dump到一个文件，命令是：
jmap –dump:format=b,file=heap.bin &#60;pid&#62;；
请在&#60;pid&#62;处填入相应的进程的id。
jconsole可以查看某个java进程的内存使用、CPU占用率等，
如果想要远程查看某一java程序，则需要在该程序启动参数里加下如下参数：
-Dcom.sun.management.jmxremote   -Dcom.sun.management.jmxremote.port=9001     -Dcom.sun.management.jmxremote.authenticate=false    -Dcom.sun.management.jmxremote.ssl=false
上文使用的9001是监听的端口号，你可以指定其他的值。然后在你的终端键入jconsole，选择连接远程进程，并填入相应的主机名和端口即可。如果无法连接，请修改/etc/hosts里的内容，将localhost绑定到机器的外部ip地址。
相应的数据可以导出为一个csv文件，这个很方便。
jvisualvm功能与jconsole的基本类似，但是可以做性能分析。
即可以分析出CPU时间被哪些线程所占用了，等等，并且它支持jmx，这东西我只听说过没用过，先放一边不表。
配置jvisualvm不需要改动原程序的启动参数，只需要在远程主机上运行jstatd即可。
新建一个叫jstatd.all.policy的文件，内容是：
grant codebase &#34;file:${java.home}/../lib/tools.jar&#34; {   &#160;&#160;&#160; permission java.security.AllPermission;    };
然后使用如下命令启动jstatd，
jstatd -J-Djava.security.policy=jstatd.all.policy
然后在jvisualvm里选择添加远程主机即可。如果无法连接，请修改/etc/hosts里的内容，将localhost绑定到机器的外部ip地址。










Related Posts

		Java中线程同步的简单用法
		Python and RRD
		QQ五笔输入法
	
<!-- Easy AdSense V2.90 -->
<!-- Post[count: 3] -->
<div class="ezAdsense adsense adsense-leadout" style="float:left;margin:12px;"><script type="text/javascript"><!--
google_ad_client = "pub-1450467177950189";
/* AgilePHP Lite Ad */
google_ad_slot = "7710335250";
google_ad_width = 234;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div>
<!-- Easy AdSense V2.90 -->



<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.agilephp.net/2009/10/java-wait-and-notify/" rel="bookmark">Java中线程同步的简单用法</a><!-- (5.53993)--></li>
		<li><a href="http://www.agilephp.net/2010/01/python-and-rrd/" rel="bookmark">Python and RRD</a><!-- (4.87102)--></li>
		<li><a href="http://www.agilephp.net/2009/12/qq-wubi-input-method/" rel="bookmark">QQ五笔输入法</a><!-- (4.83449)--></li>
	</ol>
]]></description>
			<content:encoded><![CDATA[<p>JDK里有三个很好用的工具，<a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jmap.html">jmap</a>，<a href="http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html">jconsole</a>和<a href="http://java.sun.com/javase/6/docs/technotes/tools/share/jvisualvm.html">jvisualvm</a>，三个工具都各有所侧重，但是如果你的系统遇到性能瓶颈（内存不足或是CPU占用率过高），你可以通过这三个工具来发现应用里的hot spot。我今天只记一下大概的用法，给自己做个备忘，详细的使用说明，等忙完了这段时间，整理一下。</p>
<p>先介绍一个小工具，jps，这也是jdk自带的工具之一，可以列出系统里所有的java进程。</p>
<p><strong>jmap可以查看程序中堆的使用情况，具体的用法是：</strong></p>
<p>jmap –histo:live &lt;pid&gt;；</p>
<p>以及可以将堆dump到一个文件，命令是：</p>
<p>jmap –dump:format=b,file=heap.bin &lt;pid&gt;；</p>
<p>请在&lt;pid&gt;处填入相应的进程的id。</p>
<p><strong>jconsole可以查看某个java进程的内存使用、CPU占用率等，</strong></p>
<p>如果想要远程查看某一java程序，则需要在该程序启动参数里加下如下参数：</p>
<p>-Dcom.sun.management.jmxremote   <br />-Dcom.sun.management.jmxremote.port=<em>9001     <br /></em>-Dcom.sun.management.jmxremote.authenticate=false    <br />-Dcom.sun.management.jmxremote.ssl=false</p>
<p>上文使用的9001是监听的端口号，你可以指定其他的值。然后在你的终端键入jconsole，选择连接远程进程，并填入相应的主机名和端口即可。<em>如果无法连接，请修改/etc/hosts里的内容，将localhost绑定到机器的外部ip地址。</em></p>
<p>相应的数据可以导出为一个csv文件，这个很方便。</p>
<p><strong>jvisualvm功能与jconsole的基本类似，但是可以做性能分析。</strong></p>
<p>即可以分析出CPU时间被哪些线程所占用了，等等，并且它支持<a href="http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/">jmx</a>，这东西我只听说过没用过，先放一边不表。</p>
<p>配置jvisualvm不需要改动原程序的启动参数，只需要在远程主机上运行<a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstatd.html">jstatd</a>即可。</p>
<p>新建一个叫jstatd.all.policy的文件，内容是：</p>
<p>grant codebase &quot;file:${java.home}/../lib/tools.jar&quot; {   <br />&#160;&#160;&#160; permission java.security.AllPermission;    <br />};</p>
<p>然后使用如下命令启动jstatd，</p>
<p>jstatd -J-Djava.security.policy=jstatd.all.policy</p>
<p>然后在jvisualvm里选择添加远程主机即可。<em>如果无法连接，请修改/etc/hosts里的内容，将localhost绑定到机器的外部ip地址。</em></p>


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.agilephp.net/2009/10/java-wait-and-notify/" rel="bookmark">Java中线程同步的简单用法</a><!-- (5.53993)--></li>
		<li><a href="http://www.agilephp.net/2010/01/python-and-rrd/" rel="bookmark">Python and RRD</a><!-- (4.87102)--></li>
		<li><a href="http://www.agilephp.net/2009/12/qq-wubi-input-method/" rel="bookmark">QQ五笔输入法</a><!-- (4.83449)--></li>
	</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.agilephp.net/2010/04/performance-tuning-with-jdk-tools/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>无法定位程序输入点DwnHintDxUpdate的解决办法</title>
		<link>http://www.agilephp.net/2010/03/fix-dwnhintdxupdate-problem-in-fetion/</link>
		<comments>http://www.agilephp.net/2010/03/fix-dwnhintdxupdate-problem-in-fetion/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 08:41:41 +0000</pubDate>
		<dc:creator>bbiao</dc:creator>
				<category><![CDATA[软件]]></category>
		<category><![CDATA[DwnHintDxUpdate]]></category>
		<category><![CDATA[fetion]]></category>
		<category><![CDATA[飞信]]></category>

		<guid isPermaLink="false">http://www.agilephp.net/2010/03/%e6%97%a0%e6%b3%95%e5%ae%9a%e4%bd%8d%e7%a8%8b%e5%ba%8f%e8%be%93%e5%85%a5%e7%82%b9dwnhintdxupdate%e7%9a%84%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95/</guid>
		<description><![CDATA[登陆飞信时，出现“无法找到入口”提示：   无法定位程序输入点DwnHintDxUpdate于动态链接库USER32.dll上。
曾经用Windows Vista的时候，上飞信就遇到过这个问题，现在在Windonws 7上用飞信2010，也有这个问题，但可恶的是点击了确定以后，提示还是不断的弹出来。Google了一下，发现了解决办法，有两个：

把安装目录下的dwmapi.dll 删掉
将%windir%\system32\dwmapi.dll复制到飞信的安装文件夹，覆盖原文件

问题是这个dll飞信带着是为了什么？为了在Windows Vista以下版本的机器上正常工作么？那为什么不测测在Windows Vista以上的机器上是否正常，或者安装的时候就检测一下，如果是Windows Vista以上版本的系统，就不要拷贝这个dll了。


Related Posts

		Portable Firefox中安装Flash插件
	


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.agilephp.net/2009/10/install-flash-plugin-on-portable-firefox/" rel="bookmark">Portable Firefox中安装Flash插件</a><!-- (3.41972)--></li>
	</ol>
]]></description>
			<content:encoded><![CDATA[<p>登陆飞信时，出现“无法找到入口”提示：   <br />无法定位程序输入点DwnHintDxUpdate于动态链接库USER32.dll上。</p>
<p>曾经用Windows Vista的时候，上飞信就遇到过这个问题，现在在Windonws 7上用飞信2010，也有这个问题，但可恶的是点击了确定以后，提示还是不断的弹出来。Google了一下，发现了解决办法，有两个：</p>
<ol>
<li>把安装目录下的dwmapi.dll 删掉</li>
<li>将%windir%\system32\dwmapi.dll复制到飞信的安装文件夹，覆盖原文件</li>
</ol>
<p>问题是这个dll飞信带着是为了什么？为了在Windows Vista以下版本的机器上正常工作么？那为什么不测测在Windows Vista以上的机器上是否正常，或者安装的时候就检测一下，如果是Windows Vista以上版本的系统，就不要拷贝这个dll了。</p>


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.agilephp.net/2009/10/install-flash-plugin-on-portable-firefox/" rel="bookmark">Portable Firefox中安装Flash插件</a><!-- (3.41972)--></li>
	</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.agilephp.net/2010/03/fix-dwnhintdxupdate-problem-in-fetion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Firefox 3.6使用Firefox 4.0的主题</title>
		<link>http://www.agilephp.net/2010/01/make-firefox-3-6-a-ff4-style/</link>
		<comments>http://www.agilephp.net/2010/01/make-firefox-3-6-a-ff4-style/#comments</comments>
		<pubDate>Fri, 29 Jan 2010 02:21:49 +0000</pubDate>
		<dc:creator>bbiao</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[Freeware]]></category>
		<category><![CDATA[软件]]></category>
		<category><![CDATA[firefox4]]></category>
		<category><![CDATA[glass]]></category>
		<category><![CDATA[win7]]></category>
		<category><![CDATA[Windows 7]]></category>

		<guid isPermaLink="false">http://www.agilephp.net/2010/01/firefox-3-6%e4%bd%bf%e7%94%a8firefox-4-0%e7%9a%84%e4%b8%bb%e9%a2%98/</guid>
		<description><![CDATA[Firefox 4.0还没有出现，但是出现了一个界面的草图，很不错。你可以利用Firefox 3.6的众插件来达到相同的效果。

需要安装 Strata40 主题 以及相应的选项插件 StrataBuddy。
此外，为了实现标签及地址栏上显示进度条的功能，还需安装 Fission （Firefox 3.7测试版用户需要安装此版本Fission） 以及 Tab Progress Bar 这两个插件。同时作者也建议安装 App Tabs 、Omnibar （整合地址栏与搜索栏）、Download Statusbar （类似 Google Chrome 那样的下载状态栏） 这三个插件，仍在使用 Firefox 3.5 的小盆友建议升到 3.6，否则还要多装一个隐藏菜单栏的插件。
再此外，追求完美的小朋友还可以安装这个脚本（需 Stylish 插件）：Tweaks for Spewboy’s Strata 40，可以让状态栏也透明显示，并修正了一些小瑕疵。
文章摘自此处


Related Posts

		使用mklink或junction后Chrome无法安装扩展的解决办法
		Portable Firefox中安装Flash插件
		QQ五笔输入法
	


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.agilephp.net/2010/01/fix-chrome-to-add-extensions-in-a-junction-folder/" rel="bookmark">使用mklink或junction后Chrome无法安装扩展的解决办法</a><!-- (4.94982)--></li>
		<li><a href="http://www.agilephp.net/2009/10/install-flash-plugin-on-portable-firefox/" rel="bookmark">Portable Firefox中安装Flash插件</a><!-- (4.29713)--></li>
		<li><a href="http://www.agilephp.net/2009/12/qq-wubi-input-method/" rel="bookmark">QQ五笔输入法</a><!-- (2.9361)--></li>
	</ol>
]]></description>
			<content:encoded><![CDATA[<p>Firefox 4.0还没有出现，但是出现了一个界面的草图，很不错。你可以利用Firefox 3.6的众插件来达到相同的效果。</p>
<h6><a href="http://www.agilephp.net/wp-content/uploads/2010/01/strata40.png"><img style="display: inline; border-width: 0px;" title="strata40" src="http://www.agilephp.net/wp-content/uploads/2010/01/strata40_thumb.png" border="0" alt="strata40" width="604" height="435" /></a></h6>
<p>需要安装 <a href="https://addons.mozilla.org/en-US/firefox/addon/14284/">Strata40 主题</a> 以及相应的选项插件 <a href="https://addons.mozilla.org/en-US/firefox/addon/14762">StrataBuddy</a>。</p>
<p>此外，为了实现标签及地址栏上显示进度条的功能，还需安装 <a href="https://addons.mozilla.org/en-US/firefox/addon/1951">Fission</a> （Firefox 3.7测试版用户需要安装此版本<a href="http://token.ro/pub/aleator/fission_bug514915.xpi">Fission</a>） 以及 <a href="https://addons.mozilla.org/en-US/firefox/addon/14644">Tab Progress Bar</a> 这两个插件。同时作者也建议安装 <a href="https://addons.mozilla.org/en-US/firefox/addon/47734">App Tabs</a> 、<a href="https://addons.mozilla.org/en-US/firefox/addon/8823">Omnibar</a> （整合地址栏与搜索栏）、<a href="https://addons.mozilla.org/en-US/firefox/addon/26">Download Statusbar</a> （类似 Google Chrome 那样的下载状态栏） 这三个插件，仍在使用 Firefox 3.5 的小盆友建议升到 3.6，否则还要多装一个<a href="https://addons.mozilla.org/en-US/firefox/addon/4762">隐藏菜单栏的插件</a>。</p>
<p>再此外，追求完美的小朋友还可以安装这个脚本（需 <a href="https://addons.mozilla.org/firefox/addon/2108">Stylish 插件</a>）：<a href="http://userstyles.org/styles/21756">Tweaks for Spewboy’s Strata 40</a>，可以让状态栏也透明显示，并修正了一些小瑕疵。</p>
<p>文章摘自<a href="http://lucifr.com/2010/01/28/firefox-4-theme-fx4-and-strata40/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+lucifr+%28Lucifr%29" target="_blank">此处</a></p>


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.agilephp.net/2010/01/fix-chrome-to-add-extensions-in-a-junction-folder/" rel="bookmark">使用mklink或junction后Chrome无法安装扩展的解决办法</a><!-- (4.94982)--></li>
		<li><a href="http://www.agilephp.net/2009/10/install-flash-plugin-on-portable-firefox/" rel="bookmark">Portable Firefox中安装Flash插件</a><!-- (4.29713)--></li>
		<li><a href="http://www.agilephp.net/2009/12/qq-wubi-input-method/" rel="bookmark">QQ五笔输入法</a><!-- (2.9361)--></li>
	</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.agilephp.net/2010/01/make-firefox-3-6-a-ff4-style/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CentOS配置vsftpd遇到550错误的解决办法</title>
		<link>http://www.agilephp.net/2010/01/solve-error-550-in-centos-and-vsftpd/</link>
		<comments>http://www.agilephp.net/2010/01/solve-error-550-in-centos-and-vsftpd/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 03:24:31 +0000</pubDate>
		<dc:creator>bbiao</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[软件]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[error 550]]></category>
		<category><![CDATA[selinux]]></category>
		<category><![CDATA[vsftpd]]></category>

		<guid isPermaLink="false">http://www.agilephp.net/2010/01/centos%e9%85%8d%e7%bd%aevsftpd%e9%81%87%e5%88%b0550%e9%94%99%e8%af%af%e7%9a%84%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95/</guid>
		<description><![CDATA[安装vsftpd很简单：yum install vsftpd
启动vsftpd也很简单：service vsftpd start
默认情况下用root是无法连接的，你可以创建一个非root帐户登录，但是登录是可以登录，却没有办法创建或是上传文件。有人说，可以把SELinux关掉，可是这样未免也有点尺度太大了，其实是SELinux里的设置问题，只要修改相应的配置就可以了。
发现问题的方法：
# getsebool -a &#124; grep ftp    allow_ftpd_anon_write &#8211;&#62; off     allow_ftpd_full_access &#8211;&#62; off     allow_ftpd_use_cifs &#8211;&#62; off     allow_ftpd_use_nfs &#8211;&#62; off     ftp_home_dir &#8211;&#62; off     httpd_enable_ftp_server &#8211;&#62; off     [...]

<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.agilephp.net/2010/01/python-and-rrd/" rel="bookmark">Python and RRD</a><!-- (5.02654)--></li>
		<li><a href="http://www.agilephp.net/2009/08/cloud-to-overview/" rel="bookmark">了解一些“云”</a><!-- (4.49642)--></li>
		<li><a href="http://www.agilephp.net/2010/04/performance-tuning-with-jdk-tools/" rel="bookmark">使用JDK进行Performance Tuning</a><!-- (3)--></li>
	</ol>
]]></description>
			<content:encoded><![CDATA[<p>安装vsftpd很简单：yum install vsftpd</p>
<p>启动vsftpd也很简单：service vsftpd start</p>
<p>默认情况下用root是无法连接的，你可以创建一个非root帐户登录，但是登录是可以登录，却没有办法创建或是上传文件。有人说，可以把SELinux关掉，可是这样未免也有点尺度太大了，其实是SELinux里的设置问题，只要修改相应的配置就可以了。</p>
<p>发现问题的方法：</p>
<p># getsebool -a | grep ftp    <br />allow_ftpd_anon_write &#8211;&gt; off     <br />allow_ftpd_full_access &#8211;&gt; off     <br />allow_ftpd_use_cifs &#8211;&gt; off     <br />allow_ftpd_use_nfs &#8211;&gt; off     <br /><font color="#ff0000">ftp_home_dir &#8211;&gt; off</font>     <br />httpd_enable_ftp_server &#8211;&gt; off     <br />tftp_anon_write –&gt; off</p>
<p>将红色字体部分的值改成on就可以了，设置的方法如下：</p>
<p># setsebool -P ftp_home_dir 1</p>
<p>然后就可以上传文件，做你想做的事情了。</p>


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.agilephp.net/2010/01/python-and-rrd/" rel="bookmark">Python and RRD</a><!-- (5.02654)--></li>
		<li><a href="http://www.agilephp.net/2009/08/cloud-to-overview/" rel="bookmark">了解一些“云”</a><!-- (4.49642)--></li>
		<li><a href="http://www.agilephp.net/2010/04/performance-tuning-with-jdk-tools/" rel="bookmark">使用JDK进行Performance Tuning</a><!-- (3)--></li>
	</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.agilephp.net/2010/01/solve-error-550-in-centos-and-vsftpd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Refactor</title>
		<link>http://www.agilephp.net/2010/01/refactor/</link>
		<comments>http://www.agilephp.net/2010/01/refactor/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 06:32:57 +0000</pubDate>
		<dc:creator>bbiao</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[软件]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[软件工程]]></category>
		<category><![CDATA[重构]]></category>

		<guid isPermaLink="false">http://www.agilephp.net/2010/01/refactor/</guid>
		<description><![CDATA[为什么要重构？我不知道教科书是或是别人都会怎么讲，但是重构对我来说，基本上就是把一个糟糕的设计重新写一遍。那么，什么是我定义的两糟糕的设计？又怎么样来重写，并且期望能够达到一个怎么样的目的才算是一个好的重构呢？
糟糕的设计：


因为时间紧，任务重，没有进行设计，基本上是随心所欲的写出来的代码；


充斥着“if…else…”，打了无数的补丁，新增功能的时候，就得多增加判断条件；


代码变得越来越复杂，相同的代码出现在了不同的地方，修改一处，必须时刻记着也要修改别的地方


那怎么样来重写呢？完全抛弃以前的代码么？


完全抛弃以前的代码：之前的代码写得实在是太糟糕，没有任何可取之处。而且没有办法使用一些重构工具一进行梳理。我自己没有遇到过这种情况。每一小段代码还不至于写得面目全非，这应该算是代价相对较重的一种重构方法，与其说是重构，不如说是重新写。


使用之前的代码：之前的代码，小的部分还是可以使用的，将它们独立出来，形成单独的模块，并使用一定的模块调用机制（如使用事件机制、插件系统）等，来调合各个不同的模块之间进行谐调工作。


我希望能达到一个几样的效果呢？


简单的说，我比较追求系统的可扩展性（scalability &#38; extensibility）、可维护性、较高的系统性能。


scalability是期望在一个较大的数据集前，系统也可以有一个比较好的表现； 


extensibility是期望系统能够容易的增减功能；


可维护性是期望系统在需要做出修改的时候，可以更加方便；


较高的系统性能，这个就不必说了，谁都希望自己的程序跑得更快。


有些时候，做重构并不是一个简单的决定，因为你要做出更多的工作，还不一定能搞出一个可用的系统来，但是，有风险的事情，做成功了会收获很大的好处，大部分时间，我还是咬咬牙会去选择重构代码。
==eof==
这篇文章也发表在AgilePHP上，快去看看，Refactor


Related Posts

	没有相关文章



<h3>Related Posts</h3>
<ol>
	<li><a href="http://www.agilephp.net" rel="bookmark">没有相关文章</a></li>
</ol>
]]></description>
			<content:encoded><![CDATA[<p>为什么要重构？我不知道教科书是或是别人都会怎么讲，但是重构对我来说，基本上就是把一个糟糕的设计重新写一遍。那么，什么是我定义的两糟糕的设计？又怎么样来重写，并且期望能够达到一个怎么样的目的才算是一个好的重构呢？</p>
<p><font color="#008080">糟糕的设计：</font></p>
<ol>
<li>
<div align="left">因为时间紧，任务重，没有进行设计，基本上是随心所欲的写出来的代码；</div>
</li>
<li>
<div align="left">充斥着“if…else…”，打了无数的补丁，新增功能的时候，就得多增加判断条件；</div>
</li>
<li>
<div align="left">代码变得越来越复杂，相同的代码出现在了不同的地方，修改一处，必须时刻记着也要修改别的地方</div>
</li>
</ol>
<p align="left"><font color="#008080">那怎么样来重写呢？完全抛弃以前的代码么？</font></p>
<ol>
<li>
<div align="left">完全抛弃以前的代码：之前的代码写得实在是太糟糕，没有任何可取之处。而且没有办法使用一些重构工具一进行梳理。我自己没有遇到过这种情况。每一小段代码还不至于写得面目全非，这应该算是代价相对较重的一种重构方法，与其说是重构，不如说是重新写。</div>
</li>
<li>
<div align="left">使用之前的代码：之前的代码，小的部分还是可以使用的，将它们独立出来，形成单独的模块，并使用一定的模块调用机制（如使用事件机制、插件系统）等，来调合各个不同的模块之间进行谐调工作。</div>
</li>
</ol>
<p align="left"><font color="#008080">我希望能达到一个几样的效果呢？</font></p>
<ol>
<li>
<div align="left">简单的说，我比较追求系统的可扩展性（scalability &amp; extensibility）、可维护性、较高的系统性能。</div>
</li>
<li>
<div align="left">scalability是期望在一个较大的数据集前，系统也可以有一个比较好的表现； </div>
</li>
<li>
<div align="left">extensibility是期望系统能够容易的增减功能；</div>
</li>
<li>
<div align="left">可维护性是期望系统在需要做出修改的时候，可以更加方便；</div>
</li>
<li>
<div align="left">较高的系统性能，这个就不必说了，谁都希望自己的程序跑得更快。</div>
</li>
</ol>
<p align="left">有些时候，做重构并不是一个简单的决定，因为你要做出更多的工作，还不一定能搞出一个可用的系统来，但是，有风险的事情，做成功了会收获很大的好处，大部分时间，我还是咬咬牙会去选择重构代码。</p>
<p align="left">==eof==</p>
<p align="left">这篇文章也发表在AgilePHP上，快去看看，Refactor</p>


<h3>Related Posts</h3>
<ol>
	<li><a href="http://www.agilephp.net" rel="bookmark">没有相关文章</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.agilephp.net/2010/01/refactor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用mklink或junction后Chrome无法安装扩展的解决办法</title>
		<link>http://www.agilephp.net/2010/01/fix-chrome-to-add-extensions-in-a-junction-folder/</link>
		<comments>http://www.agilephp.net/2010/01/fix-chrome-to-add-extensions-in-a-junction-folder/#comments</comments>
		<pubDate>Fri, 08 Jan 2010 13:30:58 +0000</pubDate>
		<dc:creator>bbiao</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[软件]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[extension]]></category>
		<category><![CDATA[junction]]></category>
		<category><![CDATA[mklink]]></category>
		<category><![CDATA[Vista]]></category>
		<category><![CDATA[win7]]></category>
		<category><![CDATA[无法安装]]></category>

		<guid isPermaLink="false">http://www.agilephp.net/2010/01/%e4%bd%bf%e7%94%a8mklink%e6%88%96junction%e5%90%8echrome%e6%97%a0%e6%b3%95%e5%ae%89%e8%a3%85%e6%89%a9%e5%b1%95%e7%9a%84%e8%a7%a3%e5%86%b3%e5%8a%9e%e6%b3%95/</guid>
		<description><![CDATA[Chrome官方的扩展中心已经上线了，现在有相当多的扩展开用。之前一直不愿意放弃Firefox使用Google Chrome，有一大部分原因是因为Firefox上的一些扩展。之前我也尝试过在Chrome上安装扩展，但是每次都在“加载中”便没有反应了。今天下了功夫搜索了一下，发现所有使用过mklink或是junction，把User Profile从默认位置移出来的同学都有这个问题，而且最后把问题归结到TEMP和TMP这两个变量指向的位置上，所以我想了个办法，写了个简单的脚本，


   1: @echo off

   2: set TEMP=C:\Users\Google\Temp

   3: set TMP=C:\Users\Google\Temp

   4: C:\Users\Talent\AppData\Local\Google\Chrome\Application\chrome.exe

   5: exit


按这个思路，只要把TEMP跟TMP设置到非mklink或是junciton后的位置，再启动Chrome就可以了。
另外，确实发现了一大批好用的扩展，与Google功能集成的扩展我基本上都装了，来让他们亮个相：
 
有空我再把每一个扩展都写一下介绍和安装地址。
此法同样适用于解决无法安装主题的问题。


Related Posts

		加农炮打豆豆 &#8211; 午休的时候玩的小游戏
		mklink.exe
		Firefox 3.6使用Firefox 4.0的主题
	


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.agilephp.net/2009/05/cannon/" rel="bookmark">加农炮打豆豆 &#8211; 午休的时候玩的小游戏</a><!-- (9.40374)--></li>
		<li><a href="http://www.agilephp.net/2009/08/mklink-exe/" rel="bookmark">mklink.exe</a><!-- (9.3083)--></li>
		<li><a href="http://www.agilephp.net/2010/01/make-firefox-3-6-a-ff4-style/" rel="bookmark">Firefox 3.6使用Firefox 4.0的主题</a><!-- (4.42407)--></li>
	</ol>
]]></description>
			<content:encoded><![CDATA[<p>Chrome官方的扩展中心已经上线了，现在有相当多的扩展开用。之前一直不愿意放弃Firefox使用Google Chrome，有一大部分原因是因为Firefox上的一些扩展。之前我也尝试过在Chrome上安装扩展，但是每次都在“加载中”便没有反应了。今天下了功夫搜索了一下，发现所有使用过mklink或是junction，把User Profile从默认位置移出来的同学都有这个问题，而且最后把问题归结到TEMP和TMP这两个变量指向的位置上，所以我想了个办法，写了个简单的脚本，</p>
<div style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right: silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
<div style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum1">   1:</span> @<span style="color: #0000ff">echo</span> off</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum2">   2:</span> set TEMP=C:\Users\Google\Temp</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum3">   3:</span> set TMP=C:\Users\Google\Temp</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum4">   4:</span> C:\Users\Talent\AppData\Local\Google\Chrome\Application\chrome.exe</pre>
<p><!--CRLF--></p>
<pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: &#39;Courier New&#39;, courier, monospace; direction: ltr; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #606060" id="lnum5">   5:</span> exit</pre>
<p><!--CRLF--></div>
</div>
<p>按这个思路，只要把TEMP跟TMP设置到非mklink或是junciton后的位置，再启动Chrome就可以了。</p>
<p>另外，确实发现了一大批好用的扩展，与Google功能集成的扩展我基本上都装了，来让他们亮个相：</p>
<p><a href="http://www.agilephp.net/wp-content/uploads/2010/01/image1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.agilephp.net/wp-content/uploads/2010/01/image_thumb1.png" width="681" height="57" /></a> </p>
<p>有空我再把每一个扩展都写一下介绍和安装地址。</p>
<p>此法同样适用于解决无法安装主题的问题。</p>


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.agilephp.net/2009/05/cannon/" rel="bookmark">加农炮打豆豆 &#8211; 午休的时候玩的小游戏</a><!-- (9.40374)--></li>
		<li><a href="http://www.agilephp.net/2009/08/mklink-exe/" rel="bookmark">mklink.exe</a><!-- (9.3083)--></li>
		<li><a href="http://www.agilephp.net/2010/01/make-firefox-3-6-a-ff4-style/" rel="bookmark">Firefox 3.6使用Firefox 4.0的主题</a><!-- (4.42407)--></li>
	</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.agilephp.net/2010/01/fix-chrome-to-add-extensions-in-a-junction-folder/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>糟糕的网银用户体验</title>
		<link>http://www.agilephp.net/2009/12/online-pay-ue/</link>
		<comments>http://www.agilephp.net/2009/12/online-pay-ue/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 11:33:13 +0000</pubDate>
		<dc:creator>bbiao</dc:creator>
				<category><![CDATA[感悟]]></category>
		<category><![CDATA[生活]]></category>
		<category><![CDATA[软件]]></category>
		<category><![CDATA[ukey]]></category>
		<category><![CDATA[数字证书]]></category>
		<category><![CDATA[用户体验]]></category>
		<category><![CDATA[网上支付]]></category>
		<category><![CDATA[网银]]></category>

		<guid isPermaLink="false">http://www.agilephp.net/2009/12/%e7%b3%9f%e7%b3%95%e7%9a%84%e7%bd%91%e9%93%b6%e7%94%a8%e6%88%b7%e4%bd%93%e9%aa%8c/</guid>
		<description><![CDATA[周日兴冲冲的想给支付宝账户充点钱进去，之前没有使用过网银的网上支付功能，当时自己在实验室，所以回了趟宿舍取了下UKey，又去另一家银行把数字证书重新申请了一下，回到实验室，两个账户的密码却死活试不出来了，而且超过了最大可尝试次数，帐户被冻结，直到今天我回忆起了密码，才“顺利地”把钱充到了支付宝的帐户里，充值的过程没有遇到任何问题。
晚上睡不着觉的时候，我自己想了想，网银为什么给我的感觉总是使用体验相当糟糕，为什么我情愿把钱全部冲到支付宝里，再通过支付宝进行支付，现总结如下。
第一，国内各大银行几乎都推出了网上支付功能，但是其支付过程又各不相同。有的需要下载数字证书，有的需要使用Ukey，这无法让一个已经有了某家银行网银使用经验的人，迅速的可以掌握另一家网银的使用方法。之于软件，无异于用户会用MSN后，却不会用GTalk，或是用户习惯了用QQ，需要用阿里旺旺的时候却摸不着头脑，这无疑是很糟糕的。
其次，由于银行卡帐号比较长，一般人可能记不住那一串数字，于是有些网银便推出了一项“便捷”的功能，为帐户起一个别名，类似于你的网名。问题是，对于一个不常使用网银的人，这个别称很有可能被忘记，有些傻x的网银登录界面又不提供一个直接输入银行帐户的可选项，原本便捷的东西变得不便捷。
第三，由于安全的角度考虑，网银一般需要在浏览器上安装一些插件，国内有个傻x的网银，网银登录与网上支付居然需要执行两个不同的可运行程序，做到一起，有那么难么？但是对于IE众多的版本，开发和安装这些插件，无论对于开发者还是使用者，都是一个噩梦。
第四，有些网银需要支付密码，有些不需要，有些支付密码与ATM机上的取款密码相同，有些则强制你不能设置成相同的，需要另外再设一个密码。网银登录密码，取款密码，查询密码，网上支付密码，连我自己目前都没太有信心可以记清楚这么多密码了，更何况大众呢？
听说在国外用信用卡在网上支付很方便，没有体验过，不知道是不是真的如此？
我觉得一个好的网上支付体验应该是这样的，网银的登录密码与查询密码一致，网银的支付密码与取款密码一致，网银提供账户别名的功能，但是一定可以通过输入账号来登录。中国这么多家银行，真该形成一个统一的标准，不让人在在网银面前望而却步。


Related Posts

	没有相关文章



<h3>Related Posts</h3>
<ol>
	<li><a href="http://www.agilephp.net" rel="bookmark">没有相关文章</a></li>
</ol>
]]></description>
			<content:encoded><![CDATA[<p>周日兴冲冲的想给支付宝账户充点钱进去，之前没有使用过网银的网上支付功能，当时自己在实验室，所以回了趟宿舍取了下UKey，又去另一家银行把数字证书重新申请了一下，回到实验室，两个账户的密码却死活试不出来了，而且超过了最大可尝试次数，帐户被冻结，直到今天我回忆起了密码，才“顺利地”把钱充到了支付宝的帐户里，充值的过程没有遇到任何问题。</p>
<p>晚上睡不着觉的时候，我自己想了想，网银为什么给我的感觉总是使用体验相当糟糕，为什么我情愿把钱全部冲到支付宝里，再通过支付宝进行支付，现总结如下。</p>
<p>第一，国内各大银行几乎都推出了网上支付功能，但是其支付过程又各不相同。有的需要下载数字证书，有的需要使用Ukey，这无法让一个已经有了某家银行网银使用经验的人，迅速的可以掌握另一家网银的使用方法。之于软件，无异于用户会用MSN后，却不会用GTalk，或是用户习惯了用QQ，需要用阿里旺旺的时候却摸不着头脑，这无疑是很糟糕的。</p>
<p>其次，由于银行卡帐号比较长，一般人可能记不住那一串数字，于是有些网银便推出了一项“便捷”的功能，为帐户起一个别名，类似于你的网名。问题是，对于一个不常使用网银的人，这个别称很有可能被忘记，有些傻x的网银登录界面又不提供一个直接输入银行帐户的可选项，原本便捷的东西变得不便捷。</p>
<p>第三，由于安全的角度考虑，网银一般需要在浏览器上安装一些插件，国内有个傻x的网银，网银登录与网上支付居然需要执行两个不同的可运行程序，做到一起，有那么难么？但是对于IE众多的版本，开发和安装这些插件，无论对于开发者还是使用者，都是一个噩梦。</p>
<p>第四，有些网银需要支付密码，有些不需要，有些支付密码与ATM机上的取款密码相同，有些则强制你不能设置成相同的，需要另外再设一个密码。网银登录密码，取款密码，查询密码，网上支付密码，连我自己目前都没太有信心可以记清楚这么多密码了，更何况大众呢？</p>
<p>听说在国外用信用卡在网上支付很方便，没有体验过，不知道是不是真的如此？</p>
<p>我觉得一个好的网上支付体验应该是这样的，网银的登录密码与查询密码一致，网银的支付密码与取款密码一致，网银提供账户别名的功能，但是一定可以通过输入账号来登录。中国这么多家银行，真该形成一个统一的标准，不让人在在网银面前望而却步。</p>


<h3>Related Posts</h3>
<ol>
	<li><a href="http://www.agilephp.net" rel="bookmark">没有相关文章</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.agilephp.net/2009/12/online-pay-ue/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>也谈射手与开源</title>
		<link>http://www.agilephp.net/2009/12/splayer-and-opensource/</link>
		<comments>http://www.agilephp.net/2009/12/splayer-and-opensource/#comments</comments>
		<pubDate>Sat, 19 Dec 2009 04:29:45 +0000</pubDate>
		<dc:creator>bbiao</dc:creator>
				<category><![CDATA[Freeware]]></category>
		<category><![CDATA[Windows]]></category>
		<category><![CDATA[感悟]]></category>
		<category><![CDATA[软件]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[qq影音]]></category>
		<category><![CDATA[splayer]]></category>
		<category><![CDATA[开源]]></category>
		<category><![CDATA[迅雷看看]]></category>

		<guid isPermaLink="false">http://www.agilephp.net/2009/12/%e4%b9%9f%e8%b0%88%e5%b0%84%e6%89%8b%e4%b8%8e%e5%bc%80%e6%ba%90/</guid>
		<description><![CDATA[网上已经有了相当多的文章，起因是射手指责腾讯没有遵循GPL将其源代码公开，这大概是因为腾讯抄了其王牌应用，字幕自动匹配，接着就有个站出来，说射手自己也没有把所有的代码都公开出来，其自身也没有完全遵守GPL协议，并引发了广泛的讨论；接着，射手做了些解释，并最终把所有源代码都公布了出来。
我先表明一下我的立场，我顶射手！
其实没有什么特别的原因，射手播放器也不是我系统里默认的播放器，默认的我用K-Lite Mega Codec，看高清的我用VideoLan，但是我在电脑里装了射手播放器，我主要用它来看美剧，那些没有配字幕，我又懒得自己去射手网站下字幕的rmvb或是avi文件，很省心，很方便。而且，字幕自动匹配，虽不是什么技术上很牛逼的事情，但是确实是射手的原创。
对于射手看到QQ影音和迅雷看看也先后推出字幕匹配功能后的反应，我想我应该能理解的。作为一个相对较弱的公司，虽然其后的大佬是VeryCD，但是明显中国任何一家互联网公司与腾讯有产品正面的竞争都是一场恶梦，自已原创的、独有的东西，被一个比自己更占有竞争优势的对手占据了，自己不就是死路一条么？射手跑出来指责QQ影音，接着为自己辩护，希望通过保护自己的一些原创的模块来保持自己的竞争优势，这也是可以理解的。中国有多人喜欢装13的人，把别人的软件拿来，通过资源修改的方式，把标题改改，就声称是xxx专版，xxx优化版，这种不尊重知识产权的作法，更别说是把源代码放出来了，那样会有更多的类似的事情发生。程序员无法用法律来保护自己，无法在自己遵守了GPL的时候，也能得到使用自己开放出来的源代码的使用者们同样的尊重，只能说一句悲哀！
不尊重原创，连像Windows这种产品都要有xxx优化版，xxx精简版的国度，在一个可以把别人代码拿过改改版权信息就可以说是自己的软件的国度，我们还指望什么呢？原创的人的利益（作为开源产品，唯一的一点利益就是那虚无的名誉与赞扬了吧？）得不到保护，原创的作品就会死去。是我我也会这样，我可以把代码开放出来，你起码用的时候，不要告诉别人那是你写的，你起码尊重一下我的劳动，不是把代码里的@author从我的名字改成你的名字，那些代码就成了你的劳动成果的。如果国内所有的开发人员都能严格的遵守GPL，遵守各种不同的开源协议，开源才能在中国走得更远。扯得远了，这又是一个法律问题了，据说就算代码是你自己写的，维权也相当难。
射手，当年你就应该把字幕自动匹配申请专利，别人要是在软件里也有同样的功能，就需要我的授权，这样会少了很多麻烦，也能长时间保持自己的竞争优势了吧？


Related Posts

	没有相关文章



<h3>Related Posts</h3>
<ol>
	<li><a href="http://www.agilephp.net" rel="bookmark">没有相关文章</a></li>
</ol>
]]></description>
			<content:encoded><![CDATA[<p>网上已经有了相当多的文章，起因是<a href="http://blog.splayer.org/?p=1960" target="_blank">射手指责腾讯</a>没有遵循GPL将其源代码公开，这大概是因为腾讯抄了其王牌应用，<a href="http://www.splayer.org/" target="_blank">字幕自动匹配</a>，接着就有个站出来，说<a href="http://www.cnbeta.com/articles/100369.htm" target="_blank">射手自己也没有把所有的代码都公开</a>出来，其自身也没有完全遵守GPL协议，并引发了广泛的<a href="http://www.cnbeta.com/articles/100392.htm" target="_blank">讨论</a>；接着，射手做了些<a href="http://blog.splayer.org/?p=1988" target="_blank">解释</a>，并最终把所有源代码都公布了出来。</p>
<p>我先表明一下我的立场，我顶射手！</p>
<p>其实没有什么特别的原因，射手播放器也不是我系统里默认的播放器，默认的我用<a href="http://fileforum.betanews.com/detail/KLite-Mega-Codec-Pack/1080441198/1" target="_blank">K-Lite Mega Codec</a>，看高清的我用<a href="http://www.videolan.org" target="_blank">VideoLan</a>，但是我在电脑里装了射手播放器，我主要用它来看美剧，那些没有配字幕，我又懒得自己去射手网站下字幕的rmvb或是avi文件，很省心，很方便。而且，字幕自动匹配，虽不是什么技术上很牛逼的事情，但是确实是射手的原创。</p>
<p>对于射手看到QQ影音和迅雷看看也先后推出字幕匹配功能后的反应，我想我应该能理解的。作为一个相对较弱的公司，虽然其后的大佬是<a href="http://www.verycd.com" target="_blank">VeryCD</a>，但是明显中国任何一家互联网公司与腾讯有产品正面的竞争都是一场恶梦，自已原创的、独有的东西，被一个比自己更占有竞争优势的对手占据了，自己不就是死路一条么？射手跑出来指责QQ影音，接着为自己辩护，希望通过保护自己的一些原创的模块来保持自己的竞争优势，这也是可以理解的。中国有多人喜欢装13的人，把别人的软件拿来，通过资源修改的方式，把标题改改，就声称是xxx专版，xxx优化版，这种不尊重知识产权的作法，更别说是把源代码放出来了，那样会有更多的类似的事情发生。程序员无法用法律来保护自己，无法在自己遵守了GPL的时候，也能得到使用自己开放出来的源代码的使用者们同样的尊重，只能说一句悲哀！</p>
<p>不尊重原创，连像Windows这种产品都要有xxx优化版，xxx精简版的国度，在一个可以把别人代码拿过改改版权信息就可以说是自己的软件的国度，我们还指望什么呢？原创的人的利益（作为开源产品，唯一的一点利益就是那虚无的名誉与赞扬了吧？）得不到保护，原创的作品就会死去。是我我也会这样，我可以把代码开放出来，你起码用的时候，不要告诉别人那是你写的，你起码尊重一下我的劳动，不是把代码里的@author从我的名字改成你的名字，那些代码就成了你的劳动成果的。如果国内所有的开发人员都能严格的遵守GPL，遵守各种不同的开源协议，开源才能在中国走得更远。扯得远了，这又是一个法律问题了，据说就算代码是你自己写的，维权也相当难。</p>
<p>射手，当年你就应该把字幕自动匹配申请专利，别人要是在软件里也有同样的功能，就需要我的授权，这样会少了很多麻烦，也能长时间保持自己的竞争优势了吧？</p>


<h3>Related Posts</h3>
<ol>
	<li><a href="http://www.agilephp.net" rel="bookmark">没有相关文章</a></li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.agilephp.net/2009/12/splayer-and-opensource/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>QQ五笔输入法</title>
		<link>http://www.agilephp.net/2009/12/qq-wubi-input-method/</link>
		<comments>http://www.agilephp.net/2009/12/qq-wubi-input-method/#comments</comments>
		<pubDate>Thu, 03 Dec 2009 11:55:22 +0000</pubDate>
		<dc:creator>bbiao</dc:creator>
				<category><![CDATA[Freeware]]></category>
		<category><![CDATA[软件]]></category>
		<category><![CDATA[QQ五笔]]></category>
		<category><![CDATA[下载]]></category>
		<category><![CDATA[五笔]]></category>

		<guid isPermaLink="false">http://www.agilephp.net/2009/12/qq%e6%8b%bc%e9%9f%b3%e8%be%93%e5%85%a5%e6%b3%95/</guid>
		<description><![CDATA[我不知道是不是心理因素，感觉上词的速度要比搜狗输入法快0.05秒的样子。听说QQ有意要出五笔输入法的时候，就很激动，不亚于当年听说搜狗也出输入法了；虽然内心里有10000个呼声想用上Google的五笔输入法，但是人家官方现在没有丝毫要这样做的意思，当然也有一些非官方的作法：这里，还有这里。但是这种曲线救国的方式实在不是我这种有些偏执的人所能接受的。
QQ五笔 1.0(77) 下载地址：http://xun6.com/file/372686e14/QQWubi_Setup_1.0.77.201.exe.html
QQ五笔新版本 1.0(79) 下载：http://www.xun6.com/file/2ad203ff2/QQWubi_Setup_1.0.79.201.exe.html
改进：
1. 修正Bug:“封IP”问题
2. 修正Bug:全角不管是中文还是英文输~都变成了￣
3. 加入功能:Shift+字母直接输出(高级设置,默认不开启)
4. 加入功能:分号开头便捷输入(英文,数字,日期,股票,计算器)
目前还不支持与QQ号绑定。
另外也要支持一下我目前最喜欢的搜狗五笔：http://wubi.sogou.com


Related Posts

		使用JDK进行Performance Tuning
	


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.agilephp.net/2010/04/performance-tuning-with-jdk-tools/" rel="bookmark">使用JDK进行Performance Tuning</a><!-- (5.4695)--></li>
	</ol>
]]></description>
			<content:encoded><![CDATA[<p>我不知道是不是心理因素，感觉上词的速度要比搜狗输入法快0.05秒的样子。听说QQ有意要出五笔输入法的时候，就很激动，不亚于当年听说搜狗也出输入法了；虽然内心里有10000个呼声想用上Google的五笔输入法，但是人家官方现在没有丝毫要这样做的意思，当然也有一些非官方的作法：<a href="http://it.newnew.cn/it25054.aspx" target="_blank">这里</a>，还有<a href="http://www.dansion.com/blog/uncategorized/google-inpu.html" target="_blank">这里</a>。但是这种曲线救国的方式实在不是我这种有些偏执的人所能接受的。</p>
<p><a href="http://xun6.com/file/372686e14/QQWubi_Setup_1.0.77.201.exe.html" target="_blank">QQ五笔</a> 1.0(77) 下载地址：<span style="text-decoration: line-through;"><a title="http://xun6.com/file/372686e14/QQWubi_Setup_1.0.77.201.exe.html" href="http://xun6.com/file/372686e14/QQWubi_Setup_1.0.77.201.exe.html">http://xun6.com/file/372686e14/QQWubi_Setup_1.0.77.201.exe.html</a></span></p>
<p><a href="http://www.agilephp.net/2009/12/qq-wubi-input-method/">QQ五笔新版本</a> 1.0(79) 下载：<a href="http://www.xun6.com/file/2ad203ff2/QQWubi_Setup_1.0.79.201.exe.html" target="_blank">http://www.xun6.com/file/2ad203ff2/QQWubi_Setup_1.0.79.201.exe.html</a></p>
<p>改进：</p>
<p>1. 修正Bug:“封IP”问题<br />
2. 修正Bug:全角不管是中文还是英文输~都变成了￣<br />
3. 加入功能:Shift+字母直接输出(高级设置,默认不开启)<br />
4. 加入功能:分号开头便捷输入(英文,数字,日期,股票,计算器)</p>
<p>目前还不支持与QQ号绑定。</p>
<p>另外也要支持一下我目前最喜欢的<a href="http://wubi.sogou.com" target="_blank">搜狗五笔</a>：<a href="http://wubi.sogou.com">http://wubi.sogou.com</a></p>


<h3>Related Posts</h3>
<ol>
		<li><a href="http://www.agilephp.net/2010/04/performance-tuning-with-jdk-tools/" rel="bookmark">使用JDK进行Performance Tuning</a><!-- (5.4695)--></li>
	</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.agilephp.net/2009/12/qq-wubi-input-method/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
