<?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-2089194991176958505</id><updated>2011-11-28T07:38:03.958+08:00</updated><category term='mobile'/><category term='linux'/><category term='apache'/><category term='读书'/><category term='scala'/><category term='guice'/><category term='git'/><category term='java'/><category term='mysql'/><category term='杂七杂八'/><category term='VirtualBox'/><category term='samba'/><category term='gcc'/><category term='eclipse'/><category term='c++'/><category term='assembly'/><category term='subversion'/><category term='gnome'/><title type='text'>Jarod@termainal$ tail log &gt; web</title><subtitle type='html'>A developer's note</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>30</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-6082660836851081592</id><published>2011-06-04T17:42:00.000+08:00</published><updated>2011-06-04T17:42:29.249+08:00</updated><title type='text'>how to purge local DNS cache</title><content type='html'>to purge dns cache on linux, you need to restart the &lt;a href="http://linux.die.net/man/8/nscd"&gt;nscd&lt;/a&gt; daemon. for my archlinux box the command:&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;sudo /etc/rc.d/nscd restart&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;on windows system, start a cmd console and run:&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;ipconfig /flushdns&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/2089194991176958505-6082660836851081592?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/6082660836851081592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=6082660836851081592' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/6082660836851081592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/6082660836851081592'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2011/06/how-to-purge-local-dns-cache.html' title='how to purge local DNS cache'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-8967258894987981085</id><published>2011-03-15T16:23:00.000+08:00</published><updated>2011-03-15T16:23:56.808+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>git flow commands for day to day work</title><content type='html'>start a git flow project&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;# in the top dir level of project:&lt;br /&gt;git flow init .&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;to develop a new feature&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;git flow feature start login&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;push the feature branch to remote server. this can make your code safer when developing a feature that need longer than one or two day to finish:&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;git push origin feature/login&lt;br /&gt;# to list branches&lt;br /&gt;git branch -a&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;add files/dirs, then commit&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;git add .&lt;br /&gt;git commit&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;finish feature&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;git flow feature finish login&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;remove the remote branch&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;git push origin :feature/login&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/2089194991176958505-8967258894987981085?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/8967258894987981085/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=8967258894987981085' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/8967258894987981085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/8967258894987981085'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2011/03/git-flow-commands-for-day-to-day-work.html' title='git flow commands for day to day work'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-706027563574635360</id><published>2010-11-30T17:55:00.002+08:00</published><updated>2010-11-30T18:06:21.484+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='guice'/><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>[Scala] Post injection initialization in guice</title><content type='html'>&lt;p&gt;Super type for all guice managed beans which needs post-injection initialization.&lt;br /&gt;&lt;pre class="brush:scala; toolbar:false;"&gt;trait InitializingBean {&lt;br /&gt; def afterInjection()&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Define a custom matcher&lt;br /&gt;&lt;pre class="brush:scala; toolbar:false;"&gt;object Matchers {&lt;br /&gt;&lt;br /&gt;    def subtypeOf(superType: Class[_]): Matcher[_ &gt;: TypeLiteral[_]] = {&lt;br /&gt;        new SubtypeOf(TypeLiteral.get(superType))&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private class SubtypeOf(superType: TypeLiteral[_]) extends AbstractMatcher[TypeLiteral[_]] {&lt;br /&gt;&lt;br /&gt;        def matches(t: TypeLiteral[_]) = {&lt;br /&gt;            (superType == t) || (superType.getRawType().isAssignableFrom(t.getRawType()))&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In the module&lt;br /&gt;&lt;pre class="brush:scala; toolbar:false;"&gt;override protected def configure() {&lt;br /&gt;        bindListener(Matchers.subtypeOf(classOf[InitializingBean]), new TypeListener() {&lt;br /&gt;            override def hear[I](typeLiteral: TypeLiteral[I], typeEncounter: TypeEncounter[I]) {&lt;br /&gt;                typeEncounter.register(new InjectionListener[I]() {&lt;br /&gt;                    override def afterInjection(obj: I) {&lt;br /&gt;                        obj.asInstanceOf[InitializingBean].afterInjection()&lt;br /&gt;                    }&lt;br /&gt;                })&lt;br /&gt;            }&lt;br /&gt;        })&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2089194991176958505-706027563574635360?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/706027563574635360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=706027563574635360' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/706027563574635360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/706027563574635360'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2010/11/post-injection-initialization-in-guice.html' title='[Scala] Post injection initialization in guice'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-8347614569292000014</id><published>2010-10-03T10:37:00.096+08:00</published><updated>2010-10-03T17:56:01.588+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scala'/><title type='text'>Scala 2.8中的类型专门化</title><content type='html'>&lt;h2&gt;1 介绍&lt;/h2&gt;&lt;p&gt;Scala使用&lt;a href="http://en.wikipedia.org/wiki/Type_erasure" target="_blank"&gt;类型消除&lt;/a&gt;的方式编译泛型会引起不可忽视的性能损失。本质上，类型参数被替换成顶级的类型，默认为Object。涉及到基本类型的代码要通过添加相应的装箱(boxing)和拆箱(unboxing)操作来改写使得可以作用在对象上。操作装箱的基本类型值的代码可能会比手工专门化的代码慢上十倍。相应的这会导致程序员回避使用泛型集合转而手工重复地去写专门化的版本。&lt;/p&gt;&lt;p&gt;Scala 2.8增加了专门化(specialized)类型参数。专门化的类型参数指示编译器按定义产生一个泛型版本和数个专门化版本。只要调用点的静态类型信息允许，就使用最专门的版本。&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;2 语法&lt;/h2&gt;&lt;p&gt;任意方法或类的类型参数都可以用@specialized标注。程序员可选地指明类型参数要为哪些基本类型专门化。&lt;/p&gt;&lt;pre class="brush:scala; toolbar:false;"&gt;# 在[global]中添加&lt;br /&gt;class Vector[@specialized A] {&lt;br /&gt;  def apply(i: Int): A = //..&lt;br /&gt;  def map[@specialized(Int, Boolean) B](f: A =&gt; B) =&lt;br /&gt;    //..&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;上面Vector的A会为所有基本类型专门化，而方法map只有整型和布尔型的专门化版本。&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;3 实现&lt;/h2&gt;&lt;p&gt;Scala的专门化是在定义级(definition-site)预先进行的——编译器为所有或用户指定的基本类型派生专门化的定义。Scala的基本类型包含：Unit, Boolean, Byte, Short, Char, Int, Long, Float, Double。专门化在定义级进行是为了可以分开编译。如果专门化只在泛型类初始化到某个基本类型时进行，这是可能会遇到原来的类定义不在同一次运行中编译（这可能很常见，因为我们预期专门化将在类库中扮演重要角色），这样编译器就不能为可能获益的方法派生专门化的实现。&lt;/p&gt;&lt;p&gt;一个类定义可能会产生一套专门化的类和一个泛型(消除的)类。每一个专门化的类通过用特定类型的组合和继承(extends)泛型类从原来的定义派生。Scala中专门化的关键点是程序包含专门化的和消除的类定义。为了他们的共存，有必要让专门化的实例可以替换他们对应的泛型代码。&lt;/p&gt;&lt;p&gt;考虑下面的例子：&lt;/p&gt;&lt;pre class="brush:scala; toolbar:false;"&gt;class RefCell[@specialized(Int) T] {&lt;br /&gt;  private var value: T = _&lt;br /&gt;&lt;br /&gt;  def get: T = x&lt;br /&gt;  def put(x: T) =&lt;br /&gt;    value = x&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Scalac生成一个额外的类扩展自RefCell[Int]，这个类持有RefCell专门化版本的成员。它也覆盖了所有泛型成员定义，代理给他们的专门化定义。这个代码路径需要装箱，等价于使用消除，也是用于确认当使用泛型接口的代码作用在一个专门化实例时行为正确性所必须的。当泛型代码在更多类型信息的地方中使用并存在一个专门化的版本，编译器会把方法调用重些并把类实例化成专门化的版本。这个代码路径是保证可以避免装箱。&lt;/p&gt;&lt;pre class="brush:scala; toolbar:false;"&gt;class RefCell$mcI$sp extends RefCell/*[Int]*/ {&lt;br /&gt;  protected var value$mcI$sp: Int = _;&lt;br /&gt;&lt;br /&gt;  protected override def value: AnyRef =&lt;br /&gt;    value$mcI$ // boxing happens here&lt;br /&gt;&lt;br /&gt;  protected override def value_=(x$1: Int): Unit =&lt;br /&gt;    value$mcI$sp = x$1&lt;br /&gt;&lt;br /&gt;  override def get: AnyRef =&lt;br /&gt;    get$mcI$sp; // boxing happens here&lt;br /&gt;  override def get$mcI$sp: Int = value$mcI$sp;&lt;br /&gt;&lt;br /&gt;  override def put(x: AnyRef): Unit =&lt;br /&gt;    put$mcI$sp(x); // boxing happens here&lt;br /&gt;  override def put$mcI$sp(x: Int): Unit = value$mcI$sp = x&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;上面的类为RefCell的Int专门化了。它有一个专门的整型字段用于保存当前值并覆盖了父类字段(value)的访问器以使用自己的字段。除了这个字段，涉及到专门化类型参数的方法也被覆盖了。他们重写成用Int代替T的引用和尽可能使用更专门的字段或方法。&lt;/p&gt;&lt;p&gt;假设一个这个类的用户用这个类处理整数：&lt;/p&gt;&lt;pre class="brush:scala; toolbar:false;"&gt;object Test extends Application {&lt;br /&gt;  val ref = new RefCell[Int]&lt;br /&gt;  ref.put(10)&lt;br /&gt;  println(ref.get)&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Scala的编译器会把RefCell[Int]的实例替换成正确的专门化版本，这样对put和get的调用就不会进行装箱。&lt;/p&gt;&lt;br /&gt;&lt;h2&gt;3.1 成员专门化&lt;/h2&gt;&lt;p&gt;并非类的所有成员都会专门化。现在，一个成员m只有当m的类型包含最少一个专门化的暴露的类型参数或专门化的暴露的类型参数数组。例如：&lt;/p&gt;&lt;pre class="brush:scala; toolbar:false;"&gt;abstract class Foo[@specialized T, U] {&lt;br /&gt;  // the following members are specialized&lt;br /&gt;  def foo1(x: T): U&lt;br /&gt;  def foo2(x: Int): Array[T]&lt;br /&gt;  val a: Array[T]&lt;br /&gt;&lt;br /&gt;  // the following members are not specialized&lt;br /&gt;  def bar1(x: U): Unit&lt;br /&gt;  def bar2(x: List[T]): U&lt;br /&gt;  val b: List[T]&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;原文: &lt;a href="http://www.scala-lang.org/sid/9"&gt;Scala Specialization&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2089194991176958505-8347614569292000014?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/8347614569292000014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=8347614569292000014' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/8347614569292000014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/8347614569292000014'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2010/10/type-specialization-in-scala-28.html' title='Scala 2.8中的类型专门化'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-265283949180405988</id><published>2010-10-02T17:12:00.001+08:00</published><updated>2010-10-02T17:15:57.017+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='samba'/><title type='text'>Samba共享中的软链接目录访问无权限</title><content type='html'>这是由于&lt;a href="http://www.samba.org/samba/news/symlink_attack.html"&gt;安全问题&lt;/a&gt;，新版本的Samba把某些默认设置改了。不需担心安全问题的同学按下面修改一下配置就可以了：&lt;br /&gt;&lt;br /&gt;编辑文件/etc/samba/smb.conf&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;# 在[global]中添加&lt;br /&gt;follow symlinks = yes&lt;br /&gt;wide links = yes&lt;br /&gt;unix extensions = no&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;然后重启一下Samba使配置生效。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2089194991176958505-265283949180405988?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/265283949180405988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=265283949180405988' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/265283949180405988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/265283949180405988'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2010/10/samba.html' title='Samba共享中的软链接目录访问无权限'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-2044524679006595909</id><published>2010-08-20T17:57:00.000+08:00</published><updated>2010-08-20T17:57:21.706+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>[Java] 数据库访问遇到灵异事件先怀疑一下是否AutoCommit为false</title><content type='html'>手头的某项目原本是只使用某ORM框架做数据访问的。由于直接用到SQL的地方很多，后面做了个JDBC封装，ORM+JDBC共存。 当时是ORM，JDBC各自用自己的数据库连接池，一直相安无事。 知道后来某天闲来无事，“重构”了一下，让ORM，JDBC都从同一个连接池获取链接。这时还是“相安无事”的（没发现问题）。&lt;br /&gt;然后又过了一段时间（刚好很长时间没更新版本给用户），项目修改了无数地方。某天，直到用户投诉，才发现了程序出现灵异现象。从数据库查出来的数据乱七八糟，更新，删除等操作也时灵时不灵。但幸好有一个比较明显的线索，做更新操作后有时会出现：&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction&lt;br /&gt;&lt;/pre&gt;最终找到问题是由于ORM框架拿到连接后会把AutoCommit置为false，用完后把连接归还给连接池的时候保留了AutoCommit值。而JDBC部分的代码都是一步操作，不需要事务，都假设AutoCommit为true，自然不会做commit操作。&lt;br /&gt;现在JDBC代码从池中获取连接后都把AutoCommit设一下true就没事了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2089194991176958505-2044524679006595909?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/2044524679006595909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=2044524679006595909' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/2044524679006595909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/2044524679006595909'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2010/08/java-autocommitfalse.html' title='[Java] 数据库访问遇到灵异事件先怀疑一下是否AutoCommit为false'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-8284867015714996533</id><published>2010-07-22T09:06:00.000+08:00</published><updated>2010-07-22T09:06:29.362+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>回滚 git add 操作</title><content type='html'>一不小心一个git add . 把一大堆不想提交的文件都添加到git了怎么办，不用怕，一个命令搞定：&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;$ git reset .&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;如果是刚建的git库，就没那么顺利了&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;$ git init .&lt;br /&gt;$ git add .&lt;br /&gt;$ git reset .&lt;br /&gt;fatal: Failed to resolve 'HEAD' as a valid ref.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;这时就只能用rm命令了&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;$ git rm -r --cached .&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/2089194991176958505-8284867015714996533?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/8284867015714996533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=8284867015714996533' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/8284867015714996533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/8284867015714996533'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2010/07/git-add.html' title='回滚 git add 操作'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-3312050264446125022</id><published>2010-06-14T22:33:00.001+08:00</published><updated>2010-07-15T18:11:23.249+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><title type='text'>我中过招的C++陷阱</title><content type='html'>&lt;h3&gt;1.遍历stl容器iterator时移除元素&lt;/h3&gt;the WRONG way:&lt;br /&gt;&lt;pre class="brush:cpp; toolbar:false;"&gt;map_type mymap;&lt;br /&gt;map_type::iterator it;&lt;br /&gt;for (it=mymap.begin(); it!=mymap.end(); it++) {&lt;br /&gt;    if (condition)&lt;br /&gt;        mymap.erase(it); // runtime error&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;the RIGHT way:&lt;br /&gt;&lt;pre class="brush:cpp; toolbar:false;"&gt;map_type mymap;&lt;br /&gt;map_type::iterator it;&lt;br /&gt;for (it=mymap.begin(); it!=mymap.end();) {&lt;br /&gt;    if (condition)&lt;br /&gt;        mymap.erase(it++); &lt;br /&gt;    else&lt;br /&gt;        it++;&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/2089194991176958505-3312050264446125022?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/3312050264446125022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=3312050264446125022' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/3312050264446125022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/3312050264446125022'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2010/06/c.html' title='我中过招的C++陷阱'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-1910601797264884969</id><published>2010-05-21T10:30:00.003+08:00</published><updated>2010-10-27T16:52:10.741+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>eclipse优化</title><content type='html'>&lt;pre&gt;ubuntu 10.10 64bit&lt;br /&gt;4G RAM&lt;br /&gt;eclipse 3.6.1&lt;br /&gt;&lt;/pre&gt;用这个配置后有能感觉到的改进&lt;br /&gt;&lt;br /&gt;eclipse.ini:&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;-vm&lt;br /&gt;/srv/wlzb/jdk16/jre/lib/amd64/server/libjvm.so&lt;br /&gt;-vmargs&lt;br /&gt;-server&lt;br /&gt;-Dosgi.requiredJavaVersion=1.6&lt;br /&gt;-XX:MaxPermSize=192m&lt;br /&gt;-XX:PermSize=160m&lt;br /&gt;-Xms1280m&lt;br /&gt;-Xmx1280m&lt;br /&gt;-Xmn512m&lt;br /&gt;-Xss256k&lt;br /&gt;-XX:+DoEscapeAnalysis&lt;br /&gt;-XX:MaxGCPauseMillis=100&lt;br /&gt;-XX:+UseCompressedOops&lt;br /&gt;-XX:+UnlockExperimentalVMOptions&lt;br /&gt;-XX:+UseG1GC&lt;br /&gt;-XX:+UseFastAccessorMethods&lt;br /&gt;-XX:+PrintGCTimeStamps&lt;br /&gt;-XX:+PrintGCDetails&lt;br /&gt;-verbose:gc&lt;br /&gt;-Xloggc:gc.log&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/2089194991176958505-1910601797264884969?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/1910601797264884969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=1910601797264884969' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/1910601797264884969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/1910601797264884969'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2010/05/eclipse.html' title='eclipse优化'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-5225758381717352222</id><published>2010-05-14T17:34:00.002+08:00</published><updated>2010-07-15T18:13:10.295+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VirtualBox'/><title type='text'>VirtualBox</title><content type='html'>&lt;h3&gt;Use VBoxHeadless to run a windows guest by importing exists *.vdi&lt;/h3&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;# copy exists vdi to ~/.VirtualBox/HardDisks&lt;br /&gt;# create a VM call WinXP&lt;br /&gt;VBoxManage createvm -name "WinXP" -register&lt;br /&gt;&lt;br /&gt;# set memory and network&lt;br /&gt;VBoxManage modifyvm 'WinXP' -memory "256M" --acpi on --nic1 bridged --bridgeadapter1 eth0&lt;br /&gt;&lt;br /&gt;# add a ide controller&lt;br /&gt;VBoxManage storagectl WinXP --name "Storage Controller" --add ide --controller PIIX4&lt;br /&gt;&lt;br /&gt;# attach the vdi to VM&lt;br /&gt;VBoxManage openmedium disk ~/.VirtualBox/HardDisks/hda.vdi&lt;br /&gt;VBoxManage storageattach WinXP --storagectl "Storage Controller" --port 0 --device 0 --type hdd --medium ~/.VirtualBox/HardDisks/hda.vdi&lt;br /&gt;&lt;br /&gt;# run the VM and serve vrdp on port 1234&lt;br /&gt;VBoxHeadless --startvm "WinXP" --vrdp on --vrdpport 1234&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/2089194991176958505-5225758381717352222?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/5225758381717352222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=5225758381717352222' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/5225758381717352222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/5225758381717352222'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2010/05/virtualbox.html' title='VirtualBox'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-5717045438765720745</id><published>2009-08-02T10:25:00.003+08:00</published><updated>2010-07-15T18:16:58.429+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>open with emacs in nautilus</title><content type='html'>1. create or edit /usr/share/applications/emacs.desktop&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;[Desktop Entry]&lt;br /&gt;Name=Emacs&lt;br /&gt;GenericName=Text Editor&lt;br /&gt;Comment=Edit text&lt;br /&gt;MimeType=text/english;text/plain;text/x-makefile;text/x-c++hdr;text/x-c++src;text/x-chdr;text/x-csrc;text/x-java;text/x-moc;text/x-pascal;text/x-tcl;text/x-tex;application/x-shellscript;text/x-c;text/x-c++;&lt;br /&gt;Exec=emacsclient -n -a emacs %F&lt;br /&gt;Icon=emacs&lt;br /&gt;Type=Application&lt;br /&gt;Terminal=false&lt;br /&gt;Categories=Development;TextEditor;&lt;br /&gt;StartupWMClass=Emacs&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;the most important item is "Exec=emacsclient -n -a emacs %F". The command attempt using a exist emacs server or start a new instance when no emacs server available.&lt;br /&gt;&lt;br /&gt;2. edit /usr/share/applications/mimeinfo.cache to associate mime type to emacs. Or change associations in nautilus`s properties editor.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2089194991176958505-5717045438765720745?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/5717045438765720745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=5717045438765720745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/5717045438765720745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/5717045438765720745'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2009/08/open-with-emacs-in-nautilus.html' title='open with emacs in nautilus'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-6524523273634956746</id><published>2009-07-10T09:32:00.009+08:00</published><updated>2011-06-04T18:12:55.477+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>useful linux commands</title><content type='html'>&lt;h3&gt;Bind() failed: Address already in use&lt;/h3&gt;&lt;br /&gt;Now what. &lt;a href="http://en.wikipedia.org/wiki/Lsof"&gt;&lt;span style="font-style: italic;"&gt;lsof&lt;/span&gt;&lt;/a&gt; come to help.&lt;br /&gt;&lt;pre class="brush:bash;toolbar:false;gutter:false;"&gt;$sudo lsof -i TCP:3306 | grep LISTEN&lt;br /&gt;mysqld   1057 mysql   11u  IPv4  299343111       TCP *:mysql (LISTEN)&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;or&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;gutter:false;"&gt;$sudo netstat -lnput&lt;br /&gt;Active Internet connections (only servers)&lt;br /&gt;Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   &lt;br /&gt;tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1057/mldonkey&lt;br /&gt;...       &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;kick another user out of my system &lt;/h3&gt;&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;gutter:false;"&gt;$who&lt;br /&gt;jarod    pts/0        2009-07-10 08:14 (111.111.1111.111)&lt;br /&gt;badguy  pts/4        2009-07-10 08:56 (112.112.112.112)&lt;br /&gt;&lt;br /&gt;$pkill -9 -t pts/4&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;set process affinity without programming&lt;/h3&gt;&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;gutter:false;"&gt;# run myprog and bind to first cpu core&lt;br /&gt;$taskset -c 0 myprog&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;cpulimit&lt;/h3&gt;&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;gutter:false;"&gt;# limit cpu usage by pid&lt;br /&gt;$cpulimit --pid 1234 --limit 20&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/2089194991176958505-6524523273634956746?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/6524523273634956746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=6524523273634956746' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/6524523273634956746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/6524523273634956746'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2009/07/useful-linux-commands.html' title='useful linux commands'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-1287261972195551374</id><published>2009-05-06T18:12:00.006+08:00</published><updated>2009-05-09T09:49:56.602+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>MySQL backup with Xtrabackup 0.6</title><content type='html'>&lt;h2&gt;用Xtrabackup备份MySQL&lt;/h2&gt;  &lt;p class="first"&gt;文档版本: 0.6.2, 更新时间: Wednesday, May 09 2009 9:50&lt;/p&gt;  &lt;h3&gt;Xtrabackup是什么&lt;/h3&gt;  &lt;p class="first"&gt;Xtrabackup是percona公司（mysqlperformanceblog）的开源项目，目的是实现类似innodb官方的热备份工具InnoDB Hot Backup的功能。但其实Xtrabackup还提供了额外的功能（但也有没实现的功能）。 Xtrabackup中包含两个工具：&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;xtrabackup - 用于热备份innodb, xtradb表的工具，不能备份其他表。&lt;/li&gt;&lt;li&gt;innobackupex - 对xtrabackup封装的perl脚本，提供了myisam表备份的能力。&lt;/li&gt;&lt;/ul&gt;   &lt;h3&gt;Xtrabackup可以做什么&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;在线(热)备份整个库的InnoDB, XtraDB表&lt;/li&gt;&lt;li&gt;在xtrabackup的上一次整库备份基础上做增量备份（innodb only）&lt;/li&gt;&lt;li&gt;以流的形式产生备份，可以直接保存到远程机器上（本机硬盘空间不足时很有用）&lt;/li&gt;&lt;/ul&gt;   &lt;h3&gt;Xtrabackup如何工作的&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;xtrabackup - 具体原理有待研究。。。&lt;/li&gt;&lt;li&gt;innobackupex整库备份  &lt;ol&gt;&lt;li&gt;调用xtrabackup对innodb表空间文件（这一瞬间的映像Time1）备份，而在这个innodb表备份期间数据库是不加锁的，外部可 以继续往库里增减数据（这才能叫热备份）。而在Time1和Time2这两个时间点之间的改动由一个线程不断地扫innodb log获得(ChangeSet1)。&lt;/li&gt;&lt;li&gt;锁所有库。&lt;/li&gt;&lt;li&gt;以直接拷贝的方式备份frm,MYD,MYI,MRG,TRG,TRN,opt格式的文件。&lt;/li&gt;&lt;li&gt;步骤3中的数据备份完毕时(Time2)，停止扫innodb log的线程，把ChangeSet1的数据拷贝到备份中。&lt;/li&gt;&lt;li&gt;解锁所有库。&lt;/li&gt;&lt;li&gt;终止挂起，备份完毕。&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;   &lt;h3&gt;注意要点&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;根据innobackupex的原理可知它不是真正的热备份，MyISAM表越少越小就越有利。要利用Xtrabackup的好处就尽量用innodb表。&lt;/li&gt;&lt;li&gt;还原备份前关闭mysql服务；还原备份后检查数据文件权限是否正确。&lt;/li&gt;&lt;li&gt;性能：备份一个数据目录总大小5.6G，其中ibdata 2G，总时间4分钟，锁表时间2.5分钟。如果用mysqldump做这个库的备份锁表时间是5-8倍。&lt;/li&gt;&lt;/ul&gt;   &lt;h3&gt;操作&lt;/h3&gt;  &lt;h4&gt;整库备份，恢复（含myisam)&lt;/h4&gt;  &lt;pre class="src"&gt;&lt;span style="color: rgb(184, 184, 184); font-weight: bold;"&gt;#### &lt;/span&gt;&lt;span style="color: rgb(184, 184, 184); font-weight: bold;"&gt;备份&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(184, 184, 184); font-weight: bold;"&gt;# &lt;/span&gt;&lt;span style="color: rgb(184, 184, 184); font-weight: bold;"&gt;为了减少备份对服务的影响，可加参数--throttle=&lt;每秒IO次数&gt; / --sleep=&lt;微秒&gt;限制IO&lt;br /&gt;&lt;/span&gt;innobackupex --user=root /data/backup/mysql&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(184, 184, 184); font-weight: bold;"&gt;#### &lt;/span&gt;&lt;span style="color: rgb(184, 184, 184); font-weight: bold;"&gt;恢复&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(184, 184, 184); font-weight: bold;"&gt;# &lt;/span&gt;&lt;span style="color: rgb(184, 184, 184); font-weight: bold;"&gt;后面的日期目录是备份时由innobackupex创建的&lt;br /&gt;&lt;/span&gt;innobackupex --copy-back --defaults-file=/etc/my.cnf /data/backup/mysql/2009-05-06_17-44-37&lt;br /&gt;&lt;/pre&gt;   &lt;h4&gt;备份时打包&lt;/h4&gt;  &lt;pre class="src"&gt;&lt;span style="color: rgb(184, 184, 184); font-weight: bold;"&gt;#### &lt;/span&gt;&lt;span style="color: rgb(184, 184, 184); font-weight: bold;"&gt;备份&lt;br /&gt;&lt;/span&gt;innobackupex --user=root --stream=tar ./ | gzip - &gt; /data/backup/mysql/latest.tar.gz&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(184, 184, 184); font-weight: bold;"&gt;#### &lt;/span&gt;&lt;span style="color: rgb(184, 184, 184); font-weight: bold;"&gt;恢复&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(245, 222, 179); font-weight: bold;"&gt;cd&lt;/span&gt; /data/backup/mysql&lt;br /&gt;mkdir tmp&lt;br /&gt;tar xfzi latest.tar.gz -Ctmp&lt;br /&gt;innobackupex --copy-back --defaults-file=/etc/my.cnf /data/backup/mysql/tmp&lt;br /&gt;&lt;/pre&gt;    &lt;h4&gt;直接备份到远程机器&lt;/h4&gt;  &lt;pre class="src"&gt;innobackupex --stream=tar ./  | ssh user@host cat &lt;span style="color: rgb(255, 99, 71);"&gt;"&gt;"&lt;/span&gt;  backup.tar&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/2089194991176958505-1287261972195551374?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/1287261972195551374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=1287261972195551374' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/1287261972195551374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/1287261972195551374'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2009/05/mysql-backup-with-xtrabackup-06.html' title='MySQL backup with Xtrabackup 0.6'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-6306536054466623851</id><published>2009-04-22T17:53:00.005+08:00</published><updated>2009-04-22T21:08:13.120+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>git notes</title><content type='html'>&lt;h3&gt;create remote branch&lt;/h3&gt;&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false; gutter:false;"&gt;&lt;br /&gt;# create local branch&lt;br /&gt;git branch my_branch&lt;br /&gt;# push(create) remote branch&lt;br /&gt;git push origin my_branch&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;delete remote branch&lt;/h3&gt;&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false; gutter:false;"&gt;&lt;br /&gt;# the local branch will be delete too&lt;br /&gt;git push origin :my_branch&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;delete commits&lt;/h3&gt;&lt;br /&gt;e.g. to delete H, I commit from the tree&lt;br /&gt;before: E---F---G---H---I---J---HEAD&lt;br /&gt;after:  E---F---G---J---HEAD&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false; gutter:false;"&gt;&lt;br /&gt;# this will open the git default editor, delete H, I lines from the text&lt;br /&gt;git rebase -i HEAD~5&lt;br /&gt;# push to remote repository&lt;br /&gt;git push --force&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/2089194991176958505-6306536054466623851?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/6306536054466623851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=6306536054466623851' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/6306536054466623851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/6306536054466623851'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2009/04/git-notes.html' title='git notes'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-8379419828153177693</id><published>2009-03-13T15:06:00.001+08:00</published><updated>2009-03-13T15:09:18.462+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mobile'/><title type='text'>BlackBerry 8700快捷键（转载）</title><content type='html'>刚入手1台8700g，记记快捷键&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 18px;"&gt;&lt;span style="font-size: 18px;"&gt;首先进入打电话的界面,也就是通话记录的界面,然后按下转轮,选择&lt;span style="color:#009999;"&gt;选项&lt;/span&gt;,然后进去里面的&lt;span style="color:#0000ff;"&gt;常规选项&lt;/span&gt;,把转轮拨到&lt;span style="color:#660066;"&gt;从主页屏幕拨号&lt;/span&gt;,修改成&lt;span style="color:#009999;"&gt;否&lt;/span&gt;,然后按转轮保存出来就可以拉!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;R闹钟. U计算器. B浏览器.      O选项. A电话本. S搜索.         D记事本. F铃声配置. K锁.      M查看短信. C编写短信.         V已保存短信.  L日历.T任务任何状态下按alt+esc可以切换程序&lt;br /&gt;长按拨号键，进入通讯录&lt;br /&gt;长按1为进入语音信箱。&lt;br /&gt;通话状态下，按ESC可以选择运行其它程序，通话不受影响短消息部分&lt;br /&gt;答复：R    转发：F&lt;br /&gt;搜索消息：S&lt;br /&gt;向下翻页：空格&lt;br /&gt;向上翻页：Num+空格&lt;br /&gt;查看已发送消息或电话：alt+O&lt;br /&gt;查看已收到消息或电话：alt+I&lt;br /&gt;打字翻页：alt+滚轮&lt;br /&gt;往回找汉字：alt+空格  alt+滚轮&lt;br /&gt;在输入状态下：长按一个字母会从小写切换到大写&lt;br /&gt;M键然后C键进入联系&lt;br /&gt;浏览器部分（bb自带浏览器）&lt;br /&gt;输入网址：G&lt;br /&gt;转至主页：H&lt;br /&gt;打开书签：K&lt;br /&gt;添加书签：A &lt;br /&gt;刷新页面：R&lt;br /&gt;搜索关键词：F&lt;br /&gt;搜索结果：V&lt;br /&gt;查看历史记录：I&lt;br /&gt;查看、复制 或发送链接地址：l&lt;br /&gt;查看、复制或发送页面地址：P&lt;br /&gt;全屏切换：U&lt;br /&gt;回桌面：D&lt;br /&gt;日历部分&lt;br /&gt;首先将启用快速输入字段设置为否&lt;br /&gt;更改为日程视图：D&lt;br /&gt;更改为周程视图：W&lt;br /&gt;更改为月程视图：M&lt;br /&gt;要移至当前日期：T&lt;br /&gt;要移至特定日期：G&lt;br /&gt;要创建约会：C&lt;br /&gt;要移至下一个日月周：空格&lt;br /&gt;要移至上一个日月周：Num+空格&lt;br /&gt;日、周、月、事件四中浏览方式，对应按DWMA四个快捷键媒体图片状态下&lt;br /&gt;i放大，O缩小，P向上翻，N向下翻，R 旋转&lt;br /&gt;电子书4&lt;br /&gt;P上翻页，空格下翻页，H更换背景颜色，alt+O字体变大，alt+I 字体变小。&lt;/span&gt;            &lt;br /&gt;&lt;br /&gt;来源： http://bbs1.paipai.com/g40011c5i33782s0p0.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2089194991176958505-8379419828153177693?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/8379419828153177693/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=8379419828153177693' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/8379419828153177693'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/8379419828153177693'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2009/03/blackberry-8700.html' title='BlackBerry 8700快捷键（转载）'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-7802365805396524764</id><published>2009-03-05T15:13:00.004+08:00</published><updated>2010-07-15T18:15:56.919+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Change the linux hostname</title><content type='html'>1.to change the hostname immediately and tempprarily(this make sense for a running server), use the hostname command. e.g. change hostname to jarod.myhost.com&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;# hostname jarod.myhost.com&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;to check it:&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;$ hostname&lt;br /&gt;jarod.myhost.com&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;2.to keep the new hostname after a machine reboot we need to edit configuration files.&lt;br /&gt;append this line to /etc/hosts&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;127.0.0.1 jarod.myhost.com&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;and edit /etc/sysconfig/network(CentOS), change the item HOSTNAME:&lt;br /&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;HOSTNAME=jarod.myhost.com&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The HOSTNAME item maybe in different configuration file between linux distributions. For example, in Archlinux, it's in file /etc/rc.conf.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2089194991176958505-7802365805396524764?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/7802365805396524764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=7802365805396524764' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/7802365805396524764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/7802365805396524764'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2009/03/change-linux-hostname.html' title='Change the linux hostname'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-6824680595641364848</id><published>2008-12-30T17:05:00.003+08:00</published><updated>2008-12-30T17:12:28.067+08:00</updated><title type='text'>免费的Python电子书</title><content type='html'>《A Byte of Python》 - http://www.swaroopch.com/notes/Python&lt;br /&gt;有2.x和3.0两个版本&lt;br /&gt;&lt;br /&gt;《Dive into Python》 - http://diveintopython.org/&lt;br /&gt;比较出名但又比较老的一本书&lt;br /&gt;&lt;br /&gt;《PLEAC-Python 》- http://pleac.sourceforge.net/pleac_python/index.html&lt;br /&gt;cookbook形式的书籍&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2089194991176958505-6824680595641364848?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/6824680595641364848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=6824680595641364848' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/6824680595641364848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/6824680595641364848'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2008/12/python.html' title='免费的Python电子书'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-986564263259512441</id><published>2008-12-27T10:38:00.006+08:00</published><updated>2008-12-29T11:10:29.140+08:00</updated><title type='text'>建一个邮局要做些什么？</title><content type='html'>以构建一个liuyuanzhi.com邮局为例（test@liuyuanzhi.com）&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;1.购买域名&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;到万网或其他域名代理商处购买域名&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;2.邮件服务的选择&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;根据需要选择自己架设邮件服务器还是购买企业邮局服务（或是免费的如&lt;a target="_blank" href="http://www.google.com/a/cpanel/standard/new"&gt;google邮局&lt;/a&gt;）&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;3.设置MX记录&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;MX记录（Mail exchanger record）是email服务的路由，让别人的邮局知道发给liuyuanzhi.com的邮件应该发到哪个服务器去，可以用命令dig -t mx liuyuanzhi.com查看&lt;br /&gt;如果是用域名提供商的域名解析服务，一般在控制面板上可以设&lt;br /&gt;如果是自己的dns服务器，如bind9:&lt;br /&gt;&lt;/span&gt;&lt;pre name="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;liuyuanzhi.com. IN MX 10 ASPMX.L.GOOGLE.COM.&lt;br /&gt;liuyuanzhi.com. IN MX 20 ALT1.ASPMX.L.GOOGLE.COM.&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;4.设置SPF记录&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.zytrax.com/books/dns/ch9/spf.html"&gt;SPF&lt;/a&gt;(Sender Policy Framework)是一种用于说明哪个IP，哪个域名可以以liuyuanzhi.com名义发邮件，SPF中允许以外的服务器如果以我的域名发邮件，一般会被当作垃圾邮件。设置跟MX类似，可以用dig -t txt liuyuanzhi.com查看&lt;br /&gt;如允许aspmx.googlemail.com域名和IP 202.96.1.1以liuyuanzhi.com名义发邮件：&lt;br /&gt;&lt;/span&gt;&lt;pre name="code"&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;liuyuanzhi.com. IN TXT "v=spf1 include:aspmx.googlemail.com ip4:202.96.1.1 ~all"&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;5.设置PTR记录&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;此步骤只有自建服务器才必要&lt;br /&gt;PTR记录（pointer record）是被用作反向域名解析的一种实现，即用IP查对应域名。现在通过反向域名解析，判定反解析的域名是否发信域名的子域名也被用作垃圾邮件识别的，如果反解析结果为空或不属于发信域名的子域名，就有机会当作垃圾邮件发送着。可以用命令host 202.96.1.1查看。&lt;br /&gt;设置PTR记录只能ISP做，所以你能做的就是联系机房，告诉他们你的反向域名要设成什么&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2089194991176958505-986564263259512441?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/986564263259512441/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=986564263259512441' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/986564263259512441'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/986564263259512441'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2008/12/blog-post.html' title='建一个邮局要做些什么？'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-2356138225666292844</id><published>2008-07-23T14:32:00.018+08:00</published><updated>2010-07-15T18:14:55.503+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gcc'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>linux下程序找不到动态库</title><content type='html'>&lt;p&gt;在linux下，当程序用到的动态链接库(.so)在/usr/lib以外的路径时，用普通的编译命令可以编译和链接成功&lt;br /&gt;如，编译demo程序，并引用libtest.so&lt;br /&gt;&lt;/p&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;$ g++ -o"demo"  ../src/demo.cpp   -ltest&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;如果libtest.so在/usr/lib以外的地方，如/usr/local/lib时，上面的编译命令可以成功，但运行是会报错：&lt;br /&gt;&lt;/p&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;$ ./demo: error while loading shared libraries: libmy.so: cannot open shared object file: No such file or directory&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;related links&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://linuxmafia.com/faq/Admin/ld-lib-path.html"&gt;When should I set LD_LIBRARY_PATH?&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;用ldd查看：&lt;br /&gt;&lt;/p&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;$ ldd demo&lt;br /&gt;linux-vdso.so.1 =&gt;  (0x00007fffd49fe000)&lt;br /&gt;libtest.so =&amp;gt; not found&lt;br /&gt;libstdc++.so.6 =&amp;gt; /usr/lib/libstdc++.so.6 (0x00007f37cc446000)&lt;br /&gt;libm.so.6 =&amp;gt; /lib/libm.so.6 (0x00007f37cc1c3000)&lt;br /&gt;libgcc_s.so.1 =&amp;gt; /lib/libgcc_s.so.1 (0x00007f37cbfac000)&lt;br /&gt;libc.so.6 =&amp;gt; /lib/libc.so.6 (0x00007f37cbc58000)&lt;br /&gt;/lib64/ld-linux-x86-64.so.2 (0x00007f37cc752000)&lt;/pre&gt;&lt;br /&gt;经过google，在文档&lt;a href="http://linuxmafia.com/faq/Admin/ld-lib-path.html"&gt;When should I set LD_LIBRARY_PATH?&lt;/a&gt;中找到答案。&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;编译时要加上链接参数-R，不知道是不是gcc版本的差别，在我的机上还要加上-Xlinker：&lt;br /&gt;&lt;/p&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;$ g++ -o"demo"  ../src/demo.cpp   -ltest -Xlinker -R/usr/local/lib&lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;ldd:&lt;br /&gt;&lt;/p&gt;&lt;pre class="brush:bash; toolbar:false;"&gt;$ ldd demo&lt;br /&gt;linux-vdso.so.1 =&amp;gt;  (0x00007fffd49fe000)&lt;br /&gt;libtest.so =&amp;gt; /usr/local/lib/libtest.so (0x00007f161037a000)&lt;br /&gt;libstdc++.so.6 =&amp;gt; /usr/lib/libstdc++.so.6 (0x00007f37cc446000)&lt;br /&gt;libm.so.6 =&gt; /lib/libm.so.6 (0x00007f37cc1c3000)&lt;br /&gt;libgcc_s.so.1 =&amp;gt; /lib/libgcc_s.so.1 (0x00007f37cbfac000)&lt;br /&gt;libc.so.6 =&amp;gt; /lib/libc.so.6 (0x00007f37cbc58000)&lt;br /&gt;/lib64/ld-linux-x86-64.so.2 (0x00007f37cc752000)&lt;/pre&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/2089194991176958505-2356138225666292844?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/2356138225666292844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=2356138225666292844' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/2356138225666292844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/2356138225666292844'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2008/07/linux.html' title='linux下程序找不到动态库'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-2266401662336266066</id><published>2008-06-25T20:26:00.000+08:00</published><updated>2008-12-22T12:34:41.371+08:00</updated><title type='text'>stubbed toe on eclipse 3.4</title><content type='html'>I’ve started to use eclipse 3.4 since the milestone builds. And one day, after I upgrade to the RC3 release. I found that applications stop to run inside eclipse, complains about xml files not found. I check the output directory of the project, there is no xml there. But I remember eclipse would copy these non-.java file to the output directory from source directories. At the time, I was thinking that maybe just a bug and not care much.&lt;br /&gt;&lt;br /&gt;Until today, the finally release of eclipse 3.4 is out. I upgraded my eclipse immediately and hopefully that the bug have gone. But, it still there. I doubt this obvious bug could come with a final release. So I checked every option in the preferences panel, and finally what the problem is.&lt;br /&gt;&lt;br /&gt;It is the “Filtered Resources” in “Prefences -&gt; Java -&gt; Compiler -&gt; Building” panel. In 3.3 the default value is “*.launch”. After 3.4RC3 this value changed to “*.launch, *.testsuite, *.deploy, *.location, *.execution, *.datapool, *.artifact, *.html, *.svg, *.testlog, *.xml”. Delete *.xml, and my applications run again.&lt;br /&gt;&lt;br /&gt;I curious why eclipse 3.4 would add this file types to the filtered list especially *.xml, for much frameworks use xml as configuration file.&lt;br /&gt;&lt;br /&gt;updated 2008-11-27:&lt;br /&gt;Finally, I found out why this happened. The TPTP plugin. After each run of profiling using TPTP, the “*.xml” filter would be appended.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2089194991176958505-2266401662336266066?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/2266401662336266066/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=2266401662336266066' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/2266401662336266066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/2266401662336266066'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2008/06/stubbed-toe-on-eclipse-34.html' title='stubbed toe on eclipse 3.4'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-5852590088425639372</id><published>2007-10-25T11:11:00.000+08:00</published><updated>2007-10-25T14:15:11.997+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='assembly'/><title type='text'>Notes on learning assembly language</title><content type='html'>&lt;div&gt;&lt;br /&gt;&lt;h1&gt;Registers&lt;/h1&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;h2&gt;General-purpose registers&lt;/h2&gt;&lt;br /&gt;Register Description&lt;br /&gt;EAX Accumulator for operands and results data&lt;br /&gt;EBX Pointer to data in the data memory segment&lt;br /&gt;ECX Counter for string and loop operations&lt;br /&gt;EDX I/O pointer&lt;br /&gt;EDI Data pointer for destination of string operations&lt;br /&gt;ESI Data pointer for source of string operations&lt;br /&gt;ESP Stack pointer&lt;br /&gt;EBP Stack data pointer&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;h2&gt;Segment registers&lt;/h2&gt;&lt;br /&gt;Segment Register Description&lt;br /&gt;CS Code segment&lt;br /&gt;DS Data segment&lt;br /&gt;SS Stack segment&lt;br /&gt;ES Extra segment pointer&lt;br /&gt;FS Extra segment pointer&lt;br /&gt;GS Extra segment pointer&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;h2&gt;Instruction pointer register&lt;/h2&gt;&lt;br /&gt;EIP keeps track of the next instruction code to execute&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;h2&gt;Control registers&lt;/h2&gt;&lt;br /&gt;Control Register Description&lt;br /&gt;CR0 System flags that control the operating mode and states of the processor&lt;br /&gt;CR1 Not currently used&lt;br /&gt;CR2 Memory page fault information&lt;br /&gt;CR3 Memory page directory information&lt;br /&gt;CR4 Flags that enable processor features and indicate feature capabilities of the processor&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;h1&gt;Sections&lt;/h1&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;h2&gt;.section .data&lt;/h2&gt; &lt;br /&gt;section for variables declaration&lt;br /&gt;&lt;br /&gt;Directive Data Type&lt;br /&gt;.ascii Text string&lt;br /&gt;.asciz Null-terminated text string&lt;br /&gt;.byte Byte value&lt;br /&gt;.double Double-precision floating-point number&lt;br /&gt;.float Single-precision floating-point number&lt;br /&gt;.int 32-bit integer number&lt;br /&gt;.long 32-bit integer number (same as .int)&lt;br /&gt;.octa 16-byte integer number&lt;br /&gt;.quad 8-byte integer number&lt;br /&gt;.short 16-bit integer number&lt;br /&gt;.single Single-precision floating-point number (same as .float)&lt;br /&gt;&lt;br /&gt;.equ static variables&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;h2&gt;.section .rodata&lt;/h2&gt;&lt;br /&gt;section for constants declaration&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;h2&gt;.section .bss&lt;/h2&gt;&lt;br /&gt;buffers&lt;br /&gt;&lt;br /&gt;Directive Description&lt;br /&gt;.comm Declares a common memory area for data that is not initialized&lt;br /&gt;.lcomm Declares a local common memory area for data that is not initialized&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;h2&gt;.section .text&lt;/h2&gt;&lt;br /&gt;assembly codes&lt;br /&gt;&lt;br /&gt;Directive Description&lt;br /&gt;.global _start entry point&lt;br /&gt;&lt;/div&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/2089194991176958505-5852590088425639372?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/5852590088425639372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=5852590088425639372' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/5852590088425639372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/5852590088425639372'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2007/10/notes-on-learning-assembly-language.html' title='Notes on learning assembly language'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-491774644302313928</id><published>2007-08-11T17:20:00.000+08:00</published><updated>2007-08-11T17:27:02.897+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>读《iBATIS in Action》</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.manning.com/begin/begin_cover150.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 126px; height: 151px;" src="http://www.manning.com/begin/begin_cover150.jpg" alt="" border="0" /&gt;&lt;/a&gt;　　由于iBATIS方面的书本来就不多（这是我除了官方文档外找到的唯一一本），使这本书无疑是学习iBATIS不二的选择。而这本书本身也是不错的，囊括了几乎所有的iBATIS的知识点。很适合作为iBATIS的入门和参考书籍。&lt;br /&gt;　　我读这本书的时候并没接触过iBATIS相关的知识，但凭借本身的编程经验，看这本书也不必细看，也是匆匆看完，然后在实际使用中遇到问题再参考此书，比官方的文档好多了。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2089194991176958505-491774644302313928?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/491774644302313928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=491774644302313928' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/491774644302313928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/491774644302313928'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2007/08/ibatis-in-action.html' title='读《iBATIS in Action》'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-119811740027455204</id><published>2007-08-11T13:49:00.000+08:00</published><updated>2007-08-11T16:25:01.623+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='读书'/><title type='text'>读书《MySQL Phrasebook》</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://ec1.images-amazon.com/images/I/51E92-oqyML._AA240_.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 210px; height: 195px;" src="http://ec1.images-amazon.com/images/I/51E92-oqyML._AA240_.jpg" alt="" border="0" /&gt;&lt;/a&gt;　　昨天由于有点时间，就想找本书看看。在手头上找了本最薄的书－《MySQL Phrasebook - Essential Code and Commands》。最近因工作需要，刚从Hibernate转到iBatis。这个转变感觉自己离OO远了一点，而离DO(DB-oriented)却近了一点，现在要对数据库级的细节要更加了解了。&lt;br /&gt;　　看标题"Phrasebook"感觉就像时下不少的“XXX高手箴言”之类的书，未翻前还抱着希望是一些经验总结的精华集。当看完整本书，发现大部分篇幅都是讲SQL语法和MySQL的一些基础指令。也有一点cookbook的味道，讲述解决某一类问题时的方案。还有一些安全小tips是不错的。还有一章讲MYSQL对各语言的接口的，我是直接跳过了。&lt;br /&gt;　　刚翻完的时候其实我想骂，“什么烂phrasebook，要学这些基础语法指令我不如去看MYSQL的官方教程”，但想到它的副标是“Essential Code and Commands”。。。算了&lt;br /&gt;　　总的来说，这本书对于MYSQL的新手还是有点用的，可以让你了解有些什么要注意的，有些什么小技巧之类的。但对大部分用过MySQL一段时间的人来说，这本书是不值得买的。&lt;br /&gt;&lt;br /&gt;书虽然是不怎么好，但在其中学到了一些新东西：&lt;br /&gt;DELAY_KEY_WRITE&lt;br /&gt;作用：减少MyISAM表更新索引的次数&lt;br /&gt;用法：ALTER TABLE table_name DELAY_KEY_WRITE = 1;&lt;br /&gt;&lt;br /&gt;LIKE中的'_'&lt;br /&gt;作用：匹配一个字符（我以前只知道%）&lt;br /&gt;&lt;br /&gt;&lt;=&gt;&lt;br /&gt;作用："NULL安全”的不等，正常的!=遇到NULL时不会返回0（false),1(true)，而是返回NULL，用&lt;=&gt;就会得到你想要的结果了&lt;br /&gt;&lt;br /&gt;启动选项--safe-updates&lt;br /&gt;作用：不执行无WHERE子句的DELETE和UPDATE语句&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2089194991176958505-119811740027455204?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/119811740027455204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=119811740027455204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/119811740027455204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/119811740027455204'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2007/08/mysql-phrasebook.html' title='读书《MySQL Phrasebook》'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-9077467297880697651</id><published>2007-05-26T17:10:00.000+08:00</published><updated>2007-05-26T17:37:09.529+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='杂七杂八'/><title type='text'>windows平台的下一代压缩王者7-zip</title><content type='html'>　　在Windows下WinRAR可以说是装机必备软件之一吧。RAR有着比ZIP更高的压缩比，自从几年前击败ZIP之后现在一直都维持着桌面压缩工具的老大。&lt;br /&gt;　　今天无意中碰到了一个开源压缩工具——&lt;a href="http://www.7-zip.org/"&gt;7-zip&lt;/a&gt;。下了个4.46 beta版回来跟装在机上的winrar-3.60对比了一个。同样压缩安装在机器上的firefox2英文版的目录作测试。winrar把压缩比设成“最好”，7-zip把压缩比设成“极限”（其它选项默认）。&lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;&amp;nbsp;&lt;/th&gt;&lt;br /&gt;&lt;th&gt;压缩前&lt;/th&gt;&lt;br /&gt;&lt;th&gt;winrar3.60&lt;/th&gt;&lt;br /&gt;&lt;th&gt;7-zip4.46beta&lt;/th&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;大小(byte)&lt;/td&gt;&lt;br /&gt;&lt;td&gt;22,086,568&lt;/td&gt;&lt;br /&gt;&lt;td&gt;7,685,813&lt;/td&gt;&lt;br /&gt;&lt;td&gt;6,641,360&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;时间(s)&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;21&lt;/td&gt;&lt;br /&gt;&lt;td&gt;33&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;虽然速度比起WinRAR要慢，但压缩比更高，而且7-zip工具支持rar格式的解压。还有，7-zip是开源的工具，而winrar是收费的。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2089194991176958505-9077467297880697651?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/9077467297880697651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=9077467297880697651' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/9077467297880697651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/9077467297880697651'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2007/05/windows7-zip.html' title='windows平台的下一代压缩王者7-zip'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-1645282781432796020</id><published>2007-05-23T17:05:00.001+08:00</published><updated>2008-06-14T17:48:25.305+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>linux下Subversion服务架设</title><content type='html'>&lt;h3&gt;一、工具准备&lt;/h3&gt;&lt;br /&gt;Apache Web服务器：&lt;a href="http://government-grants.org/mirrors/apache.org/httpd/httpd-2.2.4.tar.bz2"&gt;httpd-2.2.4.tar.bz2&lt;/a&gt;&lt;br /&gt;Subversion源码包及依赖包：&lt;a href="http://subversion.tigris.org/downloads/subversion-1.4.3.tar.bz2"&gt;subversion-1.4.3.tar.bz2&lt;/a&gt;,&lt;a href="http://subversion.tigris.org/downloads/subversion-deps-1.4.3.tar.bz2"&gt;subversion-deps-1.4.3.tar.bz2&lt;/a&gt;&lt;br /&gt;(下面假设apache和svn源码都解压到了/home/tmp下)&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;二、安装Apache&lt;/h3&gt;&lt;br /&gt;Apache的安装就根平时安装Apache没什么两样，都记得要打开dav模块和动态模块选项。安装安装命令如下：&lt;br /&gt;&lt;blockquote&gt;tar xfj httpd-2.2.4.tar.bz2&lt;br /&gt;cd httpd-2.2.4&lt;br /&gt;./buildconf&lt;br /&gt;./configure --enable-dav --enable-so&lt;br /&gt;make&lt;br /&gt;make install&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;三、安装Subversion&lt;/h3&gt;&lt;br /&gt;SVN的安装一定要注意：&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;SVN依赖的APR版本要正确。如果Apache为2.0.x，对应的APR版本应为0.9.x；Apache为2.2.x，对应的APR版本应为1.2.x。由于subversion-deps包里的APR是0.9.x的，因此编译svn时要删除从deps里解压出来的apr, apr-util，改而使用apache 2.2里提供的。&lt;/li&gt;&lt;br /&gt;&lt;li&gt;如果apache不是安装在默认路径，configure必須加上--with-apxs选项,如：./configure --with-apxs=/home/apache2/bin/apxs&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;安装命令如下：&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;tar xfj subversion-1.4.3.tar.bz2&lt;br /&gt;tar xfj subversion-deps-1.4.3.tar.bz2&lt;br /&gt;# subversion-deps的文件也会解压到subversion-1.4.3目录中&lt;br /&gt;cd subversion-1.4.3&lt;br /&gt;rm -rf apr&lt;br /&gt;rm -rf apr-util&lt;br /&gt;ln -s /home/tmp/httpd-2.2.4/srclib/apr apr&lt;br /&gt;ln -s /home/tmp/httpd-2.2.4/srclib/apr-util apr-util&lt;br /&gt;./configure &amp;&amp;amp;amp;amp; make &amp;&amp;amp; make install&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;安装完成后，查看是否存在文件$APACHE_HOME/modules/mod_dav_svn.so（默认/usr/local/apache2/modules/mod_dav_svn.so)。另外，如果该机器上以前是装过旧版本的SVN，要把"/usr/local/lib/libsvn*"文件都删除。&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;四、在apache中配置svn&lt;/h3&gt;&lt;br /&gt;创建SVN库：&lt;br /&gt;&lt;blockquote&gt;cd /home/svn&lt;br /&gt;svnadmin create repo1&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;在Apache的配置文件httpd.conf中加入以下代码，Apache中就可以配置好一个虚拟主机svn.mydomain.net，并把该域名下的根路径配置给Subversion。通过AuthzSVNAccessFile和AuthUserFile指令分别配置SVN用户的用户名和密码文件。&lt;br /&gt;&lt;blockquote&gt;&amp;lt;virtualhost *:80&amp;gt;&lt;br /&gt;       DocumentRoot /home/svn/htdocs&lt;br /&gt;       &amp;lt;directory&amp;gt;&lt;br /&gt;           Options Includes&lt;br /&gt;           AllowOverride All&lt;br /&gt;           Order allow,deny&lt;br /&gt;           Allow from all&lt;br /&gt;       &amp;lt;/directory&gt;&lt;br /&gt;&lt;br /&gt;       &amp;lt;location&amp;gt;&lt;br /&gt;           DAV svn&lt;br /&gt;           SVNParentPath /home/svn/svnroot&lt;br /&gt;           AuthzSVNAccessFile /home/svn/svnroot/conf/accessfile&lt;br /&gt;           Require valid-user&lt;br /&gt;           AuthType Basic&lt;br /&gt;           AuthName "Subversion System"&lt;br /&gt;           AuthUserFile /home/svn/svnroot/conf/passwdfile&lt;br /&gt;       &amp;lt;/location&amp;gt;&lt;br /&gt;&lt;br /&gt;       ServerName svn.mydomain.net&lt;br /&gt;       DirectoryIndex index.html&lt;br /&gt;&amp;lt;/virtualhost&amp;gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;创建文件/home/svn/svnroot/conf/accessfile：&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;[groups]&lt;br /&gt;user = jarod&lt;br /&gt;anonymous = guest&lt;br /&gt;[/]&lt;br /&gt;* = r&lt;br /&gt;@user = rw&lt;br /&gt;@anonymous = r&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;再用htpasswd命令创建/home/svn/svnroot/conf/passwdfile文件：&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;htpasswd -c /home/svn/svnroot/conf/passwdfile jarod&lt;enter&gt;&lt;br /&gt;# 这时会提示输入密码&lt;br /&gt;&lt;/enter&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;最后把/home/svn目录的拥有者设为启动apache服务的用户，apache-2.2默认会由daemon用户启动：&lt;br /&gt;&lt;blockquote&gt;chown daemon.daemon -R /home/svn&lt;br /&gt;chmod 777 /home/svn -R&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;大功告成，通过浏览器或SVN客户端测试http://svn.mydomain.net/repo1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2089194991176958505-1645282781432796020?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/1645282781432796020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=1645282781432796020' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/1645282781432796020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/1645282781432796020'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2007/05/linuxsubversion.html' title='linux下Subversion服务架设'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-91120379274090352</id><published>2007-05-23T09:03:00.000+08:00</published><updated>2007-05-23T17:44:45.051+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>在Linux下配置Java开发环境（二）</title><content type='html'>&lt;h3&gt; 三、安装apache、PHP、phpMyAdmin和resin&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;apache安装：&lt;br /&gt;&lt;br /&gt;apache的安装我选择了源码版，用以下命令安装：&lt;br /&gt;&lt;blockquote&gt;tar xfj httpd-2.0.55.tar.bz2&lt;br /&gt;cd httpd-2.0.55&lt;br /&gt;./configure --prefix=/usr/local/apache2 --enable-deflate --enable-rewrite --enable-so --with-mpm=worker --enable-headers --enable-cache --enable-proxy --enable-dav&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;　　so模块用来提供DSO支持的apachehe核心模块（与PHP集成必须）； --enable-shared=max是指除了so以外的所有标准模块都编译成DSO模块&lt;br /&gt;　　安装完后进入/usr/local/apache2/bin，运行./apachectl start。在浏览器进入localhost如果能看到apache默认页面就没问题了。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;PHP安装：&lt;br /&gt;&lt;br /&gt;用以下命令安装：&lt;br /&gt;&lt;blockquote&gt;tar xfj php-5.1.2.tar.bz2&lt;br /&gt;cd php-5.1.2&lt;br /&gt;./configure --prefix=/usr/local/php --enable-mbstring --with-mysql=/usr/local/mysql/ --with-apxs2=/usr/local/apache2/bin/apxs &amp;&amp;amp;amp; make &amp;&amp;amp; make install&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;--enable-mbstring是让PHP支持中文字符集，--with-mysql，--with-apxs2分别是PHP与MYSQL，APACHE集成的支持&lt;br /&gt;默认配置文件&lt;br /&gt;&lt;br /&gt;如果按照上面的方式编译PHP，在$HTTPD_HOME/conf/httpd.conf中会加入一句&lt;br /&gt;LoadModule php5_module modules/libphp5.so&lt;br /&gt;&lt;br /&gt;如果没有的可以把modules/libphp5.so改成指向libphp5.so的文件名&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;在$HTTPD_HOME/conf/httpd.conf中加入&lt;br /&gt;&lt;blockquote&gt;  AddType application/x-httpd-php .php .phtml&lt;br /&gt;  AddType application/x-httpd-php-source .phps&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;phpMyAdmin安装：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;tar xfj phpMyAdmin-2.8.0.1.tar.bz2&lt;br /&gt;mv phpMyAdmin-2.8.0.1 /usr/local/apache2/htdocs/phpMyAdmin&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;进入 /usr/local/apache2/htdocs/phpMyAdmin/libraries，&lt;br /&gt;&lt;blockquote&gt;cp config.default.php ../config.inc.php&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;phpMyAdmin默认的验证模式为config，即数据库的用户名密码写入config.inc.php文件。改为cookie模式就可以在登陆时自己输用户名密码&lt;br /&gt;&lt;br /&gt;编辑config.inc.php文件&lt;br /&gt;$cfg['blowfish_secret'] = '随便一个字符串';&lt;br /&gt;$cfg['Servers'][$i]['auth_type']     = 'cookie';&lt;br /&gt;&lt;br /&gt;启动apache，在浏览器进入localhost/phpMyAdmin/index.php测试&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;resin 安装 ：&lt;br /&gt;&lt;br /&gt;通过以下命令安装：&lt;br /&gt;&lt;blockquote&gt;tar xfz resin-3.0.18.tar.gz&lt;br /&gt;mv resin-3.0.18 /usr/local&lt;br /&gt;ln -s resin-3.0.18 resin&lt;br /&gt;cd resin&lt;br /&gt;./configure --with-apache=/usr/local/apache2/ &amp;&amp;amp;amp; make &amp;&amp;amp; make install&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2089194991176958505-91120379274090352?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/91120379274090352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=91120379274090352' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/91120379274090352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/91120379274090352'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2007/05/linuxjava_23.html' title='在Linux下配置Java开发环境（二）'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-6295157369953342302</id><published>2007-05-18T07:55:00.000+08:00</published><updated>2007-08-11T17:33:11.473+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>我翻译的第一篇开源文档</title><content type='html'>一篇关于linux的文章&lt;br /&gt;id: sam1860&lt;br /&gt;http://www.linuxsir.org/bbs/showpost.php?p=905399&amp;amp;postcount=47&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2089194991176958505-6295157369953342302?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/6295157369953342302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=6295157369953342302' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/6295157369953342302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/6295157369953342302'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2007/05/blog-post.html' title='我翻译的第一篇开源文档'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-956121999248097970</id><published>2007-05-16T15:17:00.000+08:00</published><updated>2007-05-24T09:06:00.911+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>在Linux下配置Java开发环境（一）</title><content type='html'>&lt;font size="2"&gt;　　在Linux下配置Java的开发环境以前也有好几次了，但时间一长，总有不少细节会忘了，到重新要配置时又要花不少时间去解决这些再次遇到的小问题。这次就写下来吧，做个笔记，以后再要配置时就省时了。&lt;br&gt;　　以下是这次要配置的环境：&lt;br&gt;Linux：FC4&lt;br&gt;JDK：1.4.2&lt;br&gt;服务器：apache-2.0.55 + resin-3.0.18&lt;br&gt;数据库：mysql-4.1.18 + phpMyAdmin-2.8&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;font face="Tahoma" size="5"&gt;&lt;b&gt;一、安装、配置JDK&lt;br&gt;&lt;br&gt;&lt;/b&gt;&lt;/font&gt;&lt;font size="3"&gt;&lt;font size="4"&gt;安装：&lt;/font&gt;&lt;br&gt;&lt;font size="2"&gt;　　官网上有两种版本的JDK下载。我下载回来的JDK文件名为：j2sdk-1_4_2_11-linux-i586.bin_File_j2sdk-1_4_2_11-linux-i586.bin。这个在官网上称为自解压版，这个版本我还是第一次下。以前用的都是RPM版。两者的区别就在于，自解压版运行后就在当前目录产生个JDK的目录。RPM版则直接安装到指定的目录。通常为/usr/java/jdk-version目录。&lt;br&gt;　　在安装目录上我有个建议，就是都装到/usr/java的子目录下，然后做个链接成/usr/java/jdk。如，我这里看装后的路径为/usr/java/j2sdk1.4.2_11。可以通过以下命令建立一个软链接。&lt;br&gt;ln -s /usr/java/j2sdk1.4.2_11 /usr/java/jdk&lt;br&gt;　　这样做的好处就是当有几个JDK并存时，要改变默认JDK的版本只要改变这个软链接就OK了。而且跟JDK相关的各种环境变量也不用变来变去，就把JAVA_HOME指向/usr/java/jdk就行了。&lt;br&gt;　　至于CLASSPATH的配置我就不用说了，因为我一向都是用IDE或者是ANT的，配CLASSPATH对我来说没意义。&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font size="4"&gt;中文支持的配置：&lt;/font&gt;&lt;br&gt;　　这个步骤好像不是必须的，因为听网上的一些朋友说有些Linux发行版在装好JDK后直接就支持中文。在配置前可以先运行一下$JAVA_HOME/jre/bin/ControlPanel和其它中文程序看是否可以正确显示中文（Linux的locale要设成中文ControlPanel才是中文的）。&lt;br&gt;　　进入$JAVA_HOME/jre/lib目录。拷贝一份font.properties.zh_CN.Redhat覆盖原来的font.properties文件。然后把font.properties以外的font.properties_***文件都删了。打开font.properties在最后一行会有类似下面的代码：&lt;br&gt;&lt;br&gt;filename.-misc-zysong18030-medium-r-normal--*-%d-*-*-c-*-iso10646-1 =/usr/share/fonts/zh_CN/TrueType/zysong.ttf&lt;br&gt;&lt;br&gt;把后面的/usr/share/fonts/zh_CN/TrueType/zysong.ttf改成自己的中文字体所在位置，如simsun或VeraSansYuanTi。simsun可以在windows的font目录里找到，VeraSansYuanTi可以在Linux公社下载。&lt;br&gt;&lt;br&gt;如果用JDK5.0的可以参考这篇文章：http://addone.blogchina.com/blog/187527.html&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;hr size="2" width="100%"&gt;&lt;br&gt;&lt;b&gt;&lt;font size="5"&gt;二、MYSQL&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;font size="2"&gt;&lt;br&gt;　　在MySQL的下载页上有很多版本可供下载。由于我装MySQL只是作为开发用途，并不是作服务器，因此可以选择最简单的版本来下载。如：标准二进制版或对应Linux发行版的RPM包等。 我下载的是标准二进制版，文件名为：mysql-standard-4.1.18-pc-linux-gnu-i686.tar.gz。解压后就是一个已经编译，初始化好的文件夹。解压好后把文件夹移到某个目录，我这里为/usr/local/database/mysql41。然后建立软链接：&lt;br&gt;ln -s /usr/local/database/mysql41 /usr/local/mysql&lt;br&gt;&lt;br&gt;　　由于mysql里很多默认设置都是指向/usr/local/mysql目录的，链到这里就省了不少事。我这里不直接把数据库放到/usr/local/mysql，而是通过链接，也是为了可以多版本共存。因为4.0, 4.1, 5.0这几多版本都比较多用，而且差别又比较大，所以共存的必要还是有的。&lt;br&gt;　　把$MYSQL_HOME/support-files/my-small.cnf拷贝到$MYSQL_HOME/data/my.cnf，建立一个软链接：&lt;br&gt;ln -s /usr/local/mysql/data/my.cnf /etc/my.cnf&lt;br&gt;&lt;br&gt;　　编辑my.cnf文件，分别在以下区加入下面的行，这里的编码都用UTF-8&lt;br&gt;&lt;br&gt;[client]&lt;br&gt;default-character-set=utf8&lt;br&gt;&lt;br&gt;[mysqld]&lt;br&gt;&lt;/font&gt;&lt;font size="2"&gt;default-character-set=utf8&lt;br&gt;default-storage-engine=INNODB&lt;br&gt;&lt;br&gt;其中字符集的设置只有在4.1以后的版本才支持。这样设置了，建立数据库时默认就使用UTF-8编码，而且只要connector/j的版本号大于3.1，建立数据库链接时会自动使用数据库的编码。&lt;br&gt;　　在MYSQL&amp;gt;4.1 &amp;amp;&amp;amp; connector/j &amp;gt; 3.1时，JDBC链接URL为：&lt;br&gt;jdbc:mysql://&lt;/font&gt;&lt;font size="2"&gt;&amp;lt;host&amp;gt;/&amp;lt;database&amp;gt;&lt;/font&gt;&lt;font size="2"&gt;?useServerPrepStmts=false&lt;br&gt;　　否则要在链接上指定连接编码：&lt;br&gt;jdbc:mysql://&amp;lt;host&amp;gt;/&amp;lt;database&amp;gt;?useUnicode=true&amp;amp;characterEncoding=utf-8&lt;br&gt;&lt;br&gt;&lt;/font&gt;&lt;font size="2"&gt;至于default-storage-engine=INNODB，则在当你的程序需要用到事务时可以方便点，就算没用到也没所谓，反正只是个开发环境，方便就OK。&lt;br&gt;&lt;br&gt;再为启动MYSQLD进程添加用户，执行以下命令：&lt;br&gt;&lt;br&gt;添加用户组&lt;br&gt;groupadd mysql&lt;br&gt;添加用户&lt;br&gt;useradd -g mysql mysql&lt;br&gt;设置MYSQL目录的拥有者&lt;br&gt; chown -R root&amp;nbsp; .&lt;br&gt;设置数据文件目录拥有者&lt;br&gt;chown -R mysql data&lt;br&gt;设置目录所属组&lt;br&gt;chgrp -R mysql .&lt;br&gt;安装初始数据库&lt;br&gt;&lt;/font&gt;scripts/mysql_install_db --user=mysql&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;font size="2"&gt;启动进程&lt;br&gt;bin/mysqld_safe --user=mysql &amp;amp;&lt;br&gt;&lt;br&gt;如果没有显示mysqld end之类的字眼，通常都是正常启动了。&lt;br&gt;&lt;br&gt;&lt;br&gt;如果需要MYSQL开机时自动启动的：拷贝$MYSQL_HOME/support-files/mysql-server到/etc/rc.d/init.d/mysqld&lt;br&gt;&lt;/font&gt;&lt;font size="2"&gt;再执行chkconfig --add mysqld即可&lt;br&gt;&lt;br&gt;因为我试过4, 5版的MYSQL启动脚本是可以通用的，所以这里就不用再搞链接了。。。&lt;br&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;br&gt;&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2089194991176958505-956121999248097970?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/956121999248097970/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=956121999248097970' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/956121999248097970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/956121999248097970'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2007/05/linuxjava.html' title='在Linux下配置Java开发环境（一）'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-4713555075317511676</id><published>2007-05-15T09:33:00.000+08:00</published><updated>2007-08-11T17:32:31.243+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><title type='text'>Eclipse中的插件管理</title><content type='html'>　　现在各式的Eclipse插件越来越多，同一插件的版本也变得快，如果管理不善，装的插件多了就会很混乱，插件要想在不同版本间切换也非常麻烦。Eclipse提供了三种插件的安装方式：&lt;br /&gt;&lt;br /&gt;   * 直接安装&lt;br /&gt;   * 升级&lt;br /&gt;   * 链接&lt;br /&gt;&lt;br /&gt;直接安装（Copy &amp;amp; Paste）&lt;br /&gt;　　下载回来的插件都有features和plugins这两个目录。features目录里放的主要是描述插件特性的配置文件（feature.xml和feature.properties）；而plugins里放的则是插件所使用到的相关类和包。&lt;br /&gt;　　直接安装只要把这两个目录拷贝到eclipse安装目录履盖原来的目录即可。但有时这样履盖了运行eclipse发现不了新插件，这是由于 eclipse把所有插件的清单（manifest）都缓存了一份，只要把configuration/org.eclipse.osgi目录删除即可，这样eclipse就会重新搜索所有的插件。&lt;br /&gt;&lt;br /&gt;　　特点：安装简单，但删除和换版本很麻烦（当然，如果删除或更新插件时只删除或替换掉对应的feature目录，而不理plugins目录里的文件也是可以的，但时间长了，plugins目录里就会有一大堆没用的包了）&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;升级（Update）&lt;br /&gt;升级，利用Eclipse内建的升级功能安装新插件或升级已安装的插件。以安装Eclipse的Subversion插件Subclipse为例：&lt;br /&gt;&lt;br /&gt;  1. 在Eclipse主菜单中，选Help-&gt;Software updates-&gt;Find and install，在install/update窗口中选择“Search new features to install”&lt;br /&gt;  2. 添加升级服务器。在install窗口中点“New Remote Sites”，名称填subclipse，地址为http://subclipse.tigris.org/update。选中刚添加的服务器，点finish后就可以在选择自己要安装的版本&lt;br /&gt;  3. 插件安装好后可以在Help-&gt;Software upates-&gt;Manage Configuration中检查插件的升级或禁用。&lt;br /&gt;&lt;br /&gt;　　特点：安装起来比直接安装更方便一点，但由于插件的服务器都在外国，如果是比较大的插件用这种方式安装会很慢，适合安装较小的插件。删除插件也要自己手动删除&lt;br /&gt;&lt;br /&gt;链接（Link）&lt;br /&gt;　　链接，Eclipse支持的以“快捷方式”的形式把安装在非Eclipse安装路径下的插件链接到Eclipse。拿我机上装的Hibernate-Tools （HT）Eclipse插件为例：&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Eclipse安装路径：&lt;br /&gt;/home/jarod/share/softwares/programming/eclipses/eclipse&lt;br /&gt;建立存放HT的目录为：&lt;br /&gt;/home/jarod/share/softwares/programming/plugins/Hibernate-Tools/eclipse&lt;br /&gt;&lt;br /&gt;然后把下载回来的HT解压，把features和plugins目录放进前面建的目录中&lt;br /&gt;&lt;br /&gt;在eclipse安装目录中建立links目录，即&lt;br /&gt;/home/jarod/share/softwares/programming/eclipses/eclipse/links&lt;br /&gt;&lt;br /&gt;在links中加入一个文本文件，后缀为.link，文件名可随便， 这里为org.hibernate.eclipse.link&lt;br /&gt;&lt;br /&gt;用文本编辑器在link文件里加入插件所在路径，格式为：&lt;br /&gt;path=[路径]&lt;br /&gt;注意，这里的路径是指包含eclipse作为子目录的路径，即：&lt;br /&gt;path=/home/jarod/share/softwares/programming/plugins/Hibernate-Tools&lt;br /&gt;&lt;br /&gt;这样，重启Eclipse即可发现新的插件。&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;　　特点：管理超级方便。这是我个人最喜欢的安装插件方式，插件所有文件都不用装到Eclipse中，只要一个链接就可以了，可以随时更换插件的版本，删除也方便。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2089194991176958505-4713555075317511676?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/4713555075317511676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=4713555075317511676' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/4713555075317511676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/4713555075317511676'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2007/05/eclipse.html' title='Eclipse中的插件管理'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2089194991176958505.post-1736988603333295644</id><published>2007-05-14T12:30:00.000+08:00</published><updated>2007-08-11T17:31:58.552+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Linux下红外线适配器的使用</title><content type='html'>　　最近买了个红外线适配器用于与手机交换数据，在Linux上搞了一天多时间，今天总算看到适配器上的灯在闪了。&lt;br /&gt;&lt;br /&gt;环境如下：&lt;br /&gt;&lt;br /&gt;适配器  ：SMH-S650（USB接口）&lt;br /&gt;系统    ：FC4&lt;br /&gt;Linux内核：2.6.14&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;　　要用红外线要先装irda-utils，不过我的FC4是默认就已经装好的，版本是irda-utils-0.9.16-7。如果没装的可以到http://irda.sourceforge.net/下载。&lt;br /&gt;&lt;br /&gt;接着分别加载所需的模块：&lt;br /&gt;&lt;br /&gt;# 下面两个都是usb支持所需模块&lt;br /&gt;/sbin/modprobe uhci_hcd&lt;br /&gt;/sbin/modprobe pl2303&lt;br /&gt;&lt;br /&gt;# 红外线支持模块&lt;br /&gt;/sbin/modprobe irda&lt;br /&gt;/sbin/modprobe irtty-sir&lt;br /&gt;&lt;br /&gt;# 这是一个称为dongle设备的模块支持，不同的适配器用不同的dongle，&lt;br /&gt;# 具体有哪些dongle可以用man irattach来看文档，s650用默认的dongle即可&lt;br /&gt;#/sbin/modprobe ma600-sir&lt;br /&gt;/sbin/modprobe ircomm-tty&lt;br /&gt;&lt;br /&gt;#如果要自己指定dongle时&lt;br /&gt;#/usr/sbin/irattach /dev/ttyUSB0 -d ma600 -s&lt;br /&gt;/usr/sbin/irattach /dev/ttyUSB0 -s&lt;br /&gt;&lt;br /&gt;#如果适配器不是USB接口的&lt;br /&gt;#/usr/sbin/irattach /dev/ttyS0 -s&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;这是我最后写成的脚本：&lt;br /&gt;可以通过irda start | stop来启动，关闭适配器&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;#!/bin/sh&lt;br /&gt;&lt;br /&gt;case "$1" in&lt;br /&gt; start)&lt;br /&gt;   #Start IRDA&lt;br /&gt;   echo -n "Starting up the IR modules"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/sbin/modprobe uhci_hcd&lt;br /&gt;/sbin/modprobe pl2303&lt;br /&gt;/sbin/modprobe irda&lt;br /&gt;/sbin/modprobe irtty-sir&lt;br /&gt;/sbin/modprobe ircomm-tty&lt;br /&gt;/usr/sbin/irattach /dev/ttyUSB0  -s&lt;br /&gt; &lt;br /&gt;   echo -n ""&lt;br /&gt;   echo -n "Done."&lt;br /&gt;   ;;&lt;br /&gt;&lt;br /&gt; stop)&lt;br /&gt;   #KILL IRDA&lt;br /&gt;   echo -n "Stopping IRDA and removing used modules"&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   killall -9 irattach&lt;br /&gt;   /sbin/rmmod ircomm-tty ircomm irtty-sir sir_dev irnet irda&lt;br /&gt;&lt;br /&gt;   echo -n "Done."&lt;br /&gt;   echo ""&lt;br /&gt;   ;;&lt;br /&gt;&lt;br /&gt; *)&lt;br /&gt;   echo -n "Usage:irdastart.sh{start|stop}"&lt;br /&gt;   echo ""&lt;br /&gt;   exit 1&lt;br /&gt; &lt;br /&gt;   esac&lt;br /&gt;   exit 0&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2089194991176958505-1736988603333295644?l=liuyuanzhi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://liuyuanzhi.blogspot.com/feeds/1736988603333295644/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2089194991176958505&amp;postID=1736988603333295644' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/1736988603333295644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2089194991176958505/posts/default/1736988603333295644'/><link rel='alternate' type='text/html' href='http://liuyuanzhi.blogspot.com/2007/05/linux.html' title='Linux下红外线适配器的使用'/><author><name>Jarod</name><uri>http://www.blogger.com/profile/17037649660223115637</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://photo.1001m.com/updata/2006/8/14/20/scaled/1155557536487.jpg'/></author><thr:total>0</thr:total></entry></feed>
