About Me

我的相片
台北市, Taiwan
我是方選,
方白科技(finebind tech.)共同創辦人,
臺大資管所畢,
希望能幫助更多的人!

FB: http://fb.com/function1122
LINE: http://bit.ly/1foeZft (手機開啟點擊網址自動加入)

最新15則讀者回應

最新文章

FUNction's 上課筆記

Label Cloud

Blog Archive

FeedBurner

追蹤者

轉眼間電視上的明星都變成A圖的主角...

FUNction 於 2008年1月31日 上午9:07 發表

實在不想沾這件事...但是這也是本月最「醜陋」的事情吧,就用史家的心情記錄
根據hahajason 在網誌中所轉述,很多人覺得是真的(但希望不是啦)

描述幾個有趣的路人說法:
路人甲:現在周杰倫亞洲小天王的地位似乎被冠希搶走了,周應該要自爆一些親密照
路人乙:阿嬌之前換個衣服被偷拍就想自殺,那他三點全露要怎樣?(迷之音:跳海喔)
路人丙:楊士萱已經沒戲唱了Orz

這些事件讓我有一個感覺,藝人也是人,只是他們受到比較多人的關注而已...
身邊認識不少女生是冠希的fan,不知道他們的感覺如何
有人說他們會對冠希很失望,應該就不再love 他了,可是我覺得也未必吧

PS. 感謝症狀大大提供圖片
繼續閱讀全文 轉眼間電視上的明星都變成A圖的主角...

某公司網站的駭客事件 (三)

FUNction 於 2008年1月27日 晚上10:17 發表
上篇:某公司網站的駭客事件(二)
然冒出了第三篇...不知道會不會有第四篇阿(希望不要)

快人快語,我是來貼程式的,因為後來某公司跟我說...以我程試跑出來的報表判斷起來很辛苦,他們希望統計出每個IP 有幾次來訪記錄(從來訪記錄多的去抓出可疑IP)。我想...也是ok 啦,從之前的程式改一改,到昨天晚上12 點剛好改完。

程式如下...

<?php
$findStr = $_GET['q'];

$fileFolder = "C:/Windows/system32/LogFiles/";
$handle = opendir($fileFolder);
$listIp; //這是將來用來存放資料的資料結構陣列
echo "<h1>Query String: ".$findStr."</h1>\n";
while ($filename = readdir($handle)) {
$fullfilename = $fileFolder.$filename;
if(is_file($fullfilename)){
$fd = fopen ($fullfilename, "r");
$contents = fread($fd, filesize($fullfilename));
fclose($fd);
$find = strstr($contents, $findStr);

//稍微改良一下,只要找到(不用計算出現幾次),就進行查詢
if($find){
getIISLogIp($contents, $findStr);
}
}
}
closedir($handle);
getIPResult(); //顯示結果

# 一樣一次讀取一天的,但是讀取之後都放到資料結構裡
function getIISLogIp($contents, $findStr){
global $listIp; //取得全域變數(資料結構)
$lineArr = explode("\r\n", $contents);
$iptmp;
$output;
foreach($lineArr as $line){
$tmp = explode(" ", $line);
$time = $tmp[1];
$day = $tmp[0];
if($tmp[8] != null){
$ip = $tmp[8];
$sub = strstr($tmp[5], $findStr);
if($sub){//如果有找到
if($listIp[$ip] == null){

//這裡一樣是優化,先看看有沒有曾經查過該IP
//建立新資料(放入資料結構)
$listIp[$ip]['isp'] = getISPInfo($ip); //查詢IP反解

$listIp[$ip]['ip'] = $ip;

//將IP存入(這裡寫不好,但好像foreach 不能在這麼複雜的情況下
//讀取陣列的key)
$listIp[$ip]['count'] = 1;
$listIp[$ip]['data'][$day] = "<b>".$day.":</b> ".$time;
}else{ //有找到則附加到現有的資料結構
$listIp[$ip]['count']++;
if($listIp[$ip]['data'][$day] == null) $listIp[$ip]['data'][$day] = "<b>".$day.":</b> ".$time;
else $listIp[$ip]['data'][$day] .= ", ".$time;
}
}
}
}
}

