收到的最NB的手机短信广告。
最近收到这样一条短信广告,看了之后心里直发凉。
不知道是谁搞笑还是?????
引用: 本集团长期出售枪枝弹药,迷魂药,窃听器,黑车,台湾版伪钞,放高利贷 另有私家侦探,职业杀手及代办各种证件。 请与xxxxxxxxxx联系。 |
« 2005年02月 | 首页 | 2005年04月 »
最近收到这样一条短信广告,看了之后心里直发凉。
不知道是谁搞笑还是?????
引用: 本集团长期出售枪枝弹药,迷魂药,窃听器,黑车,台湾版伪钞,放高利贷 另有私家侦探,职业杀手及代办各种证件。 请与xxxxxxxxxx联系。 |
两个工作都泡了汤,今天早上的心情却有些不应该的好。
骑单车路过校园门口的时候看着吊车伸着颀长的脖子,
把口中的松树轻轻的放在坑里。
突然想起以前家里的咪咪总是用嘴衔着它的小宝宝的,呵呵。
昨天晚上又和强哥吃了晚饭,第四次见面。
下面我要干什么,看书吗?
日子好长啊!
还是开心就好。
纯真年代,很特别的感觉。
以前在中央电视台只看到了它的结尾。
有点遗憾,用Amule拖了十余天才有幸把它看完整。
礼教的束缚,真爱的渴望,纯真背后的睿智。
Newland Archer一个执着中又有责任感的男人。
Ellen Olenska有着不幸婚姻敢于追求自由的女性。
May Welland清纯点点又大智若愚的挽救自己婚姻的女人。
无论是窗子反射的耀眼的日光,还是波光粼粼的海面上缓行略过灯塔的帆船。
Ellen也只是在Newland的幻觉中回过了头。
在Ellen的眼中永远是那个错过的背影和不合时宜的出现在窗前的老男人。
感情的唯美与生活的现实勾勒出了艺术作品中永恒的爱。
道具和服饰的考究把感觉待到了完全不同的另一个国度的另一个时代。
很少看见某个电影把detail处理成如此状况。
听小刚的这首歌的时候以前没有细听歌词,
只是感觉挺流畅的。
今天慢慢听下来,
原来如此的温馨,温馨的海洋。
男人海洋
歌手:周传雄 专辑:男人海洋
周传雄--男人海洋
当我抱着你的时候
窗外风起黄叶飘落
以为是浪漫
原来只是有心在飞走
不懂情人心里想的
爱就瞎了也迷路了
想摸索什么
摸到了你手心的沉默
最痴情的男人像海洋
爱在风暴里逞强
苦还是风平浪静的模样
卷起了依恋那么长
挥手目送你启航
到你觉得我给不了的天堂
温柔的男人像海洋
爱在关键时隐藏
而心酸汇集都敞开胸膛
做远远看护的月光
不做阻挡你的墙
我的爱是折下自己的翅膀
送给你飞翔
不懂情人心里想的
爱就瞎了也迷路了
想摸索什么
摸到了你手心的沉默
最痴情的男人像海洋
爱在风暴里逞强
苦还是风平浪静的模样
卷起了依恋那么长
挥手目送你启航
到你觉得我给不了的天堂
温柔的男人像海洋
爱在关键时隐藏
而心酸汇集都敞开胸膛
做远远看护的月光
不做阻挡你的墙
我的爱是折下自己的翅膀
送给你飞翔
最痴情的男人像海洋
爱在风暴里逞强
苦还是风平浪静的模样
卷起了依恋那么长
挥手目送你启航
到你觉得我给不了的天堂
温柔的男人像海洋
爱在关键时隐藏
而心酸汇集都敞开胸膛
做远远看护的月光
不做阻挡你的墙
我的爱是折下自己的翅膀
送给你飞翔
前些天同事王姐给我介绍了一个看电视的软件叫coolstreaming.
在这里有的下。
http://nj.onlinedown.net/soft/37077.htm
它和bt用了同样的概念,所以比较火的电视台在黄金时段看起来特别流畅。
但没发现过这个软件的linux版本,有点遗憾。
前些时候用cedega模拟游戏来着,后来为了能正常看office文档,又装了crossover office模拟器。
顺便也把这个coolstreaming给装上了,没想到它工作的还不错。
下面是我这在用totem看channel v
今天去一个公司谈工作的事情。
他们在21世纪大厦有写字间。
要倒两辆公车,218--1元,222--1元。
最后一段路没找到小公汽,打车过去的来回用了25元。
回来的时候没有直接回单位,先到三好街逛了一圈。
早晨因为6:40就出来了所以没吃饭,所以饿的不行了。
到大京九快餐吃了肉段+肉丝+拌百叶+拌大约是空心菜+米饭+可乐,用去21元。
到大松买了两本书,一本是unix shell的,一本是给姐姐买的coreldraw的。
用去84元。
回来的时候坐车222---1元,330--2元。
晚上回去还要交100元煤气费。
晚饭还没有吃,我要养不起我自己了。
因为前几天还了所有的私人外债后,我的卡里比我的脸蛋要干净好多的。
看来生活是如此的现实。
哎,看看可怜的工资条,什么时候能多出几个美丽的零来啊。
水木上不去了,传说被封到校内了。
我都上了四五年了,呵呵,有点酸酸的感觉。
母校的bbs也关了,平时去的地方不多。
少了两个。
变的更孤寂了一些。
也许这个世界本来就是寂寥多于喧哗。
一首老歌说寂寞让我如此美丽。
所以就自恋地在这里不停的写自己的log啦。
今天八哥打电话给我说他马上就坐上去黑龙江的火车了,
去那里做实验了,
祝福他顺风顺利早点回来和八嫂团聚。
任浩打电话过来说他一会儿去我那里,我在等他。
这几天有给强哥发过几条短信,说笑间还满开心的。
终究只见过他三面,一个在看《东周列国》的青年才俊。
昨天晚上还给网上认识的小威打了个电话,
学习很上进的一个孩子。
刘勇调侃的说让我放了那个孩子,
因为那个孩子和他是老乡,
都是来自美丽的草原。
看来我的生活真的要有变化了。
明天去谈一个地方,
这个周末还会有另外一个消息的到来。
不管是福是祸,都是我走的路。
有的时候问问自己该去哪里?
并不能给自己一个满意的答案。
但毕竟我还是要走向某个地方,
那里有阳光,那么的温暖灿烂。
就象儿时我最喜爱的“咪咪”,
她总是咪起眼睛去轻嗅阳光的轻柔。
但大学学兽医的时候,
门诊的老师总结说,
养猫的人多少都有些神经质。
多可怕的一个帽子啊。
注:
八哥:大学寝室的亲同学。
强哥:以前的log里有介绍:-)
任浩:大学同学的亲弟弟。
刘勇:大学同学,他和宝凯都在今年考上中国农大的研究生,祝贺他们。
小威:一个在南方苦苦求学的草原精灵。
咪咪:十几岁时养的一只一生都忘不掉的花猫(雌性),在几近中年时神秘失踪。
今天周一上班来,到目前为止出奇的清闲,没有出去安装电话,也没有去维护网络。
收拾了一下办公桌,虽然还没擦的特别的干净。
连鼠标垫都给洗了。
然后回来泡了一杯绿茶,
又给长年的干眼点了点珍视明,不是很好用。
听说润洁不错的。
总是忘记了买。
下面要剪剪指甲,太长了,敲键盘好不舒服啊。
今天去给三哥的外甥女补课啦。
人家还真信得着咱,都有四年不学英语了。
总有点骗人的感觉。
一个不错的学生和一个惭愧的老师。
看着她努力的样子,
回忆起自己十八九岁时候和他一起同窗时的样子,
美丽的细节就象透过老屋破窗的光柱中游弋的尘粒。
飘摇无力中闪耀着颓废的梦回。
对于游戏我不怎么在行,以前听邹给我讲过diablo的美丽而神奇的故事。
为了能在我的win和linux里都能小玩一下。
在网上找到了cedega这个基于wine的win32模拟器。
我直接在Amule(当然在win下可以用Emule)里搜索得到
Cedega-4.2-1.i386.(osloskop.net).tgz
当然如果你用其他的dist的linux,你也可以找到如rpm deb的包的。
文件7M多一点。
然后在root下用
#installpkg Cedega-4.2-1.i386.(osloskop.net).tgz
安装好。
为了在两个系统下都可以玩,把从btchina找来的diablo II 放到了一个Fat分区。
在fstab里如下。
/dev/hda6 /mnt/e vfat defaults,iocharset=cp936,umask=000 1 0
因为我要用普通用户玩,所以用umask 000 mount 我win下的e盘,使得普通用户可写。
还有一个问题就是登陆邹的游戏服务器。
不象winex,在cedega里我没有找到注册表导入工具。
所以索性下了一个win下的工具,叫BNGatewayEditor.exe,直接用cedega BNGatewayEditor.exe 运行。
加入自定义的服务器,如下图。
然后就可以进入暗黑的目录。
直接用cedega D2Loader.exe -w运行了。
感觉速度还可以,呵呵。
如下。
当然你要是全屏幕玩就不要加 -w了。
然后写了一个启动的shell脚本,再给它一个漂亮的图标放在桌面上。
想玩的时候双击就可以了。
借机会再秀一下偶的桌面吧。
顺便说一下,要让cedega支持中文需要这么改一下,当然你得已经安装了simsun字体了。
编辑~.transgaming/config文件。
在[FontAlias]节更改如下。
"Times New Roman"="simsun"
"MS Serif"="Times New Roman"
;;
;; Sans Serif Fonts
"Arial"="simsun"
"Helv"="simsun"
"MS Sans Serif"="simsun"
"System"="simsun"
然后cedega就可以显示中文了,虽然不漂亮。
当然这步做不做不会影响Diablo的中文显示的,Diablo好象自己有点阵字体的吧,我是瞎猜的。
还有cedega就是winex的商业版本,
它除了diablo,其实cs starcraft warcraft也都是可以玩的,官方网站上说支持的还有很多的哟。
当然这个东西不是百分百稳定,如果出了问题。
可以在终端里把所有wine和wineserver的进程杀掉。
重新进入就可以了。
免责声明:本文涉及到商业软件,个人安装全因感兴趣和测试其可用性,本人会在较短时间内删除其在硬盘中的拷贝。
昨天下午二哥走了,我只送他到218车站。
一种似曾相识的酸酸的感觉。
不知道哥哥现在在干什么,
二哥过来看我是我这个春天的第一个快乐。
晚上七哥和大哥过来了,我请他们小吃了一顿饭。
毕业不到一年,大家都有了些变化。
不知道明年的这个时候我会变成什么样。
反正应该是从又老又丑的男人,变成更老更丑的吧。
二哥和他女朋友出去散步了,
我自己跑回办公室看了前几天没有看完的Crazy/Beautiful.
细腻的情感,出身不同带来的诸多方面的conflicts.
正直善良优秀的西班牙裔男生,
重返正途的不羁女孩,
无奈而深沉的父爱。
满不错。
http://lib.verycd.com/2005/03/03/0000040942.html
昨天晚上二哥过来了。
好久不见,没白想。
晚上我们吃了点饭,
本来要和宝凯一起吃的,
但在快到学府的时候宝凯的电话响了,
他的学生出了点事情,
他急着回去了。
吃完饭我和二哥到他女朋友寝室呆了小会儿。
然后去我那里住了,白天他出去办事,我在上班。
不知道他在干什么呵。
今天中午刘勇打电话说明天也会回来了。
半边天不仅仅是半边天,世界因为你们而美丽精彩。
祝福妈妈节日快乐,祝福姐姐节日快乐,你们为我付出太多。
也祝福天下所有的女性节日快乐。
作为男生,对你们所有的付出敬礼。
女人是水做的,女人是花,那么女人就是水中花。
凡世中的夺目红莲。
妇女节到来的前夕,
单位给每人发了点money,
因为历来我们所的男同志少,
而且我们福利不怎么好,
所以历史遗留的这个节日的时候男同志和女同志享受同样的待遇。
呵呵,不知道怎么高兴才好呢?
哭笑不得!!!
原文地址:
http://www.pgsqldb.org/cvstutorials.html
CVS 简单教程
v2.1
版权声明:本文档遵循 FDL 版权发布,有关 FDL 的详细信息,请参考:
http://www.fsf.org/copyleft/fdl.html
何伟平
CVS 是 Concurrent Version System(并行版本系统)的缩写,用于版本管理.如果大家曾经参与过多人协作开发的项目,大家肯定有这样的痛苦经历:由于多个人同时修改同一个文件,自己辛辛苦苦修改的程序被别人彻底删除了.另外,如果你的软件/程序已经发布了三个版本,而这时候用户需要你修改第二个版本的东西,也许你会因为只保留了最新版本而痛哭流涕.还有就是你对程序做了一些修改,但是修改很少,你只想给远方的同事发一个两个版本之间的差别文件,这样可以免于邮箱不够大,网速太慢之类的问题.为了解决类似这样的问题,以及诸如生成补丁文件,历史版本修改等,一帮黑客(褒义)在原先 Unix 体系里很成熟的 SCCS 和 RCS 的基础上,开发了 CVS.(SCCS:Source Code Control System,RCS:Revision Control System)
CVS 的基本工作思路是这样的:在一台服务器上建立一个仓库,仓库里可以存放许多不同项目的源程序.由仓库管理员统一管理这些源程序.这样,就好象只有一个人在修改文件一样.避免了冲突.每个用户在使用仓库之前,首先要把仓库里的项目文件下载到本地.用户做的任何修改首先都是在本地进行,然后用 cvs 命令进行提交,由 cvs 仓库管理员统一修改.这样就可以做到跟踪文件变化,冲突控制等等.
由于 CVS 是典型的 C/S 结构的软件,因此它也分成服务器端和客户端两部分.不过大多数 CVS 软件都把它们合二为一了.
结合文档和一些网上资源,我写一点非常简单的“速成”的教材.希望对大家有用.
下面是我的步骤和做法:
前提要求:
* root 权限;
* CVS软件,请找到相关的rpm,tgz,deb 等包装上,或者到
http://www.cvshome.org/CVS/Dev/code
下载原程序编译安装,这里我不准备介绍它的安装,请参考CVS自身的文档安装.我使用Slackware的tgz包,安装的命令是
#installpkg cvs*.tgz
其他包请参考对应包管理工具的命令.
* 一定的系统资源,要有一定内存(32M就能工作得很好),要一定的磁盘空间,看你的项目的大小和多少而定.
架设CVS服务器:
1. 建立 CVSROOT 目录,因为这里涉及到用户对CVSROOT里的文件读写的权限问题,所以比较简单的方法是建立一个组,然后再建立一个属于该组的帐户,而且以后有读写权限的用户都要属于该组.假设我们建一个组叫cvs,用户名是cvsroot.建组和用户的命令如下
#groupadd cvs
#adduser cvsroot
生成的用户家目录在/home/cvsroot(根据自己的系统调整)
2. 用 cvsroot 用户登陆,修改 /home/cvsroot (CVSROOT)的权限,赋与同组人有读写的权限:
$chmod 771 . (或者770应该也可以)
注意:这一部分工作是按照文档说明做的,是否一定需要这样没有试验,我会在做试验后在以后版本的教程说得仔细一点.如果您有这方面的经验请提供给我,谢谢.
3. 建立CVS仓库,(仍然是 cvsroot 用户),用下面命令:
$cvs -d /home/cvsroot init
4. 以root身份登陆,修改 /etc/inetd.conf(使用 xinetd 的系统没有此文件)和 /etc/services,
如果用的是 inetd 的系统,在 /etc/inetd.conf 里加入:
cvsserver stream tcp nowait root /usr/bin/cvs cvs -f --allow-root=/home/cvsroot pserver
说明:上面的行是单独一整行,/usr/bin/cvs 应该是你的cvs版本的命令路径,请根据自己的系统调整./home/cvsroot 是你建立的CVSROOT的路径,也请根据上面建立目录的部分的内容做调整.
如果是使用 xinetd 的系统,需要在 /etc/xinetd.d/ 目录下创建文件 cvspserver(此名字可以自己定义),内容如下:
# default: on
# description: The cvs server sessions;
service cvsserver
{
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/cvsroot pserver
log_on_failure += USERID
only_from = 192.168.0.0/24
}
其中only_from是用来限制访问的,可以根据实际情况不要或者修改。修改该文件权限:
# chmod 644 cvspserver
在/etc/services里加入:
cvsserver 2401/tcp
说明:cvsserver 是任意的名称,但是不能和已有的服务重名,也要和上面修改 /etc/inetd.conf 那行的第一项一致.这里我用的是 CVS 的口令认证方式,CVS 还有其他认证方式,我没有做试验,如果您有经验,请补充,谢谢.
5. 添加可以使用 CVS 服务的用户到 cvs 组:
以 root 身份修改 /etc/group,把需要使用 CVS 的用户名加到 cvs 组里,比如我想让用户 laser 和gumpwu 能够使用 CVS 服务,那么修改以后的 /etc/group 应该有下面这样一行:
cvs:x:105:laser,gumpwu
在你的系统上GID可能不是105,没有关系.主要是要把laser和gumpwu用逗号分隔开写在最后一个冒号后面.当然,象RedHat等分发版有类似linuxconf这样的工具的话,用工具做这件事会更简单些.
6. 重起inetd使修改生效:
#killall -HUP inetd
如果使用的是 xinetd 的系统:
# /etc/rc.d/init.d/xined restart
这样服务器就设置完成了.我们接着搞客户端.
设置客户端
如果是 Linux(或者其他 *nix),客户端和服务器端的软件是一样的,如果是Win,MAC等平台,请到
http://www.loria.fr/cgi-bin/molli/wilma.cgi/rel
找相应的客户端软件,这里我先说一下在 Linux(*nix)里怎么做:
1. 设置环境变量CVSROOT:
$export CVSROOT=:pserver:laser@the_server_name:/home/cvsroot
注意:这里的pserver是访问方式,我在上面设置的是口令认证,所以这里是pserver,如果你的CVS服务器设置成别的访问模式,那么需要相应修改.laser是可以使用 CVS服务器的用户名,这里可以根据你的设置修改,我在这个版本设置的是直接使用系统用户的口令文件,也就是说laser必须是CVS服务器上的合法用户,这里当然有安全问题,CVS可以设置成为拥有自己的用户,我将在以后的版本里面增加这些内容,或者您也可以提供一些补充,或者直接读CVS的文档. the_server_name是CVS服务器的名称或者IP地址,根据你的情况填写,/home/cvsroot是你的CVS服务器的CVSROOT目录,根据你的CVS服务器设置做修改或者询问管理员.你可以把这行放到你的shell的profile里(.bash_profile,.profile 等)这样就不用每次敲一长串命令了.
2. 登陆CVS服务器:
$ cvs login,这时候 cvs 会问你口令,请把你在 CVS 服务器上的口令敲进去,这里是 laser 在 CVS服务器上的系统用户的口令:
Passwd:xxxxxxxx
成功登陆后将在你的家目录建立一个 .cvspass 文件,以后就不用输入口令了.
好,客户端设置完成,简单吧.
管理 cvs 服务器
服务器可以用了,现在大家最关心的就是如何管理服务器,比如,我想让一些人有读和/或写 CVS 仓库的权限,但是不想给它系统权限怎么办呢?
不难,在 cvs 管理员用户(在我这里是 cvsroot 用户)的家目录里有一个 CVSROOT 目录,这个目录里有三个配置文件,passwd, readers, writers,我们可以通过设置这三个文件来配置 CVS 服务器,下面分别介绍这几个文件的作用:
passwd:cvs 用户的用户列表文件,它的格式很象 shadow 文件:
{ cvs 用户名 }:[加密的口令]:[等效系统用户名]
如果你希望一个用户只是 cvs 用户,而不是系统用户,那么你就要设置这个文件,刚刚安装完之后这个文件可能不存在,你需要以 cvs 管理员用户手工创建,当然要按照上面格式,第二个字段是该用户的加密口令,就是用 crypt (3) 加密的,你可以自己写一个程序来做加密,也可以用我介绍的偷懒的方法:先创建一个系统用户,名字和 cvs 用户一样,口令就是准备给它的 cvs 用户口令,创建完之后从 /etc/shadow 把该用户第二个字段拷贝过来,然后再把这个用户删除.这个方法对付数量少的用户比较方便,人一多就不合适了,而且还有冲突条件(race condition)的安全隐患,还要 root 权限,实在不怎么样.不过权益之计而已.写一个小程序并不难,可以到 linuxforum 的编程版搜索一下,有个朋友已经写了一个贴在上面了.
第三个字段就是等效系统用户名,实际上就是赋与一个 cvs 用户一个等效的系统用户的权限,看下面的例子你就明白它的功能了.
readers:有 cvs 读权限的用户列表文件.就是一个一维列表.在这个文件中的用户对 cvs只有读权限.
writers:有 cvs 写权限的用户的列表文件.和 readers 一样,是一个一维列表.在这个文件中的用户对 cvs 有写权限.
上面三个文件在缺省安装的时候可能都不存在,需要我们自己创建,好吧,现在还是让我们用一个例子来教学吧.假设我们有下面几个用户需要使用 cvs:
laser, gumpwu, henry, betty, anonymous.
其中 laser 和 gumpwu 是系统用户,而 henry, betty, anonymous 我们都不想给系统用户权限,并且 betty 和 anonymous 都是只读用户,而且 anonymous 更是连口令都没有.那么好,我们先做一些准备工作,先创建一个 cvspub 用户,这个用户的责任是代表所有非系统用户的 cvs 用户读写 cvs 仓库.
#adduser
...
然后编辑 /etc/group,令 cvspub 用户在 cvs 组里,同时把其它有系统用户权限的用户加到 cvs 组里.(见上文)
然后编辑 cvs 管理员家目录里 CVSROOT/passwd 文件,加入下面几行:
laser:$xxefajfka;faffa33:cvspub
gumpwu:$ajfaal;323r0ofeeanv:cvspub
henry:$fajkdpaieje:cvspub
betty:fjkal;ffjieinfn/:cvspub
anonymous::cvspub
注意:上面的第二个字段(分隔符为 :)是密文口令,你要用程序或者用我的土办法生成.
编辑 readers 文件,加入下面几行:
anonymous
betty
编辑 writer 文件,加入下面几行:
laser
gumpwu
henry
这样就 ok 了,你再用几个用户分别登陆测试,就会发现一切都 ok 了.这里面的原理和说明我想就不多说了,其实很简单,和系统管理用户的概念是一样的.
现在服务器和客户端都设置好了,那么怎么用呢,我在这里写一个最简单的(估计也是最常用的)命令介绍:
首先,建立一个新的CVS项目,一般我们都已经有一些项目文件了,这样我们可以用下面步骤生成一个新的CVS项目:
1. 进入到你的已有项目的目录,比如叫 cvstest:
$cd cvstest
2. 运行命令:
$cvs import -m "this is a cvstest project" cvstest v_0_0_1 start
说明:import 是cvs的命令之一,表示向cvs仓库输入项目文件.
-m参数后面的字串是描述文本,随便写些有意义的东西,如果不加 -m 参
数,那么cvs会自动运行一个编辑器(一般是vi,但是可以通过修改环境变量
EDITOR来改成你喜欢用的编辑器.)让你输入信息,
cvstest 是项目名称(实际上是仓库名,在CVS服务器上会存储在以这个名字
命名的仓库里.)
v_0_0_1是这个分支的总标记.没啥用(或曰不常用.)
start 是每次 import 标识文件的输入层次的标记,没啥用.
这样我们就建立了一个CVS仓库了,然后,我们可以把这个测试项目的文件删除.试验一下如何从仓库获取文件.这里我假设上面的所有客户端工作你都已经做过了.
运行下面的命令:
$cvs checkout cvstest
从仓库中检索出cvstest项目的源文件.
如果你已经做过一次checkout了,那么不需要重新checkout,只需要进入cvstest项目的目录,更新一把就行了:
$cd cvstest
$cvs update
一下即可.又或者你不想直接更新,只是想看看有没有更新的东西,那么:
$cvs status
这时后会打印出一长串状态报告(你可能需要用类似less这样的命令分页显示,或者定向到一个输出文件里慢慢看.),对项目中的每个文件有一份状态报告,类似这样:
===================================================================
File: foo.c Status: Up-to-date
Working revision: 1.1.1.1 'Some Date'
Repository revision: 1.2 /home/cvsroot/cvstest/foo.c,v
Sticky Tag: (none)
Sticky Date: (none)
Sticky Options: (none)
这里最重要的就是 Status 栏,这里总共可能有四种状态:
Up-to-date:表明你要到的文件是最新的.
Locally Modified:表明你曾经修改过该文件,但还没有提交,你的版本比仓库里的新.
Needing Patch:表明有个哥们已经修改过该文件并且已经提交了!你的版本比仓库里的旧.
Needs Merge:表明你曾经修改过该文件,但是偏偏有个不识相的也修改了这个文件,而且还提交给仓库了!
如果你只是想保持软件的同步的话(象我),那么上面的东西就足够用了.可是如果多人协作开发项目的话,可就不是了这么简单了.当你参加项目,维护文件时,就需要更多命令,比如说你我都是某 nasdaq 项目的开发人员:
1,你对某个文件做了修改,比如说改了ceo.c,加了一行程序:printf("where can I find VC to cheat!");
改完之后你要把修改提交给仓库,用命令:
$cvs commit -m "add a complain" ceo.c
或者就是:
$cvs commit -m "worry about money"
让cvs帮你检查哪个文件需要提交.
2,当我开始干活的时候,可能我先:
$cvs status
一把,这时候我会看到:
==================================================================
File: ceo.c Status: Needing Patch
Working revision: 1.1.1.1 'Some Date'
Repository revision: 1.2 /home/cvsroot/nastaq/ceo.c,v
Sticky Tag: (none)
Sticky Date: (none)
Sticky Options: (none)
于是我知道有人改了ceo.c,于是我就:
$cvs update ceo.c
或者干脆:
$cvs update
把ceo.c这个文件更新为最新版本,然后再干活.然后提交.
如果这天你修改了coo.c,加了一行 puts("how about another kind of bragging?");
并且提交了,但是这时候我已经 $cvs status 过了,就是说我不知道你的修改.
而我加了一行printf("You must shamelessly and seems knowingness to act as a coo");
并且傻乎乎地提交:
$cvs commit coo.c
这时候,CVS会告诉我
cvs commit: Examing .
cvs server: Up-to-date check failed for 'coo.c'
cvs [server aborted]: correct above error first!
于是我知道有个狗屎在我修改文件的当口做了提交,于是我
$cvs update
这时cvs会报告:
RCS file: /home/cvsroot/nasdaq/coo.c,v
retrieving revision 1.1.1.1
retrieving revision 1.2
Merging differences between 1.1.1.1 and 1.2 into coo.c
rcsmerge: warning: conflicts during merge
cvs update: conflicts found in coo.c
C coo.c
告诉你coo.c有版本冲突,于是我编辑coo.c,这时一般文件里看起来象这样:
...
printf("You must shamelessly and seems knowingness to act as a coo");
<<<<<<< foo.c
=======
...
puts("how about another kind of bragging?");
>>>>>>> 1.2
...
于是我把上面改成:
printf("You must shamelessly and seems knowingness to act as a coo");
puts("how about another kind of bragging?");
然后
$cvs commit -m "merged" coo.c
于是下回你再更新的时候就有新的补钉要打...如此往复,直到完成所有修改.
不过这里有一些要注意的地方就是删除程序,如果你删掉一行对你可能没有用的程序
puts("to be honest"); 而我不想删除(因为我有用),而我不知情地直接:
$cvs update
了,那么我的这行程序也完蛋了,所以这里我们要注意所有开发人员的协调,千万不要乱删东西,大不了用
#if 0
#endif
宏定义对括起来.实在要删东西,那最好先标记一个版本:
$cvs tag v_0_0_1
然后你可以发布并删除你自己的工作目录里这个版本的文件(注意:不是删除仓库里的.):
$cvs release -d nasdaq
然后你再生成一个新分支:
$cvs rtag -b -r v_0_0_1 v_0_0_1_1 nasdaq
然后再建立v_0_0_1_1的分支
$cvs checkout -r v_0_0_1_1 nasdaq
编辑并修改这个分支的文件,这样的做法比较好.
不过要注意的是,新标记和新分支的建立最好由项目的管理人员负责,否则每个人都做一个分支,那么仓库就太乱了.因此,比较的开发人员之间的直接沟通是不能忽略的.一般来说,在互联网上的标准模式是有一个管理员(可能自己并不写程序),有一个邮递列表,大家都在邮递列表上交流看法和做各种决议.当形成决议之后,管理员做一个新版本的标记.以此循环.
还有一些命令,比如要增加一个文件 garbage_china_concept_stocks_list:
$cvs add garbage_china_concept_stocks_list
然后还要:
$cvs commit garbage_china_concert_stocks_list
看起来有点象数据库里的事务?的确是这样.CVS维护着一个本地的参考文件(在CVS/Entries里),这样提交的时候就可以一次地把所有改变放到服务器端,这样也更安全.同样,如果想删除文件 bankrupted_web_site:
$rm bankrupted_web_site
$cvs remove bankrupted_web_site
$cvs commit bankrupted_web_site
3,一些小技巧:
$Header$ 标记:把这个标记放在文件的任何地方都会被 cvs 替换成最后修改的 cvs 用户名,该文件当前版本号,最后修改时间,该文件的 cvs 仓库路径,看起来象下面这个样子:
// $Header: /home/cvsroot/simhost/simhost.cpp,v 1.2 2001/04/20 08:26:10 jqliu Exp $
一般我们把它放在开头,这样对程序员修改文件非常便利,很多时候你只要看一眼开头就知道文件是否最新.
$Id$标记:把这个标记放在文件的任何地方都会被 cvs 替换成最后修改的 cvs 用户名,该文件当前版本号,最后修改时间,该文件的 cvs 仓库路径,看起来象下面这个样子:
$Id: simhost.cpp,v 1.3 2001/04/24 02:27:36 simhost Exp $
好了,上面所有的东西,估计就是我们用cvs时80%情况下用的命令和内容,包括文件的更新,提交,冲突的解决,分支的派生,增删文件等.实际上cvs的功能之强大,远远超出我在这里描述的内容,我这个"速成"也就管不了太多了,希望随着时间的推移,我们能够更加有效地使用CVS.也希望大家能够不断补充这篇文章,最后能够成为手册,而不仅仅是速成.当然,还要更多地参考别的文档.
参考资料:
http://www.loria.fr/cgi-bin/molli/wilma.cgi/doc.865331095.html
http://www.loria.fr/~molli/cvs/doc/cvs_toc.html
刚才从街里回来,
在公共汽车路过一个小区的拐角处的时候看到两个比较大的配电箱。
在一个箱子上赫然的写着“禁止随地小便,小心有电”,
看到这里不自觉的从下身到上身打了一个冷颤。
想想这个世界也真是幽默。
不知道是巧合还是真的有以身试法的家伙,
呵呵,防患于未然吧。
林立的楼宇,娇贵的花草,沈阳的初春异样的冷,冷的没有了别样的感觉。
林立的是斑驳的楼宇,娇贵的是放在温室里的花草。
一辆除了铃儿不想哪里都响的二手单车把我传送于农大与科院之间。
两眼要看的东西很多,路边漂漂的人,轮下狡猾的冰雪,还有红绿灯傲人的眼神。
却好久都没有看见夕阳了,总是不知不觉的就天黑了。
因为每天早上都起来熬粥,所以能在兼职做我厨房的阳台透过冰花看到旭日。
虽然天天都迎接却从来没送送这个老哥,也挺说不过去的。
谁让他常来常往,不过就混个脸熟罢了。
今天我这个兽医接到收狗的电话,挺欣慰的,但自己还是学的太少,学习真的很重要。
要是不管朝阳还是夕阳映红的都是我的笑脸,那改多美啊!
明天还要试试兼职,不知道可行否,如果能让我开心,明天晚上谁愿意和我一起看夕阳。
给他个面子,看他一眼也没什么损失不是。
看来blog的增长不再是小打小闹了。
当初google买下blogger就让人感觉到了什么。
现在微软也来了,可能已经不是新闻了,但我自己还是昨天刚刚见到的。
http://spaces.msn.com
可以像在sharepoint里一样用鼠标拖拽来定制web界面,呵呵。
感觉不错,但只是速度不是那么的理想。
真不知道自己生下来的时候是个什么样子,那个年代也没有家里也没有相机,听妈妈说我是在家里出生的,一是家里条件不好,二来我是超生,呵呵。。。
乡下的孩子的童年总是有点简单,并不记得有什么特别的东西,唯一清明的就是母亲把我和姐姐拉扯大的艰辛。
家里人总对我有着无比的期望和信任,却从不给我压力,只读过四年书的母亲对我有着近乎完美的理解和尊重。可自己还是辜负她太多。
说实话做为男生我真的欠缺刚强的一面,无论做人还是读书做事我总是不那么的决断,有太多的不确定性,并没有所谓的远大的理想,虽然身高体重还都说的过去,但我真的不知道自己能肩负多少。
慢慢的走出来,一步步的走出来,从不知名的小镇走出来,以为自己真的就要有了改变,变的可以改变一些事情,至少是自己的生活,可却渐渐的发现不过是让自己的生活变的一成不变,过着周期样的日子罢了。
外人看来总觉得我还说的过去,我也没有必要和自己过不去,总是不那么认真的活着,马马虎虎的连借口都不找的放过自己了。
真的希望自己能走的好些,至少可以多赚点钱,并不要求富贵二字,只要够花就好,还要让朴实的家里人过的好些。
中国人其实真的很讲究,对于说漂亮话包括我自己在内都满有一手的,可做起事情来确往往越来越不那么讲究,所以我也为我拥有身边的几个真心的朋友而感恩。
人往高出走,可想走的稳也不容易,所以人们往往在自己觉得比较满意的位子停下来,然后就稳稳的过剩下的日子了,给大家和自己一个不错的交代,可我确不知道如何才能比较体面的把自己给交代了。
好象自己乱写的文字一直都是灰色的,也许本来我的生活就没有色彩。
不知道我的真爱会不会也踏着七色的云彩来与我道别。
走下去是唯一的路,可路长的看不到下一驿的风景,休息都变成了奢侈,可能人生的路从来就没有个尽头,只是在你精疲力竭的时候情愿的或者不得不的倒下,自诩爱诙谐的我,说不定会在老迈的那一刻释然的摆个足以让您呕吐的POS后就灰飞烟灭了。
最近在qq和msn上的名字是wandering---路人甲,其实都不是什么独创。“wandering”本来是在水木认识的一个北大的哥哥的名字,他长我几岁,已工作数年了,还记得他给我打过一次电话,他的笑声可爱的让你觉得温暖,可现在没有了音信,做为怀念吧,而且也可以素描我现在的心情;“路人甲”说自己只是一个无名的路人,在长长的路上,在无头无尾的挣扎队伍中无畏的挣扎着,说自己是路人也是说自己真的不甘心就这样停下脚步,被熙熙攘攘簇拥而去......
如果在某个路口邂逅了你,请拉着我的手,笑笑的和我一起走下去好吗?
“一路上有你,苦一点也愿意。”
有点老套也有点酸,呵呵。
刚刚找到的文档,自己还没试过,呵呵。留在这里备查。
原文地址。
http://www.visi.com/~mseberg/slacko.html
刚刚翻译了一下,贴在了http://slack.linuxsir.org/main/?q=node/127
Oracle 10 on Slackware 10
Oracle does not support Slackware Linux. However you may find these notes useful for your education.
Create Linux Groups
groupadd oinstall
groupadd dba
Create the Oracle User
useradd -g oinstall -G dba oracle
passwd oracle
Setting Shared Memory
Add these line to the /etc/sysctl.conf
kernel.shmall = 2097152
kernel.shmmax =2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
Create Oracle Directories as the root user
mkdir /u01/app/oracle
mkdir /u01/app/oracle/product
mkdir /u01/app/oracle/product/10.0.1.0.2
chown -R oracle.oinstall /u01/app/oracle
mkdir /home/oracle
chown -R oracle.oinstall /home/oracle
Trick Oracle 10 Installer
As root create the file /etc/redhat-release and add this line
redhat-3
Down Rev BinUtils
I downloaded binutils-2.10.1.tar.gz from :
http://mirrors.usc.edu/pub/gnu/binutils/?C=M;O=D
I installed it as follows:
# tar -xzvf binutils-2.10.1.tar.gz
# cd binutils-2.10.1
# ./configure
# make
# make install # as root
Next run these commands as root
# cd /usr/bin
# mv ld ld.new
# cp /usr/local/bin/ld ./
This temporarily replaces ld 2.11 with ld 2.10.
Note: I still get a few link errors during the Oracle install which I just clicked continue when they occured.
Setting the Shell limits for the Oracle user
Add the following lines to the /etc/security/limits.conf file:
* soft nproc 2047
* hard nproc 163844
* soft nofile 1024
* hard nofile 65536
Each line follows this format:
*<Tab><Tab>soft<Tab>nproc<Tab<Tab>2047
Set Oracle Environments
As the oracle user in the .profile in /home/oracle.
# Oracle Environment
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/10.0.1.0.2
export DISPLAY=localhost:0.0
export ORACLE_SID=test
export ORACLE_TERM=xterm
#export TNS_ADMIN= Set if sqlnet.ora, tnsnames.ora, etc. are not in $ORACLE_HOME/network/admin
export NLS_LANG=AMERICAN;
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export LD_LIBRARY_PATH
# Set shell search paths
export PATH=$PATH:$ORACLE_HOME/bin
# CLASSPATH:
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
export EDITOR=vi
set -o vi
PS1='$PWD:$ORACLE_SID >'
If [ $USER = "oracle" ]; then
If [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
Reboot the machine!
System Check
After the reboot you should check the memory parametes as root using these commands:
Review the current semaphore parameter values in the sem file by using the cat utility.
# cat /proc/sys/kernel/sem
You can check the shmmax parameter with:
# cat /proc/sys/kernel/shmmax
The reboot and sysctl.conf changes this to 2,147,483,648, but you can go as high as 2.7GB.
As the Oracle user try a few commands like these to make sure you enviroment is set correctlly
# echo $ORACLE_SID
# echo #ORACLE_HOME
You decide. Oracle patch 3006854
I download it and ran it (the Red hat version) Not sure if it helpped or hurt,
Install Oracle
Before you begin
You should have the following download this file from otn.oracle.com
ship.db.cpio.gz
Create an install directory and unpack your Oracle images
I created a directory /u01/app/oracle/100102install and copied the image there.
Run this command:
gunzip ship.db.cpio.gz
Then extract the cpio archive using this command:
cpio -idmv < ship.db.cpio
Start runInstaller as the oracle user
I changed the directory to Disk1 and ran the program by typing this ./RunInstaller
Answers to questions during the install:
Inventory Directory : I hit return for the defaults
Privileged Operating System Groups: dba and dba
I did produce two or three link errors starting ins_rdbms.mk
I clicked continue. I was able to configure and use everything fine.
Comments welcome mseberg@visi.com
If you can add anything of value I will strongly consider it.