星期二, 10月 31, 2006

增加FreeBurner的RSS

上星期Blogger猛當,為確保能讓宇宙中少數有訂閱本Blog的鄉民,特地去註冊FreeBurner的帳號,確保若搬家也能繼續提供訊息。

新Feed: http://feeds.feedburner.com/tenyitseng ,按本Blog右上方訂閱圖示也可以。

Windows 處處皆後門

目前地球上用電腦的人大概99%以上都用過Windows,但是Windows不安全並不是單純因為用的人多。同事今天發現他的電腦關機時會自動執行regsvr32,於是google後找到Windows有4種自動執行script: Logon, Logoff, Startup, and Shutdown。而且加上自動執行的HKLM及HKCU 的Run與RunOnce Registry,後門管道真是暢通呀~ 前陣子流行的Desktop.ini自動執行,連Startup Control Panel作者都不知道。再加上Service、AutoExec.bat這些正常管道,寫後門永遠不怕沒地方藏。

若中後門,不要懷疑,去找SpyBot-S&D。裝完更新後,重開進安全模式掃後門。不放心的話再裝Ad-Aware SE Personal掃一次,大部份都能解決。
若中後門可以試試Spyware Terminator,不放心再用SpyBot-S&DAd-Aware SE Personal掃一次。
倘若真的沒辦法,恭喜你,獲得重灌一次的獎賞。

參考資料:
http://support.microsoft.com/kb/198642
http://www.microsoft.com/technet/archive/community/columns/tips/2kscript.mspx?mfr=true

IE7與IE6並存

今天同事希望能在同一台電腦同時安裝IE6與IE7以測試網頁相容性,於是找到以下資料:
Internet Explorer 7 running side by side with IE6. (standalone)
Install multiple versions of IE on your PC
IE7 Standalone (Updated for IE7 Release)
IE7 Standalone Launcher

目前微軟官方建議以Virtual PC或VIrtual Server測試網頁相容性,Side by side安裝是"unsupported" configuration。

比較起來,Firefox就好得多; Firefox 可以用 "firefox.exe -profile 'Profile資料夾'"來指定 Firefox 所使用的 Profile。因此可以同時裝許多版本的Firefox,只要記得用不同的profile即可。參考:Portable Firefox 使用、自訂與中文化

下載Firefox

我不罵無名

最近無名真是屋漏偏逢連夜雨,從個人首頁開始到Raid故障,現在機器還沒修好又發生攻擊Pixnet事件。

我不罵無名,只想說:
ab -n 100000 -c 10 http://p5.p.pixnet.net/albums/userpics/5/0/228250/1161862404.jpg
這樣真的不會造成當機,如果要用DDoS應該改成
ab -n 1000000 -c 100 http://p5.p.pixnet.net/albums/userpics/5/0/228250/1161862404.jpg
最好同時用10台PC一起ab。

我在2000年時測過,一般PC的承受力大概只能到50 request/second,如果是Ultra Sparc可以到200 request/second。

純粹分享經驗。

參考:
http://blog.woixv.com/?p=424
http://blog.pixnet.net/post/admin/505742
http://blog.yam.com/charles0714/archives/2383853.html

星期一, 10月 30, 2006

如何成為出色軟體人才

如何成為出色軟體人才?專家:和人才相處

「就像下棋一樣,如果一直和程度差自己很多的人下,久而久之程度會變得一樣爛,和人才切磋的好處是,能夠觀摩出如何做出好的研究成果;然後有系統地不斷改進自己的疏失,即使自己的基礎或天分未必足夠,五年到十年間也會有長足的長進」

Martin Fowler's Bliki 中文版

很久沒看Martin Fowler's Bliki 中文版,今天一看,發現最近都是好文章。

版本管理:最近快說破嘴,MIS都不肯用Subversion,無言...
更廣泛的版本管理 多台桌面電腦 讓版本管理遍地開花

Ruby:評估Ruby http://www.martinfowler.com/bliki/ruby.html
昨天去天瓏,沒找到Ruby的中文書,只有Ruby on Rails,殘念...

查克拉

許多人在火影忍者裏看到查克拉Chakra)這個名詞,其實並不是虛構的,而是源自於印度。

參考:查克拉 Chakra   活化人體能源系統 激發潛能

獨孤木,加油!

剛看到獨孤木的從有一個點子開始,讓我有不少感觸。

談到挫折,我自己是四流高中畢業,大學也是不入流的私立大學,還混了六年,看了一下只有蔡寶進比我猛。這輩子沒聽過獎學金這玩意,成績永遠是吊車尾。比挫折...學生時代泡妞永遠失敗,考試考不好,運動也不行,程式也寫不出個上檯面的東西。後來還有當兵時帶的流氓兵放話要砍我;去考台大研究所口試30分,存心把我幹掉,所以當然就沒上。

人生,本來就沒有稱心如意,如果我像獨孤木老大那麼順利,可能遇到挫折就自殺,不會混到現在。所以我一直以打不死的蟑螂自居,別人在說佐助,我卻提鳴人。

雖然我自己並沒有創業,不過卻有幾位和我年紀相仿的朋友有經驗。對於網站創業成功我認為需要四個要素:請參考我的聊YouTube

基本上,我並不愛錢也不愛名,所以不想創業。但最近感到企業文化的腐敗,若有朋友找我去一起奮鬥,說不定也會離開這個沒成長機會的公司。

最後回到主題:獨孤木,希望你能創業成功,並繼續寫專案管理的文章,加油!

星期日, 10月 29, 2006

Blogger故障

經過不斷的測試,終於知道Blogger在Firefox 2.0不能用的原因,居然是因為Blogger故障。這幾天都會陸續發布失敗或是無法連結,但到今天看到畫面才確定是Blogger的問題。

意外知道Blogger用Tomcat架站,真讓我大吃一驚。Tomcat雖然算是非正式標準,可是速度並不快,要架站我比較喜歡Resin(雖然要錢,但也是OpenSource)。

10/30 Update:不知道是不是和DoS有關,或是Spam廠商太強,隔了一天仍然常當,當得更嚴重。

一開始發生錯誤
Blogger 錯誤畫面

後來導向到錯誤訊息
Blogger 錯誤畫面 2

最慘的一張
Blogger 錯誤畫面 3

今日連結

美國物理學家用數學 證明吸血鬼不存在 這個問題我早想過,就像數字搜查線一樣的唬爛,看看就好。不過本新聞有點錯誤,傳聞中必須被吸血3次而且沒死才會變成吸血鬼,如果被吸乾就只能當乾屍。

即時通訊 小心隱私權遭侵犯 看到這篇就聯想到幾個月前我告訴一位超級小白,說我要開始監控MSN,會把她的談話內容寄給她,沒料到她居然回答說:"謝謝,不用了,我自已有通話記錄"。如果對監控msn有興趣,google "msn sniffer"會找到幾個軟體,效果都不錯。

Yahoo!奇摩影片分享 最近沒注意的情形下,台灣Yahoo也加上一個前導網頁,仍然是連結到美國Yahoo。前幾天才提到SoapBox,Yahoo也不輸人後,競爭果然激烈。另外值得一提的部份是美國login頁面都自動改為https,台灣Yahoo的登入畫面仍然預設為htttp,應該要改善一下吧?

星期六, 10月 28, 2006

網頁編碼

今天看到一篇AJAX入門,應該是某位教授的心得。 他寫得很好,可惜有一個小地方美中不足,就是他用Big5編碼。

自從2001年以後,我就不再用Big5寫網頁,全部改用UTF-8。他所遇到的問題,我在2001年也遇到:若使用Big5,你不知道client端送過來的是Big5還是UTF-8。而且用Big5編碼時,碁、粦、堃都出不來,何苦為難自己呢?我連Linux的Locale都改用zh-TW.UTF-8。

21世紀是全球化的時代,無論前端網頁或後端資料庫,都改用UTF-8吧!

出處:http://web.nchu.edu.tw/~jlu/classes/xml/ajax/ajax.shtml

星期五, 10月 27, 2006

基因比對

常常在電視上看到記者或是CSI影集對DNA比對說得有多神奇,但其實目前的技術,並非一般人所想像的以電子顯微鏡去看。

我在兩年前到台大找一位唸博士班的同學,看到DNA分析的方法:首先將細胞樣本以離心機分離,再取出細胞核打碎萃取,利用化學藥劑染色,接著使用正負電子吸引力讓DNA片段在洋菜膠裏移動,稱為電泳。帶負電荷的DNA分子會向正極方向移動,分子愈大移動愈慢,最後跑出來的片段圖就是大家所常見的DNA排列圖。真正的分析,要把一段段不同的DNA片段利用化學藥劑與光學反應來判斷成分。這是目前分子生物學所採用的方式,說真的,看到後蠻失望的,與想像中差很多,感到人類的科技還是差很遠。

隨便聊聊,內行人請不要砍我。