# 輸出資料,依照出現次數排序,列出每個IP 出現的時間
function getIPResult(){
global $listIp;
if(sizeof($listIp) > 0){
uasort($listIp, "orderIPCount");

//使用自定排序(自定函式名為orderIPCount)

foreach($listIp as $ipstream){
$ip = $ipstream['ip']; //從資料結構中取出IP
$isp = $ipstream['isp']; //取出ISP資訊(反查)
$count = $ipstream['count']; //取出出現次數
$dataArr = $ipstream['data']; //取出時間資訊
$data = "<ul>";
foreach($dataArr as $oneday){
$data .= "<li>".$oneday."</li>\n";
}
$data .= "</ul><br />\n";
echo "<span style=\"font-size: 18px; font-weight: bold;\">".$isp."</span> (IP: ".$ip.")<br />\n".$count." time(s):\n".$data;
}
}
}

# 查詢ISP資訊(反查)
function getISPInfo($ip){
$host = gethostbyaddr($ip); //執行IP反查
if(strstr($host, "HINET-IP.hinet")){

//分析字串,如果反查結果有HINET-IP.hinet 則為中華固I
//其他依此類推...
$host = "中華電信固定IP";
}elseif(strstr($host, "dynamic.hinet")){
$host = "中華電信浮動IP";
}elseif(strstr($host, "seed")){
$host = "SeedNet";
}elseif(strstr($host, "giga")){
$host = "GiGa 超網路";
}elseif(strstr($host, "tfn")){
$host = "台灣固網";
}elseif(strstr($host, "so-net")){
$host = "So-Net";
}
return $host;
}

# 自定依照出現次數多寡排序的函式
function orderIPCount($count1, $count2){
$ct1 = $count1['count'];
$ct2 = $count2['count'];
return ($ct1 > $ct2)? -1 : ($ct1 == $ct2 ? 0 : 1);
}
?>


這是程式執行的結果

結果有去的事情發生了,發現造訪最多次某公司網站的IP 是奇摩機器人,最多的那個機器人在不到一年就有39次的記錄。如果還有下篇的話...我希望不要再出現程式碼了Orz,就跟大家回報一下中華電信會不會給某公司查特定時段的IP 使用者吧:-)

上篇:某公司網站的駭客事件(二)
繼續閱讀全文 某公司網站的駭客事件 (三)

某公司網站的駭客事件 (二)

FUNction 於 2008年1月26日 下午3:39 發表
上篇:某公司網站的駭客事件(一)
點惱殘的我,身邊伴著一台小筆電。我覺得在機櫃上找太辛苦,不只要半蹲著(說到這...為什麼每個機櫃的螢幕高度都那麼適中,站著用太矮,坐著用太高),還要把頭伸進去,於是我就要求把他們的Log 資料夾複製一份給我。

我拿著我的小筆電開心的找著,不時會有公司裡的人走過來問我找到沒。一開始,我用Dreamweaver 來找,因為他裡面有個"搜尋整個資料夾原始碼"的功能,但可能因為附檔名(.log)的關係,一樣徒勞無功。我開始腦殘了...打開Notepad++

請你記住一句名言:人,要作有挑戰性的事;任何重複的事,就交給電腦做!!

我檢視了一下Log 的格式,發現:
2005-12-16 01:29:43 192.168.1.5 GET /Default.htm - 80 - 192.168.1.101 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1) 200 0 0
這是查詢/Default.htm 這個網頁的記錄檔,可以看到來源IP是192.168.1.101,使用的瀏覽器是IE6.0,作業統是XP(Windows NT 5.1)

2005-12-16 03:40:23 192.168.1.5 GET /Search.asp q=FUNction's%20Blog 80 - 192.168.1.102 Mozilla/4.0+(compatible;+MSIE+6.0;+Windows+NT+5.1;+SV1) 200 0 0
這裡多了一個"q=FUNction's%20Blog",是他的查詢字串,由於前一筆資料中沒有查詢字串,所以用一槓"-"代替

好了...這很有規律


  • 檔案名稱以日期編號
  • 來源IP 在每筆資料中第九個位置
  • 瀏覽時間在每筆資料中的第二個位置
  • 查詢字串在每筆資料中的第六個位置

找到這樣的規律,只要寫個簡單的程式,就可以把所有記錄當中查詢某個特定字串的IP找出來囉 ^__^ 由於小弟學藝不精,程式語言會的不多,剛好手上有環境(小筆電裡有Apache+PHP),就用現成的環境寫寫看。

