hit counter for blogger

黑暗執行緒

 黑暗執行緒搬新家囉!! http://www.darkthread.net

5/28/2006

求學之路的起點


女兒滿四足歲了,終於到了可以進幼稚園的門檻。之前Survey的結果,公立幼稚園在費用上便宜許多,但多半要抽籤才有得唸,私立幼稚園的學費+點心費+一堆有的沒的費用,原則上比唸研究所還貴。
原本打算今年去報兩個巷子口外的萬興國小附幼,結果某天神奇的事發生了... 出了爺爺家的門,兒子堅持要走另外一邊,害得原本要去買點東西的我得抱著他繞一大圈。但也因此經過了里長辦公室,在公佈欄中忽然發現政大實小附幼招生的公告,而印象中只有政大教職員子女才能就讀的政大附幼,原來也開放社區居民就讀,這才我的女兒有機會來當我的學妹了。
在兩週前報了名,由報名約略的統計來看,發現中籤率並沒有想像中的低,約2/3的機會。或許是少子化的趨勢加上經濟蕭條,導致出生率下降的結果吧! 報名程序單上寫明了今天(5/27)早上9點抽籤,逾時失格。
今天大早就把兩個小鬼挖起來,一家子熱熱鬧鬧地前往幼稚園去賭一把! 到了幼稚園,寬敞的教室的設備讓我大吃一驚,一個班級的教室就近百坪,全部為木地板,前方甚至有一個小舞台,室外則有各式樹木花草、木製的溜滑梯等遊戲設施... (細節就不多說,有興趣可以到政大附幼的網站去看)
通知書上載明了本次保留給社區居民共有22個名額,參加抽籤的共計33個人(據說去年有50多個小朋友抽,是因為龍年嗎?),所以真的是66%的機率,原則上運氣不要太糟,要抽到應該沒什麼問題。抽籤的方法是將所有小朋友的名條放入透明塑膠管,叫女兒自己將小管子放進籤桶中居然被桶口給彈了出來,這這這...
抽籤的方法很新鮮。由園長抽第一個,第一個的家長或小朋友抽第二個,以此類推,挺有意思的玩法。抽到第一名的媽媽笑著說她的大兒子也是抽第一個(運氣真是好到讓人忌妒),接著第二個、第三個... 我們的心情也開始往下沈,金包銀的前奏在腦海中緩緩響起,難到連2/3也抽不到嗎??
22個正取都抽完了,女兒仍然榜上無名,此時老婆已經一臉失望的表情。此時忽然傳來熟悉的名字,女兒被抽中備取第一名,哈! 這是可以被接受的結果,因為報到時跟老師打聽的結果,備取前三名入園的機率非常高,更何況我們是備取第一,所以除非中了樂透,否則應該可以如願就讀。
之後前三名備取的家長也被要求留下來聽取幼園簡介及家長注意事項,由於園區完全在政大校園中,所以我現在每天爬的後山及樟山寺步道等也將會是我女兒野外課程的活動範圍;老師們還說了不少小朋友教養、保健的注意事項... 開始愈來愈清楚地體認到自己不再只要寫寫程式、有份好工作就算擁有成功的人生,從此如何當好爸爸的角色也會是我績效考核中重要的KPI。女兒求學路的起點,也是我人生另一段路程的起點。

5/25/2006

實戰系列3-UltraEdit游標偏移問題的研究


UltraEdit實在是Programmer的好朋友,隨著版本的更新,功能愈來愈強大。對不同Language(C++, Java, Javascript, HTML>的保留字、標籤可以彩色標示之外,甚至還可以收合{ }所保含的程式段哩!
不過,印象中,新版本(11+?)的UltraEdit在編輯中文時,有時會有游標定位偏差的問題。最近用UltraEdit在編輯一個XML檔,就被搞得很煩。例如: 滑鼠點在第20欄,但輸入的文字卻被插入在25欄的位置。只是這個問題似乎又不是所有中文檔案都會發生,就更離奇了。
今天找了點時間,總算摸出它的Pattern。這個問題要發生有兩個條件:
1) 文件是UTF-8 Encoding(那個XML不巧就是UTF-8)
2) UltraEdit的字型選的是Courier New(UltraEdit 11的預設值)之類的字型

