over 2 years ago

身為一個程式設計師,一定會做一件事,就是建立開發環境,而建立開發環境卻是很煩人的過程。
之前為了解決這個問題,自己動手記錄了開發環境會使用的工具跟服務,寫了一個很簡單的 shell script。

現在虛擬機當道~使用上有很多的方便,在看到 base on 虛擬機的工具出現,也是時候試一試了。

什麼是 Vagrant

Vagrant 是流浪漢…
Vagrant 是一個工具,幫助你設定 虛擬機;剛開始是針對 Virtrual Box,現在就不只了。

Install Vagrant

在 ubuntu 上安裝的方法:
$ sudo apt-get install vagrant

用 Vagrant 建立虛擬機

首先增加一個 ubuntu 14.04 LTS 的 Box (打包好的 guest os)
$ vagrant box add ubuntu/trusty64

box 會從 https://atlas.hashicorp.com/boxes/search 抓下來,可以輸入以下指令查看你已經抓好的 boxes
$ vagrant box list

使用 Vagrant 會建立一些設定檔,所以我們需要先建一個資料夾,讓設定檔放在裡面

$ mkdir vagrant_develop
$ cd vagrant_develop/

產生一台虛擬機

$ vagrant init ubuntu/trusty64
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

虛擬機產生之後,會出現一個 Vagrantfile 在資料夾內