以下列出程式碼,短短66 行:

<?php
$findStr = $_GET['q'];
$fileFolder = "C:/Windows/system32/LogFiles/W3SVC1/";

//這裡指定存放Log 的資料夾
$handle = opendir($fileFolder); //開啟資料夾
echo "<h1>Query String: ".$findStr."</h1>\n";
while ($filename = readdir($handle)) {

//依序將資料夾內每個元素(檔案、資料夾)名稱取得
$fullfilename = $fileFolder.$filename;

//組合成完整檔案路徑
if(is_file($fullfilename)){
//如果是檔案的話
$fd = fopen ($fullfilename, "r"); //開啟檔案
$contents = fread($fd, filesize($fullfilename));

//將所有資料傾印到變數$contents 裡
fclose($fd);
//關閉檔案
$times = substr_count($contents, $findStr);

//計算$contents 裡出現多少次要查詢的字串
if($times > 0){ //如果出現一個以上就要查詢他的IP
echo "<h3>".$filename."</h3>\n";

//輸出檔案名稱
getIISLogIp($contents, $findStr);

//列出該檔案中有查詢的IP
}
}
}
closedir($handle); //關閉資料夾

#讀取其中一日的記錄,標明哪些IP 有送出我們要追聰的查詢
function getIISLogIp($contents, $findStr){
$lineArr = explode("\r\n", $contents);

//使用換行切開檔案(每筆記錄一行)
$iptmp;
$output;
foreach($lineArr as $line){ //逐行檢查
$tmp = explode(" ", $line);

//使用空白" "切開每一行的資料
$time = $tmp[1]; //時間在第二個位置
if($tmp[8] != null){
$ip = $tmp[8]; //IP在第九個位置
$sub = strstr($tmp[5], $findStr);

//查詢字串在第六個位置
//strstr(文字, 查詢目標)
if($sub){//如果有找到
if($iptmp[$ip] == null){

//這裡是優化,如果這個IP 不是曾經查過的,則進行反解
$hostName = gethostbyaddr($ip);

//使用類似nslookup 查詢該IP的主機名稱
$iptmp[$ip] = $hostName;

//將該IP 為key ,把主機名稱存入優化陣列
$output[$ip] = $hostName." (".$ip.") - ".$time;

//建立要輸出字串
}else{

//如果曾經反解過,就不要在查了...反解超浪費時間
$output[$ip] .= ", ".$time;

//將時間接在輸出字串之後
}
}
}
}

//如果有輸出字串,則對輸出字串的ISP 做分析
if(sizeof($output) > 0) getISPColor($output);

}

#針對普遍的ISP,進行輸出變色
function getISPColor($ipArray){
echo "<ul>";
foreach($ipArray as $ipData){
if(strstr($ipData, "hinet")){

//中華電信為紅色
echo "<li><span style=\"background-color:#FF0000; color: #FFFFFF;\">".$ipData."</span></li>\n";
}elseif(strstr($ipData, "seed")){

//Seednet為綠色
echo "<li><span style=\"background-color:#00FF00;\">".$ipData."</span></li>\n";
}elseif(strstr($ipData, "giga")){

//Giga網路為藍色
echo "<li><span style=\"background-color:#0000FF;\">".$ipData."</span></li>\n";
}elseif(strstr($ipData, "tfn")){

//TFN網路為黃色
echo "<li><span style=\"background-color:#FFFF00;\">".$ipData."</span></li>\n";
}elseif(strstr($ipData, "apol")){

//亞太電信為亮藍色
echo "<li><span style=\"background-color:#00FFFF;\">".$ipData."</span></li>\n";
}elseif(strstr($ipData, "so-net")){

//So-Net為紫色
echo "<li><span style=\"background-color:#FF00FF;\">".$ipData."</span></li>\n";
}else{
echo "<li>".$ipData."</li>\n";
}
}
echo "</ul>";
}
?>