既然原因這麼明確,要解決就簡單了。在選項設定中,將字型選為"細明體"、"Arial Unicode MS"之類有涵蓋中文的字型,雖然醜了點,但游標偏移的狀況就會消失了。

黑式KM理論


說起來我也算Coding界的異類。
絕大部分的程式設計師談起搞程式抓問題,無不眉飛色舞;但只要一提到寫文件這檔事,頓時就面如死灰,判若兩人。如果你給一群Programmer兩個選擇:
要寫文件或是掃廁所? 大部分的Programmer會立刻衝向洗手間搶唯一一枝的馬桶刷。
我熱愛Coding,三天沒寫程式就會坐立難安;但是跟大部分Programmer所不同的,只要是邏輯較複雜的程式碼片段,註解列佔程式碼的比例常常會高達30%。而解決技術問題後,我多半會寫下技術心得(姑且稱之為知識庫文章,Knowledge Base,KB),跟同組的夥伴分享,更重要的是在多年之後再遇同樣的問題時,可以立即回想起所有的細節,而非抱頭苦思數小時,最後重頭Try起。
幾年下來,我大約累積了近千篇的KB文章,也開始進入倒吃甘蔗的境界。這一大堆自己留下的麵包屑變成我多年IT生涯取寶貴的資產,到後期有人向我求援詢問時,有時兩分鐘就能完成搜尋+轉寄的動作,立即結案。這樣的水準,即使稱不上"文件達人",也總可以說是"KB魔人"了吧?!
除了自己寫,在過去一小段扮演主管角色的歲月中,我也試著去營造撰寫技術文件的風氣。在當年KM喊得震天價響的年代,每每有與KM沾上邊的計劃,也總與我脫不了關係。但幾次經驗下來,我的心得是:
KM最困難的一段在於如何讓大家樂於分享。除了KM理論派一定會提的獎勵外,我個人則主張在蒐集的管道上不要加太多限制,例如: 設計了KB基本資料表,要填一堆類別、關鍵字、適用軟體之類的。當User想到要填就很頭大,往往就是讓KB貢獻量以幾何級數下降的元凶。在我看來,我們能累積的KB數很難達到"罄竹難書"的規模,因此用全文檢索或靠印象多半就能解決搜索的需求,這些詳細的分類與索引工程幫了倒忙,沒在快速檢索上做出貢獻,反而成為扼殺人們分享熱誠的幫凶。
我看過好幾次的KM工程,一開始就花了80%的時間在討論分類方式與項目,決心要用最嚴謹的知識體架構來歸納各個部門千奇百怪的知識。不過要涵蓋這麼大範圍的知識領域實在是件龐大的工程,加上人多口雜,大多被押著來開會的可憐蟲多半只想應付了事,通常還沒能熬到討論出結論,KM計劃就無疾而終了。哈!
所以我的主張是,要做KM,與其想架構、搞機制,不如快建起讓大家可以方便書寫、自由發揮的平台,早點打開知識匯入的水龍頭,這樣還比較實際。Blog、Exchange Public Folder都是很不錯的選擇,至於分類? 等知識多到每次查什麼關鍵字都會查出幾百筆時,再找兩三個人花一星期去整理,都還來得及。
簡而言之,Just Do It!!

5/23/2006

VS.NET 2003可以移除VSS6嗎?


VS.NET 2003中搭配的Source Control是Visual SourceSafe(VSS) 6.0d,VS 2005則是VSS 2005。
如果你在同一台機器上安裝了VS.NET 2003/VSS6.0d,再裝好VSS 2005 Client,則在開啟VS.NET的Source Control功能,就會出現VSS 2005的連線畫面。理論上,VSS 2005 Client己取代了原本VSS 6的位置了。

