星空の城

一个程序员的记事本
posts - 10, comments - 22, trackbacks - 0, articles - 0

2006年2月17日

快速开发模型 Struts ==> Spring ==> Hibernate ==> iBATIS ==> WebWork2

posted @ 2006-07-05 15:07 7夜 阅读(320) | 评论 (0)编辑 收藏

         我是个C/C++、Java程式员,不喜欢程序员的称号。在很多网上认识的人,也是刚刚接触软件开发,可能连语法都没有搞清楚就说自己是什么“软件工程师”。说自己是“程序员”我觉得还可以接受,要说“软件工程师”,我想是不是差太远了,此“工程师”非彼“工程师”。做技术的讲究的是真才实学,而不是炫耀和吹嘘。

         程序员和软件工程师的标准是什么,我想很多计算机系出来的学生应该很清楚,去考程序员和软件工程师的资格证书,参考材料的前几页有。但具我所知,有这些证书的垃圾最多,基本的代码规范和语言基础都不知道/模糊。有能力的人大多不愿意去考,浪费时间在这上面可以多研究点技术问题了。去考证的也没有错,毕竟这是老板给你高工资、升职、加薪的理由。但一点技术也没有就是拿它来混饭吃,也许你能永远蒙住老板,但是和你一起共事的同事能有多少看得起你的,拿你当朋友的?

posted @ 2006-02-19 23:45 7夜 阅读(198) | 评论 (0)编辑 收藏

『昴』は、歌詞の雄大なイメージと歌いやすいメロディのため、国内のみならず、東アジア各国の人びとにも愛唱されました。

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

posted @ 2006-02-19 22:32 7夜 阅读(411) | 评论 (0)编辑 收藏

电影《致命恋人》中的歌曲《Unbreak My Heart》,由Dianne Warren 谱写,美国著名灵魂音乐歌手Toni Braxton 用她低回磁性的嗓音,亦幽亦明地表现出歌曲强烈而深厚的意境,是97年Billboard排行榜冠軍,并稳坐14周冠军宝座,Toni Braxton 因演唱此曲夺得了第二座格莱美奖


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夜 阅读(225) | 评论 (0)编辑 收藏

编程开发 

整理的这篇文章大部分内容是我在Red Hat Linux 8.0和9.0上验证过的,希望对你有帮助。 服务器的安装略过不提,因为安装了开发工具的话默认就已经有了CVS。就算没有,更新软件包就可以搞定,除非你一定要安装最新版本。 1. 首先创建用于CVS的组和用户:

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

OK,用户已经建立好了,cvsroot就是我们做CVS操作使用的。

2. 修改配置文件:

      #more 
      /etc/services | grep cvspserver

看看是否有:

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

这2行。系统自带了CVS时,这2行也已经有了,只需要确认一下。如果没有,请自己加上去。然后必须创建启动脚本:

      #vi 
      /etc/xinet.d/cvspserver

内容如下:

      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可执行文件路径,默认安装就是/usr/bin/cvs。server_args指定源代码库路径及认证方式等,例子中把源代码存放在cvsroot的主目录中,也可以另外指定路径,但必须注意权限设置,pserver是密码认证方式,这种方式的安全性要差一些,但操作起来比较简单。请注意每行等号左右都有一个空格,否则无法启动服务。

3. 初始化CVS

切换到cvsroot用户,然后进行初始化:

      #cvs 
      -d /home/cvsroot init

这个路径应该与cvspserver文件中指定的路径相同,初始化后会在此路径下面创建CVSROOT目录,存放用于CVS管理的一些文件。此时重新启动xinetd服务,CVS服务器应该能够启动了。:

      #service 
      xinetd restart

当然,重新启动计算机也可以。确认是否启动:

      #netstat 
      -l | grep cvspserver

如果能看到:

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

说明已经正常启动,没有的话请重新检查配置过程是否有错误或者遗漏。最后还必须检查防火墙的设置,把2401端口打开。

4. 用户管理

CVS默认使用系统用户登录,为了系统安全性的考虑也可以使用独立的用户管理。CVS用户名和密码保存在CVSROOT目录下的passwd文件中,格式为:

      用户名::密码::系统用户

也就是说,它把CVS用户映射到系统用户,这样我们就可以通过系统用户的权限设置来分配给用户不同的权限,而不需要让用户知道系统用户名和密码。 passwd文件默认并不存在,我们必须自己创建。文件中的密码字段使用MD5加密,不幸的是CVS没有提供添加用户名的命令,所以我们借用Apache的命令来完成这项工作:

      #htpasswd 
      passwd username

这个命令为username指定密码,并保存在passwd中,文件不存在时会自动创建。htpasswd命令不是为CVS而设,因此总有一些遗憾,它不能自动添加映射到的用户名,不过没关系,我们设置好密码后,自己把这部分加上。我的做法是映射到cvsroot用户,如果需要映射其他的用户,请注意给相应的目录设置好权限,否则CVS用户可能无法访问源代码仓库。要彻底防止使用系统帐号登陆,可以编辑CVSROOT目录下的config文件,把:

      #SystemAuth=no

