2008年12月18日 星期四

php ctemplate for win32

昨晚突然想到, 應該弄一下 php ctemplate 的 win32 binary,

因為 google ctemplate 原本就是 win32 ready, php 也是, 那為甚麼不順便做一下 php ctemplate php extension for win32 呢?

測試了一下, 東西已經丟上 github 了.

https://github.com/vanillahsu/php-ctemplate/tree


有需要的自己弄一份吧, binary 的話, 私下講吧.

2008年12月16日 星期二

pcre & pcrecpp

pcre 是 unix 上被使用的很頻繁的 regex library, 原本是 exim (一套 sendmail like 的 mail) 想要做 perl compatible regex library,

最後一堆軟體都不小心有用到, php 的 preg_* 後面就是 pcre.

最近把一個工作上, 其他同事慣用的 php template library 改成 php ext,

為甚麼要這樣做呢?

因為 coder & designer 已經用習慣, 叫他們改, 大概會殺人吧.

所以只好退而求其次, 一樣用他們習慣的 rule & style 去做.

而該 template library, 其實就是一堆 preg_match & preg_replace 組成的,

php ext 也照圖說故事, 該用的地方就用一下.

我是用 c++ 來改寫的, 所以一堆原本 php 的 array, 直接用 stl 就可以很快樂,

preg_* 的 function, 也是可以直接用 pcre c function 來做,

但是, 但是.

google 約在 2006 年左右, 貢獻了一個 c++ binding 給 pcre,  所以如果願意的話, cpp binding 用起來更爽快點.

2008年10月6日 星期一

socket with ssl

昨天做 net/spserver 的修改, 把原本少弄進去的 matrixssl, gnutls, xyssl 的東西補上,

看到 xyssl 的 sample code, 是讓一般的 tcp server & client 可以用 ssl 收發資料,

覺得還頗簡單的, 然後又去看了一下 openssl demo code,

我的第一印象, 就是覺得 openssl + socket 應該很難搞,

沒想到看了一下, 還真簡單

open socket 之後, 把 fd 用 SSL_set_fd 餵到 ssl 裡面,

再來就用 SSL_read & SSL_write 取代原本的 read/send 就好了.

真方便.

2008年8月27日 星期三

寫 open source 的東西

最爽的事情,

就是有人從你沒去過的國家,

寫信來問你寫的東西, 然後說他也想一起玩.

2008年6月18日 星期三

php qrcode

在 php 上面要產生 qrcode,

大部分的人都是用某日本人寫的 pure php 套件,

據說要 include 一堆東西, 才能使用.

其實, 我在 2007/04 就寫好了 pecl-qrencode, 他是 base on libqrencode 的 php extension,

FreeBSD 使用者可以在 ports/graphics/pecl-qrencode 下面找到,

用法也很簡單,

先產生一個 qrencode resource, 然後用 qr_save 把圖檔吐出來,

可以選擇要不要給檔名, 沒有直接吐到瀏覽器上.

$qr = qr_encode ('test for qrcode');
if (is_resource ($qr))
qr_save ($qr, '1.png');


or you can output direct to stdout.


$qr = qr_encode ('test for qrcode');
if (is_resource ($qr))
{
header ("Content-type: image/PNG");
qr_save ($qr);
}

2008年5月26日 星期一

mysql++

雖然很久以前試用過這套, 但是感覺沒有現在這麼好!!!

mysql++ 是 mysql client 的 c++ binding,

功能強大到不只是 c++ binding 而已,

一堆 stl 的搞法, 把用 c++ 做資料庫操作, 弄的很像寫 php 一樣簡單,

真是快活...

2008年4月29日 星期二

php extende & embedded at the same time.

之前在 Yahoo 已經幹過一次這種事情了,

現在還想幹一次, 台灣大概沒人像我這樣搞了吧.

現在的想法是, 用 c++ 寫個 daemon,

每次 tick 都從資料庫撈到要處理的資料, 然後讓 embed php 跑,

php 這邊應該會有的是, 一個 init function, 去註冊所有的 callback function,

然後 callback function 是從 c++ 去跑, 根據每次要處理資料不同而不同,

也只管 callback function return value 就好,

一切的一切,  就讓 callback function 自己處理呀!!!.

2008年3月10日 星期一

Mysql module for bsnmpd (FreeBSD native snmp daemon)

最近算頗忙, 小孩都生出來了, 回家就是要幫忙帶小孩, 忙這忙那的...

不過上班的閒暇之餘, 寫了這個小東西, mysql module for bsnmpd.

在我的認知當中, 好像大部分的 monitor 機制 (nagios, cacti 等), monitor mysql 的時候,

都是由 moniter node 連線到 mysql server, 取得一些資訊後,把資料存起來.

這樣 mysql server 一多, 要就是紀錄每台的 username, password 等,

不然就是大家都用一樣的密碼.

其實很怪, 為甚麼 monitor node 要裝那麼多 client library?

不能有更簡單的方法嗎?

SNMP 好像原本的構想就是這樣, 只要大家符合了 snmp protocol, 理論上就可以取得你想要的資訊,

只是 server side 要自己去擴充而已.

FreeBSD 在 5.x (應該是這時候) 引進了 bsnmpd, 他比較好玩的是, 可以自己寫 module 去擴充原本沒有的東西,

現在已經有了一些 module, pf, netgraph, hostres 等等.

snmp_mysql 的 source code 可以在這邊找到.

解開之後,  "make" 就可以生出 snmp_mysql.so & snmp_mysql.so.5

copy 進 /usr/lib 就可以了 (其實 /usr/local/lib 才對)

然後把同目錄下的 snmp_mysql.conf copy 到 /usr/local/etc

這個檔案裡面只有兩行, 你的 mysql username & password, 自行修改.

然後修改 /etc/snmpd.config

增加下面這行

begemotSnmpdModulePath."mysql"  = "/usr/lib/snmp_mysql.so"

重跑 ("/etc/rc.d/bsnmpd restart") bsnmp 就好.

sockstat 就可以看到 bsnmpd 有連接到 mysql.sock

使用方法, 用 perl or php snmp module 就可以連接,

uid 如下.

1.3.6.1.4.1.12325.1.204.1.1.1.0 Connections

1.3.6.1.4.1.12325.1.204.1.1.2.0 SlowQuery

1.3.6.1.4.1.12325.1.204.1.1.3.0 Uptime

1.3.6.1.4.1.12325.1.204.1.1.4.0 Questions.