ㄚ凱隨手紀 | 我就是在碎碎念~

七月/10

25

活動贈品-世界杯國家隊球衣

金年 6/11 到 7/12 為 2010 世界杯足球賽的比賽期間..
而最後的四場比賽有3D播出!!!
不過要抽. 小弟我熱愛足球, 所以當然有去參加抽獎…

不過很可惜沒有抽到, 不過還算運氣好, 抽到了其他獎品..
2010 世界杯國家隊球衣..

前幾天寄到了, 小弟抽到的是上屆世界冠軍, 本屆提早出局的法國隊球衣~…



活動是由 愛爾達電視 舉辦的…


是 Adidas 的唷!!


展開圖


法國隊的徽章, 上面一顆星代表得到一次世界冠軍.


衣領後面繡得…

不過最大的問題是…. 這件衣服是 S 號的阿..Orz..

No tags

六月/10

8

MyDNS-ng for ubuntu 10.04

前一篇講得 ISPConfig 3 還少一個部份, 就是 DNS Server 的功能…

MyDNS Picture

MyDNS


由於 ISPConfig 的所有設定都放在 mysql 裡面,當然也包含像是ftp 帳號密碼… 所以會用 pure-ftpd-mysql …

那 dns 也是一樣, 採用的是 mydns-ng 這套 dns 軟體來管理…

顧名思義,MyDNS-ng 就是用 MySQL 當 Backend 的 Dns Server …

==安裝==

在 Ubuntu 的Repo裡面似乎是沒有 MyDNS… 至少我用 apt-cache search mydns 是找不到的…

既然如此.就只好下載相關的套件自己編譯囉…

首先先確定系統有安裝 build-essential 跟 libmysqlclient-dev 沒有的話請 apt-get install 安裝一下囉!~…

接著跑下面的 script …

cd /tmp
wget http://heanet.dl.sourceforge.net/sourceforge/mydns-ng/mydns-1.2.8.27.tar.gz
tar xvfz mydns-1.2.8.27.tar.gz
cd mydns-1.2.8
./configure
make
make install

安裝完成後, 可以用mydns -c /etc/mydns.conf -b 啟動在背景….
而設定檔 mydns.conf 則已經由 ispconfig 在 /etc/ 產生了…

接著就可以用 ispconfig 的後台進行管理 dns 的動作囉…

No tags

六月/10

7

ISPConfig 3 For Ubuntu 10.04

ISPConfig

ISPConfig

對一個公司的小系統工程師來說, 沒事就要設定Apache Virtual Host 給不同的專案用

還要設定 MySQL 的權限跟環境

加上公司內部的開發用的機器,各個開發人員都會想要自己有個空間可以上傳測試等等

天天日日夜夜都在改apache Vhost.conf phpMyAdmin 設定權限, 是個很討厭的事情

有時候會想..要是公司去買個 Cpanel 的話.工作就會輕鬆多了

因為Cpanel有完整的使用者管理,可以開不同的虛擬主機給不同的人甚至可以看到各個的流量多方便阿不過美中不足的地方就是..要錢要錢要錢要錢而且還不便宜

多方尋找之後, 找到了這個 ISPConfig…

一套 OpenSource 的虛擬主機管理後台!…

ISPConfig 可以幹麼?.. 可以用一個管理員帳號, 線上開啟新的使用者帳號,這個帳號會包含一個完整 Web Site.. 可以自己開設子 FTP Account, 可以設定自己的 Email Account(不過我沒用…)… 可以設定磁碟容量限制, 可以個別得到網站的流量

而這些..基本上都可以直接在網站後台進行線上的管理

不過之前找到的安裝文件都有演複雜.. 直到找到了一篇專門介紹 Ubuntu 10.04 安裝 ISPConfig 3 的文章後, 就豁然開朗!…

至於怎麼安裝呢..請看下去吧!!!

==首先你要有個安裝好的 Ubuntu 10.04==

安裝就..光碟放下去, or iso 檔掛上去.然後開始安裝..記得安裝最小安裝..最多多裝個ssh就好了