這隻程式可以檢查整個資料夾裡的IIS Log ,以"每日"為單位將當日送出某查詢字串的IP 與要求時間列出來,此外,還有將幾個主流的ISP 所提供的IP 標上顏色(例如中華電信是紅色),以方便閱讀。 但是...因為DNS反查非常的浪費時間...3XX MB的Log 檔配合8M/640的網路加上Intel 雙核心處理器會花將近20 分鐘執行的時間,所以如果Log 檔案多的時候,記得要先調整機器上的php.ini 喔。

程式執行結果:


查出IP 之後,就要去電信公司查該時段該IP的使用者是誰了,但是據說中華電信會保護顧客隱私,不一定會有結果...接下來已經不關我的事了,但是其實我也很想知道中華電信到底會不會給呢。經歷這件事,讓我覺得我還是比較喜歡當"系統工程師",雖然人家都說程式設計師比較有前途,但是系工還是比較有成就感啊!! :-)

下篇:某公司網站的駭客事件(三)
繼續閱讀全文 某公司網站的駭客事件 (二)

某公司網站的駭客事件 (一)

FUNction 下午3:05 發表
下篇:某公司網站的駭客事件(二)
家國際知名的公司,他們的網站發生了一些事,由於內容已經牽涉到商業機密,但為了讓讀者有來龍去脈的感覺,小弟在這裡杜撰這件事情的經過:

話說昨天下午上班上到一半,接到一通電話,要我去某公司一趟,據說事情緊急且重大。我騎著車到那裡,與找我的人在公司樓下會合,一起進入該公司的機房。內部員工告訴我事發的經過,簡單的說,就是他們公司的網站被入侵了,但是他們找不到入侵的記錄,要我幫忙找出來。(我心想,你們公司沒有IT嗎?? 結果好像真的沒有)

其實在電話中我已經有譜了,我逛過他們的網站,用ASP 寫的,路上猜想,一定會碰到灰暗的Windows 2000 Server...不過令人高興的,他們的伺服器是Windows Server 2003 。雖然身為一個MCSE ,但不知道多久沒碰IIS 了,但是我印象中IIS 預設會保留Log ,而且也不會像Apache 一樣一個禮拜刪一次Log ,所以應該極好找,即使我不確定Log 放哪裡。 (可是他們公司的員工卻說找一個禮拜找不到 = =)

來到了伺服器上,我假裝熟練的打開IIS 管理主控台,展開"網站"、"該公司的虛擬伺服器",按右鍵點擊"內容"(我記得這裡有設定要不要啟用Log ,預設為啟用,真的被我找到...謝天謝地)
我們可以點選"內容"看到更詳細的設定(這張圖是我後來為了寫Blog 另外照的)


點擊"內容"後可以看到這個視窗(這張也是),這裡顯示Log 檔存放的目的地,還有Log 檔的命名規則。由預設值我們可以看到,伺服器每天都會產生一個獨立的檔案,名稱以日期為編號。
例如:2008/01/26 的記錄檔會命名為ex080126.log 。此外,檔案存放在C:\WINDOWS\system32\LogFiles\W3SVC1\ 下面。

接下來我們就要逐一開起Log 檔案,檢查曾經要求過某個網址的IP 記錄了。我先用Windows 內建的搜尋,針對特殊字串查詢,可是卻"找不到記錄"。怎麼辦,難道我要一篇一篇慢慢察,從2005 年到今天耶...還是有什麼方法?

下篇:某公司網站的駭客事件(二)
繼續閱讀全文 某公司網站的駭客事件 (一)

Javascript 實用的一些技巧

FUNction 於 2008年1月25日 下午4:42 發表
N年以前的文章了(剛剛草草看過去...應該有些技巧已經不能用了)
不過沒什麼關係,我覺得有些還蠻實用的
方便以後查詢:http://publish.it168.com/2005/1001/20051001000901.shtml

至於這篇...真的頗實用
非常實用的javascript 代碼大全:http://changxm.zhan.cn.yahoo.com/articles/071207/72994_11.html
繼續閱讀全文 Javascript 實用的一些技巧

Office Communicator 2007 狀態及代碼

FUNction 上午10:34 發表


TypeAvailabilityDescription
Available3500User is available
Busy6500User is busy
Do Not Disturb9500User should not be interrupted
Be Right Back12500User is not currently reachable
Away15500User is not at their desk
Offline18500User is offline

