2009年12月29日 星期二

Linux 找不到 Library 解決方法

Library 安裝時以 --prefix 指定的安裝路徑若不是系統預設 Library 路徑時,可能會出現以下訊息:

error while loading shared libraries: libXXX.Y.Z: cannot open shared object file: No such file or directory


此時只需要將安裝時 --prefix 所指定之路徑加入 /etc/ld.so.conf 中,並執行以下指令即可令系統連結此路徑下的 Library:

#ldconfig -v


註:[-v] 參數會輸出連結了哪些 Library。


Linux BASH 設定

下載 bash-completion:
http://bash-completion.alioth.debian.org/

執行指令:

#./configure --prefix=/
#make install





開始設定 BASH:

/etc/bashrc 加入以下設定:
顏色代碼:30 黑, 31 紅, 32 綠, 33 黃, 34 藍, 35 紫, 36 淺藍, 37 白, 01 高亮度

alias ll='ls -alh'

declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=02;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:"

PS1="[\e[31;40m\u\e[32;40m@\h \w\e[0m]\\$ "

. /etc/bash_completion



/etc/inputrc 加入以下設定:

"\e[A": history-search-backward
"\e[B": history-search-forward





不喜歡 root 被限制複製、移動、刪除行為的話,修改 /root/.bashrc
將以下三行註解掉

#alias rm='rm -i'
#alias cp='cp -i'
#alias mv='mv -i'


CentOS 5.4 安裝 boost 1.4.1 筆記

/*編譯環境準備*/

安裝 ICU for Regex Unicode support

#yum install icu-3.6-5.11.4
#yum install libicu-devel-3.6-5.11.4
#yum install libicu-3.6-5.11.4



Export 環境變數

#export ICU_PATH=/usr
#export ICU_LINK=-L/usr/lib64
#export EXPAT_INCLUDE=/usr/include ;
#export EXPAT_LIBPATH=/usr/lib64 ;



安裝 MPI for Graph MPI support

#yum install openmpi-libs-1.3.2-2.el5
#yum install openmpi-devel-1.3.2-2.el5
#yum install openmpi-1.3.2-2.el5
#yum install mpi-selector-1.0.2-1.el5
#yum install openmpi-devel-1.3.2-2.el5



安裝 Expat for XML 需求

#yum install expat-devel-1.95.8-8.3.el5_4.2
#yum install expat-1.95.8-8.3.el5_4.2





/*開始編譯*/
解壓縮 boost,並切換至 boost 目錄。

執行指令:

#./bootstrap.sh --prefix=/usr



修改 project-config.jam:

using mpi ;



執行指令:

#./bjam install >build_log 2>&1


編譯輸出結果將會紀錄於 build_log,編譯期間可使用 tail -f build_log 觀察編譯狀態。


2009年12月17日 星期四

深深 深深 深深的無力感

深深 深深 深深的無力感
以一種存在但卻不具任何體裁的方式襲來

身體 漸漸 漸漸 漸漸的向下沉
心跳聲如遠去的救護車般發出變調的顫音

寒冬披上黑夜的霧 將熱情澆滅化為槁灰
不再 從此不再滾燙


2009年12月16日 星期三

愛有感

在你的身邊就是幸福,有你的地方就是家。


2009年11月27日 星期五

詩意的愛

Maru:
至少..我聽得到你,看得到你,你看得到我的訊息..
那麼這樣的思念,也就不是那麼地折磨了..


Firch:
而我 又怎能在你手中劃下一道撕裂的傷口
為此 我高舉起架上鏽蝕的長茅 毫不猶豫刺向自身胸膛
讓渤渤的鮮血洗滌這荒誕罪孽
以永恆包裹滌淨的心 為你任性的愛而臣服


2009年8月11日 星期二

xargs 以變數取代輸入資料

xargs -n 1 -I @ ehco @

-n 表示拿傳進來的第幾個個值
-I @ 表示將指定的值存放於 @這個變數中

Example:

#echo 'book' | xargs -n 1 -I @ echo This is a @
#This is a book


CLI 計算工具 bc 的小數點設定

使用 bc 做計算時,預設小數點位數是 0,所以每次算出來都只有整數...
此時可以用 scale=n; 來設定要計算的小數點位數,即可得到正確結果。


# echo 'scale=3; (9/11)*100' | bc


這樣會得到 81.800
因為他是保留小數點後 3位數,再乘以100...

這與我們一般預期的不太一樣,但還算可以接受。


2009年6月18日 星期四

FreeBSD 下 使用 BASH 進行多重 PipeLine 資料處理

目前看起來好像只有 Bash 可以下達多重 PipeLine 資料處理的指令。

利用 tee 與 Process Substitution 語法 >() 兜出指令。

tee >(process1) >(process2) >(process3) | process4

example:
ls -A | tee >(grep ^[.] > hidden-files) >(grep -v ^[.] > normal-files) | less


2009年6月11日 星期四

豬肉味增湯作法~超好喝喔!


  1. 大量蔬菜(洋蔥 紅蘿菠 牛蒡 等根莖類) 洗淨、切片
  2. 把蔬菜丟到裝 [冷水] 的鍋子裡 開始煮,[其他什麼都不要加]
  3. 煮15分鐘 加入[一些味增] (我都用工研味增),大約兩大陀
  4. 另外煮一鍋水,把豬肉片用 [滾水涮過],肉片變色就可以撈起來,放在旁邊備用
  5. 等到蔬菜煮軟、湯喝起來有 [蔬菜的甜味] 的時候,加入剛剛涮過的豬肉片
  6. 馬上繼續加入[味增] 直到湯夠鹹,不喜歡味增太濃的的話請加一些味增並加鹽到夠鹹
  7. 加入 [蔥末] (我喜歡加一堆!)
  8. 喝它...


2009年4月30日 星期四

PHP 將變數加入 Local Variable 的技巧

之前為了「將變數加入 Local Variable」這個議題而寫了一個 Auto Declare 的機制,結果最後在看 PHPSavant 的時候發現有這個好物,可以漂亮的完全取代之前寫的東西~

int extract ( array $var_array [, int $extract_type= EXTR_OVERWRITE [, string $prefix ]] )


2009年4月29日 星期三

PHP 無限執行時間技巧

使用 PHP 時有時會需要處理大量的資料,而資料處理的時間可能會超過 PHP 的可執行時間,此時可以使用以下的技巧避開 PHP 的執行時間限制:

set_time_limit(0); //設定 PHP 執行時間無限制
session_write_close(); //若有使用 session 的話立即寫回並停止,以避免其他使用到 session 的頁面被 Block


測試環境: Apache 2.2 + PHP 5.2.9


2009年3月22日 星期日

使用 Xdebug + Vim 對 PHP 逐行除錯

[Vim]
檢查 python 與 sign 前面是否為 + 號

# vim
:version


若為 - 號的話,就需要重裝 Vim

# /usr/ports/editors/vim/make WITH_PYTHON=yes install clean


接下來要安裝 Xdebug Client 在 Vim 上。
下載:http://www.vim.org/scripts/script.php?script_id=1929

解開後將 debugger.py 與 debugger.vim 複製到 /usr/local/share/vim/vim72/plugin/

PS.後來發現有人放出改過得 debugger.py,解決了原版只等待 5 秒的問題,並修改了一些切割視窗的配置。

文章在此:
http://www.workingsoftware.com.au/index.php?h=WebLog&author_id=11&entry_id=1
下在位址在此:
http://www.workingsoftware.com.au/debugger.py





[Xdebug]
安裝 Xdebug for PHP

# cd /usr/ports/devel/php-xdebug
# make install clean


修改 php.ini,加入 Xdebug 設定

# vim /usr/local/etc/php.ini


找到 Module Settings,在下面加入:

zend_extension=/usr/local/lib/php/20060613/xdebug.so

[debug]
; Remote settings
xdebug.remote_autostart=off
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000