然後記得 apt-get update, apt-get upgrade 把系統更新為最新的狀態..

==安裝基本 Mail 相關, 資料庫MySQL.==

這裡包含了email 系統(使用 postfix), 安裝MySQL資料庫(不管是給使用者還是ISPConfig要用的)…以及很多東西,像是 pop3, sasl

apt-get install postfix postfix-mysql postfix-doc mysql-client mysql-server courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl maildrop getmail4 binutils

==安裝擋垃圾信==

既然裝了 mail server 不能不裝一下擋垃圾信的… amabisd-new + SpamAssassin 是一定要得!~.

apt-get install amavisd-new spamassassin zoo unzip bzip2 arj nomarch lzop cabextract apt-listchanges libnet-ldap-perl libauthen-sasl-perl clamav-docs daemon libio-string-perl libio-socket-ssl-perl libnet-ident-perl zip libnet-dns-perl

==安裝 Aapche2 , php 相關 (我這裡多加了 php-apc)==

虛擬主機這裡用的是 apache2 , 自己的主機有個好處就是… php 可以自己裝自己覺的要得東西
像是這裡我就多裝了 php-apc 來加速….

apt-get install apache2 apache2.2-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-gd php5-mysql php5-imap phpmyadmin php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt php5-imagick imagemagick libapache2-mod-suphp php-apc

對了.. 安裝完成後計的要跑一下 a2enmob 把一些模組打開喔!

a2enmod suexec rewrite ssl actions include

==安裝 pure-ftpd (Linode那份文件沒有寫到這個..T_T..我找半天…)==

記得一定要裝一下pure-ftpd (不要問我為什麼不裝 proftpd, 沒有預設好的 proftpd-mysql 設定檔, 你有的話記得給我…),不然怎麼讓使用者使用 ftp 上傳檔案呢?…

apt-get install pure-ftpd-common pure-ftpd-mysql

echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone

==安裝虛擬主機 log 分析==

安裝 vlogger . 另外還有webalizer 來讓使用者可以分析網站流量.

apt-get install vlogger webalizer

==安裝看門狗不要讓人家來敲門==

這個..你不會想要別人來你的主機測試 ssh 密碼的

apt-get install fail2ban

==安裝 ISPConfig 3 (全自動安裝,裝完就好了….)==

這段是重點, 也就是裝 ISPConfig 的步驟..
不過真的超簡單..只要跑完 install基本上就會把該設定的都設定好,然後相關的設定也都會拷貝到相對應的位置

中間會問你關於 mysql root 帳號密碼, 然後還會要你輸入 ispconfig mysql 帳號密碼

cd /tmp

wget http://downloads.sourceforge.net/ispconfig/ISPConfig-3.0.1.6.tar.gz?use_mirror=

tar -xvf ISPConfig-3.0.1.6.tar.gz

cd ispconfig3_install

cd install

php -q install.php

==重新啟動 apache 就好了!!!!==

廢話不多說,重新啟動 apache !!!

/etc/init.d/apache2 restart

http://192.168.1.100:8080/

參考網址

http://library.linode.com/web-applications/control-panels/ispconfig/ubuntu-10.04-lucid

ISPConfig3

No tags

六月/10

2

Ubuntu 10.04 安裝 Redmine

Redmine 是一套 Rails 寫得專案管理工具.
之前一直都是用 trac 來管理, 雖然說很好用, 但是現在因為很多原因, 所以會有的專案用 git 阿或是其他的版本管理.

而且 trac 基本上每個專案得準備一套 trac 的程式. 在安裝設定上, 著實會有一些討厭…
畢竟不是常常都會建立新的專案管理頁面, 但是久久來一次就會要重新想一次要怎麼作…
更討厭的是.. 當有更新的時候, 一個 trac 還好, 10 個就要更新很多個了..T_T..

Redmine 則可以在一套 Redmine 裡面建立多個不同的軟體專案.
且每個 專案還可以有子專案..
更好的是可以支援多種不同的版本管理系統,像是目前很火紅的 Git , 或是很多人用很久的 svn 等都可以…
svn , git 還支援遠端的 repos …