參考資料:
http://www.ndhu.edu.tw/~life-science/exp/003.htm
http://juang.bst.ntu.edu.tw/BCT/Chapters/Chap3-1.htm
http://lib.fg.tp.edu.tw/research/%E7%AC%AC%E4%B8%83%E8%BC%AF/%E6%9D%8E%E5%AD%9F%E8%AB%AD%E9%99%B3%E6%98%AD%E5%A6%A4/%E7%A7%91%E5%B1%95%E5%85%A7%E6%96%87.doc
http://140.122.147.172/cultivation/91%E5%B9%B4/%E7%94%9Fpdf/218%E6%9E%97%E5%A4%A7%E9%9B%85.pdf

What's the next?

看到William大大的幾則關於動態型別語言的事件,讓我想起半年前我寫的銀子彈的迷思,看來我也是孟岩所說的食古不化那群人之一。

當初寫那篇我並不是不瞭解動態語言的好處,而是不知道Ruby比起Python好在那裏,不知道Ruby有什麼魅力,讓大家蜂擁而上,尤其是Perl 6即將面世。自從使用過Perl與Python後,有些日常工作所需的小程式已經不需要C++、Java來做。但由於對語言本身不夠熟悉,例如遇到檔案編碼的問題,我只能求助於熟悉的Java。contagious指教一篇沒有銀子彈,只有適用性,指出Syntax Matters,讓我瞭解到Ruby是簡潔的語法吸引他們。但是RoR的架構並非其他語言做不出來,現在就有GrailsRIFE等Java的Framework;再看Xexex的Java版訂便當系統Ruby版訂便當系統,讓我更覺得熟悉度很重要。

目前這幾位高手都是非微軟派,若是聖殿祭司,可能會用WPF做一個Web/AP兩用的系統;以目前的技術而言,用Asp.Net 2.0 + Atlas,一個不具備Web背景知識的新手也可以做出不錯的效果。微軟以IDE包裝出快速開發的環境,contagious所說的RoR優點,Visual Studio幾乎都具備。

今天我這個資訊外行人丟出這個問題,因為我實在很想知道,到底什麼語言會是Java的取代者呢?很明顯地,絕對不會是CSharp :P

星期四, 10月 26, 2006

標準的DOM+JavaScript設定屬性

今天和Randy討論IE7相容性時,他提到設定style的不相容,我建議使用DOM 2+JavaScript Core,於是寫了一個範例來測試,最後DOM標準寫法在Sofari、IE6、IE7、Firefox都可以正常使用。

建議像我一樣不熟DOM模型的人,可以用Aptana這套免費好用的JavaScript IDE。

注意:今天發生一個陷阱,obj.style.width="100px"; 第一次我誤打成 obj.style.width="100px;", 多一個分號在Firefox居然可以執行,但其他Browser就認為錯誤,IE稱為"引數錯誤"。另外obj.style.width="0px"會錯,obj.style.width="0"才是正確的寫法,不可不注意。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>測試</title>
</head>
<body>
<script language="JavaScript" type="text/javascript">
<!--
function click2(xyz){
var obj;
obj = document.getElementById(xyz);
obj.style.width = "100px";
obj.style.height = "20px";
obj.value = "屬性已設定";
}
-->

</script>
<form name="form1" method="post" action="">
<input type="text" id="t22" name="t22" value="" style="width: 50px; height: 50px;"/><input type="button" name="b12" id="b12" value="按我" onclick="javascript:click2('t22')"/>
</form>
</body>
</html>

Zonble 出名了

Zonble 出名了!今天看到人氣部落格>> 雜誌產生器 人人都是大作家網路Kuso「雜誌專訪產生器」 人人都能當郭台銘!雜誌產生器 人人都是大老闆 政大助教反諷創意 意外爆紅雜誌產生器 人人可當作家 楊維中寫程式嘲諷新聞界 輸入關鍵字 就出現「深度報導」搞笑版

看到新聞以下文字

楊維中在撰寫「雜誌產生器」電腦程式前,在網路世界已小有名氣。三十歲的他,現在是台北藝術大學戲劇所博士生,並在政大新聞系擔任助教。

楊維中大學念新聞、碩士學藝術,愛玩樂團、會畫漫畫、喜歡寫文章,在學弟妹眼中是「駭客級」電腦高手。

對社會現象觀察敏銳的他,五年前剛退伍時,曾因為看不慣軍中長官們的惡形惡狀,寫了一本書「國軍部隊的真相與荒謬」,探討軍中問題。

兩年前楊維中曾自創詞曲,寫了一首「Orz之歌」,在網路上爆紅。...


記者們實在太強了,只差沒把他祖宗八代挖出來。最後,世界日報這張照片是不是zonble本人呢?

修改Firefox 2.0預設搜尋引擎

今天忽然發現Firefox 2.0沒有原先習慣的"Google好手氣",找了一下。
用Google搜"firefox 2.0 google 預設",第一筆就是我要的答案,而Yahoo則在第一頁都看不到,有作弊之嫌:P

解法: http://forum.moztw.org/viewtopic.php?p=87283

網址輸入 about:config
keyword.URL 值改成 Google 好手氣
代碼:
http://www.google.com/search?btnI=I%27m+Feeling+Lucky&q=

IE特有的事件處理方式

最近看到某大軟體公司的asp程式,發現IE特有的事件處理方式。

宣告函數名稱: 控制項 id_事件() 就會在事件發生時觸發。限定在VBScript使用,JavaScript無效。

IE7在beta版時把這些非標準DHTML移除,但在正式版又重新支援,另一個例子像document.all(id);如果改寫,請記得改為document.getElementById(id),這是目前的DOM標準。

另外,在這次測試無意中發現Firefox的JavaScript 函數名稱會分大小寫,而IE不會。

以下為測試網頁原始碼:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>測試IE6、IE7與Firefox 2.0相容性</title>
</head>
<body>
測試OnChange事件,隨便填一個字後點到空白處或按Tab
<script language="vbscript" type="text/vbscript">
<!--
sub t1_onChange()
alert ("t1 OnChange VBScript 事件")
end sub
-->
</script>
<script language="JavaScript" type="text/javascript">
<!--
function t1_onChange()
{
alert("t1 OnChange JavaScript 事件");
}

function ClickMe()
{
var label1;
label1 = document.getElementById('t2');
label1.value= label1.value + "getElementById ";
label1 = document.all('t2'); // Firefox執行到這裏會錯
//Update: 現在Firefox會接受document.all,但會有警告,可打開錯誤主控台看
label1.value= label1.value + "document.all ";
}
-->
</script>

<form id="form1" name="myform" action="http://search.blogger.com/">

<input type="text" id="t1" name="t1" onChange="javascript:t1_onChange()" />
<input type="button" name="b1" id="b1" value="按我" onClick="javascript:ClickMe()" />
<input type="text" id="t2" name="t2" value="" />
</form>
</body>
</html>

宅男無所不在

今天早上因故經過捷運南京東路站,看到女F4在發爽報,居然也有一堆宅男在拍照。一定會有人說那是記者,但裝備的程度也差太多,從掌上小型DC到DV都有,記者拿的相機應該都是重裝備。

居然還看到50歲左右的宅男,如果不想被人當成宅男,就像女神事務所某集的宅男一樣,擺脫數位生活,走向現實吧!

星期三, 10月 25, 2006

Zonble的雜誌專訪產生器

Zonble雜誌專訪產生器 ,實在太屌了,自己看吧。

出處: 話說那個雜誌專訪產生器…

FreeBSD遇到無法刪除的檔案

FreeBSD在mergemaster後,會在/var/tmp留下temproot或temproot.xxxx之類的目錄,頭一次遇到時我還以為是硬碟有壞軌,後來第二台也這樣才發現是加上system的flag,以 ls -lo 可以看到schg的flag,用以下指令解除:
chflags -R noschg [目錄名稱]
或是清除全部旗標
chflags -R 0 [目錄名稱]
要注意在 kernel_securelevel > 0時不能改 flags,所以最好在 single user mode 做 mergemaster。
當初設計是怕有人去動kernel之類的重要檔案,Linux也有相同的設計,不過太多沒自己編譯Linux的kernel,已經忘記怎麼下指令 :P

參考資料:
http://www.csie.ntu.edu.tw/~piaip/docs/FreeBSD/cfbhow2.txt
http://www.freebsd.org/cgi/man.cgi?query=chflags&sektion=1

MSDN Magazine提供七國語言版本

聖殿祭司的 MSDN Magazine現在提供七國語言版本如同Je所回覆:微軟的msdn中文化人力不足,都是用翻譯軟體先自動翻過,才再用人工去修訂的。因此常會出現怪怪的字句。

看看Connection String就知道,能讀英文就不要讀中文版。

Update:請參考Connection String的回應。

星期二, 10月 24, 2006

見笑了

qing藉我的一篇爛文為由寫了篇精采的Dynamic Binding vs. Static Binding,真是見笑了,他這篇也是必看文之一。

