Friday, December 15, 2006

瞧瞧 37signals 用了哪些軟體?

37signals

看看 37signals 這家小軟體公司用了哪些軟體程式工具以維持公司日常運作. 給有心開公司的朋友做個參考! 學習一下他們採用多種平台及相關軟體搭配, 重要是讓公司維持運作.

最後, 當然還有他們家的自己的產品!!!

The tools we use to run and build 37signals

Tuesday, October 24, 2006

Google Groups BETA 體驗

Google Groups Google Groups BETA 正式開放試用了, 除了基本 net news 討論功能外加上
  1. 新的操作介面, 有不少是從 gmail 整合過來
  2. 評分功能
  3. “Pages” 可線上撰寫 html 網頁
  4. “Files” 可上傳檔案

很熟悉嗎? 一般的 “論壇” 功能已經被加入進去, 加上好用的介面, 不久之後 Knowledge Base 業者可要小心!

近幾年來好像生態有點轉變, 以前都是 Enterprise 端有新的技術, ex: J2EE, SOA, 但現在反過來, 因消費者比較容易接受或嘗試新技術, 所以新技術都是從消費者這端反攻回 Enterprise, ex: search, wiki, web mail…


Tuesday, October 10, 2006

irb 其實也支援自動完成

irb 其實有支援用 TAB 鍵來做自動完成工作, 這真是好用, 因為常常會忘掉!

  • 直接下命令

$ irb --readline -r irb/completion
  • 利用 .irbrc

require 'irb/completion'
IRB.conf[:PROMPT_MODE] = :SIMPLE

可以參考 Enabling Tab Completion in IRB

Sunday, September 24, 2006

來到 Ubuntu 世界!

  1. 開發 Embedded Linux 系統, 採 Montavista 平台, cross compile, tool chain 及程式開發安裝
  2. 用 Eclipse/CDT 幫忙寫程式, 只是貪圖方便及開發網頁容易而已, 最後還是要回 Montavista 編譯
  3. 當然還有 subversion
  4. 免不了還是要用到 Windows, 所以請出 VMWare Player
  5. 當然要開發 Web 程式, 那就用 Ruby and Rails

其他一般桌面軟體 Ubuntu 都幫你準備好了, 雖然經歷一些痛苦, 但總算換到 Linux 世界!

PS. 竟然給我碰到 Ubuntu 大烏龍事件, 害的我以為 X 視窗壞掉重裝, 原來是他們的更新版本有問題.

沒有 iTune 可用就真有點討厭, 我自己覺得 iTune 是近年寫的最好的桌面軟體, 特別在網路功能方面的設計更是一流!

Sunday, August 06, 2006

Kool IM, meebo 的競爭對手

Kool IM Kool IM 是一個 web based 的線上聊天軟體, 支援 MSN, Yahoo, ICQ, AIM, Google Talk…, 使用介面簡潔好用, 去試用看看就知道, meebo 總算碰到新進的挑戰者, 最近 meebo 改版速度好像加快很多, 多國語言, 使用介面, AJAX 的運用, 以及 meebo me 的推出, 競爭才會有更好的產品出現!

Monday, July 24, 2006

Ruby 的 socket 網路程式 2

再舉一個完整一點的 http “GET” client 程式… 其實 http protocol 還設計的夠簡單又有彈性, 但有人可以教我如何讓它支援 http proxy 嗎? 實在是沒時間去研究…


# socket example - httpget
# usage: ruby httpget.rb http://host/path
require 'socket'
include Socket::Constants

host = "www.ntu.edu.tw" # default values
port = 80
path = "/"
# process URL (%r!..! means regular expression)
if %r!http://(.*?)(?::(\d+))?(/.*)! =~ ARGV[0]
host = $1
port = Integer($2) if $2
path = $3
end

#TCPSocket version
#socket = TCPsocket::open(host, port)

#send out HTTP header
socket.write("GET #{path} HTTP/1.0\r\n\r\n")

#
print socket.read

老闆總是覺得我們的系統跟 windows 一樣甚麼都有, 都可以寫的出來… 也不想想花多少錢在開發 kit 上, 那 kit 當然是夠陽春! 有時是感覺年紀越大越不敢說不! 學校也真不知在教甚麼? 難道沒學過就不會去找資料把它寫出來, 只會跟老闆說不會, 只好累到自己…


你可以參考 Ruby 的 socket 網路程式 1

Tuesday, July 04, 2006

prototype.js 筆記

把個人一些 prototype.js 的參考資料和大家分享, 資料還很片段不完整, 大概只適合懂 prototype.js 的人. 因為自己常忘掉怎麼寫, 所以留一份筆記供自己參考.

prototype.js 有人暱稱為 JavaScript++, 若有人對 prototype.js 有興趣, 大家來讓這份資料更實用一點…

prototype.js 筆記 Wiki

PS. 最近因為忙於 embedded device 工作, 但還是不忘 ruby, 拿來寫 socket/network 程式來測試 device, 蠻方便又快速, 比起用 VB, .net 快樂多了!

Tuesday, June 27, 2006

RailsConf 2006 資料整理

RailsConf 2006 剛結束, 來看看有那些內容…

其它近期 Rails 文章

Monday, June 26, 2006

值得關注的新技術 XML11

GWT 之後, 又有一個新計劃, XML11, 它的目標是希望讓開發 AJAX-applications 工程師不須要懂 Javascript. 他的做法是以 X-Windows protocol(X11, 這也是它為何稱做 XML11的原因)為主, 讓寫程式 就像寫一般 Application, 然後神奇的也可以在 Browser 內使用!

請看 Google Tech Talk featuring XML11

若你的 Java 程式是用 AWT 或 Swing 寫的, 透過 XML11 編譯後就可以在 Browser 裡運作, 而且不須要 JRE 或 Applet.

現在或許還在開始階段, 若能吸引更多人的興趣及加入, 以 XML11 的方法加上 GWT, 或許以後的 Application(連 Windows 程式也算在內) 都可能搬到 Browser 裡!

Friday, June 23, 2006

Javascript 終於可以不用等 onload 了!

寫 Javascript 時, 大家常常看到我們會故意攔下 document 的 onlaod 事件來處理工作, 但 onload 會等將影像…資料由 browser 下載後才會被呼叫, 所以會感到頓頓的. 在一些人的努力下, 解決方案出來了.

請參考 DOM Ready Extension for Prototype

Tuesday, June 20, 2006

很棒的 Markaboo

Markaboo Markaboo 是類似 del.icio.us 功能的 social bookmark 網站, 比較特別的是 : 它可是 opensource project 及用 Ruby on Rails 開發出來的. 現在還沒放出原始檔, 但可用 subversion 瞧瞧原始碼! 未來拿來架設公司內部使用應該不錯, 可以當當我的最愛及小小筆記本使用!

Saturday, June 17, 2006

將 del.icio.us 的 bookmarks 抓下來

簡單的利用 open-uri 及 REXML 讓我們把 del.icio.us 的 bookmarks 抓下來吧, 用 Ruby 還真是方便.

參考資料
  1. Ruby 記得要用 1.8.4 版本, 1.8.2 open-uri 有個 bug 不能用
  2. 原始碼, 記得要換上你的帳號和密碼

require 'open-uri'
require 'rexml/document'

class Bookmark
attr :user, :password
attr_accessor :bookmarks

def initialize(user, password)
@user = user
@password = password
end

def readit()
open("http://del.icio.us/api/posts/all",
"User-Agent" => "Ruby/#{RUBY_VERSION}",
:http_basic_authentication=>[@user, @password]) do |f|
#puts f.read
d = REXML::Document.new(f.read)

