2016年9月8日 星期四
【Linux】Linux command - find, grep
find 指令
當我們想查找路徑裡有什麼檔案,檔案名稱是什麼時
就會用到 find 指令
基本用法:
find "資料夾" -name "*.副檔案名"
例子:
find "/home/nightsnow" -name "*.php"
上面這個例子的意思是
把在 /home/nightsnow 路徑裡有的 php 檔案的名字都顯示出來
grep 指令
grep 指令是搜尋檔案內容
find + grep 指令
通常當我們需要搜尋內容出現在哪個檔案時
很常會用到 find + grep 指令
基本用法:
find "資料夾" -name "*.副檔案名" -exec grep "目標" {} \;
例子:
find "/home/nightsnow" -name "*.php" exec grep "welcome" {} \;
上面的例子就是要找出在 /home/nightsnow 路徑內 含有 welcome 字元的 php 檔案
另外在 grep 中有幾個命令參數是比較常用的
-m = 只顯示多少 rows (有時候可能有很多檔案會含有你所搜尋的字元,這樣會顯示超多的檔案,用了 -m 就可以 limit line 了喔)
-n = 顯示檔案內符合指定樣式的 line number
-H = 顯示檔案名稱
例子:
find "/home/nightsnow" -name "*.php" exec grep -m 10 -n -H "welcome" {} \;
2016年9月7日 星期三
【Laravel】基礎入門 (1) - Routing
使用 Laravel, 不得不提及的一定就是 Routing 了
個人認為學 Laravel 最最最最重要的第一步就是 Routing
Routing 機制是決定如何處理 request 的重要角色
現在我們來了解一下 Laravel 的 Routing 機制吧
在我們建立 Laravel 專案後,會看到專案內長這個樣子
--------------------------------------
打開 route.php , 我們可以看到 Laravel 已經有個簡單易懂的例子
這個例子的意思是
假設我們的網頁連結設成 website.com
那麼我們只要在瀏覽器輸入 website.com
就會顯示 Laravel 預設的歡迎畫面
假如我們想歡迎畫面設定成 website.com/welcome
然後想在 / print out "Hello World!" 這句
那只需要把 / 的 view 改成 return "Hello World!"; , 另外再加一個 /welcome 的 route 就可以了!
如果想普通的讀取 php, html 檔案
就在 route.php 的最開頭加上
如果我們想網站只能以HTTPS進入
Route 的 method 除了我們熟悉的 GET 和 POST 外
還有以下很多種的
--------------------------------------
假設我們開了 user.php ,裡面我們只是 echo $_GET['name'];
然後使用傳統的PHP GET去傳遞參數,我們的連結會長這樣
http://website.com/user.php?name=nightsnow
很長很不優美,被 user 都知道你用了什麼參數
而使用laravel的route功能,我們只需要
加入這個在 route.php 後,在瀏覽器輸入 http://website.com/user/nightsnow
得出的結果就會是 User nightsnow 了!
連結會變得簡潔,而且 user 也不會知道我們的參數名稱
如果這個參數是選擇性的,可填可不填的
我們只需要在參數名稱後加 "?" ,例子如下
以上例子是給了一個 default 值給 $name
假如user真的沒傳參數過來時
$name 就等於 nightsnow 了
--------------------------------------
為參數定義 Regular Expression, 需要使用 where 指令
在這個例子中,意思就是 id 只能是數字,name 只能是英文字
除了定義指家路徑的 Regular Expression 外, 我們還可以定義全域的
例如很多 Route 都會用到 id 這個參數
而所有的 id 都只能是數字時
我們可以使用 pattern 指令
--------------------------------------
為 Route 命名,能方便我們管理,方便做 Redirect 等各項操作
使用 as 來命名
--------------------------------------
在進行 redirect 之前,我們要先把 Route 命名
例如我們有 beforeRedirect 和 afterRedirect 的 Route
然後 redirect() 就是重新導向嚕~
上述例子中,如果在瀏覽器輸入並前往 http://website.com/beforeRedirect
那麼他將會重新導向至 http://website.com/afterRedirect
如果在畫面上出現 redirect success 這一句,就證明我們成功了!
假如我們 redirect 時需要傳遞參數
我們用命名的 profile route 來做例子
--------------------------------------
當有很多重覆開頭的 Route 時,我們可以用 Route::group 把他們包起來~
例如我們可能會有 user/{id}/profile, user/{id}/name 等等重覆了 user/{id} 的 Route
這時候我們就可以把重覆了的 user/{id} 抽出來放在 prefix 裡
然後用 Route::group 把剩下的包起來
個人認為學 Laravel 最最最最重要的第一步就是 Routing
Routing 機制是決定如何處理 request 的重要角色
現在我們來了解一下 Laravel 的 Routing 機制吧
在我們建立 Laravel 專案後,會看到專案內長這個樣子
有好多資料夾和檔案的!!
然後我們需要用到的 route.php 就在 app/Http 裡
【基本路由】
打開 route.php , 我們可以看到 Laravel 已經有個簡單易懂的例子
這個例子的意思是
假設我們的網頁連結設成 website.com
那麼我們只要在瀏覽器輸入 website.com
就會顯示 Laravel 預設的歡迎畫面
假如我們想歡迎畫面設定成 website.com/welcome
然後想在 / print out "Hello World!" 這句
那只需要把 / 的 view 改成 return "Hello World!"; , 另外再加一個 /welcome 的 route 就可以了!
Route::get ( '/', function () {view('welcome') 指的是讀取在 resources/views 裡 welcome.blade.php 這個檔案
return "HelloWorld";
} );
Route::get ( '/welcome', function () {
return view ( 'welcome' );
} );
如果想普通的讀取 php, html 檔案
就在 route.php 的最開頭加上
return View::addExtension(‘html’,’php’);然後
Route::get ( '/index', function () { return File::get(public_path().’/pages/index.html’);} );public_path() 指的是讀取 public 路徑
如果我們想網站只能以HTTPS進入
Route::get('/', array('https', function()這樣我們就只能 https://website.com 進入了,不然就會顯示 Must be over HTTPS
{
return 'Must be over HTTPS';
}));
Route 的 method 除了我們熟悉的 GET 和 POST 外
還有以下很多種的
Route::get($uri, $callback);
Route::post($uri, $callback);
Route::put($uri, $callback);
Route::patch($uri, $callback);
Route::delete($uri, $callback);
Route::options($uri, $callback);
--------------------------------------
【透過URL傳遞參數】
假設我們開了 user.php ,裡面我們只是 echo $_GET['name'];
然後使用傳統的PHP GET去傳遞參數,我們的連結會長這樣
http://website.com/user.php?name=nightsnow
很長很不優美,被 user 都知道你用了什麼參數
而使用laravel的route功能,我們只需要
Route::get ('user/{name}', function ($name){
return "User ". $name;
});
加入這個在 route.php 後,在瀏覽器輸入 http://website.com/user/nightsnow
得出的結果就會是 User nightsnow 了!
連結會變得簡潔,而且 user 也不會知道我們的參數名稱
如果這個參數是選擇性的,可填可不填的
我們只需要在參數名稱後加 "?" ,例子如下
Route::get ('user/name/{name?}', function ($name = 'nightsnow'){
return "User". $name;
});
以上例子是給了一個 default 值給 $name
假如user真的沒傳參數過來時
$name 就等於 nightsnow 了
--------------------------------------
【為參數定義Regular Expression(正規表示式)】
Route::get ( 'user/{id}/{name?}', function ($id = 1, $name = "no name") {
return "User " .$id. " = " .$name;
} )->where(array('id' => '[0-9]+','name'=> '[A-Za-z]+'));
在這個例子中,意思就是 id 只能是數字,name 只能是英文字
除了定義指家路徑的 Regular Expression 外, 我們還可以定義全域的
例如很多 Route 都會用到 id 這個參數
而所有的 id 都只能是數字時
我們可以使用 pattern 指令
Route::pattern('id', '[0-9]+');這樣就不必在每個 Route 裡使用 where 來定義 Regular Expression 了!!
--------------------------------------
【為 Route 命名】
為 Route 命名,能方便我們管理,方便做 Redirect 等各項操作
使用 as 來命名
Route::get ( 'user/{id}/profile', [ 'as' => 'profile',function () {除了 as 外還可以使用 name 的
return 'profile';
} ] );
Route::get('user/{id}/profile’, 'UserController@showProfile')->name('profile');
controller 會在之後的文章再說明~
【Redirect 重新導向】
在進行 redirect 之前,我們要先把 Route 命名
例如我們有 beforeRedirect 和 afterRedirect 的 Route
Route::get ( 'beforeRedirect', [ 'as' => 'beforeRedirect',function () {
return redirect()->route('afterRedirect');
} ] );
Route::get ('afterRedirect', ['as' => 'afterRedirect', function (){
return "redirect success";
}]);
然後 redirect() 就是重新導向嚕~
上述例子中,如果在瀏覽器輸入並前往 http://website.com/beforeRedirect
那麼他將會重新導向至 http://website.com/afterRedirect
如果在畫面上出現 redirect success 這一句,就證明我們成功了!
假如我們 redirect 時需要傳遞參數
我們用命名的 profile route 來做例子
redirect()->route(‘profile’, [‘id’=>1]);這樣就是 redirect 到 profile route 以及傳遞 id 這個參數了!
--------------------------------------
【Route::group】
當有很多重覆開頭的 Route 時,我們可以用 Route::group 把他們包起來~
例如我們可能會有 user/{id}/profile, user/{id}/name 等等重覆了 user/{id} 的 Route
這時候我們就可以把重覆了的 user/{id} 抽出來放在 prefix 裡
然後用 Route::group 把剩下的包起來
Route::group(['prefix' => 'user/{id}'], function () {
Route::get('name', function ($id) {
echo "name id = ".$id;
});
Route::get('profile', function ($id) {
echo "profile";
});
});
2016年4月17日 星期日
【iOS】iOS Device Resolution
現在是 iPhone 的款式比以前多了很多
screen size 和 resolution 也比以前多了
寫 iOS app 的你可能會遇上一個問題
什麼圖適合在什麼 device 上呢?
現在 iPhone 的圖暫時分了 @1x, @2x, @3x
不要以為 screen size 越大 resolution 就越高!
這個觀念是錯的喔~
現時最高 resolution 的 device 是 iPhone Plus喔~
iPad 也只是用 @2x 的圖~~
如果想在不同 device 都有高畫質的圖
最好的方法是 provide 3 張圖,用同一名稱,但後面要記得加 @#x
size 的計法也只是 2 倍,3 倍這樣的~
例子:
假設我們有張 100x100 的 image.jpg
那我們的3張圖就分別是...
image.jpg 100x100
image@2x.jpg 200x200
image@3x.jpg 300x300
然後把圖同放進 Xcode Project 裡,Xcode會自動 detect 用家 device 是用什麼圖的~
至於正確的 size 嘛,就提供下圖給大家慢慢觀摩了!!
2016年3月8日 星期二
【Linux】Linux command - crontab
crontab 是一個很常用, 很容易理解而且很實用的指令, 大部份 crontab 都是用在伺服器上, 例如想定時給資料庫弄個備份, 就會使用到 crontab 了!
簡單來說, crontab 就是工作排程, 讓你定好在什麼時間做什麼事情~
當設定好 crontab 後, 他就會永遠在你設定的時間上執行指令嚕~
安全性:
簡單來說, crontab 就是工作排程, 讓你定好在什麼時間做什麼事情~
當設定好 crontab 後, 他就會永遠在你設定的時間上執行指令嚕~
安全性:
首先要設定哪些使用者帳號可以使用 crontab 指令
/etc/cron.allow 設定在這檔案裡的使用者帳號才能使用 crontab
/etc/cron.deny 設定在這檔案的使用者帳號不能使用 crontab
(一列只可以填寫一個使用者帳號啊)格式:
過程:代表意義 分鐘 小時 日期 月份 週 指令數字範圍 0-59 0-23 1-31 1-12 0-7 就是指令咧
使用 crontab -e 指令後, 會打開 nano 或 vim 的
在裡面一列代表一個工作, 所以記得每次都開新一列喔~
舉個例子來說會比較容易明白~ 假設現在有個用家叫 Bob, 他想每天的下午 3 點和 9 點都寄一封 email 給 Mary, 很簡單的, Bob 輸入 crontab -e 指令後, 在裡面開新一列, 輸入 0 3,9 * * * mail Mary -s "This is a subject"
不同的符號有不同的意思喔
- " , " = and, 與的意思
- " - " = range, 一個範圍的意思, 例如每天的 8 點至 12 點 20 分進行一項工作
20 8-12 * * * command
- " * " = all, 全部的意思
- " */n " = n 是數字, 代表每隔 n 單位做一次, 例如每 5 分鐘做一項工作
*/5 * * * * command
當用家設定完 crontab 後, 工作就會放到 /var/spool/cron 裡面, 以帳號做尾, 也就是以上面 Bob 的例子來說, 工作會紀錄到 /var/spool/cron/bob 裡面
【Vagrant】簡單介紹 Vagrant
Vagrant 可以在這裡下載:https://www.vagrantup.com/downloads.html
Vagrant 是一個中間層技術, 一個 virtual box, 是 VMWare 等等的上一層
簡單來說就是 command-line 模式的 Virtual box
Vagrant 提供可配置, 可再生, 便攜的工作環境, 它可以統一團隊工作人員的開發環境
如果伙伴創建了 Vagrantfile, 我們可以通過 Vagrantfile 來初始化開發環境
避免了 "在我的機器上是可以的"
建立 Vagrantfile:
執行以上的指令後, 會產生一個本地 box
除了自己建立 box 之外, 我們可以到 vagrant cloud 尋找適合自己的 box 喔
啟動 vagrant:
刪除虛擬機:
Vagrant 是一個中間層技術, 一個 virtual box, 是 VMWare 等等的上一層
簡單來說就是 command-line 模式的 Virtual box
Vagrant 提供可配置, 可再生, 便攜的工作環境, 它可以統一團隊工作人員的開發環境
如果伙伴創建了 Vagrantfile, 我們可以通過 Vagrantfile 來初始化開發環境
避免了 "在我的機器上是可以的"
建立 Vagrantfile:
mkdir my_vagrant
cd my_vagrant
vagrant initvagrant 的 image 叫 box
執行以上的指令後, 會產生一個本地 box
除了自己建立 box 之外, 我們可以到 vagrant cloud 尋找適合自己的 box 喔
啟動 vagrant:
vagrant up
啟動後可以使用 vagrant ssh 登錄 vagrant目錄同步:
默認將項目目錄與虛擬機中的 /vagrant 同步查詢狀態:
vagrant status
目前處於什麼狀態 ( running / poweroff )查詢 box 列表:
vagrant box list關閉虛擬機:
vagrant halt重新啟動虛擬機:
vagrant reload
刪除虛擬機:
vagrant destroy
只是在 "虛擬機清單" 上除名, 實際上還在的喔~~更新虛擬機:
vagrant box update若更改了虛擬機的provision設定:
vagrant provision
2016年3月7日 星期一
【Laravel/Homestead】簡易快速安裝 Laravel - Homestead
Laravel 官方提供了 Homestead
(官方教學文 - https://laravel.com/docs/master/homestead)
Homestead 是一個 使用Ubuntu 的 VM, Laravel 已經為用家們預先安裝了 Laravel 所需要的環境及 Server, 例如 Nginx, MYSQL等等, 在 Windows 及 Mac OSX 上都能夠使用
(1) 使用 VM 就當然需要安裝 VM 軟件嚕
(2) 然後需要安裝 Vagrant
(3) 安裝完成後, 使用 vagrant 指令把 "laravel/homestead" 這個 box 安裝至 Vagrant 中
(安裝這個挺花時間的喔~)
(4) 使用 git 指令把 Homestead clone 下來
(5) 新增 SSH 金鑰
輸入了這個指令之後一直按 enter 就可以了
(6) 初始化 Homestead
完成以上 9 項設定後, 就可以造訪網站了!
http://homestead.app
看到有 Laravel 這個字就代表成功了!
******
備註:
如果沒有修改預設的 Homestead.yaml
那請在 /User/{user-name} 加入 Code 這個資料夾 (因為 Homestead.yaml 裡的預設共享目錄是設定在 Code 裡的)
弄好後再執行一次 vagrant up, 搞定!
******
~。~。~。Homestead 進階小知識~。~。~。
(1) vagrant 捷徑
(官方教學文 - https://laravel.com/docs/master/homestead)
Homestead 是一個 使用Ubuntu 的 VM, Laravel 已經為用家們預先安裝了 Laravel 所需要的環境及 Server, 例如 Nginx, MYSQL等等, 在 Windows 及 Mac OSX 上都能夠使用
前置工作:
在安裝 Laravel - Homestead 之前, 我們需要先依次安裝composer及Laravel:
(1) 使用 VM 就當然需要安裝 VM 軟件嚕
(2) 然後需要安裝 Vagrant
想了解什麼是 Vagrant? 請參考【Vagrant】簡單介紹 Vagrant
(3) 安裝完成後, 使用 vagrant 指令把 "laravel/homestead" 這個 box 安裝至 Vagrant 中
(安裝這個挺花時間的喔~)
vagrant box add laravel/homestead
(4) 使用 git 指令把 Homestead clone 下來
cd ~
git clone https://github.com/laravel/homestead.git Homestead
clone 下來後, Homestead 資料夾中會有一個 Vagrantfile 檔案, 基本上要執行 vagrant命令就是要透個這個檔案執行, 所以當我的要用 vagrant 指令時, 都要先進到這個目錄才能執行嚕~
(5) 新增 SSH 金鑰
ssh-keygen -t rsa -C "username@homestead"*不要忘記把 username 改成自己的使用者帳號喔*
輸入了這個指令之後一直按 enter 就可以了
(6) 初始化 Homestead
- 移至 Homestead 目錄
cd ~/Homestead
- 使用以下指令來建立 Homestead.yaml 設定檔案, 這個檔案將放置在 ~/.homestead 目錄裡
bash init.sh(7) 設定 Homestead
打開 Homestead.yaml (在finder裡按commad+shift+g, 輸入 ~/.homestead), 或直接在終端機輸入以下指令
vim ~/.homestead/Homestead.yaml
在 Homestead.yaml 設定檔裡:
- 設定提供者 (provider), 可以是 virtualbox, vmware_fusion, vmware_workstation
provider: virtualbox
- 設定共享目錄, 設定後將同步更新本機環境與 Homestead 環境 (可設定多個共享環境)
folders:- map: ~/Codeto: /home/vagrant/Code
- 設定 sites, sites 幫助我們可以輕易指定網域對應至 homestead 環境目錄中
sites:- map: homestead.appto: /home/vagrant/Code/Laravel/public
* map 代表本機資料夾, to 代表 VM 資料夾*
* sites 設定的 map 的值代表 homestead.app 網址, to 的值代表把 map 網址導致哪一個資料夾, 也就是我們在瀏覽器輸入 http://homestead.app, 瀏覽器會顯示 VM 的 /home/vagrant/Code/Laravel/public 網頁*(8) 設定 hosts 檔案
我們需要在 hosts 檔案裡增加網域, 這個檔案會把我們的 Homestead 網站的請求重導至 Homestead 機器
Mac 的用家請到 /etc/hosts 尋找 hosts 檔案 (在 finder 裡按 command+shift+g, 輸入 /etc/hosts), 或使用 sudo vim /etc/hosts 指令直接在終端機修改
Windows 的路徑是 C:\Windows\System32\drivers\etc\hosts
打開 hosts 檔案後, 請在最底增加以下一列 (不是使用終端機的用家, 建議先把檔案拖曳至桌面, 改動後再拖回去取代喔~)
192.168.10.10 homestead.app
*此 IP 必須與 Homestead.yaml 裡的 IP 相同*(9) 啟動 Vagrant Box
- 進入 Homestead 目錄
cd ~/Homestead
- 輸入以下指令
vagrant up
- 輸入後 Vagrant 會啟動虛擬主機並共享目錄, 輸入 vagrant status, 看到 running就代表你成功了!
如果在新增 Homestead 後改動過 yaml 檔案的 sites 路徑設定, 你會發現該路徑空白一片, 這時候我們就要新增 Laravel 專案了!
composer create-project laravel/laravel project-name --dev-develop
把 project-name 改成自己想要的專案名稱
完成以上 9 項設定後, 就可以造訪網站了!
http://homestead.app
看到有 Laravel 這個字就代表成功了!
******
備註:
如果沒有修改預設的 Homestead.yaml
那請在 /User/{user-name} 加入 Code 這個資料夾 (因為 Homestead.yaml 裡的預設共享目錄是設定在 Code 裡的)
弄好後再執行一次 vagrant up, 搞定!
******
~。~。~。Homestead 進階小知識~。~。~。
(1) vagrant 捷徑
剛剛提及過, vagrant 指令是透過 vagrantfile 而執行的, 所以每次要啟動 vagrant box 時, 都需要移至 vagrantfile 所在的目錄, 那如果想在不同目錄都能使用 vagrant 指令呢?只需要執行以下指令, 我們就可以在任何位置使用 vagrant 了!
alias homestead='function __homestead() { (cd ~/Homestead && vagrant $*); unset -f __homestead; }; __homestead'(2) 連接資料庫
Homestead 的資料庫設定了 MySQL 及 Postgres 兩種, 要從本機電腦做用Navicat 連接資料庫, 我們需要連接 127.0.0.1 的連接埠 33060 (MySQL) 或 54320 (Postgres)
帳號:homestead
密碼:secret(3) 使用 SSH 連接 Homestead
除了在終端機使用 vagrant ssh 之外, 我們可以使用 IDE (例如 Netbeans, Eclipse 等等) 來 SSH 進去
如何使用 Eclipse 遠端請參考:
【Eclipse】遠端同步修改(RSE: Remote System Explorer)
host name 輸入 192.168.10.10
user id 輸入 vagrant
密碼是根據新增 SSH 金鑰時輸入的密碼, 如果沒有新增過 SSH 金鑰, 那預設的密碼就是 vagrant(4) Homestead 的連接埠
- SSH:2222 → 轉發至 22
- HTTP:8000 → 轉發至 80
- HTTPS:44300 → 轉發至 443
- MySQL:33060 → 轉發至 3306
- Postgres:54320 → 轉發至 5432
一個 Homestead 能新增多個網域的啊~就打開 homestead.yaml 新增 folders 和 sites, 儲存後執行 vagrant provision 指令就可以了!
2016年3月6日 星期日
【Mac/Laravel】簡易快速安裝 Laravel
(1) 在安裝 Laravel 之前, 我們要先安裝 Composer
Composer 的教學請看 【Mac/Composer】簡易快速安裝 Composer
(2) 安裝 Composer 後, 請確認 ~/.composer/vendor/bin 有沒有 laravel 及其相依性套件
(3) 然後把 ~/.composer/vendor/bin 放到 $PATH, 步驟如下
(3.1) 打開 bash_profile
vim ~/.bash_profile
(3.2) 打開後在最底加一列 ( {user-name}要改成自己的使用者名稱啊 )
export PATH=/Users/{user-name}/.composer/vendor/bin:$PATH
(3.3) 儲存後令它立刻生效
source ~/.bash_profile
最後在任何位置嘗試輸入 laravel , 有反應就代表成功了!
Composer 的教學請看 【Mac/Composer】簡易快速安裝 Composer
(2) 安裝 Composer 後, 請確認 ~/.composer/vendor/bin 有沒有 laravel 及其相依性套件
(3) 然後把 ~/.composer/vendor/bin 放到 $PATH, 步驟如下
(3.1) 打開 bash_profile
vim ~/.bash_profile
(3.2) 打開後在最底加一列 ( {user-name}要改成自己的使用者名稱啊 )
export PATH=/Users/{user-name}/.composer/vendor/bin:$PATH
(3.3) 儲存後令它立刻生效
source ~/.bash_profile
最後在任何位置嘗試輸入 laravel , 有反應就代表成功了!
訂閱:
文章 (Atom)