我最近在看XP的書籍,所以就順便看了不少Pattern和Principle,主要的參考書是我提過的Agile Software Development,Agile之中,我還是主推XP。

如果誰還有十年的的486-66能夠用,可以再測一下binding速度會不會差很多。如果二十年前的CPU就像現在這麼快,可能Stroustrup就不會把C++設計得這麼不動態。

關機

同事曾經寫過一篇談MAC OS X關機/重開機不便之處及我目前的解法,而我在不同的OS下不同的指令。

關機(直接關掉電源)
XP/2003:shutdown -s -t 5
Linux:halt 或 shutdown -h (如果shutdown -h now和shutdown -h +0相同,-h表示halt)
FreeBSD:halt -p 或shutdown -h(在Linux預設值是-p,指poweroff,而FreeBSD預設沒有-p)
OS X: halt (OS X的halt沒有-p)

如果下shutdown now,在Linux/FreeBSD會進入single user mode

重開:(似乎大部份OS都相同)
reboot或shutdown -r

通常,我都會以輸入最少字數達成目標為最高指導原則。

Subversive

剛在Eclipse Plugin Central看到Subversive,號稱比Subclipse好。這家公司 http://www.polarion.com/ 是做ALM產品,另外有 FastTrack也是免費軟體。

剛試了一下Subversive不太會用,所以還是換回Subclipse,FastTrack還沒時間玩,有興趣的人自己試。

Windows Server 2003 XP Conversion Pack

今天有同事希望能在Server 2003上啟動視訊加速功能,而Server 2003預設是不啟動,也沒有系統還原功能。國外有人做出Windows Server 2003 - XP Conversion Pack,除了打開加速等之外,還能關閉Event Log及IE增強安全性、打開磁碟自動mount(在2003 SP1已打開為預設)。

網址:
http://www.tcmagazine.info/articles.php?action=show&showarticle=204
http://www.tcmagazine.info/modules.php?modid=4&action=show&id=427

星期一, 10月 23, 2006

Firefox 2.0的問題

剛剛才說Firefox2.0發佈,我馬上就發現有問題。我連到Blogger一直發生連線失敗,原本以為是Blogger有問題,沒想到換用Flock就好了。原本的RC版用了一陣子都沒問題,明天到公司我再試看看Win32版。

搜尋結果有修正

剛才去搜尋"蔡依林的部落格",發現美國Yahoo是第一筆是ijliao,Google第二筆是ijliao,第三筆是Jolin's Blog;而台灣Yahoo第一筆已經修正為Jolin's Blog,第三筆才是ijliao。

改天要問一下Yahoo,是不是人工修正的?還是靠分類呢?

控制夢境

天佑的自由天地看到怎樣控制夢境,讓我想起一位同學,擁有控制夢境的能力。
像我這種意志力薄弱的人做不到,他在夢中遇到危險,就會集中意志轉危為安,或是遇到美女時變成香豔刺激的限制級內容。

我自己在做夢時,都以為是真實,而這種Lucid Dream必須知道自己在夢中,才能控制夢境。據這位同學表示,控制夢境需要消耗相當多的精神力,現在上班很累,所以就不去控制夢境囉~

Firefox 2.0 release

Firefox 2.0 release偷偷地放上去了,應該明天就會自動更新。

大板根一日遊

星期六去大板根玩,本來只想去爬爬山,沒想到它的山實在很小,最大圈的不過40分鐘就爬完,中的30分鐘,小的20分鐘,官方時間是120分鐘、60分鐘、30分鐘。

所謂的大板根是指大樹根,號稱芬多精超高,如果只是想爬山,不如去中和的烘爐地。我是因為不用錢,就去運動一下,順便吃一頓,過沒有電腦的一天。

當天中午吃得很好,由於主辦人與工作人員認識,特別加菜讓我們吃到很撐。下午可以去溫泉Spa或吃下午茶,我又吃了一頓還不錯的下午茶,聽說溫泉很棒(而且很貴),應該選溫泉Spa比較好。

沒圖沒真相,但我那天相機外借,大板根的首頁又是我最討厭的Flash,所以等善心人士借照片再補。

星期日, 10月 22, 2006

隨便查查

今天看到來時路,猜想他應該是賴明宗。一時興起,想看看小時了了的這三位作者,年過三十後在做什麼。

google後賴明宗應該不是研究T細胞的博士,所以是 http://bbs.ee.ntu.edu.tw/boards/Programming/6/12.html 的作者。
還真的很低調,查不到什麼資料。 不過William有說他在ptt主持CSSE, http://william.cswiz.org/blog/archives/2006-06-21/oobook-reprint/ ,看來高手間有在聯絡。

賀元
http://www.youthwant.com.tw/column/index.php?d=0404268
http://www.techvantage.com.tw/content/027/027094.asp
http://www.epochtimes.com/b5/2/2/25/n172706.htm
剛才連不上數位營運,不知道這間公司做什麼,參考 http://www.104info.com.tw/hotcompany/13124525000.htm 。
我當兵時認識一位自稱是賀元小學同學,賀元當時家住永和,家境不錯。
另一位高中同學在資訊人待過一年多,最後二個月薪水換一台Pentium 120回家。

另一位作者,google第一個就是他的blog,所以自己找吧。

可能有些小朋友不知道,這幾位當年在建中就很活躍,還主持一些BBS,用電話撥modem的BBS。出書時不知是高三還是大一?現在都很保守,除了偶爾有賀元這名字外,已經不再聽到他們的風聲,直到世紀末軟體革命復刻版出現。

我大學時認識幾位資工系的學長,功力不輸他們,DOS時代就玩GCC,目前不是在園區就是出國。

星期五, 10月 20, 2006

網路混亂時代

紅色長角三倍速關於自動播放撲滅委員會。,提到了現在紊亂的網路現象。
  1. 首頁放一大張FLASH。很多的豬頭主管就喜歡來這套, http://www.taiwanmobile.com/ 看到我頭都昏了。不好意思,敝公司的首頁也是,再等個1000億年我當上總經理,一定會換掉。
  2. MSN 的動畫取代文字的問題。一開始真的很有趣,會動的文字出現時,令人耳目一新。但當網路速度慢時,簡直不知所云;後來更出現象形文後,常常猜不出在寫啥。
  3. 火星文、注音文。在mobile01也有提到,30幾歲的老男人裝可愛,這確實會對仕途造成影響。
想起十年前的BBS和News,是學習新知的優秀管道,曾幾何時,變成spam的窩,現在蛋捲廣場似乎只剩下聊天的功能。現在七年級還有人知道Agent嗎?以前FreeBSD有問題,第一個想到問jdli,現在能問誰呢?面對每天近百封的spam與轉寄mail,到底看是不看?我現在還是離開電腦,去戶外呼吸新鮮空氣吧!

我們只有一個地球

今天忽然看到南極臭氧層破洞創新紀錄 等於761個台灣大! 最新監測 南極臭氧破洞擴大,記得去年不是說臭氧層破洞變小了?實在是讓人憂心,真希望能夠抵制米國呀!

參考資料:
京都議定書
WiKiPedia上京都議定書的解釋

變更 Windows XP / 2003 產品金鑰

有朋友問我如何變更 Windows XP 產品金鑰,本來是沒有打算貼在這,但發現微軟官方居然有寫 如何在執行 Windows XP SP1 和較新版 Windows XP 的電腦上變更大量授權產品金鑰

以下這句寫得很含蓄
"如果您使用「遺漏」的產品金鑰 (一般大眾皆知道的產品金鑰),在多個電腦上部署 Microsoft Windows XP (大量授權安裝),您可能無法安裝 Windows XP Service Pack 1 (SP1) 或較新版的 Windows XP,或者是從 Windows Update 網站自動取得更新。"

這一篇的方法也適用於非大量授權版的XP,只是會多一個線上啟動的動作。根據不可靠的第三方消息指出,也適用於Windows Server 2003。

變更步驟如下:
1.按一下 [開始],然後按一下 [執行]
2.[開啟] 方塊中,輸入 regedit,然後按一下 [確定]
3.在左邊窗格中,找出並按一下下列登錄機碼:
HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\Current Version\WPAEvents
4.在右邊窗格中,用滑鼠右鍵按一下 [OOBETimer],然後按一下 [修改]
5.至少變更這個數值的其中一個數字,來停用 Windows。
6.按一下 [開始],然後按一下 [執行]
7.[開啟] 方塊中,輸入下列命令,然後按一下 [確定]
%systemroot%\system32\oobe\msoobe.exe /a
8.按一下 [是,我想要打電話給客戶服務代表來啟用 Windows],再按 [下一步]
9.按一下 [變更產品金鑰]
10.[新金鑰] 方塊中輸入新的產品金鑰,再按一下 [更新]

如果您返回到前一個視窗,按一下 [以後提醒我],然後重新啟動電腦。
11.重複執行步驟 6 和 7,以確認是否已啟用 Windows。您會收到下列訊息:
Windows 已經啟用。請按 [確定] 結束。