#
@bookmarks = []
d.elements.each("*/post") do |e|
bookmark = {}
bookmark["href"] = e.attributes['href']
bookmark["description"] = e.attributes['description']
bookmark["tag"] = e.attributes['tag'].split(' ').map {|t| t}
bookmark["time"] = e.attributes['time']
bookmark["hash"] = e.attributes['hash']
@bookmarks << bookmark
end
end

@bookmarks
end
end

#
bk = Bookmark.new("user name", "password")
bk.readit().each do |i|
puts "#{i["href"]} #{i["tag"]}"
end

Friday, June 16, 2006

Google Map API

最近 Google Map API 推出 2.0 版, 最重要的新功能是加上 Geocoding 功能, 能用 “住址” 查出經緯度, 支援不少國家, 當然沒有台灣. Google Map 算是很重要的 API, 所以可以調整的項目很多, 最好的方法還是去 K 文件吧!

DEMO 及原始碼

Wednesday, June 14, 2006

Google AJAX Search API

Google AJAX Search API 無聊試玩看看! 建議保留 300px 寬度, 文件寫的很詳細, 應該很好上手! “Local” 是用 Google Map 來找地址. 除此之外 Google 也提供很多選項和方法讓你可以調整 Google AJAX Search, 只要你肯 K 文件及稍具 Javascript 知識.

DEMO (內有原始碼)



Tuesday, June 13, 2006

程式語言相關網站

最近出現幾個新的程式語言相關網站, 當然 web 2.0 的概念一定要有, 當然其背後也是大有來頭…

  1. InfoQ
    • 內容深入, 不少跟 enterprise 有關的開發資料, ex: SOA
    • 建立含蓋各大程式語言的社群
    • Floyd Marinescu 離開 TheServerSide 的新事業
  2. dzone.com
    • 收集相關程式語言資訊, 可做 tagging 及提供 digg 評比的功能
    • Javalobby 出來

Sunday, June 11, 2006

wikiCalc 有趣的 web-based spreadsheet

wikiCalc wikiCalcDan Bricklin 的 web-based spreadsheet, Dan Bricklin 是有名的 VisiCalc 的作者(最早的試算表軟體), wikiCalc 則除了強調一般 spreadsheet 該有的功能外更重要是有 wiki 的社群一起編修精神, 才是她最大的突破.

  • 安裝
    • 下載後安裝, 及啟動 wikiCalc
    • 拜訪 URL, http://127.0.0.1:6556
  • 心得
    • 用 Perl 開發的, 真是佩服
    • Ajax 功能算是容易使用, 但操作起來或許不像 Excel 那麼直覺方便, 但對 wiki 的使用者應該還好
    • 不知道怎麼做 copy/paste, undeo/redo
    • 功能並不比 Google Spreadsheets 少, 至少多了 “border” 的設定及更多的格式支援
    • 希望可以輸入 XLS 或 CSV 檔
  • Demo 影片
  • Screenshots

或許 wikiCalc 還算是很初期的產品, 但他很多方面展現其有趣及未來的潛力, 現在若能結合 Socialtext 公司的資源加快開發速度, 未來也是一大新應用!

Saturday, June 10, 2006

最近加入 ruby/rails IDE 戰局的產品

最近又有新的產品加入 ruby/rails IDE 陣營.
  1. Sapphire 公司的 Ruby In Steel, 需要 Visual Studio 2005 開發環境, 應該是 free, 可惜不是 opensource
  2. RIDE-ME 是一個 opensource 用 .net 2.0 開發的產品, 比起 RadRail 可以少去 eclipse 的問題

越來越多公司對 ruby/rails 有興趣投資, 總是好的開始!

Wednesday, June 07, 2006

Google Spreadsheets

Google Spreadsheets Google Spreadsheets 試算表的網路版開始試用了, 整個產品維持一貫 Google 產品水準, 雖然還在 Lab 階段, 但真的很好用, 功能更是不會少. 這下 Microsoft 應該開始要傷腦筋了…

  • 好用易上手功能更是不會少, Google 果然是 Ajax 高手, 這點並不容易做到
  • 基本上在編輯時有 3 大功能:
    • Format
    • Sort
    • Formulas

  • 內建不少 “Formula”, 使用上雖然跟 Excel 比不太一樣但也很容易上手
  • 網路的好處就是可多人編輯或和其他人分享, 這絕對是一大賣點
  • 還可以和別人在現上討論完成你的 spread sheets.
  • 可以讀入 xls, csv 及存成 xls 檔, 還不知道相容性如何, 據猜測應該不錯
  • 還沒有統計圖表功能, 而且應該是無法做到套印功能, 可能還是要回 Excel 做列印

真的是不錯的產品, 這下 Office 2.0(web based office)應該是有機會! 趕快去試用吧!



Tuesday, June 06, 2006

Wridea - Free your mind

wridea Wridea 又一個提供新功能的網站, 可以將你的想法記錄下來及分類. 蠻簡單易用, 可免費 signup 使用, 但功能實在有點太陽春了, 感覺 Tracks 的提供的功能都還比它多!

meebo 將你的聊天軟體整合起來!

meebo meebo 是很有趣的網站, 可以讓你的 MSN, Yahoo! Messenger, AIM/ICQ, GTalk/Jabber 多種聊天軟體帳號整合在一起, 如此一來, 你可以同時和多人且跨不同聊天軟體聊天, 然後也有聊天記錄的功能, 最重要的是它是 web based, 這下 MIS 就不能擋你啦!

  1. 先到 meebo 註冊帳號
  2. 登入後, 先設定聊天軟體帳號
  3. 開始用吧…
  4. 群組聊天功能

Monday, June 05, 2006

新一代網路購物車功能 - RightCart

RightCartRightCart 提供新的網路購物車的功能, 而且重點是很容易和你的網站做整合, 只要放上 3 行左右的程式即可. 賣家可以用 RightCart 提供的平臺做商品管理, 現在只支援 PayPal 及限用 email 方式付款, 希望他們未來能接受更多付款方式. 他們經營模式是抽 1% 的費用.

PS. 聽說是兩人用 Ruby on Rails 花 6 週時間開發出來!

DEMO

Thursday, June 01, 2006

RMagick 的使用

RMagick 是 ImageMagick® and GraphicsMagick 影像處理程式庫的 ruby 介面, 很方便使用, 功能也強, 讓我們試試看吧!
  • 安裝, 以 Windows 平台為例
    • 下載 rmagick-win32, gem 版本
    • 解壓縮及安裝
      > gem install RMagick-win32-1.x.x-mswin32.gem
      > postinstall.rb
    • 其他平台請參考 FAQ
  • 功能
  • 縮圖程式
    require 'RMagick'
    include Magick

    pic = ImageList.new("vd2.png")
    l = pic.columns > pic.rows ? pic.columns : pic.rows
    f = 128.0/l;
    thumb = pic.thumbnail(f)
    thumb.write("vd2_tb.png")

Wednesday, May 31, 2006

YouTube, Google Video 影音檔下載

最近 YouTube, Google Video 等提供影音功能的網站越來越多, 部份網站是用 flash 技術解決播放問題, 那要如何下載呢? 請看下面詳細說明.

Tuesday, May 30, 2006

Spring IDE - eclipse 的 Spring 開發工具