上為Microsoft Office Communicator 2007(可以想像程公司內部的MSN) 狀態的代碼。程式設計師可以參考Availability 的代碼指定機器人的上線狀態。
繼續閱讀全文 Office Communicator 2007 狀態及代碼

城裡的月光 KTV@Home (YouTube)

FUNction 於 2008年1月24日 晚上11:08 發表

星期五因為有事,所以我星期四晚上帶妹妹。
就如我上次答應大家的,現在來聽聽他個歌聲~~
她這次要為大家帶來「城裡的月光」(據說是幼稚園教的)
今天也帶她唱幾首張韶涵的歌...但感覺他比較喜歡High的 ex. 頭號甜心
但其實跟不上就是了

順帶一提:
用YouTube 體驗K歌生活是我弟教我的,超省錢,而且最新的歌都有!! 我們一起來練歌吧
喔,對了,銀色的Mic 其實是視訊攝影機(上面有小Mic),超將就的
繼續閱讀全文 城裡的月光 KTV@Home (YouTube)

MySQL 將查詢結果存入資料表

FUNction 晚上10:43 發表
資料從資料庫查詢出來後,我們想將查詢結果存入新的表格,我以前都會用兩個SQL 語法,再搭配程式的邏輯,例如我們想從訂單中取出每一本書最後是什麼時候被訂的,然後將資料放在另一個資料表中,我會先用SELECT 語法:
SELECT book_id, MAX(time) FROM orders GROUP BY book_id;

然後將結果存在變數,用迴圈執行很多次以下SQL 語法(有幾本書執行幾次):
INSERT INTO orderlist (book_id, last_time) VALUES (查出來的書ID, 查出來的時間);

但是其實有更帥的方法,只要一行語法
如果我們要將查出來的資料直接插入資料表中(達到上述效果),我們其實可以用以下語法:
INSERT INTO orderlist (book_id, last_time) SELECT book_id, MAX(time) FROM orders GROUP BY book_id;

或者我們想要將查詢結果直接開新資料表儲存:
CREATE TABLE orderlist SELECT book_id, MAX(time) FROM orders GROUP BY book_id;

這樣一來:
  • 減少執行{資料列數}次的SQL 語法(只要執行一次)
  • 減少程式記憶體的存取量
  • 減少程式碼並消除無用的邏輯
真是一舉數得 :-)
繼續閱讀全文 MySQL 將查詢結果存入資料表

給未來的你

FUNction 於 2008年1月20日 晚上7:15 發表
前言:
我是一個重度使用電腦的工作者,自詡為一個工程師,在電腦前面的時間只有工作,沒有休閒。很多人問我,為什麼大學四年都沒有女朋友,是不是我的要求太高。我以前都回答沒感覺,但是漸漸的,我知道所謂的感覺是默契,是不能強求的。這幾天,也慢慢的認清我喜歡的生活模式,假想現在有個"你",這天(這真的是假想的),是你的生日,我沒準備什麼東西,只寫了這張卡片...


未來的你:
這些日子來,我放了很多話在心裡,很感謝你陪我走過的這段日子,我也好希望我們能一直走下去,直到永遠。

我知道我是個生活無趣的人,我不知道約會要去哪裡,也不知道怎麼選間好的餐廳;我每天都很忙碌,在電腦前的時間遠遠超過跟你在一塊的時間。我知道你也是個大忙人,也有著做不完的事,做事的時候一樣不希望被打擾。但是,我想你一定也有很多的事情想抱怨,也想幫心找個避風港。

每天晚上,都可以看到你上線,不是忙碌就是離開;雖然我們聊很多次MSN,但是每次都只講一兩句話。老實說,我很喜歡這種生活方式(講一兩句就繼續作事><),我一想到什麼事,都會馬上跟你講,我知道我們都在忙,但是這兩顆心,不管距離多遠,卻仍然能心有靈犀。你都曉得我在想什麼,我不需要說的太多;我也很開心,因為你想到什麼事都會跟我講,雖然有時候我的回應有些冷漠,我相信你懂,我不是不關心你。

我曾經想過,不知道這種相處模式能維持多久,瓊瑤說:「女生總是在意身邊的男生。」,我好怕不在你的身邊。也曾經想過,每個禮拜至少要約會一次,不用去看電影,至少要一起吃個飯、散散步,但是,我不知道這樣會不會變成一種型式,漸漸的失去初衷(這好像是藉口)。

