學習足跡

2013年12月13日 星期五

Node.js的MySQL連線管理

在PHP的環境中,對伺服器發出Request時,PHP才去對MySQL建立連線並撈取或異動資料,而當PHP處理完成的時候會釋放原本的MySQL連線,或是連線斷線時自動重連。

但在使用Node.js去做連線時如果要在請求結束時,並不會自己釋放與MySQL的連線,或者連線斷線時也不會自己重新連線,所以要自己去控制所有的資料庫連線狀況。


我使用的Node.js的MySQL套件是node-mysql

npm install mysql@2.0.0-rc1
npm install felixge/node-mysql

2013年12月11日 星期三

在Ubuntu12.04安裝Node.js

使用apt-get安裝

在僅使用原始的apt-get安裝,可以安裝舊版的(0.6.x)  Node.js
sudo apt-get install nodejs
若要使用apt-get安裝最新版的node.js,則需要更新套件庫在進行安裝,若原本已經使用apt-get安裝了舊版的node.js,也可以透過此步驟對node.js進行更新
sudo apt-get update
sudo apt-get install -y python-software-properties python g++ make
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs  

使用nvm(Node Version Manager)安裝

複製套件庫到家目錄中的.nvm資料夾

git clone git://github.com/creationix/nvm.git ~/.nvm

將nvm指令寫到.bashrc裡

echo ". ~/.nvm/nvm.sh" >> ~/.bashrc

重新載入.bashrc檔案(或者重新連線登入亦可)

source ~/.bashrc

安裝Node.js 0.10.22版

nvm install 0.10.22 

指定nvm使用的 Node.js版本

nvm use 0.10.22

預設使用 0.10.22 版本,否則每次重新連線登入,還需要重新 nvm use 一次

nvm alias default 0.10.22

列出所有安裝的版本

nvm ls

列出總共有哪些版本可以安裝

nvm ls-remote 


相關網站

2013年12月8日 星期日

node.js與php共用memcached資料

我們希望存放在Memcache的資料能夠在php與node.js共存,我們可以在node.js使用php-memcached套件,他們用法與memcached套件相同。

Sample code

php設定快取資料


在node.js讀取php設定的快取資料



備註

在php中可以將整個陣列的資料存放Memcached,不需要經過任何的轉換就可讀取到原陣列的資料,但是若是將要與node.js共用的陣列資料存到Memcached中,node.js會讀取不到php設定的陣列資料(node.js會讀到NaN)

反之若node.js將物件陣列資料存放到Memcached,則php直接讀取node.js設定的物件快取資料,也是讀取不到(php會讀到false)

所以php要與Node.js共用的陣列資料,則必須將物件或陣列轉換成JSON字串資料,再去解析存取

在Ubuntu12.04安裝Memcached給php使用

Memcached是個很棒的記憶體快取系統,我們通常會將需要經常存取,但又很少異動的資料存放於Memcached中,在讀取資料時直接從記憶體存取茲前處理過的資料,降低資料庫查詢的負載。

安裝

安裝Memcached

sudo apt-get install memcached

安裝php memcached套件

sudo apt-get install php5-memcache

重新啟動apache載入memcached套件

sudo /etc/init.d/apache2 restart

測試 



參考文章


2013年11月25日 星期一

JavaScript時間時區轉換

在使用JavaScript去取得時間時,都會受限於使用者自己電腦時區時間的影響

若我們可以透過下列方法,去取得指定時區的時間



參考資料

Node.js中Socket.io套件傳送訊息方式

傳送訊息方式



廣播資訊給在socket.room的人,除了發送者自己

socket.broadcast.to(socket.room).emit('updatechat', msg);

傳送更新資訊給自己

socket.emit('updatechat', msg);
socket.to(socket.room).emit('updatechat', msg);

傳送資訊給所有socket

io.sockets.emit('updatechat', msg);

傳送資訊給在socket.room的連線

io.sockets.in(socket.room).emit('updatechat', msg);

參考資料

2013年11月13日 星期三

使用指令(command line)看phpinfo

直接觀看phpinfo

$ php -i

將phpinfo資訊存成檔案輸出

若phpinfo的資訊太多,導致整個畫面無法顯示所有phpinfo資訊,則可以將phpinfo輸出成檔案,以便查找
$ php -i > phpinfo.txt