啟動她!

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Importing base box 'ubuntu/trusty64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/trusty64' is up to date...
==> default: Setting the name of the VM: vagrant_develop_default_1433005676358_75321
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 => 2222 (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Connection timeout. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default: 
    default: Vagrant insecure key detected. Vagrant will automatically replace
    default: this with a newly generated keypair for better security.
    default: 
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if its present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
==> default: Mounting shared folders...
    default: /vagrant => /home/nyo/vagrant_develop

啟動的過程中 Vagrant 做了不少事:
port forwarding,
deploy ssh public key,
mount shared folders...

虛擬機啟動之後,怎麼使用呢? ssh 連進去就可以開始用了
$ vagrant ssh

試到這邊花掉不少力氣了,想要關掉虛擬機的話,請輸入:
$ vagrant halt

又或是虛擬機用不到要刪掉了,你可以輸入:
$ vagrant destroy

Vagrant 會幫你把虛擬機刪掉

用 Vagrant 建立 nginx 環境

建立一支 bootstrap.sh 的檔案,將安裝 nginx 的指令放入檔案中

#!/usr/bin/env bash


apt-get update
apt-get -y install nginx

在 Vagrantfile 增加設定,
加入 bootstrap.sh 腳本跟一行 port forwarding 的設定,讓 host os 可以連到 guest os

Vagrant.configure("2") do |config|
  config.vm.provision :shell, path: "bootstrap.sh"
  config.vm.network "forwarded_port", guest: 80, host: 8080
end

設定完成後,執行 $ vagrant reload --provision 或是 $ vagrant provision,重新配置虛擬機,載入新的 Vagrantfile

現在你可以 curl 連到剛剛裝好的 nginx 服務了
$ curl localhost:8080

Summary

明明我的開發環境需要的服務一堆,但以上範例只偷懶裝了 nginx...
不過這還好,可以依此類推;之後有玩出不一樣的東西再寫一篇新的筆記了。

有了 Vagrant 的第一個好處大概是我可以從「一直安裝環境」變成「一直 vagrant init」吧XD

再另外附帶一提,之後打算加上 Docker 來試試。

Reference

https://docs.vagrantup.com/v2/
http://gogojimmy.net/2013/05/26/vagrant-tutorial/
http://www.codedata.com.tw/social-coding/vagrant-tutorial-1-developer-and-vm/

 
over 3 years ago

久聞 Xdebug 的強大,現在來實作一下

測試環境: Ubuntu 14.04 LTS

Installing Xdebug

直接使用 apt-get 安裝 xdebug
$ sudo apt-get install php5-xdebug

安裝完成後,/etc/php5/mods-available/ 下會增加一個 xdebug.ini 的設定檔
apache 跟 cli 也都已經載入 xdebug

Configure Xdebug

首先要設定 xdebug.remote_enable,開啟 xdebug。

還有 xdebug.remote_host 跟 xdebug.remote_port ,決定 debug 要連接的 ip 跟 port,
不過這邊就不另外設定,直接使用預設值 (localhost:9000)

編輯 xdebug.ini
vi /etc/php5/mods-available/xdebug.ini

完成之後會長成以下的樣子:

zend_extension=xdebug.so


xdebug.remote_enable = 1

你可以從 phpinfo() 檢查你的 xdebug 設定

Configure PHPStorm

使用 fuelphp 1.8 來測試 PHPStorm + XDebug
下面是一個全新的 fuelphp framwork:

Servers setting

首先,來設定 web server 的部份。開啟設定 File -> Settings,選 Project setting -> PHP -> Servers,將此 project 的 host 跟 port 都設定好,如下圖:

Run Configure

再來是設定 Debug
開啟 Run -> Edit Configurations,增加一組 Web Application 設定
如下圖:

Running

在程式中設定 Breakpoints,接著執行 Run -> Debug,PHPStorm 會依照我們剛剛設定的內容,開啟 web browser

且會在網址後接上一個 xdebug 的參數,會長的像:
localhost/fuel/public/?XDEBUG_SESSION_START=10096

接著看過來 PHPStorm 上面,會看到像下面一樣的畫面:

程式跑到一半,停留在我剛剛設定的 breakpoint 上,程式運行中的 Frames, Variables 等等都可以直接查看

Summary

完成了 php-xdebug 的設定,我們可以更加輕鬆的進行 debug,擺脫 echo, print_r(), var_dump() 這些方法了。接下來的挑戰是要怎麼更加充份的利用 xdebug 這個工具,到目前為止都只是很初階的應用而已。

另外,如果想了解 xdebug 的運作細節,可以到 http://xdebug.org/docs/remote 查看文件,上面有很清楚的說明。

Reference

http://xdebug.org/docs/remote
http://www.sitepoint.com/debugging-and-profiling-php-with-xdebug/
http://www.sitepoint.com/install-xdebug-phpstorm-vagrant/

 
over 3 years ago

網路上查 linux 相關資訊的時候,常會看到要使用 sudo 或 gksudo 的指令

sudo

sudo 以 superuser 執行指令

gksudo

gksudo GTK+ 的 sudo,或者是說是會彈跳一個視窗訊問密碼的 sudo

以上

Reference

http://superuser.com/questions/202676/sudo-vs-gksudo-difference
http://askubuntu.com/questions/163884/difference-between-gksudo-and-sudo

 
over 3 years ago

升級到 Ubuntu 14.04 之後,我的 GRUB 選單跳回預設的自動倒數十秒鐘

對一台換上 SSD 的筆電來說,這十秒鐘實在是太久了

於是乎,該著手來改一下設定了

調整設定

執行 sudo vi /etc/default/grub 你會看到以下設定

GRUB_DEFAULT=0
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="locale=zh_TW"

我們要改的設定有兩項:
GRUB_HIDDEN_TIMEOUTGRUB_TIMEOUT

註解 GRUB_HIDDEN_TIMEOUT
設定 GRUB_TIMEOUT 至我們要的秒數

最後變成以下的樣子:

GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=1
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="locale=zh_TW"

存檔之後,再執行 sudo update-grub 更新 grub 設定

大功告成,重開機吧!

Reference

http://askubuntu.com/questions/148095/how-do-i-set-the-grub-timeout-and-the-grub-default-boot-entry

 
about 4 years ago

我得了沒有嘸蝦米會死病…沒有嘸蝦米,就成了一個打字廢人。

其實很久之前就打過一篇很爛的整理文(1),這次來更新一下;
畢竟離上次安裝也過了好一段時間,世界都變的不太一樣了。

咦,ubuntu 最新版不是 13.10 嗎,怎麼現在 13.04 ???
因為…

我的筆電還沒更新!

加入 apt 的 source list

apt-key

$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 835AB0E3

開啟軟體更新

$ software-properties-gtk 

到 Other software (其他軟體) → Add
加上 deb http://hyperrate.com/debian eliu release
再把 source code 的項目取消掉,必免更新時發生錯誤

安裝 gcin

$ sudo apt-get update
$ sudo apt-get install gcin

打開 gcin 設定

gcin-tools

外觀設定→面板狀態→Unity Indicator

切換 imput method

$ im-config

目前是 gcin version 2.8.1

安裝嘸蝦米

http://hyperrate.com/thread.php?tid=7206 下載,放到
~/.gcin//usr/share/gcin/table/

最後,重新登入即可

後記

前一陣子 gcin 跟 ubuntu 的 unity 環境配合不太起來時,有試著改用其他的輸入法
最後找到的是 (推薦)在fcitx輸入法下,(boshiamy)嘸蝦米的使用最為順暢、穩定!(新酷音、m17n、倉頡、輕鬆法亦適用)

用了一陣子覺得有那麼一些的不順手,還是回頭找 gcin

至於路上看到的 hime (http://hime-ime.github.io/) 就暫時無緣試她了~

Reference

1: ubuntu 8.10 上安裝嘸蝦米
2: Ubuntu 13.10/13.04/12.10/12.04 安裝最新的 gcin 中文輸入的完整步驟
3: http://zh.wikipedia.org/wiki/Gcin

 
about 4 years ago

BOM (byte order mark) 一個萬國碼的標記, 不會顯示在你的銀幕上, 但會讓你的程式死光光.
清掉 BOM 留給你的程式一條活路

編輯器

多數的編輯器都可以設定 編碼為 UTF-8 no BOM

vim 的設定, 可以參考 remove BOM character using vim

找出 BOM

grep

$ grep -rl $'\xEF\xBB\xBF' .

find + grep

$ find /path/to/dir/ -type f -print  -exec hd -n 3 {} \;  | grep -1 "ef bb bf"

移除 BOM

find + sed

$ find . -type f -exec sed '1s/^\xEF\xBB\xBF//' -i.bak {} \; -exec rm {}.bak \;

sed

$ sed -i '1 s/^\xef\xbb\xbf//' ./*

Referece

http://stackoverflow.com/questions/204765/elegant-way-to-search-for-utf-8-files-with-bom
PHP 判斷/移除 BOM(UTF-8)

 
about 4 years ago

dokuwiki 有不少好用的 plugin, 強化了 dokuwiki 的使用體驗

安裝 plugin

到 Admin => Manage Plugins

你可以看到 Download and install a new plugin 跟這下面有一個 URL 的輸入框

把要安裝的 plugin 網址貼上去, 按下 Download 就好了


以下整理一下非官方預設, 我目前有用到的

editx

可以方便的 搬移 或是 刪除 wiki page

markdownextra

可以塞一個 markdown 區塊進到 wiki page 中

Wrap

讓你的 wiki 可以左右分欄, 隨意的切割畫面
甚至可以放入特殊的文字方塊

Tag

塞個 tag 給 wiki

Comment

讓 wiki page 可以放入工程師又愛又悢的 註解

 
over 4 years ago

更新一下好久沒動的 dokuwiki

先前在架 dokwiki 時, 是直接用 git clone 的方式架起來的
更新的動作就用 git 來完成就可以了

更新開始

更新指令

$ git remote update -p
$ git checkout -f origin/stable

調整資料夾權限, 移除 install.php

$ sudo chown www-data:www-data conf/ data/ lib/ -R
$ rm install.php

之後找個時間吧更新一鍵化好了...

 
over 4 years ago

身為一個 vim 的愛用者, 看著自己一堆 vim 設定跟 script 亂七八糟的, 不知道如何下手.
原本自己有建立一個 git repo 做一些簡單的整理, 但是 vim plugin 五花八門, 實在不好整理

現在已經有幾套工具, 讓你整理 vim 套件輕鬆上手, 分別是 pathogen, vundle.

簡單筆記一下 pathogen, 我也只用過 pathogen...
pathogen 讓 vim plugin 可以用 bundle 的方式管理

然後配合 git submodule 指令, 簡單的安裝跟管理套件

安裝 pathogen

只要將 pathogen.vim 放到 ~/.vim/autoload/pathogen.vim 即可

或是, 照著 pathogen 的說明安裝

$ mkdir -p ~/.vim/autoload ~/.vim/bundle; \

$ curl -Sso ~/.vim/autoload/pathogen.vim \

    https://raw.github.com/tpope/vim-pathogen/master/autoload/pathogen.vim

再設定以下設定到 .vimrc

execute pathogen#infect()

上面是 pathogen 作者提供的安裝方法, 可是這樣就沒辦法用 git 去自動更新了

換用 git submodule 的方法

$ git submodule add git@github.com:tpope/vim-pathogen.git bundle/vim-pathogen/

設定 .vimrc

runtime bundle/vim-pathogen/autoload/pathogen.vim
execute pathogen#infect()

使用

這邊以 nerdtree 為例

# 安裝 nerdtree

$ git submodule add git://github.com/scrooloose/nerdtree.git bundle/nerdtree

之後要更新所有的 plugin 只要用 git submodule 的指令就可以了

$ git submodule foreach git pull origin master
$ git commit -m 'update submodule'

總結

附上 我自己的 vimrc https://github.com/nyogjtrc/vimrc

有機會再來試試 vundle

Reference

http://jameslaicreative.com/moving-up-upgrading-from-pathogen-to-vundle/
http://lepture.com/work/manage-vim/
http://lepture.com/work/vundle-vs-pathogen
http://aknow-work.blogspot.tw/2013/05/github-vundle-vim.html
http://stevelosh.com/blog/2010/09/coming-home-to-vim/

 
over 4 years ago

開始使用 logdown

http://nyo-sutdybook.logdown.com/

http://nyo-studybook.logdown.com/

囧rz