星期四, 8月 31, 2006

Class與Instance的本質

前幾天看到王克明寫的物件 (Object) 的媽媽是 類別 (Class)?,本來以為大家都很瞭解。沒想到昨天就有人問我一個問題,他說:child instance如何存取parent instance的屬性。
我回答說:要存取parent class的屬性必須是static,否則就把parent做成singleton物件。
他又說:parent instance可能有多個,不能做成singleton。

這下我真的傻眼,因為這實在是本質上的錯誤。Class是沒有實體的東西,所謂的class variable事實上需要實體來儲存於記憶體之中。換一個角度想,Parent Class產生出多個instance,child那可能知道要存取那一個?就算用shared memory也辦不到。而物件導向分析的一個根本精神就在於子類別能夠完全取代父類別,如果有子類別需要存取父類別的情況,就是設計上的錯誤。

簡而言之,要看穿Instance的本質也不過就是一堆machine codeClass不過是一堆定義所有的變數或屬性,都必須依附於實體之上,包括static變數,只是static變數由系統處理掉。

看 Google 怎麼用 Java

葉秉哲博士的技術對談:看 Google 怎麼用 Java和王建興博士的JavaTwo 2006的另一收穫:看Google怎麼用Java都提到 iThome的技術對談-看Google怎麼用Java

在下小弟我在2000年時有幸與Google的sales engineer談過,他們當時"只有"200名博士,技術就只有C++,同樣是利用PC架Linux做load balance;但沒有Java。對了,Google的開發人員博士比碩士多,幾乎沒有學士 >_< 如果像我一樣從JDK 1.0開始用Java的人應該知道,當年的Java Applet在Browser啟動速度太慢,不過還算很小;雖然後來技術進步,但現在愈來愈肥,applet啟動仍然很慢呀~所以Applet算是失敗,雖然仍有少量的運作,如VNC Viewer,但現在如果要我做,我會考慮Flash RIA。正因為如此,BEA才出自己的JRocket VM,王建興才會問Google是否有自己的VM。根據我自己的經驗,Sun JVM到1.3之後效率已經大幅增加,我用JVM 1.5跑Tomcat確實有感到速度明顯的增加,計算速度實測也比.Net 1.1快。

現在會C++的人才愈來愈難找,因此Java應該還有發展的空間。Yahoo和Google的方向不同,Yahoo走向PHP,Google則選擇Java,我很期待後續如何發展。

P.S. 這篇對談裏比較難懂的應該就是closure,它比較像是anonymous delegate,類似C的function pointer。但看到Ruby配合collection的closure寫法,真是超級精簡呀。以下貼一些我找到的資料:
http://www.javaworld.com.tw/jute/post/view?bid=29&id=56457&sty=1&tpg=5&age=-1
http://ihower.idv.tw/blog/archives/1456
http://mindprod.com/jgloss/closure.html
http://blogs.sun.com/roller/resources/ahe/closures.pdf
The power of closures in C# 2.0
http://en.wikipedia.org/wiki/Closure_(computer_science)

Hacked

昨天回家發現電話線斷路, 打0800-080-123客服報修,客服先說接單後要隔天(今天)才會來檢查線路,再告訴我在17:30已經有人報修。我覺得很怪,追問是何人報修,但他答稱不知。

後來吃完晚飯再去樓下追查線路,由於天色已暗又沒有高的梯子,所以不知道是否有偷接,但初步看起來外線是好的。再到配線箱去看,發現兩個小塑膠保護盒已有一個被拿下來,可見確實有人動過;可惜我看不懂配線,也沒有夾線電話可以測,就只能先回家。再打報修電話,這次的人員直接告訴我17:30是警察局報修的,有人偷接!他再告訴我盜打的費用不會算到我頭上,事情發展至此雖然無奈但也只有等待。

沒有網路的日子還真不好過,21:00看數字搜查線,內容是phishing和hacker,偷銀行帳號密碼的俄國黑幫;心中真是百感交集呀~