敝公司超級守法,每一套XP/2003都有購買授權,所以這個方法我也沒有使用過。聽說許多人使用「遺漏的產品金鑰」,執行Windows Update安裝WGA後,登入後說是盜版就被登出,所以鼓勵各位使用正版軟體,不爽就學我買台Mac或裝Linux吧。

版本更新

今天收到UUU的電子報,標題為「使用Windows Vista的理由」。以下有一句:
"用一個比較客觀的觀點來說明吧: Red Hat Linux 在 2000 年時不過是 7.2 版,這六年來從 7.x → 8.x → 9.x 不斷改版;而 Apple 也從 10.1 → 10.2 →10.3→10.4 到這個月初才發表的 10.5 ;說實在的微軟的更新速度好像還不及這兩個也是受人矚目的產品。" 我怎麼不知道Leopard出了?應該只是Preview吧。身為講師,請不要誤導大眾。

Redhat,我根本不想用,而且他提到的都是可免費下載版,那種無聊的版號之爭一點意義都沒有。想玩Linux應該試試Debian或Ubuntu,Mandrive也不錯。我認為OS 10.x升級不應該收錢,每次都只增加一點小功能,像是Windows的Service Pack,到11再算新版比較合理吧?

對於Windows 四年升一次版本,現在認為是合理的速度,穩定的作業系統不應該常改版。小時候不懂事,都希望軟體快點升級,現在都希望能夠至少撐個2年,否則還沒用熟又要更版,實在太累人。現在對於不成熟的東西連測試都懶,當初XP也是SP1才開始使用。對Vista我也不會隨便說它不好,畢竟台灣的電子業成長還得靠它咧~

你說好笑不好笑

剛才從獨孤木的Blog連到你說好笑不好笑,他的文筆還真不賴,可以比美貓叫日記。上班族的典範 朦朧的修辭法 都很不錯,希望他能加油,替我們無聊的上班生活增加一點樂趣。

星期四, 10月 19, 2006

閒聊:獨孤木的年紀

剛才看到獨孤木剛好看到qing的blog有這一篇提到天安門事件他高三,所以他才不過35歲,看他的經歷加上五年前就在Java週報寫專欄,還以為他有40歲。想想他那個年代隨著小虎隊成長,當年的偶像大概只剩下少女隊的徐若瑄(當年叫徐淑娟)還在當偶像。現在30~40歲的人,都是跟無敵鐵金鋼、鋼彈、小叮噹長大。剛好那時候Apple II正開始流行,造就了這一批電腦怪才。

獨孤木老大,別再說自己是中年人了!你才剛要進入事業的高峰期咧~

今日新聞

專家:正視奈米科技潛在的健康危險 這是很正面的思考,奈米不可能只有好處,人無遠慮,必有近憂。

英女皇要找IT總管 年薪四百萬薪水還真是高,但是替皇家工作壓力一定很大,可能會短命幾年,又不見得幹得久,不見得划算。

Vista讓防毒公司新版作業大亂 反正各個防毒軟體廠商一直討伐微軟,現在微軟終於要公開API讓這些廠商使用。早知如此,何必當初?

五年沒重大更新 IE 7終於開放下載 我之前裝Beta 2後公司的電子公文不能用,一些IE only DHTML的東西都不正常,希望正式版有提供相容,否則我又得宣布兩年內不支援IE7。

測謊新招 「腦波指紋」更精準 以後有錢人要小心,老婆可能會買一台放在家裏

人臉辨識軟體 遮臉罪犯也難逃 若這技術成熟,大概狗仔隊會先買來用吧!

iPod有病毒! 蘋果電腦:會入侵視窗系統  9月2日之後售出iPod 夾帶病毒 對不起,我...我沒有iPod。沒中毒是我的錯,等年終獎金一發就去買一台。啥?Mac不會中毒?那只好對不起視窗用戶,我還是不會中毒。



最後要罵一下,CNet的Javascript 廣告不知道怎麼寫的,開幾個分頁後就讓Firefox或Safari把我這台Mini整得哇哇叫,風扇轉個不停。各位網頁設計師,測試是很重要的,OK? 參考一下 Test Driven Develop 吧
http://www.agiledata.org/essays/tdd.html
http://www.amazon.com/exec/obidos/ASIN/0321146530/qid=1060596519/sr=2-2/ref=sr_2_2/104-4590646-0360721

版面

承蒙Randy的指導,我也對Blogger的版面小小惡搞一下。 似乎有點弄得太滿,但已經改成依百分比調整,因此就算是拉到小於800點也會有右邊的sidebar,而拉大後圖會正常顯示,不會被浮在上面的右方sidebar蓋住。驚嘆號公司的Orbby兄曾經告訴我視覺交叉,有空再來調整css,看看怎麼樣做效果比較好,不要太滿而且sidebar遇到貼圖能向右邊移,搞不好得用到yui


在右邊的search是用javascript寫的,目前已知在opera 9無法使用,在IE6、Firefox、Safari按下按鈕都可用,其餘的版面顯示還算正常。IE 7今天剛推出,我還沒有可供測試的機器,等我A到好一點的機器,再裝個Virtual Server來試這個版面的效果。

至於惡搞的部份,就留給Randy兄來講解。想知道到底惡搞了什麼,和 http://slzzp.blogspot.com/ 比一下就知道。

屋漏偏逢連夜雨

今天一到公司,才剛坐下就有電話打進來說網路有問題。只好帶著空水杯,放下熱騰騰的漢堡,裝杯水喝一口就趕到機房。本以為是小問題,把防毒牆和ADSL Modem重開後,回到座位確認網路正常。才剛坐下機房就打電話說有台機器聲音很大,只好再放下咬了一口不熱的漢堡,把那台電腦搬下來檢查。沒想到又有別人說網路不通,連忙再去找問題。發生問題的部門是連到舊的Core Switch,但主幹沒接上新的Core,只好去找有權限的人幫忙接上線。回來把冷漢堡吃了一半,電話又響起,原來是有不正常封包造成網路有問題,負責的人找了一個小時,終於發現是有人loop所造成。而我的冷漢堡也吃不下去,因為已經快中午。

沒想到下午又有人說mail寄不出去,檢查後發現firewall的dmz網卡掛了。換了張卡後卻發現仍不通,結果...發生了詭異的情形,firewall rdr到dns的封包很慢,但rdr到www卻正常!試了很多方法無效,只好先把dns放到internet的真實世界。此時已經是下午4點,苦命的我只能希望明天能夠解決。

星期三, 10月 18, 2006

肥皂盒

才剛說完YouTube,今天就收到Soapbox的邀請函。 還沒有時間比較,有興趣的人可以先去試試囉~

簡捷有力的Blog

Randy剛給我看他在Blogger上的Blog,實在是太簡捷有力。原本看過他的Aqua灰色桌面已經夠簡單,沒想到Blog更.... 清淡。
他這句Blog就是寫給自己爽的,和我不謀而合呀!
Randy的Blog

程式效率

qing昨天給予指教,指出動態語言的 instance在casting 時所消耗的非常小。我寫了兩個程式做實驗,一個是Java,另一個是C++;兩種語言的結果沒有太大的差異,呼叫幾十萬次只差幾十毫秒。因此設計時應遵守ISP,盡量使用抽象。

我之所以會有錯誤觀念,是因為十年前看到一篇文章寫BC++大量使用繼承所以比VC慢,仔細想想,這篇文章應該是錯的。程式改善效率應該從瓶頸下手,通常改變演算法與設計是最有效的方式。

這篇我有提到愈來愈少Programmer想要optimize,尤其在微軟的政策下,都以簡單開發為原則,相信市場上高手會愈來愈難找。

程式的效率應該做profile分析,在動態網站的缺點中突顯出一般設計者的迷思。XOOPS在我所認定的標準,算是很慢。什麼叫快呢?嗯,我想想... 你如果知道Yahoo首頁的request/second,大概就知道什麼叫做快。

Coding的本質在Code我指出.Net程式員把SQL Server搞掛,為什麼呢?原來在.Net 2.0裏預設是啟動connection pool,必須自己加上pooling=false,否則會搞出一堆的connection,而且必須等到timeout才關得掉。當然.Net 2.0有ClearAllPools和ClearPool,但Visual Studio使用者那裏會知道那麼多呢?一般企業內MIS只知道連SQLServer,拖拉之後就做完,連測試都不完整,那還管得到效能。也因此,一般企業程式的分析,都變成資料庫分析,而不是物件分析,頂多做到功能分析。(此時又想起7年前做銀行系統,都是以幾支交易為功能單位。)

十年前的電腦硬體效能可能只有現在的百分之一,但一樣可以做出優秀的軟體。現在硬體不斷的進步,軟體的複雜度提昇,而人員的素質卻沒有跟著成長。

好的軟體必須從系統架構開始,再來是設計,最後才是程式語言實作。其中涉及的知識很廣,發生問題時通常都不是Visual Studio拖拉就能解決。