$ echo "<?php phpinfo(); ?>" | php > phpinfo.txt





參考資料

關閉Response Header中的Apache Server版本及PHP版本

有時候因為安全性問題,想要讓我們提供的服務揭露越少自己的資訊,提高被攻擊的難度

關閉Apache Server版本顯示

在Apache設定檔中 (/etc/apache2/apache2.conf) 設定或加入
ServerTokens Prod
ServerSignature Off
重新啟動Apache,然後你就會看到Response Header中顯示為 Server: Apache



ServerTokens Value Server Sends
Full (or not specificed) Server: Apache/2.2.17 (Win32) PHP/5.2.17
Prod (or ProductOnly) Server: Apache
Major Server: Apache/2
Minor Server: Apache/2.2
Min (or Minimal) Server: Apache/2.2.17
OS Server: Apache/2.2.17 (Win32)


關閉PHP版本顯示


 在PHP設定檔中 (/etc/php5/apache2/php.ini) 設定或加入
expose_php Off
 重新啟動伺服器,然後你就會看到Response Header中,原本的 X-Powered-By:PHP/5.3.2-1ubuntu4.21 這樣的訊息就不見了


參考資料

2013年9月18日 星期三

使用MongoDB做地理位置查詢(進階版)

在"使用MongoDB做地理位置查詢(簡易版)"一文中有提到,當我們在做LBS查詢時,還想要對資料做排序及分頁功能時,資料的結果會不符合我們的預期,因為當你在使用limit去做資料筆數的限制時,MongoDB 的作法撈取距離最近的筆數資料,撈出來後再做時間的排序,所以才會看到這樣的結果。

如果我們想要對LBS的查詢結果再去做子查詢,來達到資料分頁的效果,則需要使用 MongoDB 的 Aggregation 功能,Aggregation 可以針對上一查詢的結果,再去做另外的子查詢,所以 Aggregation 的順序是有差別的,盡可能好將能夠快速過濾資料的查詢語法放到最前方,這樣可以提升查詢時的效能。

但我們如果要使用 Aggregation 做地理位置查詢,則需要將該LBS 查詢放在 Aggregation 查詢的第一個位置才可以做 LBS 的查詢。


PHP5.4安裝MongoDB PHP extension發生mongo: Unable to initialize module解決方法

最近在測試環境將PHP升級到5.4後,要照先前"在Ubuntu12.04安裝MongoDB及PHP extension"文章寫的步驟安裝 MongoDB PHP extension時,發現一直讀取不到 Mongo extension 的問題,查了一查才發現原來是安裝到PHP 5.3版的MongoDB extension Driver,所以才導致讀取不到Mongo extension 的狀況。

$ php -v
PHP startup mongo: Unable to initialize module
Module compiled with module API : 20090626
PHP compiled with module API : 20100525
These options need to match.

2013年9月17日 星期二

使用MongoDB做地理位置查詢(簡易版)

因為智慧型手機的普及,LBS(Location Based Service) 的服務在近期還算是蠻夯的服務,例如找附近的人,找附近的店家,找附近的大眾運輸工具...等等之類的在地化服務,若要將這類的服務資料查詢做在 MySQL ,對於資料庫來說是相當沉重的負擔,因為要服務的使用者每次位置座標皆不相同,所以要查詢的每個標的與使用者的距離也不相同,所以每次的查詢就要針對資料庫的的所有資料去做運算,或是限制要查詢資料的座標範圍以減少查詢計算的資料量,像是只找台北的標的資料,可是這樣的資料量還是相當龐大的,如果有 10 萬 筆資料要做查詢計算, 100 個 使用者做查詢就需要對 1000 萬筆(100 * 100000) 資料做查詢計算,這對於資料庫的運算是一個很大的負擔,而 MongoDB 有提供這類地理查詢的方法及優化。

使用 $near 做地理位置查詢

建立測試資料(以台北捷運為例)

我們在MongoDB建立捷運台北車站附近的捷運站座標資料,另外加入建立時間資料,我們會想要除了做地理位置搜尋,搜尋出來的資料還可以依照時間做排序。

2013年8月28日 星期三

在Ubuntu將PHP從5.3.x升級至5.4.x

加入PPA程式庫

sudo add-apt-repository ppa:ondrej/php5-oldstable

升級apt-get

sudo apt-get update

重新安裝php5

