[ Ruby on Rails ] 使用 RVM 管理 Ruby & Rails 環境

做任何事,最難的就是跨出去的這一步。


開發環境:
- VMware Workstation 10
- Ubuntu 15.04 (64-bit)
在開始使用Rails開發網站時,為方便Ruby、Rails及Gem的管理,我選擇使用RVM管理工具,原因只有一個,就是我只會這個。下面簡單記錄一下RVM的安裝及使用:
  • 先安裝好 curl、git & nodejs. (我都是以apt-get作install)
  • 參考RVM官方網站下兩道語法作RVM安裝:
    $ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
    $ \curl -sSL https://get.rvm.io | bash -s stable

以上,簡單兩個指令安裝好RVM,就可以開始使用RVM安裝Ruby與Rails囉!


$ rvm                        #=> 授權書和指令說明
$ rvm list                   #=> 列表現在已安裝版本(=> 現用, =* 現用和預設,* 預設)
$ rvm use 2.1.0              #=> 輸入版本來做切換
$ rvm use 2.1.0 --default    #=> 切成預設版本
$ rvm system                 #=> 如果系統也有裝Ruby,用這切回去,但一般來說不建議
$ rvm list known             #=> 列出rvm目前所有可安裝的版本
$ rvm install 2.1.0          #=> 安裝新版,如果有head標記可省略最後的".0"
$ rvm reinstall 2.1.0        #=> 重新安裝版本
$ rvm info                   #=> 目前使用的ruby的相關資料

RVM中,可隨意變更要使用的Ruby版本,對我而言有點像git branch。
然而,每個Ruby版本下有各自不同的Gem,這時我們可以利用RVM的gemset來作管理和控制:

$ rvm gemset              #=> 看指令說明
$ rvm gemset list         #=> 列出目前所用Ruby版本的gemset
$ rvm gemset list_all     #=> 列出已安裝所有Ruby版本的gemset
$ rvm gemset create xxx   #=> 建立名叫xxx的gemset
$ rvm gemset use xxx      #=> 使用xxx這個gemset
$ rvm gemset empty xxx    #=> 清空xxx這個gemset
$ rvm gemset delete xxx   #=> 刪除xxx這個gemset

$ rvm gemset copy xxx yyy    #=> 把xxx的內容copy到yyy,兩者都要存在
$ rvm gemset rename xxx zzz  #=> 把xxx改名稱到zzz

※稍微對於RVM作個筆記了解其關係:

RVM下管理多個Ruby版本,每個Ruby版本下又含有Gemset管理其gem。
(Rails的版本也是由gemset作管理唷!)
RVM ---→ Ruby version ---→ Gemset(gem)

所以在目前gemset下即可透過gem安裝rails:

$ gem install rails   #=> 在此gem下安裝rails
以上內容參考 railsfun作整理與筆記.

[ Python ] Nginx、uWSGI 與 Django 的關係

其實不應該把 Nginx 和 uWSGI 分類在 Python 中,
但為了方便記憶是在什麼時候學到的,所以就分類在 Python 裡;
由於在 website 這一塊是個超級新手,所以花了一些時間才稍稍理解,
下面就以自己能理解的角度筆記一下。

=====================================================

Nginx 
是一個輕量級的代理伺服器 ( ex. Apache, IIS, Lighttpd ),
會使用 Nginx 是由於網站需架在環境條件有限的晶片上,
所以選擇效能穩定且佔記憶體較少的 Nginx。

uWSGI
是一個實現 WSGI、uwsgi、http 等協議的 web 服務器,
可作為接口跟 Django (Pyhthon) 進行溝通。

  • 在關係上,Client 端 website 將請求遞給 Nginx,Nginx 透過 socket 找到 uWSGI 進行請求的要求,uWSGI 跟 Django 作溝通回覆回應;回應時透過 Nginx 處理靜態內容 (static),將動態內容轉發給 uWSGI服務器,最後在 Client 端作響應。
    (以下來個文字圖解)
    網頁請求 ←→ Nginx ←(socket)→ uWSGI ←→ Djngo (Python)

附上參考的 uWSGI 概念筆記

=====================================================

這是我對於三者間,目前能接受的理解,好心人有誤請指。

Done!

[ Python ] 在 Ubuntu 上安裝 Python、Django 環境

此次使用 VMware workstation 架 Linux 環境,並在 Linux 環境下

安裝 Python 和 Django 。

由於我使用的 Xubuntu 版本已內建 Python、Python2.7、Python3

和 Python3.4,所以不必手動安裝 Python。

=================================================

<< 安裝 Python、Django >>

  1. 先至 Python 官網下載 Python (依版本需求作下載)
    download
  2. 在此的手動安裝方法參考此篇技術文章
    (由於未實際手動安裝過,不便作任何筆記)
  3. 如果以手動安裝 Python 的方式,在文中也提到,會由依賴包一併
    安裝 pip (此指 pip 與 pip3),若系統以內建 Python,則需另外安裝
    一次 pip,確保確實已安裝。
    pip3
    基本上 Python 到這一步已算安裝完成,可透過輸入 python (或
    python3.4) 進入 shell 查看是否安裝完成。
    python_shell
  4. 由於在實作中有使用 pytz (Python Time Zone),所以可以利用
    pip 作 pytz 的安裝。
    install_pytz
  5. 最後,在利用 pip 安裝 Django,這樣環境就架好啦!
    install_django