牢騷吐完了,我認為企業的IT主管必須有認知,軟體開發不是請個便宜的人力就能應付,現有的人力很可能無法跟上時代潮流。導入軟體工程以正規的方式開發才是王道,我做的那些東西,充其量不過是玩具。

星期二, 10月 17, 2006

鳴人與佐助

火影忍者裏,主角漩渦鳴人不受歡迎,而宇智波佐助則是深受女生喜愛的大帥哥。
現實社會裏具備他們的人格特質誰會成功呢?很難說。嗚人有著百折不撓的精神,佐助是天才帥哥,根據非正式統計,帥哥的確比較容易被公司錄用。但是未經挫折的人初嘗敗績會很難接受,而且危機處理的能力會比較差。鳴人這類型的人不管失敗多少次都會再站起來,持續不斷的進步,因此可以說是立於不敗之地。

我放鳴人的圖而不放佐助,就是因為希望自己能有鳴人打不倒的意志。第一次遇到大蛇丸時,佐助由於未曾遇到過強敵而嚇到發抖無法動彈,鳴人則是努力奮戰。平時鳴人總是耍寶逗笑讓大家快樂,他這點和魯夫一樣,是陰沈的我該學習的。

所以,長得帥不要太高興,搞不好你一蹶不振;我們醜男能夠努力不懈,贏得最後勝利。

Visual Studio 2005 安裝問題

以下摘自 Microsoft Visual Studio 2005 安裝問題讀我檔案的內容 加上自己的心得
  • 從掛載於虛擬電腦環境的磁碟機進行安裝時,安裝程式會失敗
  • 使用 runas 命令安裝 Visual Studio 2005 會失敗
  • 設定成要清除 Temp 資料夾(開機時或關機時)的程式可能會導致安裝程式失敗
  • Windows 2000 中,從超過 100 個字元的安裝路徑安裝任何版本的 Visual Studio 2005 將會失敗。改用net use 連到內層或copy到長度短的路徑

從光碟片安裝 Visual Studio 2005 失敗,必須採用網路安裝:(以下的方法也可以用於將CD版做成DVD版)
Visual Studio 2005 安裝程式可以從網路共用資料夾執行,代替從光碟片或 DVD 光碟片執行安裝作業。下列程序提供如何準備 Visual Studio 2005,以從網路共用資料夾安裝的方法。這個程序的適用對象為 Visual Studio 2005 光碟片,但是對 DVD 光碟片也是採取相同的步驟。
  1. 在伺服器上建立一個資料夾 (例如,VS2005)。
  2. 在最上層的資料夾中建立兩個資料夾,分別命名為 VS 和 MSDN。例如:
    VS2005\VS
    VS2005\MSDN。
  3. 將 Visual Studio 2005 光碟片的內容複製到 VS2005\VS 資料夾。如果出現詢問您是否要覆寫任何現有檔案的提示,請選取 [是]。
  4. 將標記為 MSDN Library for Visual Studio 2005之光碟片的內容複製到名稱為 MSDN 的子資料夾中。如果出現詢問您是否要覆寫任何現有檔案的提示,請選取 []。
    *** 這裡與微軟的說明剛好相反,不要覆寫反而能夠正常安裝  ***
  5. 用文字編輯器 (例如 [記事本]) 開啟 VS 子資料夾中的 Setup.ini。
  6. 在 [Documentation] 區段,將 "DIR=" 開頭的這行文字變更為:
    [Documentation]
    DIR=..\MSDN
    儲存所做的變更,然後關閉檔案。
    注意 進行這個步驟可防止在安裝過程中,提出更換光碟片的要求,並且可以將 MSDN Library 光碟片的正確路徑告知安裝程式。
  7. 在 VS 子資料夾中,開啟 Setup 資料夾。
    使用文字編輯器 (例如 [記事本]) 開啟 setup.sdb,將下列幾行加到檔案的結尾:
    [Product Key]
    XXXXXXXXXXXXXXXXXXXXXXXXX
  8. 注意 XXXXXXXXXXXXXXXXXXXXXXXXX 是 25 位數的產品金鑰 (您可以在光碟片的包裝封套上找到它),請在輸入時不要加上虛線。
    儲存所做的變更,然後關閉檔案。
  9. 注意 進行這個步驟可預先為要從這個網路共用資料夾進行安裝的使用者填入產品金鑰。
  10. 在網路上共用 VS2005 資料夾,然後設定適當的安全性設定。從網路上看到的 Visual Studio 2005 安裝程式路徑,看起來會像 \\[servername]\VS2005\VS\setup.exe
  11. 注意 如果安裝時有任何路徑或檔案名稱的組合超過 260 個字元,安裝就會失敗。在 Visual Studio 中,路徑的長度上限是 221 個字元。您必須將檔案複製到長度在 70 個字元以下的路徑。如果您要為網路映像建立共用位置,根安裝位置的 UNC 路徑長度也必須在 39 個字元以下。
  12. 注意 如果這個路徑中的資料夾名稱包含空白字元,可能會安裝失敗,例如:
    \\[servername]\VS2005\MSDN\ \\[servername]\VS2005\Visual Studio\

星期一, 10月 16, 2006

聊YouTube

昨天和MingWei聊到創業,當然不能免俗聊到YouTube。他和我有志一同認為這種燒錢如燒開水般的事業不是我們能幹的出來,尤其是工程師常是先期採用者。請參考張元毓這篇蘋果必敗?微軟必勝?裏的Product Life Cycle圖,其實在創業也是如此,若YouTube早個一年,搞不好還沒賣掉就把錢燒光掛點,如資訊人那般。當年我還陪Marty去資訊人面試,他們的環境與技術能力都不是Kimo能比,但David Lu是生意人,賀元不是。Kimo的業務頭子跳到肯德基後,把KFC帶到一個新高點,這些都不是20幾歲的毛頭小子能做到的。我自已認為當年PCHome和Kimo技術能力差不多,勝負是在於David的眼光準,能瞭解網友需求。

張元毓認為創業不是把網站賣掉算成功,嗯... 但我認為算耶,至少這是許多.com公司創辦人的想法。我說.Com 2.0時代來臨,言猶在耳YouTube馬上就賣掉。不過Randy說泡沫2.0快到,我認為還要一年以上。

回到YouTube,技術能力特強嗎?就算是,微軟自已開發會比他差嗎?在20世紀沒有人會相信ICQ會在短時間內被MSN幹掉,但微軟做到了。我個人認為YouTube成功,有幾個原因:
  1. 選對主題。這是最重要的因素,如果像前幾個被收購的網站,錢就會少很多。若選擇仿效已成功的網站,可能完全沒機會。
  2. 時機對。太早或太晚都不會成為領導者,YouTube的追隨者還真不少。
  3. 金主願意堅持。這是MingWei所缺少的,不然他現在應該發財。我有點替有名大站擔心,Raid故障事件突顯出資金的重要性。
  4. 技術不錯。技術不用是最好的,看微軟就知道。

而Google為什麼要買YouTube呢?以Google的技術能力一定可以做出比YouTube更炫的網站,我認為:
  1. 錢太多。由於前幾年的景氣低迷,太多投資人滿手錢,Google吸了太多,總要花一點吧:P 這樣突顯Google財力雄厚,可以嚇阻競爭對手,就像報紙上的徵才廣告有許多都是做廣告而已。
  2. 直接取得市場與人才。Google要學微軟把ICQ幹掉的模式不是不可能,但手上錢多,直接買YouTube可以取得會員與影片,以及人才。BTW,最近發現flickr已經整合為直接以Yahoo帳號登入,而del.icio.us還沒整合。

Yahoo和Google有著很大的不同,Yahoo重視地域性,吸收各地的領導網站(我對Yahoo收購3721這件事一直很不爽,那種類似木馬程式,居然...);Google早期以純搜尋技術打入全世界,現在正在開創多元的服務,我很期待更多的創新。

想創業的人,請去找Mr.6,找個好主題,寫夠唬爛的計畫書,做點像樣的東西再編個美夢。戴德梁行顏總常說:有夢最美、希望相隨;人生有夢、逐夢踏實。

參考:
YouTube身價10億太便宜?
YouTube成功關鍵:堅持原味,誤打誤撞
YouTube大成功?別鬧了!
再談YouTube

後記:我純粹在唬爛,本來要存到草稿,不小心按到發佈。若有攻訐文我一律砍,我可沒有張元毓那麼好脾氣。

吹牛不打草稿

剛才看到微軟:Vista普及率將是XP兩倍,就如同某民調般的絕對不準。馬上又看到微軟抓盜版新招 開機跳出警語,靠這招有用嗎?哼,再過幾個月,沒幾個人會啟動自動更新。好不容易公司內部XP裝機率達8成,我要宣布:公司內部二年內不支援Vista。

殺妻和繼續使用ReiserFS有關嗎?

剛看到Novell Moves Away From ReiserFS,原始出處http://linux.wordpress.com/2006/10/16/novell-moves-away-from-reiserfs/