我,時時想著你,雖然不能說到每一秒鐘,但是至少每分鐘都會想到。我不用猜你在做什麼,即使你總會告訴我,可是我更知道,你一定也在想著我。有時候,我在街上看到漂亮的女生,我會不由得閉起雙眼,想起你,因為時時想著你,讓我用生命去珍惜你。

這天是你的生日,一定讓你很失望難過,雖然我沒有忘記,但你一定覺得...就這樣而已喔。就如你知道的我很省,但不應該在這個時候省;我很忙,但也不該連買個禮物的時間都沒有。我想跟你說,雖然只有一張卡片,可是我真的很用心,很用心。我相信你懂的,這張卡片載著我滿滿的心意,希望你能一直很快樂,一直在我身旁。


後記:
這張卡片雖然全是憑空杜撰,但是我相信能完全描述我內心的情緒。如果哪一天,真的能有個"你",你一定會懂,也能接受,這最真實的我。
繼續閱讀全文 給未來的你

Blogger 繼續閱讀功能

FUNction 下午6:10 發表
感謝小魚 提供
繼續閱讀懶人加強版 http://cjhtech.blogspot.com/
增加很多Blog 基本的"繼續閱讀"(不一次顯示完所有文章的功能)
你可以參考上述網址安裝說明
也可以參觀小魚 的Blog看看他如何使用喔!!
繼續閱讀全文 Blogger 繼續閱讀功能

跟妹妹玩CD 盒做成的骨牌

FUNction 於 2008年1月18日 晚上9:28 發表

我們排成大愛心


這次做成正方型,不過在推倒時...居然有意想不到的結果

星期五晚上基本上就是我帶妹妹的時間,也是我培養教育愛的時候:P
這次用CD 合當骨牌是昨天我媽的韓劇在演的,點還不錯
繼續閱讀全文 跟妹妹玩CD 盒做成的骨牌

我與ASP.NET 的第一次接觸

FUNction 下午5:49 發表
沒錯...我今天才第一次寫ASP.NET ,所以我要在此鼓勵大家
如果你已經開始寫ASP.NET 的話,你的成就一定超越我了;如果你還沒開始寫,別灰心,我也比你早寫一天而已(而且以後不一定會一直寫)

這個網頁使用者傳給他一個URL 參數,就可以自動讓使用者下載同資料夾裡的檔案(這什麼爛功能Q__Q)
假設網頁名稱叫做:getfile.aspx
在同資料夾裡有檔案叫作: function_wei.doc

使用者在網址列輸入: http://localhost/getfile.aspx?path=function_wei.doc
那支aspx 就會讓使用者下載 function_wei.doc
就這麼簡單Q__Q,這支程式感覺起來很無用,但裡面牽涉兩個重要的aspx 方法:Page_load和 接收URL參數,事不宜遲,我們來看程式碼吧:

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
string tmppath = "";
//這裡就是Page_load 囉,當載入網頁就會執行這裡:P
void Page_load(object sender, EventArgs a)
{
if (Request.QueryString["path"] != null)
{
//在呼叫網頁給的參數path 可以用

//Request.QueryString["path"]取得
tmppath = Request.QueryString["path"];
}
}
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>ASP.NET Part 1</title>
</head>
<body>
<p align="center"><font face="Arial" color="#0000ff" size="5"><strong>The file downloaded.</strong></font></p>
<p align="center">If <i>"<%=tmppath %>"</i> do not auto download, click [<a href="<%=tmppath %>">here</a>]</p>
<iframe style="display:none" src="<%=tmppath%>" />
(其實是很鳥的用一個IFrame 把檔案指定在裡面Q__Q,這裡值得一提的是我們用<%=tmppath %> 就可以輸出C# 的變數,帥吧)
</body>
</html>


我這方面還很弱,請各位高手指正囉 :-)
繼續閱讀全文 我與ASP.NET 的第一次接觸

IIS+ASP.NET 名稱的開頭使用無效的字元。

FUNction 下午3:05 發表

剛寫完一個ASP.NET C# 的文件,放到IIS的目錄去 囧@@
居然出現 "名稱的開頭使用無效的字元。處理資源..."
在網路上找一找...提供以下解決方法