sudo apt-get install php5

檢測PHP版本

$ php -v
PHP 5.4.19-1+debphp.org~precise+3 (cli) (built: Aug 27 2013 14:29:42)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

參考文章

2013年8月26日 星期一

MongoDB建立連線帳號驗證(MongoDB Authentication)

在安裝完MongoDB後,預設是不用任何帳號密碼就可以對資料庫進行連線,所以任何人都可以對資料庫進行連線取資料,如果是自己在測試用當然沒有什麼問題,但如果是正式使用時,為了保護資料庫的安全,我們還是希望在連線時必須要輸入連線的帳號密碼才可以存取資料庫

登入MongoDB

在命列列輸入mongo登入MongoDB
$ mongo
MongoDB shell version: 2.4.6
connecting to: test
>

使用admin資料庫 

use admin

加入帳號 

加入有讀寫權限的帳號

db.addUser("帳號","密碼")

加入只有讀取權限的帳號

db.addUser("帳號","密碼" , true)

備註

MongoDB只有分讀取跟寫入兩種權限的使用者


在Ubuntu12.04安裝MongoDB及PHP extension

從10gen安裝MongoDB

安裝版本:2.4.6

按照MongoDB官方網站的 "安裝手冊(Install MongoDB on Ubuntu)"的說明,首先要設定Ubuntu套件管理系統,匯入10gen public GPG Key的公開金鑰

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
建立套件清單
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/10gen.list
更新套件庫
sudo apt-get update
 安裝MongoDB,在安裝時可以在後面指定安裝的版本號碼,若不指定版本號碼會選擇目前最新的穩定版本
sudo apt-get install mongodb-10gen=2.4.6

2013年8月11日 星期日

在 Laravel 4使用gmail SMTP服務寄送Email

Gmail 設定值

在"郵件用戶端內設定 POP - Gmail說明"中 Google 有說明郵件服務的相關設定

內送郵件 (POP3) 伺服器 - 需要安全資料傳輸層 (SSL): pop.gmail.com
使用安全資料傳輸層 (SSL):是
通訊埠:995
外寄郵件 (SMTP) 伺服器 - 需要 TLS 或安全資料傳輸層 (SSL): smtp.gmail.com
使用驗證:是
TLS/STARTTLS 通訊埠:587
安全資料傳輸層 (SSL) 通訊埠:465
伺服器逾時: 1 分鐘以上,建議設定為 5 分鐘
姓名或顯示名稱: [您的姓名]
帳戶名稱或使用者名稱: 您的完整電子郵件地址 (包含 @Gmail.com 或 @<您的網域>.com )
電子郵件地址: 您的電子郵件地址 (使用者名稱@gmail.com 或使用者名稱@您的網域.com)
密碼: 您的 Gmail 密碼


2013年8月9日 星期五

Laravel 4 傳送變數給Layout視圖(View)

我們有時候有一些特殊的資訊需要在 Layout View 中呈現,像是Facebook的meta資訊,不同的文章在title顯示不同的標題...等等之類的需求,所以我們在控制器處理的時候需要將這些資訊傳送給 Layout View 去呈現,以下是傳送給 Layout View的方法:



參考資訊

2013年8月4日 星期日

假圖產生器

在做網頁排版設計時,常常需要一些圖片,來看看排版是否符合預期,但是我們可能會因為身邊沒有這麼多符合版面需要大小的圖片,所以常常煩惱不已,這時候就需要假圖產生器,產生我們排版需要大小的假圖,以下是一些假圖產生器的服務:


Fake images please?


範例

產生文字為KeJyun,字形為Lobster的假圖




產生大小為350x200,背景顏色為#BFAF86,文字顏色為#000的假圖





2013年7月20日 星期六

Sublime使用小技巧

快捷鍵(Key Binding)

設定檔位置
Sublime Text 2.0.2 x64\Data\Packages\User\Default (Windows).sublime-keymap
Sublime Text 2.0.2 x64\Data\Packages\User\Default (OSX).sublime-keymap
Sublime Text 2.0.2 x64\Data\Packages\User\Default (Linux).sublime-keymap

程式碼縮排快速切換

 






縮排規則切換,加入Tab空白切換





參考資料

為理想而活


photo credit: Camdiluv ♥ via photopin cc


如果為了錢而去工作 相信我"自己"應該會有一份不錯的收入

