blog.Ring.idv.tw

2008 April

Installing MySQL & Apache2 & PHP & PDO on Debian 4.0

來練習一下該如何在Debian Linux下建立一個LAMP的環境~

安裝MySQL

「libmysqlclient15-dev」要編譯「PDO_MYSQL」時會用到,所以就一併安裝

apt-get install mysql-server libmysqlclient15-dev

裝完成功後~ 記得為你的MySQL root帳號設置一下密碼,假設密碼為「1234」:

mysqladmin -u root password 1234

安裝Apache2

apt-get install apache2

裝好後修改一下設定~

vi /etc/apache2/sites-available/default

將「RedirectMatch ^/$ /apache2-default/」這一行註解起來,如下所示:

# RedirectMatch ^/$ /apache2-default/

讓「/」根目錄不要重導到「/var/www/apache2-default」下

安裝PHP5

「php5-dev」有包含「phpize」這個指令~ 待會要編譯PHP extension會用到~ 所以也一併安裝

apt-get install php5 php5-dev

這時候你可以在「/var/www/」下建立一個名為「index.php」,內容如下:

<?
phpinfo();
?>

然後打開你的瀏覽器,輸入「http://localhost/」就可以看到你的PHP相關組態資訊了~

安裝PDO

首先先下載PDO、PDO-MySQL~

wget http://pecl.php.net/get/PDO-1.0.3.tgz
wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz

然後解壓縮兩個檔案~

tar zxvf PDO-1.0.3.tgz
tar zxvf PDO_MYSQL-1.0.2.tgz

先安裝PDO

cd PDO-1.0.3
phpize
./configure
make
make install

在安裝PDO_MYSQL,要先修改「config.m4」這個檔案,然後刪除下述四行,在122行。

ifdef([PHP_ADD_EXTENSION_DEP],
[
  PHP_ADD_EXTENSION_DEP(pdo_mysql, pdo)
])

安裝PDO_MYSQL

cd PDO_MYSQL-1.0.2
phpize
./configure
make
make install

確認PDO有設置成功

vi /etc/php5/conf.d/pdo.ini

內容應該包含下述兩行:

extension=pdo.so
extension=pdo_mysql.so

測試環境

先重新啟動你的「apache2」

/etc/init.d/apache2 restart

然後在「/var/www/」之下,建立一個「test.php」,程式如下:

<?php
set_exception_handler('exception_handler');

$user = 'root';
$pass = '1234';
$db = new PDO('mysql:host=localhost;dbname=mysql', $user, $pass);

foreach ($db->query('SELECT * from user') as $row) {
    print_r($row);
}
$db = null;
function exception_handler($e) {
    die($e->getMessage() . "\n");
}
?>

成功的話應該就會看見一大堆陣列資訊了 ^^

參考資源

【PHP】DebianにPDOをインストール

在 Debian 安裝 Apache + MySQL + PHP

【安裝筆記】Apache, MySQL, PHP, Subversion Installation on Debian Etch

Debian下Apache2+Mysql5+Php5的安装配置

2008-04-19 00:38:05 | Comments (7)

我在工研院的第一天

今天是第一天到工研院上班~ 上圖就是工研院51館的總部~

早上七點多爬起來~ 坐8:20分的客運到清大站~ 約9:45分就到了~ 然後轉搭新竹客運~ 要搭乘「新竹-下公館」的市區公車~ 好久沒坐公車了~ XD

搭乘費用:新台幣32元~ (P.S. 現在連新竹Nova都準備好了人民幣,所以要強調一下 ^^)

很巧的是~ 剛好在等公車的時候~ 遇到一位要去工研院創意中心面試的人~ XD

中午就去B1的餐廳中心用餐~ 由於B1是一個圓環的建築設計,所以視野相當好~ 採光也佳 ^^ 上圖如果在正中午時~ 那可真是「人滿為患」哈哈~ 好怪的形容~

這是今天中午吃的小簡餐~ 美味嗎?我不曉得~ 反正吃光光就是了 ^^

看到這個「工研市集」就知道~ 我應該是要去合作社滴~ 今天要返家時~ 發覺身上的零錢不夠搭乘公車~ 所以跑下去隨手買個麵包~

後記

今天第一天上班和我的主管建泰(謝謝你的磁鐵書籤^^)先聊一下未來預計要執行的事項及規劃~ 並將我的工作環境先設置好~ 期許我在這可以讓我「肆無忌憚」的發揮 ^^ 又是一個很怪的形容~ 呵~ 反正就是盡力做好每件事就對了~

P.S. 我還蠻喜歡這邊非制式化的辦公環境 ^^b 制式化的環境就會覺得無趣 = =" 會使我覺得毫無生氣盎然的感覺~

2008-04-18 21:14:44 | Comments (3)

跨網域請求(三) - Cross Domain Proxy

這種跨網域技術的方式最大的優點在於~ 他只需要單方面的向你所想要請求的資源進行溝通即可~