最近的開發計畫, 逐步從 j2ee 轉到 spring 上面搭配 Tomcat. 加上 eclipse 的幫忙, 開發速度果然比以前好多了, 後來發現了 Spring IDE 的 eclipse plugin 忍不住試用了一下, 還真不錯!
  • 它還需要安裝一些額外的軟體, 通常我都會先裝 Web Tools Platform 就順便裝好了
  • Sprign IDE 安裝
    • Open eclipse. Go to Help -> Software Updates -> Find and Install...
    • Select "Search for new features to install". Click "Next".
    • Click "New Remote Site". Enter "Spring IDE updatesite" for the Name and "http://springide.org/updatesite/" for the URL. Click "OK".
  • 使用
    • Window/Show View/Other... 選擇 "Spring Beans", 你的 eclipse 下半部就會多一個 view
    • 在 project 節點上, 按右鍵(context menu), "Add Spring Project Nature"

    • 在 project 節點上, Mouse 按右鍵(context menu), "Properties", Select "Spring Beans" and 可以加入 spring configuration XML 檔案.

typo 若要放圖檔該怎麼辦?

typo 確實是個不錯的 blog 系統, 用了一段時間後發現不知道怎麼放圖檔上去? 才發覺它不支援上傳圖檔功能. 那該怎麼辦呢? 答案是: 利用現在很多的免費圖檔空間來解決這個難題.
基本上使用這些圖檔空間供應商的方法就是只要你上傳圖檔後就會產生一個 url 給你, 之後你就可以用 來 "link" 到你的圖檔就可以了! 現在是用 Photobucket, 還不錯!

Friday, May 26, 2006

Tracks - rails 的應用程式ㄝ可以追蹤工作完成情況

Tracks is a web-based application to help you implement David Allen’s Getting Things Done™ methodology.

Tracks 是用 rails 完成的應用軟體, 可追蹤工作進度, 雖然它是 web based 軟體, 你也可以把它當成 desktop 軟體來用, 只要起動 WEBrick 就可以了, 畫面看起來也很棒!
  • 下載及解壓縮
  • 安裝及使用
    • 設定資料庫, 在 MySQL 新增一個 database/schema 叫 "tracks"
    • 更改 $TRACKS/config/environment.rb.tmpl 成 environment.rb 檔案
    • 更改 $TRACKS/config/database.yml.tmpl 成 database.yml 檔案, 內容如下:
development:
adapter: mysql
database: tracks
host: localhost
username: root
password: pw
encoding: UTF8

test:
adapter: mysql
database: tracks
host: localhost
username: root
password: pw
encoding: UTF8

production:
adapter: mysql
database: tracks
host: localhost
username: root
password: pw
encoding: UTF8
    • 建立資料庫內容
$ cd $TRACKS
$ rake migrate
    • 啟動
$ cd $TRACKS
$ ruby script/server -e production
    • 第一次先注冊 http://localhost:3000/signup, 然後 http://localhost:3000/ 就開始用吧, 畫面還真不錯!
    • DEMO, login: demo, passwd: demo123

Wednesday, May 24, 2006

eclipse 中如何和資料庫打交道? QuantumDB

QuantumDBeclipse 的一個 plugin, 利用 JDBC 可以處理資料庫的工作!
  • 下載, 解壓縮, 安裝到 eclipse 目錄
  • 記得它要先安裝 Graphical Editing Framework(GEF), 通常我都會先裝 Web Tools Platform 就順便裝好了
  • 執行 eclipse, Window/Open Perspective/Other... 選 Quantum DB
  • 安裝 JDBC driver, 以 MySQL 為例
  • 新增一個 Bookmark
    • "Add External Jar..." 選 "mysql-connector-java-3.1.12-bin.jar"
    • Class name: 按 "Browse" 選 "com.mysql.jdbc.Driver"
    • 填好資料, 應該就可以用了
雖然開發 rails web 程式不見得需要 IDE 工具, 但商業軟體開發公司還是建議採用某一個 IDE 工具, 畢竟工程師來來去去, 若能最短時間上手最重要. 我覺的 eclipse 應該是不錯的選擇, 花點時間學習及習慣就好了!

Tuesday, May 23, 2006

PHPeclipse 開發 PHP 程式的好幫手

PHPeclipseeclipse 上開發 PHP 程式語言的 IDE 環境, 也可以幫你 debug PHP 程式!
  • 下載新版, 解開後放到你的 eclipse 目錄
  • 執行 eclipse, Window/Open Perspective/Others... 選 PHP
  • 設定一下 Window/Preferences.../PHPeclipse Web Developement
  • 在 eclipse 開發時 "Alt" + "/" 可以叫出 context help 功能, 方便使用, 若你有裝 Web Tools Platform 那處理 html, javascript, css 及 xml 檔案就更方便了(有點大就是了, 開發 java web 程式必用)
  • 如何 debug? 請參考此篇 Installing the DBG Debugger, 麻煩一點, 照著說明設定, 即可!

Apache 上用 erb(rhtml)

網站內容若屬於靜態網頁, 實在不需要用到 rails 強大的功能, 你可以試試用 erb(rhtml) 的方法. 設定簡單又有 php 般的彈性.
原理是利用 apache 的 mod_cgimod_action 將 rhtml 檔案送到一個 cgi 做處理, 由那個 cgi 呼叫 erb 來做翻譯工作產生網頁.

我們以 HostMySite.com 為例子, 解釋一下設定及運作原理!
  • apache 要打開 mod_cgi 及 mod_action 模組功能, HostMySite.com 預設都有打開, 直接可以用
  • ~/cgi-bin 下, 新增 erb.cgi 檔案, 利用 erb 處理 rhtml 檔案, 內容: erb.cgi.txt
  • 記得要確定檔案權限
$ chmod 755 ~/cgi-bin/erb.cgi
  • ~/htdocs, 新增 .htaccess 檔案, 告訴 apache 如何處理 rhtml 檔案
Options ExecCGI FollowSymLinks
AddHandler rubypage .rhtml
Action rubypage /cgi-bin/erb.cgi
DirectoryIndex index.rhtml index.php index.html index.html.var

Saturday, May 13, 2006

open-uri 搭配 REXML, 輕輕鬆鬆完成 RSS reader

善用 open-uri 可以方便將資料從網路上下載, 加上配合 REXML 我們可以寫個簡單的 RSS reader!

  • open-uri 讓你下載網路資料, 可以像 File 一般操作, 以及支援 metadata, ex. context-type, charset...
  • REXML 是 XML parser
  • 程式如下:

require 'open-uri'
require 'rexml/document'

class Rss
attr_accessor :channel, :items

def initialize
@channel = @channel || {}
@items = []
end

def readit(url)
open(url) do |f|
#puts "#{f.content_type} #{f.charset}"

#puts f.read
d = REXML::Document.new(f.read)

#
d.elements.each("*/channel") do |e|
@channel["title"] = e.elements["title"].text
@channel["description"] = e.elements["description"].text
end

#
d.elements.each("*/item") do |e|
item = {}
item["title"] = e.elements["title"].text
item["link"] = e.elements["link"].text
@items << item
end
end
end
end

#
rss = Rss.new
rss.readit('http://www.mozilla.org/news.rdf')
puts rss.channel.inspect
rss.items.each do |i|
puts i.inspect
end

Friday, May 12, 2006

Google Trends, 預測未來趨勢的另一方法!

Google 最近開始回頭專注他的原始本業 : 搜尋, 利用其龐大的資料庫開始提供更多的運用, 最近推出的 Google Trends 就是最好的例子.
使用起來夠簡單吧, 用 "," 來分隔比較的關鍵字. 也就是善用 Google 龐大的資料庫來做趨勢圖表分析, 其準確度應該不會低吧!

Google Notebook 快來了!


這可不是 Google 要推出新型筆記型電腦, 而是一項新的服務. 這邊有流出的畫面, 或你可以參考這篇文章 Google Notebook Screen Shots.

