blog.Ring.idv.tw

Linux

GTK - GtkMozEmbed

.2010.03.11 Flash更新

本文主要實作一個透過GtkMozEmbed內嵌Browser的GTK應用程式。

先安裝Gecko (layout engine)的開發函式庫:

sudo apt-get install libxul-dev

範例程式

#include <gtk-2.0/gtk/gtk.h>
#include <gtkmozembed.h>
#include <mozilla-config.h>
#include <stdio.h>

int main(int argc, char * argv[])
{
        gtk_init(&argc, &argv);
        GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_default_size(GTK_WINDOW(window), 640, 480);
        g_signal_connect(GTK_OBJECT(window), "destroy",G_CALLBACK(gtk_main_quit), NULL);
        GtkWidget *html = gtk_moz_embed_new();
        gtk_container_add(GTK_CONTAINER(window), html);
        gtk_moz_embed_load_url(GTK_MOZ_EMBED(html), "http://www.youtube.com/watch?v=TGbwL8kSpEk");

        gtk_widget_show_all(window);
        gtk_main();
        return 0;
}

編譯並執行它

gcc test.cpp -o test `pkg-config --cflags --libs gtk+-2.0` `pkg-config --cflags --libs xulrunner-gtkmozembed`
./test

問題來了!看不到Flash咧~ 這樣就看不到Girls' Generation的MV了.. Orz

2010.03.11 更新

安裝FlashPlayer (ubuntu 9.10 32bit)

sudo apt-get install flashplugin-installer

很簡單的搞定它了! :p

2010-03-11 00:15:52 | Comments (4)

寫一個Hello World的PHP Extension

Java中我們可以透過JNI的方式來進行和C語言的溝通~ 而這不外乎要遵循一些共通的介面來達到~ 當然PHP也是如此~ 有興趣的話可以看看「PHP Source Code/ext」底下的一些extension,像是PDOGD等等~ 都是這樣達成的~

所以像Youtube這樣用PHP寫成的網站還要結合後端轉檔程式該怎麼做呢?

由於筆者不是Youtube的工程師~ 恕無法提供正解~ XD

不過若要比較「完善」地結合像FFmpeg這樣的函式庫~ 那採用寫一個PHP Extension的方式倒是不錯的解決方案~

所以本文主要的訴求就在於開發一個屬於自己的Hello World的PHP Extension。

hello.c

#include "php.h"

ZEND_FUNCTION(hello);
zend_function_entry hellomodule_functions[] =
{
    ZEND_FE(hello, NULL)
    {NULL, NULL, NULL}
};
zend_module_entry hellomodule_module_entry =
{
    STANDARD_MODULE_HEADER,
    "Hello Module",
    hellomodule_functions,
    NULL, 
    NULL, 
    NULL, 
    NULL, 
    NULL,
    NO_VERSION_YET,
    STANDARD_MODULE_PROPERTIES
};

#if COMPILE_DL_FIRST_MODULE
ZEND_GET_MODULE(hellomodule)
#endif

ZEND_FUNCTION(hello)
{
	RETURN_STRING("HELLO WORLD",1);
}

Compiling

先進行編譯處理~

gcc -fpic -DCOMPILE_DL_FIRST_MODULE=1 -I/usr/local/include -I. -I/usr/include/php5 -I/usr/include/php5/Zend -I/usr/include/php5//main -I/usr/include/php5/TSRM -c -o hello.o hello.c

Linking

然後產生一個Shared Object~

gcc -shared -L/usr/local/lib -rdynamic -o hello.so hello.o

掛上hello module

cp hello.so /usr/lib/php5/20060613+lfs/

修改「php.ini」,加上「extension=hello.so]~ 然後重新啟動您的Apache Server

vi /etc/php5/apache2/php.ini
/etc/init.d/apache2 restart

最後用「phpinfo()」來驗證是否已掛上自己的Extension~ 成功的話會看到下圖:

測試HelloWorld

<?php
echo hello();
?>

看到畫面出現「HELLO WORLD」就成功啦! ^^

不過如果您不想那麼麻煩的掛載extension,也可以考慮用「dl()」來動態載入達成~

相關細節可以參考下述資源~

參考資源

PHP: Creating Extensions - Manual

PHP: Source Discussion - Manual

Extension Writing - devzone.zend.com

類似文章

用Java來和C做溝通的介面 - JNI

2008-04-25 21:28:18 | Comments (9)

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)

PostgreSQL - 允許遠端TCP/IP連線

當我們的程式和資料庫是位於不同的主機時~ 就必須透過TCP/IP來遠端連線資料庫~

或是你的PostgreSQL是裝在VMware的Linux之中,而你想透過Windows的pgAdmin III資料庫管理程式來操作的話~ 都需要做這設定來遠端連線~

允許遠端TCP/IP連線

修改「/usr/local/pgsql/data/pg_hba.conf」,並加入下列格式的設定值:

host    all     all     [ip位址]/[subnet mask]  trust

設定方式如下:

vi /usr/local/pgsql/data/pg_hba.conf
host    all     all     192.168.0.0/16  trust

接著修改「/usr/local/pgsql/data/postgresql.conf

vi /usr/local/pgsql/data/postgresql.conf

找出「listen_addresses」和「port」,把這兩行的註解取消並修改成下列:

listen_addresses = '*'
port = 5432

最後重新啟動你的PostgreSQL即可。

2008-02-13 17:42:26 | Add Comment

Installing JDK6 & JBoss 4.2.2 on Debian 4.0

這裡先記錄下來安裝JDK6 & JBossDebian Linux的過程~ 如果你是用其它的Linux Distribution基本上都可以照著下述步驟安裝~

軟體取得

JDK6 - jdk-6u4-linux-i586.bin

JBoss Application Server Downloads - jboss-4.2.2.GA.zip

安裝JDK6

chmod +x jdk-6u4-linux-i586.bin
./jdk-6u4-linux-i586.bin #輸入yes開始安裝

接著會出現一個「jdk1.6.0_04」的目錄,這裡我將此目錄搬移至「/usr/local/」底下

mv jdk1.6.0_04 /usr/local/

最後設定一些環境變數,將下述設定寫在「/etc/profile」檔案中即可

export JAVA_HOME=/usr/local/jdk1.6.0_04
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.

安裝JBoss 4.2.2 GA

直接將「jboss-4.2.2.GA.zip」解壓縮即可

unzip jboss-4.2.2.GA.zip
mv jboss-4.2.2.GA /usr/local/

直接啟動JBoss

/usr/local/jboss-4.2.2.GA/bin/run.sh

接著開啟Browser來驗證一下~ 輸入「http://localhost:8080/jmx-console/」後~ 看到JBoss的管理畫面即成功。

2008-02-13 15:43:30 | Add Comment

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

::: 搜尋 :::

::: 分類 :::

::: 最新文章 :::

::: 最新回應 :::

::: 訂閱 :::

Atom feed
Atom Comment