2005年11月28日
#
摘要: 這些天一直在為Flex程序中的各個(gè)組件之間有效的傳遞參數(shù),協(xié)調(diào)組件間的行為等問題感到困惑。由于Flex程序?qū)嶋H上是一個(gè)運(yùn)行在客戶機(jī)上的的客戶端程序,因此在Flex內(nèi)部組件之間無法像B/S程序基于HTTP協(xié)議那樣發(fā)一個(gè)請(qǐng)求,由服務(wù)器端通過一個(gè)標(biāo)準(zhǔn)接口讀出參數(shù),處理并做出響應(yīng)。也就是說用表單、URL的方式傳遞參數(shù)和控制流程肯定是行不通的。前一段時(shí)間一直嘗試像Javascript中那樣用函數(shù)調(diào)用,甚至是全局變量來做,感覺越做越復(fù)雜,程序的OO結(jié)構(gòu)也受到很大的破壞,十分的煩惱。
閱讀全文
摘要: 要沒用過E4X,就不知道用這東西處理XML是多簡(jiǎn)單好用!過去在Java中一直是用一些用熟了的組件操作XML,這幾天用Actionscript才發(fā)現(xiàn)了這個(gè)好東西,真是相見恨晚啊,一定要和大家分享一下。
閱讀全文
摘要: RIA會(huì)有將來會(huì)成為互聯(lián)網(wǎng)的主流么?這是一個(gè)只有一個(gè)答案的問題,那就是“會(huì)”。不需要去糾纏那些技術(shù)細(xì)節(jié),你至少可以相信HTML及其派生出來那些技術(shù)不能讓對(duì)體驗(yàn)效果的追求永無止境、又十分挑剔的我們滿意,那么能帶給我們耳目一新的感覺的RIA有什么理由不成為主流? Microsoft和Adobe已經(jīng)磨刀霍霍,準(zhǔn)備在RIA的時(shí)代里挑大梁了,我們可別光坐著看熱鬧。
閱讀全文
摘要: 還在遠(yuǎn)古刀耕火種的年代,當(dāng)人類意識(shí)到鳥能在天空中飛翔是因?yàn)橛须p翼,我們的先祖便在石頭上為自己刻上了翅膀;從莊子的《逍遙游》到今天的《黑客帝國(guó)》、《哈里波特》,我們?nèi)祟惗蓟孟胫馨熏F(xiàn)實(shí)生活放入另一個(gè)空間,在那個(gè)空間里我們能“水擊三千里,摶扶搖而上者九萬里”。而計(jì)算機(jī)和互聯(lián)網(wǎng)的出現(xiàn),給了我們發(fā)揮的想象力的一個(gè)理想的平臺(tái),
閱讀全文
Flex 2.0 安裝應(yīng)要注意的幾個(gè)小問題
1. 弄清概念
?? Flex 2.0 實(shí)際上是一個(gè)產(chǎn)品系列,初學(xué)者安裝之前應(yīng)當(dāng)弄清楚中各個(gè)產(chǎn)品的功能和相互之間的聯(lián)系。 參考Flex官方介紹:http://ww.adobe.com/go/flex,了解Flex 2.0 系列的各個(gè)產(chǎn)品特性。
?
2. 記得要Tomcat加入加入JTA支持
?? JTA的包一般都是被應(yīng)用服務(wù)器自帶,可Tomcat默認(rèn)卻不支持JTA,所以用Flex Enterprise Services 2.0時(shí)必須自己手動(dòng)在Tomcat中安裝JTA以獲得支持。否則的話運(yùn)行samples.war肯定會(huì)在控制臺(tái)看到類似下面的錯(cuò)誤:
?? java.lang.NoClassDefFoundError: javax/transaction/SystemException。 ?
? 如果真是需要使用事務(wù)功能,推薦用Java Open Transaction Manager(JOTM) 來提供 UserTransaction。嫌配JOTM麻煩的話可以自己直接拷貝jta**.jar,jdom.jar放到samples/lib下湊合一下,例子的各個(gè)功能基本都可以正常運(yùn)行。
? JOTM的安裝可以參考網(wǎng)上的一些教程,比如
http://jotm.objectweb.org/current/jotm/doc/howto-tomcat-jotm.html?;揪褪窍螺d最新的二進(jìn)制發(fā)行版(http://forge.objectweb.org/projects/jotm/),解壓縮,從lib目錄拷貝*.jar文件(除了log4j.jar、common-cli.jar和jotm_iiop_stubs.jar之外)到$TOMCAT_HOME/shared/lib目錄下,然后再配置一下server.xml、web.xml即可。
3. 瀏覽器需要安裝支持調(diào)試功能的Flash Player插件,否則無法使用 Flex IDE 的調(diào)試功能。
? 支持調(diào)試功能的Flash Player可以去官方下載:
? ? http://www.adobe.com/support/flashplayer/downloads.html
?? 在那些名字有debugger字樣的里面找需要的吧。
//作者:王瑋琳? 時(shí)間:2007-12-30
//聲明:本博客中所有文章均為版主原創(chuàng),轉(zhuǎn)載請(qǐng)保留作者信息,并請(qǐng)注明出處。
摘要: 我們都知道對(duì)于一個(gè)有一定規(guī)模的項(xiàng)目或者有長(zhǎng)遠(yuǎn)算的產(chǎn)品,僅憑一個(gè)和數(shù)個(gè)能力突出的人的努力付出很難真正做好的。軟件開發(fā)過程的個(gè)人英雄主義往往到最后是限制或者是毀了這個(gè)或許本來很有前途的軟件,所有人都知道團(tuán)隊(duì)的整體能力是多么的重要!然而從現(xiàn)實(shí)來看,縱然有無數(shù)的管理學(xué)和軟件開發(fā)方法的理論,在現(xiàn)實(shí)中打造一個(gè)有很強(qiáng)執(zhí)行力的團(tuán)隊(duì)卻是那么的困難重重。
閱讀全文
//作者:王瑋琳? 時(shí)間:2006-12-12????
???? 不知道是不是巧合,今天一早便看到Blogjava有兩篇關(guān)于AJAX感受的文章。而CSDN上這兩天頭版最顯著的位置也發(fā)了一組為MS Expression造勢(shì)的文章,口風(fēng)一致又滿懷激情的預(yù)言AJAX將迅速退場(chǎng),RIA會(huì)迅速成為主流。這些個(gè)平日專業(yè)寫IT文章的技術(shù)專家,也是有備而來,打出"Expression 2006最后的論戰(zhàn)"的口號(hào),一心在CSDN推起再一個(gè)AJAX vs RIA論戰(zhàn)的高潮。對(duì)這個(gè)話題其實(shí)我早就憋了一肚子想說的,俺也不喜歡CSDN里那種過于關(guān)注趨勢(shì)的討論,咱們這主要是能參與一線開發(fā)的技術(shù)人員,我想在這里一定能更和各位XDJM進(jìn)行更實(shí)際的討論。小弟先在這淺談幾點(diǎn)陋識(shí),不妥的地方還希望大家指正。
????? 首先是AJAX vs RIA。表面上這是矛盾的焦點(diǎn),而在我看來是不然。AJAX 技術(shù)的核心是XHTML和JavaScript,再加上CSS來做展現(xiàn),其實(shí)是傳統(tǒng)開發(fā)方式的一個(gè)發(fā)展,這也是為什么AJAX能這么快的被大家接收和喜歡的原因。從某種意義上來說,AJAX的目的正是要用傳統(tǒng)的Web技術(shù)來實(shí)現(xiàn)RIA!CSDN的專家們把RIA和AJAX對(duì)立起來,是一個(gè)概念性的失誤,只有用基于AXML和MXML這種XML布局的思想來實(shí)現(xiàn)的富客戶端才是RIA么? 退一步說,難道基于XHTML布局不是基于XML布局的一種,為什么它不能在RIA中占有一席之地?
????? 回頭看看,從XML開始普及的年代開始,就不斷有人跳出來宣判HTML的死刑,而事實(shí)是直到今天HTML依然是互聯(lián)網(wǎng)的主流。看看PHP,也有類似的經(jīng)歷。為什么是這樣? 我個(gè)人執(zhí)著的認(rèn)為這是因?yàn)閯?chuàng)造Internet內(nèi)容的不是這些鼓吹新技術(shù)的專家,而是廣大的網(wǎng)民,是數(shù)以千萬記的全世界普通的、甚至很多是不入流的半職業(yè)的程序員和普通的網(wǎng)民。一方面對(duì)于其中的很多人用最小的代價(jià)把內(nèi)容放到網(wǎng)站上,能從網(wǎng)站上得到他們需要的反饋,他們需要傳統(tǒng)而基礎(chǔ)的HTML(或許將來小學(xué)生課堂里就會(huì)學(xué)HTML網(wǎng)頁(yè)制作);另一方面大量的只局限在PHP之類傳統(tǒng)開發(fā)技術(shù)的程序員依然大量活躍在互聯(lián)網(wǎng)上,這些人還在,互聯(lián)網(wǎng)的大格局就不會(huì)變。只要HTML不會(huì)死,AJAX就不會(huì)死,至少XHMTL+CSS+JavaScript不會(huì)死,不但數(shù)年內(nèi)不會(huì),在很長(zhǎng)的時(shí)間內(nèi)都不會(huì)。
????? 現(xiàn)在我想亮明一下我的態(tài)度:我喜歡AJAX的效果,但不喜歡AJAX的實(shí)現(xiàn)方式,我非常贊同CSDN那些人的看法,基于XML布局的RIA將異軍突起,“在WPF、Flash(Apollo)等RIA技術(shù)的夾攻之下,越來越多的Web應(yīng)用將同時(shí)部署傳統(tǒng)Web頁(yè)面和新的RIA UI。之后此消彼長(zhǎng),幾年之內(nèi)RIA將成為主流?!?摘自孟巖的blog)。
????? 當(dāng)然,這些用來為MS造勢(shì)的文章并沒有真正客觀來介紹RIA技術(shù)的現(xiàn)狀,一方面我在前面說的AJAX技術(shù)并不是站在RIA的對(duì)立面,而是恰恰是達(dá)到RIA的一種方式;另一方面RIA的持續(xù)發(fā)展、或是取得突破絕不會(huì)是因?yàn)镋xpression的橫空出世。這次WPF出來,CSDN的幾篇文章都不同程度的認(rèn)為這是跨時(shí)代的大事,或許對(duì).net開發(fā)人員是這樣,但對(duì)于我們Java開發(fā)者,很幸運(yùn),我們?cè)缇涂梢愿惺艿搅怂麄冞t到的震撼和快樂了!
????? 了解事情前因后果的人都知道,RIA發(fā)展已久,Expression不過是微軟運(yùn)用一貫的跟風(fēng)模仿的手段的另一個(gè)成果,基本就是把MM的那一套弄到他的平臺(tái)里去,并不是什么有創(chuàng)造性的發(fā)明。在Java領(lǐng)域,我們一直有都是生成SWF的 開源的Laszlo + Javascript 和Adobe的MXML + Actionscript (Flex) 兩套基于XML布局的優(yōu)秀RIA體系,此外還有Sun的基于java的JDNC,加上AJAX來實(shí)現(xiàn)RIA,我們有非常豐富的選擇。這幾種技術(shù)都經(jīng)過了多年的發(fā)展日趨完善。尤其是Flex,事實(shí)上,半年甚至一年前它推出2.0 beta的時(shí)候,CSDN這些專家就有足夠的理由像現(xiàn)在這樣歡呼雀躍了。而微軟,好像在明年二季度才會(huì)出Expression的正式的第一版,不折不扣的后來者。
????? 微軟來了,作為后來者他毫無疑問會(huì)繼續(xù)用一貫的打壓的手段去對(duì)付競(jìng)爭(zhēng)產(chǎn)品,市場(chǎng)洗牌是不可避免的。今年在Laszlo的壓力下,Adobe已經(jīng)在Flex2.0中將原來收費(fèi)的Flex Data Services改成了有條件的免費(fèi)使用,現(xiàn)在狼來了,Adobe將來肯定還要有新的拉攏開發(fā)人員動(dòng)作,對(duì)我們來說形勢(shì)大好。RIA的趨勢(shì)無需辯論,現(xiàn)在的問題是作為一個(gè)Java程序員,對(duì)于面對(duì)眾多可選的實(shí)現(xiàn)RIA的路,我們?cè)撟吣且粭l?
????? 我對(duì)Flex進(jìn)行過一定的學(xué)習(xí),和Java良好的集成以及大量的現(xiàn)有的Flash制作人員,我還是比較看好它的。希望深入用過Flex或是其他RIA技術(shù)的朋友能出來交流指點(diǎn)?。?/p>
聲明:本博客中所有文章均為版主原創(chuàng),轉(zhuǎn)載請(qǐng)保留作者信息,并注明出處。
??? //作者: 王瑋琳? 2006-12-07 ?? ?
? 近期在一個(gè)小項(xiàng)目開發(fā)組里進(jìn)行推行XP,嘗試了一段時(shí)間。結(jié)合過去帶項(xiàng)目開發(fā)組的經(jīng)驗(yàn),說說我對(duì)在實(shí)際項(xiàng)目開發(fā)里應(yīng)用極限編程方法一些體會(huì),和大家交流。完全是個(gè)人理解,也不太成熟,不對(duì)的大家來拍。
?? 一 如何看待開發(fā)方法
??? 首先說點(diǎn)開發(fā)方法本身的理解。我一向認(rèn)為沒有哪個(gè)開發(fā)方法可以徹底的解決項(xiàng)目開發(fā)的各個(gè)環(huán)節(jié)的問題,任何一個(gè)開發(fā)方法,其中有些理論的東西放到自己的實(shí)踐中可能就是事倍功半,在實(shí)際開發(fā)中還是要靈活,要掌握一個(gè)應(yīng)用的度。過去我一直是用RUP的那一套東西,不能說它差,更不能說它好。我覺得RUP也就是給我們組織項(xiàng)目提供了一個(gè)參考,我們并沒有嚴(yán)格按它的來,比如文檔,我就是按國(guó)標(biāo)的要求來寫,而不是RUP的;甚至文檔的數(shù)量、質(zhì)量方面,對(duì)每個(gè)項(xiàng)目我們也是靈活處理,比如這個(gè)項(xiàng)目組的人擅長(zhǎng)文檔編寫,就要求他們寫的詳細(xì)點(diǎn),要是項(xiàng)目組整體文檔編寫能力都不行,就要求寫的簡(jiǎn)略一點(diǎn),能突出重點(diǎn)就可以了??傊矣X得實(shí)際項(xiàng)目開發(fā)的模式應(yīng)該是慢慢摸索出來的適合自己的方法和模式,不需要嚴(yán)格遵守什么東西,另外就是要根據(jù)各方面的發(fā)展進(jìn)行不斷的調(diào)整。
? 二 推廣XP價(jià)值觀???? 極限編程中用來指導(dǎo)開發(fā)的五個(gè)主要的價(jià)值觀是:
溝通、簡(jiǎn)單、反饋、勇氣、尊重。我覺得對(duì)PM而言需要重點(diǎn)對(duì)Team成員強(qiáng)化的價(jià)值觀是:
溝通、簡(jiǎn)單和反饋。這三個(gè)是實(shí)際影響所有工作方式的價(jià)值觀,應(yīng)當(dāng)在任何時(shí)間、任何條件下要求大家來理解、實(shí)踐。
?? 溝 通:在實(shí)際開發(fā)過程中,通過平時(shí)及時(shí)的口頭溝通來促進(jìn)團(tuán)隊(duì)的了解及合作,開發(fā)過程中相關(guān)人員盡可能的及時(shí)主動(dòng)報(bào)告開發(fā)進(jìn)度、問題,一方面自己要將所做的工作及時(shí)的告訴他人,另一方面不要等著在他人進(jìn)行階段性的匯報(bào)時(shí)才了解項(xiàng)目開發(fā)情況,要隨時(shí)詢問、關(guān)注他人的工作進(jìn)度,只有大家都了解了項(xiàng)目的真正的進(jìn)展,才能消除對(duì)開發(fā)進(jìn)度的懷疑、憂慮。
應(yīng)該強(qiáng)調(diào)溝通的作用是多方面的,絕不能把溝通理解成去了解他人的工作進(jìn)度,而是通過溝通來實(shí)現(xiàn)工作的簡(jiǎn)單化,實(shí)現(xiàn)較小的反饋周期。至于進(jìn)度問題,從領(lǐng)導(dǎo)角度來說,應(yīng)當(dāng)本著尊重、信任的價(jià)值觀進(jìn)行合理的關(guān)注。
??
簡(jiǎn) 單:開發(fā)過程中各項(xiàng)事務(wù)性工作應(yīng)當(dāng)化繁為簡(jiǎn),溝通方式、決策盡可能的簡(jiǎn)單化;系統(tǒng)實(shí)現(xiàn)方案也應(yīng)當(dāng)考慮選用簡(jiǎn)單的實(shí)現(xiàn)方式,盡早盡快的達(dá)到效果。
?? 反 饋:反饋是溝通的核心部分,應(yīng)當(dāng)成為所有開發(fā)人員的核心價(jià)值觀之一。大部分情況下,我們都不可能在開始的時(shí)候知道我們最終的系統(tǒng)是什么樣的,需要群策群力參與進(jìn)來,一方面對(duì)系統(tǒng)的功能進(jìn)行改進(jìn)、提高,一方面對(duì)項(xiàng)目開發(fā)的溝通組織方面進(jìn)行改進(jìn),提高整體的開發(fā)效率。推行反饋的價(jià)值觀是非常需要技巧的,因?yàn)槲腋杏X大部分開發(fā)人員并不是不想反饋,而是不知道如何反饋、反饋什么,對(duì)此我提出的一個(gè)說法就是:一切都可反饋,一起都要反饋!
?? 至于
勇氣、尊重則是我認(rèn)為這兩點(diǎn)和人的天生個(gè)性有關(guān),要因人而異,有針對(duì)性的對(duì)Team的部分成員做出具體要求。我個(gè)人認(rèn)為一些XP的書籍強(qiáng)調(diào)這兩個(gè)價(jià)值觀的前提是不太嚴(yán)謹(jǐn)?shù)?,舉個(gè)小例子,要組里一個(gè)弟兄本來就是個(gè)勇氣過剩,喜歡在項(xiàng)目用高風(fēng)險(xiǎn)的代碼的激進(jìn)分子,我再老和他強(qiáng)調(diào)勇氣,豈不是要搬起石頭砸自己的腳?
? 三 掌握XP原則??? 極限編程方法提供了一整套的開發(fā)原則,在實(shí)際開發(fā)過程中,我覺得實(shí)踐中需要重點(diǎn)遵循的開發(fā)原則有:
- 人性化
- 質(zhì)量第一
- 互相受益
- 從經(jīng)濟(jì)角度出發(fā)
- 不斷提高 ?
- 慢慢走 (Baby steps,很多書翻成嬰兒步)???????????? ?
??? 挑兩個(gè)說說,其中最有感受的是第一條人性化。
??? 人性化是什么?看看國(guó)內(nèi)眾多的軟件公司,老板大凡都是覺得自己還算對(duì)得起員工;PM總覺得自己比手下人更難更辛苦;干活的人就算受了委屈了,想想哪都差不多,只要薪水還可以能過的去就忍了,等差不多到了時(shí)候跳個(gè)槽就是了。在這種氛圍下,人性化具體下來是什么東西呢,給點(diǎn)加班費(fèi)還是多去加幾頓餐?
??? 老外談人性化,說要把工作和生活分開,要讓員工有安全感、成就感、歸屬感,未來能發(fā)展,還能對(duì)其他同事感到很親切。對(duì)咱們中國(guó)的大部分工程師來說,除了遇到個(gè)好領(lǐng)導(dǎo)能感到親切一些,安全感、歸屬感、成就感,甚至長(zhǎng)遠(yuǎn)的發(fā)展就只是少數(shù)幸運(yùn)的人才能擁有的了。這個(gè)問題我也沒有很明確的理解,就我自己的看法,我覺得作為領(lǐng)導(dǎo)能做到公平、寬容、鼓勵(lì)優(yōu)先,能盡可能的讓弟兄們少加幾個(gè)班,就算是有點(diǎn)人性化原則了。
??? 算了,撇開讓人郁悶的人性化,來說說質(zhì)量第一和不斷提高。其實(shí)在俺們的項(xiàng)目中,尤其對(duì)PM而言,質(zhì)量第一有時(shí)候會(huì)成了一個(gè)自欺欺人的口號(hào)。質(zhì)量和進(jìn)度有沖突,怎么辦?我的經(jīng)驗(yàn)是質(zhì)量第一不等于質(zhì)量最先,產(chǎn)品有Bug不會(huì)扣錢,按期交不出活不但要扣錢,還要損失信譽(yù);那怎么辦,要降低產(chǎn)品質(zhì)量用不好的解決方案或者弄虛作假么?也不可!現(xiàn)在的程序都是B/S的,方便升級(jí),先交互,再抓緊時(shí)間出補(bǔ)丁在客戶反饋之前去升級(jí)就是了,你去升級(jí),客戶還高興覺得維護(hù)費(fèi)用沒白交呢。
??? 這里就引出另一個(gè)原則了,慢慢走。這個(gè)我體會(huì)也很深,做項(xiàng)目真的就是應(yīng)該一步一步做,不能好高騖遠(yuǎn),一下把功能設(shè)計(jì)的過復(fù)雜,把攤子鋪的太大。開發(fā)中把功能一個(gè)一個(gè)實(shí)現(xiàn)了,然后一個(gè)一個(gè)做穩(wěn)定;交互給用戶后,不斷的能做一些功能的改善、提高;這個(gè)慢慢走不僅是一個(gè)什么成本、風(fēng)險(xiǎn)的問題,更是一種感覺,一種讓項(xiàng)目開發(fā)人員覺得不斷前進(jìn),讓用戶覺得你的產(chǎn)品在不斷的改善提高的Feeling!
? ?
?????? ?
? 四 XP實(shí)踐
?? XP編程理論里列舉了大量的實(shí)踐方法,我挑感觸比較深的和大家來交流一下:
??? 這一條簡(jiǎn)直是中小軟件開發(fā)設(shè)計(jì)的至理名言!項(xiàng)目做的少的人可能很難理解這句話的重要性,極端的說,那些想一開始就把各個(gè)東西都設(shè)計(jì)好的項(xiàng)目,基本和沒有做設(shè)計(jì)差不多。過去我們提"原型開發(fā)法",在RUP里我們講短周期迭代,在XP中我們說要周循環(huán),季循環(huán),要增量設(shè)計(jì),這都是為什么呢?就是因?yàn)槲覀兝鲜前l(fā)現(xiàn)設(shè)計(jì)和后來的變化差別太大,要回去改設(shè)計(jì)又總存在各方面的問題(懶惰嫌麻煩、怕出問題有顧慮、有風(fēng)險(xiǎn)不愿擔(dān)責(zé)任,太忙了沒時(shí)間等等)。最早原型開發(fā)法就是不要設(shè)計(jì)了,根據(jù)實(shí)際做出的東西來調(diào)整,RUP是有致命傷的,不敢面對(duì)這個(gè)問題,不痛不癢的說把開發(fā)過程多弄幾設(shè)幾個(gè)里程碑,及時(shí)調(diào)整好了。而XP提出的一點(diǎn)一點(diǎn)設(shè)計(jì),似乎是最靠譜的,把設(shè)計(jì)過程一點(diǎn)一點(diǎn)分解到開發(fā)的過程中,或許一直一來很多的優(yōu)秀的團(tuán)隊(duì)也正是這樣做的。
??? 這一條對(duì)PM來說也是非常有實(shí)用價(jià)值。從負(fù)責(zé)人的角度,要盡可能寬松的制定計(jì)劃,避免“高承諾、低交付”對(duì)團(tuán)隊(duì)帶來的信心、熱情、積極性的負(fù)面影響。一個(gè)弟兄,活干的快了受了表?yè)P(yáng),下次干的可能就更好了;要是活沒干好交不出來,他的信心受了打擊,就不是簡(jiǎn)單談?wù)勗捘苷{(diào)動(dòng)的起來了。
??? 這個(gè)從實(shí)際操作來說,XP講究實(shí)事求是,成員間信息透明,讓大家了解真實(shí)情況,不允許少干不報(bào),也不允許多干少報(bào)。但我理解這是局限在團(tuán)隊(duì)內(nèi)部的,屬于人民內(nèi)部矛盾,對(duì)于自己人,我們當(dāng)然不能欺上瞞下,干活時(shí),等或者是拖,都是不對(duì)的。但是對(duì)外面對(duì)那些只要結(jié)果的客戶,有時(shí)也是需要應(yīng)用一些必要的策略,盡可能爭(zhēng)取到合理的時(shí)間,盡量把客戶的預(yù)期引導(dǎo)到正確的范圍內(nèi)。
??? 可能你覺得很多少時(shí)候這種事情超出了PM的能力范圍,工作量、交互時(shí)間在你接到活時(shí)就已經(jīng)定下來了,只能硬著頭皮上。光是咬牙做當(dāng)然是愚蠢的,這種情況我過去的做法往往是在過的過程中要想辦法逐步降低用戶的預(yù)期,即要設(shè)法降低承諾,強(qiáng)調(diào)強(qiáng)調(diào)困難,方法得當(dāng)大部分情況下客戶還是可以做出一定的讓步的。當(dāng)然同時(shí)一定要提高交付的產(chǎn)品質(zhì)量,保證客戶的滿意度。
?? 對(duì)這個(gè)我可能有些保守,我相信結(jié)對(duì)編程其實(shí)是大家一種在用的一種編程方式,并沒有什么特別神奇的。除了XP理論書籍里的提到的那些弊端,我認(rèn)為結(jié)對(duì)編程的負(fù)面作用其實(shí)還有很多。比如對(duì)新人,養(yǎng)成編寫程序的獨(dú)立思考能力很要緊,不能上來就老結(jié)對(duì),靠別人的啟發(fā)來慢慢搞。因此我認(rèn)為讓大家知道結(jié)對(duì)編程這種方式是可取的,有必要的時(shí)候(比如有些問題自己想不太清楚)找個(gè)合適的人結(jié)個(gè)對(duì),討論討論就可以了。
聲明:本博客中所有文章均為版主原創(chuàng),轉(zhuǎn)載請(qǐng)保留作者信息,并請(qǐng)注明出處。
??? 帶著眾多誘人的新特性,Dojo 0.4 發(fā)布了。抽出時(shí)間下載了一個(gè)體驗(yàn)了一把,結(jié)果用一句話來概況: 驚喜多多!
??? 首先是這一版加入的幾個(gè)新的 Widget: Clock, FilteringTable,ProgressBar。這些widget中比較重要的是 FilteringTable, FilteringTable的加入是用來替換以前的SortableTable,相比SortableTable, 它的新的特性包括:
Multiple Column Sorting (number of columns settable, default is 1)
Sorting in place (non-destructive)
Per-column programmatic filtering
Add and remove rows on the fly
Update field values (with typing) on the fly
No restrictions on sorting on markup
??? 從這個(gè)地址去體驗(yàn)一下: http://archive.dojotoolkit.org/nightly/tests/widget/test_FilteringTable.html,功能非常強(qiáng)大,可以直接從傳過來的JSON對(duì)象中構(gòu)造出列表,動(dòng)態(tài)的過濾數(shù)據(jù),改變各個(gè)字段的值,可惜這個(gè)版本中還不支持分頁(yè),列、行的拖拉的功能,只能是期待下一版了。其他幾個(gè)Widget也都非常的實(shí)用,dojo的官方網(wǎng)站上都有例子,感興趣的可以去找找。
??? 下一個(gè)是讓人感到驚喜是新增的 dojo.charting 和 dojo.gfx 包, dojo.charting 提供了一個(gè)基于Vector實(shí)現(xiàn)了多種圖表類型的charting engine,從demo上來看,非常不錯(cuò)哦! 可以從這個(gè)地址體驗(yàn)一下:
?http://archive.dojotoolkit.org/nightly/tests/charting/test_engine.html
?? 另外一個(gè)好消息是,從昨天dojo官方網(wǎng)站的新聞上看到 Greenplum 和 SitePen(兩個(gè)技術(shù)型的企業(yè)) 宣布把他們的一些技術(shù)捐贈(zèng)給Dojo的 new charting engine。dojo.gfx是一個(gè)二維矢量圖形的API,能自動(dòng)的根據(jù)客戶瀏覽器的類型決定使用SVG或是VML,也很實(shí)用,比如新增加的Clock Widget就是基于這個(gè)包實(shí)現(xiàn)的。這兩個(gè)包的加入讓我們有理由相信不遠(yuǎn)的將來,dojo必然會(huì)撐起網(wǎng)頁(yè)圖表的一片天!
??? 然后是 dojo.a11y 包,a11y 是accessibility的縮寫,主要是加入對(duì)鍵盤按鍵(快捷鍵)的支持。官方網(wǎng)站上說的是在Dojo 0.4中只有一部分widget中已經(jīng)加入了這方面的支持,在0.5中會(huì)加入努力更多。
??? 國(guó)際化支持方面,這個(gè)版本的 dojo.i18n 包做了不少的改動(dòng),加入了對(duì) collecting localized resources 的支持,提供了更多的date and time 的格式,此外對(duì)很多 widget (DatePicker, TimePicker等等) 也做了國(guó)際化的改進(jìn),不過DatePicker,TimePicker依然是丑陋無比??梢钥吹胶蚫ojo 0.3.1比,國(guó)際化的框架并沒有很大的變動(dòng), 這次主要是具體的進(jìn)行一些完善。
??? 還有很多其他的包,像 dojo.lfx,dojo.namespaces,dojo.html等等,在這一版中也都得到了很大的提高,詳細(xì)一點(diǎn)的列表可以查看 http://dojo.jot.com/WikiHome/Release0Point4?。
??? 從0.3.1 到 0.4 幾個(gè)月的時(shí)間里dojo便得到如此大的提高,根據(jù)Dojo網(wǎng)站上的公告,dojo 0.4.1過幾天也就要發(fā)布了,在幾個(gè)月后又要出0.5,按照這效率,想想一年后的dojo,真是讓人抓狂!
摘要: 在Oracle10g開始盛行的今天,9i依然在眾多項(xiàng)目中得到廣泛應(yīng)用, 這次一個(gè)偶然的機(jī)會(huì)需要在Red Hat ES 4上裝Oracle9i, 想想上次裝Oracle還是三年前的事了, 由于ES4不 在 Oracle 9i 的官方支持的linux版本之內(nèi),這次安裝用了近2天時(shí)間才搞定,查資料,找補(bǔ)丁,一遍一遍的重裝,好像回到了當(dāng)年剛參加工作時(shí)的那種狀態(tài),很有感觸,做技術(shù)有些東西總是不會(huì)變。裝的過程中發(fā)現(xiàn)網(wǎng)上對(duì)ES4上裝Oracle 9i的總結(jié)不多,大部分都不是很完整,便整理了這個(gè)文檔,希望對(duì)大家有用。
閱讀全文
??? 這兩天花了點(diǎn)時(shí)間看 Dojo 0.3.1 的新功能, 發(fā)現(xiàn)Dojo果然兌現(xiàn)承諾, 在0.3.1加入了一點(diǎn)國(guó)際化支持的功能。最主要的是改動(dòng)是引進(jìn)了 dojo.locale 屬性和 dojo.i18n 包, 從而于 javascript 實(shí)現(xiàn)了Client端的本地 message bundle 機(jī)制,從現(xiàn)在起,我們可以在客戶端根據(jù)locale裝載JS消息文件了! 完整的示例代碼如下:
<script?type="text/javascript">????????????????????????
????????djConfig?=?{
????????????????isDebug:?true
????????};
</script>
<script?type="text/javascript"?src="../../dojo.js"></script>
<script?type="text/javascript"?src="../_bootstrap.js"></script>
<script?type="text/javascript">
????????dojo.locale?=?"fr";
????????dojo.requireLocalization("g11n.messages","salutations","en");
????????dojo.requireLocalization("g11n.messages","salutations","fr");
????????dojo.requireLocalization("g11n.messages","salutations","zh-cn");
????????dojo.require('dojo.i18n.common');????????
</script>
<script?type="text/javascript">
????????function?init()?{
????????????????var?salutations_default?=?dojo.i18n.getLocalization("g11n.messages",?"salutations");
????????????????dojo.debug("default?language:?"+salutations_default.hello);
????????????????
????????????????var?salutations_zh?=?dojo.i18n.getLocalization("g11n.messages",?"salutations",?"zh-cn");
????????????????dojo.debug("Chinese:?"+salutations_zh.hello);????????????????
????????}
????????dojo.addOnLoad(init);
</script>
?? 首先是 dojo.locale 這個(gè)屬性,這個(gè)屬性是一個(gè)全局,作為用戶默認(rèn)的locale,如果用戶不明確指定,dojo會(huì)根據(jù)瀏覽器的locale對(duì)這個(gè)屬性賦值。和Java不同,目前在dojo中l(wèi)ocale并沒有對(duì)應(yīng)對(duì)象,只是一個(gè)String對(duì)象,典型的格式應(yīng)該是 "zh","zh-cn"。注意后者用的是 "-" ,而不是Java中的 "_"。
? ?
?? 現(xiàn)在來看最讓人心動(dòng)的 message bundle 機(jī)制, 首先分成三步來把message文件組織好:
??????? 1) 要建立一個(gè)集中存放message文件的目錄,我建的是 g11n\messages;
??????? 2) 和在java中一樣,為不同的locale建立存放message文件的文件夾,比如我建的是"en","fr","zh-cn"; 這里要注意文件夾的名稱必須要全部小寫,原因是dojo從文件裝載消息會(huì)把傳入的locale屬性進(jìn)行 toLowerCase() 的處理(暈,不知道作者怎么想的)。
??????? 3) 把翻譯完并用native2ascii轉(zhuǎn)換好的消息文件放入對(duì)應(yīng)的文件夾內(nèi)。和Java不同的是,dojo用 JSON 格式來組織message文件,所以要把property文件轉(zhuǎn)換到JSON格式的js文件, 不過這也很容易: 在文件開始的位置加入一個(gè)"{", 結(jié)尾的地方加入"}", 將所有的 "=" 替換成 ":" , 然后在每一行結(jié)尾處加入一個(gè)"," ,最后把文件改成js結(jié)尾便可以了。一個(gè)典型的JSON格式的文件如下(假設(shè)文件名叫 salutations.js ) :
{
?hello:?"Hello",
?dojo:?"Dojo",
?hello_dojo:?"%{hello},?%{dojo}!",
?file_not_found:"The?file?you?requested,?%{0},?is?not?found."
}
?
?? 把消息文件放好后,便可以在 dojo 中通過 dojo.requireLocalization() 調(diào)用這些文件了,對(duì)應(yīng)的代碼是:
??????
//下載需要的locale的消息文件到客戶端
dojo.requireLocalization("g11n.messages","salutations","en");
dojo.requireLocalization("g11n.messages","salutations","fr");
dojo.requireLocalization("g11n.messages","salutations","zh-cn");
//調(diào)用國(guó)際化包
dojo.require('dojo.i18n.common');??
?
?? 現(xiàn)在就可以調(diào)用指定locale的 message 了!在示例代碼中我舉了兩個(gè)簡(jiǎn)單的例子:
???
//調(diào)用?dojo.locale?指定的locale中對(duì)應(yīng)的消息文件中?hello?那條消息
????var?salutations_default?=?dojo.i18n.getLocalization("g11n.messages",?"salutations");
????dojo.debug("default?language:?"?+?salutations_default.hello);
????//調(diào)用"zh-cn"中?hello?那條消息
????var?salutations_zh?=?dojo.i18n.getLocalization("g11n.messages",?"salutations",?"zh-cn");
????dojo.debug("Chinese:?"+salutations_zh.hello);?
?? 怎么樣,非常簡(jiǎn)單吧?
??? 除了message bundle, dojo 還聲明要支持其他的一些國(guó)際化功能,比如Date,Number,Currency等等,在0.3.1中我只發(fā)現(xiàn)Date有一定的實(shí)現(xiàn),但是基本就是對(duì) Javascript Date 對(duì)象的幾個(gè)locale相關(guān)的方法進(jìn)行了一下封裝,沒有多少實(shí)質(zhì)性的提高,看來dojo在國(guó)際化的支持方面還有很長(zhǎng)的路要走。無論如何0.3.1中提供的message bundle已經(jīng)有了一個(gè)良好的開端,值得期待。
??? 前幾天遇到一個(gè)bug,在一個(gè)填email的文本框,當(dāng)用戶錄入比較長(zhǎng)的一段文本后(比如40位以上),頁(yè)面就死掉了。檢查后發(fā)現(xiàn)校驗(yàn)Email的是下面這樣一段javascript代碼:
? function checkEmail(email)
? {
??????? if (email.length == 0 )
??????????? return true;
???????? var validEmail = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
???????? if (validEmail.test(email))
???????? {
???????????????? return true
????????? }
?????????? return false
??? }
??? checkEmail("123456789012345678901234567890123456789012345abcdefghijkl");
?? 第一反應(yīng)是正則表達(dá)式寫的有問題,'@'前后的 ([\.-]?\w+)* 都可能會(huì)引起效率問題。下面仔細(xì)分析一下:
1. 從輸入的值來看, engine會(huì)首先匹配 \w+, 這是一個(gè)貪婪匹配,可以一直匹配到結(jié)尾;
2. 然后按優(yōu)先級(jí)開始匹配 ([\.-]?\w+)*中的 [\.-]?\w+,這個(gè)時(shí)候前面的 \w+ 為了后面的匹配成功,必須要重現(xiàn)匹配,讓出一點(diǎn)匹配的內(nèi)容,假設(shè)先讓出的是 'l',([\.-]?\w+)*匹配成功;
3. ([\.-]?\w+)* 意味著要盡量去匹配多次,再第二次對(duì) [\.-]?\w+ 匹配,這個(gè)時(shí)候?yàn)榱说诙纹ヅ涞某晒Γ谝淮纹ヅ涞?[\.-]?\w+ 要讓出能滿足第二次 [\.-]?\w+ 的內(nèi)容,也就是它匹配到的'l',這個(gè)時(shí)候,第一次匹配的 [\.-]?\w+ 又不滿足了,\w+ 又得讓出來一個(gè)'k'。
4. 這樣未知匹配次數(shù)的 ([\.-]?\w+)* 就形成了一個(gè)很大的循環(huán),而在正則表達(dá)式中,每次匹配時(shí)被括號(hào)里模式匹配的東西都是要被存起來供以后使用的,大量的中間結(jié)果被緩存,最終導(dǎo)致IE死掉。
?? 所以這是一條典型的因?yàn)檠h(huán)嘗試匹配導(dǎo)致效率低下的正則表達(dá)式, 表達(dá)式中兩個(gè) ([\.-]?\w+)* 都可能導(dǎo)致解釋器的crash,在本例中不需要利用匹配的中間結(jié)果,所以解決的辦法很簡(jiǎn)單,在括號(hào)加入一個(gè)冒號(hào),不保存中間結(jié)果就是了。即將那個(gè)正則表達(dá)式改成如下:
? /^\w+(?:[\.-]?\w+)*@\w+(?:[\.-]?\w+)*(\.\w{2,3})+$/
如果性能還是不能滿足需求,可以考慮把這個(gè)正則表達(dá)式拆成幾個(gè)小的表達(dá)式,分別進(jìn)行驗(yàn)證。
1) SVN配置文件中各個(gè)屬性行前不能有空格
?在Windows平臺(tái)下安裝Subversion之后,使用時(shí)提示svnserve.conf中一些行有問題。打開svnserve.conf一看 "password-db = passwd" 這一行最前面被我無意中加了個(gè)空格,刪掉后SVN便工作正常了。
2) Tomcat 5.5 連接池的古怪錯(cuò)誤
??? 在tomcat 5.5下配置連接池,使用時(shí)總是出錯(cuò): Cannot create JDBC driver of class '' for connect URL 'null'。
??? 一樣的配置以前在5.0下都是可以正常工作的。查了Tomcat的聯(lián)機(jī)文檔也沒有什么發(fā)現(xiàn),多次嘗試最后找到解決辦法:在 $CATALINA_HOME/conf/Catalina/Host Name/ 下建一個(gè)和應(yīng)用同名的xml文件,將原來放在server.xml文件中的該應(yīng)用對(duì)應(yīng)的Context定義放在這個(gè)xml文件中,便不會(huì)有這個(gè)錯(cuò)了。
3) Velocity配置文件中${webapp.root}變量不起作用
??? 在spring中使用velocity作為顯示層,以前一直是用絕對(duì)路徑來指定velocity模板文件的根目錄,這次想直接和應(yīng)用的root路徑掛起來。
??? 在velocity.properties中file.resource.loader.path的注釋中看到有一個(gè)${webapp.root}的描述,便在velocity.properties中設(shè)置 file.resource.loader.path=${webapp.root}\\velocity\\,不起作用。看來velocity自己并不會(huì)設(shè)置類似于${webapp.root}這樣一個(gè)變量,查velocity的Developer's Guide,也沒有找到有類似${webapp.root}的變量,Guide中倒是推薦將模板文件打成jar,然后用ClasspathResourceLoader來找模板文件,開發(fā)階段可不想弄的如此晦澀,還是直接改回用絕對(duì)路徑好了。
??? 幾個(gè)小問題雖然都解決了,但卻不知道為什么,因?yàn)闀r(shí)間的原因我也沒有深究?,F(xiàn)在貼出來,有人知道原因的,還請(qǐng)不吝賜教。
? 用了四五年的Table排版,沒覺得有什么不好,這一段時(shí)間迷上了Dojo,才發(fā)現(xiàn)如今已經(jīng)到了不用DIV不行的年代。還是趕緊跟上潮流,把Table換成DIV吧! 改了幾個(gè)頁(yè)面,發(fā)現(xiàn)比想象的簡(jiǎn)單,更是嘗到了用div的甜頭。share自己一點(diǎn)淺淺的經(jīng)驗(yàn):
1. 先上網(wǎng)搜一下找點(diǎn)前人經(jīng)驗(yàn)。推薦兩篇好文:
? http://www.glish.com/css/???????????????????????? "CSS Layout Techniques: for Fun and Profit"
? http://www.alistapart.com/articles/practicalcss?? "Practical CSS Layout Tips, Tricks, & Techniques"?? ?
2. 隨便找?guī)讉€(gè)用DIV+CSS實(shí)現(xiàn),結(jié)構(gòu)又比較簡(jiǎn)單的網(wǎng)站,研究一下它的頁(yè)面結(jié)構(gòu)和CSS。比如我就是主要看了下面幾個(gè)網(wǎng)站:
????? CSS禪花園????????? http://csszengarden.com/????? ?
????? Eclipse.org??????? http://www.eclipse.org/
????? mozilla.com??????? http://www.mozilla.com/
作為世界上CSS高手比武的擂臺(tái),CSS禪花園的模板實(shí)在多的恐怖,以前都只站在欣賞的角度不覺得,自己研究起來,也就只能是挑了一兩個(gè)看看,再感慨了一番作者真是好創(chuàng)意好美工。有趣的是Eclipse.org的首頁(yè)居然基本用的都是mozilla.com的CSS,對(duì)比著這兩個(gè)網(wǎng)站看更能看出端倪。
3.? 自己上手干吧,讓你的頁(yè)面內(nèi)容和顯示樣式徹底分離,其實(shí)并不難。
GB18030 的正式名稱為“中文國(guó)家標(biāo)準(zhǔn) GB 18030-2000:信息技術(shù) - 信息交換用漢字編碼字符集- 基本集的擴(kuò)充”。它是針對(duì)在中國(guó)出售的所有產(chǎn)品制定的政府強(qiáng)制標(biāo)準(zhǔn)要求,該標(biāo)準(zhǔn)于 2001 年 9 月 1 日生效。這也意味著從理論說,每個(gè)在出售的產(chǎn)品都要支持GB18030字編碼字符集,否則就不讓賣[嘿嘿,您的產(chǎn)品達(dá)標(biāo)了么?]。
有人曾經(jīng)在他的一篇blog[ http://blog.cathayan.org/archive/1/2005-7-4 ]里非常形象的介紹過 GB18030 的歷史,轉(zhuǎn)貼精彩部分如下:
1,GB2312是很老的東西了,早就發(fā)現(xiàn)不夠用了。
2,94年(還是之前)國(guó)家推出了建議性標(biāo)準(zhǔn)gb18000(還是13000我忘了),這個(gè)標(biāo)準(zhǔn)其實(shí)就是utf-8標(biāo)準(zhǔn)(除了名字,完全一樣),同時(shí)也建議微軟公司采納。--(據(jù)說是1993年,GB13000,應(yīng)該是ISO10646)
3,微軟借口說gb18000還不成熟,為了取得中國(guó)市場(chǎng)的壟斷地位,自己搞了一套漢字標(biāo)準(zhǔn),于是它就隨著win95和office之類的流行起來了,國(guó)家看生米已經(jīng)煮成了熟飯,只好把這套標(biāo)準(zhǔn)定為國(guó)標(biāo)GBK標(biāo)準(zhǔn)。--(其實(shí)只是指導(dǎo)性標(biāo)準(zhǔn),并非強(qiáng)制性,GB18030是強(qiáng)制性標(biāo)準(zhǔn))
4,微軟到了99年(前后吧),又說GBK已經(jīng)落伍了,現(xiàn)在流行utf-8標(biāo)準(zhǔn),準(zhǔn)備全盤轉(zhuǎn)換成utf-8,這些把有關(guān)部門惹怒了。NND,當(dāng)年我們推utf-8你說不成熟,自己搞了一套,現(xiàn)在賺得盆滿缽滿了又自己說要推utf-8了,你丫微軟分明就沒把政府放在眼里。
5,于是政府怒了,強(qiáng)制推行g(shù)b18030標(biāo)準(zhǔn)(這個(gè)標(biāo)準(zhǔn)前面兼容GBK,其他碼位兼容utf-8),算是過渡標(biāo)準(zhǔn)吧。要求微軟強(qiáng)制執(zhí)行,否則產(chǎn)品不得在大陸買。于是基本搞死了微軟的WindowsMe,差點(diǎn)搞死了Office2000(據(jù)說發(fā)行前幾個(gè)月,微軟除了改字符編碼就沒干其他什么事情)--(確實(shí),WinMe是我認(rèn)為的最差的Windows版本,而office2k也是前不著村,后不著店,前后兼容性都差)
6,由于以上歷史原因,現(xiàn)在就是GB2312,GBK,GB18030,UTF-8并存了。
7,如果不是萬惡的微軟,我們?cè)缇陀蒙蟄TF-8了。
?? 或許正是因?yàn)槲④浐椭袊?guó)之間為GB18030發(fā)生了這么多的恩恩怨怨和當(dāng)年微軟的倉(cāng)促上陣,直到現(xiàn)在微軟的很多產(chǎn)品對(duì)GB18030支持的依然不是很好。訪問下面的頁(yè)面,了解MS對(duì)GB18030支持情況及下載Windows下的GB18030安裝包:
http://www.microsoft.com/globaldev/DrIntl/columns/015/default.mspx
雖然MS聲明在Windows XP 和 Windows 2000 中通過"add-on"來支持GB18030,但是IE 6.0直接顯示 List Box、Drop Down Menu、Text Area、Text Field中的GB18030字符依然還是有問題,下面的這篇文章有相關(guān)的介紹:
http://www-306.ibm.com/software/globalization/gb18030support/retrieve.jsp
在IBM的這篇名為"Globalize your On Demand Business"的文章里,給出的solution是在要顯示GB18030的元素上加上類似 "STYLE="font-family:'SimSun-18030'"的CSS聲明。在當(dāng)今WEB2.0如火如荼的年代,我們當(dāng)然要把內(nèi)容和顯示分離,在CSS中進(jìn)行配置!當(dāng)然實(shí)際問題要比這個(gè)文檔說的略微復(fù)雜一點(diǎn),有下面幾個(gè)比較明顯的問題:
1) 一般來說,大部分html標(biāo)簽(包括Input)都不要,但<Select> 要必須要在CSS中強(qiáng)制指定"font-family"為"SimSun-18030"。
2) 當(dāng)要為一個(gè)元素指定多個(gè)字體的時(shí)候,要將"SimSun-18030"作為首選,即放在最前面。
3) 對(duì)于大部分標(biāo)簽,當(dāng)font-family設(shè)為 SimSun-18030 時(shí),而font-size 為:8pt,9pt,11px 時(shí),有一部分字符比如 "㊣"和一些標(biāo)點(diǎn) 會(huì)顯示成其他的字符,對(duì) "㊣" 這樣的字符,IE 會(huì)出現(xiàn)亂碼。原因可能是因?yàn)檫@些個(gè)font-size針對(duì)WEB做了優(yōu)化。
小結(jié):GB18030是個(gè)形式大于內(nèi)容的東西,但是如果想要讓你的產(chǎn)品理直氣壯的再中國(guó)銷售,略微花點(diǎn)時(shí)間設(shè)置一下還是有必要的。
?
昨天抽出空來裝了一個(gè)Ruby,體會(huì)體會(huì)這個(gè)最近很多人提起的東西。從下載到安裝,包括裝Cygwin一共也就用了一個(gè)小時(shí)??戳丝此詭У奈臋n,寫了兩個(gè)小腳本試了一下,覺得和perl很點(diǎn)類似,語法很簡(jiǎn)單,上手非???,用起來也沒感到什么特別神奇之處。接著下了久仰大名的Ruby on rails 裝了一下試試,發(fā)現(xiàn)用它建站的確很快,就像當(dāng)年用傻瓜相機(jī)的感覺。
簡(jiǎn)單來說,Ruby 給我的感覺一般,沒有讓我有一見鐘情的感覺。我不是很喜歡Ruby這種很隨意的語法,對(duì)于Ruby on rails這個(gè)輕量級(jí)的構(gòu)架未來內(nèi)能達(dá)到的高度也有所懷疑。Ruby就是Ruby,還是不能和Java來比較,離取代Java更是差十萬八千里,Ruby本身是一個(gè)普通的腳本語言,和Java差別太大,Ruby無非是在各有千秋的眾多編程語言里又加了一種。Ruby on Rails 的思路是比較前衛(wèi)的,不過主要就是個(gè)思路,別人很容易就借鑒了,沒準(zhǔn)用不了多久java on rails,dotnet on rails就會(huì)出來。不知道Ruby on rails在事務(wù)、安全方面是怎么處理的,運(yùn)行起來效率會(huì)怎樣,反正覺得Ruby on Rails好像是用來做中小型網(wǎng)站的。網(wǎng)上好像Ruby的fans很多,其實(shí)回頭看看,每種流行一點(diǎn)的腳本語言的Fans都很多。
我認(rèn)為Ruby的語法、Ruby on Rails的特點(diǎn)注定了它只能給一些想快速建網(wǎng)站的人使用,是很難得到大公司青睞從而在商業(yè)領(lǐng)域獲得更大空間的。對(duì)于目前新流行起來的幾個(gè)腳本語言,我覺得groovy的定位還是很不錯(cuò)的,傍著Java這個(gè)巨人,將來沒準(zhǔn)能吃香的喝辣的。雖然不是特別看好Ruby,以后有時(shí)間還是準(zhǔn)備系統(tǒng)的看一下ruby的語法和試一試ruby on rails的應(yīng)用開發(fā),應(yīng)該能從里面找到很多可以借鑒的東西。
剛才無意中發(fā)現(xiàn)自己很久以前寫給同事看的東西,干脆貼出來。
- 安裝環(huán)境
Wiki的功能比較簡(jiǎn)單,因此互聯(lián)網(wǎng)上Wiki的實(shí)現(xiàn)非常非常的多,有各種各樣的實(shí)現(xiàn),基于asp、java、php、Python、perl等等,大家可以根據(jù)情況自己挑一個(gè)。從這方面看,Wiki映證了一個(gè)道理,簡(jiǎn)單的就是最美的,好像有一大筐做工精致的藝術(shù)品擺在你面前讓你挑,真是人生快事。至于俺么,當(dāng)然是選擇基于Java的了!有人做好了給你用,爽哦。
我的安裝環(huán)境:Linux + Tomcat-5.0.19 + JSPWiki 2.0.52 + jdk1.4 。
- 開始安裝的準(zhǔn)備工作
下載 JDK, Tomcat 并安裝,這里就不說了,呵呵。
從 http://www.jspwiki.org/ 下載JSPWiki, 當(dāng)前的穩(wěn)定版本是2.0.52。當(dāng)然這個(gè)網(wǎng)站本身也是用Wiki做的,去下載時(shí)你就已經(jīng)認(rèn)識(shí)到Wiki是什么東東了。下載下來的是一個(gè)壓縮文件 jspwiki-2.0.52-bin.zip ,解壓后進(jìn)入解壓的文件夾,可以看到JSPWiki.war、JSPWiki-samplepages.zip兩個(gè)文件,前者就是JSPWiki的程序了,JSPWiki-samplepages.zip里是其官方給出的一些例子頁(yè)面,很有價(jià)值哦。
- 安裝
將JSPWiki.war解壓到一個(gè)文件夾,假設(shè)叫wiki,后放到 Tomcat 的Webapps文件夾下,進(jìn)入 wiki/WEB-INF/ , 編輯 jspwiki.properties ,進(jìn)行相關(guān)的設(shè)置,幾個(gè)重要的參數(shù):
a) jspwiki.applicationName = your app name -------- 你這個(gè)Wiki網(wǎng)站的名稱
b) jspwiki.pageProvider = VersioningFileProvider -------- Wiki對(duì)頁(yè)面的管理方式,有三種: RCSFileProvider, FileSystemProvider, VersioningFileProvider(推薦使用).
c) jspwiki.fileSystemProvider.pageDir = /home/wiki -------- 網(wǎng)站內(nèi)容存放地點(diǎn)
d) jspwiki.basicAttachmentProvider.storageDir = /home/wiki/attach -------- 網(wǎng)站用戶上傳的附件的存放地點(diǎn)
e) jspwiki.encoding = UTF-8 -------- 設(shè)置頁(yè)面的編碼格式
f) jspwiki.rss.channelLanguage = zh-cn -------- 設(shè)置rss語言格式,如果你不需要rss功能的話可以不設(shè)置
g) jspwiki.baseURL= ——wiki的基本URL,如果你不需要rss功能的話可以不設(shè)置
h)jspwiki.translatorReader.allowHTML = false -------- 是否允許wiki里面支持html,網(wǎng)站對(duì)外開放時(shí)最好不要設(shè),因?yàn)閣iki是協(xié)同編輯的,如果有人惡意使用js的話,就慘了,呵呵。
- 設(shè)置字符集
安裝后要使有中文問題,注意看上一項(xiàng)4中的 e ,f 兩項(xiàng)是不是都設(shè)置對(duì)了.
- 運(yùn)行Wiki,添加頁(yè)面
jspWiki內(nèi)置了一些用于布局的版面page,包括Home、Index、LeftFooter、LeftMenu、LegalAndPrivacyNotice、MenuBar、RightFooter、RightMenuBar、Website、Contacts、ErrorMessage等等,只要稍加編輯就可以攢一個(gè)挺專業(yè)的網(wǎng)站。激活它們的方法是瀏覽器中輸入: http://localhost:8080/wiki/Wiki.jsp?page=pageName.
- 后期處理
設(shè)置tomcat為自啟動(dòng): 在startup.sh 中設(shè)置 JAVA_HOME , CLASSPATH , PATH 等環(huán)境變量,在 /etc/rc.d/rc.local 中添加啟動(dòng)腳本。
熟悉wiki之后可以進(jìn)一步學(xué)習(xí)FitNesse之類的 Wiki 的較高級(jí)的應(yīng)用。
上周末按一個(gè)朋友的要求,寫一個(gè)整合Tomcat-5.5.4與apache-2.0.49的文檔。很久沒用Apache了,在家用了一兩個(gè)小時(shí)才在自己的XP下配成功,簡(jiǎn)單整理了一個(gè)文檔貼出來,與需要的人共享。我開始是在 apache 的conf 文件夾里建了一個(gè)mod_jk2.conf個(gè)文件,用JkSet config.file ***語句指到TOMCAT_HOME\conf\workers2.properties, 無論如何都不成功,最后就直接把workers2.properties拷到apache 的 conf 文件夾里就OK了。具體步驟如下:
1、假設(shè)Apache2安裝在 C:\Program Files\Apache Group\Apache2, 上Apache網(wǎng)站下載jakarta-tomcat-connectors-jk2.0.4-win32-apache2.0.49.zip , 解壓后將modules\mod_jk2.so拷貝到C:\Program Files\Apache Group\Apache2\modules里面。
2、 在C:\Program Files\Apache Group\Apache2\httpd.conf中設(shè)置Dynamic Shared Object (DSO) Support的那塊區(qū)域里增加一行:
LoadModule jk2_module modules/mod_jk2.so
3、修改 Tomcat-5.5.4 HOME\conf\ 下的配置文件, 編輯jk2.properties,修改handler.list的值,要注意端口channelSocket.port設(shè)置的值,默認(rèn)是8019,改成8009, 這樣改各個(gè)配置文件的改動(dòng)量最小。
# Set the desired handler list
# handler.list=apr,request,channelJni
handler.list=channelSocket,request
#,
# Override the default port for the socketChannel
channelSocket.port=8009
4、將 Tomcat-5.5.4 HOME \conf\ 下的workers2.properties 拷貝到 C:\Program Files\Apache Group\Apache2\conf 中,然后修改workers2.properties 內(nèi)容:
[logger.apache2]
level=INFO
[shm]
file=C:\\apache\\Apache2\\logs\\shm.file
size=1048576
[channel.socket:localhost:8009]
port=8009
host=localhost
[ajp13:localhost:8009]
channel=channel.socket:localhost:8009
[uri:/*]
worker=ajp13:localhost:8009
要進(jìn)一步設(shè)置的,修改[uri:/*],比如改為[uri:/*.jsp]。當(dāng)然這樣記住要先將Apache的默認(rèn)目錄指到tomcat下的對(duì)應(yīng)的應(yīng)用. 此外[uri:/*] 這部分可以設(shè)置多個(gè)。
5、重新啟動(dòng)apache、tomcat, 訪問apache的地址http://localhost/和tomcat的地址http://localhost:****/ ,如果看到一樣的東西,應(yīng)該就可以了。
6、配Apache的默認(rèn)目錄或虛擬主機(jī),指到要用Apache來顯示的目錄里面去;網(wǎng)上很多,Apache本身的文檔說的也比較清楚,就不詳細(xì)說了。
7、如果是 Linux 平臺(tái)的話,Apache 必須要在編譯的時(shí)候加上選項(xiàng),使其能動(dòng)態(tài)的加載DSO模塊,大概的步驟就是下載Apache源文件 ,然后依次執(zhí)行:
#cd /usr/local/src/ ( /usr/local/src/ 就是保存安裝源文件的文件夾 )
#tar -xzvf httpd-2.0.49.tar.gz
#cd httpd-2.0.49
#./configure --prefix=/usr/local/apache2 --enable-so (-enable-so 這個(gè)選項(xiàng)最重要,一定要加上 )
#make
#make install
后來的步驟和windows下應(yīng)該是一樣的(那個(gè)so文件應(yīng)該也可以在linux用),linux下面我這次沒有試,不過思路和步驟應(yīng)該差不多就是這樣,俺以前配過。