目前分類:電腦程式 (22)

瀏覽方式: 標題列表 簡短摘要

參考資料:http://marcelog.github.com/articles/swig_php_libpcap_module_c++.html

基本原理就是把現有的libpcap library透過C++寫成的interface包裝起來,並透過SWIG這個Wrapper包成PHP的Extension,讓PHP調用,原作者的程式碼相當簡單,稍微看一下應該可以懂。

環境設定

我自己的編譯環境為Ubuntu 11.10 x86_64 (64bit),PHP版本為5.3.6,因為編譯時需要除了原有的C++編譯環境與make之外,還需要安裝swig、libpcap-dev以及php5-dev等開發套件,當然php5-cli、php5-common以及libpcap-0.8等相關執行環境也都需要,我是透過apt-get直接安裝相關套件。

編譯

nsysumis94 發表在 痞客邦 留言(0) 人氣()

今天在c9s的浪上面看到了Sikuli,我覺得是個滿有趣的一個想法,對於想要學程式的人來說是個很棒的入門project,以前只能用按鍵精靈做的事情,現在自己也可以寫個專屬的程式來完成了,讚啦!


nsysumis94 發表在 痞客邦 留言(0) 人氣()

自從上次發了一篇初探SpiderMonkey之後,已經很久沒碰spidermonkey了,今天突然心血來潮想說既然spidermonkey都可以embeded在C裡面了,那PHP可不可以呢?上網google了一下,發現果然有善心人士(bombstrike)發了一個PECL的套件,讓PHP也可以跑javascript了,不過有個限制就是這個套件一定要跑在PHP 5.3以後(囧rz),PHP 5.3才剛release沒多久阿....這也未免太新了一點,人家的開發環境還停在5.2的說,用apt-get查一下目前stable的package果然還在5.2,該不會要我用source裝吧?

好在網路上的善心人士不只一位,dotdeb已經把最新的PHP 5.3包好了,只需將apt-get的source指到php53.dotdeb.org就可以安裝啦。

1. PHP安裝

先設定apt-get

#vi /etc/apt-get/source.list

nsysumis94 發表在 痞客邦 留言(0) 人氣()

拜AJAX套件盛行所賜,window.open()這個東西我已經好久沒用了,每當遇到這種有彈跳視窗的UI時大部分都是用Thickbox(已停止更新)或者其他Diaglog UI元件來做,不過今天遇到一個要開新視窗的UI設計,需求是父視窗要能夠操縱開啟的子視窗,不過上網找了一下大部分談window.open()的文章多半是講用子視窗來控制父視窗,譬如說:開啟一個子視窗的購物選單畫面,把User子視窗內選擇的東西回傳父視窗,這種操作只需透過opener物件即可完成對父視窗的操作;很少有文章談到父視窗如何操縱他開出來的子視窗。

在換過一堆關鍵字後終於讓我在網站建置百寶箱裡面找到街燈電箱105號寫的:『跟隨父視窗關閉的子視窗』這篇文章,參考他的原始碼後才了解到,如果要讓父視窗能夠操縱子視窗的話,在子視窗建置的初期就必須將子視窗變成物件(指進父視窗的變數中),以下是範例原始碼:

<script>
var newWindowObj;
function openDependentWindow(url){

nsysumis94 發表在 痞客邦 留言(0) 人氣()

最近在做map api的研究,主流的Open Map API最知名的大概要屬Google map的API了,另外一個急起直追的則是要跟Google一拼高下的Yahoo,從今年中Yahoo舉辦Yahoo open hack day的活動看來,Yahoo的確很有心要在Mash-up的Open API競爭中取得一席之地。

在稍微研究兩家的API之後發現對於我這個初學者來說,Yahoo的API不管是在申請使用或者程式撰寫上面都比google map要來的簡單以及直覺許多,首先就兩者的申請手續來說,兩邊都需要申請一個api key,但是Yahoo可選擇不綁web site,而google則得綁著一個url,沒透過這個url(我猜應該是認url-refer)來使用API的話是無效的,光是這點對沒有固定IP只想先嚐鮮的初學者來說,Yahoo的方案要來得有彈性許多。

再來在程式撰寫的部分,兩者其實都大同小異,但在定位的地方google map api需要new一個geocoder的物件來把使用者輸入轉成經緯度,而yahoo map api則可以直接餵使用者輸入,但是在定位準確度來說,則是天差地遠,雖然Yahoo map api找得到的時候,定位點都可以直接定在目標物上(這也是有人說Yahoo Geocoder比google準的原因),但是大部分在搜尋時,我覺得Yahoo的API要比google來的笨,這邊是有人做的比較,你可以輸入台北車站、中正紀念堂等地標比比看,看哪一家的API比較準。

可是奇妙的事情發生了,在Yahoo地圖上面輸入台北車站還真的是台北火車站哩!!!中正紀念堂也準準的落在正中心,大受打擊的我一直以為是我程式寫法太粗糙,一定是因為沒有先用Geocoding API算出經緯度就直接把字串餵給API的緣故,所以花了一個晚上在研究Geocoding API,結果情況仍不見好轉,突然發現地圖日記好像也改用Yahoo Map API了,測試的結果,證明果然是API的問題,Yahoo地圖上面用的API應該不是開放給別人用的API或者是有用更好的Geocoding系統,害我搞笑了一個晚上

有哪位好心的大大可以告訴我該怎麼寫才能達到Yahoo地圖上面的準度勒?

nsysumis94 發表在 痞客邦 留言(0) 人氣()

話說....Big5編碼一直是我們在做字串處理時的痛,因為Big5屬於Double Byte字元而且結尾那個byte的編碼好死不死又跟ASCII Code重複,導致像是許功蓋這些結尾字元在ASCII Code裡面為\(脫逸符號)、\t(tab)、\n(換行)等符號的字元在輸出的時候都會有問題,在我還是大學生的時候,這問題困擾了我好久,因為除了顯示時add_slash不能在這些字串後面多個'\'之外,老闆還叫我開發個文章自動斷行系統,不能截掉英文單字且中文字要能正常顯示,截英文字事小,只要back track回上一個空白字元就好(ASCII Code=32),重點是這個系統的萬年資料庫是Big5編碼的,整個的欲哭無淚,經過三週的奮戰後,我終於解決了這個問題,不過時間久了也忘記要怎麼解了,今天心血來潮上網找了兩種解法,當然最根本的還是捨Big5用UTF-8來存字串最好囉。

第一種是逐一比對每一個Byte,若此Byte>127則表示為中文字(Big5的First Byte > 127),下一個Byte和這個Byte為同一個字組,這個解法是我那時候使用的解法,印象中PHP的版本還是3.x的時候

function subBig5Str($str,$len){

//檢查原本的字串是不是比要截的長度長

   if(strlen($str) > $len){

nsysumis94 發表在 痞客邦 留言(0) 人氣()

資料來源

In a database such as MySQL, data is divided into a series of tables (the "why" is beyond what I'm writing today) which are then connected together in SELECT commands to generate the output required. I find when I'm running MySQL training, people often get confused between all the join flavours. Let me give you an example to see how it works.

If this isn't quite the question you're looking to have answered, we've got a MySQL IAQ (Infrequently Answered Questions that may help you. And if you want to learn how to make use of this in PHP, see here

nsysumis94 發表在 痞客邦 留言(0) 人氣()

資料來源:MySQL: Remove duplicate entries

Remove duplicate entries. Assume the following table and data.

CREATE TABLE IF NOT EXISTS dupTest (
pkey int(11) NOT NULL auto_increment,

nsysumis94 發表在 痞客邦 留言(1) 人氣()

www的興起改變了以往系統平台皆以應用程式為主的設計方式,越來越多的應用程式都搭配上網頁的功能,讓使用者無論身在何處皆能透過瀏覽器來連接系統,而不需要再浪費等待應用程式安裝的時間,也由於網頁語言和UI的關係非常緊密且大部分的網頁語言都屬於透過Interpreter及時解譯的Script Language,使得網頁語言非常的不適合也不應該用於開發需要消耗大量系統運算資源的程式,但是出來混的總有一天要還的,總會有些功能需要由那種能夠處理超大量資料的程式語言如C/C++來開發,抑或者你會需要透過一些現有的程式來幫助你完成一些事情,但是這些程式天殺的沒有API來供你調用,類似這種時候,我們多半都會利用資料介面如資料庫,或者由system、exec等透過Command Argument Passing的方式來完成網頁與AP的介接。

雖然像上面那樣開發程式的方式可能不多見,但是就被我遇到了(之前mantain的一套程式也是這樣透過exec把一些元件包裝成API),我遇到的問題主要是需要對網頁上傳檔案作一些需要耗費相當多功夫的處理,姑且可以想像成把上傳的圖片縮圖、加框蓋上浮水印,反正就是網頁程式沒辦法那麼快處理好的就是了拉,一般遇到這種問題多半有兩種解法,第一種就是叫Client等,就如同你在網頁上面常常看到用AJAX寫成Loading畫面,第二種就是先把檔案存在Server上面,再寫一隻Daemon定期去處理這些檔案,第一種方式是比較不吃系統資源,反正檔案傳上來了我就做,不用隨時常駐一隻Daemon在那裡monitor,而且對用戶來說比較及時,等完了就可以看結果,但是如果需要處理時間非常久的話,用戶會等到起笑,第二種方法則相反。

今天心血來潮在想是不是有折衷方案(其實是懶的去寫Daemon),因為平時在使用unix的時候,一些需要耗時較久的工作我都會把它先丟到背景,晚點再來看結果,結果試了php的exec()跟system()這兩個函數都失敗,二話不說趕快去拜google大神,想不到一下子就找到解決方案了,在php裡面要把shell job丟到背景裡跑的話,可以用popen()跟pclose()這兩個函數,popen會fork一個command process然後回傳pointer,接著php就可以透過這個pointer利用fread、fput等函式來跟fork出來的這個command process溝通,而exec跟system雖然也會create command process,但是這兩個function並沒有辦法在執行時互動,頂多只能輸出執行結果,因此一但用了exec跟system就得等到command執行完畢才會繼續執行其他程式碼,且無法將command process丟到背景執行,所以若你用exec或system執行耗時較久的程式時可能會導致整個主程式等待過久而發生execution timeout,因此,利用popen跟pclose就成了折衷方案,下面是騎蟲企啃米提供的Sample Code:

unix
pclose(popen('usr/bin/php script.php &', 'r'));

nsysumis94 發表在 痞客邦 留言(1) 人氣()

自視窗系統以及網頁問世以來,高互動式的UI環境帶給人類全新的使用體驗,突然間滑鼠變成了不可或缺的工具,而分頁這個功能則是自CLI盛行時代就有的基本瀏覽需求,網頁在大量資料表單的呈現上,分頁的需求更是兼顧了效能以及瀏覽便利性而必備的功能,但是,當有需要瀏覽大量頁面時,以滑鼠點選下一頁的方式似乎沒有直接以鍵盤熱鍵換頁來的直覺且方便。

前兩天幫同事寫了一個換頁熱鍵的功能,發現javascript只要透過overload事件處理函式即可完成鍵盤監聽(偵測)的動作,比起利用系統API做keylogger還要簡單,不過兩者應用方式不同,不能混為一談,廢話不多說直接看code:

<script language="javascript">

nsysumis94 發表在 痞客邦 留言(1) 人氣()

之前介紹的那一套XML/SWF Slideshow播放器經過威爺提醒是要去買License 的,不買License的話就只能播放10張圖片,不死心的我又只好再去Survey一下有沒有免費版本的Flash照片線上播放器,結果大部分都是需要用Ming(一個支援動態產生flash的函式庫)來做,不過用Ming的前提是伺服器要另外裝Ming libary,這種東西大概只有自己管的伺服器才有辦法這樣搞,所以,像是XML/SWF Slideshow這種可以讀XML的swf的彈性會比較好,總算皇天不負苦心人讓我找到了米奇的故事書介紹的JW Image Rotator

JW Image Rotator的功能更強,可自訂的功能更多(還可以邊播照片邊放音樂勒),但缺點是他網頁設計的很詭異,很難找到你要的東西,但是免費給你用的東西你還能說些什麼呢?說免費也不是完全免費,根據它的版權宣告,只要是不用於商業用途你可以免費的使用以及散佈。

接下來就和大家說明如何使用這JW Image Rotator

nsysumis94 發表在 痞客邦 留言(2) 人氣()

最近威爺跟雪倫剛蜜月完回來,愛出走除了多了一個討論區之外,也新增了很多照片,不過我用不太習慣威爺的照片瀏覽程式,個人覺得也許可以考慮Flickr的輪播方式(比起無名強太多了),剛好想到上次介紹給尼哥的PHP/SWF Charts的兄弟產品XML/SWF Slideshow可以做到類似的功能,所以就拿來玩了一下,之後希望推薦給威爺看看愛出走能不能也寫一套或者是使用類似撥放程式。

安裝:
安裝方式很簡單,只要將slideshow.zip抓下來解壓縮後得到的slodeshow.swf放在網頁可以call到的地方即可使用。

nsysumis94 發表在 痞客邦 留言(0) 人氣()

從以前學生時代利用很笨的拼圖的方式來做報表,後來發現了GD函式庫這個好用的東西,再加上好心人幫忙包成現成的Package,利用PHP來繪圖已經不再是困難重重的事,but GD函式庫畫出的報表長相還是非常的不給他友善,直到今天尼哥問我有關PHP做報表的事,根據他的需求上網查了一下,發現了PHP/SWF Charts這個東西,真的暴有趣的啦...透過幾個參數的調整就可以畫出有動畫的報表,超正點....有繪圖需求的朋友不妨考慮一下。

nsysumis94 發表在 痞客邦 留言(1) 人氣()

前一陣子峰哥跟我說有個PHP後門寫的超棒,還可以幫你改檔案的建立/修改時間,今天心血來潮,想說看一下到底是用哪個Function寫的,查了官網的文件,發現PHP也有個和Unix/Linux一模一樣的touch,以往像系統管理員大概都只會用touch來產生一個空檔案,很少會需要利用這函數改檔案的時間資訊,但是一旦系統被hack時,又急著檢查檔案時間,看看哪些檔案最近被改過,這......既然系統已經內建修改檔案存取時間的程式,再去查修改跟建立時間其實是件滿弔詭的做法(只能賭看看這個hacker有沒有想到去改檔案時間),Anyway,廢話不多說,馬上來談touch吧。

在Unix/Linux下面,man touch就可以查touch的用法:
NAME
     touch -- change file access and modification times

nsysumis94 發表在 痞客邦 留言(0) 人氣()

雖然現今大部分的網路設備都提供了親切的WEB介面讓管理人員能夠快速的完成設定,但是如果遇到了需要批次且大量的設定狀況,對於程式來說,WEB介面就顯得相當的難以整合,因此,若要批次完成某些設定,文字介面(Command Line Interface, CLI),依然是兼顧效能與開發方便的首選,不過,若使用傳統Telnet方式進行設定,難免存在著網路竊聽的風險,加密的連線設定方式當然因應而生,而SSH則是目前相當普遍的網路設備遠端設定方式。

問題來了,該如何開發一個WEB Base的整合性網管介面能讓此系統管理大量的網路設備呢?透過SNMP當然是種選擇,對於一般網路管理者來說,CLI應是再熟悉不過的工具,所以若能讓網頁程式利用加密連線來集中控管,也是不錯的選擇。

最近公司剛好遇到這樣的問題,雖然開發程式的不是我,不過對於網頁程式該如何用SSH連接網路設備我倒是滿有興趣的,總不會笨到還要透過網頁程式去call另外模組(maybe是C、C++或者perl)處理吧?上網找看看PHP有沒有支援SSH,果然,PHP有支援SSH2ㄟ....不過這個模組不是預設的,如果要使用要另外做些設定,因為在公司不像在學校,要幾台機器有幾台,所以只有Win32的環境可以測試,下面是我的測試心得。

nsysumis94 發表在 痞客邦 留言(9) 人氣()

今天強者我同事跑來問我程式裡面分數運算的約分該如何做?這一問,難倒我了,寫程式那麼久從來就沒做過分數運算,通常就是直接浮點數給他下去啦,後來想想浮點數運算越做偏差應該會越大齁?所以約分應該也是有道理的。

上網查了一下,原來分數運算要用最大公因數演算法(Greatest Common Divisor, GCD)來做阿~小學學的東西已經還給老師了,老師我對不起你....碩士唸畢業還不如一個小學生Orz

最大公因數求解可用直因數分解或者輾轉相除法來做,下面這個範例是網路上找到的輾轉相除法code:

nsysumis94 發表在 痞客邦 留言(0) 人氣()

最近因為工作繁忙,每天下班回到家都已經不是九點多就是快十點了,實在不像是一個在半公家機關上班的人該有的生活(反倒是漢堡王都要力行準時下班了,e04,怎麼比科技業還像科技業Orz),也因此暫停成長學習了一陣子,不找點事情來刺激自己是不行的。

其實想寫這玩意兒已經想很久了,大概可以回溯到研一的時候,覺得msn sniffer很有趣,但是小氣八拉要收費,sniffer我大四就寫過拉,有什摩了不起,只是本來打算用C寫的,時間實在是不怎麼多,用Jpcap的Tcpdump範例加了一個filter就成了一個陽春的msn snffer,只是心血來潮寫寫,適合java超新手使用,高手就別鞭我了,我只是吃飽無聊。


nsysumis94 發表在 痞客邦 留言(6) 人氣()

很多時候我們因為某些私人的理由希望透過一些方法來繞過程式對字串的檢查,最常見的方法就是將這些字元的編碼方式改變,例如將字元改為HEX的編碼方式,在入侵過程中,SQL Injection跟XSS都可以透過這個方法來繞過一些程式的檢查,字元的轉換我們可以透過查詢對照表的方式來做對應,但是這種方法非常的費時,所以如果有程式來幫忙處理的話豈不是輕鬆愉快?

XSS Cheat Sheet中已經有提供編碼互轉的貼心小服務,不過我還是上網找了一下在PHP中如何針對字元編碼轉換的程式,程式碼如下:

Binary 跟 ASCII互轉

nsysumis94 發表在 痞客邦 留言(0) 人氣()

這幾天心血來潮想研究一下在win32下面如何利用Socket來連線,因為新的程式語言太方便了,所以自從大一之後就沒再用過C語言寫一些底層的東西,很多連線的程式我大多都用JAVA或者是perl跟PHP來撰寫,不過目前常看到的病毒以及木馬很多都用C寫成,以後工作搞不好難免也要分析這些東西,乾脆趁現在比較閒的時候來複習一下C語言好了。

=================這篇完全是一篇心得備忘(對程式碼有興趣的再點吧)=================


nsysumis94 發表在 痞客邦 留言(6) 人氣()

最近因為工作上的需要每天必須以人工整合大量的CSV文件,由於這些routine的工作十分的繁複無聊,所以就找了一下看看在PHP有沒有辦法操作EXCEL的方法(人家就是習慣寫PHP嘛....),目前常見與Excel相關的問題主要有兩種,一種是如何透過PHP產生excel檔案,另一種是除了產生之外還要能夠進一步操作檔案,下面是網路上常見的解決方式:

  1. 1.產生Excel檔案:利用tab分隔將資料轉為xls格式輸出
    • 直接建立excel檔案
    • 輸出給Browser下載

    這個方法是目前PHP的程式中最為常見的方法,主要是將資料讀出後,利用標準的I/O輸出成以Tab分隔的格式,接著看是要存成檔案或者是要轉成html header讓使用者下載。
    <?
    $fp fopen("excel.xls""w");

nsysumis94 發表在 痞客邦 留言(4) 人氣()

1 2