不過之前要裝 Redmine 總是很麻煩… 要裝一堆環境, 要弄 apache 之類的…
我之前在一台舊得 trac 主機, 跑 debian 的上面怎麼裝就是會有套件有問題..

這次火大直接找一台 virtualbox 跑 ubuntu 10.04 來安裝看看…沒想到異常的簡單阿!!!

===如何安裝 Redmine 在 ubuntu 10.04 上===
首先,你要先裝好一個 ubuntu 10.04 …
我個人安裝好的只有 openssh server 有安裝進去而已…

接著執行
sudo apt-get install redmine git-core subversion

因為 ubuntu 10.04 的套件庫已經有 redmine 了..所以就不從 redmine 上下載安裝了..:) ..
跑完了 apt-get install 後.. 理論上已經安裝好囉!…不過還有一些像是 apache 跟 rails 要跑一下…
安裝過程中會跟詢問你要用 mysql, postgresql, sqlite 來作為 redmine 的資料庫..
個人偷懶, 這台不想多跑其他的東西, 只要先跑起來讓我可以測試就好了… 所以我選擇 sqlite …

===先讓 redmine 跑起來===
執行這行指令…
sudo ruby /usr/share/redmine/script/server -e production &

這時候若是去連 http://localhost:3000/ 就會看到 redmine 了…

===讓apache作前端===
要改一下一些東西…
首先去建立靜態檔案的連結
sudo ln -s /usr/share/redmine/public/ /var/www/redmine
然後修改 apache2 的設定檔
sudo vim /etc/apache2/site-enabled/000-default

增加下面兩個東西進去…
+ RailsEnv production
+ RailsBaseURI /redmine

接著
sudo /etc/init.d/apache2 reload

應該就可以在 http://localhost/redmine 看到 redmine 囉…

而預設有 admin 這個管理員帳號, 密碼也是 admin 別忘了登入去修改喔!!!

·

五月/10

10

FirePHP for CakePHP 安裝

FireBug, 是一個 Firefox 上面非常方便的網頁除錯工具….
FirePHP, 是 FireBug 的一個擴充, 可以讓 FireBug 處理 FirePHPCore librar 輸出的錯誤訊息…

有什麼好處?..
當用 FirePHP 後.. PHP 運行時候產生的錯誤訊息就不會直接輸出到畫面上影響畫面…
而可以在 FireBug Console 裡面才看到錯誤訊息或是 Debug 訊息…

在 CakePHP 怎麼裝呢?…
可以參考這篇文章..

http://bakery.cakephp.org/articles/view/debugging-with-firephp

基本上流程如下:
首先下載 FirePHPCore Library http://www.firephp.org/HQ/Install.htm
下載解開後, 把 FirePHP.class.php 拷貝到 APP/vendors/FirePHP

接著把 http://bakery.cakephp.org/articles/view/debugging-with-firephp 裡面的 FirePHP.deubgger.php 下載存在 APP/vendors/FirePHP 裡.

最後調整 APP/config/bootstrap.php ..
增加一行
App::import(‘Vendor’, ‘FirePHPDebugger’, array(‘file’ => ‘FirePHP’ . DS . ‘FireP
HP.debugger.php’));

這樣就好了…

以後 CakePHP 運行時候產生的錯誤訊息就會經由 FirePHP 輸出, 而不會直接輸出在畫面上囉!!!..

另外, 可以在任何一個地方使用 fb(‘Debug Message’); 來輸出除錯訊息到 FirePHP …

四月/10

23

PEAR 的 System_Daemon..

前天因為Jaceju有個要產生子程序的需求在噗浪上發問…
線上的神人們無不貢獻自己所知道的東西出來…

小弟也把之前在PEAR上看到的 System_Daemon 抓出來實做一下….

一般PHP工程師習慣都是寫 Web App 的部份, 而這篇主要講的是寫 Cli 的程式, 而且是要把程式寫成 Daemon …
而什麼是 Daemon 呢?.. 直接翻譯叫做守護神… 簡單的講, 就是在背景運作的程式…

