2011年11月30日 星期三

將ruby script編譯成exe檔

網路上有幾個將ruby script編譯成windows可執行的exe檔的工具,常見的包括exerb、rubyscript2exe,可是我自己實際使用,這兩個工具都有一些難解的bug,用了一下就放棄了。
最後找到ocra這個工具,它其實也有bug,但很好解決。
首先,請在command line用gem安裝ocra(我是用linux系統,windows下指令可能會有點不一樣,但應該大同小異,請自己變通)
gem install ocra
接著,用ocra compile你的.rb檔
ocra example.rb
第一次使用時,可能會產生下列錯誤(因為我已經解決下列錯誤,所以以下訊息是google來的)
Invalid gemspec in [c:/Ruby187/lib/ruby/gems/1.8/specifications/ocra-1.3.0.gemspec]: invalid date format in specification: "2011-06-19 00:00:00.000000000Z "
Invalid gemspec in [c:/Ruby187/lib/ruby/gems/1.8/specifications/win32-autogui-0.5.0.gemspec]: invalid date format in specification: "2011-08-17 00:00:00.000000000Z" 1.8.8
循著錯誤訊息的路徑(c:/Ruby187/lib/ruby/gems/1.8/specifications/)找到「ocra-1.3.0.gemspec」這分檔案後,把"2011-06-19 00:00:00.000000000Z"改成"2011-06-19"即可。
第二個錯誤訊息我自己其實沒碰到,是google時發現別人有這個問題。不過依法修改它的date format應該就沒問題了。

接著,重新執行第二個指令,應該就會產生一份example.exe
這份.exe檔在沒有安裝ruby的windows上也可以執行。

ps, 我用的ruby是1.8.7


2011年11月25日 星期五

讓html中的元素隨著捲軸移動

如題,這個功能在比較動態的網頁應該都很常用,以前要用長的可怕的js code才有辦法達成,現在用jquery,幾行code就輕鬆搞定
當然,要使用這個功能,務必在html的head中讀入jquery,此處不贅言,直接切入script
以下code主要參考Keep element in view while scrolling using jQuery這篇文章
 $().ready(function() {  
  var $scrollingDiv = $("#scrollingDiv"); // #scrollingDiv請改成自己要移動的元素
 
  $(window).scroll(function(){ 
   $scrollingDiv
    .stop()
    .animate({"marginTop": ($(window).scrollTop() + 30) + "px"}, "slow" );   
  });
 });

有幾行值得特別說明
2.因為捲軸一移動,就會用到這個function,假如直接把這個DOM選取的動作存成一個jquery object,可以省去每次都尋找element的運算,效率會比較好
6.捲軸轉動的幅度可能很大,在第7行調整元素位置前,要先確保上個動作停止
7.animate是jquery內建調整css的函式;scrollTop是計算捲軸位置的函式。此處讓選取到的div的top margin隨著捲軸位置增加30px,即可確保這個div永遠距離頁面頂端30px

2011年11月23日 星期三

取消iframe的scroll bar

在iframe的tag中加上scrolling="no"這個attribute即可
簡潔有力!

2011年11月22日 星期二

js計算某字元出現的次數

假設有個字串 s="abbbbc" 我們要用js計算這個字串中b出現了幾次,可以用 s.split("b").length-1 其他語言也大同小異

2011年11月15日 星期二

在RoR架構上自動導入手機版網頁

行動裝置的成長趨勢有目共睹,針對螢幕較小的行動裝置設計版型也因而變成重要學問。

一般做行動裝置版的網頁有三種方法:
1. 直接做兩套系統,偵測到user是用行動裝置連上網頁時,自動轉址到行動裝置系統的url
2. 同一套系統,但提供不同的url和html,行動裝置登入時轉址到該url。
3. 同一套系統,但做兩套css,使用者用行動裝置進入時,套用行動裝置版的css


這篇文章針對RoR架構,討論第二種方法的實做方式。

一、
設計行動版網頁url時,在網域前加上「m」(mobile)算是很常見的習慣,例如m.facebook.com
但使用免費的平台,例如heroku,不太可能這樣做
所以這邊設定的網址是在主網址後加上m,例如ptttranspost.heroku.com/m

假設user用電腦登入時的頁面,對應的controller是「home」,那我們就在app/views/home下新增"m.html.erb"。
接著,請到config/routes.rb 新增路徑
match 'm' => 'home#m'

二、
編輯app/controllers/home_controller.rb
class HomeController < ApplicationController
        layout 'application', :except =>"m" #avoid applying layout config to m.html.erb 
    def index
        platform=request.env["HTTP_USER_AGENT"] #get user agent to check users' platform
        if /android/i =~ platform or /iPhone/i =~ platform #if users' platforms are phones, redirect it
            redirect_to m_path
        end 
    end 

    def m
    end 
end
第二行的用意是防止layouts/application.html.erb 裡的設定干擾行動版網頁
假如也要將layouts的設定套用到行動版網頁,則不用加上這行,甚至也不用做第一步驟和新增一個「m」action,因為上述兩動作都是為了避免m.html.erb被layouts影響而做。 不考慮會被layouts影響的話,第六行直接「render "m.html.erb"」即可

ps.應該也可以針對行動版網頁設計layouts,不過我用不到,所以還沒研究
要這樣用的話,可以參考這個語法:
layout false, :only => :your_action_name
三、
編輯m.html.erb,將其編輯成想要的版型
剩下的就依此類推!

研究了好一陣子,希望能幫上忙

2011年11月3日 星期四

vimrc的好用設定

set number  "顯示行數"
set autoindent  "自動縮排"
set shiftwidth=4  "使用'>'或'<'調整縮排時,一次調4格"
set tabstop=4  "讓每個tab空4格,而非預設的8格"

autocmd FileType python set tabstop=4|set shiftwidth=4|set expandtab
"假如檔案為.py檔,則讓tab=空白。因為python視tab和space為不同的東西,這個設定可以避免不必要的困擾"

syntax on  "依檔案副檔名顯示色碼"
filetype on
filetype plugin on  "開啟plug in"

nnoremap <c-n> :NERDTree <cr>  "以ctrl+n開啟NERDTree這個plugin"

nmap <silent> <c-l> :tabnext<cr>  "以ctrl+l 切到下一個vim tab"
nmap <silent> <c-k> :tabprev<cr>  "以ctrl+k 切到上一個vim tab"

以上中文解說皆是註解,可以直接複製貼上到.vimrc中