=================================================

Done!

[ Python ] 超久沒筆記之學習新東西 – Python、Django

回頭看上一篇筆記已經是八月的事,其實有點誇張的久,

在這段期間經歷了論文口試、畢業、服役和開始上班生活,

上班後,主管並沒有讓我依專長去作相關的研發,

反倒給我些時間(2 weeks)去研究有趣的語言 – Python

然後再給我一些時間(1 week)利用 Django 簡單的寫一支平台。

======================================================

<< Python >>

由於主管希望以 Python 3 來作開發,所以就直接從 Python 3.4 開始,

雖然目前已開發來講大家還是建議 2.7 但看過一些比較過後,但我認為

只要從一開始就盡量試著以共通的方式作開發,應該是不會太麻煩的!

從完全不會 Python 起步的話,建議還是打好基礎,至少我是這樣起步。

這邊我推薦三個學習 Python 的方法:

  • 嗑書(Programming in Python 3)打好根基。
    (這是我用的方法,不過我吃簡體書)
  • 參考官方的教學文件:選好版本 3.4,跟著範例走。
    (個人推薦這個方法起步最好!)
  • 透過 Codecademy 學 Python!
    (這是個有趣方式,循序漸進,但我認為需要一點基礎)

學習語言其實可以有趣一點,純嗑書真的太無趣了,而且會失去熱忱,

所以這三個方法並用還不錯。

=======================================================

<< Django >>

在稍微熟悉 Python 之後,我們可以利用 Django 這個框架來實作後台,

什麼是 Django 呢?其實一開始主管跟我說 Python 時,至少我還知道我

要學習一個我沒使用過的新語言,但提到 Django 我一頭霧水 …

其實 Django 是一個以 Python 撰寫的 Web Framework,相似的框架還有

TornadoBottle 和 Flask,有閒有空再來研究其他框架的建置。

在學習、和認識 Django 時,這邊大推兩個學習的好地方!

在 Django 的學習上我認為可以先注意的就是 MTV 架構,M 指的是 Model(

model.py),T 指的是 Templates(即網頁模板 .html),而 V 就是指 View

(view.py)。

=======================================================

以上的學習我都是在 Win 7 下,透過 Visual Studio 2013 作學習和開發,

基本上都沒有問題,現在正在學習如使用 uWSGI 和 Nginx 將 Django 架在

Ubuntu 環境下。

Done!

[ PHP ] 基本檔案上傳

找到一篇寫的超清晰的文章,教你如何用 PHP 上傳檔案

這邊稍微筆記一下。

================================================

一、php.ini 設定

要作上傳檔案前,先至 php.ini 中作基本的設定:

file_uploads:檔案上傳 ,設為 On (允許上傳)
upload_max_filesize:上傳最大檔案大小,預設 2M ,建議不要太大
max_execution_time:最大程式執行時間,預設為 30 秒
max_input_time:接收資料時間限制,建議比 max_execution_time 大
memory _limit:最大記憶體,必須比 upload_max_filesize 大,上傳才不會出錯
post_max_size:POST資料量限制,預設 8M,必須比 upload_max_filesize 大

二、建立上傳表單

新增一個 index.html,這裡用 POST 方法傳遞給 upload.php 作處理。

未命名

三、 新增資料夾

以此例,新增一個 file 資料夾,讓上傳的檔案存於此資料夾,
注意要記得開啟資料夾權限,避免上傳失敗。

四、上傳檔案

新增一個 upload.php 檔案,來作檔案上傳的動作 (複製、儲存)。
在此會用到 $_FILES 陣列:

$_FILES[‘file’][‘error’]:上傳檔案的錯誤帶碼,若為 0 則表示無誤。
$_FILES[‘file’][‘type’] :檔案的 Mini 類型。
$_FILES[‘file’][‘size’]  :檔案大小,單位為 Byte。
$_FILES[‘file’][‘name’]:檔案名稱。
$_FILES[‘file’][‘tmp_name’]:檔案暫存位置。

先驗證檔案是否上傳成功,有誤則停止動作。
未命名

由於上傳的檔案只會暫存於系統上,程式執行完畢後就會消失,
所以必須複製到 file 資料夾中作儲存,這邊使用的語法為
move_uploaded_file( 暫存檔案位置, 新存檔位置 ) 。
未命名

================================================

以上簡單筆記一下上傳檔案的方法。

Done!

[ PHP ] 基本檔案下載寫法與說明

在修改棒球歷史資料庫網站時,發現學長使用