今天同事小娟說這樣有兩套VSS很礙眼,不知VSS 6是否可以移除?? 結果她還只是有這種念頭,手賤的我卻在要Check In一個檔案時,就順手將VSS 6給移除了。接著,慘案發生了~~~~
VS.NET 2003完全失去了Source Control的功能,原本有掛VSS的專案開起來時不會連線VSS DB,而Source Control的選單也一片灰白 orz


不過不要驚慌! (因為我已經替大家驚慌過了) 問題起因於MS的Source Control有標準的Interface(這樣3rd Party廠商也可以開發Source Control Provider),而這個介面是VSS 6, VSS 2005共用的。VSS 2005安裝後將介面指向自己的ssscc.dll,所以VS.NET 2003跳出的是VSS 2005的畫面;而VSS 6移除時,則不分青紅皂白地移除了所有SCC介面的設定(也就是原本已指向VSS 2005的設定),造成了VS.NET 2003無VSS可用。

解決方法是重新註冊VSS 2005的ssscc.dll的COM物件即可,指令如下:
X:\Program Files\Microsoft Visual SourceSafe>regsvr32 ssscc.dll

參考資料: http://blogs.msdn.com/korbyp/archive/2003/12/17/44209.aspx

5/21/2006

飛來橫禍


第六天了,看到女兒臉上黏著兩三塊敷料,笑著露出少了四顆牙的嘴,拖著仍包著紗布的腳在屋子裡跑來跑去,一群大人懸著的心總算放下來~~

週一的中午一點,午睡得迷迷糊糊的我接到電話,另一端孩子的媽用顫抖的聲音說女兒在阿公家附近出車禍了,說是阿媽打電話通知,現在正在等救護車,其餘狀況不明...
頓時腦中一股電流,神智立即清楚了。跟老板告了假,就死命地衝往現場,急奔的過程中,腦中閃過各式讓人心驚的想像,並只聽到自己的心跳。在快到的前一個路口,已聽見救護車刺耳的警笛聲,而且漸行漸遠,到了阿公家,果然已是大門深鎖,電話再連絡,確認已送去馬偕,互相叮嚀不要驚慌後,立即攔車前往醫院。
到醫院的時候,女兒已做過初步的傷口處理,左臉下巴及嘴有大面積的傷口,並已安排了頭/胸X光、牙科檢查,接著媽媽、阿姨也陸續趕來了。檢查的結果,頭胸骨頭無異狀,左虎牙掉了,兩顆門牙鬆動,口內有撕裂傷。此時躺在病床上的她很沈默,眼中盡是惶恐,而我的視線也幾度模糊...
急診室醫師在確認無危急狀況後,就安排要處理嘴裡的傷口,研判有需要縫針。本來試著只想用局部麻醉,但驚嚇過度的小孩很難靜靜地接受手術。因此醫師建議做全身麻醉,由護士在屁屁上打了一針,接著女兒開始恍神了,我們一直期待她安靜地睡去,但卻看到她眼睛張得老大,一下自顧自的看自己的手掌,一下口中發出"啊!"的聲音。此時醫生才解釋這種麻醉藥不會昏睡,而是讓感覺分離(後來才知道,麻醉所用的其實就是K他命,換句話說,當時女兒正High的咧!) 最後醫生清除了口中砂石,總共縫了六針。
麻醉後需要一兩個小時的復原,女兒的神智愈來愈清醒,卻很像爛醉的境界;先是忽然說"媽咪! 我們來跳舞吧!!",一下子又說"咦,你怎麼有兩個眼睛、兩個鼻子、兩個嘴巴",接著還說"那個有兩個一模一樣的人耶!"。初步處理完成,護士就交待了臉上只能用眼藥膏,不可用優碘以免色素殘留,同時不能沾水,同時兩天後預約了整型門診,兩週後去看牙科,看鬆動的牙是否有改善,若無就要拔除,同時快五歲了,所以暫不需做假牙,要等恆齒長出。
兩天後,臉上、嘴裡的傷口雖有些化膿,但傷口已明顯地變小,有些地方已經結痂,但整型門診的醫師建議隔天約個門診手術,徹底地清創,並貼上人工敷料(是一種人造皮膚,會跟傷口長在一起,並在新皮長好後自動脫落,就像痂一樣),這樣才不會留疤,但是需要全身麻醉。我們接受醫生的建議,隔天一早就做了手術,由於牙齒鬆動嚴重,為避免將來拔除還要再痛一次,整型醫師就利用全身麻醉時,一併將三顆鬆動的牙拔了。手術完後,小小的臉包滿了紗布,但隔天就可拆下,只留上與人中、右臉及下巴三處的敷料。果然整型是個精巧的產業,傷口清得很乾淨,嘴裡的傷口也處理到不太看得出縫痕。只是這番拆騰,別說小孩,沒有任何大人會願意經歷。馬偕的醫生與護士專業而親切的服務,倒是在這令人心慌意亂的當下,提供了相當強大的支持,是這次事件中特別要感謝的。
從只能喝一點點飲料、布丁,到可以吃炒蛋、餅干;由整天嗜睡寡言,到會亂跑、頂嘴。第一次覺得會惹人生氣的女兒特別可愛,心中的大石總算放下。但願全天下的父母,都不要經歷這種可怕的磨難~~~