先講古好了,在1980年代,所謂的hacker是一群盜用電話的人,他們利用各種方式打免費電話,然後用modem連線到各公司找尋漏洞;據說還有人能用口哨聲模擬handshake。到1990年代,hacker大部份被FBI抓走後轉型為正義的一方,就有人稱呼入侵者為cracker,而把電腦高手稱為hacker。不過一般民眾的心中,hacker=高手=駭客。

雖然我不是hacker,但是至少我的電腦(和我管的電腦)還沒有被人hack成功的記錄,沒想到居然有實體線路被盜,真是一大挫敗。

星期二, 8月 29, 2006

微軟又做了什麼

好一個 Microsoft BugFix (200608),前幾天就聽說這個問題,沒想到這麼嚴重呀!那WSUS到底該不該發佈呢Hotfix 923762


Frankly speaking, I don't want to use Windows any more.

推薦:Ai92

印象中似乎是在javaworld.com.tw看到這位對岸網友的post,今天看到JSF吧:那就開始吧……,雖然還只是簡單介紹JSF,但他說要陸續介紹,就先相信他囉~(至少他是最近在學,也提到Shale這種新東東)

P.S. 1. 若在公家機關,是看不到對岸的網站,請利用Tor或其他的Proxy。
2. 若沒接觸過JSF,可以看javaworld.com.tw的 JSF入門

星期一, 8月 28, 2006

MDA

最近李維大師的兩篇:我以前的痛苦,你也擁有一樣的痛苦嗎?您也是打痛苦混戰的高手嗎?都在講BorlandECO架構。MDA我只有聽過2003年JavaTwo的一場Seminar,還有那年葉秉哲講的AspectJ。而ECO是基於MDA所開發出來的技術,對我來說實在是太遙遠。Google後中文文件除了李維的文章外,只找到葉秉哲的MDA 與軟體開發工具:從 Delphi 2005 談起MDA 與軟體開發工具:從 IBM/Rational 觀點談起,及Borland ECO 企業核心物件俱樂部

3年前未成熟的技術,現在似乎變得火熱,但連Aspect都不算成熟,我想MDA雖然大家都在喊,不會太快流行。以另一種觀點來看,愈是抽象的技術,速度就愈慢;最近看到同事用MFC寫的交通運輸模擬程式,速度只能以飛快形容。在追求軟體技術的同時,不要忘記執行效率。

現在我已經沒有太多時間能花在學習新技術,對這種未普及的新技術,只能繼續觀望,也希望MDA能為軟體開發帶來新氣象。

BTW, 我今天才發現blogger目前沒有支援trackback,實在是無言以對。

不挑工作,可能嗎?

早在3年前就想寫這個主題,今天看到獨孤木老大的能者多勞(下),腦中又浮現這個想法。

話說當年在下敝人小弟我的公司有位老兄跟隨老婆移民米國,於是工作就得交接給其他人,而這種公司可不像獨孤木老大寫的那麼民主,而是隨便開個不太有意義的會議,就把工作指派下去。過程中,某豬頭一直強調工作一定要有人做,他也沒有在挑工作。我要說的是,一般上班族那有沒在挑工作?叫你去做工願不願意?給月薪10萬去掃廁所願不願意?碩士去應徵清潔大隊才能叫做不挑工作,一般人去做水電工35年到退休時(假設18~55,兩年當兵)賺得比一般白領階級還多(我不是指阿賢 XD),看你願不願意去做而已。所以這篇是寫給不會來看的那位豬頭看,哈哈!

所謂的能者多勞只是老板壓榨員工的一種修飾詞,最後的底線在於薪水和工作量的比例;不過萬一工作大過負荷量時,再能幹的人也會受不了辭職吧!就像在獨孤木老大能者多勞(下)不具名留言者一的情況,當老板也該有點自覺,如果不願意再找人,只有減少工作,否則把金雞母逼走後就開始痛苦了。

好文推薦:MySQL 中文編碼徹底研究

