2009年2月6日 星期五

Ruby 1.9.1 is released !

Ruby 1.9.1 第一個穩定版本在 2009.1.30 發佈囉。

詳情請看 : http://www.ruby-lang.org/en/news/2009/01/30/ruby-1-9-1-released/

話說已經有快一年沒真正碰 Ruby 了,也沒用 RoR 寫過什麼了不起的東西,但是我對 Ruby 的熱情還是一分未減阿! 每次只要有什麼新東西出現,就會覺得很興奮,躍躍欲試。希望有朝一日可以成為 Ruby Hacker 的一份子阿!

2009年2月5日 星期四

簡易的即時視訊和語音串流

又花了點時間玩了一下 Red5,做了一個簡單的即時視訊和語音的串流。大概了解了即時串流的實作方法,看來可以將進度往前到資料庫的部分了。

(傳送示意圖)

最左邊的是傳送端,右手邊兩個是接收端。因為都在本機,所以看不到延遲的現象。

2009年2月3日 星期二

Java Agent DEvelopment Framework

Java Agent DEvelopment Framework ( Java 代理人開發框架 ),簡稱 JADE,是一套完全由 Java 所實作出來的軟體框架。它藉由一套宣稱符合 FIPA ( Foundation for Intelligent Physical Agent ) 規格的仲介軟體和提供一系列除錯及開發的工具,簡化了多代理人系統的開發。可以以分散式的方式來發佈以跨越主機 ( 甚至作業系統 ),並且有遠端圖形化工具的來進行管理。必要時,還可以讓代理人在各機器之間轉移。Java Run Time 1.4 以上是唯一的系統需求。

代理人溝通的部分,使用代理人溝通語言 (Agent Communication Language, ACL ),各代理人擁有私自的佇列和數種存取模式。而全部的 FIPA 的溝通模型都有被實作,且各元件都被清楚的區分並且完整的整合。也支援使用者自訂的 content languages 和 ontologies,並整合了 JESS 的推理能力。

參考資料 : http://jade.tilab.com/doc/html/intro.htm

2009年2月2日 星期一

Red5 - HTTP 404 Error

Red5 在安裝時,預設就會將 Red5 安裝成服務。所以,系統重新啟動時,不用再執行 Red5.bat 來啟動。否則,Red5.bat 照樣可以執行,也不會出現 Port Binded 的錯誤,看似一切正常,結果只會回傳 HTTP 4o4 Error。

剛剛就耍了這個笨一下... 這應該可以算是 Red5 的 Bug,沒處理到重複執行的問題。

Red5 - onBWDone Error

用 Flex 寫了個將視訊和語音傳到 Red5 的小程式,結果卻發生了 ReferenceError: Error #1069: Property onBWDone not found on StreamTest and there is no default value 的錯誤訊息,Google 了一下,還好有人提供了解決方法,省了我這個 Flex 新手許多時間。

參考資料 : http://www.toybot.nl/blog/?p=28
( 雖然文中方法是用在正統的 Flash Media Server 上,但是理念是相同的。)

簡單來說,這個錯誤發生的原因是因為串流傳送到伺服器時,會對用戶端的頻寬進行測試,並給予適當的傳輸限制。因為我是將串流傳送到 webapps/oflaDemo 下,看了一下原始碼,果然...


public boolean appConnect(IConnection conn, Object[] params) {
// Trigger calling of "onBWDone", required for some FLV players
measureBandwidth(conn);
if (conn instanceof IStreamCapableConnection) {
IStreamCapableConnection streamConn = (IStreamCapableConnection) conn;
SimpleConnectionBWConfig bwConfig = new SimpleConnectionBWConfig();
bwConfig.getChannelBandwidth()[IBandwidthConfigure.OVERALL_CHANNEL] =
1024 * 1024;
bwConfig.getChannelInitialBurst()[IBandwidthConfigure.OVERALL_CHANNEL] =
128 * 1024;
streamConn.setBandwidthConfigure(bwConfig);
}
}

解決方法也很簡單,只要對你的 NetConnection 物件的 client 屬性指到 this,

var nc:NetConnection = new NetConnection();
nc.client = this;


和實作下面這個方法就行了


public function onBWDone():void
{
//codes...
}