5/19/2006

貓空行腳2-樟山寺步道


CSTTrailEntrance

樟山寺步道是條適合爬山幼幼班的入門路線,全程1公里均為花崗岩石階,不易溼滑,而只有前300公尺坡度較陡,後面十分平緩好走,而且一路均有樹蔭,走來頗為輕鬆。
由行健道或環山道路走到政大後山道路的最高點,即為樟山寺步道的入口:
樟山寺步道的終點即是樟山寺,每次到訪總是人聲鼎沸(即使是早上七點),後來才知道它是木柵景美地區頗具盛名的寺廟。廟中有免費的茶水無限暢飲,所以當你在步道中看到身上不是背水壺而是掛著空茶杯的歐吉桑時,千萬不要太驚訝。

CSTemple

到了樟山寺後,可以續攻好幾個山頭及銜接其他步道系統,於是,樟山寺步道便成為我每週登山行程的暖身操。路線圖如下:


【Performance Tuning Tips】
由於這段路已成為Tuning過程的必備預熱行程,目前有機程式產生器執行完成的時間已可下壓至15分鐘。

5/13/2006

貓空行腳1-行健道


距我偉大的有機式程式碼產生器的Performance Tuning計劃啟動已近半個月了,但剛好最近工作較忙,因此一直沒有時間跟大家分享Tuning的經驗。上週四工作進入另一個階段,利用喘息的空檔,讓我一一揭露調校過程的種種秘辛吧!
從三歲起就在木柵生活,又因為父親過去任職於政大,自小對於政大校園就不陌生;但步入社會後,生活作息整個改變了,逐漸步入"上班下班、結婚生子、了此殘生"的禪定境界,反而少到政大晃。但兩個小鬼大到可以四處亂跑之後,發現近在咫尺的政大校園一塊又一塊的草皮,實在是消磨小惡魔體力的好場所。
當這次計劃要好好消耗老惡魔熱量時,我的腦筋又動到政大廣大的免費資源上了,於是從校內延伸到校外的"樟山寺步道"路況良好、距離跟坡度都是幼幼班等級的,很適合麵龜級的技客(Geek)入門,所以我的第一階段調校就以這條步道為中心向外延伸。
不過樟山寺步道的入口在政大環山道路的頂端,由政大的平地校園要到後山頂,有好幾種走法,我最後迷上了最刺激的走法,由"行健道"以最短距離衝上山頂,讓心跳飆到要破胸而出,那種感覺其實也挺讚的。
行健道的入口在傳播大樓旁,中間靠下有一個向左的叉路接其他步道,其餘就是階梯、階梯、階梯,一路直上山頭。而全程的坡度應該都不小於30度,有一段甚至超過45度。不知是否因為這麼陡,兩旁的"森林"(我覺得它的氣勢不只是樹林)中的大樹又直又高,幾乎高達四、五層樓以上,而其間的筆筒蕨葉子大得像電影中會有怪獸出沒的原始叢林,感覺頗為特殊。