今天看到MySQL 中文編碼徹底研究,寫得蠻清楚的。不過,MySQL的中文問題,也是我偏好使用PostgreSQL的原因之一;如果沒有特別的限制,我還是推薦PostgreSQL,功能強大也成熟。

Jace Ju不知道有沒有注意到,使用MySQL得遵守GPL,也就是說若用在Product裏,必須整個Product都Open Source或是另外購買Commercial License;而PostgreSQL就沒這個限制!

星期日, 8月 27, 2006

這不算犯罪吧

剛看到Yahoo新聞 Freedom駭客程式 作者落網 ,實在很生氣。

刑事局偵九隊日前網路巡邏時,發現駭客網站裡有網友熱烈討論名為「Freedom」穿越封鎖線程式,指該程式未被防毒軟體偵測,可當作木馬程式使用;辦案人員偵查出該程式設計者是吳紹均,前往台北縣板橋將他逮捕。
剛去查了一下,他根本有具名,而且也不是作為木馬,而是跳板。這支程式不過就是一支簡易版的proxy,如果寫這個也要抓,那去抓八爪魚Tor的作者呀!連Back Orifice都能進Source Forge,台灣的電信警察到底在想什麼呀?

原文如下:(純備份用)
Freedom駭客程式 作者落網
聯合新聞網 更新日期:2006/08/26 05:00 記者:記者張榮仁台北報導

刑事局偵九隊昨天破獲「Freedom」穿越封鎖線駭客程式案,嫌犯吳紹均在知名銀行總行資訊室擔任電腦工程師,他聲稱純為幫友人解決電腦被公司設限、上班時不能上網聊天「打發無聊」,而順手寫這程式,不知觸法;警方依妨害電腦使用罪嫌將他送辦。

據調查,吳紹均(卅五歲)在九十二年八月撰寫穿越封鎖線Freedom程式,同年九月貼上「紹均雜貨間」個人網站免費供人下載,在台灣及兩岸網站約有五千人次下載,警方查到國內下載使用該程式的電腦公司江姓女子及吳姓男子,因所屬公司不提告訴,列為證人釋回。

刑事局偵九隊日前網路巡邏時,發現駭客網站裡有網友熱烈討論名為「Freedom」穿越封鎖線程式,指該程式未被防毒軟體偵測,可當作木馬程式使用;辦案人員偵查出該程式設計者是吳紹均,前往台北縣板橋將他逮捕。

偵九隊三組副組長高大宇說,一般公司企業高階主管的電腦使用權限相對比基層員工大,會刻意封鎖MSN、收發電子郵件或上網,對電腦使用管理分層設限。

而一旦植入「Freedom」穿越封鎖線程式,將使公司內部原本沒有權限連上網路的電腦,均得藉由該程式控管下的電腦主機轉介上網,原有系統保護管制措施形同虛設。

高大宇指出,假設代號A的電腦主機被植入程式,因為這程式具備木馬程式攻擊用途,所有透過「A」主機的電腦都成為「分身」,有相同使用權限,當事人卻難以察覺。

【記者張榮仁台北報導】「Freedom」穿越封鎖線駭客程式作者吳紹均,昨天以「我要休息了」為由關閉個人網站。

吳紹均在「休站」留言說,他建置網站的熱情消退,原因很簡單—「累了」,也希望網友將任何從他網站下載的程式全部移除。

據了解,吳紹均在知名銀行總行資訊室擔任電腦工程師,寫程式的功力一流,他太太在技術學院擔任國文老師,育有一子一女。

吳紹均寫程式的功力,連專責偵查電腦犯罪的刑事局偵九隊幹員也折服。辦案人員在吳紹均個人網站蒐證發現,吳告訴網友「這隻程式,是順手寫出來的」、「寫說明文件的時間遠遠超過寫程式的時間」,警方事後比對他撰寫的其他程式,認定並不是唬人的。

辦案人員指出,蒐證發現,包括「MP3整理快手」、「目錄同步備份」及「下載防毒元件」等程式都出自吳紹均之手,而吳把程式貼上網站免費服務網友,如果想賺錢「早就發了」;這次吳撰寫「Freedom」穿越封鎖線駭客程式,用意在幫朋友,也非牟利為錢。

