1. Spam Comments And CAPTCHA...

    也許該值得高興吧, 本站都用 robots.txt 擋掉 google 等 search engine, 只因為目標只是放在給認識的人看的 blog, 不想太公開, 所以一直以來都相安無事. 一直到最近, 大概看的人變多了, 也被外面一堆不知名的 bot 盯上, 開始一直有一堆廣告的 comments 貼到 blog 上... [:@]

    試了 community server 內建的 spam rule, 是檔掉了一些, 不過仍然有一堆漏網之魚... 想想還是跟各大網站一樣, 找個 CAPTCHA 的元件來用用. 在 community server 官方網站提供了一套, 在 msn 問了 darkthread 前輩, 他也提供了兩個網址, 也研究了一下...

     

    每次看到這種怪名字 (CAPTCHA), 就很想查一下它到底是啥字的縮寫, 查了 wiki, 原來是 "Completely Automated Public Turing test to tell Computers and Humans Apart" ... 比較有趣的是 turing test, 唸資工的大概都記得啥是 turing machine, 而 turing test 也是 Alan Turing 提出來的, 大意是在探討機器怎樣才算是有 "智慧" 的程度? 如果讓一個人 (測試者) 跟另一個真人及機器對話, 而測試者如果沒有辦法從對話內容中猜出誰是真人, 誰是機器, 就代表這個機器已經通過 turing test, 就算是具有某種程度的 "智慧", 而不只是會運算的計算機了...

    即使到現在, 連 IBM 深藍都打敗棋王了, 不過終究也只是運用高速的運算加上龐大的儲存空間, 超越人類對邏輯深度及廣度的挑戰而以. 這種比賽人類遲早會輸的... 像我打牌幾回合以前出過的牌都忘光光了... 哈哈... 不過這種還算不上是 "智慧". Microsoft 有兩個 msn bot 還蠻有趣的, 雖然一看就知道是 robot, 不過還能跟你聊上一兩句... 問問題也只要直接用白話打進去就好. 要跟它聊天很簡單, 只要把這兩個 account 加到你 msn messanger 的聯絡人...

    1. Encarta 百科全書: encarta@botmetro.net
    2. 會講中文的 "聰明小孩" (只會簡體 :@): smarterchinesechild@hotmail.com

    近來網站很流行讓你看一張圖, 然後要你把裡面的字 key 進表格內, 目的就是要判定填資料的是 "真人", 而不是 "機器"... 不過這樣就要套上 CAPTCHA, 就有點過頭了, 現在 CAPTCHA 已經變成這種作法的代名詞了, 這個字也被註冊過, 不能亂用... 不過人跟機器的辨識, 真的只靠這種圖片就可以解決了嗎? spammer 開使採用 OCR 的技術來反擊, 辨識率約有 80%, 但是剩下的 20%, 不知道有多少比例是連真人都認不出來的圖?

    辯別人跟機器的戰爭, 不應該只靠肉眼跟OCR做區隔, 人腦對資訊的 "理解" 能力是另一個關鍵... 如果有些問題是目前的 bot 回答不出來的, 那麼這就是個有效的辯別方式... 扯遠了, 我只不過是要講一下 CAPTCHA 的由來而以 [:P]... 不過老實說, 我還真不喜歡網站加這些東西, 毫無意義的文字, 有些已扭曲到我真的看不懂 [:|]  連 I 跟 1, 0 跟 O 也都分不出來, 還要試好幾次才過, 嘖嘖... 為了防 spammer 苦了人... 但是為了保障我自己家的 blog 不受 spammer 侵襲, 還是得試一試. 上面提到的那幾套, 都很盡責的能正常的運作, 不過看了就是不大爽...

    "如果有些問題是目前的 bot 回答不出來的, 那麼這就是個有效的辯別方式... "

    想想也沒幾行 code, 就自己寫了一個簡單的. 反正暫時還不會有 spammer 針對我的 blog 寫破解的程式吧 [H], 我採用的方式是隨機產生一些問題, 要 user 輸入正確的答案, 答對才判定你不是 robot ... 當然這些問題都不難... 目前做的問題有三大類:

    1. 簡單的數學問題, 就兩個個位數字的運算.
    2. Echo. 題目只是很簡單要你跟著打一段字而以...
    3. 靜態的題庫, 另外在 xml 檔裡先建好題目 & 答案的配對, 隨機挑一題出來...

    Code 本身倒是很簡單, 完全沒有什麼特別的, 我就不講了. 為了 deployment 方便, 我連 code 都藏到 .ascx 裡了... 沒有其它的 .cs 跟 .dll 要安裝, 純脆以方便為原則.

    這方法只是簡單的題庫測驗的簡化版而以. 它跟真正的 turing test 仍然有好大一段差距. 因為 tester 也是機器, 不是人, 而且要簡化到單一問題的回答, 不是一連串的對話. 要由機器來判定對方是不是真人, 真的不是簡單的課題.... 我只能實際一點, 做到夠用就好..

    效果如何? 大家捲到底下試看看就知道了, 網頁 refresh 一下就可以隨機換一題..., 靜態題目我目前都放腦筋急轉彎類的, 當然我都有附解答, 免的大家答不出來, 掛在那邊不能留言... Echo 型態則只是要大家無腦一點, 跟著打一些口號而以, 像 "叭樂雞萬歲" 之類的 [H] .....

    果然這樣看起來爽多了, 也比較有趣一點, 反正目的達到就好 [:D], 如果大家有啥有趣的腦筋急轉彎也提供一下, 看看這樣 page view 跟 comment 數會不會衝高一點 [H]

    2007/03/02 .NET 作品集 技術隨筆 有的沒的

  2. 新手機真是讚 (y) - III

    勸敗就是要像格鬥遊戲一樣, 要一口氣使出連續技, 才有殺傷力... 哈哈, 昨天下班走路經過伯朗咖啡, 正好講完電話, 就順手在店門口站著借用店裡的無線網路收 RSS ..

    才在想怎麼這次收的比較久... 後來收完邊走邊看, 才發現原來  DOPOD bondle 的這套 rss reader 還會幫你把圖給抓下來啊, 同時還幫你 resize ..

    果然有圖有真相, 在手機上看到小熊子拍的櫻花, 突然覺的整支手機的格調就不一樣了, 哈哈.. 不過最近手機越用越兇, 沒事躺床上就開 bt 更新 rss 當報紙看, 三不五時就拿來按一下, home screen 放的 plug in 變多, 現在三天就得充一次電... Orz, 真是有一好沒兩好...

     

    2007/02/28 敗家 有的沒的

  3. 如何在執行檔 (.NET) 裡附加額外的資料?

    離上一篇有營養的 post 已經隔好久了, 中間都是貼些五四三的, 哈哈... 今天再來貼點跟 .net development 有關的心得...

    這篇要講的, 就是想做的像一般壓縮軟體, 可以把壓縮檔包成一個可執行檔, 這個執行檔包含解壓縮的程式, 同時也包含你自己資料, 包成單一執行檔無論攜帶或保存, 甚至隨時要解開都很方便...

    看起來很普通的功能, 沒想到要實作起來還真麻煩... 一般標準的開發工具沒辦法產出這樣的 code, 頂多在 compile time 把一些資料當成 resource, 一起 compile 進 exe 內部. 不過即使如此, 這些動作都是在開發階段就完成的, 跟一般自解壓縮檔不同, 是執行階段才完成的...

    跟同事討論了一下, 同事就土法練鋼, 試了第一種作法: 直接把 data 附加在 .exe 的後面.

    出乎意料的, 這個方法竟然可行, 而且執行也沒有問題, 不過心裡就是毛毛的...

    1.  
      1. "是剛好嗎? 會不會以後就突然不行了?"
      2. "這作法好像病毒喔, 會不會被防毒軟體檔下來?"
      3. "這種作法能通過 PEVerify 檢查嘛?"
      4. "以後加上 signature, 還能執行嘛?"
      5. "....."

    上面的動作, (1), (2) 還沒碰到. (3) 對於沒有簽章過的可以, (4) 沒去試.. 不過為了免除這些疑慮, 只好朝向其它較 "正規" 的作法... 從官方的工具著手.

    為了避免第一種作法的疑慮, 整個流程到最後產出 .exe 為止, 都必需用官方認可的作法, 所以我能做的動作只剩下把原本很簡單的動作盡量拆解, 盡量拆到只留最後一步, 其它可以先作的一次做掉, 留最後一步在 runtime 時才呼叫外部工具來執行.

    原本很簡單的 windows application project, 在裡面加上 embedded resource, build 就可以搞定的事, 現在必需這樣做:

    1. 除了要外加的 embedded resource 之外, 其它的部份先用 csc.exe 編譯成 module
    2. 把 (1) 編譯好的 module 跟外加的 file(s), 用 al.exe 產出一份完整的 .net assembly (.exe)

    其中 (1) 的部份可以事先作好, 未來在執行時就不用再重複 (1) 的步驟, 只要拿 module file 不斷的搭配不同的 embedded resource 就可以產出包含不同 data 的 exe file, 就像典型的自解壓縮檔那樣. 我簡單寫了一個 sample code, 試了一下, 可行. 有興趣的人可以抓去研究看看... 我的作法是:

    1. 開一個 VS2005 的 windows application project: StartApp, 程式內容很簡單, 就是把 name 為 "attachment" 的 resource 存成暫存檔, 然後用 shell execute 去開啟它, 開完後把暫存檔砍掉, 程式結束.
    2. 這個 project 不能 build, 得另外寫 command line 把它編譯成 module (start.module):
      csc.exe /out:startup.module /t:module /recurse:*.cs /resource:Form1.resx
    3. (2) 產出的 start.module 搭配圖檔 paint.jpg, 藉由 assembly linker 把它們結合成單一的可執行檔 (start.exe):
      al.exe /embed:paint.jpg,attachment /t:exe start.module /out:start.exe /main:StartApp.Program.Main

    大功告成! 產出的 start.exe 執行之後, 按下 [RUN] 就自動開啟圖檔, 就像你直接在 paint.jpg 上按兩下一樣... 完全達到我的期望 :D

    這個作法看起來比較好, 因為產出的過程完全都是正式的作法, 不大會有什麼問題, 但是它也有缺點... Orz

    1. Visual Studio 2005 的各種 project type, 並沒有包含 module 這種類型... 查了一下, 它只有在講解 .net 內部架構, SDK, 跟 assembly 等基礎知識的地方有提到... 除了直接用 csc.exe 之外, 沒有很簡單的工具可以產出 module... 這對未來要進行 daily build 就有點頭痛了...
    2. csharp compiler (csc.exe) 還好, 只要有 CLR 就有, 但是 assembly linker (al.exe) 就麻煩了, 在我的 windows 2003 x64 裡竟然找不到, 查了一下這個要裝 .net framework sdk 才有. 當場去 download 回來裝, 哇靠... 380mb... 傻眼... 這個環境要求稍微高了點, 通常客戶的環境都會裝 .net runtime, 但是不會裝 .net sdk ...
    3. 另一個麻煩是, 要執行這些工具, 最少要有基本的權限... 我是要透過 asp.net web application 執行上面這串動作, 要突破的 security 限制還不少...
    4. 這些工具目前還查不到對等的 class library 可以簡單的達成一樣的目的, 沒事去拿 MSBuild 裡內建的那堆 task 反組譯看看, CSC / AL 這兩個 task, 通通都是 create process, 然後直接去呼叫 csc.exe / al.exe ... 這種動作對 web application 的效能很具殺傷力... 得改成批次執行, 對系統會好一些, 只是這樣就失去了即時產出的時效性了

    試到這邊, 暫時想不到其它作法了, 沒想到要產出自定的 .exe 還真不容易... 如果有其它更好的作法, 就通知一下吧, 真的這樣在 web app 搞下去真是自找苦吃 :~~~

    2007/02/28 .NET Tips 技術隨筆

  4. 電腦也要過年..

    沒想到過個年, Microsoft 也有一堆更新 & 新版發行...

    1. SQL 2005 SP2
      目前為止我都還把 SQL2005 當 SQL2000 用, 嗯, 有啥新功能就不管它了, 裝了再說..
    2. ActiveSync 4.5
      換了之後, 除了 icon 漂亮點之外, 好像沒啥不一樣, 不過裝了後合作關係都要重建一次.. :@
    3. Virtual PC 2007
      這個一定要推一下, 一路從 Connectix Virtual PC, 用到 Microsoft Virtual PC 2004, 換到 Virtual PC 2007 Beta, 再換 RC, 終於換到 2007 了 :D, 支援 Intel VT, CPU 有支援的可以裝看看..
      另外一個龜很久的 Virtual Server 2005 R2 SP1 到底啥時要出來?
    4. 過年前一口氣爆出十幾個 security patch ...

    2007/02/25 技術隨筆 有的沒的

  5. Network Bridge in Windows 2003...

    又在沒事找事做了... 這次是搬硬碟, 外加把部份網路從 100Mbps --> GBE, 不過這次沒有要添購新配備...

    我很迷信大廠的硬體, 自己有在開發軟體最清楚, 只有大廠才有那個本錢把軟體的 bug 都抓乾淨, driver 更是明顯... driver 寫不好鳥問題一堆, 到這種年紀已經沒力氣跟那堆 driver 慢慢奮鬥了, 只要穩定可以用不要出問題就好...

    因此之前買了一批 Intel 82559 的網路卡 (不是只有 chip 是 82559, 而是整張卡都是貼 intel mark), 有 Intel PRO/100 S 跟 PRO/100 Management+, 當時一次買了十幾張, 因為 yahoo 賣家要一次賣掉... 所以當然就全家的網卡全部換成這批. 就算主機板有內建 GBE, 還是把它給關了用 Intel 82559... 換了果然有差, driver 比那堆 d-xxxx, rxxxxt 的好多了, 也從來沒碰過傳一堆大檔傳到一半, 網路會停掉的問題, 而且經過便宜的 hub, 網路傳輸速率隨便也有 8x% ...

    不過再怎樣, 100Mbps 終究抵不過 1000Mbps, 試過幾次從 server 拉 iso 到 desktop pc 燒 dvd 就受不了了, 一定得先把 iso copy 到 desktop pc 再燒, copy 得等上十分鐘, 燒完又是十來分鐘, 還要再 verify 又是十來分鐘... Orz

    忍了一陣子, 決定趁過年調整一下, 剛好 desktop pc / server 的主機版都內建 Marvell GBE 網卡, 就把它們的封印拿掉直接對連, hub 也省了, 反正只有兩台有 GBE. 改這個很簡單, BIOS 把 LAN 打開, 網路線拔過去插上去就收工了.

    麻煩的是網路設定的地方... 原本的架構是這樣, 有點小複雜, 除了基本的 NAT 之外, server 上的 RRAS 也設定了 demand-dial, 會自動連到公司的 VPN, 同時也是 VPN server, 接受我在外面撥到家裡的區域網路, 其它 DNS, DHCP, IIS, Net Share 等等的就不畫了..

     

     

    最初的想法是, 直接多增加一個網段, 專門放 GBE 的 node. 不過家裡也才幾台電腦, 這樣弄好像太小題大作了, 加上這麼一來設定就越來越複雜了, DHCP 要調, static routing 要改... [:'(], 後來放棄, 直接用最不用大腦的 solution ... software networking bridge! 架構如下:

     

     

    還好 windows 2003 有內建 bridge, 正好把 LAN 的兩張網卡串起來, 邏輯上只有一張 network interface, 只是實體接的線路有兩條 (100mbps / 1000mbps), 啥軟體設定都不用改...

    試了一下效果, 不錯, 直接 copy 檔案就有 30% 的使用率... 跟以前 100mbps 的 90% 來比, 隨便也有三倍多的提升. 不過 30% 的瓶頸似乎是掉在 disk i/o 上面, 同時從不同 disk 拉檔案就可以飆到 60% ..

    之前對 Marvell 的 chip 很感冒, 公司的 virtual server 2005 就是內建這個 chip, 流量很大, 開個一兩個禮拜網路就不通了, 但是怎麼看都正常, 就是網路不通, 得把 LAN 停用再啟用才會正常, 如果剛好人不在公司就完了, 得等隔天拔 monitor 直接到主機上面去點... 後來加了張 Intel 的網卡, 這張就一點事都沒有... 家裡流量應該不會這麼大吧? 哈哈, 就加減用一下就好..

    2007/02/22 Tips 技術隨筆 有的沒的