然後每天活在自我感覺良好的世界

每天過著吃好、住好、車好的日子

彷彿外面世界的紛擾與自己無關一樣

然後虛度一生,吃的、住的、開的,死後什麼也帶不走

沒留給這個世界一點什麼、也沒人記得你做了什麼

彷彿不曾活在這個世界

所以我寧願選擇為世界做點什麼

為世界帶來一些些的小改變也好

努力的"活"在這個世界

吃可以不用吃太好,餓不死就好

住可以不用住太好,有個窩就好

車可以不用開太好,可以動就好

但是我每天一定要"活"得很好

2013年7月4日 星期四

Laravel 4 Migrate介紹

php artisan migrate指令

在命令列輸入php artisan後,可以看到migrate指令

$ php artisan
migrate
  migrate:install    Create the migration repository
  migrate:make       Create a new migration file
  migrate:refresh    Reset and re-run all migrations
  migrate:reset      Rollback all database migrations
  migrate:rollback   Rollback the last database migration

migrate指令用途


指令 說明
migration 執行尚未執行的migration
migrate:install 在資料庫建立migration管理資料表
migrate:make 建立新的migration檔案
migrate:refresh 重設資料庫所有的migration,並重新執行所有的migration
migrate:reset  重設資料庫所有的migration
migrate:rollback 復原最後一筆migration紀錄


在Laravel 4使用artisan建立app key

清除檔案中的key

app/config/app.php檔案中你會找到一組key的位置,這個key是一組32個字元的key,我們可以自己輸入想要的key,或者使用Laravel 4提供的Artisan命令列去自動亂數產生一組key



使用artisan指令產生key

在命令列輸入php artisan可以看到所有artisan支援的指令,你可以找到key:generate可以產生一組亂數的key。

$ php artisan
Laravel Framework version 4.0.0
Usage:
  [options] command [arguments]
Options:
  --help           -h Display this help message.
  --quiet          -q Do not output any message.
  --verbose        -v|vv|vvv Increase the verbosity of messages: 1 for normal output, 2 for                                                                  more verbose output and 3 for debug
  --version        -V Display this application version.
  --ansi              Force ANSI output.
  --no-ansi           Disable ANSI output.
  --no-interaction -n Do not ask any interactive question.
  --env               The environment the command should run under.
Available commands:
  clear-compiled     Remove the compiled class file
  down               Put the application into maintenance mode
  dump-autoload      Regenerate framework autoload files
  help               Displays help for a command
  list               Lists commands
  migrate            Run the database migrations
  optimize           Optimize the framework for better performance
  routes             List all registered routes
  serve              Serve the application on the PHP development server
  tinker             Interact with your application
  up                 Bring the application out of maintenance mode
  workbench          Create a new package workbench
asset
  asset:publish      Publish a package's assets to the public directory
auth
  auth:reminders     Create a migration for the password reminders table
cache
  cache:clear        Flush the application cache
command
  command:make       Create a new Artisan command
config
  config:publish     Publish a package's configuration to the application
controller
  controller:make    Create a new resourceful controller
db
  db:seed            Seed the database with records
key
  key:generate       Set the application key

migrate
  migrate:install    Create the migration repository
  migrate:make       Create a new migration file
  migrate:refresh    Reset and re-run all migrations
  migrate:reset      Rollback all database migrations
  migrate:rollback   Rollback the last database migration
queue
  queue:listen       Listen to a given queue
  queue:subscribe    Subscribe a URL to an Iron.io push queue
  queue:work         Process the next job on a queue
session
  session:table      Create a migration for the session database table

所以我們輸入php artisan key:generate即可產生我們需要的key了
php artisan key:generate
Application key [2wgjsIpDDIJvc4AgMV6VV1QybWznB6nY] set successfully.

檢查key產生狀況

接下來回到app/config/app.php檔案中,找到key資料的位置,確認key是否以正確的產生即可。


同步發表於

2013年6月9日 星期日

Laravel 4 PHP Framework繁體中文教學文件


Laravel 是網頁應用程式的框架,使用優雅的語意。我們認為開發必須是愉快的,這樣創意的體驗才能真正地被實現。Laravel 嘗試著除去開發專案時,常遇到的的痛苦,像身分驗證(authentication)、路由(routing)、session及快取(cache)。