也就是說,我們先前所曾介紹過的「跨網域請求(二) - Flash Plug-In」、「跨網域請求(一) - Cross-Domain Script Tag」都需要雙方遵循著某種條件才能達成進行溝通~

而最簡單的例子不外乎像是Flickr所提供的API~ 它就是採用「Cross-Domain Script Tag」來達成的~

不過利用「Cross Domain Proxy」最大的缺點就在於~ 你需要將所有請求的資源都交由這台「Proxy」委任地去幫你處理~ 這將會造成「IP」被對方的伺服器封鎖,或是負荷過載的情形發生~ 所以這時就需要「CSProxy」才能解決這些問題~ 這部份留待以後再介紹~

我們就直接來看一個簡單的「Corss Domain Proxy」的例子,此例子以「Google Translate」為例:

Translate.php

<?php
require_once "HttpClient.php";

if($_POST)
{
	$sentence = $_POST['input'];
	$uri = "http://translate.google.com/translate_t";
	$data = array('langpair' => 'en|zh-TW', 'h1' => 'en', 'ie' => 'UTF8', 'text' => $sentence);

	$request = new HttpClient();
	$request->setContent($data);
	$request->setUri($uri);
	$body = $request->doAction();
	
	$regex = '/<div id=result_box dir=\"ltr\">(.*)<\/div><\/td>/Us';
	preg_match($regex,$body,$match);
	echo $match[1];
}
?>

HttpClient.php

此程式參考HTTP POST from PHP, without cURL,您可以自行修改並擴充~ 當然也歡迎您再分享您的成果 ^^

<?php
/**
 * Date: 2008/04/17
 * Shen(http://blog.ring.idv.tw)
 */
class HttpClient
{
	private $uri;
	private $params;

	function __construct()
	{
		$this->params = array
		(
			'http' => array
			(
				'method' => 'POST',
				'content' => '',
			)
		);
	}
	public function setUri($uri)
	{
		$this->uri = $uri;
	}
	public function setContent($content)
	{
		$this->params['http']['content'] = http_build_query($content);
	}
	public function doAction()
	{
		$ctx = stream_context_create($this->params);
		$fp = @fopen($this->uri, 'rb', false, $ctx);
	
		if(!$fp)
			throw new Exception("Problem: $php_errormsg");
	
		$response = @stream_get_contents($fp);
		if ($response === false)
			throw new Exception("Problem: $php_errormsg");
	
		return $response;
	}
}
?>

2008-04-17 23:50:55 | Add Comment

「svk:」看成「svlc」... XD

由於前天跑去參加「OSDC.tw 2008」,就在某一個議程中的投影片~ 我居然將「svk:」看成了「svlc」...XDDDD

所以一回到台中的隔天~ 就給它跑去重新配了一附眼鏡~

因為之前那附也已經用了三年多了~ 而度數也悄悄地趁我不注意的時候又給它成長了25度~ 呵~

目前是右眼300度外加閃光50~ 左眼則是325度~ 如果按照這個比例成長的話~ 每三年增加25度~ 所以30年後我的度數應該為...

2008-04-15 17:03:47 | Add Comment

OSDC.tw 2008 心得分享

Open Source Software Foundry

第一天由OSSF的三位成員來開場,主要介紹「OpenFoundry」在一些開發上的應用技巧,由於OpenFoundry主要使用FreeBSD來作為伺服器平臺,所以議題也都圍繞在這上面~ 譬如如何使用FreeBSD jail在同一台電腦安置許多的虛擬伺服器等等…,不過我比較感興趣的反而是「Ruby on Windows」(Ant)這一個議題,作者用Ruby來介紹寫一個USB的防毒軟體,專案的名字還挺長,稱為「Wow! USB VirusKiller 可攜式儲存設備防毒軟體」,主要是利用檔名的判斷方式來偵測是否有病毒存在,有興趣的朋友們可以去玩玩看,而作者還分享了一些Ruby在Windows上開發的相關經驗,例如用Ruby來開發GUI的應用程式時,作者建議使用FXRuby來開發,如果要將Ruby直接轉成Exe的可執行檔,可以使用RubyScript2Exe,不過作者也提到了一個Ruby的問題,也就是執行速度較為緩慢~ 我想這和Java剛推出時是一樣的狀況,不過還是端看開發人員如何取捨,否則為何Hadoop要採用Java來開發呢?這必然有他的考量!!

YUI: The Insider's Tour (Nate Koechley)

Nate Koechley.Yahoo! 前端技術工程師,主要對YUI進行一個大概的介紹與推廣,目前最新的版本為2.5.1,而未來的3.0版將專注於consistent、plugin based、optimized method的改善,而作者還利用了一個動畫介紹了許多目前知名的網站都採用YUI來作為網站前端的開發技術,不過重點的訴求在於目前不同瀏覽器所產生的差異性,而該如何有效率地解決這些差異,所以利用像YUI或jQuery這樣的Library來開發便可較為省時省力。

Google Gears (Ray Chen)

雖然我在去年暑假就曾在meeting報告時介紹過這項技術,不過去當個Listener由Google工程師來介紹Google Gears這項技術,收獲其實也還不少 ^^v