是說因為ReiserFS的作者Reiser涉嫌殺分居的妻子,Novell就不用ReiserFS做為預設File System。我個人覺得有點牽強,可以找別人接手呀~倒是比較相信官方說法:

“In response to customer demand, in the next version Novell will be changing the default file system in new installations from ReiserFS 3 to ext3,” Novell said in a statement. “Novell will continue to support and improve ReiserFS version 3.”

應客戶要求才是真正原因吧?我自已灌Debian和Ubuntu都是選ReiserFS,個人覺得Ext3算是有點遜的Journal FS,ReiserFS好多了,UFS當然更好囉~ 而HFS+很強,但我真的不知道有沒有比較好:P 反正Mac用了快一年都沒事,就這樣當個dummy user吧!


參考資料: http://www.kernelthread.com/mac/osx/arch_fs.html

自由軟體鑄造場電子報

剛看了自由軟體鑄造場電子報

洪朝貴寫的勸阻非法拷貝,法務部未盡的三分之二責任

他替法務部想的廣告實在太讚了,也替我這種拒吸二手煙的人著想:

「穿著真皮草助長動物虐殺;散布封閉格式檔案助長非法拷貝;請拒絕參與傷害社會」。
「拒抽二手煙,拒收封閉格式檔,捍衛您的權益,請踴躍檢舉」。
在捷運骨牌廣告的第一張骨牌「盜版」的前面,加上一張「散布封閉檔案格式」。

Gartner: Linux 短期內仍無法威脅 Windows 地位看了有點小失望。不過CrossOver 6.0 測試版本釋出 Linux 也可以玩魔獸提到“透過 CrossOver Mac,Intel Mac 的使用者可以不用重新開機,也無須特別額外安裝一份 Windows 作業系統在 Mac 中,就能執行 Windows 軟體或遊戲。CrossOver Mac 支援包括微軟 Office 2003、Visio、Internet Explorer 6.0 等 50 種應用軟體與戰慄時空 (Half Life) 等遊戲。“,希望中文可以正常顯示及輸入,韓系on line Game不知道能不能玩?

人力有時而窮

今天在處理別人寫的線上閱圖缺檔問題,本來想用IrfanView做出一個巨大tiff檔,結果卻失敗。後來他提供一個利用Kodakimg元件寫成的VB6程式,果然可以轉檔,但速度有點慢。後來他又拿另一個元件的版本,速度快幾十倍,但沒有給source。今天光把前面那支改成後面那支的UI,就花了我一整個下午,人力有時而窮,我不可能什麼都精通呀~

不過再想想,如果是PCMan、JServ之流,可能就利用libjpeg、libtiff做出自己的元件,我確實很遜。

星期日, 10月 15, 2006

閒聊

朋友問我為什麼常提到那幾個網站?我也沒辦法,他們紅,Google一下就找到呀!

以前我不太看Blog,言之無物太多。除了gslin是因為FreeBSD而有看過外,其他的還真是一個牽一個,這都要怪Mac。

去年底買了Mac Mini後,朋友Randy告訴我用倉頡的人大都改用香草輸入法,接著看到osxchatlukhnoszonble、hlb等一個接一個。

我比較不能理解的是:為什麼電腦高手大部份都用Mac呢?

ISP: Interface Segregation Principle

ISP (Interface Segregation Principle) 介面分隔原則:用戶不應被迫相依於他們用不到的method。

  • 使用多個專門的介面比使用單一的總介面要好,否則會造成對介面的污染。
  • 一個類別對另一個類別的依賴性應當是建立在最小的介面上。

我在LSP舉的爛例子又派上用場。Employee不應該加上calcSalary的method,也不該有store的method。

這個原則真是簡單明瞭,主要用途是降低耦合。當發現必須要實作用不到的method時,就是設計上出問題,必須refactor。(其實我以前常犯這個錯誤)

DIP: Dependency Inversion Principle

DIP (Dependency Inversion Principle)相依性反向原則:要依賴於抽象,而不要依賴於具體類別。
這個經驗法則建議程式中所有的關係都應終止於介面或抽象類別。以下幾種情形況都應該遵循DIP
  • 變數的類別宣告
  • 參數的類別宣告
  • 方法的傳回型態宣告
  • 型態的轉換
所以這個原則很難遵守,幾乎每個程式都會多少違反DIP。

若一個物件存在其抽象類別,就應當在任何參照此物件的地方使用抽象類別,例如在Java中應該使用介面List而不要直接使用ArrayList
List books = new ArrayList();

DIP假定所有的具體類別都是會變化的並不完全正確,因為某些具體類別是相當的穩定因此並不需要為此發明一個抽象型態。

我自己的經驗是:就先照想法做,不行時再refactor吧!物件生成是以效能為代價,若所有物件都是指向抽象類別,會和SmallTalk一樣慢到不行。

Update:感謝qing的指正,使用抽象類別宣告的影響幾乎感受不到,為了彈性應該盡可能使用抽象類別設計。


參考資料:
軟體工程(Software Engineering;SE)

LSP : Liskov Substitution Principle

LSP (Liskov Substitution Principle) 簡單的說就是:子類別必須能取代父類別

我在寫Class與Instance的本質時忘了這叫什麼(又不是考試,誰會記得啥Liskov),但依我十多年C++的經驗,遵守LSP才會讓程式的責任歸屬分明。Agile PPP這本書舉的例子是Rectangle與Square,我就不細說。舉個好懂的例子(但設計得很差,臨時想不到好例子):Employee,Employee是class,而AEmployee是A公司用的Employee子類別。設計Employee的人當初有一個store的method,但AEmployee是存在SQLServer,因此store就傳回false。結果在A公司專案的主系統呼叫到store時,就發生錯誤。明眼人一看就知道,應該把Employee設計成介面,並且把Business與Data分開,這個就不談。

我的意思是:違反LSP確實很危險,在大型專案不注意就會產生奇怪的錯誤。設計子類別時一定要遵守LSP,若一定會違反,則要改變設計,這個時候應該要優先考慮:組合/聚合重複使用原則(Composition/Aggregation Principle ; CARP)

CARP比較簡單,就是儘量使用合成/聚合,少用繼承。能夠用HAS-A就不要用IS-A。

Law of Demeter (LoD)

Law of Demeter (LoD) :Only talk to your immediate friends。意思是盡量減少物件的耦合。

這個法則讓我想起KISS原則:Keep It Simple and Stupid。

Java與樣式理論這本書有,不過我沒買也沒看過,改天再去天龍看看他怎麼寫的。

鬼扯:網站分級

人老了就變得囉唆,今天忽然想到,若我有小孩的話,就不能讓他看獨孤木的Blog。我自己也做的不好,有時候會忍不住寫一些不良的東西,要算限制級。
至於其他的Blog,獨孤木是限制級,gslin偶爾會罵人是輔導級,William和jserv控制得很好是普級。一些美少女從上方45度自拍也要算輔導級。

剛看了一下其他人的說法,紅塵一隅間拾得的看法,照網路內容分級制度來說,所有的新聞網站都是限制級,想想還真的沒錯。
有些人自己的分級很妙,如zonble的超級限制級要1800歲(偶爾還真的很A,如爛翻譯),hlb的愉悅限制級還真不知道限制在那裏(他寫的好像都普級)。

IE雖然很早就有分級制度,但那個很少網站在用,大概只有playboy、penhouse這些米國站才有。而且設定後還不能取消,記得3年前一位從對岸來開會的博士,為了他NB上這個問題浪費我一個小時才弄清楚原因。


電腦網路內容分級標示
普遍級:一般網站瀏覽者皆可瀏覽。
保護級:未滿六歲之兒童不宜瀏覽
輔導級:未滿十二歲之兒童不宜瀏覽
限制級:未滿十八歲者不得瀏覽

今日連結

讓Linux也能夠使用Dashboard的Jackfield
Dashboard Widget或Yahoo Widget都是用JavaScript寫的,所以要做出相容於目前的Widget並非不可能的事,希望Jackfield能加油,這樣我在Ubuntu上就能享受Dashboard。

Coscup 2006議程我很有興趣,可惜沒辦法參加。

星期六, 10月 14, 2006

閒聊:紅 模仿

剛打開電視,看到 "模仿"的MV,原來他的意思是人,所以被模仿

以下這幾句很有意思,慢慢能瞭解他為什麼會紅,他的特色和一般人不同。

我的肩膀 會有兩塊空地
那就是勇氣與毅力 我要做音樂上的皇帝
我告訴你 做自己勝於跟太緊
最大的敵人就是那內心的自己

我不能夠後退 因為不是綠葉 (真是很臭屁呀~)
如果只是點綴 願當皎潔明月
小草等待風吹 不用靠你的背
假如天會很黑 我會請嫦娥奔月 (所以泡妞很容易?)

雖然說了他幾句好話,不過我還是不會去KTV唱他的歌。叫我哎那麼多下,實在沒辦法 :P