; General
xdebug.auto_trace=off
xdebug.collect_includes=on
xdebug.collect_params=off
xdebug.collect_return=off
xdebug.default_enable=on
xdebug.extended_info=1
xdebug.manual_url=http://www.php.net
xdebug.show_local_vars=0
xdebug.show_mem_delta=0
xdebug.max_nesting_level=100
;xdebug.idekey=

; Trace options
xdebug.trace_format=0
xdebug.trace_output_dir=/tmp
xdebug.trace_options=0
xdebug.trace_output_name=crc32

; Profiling
xdebug.profiler_append=0
xdebug.profiler_enable=0
xdebug.profiler_enable_trigger=0
xdebug.profiler_output_dir=/tmp
xdebug.profiler_output_name=crc32


重開 apache,並檢查 phpinfo 中有 Xdebug 資訊即為安裝成功。






[使用方法]

從瀏覽器啟動 Debug:

在你的網站上隨便開一個 PHP 網址,並在後面加上 ?XDEBUG_SESSION_START=1 參數,這樣就會啟動 Xdebug。

接下來用 Vim 開啟你要 Debug 的 PHP 檔,開啟後按下 F5。
這時候 Vim 畫面下方會出現一行字:
waiting for a new connection on port 9000 for 5 seconds

看到這行字後請在 5 秒鍾內用覽器開啟你正在編輯的這個 PHP 網頁,這樣 Vim 就會進入 Debug 模式了。




從 Command Line(CLI) 啟動 Debug:


# setenv "XDEBUG_CONFIG=vim=1"

打開 Vim,按下 F5。

# php -f debug_target.php

再回到 Vim 裡面去看,Debug 就已經啟動了!





如果要 Debug 用 system 開出來的 CLI PHP,則需要在 system 之前用 putenv 來設定環境變數

putenv("XDEBUG_CONFIG=vim=1");
system("php -f debug_target.php");




使用 Vim 進行 Debug 時會出現很多 畫面切割的小視窗,要其中移動必須按下 Ctrl + w,之後再按 上下左右,進行視窗的切換。

要改變視窗的大小則是按 Ctrl + w,之後再按 + 是變大,而 - 則是變小,按 = 則是回到預設值。最後按 F1 就會把目前視窗放到最大。

為瞭解決因為 Vim 共用 temp 檔而開啟多個 Vim 進行 debug 時每次都會說 暫存檔已經存在,只需要在 Vim 中下這個指令,並將每個 Vim 的 dir 都設成不一樣就可以了。

:set dir=/tmp



參考資料:
我同事 JohnPuPu的 Blog:http://blog.johnpupu.tw/?p=208


2009年3月11日 星期三

SU 與 SUDO 權限設定

[SU]
設定可以使用 su 的群組,之後把要用的人加入群組中。

# vim /etc/pam.d/su
設定可以使用 su 的群組
auth requisite pam_group.so no_warn group=wheel

把使用者加入群組中
# vim /etc/group

wheel:*:0:root,使用者帳號



[SUDO]
跟 SU 一樣設定可以使用的群組,之後把要用的人加入群組中。

# vim /usr/local/etc/sudoers

拿掉此行的註解
%wheel ALL=(ALL) ALL


把使用者加入群組中
# vim /etc/group

wheel:*:0:root,使用者帳號


CSH 與 VIM 環境設定

[CSH]
到 /etc/passwd 確認自己的 SHELL 是用 csh


修改
/etc/csh.cshrc (影響所有使用者) 或 ~/.cshrc (影響自己)


加入以下設定,完成後重新登入即生效:

# $FreeBSD: src/etc/csh.cshrc,v 1.3.52.1 2008/11/25 02:59:29 kensmith Exp $
#
# System-wide .cshrc file for csh(1).

set prompt = '[%B%n@%M%b] %B%~%b%#'
# color
setenv LSCOLORS ExGxFxdxCxegedabagExEx
setenv CLICOLOR yes
# autolist
set autolist