解決步驟:
  • 在命令提示字元切換到C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
  • 執行aspnet_regiis -i (這是向IIS註冊.net 2.0)
  • 再來執行 iisreset (這時候記得把瀏覽器視窗關閉喔)

大功告成,重新開啟應該就ok了

為什麼會這樣呢?
據說試安裝順序的問題,可能是我先安裝.Net 2.0 再安裝IIS,所以.Net 沒有跟IIS 註冊的原故

參考資料:http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=792490&SiteID=14
繼續閱讀全文 IIS+ASP.NET 名稱的開頭使用無效的字元。

UCMA Simple Bot (國人自製) Part 1

FUNction 上午11:09 發表
國人就是我...
自從那個死老外沒有回應我之後
國人仍然不放棄,結合IDKStudioServerInteractiveBot 研發出超級輕巧的機器人MOSSAgent
這個機器人目的是打算能與MOSS 溝通(目前沒有實做這個部分,只有機器人對話的功能)
機器人的功能有:
  • 自動接受Communicator 邀請
  • 能回應使用者自Communicator 發出的文字訊息
  • 能接受兩個以上的使用者

機器人的改進有:
  • 重要部分的程式碼採用中文註解!!!
  • 自動抓取Tls憑證(IDKStudioServer無)
  • 能調整上線狀態(IDKStudioServer與InteractiveBot均無)
  • 只要簡單設定機器人就可以使用(依環境更改Settings.xml)

以下截取部分機器人畫面:

從Communicator 用戶端與機器人對話截圖(可以發現機器人對話模式與我很像><)
機器人介面,畫面中可以控制機器人登入,也可檢視機器人收到的訊息


只要編輯Settings.xml 就可以設定機器人
這個地方我們會發現,讓機器人登入不需要設定使用者的密碼,不要懷疑也不要害怕,這是因為我在程式碼建立endpoint 的時候就寫成不需要密碼(因為寫"需要密碼"會有例外Orz)


這是他接收訊息的程式碼,用個很簡單的switch 判斷使用者輸入的字義:P

看了這麼多,如果你是開發者的話應該最有興趣的是下載的連結,我不是一個小氣的人,就放在這兒囉
[download source code]

如果:
  • 你覺得這個程式對你有幫助,請你回復一下讓我知道喔^^(如果都沒回覆我下次就不放source 了Q__Q)
  • 有什麼問題也可以問我,因為這程式我大部分都看得懂(雖然是我寫的:P)
繼續閱讀全文 UCMA Simple Bot (國人自製) Part 1

為什麼我不考研究所

FUNction 於 2008年1月8日 晚上8:47 發表
在雙重雙刀論證下,我今年決定放棄研究所...

第一個雙刀論證:
前提:我爸說如果要出國念書就念大陸的研究所,特別是北大
第一把刀:如果我夠厲害,我就自己創業了,不會去大陸念研究所
第二把刀:如果我不夠厲害,我考也考不上大陸的研究所
結論:我不會念國外的研究所

第二個雙刀論證:
前提:如果為了未來的出路,就要念台北的國立研究所,就非台政不念
第一把刀:如果我夠厲害,我就能考上台政研究所,也不可能到現在都還沒開始準備
第二把刀:如果我不夠厲害,我考也考不上台政的研究所
結論:我不會念國內的研究所

基於這四把刀,我今年不可能念研究所了,所以專心創業吧
Jill 說2008 年是天蠍座創業的時機!!!
繼續閱讀全文 為什麼我不考研究所

創意網站TagMe 幫你貼標籤

FUNction 於 2008年1月4日 晚上8:30 發表


交大學生的點子
就是在幫你的朋友貼標籤,再從標籤去看標籤屬於哪些人
逛一逛,老實說並不怎麼好逛><

網址:http://140.113.141.5/rm2/
這是開發者的Blog:http://egist1005.blogspot.com/2008/01/tagme.html
繼續閱讀全文 創意網站TagMe 幫你貼標籤

2007 MSN 機器人大賽

FUNction 於 2008年1月3日 晚上9:39 發表

咦!? 現在不是已經2008了,還要參加2007的機器人比賽嗎?
對不起,小弟資訊落後,還來不及Update,但是這個比賽確實正在進行喔