行健道起點兩旁的參天巨木

行健道的頂點會接到兩個涼亭,可惜視野並不佳,沿個亭旁的水泥路向前行,穿過環山道的大馬路,就是樟山寺步道的登山口了。

Performance Tuning Tips
行健道的階梯只398階,程式產生器最快的執行速度是5分30秒處理完成! (但CPU 100%,水冷系統全力運作,導致有大量水珠凝結滴落地面。)

5/12/2006

令人無言的Yahoo Mail Antispam功能


最近網拍買了兩枝登山杖,得標匯款後立即寫了封Mail給賣家,想說公司的Mail System應該比較穩當,就用公司的信箱寄了封包含匯款資料、收件地址的Mail。賣家的自我介紹說會在收到通知隔天出貨,我還在信中註明請他寄出後Reply通知我,沒想到等到第三天都還沒下文! 忍不住打了賣家的行動電話,賣家說他也在納悶兩天前有一筆300元的轉帳他找不到下標者... 我腦中才轟然響起,去年替公司發電子賀卡時,就發現公司寄出的Mail會被Yahoo Mail歸入垃圾信件匣,應該是這原因讓我白等了三天!!
當下我用公司Mail及Gmail各寄一封,Gmail的有到,我再用公司Mail寄到我自己的Yahoo信箱,果不其然,在垃圾信件匣找到了剛寄出的信。
說起Yahoo的Antispam,實在很妙,去年電子賀卡事件時,公司的MIS跟Yahoo接洽過,Yahoo的回答是:
他們精心研發的垃圾信機制是由使用者按"這是垃圾信"檢舉來決定誰是垃圾信,因為有不少使用者將公司的信歸成垃圾信,所以Yahoo就只能接受這個結果,雖然他們會好心的提高我們公司的門檻值,但如果還是被歸成垃圾,就沒辦法了。
這真是個好回答! 他們的邏輯是: 如果某個@blah.com.tw的Mail被檢舉成垃圾信,代表所有來自@blah.com.tw的信都是垃圾信;就好像回教世界出了個賓拉登,所以所有回教徒都該被當成恐怖分子一樣荒謬。事實上,Antispam的學問可多了,我有看過一些Antispam System會從信件的文件、用字、排列、發信時間等等因素去評論一封Mail是垃圾信的機率,再作篩選。單用Mail Address一口氣封鎖整個網域的Mail,實在有點粗糙草率。
如果"寧可錯殺100"是力求謹慎的表現,偏偏Yahoo Mail在垃圾信的過濾能力倒也只能說平平。例如由昨天晚上9:00到現在,總共收到46封垃圾信,其中漏網之魚有5封,約11%,與Gmail有段距離。而讓我最不能接受的是--Yahoo Mail似乎很信服時光旅行的理論,不管是1900年或2038年的Mail,它都照收不誤,這是"寧可錯殺100,亦可錯放10個"嗎?
YahooSpam

5/07/2006

登山生涯的第一個三角點


開始熱衷於爬山之後,在網路上陸續看了一些山友的文章,其中攻頂後的首要任務是要找到【三角點】,就好像划龍舟一定要拔到旗子一樣,甚至最近發現一位熱衷登山、GPS、養魚與飛行的奇人(他的工作也是搞電腦的),將他達陣過的所有三角點整理成網頁
三角點是什麼? 說真的,純粹只把登山當成減肥選項的我完全外行,幸好有Google。如果你想知道三角點的介紹,可以看這裡這裡
總之,在看過了一堆登山達人的三角點蒐藏後,今天我也拿到了此生的第一個三角點---待老坑山。為了展現技客(Geek)本色,特別在單調的石柱上放上象徵科技的手機跟鏡頭蓋(本想放上Canon
10D的機身才算雄壯威武,不過這樣各位就看不到照片了,只能看一張歪七扭八的素描圖想像。),這就是我人生的第一個三角點!

