2008年10月29日

owasp Day 2 上

昨天一路塞車塞回家 坎尼到家時已經快七點半了
然後看到忘了帶出門的手機.....老板 call 了四通啊 囧>
今天又要早起下高雄出差 所以昨晚吃過東西 盥洗完就上床了

好啦 交待完畢
今天就來回顧一下昨天的owasp第二天 (可是好多東西都沒印象了 orz

第一場是坎尼期待的 RSnake所講的 Clickjacking
本來坎尼只以為和之前看到的 就是控制使用者端的 Webcam 及 Microphone
但 Robert Hansen 提出來一些用法真的讓坎尼豁然開朗
像是設計一個 text input 利如 1 + 1 = [ Here is the TextBox ]
利用iFrame及css的排版方式 讓 allow button 位於這個位置
一般的使用者如坎尼...會有種很強烈的想點它的慾望...
此時....Webcam可能已經被人偷偷的開啟了.....

當然 Clickjacking 只是個手法
你可以利用 iFrame 的方式 令其他人將你加入他們社交網站的好友
也可以讓使用者點了下載按鈕
或是#@%$#$%$% click anything what you want

Wow....我只能這麼讚嘆.....
如同新聞稿所講 這東西是尚無解決方法的.....
即時你將 javascript關掉也是一樣 (如何 恐怖吧~~~
現在能做的 只是消極的更新及盡量使用 no script 的環境
還有上網時自己小心了

坎尼等這幾天忙完了也想來研究 clickjack的程式面
不過坎尼會很好心的先用幾個好友來測試啦 XDDD
(囧興 才一個人就講這麼一大篇了

第二場是 Chenxi Wang 博士
王博士有提到Web 2.0的進步其實不只增加了大家的便利性
也增加了更多采多姿的攻擊方式
Web App Security確是目前坎尼所看到的開發缺失
案子在規劃階段從不會將此議題納入 總是等到事情鬧大了才去補東補西

今天坎尼去出差時也順便看了一下這個案子的程式碼
囧興~ 程式碼裡竟然有 SQL Injection的危險存在
由於要改的數量可能不少 坎尼都不敢跟承辦人提起這件事
從這邊來看 我猜應該公司部分案子都有被入侵的危險
(有空是該跟同事交流一下coding的方式和觀念了

第三場是來自 Hong Kong 的 Anthony
不過 Anthony 自認中文不太好 所以還是全程講英文
讓坎尼避免了和 Tim 去 TechED 時相同的命運 XDDD

Anthony示範了如何利用工具去 Exploit
這段也讓坎尼嚇到屁滾尿流
坎尼知道駭客們多多少少會有些工具 不過這些工具也太厲害了
不僅寄存在對方的 process 中 還可以隨意變換
當然對方電腦裡的東西都一目了然 還可以做 upload & download
連同對方的 MS Sql server 的 Table Schema 下個指令就跑出來了
還可以分析弱點 囧興~ (這是坎尼派出的第幾隻囧烏龜??

Anthony講話也很好笑 尤其是開場的快速自我介紹令人印象十分深刻
還有那個改變自己寄存的process 導致 IE 自動關閉
「使用者只會以為IE又掛了。Thanks Microsofx」 (消音中)
可惜Anthony時間不是很足夠 只好匆匆的結束整個演說

這篇真的太長了 坎尼只好默默的在標題上補個 『上』
當然 有任何講錯的也請給與意見指教 感謝 :p

2008年10月27日

owasp Day 1

最近坎尼要趕案子 所以一直沒時間上來發表一些技術心得
這兩天剛好有請到假去參加 owasp 亞洲年會 官方blog
今天是第一天 坎尼稍微簡短的寫一下心得

由於資安是坎尼最近才接觸的領域
所以許多專業的東西還是交給專家們去講吧 XD
接下來可能還會寫些 Javascript 網頁掛馬的技術心得

今天很早起的坎尼 一大早就趕過去 TICC
不過由於人真的太多了 會議一直到約10點才開始
坎尼都已經快睡著了 (因為太早起 orz

開場為阿碼科技的CEO Wayne Huang
接著是資策會及 III 的長官為大家致詞

第一場是 Foundstone 的 YM Chen
他為大家介紹了近年的資安演進及駭客攻擊目標的轉變
另外還有資訊安全的生態模式
再來是用 Google News VS UAL 的例子 (前陣子坎尼有注意到這新聞
來講解為何自動化工具還不能被完全信任

第二場是 Wayne 和 Birdman (應該沒拼錯吧?
他們講解了今年初 Mass SQL Injection 事件
令坎尼驚訝的是 原來駭客們的分工極細 例子裡就有四個集團
不過最終目的就是 讓user瀏覽掛馬的網站 然後把rootkits下載至client端

再來是 birdman 為大家演示幾個例子 (這些等下篇開個標題再提 :p
接著說明了靜態源碼檢測的難度 (JS可變形 可動態產生可執行碼.....
另外 birdman 有講個笑話 (我不確定是不是真的是笑話啦 XDDD
國內N牌防毒有講 95%的掃描都是多餘的 應該是要讓電腦變慢 讓駭客不想攻擊

第三場是來自菲律賓孟買分會的 KK Mookhey
講的是 Web App Testing
由於 KK 的英語口音比較獨特點 坎尼有段時間就恍神了
還好坎尼的手還有自動在抄筆記 所以還有些印象
他有提到 Google的庫存頁面功能
他的客戶 (某網站書店) 的 某些user就利用Local Searching的方式
免費的得到一些書籍的 PDF 檔 而不是出錢來購買 利益因此損失

第四場是 Charmi Lin
他的題目很有趣 :修改密碼無效!駭客還是在收取你的電子郵件
裡面講到了 webmail 如何被駭客用具有 XSS 的信
讓使用者只要打開信件閱讀 即可將使用者的 cookie 資訊傳輸回去
再利用 cookie 來侵入使用者的 webmail

「改密碼不就好了」大家也都是這個疑問
不過別忘了題目所講的 修改密碼無效!!!
因為駭客進入只是第一步 第二步就是修改被進入Webmail的使用者的設定

比方講gmail裡的 寄副本給某信箱選項
坎尼其實用那麼久的gmail 還不曉得有這個選項 哪天被入侵還不曉得 orz
所以曾經有被入侵或密碼外洩的人 最好將整個webmail的設定都檢查一次

下一場是 PK和Jack所講的個資洩露案子
也就是前陣子很有名的 5000萬筆資料被駭的新聞
相信在看這篇文章的大家 資料應該都在人家手上了 orz
(被入侵的是健保局....唉唉....

PK還有Demo一個 MSNBOT
它可以把目前電腦的資訊傳回來 還可以抓圖 送指令
還Demo了某家DLP產品的漏洞 利用這個漏洞直接讓對方電腦藍白畫面

接下來是 Fyodor Yorochkin
不過由於都是他個人的遭遇的案例
所以坎尼沒記到什麼筆記 冏興

最後是來自 China 的 Frank Fan
他演講了中國大陸這幾年的駭客行為
還有講解自動化Mass Injection工具的設定檔
(說真的 這工具真的很簡單又很有破壞力
再來還有說到驗證碼 也有人利用OCR方式來做自動化攻擊
最近是黑箱及白箱測試的講解 (這邊坎尼還沒找到相關資料
簡單來講 黑箱就是單純看程式的運作方式 來推論其內部結構
白箱就是直接打開 source code 來看是否有資安的危險
中間坎尼有點漏掉 筆記沒抄的很完整

以上大概就是今天一天的概況
如果有講錯 請各方大德用力的鞭
其他心得等過幾天再來補上 坎尼在家加班趕東西了 Q_Q

ps. Tim 你們公司明明就是贊助商 怎麼不趁機和老板說要來聽 - -

2008年10月14日

Javascript 小技巧 Part1

雖然說可能從此就停留在 Part1 (或者 Part2 就交給坎尼了 XD),
不過還是彙整一些過去一年來比較值得紀錄的 js 訣竅。
(其實是 Rosario & Oslo 資料太多還是看不完XD)
  1. 如何讓使用者點了 <a> 的連結之後,另開視窗,但原視窗的定位點不變?
    這是昨天做的一個小小的 streaming 網頁用到的技巧,由於一般人習慣去點連結,
    但是因為我要拿來作 streaming 的檔案來源是用 PowerCam 錄的,
    播放的時候需要用到 fsPlayer,才能完全享受更好操控的 UI,
    而 fsPlayer 又會佔掉很大的版面,因此還是以另開視窗(window.open)為上策。

    我原本是寫 <a href="#" onclick="open()">Watch Video</a>,
    但是很快就發現這樣會讓網址變成「http://yourDomain.com/index.htm#」,
    雖然的確不會讓網頁連到其他地方去,但是網頁的定位點會被捲到網頁最上方

    稍微找了一下就發現還有另一種寫法(參考網頁在這裡):
    <a href="javascript://" onclick="open()">Watch Video</a>
    果然改寫成這樣之後就不但可以另開視窗,而且原本網頁的定位點都不會跑掉~
  2. 如何用一行程式碼計算出某年某月有幾天?
    這是 ... 快一年前作的 XD 趁這個機會彙整一下,主要是參考這個網頁
    記得以前像這樣的敘述可以當作程式的題目,要小心閏年、閏月等等,
    隨便寫應該都要好幾十行,但是有人發現其實只要一行就可以搞定了:

    return 32 - new Date(iYear, iMonth, 32).getDate();

    主要就是靠 js 允許讓 Day 產生 Overflow 這樣的特性來做的
    (詳細說明請看參考網頁),看到這個範例之後,我就手癢的寫了 ASP 版,
    還有 ASP.NET 版 (C#),雖然說在 .Net 的世界裡,Date 本身就有 DaysInMonth 這個 static method (ref),但是應用上面那個 js 的思維,一樣都可以實作出來唷!

    雖然好像只有 js 可以做到一行必殺,其他語言都還要轉型之類的多寫個兩三行,
    但是 js 的那行程式真的就有種藝術的感覺,用一種很超俗的手法來解決問題,
    真的是很厲害。這行程式還可以用來檢查你自己寫的閏年判斷是否正確。

    我自己寫的小小程式 (三個版本) 可以在這裡下載。
  3. 如何強制 IE7 關閉視窗 (Tab),而不會跳出確認視窗
    這個 ... 在 IE6 大家都會,IE7 一直過了很久才看到有人找出解法,
    因為不是我發現的,So ... 直接參考小喵的 blog 吧 XD
咳,好不容易湊出一小篇文章,真是有種很久沒寫程式的感覺 Orz
Part2 就交給坎尼啦 :p

SqlParameters 應用篇

雖然標題是應用篇  但坎尼好像也沒寫過入門篇 (抓頭

回正題
本篇的應用是 隨著 user 選項不同  而執行不同的 t-sql 語法
且參數部分不盡相同

「為什麼說不盡相同呢?」 先來看下面抓圖
假設這是一個複合條件選擇的頁面
坎尼會依 user 選擇 而從 t1、t2、t3 三個資料表中分別取出資料
t1可能是個人資料、t2則為職業、t3為連絡資料
(先把 join 給放一邊  這個只是範例)

可以看到
i = 0 時  需要參數 id name birth
i = 1 時  需要參數 id job
i = 2 時  需要參數 id name tel

有發現嗎? id 這個參數重覆出現了三次  name 則是兩次
這種情況下  大部份的人應該都會寫成上圖的方式
利用 if 判斷 再將 parameter 加入 SqlCommand 當中
但這樣不嫌重覆造了太多輪子了嗎?

這邊坎尼要提供個簡單的方式
不過這邊要注意的是  這個方法好像支援 .NET 2.0 以上
1.1 似乎不能這麼寫  SqlCe 似乎也不能這麼做 (這個會再發一篇詳細講解)
直接來看抓圖吧


可以看到  坎尼把參數通通移到 if 的外面
在這邊 ADO.NET 會自動的判斷 parameter 的 name
所以就算加了 10 個 parameters  但.NET執行Sql指令時
也只會抓取它所需的那3個 parameters (依給予的參數名稱
「這樣做不會有問題嗎?!」
坎尼用 vs 2005 來做 一直都是 ok 的  如果有問題請寄信給坎尼 :D

好啦  講完啦  XDDDD   (被踹飛

其實真正的應用不在於 select  (坎尼覺得用 select 當範例大家會比較了解
而是 insert update 時  許多資料表的欄位很像 但又不太一樣
應客戶要求又要做在同一頁  (對他們來說  這幾張 Table 可能是相同的)

此時  苦命的 Programmer 就要像第一張圖那樣
利用 if 或 switch 去做判斷  再將資料 insert (或update) 進去資料庫
(別懷疑  這是坎尼工作上遇到的實際例子)

為了讓自己可以早點下班  以後維護也比較簡單(這地方見人見智)
坎尼不小心發現了這個偷吃步的方式
不過效能上有沒有影響倒是沒有測過  哪天比較空閒時再來測測看

最後補充個一點  在加入 Parameters 之前  記得習慣將 Parameters 清空
尤其是要用 for 迴圈跑 insert 或 update 的人

2008年10月13日

Sql Server V.S. Sql Server Compact

繼昨天講解 ADO.NET 會自動判斷參數名稱 後
今天要來講 PC 和 PPC 的 SQL Server 的差異性比較

PC上是使用 System.Data.SqlClient
PPC 則是使用 System.Data.SqlServerCe (需安裝 .NET Compact Framework

再來是要了解一點
PPC上所支援的 API 較 PC 少  (為了縮減容量的關係吧?)
所以常常可以見到的是
同一個 Class 上  在 PPC 所支援的方法及屬性 大多會所剩無幾

MSDN 上查詢Class成員時
會看到某些 方法 或 屬性 前有個手機的 Icon   那就表示是支援 PPC 開發

以上大概是 PC 和 PPC 的一些小講解
再來是 PPC 上用的小型許多的 SqlServer -- SqlCe

如同之前所講的  PPC 許多 Class 都會受限
但是坎尼沒想到 SqlCe 上也有如此情況!?
比方講 isnull 這個在Sql常用的函式  到了SqlCe上竟然不在了 囧>
應該是說  它變成回傳 true/false ( 但MSDN上是寫不支援
坎尼只好用 case when 來做判斷

接下來是要承接 上篇 所講的SqlParameter

在 .NET Compact Framework 上寫入 SqlParamter 就不像上篇所講的那麼簡單
因為 SqlCe 會判斷目前 Sql 句子裡有幾個 Parameters
然後再將 SqlCeCommand 裡的 Parameters 的值給寫入   少傳多傳都會出現例外
講這麼多就是一句話 : 
子句的參數數目要和 SqlCeParameters 的數量相同啦!!!

因此坎尼 上篇 所介紹的這個傳入參數的方式就不適用
但是偏偏這個 PPC 的開發和上一篇所講的是同一個案子
坎尼打開 SqlCe 的資料庫  又看到了許多重覆欄位分散在不同的資料表 orz

山不轉 坎尼轉轉轉   綜合之前所提的兩種方式
坎尼將共同的 SqlParameter 寫於外層
內層的判斷則是依不同需求  傳入所需的 Parameter

可以看到  範例中只有 id 是共通  所以移到最外層
name 雖然也有兩個情況下會出現  但是..恩..很抱歉...你知道的...
(坎尼案子裡共同的parameter約有七八個 orz

傳入 Parameter的方法大概介紹到這邊
最後回應一下 Tim 上篇留言所說的
這個方式雖然可以分開管理共同及私用的 Parameters
但還是 Tim 所說的  直接再開個方法來寫  還比較好維護
這個四不像希望以後坎尼負責的案子不會再用到它
(那你幹嘛發明它  找死啊= =

這篇實在是寫得很亂   很感謝能看到這裡的人  <(_ _)>
下篇會挑個 scope 比較小的東西來寫

2008年10月9日

開發時好用的快速鍵 part2

雖然說坎尼好像沒寫過 part1
不過由於寫過類似的  所以標題還是給他 part2 啦

先來介紹 .NET 內建的快速鍵
1. 格式化文件 CTRL + E → CTRL + D
雖然 vs 2005 的格式自動化已經做的很好
但總會有那幾次格式沒自己自動化

所以此時  只需先按下 ctrl + e 再接著按 ctrl + d (其實好像按d就好)
.NET就會自動格式化目前的文件  這個快速鍵也可用於 aspx 頁面


2. 註解  CTRL + E → CTRL + C
    還原註解 CTRL + E → CTRL + U

這沒什麼好講的  就和工具列上的註解功能一樣
只是有時寫程式寫到一半  真的很懶的去動滑鼠時  可以試著用這個
不過坎尼還是習慣去點上面的工具列啦

WinXp 的快速鍵
1. 游標往前或往後移動一個區塊  CTRL +  ← → 
因為要抓遊標的圖實在很困難
所以就請各位自行練習吧  (練習啥小 = =

這邊所謂的一個區塊  是指用 半形空白 符號 隔開的文字

ex. This is my book , and Tim has one , too.
在 This 前面按下 ctrl + →  游標會跳到 This 後面
若是在 , 後面按下 ctrl + ← 則游標會跳到 , 前面

不過每個文字編輯器的設定多多少少會不同
所以 block 的定義也不太相同  就請各位自己試看看囉
補充一點  此快速鍵也適用於中文字

2. 往前刪除 1 個 block  CTRL + backspace
    往後刪除 1 個 block  CTRL + Delete

極好用!!!!!
有時要刪一大串的文字但又不能全刪實在很煩  
通常都會一直按著 backspace 或 delete  一不注意又會把其他文字給刪掉
此時只要 按著 Ctrl 再按 backspace 就可以很輕鬆的刪掉一大段字

範例裡想把 mule 刪掉改為 horse
粗體
若是用 backspace 要按四次   但 ctrl + backspace 只要按一次

如何  是不是很方便呢???

同理  ctrl + delete 也是一樣   不過它刪除的方向和 backspace 相反

3.還原上一步 Alt + backspace  
功能等同於 Ctrl + Z   所以就不介紹了


這些都是懶惰的坎尼不想用滑鼠不小心發現的一些潛在指令
下次等收集多一點新發現再來寫 part 3

2008年10月6日

第一次認真寫 VBA --> Report Generator

本篇範例可以到這裡下載。裡面的程式才是最正確的,下面抓的圖有點舊XD
由於最近公司要辦活動,必須統計每堂課的報名狀況,
無奈報名系統產出的 Excel 太過基本,無法快速產出老闆想要的報表,
因此開始試圖用 VBA 自動完成一些重複性高的手動作業
也是我第一次撰寫簡單的 VBA 應用程式,過程還蠻好玩的 (雖然害我少睡很多)
因此以下按照報表產生的步驟來介紹一些我用到的方法和心得:
  1. 首先我做了一張 sheet (Settings),裡面放了一些 Report 的相關設定,
    未來可以繼續擴充,目前最重要的設定是課程名稱和 Worksheet Name的對應,
    例如「A_Very_Long_Name_About_SaaS」對應到「SaaS」,像下面這樣:
    Blog_Set_Worksheet_Name
  2. 接下來是將報名系統產生的 Excel 資料貼到 "Original Data"中,
    並且調整適當的標題,做好資料的排序,再加上「統計資訊」的區塊: 
    Blog_Original_Data_Sortedjpg 
    其中在統計資訊的部分,公式長的像這樣:COUNTIF(D:D,J2)

    這樣的原始資料的問題在於,由於在報名過程中每天的報名人數都會變化,
    如果要用這張 Worksheet 來統計每日 (或每堂課)的報名人數,
    就必須每天調整公式中的 Range
    因此最好是能將每堂課的資訊各自獨立到一張 Worksheet 中,
    如此統計資訊的公式中的 Range 就可以使用整個「欄」, (像上面那樣)
    而不用根據每天的資料筆數來調整公式中的 Range。

    而上述這個「將每堂課的資訊各自獨立到一張 Worksheet 中」的動作,
    如果要每天手動去複製就相當的麻煩,而且複製前還必須要先刪掉舊資料,
    因此如果能透過 VBA 自動將每天報表中的每堂課的資料抽出來放到相對應的 Worksheet 中,統計的公式就會自動計算出最後結果,省時省力。

  3. 在主要的 VB Sub Routine 中,首先會先 loop 過整個 Workbook 內的 Worksheet,
    並且將目前 Worksheet 中已經存在的舊資料刪除,程式像下面這樣:
    Blog_Clean_Worksheet_Data 

  4. 若是第一次執行這個 Sub,要把以下的註解取消,以便根據 Worksheet 名稱來新增 Worksheet,如同註解中說的,看來 VBA 不支援 Try Catch
    Blog_Add_Worksheet
  5. 接下來就會抓取步驟一中設定的對應關係,並且將"Original Data"的標題以及統計資料列複製到每堂課程的 sheet中 (如此每張 sheet 的 Layout 都會是相同的):
    Blog_Main_Process

    其實以上就是這個 Sub 最主要的內容了,接下來會解釋「CopyTitleAndStatistics」和「ProcessData」做的事情。

  6. 實際上執行「複製標題列及統計資訊」的是「CopyTitleAndStatistics」,
    主要的程式像這樣:
    Blog_Copy_Title

  7. 而「ProcessData」則是分成兩段,首先要根據課程名稱,在 HR 原始報表中找出該課程的相關資料(With 區塊主要參考 Excel 內建的範例程式):
    Blog_Search_Source_Data_Area
  8. 接下來則是計算要負制的範圍,並且根據資料筆數來計算 Target Worksheet 要貼上的範圍:
    Blog_Calc_Targt_Data_Aea
  9. 最後產出的報表長的像這樣:
    Blog_Report

    在 "Original Data" 之後已經依據 "Settings" 內的設定自動產生好相對應的 Worksheet,並且將該堂課程的資訊貼進去,這樣就可以檢視每堂課的報名人數統計了。 

  10. 另外我還手動作了一張 "Report Overview" 的 Worksheet,有 summary 的功效:
    Blog_Overview
經過這次的練習,我有以下的心得:
  • 首先要先想好最終要產出的文件到底長甚麼樣子,才能分析裡面有哪些東西可以透過程式自動幫你完成 (或者透過痛苦的反覆人工作業來了解XD)
  • 其實 VBA 還蠻方便的,最大的好處是卡住的時候只要錄個巨集,就能很快的了解狀況,因此說明文件雖然不如 MSDN 好用,但還不致於會造成太大困擾。
  • VBA 也提供方便的 Debug 功能,像是即時運算視窗監看式等等,
    雖然用起來不太習慣,也有一些限制,但還是比 ASP 好太多了
Future Work:
  • 註解裡面有些記錄到嘗試失敗的部分,有空的時候可以再努力看看
  • 目前的 Report_Overview 中的儲存格內容是手動一格格設定的,應該VBA也辦的到
  • 在產生每堂課的 Worksheet 時,可以間隔的設定索引標籤顏色,這樣可讀性更高
平常實在沒甚麼機會接觸 VBA,除非遇到像這種久久才用到一次的報表,希望下次還有其他機會可以練習 :p

2008年10月5日

Microsoft TechEd 2008 雜記

為了降低這個blog 的技術成分,在開始寫技術性的補完之前,
我決定先來記錄一些比較輕鬆的東西~~~ (其實是因為技術的東西太多了看不完Orz..)

關於大會本身的感想:

  • 台北國際會議中心的場地設備蠻不錯的(但是官網居然掛了),
    除了大會堂的設備比較老舊(可能演唱會太多沒空整修),
    聽同事說位在 3 樓的世貿聯誼社提供的便當還不錯吃(很飽),
    雖然看來只有一百多塊的價值,果然選餐的時候我不選世貿聯誼社,
    而選其他的套餐 (NTD $200) 是正確的決定 :p (e.g. 紐約紐約、101、新光三越)
  • 除了上課之外,會場還有很多攤位,不過我大致上只有走馬看花,
    相較起來還是書展或電腦展的攤位比較有趣。這次的攤位大概包括以下幾種類型:

    (1) Mobile 廠商:主要是中華電信這個鑽石級 Partner,很用力的在賣 mPro,
                             現場有許多熱情的阿宅參與他們的活動,不時高聲地搖頭吶喊~
                            (我除外,因為我是冷漠的阿宅XD)
    (2) 賣書的:包括 RunPC,還有天龍等等(好像還有 iTHome),
                      我用名片換了一本六月的 RunPC,天龍的中文翻譯書就沒買了,
                      不過有些真的還蠻便宜的,這裡聚集的是沉靜的阿宅
    (3) 競爭對手:也就是 ... 龍捲風之類的廠商,還有訊光科技等等的其他幾家,
                         他們的目標應該是來上課的中高階主管(有採購權),
                         希望拓展一些客戶,對小小的 developer 來說興趣不會太高,
                         我拿了幾張 DM 瞄了一下就丟了。(似乎沒有阿宅在此聚集)
    (4) 硬體廠商:似乎有些賣 router 還是甚麼儲存設備的廠商,沒有很注意,
                         不過藉由 SG 的加持,印樣中有家廠商的活動也成功招攬到
                         不少熱情的阿宅
    (5) 技術社群:有為了爭取超低團購價不遺餘力的藍色小舖, 
                       (如果沒有公司補助的話,真的要把握小舖的優惠價,希望每年還有)
                         還有點部落等等,似乎有集點換贈品的活動,不過我也懶得集,
                         想必有參加集點換贈品的都是勤勞的阿宅
  • 學員上課證做得還不錯,蠻有質感的,基本上是一張 RFID Card
    紀錄你上過哪些課,或者到過哪些攤位等等,
    因此在休息時間除了各攤位的人員努力的邀請你刷卡集點換贈品之外,
    也有微軟工作人員到處拿著讀卡機要幫你把卡片資料上傳到 .. Marketing DB XD?

    Anyway,我的卡在第三天中午交接給後面要聽課的同事,
    結果最後他說全部人的卡都被微軟回收走了,真可惜 ><"
    明明在公司就有看到去年留下來的學員證,微軟真的是小氣巴拉,
    報名費都那麼貴了,連張卡也不給人家留做紀念 .... =.="
  • 展場的 SG 就 ... 還好,我同事覺得很普衝 XD
    不過有一個蠻紅的,大家都搶著照她,應該是照片中右邊那位,
    吉祥物也蠻可愛的 ~~
  • 今年有兩個鑽石級 partner,分別是中華電信和 IBM,
    不過我實在搞不懂 IBM 到底哪裡有攤位還是甚麼好宣傳的地方,
    除了學員證上面看的到 IBM,好像就沒有其他地方有 IBM 的攤位或 LOGO了,
    感覺起來根本就是個錢太多的凱子 XD 真的是很有趣~
  • 剛剛在寫講師的部分的時候忽然發現,之前 TechEd 的講師介紹連結又失效了,
    (更新:好像是網址換了,吼,這一頁有列出全部講師介紹)
    既然如此就不得不捅一下,TechEd 的官方網站時在是有夠爛!
    看起來似乎是跟 iTHome 合作的,從報名成功之後的第一次登入開始,
    整個就用得很不爽,修改報名資訊分成長長的三頁要填寫,
    非得全部填完才會生效,我想先改個密碼,晚一點再填緊急聯絡人都不行,
    整個操作流程很難用,看不到 Usability 在哪裡。

    然後這網站用 IE8 Beta2 來開的話,就看不到每日的議程資訊了,
    拜託,這是 TechEd 的網站耶,要是甚麼 Office Online 在 IE8 Beta 掛了就算了,
    結果在課程內容強打 IE8 這個據說年底就要出正式版的產品的 TechEd 網站,
    用 IE8 來開根本就有問題,感覺就是很奇怪,台灣這邊的資訊應該不比美國慢多少才對呀,相信明年應該不會出現這種囧況。(搞不好明年是用 IE9 開網站會掛 ^_^)

關於講師的一些補充:

  • 周旺暾 (Blog在這裡, 我的課程心得在這裡)
    感覺他有時候講話會太快,然後糊在一起,如果他能把速度稍微放慢就很棒了。
    聽說他是一路從工程師努力往上爬到「資深應用開發技術經理」的位子,
    技術底子很夠,能講的主題很廣,從 Mix08 Taipei 的 Silverlight Streaming,
    到這次 TechEd 講 S+S & MS Cloud Computing,昨天公司又邀請他講 IE8,
    還蠻厲害的,但是聽他講課真的要超專心,因為他講話很快,
    一恍神可能就會漏掉甚麼重要的東西。
  • 李匡正 (Blog在這裡,我的課程心得在這裡)
    他的 Title 是「資深應用架構技術經理」,雖然他一開始就在抱怨要跟客戶溝通 SOA 的觀念非常辛苦,因為客戶都有自己的想法,也因此造成他自己根本就不喜歡 SOA 這個 term,但是又被逼著連續幾年要負責傳達微軟對 SOA 的想法之類囉哩囉嗦的一堆,但是他講課是蠻清楚的,英文發音似乎有特別練過,咬字很清晰,
    他的課不一定很有啟發性,不過會很有效的讓你吸收到他想表達的東西。
  • Steve Riley (Blog在這裡,我的課程心得在這裡)
    他是這次 TechEd 我最喜歡的講師,個人風格很強烈,穿著休閒的襯衫短褲,
    頭髮長到耳朵下面一點點(但有點禿頭XD),整體看來有嬉皮的 fu。
    他講課的速度很適中,是一般台灣人聽得最習慣的紐約腔(應該是吧XD)
    如同一般熱情的阿多仔一樣會有很多肢體動作,滿場亂竄,
    有時候還會站上椅子(甚至還有跪下一次XD)。

    他有講到一句名言:
    Why do you think your company give you a laptop?
    It's much more expensive then a desktop!!
    -- Becasue they know you will work for FREE.


    Hmm ... that's darn right! And I guess our company setup all the Web Sites (Issue Tracking, Work Repotring, Wiki, etc.) so you can work at home for FREE, too!!

    根據Steve的說法,他每年都在世界各地的 TechEd 講課,
    看來明年應該也會繼續來 TechEd Taiwan,到時候希望可以再去聽!
  • 楊勇克 (Blog ... 我懶得找XD 我的課程心得在這裡)
    那個阿鬼阿 ... 呃 ...,他的 Title 是「微軟大中華區的高效能運算技術經理
    我覺得他還蠻帥的,很可惜受限於語言,讓他沒辦法好好發揮,
    不然高效能運算應該是個不錯的 Topic。希望下次主辦單位可以注意到這點,
    既然他普通話講得那麼辛苦,不如直接講英文就好了,
    反正港式英文也是相當的有趣,硬是逼他講不流利的普通話,
    然後搞得大家都很辛苦,一堆人提早走,這又是何必勒?
  • 李智樺 (Blog ... 是個謎,我的課程心得在這裡)
    他是「資深系統架構師」,以前做過 RD 一段時間 (想必是名副其實的 RD),
    目前在 K2 這家公司做 consulting,他在某種角度看起來有蔣公的 fu,
    也有點像中華電信 MOD 廣告裡的那個管家XD

    如同前天寫的心得,上他的課蠻輕鬆的,以他的年紀來講,笑點掌握得很不錯,
    他的中文聽起來有點像北京腔,這點還蠻有趣的。他說以前當學生的時候,
    最討厭老師問問題然後要學生回答,他有一陣子在大學當講師,
    所以他上課的時候一樣會問問題,但是只要你有舉手他就送獎品給你,
    你完全不需要回答XDD,
    造成當天一堆人顯然不知道答案但是亂舉手的狀況,
    對於炒熱上課氣氛相當的有效,這招蠻有意思的,可以偷學一下。
  • 郭明祥 (Blog ...,我的課程心得在這裡)
    他是凌群的技術顧問,身上掛了一堆 MCAD, MCSE 之類的證照,
    看起來很厲害,但很顯然這些證照的考試範圍不包括時間管理

    基本上他的課..專心聽當然是學的到東西,很多細節的東西都解釋的蠻清楚的,
    只要你先 make sure 在他的課程之後你沒有安排重要的事情要處理就 OK 了。

以上是跟技術沒甚麼關係的感想,技術篇的補完看來要慢慢寫才寫的完了 ~~

2008年10月4日

Microsoft TechEd 2008 心得 - Day3

繼前一天充實的課程之後,接下來我剩下兩堂課程要參加,
教室都是大會堂(最大間的,可以容納1208人),
以下是我的心得:

0850 ~ 1000
課程主題:單元測試(Unit Testing)實務分享
講師:李智樺

李講師的講課內容很生動有趣,不過他的 blog 實在是無敵難找的,
黑暗執行緒大大也找不到,希望投影片裡面有附連結。

(由於上面的連結就是黑暗執行緒大大的筆記內容,因此我就以那篇筆記為基礎,
另外作一些補充。)

  • 採用Test Driven Development的開發模式,會強迫你進一步深入思考程式的各方面(架構、需求、作法)是否合理(所謂的 Second Thought),這點非常重要,
    在動手做之前寧可多花一些時間做深入的思考,
    可以有效減少在程式中埋下難解的邏輯錯誤的可能性。

    (關於如何利用 VS 進行 TDD 開發,可以參考 DNN CEO 的這篇 post)
  • 再一次強調 Martin Fowler 這位大師所說的:「不要相信文件,只相信 code」,
    但是通常 code 數量太多(成千上萬),那麼要如何相信呢? 利用 Unit Test 來驗證!!

    在工作一年後,深深的覺得這句話果然是至理名言,非常中肯;
    而李講師所提倡的「以 Test Case 作為交接以及外包廠商的第一道驗證」的觀念
    我也非常認同,不過這應該需要公司的 Top Management 下決心去貫徹,
    否則很難全面落實。

    李講師還提到「己所不欲,勿施於人」這句老話,也就是說 101% 的 developer 都曾接手過文件敘述含混不明,程式碼混亂不堪(就算很乾淨也可能因為數量太龐大而不易了解)的案子/元件,這絕對是很痛苦的事情,因此身為一個優秀的 developer就該要有一個 discipline:當離職前將自己手上的工作交接給接班人時,
    應該就要附上 Unit Test 的程式碼,並且實際 RUN 一遍!! 如果連這個最基本的門檻都沒辦法達成,說真的,的確是很難檢驗這些程式碼到底有沒有問題。
    (人工測試能做到多高的 Code Coverage? )

    從這邊繼續延伸下去,由於接下來我也要開始著手開發新的元件,
    所以最近有時間就會去 Survey 自動從 Source Code 產出文件的工具,
    因為只有 Source Code 才是最準的!! (Source Code 就是你最好的老師,
    一切的真相都在 Source Code 裡。)
    等到有初步的結果我再整理 PO 上來。
  • 綜合整理在 TDD 思維下的開發順序;

    (1) Write Test Case (with dummy input/output)
    (2) Write your code
    (3) Modify the input/output ofthe Test Case
    (4) Run Unit Test --> Target: 100% pass
    (5) Run Code Coverage (Target: at least over 80%)
    --> May need to write more Test Cases to improve code coverage
    (6) Refactoring
    (7) Iterate the above steps until the System is complete
  • 整合測試和單元測試的差異:這應該還蠻好理解的,單元測試只管自己這個小小的 function 是否可利用 (正確的) input 產生 output,並正確處理例外狀況。
    而整合測試則是要確保當綜合個別小小的功能時,能夠正確完成一個大的目標。
  • 我也聽不懂劍潭的笑話 .... || 笑點也許是這個鄭成功把寶劍投入潭中鎮壓鬼怪的故事根本就是 100% 唬爛的 ... =.="
  • 其他 VS 有多好用好用之類的就不用提了,我覺得李講師的台風真的很不賴,
    但是 maybe 是受限於大會堂的性質,必須要盡量淺顯易懂,
    因此其實內容講得有點重複(也許是故意重覆來加深大家的印象),
    接下來他會在 10/16 的MSDN 研討會講 WCF,如果有空應該去捧個場,
    希望可以講得深入一些。

0850 ~ 1000
課程主題:提升ASP.NET網站延展性的策略與應用
講師:郭明祥

這一場說實在是很無聊的,跟上一場相比,講師的風格差太多,
這場的講師完全就是 100% 自己講自己的,完全不管台下的反應
本來這個 session 規劃到 11:30 結束,結果我和我同事 11:50 就受不了走了,
他整個就還是依然故我的繼續講,甚至有兩個工作人員上台去提醒他也沒用,
又沒有講得特別吸引人,整個聽完就沒甚麼印象,
還耽誤到我們中午吃飯的時間 ...

Anyway, 延展性基本上分 Scale Up (向上延展,擴充本機的硬體),還有 Scale Out (以多台機器提供服務,例如 Cluster / Web Farm 等架構),其中有很多要考量的細節,
必須慎重評估各種方案以及整個 application 的特性和應用情境,才能做出最好的選擇。

因為細節沒印象了,大致上是這樣,花了很多時間講細節 (e.g. ASP.NET的運作),
裡面的確是有很多學問,因此 developer 不能只關注軟體面(雖然光是軟體就很難精通),
必須要一定程度的了解硬體上有哪些要注意的地方,以及有哪些可善加利用的特性,
如此才能打造出真正擴充性高的應用程式。

另外他有介紹 Fiddler 這個效能監測工具,除了監控封包併計算統計數據外,
還可以產出不錯的圖表,而且是免費的,算是蠻實用的。

這一場另一個有趣的地方是,我注意到有一位聽障的朋友坐在第一排,
然後旁邊有人即時手語翻譯!! 這實在是太酷炫了,我以為手語只能表達一般生活用語,但是顯然手語也是可以表達「Application Scalibility」、「ASP.NET Worker Process」等專有名詞的!! 因此在這裡要對那位即時手語翻譯大師敬上十二萬分的敬意!!
雖然不知道這是不是微軟提供的服務,不過希望我永遠都不需要用到 Orz..

現在由於太想睡所以實在想不起來他到底還講了啥,似乎還有一個計算 remponse time 的公式,不過剩下沒寫到的,就一起放到下一篇的補完裡面好了,預計還會加上 Rosario、Oslo、SDLC、Live Mesh 等等的資料,敬請期待 ~~~

2008年10月1日

Sandcastle Help File Builder 工具 (SHFB)無法接受含有 .help, .hlp, 或 .h 的 Path (造成 HTML Help Compiler Crash)

最近同事在準備公司講座的資料,要講Sandcaste這個產生CHM說明文件的Tool
(See CodePlex),但是離奇的是, 從上週末他裝好 Sandcastle就發現每次 Build 文件都會失敗, 每次都跳出以下的錯誤畫面,一直到今天下午都沒解:
 
HTML Help Compiler Crash

一開始很自然的把原因歸咎於 Vista 軟體相容性的問題,
但是印象中以前我用都很正常,為了捍衛 Vista 的清白 (幹嘛這麼累,又沒拿錢=.=)
我也在小黑上灌了Sandcastle(Engine) + HelpFile Builder(SHFB, See CodePlex),
最後灌了 SHFB 推薦的 Microsoft HTML Help Compiler v1.4,然後拿他的檔案來 Build,
薑薑薑薑~~果然很忠實的掛點了!! (錯誤畫面跟上圖一樣)

接下來我們花了快半小時東找西找,看哪裡有問題,
還拿了另一台機器來試,發現那台機器怎麼 Build 都成功,這下真的冏了,
周末就要上台 present 了,莫非就要從此黑掉? (雖然說也不是我黑 XD)
而我們在安裝 Microsoft HTML Help Compiler 的時候發現一個奇怪的現象,
讓我們認為是因為用舊的版本來覆蓋 Vista 內建的新版 Compiler,而造成的錯誤,
官方下載頁面說這個 Compiler 是 V1.4:
MS_HTML_Help_V1.4

但是安裝畫面上寫版本是 1.3:

MS_HTML_Help_V1.4_SetupPage_V1.3

安裝過程中的確認畫面也告訴我這是 V1.3:
MS_HTML_Help_V1.4_SetupPage_V1.3_Check

安裝完畢後,很離奇的看到 V1.31 跟我講我的電腦中還有更新的版本
MS_HTML_Help_V1.4_SetupPage_V1.3_Done_V1.31

這時候除了按下確定,我也不能怎樣了。接下來又換V1.3 很開心的跟我說裝好了:
MS_HTML_Help_V1.4_SetupPage_V1.3_ReallyComplete

OK, 既然裝好了,那麼去 File System 看一下最主要的「hhc.exe」到底是甚麼版本吧:
 MS_HTML_Help_V1.4_HHC_Version4.74.8702.0

PERFECT!!!! 原來其實是4.74.8702.0版呀!!!!!
不知道有多少人按順序看完以上畫面還沒有神經錯亂的 (嗯,高手),Anyway,
後來我 Google 到一篇「Version of HTMLHelp」,終於搞清楚到底是怎麼回事了,
總之官方下載頁面的版本是最新的沒錯,而且 XP/Vista 都通用,直接拿來安裝,
然後眼睛閉著一路確定下去就 OK 了。(有興趣的話可以詳細看上面那篇說明)

在排除了 HTML Help Compiler 的版本問題之後,還是不懂為何無法成功Build說明文件,
最後我同事Google到Sandcastle官網上的討論;「HHC.exe Unexpectedly crashes」,
(Google 果然是 RD 吃飯的工具 XD) 在最下面的一篇回覆裡面終於發現問題所在,
原來是SHFB的Project File(.shfb) 所在的檔案路徑中不能含有 .help / .hlp / .h
否則 HTML Help Compiler 就會直接死給你看,沒有任何錯誤訊息,
用 VS2005 來偵錯也只看的到「存取違規」之類的深奧錯誤訊息,根本搞不懂怎麼回事。

剛剛我又作了一些實驗,發現的確是跟 .shfb 檔案本身所在的路徑有關,
包含 .shfb 要吃的 .dll & .xml 檔案的資料夾,名稱亂取都沒問題,例如以下這樣:
Sandcastle_(Bin)FolderPathTest_OK

照樣可以輕鬆 Build 出 CHM 的說明文件。

最後心得;
  1. 微軟你的版本號可以搞得再誇張一點沒關係。
  2. 這個 HTML Help Compiler 的年代是 1999 年,
    會有這種詭異的限制也不是不能理解。
  3. 下次要更謹慎思考(環境上)所有產生變化的地方
    其實那台怎麼 Build 都成功的機器,
    .shfb 檔的檔案路徑裡面的確是沒有 .help / .hlp / .h。
  4. Google 好威呀,最後那篇關鍵討論 CodePlex 內建的 search Wiki 功能 還找不到哩 ~ (關鍵字:html help compiler crash)

Google Spreadsheet 裡用規則運算式

最近因為工作關係,遇到要用 Google Form 及 Google Sheet 所以研究了 Google Sheet 裡的一些 function 怎麼用 首先,分享一下如何在 Google Sheet 裡用規則運算 :D