header( “location: " + URL );,以轉址的方式作檔案 ( mdb )

的匯出和下載,但此方法並不適用於 accdb ,所以,在這邊

紀錄一下解決的方法。

================================================

這邊寫一個 Download_File() 的方法來處理下載檔案。

未命名

先以 is_file( $file ) 判斷檔案是否存在 ( $file 為完整路徑+檔名 )

而在 header 開頭的部分:

header(“Cache-Control: must-revalidate, post-check=0, pre-check=0″);
在瀏覽器中不殘留快取。

header(“Content-Description: File Transfer");
傳遞檔案,但不在瀏覽器中開啟檔案。

================================================

附上header: 下載與轉址等等Stack overflow 中的討論

Done!

[ C# ] 物件序列化與反序列化

在寫論文系統時,對於字卡需要有儲存的讀取的功能

所以在結構上,字卡就不單單只能是控制項的型態

為能達到讀存的效果,我的作法跟想法就是把字卡結構化

再利用序列化反序列化的方式作讀存。

以下就筆記一下序列化和反序列化的作法:

================================================

[ 序列化 ]

 

序列化的對象可為 class、struct、enum 和 delegate
而序列化對象的內容均要是可序列化才行
由於論文系統是以 class 為物件,這邊就已 class 作為舉例

圖片

如上圖,在要序列化的 class 上加上 [Serializable] 讓此物件為可序列化目標
將物件設定為可序列化目標後,即可將物件以序列化的方式作存檔
以下圖為例:

1. 先開啟串流 (FileStream) 建立檔案

2. 宣告一個二進為序列化 Formatter

3. 使用方法 Serialize 將序列化目標指定至檔案作寫入存檔

( 圖中 CardMainList 為 List<T> 型態的序列化目標 )

圖片

 

[ 反序列化 ]

 

顧名思義,將序列化目標所存的檔案,透過反序列化的方式
轉換回其序列化目標,上面例子中,序列化的目標為 CardMainList
則我們反序列化後的物件格是即為 CardMainList。
如下圖為讀檔後反序列化的步驟:

1. 開啟串流 ( FileStream ) 讀檔

2. 宣告一個二進為序列化 Formatter

3. 反序列化讀入的串流,並回存給相對應格式的目標( 物件 )

圖片

以上,一個簡單的二進位序列化讀存功能就完成了。

Done!

p.s. 附上參考資料,以及感謝黃大師教導如何使用序列化。

[ C# ] 解決 ‘Microsoft.ACE.OLEDB.12.0’ 提供者並未登錄於本機電腦上的問題

論文系統中,Access 檔案匯入的功能中使用的連結字串語法

圖片

 

其中 “Microsoft.ACE.OLEDB.12.0″ 使用了Access Database Engine 2010 來開啟檔案

所以若未安裝 Microsoft Access 2010 或 Access Database Engine 2010 (含以上)等套件

則會碰到 提供者並未登錄於本機電腦上 的問題!

=======================================================

解決之道就是

到微軟網站下載並安裝 “Microsoft Access Database Engine 2010 可轉散發套件"

Done!

 

附上參考部落格

 

[ C# ] 屬性欄( PropertyGrid ) 快速上手(二)

此篇筆記在實作系統時,自訂義屬性欄資訊的方法。

簡單來說,要讓屬性欄顯示瀏覽資訊是透過設定 SelectedObject 來指定瀏覽類別,

所以如果僅想顯示部分屬性的話,則可以先建立一個類別( class ),定義此類別中的

資料,再透過 SelectedObject 來指定建立的類別( class )即可。

=======================================================

[ 步驟一 ] 建立一個類別( class )

111

[Category(“")] – 需先 using 命名空間 System.ComponentModel

此為定義屬性欄顯示時的「分類」。

此範例僅建立姓名屬性供瀏覽,也可在此類別中新增其他想顯示的資訊,

如 Size、Font 或 Location等,以下示範新增 Location 的範例。

111

Location 屬於 Point 型別,故新增時以 Point 宣告定義即可。

( 使用 Point 時需先 using 命名空間 System.Drawing )

 

[ 步驟二 ] 使 PropertyGrid 的 SelectedObject 指定為自訂義類別即可

111

=======================================================

由上述步驟及示範,即可達到自訂義屬性欄的效果。

Done!

 

此筆記參考以下資訊:

 PropertyGrid 應用心得自訂控制項的顯示視窗屬性(一)自訂控制項的顯示視窗屬性(二)

[ C# ] 屬性欄( PropertyGrid ) 快速上手

在製作論文系統時,字卡編輯模式下想實現點擊字卡後,會出現字卡

的名稱、大小、位置及圖片內容,原本想以 ListView 來實作,但發現

其效果不是系統想要的,偶然的情況下發現 PropertyGrid 剛好可以滿

足字卡編輯模式的需求。

=======================================================

[ 步驟一 ] 在所有工具裡找到 PropertyGrid ( VS2010 )

圖片

[ 步驟二 ] 將要顯示屬性的元件或控制項指定給此屬性欄即可

圖片

 

=======================================================

以上是簡單的屬性欄( PropertyGrid )使用,下篇介紹如何自訂義屬性欄

中欲顯示的資料。

Done!

 

屬性欄應用參考資料