Laravel的目標在於使開發者在沒有犧牲應用程式功能為前提,讓開發過程是愉悅的。快樂的開發者能夠做出最好的程式,為了這個目標,我們試圖去整合我們看過其他網頁框架中最佳的優點,包括其他語言開的網頁框架,像是 Ruby on Rails 、 ASP.NET MVC 及 Sinatra。

Laravel 是容易入門的,但卻是功能強大,提供健壯網頁應用程式強大的工具,一個極好的反轉控制容器(IoC),語意表達式的 Migration 系統,支援緊密整合的單元測試,給你需要的工具去,建造你工作上的任何網頁應用程式。

Laravel 4 PHP Framework繁體中文教學文件 :

Github Page

http://kejyun.github.io/Laravel-4-Documentation-Traditional-Chinese/docs/introduction/

備用站


2013年6月5日 星期三

在github建立靜態網站

如果有用過Twitter Bootstrap的人應該會發現它們的網址是http://twitter.github.io/bootstrap/,他們將網站放在github下,雖然只支援靜態網站,但對於簡單的小網站我想也夠了,而且還有版本控制,一舉兩得,所以現在開始來玩玩github page吧~

建立github page方法


  • 手動建立
  • 使用產生器建立

2013年6月2日 星期日

使用composer安裝Laravel 4(Ubuntu12.04、PHP >= 5.3.7)

環境需求

  • Ubuntu 12.04
  • Apache2
  • PHP >= 5.3.7
  • MCrypt PHP Extension(若沒有請使用sudo apt-get install php5-mcrypt安裝)
  • composer

2013年6月1日 星期六

2013年5月31日 星期五

PHP Coding Style 程式碼風格規範(PSR)

PSR

PSR-0

A fully-qualified namespace and class must have the following structure \<Vendor Name>\(<Namespace>\)*<Class Name>
一個完全合格的 namespace (命名空間) 與 class (類別) 需要符合這樣的結構\<Vendor Name>\(<Namespace>\)*<Class Name> 。

範例 

 \Doctrine\Common\IsolatedClassLoader => /path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php

\Symfony\Core\Request => /path/to/project/lib/vendor/Symfony/Core/Request.php

\Zend\Acl => /path/to/project/lib/vendor/Zend/Acl.php