通常要讓程式在背景運作的話, Unix 系統上有幾個作法, 像是常見的 nohup , 或是 執行命令的時候最後面加上 & ….
或是直接在執行的過程中按下 ctrl+z , 然後打 bg (background 的意思) 讓剛剛那個被暫停的程序在背景跑….

這時候應該就會有人想到了…. 那有沒有可能像是 apache, mysql 那些程式… 指令打完, 就會回到命令列, 而程式本身已經在系統裡面運行了呢?…

通常你會需要學習一些 process 管理的程式, 像是要去研讀 php manual 中的 pcntl 這個章節的內容…
了解如何讓程序複製自己一份來運作…
這過程不外乎要使用到 pcntl_fork, pcntl_wait, pcntl_waitpid 等函式…

不過當開始撰寫一個 Daemon 的時候就會遇到一些小問題..像是重複執行的問題?… 是否要有紀錄檔?. 紀錄檔要放哪?..命名?…

而在 PEAR 中的 System_Daemon 主要就是幫助我們設定 Daemon 的環境, 定義你的程序運作名稱, 把訊息寫入 Log 檔案..
而最重要的就是有一個標準架構可以讓開發人員快速的把一個寫好的 php script 變成可以背景運行的 Daemon …

假設我們現在有個需求, 每隔 10 秒要去檢查一下 /tmp/darkhero.txt 這個檔案是否存在, 存在的話.就把這個檔案的 md5 寫入 /tmp/darkhero_md5.txt

以前的話可以寫一個 script 讓然後用 nohup check.php & 的方式去跑…
而現在可以寫成 daemon 的方式…

首先我們要先用 pear 安裝一下 System_Daemon ..
不過由於 System_Daemon 目前還不是 Stable 的版本, 所以要用 pear install -f System_Daemon 才能安裝喔!!..

pear install -f System_Daemon

我們拿 System_Daemon 的範例來改一下…

#!/usr/bin/php -q
/**
* System_Daemon Example Code
*
* If you run this code successfully, a daemon will be spawned
* and stopped directly. You should find a log enty in
* /var/log/simple.log
*
*/

// Make it possible to test in source directory
// This is for PEAR developers only
// ini_set('include_path', ini_get('include_path').':..');

// Include Class
// 引入 System_Daemon , 請確認有在 pear 路徑中.
error_reporting(E_ALL);
require_once "System/Daemon.php";

// Bare minimum setup
// 設定基本環境變數
System_Daemon::setOption("appName", "check_daemon");
System_Daemon::setOption("authorEmail", "kyle@ugadigital.com");

// System_Daemon::setOption("appDir", dirname(__FILE__));
System_Daemon::log(System_Daemon::LOG_INFO, "Daemon not yet started so "."this will be written on-screen");

// Spawn Deamon!
// 開始產生為 Daemon 的部份
System_Daemon::start();

// 寫入紀錄.
// System_Daemon::getOption(); 可以取得一些定義好的環境.
// 像是 System_Daemon::getOption("logLocation") 可以取得 log 的位置跟名稱.
System_Daemon::log(System_Daemon::LOG_INFO, "Daemon: '".
System_Daemon::getOption("appName").
"' spawned! This will be written to ".
System_Daemon::getOption("logLocation"));

// Your normal PHP code goes here. Only the code will run in the background
// so you can close your terminal session, and the application will
// still run.
// 接著把你要放在背景一直跑得程式碼寫在這裡... 就會在背景一直跑....
if(!file_exists('/tmp/darkhero_md5.txt'))
touch('/tmp/darkhero_md5.txt');
while(1){
if(file_exists('/tmp/darkhero.txt') and md5_file('/tmp/darkhero.txt') != file_get_contents('/tmp/darkhero_md5.txt')){
System_Daemon::log(System_Daemon::LOG_INFO, "發現檔案內容變動, 更新 md5!!!");
$md5_string = md5_file('/tmp/darkhero.txt');
file_put_contents('/tmp/darkhero_md5.txt',$md5_string);
}
usleep(100);
}

System_Daemon::stop();
?>

接著要讓這個 php 可以跑…

chmod +x check.php