這是中國微軟與贏思軟件共同舉辦的機器人大賽,不需要程式基礎也可以來報名,只要有點子!!
基本上就是用它們提供的工具開發一個MSN機器人,大家都可以加入這個機器人,機器人提供一些有趣的服務,例如報股票、講笑話...

參賽期間為:2007年12月18日至2008年3月16日
他們會在四月份公佈得獎名單(放心,我目前沒打算要參加)

如果你精通於程式語言,你可以使用微軟提供的SDK開發 進入SDK開發步驟
如果你真的半路起家也沒關係,你可以使用建立好的模板開發 進入模板機器人開發步驟

等到你寫完機器人之後 你要把小i機器人(i@xiaoi.com) 加入你的MSN聯絡人清單
跟它說:「contest」 接著就可以上傳你的作品了(帥吧)

其實我覺得不一定要參賽,不過如果有時間
你可以自己寫一個機器人跟朋友玩,說不定下一個紅的就是你 :-)
活動網頁:http://contest.xiaoi.com/ (這不是置入性行銷,只是真的覺得很酷)
繼續閱讀全文 2007 MSN 機器人大賽

Wiimote 實現Multi-touch 與3D 的特別報導

FUNction 上午11:45 發表

實現Multi-touch (多重觸控)
以後做簡報想要來點花招可以試試看

實現3D
真是太神了...

其實如果大家有在注意這這方面可能早就知道癮科技有報導過
不過礙於我真的太忙了,沒時間整理
現在偷到一點自己的時間,也沒整理得很好,真是抱歉了
如果你在微軟待過,說不定你會覺得Johnny Lee 跟我們的Peter 有點神似呢

技術人員請注意:
原來Wiimote 是用C#開發的,而且程式碼放在Source Forge上
這是他們的開發主頁 http://sourceforge.net/projects/wiiwhiteboard/
這個連結可以看到程式碼 http://wiiwhiteboard.cvs.sourceforge.net/wiiwhiteboard/source/windowsxp/WiimoteLib/Wiimote.cs?view=markup

特別感謝deduce 提供資訊與E-Office 上的berlinch2000 讓我注意這塊
繼續閱讀全文 Wiimote 實現Multi-touch 與3D 的特別報導

UCMA Simple Bot Part 0

FUNction 於 2008年1月2日 下午5:42 發表
如果你是透過Google 或其他Search Engine 找到這篇文章
我想跟你說,你不用繼續看下去了
因為這不是教學,而只是我現在遇到的問題
當然,只是現在,我相我應該會有辦法解決

我想要用Console 的方式寫一個UCMA 的機器人
只要基本的功能就好,我今天已經讓機器人能與OCS Server 註冊了
但是當程式執行完後機器人就結束了 囧
我不知道要怎麼讓機器人像伺服器一樣一直開在那裡
難道一定要用Win Form 或是WF,我不知道
但是我以前看過C# 的HTTP Server
只用了一個 While(true){} 就讓伺服器一直執行著
不過UCMA 似乎不能,因為那不是用socket 吧

於是我到MSDN 論壇去問問題(雖然我覺得應該是沒人會理我)
以下是我的問題(感謝Jill 幫我校正):
Is UCMA can be a server which could receive and response Message to communicator client in console application?I followed MSDN(http://msdn2.microsoft.com/en-us/library/bb773385.aspx)
and my server can register in OCS server but it over when program is finished
I am not sure if I can use "While(true){}" like simple http server(http://www.123aspx.com/PostReview.aspx?res=75)I
have no idea about UCMA server, is WF only way to solve it

Thanks


原文網址:http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2619023&SiteID=1
繼續閱讀全文 UCMA Simple Bot Part 0

新年新希望→難得當個受歡迎的人

FUNction 於 2008年1月1日 上午11:35 發表


公告了一個月,終於啟用新的MSN帳號(舊的不會再用了)
故意等到一月一日才登入,讓自己過過受歡迎的人的乾癮
我想這是我這輩子同時加入最多人的時候了吧

謝謝你們,我的好朋友
我相信現在加我的這些人,都是關心我的人,也都是我要關心的人!!
現在連絡清單很乾淨,而且都是些會講話的朋友(除了一些非加不可的長官們)
新年新希望,大家一起努力吧^^
繼續閱讀全文 新年新希望→難得當個受歡迎的人