吳紹均撰寫「Freedom」穿越封鎖線程式,著重隱藏及穿透防護功能,被認定是有攻擊性的木馬程式,也是一種間諜程式,有心人可以電子郵件或綁在線上遊戲上,一旦開啟郵件或下載即被植入該程式,成為電腦被「借道」的冤大頭。

星期四, 8月 24, 2006

網路詐欺

聯合新聞網 雅虎拍賣 250人集體被騙,原文如下: 
【記者廖敏如/台北報導】

就在Yahoo!奇摩拍賣九月一日起將收取交易手續費前,網友投書本報指稱,超過兩百名買家在Yahoo!奇摩拍賣購買記憶卡,卻集體遭騙,估計一周內損失金額達四十萬元,引發網友對網拍安全的疑慮。

網友指出,八月中旬一名原有交易評價良好、帳號為「parismanisme 」的賣家低價販售日本記憶卡,許多網友以約一千五百元下標購買,但匯錢過去後都沒有收到貨,才發覺被騙。

據了解,此名賣家之前交易正常,所賣物品也與以往類似,且帳號沒有被盜用現象,為何突然出現詐騙行為,讓網友不解。

為了自救,網友在Yahoo!奇摩組織受害者家族,短短一周就有近兩百五十名網友參加,家族網頁上估計受騙人數達三百人、受騙金額達四十萬元以上。

對此,Yahoo!奇摩指出,一開始並未收到買家檢舉,是由網站人員發現網友討論,且從八月十五、十六日起此名賣家的負面評價急速增加,Yahoo!奇摩決定先將此名未履行交易的賣家停權,但停權後負評價還是不斷增加。

超過三十名網友聲稱已向警方報案,希望能揪出這名不法賣家。

Yahoo!奇摩表示,目前已經進入警方調查階段,會配合協助警方辦案。

受害買家可申請買家賣家保障方案,為了增加買賣家對網路拍賣的信心,已將賠償上限從原有七千元提高至一萬元。

【2006/08/23 聯合報】


我一直不太信任網拍,只敢買小東西就是這個原因,謝兄得多注意了。另一方面在銀行工作的朋友會告訴我一些沒上報的內賊案例,害我連網路銀行都不敢用。再來則是喜歡看過東西再買,我可不是Hero裏的木村,呵~

最後,提醒各位,最近截標客激增,很多人自己學詐騙集團玩這套,得標後一定要和原拍賣者連絡。

網路的routing

最近公司申請中華電信的FTTB光纖專線, 替兩個駐外單位連線。

FTTB 全名為Fiber To The Building,中文名稱為「光化大樓」,為新一代網路架構,採環路(ring)設計,具有自動環路備援裝置與功能,若因環路中有任一點或一段故障時, 將可自動切換環路型態,可避免一次斷線或單點設備故障所造成的中斷或電路不穩之現象。同時,應用FTTB以乙太網路建構之環路之特性,可大幅降低企業端介 接介面的成本,不須外購其他轉換介面即可連接。

以光纖取代傳統銅纜,可避免干擾,傳輸品質佳。且傳輸服務不中斷,網路架構簡單,障礙少。此外高速FTTB線路具有客戶頻寬管理功能,可依客戶需求提供更 彈性、更高頻寬(至1Gbps)。FTTB提供高速上網外,可提供企業VPN、都會網路、校園專案及互動式多媒體(MOD)等多樣寬頻服務。

FTTB高速上網分為:經濟型(非固定制)及企業型(固定制)另有企業VPN、都會網路(2Mbps~1Gbps)、校園專案(10Mbps~1Gbps)等服務。