# bind keypad keys for console, vt100, vt102, xterm
bindkey "\e[1~" beginning-of-line # Home
bindkey "\e[2~" overwrite-mode # Ins
bindkey "\e[3~" delete-char # Delete
bindkey "\e[4~" end-of-line # End

# UTF8
setenv LC_ALL en_US.UTF-8
setenv LANG en_US.UTF-8




[VIM]
修改
~/.vimrc


加入以下設定,完成後重開 VIM 即生效:


syntax on
" 256 color
set t_Co=256
map tn :tabnext
map tp :tabprev
map to :tabnew
map tc :tabclose
nmap L
nmap H
set history=200
set ai
set ruler
set cin
set dir=/tmp
set hls
set ch=2
"set softtabstop=4
"set shiftwidth=4
set tabstop=4 shiftwidth=4 softtabstop=0
set ignorecase
"set expandtab
set bs=2 " allow backspacing over everything in insert mode
set ts=2
set ff=unix
set nobk
"set fileencodings=utf-8,big5,gbk,sjis,euc-jp,euc-kr,utf-bom,iso8859-1
"set encoding=utf-8
"set termencoding=utf-8
set encoding=utf-8
set fileencoding=utf-8
set fileencodings=utf-8,big5,euc-jp,gbk,euc-kr,utf-bom,iso8859-1
set termencoding=utf-8
set ambiwidth=double
"set =^U
"set =^B
"map :set enc=utf-8 :set termencoding=utf-8 :set fileencoding=utf-8
"map :set enc=big5 :set termencoding=big5 :set fileencoding=big5
set guifontset=-sgi-screen-medium-r-normal-*-14-*-*-*-*-*-iso8859-1,-*-mingliu-medium-r-normal-*-14-*-*-*-c-*-big5-0

hi clear
set background=dark
if exists("syntax_on")
syntax reset
endif
let g:colors_name = "koehler"
hi Normal guifg=white guibg=black
hi Scrollbar guifg=darkcyan guibg=cyan
hi Menu guifg=black guibg=cyan
hi SpecialKey term=bold cterm=bold ctermfg=darkred guifg=Blue
hi NonText term=bold cterm=bold ctermfg=darkred gui=bold guifg=Blue
hi Directory term=bold cterm=bold ctermfg=brown guifg=Blue
hi ErrorMsg term=standout cterm=bold ctermfg=grey ctermbg=blue guifg=White guibg=Red
hi Search term=reverse ctermfg=white ctermbg=red guifg=white guibg=Red
hi MoreMsg term=bold cterm=bold ctermfg=darkgreen gui=bold guifg=SeaGreen
hi ModeMsg term=bold cterm=bold gui=bold guifg=White guibg=Blue
hi LineNr term=underline cterm=bold ctermfg=darkcyan guifg=Yellow
hi Question term=standout cterm=bold ctermfg=darkgreen gui=bold guifg=Green
hi StatusLine term=bold,reverse cterm=bold ctermfg=lightblue ctermbg=white gui=bold guifg=blue guibg=white
hi StatusLineNC term=reverse ctermfg=white ctermbg=lightblue guifg=white guibg=blue
hi Title term=bold cterm=bold ctermfg=darkmagenta gui=bold guifg=Magenta
hi Visual term=reverse cterm=reverse gui=reverse
hi WarningMsg term=standout cterm=bold ctermfg=darkblue guifg=Red
hi Cursor guifg=bg guibg=Green
hi Comment term=bold cterm=bold ctermfg=cyan guifg=#80a0ff
hi Constant term=underline cterm=bold ctermfg=magenta guifg=#ffa0a0
hi Special term=bold cterm=bold ctermfg=red guifg=Orange
hi Identifier term=underline ctermfg=brown guifg=#40ffff
hi Statement term=bold cterm=bold ctermfg=yellow gui=bold guifg=#ffff60
hi PreProc term=underline ctermfg=darkblue guifg=#ff80ff
hi Type term=underline cterm=bold ctermfg=lightgreen gui=bold guifg=#60ff60
hi Error term=reverse ctermfg=darkcyan ctermbg=black guifg=Red guibg=Black
hi Todo term=standout ctermfg=black ctermbg=darkcyan guifg=Blue guibg=Yellow
hi link IncSearch Visual
hi link String Constant
hi link Character Constant
hi link Number Constant
hi link Boolean Constant
hi link Float Number
hi link Function Identifier
hi link Conditional Statement
hi link Repeat Statement
hi link Label Statement
hi link Operator Statement
hi link Keyword Statement
hi link Exception Statement
hi link Include PreProc
hi link Define PreProc
hi link Macro PreProc
hi link PreCondit PreProc
hi link StorageClass Type
hi link Structure Typedd
hi link Typedef Type
hi link Tag Special
hi link SpecialChar Special
hi link Delimiter Special
hi link SpecialComment Special
hi link Debug Special
" Hilight for tabline
hi TabLine guifg=#90fff0 guibg=#2050d0 ctermfg=black ctermbg=white
hi TabLineSel guifg=#90fff0 guibg=#2050d0 ctermfg=white ctermbg=LightMagenta
"set cursorline
"hi cursorline cterm=none ctermbg=gray
""------Restore cursor to file position in VIM
set viminfo='10,\"100,:20,%,n~/.viminfo
au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif

"設定副檔名為 XXX 時,為什麼檔案
au BufNewFile,BufRead *.tpl :set ft=php " all my .tpl files ARE html
au BufNewFile,BufRead *.ini :set ft=php " all my .tpl files ARE html
au BufNewFile,BufRead *.phtml :set ft=php " all my .tpl files ARE html
au BufNewFile,BufRead *.php :set ft=php " all my .tpl files ARE html

au FileType javascript so ~/.vim/indent/javascript.vim

"for textmate, plugin
filetype on
filetype plugin on
filetype indent on
"change gf buffer open to tabedit
nmap gf :tabedit

"Folding
set foldenable

"Highlight SQL syntax in string
let php_sql_query=1
"Highlight HTML in string
let php_htmlInStrings=1
"Folding for classes & functions
"let php_folding=1
nnoremap @=((foldclosed(line('.')) < 0) ? 'zc' :'zo')

" for omni
set completeopt=longest,menu
"set completeopt=menu,menuone
imap
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
" Omni補完関連
" $VIMRUNTIME/autoload/htmlcomplete.vimの645行目をコメントアウントしておくとhtmlの補完が小文字になる

" TabでOmni補完及びポップアップメニューの選択
function InsertTabWrapper(is_shift)
if pumvisible()
return a:is_shift ? "\" : "\"
endif
let col = col('.') - 1
if !col || getline('.')[col - 1] !~ '\k\|<\|/' " htmlで補完できるように<,/でもOmni補完
return "\"
elseif exists('&omnifunc') && &omnifunc == ''
return a:is_shift ? "\" : "\"
else
return "\\"
endif
endfunction
inoremap =InsertTabWrapper(0)
" Shift-Tabはうまくいかないようだ
" inoremap =InsertTabWrapper(1)

" CRでOmni確定&改行
function InsertCrWrapper()
return pumvisible() ? "\\" : "\"
endfunction
inoremap =InsertCrWrapper()
"colorscheme yzlin256
"colorscheme zenburn



參考資料:
我同事 JohnPuPu 的設定檔


資料夾 與 MySQL 之備份/還原

[資料夾]
連同資料夾權限一起備份,還原時才不會有問題。


備份:
# tar pzcf 備份檔案.tar.gz 欲備份資料夾

還原:
# tar pzxvf 備份檔案.tar.gz




[MySQL]
這是 MySQL 正規的作法,比用 phpMyAdmin 匯出再匯入遇到的問題會少一些。


備份:
# mysqldump --user=root -p 資料庫名稱 > 備份檔案


還原:
# mysql -u root -p
mysql> create database 資料庫名稱;
mysql> quit