以下為完整歌詞 取自KKBOX依然范特西

紅模仿
詞:周杰倫 曲:周杰倫

哎呦 吉他誰教你的啊?
哎呦 我生下來就會啦!你不知道?
哎呦 屁啦!


中國風的歌曲 有增無減
是好是壞 問方文山最清楚
從娘子唱到雙截棍 東風破到髮如雪
一路走來始終如一 多樣的曲風 獨愛中國風
我堅持風格 我活在我的世界 誰都插不上嘴
唱反調 是我的本性 出奇不意是我的個性
就算我站在山頂 也只不過是個平民老百姓
但我的肩膀 會有兩塊空地
那就是勇氣與毅力 我要做音樂上的皇帝
哼哼哈兮 哼哼哈兮 哼哼哈兮 哼哼哈兮
下坡的路 不費功夫 別人已經幫你鋪路
但我選擇上坡 因為我取名叫自負
謙虛和那虛偽 就差一個字
有時有點分不清 因為我喜歡真實的自己
我不能夠後退 因為不是綠葉
如果只是點綴 願當皎潔明月
小草等待風吹 不用靠你的背
假如天會很黑 我會請嫦娥奔月

為什麼寫這首歌 我現在還找不到動機
不過用心聽下去 你會覺得更有意義
如果你對未來產生恐懼 眼前霧濛濛一片
那是因為你沒把眼鏡給擦乾淨
勇敢走下去 這首歌會陪你前進
我常常在想宇宙只有一顆太陽
為什麼我的影子這麼多 這麼像
戰勝幻象 和我一樣 喜歡模仿的朋友們 崇拜是件好事
欣賞是種美德 但走在我後面 我很擔心
別人會看不見你 到最後只是一個接一個的分身
這樣的鼓勵 是否太直接 太諷刺
老師在講 到底有沒有在聽啊
我告訴你 做自己勝於跟太緊
最大的敵人就是那內心的自己


我不能夠後退 因為不是綠葉
如果只是點綴 願當皎潔明月
小草等待風吹 不用靠你的背
假如天會很黑 我會請嫦娥奔月

哎呦哎呦喔 哎呦哎呦喔喔 哎呦 不錯
哎呦哎呦喔 哎呦哎呦喔喔 哎呦 好久不見

哎呦哎呦喔 哎呦哎呦喔喔 哎呦 的意思是
哎呦哎呦喔 哎呦哎呦喔喔 就是你沒話講的時候可以 哎呦
哎呦哎呦喔 哎呦哎呦喔喔 哎呦哎呦喔 哎呦哎呦喔喔
哎呦哎呦喔 哎呦哎呦喔喔 哎呦哎呦喔 哎呦哎呦喔嘿
哎呦哎呦喔 哎呦哎呦喔喔 哎呦哎呦喔 哎呦哎呦喔喔
哎呦哎呦喔 哎呦哎呦喔喔 哎呦哎呦喔 哎呦哎呦喔嘿

閒聊:國防替代役生

昨天敝單位有位國防役退伍,就是我之前提過和主管處不好的仁兄。另一位晚他一梯的同事則是備受重用,每天加班,肯定是會留下來繼續貢獻。

沒想到昨天晚上就看到國三生改成苦牢之最後一年,本來很期望他改叫國四生活...
後來又想到,他好像在某大電信嘛~爽到不行還這樣說,結果馬上被gslin吐槽廖長輩的 Blog 換名字了…

仔細想想,敝單位會用vim的也只有這兩位國生,在下只會基本的Esc : q! 國生素質都不錯,退伍那位還是博士,不知道明年還會不會有國生進來,再多個人一起玩Mac。

星期五, 10月 13, 2006

Windows Live Writer

Windows Live Writer是微軟放出來算不錯的工具,使用XMLRPC,所以不止支援Spaces,其他支援Blogger API或MetaWeblog API的Blog也能用。只需要基本功能的人可以不必去買ecto Windows版,這個就夠了。


這篇是用Windows Live Writer寫的,效果還算可以接受。與ecto相同,對Blogger寫作時,只能存為草稿。它本身是用.Net寫的,所以或許有朝一日能在其他平台執行,只是或許。


qing的roller備份程式

今天看到qing的這篇 使用metaWeblogApi來讀取部落格網站的文章 ,只能說他真強。10/10我才貼出來,他隔天就寫出程式,而且文章的深度非我能及。

我提過自己並非Blog重度用戶,所以只求快速,Blogger欠缺許多功能我也不在意。連假那幾天稍微花時間才發現Blogger算是成功的先驅,因此Blogger API算是一種標準,而MetaWeblog API是新標準。Blogger Data API我不知道會不會有人繼續follow,但qing的程式是個好的開始 :-) ,以後可以擴充到其他Blog。而parse html的方式,除了沒有提供API的Blog必須這樣蠻幹之外,用來備份圖片也是必要的,因此研究HTML Parser還是很划得來。

qing提到"最好的方式是叫獨孤木搬家啦,他又不是什麼漂亮的小美眉,幹嘛學人家host在無名小站呢。 ",我想獨孤木看到時臉上有三條線吧,呵呵~如果獨孤木老大真的想搬家,希望他能寫一個Wretch備份程式供大家使用,畢竟他的幹圖王是parse html的第一把交椅,也是Java AP的經典之作。

由於我在一般傳統產業工作,並不像在校人士有那麼多時間,而且coding完全是hobby,所以沒辦法花太多時間在此。目前有朋友需要備份Xuite,因此會先完成這部份,等到有空再架個Wordpress把朋友的blog匯入。

註:我執行qing的程式,發現不需要額外的jaxp,用java 5內建的即可,需要Apache XML-RPC的ws-commons-util、xmlrpc-client、xmlrpc-common 3個jar。

星期四, 10月 12, 2006

好文共賞:Atlas 實現機制淺析

前一陣子買了AJAX in Action後,試過不少AJAX library,可惜能稱上Framework的並不多。目前最容易使用的當然就是和VisualStudio緊密結合的Atlas,簡單的情況,只要拉一個UpdatePanel再設定屬性,code完全不必改。以下這三篇是對岸的朋友分析Atlas裏UpdatePanel的機制,實為佳作。

Atlas 實現機制淺析 [1]
Atlas 實現機制淺析 [2]
Atlas 實現機制淺析 [3]

星期三, 10月 11, 2006

小道消息

今天聽到朋友告訴我,美國Yahoo總部的工程師都配PowerBook ,不過台灣沒有 >_<

第一批MacBook問題太多,希望明年能夠拗公司買一台Core 2 Duo的MacBook $_$

防毒軟體

剛看到艾克索夫實驗室2006上半年掃毒程式能力測試報告,結果還是卡巴斯基最強。但我自己的經驗,Trend的誤判率很低,公司有某個word巨集故障變成類病毒,只有Trend不認為是病毒。

BTW,噗~不長眼的Worm裏hosts的寫法寫錯了,難道Windows也照吃嗎?

今天又浪費時間

今天在寫WebMailer,顧名思義就是用來發信的程式。上星期把UI搞定,今天早上加好Atlas的AJAX,沒想到下午在用OpenSMTP時 ,遇到一堆中文問題。
最後改OpenSMTP到快爛時,才發現.Net 2.0的SMTP已經很好用。

在MS平台,不要想太多,MS一定時最強的。 Orz

參考資料:
Send Email in ASP.Net 2.0
ASP.NET 2.0發送電子郵件

閒聊:PageRank的分數

之前寫過一篇搜尋結果,那件事讓我發現靠鄉民的貢獻是不夠的,可能偏差值會頗高,如同總統大選的民調;世界上不寫Blog又不架Web Site的鄉民居多。記得在2001年左右時,由於Blog的興起,那一段時間搜尋的結果不太準確,讓Google修改PageRank,對Blog另外定義。

昨天又看到義氣幫的某位(我忘了是誰)寫他在PageRank的排名上升,我就打開Google toolbar看一下,果然主要由交大資工組成的義氣幫裡比較活躍的幾位 PageRank都是5。
義氣幫較不活躍的如明燈的新站只有0,舊站是3。我沒看的就不提了。

其他我常看的非義氣幫Blog
所以說,Blog要多增加連結,PageRank才會高。最快的方法就是加入義氣幫,叫他們每個人都把你的站放在右邊的Link區。只是閒聊,義氣幫不要來砍我呀~

Update:前面指義氣幫,是我看到他們有Link的站,我也搞不清楚到底誰有加入,但至少他們幾個常互相site。Google Toolbar的PageRank有時候更新比較慢,害我誤會三倍速的分數(已更正)。

星期二, 10月 10, 2006

Blog備份

最近由於無名小站Mypage搞得許多人不爽,加上速度不夠快,因此就有GSLin的備份程式產生。但我比較喜歡有source code的東西,要改也比較快。