他的功能大致就是讓你可以在 Google 搜尋後, 可以對一些網頁(ex. 網址...) 作 metadata, 分類的筆記功能. 聽起來像不像 del.icio.us, 下周若開放這個服務, 應該會受注意及歡迎!

Thursday, May 11, 2006

免費的 Rails 主機及 typo 安裝

大家可以到 HostMySite 申請免費的主機, 申請網址是 Free Ruby on Rails Beta Trial, 大約 10 分鐘就可以收到 mail, 可以測試一下你的 Rails 應用程式. 可以用 ftp 上傳及用 ssh 連到主機, 容量還不錯, 只有網站名字不好, 反正是免錢!

接下來會介紹一下 typo 的安裝, typo 這一版並不能跑, 因為它搭配的 Rails 好像有問題, 請看下面安裝說明好了!
  • 下載 typo stable 版本
  • 資料庫設定...
    • "MySQL Database" 新增資料庫, 記住帳號和密碼
    • 然後執行 phpMyAdmin, 選擇 Database, 按 "SQL" 圖案, 執行 typo/db/schema.mysql.sql SQL script, 建立資料表
  • 上傳 typo-2.6.0_with-rails.tgz(FTP), 利用 ssh(putty) 連到主機
    $ tar -xzf typo-2.6.0_with-rails.tgz
    $ mv typo-2.6.0_with-rails typo
    $ cd typo
  • 設定 typo 和資料庫, 修改 config/database.yml 內容如下
    login: &login
    adapter: mysql
    host: merriam.safesecureweb.com
    username: ruby1727
    password: pass

    ...
  • 其實下載的 typo 版本有問題, 是不會動的 typo 版本, 請重新抓 Rails 1.0 版本
    $ rm -rf vendor/rails
    $ svn export http://dev.rubyonrails.org/svn/rails/tags/rel_1-0-0 vendor/rails
  • 換 Apache 上場, 調整一下 htdocs 就好了!
    $ cd ~; mv htdocs htdocs-
    $ ln -s ~/typo/public ~/htdocs
  • 驗證 http://86915.hostmyapplications.com/

PS. 若不行啟動, 檢查一下 typo/public/dispatch* 檔案屬性, 是否為 -rwxr-xr-w, 你可以用 chmod 755 dispatch* 指令更改.

Tuesday, May 09, 2006

Rails CHM API 文件

若你寫程式習慣用 CHM 查 API 的話, 這邊有整理好的 Rails CHM API 文件可下載, 至於為甚麼要用 CHM 格式呢? 因為它的全文檢索太方便了!, 從 Windows 就開始用了, 到 Java 還是不能沒有它, 現在 Rails API 也有 CHM 格式!

大陸網友製作的好像因語系不同有點問題, 要不然就是全文檢索功能怪怪, 還是建議下載英文版.

下載 Rails 1.1.2 CHM
你可以參考一下 HowToGenerateChmForRails

Saturday, May 06, 2006

Ruby 和資料庫 - Ruby/DBI or Rails/ActiveRecord

Ruby 可輕易和資料庫連結及存取資料, 用來做 off-line 資料庫分析或統計時很好用又開發快速. 比起之前用 java 寫這些程式方便許多. 這篇是以 PostgreSQL 為例子, 換成 MySQL 應該也差不多用法.
  1. Ruby/DBI
    跟 Perl/DBI 一樣, 提供可用於任何資料庫的程式介面, 再經由DBD(databse driver) 與資料庫溝通
    • DBI(database interface)
    • DBD(database driver), 跟資料庫相關的程式, 支援多種資料庫, ex: DBD::ADO, DBD::DB2, DBD::Frontbase, DBD::InterBase, DBD::mSQL, DBD::MySQL, DBD::ODBC, DBD::Oracle, DBD::OCI8, DBD::Pg, DBD::Proxy, DBD::SQLite, DBD::SQLRelay
    • 安裝
      • 下載 dbi-0.1.0.tar.gz
      • 解壓縮
      • 安裝, 以 PostgreSQL 為例
        $ cd ~/dbi-0.1.0
        $ ruby setup.rb config --with=dbi,dbd_pg
        $ ruby setup.rb setup
        $ ruby setup.rb install
    • 使用
      require 'dbi'

      # Same example, but a little more Ruby-ish
      DBI.connect('DBI:Pg:we', 'postgresql', 'ssdbqazse') do |dbh|
      dbh.select_all('SELECT COUNT(*) FROM "vParty"') do |row|
      puts row
      end
      end
    • 參考 Ruby/DBI, Using the Ruby DBI Module
  2. Rails 的 ActiveRecord
    • 安裝 Rails(因為要用 ActiveRecord)
      $ gem install rails --include-dependencies
    • 安裝 Ruby for PostgreSQL(MySQL 不用)
      $ gem install postgres-pr
    • 使用
      require "rubygems"
      require_gem "activerecord"

      #db connection
      ActiveRecord::Base.establish_connection(
      :adapter => "postgresql",
      :database => "we",
      :username => "postgresql",
      :password => "ssdbqazse",
      :encoding => "UTF8")

      #ActiveRecord...
      class Party < ActiveRecord::Base
      set_table_name "\"Party\""
      end

      p = Party.find(:first)
      puts p.inspect

Friday, May 05, 2006

Rails 和 PostgreSQL

大部分網站的資料庫都採用 MySQL, 但不少商業公司卻喜歡採用 PostgreSQL, 原因是它功能比較完整及速度也不錯. 我們之前的 J2EE project 就是採用 PostgreSQL, 運作上都沒甚麼問題. 他的工具程式 PgAdmin 也比 MySQL 工具程式好太多了.

所以想用 ActiveRecord 來玩玩我們的 J2EE project 的資料庫, 開始動手吧!
For what? Fun and Happiness!
  • PostgreSQL 安裝
    • 建議下載 8.1 版本
      Windows 下安裝程式會幫你新增一位使用者, 建議不要使用 random 密碼. encoding 選擇 "UTF8", 記住密碼, 其他預設就好了!
    • 安裝完成後, 執行 PgAdmin 測試一下有沒有問題.
  • Rails 設定
    • 安裝 PostgreSQL driver
      $ gem install postgres-pr
    • 修改一下 config/database.yaml
      development:
      adapter: postgresql
      database: we
      username: postgres
      password: yourpassword
      encoding: UTF8
    • 測試資料庫連結是否正確?
      D:\workspace\mywe>ruby script/console
      >>Loading development environment.
      >>ActiveRecord::Base.connection
      >>...
  • 使用
    因為我們的資料庫原本就存在, 所以 Rails 的 convensions 完全不適用, 所以你就要了解一下 ActiveRecord, 如何讓它可以運作(其實就是打開 api 文件查一查資料, 我喜歡 CHM 版本)
    • 直接下 SQL 指令
      D:\workspace\mywe>ruby script/console
      >>Loading development environment.
      >>ActiveRecord::Base.find_by_sql "SELECT p.* FROM \"Party\" p"
      >>...
    • Model & Table
      D:\workspace\mywe>ruby script/console
      >>Loading development environment.
      >>
      >>class Party < ActiveRecord::Base
      >> set_table_name "\"Party\""
      >>end
      >>p = Party.find(:first)
      >>...
    • 其它好玩的留給大伙自己試!
這樣我就可以直接下 SQL 除錯, 比起以前 java 還要 compile 快很多, 還真是爽快!!!
PS. 因為 PostgreSQL 的 Table 名字只能小寫, 而我們 Table 確是小大寫, 所以才會出現 "\"Party\"". 以後資料庫還是都用小寫比較沒問題.

更多設定問題請參考 Riding Rail - PostgreSQL

