星空の城

          一個(gè)程序員的記事本
          posts - 10, comments - 22, trackbacks - 0, articles - 0

          2006年2月17日

          快速開(kāi)發(fā)模型 Struts?==> Spring?==> Hibernate?==> iBATIS ==> WebWork2

          posted @ 2006-07-05 15:07 7夜 閱讀(331) | 評(píng)論 (0)編輯 收藏

                   我是個(gè)C/C++、Java程式員,不喜歡程序員的稱號(hào)。在很多網(wǎng)上認(rèn)識(shí)的人,也是剛剛接觸軟件開(kāi)發(fā),可能連語(yǔ)法都沒(méi)有搞清楚就說(shuō)自己是什么“軟件工程師”。說(shuō)自己是“程序員”我覺(jué)得還可以接受,要說(shuō)“軟件工程師”,我想是不是差太遠(yuǎn)了,此“工程師”非彼“工程師”。做技術(shù)的講究的是真才實(shí)學(xué),而不是炫耀和吹噓。

                   程序員和軟件工程師的標(biāo)準(zhǔn)是什么,我想很多計(jì)算機(jī)系出來(lái)的學(xué)生應(yīng)該很清楚,去考程序員和軟件工程師的資格證書(shū),參考材料的前幾頁(yè)有。但具我所知,有這些證書(shū)的垃圾最多,基本的代碼規(guī)范和語(yǔ)言基礎(chǔ)都不知道/模糊。有能力的人大多不愿意去考,浪費(fèi)時(shí)間在這上面可以多研究點(diǎn)技術(shù)問(wèn)題了。去考證的也沒(méi)有錯(cuò),畢竟這是老板給你高工資、升職、加薪的理由。但一點(diǎn)技術(shù)也沒(méi)有就是拿它來(lái)混飯吃,也許你能永遠(yuǎn)蒙住老板,但是和你一起共事的同事能有多少看得起你的,拿你當(dāng)朋友的?

          posted @ 2006-02-19 23:45 7夜 閱讀(209) | 評(píng)論 (0)編輯 收藏

          『昴』は、歌詞の雄大なイメージと歌いやすいメロディのため、國(guó)內(nèi)のみならず、東アジア各國(guó)の人びとにも愛(ài)唱されました。

          1 目を閉じて 何も見(jiàn)えず
            哀しくて 目を開(kāi)ければ
            荒野(こうや)に 向かう道より
            ほかに 見(jiàn)えるものはなし
            嗚呼(ああ) 砕け散る 運(yùn)命(さだめ)の星たちよ
            せめて密(ひそ)やかに この身を照らせよ
            我は行く 蒼白き頬のままで
            我は行く さらば昴よ
           
          2 呼吸(いき)をすれば 胸の中
            凩(こがらし)は吠(な)き続ける
            されど 我が胸は熱く
            夢(mèng)を 追い続けるなり
            嗚呼 さんざめく 名も無(wú)き星たちよ
            せめて鮮やかに その身を終われよ
            我も行く 心の命ずるままに
            我も行く さらば昴よ
           
            Mmmm……(ハミング)
           
            嗚呼 いつの日か 誰(shuí)かがこの道を
            嗚呼 いつの日か 誰(shuí)かがこの道を
            我は行く 蒼白き頬のままで
            我は行く さらば昴よ
            我は行く さらば昴よ

          posted @ 2006-02-19 22:32 7夜 閱讀(420) | 評(píng)論 (0)編輯 收藏

          電影《致命戀人》中的歌曲《Unbreak My Heart》,由Dianne Warren 譜寫(xiě),美國(guó)著名靈魂音樂(lè)歌手Toni Braxton 用她低回磁性的嗓音,亦幽亦明地表現(xiàn)出歌曲強(qiáng)烈而深厚的意境,是97年Billboard排行榜冠軍,并穩(wěn)坐14周冠軍寶座,Toni Braxton 因演唱此曲奪得了第二座格萊美獎(jiǎng)


          Un-break my heart My heart -Toni Braxton

          Don't leave me in all this pain
          Don't leave me out in the rain
          Come back and bring back my smile
          Come and take these tears away
          I need your arms to hold me now
          The nights are so unkind

          Bring back those nights when I held you beside me
          Un-break my heart
          Say you'll love me again
          Undo this hurt you caused
          When you walked out the door
          And walked outta my life
          Un-cry these tears
          I cried so many nights
          Un-break my heart
          My heart

          Take back that sad word good-bye
          Bring back the joy to my life
          Don't leave me here with these tears
          Come and kiss this pain away
          I can't forget the day you left
          Time is so unkind

          And life is so cruel without you here beside me

          Don't leave me in all this pain
          Don't leave me out in the rain

          Bring back the nights when I held you beside me

          Un-break my heart
          Say you'll love me again
          Undo this hurt you caused
          When you walked out the door
          And walked outta my life
          Un-cry these tears
          I cried so many, many nights
          Un-break my

          Un-break my heart
          Oh baby
          Come back and say you love me
          Un-break my heart
          Sweet darlin'
          Without you I just can't go on
          Can't go on
          Can't go on  

          posted @ 2006-02-19 16:29 7夜 閱讀(236) | 評(píng)論 (0)編輯 收藏

          編程開(kāi)發(fā) 

          整理的這篇文章大部分內(nèi)容是我在Red Hat Linux 8.0和9.0上驗(yàn)證過(guò)的,希望對(duì)你有幫助。 服務(wù)器的安裝略過(guò)不提,因?yàn)榘惭b了開(kāi)發(fā)工具的話默認(rèn)就已經(jīng)有了CVS。就算沒(méi)有,更新軟件包就可以搞定,除非你一定要安裝最新版本。 1. 首先創(chuàng)建用于CVS的組和用戶:

                #groupadd 
                cvs
                #useradd 
                cvsroot -g cvs
                #passwd 
                cvsroot
          

          OK,用戶已經(jīng)建立好了,cvsroot就是我們做CVS操作使用的。

          2. 修改配置文件:

                #more 
                /etc/services | grep cvspserver
          

          看看是否有:

                cvspserver 
                2401/tcp #CVS client/server operations
                cvspserver 
                2401/udp #CVS client/server operations
          

          這2行。系統(tǒng)自帶了CVS時(shí),這2行也已經(jīng)有了,只需要確認(rèn)一下。如果沒(méi)有,請(qǐng)自己加上去。然后必須創(chuàng)建啟動(dòng)腳本:

                #vi 
                /etc/xinet.d/cvspserver
          

          內(nèi)容如下:

                service 
                cvspserver
                {
                disable 
                = no
                flags 
                = REUSE
                socket_type 
                = stream
                wait 
                = no
                user 
                = root
                server 
                = /usr/bin/cvs
                server_args 
                = -f --allow-root=/home/cvsroot pserver
                log_on_success 
                += USERID
                log_on_failure 
                += USERID
                }
          

          其中server指定CVS可執(zhí)行文件路徑,默認(rèn)安裝就是/usr/bin/cvs。server_args指定源代碼庫(kù)路徑及認(rèn)證方式等,例子中把源代碼存放在cvsroot的主目錄中,也可以另外指定路徑,但必須注意權(quán)限設(shè)置,pserver是密碼認(rèn)證方式,這種方式的安全性要差一些,但操作起來(lái)比較簡(jiǎn)單。請(qǐng)注意每行等號(hào)左右都有一個(gè)空格,否則無(wú)法啟動(dòng)服務(wù)。

          3. 初始化CVS

          切換到cvsroot用戶,然后進(jìn)行初始化:

                #cvs 
                -d /home/cvsroot init
          

          這個(gè)路徑應(yīng)該與cvspserver文件中指定的路徑相同,初始化后會(huì)在此路徑下面創(chuàng)建CVSROOT目錄,存放用于CVS管理的一些文件。此時(shí)重新啟動(dòng)xinetd服務(wù),CVS服務(wù)器應(yīng)該能夠啟動(dòng)了。:

                #service 
                xinetd restart
          

          當(dāng)然,重新啟動(dòng)計(jì)算機(jī)也可以。確認(rèn)是否啟動(dòng):

                #netstat 
                -l | grep cvspserver
          

          如果能看到:

                tcp 
                0 0 *::cvspserver *::* LISTEN
          

          說(shuō)明已經(jīng)正常啟動(dòng),沒(méi)有的話請(qǐng)重新檢查配置過(guò)程是否有錯(cuò)誤或者遺漏。最后還必須檢查防火墻的設(shè)置,把2401端口打開(kāi)。

          4. 用戶管理

          CVS默認(rèn)使用系統(tǒng)用戶登錄,為了系統(tǒng)安全性的考慮也可以使用獨(dú)立的用戶管理。CVS用戶名和密碼保存在CVSROOT目錄下的passwd文件中,格式為:

                用戶名::密碼::系統(tǒng)用戶
          

          也就是說(shuō),它把CVS用戶映射到系統(tǒng)用戶,這樣我們就可以通過(guò)系統(tǒng)用戶的權(quán)限設(shè)置來(lái)分配給用戶不同的權(quán)限,而不需要讓用戶知道系統(tǒng)用戶名和密碼。 passwd文件默認(rèn)并不存在,我們必須自己創(chuàng)建。文件中的密碼字段使用MD5加密,不幸的是CVS沒(méi)有提供添加用戶名的命令,所以我們借用Apache的命令來(lái)完成這項(xiàng)工作:

                #htpasswd 
                passwd username
          
          

          這個(gè)命令為username指定密碼,并保存在passwd中,文件不存在時(shí)會(huì)自動(dòng)創(chuàng)建。htpasswd命令不是為CVS而設(shè),因此總有一些遺憾,它不能自動(dòng)添加映射到的用戶名,不過(guò)沒(méi)關(guān)系,我們?cè)O(shè)置好密碼后,自己把這部分加上。我的做法是映射到cvsroot用戶,如果需要映射其他的用戶,請(qǐng)注意給相應(yīng)的目錄設(shè)置好權(quán)限,否則CVS用戶可能無(wú)法訪問(wèn)源代碼倉(cāng)庫(kù)。要徹底防止使用系統(tǒng)帳號(hào)登陸,可以編輯CVSROOT目錄下的config文件,把:

                #SystemAuth=no
          

          這一行前面的#去掉,CVS就不會(huì)驗(yàn)證系統(tǒng)用戶了,否則當(dāng)用戶名不在passwd文件中時(shí),CVS會(huì)進(jìn)行系統(tǒng)用戶的驗(yàn)證。此外還必須配置讀寫(xiě)權(quán)限,使用CVSROOT目錄下的readers和writers文件進(jìn)行這個(gè)工作。這2個(gè)文件默認(rèn)也是沒(méi)有的,沒(méi)關(guān)系,自己創(chuàng)建就可以了。readers文件記錄擁有只讀權(quán)限的用戶名,每行一個(gè)用戶;writers文件記錄擁有讀寫(xiě)權(quán)限的用戶名,也是每行一個(gè)用戶。注意, readers文件比writers優(yōu)先,也就是說(shuō)出現(xiàn)在readers中的用戶將會(huì)是只讀的,不管writers文件中是否存在該用戶。配置完畢,先測(cè)試一下:

                #cvs 
                -d “::pserver::username@127.0.0.1::/home/cvsroot” login
          

          這里假設(shè)用戶名是username,本機(jī)登陸。出現(xiàn)密碼提示,輸入正確的密碼后,登陸成功。如果提示訪問(wèn)被拒絕,請(qǐng)檢查用戶權(quán)限、目錄權(quán)限以及防火墻設(shè)置。建議設(shè)置環(huán)境變量CVSROOT:

                #export 
                CVSROOT=::pserver::username@127.0.0.1::/home/cvsroot
          

          以后就不需要輸入-d參數(shù)了,但-d參數(shù)會(huì)覆蓋這個(gè)環(huán)境變量的設(shè)置。

          5. 源代碼倉(cāng)庫(kù)的備份和移動(dòng)

          基本上,CVS的源代碼倉(cāng)庫(kù)沒(méi)有什么特別之處,完全可以用文件備份的方式進(jìn)行備份。需要注意的只是,應(yīng)該確認(rèn)備份的過(guò)程中沒(méi)有用戶提交修改,具體的做法可以是停止CVS服務(wù)器或者使用鎖等等?;謴?fù)時(shí)只需要把這些文件按原來(lái)的目錄結(jié)構(gòu)存放好,因?yàn)镃VS的每一個(gè)模塊都是單獨(dú)的一個(gè)目錄,與其他模塊和目錄沒(méi)有任何瓜葛,相當(dāng)方便。甚至只需要在倉(cāng)庫(kù)中刪除一個(gè)目錄或者文件,便可以刪除該模塊的一些內(nèi)容,不過(guò)并不建議這么做,使用CVS的刪除功能將會(huì)有一個(gè)歷史記錄,而對(duì)倉(cāng)庫(kù)的直接刪除不留任何痕跡,這對(duì)項(xiàng)目管理是不利的。移動(dòng)倉(cāng)庫(kù)與備份相似,只需要把該模塊的目錄移動(dòng)到新的路徑,便可以使用了。如果不幸在備份之后有過(guò)一些修改并且執(zhí)行了提交,當(dāng)服務(wù)器出現(xiàn)問(wèn)題需要恢復(fù)源代碼倉(cāng)庫(kù)時(shí),開(kāi)發(fā)者提交新的修改就會(huì)出現(xiàn)版本不一致的錯(cuò)誤。此時(shí)只需要把 CVS相關(guān)的目錄和文件刪除,即可把新的修改提交。

          6. 更進(jìn)一步的管理

          CVSROOT目錄下還有很多其他功能,其中最重要的就是modules文件。這個(gè)文件定義了源代碼庫(kù)的模塊,下面是一個(gè)例子:

                Linux    
                Linux
                Kernel   
                Linux/kernel
          

          這個(gè)文件的內(nèi)容按行排列,每一行定義一個(gè)模塊,首先是模塊名,然后是模塊路徑,這是相對(duì)于CVS根目錄的路徑。它定義了兩個(gè)模塊,第一個(gè)是Linux模塊,它位于Linux目錄中,第二個(gè)是Kernel模塊,這是Linux模塊的子模塊。 modules文件并非必須的,它的作用相當(dāng)于一個(gè)索引,部分CVS客戶端軟件通過(guò)它可以快速找到相應(yīng)的模塊,比如WinCVS。

          7. 協(xié)同開(kāi)發(fā)的問(wèn)題

          默認(rèn)方式下,CVS允許多個(gè)用戶編輯同一個(gè)文件,這對(duì)一個(gè)協(xié)作良好的團(tuán)隊(duì)來(lái)說(shuō)不會(huì)有什么問(wèn)題,因?yàn)槎鄠€(gè)開(kāi)發(fā)者同時(shí)修改同一個(gè)文件的同一部分是不正常的,這在項(xiàng)目管理中就應(yīng)該避免,出現(xiàn)這種情況說(shuō)明項(xiàng)目組內(nèi)部沒(méi)有統(tǒng)一意見(jiàn)。而多個(gè)開(kāi)發(fā)者修改文件的不同部分,CVS可以很好的管理。如果覺(jué)得這種方式難以控制,CVS也提供了解決辦法,可以使用cvs admin -l進(jìn)行鎖定,這樣一個(gè)開(kāi)發(fā)者正在做修改時(shí)CVS就不會(huì)允許其他用戶checkout。這里順便說(shuō)明一下文件格式的問(wèn)題,對(duì)于文本格式,CVS可以進(jìn)行歷史記錄比較、版本合并等工作,而二進(jìn)制文件不支持這個(gè)操作,比如word文檔、圖片等就應(yīng)該以二進(jìn)制方式提交。對(duì)于二進(jìn)制方式,由于無(wú)法進(jìn)行合并,在無(wú)法保證只有一個(gè)用戶修改文件的情況下,建議使用加鎖方式進(jìn)行修改。必須注意的是,修改完畢記得解鎖。從1.6版本開(kāi)始,CVS引入了監(jiān)視的概念,這個(gè)功能可以讓用戶隨時(shí)了解當(dāng)前誰(shuí)在修改文件,并且CVS可以自動(dòng)發(fā)送郵件給每一個(gè)監(jiān)視的用戶告知最新的更新。

          8. 建立多個(gè)源代碼倉(cāng)庫(kù)

          如果需要管理多個(gè)開(kāi)發(fā)組,而這些開(kāi)發(fā)組之間不能互相訪問(wèn),可以有2個(gè)辦法::

          a.共用一個(gè)端口,需要修改cvspserver文件,給server_args指定多個(gè)源代碼路徑,即多個(gè)—allow-root參數(shù)。由于xinetd的 server_args長(zhǎng)度有限制,可以在cvspserver文件中把服務(wù)器的設(shè)置重定向到另外一個(gè)文件,如:

                server 
                = /home/cvsroot/cvs.run
          

          然后創(chuàng)建/home/cvsroot/cvs.run文件,該文件必須可執(zhí)行,內(nèi)容格式為:

                #!/bin/bash
                /usr/bin/cvs 
                -f 
                --allow-root=/home/cvsroot/src1 
                --allow-root=/home/cvsroot/src2 
                pserver
          

          注意此時(shí)源代碼倉(cāng)庫(kù)不再是/home/cvsroot,進(jìn)行初始化的時(shí)候要分別對(duì)這兩個(gè)倉(cāng)庫(kù)路徑進(jìn)行初始化,而不再對(duì)/home/cvsroot路徑進(jìn)行初始化。

          b. 采用不同的端口提供服務(wù)

          重復(fù)第2步和第3步,為不同的源代碼倉(cāng)庫(kù)創(chuàng)建不同服務(wù)名的啟動(dòng)腳本,并為這些服務(wù)名指定不同的端口,初始化時(shí)也必須分別進(jìn)行初始化。

          posted @ 2006-02-17 15:40 7夜 閱讀(285) | 評(píng)論 (0)編輯 收藏

          主站蜘蛛池模板: 洛宁县| 陇南市| 西乌| 晋宁县| 遂溪县| 宁德市| 湟中县| 莲花县| 高州市| 大同市| 布拖县| 鸡泽县| 呼图壁县| 响水县| 日喀则市| 达日县| 麦盖提县| 江华| 唐海县| 张家港市| 安福县| 金坛市| 涿鹿县| 西和县| 永登县| 龙门县| 扎赉特旗| 大城县| 潞西市| 乐业县| 青川县| 肇东市| 永川市| 康保县| 黎平县| 苗栗县| 杭锦后旗| 巩义市| 台江县| 读书| 新巴尔虎左旗|