<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4830057219783177039</id><updated>2011-11-27T15:17:46.624-08:00</updated><category term='apache'/><category term='Business Analyst'/><category term='Component-based Development'/><category term='wireframe'/><category term='tools'/><category term='java'/><category term='mysql'/><category term='CentOs'/><category term='php'/><category term='books'/><category term='vmware'/><category term='C/C++'/><category term='Open source project'/><category term='Zend Framework'/><category term='Object-oriented programming'/><category term='UI'/><category term='program'/><category term='UML'/><category term='music'/><category term='api'/><category term='blog'/><category term='Refactoring'/><category term='flex'/><category term='Nicolas Cage'/><category term='design pattern'/><category term='Productivity'/><category term='Chat'/><category term='yum'/><category term='TDD'/><category term='agile'/><category term='Conception'/><category term='Odour'/><category term='linux command'/><category term='Test Case'/><category term='zend Studio'/><category term='eclipse'/><category term='Magic Story'/><category term='project management'/><category term='ubuntu'/><category term='SVN'/><category term='hacking tools'/><category term='database'/><category term='Web Designing'/><title type='text'>Edwin Chain</title><subtitle type='html'>&amp;lt;?php  if ( $isProgramming ) echo &amp;quot;It&amp;#39;s my happy day!&amp;quot;;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default?start-index=101&amp;max-results=100'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>118</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-1439064381176028686</id><published>2010-04-27T09:57:00.000-07:00</published><updated>2010-04-27T09:59:20.103-07:00</updated><title type='text'>翻墙归来</title><content type='html'>自从国内被封，很久没来自己的blog了，这次终于回来了，活活&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-1439064381176028686?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/1439064381176028686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=1439064381176028686' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1439064381176028686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1439064381176028686'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2010/04/blog-post.html' title='翻墙归来'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-1460275847593620954</id><published>2009-12-29T10:36:00.001-08:00</published><updated>2009-12-29T10:36:08.474-08:00</updated><title type='text'>b</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;b&lt;/p&gt;in reference to: &lt;a href='http://www.google.com/'&gt;Google&lt;/a&gt; (&lt;a href='http://www.google.com/sidewiki/entry/106317028855257131763/id/7cakDYZW57FQez26S3ithlgHPPQ'&gt;view on Google Sidewiki&lt;/a&gt;)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-1460275847593620954?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/1460275847593620954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=1460275847593620954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1460275847593620954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1460275847593620954'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/12/b.html' title='b'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-1179153924443311503</id><published>2009-05-01T20:18:00.000-07:00</published><updated>2009-05-01T20:23:18.425-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C/C++'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Install Anjuta for C.C++ development on Ubuntu 8.X</title><content type='html'>1 install anjuta&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo apt-get install anjuta&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2 install C/C++ enviroment and related packages &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo apt-get install autogen automake build-essential indent intltool&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3 install development documents&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo apt-get install manpages-dev&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-1179153924443311503?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/1179153924443311503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=1179153924443311503' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1179153924443311503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1179153924443311503'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/05/install-anjuta-for-cc-development-on.html' title='Install Anjuta for C.C++ development on Ubuntu 8.X'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-5672930410729786710</id><published>2009-04-29T22:42:00.000-07:00</published><updated>2009-05-02T00:04:28.685-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>install ant and svn ant  on ubuntu 8.X or later</title><content type='html'>1 install and config the ant(JRE has installed)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo apt-get install ant ant-optional&lt;br /&gt;echo ‘ANT_HOME=”/usr/share/ant”‘ | sudo tee -a /etc/environment&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2 download the svnant&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;firefox http://subclipse.tigris.org/svnant.html&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3 unzip svnant-1.2.1.zip, and put  lib/*.jar files to your ANT_HOME/lib directory&lt;br /&gt;4 test it with the following build.xml&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;project name="svn-test" default="Main" basedir="."&amp;gt;&lt;br /&gt; &amp;lt;!-- Sets variables which can be used. --&amp;gt;&lt;br /&gt; &amp;lt;property name="checkout" location="./svncheckout" /&amp;gt;&lt;br /&gt; &amp;lt;!-- Define the classpath which includes the jars that are required for svnant.jar --&amp;gt;&lt;br /&gt; &amp;lt;path id="svnant.class.path"&amp;gt;&lt;br /&gt;  &amp;lt;pathelement location="lib/svnant.jar" /&amp;gt;&lt;br /&gt;  &amp;lt;pathelement location="lib/svnClientAdapter.jar" /&amp;gt;&lt;br /&gt;  &amp;lt;pathelement location="lib/svnjavahl.jar" /&amp;gt;&lt;br /&gt;  &amp;lt;pathelement location="lib/svnkit.jar" /&amp;gt;&lt;br /&gt; &amp;lt;/path&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="svnant.class.path" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!-- Deletes the existing build, docs and dist directory--&amp;gt;&lt;br /&gt; &amp;lt;target name="clean"&amp;gt;&lt;br /&gt;  &amp;lt;delete dir="${checkout}" /&amp;gt;&lt;br /&gt; &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!-- Creates the  build, docs and dist directory--&amp;gt;&lt;br /&gt; &amp;lt;target name="makedir"&amp;gt;&lt;br /&gt;  &amp;lt;mkdir dir="${checkout}" /&amp;gt;&lt;br /&gt; &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;!-- Checkout the latest source code of svnant itself--&amp;gt;&lt;br /&gt; &amp;lt;target name="svn"&amp;gt;&lt;br /&gt;  &amp;lt;svn username="guest" password=""&amp;gt;&lt;br /&gt;   &amp;lt;checkout url="http://subclipse.tigris.org/svn/subclipse/trunk/svnant/" revision="HEAD" destPath="${checkout}" /&amp;gt;&lt;br /&gt;  &amp;lt;/svn&amp;gt;&lt;br /&gt; &amp;lt;/target&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;target name="Main" depends="clean, makedir, svn"&amp;gt;&lt;br /&gt;  &amp;lt;description&amp;gt;Main target&amp;lt;/description&amp;gt;&lt;br /&gt; &amp;lt;/target&amp;gt;&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;edwin@Castor:~/Desktop/svnTest$ ant&lt;br /&gt;Buildfile: build.xml&lt;br /&gt;&lt;br /&gt;clean:&lt;br /&gt;   [delete] Deleting directory /home/edwin/Desktop/svnTest/svncheckout&lt;br /&gt;&lt;br /&gt;makedir:&lt;br /&gt;    [mkdir] Created dir: /home/edwin/Desktop/svnTest/svncheckout&lt;br /&gt;&lt;br /&gt;svn:&lt;br /&gt;      [svn] &lt;Checkout&gt; started ...&lt;br /&gt;      [svn] &lt;Checkout&gt; finished.&lt;br /&gt;&lt;br /&gt;Main:&lt;br /&gt;&lt;br /&gt;BUILD SUCCESSFUL&lt;br /&gt;Total time: 1 minute 58 seconds&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-5672930410729786710?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/5672930410729786710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=5672930410729786710' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5672930410729786710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5672930410729786710'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/04/install-ant-on-ubuntu-8x-or-later.html' title='install ant and svn ant  on ubuntu 8.X or later'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-5197778626590617717</id><published>2009-04-29T06:58:00.000-07:00</published><updated>2009-04-29T07:08:52.285-07:00</updated><title type='text'>Installing MySQL 5.1 on  ubuntu 8.X or later using apt</title><content type='html'>First, you need to edit /etc/apt/sources.list and add the dotdeb repository. This is the line you need to add for Lenny, but just change it to Etch if you haven’t upgraded yet (see my earlier post if you want to know how to do that)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    deb http://packages.dotdeb.org lenny all&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Then, update…&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    apt-get update&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And then install 5.1&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    apt-get install mysql-server-5.1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;set password for root&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo mysqladmin -u root password admin&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-5197778626590617717?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/5197778626590617717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=5197778626590617717' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5197778626590617717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5197778626590617717'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/04/installing-mysql-51-on-ubuntu-8x-or.html' title='Installing MySQL 5.1 on  ubuntu 8.X or later using apt'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-8227795253287212416</id><published>2009-04-26T22:25:00.000-07:00</published><updated>2009-05-02T21:47:33.655-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='linux command'/><title type='text'>Tunnelling MySQL Over SSH  On ubuntu</title><content type='html'>Context:&lt;br /&gt;1 local PC&lt;br /&gt;2 Remote PC IP:192.168.0.51&lt;br /&gt;3 My SSH user name on remote PC is edwin&lt;br /&gt;&lt;br /&gt;1 build a tunnel By ssh:&lt;br /&gt;I will open a local TCP port 3333 for tunnelling mysql; The syntax of SSH is &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ssh -L LOCAL_PORT:hostname:REMOTE_PORT USER_NAME@SERVER_NAME or IP_ADDRESS. &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;or with sshpass&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sshpass -p 'YOUR_PASSWD' ssh -o StrictHostKeyChecking=no -L 3333:localhost:3306 USERNAME@REMORT_HOST -p 22&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;We're using localhost as the hostname because we are directly accessing the remote mysql server through ssh. You could also use this technique to port-forward through one ssh server to another server.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#ssh -L 3333:localhost:3306 edwin@192.168.0.51&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2 Connect reomote mysql using mysql command&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#mysql -u root -p -h 127.0.0.1 -P 3333&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-8227795253287212416?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/8227795253287212416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=8227795253287212416' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8227795253287212416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8227795253287212416'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/04/tunnelling-mysql-over-ssh-on-ubuntu.html' title='Tunnelling MySQL Over SSH  On ubuntu'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-1221652087940404407</id><published>2009-04-24T07:24:00.000-07:00</published><updated>2009-04-24T07:32:19.416-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux command'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Auto login script with expect on Ubuntu 9.04</title><content type='html'>1 install expect&lt;br /&gt;sudo apt-get install expect &lt;br /&gt;2 write shell script as the following:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/usr/bin/expect -f&lt;br /&gt;# Expect script to supply root/admin password for remote ssh server&lt;br /&gt;# and execute command.&lt;br /&gt;&lt;br /&gt;# set Variables&lt;br /&gt;set password "YOUR_PASSWORD"&lt;br /&gt;set ipaddr "REMOTE_HOSTNAME"&lt;br /&gt;set port 22&lt;br /&gt;&lt;br /&gt;set timeout -1&lt;br /&gt;# now connect to remote UNIX box (ipaddr) with given script to execute&lt;br /&gt;spawn ssh $ipaddr -l root -p 22 &lt;br /&gt;match_max 100000&lt;br /&gt;# Look for passwod prompt&lt;br /&gt;expect "*?assword:*"&lt;br /&gt;# Send password aka $password&lt;br /&gt;send -- "$password\r"&lt;br /&gt;# send blank line (\r) to make sure we get back to gui&lt;br /&gt;send -- "\r"&lt;br /&gt;expect eof&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;3 save this file as edwin.ssh, and add X permission for it&lt;br /&gt;4 use it&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;./edwin.ssh&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-1221652087940404407?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/1221652087940404407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=1221652087940404407' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1221652087940404407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1221652087940404407'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/04/auto-login-script-with-expect-on-ubuntu.html' title='Auto login script with expect on Ubuntu 9.04'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-8445682525782341204</id><published>2009-04-24T01:21:00.000-07:00</published><updated>2009-04-24T01:25:09.781-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>Common Select usage:Where condation of datatime format for query rows</title><content type='html'>There are 8 different ways for select rows form table by filed formated as datatime&lt;br /&gt;&lt;br /&gt;1. where date like '2005-01-%'&lt;br /&gt;2. where DATE_FORMAT(date,'%Y-%m')='2005-01'&lt;br /&gt;3. where EXTRACT(YEAR_MONTH FROM date)='200501'&lt;br /&gt;4. where YEAR(date)='2005' and MONTH(date)='1'&lt;br /&gt;5. where substring(date,1,7)='2005-01'&lt;br /&gt;6. where date between '2005-01-01' and '2005-01-31'&lt;br /&gt;7. where date &gt;= '2005-01-01' and date &lt;= '2005-01-31'&lt;br /&gt;8. where date IN('2005-01-01', '2005-01-02', '2005-01-03', '2005-01-04', '2005-01-05', '2005-01-06', '2005-01-07', '2005-01-08', '2005-01-09', '2005-01-10', '2005-01-11', '2005-01-12', '2005-01-13', '2005-01-14', '2005-01-15', '2005-01-16', '2005-01-17', '2005-01-18', '2005-01-19', '2005-01-20', '2005-01-21', '2005-01-22', '2005-01-23', '2005-01-24', '2005-01-25', '2005-01-26', '2005-01-27', '2005-01-28', '2005-01-29', '2005-01-30', '2005-01-31')&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-8445682525782341204?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/8445682525782341204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=8445682525782341204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8445682525782341204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8445682525782341204'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/04/common-select-usagewhere-condation-of.html' title='Common Select usage:Where condation of datatime format for query rows'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-925442158928700160</id><published>2009-04-20T08:19:00.000-07:00</published><updated>2009-04-20T08:31:59.269-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Install javaDocs and setup in eclipse on Ubuntu</title><content type='html'>&lt;p&gt;The default installation of Eclipse did not include Javadoc,so here's how to get Javadoc installed and working.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;First, enter&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;sudo apt-get install sun-java6-doc&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;The installer will prompt you to download a zip file containing the documentation from Sun. Bring up Firefox and head to &lt;a href="http://java.sun.com/javase/downloads/"&gt;Sun's website&lt;/a&gt;. Click the zip file to download the documentation(only english version enough, never japs).&lt;br /&gt;&lt;p&gt;When the download finishes, in another terminal, enter&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;sudo cp /path/to/zip/file/documentation.zip /tmp&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Enter&lt;br /&gt;&lt;pre&gt;sudo chown root:root /tmp/documentation.zip&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;to change the file permissions.&lt;br /&gt;&lt;p&gt;Back in the first terminal, hit enter, and the installer should continue. When it finishes, in Eclipse,&lt;/p&gt;&lt;br /&gt;&lt;p&gt; click Window -&gt; Preferences -&gt; Java -&gt; Installed JREs, and click the JRE . Click Edit, and use Shift+Click to select all the JRE system libraries. Click Javadoc Location, and enter &lt;/p&gt;&lt;br /&gt;&lt;pre&gt;file:/usr/lib/jvm/java-6-sun/docs/api/&lt;/pre&gt;&lt;p&gt;in the box. Click Validate to test it (you can open it in your browser to double check), and click OK out of all the dialogs. Javadoc should now be working!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-925442158928700160?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/925442158928700160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=925442158928700160' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/925442158928700160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/925442158928700160'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/04/install-javadocs-and-setup-in-eclipse.html' title='Install javaDocs and setup in eclipse on Ubuntu'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-6251929883873655858</id><published>2009-04-07T21:49:00.000-07:00</published><updated>2009-04-07T21:57:49.799-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zend Studio'/><title type='text'>Add tpl to HTML content type on Zend Studio Form Eclipse</title><content type='html'>The smarty deafult tempalte file type named "tpl" hasn't been supported by Zend Studio for Eclipse 6.1.  So, you need to setup this content type to html. the solution is the following:&lt;br /&gt;&lt;br /&gt;1 Open Preferences&lt;br /&gt;2 Click HTML in General-&gt;Appearance-&gt;Content Type&lt;br /&gt;3 Add "*.tpl" to File associations&lt;br /&gt;4 Clink OK&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-6251929883873655858?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/6251929883873655858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=6251929883873655858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6251929883873655858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6251929883873655858'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/04/add-tpl-to-html-content-type-on-zend.html' title='Add tpl to HTML content type on Zend Studio Form Eclipse'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-3093905764406194593</id><published>2009-04-07T05:50:00.000-07:00</published><updated>2009-04-07T06:07:23.410-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Install Zend Server on Ubuntu 8.10</title><content type='html'>&lt;span style="font-weight:bold;"&gt;1 Add Zend server source list&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;deb http://repos.zend.com/deb/pe pe non-free&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;get public key and import it by sofware management editor&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;wget http://repos.zend.com/deb/zend.key&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;2 Set apache2's config to your workspace&lt;/span&gt;&lt;br /&gt;The apache used by Zend Server is apache2,the config file locates in /etc/apache/&lt;br /&gt;2.1 edit "/etc/apache2/sites-available/default"&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt; ServerName localhost&lt;br /&gt;        ServerAdmin webmaster@localhost&lt;br /&gt; &lt;br /&gt; DocumentRoot /home/edwin/Zend/workspaces/Odour-main/Public/&lt;br /&gt; &amp;lt;Directory /&amp;gt;&lt;br /&gt;  Options FollowSymLinks&lt;br /&gt;  AllowOverride None&lt;br /&gt; &amp;lt;/Directory&amp;gt;&lt;br /&gt; &amp;lt;Directory /home/edwin/Zend/workspaces/Odour-main/Public/&gt;&lt;br /&gt;  Options Indexes FollowSymLinks MultiViews&lt;br /&gt;  AllowOverride All&lt;br /&gt;  Order allow,deny&lt;br /&gt;  allow from all&lt;br /&gt; &amp;lt;/Directory&amp;gt;&lt;br /&gt;&lt;br /&gt; ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/&lt;br /&gt; &amp;lt;Directory "/usr/lib/cgi-bin"&amp;gt;&lt;br /&gt;  AllowOverride None&lt;br /&gt;  Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch&lt;br /&gt;  Order allow,deny&lt;br /&gt;  Allow from all&lt;br /&gt; &amp;lt;/Directory&amp;gt;&lt;br /&gt;&lt;br /&gt; ErrorLog /var/log/apache2/error.log&lt;br /&gt;&lt;br /&gt; # Possible values include: debug, info, notice, warn, error, crit,&lt;br /&gt; # alert, emerg.&lt;br /&gt; LogLevel warn&lt;br /&gt;&lt;br /&gt; CustomLog /var/log/apache2/access.log combined&lt;br /&gt;&lt;br /&gt;    Alias /doc/ "/usr/share/doc/"&lt;br /&gt;    &amp;lt;Directory "/usr/share/doc/"&amp;gt;&lt;br /&gt;        Options Indexes MultiViews FollowSymLinks&lt;br /&gt;        AllowOverride None&lt;br /&gt;        Order deny,allow&lt;br /&gt;        Deny from all&lt;br /&gt;        Allow from 127.0.0.0/255.0.0.0 ::1/128&lt;br /&gt;    &amp;lt;/Directory&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2.2 edit first virtualHost (IP:192.168.6.1)&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;VirtualHost 192.168.6.1:80&amp;gt;&lt;br /&gt;        ServerName  ComServer&lt;br /&gt;        ServerAdmin webmaster@localhost&lt;br /&gt;&lt;br /&gt;        DocumentRoot /home/edwin/Zend/comWorkspace/Public/&lt;br /&gt;        &amp;lt;Directory /home/edwin/Zend/comWorkspace/Public/&amp;gt;&lt;br /&gt;&lt;br /&gt;                Options Indexes FollowSymLinks MultiViews&lt;br /&gt;                AllowOverride All&lt;br /&gt;                Order allow,deny&lt;br /&gt;                allow from all&lt;br /&gt;        &amp;lt;/Directory&amp;gt;       &lt;br /&gt;&lt;br /&gt;        ErrorLog /var/log/apache2/192.168.6.1.error.log&lt;br /&gt;&lt;br /&gt;        # Possible values include: debug, info, notice, warn, error, crit,&lt;br /&gt;        # alert, emerg.&lt;br /&gt;        LogLevel warn&lt;br /&gt;&lt;br /&gt;        CustomLog /var/log/apache2/192.168.6.1.access.log combined&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;3 enable virturalHost&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt; sudo a2ensite 192.168.6.1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;4 restart the apache&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-3093905764406194593?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/3093905764406194593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=3093905764406194593' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/3093905764406194593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/3093905764406194593'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/04/install-zend-server-on-ubuntu-810.html' title='Install Zend Server on Ubuntu 8.10'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-2506261427789368459</id><published>2009-04-03T18:07:00.000-07:00</published><updated>2009-04-03T18:12:27.589-07:00</updated><title type='text'>Resolution of No Sound in Wine On Ubuntu 8.10</title><content type='html'>I have used Wine successfully with Pulseaudio via padsp!! &lt;br /&gt;&lt;br /&gt;First you have to run&lt;br /&gt; Code:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;padsp winecfg&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and select the OSS output under Audio. The other outputs should be toggled off.Then you can use any program via "padsp wine yourprogram.exe".For example:running diablo 2 in wine&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;padsp wine diablo.exe&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-2506261427789368459?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/2506261427789368459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=2506261427789368459' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2506261427789368459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2506261427789368459'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/04/resolution-of-no-sound-in-wine-on.html' title='Resolution of No Sound in Wine On Ubuntu 8.10'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-3585970251393041674</id><published>2009-04-02T01:41:00.000-07:00</published><updated>2009-04-02T01:47:59.175-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CentOs'/><category scheme='http://www.blogger.com/atom/ns#' term='yum'/><title type='text'>installing Mysql with YUM in CentOs</title><content type='html'>&lt;span style="font-weight: bold;"&gt;1 install application&lt;/span&gt;&lt;br /&gt;yum install mysql&lt;br /&gt;yum install mysql-server&lt;br /&gt;yum install mysql-devel&lt;br /&gt;service mysqld start&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2 &lt;span style="font-weight: bold;"&gt;Set the passwords for your root account like so &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;/usr/bin/mysqladmin -u root password 'new-password'&lt;br /&gt;/usr/bin/mysqladmin -u root -h hostname password 'new-password'&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight: bold;"&gt;3 config iptables for accessing  by local network &lt;/span&gt;&lt;br /&gt;#vi /etc/sysconfig/iptables&lt;br /&gt;add "-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT"&lt;br /&gt;# service iptables restart&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-3585970251393041674?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/3585970251393041674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=3585970251393041674' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/3585970251393041674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/3585970251393041674'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/04/installing-mysql-with-yum-in-centos.html' title='installing Mysql with YUM in CentOs'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-2221575604561881233</id><published>2009-03-31T07:09:00.000-07:00</published><updated>2009-03-31T07:15:52.951-07:00</updated><title type='text'>Set Docbook edtiing environment in Ubuntu 8.10</title><content type='html'>1、init compile environment&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;　　$sudo apt-get install xsltproc&lt;br /&gt;　　$sudo apt-get install docbook-xsl&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;　　&lt;br /&gt;2、install docbook editor named XMLmind XML Editor &lt;br /&gt;and build a test docbook xml&lt;br /&gt;&lt;br /&gt;3、Generating a html&lt;br /&gt;$xsltproc -o test.html /usr/share/xml/docbook/stylesheet/nwalsh/xhtml/docbook.xsl test.xml&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-2221575604561881233?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/2221575604561881233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=2221575604561881233' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2221575604561881233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2221575604561881233'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/03/set-docbook-edtiing-environment-in.html' title='Set Docbook edtiing environment in Ubuntu 8.10'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-6449307987168803073</id><published>2009-03-27T20:27:00.000-07:00</published><updated>2009-03-27T20:35:19.260-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Productivity'/><title type='text'>Mouse-less Firefox</title><content type='html'>&lt;p&gt;&lt;strong&gt;Navigation from the toolbar&lt;/strong&gt;&lt;/p&gt;    &lt;ul&gt;&lt;li&gt;Select location bar: &lt;strong&gt;Ctrl+L&lt;/strong&gt; or &lt;strong&gt;Alt+D&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;Select search bar: &lt;strong&gt;Ctrl+K&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;Back: &lt;strong&gt;Backspace&lt;/strong&gt; or &lt;strong&gt;Alt+Left&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;Forward: &lt;strong&gt;Alt+Right&lt;/strong&gt; or &lt;strong&gt;Shift+Backspace&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Searching pages&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The find-as-you-type feature was an epiphany.  While Google is great at getting you to the right web page, &lt;a class="tagautolink autolink" title="Click here to read more posts tagged FIREFOX" href="http://lifehacker.com/tag/firefox/"&gt;Firefox&lt;/a&gt;'s find-as-you-type feature gets you the rest of the way.&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;Find as you type text: &lt;strong&gt;/&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;Find as you type link: &lt;strong&gt;'&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;Regular old find: &lt;strong&gt;Ctrl+F&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;The link search is very useful, especially when used in conjunction with...  &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Opening pages&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Unless you do all of your browsing in one page, these shortcuts are huge when you don't want to go running for your mouse.&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;Open link in new window: &lt;strong&gt;Shift+Enter&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;Open link in new tab: &lt;strong&gt;Ctrl+Enter&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;Open address/search in new tab: &lt;strong&gt;Alt+Enter&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;Used together with their respective shortcuts (address and search bar shortcuts and the find-as-you-type link shortcut), the page opening shortcuts go a long way toward mouse-less browsing.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Grab bag&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;p&gt;The following shortcuts fall into a more general grab bag of useful shortcuts.&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;Caret browsing: &lt;strong&gt;F7&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;Refresh: &lt;strong&gt;Ctrl+R&lt;/strong&gt; or &lt;strong&gt;F5&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;Refresh (override cache): &lt;strong&gt;Ctrl+F5&lt;/strong&gt; or &lt;strong&gt;Ctrl+Shift+R&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;Switch tabs: &lt;strong&gt;Ctrl+Tab&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;Select tab (1-9): &lt;strong&gt;Ctrl+[1-9]&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;If you're looking to change your default mail program (e.g. to Gmail, etc.) to best utilize the Compose email shortcut, check out these &lt;a href="http://www.lifehacker.com/software/email-apps/ask-lifehacker-gmail-as-default-mail-program-129818.php"&gt;tips for setting your default mail program&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Wweb writer&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;    &lt;ul&gt;&lt;li&gt;Spellcheck (with &lt;a href="http://lifehacker.com/software/productivity/firefox-web-form-spellcheck-033459.php"&gt;Spellbound extension&lt;/a&gt;): &lt;strong&gt;Ctrl+Shift+F7&lt;/strong&gt; &lt;/li&gt;&lt;li&gt;Save Entry (with &lt;a href="http://lifehacker.com/software/productivity/download-of-the-day-scribe-firefox-extension-111545.php"&gt;Scribe extension&lt;/a&gt;): &lt;strong&gt;Ctrl+S&lt;/strong&gt; &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-6449307987168803073?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/6449307987168803073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=6449307987168803073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6449307987168803073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6449307987168803073'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/03/mouse-less-firefox.html' title='Mouse-less Firefox'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-7408055534515081866</id><published>2009-03-27T18:56:00.000-07:00</published><updated>2009-03-27T18:59:49.619-07:00</updated><title type='text'>Install PHPunit in ZendCore on Ubuntu 8.10</title><content type='html'>1 cd :/usr/local/Zend/Core/bin&lt;br /&gt;2  sudo ./pear channel-discover pear.phpunit.de&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Adding Channel "pear.phpunit.de" succeeded&lt;/span&gt;&lt;br /&gt;3 sudo ./pear install --alldeps phpunit/PHPUnit&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;WARNING: "pear/DB" is deprecated in favor of "pear/MDB2"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;phpunit/PHPUnit requires PEAR Installer (version &gt;= 1.7.1), installed version is 1.6.1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;phpunit/PHPUnit can optionally use PHP extension "pdo_sqlite"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;phpunit/PHPUnit can optionally use PHP extension "tokenizer"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;phpunit/PHPUnit can optionally use PHP extension "xdebug" (version &gt;= 2.0.0)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;pear/Log can optionally use PHP extension "sqlite"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;downloading Image_GraphViz-1.2.1.tgz ...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Starting to download Image_GraphViz-1.2.1.tgz (4,872 bytes)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;.....done: 4,872 bytes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;downloading Log-1.11.3.tgz ...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Starting to download Log-1.11.3.tgz (42,960 bytes)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;...done: 42,960 bytes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;downloading DB-1.7.13.tgz ...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Starting to download DB-1.7.13.tgz (132,246 bytes)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;...done: 132,246 bytes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;downloading MDB2-2.4.1.tgz ...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Starting to download MDB2-2.4.1.tgz (119,790 bytes)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;...done: 119,790 bytes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;downloading Mail-1.1.14.tgz ...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Starting to download Mail-1.1.14.tgz (17,537 bytes)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;...done: 17,537 bytes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;downloading Net_SMTP-1.3.2.tgz ...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Starting to download Net_SMTP-1.3.2.tgz (10,247 bytes)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;...done: 10,247 bytes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;downloading Net_Socket-1.0.9.tgz ...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Starting to download Net_Socket-1.0.9.tgz (5,173 bytes)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;...done: 5,173 bytes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;downloading Auth_SASL-1.0.2.tgz ...&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Starting to download Auth_SASL-1.0.2.tgz (5,645 bytes)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;...done: 5,645 bytes&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;install ok: channel://pear.php.net/Image_GraphViz-1.2.1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;install ok: channel://pear.php.net/Log-1.11.3&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;install ok: channel://pear.php.net/DB-1.7.13&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;install ok: channel://pear.php.net/MDB2-2.4.1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;install ok: channel://pear.php.net/Mail-1.1.14&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;install ok: channel://pear.php.net/Net_Socket-1.0.9&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;install ok: channel://pear.php.net/Auth_SASL-1.0.2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;install ok: channel://pear.php.net/Net_SMTP-1.3.2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;MDB2: Optional feature fbsql available (Frontbase SQL driver for MDB2)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;MDB2: Optional feature ibase available (Interbase/Firebird driver for MDB2)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;MDB2: Optional feature mysql available (MySQL driver for MDB2)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;MDB2: Optional feature mysqli available (MySQLi driver for MDB2)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;MDB2: Optional feature mssql available (MS SQL Server driver for MDB2)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;MDB2: Optional feature oci8 available (Oracle driver for MDB2)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;MDB2: Optional feature pgsql available (PostgreSQL driver for MDB2)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;MDB2: Optional feature querysim available (Querysim driver for MDB2)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;MDB2: Optional feature sqlite available (SQLite2 driver for MDB2)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;MDB2: To install optional features use "pear install pear/MDB2#featurename"&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-7408055534515081866?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/7408055534515081866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=7408055534515081866' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/7408055534515081866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/7408055534515081866'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/03/install-phpunit-in-zendcore-on-ubuntu.html' title='Install PHPunit in ZendCore on Ubuntu 8.10'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-1702253233636709921</id><published>2009-03-10T22:13:00.000-07:00</published><updated>2009-03-10T22:19:32.355-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>Install pysvn and workbench on Ubuntu 8.10 for managing</title><content type='html'>There are few svn gui client in linu, pysvn should be a good choice on Ubuntu,&lt;br /&gt;1 install ubuntu packages pysvn and workbench.&lt;br /&gt;&lt;br /&gt;    * sudo apt-get install python-svn&lt;br /&gt;    * sudo apt-get install svn-workbench&lt;br /&gt;2 You can launch it form application menu: application-&gt;programming-&gt;svn Workbench&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-1702253233636709921?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/1702253233636709921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=1702253233636709921' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1702253233636709921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1702253233636709921'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/03/install-pysvn-and-workbench-on-ubuntu.html' title='Install pysvn and workbench on Ubuntu 8.10 for managing'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-2453449242757382549</id><published>2009-02-26T01:43:00.000-08:00</published><updated>2009-02-26T01:49:21.496-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Adding virtual directory to apache on ubuntu 8.10</title><content type='html'>To add virtual directory to apache (Zend Core) on ubuntu 8.10, is different from FC somewhere. the step is the following:&lt;br /&gt;1 makdir &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mkdir /home/edwin/Documents/Wiki&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;2 add setting to the http.conf&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;alias /Wiki/ "/home/edwin/Documents/Wiki/"&lt;br /&gt;&lt;br /&gt;&amp;lt;Directory "/home/edwin/Documents/Wiki"&amp;gt;&lt;br /&gt;Options indexes FollowSymLinks&lt;br /&gt;AllowOverride none&lt;br /&gt;Order allow,deny&lt;br /&gt;Allow from all&lt;br /&gt;&amp;lt;/Directory&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3 restart apache&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-2453449242757382549?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/2453449242757382549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=2453449242757382549' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2453449242757382549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2453449242757382549'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/02/adding-virtual-directory-to-apache-on.html' title='Adding virtual directory to apache on ubuntu 8.10'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-4551571281490527368</id><published>2009-02-19T09:41:00.000-08:00</published><updated>2009-02-19T09:43:12.709-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Vi full installation on ubuntu</title><content type='html'>vim as a default installation on ubuntu is tiny-vim,that have limited function to edit file. if you want to install it fully, run the following :&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;apt-get install vim-full vim-gnome vim-runtime vim-gui-common &lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-4551571281490527368?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/4551571281490527368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=4551571281490527368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4551571281490527368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4551571281490527368'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/02/vi-full-installation-on-ubuntu.html' title='Vi full installation on ubuntu'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-3413408637718747162</id><published>2009-02-19T07:54:00.000-08:00</published><updated>2009-02-19T07:55:53.205-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hacking tools'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Hacking tools on linux</title><content type='html'>&lt;span style="font-weight:bold;"&gt;摘自Ubuntu.com.cn &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;工具：Nessus（最好的开放源代码风险评估工具）&lt;br /&gt;网址：http://www.nessus.org/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix&lt;br /&gt;简介：Nessus是一款可以运行在Linux、BSD、Solaris以及其他一些系统上的远程安全扫描软件。它是多线程、基于插入式的软件，拥有很好的 GTK界面，能够完成超过1200项的远程安全检查，具有强大的报告输出能力，可以产生HTML、XML、LaTeX和ASCII文本等格式的安全报告，并且会为每一个发现的安全问题提出解决建议。&lt;br /&gt;&lt;br /&gt;工具：Ethereal（网络协议检测工具）&lt;br /&gt;网址：http://www.ethereal.com/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：Ethereal是一款免费的网络协议分析程序，支持Unix、Windows。借助这个程序，你既可以直接从网络上抓取数据进行分析，也可以对由其他嗅探器抓取后保存在硬盘上的数据进行分析。你能交互式地浏览抓取到的数据包，查看每一个数据包的摘要和详细信息。Ethereal有多种强大的特征，如支持几乎所有的协议、丰富的过滤语言、易于查看TCP会话经重构后的数据流等。&lt;br /&gt;&lt;br /&gt;工具：Snort（免费的入侵检测系统）&lt;br /&gt;网址：http://www.snort.org/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：Snort是一款轻量级的网络入侵检测系统，能够在IP网络上进行实时的流量分析和数据包记录。它不仅能进行协议分析、内容检索、内容匹配，而且能用于侦测诸如缓冲溢出、隐秘端口扫描、CGI攻击、SMB探测、操作系统指纹识别等大量的攻击或非法探测。Snort使用灵活的规则去描述哪些流量应该被收集或被忽略，并且提供一个模块化的探测引擎。&lt;br /&gt;&lt;br /&gt;工具：Netcat（网络瑞士军刀）&lt;br /&gt;网址：http://www.atstake.com/research/tools/network_utilities/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：一个简单而有用的工具，透过使用TCP或UDP协议的网络连接去读写数据。它被设计成一个稳定的后门工具，能够直接由其它程序和脚本轻松驱动。同时，它也是一个功能强大的网络调试和探测工具，能够建立你需要的几乎所有类型的网络连接，还有几个很有意思的内置功能。&lt;br /&gt;&lt;br /&gt;工具：TCPDump/WinDump（用于网络监测和数据收集的优秀嗅探器）&lt;br /&gt;网址：http://www.tcpdump.org/，http://windump.polito.it/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：Tcpdump是一款众人皆知和受人喜欢的基于命令行的网络数据包分析和嗅探工具。它能把匹配规则的数据包的包头给显示出来。你能使用这个工具去查找网络问题或者去监视网络上的状况。WinDump是Tcpdump在Windows平台上的移植版。&lt;br /&gt;&lt;br /&gt;工具：Hping2（类似ping的网络探测工具）&lt;br /&gt;网址：http://www.hping.org/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix&lt;br /&gt;简介：hping2能发送自定义的ICMP/UDP/TCP包到目标地址并且显示包的响应情况。它有一个方便的traceroute模式，并且支持IP分片。这个工具在traceroute、ping和探测防火墙后的主机时特别有用。&lt;br /&gt;&lt;br /&gt;工具：DSniff(一流的网络审计和渗透测试工具）&lt;br /&gt;网址：http://naughty.monkey.org/~dugsong/dsniff/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：DSniff是由Dug Song开发的一套包含多个工具的软件套件。其中，dsniff、filesnarf、mailsnarf、msgsnarf、rlsnarf和 webspy可以用于监视网络上我们感兴趣的数据（如口令、e-mail、文件等），arpspoof、dnsspoof和macof能很容易地载取到攻击者通常难以获取的网络信息（如二层交换数据），sshmitm和webmitm则能用于实现重写SSH和HTTPS会话达到monkey-in-the -middle攻击。在http://www.datanerds.net/~mike/dsniff.html可以找到Windows平台上的移植版。&lt;br /&gt;&lt;br /&gt;工具：GFI LANguard（商业化的网络安全扫描软件）&lt;br /&gt;网址：http://www.gfi.com/lannetscan/&lt;br /&gt;类别：商业&lt;br /&gt;平台：Windows&lt;br /&gt;简介：LANguard扫描网络并且得出诸如每台机器的服务包等级、缺少的安全补丁、打开的共享、开放的端口、正在运行的服务和应用程序、注册表键值、弱口令、用户和组等扫描信息的报告。扫描结果输出为一个HTML格式的报告，报告能够自定义。&lt;br /&gt;&lt;br /&gt;工具：Ettercap（为你的交换环境提供更多的安全）&lt;br /&gt;网址：http://ettercap.sourceforge.net/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：Ettercap是一款以太网环境下的网络监视、拦载和记录工具，支持多种主动或被动的协议分析（甚至跟加密相关的SSH、HTTPS 等），有数据插入、过滤、保持连接同步等多种功能，也有一个能支持多种嗅探模式的、强大而完整的嗅探套件，支持插件，能够检查网络环境是否是交换局域网，并且能使用主动或被动的操作系统指纹识别技术让你了解当前局域网的情况。&lt;br /&gt;&lt;br /&gt;工具：Whisker/Libwhisker（CGI缺陷扫描软件和库）&lt;br /&gt;网址：http://www.wiretrip.net/rfp/p/doc.asp/d21.htm&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：Whisker是一款非常好的HTTP服务器缺陷扫描软件，能扫描出大量的已知安全漏洞，特别是些危险的CGI漏洞。Libwhisker是一个用perl编写的由Whiskerr使用的程序库，通过它你可以创建自己HTTP扫描器。&lt;br /&gt;&lt;br /&gt;工具：John the Ripper（格外强大、灵活、快速的多平台哈希口令破解器）&lt;br /&gt;网址：http://www.openwall.com/john/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：John the Ripper是一个快速的口令破解器，支持多种操作系统，如Unix、DOS、Win32、BeOS和OpenVMS等。它设计的主要目的是用于检查 Unix系统的弱口令，支持几乎所有Unix平台上经crypt函数加密后的口令哈希类型，也支持Kerberos AFS和Windows NT/2000/XP LM哈希等。&lt;br /&gt;&lt;br /&gt;工具：OpenSSH/SSH（访问远程计算机的一种安全方法）&lt;br /&gt;网址：http://www.openssh.com/，http://www.ssh.com/commerce/index.html&lt;br /&gt;类别：开放源码/商业&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：SSH（Secure Shell）是一款用来登录远程服务器并在远程服务器上执行命令的程序，在缺少安全防护的网络上它能给两台互不信任的主机间提供安全可靠的加密通讯。 X11连接和其他任意的TCP/IP端口连接都可以通过SSH进行数据封装转发到一个安全的通道里。SSH开发的本意是用于代替rlogin、rsh和 rcp这些不安全的程序，以及为rdist和rsync提供安全通道。需要注意的是，OpenSSH是SSH的替代软件，SSH对于某些用途是要收费的，但OpenSSH总是免费。&lt;br /&gt;&lt;br /&gt;工具：Sam Spade（Windows平台上的免费网络查询工具）&lt;br /&gt;网址：http://www.samspade.org/ssw/&lt;br /&gt;类别：免费软件&lt;br /&gt;平台：Windows&lt;br /&gt;简介：SamSpade提供了一个友好的GUI界面，能方便地完成多种网络查询任务，它开发的本意是用于追查垃圾邮件制造者，但也能用于其它大量的网络探测、网络管理和与安全有关的任务，包括ping、nslookup、whois、dig、traceroute、finger、raw HTTP web browser、DNS zone transfer、SMTP relay check、website search等工具，在它的网站还有大多数查询工具的一个在线版本（http://www.samspade.org/t/）。&lt;br /&gt;&lt;br /&gt;工具：ISS Internet Scanner（应用层风险评估工具）&lt;br /&gt;网址：http://www.iss.net/products_services/enterprise_protection&lt;br /&gt;/vulnerability_assessment/scanner_internet.php&lt;br /&gt;类别：商业&lt;br /&gt;平台：Windows&lt;br /&gt;简介：互联网扫描器（Internet Scanner）始于1992年一个小小的开放源代码扫描器，它是相当不错的，但价格昂贵，使用开源软件Nessus来代替它也是一个不错的选择。&lt;br /&gt;&lt;br /&gt;工具：Tripwire（功能强大的数据完整性检查工具）&lt;br /&gt;网址：http://www.tripwire.com/&lt;br /&gt;类别：商业&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：Tripwire是一款文件和目录完整性检查工具，它能帮助系统管理员和用户监视一些重要文件和目录发生的任何变化。通过制定一些基本的系统策略，在文件遭到破坏或篡改时由Tripwire通知系统管理员，从而能及时地做出处理。Tripwire的商业版本非常昂贵，在 Tripwire.Org网站有一个免费的开放源代码的Linux版本，UNIX用户也可能需要考虑AIDE（http://www.cs.tut.fi /~rammer/aide.html），它是Tripwire的免费替代品。&lt;br /&gt;&lt;br /&gt;工具：Nikto（一款非常全面的web扫描器）&lt;br /&gt;网址：http://www.cirt.net/code/nikto.shtml&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：Nikto是一款能对web服务器多种安全项目进行测试的扫描软件，能在200多种服务器上扫描出2000多种有潜在危险的文件、CGI及其他问题。它也使用LibWhiske库，但通常比Whisker更新的更为频繁。&lt;br /&gt;&lt;br /&gt;工具：Kismet（强大的无线嗅探器）&lt;br /&gt;网址：http://www.kismetwireless.net/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：Kismet是一款802.11b网络嗅探和分析程序，功能有：支持大多数无线网卡，能通过UDP、ARP、DHCP数据包自动实现网络 IP阻塞检测，能通过Cisco Discovery协议列出Cisco设备，弱加密数据包记录，和Ethereal、tcpdump兼容的数据包dump文件，绘制探测到的网络图和估计网络范围。&lt;br /&gt;&lt;br /&gt;工具：SuperScan（Windows平台上的TCP端口扫描器）&lt;br /&gt;网址：http://www.foundstone.com/index.htm?subnav=resources/&lt;br /&gt;navigation.htm&amp;subcontent=/resources/proddesc/superscan.htm&lt;br /&gt;类别：免费&lt;br /&gt;平台：Windows&lt;br /&gt;简介：SuperScan是一款具有TCP connect端口扫描、Ping和域名解析等功能的工具，能较容易地做到对指定范围内的IP地址进行ping和端口扫描。源代码不公开。&lt;br /&gt;&lt;br /&gt;工具：L0phtCrack 4（Windows口令审计和恢复程序）&lt;br /&gt;网址：http://www.atstake.com/research/lc/&lt;br /&gt;类别：商业&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：L0phtCrack试图根据从独立的Windows NT/2000工作站、网络服务器、主域控制器或Active Directory上正当获取或者从线路上嗅探到的加密哈希值里破解出Windows口令，含有词典攻击、组合攻击、强行攻击等多种口令猜解方法。&lt;br /&gt;&lt;br /&gt;工具：Retina（eEye公司的风险评估扫描工具）&lt;br /&gt;网址：http://www.eeye.com/html/Products/Retina/index.html&lt;br /&gt;类别：商业&lt;br /&gt;平台：Windows&lt;br /&gt;简介：像上面提到的Nessus和ISS Internet Scanner一样，Retina的功能也是用于扫描网络内所有的主机并且报告发现的每一个缺陷。&lt;br /&gt;&lt;br /&gt;工具：Netfilter（当前Linux内核采用的包过滤防火墙）&lt;br /&gt;网址：http://www.netfilter.org/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux&lt;br /&gt;简介：Netfilter是一款功能强大的包过滤防火墙，在标准的Linux内核内得到实现，iptables是防火墙配置工具。它现在支持有状态或无状态检测的包过滤，支持所有种类的NAT和包分片。相应的，对于非Linux平台上的防火墙，OpenBSD平台上有pf，UNIX平台上有 ipfilter，Windows平台上有Zone Alarm个人防火墙。&lt;br /&gt;&lt;br /&gt;工具：traceroute/ping/telnet/whois（基本命令）&lt;br /&gt;网址：&lt;br /&gt;类别：免费&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：当我们使用大量的高水平的工具来辅助安全审计工作时，别忘了这几个最基本的工具。我们每个人都应非常熟悉这几个工具的用法，几乎所有的操作系统上都附带有这几个工具，不过Windows平台上没有whois工具，并且traceroute改名为tracert。&lt;br /&gt;&lt;br /&gt;工具：Fport（增强的netstat）&lt;br /&gt;网址：http://www.foundstone.com/index.htm?subnav=resources/&lt;br /&gt;navigation.htm&amp;subcontent=/resources/proddesc/fport.htm&lt;br /&gt;类别：免费&lt;br /&gt;平台：Windows&lt;br /&gt;简介：Fport能显示主机上当前所有打开的TCP/IP、UDP端口和端口所属的进程，因此通过使用它能即刻发现未知的开放端口和该端口所属的应用程序，是一款查找木马的好工具。不过，Fport仅支持Windows系统，在许多UNIX系统上有一个netstat命令实现类似功能，Linux 系统上用 "netstat -pan"命令。源代码不公开。&lt;br /&gt;&lt;br /&gt;工具：SAINT（安全管理员的综合网络工具）&lt;br /&gt;网址：http://www.saintcorporation.com/saint/&lt;br /&gt;类别：商业&lt;br /&gt;平台：Linux/BSD/Unix&lt;br /&gt;简介：Saint是一款商业化的风险评估工具，但与那些仅支持Windows平台的工具不同，SAINT运行在UNIX类平台上，过去它是免费并且开放源代码的，但现在是一个商业化的产品。&lt;br /&gt;&lt;br /&gt;工具：Network Stumbler（免费的Windows平台802.11嗅探器）&lt;br /&gt;网址：http://www.stumbler.net/&lt;br /&gt;类别：免费&lt;br /&gt;平台：Windows&lt;br /&gt;简介：Netstumbler是最有名的寻找无线接入点的工具，另一个支持PDA的WinCE平台版本叫Ministumbler。这个工具现在是免费的，仅仅支持Windows系统，并且源代码不公开，而且该软件的开发者还保留在适当的情况下对授权协议的修改权。UNIX系统上的用户可以使用 Kismet 来代替。&lt;br /&gt;&lt;br /&gt;工具：SARA（安全管理员的辅助工具）&lt;br /&gt;网址：http://www-arc.com/sara/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix&lt;br /&gt;简介：SARA是一款基于SATAN安全扫描工具开发而来的风险评估工具，每月更新两次。&lt;br /&gt;&lt;br /&gt;工具：N-Stealth（web服务器扫描工具）&lt;br /&gt;网址：http://www.nstalker.com/nstealth/&lt;br /&gt;类别：商业&lt;br /&gt;平台：Windows&lt;br /&gt;简介：N-Stealth是一款商业化的Web服务器安全扫描软件，通常它比whisker、nikto等免费的web扫描器升级的更为频繁。 N- Stealth开发商宣称的"超过20,000条的缺陷和exploit数据"和"每天新增大量的缺陷检查"是非常可疑的。我们也要注意到，在 nessus、ISS、Retina、SAINT和SARA等所有常见的风险评估工具里已含有web扫描组件，不过它们可能没有N-Stealth这样灵活易用和更新频繁。n-stealth不公开源代码。&lt;br /&gt;&lt;br /&gt;工具：AirSnort（802.11 WEP密码破解工具）&lt;br /&gt;网址：http://airsnort.shmoo.com/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：AirSnort是一款无线局域网密钥恢复工具，由Shmoo小组开发。它监视无线网络中的传输数据，当收集到足够多的数据包时就能计算出密钥。&lt;br /&gt;&lt;br /&gt;工具：NBTScan（从Windows网络上收集NetBIOS信息）&lt;br /&gt;网址：http://www.inetcat.org/software/nbtscan.html&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：NBTscan是一个用于扫描网络上NetBIOS名字信息的程序。这个程序对给出范围内的每一个地址发送NetBIOS状态查询，并且以易读的表格列出接收到的信息，对于每个响应的主机，它列出它的IP地址、NetBIOS计算机名、登录用户名和MAC地址。&lt;br /&gt;&lt;br /&gt;工具：GnuPG/PGP（保护你的文件和通信数据的先进加密程序）&lt;br /&gt;网址：http://www.gnupg.org/，http://www.pgp.com/&lt;br /&gt;类别：开放源码/商业&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：PGP是由Phil Zimmerman开发的著名加密程序，它使用公钥加密算法和常规的加密技术相结合，能将加密后的文件安全地从一地传递到另一地，从而保护用户的数据免于窃听或其他的安全风险。GnuPG是遵照PGP标准开发的开源程序，不同的是，GnuPG是永远免费的，而PGP对于某些用途要收费。&lt;br /&gt;&lt;br /&gt;工具：Firewalk（高级的traceroute）&lt;br /&gt;网址：http://www.packetfactory.net/projects/firewalk/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix&lt;br /&gt;简介：Firewalk使用类似traceroute的技术来分析IP包的响应，从而测定网关的访问控制列表和绘制网络图。2002年10月，这个一流的工具在原来的基础上进行了重新开发。需要注意到的是，Firewalk里面的大多数功能也能由Hping2的traceroute选项来实现。&lt;br /&gt;&lt;br /&gt;工具：Cain &amp; Abel（穷人的L0phtcrack）&lt;br /&gt;网址：http://www.oxid.it/cain.html&lt;br /&gt;类别：免费&lt;br /&gt;平台：Windows&lt;br /&gt;简介：Cain &amp; Abel是一个针对Microsoft操作系统的免费口令恢复工具。它通过如下多种方式轻松地实现口令恢复：网络嗅探、破解加密口令（使用字典或强行攻击）、解码被打乱的口令、显示口令框、显示缓存口令和分析路由协议等。源代码不公开。&lt;br /&gt;&lt;br /&gt;工具：XProbe2（主动操作系统指纹识别工具）&lt;br /&gt;网址：http://www.sys-security.com/html/projects/X.html&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix&lt;br /&gt;简介：XProbe是一款测定远程主机操作系统类型的工具。它依靠与一个签名数据库的模糊匹配以及合理的推测来确定远程操作系统的类型，利用ICMP协议进行操作系统指纹识别是它的独到之处。&lt;br /&gt;&lt;br /&gt;工具：SolarWinds Toolsets（大量的网络发现、监视、攻击工具）&lt;br /&gt;网址：http://www.solarwinds.net/&lt;br /&gt;类别：商业&lt;br /&gt;平台：Windows&lt;br /&gt;简介：SolarWinds包含大量适合系统管理员做特殊用途的工具，与安全相关的工具包括许多的网络发现扫描器（network discovery scanner）和一个SNMP强力破解器。&lt;br /&gt;&lt;br /&gt;工具：NGrep（方便的包匹配和显示工具）&lt;br /&gt;网址：http://www.packetfactory.net/projects/ngrep/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：NGrep在网络层实现了GNU grep的大多数功能，基于pcap，可以使你通过指定扩展的正则表达式或十六进制表达式去匹配网络上的数据流量。它当前能够识别流经以太网、PPP、 SLIP、FDDI、令牌网和回环设备上的TCP、UDP和ICMP数据包，并且和其他常见的嗅探工具（如tcpdump和snoop）一样，理解bpf 过滤机制。&lt;br /&gt;&lt;br /&gt;工具：Perl/Python（脚本语言）&lt;br /&gt;网址：http://www.perl.org，http://www.python.org/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：当我们使用那些已经开发好的安全工具来处理任务时，别忘了能自己写出（或修改）安全程序也是一件非常重要的事情。利用Perl和 Python能非常容易地写出用于系统测试、exploit和修补的脚本程序，使用包含Net::RawIP和协议实现等模块的 CPAN（Comprehensive Perl Archive Network：http://www.cpan.org/）或类似的档案能帮助我们比较容易地进行相关的开发。&lt;br /&gt;&lt;br /&gt;工具：THC-Amap（应用程序指纹识别扫描器）&lt;br /&gt;网址：http://www.thc.org/releases.php&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix&lt;br /&gt;简介：由THC开发的Amap是一个功能强大的扫描器，它通过探测端口响应的应用程序指纹数据来识别应用程序和服务，远甚于通过缺省端口号来判断应用程序和服务的方法。&lt;br /&gt;&lt;br /&gt;工具：OpenSSL（最为重要的SSL/TLS加密库）&lt;br /&gt;网址：http://www.openssl.org/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：OpenSSL项目是共同努力开发出来的一个健全的、商业级的、全开放的和开放源代码的工具包，用于实现安全套接层协议(SSL v2/v3)和传输层安全协议(TLS v1)以及形成一个功效完整的通用加密库。该项目由全世界范围内志愿者组成的团体一起管理，他们使用Internet去交流、设计和开发这个 OpenSSL工具和相关的文档。&lt;br /&gt;&lt;br /&gt;工具：NTop（网络使用状况监测软件）&lt;br /&gt;网址：http://www.ntop.org/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：Ntop是一款显示网络使用状况的流量监测软件，类似于UNIX平台上监视系统进程的top命令。在交互模式下，ntop会将网络的使用状况显示在用户的终端上；在Web模式下，ntop会做为一个web服务器，创建包含网络状况的HTML网页返回给用户。&lt;br /&gt;&lt;br /&gt;工具：Nemesis（命令行式的UNIX网络信息包插入套件）&lt;br /&gt;网址：http://www.packetfactory.net/projects/nemesis/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix&lt;br /&gt;简介：Nemesis项目是为了开发一个UNIX/Linux系统上基于命令行的、方便人们使用的IP栈，它可以自定义数据包、插入数据包、进行协议攻击等，是一个很好的测试防火墙、入侵检测系统、路由器和其他网络设备的工具。如果你对Nemesis感兴趣，那么你也可能需要看看hping2，这两者补相互之不足。&lt;br /&gt;&lt;br /&gt;工具：LSOF（列出打开的文件）&lt;br /&gt;网址：ftp://vic.cc.purdue.edu/pub/tools/unix/lsof/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix&lt;br /&gt;简介：LSOF是针对Unix的诊断和分析工具，它能显示出由系统里正在运行的进程所打开的文件，也能显示出每一个进程的通讯socket。&lt;br /&gt;&lt;br /&gt;工具：Hunt（Linux平台上高级的包嗅探和会话劫持工具）&lt;br /&gt;网址：http://lin.fsid.cvut.cz/~kra/index.html#HUNT&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux&lt;br /&gt;简介：Hunt能监视、劫持、重设网络上的TCP连接，在以太网上使用才有作用，并且含有监视交换连接的主动机制，以及包括可选的ARP转播和劫持成功后的连接同步等高级特征。&lt;br /&gt;&lt;br /&gt;工具：Honeyd（你个人的honeynet，http://www.honeynet.org/）&lt;br /&gt;网址：http://www.citi.umich.edu/u/provos/honeyd/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：Honeyd是一个能在网络上创建虚拟主机的小小后台程序，虚拟主机能被配置成运行任意的服务，并且洽当的服务TCP特性以致他们看起来就像是运行在某个特定版本的操作系统上。Honeyd能在一个模拟的局域网环境里让一台主机配有多个地址，并且可以对虚似主机进行ping、 traceroute。虚拟主机上任何类型的服务都可以依照一个简单的配置文件进行模拟。Honeyd也可以对一台主机做代理服务，而不是模拟它。&lt;br /&gt;&lt;br /&gt;工具：Achilles（可以修改http会话包的代理程序）&lt;br /&gt;网址：http://packetstormsecurity.nl/filedesc/achilles-0-27.zip.html&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Windows&lt;br /&gt;简介：Achilles是一个设计用来测试web应用程序安全性的工具。它是一个代理服务器，在一个HTTP会话中扮演着"中间人"（man- in-the -middle）的角色。一个典型的HTTP代理服务器将在客户浏览器和web服务器间转发数据包，但Achilles却载取发向任一方的HTTP会话数据，并且在转发数据前可以让用户修改这些数据。&lt;br /&gt;&lt;br /&gt;工具：Brutus（网络认证的强行破解工具）&lt;br /&gt;网址：http://www.hoobie.net/brutus/&lt;br /&gt;类别：免费&lt;br /&gt;平台：Windows&lt;br /&gt;简介：Brutus是一款对远程服务器的网络服务进行口令猜解的工具，支持字典攻击和组合攻击，支持的网络应用包括HTTP、POP3、FTP、SMB、TELNET、IMAP、NTP等。源代码不公开。UNIX系统上的THC-Hydra有类似的功能。&lt;br /&gt;&lt;br /&gt;工具：Stunnel（一个多种用途的SSL加密外壳）&lt;br /&gt;网址：http://www.stunnel.org/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：Stunnel程序被设计用来做为本地客户端和远程服务器间的SSL加密外壳。它能在POP2、POP3、IMAP等使用inetd后台进程的服务器上增加SSL功能，并且不会影响到程序源代码。它使用OpenSSL或SSLeay库建立SSL会话连接。&lt;br /&gt;&lt;br /&gt;工具：Paketto Keiretsu（极端的TCP/IP）&lt;br /&gt;网址：http://www.doxpara.com/paketto&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix&lt;br /&gt;简介：Paketto Keiretsu是一组使用新式的不常见的策略去操作TCP/IP网络的工具集合，开发的最初本意是为了在现有TCP/IP架构里去实现一些功能，但现在已经远远超出了最初的本意。包含的工具有：Scanrand，一个罕见的快速的网络服务和拓朴发现系统；Minewt，一个NAT/MAT路由器； linkcat，把以太网链路做为标准的输入输出；Paratrace，不产生新的连接就能追踪网络路径；Phentropy，使用OpenQVIS在三维拓朴空间里能绘制出任意总量的数据源图形。&lt;br /&gt;　&lt;br /&gt;&lt;br /&gt;工具：Fragroute（破坏入侵检测系统最强大的工具）&lt;br /&gt;网址：http://www.monkey.org/~dugsong/fragroute/&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：Fragroute能够截取、修改和重写向外发送的报文，实现了大部分的IDS攻击功能。Fragroute起重要作用的是一个简单的规则设置语言，以它去实现延迟、复制、丢弃、碎片、重叠、打印、重排、分割、源路由或其他一些向目标主机发送数据包的攻击。这个工具开发的本意是去测试入侵检测系统、防火墙、基本的TCP/IP栈的行为。像Dsniff、Libdnet一样，这个优秀的工具也是由Dug Song开发的。&lt;br /&gt;&lt;br /&gt;工具：SPIKE Proxy&lt;br /&gt;网址：http://www.immunitysec.com/spikeproxy.html&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix/Windows&lt;br /&gt;简介：Spike Proxy是一个开放源代码的HTTP代理程序，用于发现web站点的安全缺陷。它是Spike应用程序测试套件（http://www.immunitysec.com/spike.html）的一部份，支持SQL插入检测、web站点检测、登录表单暴力破解、溢出检测和字典穷举攻击检测等。&lt;br /&gt;&lt;br /&gt;工具：THC-Hydra（网络认证的破解工具）&lt;br /&gt;网址：http://www.thc.org/releases.php&lt;br /&gt;类别：开放源码&lt;br /&gt;平台：Linux/BSD/Unix&lt;br /&gt;简介：这个工具能对需要网络登录的系统进行快速的字典攻击，包括FTP、POP3、IMAP、Netbios、Telnet、HTTP Auth、LDAP NNTP、VNC、ICQ、Socks5、PCNFS等，支持SSL，并且现在是Nessus风险评估工具的一部份。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;其他的25个最佳安全工具：&lt;br /&gt;&lt;br /&gt;OpenBSD，http://www.openbsd.org/：安全可靠的操作系统。&lt;br /&gt;&lt;br /&gt;TCP Wrappers，ftp://ftp.porcupine.org/pub/security/index.html：一流的IP访问控制和日志的实现机制。&lt;br /&gt;&lt;br /&gt;pwdump3，http://www.polivec.com/pwdump3.html：获取本地或远程Windows主机的口令哈希，而不管是否安装了syskey。&lt;br /&gt;&lt;br /&gt;LibNet，http://www.packetfactory.net/libnet/: 允许程序员去构造和插入网络数据包的高水平开发函数库.&lt;br /&gt;&lt;br /&gt;IpTraf，http://cebu.mozcom.com/riker/iptraf/: IP网络监控软件。&lt;br /&gt;&lt;br /&gt;Fping，http://www.fping.com/：一次可以ping多个IP地址的扫描程序。&lt;br /&gt;&lt;br /&gt;Bastille，http://www.bastille-linux.org/：增强系统安全性的脚本程序，支持Linux, Mac OS X和HP-UX操作系统。&lt;br /&gt;&lt;br /&gt;Winfingerprint，http://winfingerprint.sourceforge.net/: 一款基于Win32的高级远程系统扫描器。&lt;br /&gt;&lt;br /&gt;TCPTraceroute，http://michael.toren.net/code/tcptraceroute/:使用TCP SYN包实现traceroute的工具。&lt;br /&gt;&lt;br /&gt;Shadow Security Scanner，http://www.safety-lab.com/en2/products/1.htm：一款商业化的风险评估工具。&lt;br /&gt;&lt;br /&gt;pf，http://www.benzedrine.cx/pf.html：OpenBSD系统内很有特色的包过滤防火墙。&lt;br /&gt;&lt;br /&gt;LIDS，http://www.lids.org/：Linux内核上的入侵检测和入侵防御系统。&lt;br /&gt;&lt;br /&gt;hfnetchk，http://www.microsoft.com/technet/treeview/default.asp?&lt;br /&gt;url=/technet/security/tools/tools/hfnetchk.asp：微软发布的用于检查网络上Windows主机补丁安装情况的工具。&lt;br /&gt;&lt;br /&gt;etherape，http://etherape.sourceforge.net/：继流量监测软件etherman之后又一个支持unix的图形化网络状况监测软件。&lt;br /&gt;&lt;br /&gt;dig，http://www.isc.org/products/BIND/：Bind附带的DNS查询工具。&lt;br /&gt;&lt;br /&gt;Crack/Cracklib，http://www.users.dircon.co.uk/~crypto/：一流的本地口令破解器。&lt;br /&gt;&lt;br /&gt;cheops/cheops-ng，http://www.marko.net/cheops/，http://cheops-ng.sourceforge.net/：绘制本地或远程网络的网络图，并且也能识别主机的操作系统类型。&lt;br /&gt;&lt;br /&gt;zone alarm，http://www.zonelabs.com/：Windows平台上的个人防火墙软件。&lt;br /&gt;&lt;br /&gt;Visual Route，http://www.visualware.com/visualroute/index.html：获取traceroute/whois数据，并且绘制出数据包经过的网络路线在世界地图上的位置。&lt;br /&gt;&lt;br /&gt;The Coroner's Toolkit (TCT)，http://www.fish.com/tct/：运行于Unix系统上的文件系统检查及紧急修复工具集。&lt;br /&gt;&lt;br /&gt;tcpreplay，http://tcpreplay.sourceforge.net/：能把tcpdump或snoop保存下来的流量监测文件在任意点进行回放的工具。&lt;br /&gt;&lt;br /&gt;snoop，http://www.spitzner.net/snoop.html：Solaris系统附带的网络嗅探工具。&lt;br /&gt;&lt;br /&gt;putty，http://www.chiark.greenend.org.uk/~sgtatham/putty/：Windows平台上优秀的SSH客户端。&lt;br /&gt;&lt;br /&gt;pstools，http://www.sysinternals.com/ntw2k/freeware/pstools.shtml：一套用于管理Windows系统的免费命令行工具。&lt;br /&gt;&lt;br /&gt;arpwatch，http://www-nrg.ee.lbl.gov/：主要用来检测mac地址和ip地址对应关系的工具。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-3413408637718747162?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://forum.ubuntu.org.cn/viewtopic.php?t=1721' title='Hacking tools on linux'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/3413408637718747162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=3413408637718747162' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/3413408637718747162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/3413408637718747162'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/02/hacking-tools-on-linux.html' title='Hacking tools on linux'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-864067964947404014</id><published>2009-02-19T07:41:00.000-08:00</published><updated>2009-02-19T08:13:33.612-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hacking tools'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>The best hacking tool on Ubuntu</title><content type='html'>&lt;span style="font-weight:bold;"&gt;1 Nmap&lt;/span&gt;&lt;br /&gt;Nmap is one of the best network security scanners out there. Nmap will scan for all the computers and services that are currently running on the network.&lt;br /&gt;&lt;br /&gt;Nmap is included within Ubuntu's repositories. So to install, use the following command:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    sudo apt-get install nmap&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2 NetCat&lt;/span&gt;&lt;br /&gt;NetCat is a fantastic little program written by a guy called 'Hobbit' in 1991. This tool is used for reading and writing to network locations using connections on either UDP or TCP.&lt;br /&gt;Again, NetCat is also in the repositories, so to install, run the following command:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    sudo apt-get install netcat&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3 Aircrack-ng&lt;/span&gt;&lt;br /&gt;Aircrack-ng is the best tool out there for cracking and recovering 802.11 WEP &amp; WPA-PSK keys. Once you have collected enough data packets, you are then able to recover the key from the data packets. This is defiantly a must have application to test your home wireless security.&lt;br /&gt;&lt;br /&gt;To install:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    sudo apt-get install aircrack-ng&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;4 nessus&lt;/span&gt;&lt;br /&gt;The Nessus® vulnerability scanner, is the world-leader in active scanners, featuring high speed discovery, configuration auditing, asset profiling, sensitive data discovery and vulnerability analysis of your security posture. Nessus scanners can be distributed throughout an entire enterprise, inside DMZs, and across physically separate networks.&lt;br /&gt;To install:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo apt-get install nessus&lt;br /&gt;sudo apt-get install nessusd&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;add a new user &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo nessus-adduser&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-864067964947404014?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/864067964947404014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=864067964947404014' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/864067964947404014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/864067964947404014'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/02/best-hacking-tool-on-ubuntu.html' title='The best hacking tool on Ubuntu'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-9059145456505553412</id><published>2009-02-17T08:32:00.000-08:00</published><updated>2009-02-17T21:46:15.612-08:00</updated><title type='text'>How to configure system server on Ubuntu 8.10</title><content type='html'>On ubuntu, runlevel 2 is default. You can configure Linux Startup Applications with sysv-rc-conf.Sysv-rc-conf is Run level configurator (front-end) for init.d scripts, Let us install it firstly.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo apt-get install sysv-rc-conf&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;then, setup your needed services, for example httpd(see "ZendCore and mysql config in Ubuntu 8.10")&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The following list is common service&lt;/span&gt;&lt;br /&gt;sysvconfig - Services Startup Configuration Tool&lt;br /&gt;&lt;br /&gt;Debian and Ubuntu Linux also offers service command. It can be used to execute System V style init script stored at /etc/init.d/service-name { start|stop|restart|action }. This is good if you grown up with Red hat. This tool is equivalent to update-rc.d and invoke-rc.d (rcconf and others).&lt;br /&gt;sysvconfig package&lt;br /&gt;&lt;br /&gt;First, install sysvconfig package:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ sudo apt-get install sysvconfig&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;To start / restart / stop service, use the following syntax:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ sudo service {service-name} restart &lt;-- Restart service&lt;br /&gt;$ sudo service {service-name} stop &lt;-- Stop service&lt;br /&gt;$ sudo service {service-name} start &lt;-- Start service&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;For example to stop apache service, enter:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ sudo service httpd stop&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-9059145456505553412?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/9059145456505553412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=9059145456505553412' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/9059145456505553412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/9059145456505553412'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/02/how-to-configure-system-server-on.html' title='How to configure system server on Ubuntu 8.10'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-6468531435537982900</id><published>2009-02-16T05:25:00.000-08:00</published><updated>2009-02-17T08:40:05.914-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>ZendCore and mysql config on Ubuntu 8.10</title><content type='html'>&lt;span style="font-weight: bold;"&gt;1 Install ZendCore&lt;/span&gt;&lt;br /&gt;2 Configure the ZendCore's apache as init.d/httpd&lt;br /&gt;add the following file to init.d&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo gedit /etc/init.d/httpd&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;add the following content to this file&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# httpd auto-start&lt;br /&gt;#&lt;br /&gt;# description: Auto-starts httpd&lt;br /&gt;# processname: httpd&lt;br /&gt;&lt;br /&gt;case $1 in&lt;br /&gt;start)&lt;br /&gt;   /usr/local/Zend/apache2/bin/apachectl -k start&lt;br /&gt;    ;;&lt;br /&gt;stop)  &lt;br /&gt;   /usr/local/Zend/apache2/bin/apachectl -k stop&lt;br /&gt;   ;;&lt;br /&gt;restart)&lt;br /&gt;   /usr/local/Zend/apache2/bin/apachectl -k restart&lt;br /&gt;   ;;&lt;br /&gt;esac   &lt;br /&gt;exit 0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You'll need to make the script executable by running the chmod command:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;    sudo chmod 755 /etc/init.d/httpd&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3 install mysql by apt-get&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo apt-get install mysql-server mysql-clinet mysql-admin&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4 config mysql socket&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo gedit /usr/local/Zend/Core/etc/php.ini&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;make sure mysql driver，then modify php.ini. i.e. Mysqli&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;; Default socket name for local MySQL connects.  If empty, uses the built-in&lt;br /&gt;; MySQL defaults.&lt;br /&gt;mysqli.default_socket =/var/run/mysqld/mysqld.sock&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-6468531435537982900?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/6468531435537982900/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=6468531435537982900' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6468531435537982900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6468531435537982900'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/02/zendcore-and-mysql-config-in-ubuntu-810.html' title='ZendCore and mysql config on Ubuntu 8.10'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-2368611214692541691</id><published>2009-02-15T23:13:00.000-08:00</published><updated>2009-02-15T23:16:21.666-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu: Sensor temperature monitoring with lm-sensors</title><content type='html'>One of the basic things you need, especially if you build your own boxes like I do, is to be able to watch cpu temperatures, voltages, fan speeds, etc. This is easily done with the lm-sensors package in conjuction with code which is available for most types of motherboards in the kernel. This is pretty straightforward, first off lets install lm-sensors:&lt;br /&gt;&lt;br /&gt;# apt-get install lm-sensors&lt;br /&gt;&lt;br /&gt;config the sesors&lt;br /&gt;sensors-detect&lt;br /&gt;&lt;br /&gt;Then , install gui monitor&lt;br /&gt;# apt-get install sensors-applet&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-2368611214692541691?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.quietearth.us/articles/2006/09/30/Ubuntu-Sensor-temperature-monitoring-with-lmsensors' title='Ubuntu: Sensor temperature monitoring with lm-sensors'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/2368611214692541691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=2368611214692541691' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2368611214692541691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2368611214692541691'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/02/ubuntu-sensor-temperature-monitoring.html' title='Ubuntu: Sensor temperature monitoring with lm-sensors'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-1897268489489395577</id><published>2009-02-12T04:57:00.000-08:00</published><updated>2009-02-26T07:23:43.593-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Install virtual network card in Ubuntu 8.10</title><content type='html'>1 install uml-utilities&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo apt-get install uml-utilities&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2 build a new virtual Network Card&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;tunctl -t tap0 -u edwin&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;3 delete this virtual network card&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;tunctl -d tap0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4 config tap0&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;ifconfig tap0 192.168.6.1 netmask 255.255.255.0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;5 add network card when system startup&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo gedit /etc/network/interfaces&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;add the following content &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;auto tap0&lt;br /&gt;iface tap0 inet manual&lt;br /&gt;     up ifconfig $IFACE 192.168.6.1 up&lt;br /&gt;     down ifconfig $IFACE down&lt;br /&gt;     tunctl_user edwin&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-1897268489489395577?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/1897268489489395577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=1897268489489395577' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1897268489489395577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1897268489489395577'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/02/install-virtual-network-card-in-ubuntu.html' title='Install virtual network card in Ubuntu 8.10'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-2320812769992125007</id><published>2009-02-11T23:23:00.000-08:00</published><updated>2009-02-16T01:54:41.613-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Update the Bouml form 4.4-1 to 4.10 in Ubuntu 8.10</title><content type='html'>&lt;span style="font-weight: bold;"&gt;1 add source of bouml&lt;/span&gt;&lt;br /&gt;deb http://download.tuxfamily.org/arakhne/ubuntu intrepid-arakhne universe&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2 add pulic key &lt;/span&gt;&lt;br /&gt;The packages are signed by a GPG public key. You must add this key into your apt key list to avoid warnings. To proceed use one of the following methods:&lt;br /&gt;&lt;br /&gt;  1. Download the public key from the download area and add it into the apt key list:&lt;br /&gt;&lt;br /&gt;     wget -q http://download.tuxfamily.org/arakhne/public.key -O- | sudo apt-key add -&lt;br /&gt;&lt;br /&gt;  2. Import the public key into your local key repository:&lt;br /&gt;&lt;br /&gt;           $&gt; gpg --keyserver www.keyserver.net --recv-keys 0xBA62BC7E&lt;br /&gt;gt; gpg --keyserver www.keyserver.net --recv-keys 0xBA62BC7E&lt;br /&gt;&lt;br /&gt;     or&lt;br /&gt;&lt;br /&gt;           $&gt; gpg --keyserver keyserver.mobrien.net --recv-keys 0xBA62BC7E&lt;br /&gt;gt; gpg --keyserver keyserver.mobrien.net --recv-keys 0xBA62BC7E&lt;br /&gt;&lt;br /&gt;     Add the imported public key into the apt key list:&lt;br /&gt;&lt;br /&gt;           $&gt; gpg --export -a 0xBA62BC7E | sudo apt-key add -&lt;br /&gt;gt; gpg --export -a 0xBA62BC7E | sudo apt-key add -&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3 update by apt-get&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-2320812769992125007?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/2320812769992125007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=2320812769992125007' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2320812769992125007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2320812769992125007'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/02/update-bouml-form-44-1-to-410-in-ubuntu.html' title='Update the Bouml form 4.4-1 to 4.10 in Ubuntu 8.10'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-5993406444224468192</id><published>2009-02-07T02:35:00.000-08:00</published><updated>2009-02-07T02:37:45.800-08:00</updated><title type='text'>List of object-relational mapping software in PHP</title><content type='html'>bject-relational mapping (aka ORM, O/RM, and O/R mapping) is a programming technique for converting data between incompatible type systems in relational databases and object-oriented programming languages. This creates, in effect, a "virtual object database," which can be used from within the programming language. There are both free and commercial packages available that perform object-relational mapping, although some programmers opt to create their own ORM tools.&lt;br /&gt;    * Doctrine, Open Source ORM for PHP 5.2.3, free software (GNU LGPL)&lt;br /&gt;    * Propel, ORM and Query-Toolkit for PHP 5, inspired by Apache Torque, free software (GNU LGPL)&lt;br /&gt;    * EZPDO, Open Source ORM for PHP 5.0.4 or newer, free software (BSD)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-5993406444224468192?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/5993406444224468192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=5993406444224468192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5993406444224468192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5993406444224468192'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/02/list-of-object-relational-mapping.html' title='List of object-relational mapping software in PHP'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-2971943378371509239</id><published>2009-01-12T23:18:00.000-08:00</published><updated>2009-04-07T06:24:32.034-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>快速在Ubuntu 8.10 安装 lamp开发环境</title><content type='html'>&lt;blockquote&gt;&lt;s&gt;&lt;strike&gt;&lt;u&gt;&lt;p&gt;在日常开发中，我们主要使用LAMP，Ubuntu提供了简单的，快速的配置该服务器环境的方法，步骤如下：&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1 使用tasksel安装LAMP套件&lt;/p&gt; &lt;p&gt;sudo tasksel install lamp-server&lt;/p&gt;&lt;p&gt;2 基于ZF的开发要使用rewrite 模块，所以在终端中执行&lt;/p&gt; &lt;p&gt;sudo a2enmod rewrite&lt;/p&gt; &lt;p&gt;指令后，即启用了 Mod_rewrite 模块。&lt;/p&gt;&lt;p&gt;3 配置虚拟目录位置（修改红色部分）&lt;/p&gt;&lt;/u&gt;&lt;/strike&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;ServerAdmin webmaster@localhost&lt;br /&gt;&lt;br /&gt;DocumentRoot /home/edwin/Zend/workspaces/DefaultWorkspace/Member-shouxi/Public&lt;br /&gt;&amp;lt;directory&amp;gt;&lt;br /&gt;Options FollowSymLinks&lt;br /&gt;AllowOverride None&lt;br /&gt;&amp;lt;/directory&amp;gt;&lt;br /&gt;&amp;lt;directory home/edwin/zend/workspaces/defaultworkspace/shouxi/public/&amp;gt;&lt;br /&gt;Options Indexes FollowSymLinks MultiViews&lt;br /&gt;AllowOverride All&lt;br /&gt;Order allow,deny&lt;br /&gt;allow from all&lt;br /&gt;&amp;lt;/directory&amp;gt;&lt;br /&gt;&lt;br /&gt;ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/&lt;br /&gt;&amp;lt;directory usr="" lib="" bin=""&amp;gt;&lt;br /&gt;AllowOverride None&lt;br /&gt;Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch&lt;br /&gt;Order allow,deny&lt;br /&gt;Allow from all&lt;br /&gt;&amp;lt;/directory&amp;gt;&lt;br /&gt;&lt;br /&gt;ErrorLog /var/log/apache2/error.log&lt;br /&gt;&lt;br /&gt;# Possible values include: debug, info, notice, warn, error, crit,&lt;br /&gt;# alert, emerg.&lt;br /&gt;LogLevel warn&lt;br /&gt;&lt;br /&gt;CustomLog /var/log/apache2/access.log combined&lt;br /&gt;&lt;br /&gt;  Alias /doc/ "/usr/share/doc/"&lt;br /&gt; &amp;lt;directory usr="" share="" doc=""&amp;gt;&lt;br /&gt;      Options Indexes MultiViews FollowSymLinks&lt;br /&gt;      AllowOverride None&lt;br /&gt;      Order deny,allow&lt;br /&gt;      Deny from all&lt;br /&gt;      Allow from 127.0.0.0/255.0.0.0 ::1/128&lt;br /&gt; &amp;lt;/directory&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4 重启apache 即可&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/s&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-2971943378371509239?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/2971943378371509239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=2971943378371509239' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2971943378371509239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2971943378371509239'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/01/ubuntu-810-lamp.html' title='快速在Ubuntu 8.10 安装 lamp开发环境'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-6917266611567778429</id><published>2009-01-12T22:03:00.000-08:00</published><updated>2009-01-12T23:33:53.097-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>在 Ubuntu 8.10下设置静态IP和虚拟机</title><content type='html'>步骤1－卸载 Gnome Network Manager:这是必须的一步，因为不卸载的话，不过你如何设置，重启后都会被重置。这个就是Bug所在之处。&lt;br /&gt;&lt;br /&gt;用下列命令卸载:&lt;br /&gt;&lt;br /&gt; sudo update-rc.d -f NetworkManager remove&lt;br /&gt;&lt;br /&gt;这会禁用并且卸载Gnome Network Manager应用程序。&lt;span style="font-weight: bold; color: rgb(255, 102, 102);"&gt;然后你需要重启&lt;/span&gt;。&lt;br /&gt;&lt;br /&gt;步骤2－手动修改网络配置:这步你需要手动编辑网络配置文件。&lt;br /&gt;&lt;br /&gt;2.1－手动修改网络配置文件:&lt;br /&gt;&lt;br /&gt; sudo gedit /etc/network/interfaces&lt;br /&gt;&lt;br /&gt;加入（或者修改）下列行:&lt;br /&gt;&lt;br /&gt; auto lo eth0&lt;br /&gt;iface lo inet loopback&lt;br /&gt;iface eth0 inet static&lt;br /&gt;address 192.168.1.96&lt;br /&gt;netmask 255.255.255.0&lt;br /&gt;gateway 192.168.1.1&lt;br /&gt;&lt;br /&gt;auto eth0:0&lt;br /&gt;iface eth0:0 inet static&lt;br /&gt;address 192.168.1.97&lt;br /&gt;netmask 255.255.255.0&lt;br /&gt;gateway 192.168.1.1&lt;br /&gt;&lt;br /&gt;auto eth0:1&lt;br /&gt;iface eth0:1 inet static&lt;br /&gt;address 192.168.1.98&lt;br /&gt;netmask 255.255.255.0&lt;br /&gt;gateway 192.168.1.1&lt;br /&gt;&lt;br /&gt;保存修改。&lt;br /&gt;&lt;br /&gt;2.2－手动修改DNS配置文件:&lt;br /&gt;&lt;br /&gt; sudo nano /etc/resolv.conf&lt;br /&gt;&lt;br /&gt;加入（或者修改）下列行:&lt;br /&gt;&lt;br /&gt; # Generated by NetworkManager&lt;br /&gt;nameserver 192.168.1.1&lt;br /&gt;nameserver 202.106.46.151&lt;br /&gt;&lt;br /&gt;保存修改。&lt;br /&gt;&lt;br /&gt;2.3－ 手动重启网络服务:&lt;br /&gt;&lt;br /&gt; sudo /etc/init.d/networking restart&lt;br /&gt;&lt;br /&gt;返回结果如下:&lt;br /&gt;&lt;br /&gt; *Reconfiguring network interfaces… [OK]&lt;br /&gt;&lt;br /&gt;现在，你可以在终端里输入ipconfig命令来查看你修改的结果。如果不对，你还需要重启下。&lt;br /&gt;&lt;br /&gt;设置apache的虚拟机&lt;br /&gt;1 在workspace里添加doucument root&lt;br /&gt;2 在/etc/apache2/sites-available 创建虚拟机配置文件 192.168.1.96, 内容如下：&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;VirtualHost 192.168.1.97:80&amp;gt&lt;br /&gt;        ServerAdmin webmaster@localhost&lt;br /&gt;&lt;br /&gt;        DocumentRoot /home/edwin/Zend/workspaces/DefaultWorkspace/ZfProjects-Main/Public&lt;br /&gt;        &lt;directory&gt;&lt;br /&gt;                Options FollowSymLinks&lt;br /&gt;                AllowOverride None&lt;br /&gt;        &lt;/directory&gt;&lt;br /&gt;        &lt;directory&gt;&lt;br /&gt;                Options Indexes FollowSymLinks MultiViews&lt;br /&gt;                AllowOverride All&lt;br /&gt;                Order allow,deny&lt;br /&gt;                allow from all&lt;br /&gt;        &lt;/directory&gt;&lt;br /&gt;&lt;br /&gt;        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/&lt;br /&gt;        &lt;directory&gt;&lt;br /&gt;                AllowOverride None&lt;br /&gt;                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch&lt;br /&gt;                Order allow,deny&lt;br /&gt;                Allow from all&lt;br /&gt;        &lt;/directory&gt;&lt;br /&gt;&lt;br /&gt;        ErrorLog /var/log/apache2/192.168.1.97.error.log&lt;br /&gt;&lt;br /&gt;        # Possible values include: debug, info, notice, warn, error, crit,&lt;br /&gt;        # alert, emerg.&lt;br /&gt;        LogLevel warn&lt;br /&gt;&lt;br /&gt;        CustomLog /var/log/apache2/192.168.1.97.access.log combined&lt;br /&gt;&lt;br /&gt;    Alias /doc/ "/usr/share/doc/"&lt;br /&gt;    &lt;directory&gt;&lt;br /&gt;        Options Indexes MultiViews FollowSymLinks&lt;br /&gt;        AllowOverride None&lt;br /&gt;        Order deny,allow&lt;br /&gt;        Deny from all&lt;br /&gt;        Allow from 127.0.0.0/255.0.0.0 ::1/128&lt;br /&gt;    &lt;/directory&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;VirtualHost *:80&amp;gt&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3 重启apache 服务&lt;br /&gt;&lt;pre&gt;sudo a2ensite 192.168.1.97&lt;br /&gt;sudo /etc/init.d/apache2 restart&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-6917266611567778429?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/6917266611567778429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=6917266611567778429' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6917266611567778429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6917266611567778429'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/01/ubuntu-810ip.html' title='在 Ubuntu 8.10下设置静态IP和虚拟机'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-2629423855440313513</id><published>2009-01-03T18:33:00.000-08:00</published><updated>2009-01-03T18:42:06.894-08:00</updated><title type='text'>Pseudocode Guidline</title><content type='html'>原文：《Pseudocode 》by Naomi Nishimura&lt;br /&gt;刘建文略译（http://blog.csdn.net/keminlau）&lt;br /&gt;&lt;br /&gt;In the text and lectures, algorithms will often be expressed in pseudocode, a mixture of code and English (for speciﬁc not necessarily good examples of particular pseudocodes, see p. 17 of the course text, or the examples in the books The Design and Analysis of Computer Algorithms by Aho, Hopcroft, and Ullman, Addison-Wesley, 1974, Computer Algorithms: Introduction to Design and Analysis by Baase, 1978, and Fundamentals of Computer Algorithms by Horowitz and Sahni, Computer Science Press, 1984). While understanding pseudocode is usually not difficult, writing it can be a challenge.&lt;br /&gt;&lt;br /&gt;伪代码是英语与代码的混合物，理解伪代码不难，但是编写伪代码则很具有挑战性。&lt;br /&gt;&lt;br /&gt;Why use pseudocode at all? Pseudocode strikes a sometimes precarious balance between the understandability and informality of English and the precision of code. If we write an algorithm in English, the description may be at so high a level that it is diﬃcult to analyze the algorithm and to transform it into code.&lt;br /&gt;&lt;br /&gt;If instead we write the algorithm in code, we have invested a lot of time in determining the details of an algorithm we may not choose to implement (as we typically wish to analyze algorithms BEFORE deciding which one to implement). The goal of writing pseudocode, then, is to provide a high-level description of an algorithm which facilitates analysis and eventual coding (should it be deemed to be a “good” algorithm) but at the same time suppresses many of the details that vanish with asymptotic notation. Finding the right level in the tradeoﬀ between readability and precision can be tricky……&lt;br /&gt;&lt;br /&gt;为什么一定要使用伪代码？（因为）伪代码平衡了英语（自然语言）的易理解性和非形式所带来的模糊性与代码的精确性之的矛盾。如果我们使用英语（自然语言）编写算法，那么算法描述可能太过高层而很难对算法进行分析并转化成实际代码；如果我们用代码编写算法，我们得花大量的时间在一些我们可能最终不会实现的代码细节上（缘于我们一般在实现算法之前看对算法逻辑进行分析）。编写伪代码（以一个适当的表述高度描述算法）的目的是为了便于算法分析并最终实现编码，但同时抑制住在渐近记法（asymptotic notation）被抹去的大量细节。在可读性与精确性之间找到一个适当的平衡点是相当的困难（tricky：问题难以处理，需要莫大的心力）的……&lt;br /&gt;&lt;br /&gt;Just as a proof is written with a type of reader in mind (hence proofs in undergraduate textbooks tend to have more details than those in journal papers), algorithms written for different audiences may be written at diﬀerent levels of detail. In assignments and exams for the course, you need to demonstrate your knowledge without obscuring使变模糊 the big picture with unneeded detail. Here are a few general guidelines for checking your pseudocode:&lt;br /&gt;&lt;br /&gt;好比一个（数学）证明有预定的读者类型一样，面对不同的读者，算法的编写详细程度也不同。以下是指导伪代码编写的参考原则：&lt;br /&gt;1. Mimic模仿 good code and good English. Using aspects of both systems means adhering to the style rules of both to some degree. It is still important that variable names be mnemonic, comments be included where useful, and English phrases be comprehensible (full sentences are usually not necessary).&lt;br /&gt;&lt;br /&gt;仿照好代码或好英文（的表述方式）。意思是说在某种程度上吸收二者在表述上的优点。比如，使用易记的变量名、适当的使用注释和使用好理解的英语短语等。 2. Ignore unnecessary details. If you are worrying about the placement of commas, you are using too much detail. It is a good idea to use some convention to group statements (begin/end, brackets, or whatever else is clear), but you shouldn't obsess about syntax.&lt;br /&gt;&lt;br /&gt;忽略不必要的细节。如果你频繁地使用逗号，意味着你写得太细了。使用begin/end或括号给组合多条语句是不错的主意，不过不能被语法分心。&lt;br /&gt;3. Don't belabour无必要的解释 the obvious. In many cases, the type of a variable is clear from context; unless it is critical that it is speciﬁed to be an integer or real, it is often unnecessary to make it explicit.&lt;br /&gt;&lt;br /&gt;不要对很显然的东西作解释。很多时候，变量的类型在上下文中是很明显的，除非它的特定类型（比如是整数或实数）是至关重要，不然没必要显式说明它的类型。&lt;br /&gt;&lt;br /&gt;4. Take advantage of programming shorthands. Using if-then-else or looping structures is more concise than writing out the equivalent in English; general constructs that are not peculiar to a small number of languages are good candidates for use in pseudocode. Using parameters in specifying procedures is concise, clear, and accurate, and hence should not be omitted from pseudocode.&lt;br /&gt;&lt;br /&gt;使用编程的短记（shorthands）工具。使用if-then-else 或循环结构比用英语表达更简洁；一些通用的语言构造也可在伪代码中使用（FIXME）。给函数指定参数是简洁、明了和准确的，不应该在伪代码中去除。&lt;br /&gt;&lt;br /&gt;5. Consider the context. If you are writing an algorithm for quicksort, the statement "use quicksort to sort the values" is hiding too much detail; if we have already studied quicksort in class and later use it as a subroutine in another algorithm, the statement would be appropriate to use.&lt;br /&gt;&lt;br /&gt;考虑上下文。如果你正为一个快速排序写一个算法，那么语句“use quicksort to sort the value”就隐藏了太多的细节了；如果你已经学习过快速排序算法，而现在把它作为一个另一个算法的子过程，那么可以用那句语句来表述。&lt;br /&gt;&lt;br /&gt;6. Don't lose sight of the underlying model. It should be possible to “see through” your pseudocode to the model below; if not (that is, you are not able to analyze the algorithm easily), it is written at too high a level.&lt;br /&gt;&lt;br /&gt;不迷惑于算法底下的模型。看透你的伪代码底下的模型是可能的，如是不行，证明编写的太高层次了（不够详细），那样你很难分析算法。&lt;br /&gt;&lt;br /&gt;7. Check for balance. If the pseudocode is hard for a person to read or diﬃcult to translate into working code (or worse yet, both!), then something is wrong with the level of detail you have chosen to use.&lt;br /&gt;&lt;br /&gt;检验（可读性与精确性）平衡性。如果伪代码很难读懂或很难翻译成源代码，那么你的伪代码编写的详细程度必定在什么地方出了问题了。&lt;br /&gt;&lt;br /&gt;(author: Naomi Nishimura)&lt;br /&gt;&lt;br /&gt;Kemin said:&lt;br /&gt;b.弱智的人玩IDE，聪明的人玩编程语言，智慧的人玩伪代码，当然还有更高的级别，想知道？去问上帝吧。&lt;br /&gt;Kemin said:&lt;br /&gt;b. 看来伪代码是亲自然语言多一点，还是亲源代码多一点是没准的，也没必须太准，太受限，因为只要代码读者能花点时间进入状态，进入问题的上下文，那即便是很 “烦人”很magic的源代码也看得懂，不然自然语言并且有人讲解也听不懂看不明。所以伪代码的抽象level去到哪不是一成不变的，因人而异。&lt;br /&gt;参考&lt;br /&gt;&lt;br /&gt;    * http://en.wikipedia.org/wiki/Pseudocode&lt;br /&gt;    * http://www.coderookie.com/2006/tutorial/the-pseudocode-programming-process/&lt;br /&gt;    * 伪代码的使用 http://www.comp.nus.edu.sg/~xujia/mirror/algorithm.myrice.com/algorithm/pseudocode.htm&lt;br /&gt;    * PSEUDOCODE STANDARD http://users.csc.calpoly.edu/~jdalbey/SWE/pdl_std.html&lt;br /&gt;    * 算法描述中的'Pseudocode Conventions' http://bigwhite.blogbus.com/logs/2443206.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-2629423855440313513?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/2629423855440313513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=2629423855440313513' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2629423855440313513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2629423855440313513'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/01/pseudocode-guidline.html' title='Pseudocode Guidline'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-4887440849718940607</id><published>2009-01-01T03:32:00.001-08:00</published><updated>2009-01-01T03:32:45.459-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>ubuntu 连接windows远程桌面</title><content type='html'>sudo apt-get install rdesktop&lt;br /&gt;rdesktop 192.168.0.1&lt;br /&gt;&lt;br /&gt;-f 全屏&lt;br /&gt;-a 16位色&lt;br /&gt;默认端口是3389（linux 22 sh）&lt;br /&gt;注意：windows 的服务中的 Terminal Servies 需要开启。我的电脑 右键 属性 远程中，勾选 允许远程用户链接到此计算机。另外，退出的时候选择注销，而不是关机！&lt;br /&gt;&lt;br /&gt;更多参数：&lt;br /&gt;-u xxxxxx 登录用户，可选&lt;br /&gt;-p xxxxxx 登录密码，可选&lt;br /&gt;-r clipboard:PRIMARYCLIPBOARD 重要，剪贴板可以与远程桌面交互&lt;br /&gt;-a 16 颜色，可选，不过最高就是16位&lt;br /&gt;-z 压缩，可选&lt;br /&gt;-g 1024x768 分辨率，可选，缺省是一种比当前本地桌面低的分辨率&lt;br /&gt;-P 缓冲，可选&lt;br /&gt;-r disk:wj=/home/magicgod 映射虚拟盘，可选，会在远程机器的网上邻居里虚拟出一个映射盘，功能很强，甚至可以是软盘或光盘&lt;br /&gt;-r sound:off 关闭声音，当然也可以把远程发的声音映射到本地来。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-4887440849718940607?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/4887440849718940607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=4887440849718940607' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4887440849718940607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4887440849718940607'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2009/01/ubuntu-windows.html' title='ubuntu 连接windows远程桌面'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-5822300888321352916</id><published>2008-12-18T01:58:00.000-08:00</published><updated>2008-12-18T01:58:58.120-08:00</updated><title type='text'>Web信息架构：设计大型网站：第3版 | CSDN读书</title><content type='html'>&lt;a href="http://book.csdn.net/hi/BookClub_BookDetails.aspx?id=249180"&gt;Web信息架构：设计大型网站：第3版 | CSDN读书&lt;/a&gt;: "Web信息架构：设计大型网站：第3版"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-5822300888321352916?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://book.csdn.net/hi/BookClub_BookDetails.aspx?id=249180' title='Web信息架构：设计大型网站：第3版 | CSDN读书'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/5822300888321352916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=5822300888321352916' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5822300888321352916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5822300888321352916'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/12/web3-csdn.html' title='Web信息架构：设计大型网站：第3版 | CSDN读书'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-5540134275419927090</id><published>2008-12-10T17:28:00.000-08:00</published><updated>2008-12-10T17:28:37.732-08:00</updated><title type='text'>How to Install MySQL | David Turner</title><content type='html'>&lt;a href="http://www.csci.csusb.edu/turner/mysql"&gt;How to Install MySQL | David Turner&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-5540134275419927090?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.csci.csusb.edu/turner/mysql' title='How to Install MySQL | David Turner'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/5540134275419927090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=5540134275419927090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5540134275419927090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5540134275419927090'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/12/how-to-install-mysql-david-turner.html' title='How to Install MySQL | David Turner'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-8474471113946285117</id><published>2008-12-04T06:54:00.000-08:00</published><updated>2008-12-04T07:51:38.913-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Install Zend_Tool in Ubuntu 8.10</title><content type='html'>As a hot PHP framework, Zend Framework offer a command tool named zend_tool, let us install it to our desktop of Ubuntu. see the following:&lt;br /&gt;1 install php-cli&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#sudo apt-get install php5-cli php5-dev&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2 create direcotory &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#cd /home/edwin/Zend&lt;br /&gt;#mkdir tool&lt;br /&gt;#mkdir library&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3 check out load Zend framework&lt;br /&gt; Zend_Tool library&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#cd tool&lt;br /&gt;#svn co http://framework.zend.com/svn/framework/laboratory/Zend_Tool/ ./&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt; Zend Framework Stand Library&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#cd library&lt;br /&gt;#svn co http://framework.zend.com/svn/framework/standard/trunk/library/ ./&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3 add 2 library to php.ini's include path&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#sudo gedit /etc/php5/cli/php.ini&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;then , add "include_path = ".:/home/edwin/Zend/tool/library:/home/edwin/Zend/library" to the bottom line;&lt;br /&gt;4 test it&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#cd /home/edwin/Zend/tool/bin&lt;br /&gt;#php zf.php&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;you will get soem errors like following:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;zf.php cannot find the Zend Framework Labratory Library.  Please either set the $zendFrameworkPath in zf.php OR set the ZFL_PATH environment variable.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So, that means php's include path was wrong. I checked it, but there was no problem on it. By many test about it, the solution is fllowing: you need change  zf.php's directory path"/" into " DIRECTORY_SEPARATOR" .&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * DEV ONLY START - this will be removed when this hits incubator&lt;br /&gt; */&lt;br /&gt;$zendFrameworkPath    = null;&lt;br /&gt;$zendFrameworkLabPath = null;&lt;br /&gt;&lt;br /&gt;if ($zendFrameworkPath === null) {&lt;br /&gt;    $zendFrameworkPath = @include_once 'Zend'. DIRECTORY_SEPARATOR .'Loader.php'; //change this line&lt;br /&gt;    if ($zendFrameworkPath === false) {&lt;br /&gt;        // get the env var?&lt;br /&gt;        $zendFrameworkPath = getenv('ZF_PATH');&lt;br /&gt;        if ($zendFrameworkPath == '' || !file_exists($zendFrameworkPath)) {&lt;br /&gt;            die('zf.php cannot find the Zend Framework Standard Library.  Please either set the $zendFrameworkPath in zf.php OR set the ZF_PATH environment v&lt;br /&gt;ariable.' . PHP_EOL);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if ($zendFrameworkLabPath === null) {&lt;br /&gt;    $zendFrameworkLabPath = @include_once 'ZendL'. DIRECTORY_SEPARATOR .'Tool'. DIRECTORY_SEPARATOR .'Framework'. DIRECTORY_SEPARATOR .'Endpoint'. DIRECTORY_&lt;br /&gt;SEPARATOR .'Cli.php'; //change this line&lt;br /&gt;    if ($zendFrameworkLabPath === false) {&lt;br /&gt;        // get the env var?&lt;br /&gt;        $zendFrameworkLabPath = getenv('ZFL_PATH');&lt;br /&gt;        if ($zendFrameworkLabPath == '' || !file_exists($zendFrameworkLabPath)) {&lt;br /&gt;            die('zf.php cannot find the Zend Framework Labratory Library.  Please either set the $zendFrameworkPath in zf.php OR set the ZFL_PATH environment&lt;br /&gt; variable.' . PHP_EOL);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if ($zendFrameworkLabPath !== 1) {&lt;br /&gt;    set_include_path($zendFrameworkLabPath . PATH_SEPARATOR . get_include_path());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;if ($zendFrameworkPath !== 1) {&lt;br /&gt;    set_include_path($zendFrameworkPath . PATH_SEPARATOR . get_include_path());&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;unset($zendFrameworkPath, $zendFrameworkLabPath);&lt;br /&gt;/**&lt;br /&gt; * DEV ONLY STOP&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;require_once 'Zend/Loader.php';&lt;br /&gt;Zend_Loader::registerAutoload();&lt;br /&gt;&lt;br /&gt;// run the cli endpoint&lt;br /&gt;ZendL_Tool_Framework_Endpoint_Cli::main();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;At the end, copy the zf.sh and zf.php to /usr/bin&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#sudo cp zf.sh /usr/bin/zf&lt;br /&gt;#sudo cp zf.php /usr/bin/zf.php&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;then, you can use the command zf at the terminal:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#zf show version&lt;br /&gt;Zend Framework Version: 1.7.1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;That is Ok! You could code some cool scripts by it or php-cli now&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-8474471113946285117?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/8474471113946285117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=8474471113946285117' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8474471113946285117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8474471113946285117'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/12/install-zendtool-in-ubuntu-810.html' title='Install Zend_Tool in Ubuntu 8.10'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-6227999913355162282</id><published>2008-12-02T01:21:00.000-08:00</published><updated>2008-12-02T06:41:32.966-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><title type='text'>Bug的级别定义</title><content type='html'>在项目开发过程中，用到的bug解决状态列举出来，希望对大家有所帮助：  &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;FIXED（已解决）：bug已经被解决,并且通过经过测试。&lt;/li&gt;&lt;li&gt;INVALID(不是bug)：被描述的问题不是一个bug（测试人员提出这个bug,但是开发人员认为不是bug）。&lt;/li&gt;&lt;li&gt;WONTFIX(不修改bug,NeedlessFix)：被描述的问题是一个bug,但是不准备进行修改。&lt;/li&gt;&lt;li&gt;LATER(下一版本再修改)：被描述的问题是一个bug,但是不在当前版本中进行修改。（已经确定在下一版本修改）&lt;/li&gt;&lt;li&gt;REMIND(可能到下一个版本再修改)：被描述的问题是一个bug,但是很可能不在目前版本中进行修改（注意是可能，注意later）&lt;/li&gt;&lt;li&gt;DUPLICATE(bug重复)：提出的问题和当前已经存在的某个bug重复。&lt;/li&gt;&lt;li&gt;WORKSFORME(bug不能重现)：不能重现这个bug,查看源代码也不知道为什么会出现这样的bug 现象,如果以后有更多的关 于这个bug的线索,将重新接受这个bug。（这个是对于那些知道有bug，但是却不能重现bug的情况）&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-6227999913355162282?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/6227999913355162282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=6227999913355162282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6227999913355162282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6227999913355162282'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/12/bug.html' title='Bug的级别定义'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-9134319115573471151</id><published>2008-11-27T07:08:00.000-08:00</published><updated>2008-12-02T01:25:21.057-08:00</updated><title type='text'></title><content type='html'>I have installed the editor named Drivel for blogspot, but how to use this editor is a problem for me, so, this just is a test log&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-9134319115573471151?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/9134319115573471151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=9134319115573471151' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/9134319115573471151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/9134319115573471151'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/11/i-have-installed-editor-named-drivel.html' title=''/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-8256706668623453425</id><published>2008-11-23T22:48:00.000-08:00</published><updated>2008-11-23T22:57:55.745-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>解决Ubuntu8.04中mysql中文乱码</title><content type='html'>昨天刚在笔记本上安装Ubuntu 8.04,按照步骤安装了apt的mysql数据库，然后将现有的开发数据库导入（基于UTF-8）,发现浏览的时候出现乱码现象，所以解决办法：&lt;br /&gt;1 确认Mysql的编码&lt;br /&gt;通过客户端进入mysql,执行&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mysql&gt;show variables like 'character%';&lt;br /&gt;+--------------------------+----------------------------+&lt;br /&gt;| Variable_name | Value |&lt;br /&gt;+--------------------------+----------------------------+&lt;br /&gt;| character_set_client | latin1 |&lt;br /&gt;| character_set_connection | latin1 |&lt;br /&gt;| character_set_database | utf8 |&lt;br /&gt;| character_set_filesystem | binary |&lt;br /&gt;| character_set_results | utf8 |&lt;br /&gt;| character_set_server | latin1 |&lt;br /&gt;| character_set_system | utf8 |&lt;br /&gt;| character_sets_dir | /usr/share/mysql/charsets/ |&lt;br /&gt;+--------------------------+----------------------------+&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;确认是编码问题&lt;br /&gt;2 找到mysql的配置文件，修改/etc/mysql/my.cnf&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo gedit /etc/mysql/my.cnf&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;在my.cnf文件中的[client]段和 [mysqld]段加上以下两行内容：&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[client]&lt;br /&gt;default-character-set=utf8&lt;br /&gt;[mysqld]&lt;br /&gt;default-character-set=utf8&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3 需要重启mysql服务&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo /etc/init.d/mysql restart&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;4 查看一下现在mysql的编码&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo mysql －u root -p&lt;br /&gt;&lt;br /&gt;mysql&gt;show variables like 'character%';&lt;br /&gt;+--------------------------+----------------------------+&lt;br /&gt;| Variable_name | Value |&lt;br /&gt;+--------------------------+----------------------------+&lt;br /&gt;| character_set_client | utf8 |&lt;br /&gt;| character_set_connection | utf8 |&lt;br /&gt;| character_set_database | utf8 |&lt;br /&gt;| character_set_filesystem | binary |&lt;br /&gt;| character_set_results | utf8|&lt;br /&gt;| character_set_server | utf8 |&lt;br /&gt;| character_set_system | utf8 |&lt;br /&gt;| character_sets_dir | /usr/share/mysql/charsets/ |&lt;br /&gt;+--------------------------+----------------------------+&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;5 编码正确，由于刚才导库的时候是基于错误编码的基础上作的，所以，会有编码的问题，因此，删除刚才导入的数据库，重新导入，打开页面，OK!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-8256706668623453425?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/8256706668623453425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=8256706668623453425' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8256706668623453425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8256706668623453425'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/11/ubuntu804mysql.html' title='解决Ubuntu8.04中mysql中文乱码'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-5407792968891393130</id><published>2008-11-20T06:50:00.000-08:00</published><updated>2008-11-20T06:51:41.450-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux command'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>macchanger</title><content type='html'>macchanger 和 ifconfig [interface] hw ether [MAC] 的功能一樣, 可以變更網路卡卡號,&lt;br /&gt;但並不是實體地修改卡號, 重開機後仍會回復, 嚴格說起來是可以設定網路卡卡號.&lt;br /&gt;另外一個好用功能是可以查詢 vendor&lt;br /&gt;&lt;br /&gt;查詢本機 eth0&lt;br /&gt;# macchanger -s eth0&lt;br /&gt;Current MAC: 00:02:b3:9b:b9:ba (Intel Corporation)&lt;br /&gt;&lt;br /&gt;查詢 00:e0:4c 開頭是那一家做的&lt;br /&gt;# macchanger -l | grep 00:e0:4c&lt;br /&gt;7079 - 00:e0:4c - Realtek Semiconductor Corp.&lt;br /&gt;&lt;br /&gt;列出 D-Link 的 MAC list&lt;br /&gt;# macchanger --list=D-Link&lt;br /&gt;Misc MACs:&lt;br /&gt;Num MAC Vendor&lt;br /&gt;--- --- ------&lt;br /&gt;&lt;br /&gt;Wireless MACs:&lt;br /&gt;Num MAC Vendor&lt;br /&gt;--- --- ------&lt;br /&gt;0012 - 00:05:5d - D-Link DWL-650, DWL-650H&lt;br /&gt;0013 - 00:06:25 - Linksys WPC11 v2.5, D-Link DCF-650W, Linksys WPC11 v3&lt;br /&gt;# macchanger --list=D-link&lt;br /&gt;Misc MACs:&lt;br /&gt;Num MAC Vendor&lt;br /&gt;--- --- ------&lt;br /&gt;1374 - 00:05:5d - D-link Systems, Inc.&lt;br /&gt;3426 - 00:0d:88 - D-link Corporation&lt;br /&gt;3863 - 00:0f:3d - D-link Corporation&lt;br /&gt;5340 - 00:50:ba - D-link&lt;br /&gt;5862 - 00:80:c8 - D-link Systems, Inc.&lt;br /&gt;&lt;br /&gt;Wireless MACs:&lt;br /&gt;Num MAC Vendor&lt;br /&gt;--- --- ------&lt;br /&gt;指定 keyword 大小寫有差, 資料檔 /usr/local/share/macchanger/OUI.list 的內容, 大小寫並沒有統一,&lt;br /&gt;還是用 macchanger -l | grep -i keyword 比較實用&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-5407792968891393130?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/5407792968891393130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=5407792968891393130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5407792968891393130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5407792968891393130'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/11/macchanger.html' title='macchanger'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-5442771064684747887</id><published>2008-11-16T22:49:00.000-08:00</published><updated>2009-04-01T19:35:04.491-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>使用svnsync镜像版本库</title><content type='html'>术语&lt;br /&gt;&lt;br /&gt;* 主（Master）: 将要通过svnsync被同步的活动读/写版本库。&lt;br /&gt;* 镜像（Mirror）: 将要与master通过svnsync同步的只读版本库。&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;注意，svn的版本要大于1.4&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;实现&lt;br /&gt;&lt;br /&gt;实现svnsync的唯一的前提条件是创建一个希望镜像的版本库，一旦创建，你就可以按照下面步骤继续：&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 1: 创建镜像Repository&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;svnadmin create MIRROR_REPO_PATH&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 2: 设置镜像版本库只对同步用户可写&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;为了让镜像版本库只被同步用户写，我们的例子里用户名是”svnsync”，我们有一些选项，一个就是使用Subversion的授权功能设置缺省的访问规则(在auth文件里设置)：&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[/]&lt;br /&gt;* = r&lt;br /&gt;svnsync = rw  #MIRROR_REPO_USER&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 3: 让镜像版本库使用同步用户修改修订版本属性&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;为此，我们需要创建一个pre-revprop-change钩子，类似于下面的例子，也是shell脚本，在hook文件夹里，有一个建立一个per-revprop-change的文件（不用管他的模版文件），将下面的内容复制：&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;USER="$3"&lt;br /&gt;&lt;br /&gt;if [ "$USER" = "MIRROR_REPO_USER" ]; then exit 0; fi&lt;br /&gt;&lt;br /&gt;echo “Only the syncuser user may change revision properties as this is a read-only, mirror repository.”  &gt;&amp;amp;2&lt;br /&gt;&lt;br /&gt;exit 1&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;然后修改这个文件的属性为777&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 4: 注册同步的镜像版本库&lt;/span&gt;&lt;br /&gt;在任何平台使用下面的svnsync命令：&lt;br /&gt;&lt;pre&gt;svnsync initialize URL_TO_MIRROR_REPO URL_TO_MASTER_REPO --username=MASTER_REPO_USER --password=MASTER_REPO_PASSWD&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;如果所有的配置正确，你一定会看到下面的输出：&lt;br /&gt;&lt;br /&gt;Copied properties for revision 0.&lt;br /&gt;&lt;br /&gt;如果有错误，一般就是上步钩子的问题，仔细阅读错误信息，可以纠正。现在你已经注册了镜像版本库与主版本库的同步，我们必须继续执行初始的同步，这样镜像版本库才和主版本库是一样的了。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 5: 执行初始同步&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;为了确定所有事情已经准备好了，并且执行初始同步，在任何系统只需要执行：&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;svnsync synchronize URL_TO_MIRROR_REPO --username=MASTER_REPO_USER --password=MASTER_REPO_PASSWD&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;如果所有的同步正确，你会看到类似的输出：&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Committed revision 1.&lt;br /&gt;Copied properties for revision 1.&lt;br /&gt;Committed revision 2.&lt;br /&gt;Copied properties for revision 2.&lt;br /&gt;Committed revision 3.&lt;br /&gt;Copied properties for revision 3.&lt;br /&gt;&lt;br /&gt;不过在这里可能会出现 “svnsync: Couldn't get lock on destination repos after 10 attempts”类似的报错，你需要手动清除lock&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;svn pdel --revprop -r 0 svn:sync-lock --username=MIRROR_REPO_USER URL_TO_MIRROR_REPO&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Step 6: 使用post-commit钩子自动同步&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;根据初始同步的输出，我们现在要做的就是写一个定时执行或post-commit钩子来同步镜像版本库，我建议post-commit，因为它让你的镜像版本库尽可能的最新，下面是可以用在主版本库上同步镜像版本库的post-commit钩子，一个shell脚本：&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# Example for synchronizing one repository from the post-commit hook&lt;br /&gt;#!/bin/sh&lt;br /&gt;SVNSYNC=/usr/local/bin/svnsync&lt;br /&gt;$SVNSYNC synchronize URL_TO_MIRROR_REPO –username=svnsync –password=svnsyncpassword &amp;amp;&lt;br /&gt;&lt;br /&gt;exit 0&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;就这样了，一旦你执行了上面列出的步骤，你一定可以得到一个随着主版本库提交自动更新的镜像版本库，我们对于svnsync的介绍和如何去实现它。&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-5442771064684747887?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.open.collab.net/svn/2007/08/mirroring-repos.html' title='使用svnsync镜像版本库'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/5442771064684747887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=5442771064684747887' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5442771064684747887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5442771064684747887'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/11/svnsync.html' title='使用svnsync镜像版本库'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-2500597458764434021</id><published>2008-11-16T00:50:00.000-08:00</published><updated>2008-11-16T00:58:22.598-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='program'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>if 和 switch 语句效率比较</title><content type='html'>在 switch 语句中条件只求值一次并用来和每个 case 语句比较。在 elseif 语句中条件会再次求值。如果条件比一个简单的比较要复杂得多或者在一个很多次的循环中，那么用 switch 语句可能会快一些。&lt;br /&gt;&lt;br /&gt;以上为 php 手册在叙述 switch 中的一句，该怎么理解呢？&lt;br /&gt;&lt;br /&gt;从整体效率上看，是相当的。但区别存在于呢？举个例子&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;if ($noizy==1) {&lt;br /&gt;&lt;br /&gt;   echo "noizy1";&lt;br /&gt;&lt;br /&gt;} elseif ($noizy==2) {&lt;br /&gt;  &lt;br /&gt;   echo "noizy2";&lt;br /&gt;&lt;br /&gt;} elseif ($noizy==3) {&lt;br /&gt;&lt;br /&gt;   echo "noizy3";&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;以上是 if 代码的一个片段，在最差的状况下，也就是当 $noizy = 3 时，共运行了3次比较，而且，每次比较都必须取出 $noizy 的值一次。如果换成 switch&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;switch ($noizy) {&lt;br /&gt;   case 1:&lt;br /&gt;      echo "1";&lt;br /&gt;      break;&lt;br /&gt;   case 2:&lt;br /&gt;      echo "2";&lt;br /&gt;      break;&lt;br /&gt;   case 3:&lt;br /&gt;      echo "3";&lt;br /&gt;      break;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;只在开头 switch 的括号中取出 $noizy 的值，然后把值与case值逐一进行比较&lt;br /&gt;&lt;br /&gt;效率的差别就在这儿，因此我总结几点：&lt;br /&gt;&lt;br /&gt;1.当只进行一次比较时，推荐使用 if，原因很简单，此时 if 与 switch 没有本质区别，而用 if 代码较为简洁，省去多余字节，可乐而不为？&lt;br /&gt;2.当多次纯粹的比较数字或字符时，推荐使用 switch，当进行N次比较，switch 只取值一次，而 if …… elseif 则取值 1 &lt;= x &lt;= N (x 为实际次数)。&lt;br /&gt;3.当遇到复合条件时，应该视情况而灵活运用 if 与 switch。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-2500597458764434021?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/2500597458764434021/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=2500597458764434021' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2500597458764434021'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2500597458764434021'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/11/if-switch.html' title='if 和 switch 语句效率比较'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-117810333155226772</id><published>2008-11-15T09:06:00.001-08:00</published><updated>2008-11-15T09:07:18.270-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu下阅读工具</title><content type='html'>&lt;pre&gt; sudo apt-get install kpdf gnochm&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-117810333155226772?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/117810333155226772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=117810333155226772' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/117810333155226772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/117810333155226772'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/11/ubuntu_15.html' title='Ubuntu下阅读工具'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-4930544470498863544</id><published>2008-11-15T08:23:00.000-08:00</published><updated>2008-11-15T08:39:20.018-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Ubuntu下图像工具</title><content type='html'>&lt;span style="font-weight: bold; color: rgb(51, 102, 255);"&gt;Scrot&lt;/span&gt;&lt;br /&gt;是一个命令行下使用的截图工具，支持全屏、窗口、选取、多设备、缩略图、延时，甚至可以截图完毕之后指定某程序打开截好的图片。&lt;br /&gt;&lt;br /&gt;    安装：&lt;br /&gt;     可以打开新立得搜索 scrot 并安装，也可以在终端：&lt;br /&gt;     &lt;pre&gt;sudo apt-get install scrot&lt;/pre&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Scrot 使用：&lt;/span&gt;&lt;br /&gt;scrot [options] [file]&lt;br /&gt;&lt;br /&gt;描述&lt;br /&gt;scrot 是一个使用 imlib2 库截取屏幕和保存图像的的工具。&lt;br /&gt;选项 [file] 指定截图保存的文件名。 如果 [file] 没有指定，&lt;br /&gt;截图就会以当前的日期和时间为文件名保存在当前目录中。&lt;br /&gt;&lt;br /&gt;选项&lt;br /&gt;-h, --help&lt;br /&gt;显示帮助并且退出&lt;br /&gt;-v, --version&lt;br /&gt;显示版本信息并且退出&lt;br /&gt;-b, --border&lt;br /&gt;当选择一个窗口时，同时包含窗口边框。&lt;br /&gt;-c, --count&lt;br /&gt;延时时的显示倒计时&lt;br /&gt;-d, --delay NUM&lt;br /&gt;延时 NUM 秒&lt;br /&gt;-e, --exec APP&lt;br /&gt;对保存的图像执行程序 APP&lt;br /&gt;-q, --quality NUM&lt;br /&gt;图像质量 (1-100) 值大意味着文件大， 压缩率低。&lt;br /&gt;-m, --multidisp&lt;br /&gt;对多个显示设备分别截图并且连接在一起。&lt;br /&gt;-s, --select&lt;br /&gt;用鼠标交互式的选择一个窗口或者区域。&lt;br /&gt;-t, --thumb NUM&lt;br /&gt;同时生成缩略图。 NUM 是缩略图的百分比。&lt;br /&gt;&lt;br /&gt;说明符&lt;br /&gt;--exec 和 文件名可以使用可以被 scrot 扩充的格式说明符。有两种类型的&lt;br /&gt;说明符。 '%' 前导的说明符由 strfile(2) 来解释。例程可以查看 strftile&lt;br /&gt;手册。这些选项用来引用当前的日期。第二种说明符由 scort 内部解释并且&lt;br /&gt;使用前缀 '$'. 可以识别的说明符如下:&lt;br /&gt;$f 图像的路径/文件名 (如果在文件名中就会忽略)&lt;br /&gt;$n 图像文件名 (如果在文件名中会被忽略)&lt;br /&gt;$s 图像大小(字节数) (如果在文件名会被忽略)&lt;br /&gt;$p 图像像素大小&lt;br /&gt;$w 图像宽度&lt;br /&gt;$h 图像高度&lt;br /&gt;$t 图像格式&lt;br /&gt;$ 打印字符 'n 打印新行 (如果在文件名中会被忽略)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; 例子(~ 用户主目录)：&lt;/span&gt;&lt;br /&gt;1、对全屏截图并保存文件名：&lt;br /&gt;   &lt;pre&gt;  scrot ~/abc.png&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;2、抓取窗口，b 参数表示带边框窗体，s 用户可以指定窗口：&lt;br /&gt;    &lt;pre&gt; scrot -bs ~/abc.png&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;3、抓取鼠标选定区域：&lt;br /&gt;    &lt;pre&gt; scrot -s ~/abc.png &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;4、延时抓取，d 表示延时，c 倒计时，10 是秒，抓菜单等其他东西时很好用：&lt;br /&gt;     &lt;pre&gt;scrot -cd 10 ~/abc.png&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;5、生成缩略图，t 表示要生成缩略图， 20% 表示缩略图的比例， s 表示截取用户划定区域：&lt;br /&gt;     &lt;pre&gt;scrot -t 20% -s ~/abc.png&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;6、启用某项操作 s 划定截图，-e 采用某项行为，这里用 gimp 打开截图图片，&lt;br /&gt;     &lt;pre&gt;scrot -s ~/abc.png -e 'gimp $f'&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 51, 255);"&gt;agave （龙舌兰）&lt;/span&gt;&lt;br /&gt;非常不错，除了取色，配色，还可以将常用的颜色保存起来以备以后使用，apt-get之后就可以使用了&lt;br /&gt;&lt;pre&gt;sudo apt-get install agave&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-4930544470498863544?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/4930544470498863544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=4930544470498863544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4930544470498863544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4930544470498863544'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/11/ubuntuscrot.html' title='Ubuntu下图像工具'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-2003631108046986841</id><published>2008-11-15T03:26:00.000-08:00</published><updated>2008-11-15T08:10:57.158-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Network tools in ubuntu</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Wireshark&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;世界上使用Wireshark的人相当多。它具有一个协议分析程序的全部基本特性，而且还有其它产品所没有的其它特性。其开放源代码文本专利允许专业人员对其进行功能增强的工作。它可以运行在各种计算平台上，其中包括Unix,Linux，Windows等等。&lt;br /&gt;&lt;br /&gt;(1)安装&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;sudo apt-get install Wireshark&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;(2)运行&lt;br /&gt;&lt;br /&gt;如果你想打开Wireshark，可以打开Applications（应用程序）―&gt;Internet（互联网）―&gt; Wireshark&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Etherape&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;EtherApe是Unix系统中的一个图形界面的网络监视器，能够以图形方式显示网络活动。主机和链接通信量的大小可以动态显示。它支持Ethernet、 FDDI、 Token Ring、ISDN、 PPP 、 SLIP等网络类型的设备。它可以过滤显示的通信，并能够从一个文件中读取通信数据，也可以从网络中读取动态数据。&lt;br /&gt;&lt;br /&gt;(1)安装&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;sudo apt-get install etherape&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;(2)运行：&lt;br /&gt;&lt;br /&gt;要运行etherape只需单击Applications―&gt;Internet―&gt;EtherApe：&lt;br /&gt;&lt;br /&gt;在打开之后，你就可以看到所有网络协议的所有网络活动。&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Ethstatus&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ethstatus是一个基于控制台的监视程序，用以显示以太网接口的统计数据。它与intraf类似，不过它以一个永久性控制台任务的形式运行，并可监视网络负载。&lt;br /&gt;&lt;br /&gt;(1)安装&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;sudo apt-get install ethstatus&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;如果只是想在命令行上查看网卡的状态，可以直接输入如下的命令：&lt;br /&gt;&lt;br /&gt;ethstatus&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-2003631108046986841?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/2003631108046986841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=2003631108046986841' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2003631108046986841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2003631108046986841'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/11/tool-named-ethstatus-in-ubuntu.html' title='Network tools in ubuntu'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-1266303321841806658</id><published>2008-11-15T02:32:00.000-08:00</published><updated>2008-11-15T02:52:31.965-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Install Flex builder in Ubuntu 8.0.4</title><content type='html'>The blog that follow use a ubuntu 8.04 computer&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255); font-weight: bold;"&gt;1 install jre&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#sudo apt-get install sun-java6-jre&lt;br /&gt;&lt;br /&gt;#sudo update-alternatives --config java&lt;br /&gt;&lt;br /&gt;There are 2 alternatives which provide `java'.&lt;br /&gt;Selection Alternative&lt;br /&gt;-----------------------------------------------&lt;br /&gt;1 /usr/bin/gij-wrapper-4.1&lt;br /&gt;*+ 2 /usr/lib/jvm/java-6-sun/jre/bin/java&lt;br /&gt;Press enter to keep the default[*], or type selection number:&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;choice 2 &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Then,&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#sudo gedit /etc/environment&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;add the following 2 lines:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;CLASSPATH=.:/usr/lib/jvm/java-6-sun/lib&lt;br /&gt;JAVA_HOME=/usr/lib/jvm/java-6-sun&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;then,&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#sudo gedit /etc/jvm&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;put the following to the top of this document &lt;/p&gt;&lt;br /&gt;&lt;pre&gt;/usr/lib/jvm/java-6-sun&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255); font-weight: bold;"&gt;2 download flexbuilder_linux_install_a4_081408.bin and pdt-all-in-one-linux-gtk-1.0.3.tar.gz&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 102, 255); font-weight: bold;"&gt;&lt;span style="font-weight: normal; color: rgb(0, 0, 0);"&gt;Note:The version of eclipase must great than 3.2, so do not install it use&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-weight: normal; color: rgb(0, 0, 0);"&gt;#sudo apt-get install eclipse&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255); font-weight: bold;"&gt;3 install flex builder&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# ./flexbuilder_linux_install_a4_081408.bin&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-1266303321841806658?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/1266303321841806658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=1266303321841806658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1266303321841806658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1266303321841806658'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/11/install-flex-builder-in-ubuntu-804.html' title='Install Flex builder in Ubuntu 8.0.4'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-8137290404263469102</id><published>2008-11-15T02:07:00.000-08:00</published><updated>2008-11-15T02:11:23.461-08:00</updated><title type='text'>The solution  without libgtk  when install uplink in ubuntu</title><content type='html'>When I installed the linux game Uplink, There was an error:&lt;br /&gt;&lt;pre class="prettyPrint"&gt;&lt;br /&gt;edwin@edwin-desktop:~/Desktop$ sh ./uplink-demo-1.54.sh &lt;br /&gt;Verifying archive integrity... All good.&lt;br /&gt;Uncompressing Uplink demo 1.54DEMO...........................................................................................&lt;br /&gt;/home/edwin/.setup10083: error while loading shared libraries: libgtk-1.2.so.0: cannot open shared object file: No such file or directory&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So, I install the following:&lt;br /&gt;&lt;pre class="prettyPrint"&gt;&lt;br /&gt;sudo apt-get install libgtk1.2&lt;br /&gt;sudo apt-get install libgpm1&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-8137290404263469102?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/8137290404263469102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=8137290404263469102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8137290404263469102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8137290404263469102'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/11/solution-libgtk-of-when-install-uplink.html' title='The solution  without libgtk  when install uplink in ubuntu'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-8711027116303029437</id><published>2008-11-15T01:29:00.000-08:00</published><updated>2008-11-23T08:54:37.067-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>在ubuntu安装其他主题</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Ubuntu Studio&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 102, 255);font-size:180%;" &gt;酷炫&lt;/span&gt;的Ubuntu Studio主题套件&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i1N6dWVdzOg/SR6avNEWe2I/AAAAAAAAAec/tNeA6QYwpT8/s1600-h/Screenshot-Desktop.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 256px;" src="http://3.bp.blogspot.com/_i1N6dWVdzOg/SR6avNEWe2I/AAAAAAAAAec/tNeA6QYwpT8/s320/Screenshot-Desktop.png" alt="" id="BLOGGER_PHOTO_ID_5268818749822499682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;代码:&lt;br /&gt;&lt;pre class="preetyPrint"&gt;&lt;br /&gt;sudo apt-get install ubuntustudio-themeubuntustudio-icon-theme ubuntustudio-gdm-theme ubuntustudio-wallpapers usplash-theme-ubuntustudio&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mac4Lin&lt;/span&gt;&lt;br /&gt;进入Mac4Lin的工程主页：http://sourceforge.net/projects/mac4lin&lt;br /&gt;点击 Download，然后把需要的软件包下载下来吧！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-8711027116303029437?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/8711027116303029437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=8711027116303029437' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8711027116303029437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8711027116303029437'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/11/ubuntu.html' title='在ubuntu安装其他主题'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_i1N6dWVdzOg/SR6avNEWe2I/AAAAAAAAAec/tNeA6QYwpT8/s72-c/Screenshot-Desktop.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-4314588197150799691</id><published>2008-11-08T02:45:00.000-08:00</published><updated>2008-11-08T02:53:35.332-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>Software versioning</title><content type='html'>一、版本号&lt;br /&gt;&lt;br /&gt;　　1、V（Version）：即版本，通常用数字表示版本号。（如：EVEREST Ultimate v4.20.1188 Beta）&lt;br /&gt;　　2、Build：用数字或日期标示版本号的一种方式。（如：VeryCD eMule v0.48a Build 071112）&lt;br /&gt;　　3、SP：Service Pack，升级包。（如：Windows XP SP 2/Vista SP 1）&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;　　二、授权和功能划分&lt;br /&gt;&lt;br /&gt;　　1、Trial：试用版，通常都有时间限制，有些试用版软件还在功能上做了一定的限制。可注册或购买成为正式版。&lt;br /&gt;　　2、Unregistered：未注册版，通常没有时间限制，在功能上相对于正式版做了一定的限制。可注册或购买成为正式版。&lt;br /&gt;　　3、Demo：演示版，仅仅集成了正式版中的几个功能，不能升级成正式版。&lt;br /&gt;　　4、Lite：精简版。&lt;br /&gt;　　5、Full：完整版。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;　　三、开发阶段划分&lt;br /&gt;&lt;br /&gt;　　1、Alpha 版：内测版，内部交流或者专业测试人员测试用。Bug较多，普通用户最好不要安装。&lt;br /&gt;　　2、Beta 版：公测版，专业爱好者大规模测试用，存在一些缺陷，该版本也不适合一般用户安装。&lt;br /&gt;　　3、Gamma 版：相当成熟的测试版，与即将发行的正式版相差无几。&lt;br /&gt;　　4、RC版：Release Candidate 候选版本，处于Gamma阶段。从Alpha到Beta再到Gamma是改进的先后关系，但RC1、RC2往往是取舍关系。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;　　四、语言划分&lt;br /&gt;&lt;br /&gt;　　1、SC：Simplified Chinese 简体中文版。&lt;br /&gt;　　2、GBK：简体中文汉字内码扩展规范版。&lt;br /&gt;　　3、TC：Traditional Chinese 繁体中文版。&lt;br /&gt;　　4、BIG5：繁体中文大五码版。&lt;br /&gt;　　5、UTF8：Unicode Transformation Format 8 bit，对现有的中文系统不是好的解决方案。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-4314588197150799691?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://en.wikipedia.org/wiki/Software_versioning' title='Software versioning'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/4314588197150799691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=4314588197150799691' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4314588197150799691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4314588197150799691'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/11/software-version.html' title='Software versioning'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-825504536735502987</id><published>2008-11-08T00:12:00.000-08:00</published><updated>2008-11-08T00:46:16.430-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>Developing Product based on the SVN</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Repository Layout&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We create a trunk directory to hold the “main line” of development, a branches directory to contain branch copies, and a tags directory to contain tag copies.These top-level directories is :&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;/trunk&lt;br /&gt;/branches&lt;br /&gt;/tags&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 145px;" src="http://4.bp.blogspot.com/_i1N6dWVdzOg/SRVKQLrcsvI/AAAAAAAAAaE/zGpPq0VCUFM/s320/svn.gif" id="BLOGGER_PHOTO_ID_5266196981153051378" width="609" border="0" height="275" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. trunk&lt;/span&gt;&lt;br /&gt;The porpose of trunk is for  branching, tagging, and merging the source code.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. branches&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;   Branch , a line of       development that exists independently of another line, it always begins life as a copy of trunk's at sometime, and moves on       from there, generating its own history.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Type A: maintainable branches for  released version&lt;br /&gt;Type B: feature-developing branches for new requirement&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. tags&lt;/span&gt;&lt;br /&gt;A tag is just a       “&lt;span class="quote"&gt;snapshot&lt;/span&gt;” of a project in time.The aim of tags to save the stable release version of product, there is an new maintainable branch should be build at the same time, just for the patch and issue solution&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-825504536735502987?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/825504536735502987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=825504536735502987' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/825504536735502987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/825504536735502987'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/11/developing-product-based-on-svn.html' title='Developing Product based on the SVN'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_i1N6dWVdzOg/SRVKQLrcsvI/AAAAAAAAAaE/zGpPq0VCUFM/s72-c/svn.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-5045556907942191416</id><published>2008-11-06T07:24:00.000-08:00</published><updated>2008-11-06T20:12:45.595-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='design pattern'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Singleton pattern in PHP 5</title><content type='html'>1类别： 创建型设计模式&lt;br /&gt;2意图： 确保一个类只有一个实例，而且自行向整个系统提供这一个实例（类本身提供一个实例的全局访问点）&lt;br /&gt;3代码：&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&lt;?php&lt;br /&gt;class Singleton {&lt;br /&gt;  // 用静态变量来存储signleton的实例&lt;br /&gt;  private static $_instance;&lt;br /&gt;  // 私有的构造器阻止New&lt;br /&gt;  private function __construct() {&lt;br /&gt;    ...&lt;br /&gt;  }&lt;br /&gt; &lt;br /&gt;  // 避免除了New外，用户可以通过clone和序列化来获得多个singleton的实例&lt;br /&gt;  public function __clone() {&lt;br /&gt;    trigger_error('Clone is not allowed.', E_USER_ERROR);&lt;br /&gt;  }&lt;br /&gt;  public function __wakeup() {&lt;br /&gt;    trigger_error('Deserializing is not allowed.', E_USER_ERROR);&lt;br /&gt;  }&lt;br /&gt;  //用layz load 的方法，获得唯一实例&lt;br /&gt;  public static function getInstance() {&lt;br /&gt;    if (!self::$instance instanceof self) { &lt;br /&gt;      self::$instance = new self;&lt;br /&gt;    }&lt;br /&gt;    return self::$instance;&lt;br /&gt;  }&lt;br /&gt; //singleton的实际作用&lt;br /&gt;  public function doAction() {&lt;br /&gt;    ...&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;//usage&lt;br /&gt;Singleton::getInstance()-&gt;doAction();&lt;br /&gt; &lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;更多： http://www.tonymarston.net/php-mysql/singleton.html&lt;br /&gt;http://en.wikipedia.org/wiki/Singleton_pattern&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-5045556907942191416?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/5045556907942191416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=5045556907942191416' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5045556907942191416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5045556907942191416'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/11/sigleton-in-php5.html' title='Singleton pattern in PHP 5'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-497711147163316768</id><published>2008-11-06T07:08:00.000-08:00</published><updated>2008-11-06T07:23:39.167-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><title type='text'>How to publish source code in Blogger.com</title><content type='html'>&lt;div class="postcontent"&gt;       &lt;p&gt;&lt;a href="http://www.wordpress.org/" target="_blank"&gt;Wordpress&lt;/a&gt;有许多代码语法高亮插件可以便捷地展示源代码，但是&lt;a href="http://www.blogger.com/" target="_blank"&gt;Blogspot&lt;/a&gt;我还发现此类的应用。不过我们可以让&lt;a href="http://code.google.com/p/google-code-prettify/" target="_blank"&gt;google prettify code&lt;/a&gt;为&lt;a href="http://www.blogger.com/" target="_blank"&gt;Blogspot&lt;/a&gt;着色代码。&lt;/p&gt; &lt;p&gt;&lt;a href="http://code.google.com/p/google-code-prettify/" target="_blank"&gt;google prettify code&lt;/a&gt;是一个轻量级的Javascript模块通过CSS文件对代码进行上色处理，支持C、Java、PHP、Python、HTMLl和Javascript等十几种语言。让我们动手吧。&lt;/p&gt; &lt;p&gt;&lt;span id="more-143"&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;1.进入&lt;a href="http://www.blogger.com/" target="_blank"&gt;Blogspot&lt;/a&gt;控制台 –&gt;布局 –&gt;修改HTML&lt;br /&gt;在head区调用&lt;a href="http://code.google.com/p/google-code-prettify/" target="_blank"&gt;google prettify code&lt;/a&gt;的Javascript和CSS文件：&lt;/p&gt; &lt;pre class="prettyprint"&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;&lt;&lt;/span&gt;&lt;/span&gt;&lt;span class="tag"&gt;&lt;span class="tag"&gt;link&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="atn"&gt;&lt;span class="atn"&gt;href&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="atv"&gt;&lt;span class="atv"&gt;"http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.css"&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="atn"&gt;&lt;span class="atn"&gt;rel&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="atv"&gt;&lt;span class="atv"&gt;"stylesheet"&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="atn"&gt;&lt;span class="atn"&gt;type&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="atv"&gt;&lt;span class="atv"&gt;"text/css"&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;&lt;&lt;/span&gt;&lt;/span&gt;&lt;span class="tag"&gt;&lt;span class="tag"&gt;script&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="atn"&gt;&lt;span class="atn"&gt;src&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="atv"&gt;&lt;span class="atv"&gt;"http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.js"&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="atn"&gt;&lt;span class="atn"&gt;type&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span class="atv"&gt;&lt;span class="atv"&gt;"text/javascript"&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;/&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;2.将“”改成“”&lt;br /&gt;3.修改pre标签的CSS以适合您的使用。&lt;/p&gt; &lt;pre class="prettyprint"&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;pre &lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;&lt;br /&gt;margin&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="lit"&gt;&lt;span class="lit"&gt;5px&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="lit"&gt;&lt;span class="lit"&gt;20px&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;&lt;br /&gt;border&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="lit"&gt;&lt;span class="lit"&gt;1px&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt; dashed &lt;/span&gt;&lt;/span&gt;&lt;span class="com"&gt;&lt;span class="com"&gt;#666;&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;&lt;br /&gt;padding&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="lit"&gt;&lt;span class="lit"&gt;5px&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;&lt;br /&gt;background&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="com"&gt;&lt;span class="com"&gt;#f8f8f8;&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;&lt;br /&gt;white&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;space&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt; pre&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;wrap&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span class="com"&gt;&lt;span class="com"&gt;/* css-3 */&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;&lt;br /&gt;white&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;space&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;moz&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;pre&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;wrap&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="com"&gt;&lt;span class="com"&gt;/* Mozilla, since 1999 */&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;&lt;br /&gt;white&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;space&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;pre&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;wrap&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span class="com"&gt;&lt;span class="com"&gt;/* Opera 4-6 */&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;&lt;br /&gt;white&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;space&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;o&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;pre&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;wrap&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span class="com"&gt;&lt;span class="com"&gt;/* Opera 7 */&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;&lt;br /&gt;word&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;wrap&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;:&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="kwd"&gt;&lt;span class="kwd"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;word&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;       &lt;/span&gt;&lt;/span&gt;&lt;span class="com"&gt;&lt;span class="com"&gt;/* Internet Explorer 5.5+ */&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="pun"&gt;&lt;span class="pun"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class="pln"&gt;&lt;span class="pln"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;现在可以写一篇博客试一下了，将您的代码放在pre标签内，给pre加上class为“prettyprint”，即：&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&amp;lt;pre class="”prettyprint”"&amp;gt;&lt;br /&gt;your code&lt;br /&gt;&amp;lt;/pre&amp;gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-497711147163316768?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/497711147163316768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=497711147163316768' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/497711147163316768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/497711147163316768'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/11/how-to-publish-source-code-in.html' title='How to publish source code in Blogger.com'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-8215939040275477385</id><published>2008-11-03T21:02:00.000-08:00</published><updated>2008-11-03T21:04:20.279-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Gnome  Keyboard Shortcuts</title><content type='html'>&lt;p&gt;Tired of using your mouse so much? Did you know that Gnome has keyboard shortcuts for just about everything you can do with a mouse? Here's a list of the various shortcuts on both platforms.&lt;/p&gt;   &lt;p class="bodyHead"&gt;General Shortcut Keys &lt;/p&gt; &lt;table width="100%" border="0" cellpadding="2" cellspacing="0"&gt;  &lt;col width="162"&gt;  &lt;col width="406"&gt;  &lt;thead&gt;   &lt;tr valign="top"&gt;    &lt;td width="162"&gt;     &lt;p&gt;&lt;b&gt;Alt &lt;/b&gt;+ &lt;b&gt;F1 &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="406"&gt;     &lt;p&gt;Opens the &lt;b&gt;Applicantions Menu &lt;/b&gt;.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;  &lt;/thead&gt;  &lt;tbody&gt;   &lt;tr valign="top"&gt;    &lt;td width="162"&gt;     &lt;p&gt;&lt;b&gt;Alt &lt;/b&gt;+ &lt;b&gt;F2 &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="406"&gt;     &lt;p&gt;Displays the &lt;b&gt;Run Application &lt;/b&gt;dialog.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="162"&gt;     &lt;p&gt;&lt;b&gt;Print Screen &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="406"&gt;     &lt;p&gt;Takes a screenshot.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="162"&gt;     &lt;p&gt;&lt;b&gt;Alt &lt;/b&gt;+ &lt;b&gt;Print Screen &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="406"&gt;     &lt;p&gt;Takes a screenshot of the window that has focus.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="162"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;Alt &lt;/b&gt;+ &lt;b&gt;right arrow &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="406"&gt;     &lt;p&gt;Switches to the workspace to the right of the current     workspace.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="162"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;Alt &lt;/b&gt;+ &lt;b&gt;left arrow &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="406"&gt;     &lt;p&gt;Switches to the workspace to the left of the current     workspace.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="162"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;Alt &lt;/b&gt;+ &lt;b&gt;up arrow &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="406"&gt;     &lt;p&gt;Switches to the workspace above the current workspace.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="162"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;Alt &lt;/b&gt;+ &lt;b&gt;down arrow &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="406"&gt;     &lt;p&gt;Switches to the workspace below the current workspace.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="162"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;Alt &lt;/b&gt;+ &lt;b&gt;d &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="406"&gt;     &lt;p&gt;Minimizes all windows, and gives focus to the desktop.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="162"&gt;     &lt;p&gt;&lt;b&gt;F1 &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="406"&gt;     &lt;p&gt;Starts the online help browser, and displays appropriate     online Help.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;  &lt;/tbody&gt; &lt;/table&gt;  &lt;p class="bodyHead"&gt;Window Shortcut Keys&lt;/p&gt;  &lt;table width="100%" border="0" cellpadding="2" cellspacing="0"&gt;  &lt;col width="161"&gt;  &lt;col width="407"&gt;  &lt;thead&gt;   &lt;tr valign="top"&gt;    &lt;td width="161"&gt;     &lt;p&gt;&lt;b&gt;Alt &lt;/b&gt;+ &lt;b&gt;Tab &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="407"&gt;     &lt;p&gt;Switches between windows. When you use these shortcut keys, a     list of windows that you can select is displayed. Release the     keys to select a window.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;  &lt;/thead&gt;  &lt;tbody&gt;   &lt;tr valign="top"&gt;    &lt;td width="161"&gt;     &lt;p&gt;&lt;b&gt;Alt &lt;/b&gt;+ &lt;b&gt;Esc &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="407"&gt;     &lt;p&gt;Switches between windows in reverse order. Release the keys to     select a window.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="161"&gt;     &lt;p&gt;&lt;b&gt;F10 &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="407"&gt;     &lt;p&gt;Opens the first menu on the left side of the menubar.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="161"&gt;     &lt;p&gt;&lt;b&gt;Alt &lt;/b&gt;+ &lt;b&gt;spacebar &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="407"&gt;     &lt;p&gt;Opens the &lt;b&gt;Window Menu &lt;/b&gt;.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="161"&gt;     &lt;p&gt;Arrow keys      &lt;/p&gt;    &lt;/td&gt;    &lt;td width="407"&gt;     &lt;p&gt;Moves the focus between items in a menu.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="161"&gt;     &lt;p&gt;&lt;b&gt;Return &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="407"&gt;     &lt;p&gt;Chooses a menu item.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="161"&gt;     &lt;p&gt;&lt;b&gt;Esc &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="407"&gt;     &lt;p&gt;Closes an open menu.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="161"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;Alt &lt;/b&gt;+ &lt;b&gt;right arrow &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="407"&gt;     &lt;p&gt;Switches to the workspace to the right of the current     workspace.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="161"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;Alt &lt;/b&gt;+ &lt;b&gt;left arrow &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="407"&gt;     &lt;p&gt;Switches to the workspace to the left of the current     workspace.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="161"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;Alt &lt;/b&gt;+ &lt;b&gt;up arrow &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="407"&gt;     &lt;p&gt;Switches to the workspace above the current workspace.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="161"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;Alt &lt;/b&gt;+ &lt;b&gt;down arrow &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="407"&gt;     &lt;p&gt;Switches to the workspace below the current workspace.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="161"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;Alt &lt;/b&gt;+ &lt;b&gt;d &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="407"&gt;     &lt;p&gt;Minimizes all windows, and gives focus to the desktop.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;  &lt;/tbody&gt; &lt;/table&gt;   &lt;p class="bodyHead"&gt;Panel Shortcut Keys&lt;/p&gt;  &lt;table width="100%" border="0" cellpadding="2" cellspacing="0"&gt;  &lt;col width="160"&gt;  &lt;col width="408"&gt;  &lt;thead&gt;   &lt;tr valign="top"&gt;    &lt;td width="160"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;Alt &lt;/b&gt;+ &lt;b&gt;Tab &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="408"&gt;     &lt;p&gt;Switches the focus between the panels and the desktop. When     you use these shortcut keys, a list of items that you can select     is displayed. Release the keys to select an item.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;  &lt;/thead&gt;  &lt;tbody&gt;   &lt;tr valign="top"&gt;    &lt;td width="160"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;Alt &lt;/b&gt;+ &lt;b&gt;Esc &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="408"&gt;     &lt;p&gt;Switches the focus between the panels and the desktop. Release     the keys to select an item.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="160"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;F10 &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="408"&gt;     &lt;p&gt;Opens the popup menu for the selected panel.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="160"&gt;     &lt;p&gt;&lt;b&gt;Tab &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="408"&gt;     &lt;p&gt;Switches the focus between objects on a panel.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="160"&gt;     &lt;p&gt;&lt;b&gt;Return &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="408"&gt;     &lt;p&gt;Chooses the selected panel object or menu item.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="160"&gt;     &lt;p&gt;&lt;b&gt;Shift &lt;/b&gt;+ &lt;b&gt;F10 &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="408"&gt;     &lt;p&gt;Opens the popup menu for the selected panel object.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="160"&gt;     &lt;p&gt;Arrow keys      &lt;/p&gt;    &lt;/td&gt;    &lt;td width="408"&gt;     &lt;p&gt;Moves the focus between items in a menu. Moves the focus     between interface items in an applet also.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="160"&gt;     &lt;p&gt;&lt;b&gt;Esc &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="408"&gt;     &lt;p&gt;Closes an open menu.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="160"&gt;     &lt;p&gt;&lt;b&gt;F10 &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="408"&gt;     &lt;p&gt;Opens the &lt;b&gt;Applications &lt;/b&gt;menu from the &lt;i&gt;Menu Bar &lt;/i&gt;,     if the &lt;i&gt;Menu Bar &lt;/i&gt;is in a panel.      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;  &lt;/tbody&gt; &lt;/table&gt;  &lt;p class="bodyHead"&gt;Application Shortcut Keys&lt;/p&gt;  &lt;table width="300" border="0" cellpadding="2" cellspacing="0"&gt;  &lt;col width="101"&gt;  &lt;col width="77"&gt;  &lt;thead&gt;   &lt;tr&gt;    &lt;th width="101"&gt;     &lt;p&gt;&lt;b&gt;Shortcut Keys &lt;/b&gt;&lt;/p&gt;    &lt;/th&gt;    &lt;th width="77"&gt; &lt;p&gt;&lt;b&gt;Command &lt;/b&gt;&lt;/p&gt;    &lt;/th&gt;   &lt;/tr&gt;  &lt;/thead&gt;  &lt;tbody&gt;   &lt;tr valign="top"&gt;    &lt;td width="101"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;N &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="77"&gt;     &lt;p&gt;New      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="101"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;X &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="77"&gt;     &lt;p&gt;Cut      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="101"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;C &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="77"&gt;     &lt;p&gt;Copy      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr valign="top"&gt;    &lt;td width="101"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;V &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="77"&gt;     &lt;p&gt;Paste      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td width="101"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;Z &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="77"&gt;     &lt;p&gt;Undo      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td width="101"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;S &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="77"&gt;     &lt;p&gt;Save      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td width="101"&gt;     &lt;p&gt;&lt;b&gt;Ctrl &lt;/b&gt;+ &lt;b&gt;Q &lt;/b&gt;     &lt;/p&gt;    &lt;/td&gt;    &lt;td width="77"&gt;     &lt;p&gt;Quit      &lt;/p&gt;    &lt;/td&gt;   &lt;/tr&gt;  &lt;/tbody&gt; &lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-8215939040275477385?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/8215939040275477385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=8215939040275477385' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8215939040275477385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8215939040275477385'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/11/gnome-keyboard-shortcuts.html' title='Gnome  Keyboard Shortcuts'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-160062452159537845</id><published>2008-11-03T05:54:00.000-08:00</published><updated>2008-11-06T07:08:11.540-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Update Error of linux-image on Ubuntu 8.04</title><content type='html'>&lt;p&gt;&lt;span id="zoom" class="zw_txt"&gt;When you install new update package named&lt;br /&gt;Linux image 2.6.24-19-generic (版本 2.6.24-19.34)&lt;br /&gt;(Linux kernel image for version 2.6.24 on x86/x86_64.)&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span id="zoom" class="zw_txt"&gt;, there an error :&lt;br /&gt;&lt;/span&gt;&lt;span id="zoom" class="zw_txt"&gt; /var/cache/apt/archives/linux-image-2.6.24-19-generic_2.6.24-19.43_i386.deb: unable to make backup link of `./boot/vmlinuz-2.6.24-19-generic' before installing new version&lt;/span&gt;&lt;/p&gt;    &lt;p&gt;Solution:&lt;/p&gt;&lt;p&gt;&lt;span id="zoom" class="zw_txt"&gt;Open a terminal, then execute the following command:&lt;br /&gt;&lt;pre class="prettyprint"&gt;sudo rm -fv /boot/initrd.img-2.6.24*.bak&lt;br /&gt;sudo rm -fv /boot/vmlinuz-2.6.24-19-generic&lt;br /&gt;sudo rm -fv /boot/initrd.img-2.6.24-19-generic&lt;br /&gt;sudo rm -fv /boot/config-2.6.24-19-generic&lt;br /&gt;sudo rm -fv /boot/abi-2.6.24-19-generic&lt;br /&gt;sudo rm -fv /boot/System.map-2.6.24-19-generic&lt;/pre&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-160062452159537845?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/160062452159537845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=160062452159537845' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/160062452159537845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/160062452159537845'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/11/update-error-of-linux-image-on-ubuntu.html' title='Update Error of linux-image on Ubuntu 8.04'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-2242490834813321068</id><published>2008-11-01T21:23:00.000-07:00</published><updated>2008-11-01T23:31:35.186-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Magic Story'/><category scheme='http://www.blogger.com/atom/ns#' term='Nicolas Cage'/><title type='text'>Next:If you can see the future, you can save it</title><content type='html'>&lt;p&gt;Cris (&lt;a href="http://en.wikipedia.org/wiki/Nicholas_Cage" title="Nicholas Cage" class="mw-redirect"&gt;Nicholas Cage&lt;/a&gt;) has the power to see 2 minutes into the future, and works as a magician in Las Vegas with this talent, along with some moderate amount of sleight of hand. He notes however, that by the nature of seeing the future, every time he views it, it then changes. His ability is an innate talent he does not understand, but for a long time, Cris has been seeing a vision of a woman walking into a diner, far more than two minutes in his future. He knows the woman in his vision will arrive at 8:09, but does not know what day or if it is AM or PM, so he has been going to this diner twice a day every day to meet her and find out why he can see her farther than two minutes in the future. After drawing the suspicion of a Las Vegas casino by winning ten thousand dollars in a series of small, coincidental hands, Cage slips by their frustrated security, thwarting a robbery on his way out. The following day, after evading the FBI (that is attempting to bring him in to help with an anti-terror investigation), Cris finally sees Liz (&lt;a href="http://en.wikipedia.org/wiki/Jessica_Biel" title="Jessica Biel"&gt;Jessica Biel&lt;/a&gt;), the woman from his dream. After attempting to introduce himself repeatedly--each time seeing his advance fall flat, then changing his actions and thus the future--he charms her enough to get a ride from her to &lt;a href="http://en.wikipedia.org/wiki/Flagstaff,_Arizona" title="Flagstaff, Arizona"&gt;Flagstaff, Arizona&lt;/a&gt;. Cris is, of course, not headed there, but, thanks to his future sight, knows she is. When a road is washed out, they are forced to stay at a hotel on the edge of a cliff.&lt;/p&gt; &lt;p&gt;Agent Farris tracks them and assembles a large team to bring Cris in. The terrorists, who have been watching the &lt;a href="http://en.wikipedia.org/wiki/FBI" title="FBI" class="mw-redirect"&gt;FBI&lt;/a&gt;, also follow, hoping to kill Cris before he can help the authorities. Agent Farris confronts Liz while she is walking near the hotel and persuades her to drug Cris so that they can bring him in peacefully. Instead, Liz warns Cris, who tells her about his secret. When she asks why he will not help the FBI stop the terrorists, he tells her about the limitations of his ability. He can only see his future, and only two minutes in the future, but that he can see much further on matters concerning her. When Cris tries to escape, he is arrested, and the terrorists kidnap Liz.&lt;/p&gt; &lt;p&gt;In custody, Cris is strapped to a chair with his eyes held open and forced to watch television until he can have a vision that helps the FBI. When he sees a report of Liz being strapped with explosives and blown up, Agent Farris promises to help save her as long as Cris will help her.&lt;/p&gt; &lt;p&gt;Cris uses his future visions to find the terrorists and lead a tactical team on a raid to stop them. When they arrive, Cris is able to walk right up to the terrorist leader by seeing where the bullets will go and dodging them. After killing the terrorists and saving Liz, they realize that the bomb has already been moved. Agent Farris shows a seismograph to Cris hoping that he will see any tremors caused by explosions before they happen. Just then, he starts yelling that it is happening now, and in the distance, the bomb goes off, destroying everything around them.&lt;/p&gt; &lt;p&gt;Then we see Cris and Liz sleeping on a bed. Cris is reflecting that "every time you look into the future, it changes... because you looked at it." Because the nuclear weapon the terrorists had could hurt Liz, Cage has been able to see a day into the future, and is, as he lies there, exploring different possible courses of action, doing what, he reveals to Liz, is his duty that he has evaded for a long time, using his power to save people, now that he, having found Liz and love, has the courage to do so.&lt;/p&gt;&lt;br /&gt;精彩对白：&lt;br /&gt;Cris Johnson : You've probably seen a lot of those shows - Mentalists,  Magicians, Illusionists - and wondered if they're the real deal. Your skepticism  tells you it's just an act. That way, you can sleep at night. You'd be shocked  to know that sometimes, not often, but sometimes, it is the real deal,  masquerading as an act, hiding behind a few 50-dollar tricks, hiding in plain  sight. Because if the magician doesn't do that…the alternative is impossible to  live  with…"&lt;br /&gt;克里斯·约翰逊：你可能已经看过一些这样的表演--超能力者、巫术师、魔术师--想知道他们的能力是否是真实存在的。你怀疑的天性会告诉你，这只是一场表演……因为只有这样，你才能在晚上睡得安稳些。有的时候，你可能会对这个认知感到震惊，不是常常，是有时候--这些都是真的，只是被伪装成了一场表演，隐藏在一个只值50美元的小把戏或在眼睛能及的地方后面。因为魔术师只能假装这是不真实的把戏，否则他就没有什么选择的余地了。&lt;br /&gt;&lt;br /&gt;Callie  Ferris: Tell me what just happened. What did you see&lt;br /&gt;Cris Johnson: If I do  what you want, you'll keep me in this chair  forever.&lt;br /&gt;凯莉·弗瑞斯：告诉我刚刚发生了什么？你看到了什么？&lt;br /&gt;克里斯·约翰逊：如果我告诉你，能让我永远坐在这把舒服的椅子里吗？&lt;br /&gt;&lt;br /&gt;Liz:  You can see things before they happen&lt;br /&gt;Cris Johnson: Only my future... except  with you. I saw far beyond anything I'd ever seen before. You need to get away  from  here.&lt;br /&gt;莉兹：你能在事情发生前就预见到它？&lt;br /&gt;克里斯·约翰逊：只是与我有关的未来……除了你之外。我刚看到了一些以前看到过的……你必须马上离开这里。&lt;br /&gt;&lt;br /&gt;Callie  Ferris: I believe that the urgency of this situation compels the use of any and  all resources to obtain Cris  Johnson.&lt;br /&gt;凯莉·弗瑞斯：我认为目前的紧张形势，足以允许让我们使用一切手段和资源得到克里斯·约翰逊。&lt;br /&gt;&lt;br /&gt;Cris Johnson:  I've seen every possible ending. None of them are good for  you.&lt;br /&gt;克里斯·约翰逊：我已经看到了每一个有可能出现的结局，不过它们中的任何一个对于你来说都不是好消息。&lt;br /&gt;&lt;br /&gt;Liz: I don't  want you to die.&lt;br /&gt;Cris Johnson: It happened. It just hasn't happened  yet.&lt;br /&gt;莉兹：我不想让你死。&lt;br /&gt;克里斯·约翰逊：死亡早晚会降临的，只是现在还不到时候而已&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-2242490834813321068?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.nextmovie.com/' title='Next:If you can see the future, you can save it'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/2242490834813321068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=2242490834813321068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2242490834813321068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2242490834813321068'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/11/next.html' title='Next:If you can see the future, you can save it'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-9013202685115681952</id><published>2008-10-21T07:34:00.000-07:00</published><updated>2008-10-21T07:41:14.515-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Zend Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Odour'/><title type='text'>A Zend_locale Problem:the migration of  Zend_Locale</title><content type='html'>&lt;span style="font-size:100%;"&gt;&lt;span&gt;&lt;span class="highlight"&gt;Today, my project based on Zend Framework have this error message:&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;You&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(102, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 0, 0);" class="highlight"&gt;are&lt;/span&gt;&lt;span style="color: rgb(102, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 0, 0);" class="highlight"&gt;running&lt;/span&gt;&lt;span style="color: rgb(102, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 0, 0);" class="highlight"&gt;Zend_Locale&lt;/span&gt;&lt;span style="color: rgb(102, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 0, 0);" class="highlight"&gt;in&lt;/span&gt;&lt;span style="color: rgb(102, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 0, 0);" class="highlight"&gt;compatibility&lt;/span&gt;&lt;span style="color: rgb(102, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 0, 0);" class="highlight"&gt;mode&lt;/span&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;... please migrate   &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 0, 0);" class="highlight"&gt;your&lt;/span&gt;&lt;span style="color: rgb(102, 0, 0);"&gt; scripts.&lt;br /&gt;I search on Google, find this article named::&lt;/span&gt;&lt;/span&gt;&lt;a href="http://www.thomasweidner.com/flatpress/2008/10/18/i18n-compatibility-mode/"&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;I18N compatibility mode&lt;/a&gt;&lt;br /&gt;So,  I change my code in class system_Bootstrap:&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;private function _buildLocale() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;        if (! $this-&gt;_locale instanceof Zend_Locale) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            &lt;span style="color: rgb(153, 51, 153);"&gt;Zend_Locale::$compatibilityMode = false;&lt;/span&gt;&lt;/span&gt; //add this line&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            $this-&gt;_locale = new Zend_Locale ('zh');            &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;            Zend_Registry::set ( 'locale', $this-&gt;_locale );&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;        }&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;        return $this-&gt;_locale;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;    }&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-9013202685115681952?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/9013202685115681952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=9013202685115681952' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/9013202685115681952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/9013202685115681952'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/10/zendlocale-problemthe-migration-of.html' title='A Zend_locale Problem:the migration of  Zend_Locale'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-7377205913060037931</id><published>2008-10-20T23:17:00.000-07:00</published><updated>2008-11-06T20:15:18.001-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>Some Commands of SVN</title><content type='html'>&lt;p&gt; &lt;span style="font-weight: bold;font-size:100%;" &gt;Context: We have a new project named Odour&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Get Svn help&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;/span&gt;&lt;/p&gt; &lt;pre style="color: rgb(0, 102, 0);"&gt;&lt;span style="font-size:100%;"&gt;$ svn help &lt;/span&gt;&lt;/pre&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Get sub-commands' help&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;pre&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn help add&lt;/span&gt; &lt;/span&gt;&lt;/pre&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Import a new Project&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;pre style="color: rgb(0, 102, 0);"&gt;&lt;span style="font-size:100%;"&gt;$ cd ~/project&lt;br /&gt;$ mkdir -p Odour/{trunk,branches,tags}&lt;br /&gt;$ svn import svntest https://localhost/svn/Odour --message "Start project"&lt;br /&gt;$ rm -rf Odour&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;&lt;span style="font-size:85%;"&gt;The aim of this operation is to build a new project named Odour, there are three sub-directory in this project involved trank, branches, and tags.  Then you should delete  the Odour when you have imported the project to our repository named https://localhost/test/svntest&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Checkout a project&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;pre style="color: rgb(0, 102, 0);"&gt;&lt;span style="font-size:100%;"&gt;$ svn checkout https://localhost/test/svntest/trunk --username= yourname&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Some example about the reversion&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;pre&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn diff --revision PREV:COMMITTED foo.php&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;# shows the last change committed to foo.php&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn log --revision HEAD&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;# shows log message for the latest repository commit&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn diff --revision HEAD&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;# compares your working file (with local changes) to the latest version&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;# in the repository&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn diff --revision BASE:HEAD foo.php&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;# compares your “pristine” foo.php (no local changes) with the &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;# latest version in the repository&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn log --revision BASE:HEAD&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;# shows all commit logs since you last updated&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn update --revision PREV foo.php&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;# rewinds the last change on foo.php&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;# (foo.php's working revision is decreased)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn checkout --revision 3&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;# specified with revision number&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn checkout --revision {2002-02-17}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn checkout --revision {15:30}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn checkout --revision {15:30:00.200000}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn checkout --revision {"2002-02-17 15:30"}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn checkout --revision {"2002-02-17 15:30 +0230"}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn checkout --revision {2002-02-17T15:30}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn checkout --revision {2002-02-17T15:30Z}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn checkout --revision {2002-02-17T15:30-04:00}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn checkout --revision {20020217T1530}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn checkout --revision {20020217T1530Z}&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn checkout --revision {20020217T1530-0500}&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt; &lt;p style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Update&lt;/span&gt;&lt;/p&gt; &lt;pre style="color: rgb(0, 102, 0);"&gt;&lt;span style="font-size:100%;"&gt;$ svn up&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);font-size:130%;" &gt;&lt;br /&gt;add &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;$ svn add foo.file&lt;br /&gt;$ svn add foo1.dir&lt;br /&gt;$ svn add foo2.dir --non-recursive&lt;br /&gt;$ svn delete README&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Conflict&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;The svn will create three files named &lt;/span&gt;&lt;span style="font-size:100%;"&gt;.mine, .rOLDREV, .rNEWREV separately  &lt;/span&gt;&lt;span style="font-size:100%;"&gt;When the workcopy have  confict with header version, for example:&lt;/span&gt;&lt;/p&gt;&lt;pre&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ ls -l&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 0);"&gt;sandwich.txt&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 0);"&gt;sandwich.txt.mine&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 0);"&gt;sandwich.txt.r1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 0);"&gt;sandwich.txt.r2&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;There are there method to resolve this confict.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;Method A: modify the sandwich.txt, then run:&lt;/span&gt;&lt;/p&gt;&lt;pre style="color: rgb(0, 102, 0);"&gt;&lt;span style="font-size:100%;"&gt;$ svn resolved sandwich.txt&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;Mehtod B: use the header version to override your version&lt;br /&gt;&lt;/p&gt; &lt;pre style="color: rgb(0, 102, 0);"&gt;&lt;span style="font-size:100%;"&gt;$ cp sandwich.txt.r2 sandwich.txt&lt;br /&gt;$ svn resolved sandwich.txt&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;Method C: use revert&lt;br /&gt;&lt;/p&gt; &lt;pre style="color: rgb(0, 102, 0);"&gt;&lt;span style="font-size:100%;"&gt;$ svn revert sandwich.txt&lt;br /&gt;Reverted 'sandwich.txt'&lt;br /&gt;$ ls sandwich.*&lt;br /&gt;sandwich.txt&lt;/span&gt;&lt;/pre&gt; Then , you can submit your workcopy&lt;br /&gt;&lt;pre style="color: rgb(0, 102, 0);"&gt;&lt;span style="font-size:100%;"&gt;$ svn commit --message "Correct some fatal problems"&lt;br /&gt;$ svn commit --file logmsg&lt;br /&gt;$ svn commit&lt;/span&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Clean Up&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="color: rgb(0, 102, 0);"&gt;&lt;span style="font-size:100%;"&gt;svn cleanup&lt;/span&gt;&lt;/pre&gt;  &lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Build branch&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;Method A: local build&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;pre&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn checkout http://svn.example.com/repos/calc bigwc&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 0);"&gt;A  bigwc/trunk/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 0);"&gt;A  bigwc/trunk/Makefile&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 0);"&gt;A  bigwc/trunk/integer.c&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 0);"&gt;A  bigwc/trunk/button.c&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 0);"&gt;A  bigwc/branches/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 0);"&gt;Checked out revision 340.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ cd bigwc&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn copy trunk branches/my-calc-branch&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn status&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 0);"&gt;A  +   branches/my-calc-branch&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;$ svn commit -m "Creating a private branch of /calc/trunk."&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;Adding         branches/my-calc-branch&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;Committed revision 341.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;Method B：remote build&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;pre&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;$ svn copy http://svn.example.com/repos/calc/trunk \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;           http://svn.example.com/repos/calc/branches/my-calc-branch \&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;      -m "Creating a private branch of /calc/trunk."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 0);"&gt;Committed revision 341.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Swith to branch from trunk&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;pre style="color: rgb(0, 102, 0);"&gt;&lt;span style="font-size:100%;"&gt;$ cd calc&lt;br /&gt;$ svn info | grep URL&lt;br /&gt;URL: http://svn.example.com/repos/calc/trunk&lt;br /&gt;$ svn switch http://svn.example.com/repos/calc/branches/my-calc-branch&lt;br /&gt;U   integer.c&lt;br /&gt;U   button.c&lt;br /&gt;U   Makefile&lt;br /&gt;Updated to revision 341.&lt;br /&gt;$ svn info | grep URL&lt;br /&gt;URL: http://svn.example.com/repos/calc/branches/my-calc-branch&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Build a tag&lt;/span&gt;&lt;br /&gt;&lt;pre style="color: rgb(0, 102, 0);"&gt;&lt;span style="font-size:100%;"&gt;$ svn copy http://svn.example.com/repos/calc/trunk \&lt;br /&gt;          http://svn.example.com/repos/calc/tags/release-1.0 \&lt;br /&gt;     -m "Tagging the 1.0 release of the 'calc' project."&lt;br /&gt;&lt;br /&gt;$ ls&lt;br /&gt;my-working-copy/&lt;br /&gt;$ svn copy my-working-copy http://svn.example.com/repos/calc/tags/mytag&lt;br /&gt;Committed revision 352.&lt;/span&gt;&lt;/pre&gt;  &lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;Delete a branch&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;pre style="color: rgb(0, 102, 0);"&gt;&lt;span style="font-size:100%;"&gt;$ svn delete http://svn.example.com/repos/calc/branches/my-calc-branch \&lt;br /&gt;-m "Removing obsolete branch of calc project."&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;&lt;strong&gt;Create a new repository&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre style="color: rgb(0, 102, 0);"&gt;&lt;span style="font-size:100%;"&gt;$ svnadmin help&lt;br /&gt;...&lt;br /&gt;$ svnadmin help create&lt;br /&gt;...&lt;br /&gt;$ svnadmin create bdb /usr/local/repository/svn/test&lt;br /&gt;$ chown -R svn.svn /usr/local/repository/svn/test&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-7377205913060037931?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/7377205913060037931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=7377205913060037931' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/7377205913060037931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/7377205913060037931'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/10/purpose-commands-about-svn.html' title='Some Commands of SVN'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-803591039478727537</id><published>2008-10-20T08:50:00.000-07:00</published><updated>2008-10-20T08:54:17.748-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CentOs'/><category scheme='http://www.blogger.com/atom/ns#' term='yum'/><title type='text'>common YUM command in CentOs</title><content type='html'>&lt;p&gt;1.列出所有可更新的软件清单&lt;br /&gt;命令：yum check-update&lt;/p&gt; &lt;p&gt;2.安装所有更新软件&lt;br /&gt;命令：yum update&lt;/p&gt; &lt;p&gt;3.仅安装指定的软件&lt;br /&gt;命令：yum install &lt;package_name&gt;&lt;/p&gt; &lt;p&gt;4.仅更新指定的软件&lt;br /&gt;命令：yum update &lt;package_name&gt;&lt;/p&gt; &lt;p&gt;5.列出所有可安裝的软件清单&lt;br /&gt;命令：yum list&lt;/p&gt; &lt;p&gt;用YUM安装删除软件&lt;br /&gt;装了系统添加删除软件是常事，yum同样可以胜任这一任务，只要软件是rpm安装的。&lt;br /&gt;安装的命令是，yum install xxx，yum会查询数据库，有无这一软件包，如果有，则检查其依赖冲突关系，如果没有依赖冲突，那么最好，下载安装;如果有，则会给出提示，询问是否要同时安装依赖，或删除冲突的包，你可以自己作出判断。&lt;br /&gt;删除的命令是，yum remove xxx，同安装一样，yum也会查询数据库，给出解决依赖关系的提示。 &lt;/p&gt; &lt;p&gt;&lt;br /&gt;1.用YUM安装软件包&lt;br /&gt;命令：yum install &lt;package_name&gt;&lt;/p&gt; &lt;p&gt;2.用YUM删除软件包&lt;br /&gt;命令：yum remove &lt;package_name&gt;&lt;/p&gt; &lt;p&gt;用YUM查询软件信息&lt;br /&gt;我 们常会碰到这样的情况，想要安装一个软件，只知道它和某方面有关，但又不能确切知道它的名字。这时yum的查询功能就起作用了。你可以用 yum search keyword这样的命令来进行搜索，比如我们要则安装一个Instant Messenger，但又不知到底有哪些，这时不妨用 yum search messenger这样的指令进行搜索，yum会搜索所有可用rpm的描述，列出所有描述中和messeger有关的rpm包，于 是我们可能得到gaim，kopete等等，并从中选择。&lt;br /&gt;有时我们还会碰到安装了一个包，但又不知道其用途，我们可以用yum info packagename这个指令来获取信息。 &lt;/p&gt; &lt;p&gt;&lt;br /&gt;1.使用YUM查找软件包&lt;br /&gt;命令：yum search &lt;keyword&gt;&lt;/p&gt; &lt;p&gt;2.列出所有可安装的软件包&lt;br /&gt;命令：yum list&lt;/p&gt; &lt;p&gt;3.列出所有可更新的软件包&lt;br /&gt;命令：yum list updates&lt;/p&gt; &lt;p&gt;4.列出所有已安装的软件包&lt;br /&gt;命令：yum list installed&lt;/p&gt; &lt;p&gt;5.列出所有已安装但不在 Yum Repository 內的软件包&lt;br /&gt;命令：yum list extras&lt;/p&gt; &lt;p&gt;6.列出所指定的软件包&lt;br /&gt;命令：yum list &lt;package_name&gt;&lt;/p&gt; &lt;p&gt;7.使用YUM获取软件包信息&lt;br /&gt;命令：yum info &lt;package_name&gt;&lt;/p&gt; &lt;p&gt;8.列出所有软件包的信息&lt;br /&gt;命令：yum info&lt;/p&gt; &lt;p&gt;9.列出所有可更新的软件包信息&lt;br /&gt;命令：yum info updates&lt;/p&gt; &lt;p&gt;10.列出所有已安裝的软件包信息&lt;br /&gt;命令：yum info installed&lt;/p&gt; &lt;p&gt;11.列出所有已安裝但不在 Yum Repository 內的软件包信息&lt;br /&gt;命令：yum info extras&lt;/p&gt; &lt;p&gt;12.列出软件包提供哪些文件&lt;br /&gt;命令：yum provides &lt;package_name&gt;&lt;/p&gt; &lt;p&gt;清除YUM缓存&lt;br /&gt;yum 会把下载的软件包和header存储在cache中，而不会自动删除。如果我们觉得它们占用了磁盘空间，可以使用yum clean指令进行清除，更精确 的用法是yum clean headers清除header，yum clean packages清除下载的rpm包，yum clean all一 股脑儿端 &lt;/p&gt; &lt;p&gt;&lt;br /&gt;1.清除缓存目录(/var/cache/yum)下的软件包&lt;br /&gt;命令：yum clean packages&lt;/p&gt; &lt;p&gt;2.清除缓存目录(/var/cache/yum)下的 headers&lt;br /&gt;命令：yum clean headers&lt;/p&gt; &lt;p&gt;3.清除缓存目录(/var/cache/yum)下旧的 headers&lt;br /&gt;命令：yum clean oldheaders&lt;/p&gt; 4.清除缓存目录(/var/cache/yum)下的软件包及旧的headers&lt;br /&gt;命令：yum clean, yum clean all (= yum clean packages; yum clean oldheaders)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-803591039478727537?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/803591039478727537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=803591039478727537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/803591039478727537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/803591039478727537'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/10/common-yum-command-in-centos.html' title='common YUM command in CentOs'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-2969826741967358559</id><published>2008-10-20T08:42:00.000-07:00</published><updated>2008-10-20T08:44:59.664-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CentOs'/><title type='text'>Update the Rsync from 2.8 to 3.0.4 on CentOs</title><content type='html'>&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;安裝 for CenOS 5 i386 版的 rpmforge-release package&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm&lt;/li&gt;&lt;li&gt;rpm -ivh rpmforge-release-0.3.6-1.el5.rf.i386.rpm&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;安裝之後，在 /etc/yum.repos.d/ 目錄底下會多了兩個檔案，分別為  mirrors-rpmforge與  rpmforge.repo&lt;/p&gt; &lt;p&gt;執行 yum update rsync 之後，就可以看到有新版的 rsync 可以升級囉！ &lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-2969826741967358559?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/2969826741967358559/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=2969826741967358559' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2969826741967358559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2969826741967358559'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/10/update-rsync-from-28-to-304-on-centos.html' title='Update the Rsync from 2.8 to 3.0.4 on CentOs'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-8232138121033714596</id><published>2008-10-19T19:29:00.000-07:00</published><updated>2008-11-06T17:08:48.115-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zend Studio'/><title type='text'>Add x-debugger-server to the test server</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Step:&lt;/span&gt;&lt;br /&gt;1 download the x-debugger-server&lt;br /&gt;http://downloads.zend.com/pdt/server-debugger/&lt;br /&gt;&lt;br /&gt;2 Locate ZendDebugger.so or ZendDebugger.dll file&lt;br /&gt;that is compiled for the correct version of PHP (4.3.x, 4.4.x, 5.0.x, 5.1.x, 5.2.x) in the&lt;br /&gt;appropriate directory.&lt;br /&gt;("5_2_x_comp" is used for me)&lt;br /&gt;&lt;br /&gt;2. Add the following line to the php.ini file:&lt;br /&gt;Linux and Mac OS X: zend_extension=/full/path/to/ZendDebugger.so&lt;br /&gt;Windows: zend_extension_ts=/full/path/to/ZendDebugger.dll&lt;br /&gt;zend_debugger.allow_hosts=&lt;br /&gt;zend_debugger.expose_remotely=always&lt;br /&gt;example:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;[Zend]&lt;br /&gt;zend_extension_ts=D:/PHP/ext/ZendDebugger.dll&lt;br /&gt;zend_debugger.allow_hosts=127.0.0.1/32&lt;br /&gt;zend_debugger.allow_tunnel=127.0.0.1/32&lt;br /&gt;zend_debugger.expose_remotely=always&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;3. Place dummy.php file in the document root directory.&lt;br /&gt;when in ZF project :add the DummyphpController.php to default Module&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;class DummyphpController extends Core_Controller_Abstract {&lt;br /&gt;public function indexAction() {&lt;br /&gt;@ini_set ( 'zend_monitor.enable', 0 );&lt;br /&gt;if (@function_exists ( 'output_cache_disable' )) {&lt;br /&gt;@output_cache_disable ();&lt;br /&gt;}&lt;br /&gt;if (isset ( $_GET ['debugger_connect'] ) &amp;amp;&amp;amp; $_GET ['debugger_connect'] == 1) {&lt;br /&gt;if (function_exists ( 'debugger_connect' )) {&lt;br /&gt;debugger_connect ();&lt;br /&gt;exit ();&lt;br /&gt;} else {&lt;br /&gt;echo "No connector is installed.";&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;?&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4. Restart web server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-8232138121033714596?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/8232138121033714596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=8232138121033714596' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8232138121033714596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8232138121033714596'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/10/add-debug-to-server.html' title='Add x-debugger-server to the test server'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-2069344286480915325</id><published>2008-10-18T01:01:00.000-07:00</published><updated>2008-11-06T17:06:04.186-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>set up the player in ubuntu</title><content type='html'>1 add the resource ,and update ,install it&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;sudo wget &lt;/span&gt;&lt;a style="color: rgb(0, 102, 0);" href="http://www.medibuntu.org/sources.list.d/hardy.list" class="external free" title="http://www.medibuntu.org/sources.list.d/hardy.list" rel="nofollow"&gt;http://www.medibuntu.org/sources.list.d/hardy.list&lt;/a&gt;&lt;span style="color: rgb(0, 102, 0);"&gt; -O /etc/apt/sources.list.d/medibuntu.list&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install medibuntu-keyring &amp;amp;&amp;amp; sudo apt-get update&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2 install xine&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;sudo apt-get install libxine1-ffmpeg libxine1-all-plugins libxine1-plugins w32codecs gcc-3.3-base libstdc++5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;3 install gstream&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;sudo apt-get install gstreamer0.10-ffmpeg gstreamer0.10-pitfdll gstreamer0.10-plugins-bad gstreamer0.10-plugins-bad-multiverse gstreamer0.10-plugins-ugly gstreamer0.10-plugins-ugly-multiverse gstreamer0.10-esd&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;sudo apt-get install gstreamer0.10-fluendo-mpegdemux gstreamer0.10-gnonlin libflashsupport&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 51);"&gt;4 install smplay&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;sudo apt-get remove totem-mozilla -y&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;sudo apt-get install smplayer smplayer-themes mozilla-mplayer&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-2069344286480915325?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/2069344286480915325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=2069344286480915325' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2069344286480915325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2069344286480915325'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/10/set-up-player-in-ubuntu.html' title='set up the player in ubuntu'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-8920029741194926265</id><published>2008-10-17T21:23:00.000-07:00</published><updated>2009-04-30T07:37:25.302-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Install process of Ubuntu8.X</title><content type='html'>&lt;span&gt;The aim of this article is to log the ubuntu install process for PHP developers &lt;/span&gt;&lt;span&gt;. So , if you want to work on Ubuntu , this article  will give you some hands.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;1 Install system by CD&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Note:set the language to English&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;2 Directions layout&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Select to manually edit the partition table. I’m doing my testing on a standard 80GB harddrive and will modify these sizes for production.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;/boot ext3 200MB bootable&lt;br /&gt;/ ext3 15GB or More (files are relatively static)&lt;br /&gt;swap 4GB (4xRAM if you don't have much memory, down to 1xRAM if you have gobs of memory)&lt;br /&gt;/home ext3 10GB (personal files)&lt;br /&gt;/repository ext3 40G (for you other archives)&lt;br /&gt;/backup ext3 16G (workspace)&lt;br /&gt;&lt;/pre&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;3 add the resurce &lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;deb http://archive.ubuntu.org.cn/ubuntu-cn/ hardy main restricted universe multiverse&lt;br /&gt;&lt;br /&gt;deb http://tw.archive.ubuntu.com/ubuntu hardy main restricted universe multiverse&lt;br /&gt;deb http://tw.archive.ubuntu.com/ubuntu hardy-security main restricted universe multiverse&lt;br /&gt;deb http://tw.archive.ubuntu.com/ubuntu hardy-updates main restricted universe multiverse&lt;br /&gt;deb http://tw.archive.ubuntu.com/ubuntu hardy-backports main restricted universe multiverse&lt;br /&gt;deb http://tw.archive.ubuntu.com/ubuntu hardy-proposed main restricted universe multiverse&lt;br /&gt;deb-src http://tw.archive.ubuntu.com/ubuntu hardy main restricted universe multiverse&lt;br /&gt;deb-src http://tw.archive.ubuntu.com/ubuntu hardy-security main restricted universe multiverse&lt;br /&gt;deb-src http://tw.archive.ubuntu.com/ubuntu hardy-updates main restricted universe multiverse&lt;br /&gt;deb-src http://tw.archive.ubuntu.com/ubuntu hardy-backports main restricted universe multiverse&lt;br /&gt;deb-src http://tw.archive.ubuntu.com/ubuntu hardy-proposed main restricted universe multiverse&lt;br /&gt;&lt;br /&gt;deb http://archive.ubuntu.com/ubuntu/ hardy main restricted universe multiverse&lt;br /&gt;deb http://archive.ubuntu.com/ubuntu/ hardy-security main restricted universe multiverse&lt;br /&gt;deb http://archive.ubuntu.com/ubuntu/ hardy-updates main restricted universe multiverse&lt;br /&gt;deb http://archive.ubuntu.com/ubuntu/ hardy-proposed main restricted universe multiverse&lt;br /&gt;deb http://archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multiverse&lt;br /&gt;deb-src http://archive.ubuntu.com/ubuntu/ hardy main restricted universe multiverse&lt;br /&gt;deb-src http://archive.ubuntu.com/ubuntu/ hardy-security main restricted universe multiverse&lt;br /&gt;deb-src http://archive.ubuntu.com/ubuntu/ hardy-updates main restricted universe multiverse&lt;br /&gt;deb-src http://archive.ubuntu.com/ubuntu/ hardy-proposed main restricted universe multiverse&lt;br /&gt;deb-src http://archive.ubuntu.com/ubuntu/ hardy-backports main restricted universe multivers&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;then&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# sudo apt-get update&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;4 edit fstab&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;mkdir /home/edwin/workspace&lt;br /&gt;mkdir /home/edwin/repository&lt;br /&gt;sudo gedit /etc/fstab&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;then add the fllowing&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;/dev/sda6 /home/edwin/repository ext3 defaults        0       0 &lt;br /&gt;/dev/sda5 /home/edwin/workspace ext3 defaults        0       0 &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5 setting the SCIM&lt;/span&gt;&lt;br /&gt;if you have set the current profile that the scim is available, the following process is just for you.&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;5.1 install scim pinyin&lt;/span&gt;&lt;br /&gt;&lt;pre&gt; sudo apt-get install scim-pinyin&lt;/pre&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;5.2 setting scim&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;sudo im-switch -s scim&lt;/pre&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;5.3 &lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;Edit the file /etc/X11/xinit/xinput.d/scim by typing in a terminal (Applications&gt;Accessories&gt;Terminal):&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;sudo gedit /etc/X11/xinit/xinput.d/scim&lt;/pre&gt;&lt;br /&gt;If you want to use scim input in KDE applications, you will also have to change the following line :&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;GTK_IM_MODULE="xim"&lt;br /&gt;QT_IM_MODULE="xim"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;into :&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;GTK_IM_MODULE="scim-bridge"&lt;br /&gt;QT_IM_MODULE="scim-bridge"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 102, 0);"&gt;5.4 sudo gedit /usr/lib/gtk-2.0/2.10.0/immodule-files.d/libgtk2.0-0.immodules&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;find the followling line,&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;"xim" "X Input Method" "gtk20" "/usr/share/locale" "ko:ja:th:zh"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;change the them into:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;"xim" "X Input Method" "gtk20" "/usr/share/locale" "en:ko:ja:th:zh"&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;6 setting &lt;/span&gt;&lt;strong style="font-weight: bold;"&gt;Right Click Terminal Menu&lt;/strong&gt;&lt;br /&gt;&lt;pre&gt;sudo apt-get install nautilus-open-terminal&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;7 setting the docs reader&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;sudo apt-get install xpdf-chinese-simplified xpdf-chinese-traditional poppler-data&lt;/pre&gt;&lt;br /&gt;8 install zip tools&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo apt-get install unrar p7zip-full cabextract&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;9 install devs tools &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;install zend server&lt;br /&gt;sudo apt-get install build-essential autoconf automake subversion&lt;br /&gt;sudo apt-get install mysql-server mysql-client&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;10 install system rc tools&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sudo apt-get install sysv-rc-conf&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-8920029741194926265?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://wiki.ubuntu.com.cn/Qref/Hardy' title='Install process of Ubuntu8.X'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/8920029741194926265/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=8920029741194926265' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8920029741194926265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8920029741194926265'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/10/install-process-of-ubuntu804.html' title='Install process of Ubuntu8.X'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-1196706793018387102</id><published>2008-10-15T00:40:00.000-07:00</published><updated>2008-10-15T00:47:50.436-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='flex'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>setup Compiz Fusion in ubuntu</title><content type='html'>&lt;a href="http://dev.beryl-project.org/%7Ecyberorg/beryl/36/compiz-fusion-arrives/"&gt;&lt;br /&gt;&lt;/a&gt;&lt;p&gt;1 add deb source&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;deb http://download.tuxfamily.org/3v1deb feisty eyecandy&lt;br /&gt;deb-src http://download.tuxfamily.org/3v1deb feisty eyecandy&lt;/code&gt;&lt;/p&gt; &lt;p&gt;get key&lt;br /&gt;&lt;code&gt;wget http://download.tuxfamily.org/3v1deb/DD800CD9.gpg -O- | sudo apt-key add -&lt;/code&gt;&lt;/p&gt; &lt;p&gt;2 update system&lt;br /&gt;&lt;code&gt;sudo apt-get update&lt;br /&gt;sudo apt-get dist-upgrade&lt;/code&gt;&lt;/p&gt; &lt;p&gt;3 Install Compiz and Compiz Fusion&lt;br /&gt;&lt;code&gt;sudo apt-get install compiz compiz-gnome compiz-fusion-* compizconfig-settings-manager&lt;br /&gt;&lt;/code&gt;&lt;/p&gt; &lt;p&gt;4、run Compiz Fusion&lt;/p&gt; &lt;p&gt;in sessions, add the following&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;compiz --replace&lt;/code&gt;&lt;/p&gt; &lt;p&gt;5、if you want to use Compiz Fusion + emerald, so run the following&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;sudo apt-get install emerald&lt;/code&gt;&lt;/p&gt; &lt;p&gt;in sessions&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;code&gt;compiz --replace -c emerald &amp;amp;&lt;/code&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-1196706793018387102?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/1196706793018387102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=1196706793018387102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1196706793018387102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1196706793018387102'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/10/setup-compiz-fusion-in-ubuntu.html' title='setup Compiz Fusion in ubuntu'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-5970371660396620713</id><published>2008-10-11T10:28:00.000-07:00</published><updated>2008-10-11T10:37:41.348-07:00</updated><title type='text'>Build Flex SDK in Ubuntu 8.X</title><content type='html'>1、安装Java环境　　&lt;br /&gt;(1)安装sun-java6-&lt;span class="hilite2"&gt;jre&lt;/span&gt;/sun-java6-jdk&lt;br /&gt;&lt;br /&gt;sudo &lt;span class="hilite3"&gt;apt-get&lt;/span&gt; install sun-java6-&lt;span class="hilite2"&gt;jre&lt;/span&gt; &lt;br /&gt;sudo &lt;span class="hilite3"&gt;apt-get&lt;/span&gt; install sun-java6-jdk &lt;br /&gt;&lt;br /&gt;(2)设置当前默认的java解释器：&lt;br /&gt;sudo update-alternatives --config java&lt;br /&gt;&lt;br /&gt;执行后会出现类似如下的画面: &lt;br /&gt;There are 2 alternatives which provide `java'.&lt;br /&gt;Selection Alternative&lt;br /&gt;-----------------------------------------------&lt;br /&gt;*+ 1 /usr/lib/jvm/java-6-sun/&lt;span class="hilite2"&gt;jre&lt;/span&gt;/bin/java&lt;br /&gt;2 /usr/bin/gij-wrapper-4.1&lt;br /&gt;Press enter to keep the default &lt;div class="blog_content"&gt;&lt;li&gt;, or type selection number:  &lt;/li&gt;　　输入有包含 "sun" 的行的前面的数字。如上面显示，则输入1，然后回车确定。　　　　&lt;br /&gt;&lt;br /&gt;(3)编辑/etc/environment，加入下面两行：&lt;br /&gt;CLASSPATH=.:/usr/lib/jvm/java-6-sun/lib&lt;br /&gt;JAVA_HOME=/usr/lib/jvm/java-6-sun &lt;br /&gt;&lt;br /&gt;sudo gedit /etc/jvm &lt;br /&gt;将文件中的/usr/lib/jvm/java-6-sun &lt;br /&gt;这一行填入到配置块的顶部&lt;br /&gt;2. 安装flex Sdk&lt;br /&gt;安装Adobe FLEX 3.0 SDK 从下面的地址&lt;a href="http://www.adobe.com/go/flex3_sdk"&gt;http://www.adobe.com/go/flex3_sdk&lt;/a&gt;下载Adobe FLEX 3.0 SDK，我下载的是flex_sdk_3.2.0.3562_mpl.zip&lt;br /&gt;#mkdir /home/edwin/flexSdk&lt;br /&gt;#cd /home/edwin&lt;br /&gt;#unzip Desktop/flex_sdk_3.2.0.3562_mpl.zip  -d flexSdk/&lt;br /&gt;#chmod -R 777 flexSdk/bin&lt;br /&gt;3 测试&lt;br /&gt;#gedit hello.as&lt;br /&gt;#/home/edwin/flexSdk/mxmlc hello.as&lt;br /&gt;#firefox hello.swf&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-5970371660396620713?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/5970371660396620713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=5970371660396620713' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5970371660396620713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5970371660396620713'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/10/build-flex-sdk-in-ubuntu-8x.html' title='Build Flex SDK in Ubuntu 8.X'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-4483258111801069550</id><published>2008-09-20T06:07:00.000-07:00</published><updated>2008-10-15T00:48:25.609-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>[最佳实践]用“看板图”实现敏捷软件开发项目的可视化|敏捷软�</title><content type='html'>&lt;a href="http://scrumxp.blogspot.com/2008/07/blog-post.html"&gt;[最佳实践]用“看板图”实现敏捷软件开发项目的可视化|敏捷软�&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-4483258111801069550?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://scrumxp.blogspot.com/2008/07/blog-post.html' title='[最佳实践]用“看板图”实现敏捷软件开发项目的可视化|敏捷软�'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/4483258111801069550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=4483258111801069550' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4483258111801069550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4483258111801069550'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/09/blog-post_20.html' title='[最佳实践]用“看板图”实现敏捷软件开发项目的可视化|敏捷软�'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-4667433658268783732</id><published>2008-09-18T06:33:00.000-07:00</published><updated>2008-09-18T06:33:30.323-07:00</updated><title type='text'>30个最顶尖的基于栅格系统的博客网站设计 - 译言翻译</title><content type='html'>&lt;a href="http://www.yeeyan.com/articles/view/snlchina/3570"&gt;30个最顶尖的基于栅格系统的博客网站设计 - 译言翻译&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-4667433658268783732?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.yeeyan.com/articles/view/snlchina/3570' title='30个最顶尖的基于栅格系统的博客网站设计 - 译言翻译'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/4667433658268783732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=4667433658268783732' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4667433658268783732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4667433658268783732'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/09/30.html' title='30个最顶尖的基于栅格系统的博客网站设计 - 译言翻译'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-1393652947475324161</id><published>2008-09-13T09:02:00.000-07:00</published><updated>2008-09-13T10:11:31.240-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Many tips for optimize your  php code</title><content type='html'>1。    If a method can be static， declare it static。 Speed improvement is by a factor of 4。 如果一个方法可静态化，就对它做静态声明。速率可提升至4倍。&lt;br /&gt;&lt;br /&gt;2。    echo is faster than print。 echo 比 print 快。&lt;br /&gt;&lt;br /&gt;3。    Use echo’s multiple parameters instead of string concatenation。 使用echo多重参数（译注：指用逗号而不是句点）代替字符串连接。&lt;br /&gt;&lt;br /&gt;4。    Set the maxvalue for your for-loops before and not in the loop。 在执行for循环之前确定最大循环数，不要每循环一次都计算最大值。&lt;br /&gt;&lt;br /&gt;5。    Unset your variables to free memory， especially large arrays。 注销那些不用变量尤其是大数组，以便释放内存。&lt;br /&gt;&lt;br /&gt;6。    Avoid magic like __get， __set， __autoload 尽量避免使用__get，__set，__autoload。&lt;br /&gt;&lt;br /&gt;7。    require_once() is expensive 少用require_once()&lt;br /&gt;&lt;br /&gt;8。    Use full paths in includes and requires， less time spent on resolving the OS paths。 在包含文件时使用完整路径，解析操作系统路径所需时间会更少。&lt;br /&gt;&lt;br /&gt;9。    If you need to find out the time when the script started executing， $_SERVER[’REQUEST_TIME’] is preferred to time() 如果你想知道脚本开始执行时刻，使用$_SERVER[‘REQUEST_TIME’]要好于 time()。&lt;br /&gt;&lt;br /&gt;10。    See if you can use strncasecmp， strpbrk and stripos instead of regex。 检查是否能用strncasecmp，strpbrk，stripos函数代替正则表达式完成相同功能。&lt;br /&gt;&lt;br /&gt;11。    str_replace is faster than preg_replace， but strtr is faster than str_replace by a factor of 4。 str_replace函数比preg_replace函数快，但strtr函数效率是str_replace函数（9php.com）四倍。&lt;br /&gt;&lt;br /&gt;12。    If the function， such as string replacement function， accepts both arrays and single characters as arguments， and if your argument list is not too long， consider writing a few redundant replacement statements， passing one character at a time， instead of one line of code that accepts arrays as search and replace arguments。如果一个字符串替换函数，可接受数组或字符作为参数，并且参数长度不太长，那么可以考虑额外写一段替换代码，使得每次传递参数是一个字符，而不是只写一行代码接受数组作为查询和替换参数。&lt;br /&gt;&lt;br /&gt;13。    It’s better to use select statements than multi if， else if， statements。 使用选择分支语句好于使用多个if，else if语句。&lt;br /&gt;&lt;br /&gt;14。    Error suppression with @ is very slow。 用@屏蔽错误消息做法非常低效。&lt;br /&gt;&lt;br /&gt;15。    Turn on apache’s mod_deflate 打开apachemod_deflate模块。&lt;br /&gt;&lt;br /&gt;16。    Close your database connections when you’re done with them。 数据库连接当使用完毕时应关掉。&lt;br /&gt;&lt;br /&gt;17。    $row[’id’] is 7 times faster than $row[id]。 $row[‘id’]效率是$row[id]7倍。&lt;br /&gt;&lt;br /&gt;18。    Error messages are expensive。 错误消息代价昂贵。&lt;br /&gt;&lt;br /&gt;19。    Do not use functions inside of for loop， such as for ($x=0; $x &lt; x="0;"&gt;prop++) is 3 times slower than a local variable。 递增一个对象属性（如：$this-&gt;prop++）要比递增一个局部变量慢3倍。&lt;br /&gt;&lt;br /&gt;23。    Incrementing an undefined local variable is 9-10 times slower than a pre-initialized one。递增一个未预定义局部变量要比递增一个预定义局部变量慢9至10倍。&lt;br /&gt;&lt;br /&gt;24。    Just declaring a global variable without using it in a function also slows things down (by about the same amount as incrementing a local var)。 PHP probably does a check to see if the global exists。仅定义一个局部变量而没在函数中调用它，同样会减慢速度（其程度相当于递增一个局部变量）。PHP大概会检查看是否存在全局变量。&lt;br /&gt;&lt;br /&gt;25。    Method invocation appears to be independent of the number of methods defined in the class because I added 10 more methods to the test class (before and after the test method) with no change in performance。方法调与类中定义方法数量无关&lt;br /&gt;&lt;br /&gt;26。    Methods in derived classes run faster than ones defined in the base class。 派生类中方法运行起来要快于在基类中定义同样方法。&lt;br /&gt;&lt;br /&gt;27。    A function call with one parameter and an empty function body takes about the same time as doing 7-8 $localvar++ operations。 A similar method call is of course about 15 $localvar++ operations。调用带有一个参数空函数，其花费时间相当于执行7至8次局部变量递增操作。类似 方法调用所花费时间接近于15次局部变量递增操作。&lt;br /&gt;&lt;br /&gt;28。    Surrounding your string by ‘ instead of " will make things interpret a little faster since php looks for variables inside "…" but not inside ‘…’。 Of course you can only do this when you don’t need to have variables in the string。用单引号代替双引号来包含字符串，这样做会更快一些。因为PHP会在双引号包围字符串中搜寻变量，单引号则不会。当然，只有当你不需要在字符串中包含变量时才可以这么做。&lt;br /&gt;&lt;br /&gt;29。    When echoing strings it’s faster to separate them by comma instead of dot。 Note: This only works with echo， which is a function that can take several strings as arguments。输出多个字符串时，用逗号代替句点来分隔字符串，速度更快。注意：只有echo能这么做，它是一种可以把多个字符串当作参数“函数 ”（译注：PHP手册中说echo是语言结构，不是真正函数，故把函数加上了双引号）。&lt;br /&gt;&lt;br /&gt;30。    A PHP script will be served at least 2-10 times slower than a static HTML page by Apache。 Try to use more static HTML pages and fewer scripts。 Apache解析一个PHP脚本时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面，少用脚本。&lt;br /&gt;&lt;br /&gt;31。    Your PHP scripts are recompiled every time unless the scripts are cached。 Install a PHP caching product to typically increase performance by 25-100% by removing compile times。除非脚本可以缓存，否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%性能，以免除编译开销。&lt;br /&gt;&lt;br /&gt;32。    Cache as much as possible。 Use memcached - memcached is a high-performance memory object caching system intended to speed up dynamic web applications by alleviating database load。 OP code caches are useful so that your script does not have to be compiled on every request。尽量做缓存，可使用memcached。memcached是一款高性能内存对象缓存系统，可用来加速动态Web应用程序，减轻数据库负载。对运算码缓存很有用，使得脚本不必为每个请求做重新编译。&lt;br /&gt;&lt;br /&gt;33。    When working with strings and you need to check that the string is either of a certain length you’d understandably would want to use the strlen() function。 This function is pretty quick since it’s operation does not perform any calculation but merely return the already known length of a string available in the zval structure (internal C struct used to store variables in PHP)。 However because strlen() is a function it is still somewhat slow because the function call requires several operations such as lowercase &amp;amp; hashtable lookup followed by the execution of said function。 In some instance you can improve the speed of your code by using an isset() trick。当操作字符串并需要检验其长度是否满足某种要求时，你想当然地会使用strlen()函数。此函数执行起来相当快，因为它不做任何计算，只返回在zval 结构（C内置数据结构，用于存储PHP变量）中存储已知字符串长度。但是，由于strlen()是函数，多多少少会有些慢，因为函数调用会经过诸多步骤，如字母小写化（译注：指函数名小写化，PHP不区分函数名大小写）、哈希查找，会跟随被调用（函数一起执行。在某些情况下，你可以使用isset()技巧加速执行你代码。&lt;br /&gt;&lt;br /&gt;举例如下&lt;br /&gt;if (strlen($foo) &lt; 5) { echo "Foo is too short"; } 与下面做比较 if (！isset($foo{5})) { echo "Foo is too short"; }  Calling isset() happens to be faster then strlen() because unlike strlen()， isset() is a language construct and not a function meaning that it’s execution does not require function lookups and lowercase。 This means you have virtually no overhead on top of the actual code that determines the string’s length。调用isset()恰巧比strlen()快，因为与后者不同是，isset()作为一种语言结构，意味着它执行不需要函数查找和字母小写化。也就是说，实际上在检验字符串长度顶层代码中你没有花太多开销。  34。    When incrementing or decrementing the value of the variable $i++ happens to be a tad slower then ++$i。 This is something PHP specific and does not apply to other languages， so don’t go modifying your C or Java code thinking it’ll suddenly become faster， it won’t。 ++$i happens to be faster in PHP because instead of 4 opcodes used for $i++ you only need 3。 Post incrementation actually causes in the creation of a temporary var that is then incremented。 While pre-incrementation increases the original value directly。 This is one of the optimization that opcode optimized like Zend’s PHP optimizer。 It is still a good idea to keep in mind since not all opcode optimizers perform this optimization and there are plenty of ISPs and servers running without an opcode optimizer。当执行变量$i递增或递减时，$i++会比++$i慢一些。这种差异是PHP特有，并不适用于其他语言，所以请不要修改你C或Java代码并指望它们能立即变快，没用。++$i更快是因为它只需要3条指令 (opcodes)，$i++则需要4条指令。后置递增实际上会产生一个临时变量，这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理一种，正如ZendPHP优化器所作那样。牢记这个优化处理不失为一个好主意，因为并不是所有指令优化器都会做同样优化处理，并且存在大量没有装配指令优化器互联网服务提供商（ISPs）和服务器。  35。    Not everything has to be OOP， often it is too much overhead， each method and object call consumes a lot of memory。并不是事必面向对象(OOP)，面向对象往往开销很大，每个方法和对象调用都会消耗很多内存。  36。    Do not implement every data structure as a class， arrays are useful， too。 并非要用类实现所有数据结构，数组也很有用。  37。    Don’t split methods too much， think， which code you will really re-use。 不要把方法细分得过多，仔细想想你真正打算重用是哪些代码？  38。    You can always split the code of a method later， when needed。 当你需要时，你总能把代码分解成方法。  39。    Make use of the countless predefined functions。 尽量采用大量PHP内置函数。  40。    If you have very time consuming functions in your code， consider writing them as C extensions。如果在代码中存在大量耗时函数，你可以考虑用C扩展方式实现它们。  41。    Profile your code。 A profiler shows you， which parts of your code consumes how many time。 The Xdebug debugger already contains a profiler。 Profiling shows you the bottlenecks in overview。评估检验(profile)你的代码。检验器会告诉你，代码哪些部分消耗了多少时间。Xdebug调试器包含了检验程序，评估检验总体上可以显示出代码瓶颈。  42。    mod_gzip which is available as an Apache module compresses your data on the fly and can reduce the data to transfer up to 80%。 mod_zip可作为Apache模块，用来即时压缩你数据，并可让数据传输量降低80%&lt;br /&gt;更多&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://phplens.com/lens/php-book/optimizing-debugging-php.php"&gt;http://phplens.com/lens/php-book/optimizing-debugging-php.php&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://talks.php.net/show/acc_php"&gt;http://talks.php.net/show/acc_php&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cluesheet.com/"&gt;http://www.cluesheet.com/&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-1393652947475324161?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.chazzuka.com/blog/?p=163' title='Many tips for optimize your  php code'/><link rel='enclosure' type='' href='http://phplens.com/lens/php-book/optimizing-debugging-php.php' length='0'/><link rel='enclosure' type='' href='http://talks.php.net/show/acc_php' length='0'/><link rel='enclosure' type='' href='http://www.cluesheet.com/' length='0'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/1393652947475324161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=1393652947475324161' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1393652947475324161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1393652947475324161'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/09/many-tips-for-optimize-your-php-code.html' title='Many tips for optimize your  php code'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-3068430846966798191</id><published>2008-09-13T07:32:00.000-07:00</published><updated>2008-09-13T07:32:48.547-07:00</updated><title type='text'>数据库 设计与优化 - halemyan的专栏 - CSDNBlog</title><content type='html'>&lt;a href="http://blog.csdn.net/halemyan/archive/2008/09/09/2905102.aspx"&gt;数据库 设计与优化 - halemyan的专栏 - CSDNBlog&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-3068430846966798191?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blog.csdn.net/halemyan/archive/2008/09/09/2905102.aspx' title='数据库 设计与优化 - halemyan的专栏 - CSDNBlog'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/3068430846966798191/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=3068430846966798191' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/3068430846966798191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/3068430846966798191'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/09/halemyan-csdnblog.html' title='数据库 设计与优化 - halemyan的专栏 - CSDNBlog'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-4442278603130133440</id><published>2008-09-13T03:05:00.000-07:00</published><updated>2008-09-13T03:07:35.394-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>数据库中主键和外键的设计原则</title><content type='html'>&lt;p align="left"&gt;主键和外键是把多个表组织为一个有效的关系数据库的粘合剂。主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响。 &lt;/p&gt; &lt;p&gt;必须将数据库模式从理论上的逻辑设计转换为实际的物理设计。而主键和外键的结构是这个设计过程的症结所在。一旦将所设计的数据库用于了生产环境，就很难对这些键进行修改，所以在开发阶段就设计好主键和外键就是非常必要和值得的。&lt;/p&gt; &lt;p&gt;主键：&lt;/p&gt; &lt;p&gt;  关系数据库依赖于主键---它是数据库物理模式的基石。主键在物理层面上只有两个用途：&lt;/p&gt; &lt;p&gt;        1. 惟一地标识一行。&lt;/p&gt; &lt;p&gt;        2. 作为一个可以被外键有效引用的对象。&lt;/p&gt; &lt;p&gt;  基于以上这两个用途，下面给出了我在设计物理层面的主键时所遵循的一些原则：&lt;/p&gt; &lt;p&gt;        1. 主键应当是对用户没有意义的。如果用户看到了一个表示多对多关系的连接表中的数据，并抱怨它没有什么用处，那就证明它的主键设计地很好。&lt;/p&gt; &lt;p&gt;        2. 主键应该是单列的，以便提高连接和筛选操作的效率。&lt;/p&gt; &lt;p&gt;      &lt;strong&gt; 注：&lt;/strong&gt;&lt;span style="font-weight: bold;"&gt;使用复合键的人通常有两个理由为自己开脱，而这两个理由都是错误的。&lt;/span&gt;其一是主键应当具有实际 意义，然而，让主键具有意义只不过是给人为地破坏数据库提供了方便。其二是利用这种方法可以在描述多对多关系的连接表中使用两个外部键来作为主键，我也反 对这种做法，理由是：复合主键常常导致不良的外键，即当连接表成为另一个从表的主表，而依据上面的第二种方法成为这个表主键的一部分，然，这个表又有可能 再成为其它从表的主表，其主键又有可能成了其它从表主键的一部分，如此传递下去，越靠后的从表，其主键将会包含越多的列了。&lt;/p&gt; &lt;p&gt;        3. 永远也不要更新主键。实际上，因为主键除了惟一地标识一行之外，再没有其他的用途了，所以也就没有理由去对它更新。如果主键需要更新，则说明主键应对用户无意义的原则被违反了。&lt;/p&gt; &lt;p&gt;       &lt;strong&gt;注：&lt;/strong&gt;这项原则对于那些经常需要在数据转换或多数据库合并时进行数据整理的数据并不适用。&lt;/p&gt; &lt;p&gt;        4. 主键不应包含动态变化的数据，如时间戳、创建时间列、修改时间列等。&lt;/p&gt; &lt;p&gt;        5. 主键应当有计算机自动生成。如果由人来对主键的创建进行干预，就会使它带有除了惟一标识一行以外的意义。一旦越过这个界限，就可能产生认为修改主键的动机，这样，这种系统用来链接记录行、管理记录行的关键手段就会落入不了解数据库设计的人的手中。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-4442278603130133440?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/4442278603130133440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=4442278603130133440' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4442278603130133440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4442278603130133440'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/09/blog-post_7341.html' title='数据库中主键和外键的设计原则'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-1264861580064797881</id><published>2008-09-13T02:48:00.000-07:00</published><updated>2008-09-13T03:00:38.825-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='database'/><title type='text'>数据库设计常识</title><content type='html'>表和字段的设计（数据库逻辑设计）&lt;br /&gt;表设计原则&lt;br /&gt;1) 标准化和规范化 数 据的标准化有助于消除数据库中的数据冗余。标准化有好几种形式，但Third Normal Form（3NF）通常被认为在性能、扩展性和数据完整性方 面达到了最好平衡。简单来说，遵守3NF 标准的数据库的表设计原则是：“One Fact in One Place”即某个表只包括其本身基本的属性，当不是它们本身所具有的属性时需进行分解。表之间的关系通过外键相连接。它具有以下特点：有一组表专门存放通过键连接起来的关联数据。&lt;br /&gt;举例：某个存放客户及其有关定单的3NF 数据库就可能有两个表：Customer 和Order。Order 表不包含定单关联客户的任何信息，但表内会存放一个键值，该键指向Customer 表里包含该客户信息的那一行。事实上，为了效率的缘故，对表不进行标准化有时也是必要的。&lt;br /&gt;&lt;br /&gt;2) 数据驱动 采用数据驱动而非硬编码的方式，许多策略变更和维护都会方便得多，大大增强系统的灵活性和扩展性。 举例，假如用户界面要访问外部数据源（文件、XML 文档、其他数据库等），不妨把相应的连接和路径信息存储在用户界面支持表里。还有，如果用户界面执行工作流之类的任务（发送邮件、打印信笺、修改记录状态等），那么产生工作流的数据也可以存放在数据库里。角色权限管理也可以通过数据驱动来完成。事实上，如果过程是数据驱动的，你就可以把相当大的责任推给用户，由用户来维护自己的工作流过程。&lt;br /&gt;&lt;br /&gt;3) 考虑各种变化 在设计数据库的时候考虑到哪些数据字段将来可能会发生变更。举例，姓氏就是如此（注意是西方人的姓氏，比如女性结婚后从夫姓等）。所以，在建立系统存储客户信息时，在单独的一个数据表里存储姓氏字段，而且还附加起始日和终止日等字段，这样就可以跟踪这一数据条目的变化。&lt;br /&gt;&lt;br /&gt;字段设计原则&lt;br /&gt;4) 每个表中都应该添加的3 个有用的字段&lt;br /&gt;&lt;br /&gt;    * CreationDate，在VB 下默认是Now()，而在SQL Server 下默认为GETDATE()&lt;br /&gt;    * ModifyDate，记录修改的时间&lt;br /&gt;&lt;br /&gt;5) 对地址和电话采用多个字段&lt;br /&gt;描述街道地址就短短一行记录是不够的。Address_Line1、Address_Line2 和Address_Line3 可以提供更大的灵活性。还有，电话号码和邮件地址最好拥有自己的数据表，其间具有自身的类型和标记类别。&lt;br /&gt;&lt;br /&gt;6) 使用角色实体定义属于某类别的列&lt;br /&gt;在需要对属于特定类别或者具有特定角色的事物做定义时，可以用角色实体来创建特定的时间关联关系，从而可以实现自我文档化。&lt;br /&gt;举例：用PERSON 实体和PERSON_TYPE 实体来描述人员。比方说，当John Smith, Engineer 提升为 John Smith, Director 乃至最后爬到John Smith, CIO 的高位，而所有你要做的不过是改变两个表PERSON 和 PERSON_TYPE 之间关系的键值，同时增加一个日期/时间字段来知道变化是何时发生的。这样，你的PERSON_TYPE 表就包含了所有 PERSON 的可能类型，比如Associate、Engineer、Director、CIO 或者CEO 等。还有个替代办法就是改变 PERSON 记录来反映新头衔的变化，不过这样一来在时间上无法跟踪个人所处位置的具体时间。&lt;br /&gt;&lt;br /&gt;7) 选择数字类型和文本类型尽量充足&lt;br /&gt;在SQL 中使用smallint 和tinyint 类型要特别小心。比如，假如想看看月销售总额，总额字段类型是smallint，那么，如果总额超过了$32,767 就不能进行计算操作了。&lt;br /&gt;而ID 类型的文本字段，比如客户ID 或定单号等等都应该设置得比一般想象更大。假设客户ID 为10 位数长。那你应该把数据库表字段的长度设为12 或者13 个字符长。但这额外占据的空间却无需将来重构整个数据库就可以实现数据库规模的增长了。&lt;br /&gt;&lt;br /&gt;8) 增加删除标记字段&lt;br /&gt;在表中包含一个“删除标记”字段，这样就可以把行标记为删除。在关系数据库里不要单独删除某一行；最好采用清除数据程序而且要仔细维护索引整体性。&lt;br /&gt;&lt;br /&gt;3. 选择键和索引（数据库逻辑设计）&lt;br /&gt;键选择原则：&lt;br /&gt;1) 键设计4 原则&lt;br /&gt;&lt;br /&gt;    * 为关联字段创建外键。&lt;br /&gt;    * 所有的键都必须唯一。&lt;br /&gt;    * 避免使用复合键。&lt;br /&gt;    * 外键总是关联唯一的键字段。&lt;br /&gt;&lt;br /&gt;2) 使用系统生成的主键&lt;br /&gt;设计数据库的时候采用系统生成的键作为主键，那么实际控制了数据库的索引完整性。这样，数据库和非人工机制就有效地控制了对存储数据中每一行的访问。采用系统生成键作为主键还有一个优点：当拥有一致的键结构时，找到逻辑缺陷很容易。&lt;br /&gt;&lt;br /&gt;3) 不要用用户的键(不让主键具有可更新性)&lt;br /&gt;在确定采用什么字段作为表的键的时候，可一定要小心用户将要编辑的字段。通常的情况下不要选择用户可编辑的字段作为键。&lt;br /&gt;&lt;br /&gt;4) 可选键有时可做主键&lt;br /&gt;把可选键进一步用做主键，可以拥有建立强大索引的能力。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;索引使用原则&lt;br /&gt;&lt;br /&gt;索引是从数据库中获取数据的最高效方式之一。95%的数据库性能问题都可以采用索引技术得到解决。&lt;br /&gt;&lt;br /&gt;1) 逻辑主键使用唯一的成组索引，对系统键（作为存储过程）采用唯一的非成组索引，对任何外键列采用非成组索引。考虑数据库的空间有多大，表如何进行访问，还有这些访问是否主要用作读写。&lt;br /&gt;&lt;br /&gt;2) 大多数数据库都索引自动创建的主键字段，但是可别忘了索引外键，它们也是经常使用的键，比如运行查询显示主表和所有关联表的某条记录就用得上。&lt;br /&gt;&lt;br /&gt;3) 不要索引memo/note 字段，不要索引大型字段（有很多字符），这样作会让索引占用太多的存储空间。&lt;br /&gt;&lt;br /&gt;4) 不要索引常用的小型表&lt;br /&gt;不要为小型数据表设置任何键，假如它们经常有插入和删除操作就更别这样作了。对这些插入和删除操作的索引维护可能比扫描表空间消耗更多的时间。&lt;br /&gt;&lt;br /&gt;4. 数据完整性设计（数据库逻辑设计）&lt;br /&gt;&lt;br /&gt;1) 完整性实现机制：&lt;br /&gt;实体完整性：主键&lt;br /&gt;参照完整性：&lt;br /&gt;父表中删除数据：级联删除；受限删除；置空值&lt;br /&gt;父表中插入数据：受限插入；递归插入&lt;br /&gt;父表中更新数据：级联更新；受限更新；置空值&lt;br /&gt;DBMS对参照完整性可以有两种方法实现：外键实现机制（约束规则）和触发器实现机制&lt;br /&gt;用户定义完整性：&lt;br /&gt;NOT NULL；CHECK；触发器&lt;br /&gt;&lt;br /&gt;2) 用约束而非商务规则强制数据完整性&lt;br /&gt;采用数据库系统实现数据的完整性。这不但包括通过标准化实现的完整性而且还包括数据的功能性。在写数据的时候还可以增加触发器来保证数据的正确性。不要依赖于商务层保证数据完整性；它不能保证表之间（外键）的完整性所以不能强加于其他完整性规则之上。&lt;br /&gt;&lt;br /&gt;3) 强制指示完整性&lt;br /&gt;在有害数据进入数据库之前将其剔除。激活数据库系统的指示完整性特性。这样可以保持数据的清洁而能迫使开发人员投入更多的时间处理错误条件。&lt;br /&gt;&lt;br /&gt;4) 使用查找控制数据完整性&lt;br /&gt;控制数据完整性的最佳方式就是限制用户的选择。只要有可能都应该提供给用户一个清晰的价值列表供其选择。这样将减少键入代码的错误和误解同时提供数据的一致性。某些公共数据特别适合查找：国家代码、状态代码等。&lt;br /&gt;&lt;br /&gt;5) 采用视图&lt;br /&gt;为了在数据库和应用程序代码之间提供另一层抽象，可以为应用程序建立专门的视图而不必非要应用程序直接访问数据表。这样做还等于在处理数据库变更时给你提供了更多的自由。&lt;br /&gt;&lt;br /&gt;5. 其他设计技巧&lt;br /&gt;1) 避免使用触发器&lt;br /&gt;触发器的功能通常可以用其他方式实现。在调试程序时触发器可能成为干扰。假如你确实需要采用触发器，你最好集中对它文档化。&lt;br /&gt;&lt;br /&gt;2) 使用常用英语（或者其他任何语言）而不要使用编码&lt;br /&gt;在创建下拉菜单、列表、报表时最好按照英语名排序。假如需要编码，可以在编码旁附上用户知道的英语。&lt;br /&gt;&lt;br /&gt;3) 保存常用信息&lt;br /&gt;让一个表专门存放一般数据库信息非常有用。在这个表里存放数据库当前版本、最近检查/修复（对Access）、关联设计文档的名称、客户等信息。这样可以实现一种简单机制跟踪数据库，当客户抱怨他们的数据库没有达到希望的要求而与你联系时，这样做对非客户机/服务器环境特别有用。&lt;br /&gt;&lt;br /&gt;4) 包含版本机制&lt;br /&gt;在数据库中引入版本控制机制来确定使用中的数据库的版本。时间一长，用户的需求总是会改变的。最终可能会要求修改数据库结构。把版本信息直接存放到数据库中更为方便。&lt;br /&gt;&lt;br /&gt;5) 编制文档&lt;br /&gt;对所有的快捷方式、命名规范、限制和函数都要编制文档。&lt;br /&gt;采用给表、列、触发器等加注释的数据库工具。对开发、支持和跟踪修改非常有用。&lt;br /&gt;对数据库文档化，或者在数据库自身的内部或者单独建立文档。这样，当过了一年多时间后再回过头来做第2 个版本，犯错的机会将大大减少。&lt;br /&gt;&lt;br /&gt;6) 测试、测试、反复测试&lt;br /&gt;建立或者修订数据库之后，必须用用户新输入的数据测试数据字段。最重要的是，让用户进行测试并且同用户一道保证选择的数据类型满足商业要求。测试需要在把新数据库投入实际服务之前完成。&lt;br /&gt;&lt;br /&gt;7) 检查设计&lt;br /&gt;&lt;br /&gt;在开发期间检查数据库设计的常用技术是通过其所支持的应用程序原型检查数据库。换句话说，针对每一种最终表达数据的原型应用，保证你检查了数据模型并且查看如何取出数据。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;三、数据库命名规范&lt;br /&gt;&lt;br /&gt;1. 实体（表）的命名&lt;br /&gt;1) 表 以名词或名词短语命名，确定表名是采用复数还是单数形式，此外给表的别名定义简单规则（比方说，如果表名是一个单词，别名就取单词的前4 个字母；如果表 名是两个单词，就各取两个单词的前两个字母组成4 个字母长的别名；如果表的名字由3 个单词组成，从头两个单词中各取一个然后从最后一个单词中再取出两 个字母，结果还是组成4 字母长的别名，其余依次类推）&lt;br /&gt;对工作用表来说，表名可以加上前缀WORK_ 后面附上采用该表的应用程序的名字。在命名过程当中，根据语义拼凑缩写即可。注意，由于ORCLE会将字段名称统一成大写或者小写中的一种，所以要求加上下划线。&lt;br /&gt;举例：&lt;br /&gt;定义的缩写 Sales: Sal 销售；&lt;br /&gt;Order: Ord 订单；&lt;br /&gt;Detail: Dtl 明细；&lt;br /&gt;则销售订单明细表命名为：Sal_Ord_Dtl;&lt;br /&gt;2) 如果表或者是字段的名称仅有一个单词，那么建议不使用缩写，而是用完整的单词。&lt;br /&gt;举例：&lt;br /&gt;定义的缩写 Material Ma 物品；&lt;br /&gt;物品表名为：Material, 而不是 Ma.&lt;br /&gt;但是字段物品编码则是：Ma_ID;而不是Material_ID&lt;br /&gt;3) 所有的存储值列表的表前面加上前缀Z&lt;br /&gt;目的是将这些值列表类排序在数据库最后。&lt;br /&gt;4) 所有的冗余类的命名(主要是累计表)前面加上前缀X&lt;br /&gt;冗余类是为了提高数据库效率，非规范化数据库的时候加入的字段或者表&lt;br /&gt;5) 关联类通过用下划线连接两个基本类之后，再加前缀R的方式命名,后面按照字母顺序罗列两个表名或者表名的缩写。&lt;br /&gt;关联表用于保存多对多关系。&lt;br /&gt;如果被关联的表名大于10个字母，必须将原来的表名的进行缩写。如果没有其他原因，建议都使用缩写。&lt;br /&gt;举例：表Object与自身存在多对多的关系,则保存多对多关系的表命名为：R_Object；&lt;br /&gt;表 Depart和Employee;存在多对多的关系；则关联表命名为R_Dept_Emp&lt;br /&gt;&lt;br /&gt;2. 属性（列）的命名&lt;br /&gt;1) 采用有意义的列名，表内的列要针对键采用一整套设计规则。每一个表都将有一个自动ID作为主健,逻辑上的主健作为第一组候选主健来定义,如果是数据库自动生成的编码，统一命名为：ID;如果是自定义的逻辑上的编码则用缩写加“ID”的方法命名。如果键是数字类型，你可以用_NO 作为后缀；如果是字符类型则 可以采用_CODE 后缀。对列名应该采用标准的前缀和后缀。&lt;br /&gt;举例：销售订单的编号字段命名：Sal_Ord_ID；如果还存在一个数据库生成的自动编号，则命名为：ID。&lt;br /&gt;&lt;br /&gt;2) 所有的属性加上有关类型的后缀，注意，如果还需要其它的后缀，都放在类型后缀之前。&lt;br /&gt;注: 数据类型是文本的字段，类型后缀TX可以不写。有些类型比较明显的字段，可以不写类型后缀。&lt;br /&gt;&lt;br /&gt;3) 采用前缀命名&lt;br /&gt;给每个表的列名都采用统一的前缀，那么在编写SQL表达式的时候会得到大大的简化。这样做也确实有缺点，比如破坏了自动表连接工具的作用，后者把公共列名同某些数据库联系起来。&lt;br /&gt;3. 视图的命名&lt;br /&gt;1) 视图以V作为前缀，其他命名规则和表的命名类似；&lt;br /&gt;2) 命名应尽量体现各视图的功能。&lt;br /&gt;4. 触发器的命名&lt;br /&gt;&lt;br /&gt;触发器以TR作为前缀，触发器名为相应的表名加上后缀，Insert触发器加 _I ，Delete触发器加 _D ，Update触发器加 _U ，如：TR_Customer_I，TR_Customer_D，TR_Customer_U。&lt;br /&gt;5. 存储过程名&lt;br /&gt;&lt;br /&gt;存储过程应以 UP_ 开头，和系统的存储过程区分，后续部分主要以动宾形式构成，并用下划线分割各个组成部分。如增加代理商的帐户的存储过程为 UP_Ins_Agent_Account 。&lt;br /&gt;6. 变量名&lt;br /&gt;&lt;br /&gt;变量名采用小写，若属于词组形式，用下划线分隔每个单词，如@my_err_no。&lt;br /&gt;7. 命名中其他注意事项&lt;br /&gt;1) 以上命名都不得超过30个字符的系统限制。变量名的长度限制为29（不包括标识字符@）。&lt;br /&gt;2) 数据对象、变量的命名都采用英文字符，禁止使用中文命名。绝对不要在对象名的字符之间留空格。&lt;br /&gt;3) 小心保留词，要保证你的字段名没有和保留词、数据库系统或者常用访问方法冲突&lt;br /&gt;5) 保持字段名和类型的一致性，在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数，那在另一个表里可就别变成字符型了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-1264861580064797881?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/1264861580064797881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=1264861580064797881' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1264861580064797881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1264861580064797881'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/09/blog-post_13.html' title='数据库设计常识'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-2190202601294617797</id><published>2008-09-11T22:17:00.000-07:00</published><updated>2008-09-11T22:27:43.529-07:00</updated><title type='text'>军事英语</title><content type='html'>"cover me"           掩护我  &lt;br /&gt;"you take the point"      你占据该要点  &lt;br /&gt;"hold this position"      待在（防守）这个位置 &lt;br /&gt;"regroup team"         重组队伍      &lt;br /&gt;"follow me"          跟着我 &lt;br /&gt;"taking fire, need assistance"吸引火力，需要援助 &lt;br /&gt;"go"          前进    &lt;br /&gt;"fall back"      后退    &lt;br /&gt;"stick together team" 保持队形（不要散了）密集阵形进攻&lt;br /&gt;"get in position"   进入适当的位置 &lt;br /&gt;"storm the front"   守住前面    &lt;br /&gt;"report in"      请报告情况 &lt;br /&gt;"affirmative/roger that"收到 &lt;br /&gt;"enemy spotted"    发现敌人  &lt;br /&gt;"need backup"     需要支援  &lt;br /&gt;"sector clear"     扇区安全（当你确定一个区域安全之后，你可以向你的队友发送这句话。）   &lt;br /&gt;"i'm in position"   我到达指定的位置   &lt;br /&gt;"reporting in"     报告自己的位置   &lt;br /&gt;"negative"       拒绝（接受）   &lt;br /&gt;"enemy down"      消灭敌人  &lt;br /&gt;"wait for my go"     待在你的作战位置,等我的命令&lt;br /&gt;"fire in the hole"   扔手榴弹（炸弹一类）&lt;br /&gt;"Taking Fire, Need Assistance" 压制火力，需要火力协助&lt;br /&gt;"Fall Back"     全队后撤  &lt;br /&gt;"Storm the Front" 守住前面  &lt;br /&gt;"Enemy Down"     敌人被消灭&lt;br /&gt;"Hold your fire"   停火  &lt;br /&gt;"keep your fire"   保持火力（别停下来） &lt;br /&gt;"move"         走！移动&lt;br /&gt;"move on"       继续前进&lt;br /&gt;"move back"     后撤 &lt;br /&gt;"move out"       搬走;开拔&lt;br /&gt;&lt;br /&gt;英美军衔&lt;br /&gt;Army 陆军&lt;br /&gt;Field Marshal 元帅&lt;br /&gt;General 上将&lt;br /&gt;Lieutenant General 中将&lt;br /&gt;Major General 少将&lt;br /&gt;Brigadier 准将&lt;br /&gt;Colonel 上校&lt;br /&gt;Lieutenant Colonel 中校&lt;br /&gt;Major 少校&lt;br /&gt;Captain 上尉&lt;br /&gt;Lieutenant 中尉&lt;br /&gt;Second Lieutenant 少尉&lt;br /&gt;Warrant Officer (Class I) 一级准尉&lt;br /&gt;Warrant Officer (ClassII) 二级准尉&lt;br /&gt;Staff Sergeant 上士&lt;br /&gt;Sergeant 中士&lt;br /&gt;Corporal 下士&lt;br /&gt;Lance Corporal 一等兵&lt;br /&gt;Private 二等兵&lt;br /&gt;Recruit 新兵&lt;br /&gt;Air Force 空军&lt;br /&gt;Marshal of the Royal Air Force 元帅&lt;br /&gt;Air Chief Marshal 上将&lt;br /&gt;Air Marshal 中将&lt;br /&gt;Air Vice Marshal 少将&lt;br /&gt;Air Commodore 准将&lt;br /&gt;Group Captain 上校&lt;br /&gt;Wing Commander 中校&lt;br /&gt;Squadron Leader 少校&lt;br /&gt;Flight Lieutenant 上尉&lt;br /&gt;Flying Officer 中尉&lt;br /&gt;Pilot Officer 少尉&lt;br /&gt;Warrant Officer (Class I) 一级准尉&lt;br /&gt;Warrant Officer (Class II) 二级准尉&lt;br /&gt;Flight Sergeant 上士&lt;br /&gt;Sergeant 中士&lt;br /&gt;Corporal 下士&lt;br /&gt;Senior Aircraftman 一等兵&lt;br /&gt;Leading Aircraftman 二等兵&lt;br /&gt;Aircraftman 新兵&lt;br /&gt;Navy 海军&lt;br /&gt;Admiral of the Fleet 元帅&lt;br /&gt;Admiral 上将&lt;br /&gt;Vice Admiral 中将&lt;br /&gt;Rear Admiral 少将&lt;br /&gt;Commodore 准将&lt;br /&gt;Captain 上校&lt;br /&gt;Commander 中校&lt;br /&gt;Lieutenant Commander 少校&lt;br /&gt;Lieutenant 上尉&lt;br /&gt;Sublieutenant 中尉&lt;br /&gt;Acting Sublieutenant 少尉&lt;br /&gt;Warrant Officer (Class I) 一级准尉&lt;br /&gt;Warrant Officer (Class II) 二级准尉&lt;br /&gt;Chief Petty Officer 上士&lt;br /&gt;Petty Officer First Class 中士&lt;br /&gt;Petty Officer Second Class 下士&lt;br /&gt;Leading Seaman 一等兵&lt;br /&gt;Able Seaman 二等兵&lt;br /&gt;Ordinary Seaman 新兵&lt;br /&gt;Marine Corps 海军陆战队&lt;br /&gt;General 上将&lt;br /&gt;Lieutenant General 中将&lt;br /&gt;Major General 少将&lt;br /&gt;Brigadier 准将&lt;br /&gt;Colonel 上校&lt;br /&gt;Lieutenant Colonel 中校&lt;br /&gt;Major 少校&lt;br /&gt;Captain 上尉&lt;br /&gt;Lieutenant 中尉&lt;br /&gt;Second Lieutenant 少尉&lt;br /&gt;Warrant Officer (Class I) 一级准尉&lt;br /&gt;Warrant Officer (Class II) 二级准尉&lt;br /&gt;Colour Sergeant 上士&lt;br /&gt;Sergeant 中士&lt;br /&gt;Corporal 下士&lt;br /&gt;Marine First Class 一等兵&lt;br /&gt;Marine Second Class 二等兵&lt;br /&gt;Recruit 新兵&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Army 陆军&lt;br /&gt;General of the Army 五星上将&lt;br /&gt;General 上将&lt;br /&gt;Lieutenant General 中将&lt;br /&gt;Major General 少将&lt;br /&gt;Brigadier General 准将&lt;br /&gt;Colonel 上校&lt;br /&gt;Lieutenant Colonel 中校&lt;br /&gt;Major 少校&lt;br /&gt;Captain 上尉&lt;br /&gt;First Lieutenant 中尉&lt;br /&gt;Second Lieutenant 少尉&lt;br /&gt;Chief Warrant Officer 一级准尉&lt;br /&gt;Warrant Officer 二级准尉&lt;br /&gt;Master Sergeant 军士长&lt;br /&gt;Sergeant First Class 上士&lt;br /&gt;Sergeant 中士&lt;br /&gt;Corporal 下士&lt;br /&gt;Private First Class 一等兵&lt;br /&gt;Private 二等兵&lt;br /&gt;Basic Private 三等兵&lt;br /&gt;Air Force 空军&lt;br /&gt;General of the Air Force 五星上将&lt;br /&gt;General 上将&lt;br /&gt;Lieutenant General 中将&lt;br /&gt;Major General 少将&lt;br /&gt;Brigadier General 准将&lt;br /&gt;Colonel 上校&lt;br /&gt;Lieutenant Colonel 中校&lt;br /&gt;Mayor 少校&lt;br /&gt;Captain 上尉&lt;br /&gt;First Lieutenant 中尉&lt;br /&gt;Second Lieutenant 少尉&lt;br /&gt;Chief Warrant Officer 一级准尉&lt;br /&gt;Warrant Officer 二级准尉&lt;br /&gt;Master Sergeant 军士长&lt;br /&gt;Technical Sergeant 技术军士&lt;br /&gt;Staff Sergeant 参谋军士&lt;br /&gt;Airman First Class 一等兵&lt;br /&gt;Airman Second Class 二等兵&lt;br /&gt;Airman Third Class 三等兵&lt;br /&gt;Navy 海军&lt;br /&gt;Fleet Admiral 五星上将&lt;br /&gt;Admiral 上将&lt;br /&gt;Vice Admiral 中将&lt;br /&gt;Rear Admiral 少将&lt;br /&gt;Commodore 准将&lt;br /&gt;Captain 上校&lt;br /&gt;Commander 中校&lt;br /&gt;Lieutenant Commander 少校&lt;br /&gt;Lieutenant 上尉&lt;br /&gt;Lieutenant Junior Class 中尉&lt;br /&gt;Ensign 少尉&lt;br /&gt;Commissioned Warrant Officer 一级准尉&lt;br /&gt;Warrant Officer 二级准尉&lt;br /&gt;Chief Petty Officer 军士长&lt;br /&gt;Petty Officer First Class 上士&lt;br /&gt;Petty Officer Second Class 中士&lt;br /&gt;Petty Officer Third Class 下士&lt;br /&gt;Seaman First Class 一等兵&lt;br /&gt;Seaman Second Class 二等兵&lt;br /&gt;Apprentice Seaman 三等兵&lt;br /&gt;Marine Corps 海军陆战队&lt;br /&gt;General 上将&lt;br /&gt;Lieutenant General 中将&lt;br /&gt;Major General 少将&lt;br /&gt;Brigadier General 准将&lt;br /&gt;Colonel 上校&lt;br /&gt;Lieutenant Colonel 中校&lt;br /&gt;Major 少校&lt;br /&gt;Captain 上尉&lt;br /&gt;First Lieutenant 中尉&lt;br /&gt;Second Lieutenant 少尉&lt;br /&gt;Commissioned Warrant Officer 一级准尉&lt;br /&gt;Warrant Officer 二级准尉&lt;br /&gt;Master Sergeant 军士长&lt;br /&gt;Technical Sergeant 技术军士&lt;br /&gt;Staff Sergeant 参谋军士&lt;br /&gt;Sergeant 中士&lt;br /&gt;Corporal 下士&lt;br /&gt;Private First Class 一等兵&lt;br /&gt;Private 二等兵&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-2190202601294617797?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/2190202601294617797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=2190202601294617797' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2190202601294617797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2190202601294617797'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/09/blog-post_11.html' title='军事英语'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-6626468395670033345</id><published>2008-09-09T04:52:00.000-07:00</published><updated>2008-09-09T04:52:01.437-07:00</updated><title type='text'>WikiPedia 技术架构学习分享 - DBA notes</title><content type='html'>&lt;a href="http://www.dbanotes.net/opensource/wikipedia_arch.html"&gt;WikiPedia 技术架构学习分享 - DBA notes&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-6626468395670033345?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.dbanotes.net/opensource/wikipedia_arch.html' title='WikiPedia 技术架构学习分享 - DBA notes'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/6626468395670033345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=6626468395670033345' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6626468395670033345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6626468395670033345'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/09/wikipedia-dba-notes.html' title='WikiPedia 技术架构学习分享 - DBA notes'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-1593197127717032705</id><published>2008-09-08T08:41:00.000-07:00</published><updated>2008-09-08T09:25:36.476-07:00</updated><title type='text'>本来就没有开始，也不会有结束，只有存在</title><content type='html'>&lt;a href="http://picasaweb.google.com/lh/photo/OvctQua36e1LtEP3tlA6Bw"&gt;&lt;img src="http://lh4.ggpht.com/edwin.chain/SLu-9spK3EI/AAAAAAAAAL8/deAUg5xto7w/s144/711756457.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;生命的本质在于存在，不会有开始和结束。就好像无序与有序。时间倒成一个欺骗小孩的糖果，欺骗着生命去追求永恒。可笑，本来就是不逝的存在，再来什么永恒。思维是凌驾于生命上的另一种存在，必然在这个限定的空间里，永远存在。&lt;br /&gt;空间的本质是一种界限，界定着不同的存在。生命有自己的空间，思维也将有自己的空间，只是被界定了而已，或者是因为你在里面而已。也许时间是生命空间的的规则，但不能保证是所有空间的规则。&lt;br /&gt;思维是一种最原始的回归。回归到无序，足够大，也足够小，自己也感觉好笑，本来就不能用大小来定义，那是空间的尺度。而不是存在的规则。就好比，原子去看分子，分子去看细胞，细胞去看器官，器官去看人体，人体去看地球，地球去看太阳系，太阳系去看银河系....., 等等，这个逻辑本是是错误的，他将是一个正无穷，或者是负无穷。呵呵，就好比孩子突然告诉你，蚂蚁不但有红的，还有黑的，你当然会笑，会笑他无知。呵呵，我们也不是一样吗！&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-1593197127717032705?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/1593197127717032705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=1593197127717032705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1593197127717032705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1593197127717032705'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/09/blog-post_08.html' title='本来就没有开始，也不会有结束，只有存在'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/edwin.chain/SLu-9spK3EI/AAAAAAAAAL8/deAUg5xto7w/s72-c/711756457.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-750337316817869783</id><published>2008-09-01T00:34:00.000-07:00</published><updated>2008-09-01T03:22:12.270-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Conception'/><title type='text'>熵</title><content type='html'>&lt;span style="font-weight: bold;font-size:100%;" &gt;什么是熵&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;“熵”是德国物理学家克劳修斯在１８５０年创造的一个术语，他用它来表示任何一种能量在空间中分布的均匀程度。&lt;span style="color: rgb(51, 51, 153);"&gt;能量分布得越均匀，熵就越大&lt;span style="color: rgb(255, 0, 0);"&gt;，那对于个体来讲价值越小&lt;/span&gt;。&lt;/span&gt;如果对于我们所考虑的系统来说，能量完全均匀地分布，那么，这个系统的熵就达到最大值。&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;熵定律是科学定律之最，这是爱因斯坦的观点。&lt;span style="color: rgb(51, 51, 255);"&gt;我们知道能源与物质、信息一样，是物质世界的三个基本要素之一&lt;/span&gt;, 而在物理定律中，能量守恒定律是最重要的定 律，它表明了各种形式的能量在相互转换时，总是不生不灭保持平衡的。在等势面上,熵增原理反映了非热能与热能之间的转换具有方向性，即非热能转变为热能效 率可以100%,而热能转变成非热能时效率则小于100%(转换效率与温差成正比),这种规律制约着自然界能源的演变方向,对人类生产、生活影响巨大；在 重力场中,热流方向由体系的势焓(势能+焓)差决定,即热量自动地从高势焓区传导至低势焓区,当出现高势焓区低温和低势焓区高温时，热量自动地从低温区传 导至高温区,且不需付出其它代价,即绝对熵减过&lt;/span&gt;&lt;span style="font-size:100%;"&gt;程。显然熵所描述的能量转化规律比能量守恒定律更重要，通俗地讲：熵定律是"老板"，决定着企业的发展方向，而能量守恒定律是"出纳",负责收支平衡，所以说熵定律是自然界的最高定律。&lt;strong&gt;&lt;span style="font-weight: normal;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 153);"&gt;熵是混乱和无序的度量.熵值越大,混乱无序的程度越大.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/strong&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;熵增定律&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;br /&gt;在克劳修斯看来，在一个系统中，如果听任它自然发展，那么，&lt;span style="color: rgb(51, 51, 153);"&gt;能量差总是倾向于消除的。&lt;/span&gt;让一个热物体同一个冷物体相接触，热就会以下面所说的方式流动：热 物体将冷却，冷物体将变热，直到两个物体达到相同的温度为止。如果把两个水库连接起来，并且其中一个水库的水平面高于另一个水库，那么，万有引力就会使一 个水库的水面降低，而使另一个水面升高，直到两个水库的水面均等，而势能也取平为止。&lt;br /&gt;　　因此，克劳修斯说，自然界中的一个普遍规律是：能量密度的差异倾向于变成均等。换句话说，“&lt;span style="color: rgb(51, 51, 255);"&gt;熵将随着时间而增大&lt;/span&gt;”。&lt;br /&gt;　　对于能量从密度较高的地方向密度较低的地方流动的研究，过去主要是对于热这种能量形态进行的。因此，关于能量流动和功－能转换的科学就被称为“热力学”，这是从希腊文“热运动”一词变来的。&lt;br /&gt;　　人们早已断定，能量既不能创造，也不能消灭。这是一条最基本的定律；所以人们把它称为“热力学第一定律”。&lt;br /&gt;　　克劳修斯所提出的熵随时间而增大的说法，看来差不多也是非常基本的一条普遍规律，所以它被称为“热力学第二定律”。&lt;br /&gt;　 　举例来讲果我们能看到橡皮筋的分子结构，我们会发现它的结构在拉紧和放松的状态时是不一样的。放松的时候它的分子结构像一团乱麻交织在一起。而在把橡皮 筋拉长的时候，那些如同链状的分子就会沿着拉伸的方向比较整齐地排列起来。于是我们可以看到两种状态：一种是自然，或者自发的状态。在这种状态下结构呈“ 混乱”或 “无序”状。而另一种是在外界的拉力下规则地排列起来的状态。这种“无序” 的状态还可以从分子的扩散中观察到。用一个密封的箱子，中间放一个隔板。在隔板的左边空间注入烟。我们把隔板去掉，左边的烟就会自然 (自发)地向右边扩散，最后均匀地占满整个箱体。这种状态称为“无序”。&lt;br /&gt;&lt;br /&gt;　　在物理学里我们可以&lt;span style="color: rgb(51, 102, 255);"&gt;用“熵”的概念来描述某一种状态自发变化 的方向。&lt;/span&gt;比如把有规则排列的状态称为“低熵”而混乱的状态对应于“高熵”。而熵则是无序性的定量量度。热力学第二定律的结论是：&lt;span style="color: rgb(51, 51, 255);"&gt;“&lt;/span&gt;&lt;span style="color: rgb(102, 0, 0);"&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;一个孤立系统的熵永不减 少&lt;/span&gt;。&lt;/span&gt;”换句话说，物质世界的状态总是自发地转变成无序；“从低熵”变到“高熵”。比如，当外力去除之后，整齐排列的分子就会自然地向紊乱的状态转变；而箱 子左边的烟一定会自发地向右边扩散。这就是著名的“熵增定律”。&lt;/span&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;br /&gt;&lt;strong style="font-weight: normal;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;我们这个宇宙是熵增的宇宙.热力学第二定律,体现的就是这个特征. 生命是高度的有序,智慧是高度的有序. 在一个熵增的宇宙为什么会出现生命?会进化出智慧?&lt;span style="color: rgb(153, 51, 0);"&gt;(负熵) 热力学第二定律还揭示了, 局部的有序是可能的,但必须以其他地方更大无序为代价. &lt;/span&gt;人生存,就要能量,要食物,要以动植物的死亡(熵增)为代价. 万物生长靠太阳.动植物的有序, 又是以太阳核反应的衰竭(熵增),或其他的熵增形势为代价的. 人关在完全封闭的铅盒子里,无法以其他地方的熵增维持自己的负熵. 在这个相对封闭的系统中,熵增的法则破坏了生命的有序.&lt;span style="color: rgb(255, 0, 0);"&gt;熵增是一个相对的被动的过程，熵减是一个绝对的主动的过程。&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_i1N6dWVdzOg/SLu8zGQFQFI/AAAAAAAAAJw/TSxDdZ0vH80/s1600-h/711659338.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_i1N6dWVdzOg/SLu8zGQFQFI/AAAAAAAAAJw/TSxDdZ0vH80/s320/711659338.gif" alt="" id="BLOGGER_PHOTO_ID_5240990177413120082" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-size:100%;" &gt;&lt;strong style="font-weight: normal;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;熵是时间的箭头,在这个宇宙中是不可逆的.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255); font-weight: bold;font-size:100%;" &gt;&lt;strong style="font-weight: normal;"&gt;时间是一个相对的被动的结果！&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;strong style="font-weight: normal;"&gt;熵与时间密切相关,如果时间停止"流动",熵增也就无从谈起. "任何我们已知的物质能关住"的东西,不是别的,就是"时间". 低温关住的也是"时间". 生命是物质的有序"结构"."结构"与具体的物质不是同一个层次的概念. 就象大厦的建筑材料,和大厦的式样不是同一个层次的概念一样. 生物学已经证明,凡是到了能上网岁数的人, 身体中的原子,已经没有一个是刚出生时候的了. 但是,你还是你,我还是我,生命还在延续. 倒是死了的人,没有了新陈代谢,身体中的分子可以保留很长时间. 意识是比生命更高层次的有序.可以在生命之间传递. 说到这里,我想物质与意识的层次关系应该比较清楚了. 这里之所以将"唯物"二字加上引号. 是因为并不彻底.为什么熵减是这个宇宙的本质,还没法回答.&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;信息熵&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;　　信息熵的定义与熵的定义相似，我们说的信息熵一般是指信息论的香农理论。&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt; 在日常生活中，信息是指“消息”，“情况”等。看电视、看报纸、看书、打电话、听广播、上网浏览，乃至聊天、开会，人们都获得了“消息”。消息通过“消息传递系统”传递，各种系统可以抽象为&lt;span style="color:teal;"&gt;通讯系统模型&lt;/span&gt;。这一模型并不只限于通信系统，对于生物神经系统，遗传系统，市场的经济信号感知反馈系统，管理系统，都可以运用这个模型。&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://lh5.ggpht.com/edwin.chain/SLud6xoCuUI/AAAAAAAAAJQ/cyDNmHylSnQ/image088.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://lh5.ggpht.com/edwin.chain/SLud6xoCuUI/AAAAAAAAAJQ/cyDNmHylSnQ/image088.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;在消息传递系统中，其传输的是消息；但消息传递过程中，最普通，却容易被忽视的一点是：收信人在收到消息以前是不知道消息的具体内容的。消息的传递过程，对收信人来说，是一个从不知到知的过程，或者说是一个从不确定到确定的过程。  &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;从通信过程来看，收信者的所谓“不知”就是不知道发送端将发送描述何种运动状态的消息。例如，看天气预报前，不清楚天气的将出现何种状态； 看天气预报后，这种不确定性就大大缩小了。所以通信过程是一种从不确定到确定的过程。不确定性消除了，收信者就获得了信息。所以香农认为， &lt;span style="color:teal;"&gt;信息是不定性的减少或消除&lt;/span&gt;。即  &lt;/span&gt;&lt;/p&gt;&lt;p align="center"&gt;&lt;span style="font-size:100%;"&gt;&lt;i&gt;I = S(Q/X)-S(Q/X') &lt;/i&gt;&lt;/span&gt; &lt;/p&gt;&lt;p new="" times=""&gt;&lt;span style="font-size:100%;"&gt;I代表信息，Q 代表对某件事的疑问，S 代表不定性，X为收到消息前关于Q的知识，X' 为收到消息后关于Q 的知识。 &lt;/span&gt;&lt;/p&gt; &lt;p new="" times=""&gt;&lt;span style="font-size:100%;"&gt;如何理解信息熵和熵的关系？单从概率的表达式看，两者的定义是相似的 &lt;/span&gt;&lt;/p&gt; &lt;span style="font-size:100%;"&gt;信息熵并不是负熵，它描述的是信源 &lt;u&gt;不确定性&lt;/u&gt;而不是 &lt;u&gt;不确定性的减少&lt;/u&gt;。&lt;span style="color: rgb(51, 102, 255);"&gt;信息熵大表示信源的不确定程度较大，同样是一种 无序性。&lt;/span&gt;香农的信息概念是人们对事物了解的不确定性的减少或消除，这一定义关注的是通信中的信息问题，所以香农信息是一种与信道相关的“信息”。信源、信 道是信宿成了认识过程的不可分割的部分，主客体是不可分的；香农的概率，是主体对客体（信宿对信源）的一种先验主观认识，这本身就加入了主体的因素。因 此，作为“通信中的数学理论”，信源与信宿在信道联系下的“互信息”，才是香农的“信息”。 &lt;/span&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;信道的任务是以信号方传输和存贮信息，通过信息处理后，一般只会增加信息的损失，不可能增加原来获得的信息。这意味着，在任何信息传输系统中，最后获得的信息至多是信源所提供的信息；信息一旦丢失，如不触及信源，就不能再恢复。这就是 信息不增原理，又称 &lt;strong&gt;数据处理定理，&lt;/strong&gt;熵只是平均不确定性的描述，而不确定性的消除才是接受端获得的信息量，信息量不应该与不确定性混为一谈。&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;信息论并不是香农一个人建立的，实际上它是由好几位科学家差不多在同一时候提出来的。香农从通信编码方面，维纳从滤波理论方面，统计学家费希尔（Fisher ）从古典统计理论方面，研究了信息的理论问题。但维纳与香农在信息概念的理解上有些不同&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;信息论并不是香农一个人建立的，实际上它是由好几位科学家差不多在同一时候提出来的。香农从通信编码方面，维纳从滤波理论方面，统计学家费希尔（Fisher ）从古典统计理论方面，研究了信息的理论问题。但维纳与香农在信息概念的理解上有些不同&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-size:100%;"&gt;信息熵并不是负熵，它描述的是信源不确定性而不是不确定性的减少。信息熵大表示信源的不确定程度较大，同样是一种无序性。香农的信息概念是人们对事 物了解的不确定性的叫少或消除，实际上是“互信息”；因为这一定义关注的是通信中的信息问题，所以香农信息是一种与信道相关的“信息”。&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;变量的不确定性越大，熵也就越大，把它搞清楚所需要的信息量也就越大。 &lt;/span&gt;&lt;br /&gt;信息熵是信息论中用于度量信息量的一个概念。一个系统越是有序，信息熵就越低；&lt;br /&gt;反之，一个系统越是混乱，信息熵就越高。所以，信息熵也可以说是系统有序化程度的一个度量。&lt;span style="font-weight: bold; color: rgb(51, 51, 255);"&gt;也就是熵值低的信息，价值更高！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;信息理论的鼻祖之一Claude E. Shannon把信息（熵）定义为离散随机事件的出现概率。所谓信息熵，是一个数学上颇为抽象的概念，在这里不妨把信息熵理解成某种特定信息的出现概率。 而信息熵和热力学熵是紧密相关的。根据Charles H. Bennett对Maxwell's Demon的重新解释，对信息的销毁是一个不可逆过程，所以销毁信息是符合热力学第二定律的。&lt;span style="color: rgb(51, 51, 255);"&gt;而产生信息，则是为系统引入负（热力学）熵的过程。&lt;/span&gt;所以信息 熵的符号与热力学熵应该是相反的。一般而言，当一种信息出现概率更高的时候，表明它被传播得更广泛，或者说，被引用的程度更高。我们可以认为，从信息传播 的角度来看，&lt;span style="color: rgb(153, 0, 0);"&gt;信息熵可以表示信息的价值。&lt;/span&gt;这样子我们就有一个衡量信息价值高低的标准，可以做出关于知识流通问题的更多推论。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;信息熵的计算是非常复杂的。而具有多重前置条件的信息，更是几乎不能计算的。所以在现实世界中信息的价值大多是不能被计算出来的。但因为信息熵和热力学熵 的紧密相关性，所以信息熵是可以在衰减的过程中被测定出来的。&lt;span style="color: rgb(204, 0, 0);"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;因此信息的价值是通过信息的传递体现出来的&lt;/span&gt;。&lt;/span&gt;在没有引入附加价值（负熵）的情况下，传播得越 广、流传时间越长的信息越有价值。 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;熵在传播中是指信息的不确定性,一则高信息度的信息熵是很低的,低信息度的熵则高。&lt;/span&gt;具体说来，凡是导致随机事件集合的肯定性，组织性，法则性或有序性等增加或减少的活动过程，都可以用信息熵的改变量这个统一的标尺来度量。&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(51, 51, 255); font-weight: bold;"&gt;相对的衡量制度可以用熵，绝对的时候，他就没有价值了，然而，这个世界哪来的绝对？个体的意义在于抵抗无序，无序的意义在于消减个体，重新生成个体。哎，无名万物之始，有名万物之母啊！&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong style="font-weight: normal;"&gt;&lt;/strong&gt;&lt;strong style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-750337316817869783?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/750337316817869783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=750337316817869783' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/750337316817869783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/750337316817869783'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/09/blog-post.html' title='熵'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_i1N6dWVdzOg/SLu8zGQFQFI/AAAAAAAAAJw/TSxDdZ0vH80/s72-c/711659338.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-3684671262022017995</id><published>2008-08-28T06:39:00.000-07:00</published><updated>2008-08-28T06:40:00.706-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>这不是偶然</title><content type='html'>&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;这不是偶然&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;这是人生的必然&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;与你相遇&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;只是时间的早晚&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;你脉脉含情的双眼&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;牵动了我心中的依恋&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;今生与你相爱&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;这是上帝安排的情缘&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;span style="font-family:Times New Roman ;"&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;这不是偶然&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;这是人生的必然&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;与你牵手&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;只是时间的早晚&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;你温文而雅的笑声&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;点燃了我心底的思念&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;今生与你相恋&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;这是前世修来的情缘&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;span style="font-family:Times New Roman ;"&gt;&lt;span style="color:#000000;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;这不是偶然&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;与你相依相守&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;这是人生的必然&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;这不是偶然&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;与你相爱相恋&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#000000;"&gt;&lt;span style="font-family:宋体 ;"&gt;&lt;span style="font-size: 12pt;"&gt;这是人生的必然&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 12pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-3684671262022017995?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/3684671262022017995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=3684671262022017995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/3684671262022017995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/3684671262022017995'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/08/blog-post_28.html' title='这不是偶然'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-6024803140437281000</id><published>2008-08-24T07:36:00.001-07:00</published><updated>2008-08-24T07:37:42.356-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='music'/><title type='text'>I believe I can see the future</title><content type='html'>&lt;span style="font-family:Verdana;font-size:180%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;"Every Day Is Exactly The Same"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I believe I can see the future&lt;br /&gt;Cause I repeat the same routine&lt;br /&gt;I think I used to have a purpose&lt;br /&gt;But then again&lt;br /&gt;That might have been a dream&lt;br /&gt;I think I used to have a voice&lt;br /&gt;Now I never make a sound&lt;br /&gt;I just do what I've been told&lt;br /&gt;I really don't want them to come around&lt;br /&gt;&lt;br /&gt;Oh, no&lt;br /&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;Every day is exactly the same&lt;br /&gt;Every day is exactly the same&lt;br /&gt;There is no love here and there is no pain&lt;br /&gt;Every day is exactly the same&lt;br /&gt;&lt;br /&gt;I can feel their eyes are watching&lt;br /&gt;In case I lose myself again&lt;br /&gt;Sometimes I think I'm happy here&lt;br /&gt;Sometimes, yet I still pretend&lt;br /&gt;I can't remember how this got started&lt;br /&gt;But I can tell you exactly how it will end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm writing on a little piece of paper&lt;br /&gt;I'm hoping someday you might find&lt;br /&gt;Well I'll hide it behind something&lt;br /&gt;They won't look behind&lt;br /&gt;I'm still inside here&lt;br /&gt;A little bit comes bleeding through&lt;br /&gt;I wish this could have been any other way&lt;br /&gt;But I just don't know, I don't know what else I can do&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-6024803140437281000?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/6024803140437281000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=6024803140437281000' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6024803140437281000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6024803140437281000'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/08/i-believe-i-can-see-future_24.html' title='I believe I can see the future'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-1209117308211920009</id><published>2008-08-24T07:36:00.000-07:00</published><updated>2008-08-24T07:37:40.592-07:00</updated><title type='text'>I believe I can see the future</title><content type='html'>&lt;span style="font-family:Verdana;font-size:180%;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;"Every Day Is Exactly The Same"&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I believe I can see the future&lt;br /&gt;Cause I repeat the same routine&lt;br /&gt;I think I used to have a purpose&lt;br /&gt;But then again&lt;br /&gt;That might have been a dream&lt;br /&gt;I think I used to have a voice&lt;br /&gt;Now I never make a sound&lt;br /&gt;I just do what I've been told&lt;br /&gt;I really don't want them to come around&lt;br /&gt;&lt;br /&gt;Oh, no&lt;br /&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;Every day is exactly the same&lt;br /&gt;Every day is exactly the same&lt;br /&gt;There is no love here and there is no pain&lt;br /&gt;Every day is exactly the same&lt;br /&gt;&lt;br /&gt;I can feel their eyes are watching&lt;br /&gt;In case I lose myself again&lt;br /&gt;Sometimes I think I'm happy here&lt;br /&gt;Sometimes, yet I still pretend&lt;br /&gt;I can't remember how this got started&lt;br /&gt;But I can tell you exactly how it will end&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'm writing on a little piece of paper&lt;br /&gt;I'm hoping someday you might find&lt;br /&gt;Well I'll hide it behind something&lt;br /&gt;They won't look behind&lt;br /&gt;I'm still inside here&lt;br /&gt;A little bit comes bleeding through&lt;br /&gt;I wish this could have been any other way&lt;br /&gt;But I just don't know, I don't know what else I can do&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-1209117308211920009?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/1209117308211920009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=1209117308211920009' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1209117308211920009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1209117308211920009'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/08/i-believe-i-can-see-future.html' title='I believe I can see the future'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-5589944125423109761</id><published>2008-08-22T20:13:00.000-07:00</published><updated>2008-08-22T20:24:25.602-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Component-based Development'/><title type='text'>组件规格的写法</title><content type='html'>1 组件的操作列表，所定义的行为的&lt;strong&gt;声明部分&lt;/strong&gt;，包括每个操作的名称、参数和返回类型。通常用对象的接口（Interface）来实现这个定义&lt;br /&gt;2 组件的功能描述（&lt;span&gt;component's functionality&lt;/span&gt;）&lt;br /&gt;3 组件的使用场景（&lt;span&gt;usage scenarios&lt;/span&gt;）&lt;br /&gt;4 组件开发的历史&lt;br /&gt;5 组件的执行环境（如Apache, PHP版本等）&lt;br /&gt;6 组件的执行参数，如启动组件的必须数据&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-5589944125423109761?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/5589944125423109761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=5589944125423109761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5589944125423109761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5589944125423109761'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/08/blog-post_22.html' title='组件规格的写法'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-4299504931981349484</id><published>2008-08-22T20:05:00.000-07:00</published><updated>2008-08-22T20:10:22.576-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Object-oriented programming'/><title type='text'>Operation与method的区别</title><content type='html'>Operation中文译作操作，是指类所定义的行为的&lt;strong&gt;声明部分&lt;/strong&gt;，一般是名称、参数和返回类型。通常也叫对象的接口（Interface），该信息用于告诉对象需要它做什么。&lt;br /&gt;Method译为方法，是指上诉操作的&lt;strong&gt;实施&lt;/strong&gt;，即当调用接口时被执行的代码。&lt;br /&gt;两者的区别，简单地来说，一个是声明，一个是实现。不澄清的话很容易混淆。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-4299504931981349484?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/4299504931981349484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=4299504931981349484' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4299504931981349484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4299504931981349484'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/08/operationmethod.html' title='Operation与method的区别'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-6887951663836329938</id><published>2008-08-18T20:40:00.000-07:00</published><updated>2008-08-18T20:52:58.572-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>用“看板图”实现敏捷项目的可视化</title><content type='html'>&lt;ul&gt;&lt;li&gt;看板是代表一项要完成的任务的标签。它被用来具体化Just-In-Time的“拉”生产控制。看板图显示了在本次迭代中要完成的所有任务的当前状态。任务用卡片（便笺纸）来代表，状态则由板上分别标有“未做”、“正做”和“做完”的三个区域来代表。看板图帮助团队理解当前做得如何，以及下一步要做什么，令团队能够自我指导。&lt;/li&gt;&lt;li&gt;表的横轴代表时间线，线上的竖直区域代表发布，在区域中的卡片各自代表一项该次发布中要实现的特性。&lt;/li&gt;&lt;li&gt;仔细观察看板图，你会发现上面表达了三项主题——时间、任务和团队。下面我尝试从这三个视角来组织看板。&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-6887951663836329938?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.infoq.com/cn/articles/agile-kanban-boards' title='用“看板图”实现敏捷项目的可视化'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/6887951663836329938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=6887951663836329938' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6887951663836329938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6887951663836329938'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/08/blog-post.html' title='用“看板图”实现敏捷项目的可视化'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-4591991288111328200</id><published>2008-08-18T20:11:00.000-07:00</published><updated>2008-08-18T20:19:48.953-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='program'/><title type='text'>Techniques to handle Complexity:Abstraction,  Specification and  Problem Decomposition</title><content type='html'>In Web application development process, there are lots of technologies is good to carry out. But Specification, Abstraction and Problem Decomposition is a perfect approach to resolve the   Complexity of the software engineer. They are knowledge comes from practice.&lt;br /&gt;So, remember them, and use them every day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-4591991288111328200?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/4591991288111328200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=4591991288111328200' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4591991288111328200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4591991288111328200'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/08/techniques-to-handle.html' title='Techniques to handle Complexity:Abstraction,  Specification and  Problem Decomposition'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-4619102026561312269</id><published>2008-08-17T09:17:00.000-07:00</published><updated>2008-08-17T09:33:49.587-07:00</updated><title type='text'>Transaction Patterns: A good idea for UI Design</title><content type='html'>&lt;h3&gt;&lt;a name="screen-area"&gt;Screen Area for Admin&lt;br /&gt;&lt;/a&gt;&lt;/h3&gt;&lt;h3&gt;&lt;a name="menu-bar"&gt;Menu Bar&lt;/a&gt;&lt;/h3&gt;  This is a series of hyperlinks at the top of the screen which allow the user to navigate around different parts of the system.&lt;br /&gt;&lt;h3&gt;&lt;a name="navigation-bar"&gt;Navigation Bar&lt;/a&gt;&lt;/h3&gt;  This is a group of buttons which will allow control to be passed to functions which are in some way related to the current function.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="column-headings"&gt;Column Headings&lt;/a&gt;&lt;/h3&gt;  On screens which show multiple rows with headings above each column&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="data-area"&gt;Data Area&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;The way that data is displayed in this area depends on whether it is capable of displaying single or multiple occurrences (rows).&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="message-area"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="message-area"&gt;Message Area&lt;/a&gt;&lt;/h3&gt;  Messages related to a particular field will usually appear immediately below the field's data.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="pagination"&gt;Pagination Area&lt;/a&gt;&lt;/h3&gt;  For some screens there may be more records available than can be displayed at any one time&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="scrolling"&gt;Scrolling Area&lt;/a&gt;&lt;/h3&gt;  There may be screens in which it is possible to step through a series of selected or available items&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="action-bar"&gt;Action Bar&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;This is a group of buttons which perform some action within the current screen, such as updating the database, terminating the screen, or resetting the selection criteria. This is situated at the bottom of the screen.&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;&lt;a name="screen-area"&gt;&lt;/a&gt;&lt;/h3&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-4619102026561312269?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.tonymarston.net/php-mysql/dialog-types.html#2008-07-01' title='Transaction Patterns: A good idea for UI Design'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/4619102026561312269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=4619102026561312269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4619102026561312269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4619102026561312269'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/08/transaction-patterns-good-idea-for-ui.html' title='Transaction Patterns: A good idea for UI Design'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-8393810079059001188</id><published>2008-08-17T08:19:00.000-07:00</published><updated>2008-08-17T08:22:33.660-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Component-based Development'/><title type='text'>Component Specification</title><content type='html'>&lt;p&gt;The usual form of component behavior description may consist of some or all of the following:&lt;/p&gt;      &lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;a list of operation names &lt;/span&gt;and signatures defining the input and output parameters for each operation;&lt;/p&gt; &lt;/li&gt;&lt;li&gt;&lt;p&gt;an informal textual description of the&lt;span style="font-weight: bold;"&gt; component's functionality&lt;/span&gt;, intended usage scenarios, and history of development;&lt;/p&gt; &lt;/li&gt;&lt;li&gt;&lt;p&gt;an informal description of the component's &lt;span style="font-weight: bold;"&gt;operating context&lt;/span&gt; (e.g., hardware platforms and operating system), expected versions of installed software, and known limitations or deficiencies;&lt;/p&gt; &lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;performance and availability data&lt;/span&gt; for typical execution of the component.&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-8393810079059001188?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/8393810079059001188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=8393810079059001188' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8393810079059001188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/8393810079059001188'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/08/component-specification.html' title='Component Specification'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-2740949247984463149</id><published>2008-08-15T22:14:00.000-07:00</published><updated>2008-08-17T08:19:18.577-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Component-based Development'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Large-Scale, Component-Based Development</title><content type='html'>&lt;span&gt;&lt;span style=""&gt;CBD is an exciting new approach to application development which offers the promise of reducing cycle time for software development, and improving the quality of delivered applications.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=""&gt;&lt;p&gt;This book provides the context necessary to understand CBD and to apply it successfully to enterprise-scale solutions. CBD is a new approach to software development that will significantly affect software development practices over the coming years. As a result, the goals of this book are threefold:&lt;/p&gt;     &lt;ul&gt;&lt;li&gt;&lt;p&gt;It provides an introduction to the fundamental technologies of CBD. There are a number of different technologies that contribute to this approach. Each of these is examined in terms of how that technology has come to be, its major strengths and weaknesses, and the directions in which it is likely to evolve.&lt;/p&gt; &lt;/li&gt;&lt;li&gt;&lt;p&gt;Rather than simply enumerate individual technology advances, this book provides a holistic view of how each technology contributes to the larger goal of CBD. Readers can then put each technology advance into the context required for a more complete understanding of its relevance and impact.&lt;/p&gt; &lt;/li&gt;&lt;li&gt;&lt;p&gt;While the academic background of these technologies is discussed, the book is predominantly practical in nature. Wherever possible, the technologies are discussed with respect to their impact on current and future software engineering practices as experienced by a wide range of practicing software engineers.&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt;    &lt;p&gt;Having read this book, readers will understand the key technology advances in software engineering as they affect CBD, and therefore be in a better position to take advantage of them in their organization.&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-2740949247984463149?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.amazon.com/Large-Scale-Component-Based-Development/dp/013088720X' title='Large-Scale, Component-Based Development'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/2740949247984463149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=2740949247984463149' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2740949247984463149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2740949247984463149'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/08/large-scale-component-based-development.html' title='Large-Scale, Component-Based Development'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-1868353499681429183</id><published>2008-08-15T20:28:00.000-07:00</published><updated>2008-08-15T20:36:24.288-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Component-based Development'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Service- and Component-based Development: Using Select Perspective™ and UML</title><content type='html'>&lt;a href="http://www.selectbs.com/products/select-perspective.htm"&gt;Select Perspective&lt;/a&gt;, from Select Business Solutions, is a set of best practices for software development that has evolved over a decade into a world-class component-based development (CBD) process. It is a blend of approaches from several object-oriented methods, improved and adapted to meet the new demands of CBD and Web Services.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-1868353499681429183?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.amazon.com/Service-Component-based-Development-Select-Perspective/dp/0321159853' title='Service- and Component-based Development: Using Select Perspective™ and UML'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/1868353499681429183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=1868353499681429183' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1868353499681429183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1868353499681429183'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/08/service-and-component-based-development.html' title='Service- and Component-based Development: Using Select Perspective™ and UML'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-6754628275346567691</id><published>2008-08-10T09:22:00.000-07:00</published><updated>2008-08-10T09:27:35.894-07:00</updated><title type='text'>Db2's PureXml: a good solution for Web 2.0</title><content type='html'>I am developing web applications based on XML file recently, I fond the DB2 that support the xml data today, so,it might be a good XML database develpment tool for me.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-6754628275346567691?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/6754628275346567691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=6754628275346567691' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6754628275346567691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6754628275346567691'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/08/db2s-purexml-good-solution-for-web-20.html' title='Db2&apos;s PureXml: a good solution for Web 2.0'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-7821854783882021437</id><published>2008-08-09T18:27:00.000-07:00</published><updated>2008-08-09T19:03:10.627-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UML'/><category scheme='http://www.blogger.com/atom/ns#' term='Business Analyst'/><title type='text'>The relationship of class in UML</title><content type='html'>In theUML, a &lt;b&gt;class diagram&lt;/b&gt; is a type of &lt;b&gt;static structure diagram&lt;/b&gt; that describes the structure of a system by showing the system's &lt;a href="http://en.wikipedia.org/wiki/Class_%28computer_science%29" title="Class (computer science)"&gt;classes&lt;/a&gt;, their attributes, and the &lt;a href="http://en.wikipedia.org/wiki/Object-oriented_programming" title="Object-oriented programming"&gt;relationships&lt;/a&gt; between the classes.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 153); font-weight: bold;"&gt;Instance Level Relationships&lt;/span&gt; have Association, Aggregation and Composition. &lt;blockquote&gt;Composition is a special form of aggregation where in each part may belong to only one whole at a time. When the whole is destroyed, so are its parts.  Aggregation is  a special form of association as well that specifies a whole-part relationship between the aggregate (whole) and a component part.You state an association at the class level.Association is An association between classes indicates that objects of one class may be related to objects of the other class&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;Class Level Relationships&lt;/span&gt; have generalization. &lt;blockquote&gt;The generalization relationship is also known as the &lt;i&gt;&lt;a href="http://en.wikipedia.org/wiki/Inheritance_%28computer_science%29" title="Inheritance (computer science)"&gt;inheritance&lt;/a&gt;&lt;/i&gt; or &lt;i&gt;"is a"&lt;/i&gt; relationship. &lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 153);"&gt;General Relationship&lt;/span&gt; have dependency. &lt;blockquote&gt;A dependency  exists between two defined elements if a change to the definition of one would result in a change to the other. A dependency can be between instances, classes, or both.&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;Note:In the class diagram, there the arrow always point to the supplier.&lt;/span&gt; &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-7821854783882021437?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://en.wikipedia.org/wiki/Class_diagram' title='The relationship of class in UML'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/7821854783882021437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=7821854783882021437' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/7821854783882021437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/7821854783882021437'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/08/relationship-of-class-in-uml.html' title='The relationship of class in UML'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-3898427736584513614</id><published>2008-08-09T10:40:00.000-07:00</published><updated>2008-08-09T10:55:58.112-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Business Analyst'/><title type='text'>the different of Operation and method in OO</title><content type='html'>In OO terms ,the operation and method  have different definition. the Operation is  an aggregation of a serial procedures, and each procedure is named method. So ,as  BA, when your extract some imported characters of business logic from stakeholders, you should distinguish them.  you take each operation and ask stakeholders what procedure they use to carry it out. You document the procedure as a method.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-3898427736584513614?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/3898427736584513614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=3898427736584513614' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/3898427736584513614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/3898427736584513614'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/08/deferent-of-operation-and-method-in-oo.html' title='the different of Operation and method in OO'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-5364999100501796632</id><published>2008-08-09T09:28:00.000-07:00</published><updated>2008-08-09T09:48:28.623-07:00</updated><title type='text'>Some advices of  learning object-oriented development</title><content type='html'>OO is a complete conceptual framework that covers the entire life cycle of an IT project.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;     OO affects the way the BA analyzes and models the requirements.&lt;/li&gt;&lt;li&gt;     OO affects the way the software engineer (technical systems analyst) designs the system specifications.&lt;/li&gt;&lt;li&gt;     OO affects the way the code itself is structured: Object-Oriented Programming&lt;/li&gt;&lt;/ul&gt;So, how to improve your OO skilledness, I have some advice:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;    UML, is a good expression for your OO idea.&lt;/li&gt;&lt;li&gt;    Design pattern, the classic OO experience&lt;/li&gt;&lt;li&gt;    Refacotory, the methods how to organize your code&lt;/li&gt;&lt;li&gt;    Python or PHP5, &lt;strong style="font-weight: normal;"&gt; dynamic  object-oriented programming languages that can be used for software development. they can  realize your OO idea repidly than Java, C#, C++&lt;br /&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-5364999100501796632?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/5364999100501796632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=5364999100501796632' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5364999100501796632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5364999100501796632'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/08/some-advices-of-learning-object.html' title='Some advices of  learning object-oriented development'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-2315626937698881278</id><published>2008-08-07T22:24:00.000-07:00</published><updated>2008-08-07T22:28:35.379-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>How to Change the disk label of ext3 on ubuntu</title><content type='html'>e2label [分区设备] [卷标名]&lt;br /&gt;如果未指定卷标名,就会显示分区卷标名,如果指定了卷标名，就会将磁盘分区的卷标更改为指定的卷标名，卷标名最长为16个字符长度，超出长度将自动截断。&lt;br /&gt;示例:e2label /dev/sda1 newlabel&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-2315626937698881278?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/2315626937698881278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=2315626937698881278' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2315626937698881278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2315626937698881278'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/08/how-to-change-disk-label-of-ext3-on.html' title='How to Change the disk label of ext3 on ubuntu'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-4503039968689179788</id><published>2008-08-07T09:32:00.000-07:00</published><updated>2008-08-07T09:40:07.261-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>graphical client for manage MySQL databases</title><content type='html'>GTK+ based client for MySQL wich allow to make querys and performs administrative jobs such as manage users, process, strucutres, data dumps and more.&lt;br /&gt;sudo apt-get install gmysqlcc&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-4503039968689179788?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/4503039968689179788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=4503039968689179788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4503039968689179788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4503039968689179788'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/08/graphical-client-for-manage-mysql.html' title='graphical client for manage MySQL databases'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-1110009586906403277</id><published>2008-08-07T09:18:00.000-07:00</published><updated>2008-08-07T09:20:36.361-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>SCIM doesn't work on Ubuntu Gutsy 8.10</title><content type='html'>I have used method from: &lt;a href="https://bugs.launchpad.net/ubuntu/+bug/34282" target="_blank"&gt;https://bugs.launchpad.net/ubuntu/+bug/34282&lt;/a&gt;&lt;br /&gt;and it works for me here is small HowTo:&lt;br /&gt;&lt;br /&gt;&lt;div style="margin: 5px 20px 20px;"&gt;  &lt;div class="smallfont" style="margin-bottom: 2px;"&gt;Code:&lt;/div&gt;  &lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 50px; text-align: left;"&gt;sudo apt-get install scim-bridge&lt;br /&gt;sudo gedit /etc/X11/xinit/xinput.d/scim&lt;/pre&gt; &lt;/div&gt;them find and change&lt;br /&gt;&lt;br /&gt;&lt;div style="margin: 5px 20px 20px;"&gt;  &lt;div class="smallfont" style="margin-bottom: 2px;"&gt;Code:&lt;/div&gt;  &lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 34px; text-align: left;"&gt;GTK_IM_MODULE=xim&lt;/pre&gt; &lt;/div&gt;into&lt;br /&gt;&lt;div style="margin: 5px 20px 20px;"&gt;  &lt;div class="smallfont" style="margin-bottom: 2px;"&gt;Code:&lt;/div&gt;  &lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 34px; text-align: left;"&gt;GTK_IM_MODULE="scim-bridge"&lt;/pre&gt; &lt;/div&gt;Restart system. SCIM should works fine with all applications. Maybe you will need start SCIM manually by&lt;br /&gt;&lt;br /&gt;&lt;div style="margin: 5px 20px 20px;"&gt;  &lt;div class="smallfont" style="margin-bottom: 2px;"&gt;Code:&lt;/div&gt;  &lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 640px; height: 34px; text-align: left;"&gt;SCIM -d&lt;/pre&gt; &lt;/div&gt;   &lt;!-- / message --&gt;                                        &lt;!-- edit note --&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-1110009586906403277?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://ubuntuforums.org/showpost.php?p=3676161&amp;postcount=6' title='SCIM doesn&apos;t work on Ubuntu Gutsy 8.10'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/1110009586906403277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=1110009586906403277' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1110009586906403277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1110009586906403277'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/08/scim-doesnt-work-on-ubuntu-gutsy-810.html' title='SCIM doesn&apos;t work on Ubuntu Gutsy 8.10'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-4323626680019740550</id><published>2008-07-01T02:40:00.000-07:00</published><updated>2008-07-01T02:41:45.076-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Linux下添加硬盘、分区、格式化任务详解</title><content type='html'>给硬盘分区&lt;br /&gt;&lt;br /&gt;在slackware下有两个分区软件fdisk和cfdisk，例如我们已经有一个硬盘了，现在添加另一个硬盘到系统，那么我们根据命名规则知道这个新添加的硬盘应该是hdb。我们用下面命令给硬盘分区&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;ccid_nobr&gt; &lt;table bordercolordark="#ffffff" bordercolorlight="black" width="400" align="center" border="1" cellpadding="2" cellspacing="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td class="code" style="font-size: 9pt;" bgcolor="#e6e6e6"&gt;&lt;pre&gt;&lt;ccid_code&gt;fdisk /dev/hdb&lt;/ccid_code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/ccid_nobr&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;你也可以用cfdisk来分区，命令如下：&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;ccid_nobr&gt; &lt;table bordercolordark="#ffffff" bordercolorlight="black" width="400" align="center" border="1" cellpadding="2" cellspacing="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td class="code" style="font-size: 9pt;" bgcolor="#e6e6e6"&gt;&lt;pre&gt;&lt;ccid_code&gt;cfdisk /dev/hdb&lt;/ccid_code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/ccid_nobr&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;格式化硬盘&lt;br /&gt;&lt;br /&gt;格式化成ext3格式&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;ccid_nobr&gt; &lt;table bordercolordark="#ffffff" bordercolorlight="black" width="400" align="center" border="1" cellpadding="2" cellspacing="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td class="code" style="font-size: 9pt;" bgcolor="#e6e6e6"&gt;&lt;pre&gt;&lt;ccid_code&gt;mkfs.ext3 /dev/hdb1&lt;/ccid_code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/ccid_nobr&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;格式化成reiserfs的格式&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;ccid_nobr&gt; &lt;table bordercolordark="#ffffff" bordercolorlight="black" width="400" align="center" border="1" cellpadding="2" cellspacing="0"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td class="code" style="font-size: 9pt;" bgcolor="#e6e6e6"&gt;&lt;pre&gt;&lt;ccid_code&gt;mkfs.reiserfs /dev/hdb1&lt;/ccid_code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/ccid_nobr&gt;&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;让硬盘启动自动挂载&lt;br /&gt;&lt;br /&gt;例如挂载/dev/hdb1分区到/mnt/hd目录下&lt;br /&gt;&lt;br /&gt;用vi编辑/etc/fstab文件，加入如下内容&lt;br /&gt;&lt;br /&gt;    &lt;pre&gt;&lt;ccid_code&gt;/dev/dhb1  /mnt/hd  reiserfs defaults  1  1&lt;/ccid_code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-4323626680019740550?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/4323626680019740550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=4323626680019740550' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4323626680019740550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/4323626680019740550'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/07/linux.html' title='Linux下添加硬盘、分区、格式化任务详解'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-6265430546680288502</id><published>2008-06-30T07:32:00.000-07:00</published><updated>2008-06-30T07:33:38.898-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Uncomplicated Firewall ufw in Ubuntu</title><content type='html'>&lt;p class="line874"&gt;The Linux kernel includes the Netfilter subsystem, which is used to manipulate or decide the fate of network traffic headed into or through your server. All modern Linux firewall solutions use this system for packet filtering. &lt;span class="anchor" id="line-5"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-6"&gt;&lt;/span&gt;&lt;/p&gt;The kernel's packet filtering system would be of little use to administrators without a userspace interface to manage it. This is the purpose of iptables. When a packet reaches your server, it will be handed off to the Netfilter subsystem for acceptance, manipulation, or rejection based on the rules supplied to it from userspace via iptables. Thus, iptables is all you need to manage your firewall if you're familiar with it, but many frontends are available to simplify the task. &lt;span class="anchor" id="line-7"&gt;&lt;/span&gt;Howto: Use, setup, and Take advantage of the New Ubuntu Uncomplicated Firewall UFW&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-6265430546680288502?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://help.ubuntu.com/community/Uncomplicated_Firewall_ufw' title='Uncomplicated Firewall ufw in Ubuntu'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/6265430546680288502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=6265430546680288502' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6265430546680288502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6265430546680288502'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/06/uncomplicated-firewall-ufw-in-ubuntu.html' title='Uncomplicated Firewall ufw in Ubuntu'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-1462924413669458236</id><published>2008-06-29T18:14:00.000-07:00</published><updated>2008-11-02T18:55:39.733-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>binding multiple IP addresses on a single ethernet on Ubuntu 8.10</title><content type='html'>&lt;p&gt;&lt;span style="font-family:文鼎PL细上海宋Uni,serif;"&gt;It is essential for us to configure a multiple IP addresses on my working PC as a web application developer , so , I done, see the following&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:文鼎PL细上海宋Uni,serif;"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt; &lt;span style="color: rgb(51, 102, 255); font-weight: bold;"&gt;Working Environment &lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li style="color: rgb(0, 0, 0);"&gt;Ubuntu 8.10&lt;/li&gt;&lt;li style="color: rgb(0, 0, 0);"&gt;LAN : 192.168.1.1 - 224&lt;/li&gt;&lt;li&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;GateWay: 192.168.1.1&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="font-weight: bold;"&gt;&lt;span style="color: rgb(51, 102, 255); font-weight: bold;font-family:arial;" &gt;Todo&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="font-weight: bold;"&gt;&lt;span style="font-family:文鼎PL细上海宋Uni,serif;"&gt;1 setting the Ip is static, then &lt;/span&gt;&lt;span style="font-family:文鼎PL细上海宋Uni,serif;"&gt; &lt;/span&gt;&lt;span style="font-family:文鼎PL细上海宋Uni,serif;"&gt;reboot the network&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:文鼎PL细上海宋Uni,serif;"&gt;# sudo /etc/init.d/networking restart&lt;/span&gt;&lt;span style="font-family:文鼎PL细上海宋Uni,serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:文鼎PL细上海宋Uni,serif;"&gt;&lt;span style="font-weight: bold;"&gt;2 edit the interfaces config file&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:文鼎PL细上海宋Uni,serif;"&gt;#sudo gedit /etc/network/interfaces &lt;/span&gt;  &lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic;"&gt;you will see the following &lt;/span&gt;&lt;span style="font-family:文鼎PL细上海宋Uni,serif;"&gt; &lt;/span&gt;  &lt;/p&gt;auto lo&lt;br /&gt;iface lo inet loopback&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3 add the eth0:0 at the bottom of the file&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;iface eth0 inet static&lt;br /&gt;address 192.168.1.118&lt;br /&gt;netmask 255.255.255.0&lt;br /&gt;gateway 192.168.1.1&lt;br /&gt;auto eth0&lt;br /&gt;&lt;br /&gt;iface eth0:0 inet static&lt;br /&gt;address 192.168.1.119&lt;br /&gt;netmask 255.255.255.0&lt;br /&gt;gateway 192.168.1.1&lt;br /&gt;auto eth0:0&lt;p&gt;&lt;span style="font-weight: bold;"&gt;4 Saving it,then reboot the network again&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:文鼎PL细上海宋Uni,serif;"&gt;#sudo /etc/init.d/networking restart&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;5 testing our change&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:文鼎PL细上海宋Uni,serif;"&gt;#ping 192.168.1.118&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:文鼎PL细上海宋Uni,serif;"&gt;#ping 192.168.1.119&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-1462924413669458236?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/1462924413669458236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=1462924413669458236' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1462924413669458236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/1462924413669458236'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/06/t.html' title='binding multiple IP addresses on a single ethernet on Ubuntu 8.10'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-6921612229569848429</id><published>2008-05-11T00:55:00.000-07:00</published><updated>2008-05-11T00:57:42.059-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='program'/><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><title type='text'>读林斌博士写好代码十个秘诀</title><content type='html'>&lt;div&gt;&lt;span style="color:#660099;"&gt;软件的质量属性&lt;/span&gt;&lt;/div&gt; &lt;div&gt;鲁棒 - Solid and Robust Code&lt;br /&gt;简洁 - Maintainable and Simple Code&lt;br /&gt;高效 - Fast Code&lt;br /&gt;简短 - Small Code&lt;br /&gt;共享 - Re-usable Code&lt;br /&gt;可测试 - Testable Code&lt;br /&gt;可移植 - Portable Code&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="color:#660099;"&gt;集百家之长, 归我所用 - Follow Basic Coding Style&lt;/span&gt;&lt;br /&gt;1.代码能够清晰的表达你的思路&lt;br /&gt;2.代码应该具备自解释能力，注释代码别是单纯解释语句，这种注释毫无意义&lt;br /&gt; 3.编码的缩进和排版规范&lt;br /&gt;4.所有的函数和变量应有他人容易理解的名字&lt;br /&gt;5.将Tab键改用为4个空格字符&lt;br /&gt;6.减少单个函数的长度，控制在50-100行以内&lt;br /&gt;7.避免幻数，多使用枚举和常量的定义&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="color:#660099;"&gt;取个好名字 - Use Naming Conventions&lt;/span&gt;&lt;br /&gt;1.采用匈牙利命名法对变量进行命名&lt;br /&gt;2.名字要清晰表达含义，不要怕长&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="color:#660099;"&gt;凌波微步, 未必摔跤 - Evil goto’s? Maybe Not…&lt;/span&gt;&lt;br /&gt;1.goto的使用应该遵循原则，而不是全盘否定&lt;br /&gt;2.不用写高深晦涩的语句，不要一味追求性能忽视代码可读性&lt;br /&gt;3.模式并不是一味正确，特定问题更需要考虑反模式&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="color:#660099;"&gt;先发制人, 后发制于人- Practice Defensive Coding&lt;/span&gt;&lt;br /&gt;1.尽量保持代码的简洁和简单&lt;br /&gt;2.调用其它接口和函数时候首先对返回值进行检查&lt;br /&gt;3.避免有符号/无符号,32位/16位，被零除等误算情况&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="color:#660099;"&gt;见招拆招, 滴水不漏 - Handle The Error Cases: They Will Occur!&lt;/span&gt;&lt;br /&gt;1.通过异常处理机制来保证程序代码的健壮性&lt;br /&gt;2.异常处理中一定要注意资源的释放&lt;br /&gt;3.异常处理要关注日志的详细记录，便于后续BUG分析&lt;br /&gt;4.不用把后台编码或系统异常直接抛给用户&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="color:#660099;"&gt;熟习剑法刀术, 所向无敌 - Learn Win32 API Seriously&lt;/span&gt;&lt;br /&gt;1.Win32 API是微软平台编程根本&lt;br /&gt;2.对系统强大的公用类库的熟悉和整理将事半功倍&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="color:#660099;"&gt;双手互搏, 无坚不摧 - Test, but don’t stop there&lt;/span&gt;&lt;br /&gt;1.如果你没有进行测试，你完成的代码将仅仅是个半成品&lt;br /&gt;2.尽可能多的对自己的代码进行测试&lt;br /&gt;3.编码人员应该更专注于白盒测试和单元测试&lt;br /&gt;4.要善于使用JUnit,NUnit，PureCoverage,Compuware,NCover等测试工具&lt;br /&gt; 5.相互间的Review和走查是对代码可维护性的重要测试手段&lt;br /&gt;6.有特殊性能要求时候需要对相关功能或模块单独进行性能测试&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="color:#660099;"&gt;活用断言 - Use, don’t abuse, assertions&lt;/span&gt;&lt;br /&gt;1.断言可以很好的描述假设和不可能的情况&lt;br /&gt;2.断言对程序Debug很有用，可以尽早的发现程序问题&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="color:#660099;"&gt;草木皆兵, 不可大意 - Avoid Assumptions&lt;/span&gt;&lt;br /&gt;1.考虑到用户使用的各种场景&lt;br /&gt;2.不用假设用户会正确输入数据，要做好各种完整性和边界的检验&lt;br /&gt;3.程序中70%左右代码是为了保证这种完整性服务的，正常条件下功能可能30%代码就实现了&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="color:#660099;"&gt;最高境界, 无招胜有招 - Stop writing so much code&lt;/span&gt;&lt;br /&gt;1.一味拷贝粘贴代码就是在制造拷贝BUG，这种代码对系统无任何意义&lt;br /&gt;2.编码过程注意重用，函数级-&gt;组件级-&gt;系统级&lt;br /&gt;3.通过重构持续改进代码质量，改进自我逻辑思维&lt;/div&gt; &lt;div&gt; &lt;/div&gt; &lt;div&gt;&lt;span style="color:#660099;"&gt;最后总结下：&lt;/span&gt;&lt;br /&gt;1.养成良好编码习惯，你面试的一小段代码可能就足以展现你全部陋习。&lt;br /&gt; 2.熟练使用好各种辅助工具，但不要全部依赖工具，最主要是学习分析和设计的思考方式&lt;br /&gt; 3.注重单元测试，关注程序性能,可维护性,可测试性是编码技能提升重要手段&lt;br /&gt; 4.通过重构使编码过程形成完整闭环的反馈回路，重构能力可以很好体现自己的设计能力&lt;br /&gt; 5.养成良好习惯，形成自己的编码过程检查单，多请教老员工可能事半功倍。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-6921612229569848429?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/6921612229569848429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=6921612229569848429' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6921612229569848429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/6921612229569848429'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/05/blog-post_11.html' title='读林斌博士写好代码十个秘诀'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-2767313350999290154</id><published>2008-05-10T07:22:00.000-07:00</published><updated>2008-05-10T08:42:21.987-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='project management'/><title type='text'>Eclipse Process Framework: a new tool for porject process management</title><content type='html'>Eclipse Process Framework (EPF)提供了一个可订制的软件过程控制框架，这个框架集成了一些典型的过程控制的理念和工具，以此来支持各类工程和开发风格。&lt;br /&gt;&lt;br /&gt;&lt;div class="tpc_content"&gt;&lt;nobr&gt;&lt;b class="kgb" onclick="'javascript:window.open(" sa="l&amp;amp;ai="B5HAdbMElSN2OEZzS6wPo_aizCrHazzrlguPQA8CNtwHAuAIQAhgCIM-BhwooFDgAUMKdsxVgnbnQgZAFoAGH58n8A7IBFHd3dy5lY2xpcHNld29ybGQub3JnyAEB2gE2aHR0cDovL3d3dy5lY2xpcHNld29ybGQub3JnL2Jicy9yZWFkLWNlYy10aWQtOTc4NS5odG1sqQJQBo3lHDCDPsgC_ZKeAagDAegDvgPoA9ICiAQBkAQBmAQA&amp;amp;num="2&amp;amp;adurl="http://28.com/%3Fcomeid%3D20286&amp;amp;client="ca-pub-3578421812762734" onmouseout="'isShowGg" intextads_gglayer="_u9879_u76EE" onmouseover="'isShowAds" isshowads2 =" false;isShowGg" intextads_gglayer="_u9879_u76EE" style="border: 0px none ; margin: 0px; padding: 0px; color: rgb(0, 0, 255); font-weight: normal; text-decoration: underline;"&gt;项目&lt;/b&gt;&lt;/nobr&gt;目标：&lt;br /&gt;&lt;br /&gt;1. 为过程控制提供一个可扩展的框架和一些代表性工具。如方法和过程的分配，库管理，配置和发布一个过程&lt;br /&gt;2. 提供典型的并且可扩展的过程概念，他们能为各种软件的开发和管理过程提供迭代的、灵活的和递增的开发，并且能应用于更广泛的开发平台和应用。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-2767313350999290154?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.eclipse.org/epf/' title='Eclipse Process Framework: a new tool for porject process management'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/2767313350999290154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=2767313350999290154' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2767313350999290154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/2767313350999290154'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/05/eclipse-process-framework-new-tool-for.html' title='Eclipse Process Framework: a new tool for porject process management'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-5318544718629098739</id><published>2008-05-10T06:06:00.000-07:00</published><updated>2008-05-10T06:28:47.361-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='api'/><title type='text'>Some advices for API designing</title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;设计需要进化 &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;API的价值就在于能够帮助你完成许多功能，但请不要忘记要持续的改善它，否则它的价值就会逐渐减少。而且要根据用户的反馈信息，来改善API，或者说是 对API进行演化，另外改进API时要注意的就是在不同版本间要保持兼容性，这点至关重要，它也是一个API是否成功的重要标识之一。 如果一个功能以API的方式公布出来，那么在发布以后，它的对外接口就已经固定，无论什么情况，都不能取消，而且一定要能够按照原有的约定功能正确执行。 如果API不能在版本间保持兼容性（译注：这里应该指的是向下兼容），用户将会难以接受这样一个千变万化的API，最终的结果只能是让用户放弃使用你的 API。如果你的API被大量的软件或者模块所使用，又或者被大型软件使用，这个兼容问题也就愈加严重。&lt;br /&gt;通常情况下，你不知道用户如何使用API来完成工作。除非能够确认API的修改对用户的代码不会造成破坏，才可以考虑修改API。，反之如果API的改变 会影响用户现在的代码，就必须有一个足够的理由。只有意识到对API的修改，会严重的破坏用户现有的代码，在修改API时才会谨慎地，尽量地保证API兼 容性。修改API的时候要尽量避免以下几种情况，以免对用户的代码产生破坏：&lt;br /&gt;降低方法的可见性，如将public变成proteced，又或者将protected变成private。&lt;br /&gt;修改方法的参数，如删除一个参数、添加一个参数、或者是改变参数的类型，尤以后两者更为严重。&lt;br /&gt;当API的设计和开发到了一定阶段以后，可能会发现以前的版本已经出现了一些问题，又或者需要添加新的功能，此时设计人员完全可以重新创建新的API，并 放到新的包中，这样就可以保证那些使用老版本的用户可以很轻松的移植到新版本上，而不会产生问题。请牢记一点：添加新的功能，请不要修改原有的内容。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;API的设计目标 &lt;/span&gt;&lt;/span&gt;&lt;br /&gt; 设计一个API要达到哪位目标呢？除了兼容性以外，也从Elliotte的讨论中提出一些目标。&lt;br /&gt; &lt;span style="font-weight: bold;"&gt;API的正确性必须保证：&lt;/span&gt;&lt;br /&gt;无论用户如何调用API，都不应该产生错误。&lt;br /&gt; &lt;br /&gt; &lt;span style="font-weight: bold;"&gt;API的易用性：&lt;/span&gt;&lt;br /&gt; API必须易于使用。通常易用性一向难以评价。但是有一个办法可以有效的提高易用性，就是编写大量范例代码，并将其很好的组织在一起，从而为用户提供API参考。（译注：个人认为一个好的FAQ可以提供各种API使用的范例。）&lt;br /&gt; &lt;span style="font-weight: bold;"&gt;API必须易学： &lt;/span&gt;&lt;br /&gt; 很大程度上，API的易学和易用性是相似的，一般来说，易用也就易学。如果要使API易学，下列基本原则要遵循的：&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;API越小就容易学习； &lt;/span&gt;&lt;br /&gt;文档应该有范例；&lt;br /&gt;如果方便的话，尽可能将API与一些常用的API保持一致。例如如果要做一个资源访问的API，尽可能与J2SE中的IO使用一致，自然很容易学习。&lt;br /&gt;（译注：如果你要关闭一个资源，就象Java的File,Connection一样，使用close，而不是destroy。）&lt;br /&gt; &lt;br /&gt; &lt;span style="font-weight: bold;"&gt;API的运行速度必须够快： &lt;/span&gt;&lt;br /&gt;Elliotte也是考虑了很久，才给出这一条。但是要在保证API简单而且正确的前提下，再来考虑API的性能问题。&lt;br /&gt;&lt;br /&gt; &lt;span style="font-weight: bold;"&gt;API必须足够的小： &lt;/span&gt;&lt;br /&gt;这里所说的小不仅是指编译后代码的文件比较小，而且更重要的是运行时占用的内存要小。之所以提出最小化的概念，还有一个原因：就是因为很容易为API添加 新的内容，但是要将一个内容从API中移出就很困难，所以不要随便向API中添加内容，如果不确定一项内容，就不要将它加入到API中。通过这样一个建议 或者说是限制，可以提醒一个API设计人员更加关注API中最重要的功能，而非一些枝节的问题。&lt;br /&gt;&lt;br /&gt; 因为考虑的过于详细，功能边界也就越大，所面对的需求也就越多，因此要提供的功能和可供用户调整的功能也就更加庞大，也就是说这种方法会使得API包含很多的功能，最终就是API膨胀性的增长。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; 如果设计的API过于庞大，必然会包含了许多不必要的方法，至少有许多public的类和方法，对于大部分用户是用不到，也会占用更多的内存，并降低运行效率。这违反了通常的一个设计原则：“不要让用户为他使用不到的功能付出代价”。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;下面在设计API时的一些技巧 &lt;/span&gt;&lt;/span&gt;&lt;br /&gt; 不变类是一个很好的设计，如果一个类可以设计成不变类，就不要用可变类！如果详细了解这样设计的原因，请参见《Effective Java》的第十三条。如果没有读过这本书，很难设计出好的API。&lt;br /&gt;&lt;br /&gt; 另外字段信息应该是private的，只有static和final修饰的字段信息才能变成public，允许外部访问。这一条是一个非常基础的原则，这里提到这个原则，只是因为在早期的API设计时，有些API违反了这个原则，这里不再给出一个例子了。&lt;br /&gt;&lt;br /&gt;避免奇怪的设计。对于代码，已经有了许多约定俗成的方法了，如get/set方法，标准的异常类。即使觉得有了更好的方法，也尽量避免使用这些方 法。如果使用了一些奇怪的方法名称，这样使用API的用户必须学习新的内容，不能按照原有的习惯来理解代码，会增加学习成本，也会增加误用的可能。&lt;br /&gt;&lt;br /&gt;一个类如果不是抽象类，就应当是final类不可被继承。《Effective Java》第15章给出了足够的理由，同时也建议每个方法在默认情况下都应该是final（目前Java正好相反）（译注：这点我也赞成，觉得方法默认为 final更好，但是目前Java发展到当前情况下，已经不可能大规模的更改了，不能不说是Java语言的一个遗憾之处，C#这一点处理的更好，默认为 final，后面的留言也提到这个了）。如果一个方法可以被覆盖，一定要在文档中清楚的描述这个方法被覆盖后带来的后果，最好还能提供一些例子程序进行演 示以避免开发人员误用。&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;总结： &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;设计需要演化，否则会降低它的价值。 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;先保证API的正确性，在此基础上再追求简单和高效 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;接口并不如想像中的那么有用。 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;谨慎分包可以带来更多的价值。 &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;不要忘记阅读《Effective Java》（译注：难道作者和Josh Bloch's有分赃协议不成。）  &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-5318544718629098739?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.eclipseworld.org/bbs/read-cec-tid-383.html' title='Some advices for API designing'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/5318544718629098739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=5318544718629098739' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5318544718629098739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5318544718629098739'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/05/some-advices-for-api-designing.html' title='Some advices for API designing'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-3627861630090761334</id><published>2008-05-09T08:07:00.000-07:00</published><updated>2008-05-09T08:08:39.629-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Tunapie - Linux下的网络电台</title><content type='html'>Tunapie，一个可以自动从网络上下载网络电台和视频流媒体的列表软件。在Windows下用过WinAMP的用户应该都有印象WinAMP有一个可 以从网络更新列表，用户可以选择电台或视频流媒体。Tunapie就是WinAMP这个功能的独立软件，当然是For Linux的。&lt;br /&gt;要播放 Tunapie提供的列表里的网络电台或视频流媒体，你需要保证系统里安装有XMMS音频播放器和totem/xine/mplayer任意一个视频播放 器，这样子才可以播放Tunapie提供的列表里的资源。当然，如果你有其它类似的软件同样播放能力，你可以在Tunapie的Preferences里 选择设置播放器。&lt;br /&gt;官网：&lt;br /&gt;&lt;a href="http://tunapie.sourceforge.net/"&gt;http://tunapie.sourceforge.net/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-3627861630090761334?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/3627861630090761334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=3627861630090761334' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/3627861630090761334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/3627861630090761334'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/05/tunapie-linux.html' title='Tunapie - Linux下的网络电台'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-3695198761047807922</id><published>2008-05-09T03:17:00.000-07:00</published><updated>2008-05-09T09:07:45.105-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='api'/><title type='text'>How To Design a (module) API</title><content type='html'>A description of good design practices when design any APIs with especially closer look to the case of an API based on NetBeans infrastructure is content of this evolving document.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;What is a API?&lt;/span&gt;&lt;br /&gt;As the reason why API is used is to allow communictation between  teams and applications in order to allow separated and distributed development the answer to question &lt;q&gt;what is API&lt;/q&gt; shall include everything that influences such kind of development. &lt;p&gt; &lt;em&gt;The API is everything that another team or application can depend on&lt;/em&gt;: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;method and field signatures&lt;/b&gt; - communication between applications     is usally about calling functions and passing data structures between     each other. If there is a change in the names of the methods, in their     arguments or in structure of exchanged data, the whole program often     does not even link well, nor it can run.     &lt;p&gt;      &lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;files and their content&lt;/b&gt; - many applications read various files     and their content can influence their behaviour. Imagine application     relying on the other one to read its configuration file and modifying     its content prior to invoking the application. If the format of the file     changes or the file is completely ignored, the communication between      those applications gets broken.     &lt;p&gt;      &lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;environment variables&lt;/b&gt; - for example behaviour of &lt;code&gt;cvs&lt;/code&gt;     can be influenced by the variable &lt;code&gt;CVSEDITOR&lt;/code&gt;.     &lt;p&gt;          &lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;protocols&lt;/b&gt; - opening a socket and being prepared to interpret     streams sent there, or putting or reading a data to clipboard or during     drag and drop again establishes an API that others can depend on.     &lt;p&gt;      &lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;behaviour&lt;/b&gt; - a bit harder to grip, but important for the      separation as well is the the dynamic behaviour. How the program flow      looks like - what is the order of execution, what locks are being held     during calls, in which threads a call can happen, etc.      &lt;p&gt;      &lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;L10N messages&lt;/b&gt; -      because the localization to a certain language is usually developed and      distributed by somebody other than the person that writes the code, yet both of     them have to use the same keys (&lt;code&gt;NbBundle.getMessage     ("CTL_SomeKey")&lt;/code&gt;), there is inherently a contract between      the writer of the code and the translator - an API of sorts. &lt;/li&gt;&lt;/ul&gt;  The important thing with respect to distributed development is to be aware of possible APIs - of possible things other code can depend on. Only by identifying such aspects of own application one can develop it in a way that will not hurt cooperation with seperately developed applications.&lt;br /&gt;&lt;br /&gt;web resource:&lt;br /&gt;google video:&lt;a href="http://video.google.com/videoplay?docid=-3733345136856180693"&gt;http://video.google.com/videoplay?docid=-3733345136856180693&lt;/a&gt;&lt;br /&gt;book in amzoe &lt;a href="http://www.amazon.com/Definitive-Guide-API-Design/dp/1430209739"&gt;&lt;b class="asinTitle"&gt;&lt;span id="btAsinTitle"&gt;The Definitive Guide to API Design (The Definitive Guide) (Hardcover)&lt;/span&gt;&lt;!--aoeui--&gt;&lt;/b&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-3695198761047807922?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://openide.netbeans.org/tutorial/api-design.html' title='How To Design a (module) API'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/3695198761047807922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=3695198761047807922' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/3695198761047807922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/3695198761047807922'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/05/how-to-design-module-api.html' title='How To Design a (module) API'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-5540573237849284884</id><published>2008-05-08T23:23:00.000-07:00</published><updated>2008-05-08T23:30:38.638-07:00</updated><title type='text'>User-centered Design in web page</title><content type='html'>GUI were designed to give people control over there computers. Users now exect a level of design sophistication from all graphic interfaces, including web pages. The goal is to provide for the needs of all your potential users, adapting web technology to their expectations and never requiring readers to conform to an interface that places unnecessary obstacles in their paths.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-5540573237849284884?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://webstyleguide.com/interface/user-centered.html' title='User-centered Design in web page'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/5540573237849284884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=5540573237849284884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5540573237849284884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/5540573237849284884'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/05/user-centered-design-in-web-page.html' title='User-centered Design in web page'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4830057219783177039.post-3705893423151038306</id><published>2008-05-08T22:34:00.000-07:00</published><updated>2008-05-09T05:38:32.823-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Designing'/><title type='text'>电子商务网站的界面规划建议</title><content type='html'>相比国内的电子商务网站，国外的网站看似效果简单，实则内涵丰富，简约而不简单，是深入研究过用户心理学的产物。电子商务网站的界面规划，有几个地方要注意：&lt;br /&gt;&lt;strong&gt;1、 产品类别规划不但要精确，更要易懂。&lt;/strong&gt;&lt;br /&gt;类别划分要符合用户的阅读习惯，类别不是划分得越细越好，相反，同时展示给用户的大类不要超过10类，类别索引要循序渐进，不要让用户在查找类别上耗费太多时间。&lt;br /&gt;&lt;strong&gt;2、 页面的视觉流程要清晰 &lt;/strong&gt;&lt;br /&gt;1） 版块布局要大小适宜，重点突出。电子商务网站的版面规划需要做到——大小适宜，重点突出。要根据网站的重点，对于内容进行合理的版块规划，页面需要有视觉焦点，各版块大小分配轻重要合理，不能将版块都均衡分配。&lt;br /&gt;2）色彩搭配要协调，主次分明。网站需要有主色与辅助色，一个网站页面上同时出现的色彩不宜超过三种，色彩主次要分明。电子商务网站应该以产品展示为主，网站色彩的运用不能喧宾夺主。&lt;br /&gt;3）字体及图标的应用要节奏和谐，适合阅读。为了吸引用户在网站上停留得久些，电子商务网站不仅要有精美的产品图片，更要有适合阅读的字体。虽然网页上一般是采用默认的宋体，但是在文字的大小、间距、粗细、颜色上依然要有所考究。文字就像有节奏的音符，恰当的文字排列使得用户阅读更加舒适，不当的文字排列则降低用户的阅读兴致。节奏和谐的文字排列将增强用户的阅读时间。&lt;br /&gt;&lt;strong&gt;3、 flash的应用要慎重。&lt;/strong&gt;&lt;br /&gt;恰当的FLASH应用能为网站锦上添花但是网站上尽量不要多个FLASH同时出现，如果有，也要设定为可关闭。要让用户在无干扰的情况下浏览网站，而不能让FLASH将用户赶跑。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4830057219783177039-3705893423151038306?l=edwin-chain.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.reachnet.com.cn/' title='电子商务网站的界面规划建议'/><link rel='replies' type='application/atom+xml' href='http://edwin-chain.blogspot.com/feeds/3705893423151038306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4830057219783177039&amp;postID=3705893423151038306' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/3705893423151038306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4830057219783177039/posts/default/3705893423151038306'/><link rel='alternate' type='text/html' href='http://edwin-chain.blogspot.com/2008/05/blog-post.html' title='电子商务网站的界面规划建议'/><author><name>Edwin Chain</name><uri>http://www.blogger.com/profile/00292839595812238388</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://bp1.blogger.com/_i1N6dWVdzOg/SAwttbtiEoI/AAAAAAAAAAM/vgJnAE-0iFw/S220/90.jpg'/></author><thr:total>0</thr:total></entry></feed>