# mysql -u 使用者 -p 資料庫名稱 < 備份檔案


2009年2月4日 星期三

SugarCRM 安裝筆記

環境:
FreeBSD 7.1-RELEASE
Apache 2.2
PHP 5.2.8
MySQL 5.0.67
SugarCRM CE 5.2.0a

設定:
為了避免 chmod 權限錯誤,直接將 SugarCRM 的 根目錄設定擁有者為 Apache 預設使用者。

chown -R www:www SugarCRM_Path


2009年1月21日 星期三

FreeBSD 下安裝 Apache2.2 + PHP 5.2 + MySQL 5.0

[MySQL 5.0 with InnoDB & UTF-8]

# cd /usr/ports/databases/mysql50-server
# make WITH_CHARSET=utf8 WITH_XCHARSET=all WITH_COLLATION=utf8_unicode_ci BUILD_OPTIMIZED=yes BUILD_STATIC=yes --with-plugins=innobase install clean


安裝好之後,我們要產生 MySQL 一開始所要用的 Database,預設會裝在 /var/db/mysql 裡 ( 若不想裝在預設的地方,安裝時下參數 --localstatedir=/path/to/your/location )

# rehash
# mysql_install_db


複製 MySQL 的系統設定檔到 /etc 下,這裡使用的是 InnoDB 設定檔,需記得修改 INNODB 相關設定值

# cp /usr/local/share/mysql/my-innodb-heavy-4G.cnf /etc/my.cnf


或者做最簡單設定

# vi /etc/my.cnf


寫入以下設定:

[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8
default-collation=utf8_unicode_ci
default_table_type = innodb


設定 MySQL 資料庫權限,並且啟動它

# chown -R mysql:mysql /var/db/mysql
# mysqld_safe &


啟動無誤的話,畫面會出現此訊息

Starting mysqld daemon with databases from /var/db/mysql


確認是否正常執行中

# ps -aux | grep mysql
mysql 53989 0.0 13.3 66404 16868 p0 IN 10:17PM 0:00.62 /usr/local/libexec/mys
mysql 53990 0.0 13.3 66404 16868 p0 SN 10:17PM 0:00.00 /usr/local/libexec/mys
mysql 53991 0.0 13.3 66404 16868 p0 IN 10:17PM 0:00.00 /usr/local/libexec/mys


設定 MySQL Root 的密碼

# mysqladmin -u root password 新密碼


增加新使用者

# mysql -u root -p
# GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON 資料庫.* TO '帳號'@'localhost' IDENTIFIED BY '密碼';
# FLUSH PRIVILEGES;




[Apache2.2]

# cd /usr/ports/www/apache22
# make install clean
在此可選擇所需要的模組,完成後自動繼續進行編譯





[PHP 5.2]

# cd /usr/ports/lang/php5
# make config install clean
在此可選擇所需要的模組,完成後自動繼續進行編譯


記得要勾選此選項,不然 Apache 會不認得 PHP

APACHE Build Apache module


再安裝 PHP Extensions

# cd /usr/ports/lang/php5-extensions
# make config install clean
在此可選擇所需要的模組,完成後自動繼續進行編譯



[Configure]
首先設定 PHP 的設定檔,以後就是設定 php.ini 這檔

# cp /usr/local/etc/php.ini-dist php.ini


修改 Apache 的設定

# vi /usr/local/etc/apache22/httpd.conf

在最上面加入
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

找到
DirectoryIndex index.html
把它變成
DirectoryIndex index.php index.html index.htm


設定一開機啟動 Apache & MySQL

# vi /etc/rc.conf

加入這三行
apache22_enable="YES"
apache22_http_accept_enable="YES"
mysql_enable="YES"


啟用服務

/usr/local/etc/rc.d/apache22 start
/usr/local/etc/rc.d/mysql-server start


參考來源:
http://www.centerbbs.com/redirect.php?tid=24380&goto=lastpost
http://forum.shareget.com/t115314/