这一行前面的#去掉,CVS就不会验证系统用户了,否则当用户名不在passwd文件中时,CVS会进行系统用户的验证。此外还必须配置读写权限,使用CVSROOT目录下的readers和writers文件进行这个工作。这2个文件默认也是没有的,没关系,自己创建就可以了。readers文件记录拥有只读权限的用户名,每行一个用户;writers文件记录拥有读写权限的用户名,也是每行一个用户。注意, readers文件比writers优先,也就是说出现在readers中的用户将会是只读的,不管writers文件中是否存在该用户。配置完毕,先测试一下:

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

这里假设用户名是username,本机登陆。出现密码提示,输入正确的密码后,登陆成功。如果提示访问被拒绝,请检查用户权限、目录权限以及防火墙设置。建议设置环境变量CVSROOT:

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

以后就不需要输入-d参数了,但-d参数会覆盖这个环境变量的设置。

5. 源代码仓库的备份和移动

基本上,CVS的源代码仓库没有什么特别之处,完全可以用文件备份的方式进行备份。需要注意的只是,应该确认备份的过程中没有用户提交修改,具体的做法可以是停止CVS服务器或者使用锁等等。恢复时只需要把这些文件按原来的目录结构存放好,因为CVS的每一个模块都是单独的一个目录,与其他模块和目录没有任何瓜葛,相当方便。甚至只需要在仓库中删除一个目录或者文件,便可以删除该模块的一些内容,不过并不建议这么做,使用CVS的删除功能将会有一个历史记录,而对仓库的直接删除不留任何痕迹,这对项目管理是不利的。移动仓库与备份相似,只需要把该模块的目录移动到新的路径,便可以使用了。如果不幸在备份之后有过一些修改并且执行了提交,当服务器出现问题需要恢复源代码仓库时,开发者提交新的修改就会出现版本不一致的错误。此时只需要把 CVS相关的目录和文件删除,即可把新的修改提交。

6. 更进一步的管理

CVSROOT目录下还有很多其他功能,其中最重要的就是modules文件。这个文件定义了源代码库的模块,下面是一个例子:

      Linux    
      Linux
      Kernel   
      Linux/kernel

这个文件的内容按行排列,每一行定义一个模块,首先是模块名,然后是模块路径,这是相对于CVS根目录的路径。它定义了两个模块,第一个是Linux模块,它位于Linux目录中,第二个是Kernel模块,这是Linux模块的子模块。 modules文件并非必须的,它的作用相当于一个索引,部分CVS客户端软件通过它可以快速找到相应的模块,比如WinCVS。

7. 协同开发的问题

默认方式下,CVS允许多个用户编辑同一个文件,这对一个协作良好的团队来说不会有什么问题,因为多个开发者同时修改同一个文件的同一部分是不正常的,这在项目管理中就应该避免,出现这种情况说明项目组内部没有统一意见。而多个开发者修改文件的不同部分,CVS可以很好的管理。如果觉得这种方式难以控制,CVS也提供了解决办法,可以使用cvs admin -l进行锁定,这样一个开发者正在做修改时CVS就不会允许其他用户checkout。这里顺便说明一下文件格式的问题,对于文本格式,CVS可以进行历史记录比较、版本合并等工作,而二进制文件不支持这个操作,比如word文档、图片等就应该以二进制方式提交。对于二进制方式,由于无法进行合并,在无法保证只有一个用户修改文件的情况下,建议使用加锁方式进行修改。必须注意的是,修改完毕记得解锁。从1.6版本开始,CVS引入了监视的概念,这个功能可以让用户随时了解当前谁在修改文件,并且CVS可以自动发送邮件给每一个监视的用户告知最新的更新。

8. 建立多个源代码仓库

如果需要管理多个开发组,而这些开发组之间不能互相访问,可以有2个办法::

a.共用一个端口,需要修改cvspserver文件,给server_args指定多个源代码路径,即多个—allow-root参数。由于xinetd的 server_args长度有限制,可以在cvspserver文件中把服务器的设置重定向到另外一个文件,如:

      server 
      = /home/cvsroot/cvs.run

然后创建/home/cvsroot/cvs.run文件,该文件必须可执行,内容格式为:

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

注意此时源代码仓库不再是/home/cvsroot,进行初始化的时候要分别对这两个仓库路径进行初始化,而不再对/home/cvsroot路径进行初始化。

b. 采用不同的端口提供服务

重复第2步和第3步,为不同的源代码仓库创建不同服务名的启动脚本,并为这些服务名指定不同的端口,初始化时也必须分别进行初始化。

posted @ 2006-02-17 15:40 7夜 阅读(272) | 评论 (0)编辑 收藏