因為寫入 /var/log 相關需要有 root 的權限..所以我們用 sudo 去跑..

sudo ./check.php

接著你會發線畫面上有一些訊息, 跑玩就什麼都沒有了?…

sudo ./check.php
[Apr 23 13:09:58] info: Daemon not yet started so this will be written on-screen
[Apr 23 13:09:58] notice: Starting check_daemon daemon, output in: '/var/log/check_daemon.log'

事實上這個時候, check.php 已經變成 daemon 在背景運作囉…

這時候要是你想再跑一次.就會有錯誤喔…
sudo ./check.php
[Apr 23 13:12:27] info: Daemon not yet started so this will be written on-screen
[Apr 23 13:12:27] notice: Starting check_daemon daemon, output in: '/var/log/check_daemon.log'
[Apr 23 13:12:27] emerg: check_daemon daemon is still running. Exiting [l:1250]
[Apr 23 13:12:27] info: Process was not daemonized yet, just halting current process

為什麼呢?…因為 System_Daemon 已經在 /var/run/check_daemon/ 產生了 check_daemon.pid 來確保 daemon 只會有一個在背景…

另外同時可以看到 System_Daemon 在 /var/log/ 建立了一個以 appName 為名的 log 檔..

tail -f /var/log/check_daemon.log
[Apr 23 13:12:10] info: Changed identify to 'root':'root'
[Apr 23 13:12:10] info: Daemon: 'check_daemon' spawned! This will be written to /var/log/check_daemon.log
[Apr 23 13:12:11] info: Daemon not yet started so this will be written on-screen
[Apr 23 13:12:11] notice: Starting check_daemon daemon, output in: '/var/log/check_daemon.log'
[Apr 23 13:12:11] emerg: check_daemon daemon is still running. Exiting [l:1250]
[Apr 23 13:12:11] info: Process was not daemonized yet, just halting current process
[Apr 23 13:12:27] info: Daemon not yet started so this will be written on-screen
[Apr 23 13:12:27] notice: Starting check_daemon daemon, output in: '/var/log/check_daemon.log'
[Apr 23 13:12:27] emerg: check_daemon daemon is still running. Exiting [l:1250]
[Apr 23 13:12:27] info: Process was not daemonized yet, just halting current process

這時候我們來試試看程式是不是有在背景乖乖運作呢…
我用 echo "asdfasdfadsf" > /tmp/darkhero.txt 來更新 /tmp/darkhero.txt 的同時 也用 tail -f 監看 /var/log/check_daemon.log

就在我一更動 /tmp/darkhero.txt 的同時. log 檔也出現了這一個新的訊息..

[Apr 23 13:16:07] info: 發現檔案內容變動, 更新 md5!!!

這時候再去看一下 /tmp/darkhero_md5.txt 就會發現已經被更新囉….

之後若是要停止 check.php 的話..可以用 sudo killall -9 check.php 來停止在背景運作的 check.php 喔….

No tags

三月/10

26

金泰的無敵蓋飯!

今天跟同事去吃了金泰食品的日本料理…

廢話不多說..看圖吧!!!

這是同事吃得…鮭魚卵蓋飯…

No tags

這個週末要去台中講得主題…
2010/03/06 SA@Taichung How To Build a Scalable Web Site

台中的 SA 好不容易又在錢錢的手上重生… 所以當然要義務的去幫忙講一場..
因為一直以來都是講 PHP/MySQL 程式設計, CakePHP 等主題…
剛好又看到 XDite 大大二月底寫了一系列

Scaling Rails Site:Reading Material

所以想說這次就換個口味,講比較進階的東西…

XDite 寫得那一系列看完後…
真是非常非常的棒阿!!…不管有沒有用 Rails 的朋友,只要有寫 Web 程式的話都應該去看看,很多都是觀念。
觀念對了,接著就是看用哪個程式語言去實做或是最佳化了~…
Rails 真的是非常先進的一個 Framework , 目前看起來 PHP 的各個 Framework 都還有好大一段要追趕的…

有興趣的朋友可以當天一起來聊聊唷.. :) ..

