顯示具有 Web程式設計(Ruby | Rails) 標籤的文章。 顯示所有文章
顯示具有 Web程式設計(Ruby | Rails) 標籤的文章。 顯示所有文章

2012年7月12日 星期四

Top 10 Javascript MVC Framework and Single Page Application




前一陣子連Blogger也開始使用SPA(Single Page Application)的作法,也就是動態檢視(Dynamic View)的功能,在Chrome的執行下的換頁特效非常地順暢。我並不清楚是否運用server side to client javascript,如同GWT一樣,能否方便撰寫這種架構的軟體?不過我很清楚的是,使用瀏覽器本身處理javascript的速度,以及記憶體,已經是一種很確實的趨勢。


當然地相對也有缺點,因為實際上瀏覽器只有做過一次前景的HTTP GET,剩下的都在背景執行。如果你有頁面本文想讓搜尋引擎的BOT去取得,那是絕對無法取得的,也就是說搜尋引擎將無法搜尋到你的頁面。然而我想現在也會有些補救性的作法,例如事先將關鍵字放在meta或title裡,或者乾脆先將本文載入到一個隱藏的div裡也可以。然而Google也不是省油的燈,在這一篇「10個不應該使用動態檢視的理由,Google的回應」(http://www.mybloggertricks.com/2012/05/google-response-to-our-post-on-dynamic.html)中,確實有提到Google Crawler早就有支援Ajax,只是其他的搜尋引擎有支援嗎?這還得再看看了

綜合起來,透過一些商業Web服務逐漸都投向SPA的懷抱,HTML5,CSS3的興起,也證明瀏覽器的效率,功能都逐漸的在提升,競爭也算是激烈。然而該怎樣寫這樣的軟體?除了得改變過去的想法以外,也得藉助本文中提到的這些Web Framework。


2007年9月2日 星期日

Ruby on Rails 與 ruby-postgres

ruby-postgres

有網友與我提出Rails與PostgreSQL的問題,我就順便寫一下有關PostgreSQL的問題好了。

安裝的方式請參考

http://postgresql-chinese.blogspot.com/2007/08/windowsrailspostgresql.html

不過我在這邊順便補充,其實當初會捨棄postgres-pr還是因為效能的問題,native binding終究是比較快的。

在此先對新手說明一個觀念,如果你想一步一步玩熟Rails,最好還是多善用ruby script/console來進入Console mode。而Console其實也只是呼叫irb去載入environments.rb,這個檔案會陸續載入plugin, model及你指定在environments.rb寫的所有require。Console有兩個用途,一個是測試是否你能正常啟動Rails,第二個是測試你的Model是否正常,例如測試association。而如果console都啟動失敗,或是Model.find出來的都不是想要的,那真正啟動mongrel去跑頁面是一定不可能是對的。

而許多在windows上面安裝的人一定會遇到函式庫載入失敗的問題。 要注意的是,安裝任何mswin32的gem都是有可能出現這樣的問題的。這個時候如果你是去看rails的development.log或是看到exception,通常都還是會說是driver有問題(可能會是xxx.so載入失敗之類的),這樣是看不出來的。此時使用console,一啟動的時候他就會告訴你是啥dll無法載入。

而大家使用ruby-postgres,如果不安裝PostgreSQL Server Win32,有幾個重要的dll是不會被載入到windows裡的。這個使用請先安裝PGAdmin III,然後將他的安裝目錄裡的libpq.dll,iconv.dll,krb5_32.dll,libiconv-2.dll,libintl-2.dll,comerr32.dll至你的ruby安裝目錄下的bin即可,還是一樣先試試console能不能開吧!

Ruby的很多Win32函式庫都是用這種binding的方式,而並非是使用ruby撰寫而成的。所以如果今天是發現gettext不能用,就應該要去尋找gettext win32,然後將缺的dll複製到bin下即可。

該如何發問?

最近在論壇觀察了一下,發現Rails新手的朋友們,應該要接受一些觀念建立,以免回答的人答非所問。既然我遇到人來問問題(還好不是來踢館),也免不了要提倡一下,這觀念在任何一種程式語言都適用。

  • 詳述問題:想要讓人瞭解問題,就是要說明你的目的,及你在發問之前曾經做了什麼。如果不是技術上的問題,例如是求函式庫,求解法,那更要說明清楚前因後果。

  • 有Exception訊息的要貼exception:Rails當發生任何錯誤的時候,就一定是大家所熟知的畫面,「{ErrorName} in {Controller#action}」。接著就是貼ErrorName,以及下面灰色區塊裡的描述。第二個灰色區塊就是trace,如果可以的話,請 複製5~10行,如果是寄信,或發文可以不受篇幅影響,全部貼上來也無所謂。不然可是沒有人知道你在問啥的喔~

  • 有畫面的請貼畫面:如果是ajax,html等其他UI上的疑難雜症,就一定要貼畫面了。然而是複雜難以解的問題,就要請你去用用fiddler了。例如有看過google maps不能用的問題,其實後來深入一看其實就是referer被擋的問題,這種狀況應該要詳細貼出http request及response,才能讓解答的人知道是啥狀況。

2007年8月29日 星期三

我使用過的Ruby Library或Rails Plugin

Ruby Library:

  • REXML。寫XML的話也沒有別的更好用了 http://www.germane-software.com/software/rexml/

  • ROXML。這個可能對我自己的特殊應用比較有意義吧,如果是撰寫standalone rails app而又不想用sqlite的話,其實另一個選擇就是效能更好的XML Database。但是在這個技術尚未真正成熟的情況下,XQuery + ROXML也是不錯的選擇。http://roxml.rubyforge.org/

  • Gettext。這個真是牌子老信用好的東西,不過我或許還會想要選擇用更簡單語法撰寫語系檔的函式庫。http://manuals.rubyonrails.com/read/chapter/105

  • Ruport。一剛開始接觸Rails的時候還以為會像php一樣報表函式庫一直都沒有高度整合性的,心裡最想用的大概會是有點像crystal report吧。不過好在有這個,已經相當完整了,pdf,cvs該有的都有,使用上也很方便。http://rubyreports.org/

  • Chart Director。這個雖然是商業的,圖的顏色也不是挺漂亮的,不過因為想要畫的圖比較複雜只好勉為其難。

  • UUIDTools。這個也是特殊應用,有可能你對一筆資料所對應的URL想要複雜到讓使用者無法猜,或是想要試試看分散式資料庫,或許你會需要這個。http://www.cnblogs.com/funjackyone/archive/2007/06/01/768275.html

  • RJB。雖然jruby內建連結java的語法相當直接,不過jmongrel+rails的效能可不敢想像,我看我還是耐心的等到明年好了。可是我的專案還是得整合Java...唉,這個時候還是乖乖靠這個老牌子吧。http://rjb.rubyforge.org/


Rails Plugin:

2007年8月19日 星期日

商業服務的Ruby on Rails HTTP Cluster觀念及測試

Rails如果運用在正式上線的服務,便是相當需要配置為Cluster(叢集)服務。不過大部分使用Rails來建立Cluster通常都是藉著Apache mod_proxy,但在一些情況之下,他只有好設定的優點而已。另一種方式是利用一些Plugin及設定去模擬Cluster的行為,不過這樣便是消耗CPU的時間。

網路上可以看見許多Cluster的文章,但多半都是介紹單方面的功能,或是許多實做的細節牽扯在一起。這篇文章用商業服務的整體規劃來看Cluster及Rails之間的種種問題與解決方法。文章後面附帶了一節是要解釋如何解讀apache menchmark的數據。而各位如果想要瞭解的是效能,數據上的差異,已經有一篇相當棒的可以參考:
http://blog.kovyrin.net/2006/08/28/ruby-performance-results/


2007年8月10日 星期五

Ruby on Rails的效能低落

儘管我是寫Rails的,寫了想想也快要一年了。東看西看都覺得這實在是一個好東西,不過反過來,當我們的服務要上線的時候。組長卻說我的benchmark test case不夠好,不能夠測出很準確的數值(或許他心想這太好了,三台準系統可以跑200多個request/sec)。

是的, 我是多半隱藏了這個缺點,甚至很不想要去說「對,他就是一個這樣慢的東西」。當一堆文章都在寫說mongrel或是lighttpd cluster有多快,我心裡總是想著apache+mod_fcgid(你知道我在說哪一個blog...XD),我們的目標是做上萬人使用的系統,總不能真的去跑mongrel吧?那跟跑webrick有啥不同?

2007年8月6日 星期一

在FC6上安裝Ruby on Rails + FastCGI + Apache + mod_fcgid

參考文章:
http://wiki.rubyonrails.com/rails/pages/Rails+on+CentOS+4.4+with+Apache+and+FastCGI+Simply/versions/13

1. 安裝apache module
[bash]
yum install mod_fcgid
[/bash]

2. 安裝fastcgi
因為ruby-fastcgi建置的時候需要fastcgi的header所以得安裝
下載:
http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz

[bash]
tar zxf fcgi-2.4.0.tar.gz
cd fcgi-2.4.0
./configure
make all install
[/bash]

2007年7月16日 星期一

介紹Ruby on Rails


本篇文章從PHP及Web程式設計師的角度,逐漸帶出Ruby on Rails這個Web Application Framework及其優點,架構觀念。接下來要簡介Ruby及Rails的學習重點。


Web應用程式


記得在上次的的主題,重新探討Cakephp, Ruby on Rails與MVC,我大力地闡述能否實做商業邏輯,或是掌握Model的功用是多麼的重要。而老話一句,這個問題比較會出現在中大型的Web應用程式中,如果說你正在寫的是小小的網頁作業,或許本文對你只有參考的價值。

我會這樣說,是因為我們已經邁向2008年,Web應用程式在Google大神的帶領之下 ,逐漸開始在放出光芒。

2007年6月12日 星期二

Ruby on Rails 與 Oracle


前言


承接之前撰寫的Oracle Installation Guide,這裡要開始解釋要如何使用Ruby如何連到Oracle。
雖然Oracle支援標準SQL規格,不過還是有相當多他們自己的概念。本文章描述幾個Oracle新手會遇到的問題。

若要詳細管理你的資料庫(10gR2),請參考
http://www.oracle.com/pls/db102/homepage
或是書籍

Oracle Database 10g DBA 技術手冊
http://www.books.com.tw/exep/prod/booksfile.php?item=0010303350

Oracle Database 10g Linux 系統管理專家http://www.books.com.tw/exep/prod/booksfile.php?item=0010333657

2007年1月4日 星期四

Rails的ActiveSupport


Rails的ActiveRecord大家已經很熟悉,可是實際上Rails Team他們卻慢慢地在提供新的功能讓大家感受不一樣的寫程式習慣。我相信有些功能是很實用,但是避免大家會依賴syntax suger,還是要稍微解釋一下裡面幹了些什麼,如此你可以自行判斷怎樣才不會做太多重複的事。


雖然這個函示庫是給Rails使用的,不過我會建議大家多利用在任何型態的專案裡,如此就很快地可以"write like a ruby programmer"。


請參考 http://lightyror.blogspot.com/2006/09/blog-post.html

更多的資料請參考 http://api.rubyonrails.org/


舉個例:

[code]
irb(main):001:0> require 'active_support'
=> true
irb(main):002:0> 10.years.ago
=> Sun Jan 05 03:57:34 +0800 1997
irb(main):003:0> 6.hours.ago
=> Fri Jan 05 09:57:44 +0800 2007
irb(main):004:0> 6.hours.since
=> Fri Jan 05 21:57:51 +0800 2007
[/code]

當然不只十年之前,之後也可以
以下列出大略的method以及他們的作法

時間


所有的數字(包括小數)都繼承自class Numeric,而前面的範例就是Fixnum的method

  1. 計算秒數:呼叫這些methods會傳回一個整數,表示秒數


    • second(s)

    • minute(s)

    • hour(s)

    • day(s)

    • week(s)

    • year(s)

    • [ruby]
      60.seconds==1.minute
      [/ruby]


  2. 從::Numeric計算日期:從任何繼承自::Numeric的物件可以計算出日期,這些methods傳入::Time的物件便可以從該時間計算


    • until,ago:向前計算

    • since,from_now:向後計算


  3. 從::Time物件計算時間:以下method傳入任何繼承自::Numeric的數值。其實會呼叫到上面的method。


    • until,ago:向前計算



    • since,from_now:向後計算


  4. ::Time更改數值:


    • change


2006年5月8日 星期一

Things About Ruby !


首先先來看看程式語言的比較
http://www.jvoegele.com/software/langcomp.html

已經有篇文章整理的很好了
http://ibloggedthis.com/2006/04/16/ruby-on-rails-an-extensive-roundup-of-resources-projects-books-links-and-more/

從這一篇可以理解Ruby的優勢...我想這個也是php在好久好久以前興起的原因
http://pityathome.com/blog/articles/2005/08/14/syntax-matters
這個也是
http://www-128.ibm.com/developerworks/tw/library/j-ruby/

由於台灣社群這些前輩們的大力推廣,台灣已經有這些站台了
http://www.ruby-lang.tw/
http://www.ruby.oss.tw/html/
也希望有興趣的人可以加入社群

這本書你一定要K的啦!
http://www.rubycentral.com/book/
給習慣C#或Java的人看的書
http://onestepback.org/articles/10things/