Wednesday, May 03, 2006

fluxiom 新一代網路硬碟試玩!

fluxiom 可看做是新網路硬碟進化版, 現在的一般網路硬碟大都停留在 Windows 98 檔案管理員水準, fluxiom 可說是將它提升到 Windows XP 水準.

fluxiom 可以看的懂大部份的影像檔及 PDF 檔, 也可以讀 EXIF 資料, 也有縮圖, tagging 及搜索功能. 以後也應該可以支援更多檔案格式. 操作上很容易也很好用, 大量的運用 AJAX 技術在其中, 算是很酷的網站! 有些功能真是好奇它如何做到? 它的開發平臺是 Ruby on Rails.

缺點就是蠻貴的! 用信用卡申請, 可以有一個月試用期, 不用時千萬記得取消帳號.

Tuesday, May 02, 2006

Skobee, Renkoo, 將你的社交生活搬上網路!

生活週遭還有哪些可以搬到網路上呢? 你的社交活動都花在 emails 或 MSN 上嗎? 現在你多了一種選擇, 透過 SkobeeRenkoo 提供的服務讓我們在網路上搞小團體吧!

基本上可以擬定你的計畫, ex. 吃大餐, 然後邀請朋友參加, 大家可以討論時間及地點之類的事情. 你也可以決定你的計畫是公開行程或只允許朋友參加. 加上網友的共同參與, 你有很多地點可以選擇或參考其他網友分享的地點資料, 當然他們也會結合地圖服務讓你一清二楚要去哪裡. 更酷的是他們都有加上自然語言的處理能力, 當然只支援英文!

這些網站 AJAX 都用的很兇, 操作起來確實比以前直覺許多, Skobee 用的是 prototype+scriptaculous, Renkoo 則是用 dojo 技術. 加上混搭的運用, 未來應該會慢慢和一些會議中心, 餐廳結合更密切也可以做行銷活動, 甚至可以幫這些 "地點" 預知來客人數及熱門程度, 未來應該還有十足的發展潛力!!!

Skobee 在多人討論上採用的是和 blog 一樣的 comment 方法, Renkoo 還在 beta 測試階段, 但申請大概一天就下來了. 在多人討論上用的是 chatting 方法, 採取稱為 "COMET" 的新技術, 相對於 AJAX 是 client 端有事件發生送回 server 處理然後傳回資料, "COMET" 是 server 端 push 資料回去給 client端的技術(改天再談 "COMET")

Friday, April 28, 2006

跟桌面說拜拜, 跟網路說聲 Hi

越來越多的公司投入網路桌面這塊市場, 大部份都有用到 AJAX 技術.
現在這些公司開始加入一些應用程式在產品上, 以後應該也會開放其 APIs 讓大家來寫程式才對. 配合混搭程式的熱潮, 有些創意的程式也許會出現. 有沒有像 Microsoft 發跡及成功的做法, 未來的 WEB OS 應該慢慢有點樣子!

若以後檔案也在網路上(Google Drive project...), 桌面也跑到網路, 我們用的 Widnows/Mac OS 會不會小一點?

Thursday, April 27, 2006

我的 AJAX 為甚麼常常不會動?

開始寫 AJAX 程式的人常常都會說為甚麼我的程式都不會動? 其實原因都出在你很少寫 JavaScript, 造成你的程式有錯誤在裡面. 其實現在寫 AJAX 程式常做的就是 debug, debug, debug, 當然 DOM 也是很煩人的設計. 若你開發的 Rails 有用到 AJAX 出問題時下面的方法對你也很有幫助.

那我們就來教一步一步大家如何解決這個問題:
  • 選個好的 JavaScript library, ex: prototype
  • 開發時一定先用 FireFox 開發安裝 擴充套件 : JavaScript Debugger
    1. 常用的 JavaScript 除錯工具
    2. 安裝 擴充套件 : FireBug
      這是另外一個超好用的工具, 可以看 DOM/CSS, 及 AJAX 傳遞的參數...
    3. Debug 步驟
      • 打開網頁
      • 執行 "工具"/"JavaScript 主控台"
        若出現錯誤, 會給你檔案及行號, 先改吧...
      • 執行 "工具"/"JavaScript Debugger"
        進入 debug 了, 可以設中斷點, step by step 追蹤及觀察變數值. 雖然不是很好用, 但你用 Microsft 會更頭痛
      • 善用 FireBug 來幫助你看 AJAX 傳遞參數, 及收到資料後的處裡對不對, 及你對 DOM 的處理是否正確
      • Ok.
  • 切換到 Internet Exploer
    1. 安裝 Microsoft Script Debugger
      Microsoft 的 JavaScript 除錯工具, 我也不是很會用, 只用來幫我找問題, 超鳥的. 步驟及方法跟上面一樣, Internet Explorer 碰到 JavaScript 錯誤時會讓你叫起除錯工具就是了
    2. 安裝 Internet Explorer Developer Toolbar
      一個 IE 的 toolbar plugin, 可以讓你看 DOM/css 工具, 這個還蠻好用的, 可以幫你查看 網頁 layout 及 CSS 的問題

Wednesday, April 26, 2006

ProgrammableWeb 專門介紹混搭程式的地方

或許大家覺的混搭程式, 不三不四, 沒甚麼了不起, 但是許多很好的應用也慢慢被開發出來. 有些應用還真是想巧妙到不行. 例如: 將 FedEx 的貨物追蹤, 加上 google calendar 在和 google map 的整合功能後真是貼心的設計, 不要小看它未來的潛力.

其實 Microsoft 已經喊了很久的 web service 但確不很成功. 但這一波 web 2.0 風潮, 加上現在的 web 慢慢開放他們的 api, 還有 Rich Client(browser + AJAX) 的技術的進步, 以 iTune 為例子, 雖然它是 client 端程式但它卻也有上網能力, 這塊很有可能是未來 client 端程式的發展方向. 你想看看以前做夢也不可能在你的程式加上 map 功能, 現在確做到了.

ProgrammableWeb 這邊提供不少這類混搭資訊.

AmigoFish :: 大家開始 digg podcast 內容吧!

AmigoFish 是將 digg 的網友社群推薦方法套用在 podcast(audio/video) 內容上, 重要的是, 它是用 Ruby on Rails 開發的!

Tuesday, April 25, 2006

Ning.com 到底是做甚麼?

Ning.com 到底是做甚麼? 答案是: 它希望它甚麼都能作!
Ning create and share your own social web apps!

Ning 希望能提供創造屬於你的 web app, 然後還能大伙分享. 寫 web app 怎麼可能? 那是 programmer 才做的來! 所以它們提供許多預建好的 web app, 然後你可以挑你想要的然後 "Clone App" 再來作調整.

Ning 試圖讓 web app 和其 contents 能區分出來, web app 開發者讓 Ning 來管理你的 contents, 藉由 apps, users, content types, tags 來達到社群共享. 所以它也可以算是讓你 "混搭" 程式的地方. 現在它們還提供不少 web apps, 會 PHP 或一般 programmer 應該很容易上手, 大家就去注冊玩看看!

請看 TechCrunch: Ning launches!

這邊就可以看出混搭, dynamic scripting language 和 AJAX 未來合作的力量, 要是用 ruby 就更好了!!!

Monday, April 24, 2006

digg, technorati, feedburner 當紅的 web 2.0 應用

  1. digg 可發佈任何消息加上使用者評分機制, 讓他們現在超熱門, 創造出來的網路流量也很大, 對非英語系國家較不友善因為網友看不懂, 這是比較麻煩的地方
  2. technorati 專注在 blog 相關消息發佈及強大的收尋功能, 它的功能還滿多的 Favorites, Watchlist, Bookmark..., 也是當紅炸子雞
  3. feedburner 專攻 RSS 方面, 藉由訂閱機制可以得知受歡迎程度
  4. livelocker 將 social bookmark 加入評分機制