SA@Taichung How To Build a Scalable Web Site
時間
2010-03-06 (週六) 上午10點 – 2010-03-06 (週六) 下午12:30

20100306T100000/20100306T123000

地點
地圖
默契咖啡(台中市中港路二段60-3號)

檢視較大的地圖
主題:How To Build a Scalable Web Site

簡介:
小網站變成大網站會遇到哪些問題?
網站程式設計師怎麼規劃
架構出一個可以擴展的網站架構?

時間:
2010 年 03 月 06 日 (星期六)
上午 10:00 ~ 12:30
時間規劃: 2.5 hr

講師簡介:
DarkHero 丫凱
酷學園團隊熱血苦力
更多關於講師:iThome Online: CakePHP專家的生活誌——丫凱隨手紀

地點:
默契咖啡(台中市中港路二段60-3號)

費用:
由於租借店家營業場地,參加的學員需要於店內消費
店家沒有低消金額限制,故每人請點一杯飲品,餐點則依個人需要加點
詳情請見 http://j.mp/b7UAg6

活動報名網址:

http://www.study-area.org/samc/registry/add/37

No tags

二月/10

9

Nexus One 缺點.

IMAG0689
Nexus One 的好跟強大不用說太多,就是速度快,效果炫…但是缺點呢?….

1. 這是大家都知道的, 效能好就會耗電. 電力消耗比想像中大一些..

2. 通訊錄整合facebook, 竟然是採用名稱相同合併的方式. 且 facebook 匯入的聯絡人無法編輯姓名,意思就是,你一定要改自己的聯絡人姓名跟對方facebook上相同的名字才會自動合併…不能手動合併…
說真的這不知道該怎麼說… 只能說想到這樣合併方式的人真是智障, 很多人會在手機上把好朋友用外號寫聯絡人名稱,把男女朋友用老公老婆,親愛的XX來稱呼,但是沒有人會一定要把名字寫的跟Facebook上面一樣….

3. 撥號沒有快速鍵. magic , hero 都有的撥號快速鍵, 在 Nexus One 上面看不到…
這是硬體設計上得問題… 為什麼要拿掉我真的有點不了.. 100% 全觸控很棒嗎?..我不認為..

4. 沒有智慧快速聯絡人搜索, 用慣了Hero, Magic 的人一定很習慣打數字找中文的人或是英文名稱的人..或是打 0935 找0935開頭的電話有誰.. Nexus One 上沒有這種功能..(這真的是非常糟糕的缺點….), 很久以前 Nokia 就有類似的功能了..

5. 就算用全域搜索, 也還是無法搜索電話號碼!… 非常非常的糟糕!!!… 比前面那個沒有辦法打 222 找出 abc 還要糟糕!!!.. 這樣我要是知道有個 091843 開頭的電話,但是忘記是誰了,怎麼辦?…

6. 沒有內建中文,可以裝得宏碁注音輸入法….只能說,沒事搞得跟電腦鍵盤完全不類似的排列幹嘛?….很難按…

個人對 Nexus One 的評價是, 強大威猛,上網快速,反應迅速,畫面漂亮… 但是**電話與聯絡人功能整合的不夠**… 這樣… Nexus One 是一隻好用的上網機, 但是不是一隻方便好用的手機

想要衝的人或許應該思考一下, HTC Bravo 或許是個比較好的選擇…
不然… 用 HTC Hero 升級的版本2.1也不錯…

No tags

十二月/09

22

喬巴帽,上班去…

由於之前在樓下夜市的夾娃娃機抓到了一頂喬巴帽,後來跟著朋友一起去了清靜農場的時候戴著喬巴帽,接著又在社群的活動中也戴著帽子~…

最近兩週,則是到公司上下班,去便利商店買早餐買飲料,去吃午飯,都刻意戴著帽子出去~…

喬巴帽~
喬巴帽~

畢竟,聖誕節到了呀~,總是要有麋鹿在路上跑來跑去的~…

要是有在南港軟體園區看到我,別忘了打個招呼喔!.. 祝大家聖誕快樂!!

No tags

Older posts >>

Theme Design by devolux.nh2.me