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

<channel>
	<title>reality &#187; java</title>
	<atom:link href="http://www.reality.hk/articles/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.reality.hk</link>
	<description>Reality is merely an illusion, albeit a very persistent one.</description>
	<lastBuildDate>Fri, 23 Jul 2010 17:28:33 +0000</lastBuildDate>
	<language>zh-tw</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Oracle 收購 SUN</title>
		<link>http://www.reality.hk/articles/2009/04/20/951/</link>
		<comments>http://www.reality.hk/articles/2009/04/20/951/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 15:11:02 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[sun]]></category>

		<guid isPermaLink="false">http://www.reality.hk/?p=951</guid>
		<description><![CDATA[SUN 終於賣出了 &#8212; 據 Business Insider 的報導，Oracle 將以七十四億美元收購 SUN。Oracle 的網站亦已經正式宣佈這消息。 延申閱讀 Oracle Buys Sun Microsystems (ORCL, JAVA) Oracle (甲骨文)將以 74 億美金購併 Sun (昇陽) &#8211; MMDays Oracle and Sun Slashdot Comments &#124; Oracle Buys Sun &#8211; 據說是 SUN 的內部宣佈]]></description>
			<content:encoded><![CDATA[<p>SUN 終於賣出了 &#8212; 據 <a href="http://www.businessinsider.com/oracel-buys-sun-microsystems-2009-4" target="_blank">Business Insider </a>的報導，Oracle 將以七十四億美元收購 SUN。<a href="http://www.oracle.com/sun/index.html" target="_blank">Oracle 的網站</a>亦已經正式宣佈這消息。</p>
<h3>延申閱讀</h3>
<ul>
<li><a href="http://www.businessinsider.com/oracel-buys-sun-microsystems-2009-4">Oracle Buys Sun Microsystems (ORCL, JAVA)</a></li>
<li><a href="http://mmdays.com/2009/04/20/oracle-buys-sun/">Oracle (甲骨文)將以 74 億美金購併 Sun (昇陽) &#8211; MMDays</a></li>
<li><a href="http://www.oracle.com/sun/index.html">Oracle and Sun</a></li>
<li><a href="http://developers.slashdot.org/comments.pl?sid=1204955&amp;cid=27644011">Slashdot Comments | Oracle Buys Sun</a> &#8211; 據說是 SUN 的內部宣佈</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2009/04/20/951/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用 RubyInline 讓 Ruby 把工作分給其他語言</title>
		<link>http://www.reality.hk/articles/2008/03/15/796/</link>
		<comments>http://www.reality.hk/articles/2008/03/15/796/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 16:50:29 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[inline]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[native]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.reality.hk/articles/2008/03/15/796/</guid>
		<description><![CDATA[在 C 語言冒起的年代，當人們需要更高的效能時，他們會在 C 中插入組合語言。在 Java 冒起的年代，人們需要更高的效能時，會使用 JNI 呼叫 C 的源碼。同樣，Ruby 也容許程式把工作交給其他語言。 很多重要的 Ruby 庫例如 mongrel、eventmachine、hpricot 也是由 native 和 ruby 合作而成。雖然在 Ruby 裡使用 C 寫 extension 也算很簡單 (比 JNI 好得多吧？！)，然而在使用它仍需要不斷的作 context switching。 於是就有人想到 RubyInline 。 它是受到 Perl 的 Inline.PM 啟發而寫成。就如其名，它讓我們可以在 Ruby 中直接 Inline 寫 C 或 C++ 源碼： 安裝 einstein:lib siuying$ sudo gem install RubyInline [...]]]></description>
			<content:encoded><![CDATA[<p>在 C 語言冒起的年代，當人們需要更高的效能時，他們會在 C 中插入組合語言。在 Java 冒起的年代，人們需要更高的效能時，會使用 JNI 呼叫 C 的源碼。同樣，Ruby 也容許程式把工作交給其他語言。</p>
<p>很多重要的 Ruby 庫例如 mongrel、eventmachine、hpricot 也是由 native 和 ruby 合作而成。雖然在 <a href="http://www.rubyinside.com/how-to-create-a-ruby-extension-in-c-in-under-5-minutes-100.html">Ruby 裡使用 C 寫 extension </a>也算很簡單 (比 JNI 好得多吧？！)，然而在使用它仍需要不斷的作 context switching。</p>
<p>於是就有人想到 RubyInline 。</p>
<p>它是受到 Perl 的 Inline.PM 啟發而寫成。就如其名，它讓我們可以在 Ruby 中直接 Inline 寫 C 或 C++ 源碼：</p>
<h3>安裝</h3>
<p><code lang="ruby" tab_size="2" lines="40"><br />
einstein:lib siuying$ sudo gem install RubyInline<br />
Successfully installed RubyInline-3.6.6<br />
1 gem installed<br />
</code></p>
<h3>應用</h3>
<p><code lang="ruby" tab_size="2" lines="40"><br />
begin require 'rubygems' rescue LoadError end<br />
require 'inline'</p>
<p>class TestInline<br />
  def factorial(n)<br />
    f = 1<br />
    n.downto(2) { |x| f *= x }<br />
    f<br />
  end</p>
<p>  inline do |builder|<br />
    builder.c "<br />
    long factorial_c(int max) {<br />
      int i=max, result=1;<br />
      while (i >= 2) { result *= i--; }<br />
      return result;<br />
    }"<br />
  end<br />
end</p>
<p>t = TestInline.new()<br />
puts t.factorial(10)<br />
puts t.factorial_c(10)<br />
</code></p>
<p>執行結果：<br />
<code lang="ruby" tab_size="2" lines="40"><br />
einstein:lib siuying$ ruby test_inline.rb<br />
3628800<br />
3628800<br />
</code></p>
<p>在背後 RubyInline 自動地輸出和編譯了以下源碼：<br />
<code lang="ruby"></p>
<p>#include "ruby.h"</p>
<p># line 13 "test_inline.rb"<br />
static VALUE factorial_c(VALUE self, VALUE _max) {<br />
  int max = FIX2INT(_max);</p>
<p>      int i=max, result=1;<br />
      while (i >= 2) { result *= i--; }<br />
      return INT2NUM(result);<br />
    }</p>
<p>#ifdef __cplusplus<br />
extern "C" {<br />
#endif<br />
  void Init_Inline_TestInline_bfe6() {<br />
    VALUE c = rb_cObject;<br />
    c = rb_const_get_at(c,rb_intern("TestInline"));<br />
    rb_define_method(c, "factorial_c", (VALUE(*)(ANYARGS))factorial_c, 1);</p>
<p>  }<br />
#ifdef __cplusplus<br />
}<br />
#endif<br />
</code></p>
<p>RubyInline 己代我們寫好 Stub 和做好封裝、轉換的工作，很好！很強大！<strong>更牛的是 RubyInline支援任何語言。</strong>在 Ruby Forge 上居然有 Fortran 的 Builder。最近 JRuby 的 Charles Nutter 就用百多行源碼寫了個在 JRuby 上使用的 <a href="http://headius.blogspot.com/2008/03/rubyinline-for-jruby-easy.html">RubyInline Java Builder</a>。利用 JRuby、Java Compiler API 和 RubyInline ，在 JRuby 上可以直接 inline 用 Java 寫些需要最快速度完成的工作了。就像魔法一樣簡單！</p>
<h3>延申閱讀</h3>
<ul>
<li><a href="http://www.zenspider.com/ZSS/Products/RubyInline/">RubyInline</a></li>
<li><a href="http://segment7.net/projects/ruby/inline_optimization.html">Using RubyInline for Optimization</a></li>
<li><a href="http://blog.zenspider.com/archives/2006/09/recursive_functions_in_rubyinline.html">Recursive Functions in RubyInline</a></li>
<li><a href="http://headius.blogspot.com/2008/03/rubyinline-for-jruby-easy.html">RubyInline for JRuby? Easy!</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2008/03/15/796/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用 JRuby 整合 Ruby 和 Java (2) &#8211; DRb 和 RMI</title>
		<link>http://www.reality.hk/articles/2008/02/16/782/</link>
		<comments>http://www.reality.hk/articles/2008/02/16/782/#comments</comments>
		<pubDate>Sat, 16 Feb 2008 14:27:50 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[distributed-computing]]></category>
		<category><![CDATA[DRb]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[rmi]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.reality.hk/articles/2008/02/16/782/</guid>
		<description><![CDATA[DRb (Distributed Ruby) 是 Ruby 的 RPC。使用 DRb 我們可以經 TCP/IP 去使用遠端的物件。DRb 的運作方式跟傳統的 RPC 差不多，只是定義 Stub 和 Skeleton 都交給 Ruby 負責，遠端的客戶甚至不需任何有關類的定義，一切都動態地由 Ruby 完成了。 DRb 其中一個重要用處就是分隔和連接不同的服務。如 BackgrounDRb 就是一個使用 DRb 的 Rails plugin，它讓 Web Server 可以把一些繁重的工作交給另一個 Process (本地的或者其他的主機也可)。 前文試驗過怎樣在 JRuby 呼叫 RMI ，用同樣的方法，我們可以用 JRuby 作 proxy ，讓其他的 Ruby Process 可以如普通 Java 軟件一樣使用 RMI。 以下 Ruby 的源碼就會連接 RMI Service [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://chadfowler.com/ruby/drb.html">DRb</a> (Distributed Ruby) 是 Ruby 的 RPC。使用 DRb 我們可以經 TCP/IP 去使用遠端的物件。DRb 的運作方式跟傳統的 RPC 差不多，只是定義 Stub 和 Skeleton 都交給 Ruby 負責，遠端的客戶甚至不需任何有關類的定義，一切都動態地由 Ruby 完成了。</p>
<p><span id="more-782"></span><br />
DRb 其中一個重要用處就是分隔和連接不同的服務。如 <a href="http://backgroundrb.rubyforge.org/">BackgrounDRb</a> 就是一個使用 DRb 的 Rails plugin，它讓 Web Server 可以把一些繁重的工作交給另一個 Process (本地的或者其他的主機也可)。</p>
<p>前文試驗過<a href="http://www.reality.hk/articles/2008/02/13/780/">怎樣在 JRuby 呼叫 RMI </a>，用同樣的方法，我們可以用 JRuby 作 proxy ，讓其他的 Ruby Process 可以如普通 Java 軟件一樣使用 RMI。</p>
<p>以下 Ruby 的源碼就會連接 RMI Service 並開啟一個 DRb 服務：<br />
<code>
<pre>
module DRb
  def start_rmi_service(rmiuri=nil, drburi=nil, config=nil)
    DRb.start_service(drburi, RbRmi::Rmi.new(rmiuri), config)
  end
  module_function :start_rmi_service
end
</pre>
<p></code></p>
<p>接著我們可以如常使用 DRb ：</p>
<p><code>
<pre>
DRb.start_rmi_service "//0.0.0.0:5555/HelloServer", "druby://0.0.0.0:8888"
DRb.thread.join
</pre>
<p></code></p>
<p>這樣一個 DRb RMI 服務就完成了！試試在另一部電腦使用 irb ：</p>
<p><code>
<pre>
core:java siuying$ irb
irb(main):001:0> require 'drb'
irb(main):002:0> DRb.start_service
irb(main):003:0> rmi = DRbObject.new(nil, 'druby://:8888')
irb(main):004:0> rmi.sayHello
</pre>
<p></code></p>
<p>成功！我們可以把這包裝成一個指令，這樣只要在作整合的 server 輸入指令：</p>
<p><code>
<pre>
jruby rmi-drb.rb '//0.0.0.0:5555/HelloServer' 'druby://0.0.0.0:8888' "../hello.jar"
</pre>
<p></code></p>
<p>即可連接 Java 和 Ruby 的世界了！JRuby 還支援把 JRuby compile 成 Java Class，把這 package 後可以直接把 binary deploy，在任何支援 Java 的系統上執行！</p>
<p>有興趣試試這個程式可以到 svn 下載<a href="http://svn.reality.hk/ruby/rb-rmi/">源碼</a>。</p>
<h3>引申閱讀：</h3>
<ul>
<li><a href="http://chadfowler.com/ruby/drb.html">Intro to DRb</a></li>
<li><a href="http://backgroundrb.rubyforge.org/">BackgrounDRb</a></li>
<li><a href="http://www.reality.hk/articles/2008/02/13/780/">用 JRuby 整合 Ruby 和 Java</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2008/02/16/782/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>用 JRuby 整合 Ruby 和 Java</title>
		<link>http://www.reality.hk/articles/2008/02/13/780/</link>
		<comments>http://www.reality.hk/articles/2008/02/13/780/#comments</comments>
		<pubDate>Tue, 12 Feb 2008 17:02:31 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jruby]]></category>
		<category><![CDATA[rmi]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.reality.hk/articles/2008/02/13/780/</guid>
		<description><![CDATA[JRuby 是一個純 Java 下的 Ruby 實現。在 JVM 下執行的 Ruby 的移植性更好，而且可以讓 Ruby 直接使用 Java 的庫。今次我會介紹如何安裝和設定 JRuby ，並用它去呼叫現有的 Java RMI 。 安裝 JRuby 假設你己安裝了 Java ，那安裝 JRuby 很簡單： 到 JRuby 的網頁並選 &#8216;Download!&#8217;，選擇一個版本 ( jruby-bin-&#60;version&#62;.zip ) ，現在最新的是 JRuby 1.1RC1 ( jruby-bin-1.1RC1.zip ) 把檔案解壓到一個位置，如 /usr/local/jruby，並把 bin 加到 PATH 中 執行 jruby 即可使用 JRuby！ 通常我們用指令 jruby file.rb 去執行 ruby 程式 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://jruby.codehaus.org/">JRuby</a> 是一個純 Java 下的 <a href="http://www.ruby-lang.org/en/">Ruby</a> 實現。在 JVM 下執行的 Ruby 的移植性更好，而且可以讓 Ruby 直接使用 Java 的庫。今次我會介紹如何安裝和設定 JRuby ，並用它去呼叫現有的 Java RMI 。</p>
<p><span id="more-780"></span></p>
<h3>安裝 JRuby</h3>
<p>假設你己安裝了 Java ，那安裝 JRuby 很簡單：</p>
<ul>
<li>到 <a href="http://jruby.codehaus.org/">JRuby 的網頁</a>並選 &#8216;Download!&#8217;，選擇一個版本 ( jruby-bin-<em>&lt;version&gt;</em>.zip ) ，現在最新的是 JRuby 1.1RC1 ( <a href="http://dist.codehaus.org/jruby/jruby-bin-1.1RC1.zip">jruby-bin-1.1RC1.zip</a> )</li>
<li>把檔案解壓到一個位置，如 /usr/local/jruby，並把 bin 加到 PATH 中 </li>
<li>執行 jruby 即可使用 JRuby！</li>
</ul>
<p>通常我們用指令 jruby file.rb 去執行 ruby 程式 (file.rb)，也可以使用 jruby -S command 去執行一些內置的指令 (如 <a href="http://www.rubygems.org/">gem</a>)。詳細的用法可以用 jruby &#8211;help 看到。</p>
<h3>設定 Java RMI</h3>
<p>這個例子中我們假設已有一個 Hello World RMI Service。它的源碼很簡單：</p>
<h4>Hello.java</h4>
<p><code>
<pre>
import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Hello extends Remote {
	String sayHello() throws RemoteException;
}
</pre>
<p></code></p>
<h4>Hello.java</h4>
<p><code>
<pre>
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
import java.rmi.server.UnicastRemoteObject;

public class HelloImpl extends UnicastRemoteObject implements Hello {
    public HelloImpl() throws RemoteException {
		super();
    }

    public String sayHello() {
		return "Hello World!";
    }

    public static void main(String args[]) {
		// Create and install a security manager
		if (System.getSecurityManager() == null) {
		    System.setSecurityManager(new RMISecurityManager());
		}

		try {
		    HelloImpl obj = new HelloImpl();
		    Naming.rebind("//0.0.0.0:5555/HelloServer", obj);
		} catch (Exception e) {
		    e.printStackTrace();
		}
    }
}
</pre>
<p></code></p>
<p>這個 RMI 服務只提供一個方法：String sayHello()。詳細的 RMI 設定我不重覆了，請參考 <a href="http://java.sun.com/j2se/1.3/docs/guide/rmi/getstart.doc.html">Sun 的介紹</a>。總之這裡我們假設 rmiregistry 和 HelloImpl 己經執行了，欠的只是一個 RMI Client。</p>
<h3>JRuby 中呼叫 Java RMI</h3>
<p>把相關的 RMI Stub 放在 JRuby 的 Class Path 中 (JRuby 也是一個 Java 程式啊！)，接著在 Jruby 中就可以使用有開的 RMI 了。這裡我們用 irb (Interactive Ruby Shell) 示範：</p>
<p><code>
<pre>
core:ruby siuying$ jruby -S irb
irb(main):001:0&gt; <strong>include Java </strong>
=&gt; Object
irb(main):002:0&gt; <strong>remote = java.rmi.Naming.lookup '//127.0.0.1:5555/HelloServer'</strong>
=&gt; #&lt;Java::Default::HelloImpl_Stub:0x2e62e @java_object=HelloImpl_Stub[UnicastRef [liveRef: [endpoint:[192.168.11.7:49661](remote),objID:[a96e08c:1180df7b735:-8000, 0]]]]&gt;
irb(main):003:0&gt; <strong>remote.sayHello</strong>
=&gt; "Hello World!"
</pre>
<p></code></p>
<p>include Java 是 JRuby 的魔法，只要使用它就可以直接在 JRuby 中用 package 指定 Java 的 class (也可以用 import 把特定的 class 或 package 全包括進來) 。</p>
<p>接著兩行就是 JRuby 在用 Naming 去找主機上的 HelloServer 服務，並使用它的 sayHello 方法。這和在 Java 上使用 RMI 沒有甚麼分別 &#8212; 除了源碼短少和動態的特性之外。</p>
<h4>rm_rmi.rb</h4>
<p><code>
<pre>
import 'hello.jar'
class RbRmi
  attr_reader :url
  attr_reader :classpath

  def initialize(url)
    @url = url
    self.init
  end

  protected
    def init
      @remote = java.rmi.Naming.lookup(url)
      @remote.java_class.declared_instance_methods.each() { |method|
        self.class.send(:define_method, method.name){ |*args|
          @remote.send(method.name.to_sym, *args)
        }
      }
    end
end</pre>
<p></code></p>
<p>接著輸入以下指令：<br />
<code>
<pre>
irb(main):047:0&gt; <strong>rmi = RbRmi.new "//127.0.0.1:5555/HelloServer"</strong>
=> #&lt;RbRmi:0x67ed25
@url="//127.0.0.1:5555/HelloServer", @remote=#&lt;Java::Default::HelloImpl_Stub:0x22631
@java_object=HelloImpl_Stub[UnicastRef [liveRef: [endpoint:[192.168.11.7:49661](remote),objID:[a96e08c:1180df7b735:-8000, 0]]]]&gt;,
@classpath="../hello.jar"&gt;
irb(main):048:0&gt; <strong>rmi.sayHello</strong>
=> "Hello World!"
</pre>
<p></code></p>
<p>rmi 明明只是個 Ruby RbRmi object，怎樣卻自動新增了 RMI stub 裡的方法！？這就是 Ruby 的動態特性的厲害之處。在執行中 (init 方法) 我們為 RbRmi 物件加入了新的 method！這是在程式碼或者在 command line 的 irb 中進行，完全沒有 compile 的過程！</p>
<p>當然，這個粗略的實作未必是 industrial strength 的解決方案，但這己可以看見在 JRuby 中使用 Java 物件(包括 RMI) 是如此的簡單。以後即使有沉重的遺留應用，我們還是可以好好利用 Ruby 的強大生產力了。</p>
<p><strong>Update@13 Feb</strong>: 原本的程式只支援沒有 argument 的 method，改良為支援任意數目的 arguments 。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2008/02/13/780/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipse 發表 Europa</title>
		<link>http://www.reality.hk/articles/2007/07/02/738/</link>
		<comments>http://www.reality.hk/articles/2007/07/02/738/#comments</comments>
		<pubDate>Mon, 02 Jul 2007 02:56:06 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://www.reality.hk/articles/2007/07/02/738/</guid>
		<description><![CDATA[Eclipse Europa 是今年的 Eclipse 新版本，裡面包括 21 個 projects 的更新，其中以下比較讓我注意： Mylyn 一個以「工作」(Task) 為目標的 UI， Mylyn 讓開發者可以 offline 修改像 Bugzilla、Trac 或 JIRA 等的開發平台。Mylyn 會監察你的工作進度並顯示出你有興趣的東西。 SOA Tools Platform Project 在 Eclipse 上開發 Service Oriented Architecture (SOA) 的平台。 Web Tools Platform (WTP) Project J2EE 和 Web 相關的 project。新版本中包括 EJB3 JPA、JSP2.0、JSF1.2、Axis Web Services、Tomcat 支援和 Java EE 5 project支援。 Model To [...]]]></description>
			<content:encoded><![CDATA[<p>Eclipse Europa 是今年的 Eclipse 新版本，裡面包括 21 個 projects 的更新，其中以下比較讓我注意：</p>
<h3>Mylyn</h3>
<p>一個以「工作」(Task) 為目標的 UI， <a href="http://www.eclipse.org/mylyn/">Mylyn</a> 讓開發者可以 offline 修改像 Bugzilla、Trac 或 JIRA 等的開發平台。Mylyn 會監察你的工作進度並顯示出你有興趣的東西。</p>
<p><a href="/~siuying/images/mylyn-2.0.png"><br />
<img src="/~siuying/images/mylyn-2.0s.png" alt="Mylyn" /></a></p>
<h3>SOA Tools Platform Project</h3>
<p>在 Eclipse 上開發 <a href="http://www.eclipse.org/stp/">Service Oriented Architecture</a> (SOA) 的平台。</p>
<h3>Web Tools Platform (WTP) Project</h3>
<p><a href="http://www.eclipse.org/webtools/main.php">J2EE 和 Web 相關的 project</a>。新版本中包括 EJB3 JPA、JSP2.0、JSF1.2、Axis Web Services、Tomcat 支援和 Java EE 5 project支援。<br />
<img src="/~siuying/images/dali-screenshot.jpg" alt="Dali - EJB3 JPA in Eclipse" /></p>
<h3>Model To Text (M2T)</h3>
<p>Eclipse 的<a href="http://www.eclipse.org/modeling/m2t/"> code generator</a>。用類似 JSP template 的方法，把 Model 轉為 java, html, xml 等檔案。</p>
<p>更多資料請參考 <a href="http://www.eclipse.org/europa/">Eclipse Europa</a>主頁 。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2007/07/02/738/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>全文搜尋 (Lucene 和 Ferret)</title>
		<link>http://www.reality.hk/articles/2007/05/21/721/</link>
		<comments>http://www.reality.hk/articles/2007/05/21/721/#comments</comments>
		<pubDate>Sun, 20 May 2007 17:45:12 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[chinese]]></category>
		<category><![CDATA[ferret]]></category>
		<category><![CDATA[index]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[lucene]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://www.reality.hk/articles/2007/05/21/721/</guid>
		<description><![CDATA[搜尋器改變了人們的習慣。當有能力在互聯網上用 0.01 秒的搜尋就找到想要的資料時，如果我們的軟件要花個幾秒甚至幾分鐘才找到資料，用家就會覺得這個軟件很差勁了。 怎樣去做搜尋？ 最近單的方法莫過於 SELECT * FROM MYTABLE WHERE CONTENT LIKE &#39;%KEYWORD1%&#39; OR &#39;%KEYWORD2%&#39; 。我們的專案就是用這個方法搜尋用戶地址。這個方法完全沒有問題 &#8212; 起碼 &#8212; 在這一年多的開發、測試環境也沒有問題。直到在實際環境中 &#8212; 有上百萬條記錄的資料庫 &#8212; 這種搜尋對資料庫的壓力太大了。試想著每次也由頭到尾由「黃頁」找一個人吧。每條查詢花上2秒以上的時間，我們的系統可是有 3000 個同時的用家啊！ 全文搜索 全文搜索是另一個方法。它的原理是把文件每一個字也加進索引中，就如查「黃頁」可以直接打開相關的頁數一樣，效率比傳統方法快上一個數量級。 Lucene 是一個 Java 的全文搜索工具，利用它任何 Java 軟件也可以為任何文件作全文搜索。它分成兩部份：索引和搜尋。前者把文件經整理和分詞化成可以搜尋的索引；後者則由用者的查詢返回相關結果。Lucene 的擴展性很高，開發者可以編寫不同的 document parser 讓 lucene 支援任何文檔，擴展 Analyzer 以支援不同的語言，也可以自定 query parser 改變搜尋的特性。 Lucene 的發展相當成熟，我可不用班門弄斧寫教學了，初學者請讀 IBM developerWorks 实战 Lucene，第 1 部分: 初识 Lucene&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>搜尋器改變了人們的習慣。當有能力在互聯網上用 0.01 秒的搜尋就找到想要的資料時，如果我們的軟件要花個幾秒甚至幾分鐘才找到資料，用家就會覺得這個軟件很差勁了。</p>
<p><strong>怎樣去做搜尋？</strong></p>
<p>最近單的方法莫過於 SELECT * FROM MYTABLE WHERE CONTENT LIKE &#39;%KEYWORD1%&#39; OR &#39;%KEYWORD2%&#39; 。我們的專案就是用這個方法搜尋用戶地址。這個方法完全沒有問題 &#8212; 起碼 &#8212; 在這一年多的開發、測試環境也沒有問題。直到在實際環境中 &#8212; <em>有上百萬條記錄的資料庫</em> &#8212; 這種搜尋對資料庫的壓力太大了。<strong>試想著每次也由頭到尾由「黃頁」找一個人吧。</strong>每條查詢花上2秒以上的時間，我們的系統可是有 3000 個同時的用家啊！</p>
<p><strong>全文搜索</strong></p>
<p>全文搜索是另一個方法。它的原理是把文件每一個字也加進索引中，就如查<strong>「黃頁」</strong>可以直接打開相關的頁數一樣，效率比傳統方法快上一個數量級。</p>
<p>Lucene 是一個 Java 的全文搜索工具，利用它任何 Java 軟件也可以為任何文件作全文搜索。它分成兩部份：索引和搜尋。前者把文件經整理和分詞化成可以搜尋的索引；後者則由用者的查詢返回相關結果。Lucene 的擴展性很高，開發者可以編寫不同的 document parser 讓 lucene 支援任何文檔，擴展 Analyzer 以支援不同的語言，也可以自定 query parser 改變搜尋的特性。</p>
<p>Lucene 的發展相當成熟，我可不用班門弄斧寫教學了，初學者請讀 IBM developerWorks <a href="http://www.ibm.com/developerworks/cn/java/j-lo-lucene1/" target="_blank">实战 Lucene，第 1 部分: 初识 Lucene</a>&nbsp; 。</p>
<p><strong>Ruby on Rails 的</strong><strong>全文搜索</strong></p>
<p>提起全文搜索不能不提 Ruby on Rails 的全文搜索解決方案：<a href="http://ferret.davebalmain.com/trac" target="_blank">act_as_ferret</a>了，它是個基於 Lucene 設計的，Ruby on Rails 的全文搜尋工具。 只需要在 Model 中加一句：act_as_ferret，你的 data model 就立即有全文搜索功能！這在以前就像奇跡啊！要搜尋也易如反掌，如 Address.find_by_content(&#39;district:mong kok AND name:tong&#39;) 就行了，Query 是跟 Lucene 一樣的，使用過 Lucene 的開發者不會有問題。</p>
<p>小小的問題：Terret 的預設 Analyzer 並不支援 CJK 的分詞，完全不能索引中文文件。不過用 lukhnos 發表的簡單 <a href="http://lukhnos.org/blog/zh/" target="_blank">regular expression analyzer </a>己經可以解決基本的問題了。</p>
<p><strong>相關連結：&nbsp;</strong></p>
<ul>
<li><a href="http://lucene.apache.org/" target="_blank">Lucene</a></li>
<li><a href="http://www.ibm.com/developerworks/cn/java/j-lo-lucene1/" target="_blank">实战 Lucene，第 1 部分: 初识 Lucene</a></li>
<li><a href="http://www.ibm.com/developerworks/cn/java/wa-lucene/" target="_blank">深入 Lucene 索引机制</a></li>
<li><a href="http://ferret.davebalmain.com/trac/wiki/FerretOnRails" target="_blank">act_as_ferret Project</a></li>
<li><a href="http://lukhnos.org/blog/zh/" target="_blank">acts_as_ferret: Rails全文搜尋快速上手（與中日韓文支援）</a></li>
<li><a href="http://blog.dragon2.net/2007/05/18/461.php" target="_blank">快快樂樂學 Ruby &#8211; 再談 Ferret</a></li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2007/05/21/721/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>讓電腦學習詞語</title>
		<link>http://www.reality.hk/articles/2007/02/05/675/</link>
		<comments>http://www.reality.hk/articles/2007/02/05/675/#comments</comments>
		<pubDate>Mon, 05 Feb 2007 15:19:11 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[ai]]></category>
		<category><![CDATA[data_mining]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[machine_learning]]></category>
		<category><![CDATA[natural_language_processing]]></category>
		<category><![CDATA[wiki]]></category>

		<guid isPermaLink="false">http://www.reality.hk/articles/2007/02/05/675/</guid>
		<description><![CDATA[語言分析是其中一個人工智能的難題，直到最近都未能有讓人滿意的方案。 想想我們是怎樣學習閱讀的。我們初學習閱讀的時候會每個字逐一地閱讀。慢慢我們對詞語的認識深了，閱讀的單位會變為一個個詞語。「一目十行」就是指速讀的人可以一眼就讀十行的文字，這種閱讀能力要求瞬間分析一段文字的結構和內容，只花時間去理解最重要的資料，再用這些資料去幫助理解沒有看清的文字。 這種能力正是現在的電腦所缺乏的。別說理解整篇文章，單是把詞句分解成可理解的單位的問題己經不簡單。沒錯己經有研究指出可以利用字典幫助分割文字，然而這仍不足夠。 一方面，語言不斷在變更，每天都有新詞誕生。通常我們有的字典都是經年累月編寫的，我們需要更齊全更新的字典。同時，我們學習文字並不是單獨地記憶的，見到一個詞語我們會聯想，我們懂得相關詞、同義詞、反義詞等關系。如果懂得利用上文下理和詞語的聯想，語言分析也許可以更有效。 這有關如何建做一本字典：齊全的、時常更新的、包含字詞間的關系、自由和免費&#8230; 這其實在網上己經有，就是維基 Wikipedia。每一頁的維基都是一個詞，有這個的定義、包括多層級的分類、有同義詞的定義、而每一頁的連結可視作相關度的提示&#8230;&#8230; 基於這個假設我寫了這個示範軟件： 使用 Java Web Start 開啟 (需要Java 5.0或以上) (注：這個軟件的資料由Wikipedia提供。軟件會以Apache License方式發佈，不過準備源碼需要一點時間&#8230;) 用家輸入想要查看的詞語，軟件就在維基找回有關的定義、相關字和分類。用家可以經這些相關詞和分類繼續瀏覽，查看相關的條目和分類。簡單的改良可以包括互動化圖像輸出、caching、按重要性排列相關字、反向查看相關字和條目的關系、支援不同語言的維基、利用維基找不同語言的同義詞等等&#8230; 這只是一個Proof Of Concept。想像當我們有整個維基的資料在手，我們就可以用更多不同的角度查看這些資料。只要稍加調整，用同樣的方法我們可以由其他網站抽出文字的關系。由更高的角度看，也許可以做一個漫遊網路學習文字的機器？要怎樣做還要用多點時間去想。]]></description>
			<content:encoded><![CDATA[<p>語言分析是其中一個人工智能的難題，直到最近都<a href="http://www.reality.hk/articles/2004/06/02/178/">未能有讓人滿意的方案</a>。</p>
<p>想想我們是怎樣學習閱讀的。我們初學習閱讀的時候會每個字逐一地閱讀。慢慢我們對詞語的認識深了，閱讀的單位會變為一個個詞語。「一目十行」就是指速讀的人可以一眼就讀十行的文字，這種閱讀能力要求瞬間分析一段文字的結構和內容，只花時間去理解最重要的資料，再用這些資料去幫助理解沒有看清的文字。</p>
<p>這種能力正是現在的電腦所缺乏的。別說理解整篇文章，單是把詞句分解成可理解的單位的問題己經不簡單。沒錯己經有研究指出可以<a href="http://www.reality.hk/articles/2005/03/16/382/">利用字典幫助分割文字</a>，然而這仍不足夠。</p>
<p>一方面，語言不斷在變更，每天都有新詞誕生。通常我們有的字典都是經年累月編寫的，我們需要更齊全更新的字典。同時，我們學習文字並不是單獨地記憶的，見到一個詞語我們會聯想，我們懂得相關詞、同義詞、反義詞等關系。如果懂得利用上文下理和詞語的聯想，語言分析也許可以更有效。</p>
<p>這有關如何建做一本字典：齊全的、時常更新的、包含字詞間的關系、自由和免費&#8230; 這其實在網上己經有，就是維基 Wikipedia。每一頁的維基都是一個詞，有這個的<strong>定義</strong>、包括多層級的<strong>分類</strong>、有<strong>同義詞</strong>的定義、而每一頁的連結可視作<strong>相關度</strong>的提示&#8230;&#8230; 基於這個假設我寫了這個示範軟件：</p>
<p><a href="http://www.reality.hk/~siuying/weblearner/wikisearcher.jnlp"><img src="/~siuying/wikisearch/search1.png" alt="Wiki Search (1)" /></a></p>
<p><a href="http://www.reality.hk/~siuying/weblearner/wikisearcher.jnlp"><img src="/~siuying/wikisearch/search2.png" alt="Wiki Search (2)" /></a></p>
<p><a href="http://www.reality.hk/~siuying/weblearner/wikisearcher.jnlp">使用 Java Web Start 開啟</a> (需要<a href="http://java.sun.com/javase/downloads/index.jsp">Java 5.0或以上</a>) (注：這個軟件的資料由Wikipedia提供。軟件會以Apache License方式發佈，不過準備源碼需要一點時間&#8230;)</p>
<p>用家輸入想要查看的詞語，軟件就在維基找回有關的定義、相關字和分類。用家可以經這些相關詞和分類繼續瀏覽，查看相關的條目和分類。簡單的改良可以包括<strong>互動化圖像輸出</strong>、<strong>caching</strong>、<strong>按重要性排列相關字</strong>、<strong>反向查看相關字和條目的關系</strong>、支援不同語言的維基、利用維基找不同語言的同義詞等等&#8230;</p>
<p>這只是一個Proof Of Concept。想像當我們有<strong>整個維基的資料</strong>在手，我們就可以用更多不同的角度查看這些資料。只要稍加調整，用同樣的方法我們可以由<strong>其他網站抽出文字的關系</strong>。由更高的角度看，也許可以做一個<strong>漫遊網路</strong>學習文字的機器？要怎樣做還要用多點時間去想。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2007/02/05/675/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>恒指有多高？</title>
		<link>http://www.reality.hk/articles/2007/01/03/668/</link>
		<comments>http://www.reality.hk/articles/2007/01/03/668/#comments</comments>
		<pubDate>Tue, 02 Jan 2007 17:33:13 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[aastock]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[hsi]]></category>
		<category><![CDATA[jakarta]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[stock]]></category>

		<guid isPermaLink="false">http://www.reality.hk/articles/2007/01/03/668/</guid>
		<description><![CDATA[恒生指數在2007年第一個交易日再創新高，以接近全日高位的20310.18點收市，全日升345.46點。 人人也說股市升得太勁太高，怎樣才是太高呢？市盈率是其中一個指標。由於恒指成份股佔了大市重大的比重，由他們的平均市盈率可以看到整體大市的熾熱程度。 怎樣才可以知道最新的恒指平均市盈率呢？個別股份的市盈率在財經網站不難找到，不如試試DIY一個小程式去幫手吧，它要有以下功能： 由財經網站下載成份股的市盈率 計算他們的平均值 時間無多，趕快準備今次的材料： Groovy Jakarta Commons HTTP Client 提供市盈率資料的網站，如AAstock &#8230;由於時間關系，程式己經準備好了，看看執行的結果： {[.src-1 /enzymes/chili-js.php]} 原來平均市盈率只有17.35&#8230; 這看來並不算高？ 利用Java, Groovy和HttpClient，這種以前頗麻煩的程式現在只需百多行源碼就攪定了。源碼並不很groovy，基本上還是使用java的寫法。由於太簡單，講解也是多餘的，請看看內容吧： PeRatioCalculator.groovy {[.src-2 /enzymes/java.php]} pe.properties {[.src-properties /enzymes/java.php]} (注：以上數字是單純的平均數，認真來說要同時計算各股票佔大市的比重！這就當作功課留給大家努力了&#8230;) (注2：另外以上所有言論只屬個人研究用途，本人並不保以上信息全部或部份可靠、準確或完整。本文不構成任何投資建議、要約或要約邀請。)]]></description>
			<content:encoded><![CDATA[<p>恒生指數在2007年第一個交易日再創新高，以接近全日高位的20310.18點收市，全日升345.46點。</p>
<p>人人也說股市升得太勁太高，怎樣才是太高呢？市盈率是其中一個指標。由於恒指成份股佔了大市重大的比重，由他們的平均市盈率可以看到整體大市的熾熱程度。</p>
<p>
怎樣才可以知道最新的恒指平均市盈率呢？個別股份的市盈率在財經網站不難找到，不如試試DIY一個小程式去幫手吧，它要有以下功能：</p>
<ol>
<li>由財經網站下載成份股的市盈率</li>
<li>計算他們的平均值</li>
</ol>
<p>時間無多，趕快準備今次的材料：</p>
<ol>
<li>Groovy</li>
<li>Jakarta Commons HTTP Client </li>
<li>提供市盈率資料的網站，如AAstock</li>
</ol>
<p><span id="more-668"></span></p>
<p>&#8230;<strong>由於時間關系</strong>，程式己經準備好了，看看執行的結果：</p>
<p>{[.src-1 /enzymes/chili-js.php]}</p>
<p>原來平均市盈率只有17.35&#8230; 這看來並不算高？ </p>
<p>利用Java, Groovy和HttpClient，這種以前頗麻煩的程式現在只需百多行源碼就攪定了。源碼並不很groovy，基本上還是使用java的寫法。由於太簡單，講解也是多餘的，請看看內容吧：</p>
<h3>PeRatioCalculator.groovy</h3>
<p>{[.src-2 /enzymes/java.php]}</p>
<h3>pe.properties</h3>
<p>{[.src-properties /enzymes/java.php]}</p>
<p>(注：以上數字是單純的平均數，認真來說要同時計算各股票佔大市的比重！這就當作功課留給大家努力了&#8230;)<br />
(注2：另外以上所有言論只屬個人研究用途，本人並不保以上信息全部或部份可靠、準確或完整。本文不構成任何投資建議、要約或要約邀請。)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2007/01/03/668/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java SE 6 Released</title>
		<link>http://www.reality.hk/articles/2006/12/13/661/</link>
		<comments>http://www.reality.hk/articles/2006/12/13/661/#comments</comments>
		<pubDate>Wed, 13 Dec 2006 14:55:31 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[web_services]]></category>

		<guid isPermaLink="false">http://www.reality.hk/articles/2006/12/13/661/</guid>
		<description><![CDATA[Sun終於正式推出了Java SE 6！比較主要的更新有： 正式加入Scripting Language Support (JSR 223)，內置Java Script，也可以自行加入Groovy到Ruby等各種各樣的語言 更新了的JDBC 4.0 API、以及把Apache Derby &#8211; 一個open source 的DBMS &#8211; 包括在JVM中 Web Services API 2.0 &#8211; 新的Web Service API、以及輕量版的http server api 詳情請參考Sun的宣佈。 相關連結： Java SE 6 Top Ten]]></description>
			<content:encoded><![CDATA[<p><img src="/~siuying/images/Duke-helmet.gif" border="0" width="100" height="88" align="left" />Sun終於正式推出了Java SE 6！比較主要的更新有：</p>
<ul>
<li>正式加入<a href="http://java.sun.com/developer/technicalArticles/J2SE/Desktop/scripting/" target="_blank">Scripting Language Support </a>(JSR 223)，內置Java Script，也可以自行加入Groovy到Ruby等各種各樣的語言 </li>
<li>更新了的<a href="http://jcp.org/en/jsr/detail?id=221" target="_blank">JDBC 4.0 API</a>、以及把<a href="http://developers.sun.com/prodtech/javadb/" target="_blank">Apache Derby</a> &#8211; 一個open source 的DBMS &#8211; 包括在JVM中</li>
<li>Web Services API 2.0 &#8211; 新的<a href="http://java.sun.com/developer/technicalArticles/J2SE/jax_ws_2/" target="_blank">Web Service API</a>、以及輕量版的<a href="http://blogs.sun.com/michaelmcm/entry/http_server_api_in_java" target="_blank">http server api</a> </li>
</ul>
<p>詳情請參考<a href="http://java.sun.com/javase/6/" target="_blank">Sun</a>的宣佈。</p>
<p><strong>相關連結：</strong></p>
<ul>
<li><a href="http://blogs.sun.com/dannycoward/entry/java_se_6_top_ten" target="_blank">Java SE 6 Top Ten</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2006/12/13/661/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SUN開放Java源碼</title>
		<link>http://www.reality.hk/articles/2006/11/19/640/</link>
		<comments>http://www.reality.hk/articles/2006/11/19/640/#comments</comments>
		<pubDate>Sun, 19 Nov 2006 09:13:12 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://www.siuying.net/articles/2006/11/19/640/</guid>
		<description><![CDATA[這也許是Java Community有史以來最大的新聞。十一月十三日，Sun Microsystem宣佈把Java (包括Standard Edition、Micro Edition和Enterprise Edition)以GPL (+Classpath Exception)型式開放！ 開放Java一直是大多開發者的希望，在今年的JavaOne中Sun宣佈了將會開放Java，現在終於有實際內容公佈了。這次開放的內容包括核心程式庫、開發工具、編譯器、HotSpot JRE。一些一直沒有JRE的OS今後也有機會有完整的Java Implementation，一些許久沒有解決的JVM問題也可望有有心人幫忙解決了。這無疑會把Java的領域進一步擴大，也許也會讓更多商業巨頭也進一步參與開源運動呢！ 相關連結： Sun Opens Java FSF welcomes Sun&#8217;s GPL release of Java OpenJDK Community James Gosling on Open Sourcing Sun&#8217;s Java Platform Implementations The ripple effect of a GPL’d Java will reach far and wide JAVA &#8211; Now Open Sourced with GPL]]></description>
			<content:encoded><![CDATA[<p>這也許是Java Community有史以來最大的新聞。十一月十三日，Sun Microsystem宣佈把Java (包括Standard Edition、Micro Edition和Enterprise Edition)以GPL (+<a target="_blank" href="http://www.sun.com/2006-1113/feature/story.jsp">Classpath Exception</a>)型式開放！</p>
<p><img src="/~siuying/images/sun-java.png" /></p>
<p>開放Java一直是大多開發者的希望，在今年的JavaOne中Sun宣佈了將會開放Java，現在終於有實際內容公佈了。這次開放的內容包括核心程式庫、開發工具、編譯器、HotSpot JRE。一些一直沒有JRE的OS今後也有機會有完整的Java Implementation，一些許久沒有解決的JVM問題也可望有有心人幫忙解決了。這無疑會把Java的領域進一步擴大，也許也會讓更多商業巨頭也進一步參與開源運動呢！</p>
<p><strong>相關連結：</strong></p>
<ul>
<li><a target="_blank" href="http://www.sun.com/2006-1113/feature/story.jsp">Sun Opens Java</a></li>
<li><a target="_blank" href="http://www.fsf.org/news/fsf-welcomes-gpl-java.html">FSF welcomes Sun&#8217;s GPL release of Java</a></li>
<li><a target="_blank" href="http://community.java.net/openjdk/">OpenJDK Community</a></li>
<li><a target="_blank" href="http://java.sun.com/developer/technicalArticles/Interviews/gosling_os1_qa.html">James Gosling on Open Sourcing Sun&#8217;s Java Platform Implementations</a></li>
<li><a target="_blank" href="http://blogs.zdnet.com/BTL/?p=3937">The ripple effect of a GPL’d Java will reach far and wide</a></li>
<li><a target="_blank" href="http://tailrank.com/826358/JAVA-Now-Open-Sourced-with-GPL">JAVA &#8211; Now Open Sourced with GPL</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2006/11/19/640/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Abeille Form Designer，簡單地製作專業又誇平台的UI</title>
		<link>http://www.reality.hk/articles/2006/11/01/635/</link>
		<comments>http://www.reality.hk/articles/2006/11/01/635/#comments</comments>
		<pubDate>Wed, 01 Nov 2006 15:40:20 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[swing]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://www.siuying.net/articles/2006/11/01/635/</guid>
		<description><![CDATA[真笨！如果我早點知道Abeille Form Designer，上個project就不用人手寫JGoodies Forms的UI了。 JGoodies Form是個很好的API，讓我們可以在Java中制作出複雜又漂亮的UI。它的問題是雖然它比GridBox等Layout簡單，但要做一個介面還是要我們在紙上畫好再左計右計，調試和微調並不簡單。 要成為可供專業應用的Layout Manager始終需要一個WYSIWYG的設計工具。Form Designer就是這樣一個工具！就算不懂Forms API的人只要使用它也可以做到心目中想要的東西。最重要的是它是LGPL/BSD Licensed的產品，可以在商業或非商業的環境自由地使用！想開發認真的 Swing 軟件的話必需要找它好好研究！]]></description>
			<content:encoded><![CDATA[<p><img src="/~siuying/images/preferences_dev.jpg" /></p>
<p>真笨！如果我早點知道<a href="https://abeille.dev.java.net/">Abeille Form Designer</a>，上個project就不用人手寫JGoodies Forms的UI了。</p>
<p>JGoodies Form是個很好的API，讓我們可以在Java中制作出複雜又漂亮的UI。它的問題是雖然它比GridBox等Layout簡單，但要做一個介面還是要我們在紙上畫好再左計右計，調試和微調並不簡單。</p>
<p>要成為可供專業應用的Layout Manager始終需要一個WYSIWYG的設計工具。Form Designer就是這樣一個工具！就算不懂Forms API的人只要使用它也可以做到心目中想要的東西。最重要的是它是LGPL/BSD Licensed的產品，可以在商業或非商業的環境自由地使用！想開發認真的 Swing  軟件的話必需要找它好好研究！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2006/11/01/635/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java 上的 SSH / SFTP</title>
		<link>http://www.reality.hk/articles/2006/05/31/606/</link>
		<comments>http://www.reality.hk/articles/2006/05/31/606/#comments</comments>
		<pubDate>Tue, 30 May 2006 16:52:14 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://www.siuying.net/articles/2006/05/31/606/</guid>
		<description><![CDATA[工作需要要找Java的SFTP Library。雖然SSH和SFTP/SCP己經是必須的標準，但Java本身沒有支援，同時open source的SSH library也是少得可憐&#8230; JSch &#8212; Java Secure Channel &#8211; 最完整的Java Open Source SSH library，支援最多不同版本的SSH，SCP，SFTP，而且仍在活躍的開發中。缺點是文件相當少，有些source code完全沒有comment，只能由少量例子去猜想它的用法&#8230; SSHTools &#8211; API設計和文件也相當不錯，同樣支援SSH2和SFTP。可惜作者己轉去開發賣錢的SSH工具，這個open source版本己數年沒有更新了。 Ganymed-SSH2 &#8211; 支援SSH2和多種算法，自行實現了各種加密方法 (不需要JVM的support)，相當實用的library。不過這個Library還未完成，還沒有SFTP的功能。 MindTerm 1 &#8211; 一個完整的SSH1 Client，不過己經完全過時了，新版本是收費軟件。 結論：總合來說只有Jsch和Ganymed-SSH2是可用的，如果要使用SFTP那Jsch是必然之選。 參考連結： OpenSSH Alternatives for Java]]></description>
			<content:encoded><![CDATA[<p>工作需要要找Java的<a href="http://en.wikipedia.org/wiki/SSH_file_transfer_protocol">SFTP</a> Library。雖然SSH和SFTP/SCP己經是必須的標準，但Java本身沒有支援，同時open source的SSH library也是少得可憐&#8230;</p>
<p><a href="http://www.jcraft.com/jsch/">JSch &#8212; Java Secure Channel</a> &#8211; 最完整的Java Open Source SSH library，支援最多不同版本的SSH，SCP，SFTP，而且仍在活躍的開發中。缺點是文件相當少，有些source code完全沒有comment，只能由少量例子去猜想它的用法&#8230;</p>
<p><a href="http://sourceforge.net/projects/sshtools">SSHTools</a> &#8211; API設計和文件也相當不錯，同樣支援SSH2和SFTP。可惜作者己轉去開發賣錢的SSH工具，這個open source版本己數年沒有更新了。</p>
<p><a href="http://www.ganymed.ethz.ch/ssh2">Ganymed-SSH2</a> &#8211; 支援SSH2和多種算法，自行實現了各種加密方法 (不需要JVM的support)，相當實用的library。不過這個Library還未完成，還沒有SFTP的功能。</p>
<p><a href="http://www.isnetworks.com/ssh/">MindTerm 1</a> &#8211; 一個完整的SSH1 Client，不過己經完全過時了，新版本是收費軟件。</p>
<p><strong>結論</strong>：總合來說只有Jsch和Ganymed-SSH2是可用的，如果要使用SFTP那Jsch是必然之選。</p>
<p>參考連結：</p>
<ul>
<li><a href="http://www.openssh.com/java.html">OpenSSH Alternatives for Java</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2006/05/31/606/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>網頁轉RSS</title>
		<link>http://www.reality.hk/articles/2006/03/02/588/</link>
		<comments>http://www.reality.hk/articles/2006/03/02/588/#comments</comments>
		<pubDate>Wed, 01 Mar 2006 16:26:09 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[stock]]></category>

		<guid isPermaLink="false">http://www.siuying.net/articles/2006/03/02/588/</guid>
		<description><![CDATA[開始用rss後，平時讀網頁的流程改變了。現在一籃子網站有那個更新都可以在Google Desktop/Google Homepage讀到，發現好東西才點擊讀詳情，省下了不少尋找的時間。不過可惜的是總有些有需要RSS版本的網站遲遲沒有這服務，例如港交所的「最新上市公司訊息」。等他們進化到應用rss真是不知要等到何年何月！路是人走出來，既然沒有rss feed就自己動手整一個吧！因此就制作了any2rss：用regular expression把網頁內容分析成rss feed的軟件。除了港交所外，要新增不同網站的支援，只需加一句regular expression和幾個parameter就可以了。 這個hkex feed的基本功能沒問題，只是太多垃圾公司的訊息了，應該要在軟件裏加一個white list/black list filter的功能。另外只能提供標題也有點不便，不過這真沒有簡單的解決方法 &#8212; 看到那篇有興趣才逐一點擊吧。 相關連結 Lastest Listed Companies Information]]></description>
			<content:encoded><![CDATA[<p>開始用rss後，平時讀網頁的流程改變了。現在一籃子網站有那個更新都可以在Google Desktop/Google Homepage讀到，發現好東西才點擊讀詳情，省下了不少尋找的時間。不過可惜的是總有些有需要RSS版本的網站遲遲沒有這服務，例如港交所的「<a href="http://www.hkex.com.hk/listedco/listconews/sehk/ltn.htm">最新上市公司訊息</a>」。等他們進化到應用rss真是不知要等到何年何月！路是人走出來，既然沒有rss feed就<strong><a href="http://feeds.feedburner.com/hkex">自己動手整一個吧</a></strong>！因此就制作了any2rss：用regular expression把網頁內容分析成rss feed的軟件。除了港交所外，要新增不同網站的支援，只需加一句regular expression和幾個parameter就可以了。</p>
<p>這個hkex feed的基本功能沒問題，只是太多垃圾公司的訊息了，應該要在軟件裏加一個white list/black list filter的功能。另外只能提供標題也有點不便，不過這真沒有簡單的解決方法 &#8212; 看到那篇有興趣才逐一點擊吧。</p>
<h5>相關連結</h5>
<ul>
<li><a href="http://www.hkex.com.hk/listedco/listconews/sehk/ltn.htm">Lastest Listed Companies Information</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2006/03/02/588/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在Java中動態新增Classpath</title>
		<link>http://www.reality.hk/articles/2006/02/08/581/</link>
		<comments>http://www.reality.hk/articles/2006/02/08/581/#comments</comments>
		<pubDate>Wed, 08 Feb 2006 13:07:27 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.siuying.net/articles/2006/02/08/581/</guid>
		<description><![CDATA[設計可以動態擴展的系統時，常常要讀取在設計期未知道的Class，這可以用Java的反射(Reflection)機制解決。但問題是這些新Class往往也是不在原本部處署的CLASSPATH之中，想真正動態地擴展系統我們必須要可以動態由外部的jar中讀取新的Class。

在ClassLoader和子類搜尋後發現URLClassLoader有個addURL()方法，理想的情況是呼叫它就可以把新的URL加到Class Path -- <strong>可惜這是個protected方法</strong>，不是他的子類就不能呼叫這個function。原本想要放棄的時候看到java.net中有相關的討論，它提醒我們只要用Reflection就可以偷偷地呼叫protected的method。
]]></description>
			<content:encoded><![CDATA[<p>設計可以動態擴展的系統時，常常要讀取在設計期未知道的Class，這可以用Java的反射(Reflection)機制解決。但問題是這些新Class往往也是不在原本部處署的CLASSPATH之中，想真正動態地擴展系統我們必須要可以動態由外部的jar中讀取新的Class。</p>
<p>在ClassLoader和子類搜尋後發現URLClassLoader有個addURL()方法，理想的情況是呼叫它就可以把新的URL加到Class Path &#8212; <strong>可惜這是個protected方法</strong>，不是他的子類就不能呼叫這個function。原本想要放棄的時候看到java.net中有相關的討論，它提醒我們只要用Reflection就可以偷偷地呼叫protected的method。</p>
<h5>源碼1：增加URL到Classpath中</h5>
<p>{[.src /enzymes/java.php]}</p>
<p>似乎是個dirty hack，不過它運作良好就是了。不知會否有直接一點的方法？</p>
<h3>Reference:</h3>
<ul>
<li><a href="http://forum.java.sun.com/thread.jspa?threadID=300557&#038;start=15">Modify Classpath At Runtime</a> &#8211; Java Forums</li>
<li><a href="http://www.javaworld.com/javaworld/jw-03-2000/jw-03-classload_p.html">Create a custom Java 1.2-style ClassLoader</a></li>
<li><a href="http://dev2dev.bea.com/blog/jcscoobyrs/archive/2005/05/realworld_use_f.html">Real-World Use For Custom ClassLoaders</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2006/02/08/581/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>用Groovy作XML-RPC Client</title>
		<link>http://www.reality.hk/articles/2006/02/08/571/</link>
		<comments>http://www.reality.hk/articles/2006/02/08/571/#comments</comments>
		<pubDate>Wed, 08 Feb 2006 12:55:43 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[distributed_computing]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[webservice]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xmlrpc]]></category>

		<guid isPermaLink="false">http://www.siuying.net/articles/2006/01/20/571/</guid>
		<description><![CDATA[之前寫過使用Groovy作SQL和Reporting，今次再講講Groovy在Web的應用吧。 XML-RPC XML-RPC讓web application可以簡單地制作通用的接口，把不同地點、不同application間的互動變為可能。就以Word Press為例，它支援Blogger API, metaWeblog API, 和 Movable Type API，其他軟件可以通過XML-RPC讀取甚至更改這個blog的內容。 Its Groovy! Groovy內置了XML-RPC Server和Client，要建立和使用網路服務太容易了！看看以下的例子： [code lang="java"] package net.siuying.tagger import groovy.net.xmlrpc.* static final XMLRPC_URL = "http://www.siuying.net/xmlrpc.php" static final user = "xxxxx" static final password = "xxxxxx" def client = new XMLRPCServerProxy(XMLRPC_URL) try{ xmlRpcResponse = client.metaWeblog.getRecentPosts("1", user, password, 5) xmlRpcResponse.each() { article &#124; println "${article.postid}: [...]]]></description>
			<content:encoded><![CDATA[<p>之前寫過使用Groovy作SQL和Reporting，今次再講講Groovy在Web的應用吧。</p>
<h3>XML-RPC</h3>
<p>XML-RPC讓web application可以簡單地制作通用的接口，把不同地點、不同application間的互動變為可能。就以Word Press為例，它支援<a href="http://www.blogger.com/developers/api/">Blogger API</a>, <a href="http://www.xmlrpc.com/metaWeblogApi">metaWeblog API</a>, 和 <a href="http://www.sixapart.com/movabletype/docs/mtmanual_programmatic.html">Movable Type API</a>，其他軟件可以通過XML-RPC讀取甚至更改這個blog的內容。</p>
<h3>Its Groovy!</h3>
<p>Groovy內置了XML-RPC Server和Client，要建立和使用網路服務太容易了！看看以下的例子：</p>
<p>[code lang="java"]<br />
package net.siuying.tagger<br />
import groovy.net.xmlrpc.*</p>
<p>static final XMLRPC_URL = "http://www.siuying.net/xmlrpc.php"<br />
static final user = "xxxxx"<br />
static final password = "xxxxxx"</p>
<p>def client = new XMLRPCServerProxy(XMLRPC_URL)</p>
<p>try{<br />
        xmlRpcResponse = client.metaWeblog.getRecentPosts("1", user, password, 5)<br />
        xmlRpcResponse.each() { article |<br />
            println "${article.postid}: ${article.title}"<br />
        }<br />
}catch(XMLRPCCallFailureException ex){<br />
        println "Error Calling Remote Server: " + ex.getMessage()<br />
}<br />
[/code]</p>
<p>Groovy的XML-RPC就是這樣簡單！</p>
<h3>Pattern and Logic</h3>
<p>以上的程式做了甚麼？XMLRPCServerProxy 建立了一個 XML RPC Server Proxy。Server Proxy把內部的呼叫包裝成XML-RPC，通過http傳送去伺服器，再把伺服器的回應解封為groovy/java的物件。</p>
<p><b>注意</b>：這些東西一切都在背後完成，編程人員完全不用理會甚麼是XML-RPC、XML、HTTP、Database、Marshalling&#8230;只需像普通程式一樣呼叫就可以了！</p>
<p>呼叫伺服器端的XML-RPC就如呼叫本地的方法一樣，distributed computing從未試過這般簡單！接下來可以做甚麼？比如Blog Editor、Blog內容分析、建立搜尋器索引&#8230; </p>
<ul>
<li><a href="http://www.geekfishing.net/mt-static/docs/mtmanual_programmatic.html">Movable Type XML-RPC PROGRAMMATIC INTERFACES</a></li>
<li><a href="http://technorati.com/tags/XML-RPC">XML-RPC</a></li>
<li><a href="http://maisonbisson.com/blog/post/10600/">Of WordPress Tags, Keywords, XML-RPC, and the MovableType API « MaisonBisson.com</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2006/02/08/571/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在讀新書：SCJP/SCJD + 藥物簡史</title>
		<link>http://www.reality.hk/articles/2005/12/09/546/</link>
		<comments>http://www.reality.hk/articles/2005/12/09/546/#comments</comments>
		<pubDate>Thu, 08 Dec 2005 16:21:33 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Book]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.siuying.net/?p=546</guid>
		<description><![CDATA[藥物簡史 &#8212; 近代以來延續人類生命的偉大發現 出版：廣西師範大學出版社 作者：[德] 恩斯特·博伊姆勒 譯者：張榮昌 由牛痘、盤尼西林、亞氏匹靈這些耳熟能祥的故事，到癌症藥物、愛滋病藥和其他實驗中的藥物，《藥物簡史》可說包括了近代醫藥史的重要事件。 它不是一本藥物名冊，它是本以傳記形式去寫每個改變醫藥史的人和事的史書。這書不沉悶、內容很多樣化：疾病的起源、開發藥物的過程、學術上和商業上的競爭、社會因藥物的改變等等。書本的技術含量不高，雖有一定數量的名詞，但常人足以應付。推介給對這個題目有興趣的朋友。 * * * Sun Certified Programmer &#038; Developer for Java 2 出版：Mc Graw Hill 作者：[美]Kathy Sierra, Bart Bates 為了考試而買的書，被稱為最好的SCJP/SCJD的讀本。作者是制訂SCJP的人員之一，可說是最了解這個考試的人。除了良好的知識外，他的文字還滿有幽默感！(不過都是屬於Geek的笑話吧？) 這本書為應考的人準備，不懂Java的人大概不會讀得明，但為了明白考試需要的話就不會錯的啦。 * * * (預告) Java 5.0 Tiger: A Developer&#8217;s Notebook 出版：Oreilly 作者：David Flanagan 在亞馬訂購了，大概下年才會寄來。「A Developer&#8217;s Notebook」系列的特點是像notebook一樣簡明，還有為developer而設的實例，沒有長篇大論而是以實用為本。這本書一半是買來準備SCJP 5.0考試的，另一半是用來加深對Tiger似熟又未熟的認識吧。 * * * (預告) Ambient Findability &#8212; What We [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.jingqi.com/book/9D8A872F/FD6D/42C7/9D55/6C814430C485.html"><img src="/~siuying/images/medi-history.jpg" alt="" /> </a></p>
<h3>藥物簡史 &#8212; 近代以來延續人類生命的偉大發現</h3>
<p>出版：廣西師範大學出版社<br />
作者：[德] 恩斯特·博伊姆勒<br />
譯者：張榮昌<br />
由牛痘、盤尼西林、亞氏匹靈這些耳熟能祥的故事，到癌症藥物、愛滋病藥和其他實驗中的藥物，《藥物簡史》可說包括了近代醫藥史的重要事件。</p>
<p>它不是一本藥物名冊，它是本以傳記形式去寫每個改變醫藥史的人和事的史書。這書不沉悶、內容很多樣化：疾病的起源、開發藥物的過程、學術上和商業上的競爭、社會因藥物的改變等等。書本的技術含量不高，雖有一定數量的名詞，但常人足以應付。推介給對這個題目有興趣的朋友。</p>
<p>* * *</p>
<h3>Sun Certified Programmer &#038; Developer for Java 2</h3>
<p>出版：Mc Graw Hill<br />
作者：[美]Kathy Sierra, Bart Bates<br />
為了考試而買的書，被稱為最好的SCJP/SCJD的讀本。作者是制訂SCJP的人員之一，可說是最了解這個考試的人。除了良好的知識外，他的文字還滿有幽默感！(不過都是屬於Geek的笑話吧？) 這本書為應考的人準備，不懂Java的人大概不會讀得明，但為了明白考試需要的話就不會錯的啦。</p>
<p>* * * </p>
<h2>(預告)</h2>
<p><a href="http://www.oreilly.com/catalog/javaadn/"><img src="/~siuying/images/javaadn.s.gif" alt="" /></a></p>
<h3>Java 5.0 Tiger: A Developer&#8217;s Notebook</h3>
<p>出版：Oreilly<br />
作者：David Flanagan<br />
在亞馬訂購了，大概下年才會寄來。「A Developer&#8217;s Notebook」系列的特點是像notebook一樣簡明，還有為developer而設的實例，沒有長篇大論而是以實用為本。這本書一半是買來準備SCJP 5.0考試的，另一半是用來加深對Tiger似熟又未熟的認識吧。</p>
<p>* * *</p>
<h2>(預告)</h2>
<p><a href="http://www.amazon.com/gp/product/0596007655/102-3170641-6880935?v=glance&#038;n=283155"><img src="/~siuying/images/ambient.s.gif" alt="" /></a></p>
<h3>Ambient Findability &#8212; What We Find Changes Who We Become</h3>
<p>出版：Oreilly<br />
作者：Peter Morville<br />
同樣要等來年才有機會看到內容。我承認我是因為彩色的動物封面才發現此書，但吸引我的還是其書名和副題 (我是很易給有型的書名吸引的人)。怎樣才叫Ambient Findability？Ambient Findability 又怎樣改變世界？覺得Amazon裏的讀者的評語也很有趣，值得一讀！</p>
<h5>相關連結</h5>
<ul>
<li><a href="http://www.alistapart.com/articles/ambientfindability">A List Apart: Articles: Ambient Findability: Findability Hacks</a></li>
<li><a href="http://www.oreillynet.com/pub/a/network/2005/11/17/ubiquitous-findable-objects.html">O&#8217;Reilly Network: UFOs (Ubiquitous Findable Objects)</a>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2005/12/09/546/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>聽歌學 Oh &#8211; Oh</title>
		<link>http://www.reality.hk/articles/2005/11/13/520/</link>
		<comments>http://www.reality.hk/articles/2005/11/13/520/#comments</comments>
		<pubDate>Sun, 13 Nov 2005 01:34:04 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.siuying.net/?p=520</guid>
		<description><![CDATA[MVC並不是甚麼複雜難明的東西，但開始的時候要把幾個抽象的概念要連結在一起，還真是不容易入手！
學習MVC有個好方法，先<a href="http://www.oreillynet.com/pub/wlg/3533">聽聽歌</a>吧！]]></description>
			<content:encoded><![CDATA[<p>MVC並不是甚麼複雜難明的東西，但開始的時候要把幾個抽象的概念要連結在一起，還真是不容易入手！</p>
<p>學習MVC有個好方法，先<a href="http://www.oreillynet.com/pub/wlg/3533">聽聽歌</a>吧！在Willian&#8217;s Blog中讀到《<a href="http://william.cswiz.org/blog/archives/2005-09-15/song_of_mvc/">MVC 之歌</a>》，一個蘋果電腦的工程司 James Dempsey 在 <a href="http://www.apple.com/hotnews/articles/2003/06/wwdc/">WWDC 2003</a> 中彈和唱出這首他所創作的MVC之歌，爆笑得來也頗實用！當你吃Oreo也會想起MVC的時候，那MVC還有甚麼難度哪~~</p>
<blockquote><p><strong>Model, View, Controller</strong><br />
<em>Lyrics and music by James Dempsey. </em></p>
<p>Model View, Model View, Model View Controller<br />
MVC&#8217;s the paradigm for factoring your code,<br />
into functional segments so your brain does not explode. </p>
<p>To achieve reusability you gotta keep those boundaries clean,<br />
Model on the one side, View on the other, the Controller&#8217;s in between. </p>
<p>Model View — It&#8217;s got three layers like Oreos do.<br />
Model View creamy Controller</p>
<p>&#8230;
</p></blockquote>
<h3>相關連結：</h3>
<ul>
<li><a href="http://www.oreillynet.com/pub/wlg/3533">New way to learn MVC. View a sing-song</a></li>
<li><a href="http://william.cswiz.org/blog/archives/2005-09-15/song_of_mvc/">William’s Blog » Blog Archive » MVC 之歌</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2005/11/13/520/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>殺錯良民</title>
		<link>http://www.reality.hk/articles/2005/11/03/514/</link>
		<comments>http://www.reality.hk/articles/2005/11/03/514/#comments</comments>
		<pubDate>Thu, 03 Nov 2005 15:29:53 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.siuying.net/?p=514</guid>
		<description><![CDATA[之前安裝的Plugin Kitten&#8217;s Spaminator 雖然確能有效防spam，不過誤殺率太高了。爬了爬WordPress Forum見到Spam Karma 2，可以設定的地方多得多，似乎較為可靠？]]></description>
			<content:encoded><![CDATA[<p>之前安裝的Plugin Kitten&#8217;s Spaminator 雖然確能有效防spam，不過誤殺率太高了。爬了爬WordPress Forum見到<a href="http://unknowngenius.com/blog/wordpress/spam-karma/">Spam Karma 2</a>，可以設定的地方多得多，似乎較為可靠？</p>
<p><img src="/~siuying/images/sk2s.PNG" alt="" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2005/11/03/514/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>是進化還是輪迴？</title>
		<link>http://www.reality.hk/articles/2005/11/02/511/</link>
		<comments>http://www.reality.hk/articles/2005/11/02/511/#comments</comments>
		<pubDate>Tue, 01 Nov 2005 16:23:21 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.siuying.net/?p=511</guid>
		<description><![CDATA[Windows Vista畫面一出即讓Windows用家驚豔，Windows的UI又再次大變身 &#8230; 在Windows 95的年代，所有事都很平版。當年Office 95的玩意「漸變色視窗標題」一出，所有寫軟件的人也爭相為自己的軟件加入這功能，我也是其中一個。多年後，朋友在研究怎樣才能把Office 2k的Menu加在自己的VB程式中&#8230; 可以肯定新的Windows推出後寫Windows軟件的人仍會持續這樣走。正如這篇msdn blog《The evolution of mascara in Windows UI》 的一篇comment作者所言，歷史的周期是這樣的： 微軟的新OS用了新的介面 微軟的新Office軟件用了更華麗的介面 所有人用自己的方法在自已軟件中模仿Office的華麗介面 (回到第1點) 現在想起來也我分不清，這究竟是為了自已的軟件「和別人的不同」還是「和別人的一樣」？ &#8212; 也罷，雖然需要的不是這些，但人們的評價往往就是基於這些地方啊。 相關連結： The Old New Thing : The evolution of mascara in Windows UI]]></description>
			<content:encoded><![CDATA[<p>Windows Vista畫面一出即讓Windows用家驚豔，Windows的UI又再次大變身 &#8230;</p>
<p>在Windows 95的年代，所有事都很平版。當年Office 95的玩意「漸變色視窗標題」一出，所有寫軟件的人也爭相為自己的軟件加入這功能，我也是其中一個。多年後，朋友在研究怎樣才能把Office 2k的Menu加在自己的VB程式中&#8230; 可以肯定新的Windows推出後寫Windows軟件的人仍會持續這樣走。正如這篇msdn blog《The evolution of mascara in Windows UI》 的一篇<a href="http://blogs.msdn.com/oldnewthing/archive/2004/07/28/199589.aspx#199635">comment</a>作者所言，歷史的周期是這樣的：</p>
<ol>
<li>微軟的新OS用了新的介面</li>
<li>微軟的新Office軟件用了更華麗的介面</li>
<li>所有人用自己的方法在自已軟件中模仿Office的華麗介面 (回到第1點)</li>
</ol>
<p>現在想起來也我分不清，這究竟是為了自已的軟件「和別人的不同」還是「和別人的一樣」？ &#8212; 也罷，雖然需要的不是這些，但人們的評價往往就是基於這些地方啊。</p>
<p>相關連結：</p>
<ul>
<li><a href="http://blogs.msdn.com/oldnewthing/archive/2004/07/28/199589.aspx">The Old New Thing : The evolution of mascara in Windows UI</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2005/11/02/511/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>選擇DC</title>
		<link>http://www.reality.hk/articles/2005/11/02/452/</link>
		<comments>http://www.reality.hk/articles/2005/11/02/452/#comments</comments>
		<pubDate>Tue, 01 Nov 2005 16:14:28 +0000</pubDate>
		<dc:creator>小影</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[digital_camera]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.siuying.net/?p=452</guid>
		<description><![CDATA[光學質素好的 &#8212; 基本上只選相機廠、鏡頭廠、或者是菲林廠出品 介面適合自己 &#8212; 可以問朋友借來玩玩，有些廠的UI一玩就上手，有些廠我就是用不慣 樣靚 &#8212; 只限隨身帶的機，如果是SLR就不用考慮外表啦 「像素」數字毫無意義]]></description>
			<content:encoded><![CDATA[<ul>
<li>光學質素好的 &#8212; 基本上只選相機廠、鏡頭廠、或者是菲林廠出品</li>
<li>介面適合自己 &#8212; 可以問朋友借來玩玩，有些廠的UI一玩就上手，有些廠我就是用不慣</li>
<li>樣靚 &#8212; 只限隨身帶的機，如果是SLR就不用考慮外表啦</li>
<li>「像素」數字毫無意義</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.reality.hk/articles/2005/11/02/452/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