這些特色就是經由網友們發佈消息或資料, 因為資料集中在網站上, 然後由社群來參與 tagging, 評分, 建議等工作. 所以網站是最好的收集資料的平臺, 如何利用這些資料就是 web 廠商及社群創意可發揮的地方.

Sunday, April 23, 2006

來看看熱門的 social bookmark 網站

del.icio.us 是最老牌的 bookmark 網站, 將 "我的最愛" 放到 web, 然後用 tag 來做分類, 加上網友的參與, 現在已經是很成功的社群了, 併入 yahoo.
furl 和 del.icio.us 一樣也很受歡迎, 功能比較多一點, 使用上比 del.icio.us 好用一點
jots 跟 del.icio.us 差不多

最近開始出現把 del.icio.us 的概念推廣到更廣的層面上, 反正資料在 web 集中起來, 加上透過社群參與力量, 就有越來越多的創意在上面.
diigo 號稱它們給 del.icio.us 加上大腦(還未公開試用)
koboodle 簡單又方便讓你可以收集及分享網路資訊
stylehive 較專注於 "網購" 上
plum 和上面都差不多, 但有提供像 iTune 這樣的桌面端程式

Saturday, April 22, 2006

"Getting Real" 到底想要告訴我們甚麼?

Getting Real 是 37signals 最近出版的一本電子書, 內容探討開發 web application 的方法及經營策略. 蠻顛覆一般傳統軟體工程所學的. 聽說已經賣了 6000 多本, 大家當做求取新知看看吧!

大致把書上 Table of Content 放上來, 相信看完後你們會有一些新想法!

  1. 起跑線
    • Build Less(少功能, 少人開發, 少廣告…), 了解你的問題? 自己投資
    • 要在時間及預算內完成, 些許的彈性(減少你的功能)
    • 找個敵人給自己. 不要把它當雜務事
  2. 保持苗條
    • 越是苗條越容易改變, 不要混亂. 降低你的變動成本
    • 只要 3 個員工就可開始(RD, designer, sweeper)
    • 要能接受限制, 你的計畫就不會失控, 還有就是樂於當你自己
  3. Priorities
    • What’s the Big Idea, 忽略細節吧
    • It’s a Problem When It’s a Problem
    • Hire the Right Customers, 慢慢擴充, 做個堅持己見的計畫
  4. Feature Selection
    • 一半就夠了, 但要好的那一半
    • 開始說 “No”, 你處理的來嗎?, 讓使用者自己想解決方案, 忘記 Feature Requests 吧!
  5. Process
    • 開始寫程式及 demo 結果, 反覆的修正更改, 開始把想法寫出來, 不要有 “設定/Preference” 功能,
    • “完成啦”, 直接進入網路世界測試
  6. 組織運作
    • Unity, 要有單獨(不被打擾)的時間
    • 開會絕對是毒蘋果, 慶祝你計畫上可能的小小勝利
  7. 員工
    • 僱用少一點人或晚一點開始雇人
    • 做事而不是高談, 不要掩飾你的熱情
  8. 使用者介面設計
    • 一切從使用者介面開始, 從中心畫面開始往外
    • 要考慮正常使用, 新增時空白及錯誤時的畫面, 要有一致性
    • 使用者介面才是你的著作權
  9. 寫程式
    • 用少少的軟體(可以依賴 opensouce), 快樂至上, 讓程式自己說話,
    • 你寫的程式可能是負債, 要小心謹慎
    • 讓資料可以透過 RSS, API 和世界連結
  10. Words
    • 沒有 Functional Spec
    • 不要寫常常過期又沒用的文件,
    • Tell Me a Quick Story, 給你的計畫命個名
  11. Pricing and Signup
    • 免費使用, 使用者容易加入及取消
    • Silly Rabbit, Tricks are for Kids
  12. Promotion
    • Hollywood Launch, 建立一個網站能介紹你的產品
    • 利用 Blog 的力量, 早早提供一些消息吸引大眾, 追蹤你程式內 log
  13. Support
    • 讓開發人員感受 Support 的痛苦, 免訓練即可用(也不用 manual, 只要有 online help & FAQ)
    • 快速回答問題, 不用害怕跟客戶說 “No”
    • 善用 Forum
  14. Post-Launch
    • 每月可以調整一下程式, Keep the Posts Coming, 讓程式更好而不是 Beta
    • 所有 Bugs 要分輕重緩急, Ride Out the Storm, Keep Up With the Joneses, Beware the Bloat Monster, Go With the Flow

軟 體/網站人員應該對這些新看法覺得蠻有趣的, 看到專案市場常常有人在抱怨, 但有一些人已經開始採取另外的作法. 不像現在軟體公司養那麼多人, 都快要進入恐龍級了, 為了獲利只得外包到人工便宜的地方, 不然就是壟斷那塊市場, 或許他們是因為網路公司的背景, 讓他們有如此不同的看法吧! 這些理念及經營手法多少可以從 37signals 及一些新興的 web 2.0 網站看出來

Friday, April 21, 2006

使用 FeedBurner 讓你的 RSS 大放光明

FeedBurner 提供一個新的 service 可以將網站 RSS 內容介紹給大家, 也提供方便的介面讓別人可以輕鬆的將你提供的 RSS 加到眾多 web-based RSS readers 上, 更重要的是它提供統計的功能, 讓你可以了解你的 RSS 有多熱門及使用狀況.

觀察一下使用現況, 它幾乎主宰這塊市場的應用, 且還有不少新的 service 持續推出來.

上手篇
  1. 先到 FeedBurner 上註冊帳號, 點選上面 "Register" 功能.
  2. 用你的帳號登入, 進入 "My Feeds", 然後就可以新增你的 RSS. 它提供的管理介面真的很優秀, 功能齊全, 又方便使用.
  3. 和你的網頁整合
    • 進入你的新增的 RSS 後, 打開 "Publicize" 的內容.
    • 找到 "friendly graphic" 進去, 你可以選擇整合方法, 選完後把下面的 html 放到網頁上就大功告成.

Thursday, April 20, 2006

到底 web 2.0 是甚麼?

最近 web 2.0 喊的越來越大聲, 也越來越多人對它越來越有興趣 ! 比較讓人接受的解釋是 web 2.0 = intelligent web, 那以前的網站就沒有 intelligent 嗎? 你要是親身體驗過這些網站的後, 你可能會
回答, YES!

先列出一些網站比較專注追蹤這個話題給大家參考, 這些話題在國外都已經被討論過了, 你可能要翻一下以前的文章以獲得更多資訊:
  1. Techcrunch
  2. Solution Watch
  3. Planet Web 2.0
  4. O'Reilly Radar
  5. Web 2.0 List
先從 mail 講起, gmail, hotmail, yahoo mail 已經走上這條路, IM 有當紅的 meebo, Google Map 的強大功能, 讓人印像深刻(比較), 更不用說眾多的 RSS Readers 也移到 web 上來了(比較). 還有 digg, livelocker 這類讓大家可以一起參與的新聞網站, 更是熱門到不行.

圖片及影像功能, 從 flickr 以分享為主的網站到最近的 fluxiom 連 iPhoto 相片管理功能都出現了.

在 Office 系列, 競爭就更為激烈
請參考下面專門討論 Ofiice 2.0 專題的討論
漏了 video 嗎? 從 YouTube 的當紅, 有 video 編輯功能的網站也悄悄準備推出中.