我們申請的應該算是企業型的專線,效果和數據專線Bridge橋接模式相同,價格相對便宜。不過,由於前人的錯誤,這棟大樓是以class B 網段,無router模式,上面約有1500台PC,broadcast封包高得嚇人,每秒約80kb。而我來的這幾年,Core Switch時常因為封包碰撞而掛點。這次的FTTB專線,原本先通一路,半個月來都很正常,上星期另一路接通後開始會讓原本正常的那路斷線,拔掉重插就恢復。昨天我做了十次後,忽然想起以前3Com Switch也有因為在同時出現多個網段而造成網路斷訊,因此把這兩路FTTB分別接到不同的switch就不再發生干擾。所以可能是封包太多,mask又相同讓Switch的routing送錯。這種問題,原本應該不可能發生,如果有切割VLAN,大概一輩子也遇不上,偏偏就是在真實環境遇到,實在是很沒力。

各位非本科系IT人員如我,若要規劃網路環境,請先好好K幾本TCP/IP的入門書好嗎?

閒聊:美女職員

最近獨孤木老大寫了不少好文章,而我的同事寫了一篇找美女職員的用途與下場,看完獨孤木老大的之後看這篇。我的心得是:我這輩子都沒有遇上這種事的機會吧。

朋友Randy曾經有美女programmer相伴,實在是難得的經驗呀~而Yahoo的勉志兄,娶得美女同事回家是最幸福的吧!

星期三, 8月 23, 2006

推薦:孟岩近期文章

最近實在是....身體欠安,又在忙著搞FTTB和其他的事,才會一陣子沒更新Blog。

再推薦對岸的牛人孟岩近期的好文章:駁多核無用論.NET發展中的幾個失誤自組織型團隊
基本上,我都和他的看法一致,多核是趨勢,.Net也不是完全成功,我這個小站相信大家也懶得踏館。

為尊重原創,而且討論也很精采,這次我就不翻成繁體,請自己裝Firefox新同文堂吧。

推薦:深入敵營的Java

王建興先生在JavaTwo 2006介紹的:深入敵營的JavaPart I, Part II, Part III, Part IV

感謝王先生分享,讓我們無緣參加JavaTwo 2006的人也能看到您精彩的分析。

asp.net切換執行身份

有時候為了在伺服器端列印或是連接網路磁碟等因素必須使用不同的身份,asp.net切換執行身份有兩種方式,一種是在web.config指定impersonate="true"
<system.web>
<identity impersonate="true" username="app1"
password="app1pw">
</identity>
</system.web>

這種作法會讓整個web ap下的執行身份都變成這個user,比較容易有安全性漏洞。
當然也可以把上面這段放在location區段下,變成

<location path="app1" allowoverride="false">
<system.web>
<identity impersonate="true" username="app1"
password="app1pw">
</identity>
</system.web>
</location>

另一種方式用Windows API去做impersonate,
public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;

WindowsImpersonationContext impersonationContext;

[DllImport("advapi32.dll")]
public static extern int LogonUserA(String lpszUserName,
String lpszDomain,
String lpszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken);
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern int DuplicateToken(IntPtr hToken,
int impersonationLevel,
ref IntPtr hNewToken);