\Zend\Mail\Message => /path/to/project/lib/vendor/Zend/Mail/Message.php
Each namespace must have a top-level namespace ("Vendor Name").
每個 namespace 需要有一個頂層的命名空間 (“提供者名稱(Vendor Name”)。
Each namespace can have as many sub-namespaces as it wishes.
如果需要的話,每個 namespace 皆可有多個子命名空間。
Each namespace separator is converted to a DIRECTORY_SEPARATOR when loading from the file system.
當 namespace 若是從檔案系統載入時,其使用的分隔符號皆要轉換成 DIRECTORY_SEPARATOR 。
Each _ character in the CLASS NAME is converted to a DIRECTORY_SEPARATOR. The _ character has no special meaning in the namespace.
類別名稱 (class name) 中,每個底線符號 (“_”) 皆要轉換成 DIRECTORY_SEPARATOR 。因為底線(“_”)在 namespace 中是沒有意義的。
The fully-qualified namespace and class is suffixed with .php when loading from the file system.
從檔案系統所載入的合格 namespace 與 class 一定是 “.php” 結尾。
Alphabetic characters in vendor names, namespaces, and class names may be of any combination of lower case and upper case.
Vendors name、namespace 以及 class name 所使用的字母可以由大小寫組成。

PSR-1

Files MUST use only <?php and <?= tags.
檔案中一定 (MUST) 只能使用 <?php 以及 <?= 標籤。
Files MUST use only UTF-8 without BOM for PHP code.
PHP 程式的檔案編碼,一定 (MUST) 要用 “無 BOM 之 UTF-8″ 格式。
Files SHOULD either declare symbols (classes, functions, constants, etc.) or cause side-effects (e.g. generate output, change .ini settings, etc.) but SHOULD NOT do both.
檔案需要 (SHOULD) 在 宣告 symbols (classes, functions, constants, 等) 或是採用從屬效應(side-effects) (像是產生輸出,變動 .ini 的設定等) 中擇一處理,不需要 (SHOULD NOT) 二者都做。
Namespaces and classes MUST follow PSR-0.
命名空間以及類別一定 (MUST) 依循著 PSR-0 建議文件。
Class names MUST be declared in StudlyCaps.
類別名稱一定 (MUST) 是採用 大寫開始的駝峰大小寫命名法(StudlyCaps) 來宣告。
Class constants MUST be declared in all upper case with underscore separators.
類別中的宣告常數變數的名稱一定 (MUST) 是由全大寫字母以及底線符號組成。
Method names MUST be declared in camelCase.
函式名稱一定 (MUST) 是以 小寫開始的駝峰大小寫命名法(camelCase) 宣告。

PSR-2

Code MUST follow PSR-1.
程式碼一定 (MUST) 得依循 PSR-1。
Code MUST use 4 spaces for indenting, not tabs.
程式碼的縮排一定 (MUST) 是用四個空白,而非 tab。
There MUST NOT be a hard limit on line length; the soft limit MUST be 120 characters; lines SHOULD be 80 characters or less.
每行的字數長度需 (SHOLD) 得少於 80 字元;一定 (MUST) 要將相對限制(soft limit) 設定在 120 字元;必不要 (MUST NOT) 寫到絕對限制 (hard limit)。
There MUST be one blank line after the namespace declaration, and there MUST be one blank line after the block of use declarations.
宣告 命名空間 (namespace) 之下一定(MUST) 要空一行,以及宣告  use 之下一定 (MUST) 也要空一行。
Opening braces for classes MUST go on the next line, and closing braces MUST go on the next line after the body.
類別 (class) 所使用的成對花括號,一定(MUST) 要將開始的放在宣告的下一行,以及程式碼本體結束的下一行。
Opening braces for methods MUST go on the next line, and closing braces MUST go on the next line after the body.
方法 (method) 所使用的成對花括號,一定(MUST) 要將開始的放在宣告的下一行,以及程式碼本體結束的下一行。
Visibility MUST be declared on all properties and methods; abstract and final MUST be declared before the visibility; static MUST be declared after the visibility.
所有屬性或是方法的可視屬性(visibility)一定(MUST) 要宣告, abstract 以及 final 一定(MUST) 是宣告在可視屬性之前; static 則一定(MUST) 是宣告在可視屬性之後。
Control structure keywords MUST have one space after them; method and function calls MUST NOT.
控制結構 (control structure) 的關鍵字一定(MUST) 要在其後加入一個空白;方法(Method) 與函式(Function)則一定不要(MUST NOT)。
Opening braces for control structures MUST go on the same line, and closing braces MUST go on the next line after the body.
控制結構的開始(左)花括號一定(MUST) 要在宣告啟始的同一行,而結束(右)花括號則一定(MUST) 要在其程式碼本體結束的下一行。
Opening parentheses for control structures MUST NOT have a space after them, and closing parentheses for control structures MUST NOT have a space before.
控制結構中,用到括弧時,其開始(左)括弧之後與結束(右)括弧之前一定不要(MUST NOT) 有空白。

PSR-3

  • The LoggerInterface exposes eight methods to write logs to the eight RFC 5424 levels (debug, info, notice, warning, error, critical, alert, emergency).
  • A ninth method, log, accepts a log level as first argument. Calling this method with one of the log level constants MUST have the same result as calling the level-specific method. Calling this method with a level not defined by this specification MUST throw a Psr\Log\InvalidArgumentException if the implementation does not know about the level. Users SHOULD NOT use a custom level without knowing for sure the current implementation supports it.
  • Every method accepts a string as the message, or an object with a __toString() method. Implementors MAY have special handling for the passed objects. If that is not the case, implementors MUST cast it to a string.
  • The message MAY contain placeholders which implementors MAY replace with values from the context array.
  • Placeholder names MUST correspond to keys in the context array.
  • Placeholder names MUST be delimited with a single opening brace { and a single closing brace }. There MUST NOT be any whitespace between the delimiters and the placeholder name.
  • Placeholder names SHOULD be composed only of the characters A-Z, a-z, 0-9, underscore _, and period .. The use of other characters is reserved for future modifications of the placeholders specification.

相關連結

2013年5月30日 星期四

Laravel 3 Bundle使用說明



教學影片

Hello Bundle - Creating Bundles with Laravel




Phil Sturgeon - Laravel & Composer


參考資料

英雄總是寂寞孤獨!自信?自負?


英雄總是寂寞孤獨的 都覺得他人都後知後覺 自己是先知先覺
但是英雄又有分自信與自負兩種
自信的英雄會想辦法讓自己不再寂寞、不再孤獨
想辦法指引大家 教導大家正確的方向
自負的英雄總是活在自我的世界 自己享受的寂寞與孤獨而終老
在自己的世界總是自信 但在別人眼中卻是個自負的人
坐而言不如起而行,想辦法讓這個世界活絡過來吧
讓大家不再寂寞與孤獨,各位英雄豪傑

2013年5月25日 星期六

Rails Form Helper使用說明

表單欄位

名稱 用途
form_tag 產生表單
label_tag label:<label>
text_field_tag
text_field
input text:<input type="text">
password_field_tag input password:<input type="password">
hidden_field_tag input hidden:<input type="hidden">
submit_tag input submit:<input type="submit">
check_box_tag input checkbox:<input type="checkbox">
radio_button_tag input radio:<input type="radio">
text_area_tag textarea:<textarea>
search_field input search:<input type="search">
telephone_field input tel:<inputtype="tel">
url_field input url:<input type="url">
email_field input email:<input type="email">
select_tag select:<select>
options_for_select option:<option>
select_date <select id="start_date_year" name="start_date[year]"></select> <select id="start_date_month" name="start_date[month]"></select> <select id="start_date_day" name="start_date[day]"></select>
file_field_tag input file:<input type="file">


2013年5月23日 星期四

Rails Migration使用說明


關鍵字

名稱 用途
add_column 增加欄位
change_column 變更欄位
remove_column 移除欄位
rename_column 重新命名欄位
create_table 新增資料表
change_table 變更資料表
drop_table 丟棄資料表
add_index 增加索引
remove_index 移除索引

變數型態

名稱 資料範例 用途
:binary 010101101011 二進制資料
:boolean true / false 布林值
:date 2013-04-01 日期
:datetime 2013-04-01 23:59:59 日期時間
:decimal 3.141
:precision => 6
浮點數
:float 3.141
:precision => 6
浮點數
:integer 0,1,2,3... 整數
:primary_key 0,1,2,3... 主鍵
:string KeJyun 字串
:text KeJyun KeJyun KeJyun KeJyun... 長字串
:time 23:59:59 時間
:timestamp 2013-04-01 23:59:59 使用時間欄位(created_at , updated_at)

關鍵變數

名稱 範例 用途
:default :default => 'default_value' 預設值
:null :null => false 是否可以空值
:limit :limit => 255 最大長度



參考資料

2013年5月7日 星期二

Rails模組(Model)資料驗證(Validates)

驗證規則

# validates 欄位名稱 驗證規則
validates :email, :presence true,
:uniqueness { case_sensitive: true } ,
:length => {:in => 10..200 },
:format => {:with => /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/ , :message => 'Email格式錯誤'}
變數名稱 範例 用途
:presence :presence true 一定存在這個欄位資料
:uniqueness :uniqueness => { :case_sensitive => false }
:uniqueness => true
唯一值(條件)
:length :length => { :minimum => 2 }
:length => { :maximum => 500 }
:length => { :in => 6..20 }
:length => { :is => 6 }
資料長度
:minimum:最短長度
:maximum:最長長度
:in:長度範圍
:is:長度唯一值
:format format: {:with=> /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/ , :message => 'Email格式錯誤'} 正規表示式判斷
:with:正規表示式
:message:錯誤訊息
變數名稱 範例 用途




參考資料

2013年5月5日 星期日

在Rails安裝Twitter Bootstrap套件

在Gemfile中加入下列文字
gem 'bootstrap-sass'
安裝bootstrap-sass套件
bundle install
app/assets/javascripts/application.js檔案中加入//= require bootstrap引用 Twitter Bootstrap JS
//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require_tree .
建立Twitter Bootstrap的scss檔 app/assets/stylesheets/bootstrap_and_overrides.css.scss,並在檔案中輸入下列文字以引用Twitter Bootstrap

@import "bootstrap";
body { padding-top: 60px; }
@import "bootstrap-responsive";


重新啟動伺服器
sudo service apache2 restart


可以開始在rails中使用Twitter Bootstrap了~


參考文章

2013年4月27日 星期六

Ruby小技巧

陣列格式

key: value  # only available in 1.9.2  
:key => value # available in 1.8.7 and 1.9.2

字串編碼

在使用非英文的文字的時候,會造成編碼錯誤,在任何檔案中若要使用到非英文的字串時,需要在檔案開頭加上# encoding: UTF-8才有辦法正解析執行

Cache

在開發的時候常常會更動到頁面,需要即時看頁面的顯示節,但是rails會將原本的結果cache住,使得我們看不到最即時異動的頁面,這個時候我們就可以將下列Cache設定設為false,這樣就可以即時的看到我們修改的資料了

config.cache_classes = false
config.action_controller.perform_caching = false

Migrate

不支援unsigned integer


:binary
:boolean
:date
:datetime
:decimal
:float
:integer
:primary_key
:string
:text
:time
:timestamp

參考資料

2013年4月22日 星期一

在Ubuntu12.04安裝Rails、Apache與Passenger

軟體版本

Ubuntu:12.04
Ruby:1.9.3
Rails::3.2.9
Passenger:3.0.19

2013年4月9日 星期二

在Ubuntu 12.04安裝Ruby on Rails環境

軟體版本

Ubuntu:12.04
Ruby:1.9.3
Rails::3.2.9

2013年4月3日 星期三

ubuntu啟動命令列tab鍵自動完成

在安裝完ubuntu後,發現在使用命令列打字時,按tab後後面不會自動出現我要打的命令,也沒有可用的命令提示,在網路上Google了一下解決辦法。

使用管理員身分開啟/etc/bash.bashrc這個檔案

在下面找到

# enable bash completion in interactive shells
# if [ -f /etc/bash_completion ]; then
# . /etc/bash_completion
# fi


把前面的註解(#)拿掉變成

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi


儲存後重新啟動就可以生效了

2013年3月23日 星期六

文件筆記管理工具


我常常有很多細微的想法,但每次時間一久,常常都會忘了之前的想法,總覺得這樣很浪費腦資源,所以需要一些工具把這些想法片段記錄起來,以便以後能夠做彙整管理,在網路及智慧型手機普及的年代,當然要用Web或APP去紀錄比較省時省力,以下是一些我覺得還不錯的紀錄工具,若有其他更好的工具也歡迎提供意見。

Wunderlist

連結:WebAndroid APP |iOS APP

Todo List,簡易的將工作事項分門別類處理,除了可以透過手機APP管理工作事項,在Windows及Mac作業系統也有專用的軟體,但是現在還沒有看到Linux版的專用軟體有點可惜。



Astrid

連結:WebAndroid APP

Todo List,可以把要做的工作事項,離線時紀錄在手機中,等有網路時再同步於雲端,或者使用Web介面紀錄工作事項,再同步到手機App。

備註:
Astrid已被Yahoo收購,在收購完成後的 90 天內,Astrid 服務將被關閉,在接下來的 3 個月內不接受新註冊用戶申請。雅虎收購 Astrid 究竟是人才收購還是想將 Astrid 的技術應用到自己的產品中來部署自己的移動戰略,現在還不得而知(雅虎收購任務管理應用Astrid,90天內關閉服務



Trello

連結:Web

簡易的Todo List工作分派管理紀錄



Teambox

連結:Web

團隊合作,工作分派管理紀錄




To be continued~

參考文章

2013年3月17日 星期日

2013年1月22日 星期二

CSS小技巧

clearfix 方式

在最後一個元素塞clear: both

  • 背景(background)和邊界(border)不會被展延
  • div順序移動會影響原先設計

在最後面塞空的div,並指定clear: both屬性

  • 需要塞一個空的元素
  • 多了額外無用的元素

在父元素處理(較佳)





參考資料

2013年1月3日 星期四

編譯php程式碼(ubuntu)

在拜讀了低溫烘培大大的「使用bcompiler將PHP加密」一文後,自己也想來嘗試看看要怎麼把php程式碼編譯成二進制的php檔,但因為需要安裝pecl,pecl在Windows安裝有點複雜,所以索性就先安裝在ubuntu試用看看。

安裝

  • apt-get install libbz2-dev php-pear php5-dev
  • pecl install channel://pecl.php.net/bcompiler-1.0.2

設定extension

  • echo "extension=bcompiler.so" >> /etc/php5/conf.d/bcompile.ini