作者主要用local Server的方式,並直接將簡報整合Google Gears技術來Demo,感覺上就挺一致的~ 而且講述到不少的重點~ 例如:

.Google Docs很好用,但沒網路就不能用

.JavaScript 是採用Single Thread的方式來運作,但目前多核心的CPU愈來愈普及 (筆者補充:不曉得Adobe AIR會不會支援thread技術)

.SyncEngine 採用連續Ping網路的方式來偵測,利用十秒的時間間隔進行polling

.WorkerPool 是利用IPC溝通的

GearsMonkey: Google Gears + Greasemonkey to take Wikipedia offline

.HTML 5.0 規格將包含Database的功能,重點在於Google Gears也有包含SQLite,只是Gears走的比較前面

.Google Gears - Full Text Search

聽完之後~ 對Google Gears有更為紮實就是了 ^^

Ubuntu Mobile Edition (Jouston)

感覺作者是來介紹貴公司的XD~ 沒捕捉到什麼重點~

如果硬要說的話~ 可能就是作者建議採用Clutter來開發GUI應用程式吧~ 別使用X Window API...

Introduction to BerkeleyDB (pixnet) (jnlin)

主要介紹Pixnet採用BerkeleyDB(已被Oracle買下)的一些經驗談,譬如說為何要採用BerkeleyDB這樣的key-value based的資料庫,其實還是效率上的考量~

試想~ 如果採用關聯式資料庫,並且用一堆join statement的話~ 那當然毫無效率可言,所以用空間換取時間的作法是比較妥當的~

作者也提到說pixnet目前每秒有將近2000次的insert操作以及近3500次的Query操作~

投影片下載:Introduction to BerkeleyDB (pixnet)

Hadoop (Vivek Ratan)

終於輪到我最想聽的議題了 ^^

不過可能是自己抱持的期望太大~ 因為只有一小時的時間能對Hadoop做概略性的介紹,我想也算不錯了~

這項技術對我來說有相當程度的重要,因為我想要做的Flash動畫搜尋引擎,就打算架構在Hadoop上面來運作,所以不管有沒有順利上博班,研究這項技術對我來說是必然的工作~

後來發覺原來facebook也採用Hadoop這項技術~ 我想接下來會愈來愈多人投入這項領域之中,尤其是NLP這種需要大量統計資訊的工作... 如果採用資料庫的方式來處理Google Web 1 Trillion,那不曉得要跑到民國幾年了~ XD 所以工欲善其事.必先利其器~ 而這個器就是「Hadoop」~

BTW, 當天下午下「hadoop」關鍵字找到我的文章「一個值得研究的領域 - Hadoop」突然變多了 XD~

Open Source Tools, Open Data, and Daily Tasks of Handling Natural Languages (Lukhnos)

這場聽下來~ 感覺作者對於NLP的領域有深入研究~ 譬如一些斷詞的處理~ 就像是「研究生活動中心」,比較理想的斷詞應該是「研究生」、「活動」、「中心」,不過也有可能是「研究」、「生活」、「動」、「中心」,其實這讓我想到我去清大旁聽老師所舉的一個例子「土地公有政策」,該如何斷詞呢?比較理想的應該是「土地」、「公有」、「政策」,但中研院的CKIP系統就將這樣的例子斷成「土地公」、「有」、「政策」,所以作者蠻推崇使用蔡志浩先生所提出的「MMSEG」,其它的相關重點請參閱投影片 ^^

作者網站:Lukhnos

投影片下載:Open Source Tools, Open Data, and Daily Tasks of Handling Natural Languages

DOM manipulation by Wii Remote - the future of media (Kawasaki)

作者是一位日本人~ 這場帶給我的收獲反而不是這個議題的內容,而是作者設計簡報的功力以及現場的臨場反應,讓我學到了一些技巧~

作者一開始利用「預測使用者行為」的方式來帶領大家進入這個議題,這的確是一個不錯的方式,很值得學習與效法~ 而且簡報中還利用了「Google AJAX Language API」~ 蠻讚的~

而這場演講其實主要就是利用我之前所po過的「WiiremoteJ - 用Wii來做互動」這項技術來達到用WiiRemote控制機器人的技巧~ 還包含了一些JavaScript處理3D的運作範例~ 來瞧瞧吧~ ^^ Animation.Cube - Rotating Cube Animation Effect

相關資源:GAINER

我的戰利品

.7-11 禮券 100元 (填研究問卷得到的)

.Yahoo! T-Shirt (L-size)

.Yahoo! 筆記本和筆

.Google Map 筆記本和筆

.Ubuntu 光碟

.每個人都有的胸章 XD~

唯一的遺憾是沒拿到Google的帽子...>"<

2008-04-15 01:26:44 | Comments (5)

Next Posts~:::~Previous Posts
Copyright (C) Ching-Shen Chen. All rights reserved.

::: 搜尋 :::

::: 分類 :::

::: 最新文章 :::

::: 最新回應 :::

::: 訂閱 :::

Atom feed
Atom Comment