今年應該是 web 2.0 振翅起飛元年, 新的世界正向我們到來!!!

Tuesday, April 18, 2006

討論 Ruby on Rails 的 Blogs

整理一下比較專門討論 RoR 的 blogs, 希望對大家有幫助!

  1. ~:caboose Rails hackers
  2. Tampering with Technology David Goodlad's
  3. Relevance Justin Gehtland, 蠻多 AJAX 討論
  4. Nuby on Rails Geoffrey Grosenbach
  5. RealityForge.org
  6. RailsExpress.blog Dr. Stefan Kaes, Rails performance 比較
  7. OnRails.org Daniel Wanja
  8. 6 short of a dozen Bob Silva
  9. Brainspl.at Ezra "ezmobius" Zygmuntowicz, 搞個 Rubuntu
還有遺珠之憾的話記的跟我說!

Ruby on Rails 對 Java Web Framework 的影響

老 Java 人都知道從 J2EE 推出來大家真是對它又恨又愛, Spec
很好但就是難上手難寫又難維護, 這時 opensource 適時伸出援手,
經過幾年的發展 Struts, Spring 及 Hibernate, POJO, JDO 應該是
大家都會參考或用在開發專案上了!

但最近卻殺出個程咬金 Ruby on Rails(或其它宣稱相同精神的 web
framework) 出來後, 又把 Java 這一塊搞的熱鬧滾滾. 一樣是有一派
人是反正該會的都會, 開發上也沒問題何必採納新平台, 另一派又開
始了許多的新 project, 希望達到 Ruby on Rails 宣稱的精神.
  1. Grails
  2. Trails
  3. Waffle
  4. RIFE
  5. Sails
  6. Wicket
其實 Ruby 語言天生的某些特性, 確實讓 Ruby on Rails 不容易實作
和它一模一樣, 但往簡單的目標走應該也是對的, 在商業市場上也沒
人願意花那麼多錢那麼多時間給程式員寫程式了.

後有 ajax 程式要寫, 又有一推新玩意冒出頭, 真是煩燥!

這邊有一篇大老對自己 java web framework 的看法
Java Web Framework Sweet Spots

Monday, March 13, 2006

AJAX and JSON

我們玩 AJAX 有一段很久的時間了, 對於 AJAX 的 "X"(XML) 實在是很受不了, 不同的 browser 間有一些不同結果要處理, 加上 XML 對 programmer 實在是很難搞, 最後 javascript 很不漂亮!

JSON(JavaScript Object Notation) 的出現就是救星了, 以前 programmer 總是喜歡用 XML 來做很多設定或資料交換工具, 但 XML 真的是對人類易讀, 對 programmer 就很難控制它. 開發 j2ee web app 這麼久, 真的是很討厭它, 好像只是證明你寫程式很有功力而已, 那些資料用用 array, map...不就夠了嗎!

請參考 AJAX, JSON and JSON-RPC

Tuesday, February 28, 2006

Rails, Apache, CGI/FastCGI on Windows

安裝 typo 時, 在 apache 2 + windows 上碰到不少問題, 其實 Rails 1.0 產生出來的應該很好設定, typo 可能是比較早開發加上有調整過困擾了我, 把一些細節記錄下來以免忘記!
  1. 安裝 Apache 2, MySQL
  2. 安裝 Ruby, Rails
  3. 開始新的 web app, 打開 Dos Command Prompt
    > rails my_app
    > cd my_app
    > ruby script/server
  4. 請用 http://localhost:3000 看是否運作
  5. 詳細請參考 Rolling with Ruby on Rails
接下來我們進入正題, 當你有了 web app 後, 如何和 Apache 一起工作.

1. CGI 法
  • 打開 rewrite 功能, 移除 "#", 重要!
    LoadModule rewrite_module modules/mod_rewrite.so
  • virtual host 設定
    <VirtualHost *:80>
    ServerName mywww
    DocumentRoot d:/my_app/public/
    ErrorLog d:/my_app/log/server.log

    <Directory d:/my_app/public/>
    SetEnv RAILS_ENV production
    Options +FollowSymLinks +ExecCGI
    AllowOverride all
    Allow from all
    Order allow,deny
    </Directory>
    </VirtualHost>
  • 要設定, my_app/public 下的檔案, 基本上 Rails 1.0 產生出來是不用動.
    • .htaccess
      a) RewriteBase 要關閉
      #RewriteBase /myrailapp
      b) RewriteRule 要用 dispatch.cgi
      RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
    • 確定 dispatch.cgi 及 dispatch.fcgi 第一行, 要指到 ruby
      #!d:/usr/ruby/bin/ruby
  • 打開 c:/WINDOWS/system32/driver/etc/hosts 檔案, 加上
    127.0.0.1 mywww
  • 重新起動 Apache, http://mywww/ 或 http://localhost/

  • Alias 設定, 記得上面都要成功再來試 oh!
    • 加入這一段, 成功後可以移除上面 virtual host 設定
      Alias /myapp "d:/my_app/public"
      <Directory d:/my_app/public/>
      SetEnv RAILS_ENV production
      Options +FollowSymLinks +ExecCGI
      AllowOverride all
      Allow from all
      Order allow,deny
      </Directory>
  • 記得要改 my_app/public 下的檔案
    • .htaccess, 記得要打開 RewriteBase
      RewriteBase /myapp
  • 重新起動 Apache, http://localhost/myapp
2. FastCGI 法
  • 記得請先作完上面方法確定成功後再用 FastCGI 加快, 也比較好找問題
  • 安裝 FastCGI for Apache, 請下載 RubyForApache
    PS. 記得安裝時只要選擇 mod_fastcgi 就好了!!!
  • 設定你的 Apache
    • 加上 FastCGI module 功能
      #FastCGI
      LoadModule fastcgi_module modules/mod_fastcgi.so
      FastCgiConfig -restart-delay 120 -idle-timeout 150 -appConnTimeout 100 -init-start-delay 100 -startDelay 100 -maxProcesses 1 -minProcesses 1 -processSlack 1 -initial-env RAILS_ENV=production
  • 設定你的 my_app/public
    • .htaccess 要改成
      #RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
      RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
  • 重新啟動 Apache, http://localhost/myapp 應該會快一點

Wednesday, February 22, 2006

聊聊 Ruby on Rails