[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool RevertToSelf();

[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
public static extern bool CloseHandle(IntPtr handle);



public bool ImpersonateValidUser(String userName, String domain, String password)
{
WindowsIdentity tempWindowsIdentity;
IntPtr token = IntPtr.Zero;
IntPtr tokenDuplicate = IntPtr.Zero;

if (RevertToSelf())
{
if (LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT, ref token) != 0)
{
if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
{
tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
impersonationContext = tempWindowsIdentity.Impersonate();
if (impersonationContext != null)
{
CloseHandle(token);
CloseHandle(tokenDuplicate);
return true;
}
}
}
}
if (token != IntPtr.Zero)
CloseHandle(token);
if (tokenDuplicate != IntPtr.Zero)
CloseHandle(tokenDuplicate);
return false;
}

public void UndoImpersonation()
{
if(impersonationContext != null)
impersonationContext.Undo();
}
這樣做在程式碼裏就可以直接切換執行身份,但問題又來了,在XP/2003是可以正常執行,在Win2000 Pro或Server都不行,必須在控制台->系統管理工具->本機安全性原則->本機原則->使用者權限指派->「作為作業系統的一部份」權限授與 ASP.NET 處理序帳戶。
微軟說這樣做將會造成安全上的危險,自己看著辦,不然就花錢升級吧!但到時候asp執行有問題或是權限不會設定可別找我,微軟都有密技可以處理。

大師介紹OOP

自從學習Java後我才真正瞭解OOP與當初我從C++去學習的OOP不同,今天看到王克明介紹物件 (Object) 的媽媽是 類別 (Class)?,推薦給對OOP不清楚的”初心者",另一篇不要從程式語言學習「物件導向」!也是應該要閱讀的好文章。

對Blogger的不滿

昨天剛說Blogger的好話,當然要罵一下囉!Blogger最大的缺點就是過於精簡,又沒有分類的功能,現在新的Blogger Beta 加上label功能,但卻不能對現有的blog增加分類,一定要在beta.blogger.com開一個新的blog,真是OOXX,這是一定要吐糟的!

星期二, 8月 22, 2006

訂便當系統

葉大師那裏看到XexexJava版訂便當系統, 和我看到他當初用Ruby寫出訂便當系統時的想法相同 :用熟悉的工具做事才會比較快。雖然葉大師認為Ruby比較好學,不過對我這個學Perl總是沒辦法精通的人而言,Ruby真是詭異的語言。

還是Blogger最穩

有一段時間沒在Blogger寫,原因就是大部份的人還是連到MSN Spaces看,但最近Spaces改成Live.com 後,問題變多;不但Firefox不能編輯,時常DNS出問題。而台灣的Xuite也被人罵到不行,結論是:還是Blogger最穩! 其他的我都放棄,以後只更新這裏!

改觀了...

原本對這位一面之緣的李兄的感覺是FreeBSD Commiter,但現在看了這篇後認為他是很敢大聲說話的漢子一條。

Coding的本質在Code

我認為,Coding的本質在Code。
Coding只是一種過程,目的是要寫出夠好的Code,讓產生出來的軟體能滿足需求。

Code最誠實,不管多爛的寫法或是缺乏深思熟慮的設計,都在Code裏一覽無遺。就算是用Fortran,也有人寫出繪圖軟體,跑得嚇嚇叫;也有人用.Net卻把SQLServer操到掛。

相信不只我一個人有這種感覺,OpenSource是一種趨勢,就算不對外公開,在部門內部也必須公開Source Code,才能顯出公信力。連Windows都對特定對象公開,我們有什麼資格不公開呢?程式的技巧只不過是一時的,結合眾人的力量軟體才能繼續成長,存活下去。世界上沒有完美的軟體,原因是需求和外在環境一直在變化,Application Life Cycle愈來愈短,唯有不斷地變化,才是軟體的生存之道。

最後,結論回到Code,以Extreme Programming方式降低每個Cycle的時間,以眾人之力開發,避免單人開發的盲點才是王道,各位IT主管不可不注意呀!

Google Browser Sync 更新/安裝

最近有在用Google Browser Sync的人都知道無法更新,今天終於找到原因,是只允許USA使用,而破解法在How to Get Google Browser Sync outside the USA這篇,下載http://anon.free.anonymizer.com/http://toolbar.google.com/firefox/extensions/toolbar/google-browsersync.xpi自行安裝即可。

工作與賺錢

不知道是不是因為物價上漲而薪水沒調,大家似乎都在追著錢跑。獨孤木老大寫的Show Me the Money江山代有才人出都 是回答資訊業的讀者反映給他的問題。以前的同事A君來信說很高興可以不用再寫Code,看他這麼說讓我很感慨,我自己為了生活也沒有找讓我有興趣的 Coding工作,就是這個工作錢多。獨孤老大說在公司挑大樑就能帶來新氣象,基本上我是同意,但許多公司內部的政治力干預人事就不是我們能預料到的, MIS的屎缺比獨孤老大想像中的多呀。

基本上,若只是想不被Fire,MIS接下公司的會計或薪資系統,在一般傳產公司大概可以穩穩的幹 到退休。有些聰明的老板就根本把會計和薪資這些外包,直接由自己人來管,員工就只是可更換的棋子。If... If and only if 有年輕人看到我的Blog,建議還是找個自己真正有興趣的工作,前幾年咬著牙好好學習,過個五年十年後才不會後悔。我的同學有幾個工作快十年結果跑去賣保 險,還有一個是班上第一名,天呀!或者像A君寫了3年程式才發現學生時代的興趣變成痛苦的工作。

對於已經不能轉職的人,要想著工作就只是工作,是一個讓你三餐溫飽的付出。要賺大錢請找清崎,再強調一次:公司請你來做事,不是讓你來自我實現。遇到能力比你差的人爬到你頭上,也只能說是他拍馬屁的能力比你強。責任愈大並不與能力愈強劃等號,但往好處想,你承擔愈多的責任,至少公司不能隨便炒你魷魚。

如果寫程式要賺比較多錢,還是辛苦點找家園區的半導體公司等著分股票吧~不然,台北的電腦公司大概都會讓你失望,包括Google之外那幾家網路公司。

DotNetNuke 4.3.3 Active Directory 整合認證

花了一整天的功夫,終於搞定DotNetNuke 4.3.3 的Windows Authentication,也就是Active Directory 整合認證。

照著Project ::Active Directorydavid@newcovenant.com的說明,做到第17步時發生問題,是因為我把<impersonate="true">也uncomment,這行不能啟動,否則sql express無法使用。

接下來做到第21步時出現錯誤,原因是AD的帳號沒有讀取到Name的資料,值為Null,必須patch source code,方法如下:
先下載DotNetNuke_4.3.3_Source.zip解開,
將 Library\Controls\DataGrids\TextColumnTemplate.vb 第182行
itemValue = DataBinder.Eval(container.DataItem, DataField).ToString()
改成以下4行
Try
itemValue = DataBinder.Eval(container.DataItem, DataField).ToString()
Catch
itemValue = Null.NullString
End Try

再重新編譯就行了。


看來目前.Net上Opensource的專案成熟度仍然太差,缺少像Xoops、JBoss這種Killer AP,而且參與人數也太少。

最後把David的27個步驟貼在後面:
1. For a fresh install, just go to the next step. If it's an upgrade, follow Tam Tran's instructions about the database entry, and the file deletion post above. Ignore the rest.
2. In IIS, open Properties on the web site or Virtual Directory > Directory Security tab > Edit button. Uncheck "Anonymous access" and "OK" your way out.
3. In Web.config, comment OUT the Windows Authentication block. Uncomment the Forms Authentication block.
4. Uncomment the "Authentication" item under "httpModules."
5. Log in with admin account.
6. Go to Admin > Authentication.
7. Check "Windows Authentication?"
8. Check "Synchronize Role?" if you want AD groups sync'ed. (Don't ask me if this doesn't work. Report it as a bug to Tam Tran.)
9. Leave "Provider:" at the default. There's normally only one choice, anyway.
10. Choose "Authentication Type." "Delegation" is a good choice in most cases.
11. "Root Domain:" If you want to authenticate and get groups from the Root forest, then leave this blank. Otherwise, enter the LDAP path to your desired AD tree. Use this format: "LDAP://dc=com,dc=this,dc=that." Using "LDAP://" in the entry overcomes a bug that exists.
12. In most circumstances, you can leave "User Name" and "Password" and "Confirm Password" blank. These are supposed to be for an account that has "Read" access to the active directory. In most cases, EVERY account has read access. So leaving these blank will cause DNN to use your domain account to read the directory.
13. Click "Update." You will get an error message at the next screen. That's OK. Your entries just went into the ModuleSettings table of the database.
14. Log out, and close the browser.
15. Open Web.config, and uncomment the Windows Authentication block. Comment OUT the Forms Authentication block.
16. Save web.config.
17. Open a browser and point it at the site. You should see that the "Login" link says "Logout." This indicates that you were automatically logged in using your AD account. You won't be able to do anything here but browse public pages. But in the background, a user account was created for you, like "domain\username."
18. Close the browser.
19. Open web.config. Disable Windows Authentication and enable Forms Authentication. Save web.config.
20. Open a browser and point it at the site. Log in as Admin.
21. Go to Admin > User Accounts. Click the "all" link. You should see your "domain\username" account in the list.
22. Click the pencil next to that account.
23. Click "Manage Roles for this User."
24. Add this user account to the "Administrators" Role.
25. Log out, and close the browser.
26. Open web.cofig. Last time, I promise. Enable Windows Authentication and disable Forms Authentication. Save web.config.
27. Open a browser and point it at the site. Now you should not only see "Logout" at the Login link, but you should also be able to use the "Admin" menu.

引述:RoR風潮的背後

我沒有真正寫過Ruby on Rails,就不對本文評論,最近看到數位時代提到HemidemiRoR寫的,讓我對RoR又有點興趣,尤其是它的load balance。

引述

RoR風潮的背後
RoR 的流行速度確實很有點出人意料,老實說,RoR在技術上沒有大的創新,而且在php裡早就有類似的嘗試,別的不說,RoR作者在寫RoR之前,就是一個 php程序員,也有一個php版本的RoR,不過同樣的東西在php陣營裡卻沒有產生任何反響,反倒是Ruby陣營裡紅透半邊天。為什麼會有這樣的情況出 現,是一個值得思考的事情,一方面,php陣營內framework數量眾多,用戶有很多選擇,這點和java類似,任何一個framework都很難達 到RoR在Ruby陣營裡那種一呼百應的效果,因為對於Rubyer來說,他們沒有別的選擇,RoR是唯一的framework,這樣的壟斷地位,某種程 度上加速了RoR的火爆。另一方面,Ruby本身也確實存在一些php不及的優點,如完整的動態語言的特性。但在我看來,從一個長遠的角度來看,php的 表現仍然會優於ruby,原因如下:php有更好的用戶群,10多年的積累不是初出茅廬的ruby能在短時間內超越的,而且,ibm, oracle都開始對php提供了企業級的支持,再者,php的社區是活躍的,語言級別上的一些不足之處會在未來的適當時候得到袮補。
btw:在說說ror本身,很多人認為它是web開發的終極殺手,我一直有點懷疑,它只不過是一個Active Record的應用而已,本質上講,RoR是以資料庫為中心而設計的只適用於那些業務邏輯和數據結構十分相似的項目,可能是受了這幾天看《領域驅動設計》這本書的影響,我一直認為這樣的設計在一定的前提下是可以的,但不能體現OOP的真諦,從某種程度上來說,它掩蓋了問題的實質:領域對象的價值!唉,全世界的程序員辛辛苦苦的研究了面向對象幾十年,一覺醒來,被RoR打回解放前。

高手過招

今天無意之中瀏覽到同人這位高手的軟體設計並不昧於專案現實,再循線看到王克明的軟體的模組化(Modulize)設計應該要徹底實踐!,他們和M之間的討論讓我流汗,真是高手過招,很像在討論武功(參考同人的由招熟而漸悟懂勁),尤其是那位M前輩,已經到無招勝有招的地步。Coding的本質在M手上回歸到Coding,最後還是射擊、瞄準、射擊,XP獲勝呀!

2006御宅族名言

http://trimo.blogspot.com/2006/06/blog-post_23.html
我這一生充滿挫折,因此而懷憂喪志,這個婚姻讓我對人生重新燃起了希望。

Unix way的設定檔


蔡董說我的設定檔寫得太複雜,每種儀器都寫一個設定檔太麻煩,能不能集中在一個檔案。今天程式快全部完成才赫然發現,我是unix way的設定檔呀!

Win系列不管是Win.ini或是Registry都是中央集權式的設定,常在程式移除後留下垃圾。Unix每個程式設定在不同檔案,程式移除後可以把不需要的檔案清乾淨,當然也可能留下一堆東西,但至少看得到,不像registry...

嗯,我果然是unixer呀