5/04/2006

Performance Tuning的第一步


Measurement是Performance中最重要的第一步,借用微軟.NET效能專家Rico Mariani的說法:
... I’ve said before, that if you make no measurements, you’re pretty much doomed to miserable performance. If you can get good performance without measuring then I think that you’ve missed your calling in life and probably you should change careers to “Professional Lottery Ticket Picker” and please call me up...
from http://blogs.msdn.com/ricom/archive/2004/02/17/74659.aspx

是的,若無法界定良好的衡量基準,就別妄想一窺Performance Tuning的究極奧義。
因此,Measuring Tool現身了...

這個奇特的TANITA Performance Monitor與大家熟知的效能檢測工具大不相同,因為這次要調校的對象不是一般的ASP.NET Application,而是某個有機式的智慧型程式碼產生器,程序會複雜很多。在調校前,目前Performance Counter的指數約在85左右,我們希望透過這次的Performance Tuning,可以將Counter值下降到80左右,詳細的效能調校過程,會再陸續跟大家分享。

5/02/2006

Windows系統排定工作的自動化部署與管理


我的工作環境中,有台Server上安排了數十個排程VBS檔進行一些背景作業。由於這數十個排程都需要指定特別的帳號去執行,傳統排程的建立都靠手動,一旦要部署到新機器上或是當排程身份要變更(例如: 換Password)時,就是件頭大的事。
排程的複製倒可以透過Copy X:\WINDOWS\TASKS下的*.job完成,但是這無法解決指定帳號/密碼的問題。依據先前Consult微軟的經驗,似乎無解!
最近面臨了要更換密碼的需求,所以我很用心地去Google拜了一下,沒想到很快就挖到一個寶:
* SchTasks.exe的使用說明 http://support.microsoft.com/kb/814596/?sd=RMVP&fr=1
原來Windows XP有個SchTasks.exe的命令列工具,可以DOS指令的方式完成排程工作的管理。那Windows 2000呢? 將SchTasks.exe Copy到Windows 2000下執行,會有以下的下場:

版本不合,不能用! 幸好,此時挖到了第二個寶! 原來這個程式在本質上是可以跟Windows 2000相容的,發揮駭客精神,用UltraEdit修改程式其中的一個Byte,就可以瞞天過海了!

試用了一下,果然就可以利用SchTasks在Windows 2000上設排程密碼,終於可以解決惱人的排程部署及管理問題,爽快!!
D:\WUTemp>schtasks /change /tn zschtaskdemo /ru labs\userX /rp blahblah
成功: 排程工作 "zschtaskdemo" 的參數已經變更。

5/01/2006

神秘的櫻花果


最近在一堆政治"爆料"新聞中,有則輕鬆的爆料。有民眾"踢爆"(不知曾幾何時,發現真相都得用"踼"的)--阿里山的名產"櫻花果"其實都是用小葡萄醃漬的,所以頗有欺騙消費者之嫌。
不過,這則消息有趣的地方在於業者用小葡萄製作算不上偷工減料的黑心行為,因為真正山櫻花的果實,核大肉少,不太可能做成蜜餞,頂多拿來釀酒。若是如此,充其量只能說它借了櫻花的浪漫,讓人在食用時衍生不實的幻想,但所有的化妝品不都是這麼賣的嗎??
只是昨天看新聞,有位業者老兄的回答很絕。這位強者理直氣壯地說: "阿里山最有名的就是櫻花,我們取名櫻花果也沒有錯呀! 不然那個櫻花勾吻鮭跟櫻花牌抽油煙機不也都有問題... "
也是啦,何嘉仁美語也不是每一班都是何嘉仁在教,更不用提那個"長頸鹿"美語了,哈!