我們來談談一下 Ruby on Rails, 或許可以找到一些新開發 Web 的方法.
  • Rails 是用 Ruby 語言開發, Ruby 是純 OO/SmallTalk like script 語言, 不用管 build 環境, 可以很快上手, 它的相關程式庫發展也很齊全豐富. 例如:
    RubyGems => installer
    REXML => XML library
    Rake => make/ant
    WEBrick => web server like Tomcat
    Test::Unit => unit testing
    XML-RPC => XML-RPC
    SOAP => SOAP
    DRb => Jave RMI, contributed computing
  • Rails 是一套 MVC web framework, 它的設計理念(名言)
    • Convention over Configuration(CoC)
      依照 Rails 定義好的命名規則, Rails 會幫你處理相關運作, 從 url, html page, ORM, 資料庫都套用此一原則
    • Don’t Repeat Yourself(DRY)
      盡量讓大部份的事交給 Rails 處理, 但還要能讓開發者達成目的
  • Rails 和 J2EE
    • Java 陣營: Java + Tomcat + J2EE, Struts, Spring + Hibernate(ORM)
    • Rails 陣營: Ruby + WEBrick(Apache) + Rails
  • Rails 基本是由 Action Pack 及 Active Record 完成
    • Action Pack => Action Control + Action View
      • Action Controller => 處理 URL/HTML Request 的大腦
      • Action View => 產生 html/xml 結果
    • Active Record => 處理資料庫且能將資料庫內容轉成 Object 讓你使用. 也就是一般稱Object Relational Mapping(ORM), like Hibername.
  • Rails 團隊有開發過不少 web apps 經驗, see 37signals. 所以 Rails 很完整又很寫的很讚, 從 cookies, session, filter, error, validate, html page layout, AJAX, testing(unit & function), ORM... 都有考慮, 且都有讓你可以加入設定處理你想要做的事.
  • Rails 不喜歡用 xml 來做設定, 都直接寫在 Ruby 程式裡(這是 Ruby 語言的優勢, 其實那些都是 methods 而已)或用 yaml, 這樣也比較好懂一些.
  • 提供一些簡單的 script 讓你可以快速產生程式
    ex: generate scaffold Product Admin
  • Rails 現在的問題? 你的 web app 要用 Apache(deployment 時). 但用 CGI 慢, 所以要用 FastCGI, 但好像有些安裝問題? Rails 紅了這問題應該會被解決.
  • 多語系處理問題?
  • 雖然現在的不少 web app 用 PHP 開發, 但我覺的 PHP 老了, Ruby + Rails 應該讓不少人眼睛一亮. 自己不是很能習慣 PHP 的直率(自己是開發 J2EE web app)
  • 現在也有不少新的 web framework 冒出頭
  • Java => Trails, Groovy=> Grails
  • Python => Django
  • PHP: => Symfony, CakePHP, Zend Framework, Agavi, PHP on Trax
    Top 10 PHP MVC frameworks

Monday, February 20, 2006

DRb - distributed ruby

DRb, distributed ruby 就像 Java/RMI 角色一般.
  • 參考文件
  • Server
  • require 'drb'

    class HelloServer
    def sayhi
    "Hello to my world!"
    end
    end

    DRb.start_service('druby://localhost:9000', HelloServer.new)
    puts DRb.uri, "Ctrl-Break to stop server!"
    DRb.thread.join
  • Client
  • require 'drb'

    DRb.start_service()
    obj = DRbObject.new(nil, 'druby://localhost:9000')

    # Now use obj
    5.times do
    puts obj.sayhi
    sleep 2
    end

Benchmark - Ruby 測量程式花費時間

Ruby 有提供不錯讓我們得知程式所花費時間
  • 使用 "Benchmark"
  • require 'benchmark'
  • 得知程式執行花費時間
  • COUNT = 500_000
    puts Benchmark.realtime {
    1.upto(COUNT) do
    a = "1"
    end
    }
  • 得知花費時間
  • Benchmark.bm do |x|
    x.report {
    for i in 1..COUNT
    a = "1"
    end
    }
    end
  • 報表格式
  • Benchmark.bm do |x|
    x.report {
    for i in 1..COUNT
    a = "1"
    end
    }

    x.report {
    COUNT.times do
    a = "1"
    end
    }

    x.report {
    1.upto(COUNT) do
    a = "1"
    end
    }
    end

WEBrick - Ruby 下的 web server

WEBrick 是一個完整的 Web 伺服器程式, 用 ruby 寫得蠻簡單易用的.
  • 參考文件
  • 範例
    • 啟動 WEBrick, port 為 2000

    require 'webrick'
    include WEBrick #

    #It's a function stub to start WEBrick
    def start_WEBrick(config = {})
    config.update(:Port => 2000)

    server = HTTPServer.new(config)
    yield server if block_given?

    ['INT', 'TERM'].each do signal
    trap(signal) { server.shutdown }
    end
    server.start
    end

    #To start WEBrick
    start_WEBrick do |server|
    #...see the following...
    end

    • 加入 html document root

    start_WEBrick do |server|
    #document root "/"
    doc_root = File.join(Dir.pwd, 'htdocs')
    server.mount("/", HTTPServlet::FileHandler, doc_root,
    {:FancyIndexing => true})
    end

    • 加入 servelet, 你的 XyzServlet 繼承自 HTTPServlet::AbstractServlet, 處理 do_GET/do_POST
    class HelloServlet < HTTPServlet::AbstractServlet
    def do_GET(req, res)
    res["content-type"] = "text/html; charset=UTF-8"
    res.body = %{
    <html>
    <body>
    Hello Servlet ...
    </body>
    </html>
    }
    end

    alias do_POST do_GET
    end

    class ENVServlet < HTTPServlet::AbstractServlet
    def do_GET(req, res)
    res["content-type"] = "text/html; charset=UTF-8"

    value = ENV[req.query['key']] if req.query['key']

    res.body = %{
    <html>
    <body>
    The server \"#{req.query['key']}\" is \"#{value}\" ...
    </body>
    </html>
    }
    end

    alias do_POST do_GET
    end

    #
    start_WEBrick do |server|
    #document root "/"
    doc_root = File.join(Dir.pwd, 'htdocs')
    server.mount("/", HTTPServlet::FileHandler, doc_root,
    {:FancyIndexing => true})

    #servlet "/hello"
    server.mount("/hello", HelloServlet)

    #servlet "/env"
    #ex. http://localhost:2000/env?key=OS
    server.mount("/env", ENVServlet)
    end
    • 使用
      • 請下載解壓 w.rar
      • 打開 DOS, 執行 ruby w.rb
      • 打開 Browser,
        • http://localhost:2000
        • http://localhost:2000/hello
        • http://localhost:2000/env?key=OS

Ruby 在 Eclipse 下的開發環境設定

Ruby 最近拜 Ruby on Rails(RoR) 紅透半邊天, 其實 Ruby 還真是不錯, 純 OO 又是 script 語言. 要上手並不難, 它基本程式庫也很豐富了, 除了 unicode 支援較不完整之外. 比起 PHP, 個人蠻推薦 Ruby.

開發程式習慣整合開發環境及專案管理, 近來在 Eclipse 下發展, 搭配 subversion/subclipse 做專案管理. 接下來簡單介紹大致開發流程

1. 安裝 java/J2SE50, 下載

2. 安裝 eclipse 下載 (解壓縮到 d:\eclipse 即可)

3. 安裝 ruby & ruby on rails, 這應該是你要玩 ruby 的原因, 參照

4. 開啟 eclipse, 安裝 Ruby Developement Tool(RDT) 參照
[Help]/[Software Updates]/[Find and Install...]/
"Search for new features to install"
"New remote site" 輸入
Name: "Ruby Developement Tool - RDT",
URL: "http://updatesite.rubypeople.org/release"

5. 設定 Ruby Developement Tool(RDT) 環境

  • [Window]/[Open Perspective]/[Other] 開啟 "Ruby" Perspective
  • [Window]/[Preference...]/[Ruby] 下設定 ruby interpreter & Ri/RDoc
    [Installed Interpreters]/[Add]
    Name: "ruby 1.8.2"
    Location: "d:\ruby\bin\rubyw.exe"
    [Ri/rdoc], Rdoc path: "d:\ruby\bin\rdoc", ri path: "d:\ruby\bin\ri"

6. Enjoy it

Subclipse 移除中文化

安裝 Subclipse 後出現中文用起來真是怪怪的...
下面方法可幫你回覆到英文環境

方法 1: eclipse 啟動時加上以下參數: -clean -nl en_US

方法 2: 或者拿掉那些 "zh*.properties" message 檔
到 plugins\org.tigris.subversion.subclipse.ui_0.9.105 目錄下
找到 SVNPluginUI.jar 移除 message_zh*.properties 檔案,
最後再移除 plugin_zh*.properties 即可
PS. 建議你用 WinRAR 蠻方便.