由於我並不是Blog的重度使用者,也沒有使用好友功能,因此不需要密碼就能看到整個Blog,也就是可以直接備份。剛好這幾天連假,就花了點時間稍微想一下如何備份Blog。本來想寫個能夠通用的備份程式,但這必須要研究Blog的protocol(應該是用XML-RPC),也不能夠真正通用;而且這樣做需要帳號及密碼,如果想備別人的Blog就不適用(其實我想備份獨孤木的Blog)。

我想做的是備份平時看得到的Blog,剛好Xuite的tag相當清楚,而且每一篇都有標示上一則與下一則,很容易用程式備份,因此選擇為實作目標。若是Wretch或Blogger,必須從首頁找到每一篇的Link。

初步的做法如下:
  1. 先使用Blog首頁,例如:http://blog.xuite.net/efchang/network,找到目前最後一篇的url,tag是div,class為articleSide 例如: <div class="articleSide"><a href="/efchang/network/8458800">今天中午跟酒肉朋友的朋友們去吃艾米諾</a>
  2. 開啟最後一篇,內容的tag同樣是div,class是blogbody,前一篇class是selectbar,依此方法將所有的內容都讀完,就可以遞迴讀進前一篇。到最後一篇(應該說第一篇?)所讀到的第一個link是首頁,因此知道已經結束。
  3. 內容要還原就得要Blog Engine支援,所以最好比照GSLin,將備份檔案存成MT匯入格式或是RSS。
程式語言當然要使用能跨平台,沒有編碼問題,我的首選是Java。使用HTML Parser能夠簡單抓出每個tag的內容,利用css class就可以判斷目前是那一個區塊。
今天是連假最後一天,而我未來幾個月都很忙,看來這個程式沒有時間完成,希望有備份需求的人能夠繼續幫我完成,做好的必須要寄給我一份。License為GPL v3,使用HTML Parser 1.6版,以下為XuiteExtractor.java

import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.tags.BodyTag;
import org.htmlparser.tags.Div;
import org.htmlparser.tags.LinkTag;
import org.htmlparser.util.NodeList;
import org.htmlparser.util.ParserException;
import java.util.ArrayList;

/**
*
* @author 鳥毅
* @version 1.0
*/
public class XuiteExtractor {
ArrayList <blogpage> blogList = new ArrayList <blogpage>();

public static void main(String[] args) {
try {
XuiteExtractor xe = new XuiteExtractor();
xe.extract("http://blog.xuite.net/efchang/network");
} catch (ParserException e) {
e.printStackTrace();
}
}

public void extract(String blogentry) throws ParserException {
if (blogentry.endsWith("/")) {
/*
// 不要最後的 '/'
*/
blogentry = blogentry.substring(0, blogentry.length() - 1);
}

String lastArticleURL = findLastArticle(blogentry);
BlogPage bp = getBlogContent(lastArticleURL, blogentry);
while (!bp.previousUrl.equals(blogentry)) {
bp = getBlogContent(bp.previousUrl, blogentry);
blogList.add(bp);
System.out.println("目前執行到:" + blogList.size() + " "+ bp.previousUrl);
}

System.out.println("共:" + blogList.size()+"篇");
}

private BlogPage getBlogContent(String url, String blogentry) throws ParserException {
BlogPage blogPage = new BlogPage();
String bodyHtml = getBodyHtml(url); /*
// div class="blogbody" */
blogPage.content = getDivContent(bodyHtml, "blogbody");
/* // 前一則
// div class="selectbar" */
blogPage.previousUrl = blogentry + "/"+findFirstLinkURL(getDivContent(bodyHtml,
"selectbar"));
return blogPage;
}

private String findLastArticle(String blogentry) throws ParserException {
/* // div class="articleSide" */
return "http://blog.xuite.net"+ findFirstLinkURL(getDivContent(getBodyHtml(blogentry),
"articleSide"));
}

public String findFirstLinkURL(String stringHtml) throws ParserException {
String httpurl = null;
Parser p = new Parser();
p.setInputHTML(stringHtml);
NodeList linkList = p.extractAllNodesThatMatch(new NodeFilter() {
private static final long serialVersionUID = 1L;

public boolean accept(Node node) {
return node instanceof LinkTag;
}
});
LinkTag linkTag = (LinkTag) linkList.elementAt(0);
httpurl = linkTag.getLink();
return httpurl;
}

public String getBodyHtml(String url) throws ParserException {
String bodyhtml;
Parser parser = new Parser(url);
NodeList body = parser.extractAllNodesThatMatch(new NodeFilter() {
private static final long serialVersionUID = 1L;

public boolean accept(Node node) {
return node instanceof BodyTag;
}
});

BodyTag bodyTag = (BodyTag) body.elementAt(0);
bodyhtml = bodyTag.getChildrenHTML();
return bodyhtml;
}

public String getDivContent(String stringHtml, String classname)
throws ParserException {
String content = null;
Parser parser = new Parser();
parser.setInputHTML(stringHtml);

NodeList divList = parser.extractAllNodesThatMatch(new NodeFilter() {
private static final long serialVersionUID = 1L;

public boolean accept(Node node) {
return node instanceof Div;
}
});

for (int i = 0; i < divList.size(); i++) {
String divHtml = divList.elementAt(i).getText();

if (divHtml.equals("div class=\"" + classname + "\"")) {
content = divList.elementAt(i).toHtml();
break;
}
}
return content;
}

class BlogPage {
String content;
String previousUrl;
/*
//剩下的自己補
*/
}
}
// end of XuiteExtractor.java

參考資料:
http://blogmarks.net/marks/tag/xml-rpc
http://code.google.com/apis/gdata/blogger.html
http://www.xmlrpc.com/

星期二, 10月 03, 2006

Primary Key與Foreign Key

最近除了在規劃內部使用的小系統外,在家的空閒時間大都在拜讀獨孤木老大的軟體超人X光眼,增加點見識。

敝公司四年前在導入台灣最大ERP軟體公司的電子公文時,就如同此書Story 16所提,不斷地delay又一直change request。到後來都和對方工程師混熟,他們也不好意思拒絕request。此公文系統的規劃應該是在上個世紀末,約1997~1998吧(我猜的)。他們的問題與採用asp撰寫沒有關係,約爾都能用來寫出FogBugz這種高水準的軟體。我個人認為此軟體失敗在兩個地方,第一個是採用過時的RDS呼叫,而且都直接用ActiveX與DB連絡(雖然透過COM,但其實沒差別),另一個是沒有使用DB的Key來檢核,所以程式若沒有檢查到的地方,就很容易出錯。

軟體工程名詞檢索

由於在下才疏學淺,常在看 獨孤木老大的文章不知道在指什麼東西。
今天找到一個軟體工程名詞檢索,和我一樣看不懂時就可以連上去看。

Stored Procedure的取捨

最近要做一個簡單的內部系統,基本上大都是CRUD。我的困擾是到底要不要用Stored Procedure或做Trigger呢?

一般的軟體都不會大量使用Database,還在學校混的人寫的程式大都是這一類。但是在企業內部的各種系統,從薪資、人事、出勤及倉儲等等,全都繞著Database打轉。Rainbow Portal就是標準的MS做法,大量使用Stored Procedure,可以讓Code變少,但是卻造成移植性低等問題。在我待的這間小公司,沒有專職的DBA,因此所有的東西都必須自己幹。以過去的經驗,當然是不喜歡Stored Procedure,但是不可否認,使用Stored Procedure可以讓錯誤發生的機會變少,而且效能會增加。

現在只有我一個人在開發,應該是不會使用Stored Procedure。傳統的瀑布開發流程太慢,我決定採用Agile開發方式,在一個月內先做出phase 1的prototype,三個月做到phase 3結束。由於是第一次使用Agile Development,希望有經驗的人能給點建議。

星期一, 10月 02, 2006

ReactOS

ReactOS最早是希望建立一個與Windows NT相容的作業系統,現在已經修正為與Windows XP相容的作業系統。自1996年至今已經十年,目前仍為不穩定狀況,無法做為日常工作用。另一個好處則是利用ReactOS所開發出來的Win32 API與DLL,將會使得WINE會更容易在不需要Win32的授權版本下執行各種程式。

星期日, 10月 01, 2006

閒聊:病毒與後門

前陣子公司頗多人中Bacalid,所以這兩天我在家就利用免費的線上掃毒檢查一下XP是否有問題。

經過一整天的長時間掃下來,結果頗令我意外。這台電腦並沒有被病毒或後門感染,但有幾個檔案檢查出來為惡意程式。其中有幾個是網路上下載的弱點掃描與遠端遙控程式,這並不意外;另外有兩個是mobile01下載的screensaver程式,裏面有keylogger,幸好從未執行過。

雖然現在已經二年沒裝防毒軟體,但是我平時沒有隨便下載來路不明程式的習慣,用的也大部份是OpenSource程式與正版軟體,並且定時Windows Update及掃描後門程式,而且上網絕大部份都用Firefox,沒中毒是應該的。倒是mobile01讓我覺得有點遜,以後別人上傳的程式還是少碰為妙。