Monday, May 10, 2010

有些英文 不要不懂装[转]

sporting house 妓院(不是“体育室”)
dead president 美钞(上印有总统头像)(并非“死了的总统”)
lover 情人(不是“爱人”)
busboy 餐馆勤杂工(不是“公汽售票员”)
busybody 爱管闲事的人(不是“大忙人”)
dry goods (美)纺织品;(英)谷物(不是“干货”)
heartman 换心人(不是“有心人”)
mad doctor 精神病科医生(不是“发疯的医生”)
eleventh hour 最后时刻(不是“十一点”)
blind date (由第三者安排的)男女初次会面(并非“盲目约会”或“瞎约会”)

personal remark 人身攻击(不是“个人评论”)
sweet water 淡水(不是“糖水”或“甜水”)
confidence man 骗子(不是“信得过的人”)
criminal lawyer 刑事律师(不是“犯罪的律师”)
service station 加油站(不是“服务站”)
rest room 厕所(不是“休息室”)
dressing room 化妆室(不是“试衣室”或“更衣室”)
horse sense 常识(不是“马的感觉”)
capital idea 好主意(不是“资本主义思想”)
familiar talk 庸俗的交谈(不是“熟悉的谈话”)

black tea 红茶(不是“黑茶”)
black art 妖术(不是“黑色艺术”)
black stranger 完全陌生的人(不是“陌生的黑人”)
white coal (作动力来源用的)水(不是“白煤”)
white man 忠实可靠的人(不是“皮肤白的人”)
yellow book 黄皮书(法国政府报告书,以黄纸为封)(不是“黄色书籍”)
red tape 官僚习气(不是“红色带子”)
green hand 新手(不是“绿手”)
blue stocking 女学者、女才子(不是“蓝色长统袜”)

China policy 对华政策(不是“中国政策”)
Chinese dragon 麒麟(不是“中国龙”)
American beauty 一种玫瑰,名为“美国丽人”(不是“美国美女”)
English disease 软骨病(不是“英国病”)
Indian summer 愉快宁静的晚年(不是“印度的夏日”)
Greek gift 害人的礼品(不是“希腊礼物”)
Spanish athlete 吹牛的人(不是“西班牙运动员”)
French chalk 滑石粉(不是“法国粉笔”)

pull one's leg 开玩笑(不是“拉后腿”)
in one's birthday suit 赤身裸体(不是“穿着生日礼服”)
eat one's words 收回前言(不是“食言”)
an apple of love 西红柿(不是“爱情之果”)
handwriting on the wall 不祥之兆(不是“大字报”)
bring down the house 博得全场喝彩(不是“推倒房子”)
have a fit 勃然大怒(不是“试穿”)
make one's hair stand on end 令人毛骨悚然—恐惧(不是“令人发指——气愤”)
be taken in 受骗,上当(不是“被接纳”)
think a great deal of oneself 高看或看重自己(不是“为自己想得很多”)
pull up one's socks 鼓起勇气(不是“提上袜子”)
have the heart to do (用于否定句)忍心做……不是“有心做”或“有意做”)

What a shame! 多可惜!真遗憾!(不是“多可耻”)
You don't say! 是吗!(不是“你别说”)
You can say that again! 说得好!(不是“你可以再说一遍”)
I haven't slept better. 我睡得好极了。(不是“我从未睡过好觉”)
You can't be too careful in your work. 你工作越仔细越好。(不是“你工作不能太仔细”)
It has been 4 years since I smoked. 我戒烟4年了。(不是“我抽烟4年了”)
All his friends did not turn up. 他的朋友没全到。(不是“他的朋友全没到”)
People will be long forgetting her. 人们在很长时间内会记住她的。(不是“人们会永远忘记她”)

He was only too pleased to let them go. 他很乐意让他们走。(不是“他太高兴了,不愿让他们走”)

It can't be less interesting. 它无聊极了。(不是“它不可能没有趣”)

Thursday, May 6, 2010

一篇故事讲述了计算机网络里的基本概念:网关,DHCP,IP寻址,ARP欺骗,路由,DDOS等...

计算机主机网关的作用是什么?

假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大爷就是你的网关。当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声他的名字,他听到了就会回应你,并且跑出来跟你玩。
但是你不被允许走出大门,你想与外界发生的一切联系,都必须由门口的李大爷(网关)用电话帮助你联系。假如你想找你的同学小明聊天,小明家住在很远的另外一个院子里,他家的院子里也有一个看门的王大爷(小明的网关)。但是你不知道小明家的电话号码,不过你的班主任老师有一份你们班全体同学的名单和电话号码对照表,你的老师就是你的DNS服务器。于是你在家里拨通了门口李大爷的电话,有了下面的对话:

小不点:李大爷,我想找班主任查一下小明的电话号码行吗?

李大爷:好,你等着。(接着李大爷给你的班主任挂了一个电话,问清楚
了小明的电话)问到了,他家的号码是211.99.99.99

小不点:太好了!李大爷,我想找小明,你再帮我联系一下小明吧。

李大爷:没问题。(接着李大爷向电话局发出了请求接通小明家电话的请
求,最后一关当然是被转接到了小明家那个院子的王大爷那里,然后王大
爷把电话给转到小明家)

就这样你和小明取得了联系。

至于DHCP服务器嘛,可以这样比喻:

你家院子里的居民越来越多了,传达室李大爷那里的电话交换机已经不能满足这么多居民的需求了,所以只好采用了一种新技术叫做DHCP,居民们开机的时候随机得到一个电话号码,每一次得到的号码都可能会不同。

你家门口的李大爷:就是你的网关
你的班主任:就是你的DNS服务器
传达室的电话交换机:就是你的DHCP服务器

同上,李大爷和王大爷之间的对话就叫做路由。

另:如果还有个小朋友叫做小暗,他住的院子看门的是孙大爷,因为小暗的院子刚盖好,孙大爷刚来不久,他没有李大爷和王大爷办公室的电话(李大爷和王大爷当然也没有他的电话),这时会有两种情况:
1、居委会的赵大妈告诉了孙大爷关于李、王两位大爷的电话(同时赵大妈也告诉了李、王关于孙的电话),这就叫静态设定路由
2、赵大妈病了,孙大爷自己到处打电话,见人就说:“我是小暗他们院子管电话的”,结果被李、王二位听到了,就记在了他们的通讯录上,然后李、王就给孙大爷回了个电话说:“我是小明(小不点)他们院子管电话的”,这就叫动态设定路由

然后有一天小不点要找小暗,结果自然是小不点给李大爷打电话说:“大爷,我找小暗”(这里省略了李大爷去查小暗电话的过程,假设他知道小暗的电话),李大爷一找通讯录:“哦,小暗的院子的电话是孙大爷管着的,要找小暗自然先要通知孙大爷,我可以通知王大爷让他去找孙大爷,也可以自己直接找孙,那当然是自己直接找孙方便了”,于是李大爷给孙大爷打了电话,然后孙大爷又把电话转到了小暗家。

这里李大爷的通讯录叫做路由表。
李大爷选择是自己直接找孙大爷还是让王大爷帮忙转接叫做路由选择。

李大爷之所以选择直接找孙大爷是有依据的,因为他直接找孙大爷就能一步到位,如果要王大爷转接就需要两步才能完成,这里的“步”叫做“跳数”,李大爷的选择遵循的是最少步骤(跳数)原则(如果他不遵守这个原则,小不点可能就会多等些时间才能找到小暗,最终结果可能导致李大爷因工作不力被炒鱿鱼,这叫做“延时太长,选路原则不合理,换了一个路由器”)

当然,事情总是变化的,小不点和小明吵架了,这些天小不点老是给小暗打电话,小明心里想:“操,他是不是在说我坏话啊?”于是小明决定偷听小不点和小暗的通话,但是他又不能出院子,怎么办呢?小明做了这样一个决定:

首先他告诉自己院里管电话的王大爷说:“你给李大爷打个电话说小暗搬到咱们院子了,以后凡是打给他的电话我来接”,王大爷没反映过来(毕竟年纪大了啊!)就给李大爷打了电话,说:“现在我来管理小暗的电话了,孙已经不管了”,结果李大爷就把他的通讯录改了,这叫做路由欺骗。

以后小不点再找小暗,李大爷就转给王大爷了(其实应该转给孙大爷的),王大爷收到了这个电话就转给了小明(因为他之前已经和小明说好了),小明收到这个电话就假装小暗和小不点通信。因为小明作贼心虚,害怕明天小不点和小暗见面后当面问他,于是通信断了之后,又自己以小不点的名义给小暗通了个电话复述了一遍刚才的话,有这就叫数据窃听

再后来,小不点还是不断的和小暗联系,而零落了小明,小明心里嘀咕啊:“我不能总是这样以小暗的身份和小不点通话啊,外一有一天露馅了怎么办!”于是他想了一个更阴险的招数:“干脆我也不偷听你们的电话了,你小不点不是不给我打电话吗!那我让你也给小暗打不了,哼哼!”,他怎么做的呢?我们来看:

他联系了一批狐朋狗友,和他们串通好,每天固定一个时间大家一起给小暗院子传达室打电话,内容什么都有,只要传达室的孙爷爷接电话,就会听到“打雷啦,下雨收衣服啊!”、“人是人他妈生的,妖是妖他妈生的”、“你妈贵姓”等等,听的脑袋都大了,不听又不行,电话不停的响啊!终于有一天,孙爷爷忍不住了,大喊一声:“我受不了拉!!!!”,于是上吊自杀了!

这就是最简单的DDOS攻击,孙爷爷心理承受能力弱的现象叫做“数据报处理模块有BUG”,孙爷爷的自杀叫做“路由器瘫痪”。如果是我,就会微笑着和他们拉家常,例如告诉他们“我早就听了天气预报,衣服10分钟前已经收好了”或者“那你妈是人还是妖”或者“和你奶奶一个姓”等等,我这种健全的心理叫做“健壮的数据报处理,能够抵御任何攻击”

孙爷爷瘫了之后,小不点终于不再给小暗打电话了,因为无论他怎么打对方都是忙音,这种现象叫做“拒绝服务”,所以小明的做法还有一个名字叫做“拒绝服务攻击”。

小明终于安静了几天,...

几天后,小明的院子来了一个美丽的女孩,名字叫做小丽,小明很喜欢她(小小年纪玩什么早恋!)可是小丽有个很帅的男朋友,小明干瞪眼没办法。当然这里还是要遵循上面的原则:小丽是不能出院子的。那个男的想泡小丽自然只能打电话,于是小明又蠢蠢欲动了:
还记得王爷爷是院子的电话总管吗?他之所以能管理电话是因为他有一个通讯录,因为同一个院子可能有2个孩子都叫小明,靠名字无法区分,所以通讯录上每一行只有两项:

门牌电话
一号门 1234567 (这个是小明的)
二号门 7654321 (这个是小丽的)
......

王爷爷记性不好,但这总不会错了吧(同一个院子不会有2个“二号门”吧)?每次打电话人家都要说出要找的电话号码,然后通过通讯录去院子里面敲门,比如人家说我找“1234567”,于是王爷爷一比较,哦,是一号门的,他就去敲一号门“听电话”,如果是找“7654321”,那他就找二号门“听电话”。

这里的电话号码就是传说中的“IP地址”
这里的门牌号就是传说中的网卡的’MAC‘地址(每一块网卡的MAC地址都是不一样的,这是网卡的制造商写死在网卡的芯片中的)

小明心里想“奶奶的,老子泡不到你也别想泡”,于是他打起了王爷爷通讯录的主意,经过细心的观察,周密的准备,他终于发现王爷爷有尿频的毛病(毕竟是老人啊...),终于在一个月黑风高的白天,王爷爷去上厕所了,小明偷偷的摸进传达室,小心翼翼的改了王爷爷的通讯录......

过了几天,小丽的男朋友又给小丽打来了电话,对方报的电话是“7654321”,王爷爷一看通讯录,靠:

门牌电话
一号门 1234567 (这个是小明的)
一号门 7654321 (注意:这个原来是小丽的,但是被小明改了)
......

王爷爷不知道改了啊,于是就去找一号门的小明了,小明心里这个美啊,他以小丽父亲的口吻严厉的教训了那个男的和小丽之间不正当的男女关系,结果那个男的恭恭敬敬的挂了电话。当然小丽并不知道整个事情的发生...

这里小明的行为叫做“ARP欺骗”(因为在实际的网络上是通过发送ARP数据包来实现的,所以叫做“ARP欺骗”),王爷爷的通讯录叫做“ARP表”

这里要注意:王爷爷现在有两个通讯录了,一个是记录每个院子传达室电话的本本,叫做“路由表”,一个是现在说的记录院子里面详细信息的本本,叫做“ARP表”。

有句命言是“人们总是在追求完美的,尽管永远也做不到”(请记住这句话,因为这是一个大名人--也就是我,说的)

王爷爷的制度中有一条是这么写的“每个月要重新检查一下门牌号和电话的对应本(也就是ARP表)”,这个动作叫做“刷新ARP表”,每个月的时间限制叫做“刷新ARP表的周期”。这样小明为了让那个男的永远不能找到小丽,之后每个月都要偷偷改一次那个通讯录,不过这样也是不得不做的事啊!
补充一点,小明是很聪明的,如果通讯录(ARP表)被改成了这样:

门牌(MAC)电话(IP)
一号门 1234567 (这个是小明的)
二号门 1234567 (注意:这个被小明改了,但是他一时头晕改错了)
......

就会是计算机就会弹出一个对话框提示“出现重复的IP地址”,最终会导致王爷爷不知所措,于是通知一号门和二号门,你们的电话重复了。这样小丽就知道有人在破坏她的好事,这个现象叫做“骗局被揭穿了”

小不点知道了小明偷听他和小暗的电话,于是就和小暗约定好了密码。小不点在家里把要说的加密了之后告诉小暗。土豆-〉星期三,地瓜-〉请客,笨蛋-〉小不点家。于是小不点告诉小暗:土豆笨蛋地瓜。小明听了???不懂。。。。郁闷了。。。这是加密。
除此之外,小丽也知道了小明改他家的电话号码了。于是王爷爷就登门一个一个把电话和门牌号记下来。并且藏起来不允许外人修改,只能自己有钥匙(密码)。这是ip地址和MAC地址绑定。当有人改了电话号码的时候,就得找王爷爷改。麻烦是麻烦了,但是安全了。不过小明偷偷的把王爷爷的钥匙偷配了一把(盗窃密码成功),于是他还可以修改。这样么,就这样了。

本文来自: 华夏黑客同盟论坛

Tuesday, May 4, 2010

SVN的使用:基本知识,Server的搭建与Client日常使用维护

本文转载自 “gnuhpc”的专栏,在此表示感谢!

一、基本知识:

1.为什么要使用SVN?

程序员编写程序的过程中,每个程序都会生成很多不同的版本.

这就需要程序员能有效的管理代码,在需要的时候可以迅速,准确取出相应的版本

任何需要管理频繁信息改变的地方都需要它,这就是Subversion的舞台

2. Subversion是什么?

Sub Version(简称SVN)是版本管理工具

Subversion是一个自由/开源版本控制系统

一组文件存放在中心版本库, 记录每一次文件和目录的修改

Subversion可以通过网络访问它的版本库

任意数量的客户端可以连接到版本库,读写这些文件.

通过写,别人可以看到这些信息,通过读数据,可以看到别人的修改

3.Subversion的特性有哪些?

版本化的目录:Subversion实现了一个可以跟踪目录树更改的“虚拟”版本化文件系统

真实的版本历史:可以新增一个具有干净历史的文件

原子提交:可以让用户构建一个要提交修改的逻辑块,防止部分修改提交到版本库

版本化的元数据:每一个文件或目录都有一套属性—键和它们的值

可选的网络层:在版本库访问方面有一个抽象概念,利于人们去实现新的网络机制

一致的数据操作:文件是建立在二进制文件区别算法基础上的

有效率的分支和标签:建立分支与标签时只是拷贝整个工程,使用了一种类似于硬链接的机制

可修改性:由一系列良好的共享C库实现,具有定义良好的API

4.Subversion的原理是什么?

锁定-解锁

image
拷贝-修改-合并

image image

Subversion主要采用拷贝-修改-合并模型,配合锁定-解锁模型管理数据的共享

5.Subversion的基本工作流程是什么?

image

二、SVN服务器的搭建与配置:

1.启动:安装好VisualSVN Server后,运行VisualSVN Server Manger,下面是启动界面:

2.添加一个代码库【Repository】:如下图:

按上图所示,创建新的代码库,在下图所示的文本框中输入代码库名称:

注意:上图中的CheckBox如果选中,则在代码库StartKit下面会创建 trunk、branches、tags三个子目录;不选中,则只创建空的代码库StartKit。

点击OK按钮,代码库就创建成功了。

3.安全性设置:

在左侧的Users上点击右键:

输入上面的信息,点击OK,我们就创建一个用户了。按照上面的过程,分别添加用户 Developer1、tester1、manager1,好了,我们开始添加这些用户到我们刚才创建的项目里:

点击上图中的"Add..."按钮,在下图中选择我们刚才添加的用户,点击OK按钮:

说明:大家可能注意到了下图中的Groups,是的,你也可以先创建组,把用户添加到各个组中,然后对组进行授权,操作比较简单,在此略过。

按照下图所示,分别对用户【或组】进行授权:

点击"确定"按钮,上面的用户就具有了访问代码库的不同权限。

二、SVN客户端的使用方法——TotoiseSVN 的基本使用方法

1.导入源代码到SVN服务器

假如我们要把项目StartKit的源代码签入到SVN Server上的代码库中里,首先右键点击StartKit文件夹,这时候的右键菜单如下图所示:

点击Import,弹出下面的窗体,其中http://zt.net.henu.edu.cn 是服务器名,svn是代码仓库的根目录,StartKit是我们在SVN Server上建立的一个代码库:

说明:左下角的CheckBox,在第一次签入源代码时没有用,但是,在以后你提交代码的时候是非常有用的。

点击OK按钮,会弹出下面的窗体,要求输入凭据:

在上面的窗体中输入用户名和密码,点击OK按钮:

如上图所示,好了,源代码已经成功导入SVN服务器了。这时候团队成员就可以从SVN服务器上的导出源代码到自己的机器了。

2迁出源代码到本机

就是从版本库中取出某个目录的拷贝到本机上某个目录的操作,叫做CheckOut,这个操作是工作的基础。

在本机创建文件夹,右键点击Checkout,弹出如下图的窗体:

在上图中URL of Repository:下的文本框中输入svn server中的代码库的地址,其他默认,点击OK按钮,就开始迁出源代码了。

说明:上图中的Checkout Depth,有4个选项,分别是迁出全部、只签出下一级子目录和文件、只导出文件、只签出空项目,默认的是第一项。上面的例子中,我们也可以使用web的方式访问代码库,在浏览器中输入http://zt.net.henu.edu.cn/svn/StartKit/

这时候也会弹出对话框,要求输入用户名和密码,通过验证后即可浏览代码库中的内容。

打开目录,可以看到如下图的文件夹结构:

一旦你对文件或文件夹做了任何修改,那么文件或文件夹的显示图片机会发生变化。下图中我修改了其中的二个文件:

看一下不同状态所对应的图片:

3.提交修改过的文件到SVN服务器

例如,修改了位于Model文件中的二个文件ImageInfo.cs和NewsInfo.cs

注意:提交源代码到服务器时,一定确保本机的代码是最新版本,否则可能提交失败,或者造成版本冲突。

在Model文件夹上点击右键或在Model文件下的空白处点击右键,点击SVN Commit…弹出下面的窗体:

点击OK按钮后,弹出如下图的窗体:

commit的功能不仅仅是上传,他会和服务器上面的文件进行对比,假如你更新了某个文件而服务器上面也有人更新了这个文件,并且是在你checkout之后做的更新,那么它会尝试将你的更新和他人的更新进行融合(merge),假如自动 merge不成功,那么报告conflict,你必须自己来手动merge,也就是把你的更新和别人的更新无冲突的写在一起。commit的时候,最好填写Log信息,这样保证别人可以看到你的更新究竟做了写什么。这就相当于上传文件并且说明自己做了那些修改,多人合作的时候log非常重要。

4.添加新文件到SVN服务器

假设我们在Model文件下添加一个新的类文件UserInfo.cs,在文件UserInfo.cs上点击右键,点击TortoiseSVN=>>Add,弹出如下图的窗体:

选中UserInfo.cs文件,点击OK按钮,这样并没有将这个文件提交到SVN服务器,只是将这个文件标记为源代码库库中的文件,并将其状态置为修改状态。之后,我们要再SVN Commit这个文件一次,才可以将其真正提交到SVN服务器上的代码库中。添加文件夹的步骤也是一样的。

5.更新本机代码与SVN服务器上最新的版本一致

这个也很简单,只要在需要更新的文件夹上点击右键或在该文件下的空白处点击右键,点击SVN Update,就可以了。一般在提交修改之前,必须运行一下update操作来合并别人作出的新更改。

注意:更新操作可能会因为版本冲突而失败,这是可以使用合并【Merge】或其他方法解决;也可能因为锁定【Get Lock】而失败,这是需要先解锁【Release Lock】。 如果本地的代码已经被修改,和commit一样会先进行merge,不成功的话就会报告conflict 。另外需要注意的是,假如别人删除了某个文件,那么更新之后你在本地的也会被删除。

6.重命名文件或文件夹,并将修改提交到SVN服务器

只要在需要重命名的文件或文件夹上点击右键,点击TortiseSVN=>Rename…,在弹出的窗体中输入新名称,点击OK按钮,就可以了。此方法也不是直接重命名,而是将该文件或文件夹的名称标记为重命名后名称,也需要我们使用SVN Commit提交到SVN服务器后才真正重命名。

7.删除文件或文件夹,并将修改提交到SVN服务器

最简单就是,你直接删除文件或文件夹,然后使用SVN Commit提交更新到SVN服务器。另外一种方法是在你要删除的文件或文件夹上点击右键=>>TortoiseSVN=>> Delete删除,此方法也不是直接删除,而是将该文件或文件夹的状态置为删除,也需要我们使用SVN Commit提交到SVN服务器后才真正删除。

8. 如何在同一个在一个工程的各个分支或者主干之间切换
使用tortoise SVN—>switch ,在URL中输入branch或trunk的url地址。

9.比较两个版本之间的差别

如果你想看到你的本地副本有哪些更加,只用在资源管理器中右键菜单下选TortoiseSVN→ 比较差异。

如果你想查看主干程序(假如你在分支上开发)有哪些修改或者是某一分支(假如你在主干上开发)有哪些修改,你可以使用右键菜单。在你点击文件的同时按住Shift键,然后选择TortoiseSVN→ URL比较。在弹出的对话框中,将特别显示将与你本地版本做比较的版本的URL地址。

10. 如何为一个SVN主工程建立分支或tag

image

分支的基本概念:开发的一条线独立于另一条线,如果回顾历史,可以发现两条线分享共同的历史,一个分支总是从一个备份开始的,从那里开始,发展自己独有的历史。

SVN分支的管理实际上就是把不同的分支用不同的文件保存,因此你在取得新版本的时候会发现,不同分支的最新文件也会被获取下来。创建tag操作,相当于把当前的代码版本复制一份到其他地方,然后以这个地方为出发点进行新的开发,与原来位置的版本互不干扰。

选择你要产生分支的文件,点击鼠标右键,选择[分支/标记...]

在[至URL(T)]输入框中将文件重命名为你的分支文件名,输入便于区分的日志信息,点击确认。

在SVN仓库中会复制一个你所指定的文件,文件名称就是你所命名的,但是在你的本地目录上看不到新建的分支文件名,要使你的文件更新作用到你的分支上,你必须选择文件,点击鼠标右键,选择[切换...],选择你重命名的文件,点击确定即可。这样你的本地文件就和分支文件关联上了,不要奇怪,这时本地目录上看到的文件名仍然为旧的文件名。

11.冲突解决

当文件发生冲突时,SVN会额外创建3个不受版本控制的文件,同时被冲突文件如果能够合并,会在被冲突文件内部留下冲突记录。例如,冲突的文件为plugin.c,BASE版本是1458,HEAD为1459,会产生3个临时文件plugin.c.mine,plugin.c.r1458,plugin.c.r1459,

解决思路:A. 手动修改被冲突文件 B. 放弃自己的更改。实际中,解决办法很灵活,一般需要与他人商量

注意:由于这3个文件是在Update后才创建的,而Update之后,工作拷贝的BASE目录已经变成更新后的版本了,所以放弃自己的更改会回到新版本。如果不是用Revert的方法解决冲突的话,由于那3个临时文件留在那里,会使Subversion认为冲突没有解决,所以要运行resolved告诉SVN冲突解决或者删除临时文件。

三、Linux下SVN客户端的使用:

1.Checkout:

语法:checkout(co) URL[@REV]... [PATH]

可以指明Checkout的版本号,默认CheckOut操作是针对HEAD版本进行的,大多数情况下我们需要HEAD版本,但如果需要历史版本,可以用-r(--revision)参数或者是用“@版本号”的形式

例:

… -r 1452 会检出1452版,如果存在的话

… -r {“2007-05-05”} 会检出最接近这个日期的版本

…/trunk@1452 效果同第1个例子

递归与不递归,-N:不递归(仅针对顶层目录),否则目录递归(默认,常用)

例1:svn co svn://218.94.9.38/svnrepos/skizcorp/trunk 在当前目录建立一个trunk目录,里面是工作拷贝

例2:svn co svn://localhost/torm I:\PROJECTS\torm 会在I:\PROJECTS\目录下创建torm目录,里面存放工作拷贝

2.Update:

语法: update(up) [PATH...]

把版本库的修改同步到本地的过程是Update。

例1:up 直接把工作拷贝更新到最新版(HEAD版)

例2:up -r 2007 更新到2007版

例3:up doc/design 只更新doc/design下的文件

-r和-N参数仍然有用

Update会修改被更新目录的BASE版本号。某个文件的BASE版本是指存放在管理目录.svn中的该文件拷贝的版本,Revert会使该文件回到BASE版本

做Update操作时,SVN会打印出受影响文件的状态,有以下几种:

A Added

D Deleted

U Updated

C Conflict

G Merged

注意:若提示C,表示冲突,冲突可以用status命令加-u参数来预测

3.Revert:

Revert是指放弃对某个文件的修改,把该文件的内容回复和BASE版本相同,也就是,把该文件的状态回复到未修改状态

语法:revert 文件/路径

例子:

例1 revert abc.c 丢弃对abc.c的所有修改

例2 revert src/edu/nju/pojo 放弃对此目录下所有文件的修改

四、注意事项:

1.实际上,从你把源代码迁签入SVN服务器开始,每一个版本的数据和文件,就算是你已经删除了的,也都可以随时迁出。

2.向SVN服务器提交源代码的时候,一定不要提交bin、obj 等文件夹,否则会很麻烦。但是web项目的bin目录除外,但是web项目的bin目录中的引用其他项目而生成的dll不需要提交。

3.对于第三方库或程序集,不要简单从他们的安装位置引用,而是在你的解决方案下,添加一个Library的目录,把需要的程序集或者库文件复制到这里,然后从Library目录引用。

4.关于checkout和export的区别,当你要发布或编译的时候,最好采用export,它不会引入svn的附加文件,这样文件结构显得比较干净。而当你需要修改和提交的时候,用checkout,它会在你本地建立一个工作区,Checkout到某处的代码,将会被 TortoiseSVN监视,里面的文件可以享受各种SVN的服务。

5.假如你需要给带有绿色对勾文件改名或者移动它的位置,请不要使用windows的功能,右键点击它们,TortoiseSVN都有相应的操作。想象这些文件已经不在是你本地的东西,你的一举一动都必须让Tortoise知道:

  • 把一个文件加入SVN版本控制,用add命令
  • 从版本控制中移除,用delete(rm, remove)命令
  • 移动或者重命名,用move(rename)命令
  • 拷贝,用copy命令
  • 创建目录,用mkdir命令
  • ……

6.假如修改了某个文件但是你后悔了,可以右键点击它选择Revert,它将变回上次checkout时候的情况,或者Revert整个工程到任意一个从前的版本。

7.使用Commit时注意: 如有多个文件需要同时提交,同时文件在不同的目录下,必须找到这些文件的最上层目录上点击 Commit,TortoiseSVN会搜索被点击目录以及该目录下所有的文件,并将修改变动的文件罗列在列表中。 仔细查看列表中的文件,确定哪些文件时需要更新的,如果不需要更新某个已经变化了的文件,只需要在该文件上点击右键,选择还原操作;如遇到文件冲突(冲突:要提交的文件已被其他人改动并提交到版本库中)要启用解决冲突功能。

8.对于branches、tags、trunk这三个目录,并不是subversion必需的,而是被总结的一种良好的团队开发习惯,其使用方法为:

开发者提交所有的新特性到主干。 每日的修改提交到/trunk:新特性,bug修正和其他。

这个主干被拷贝到“发布”分支。 当小组认为软件已经做好发布的准备(如,版本1.0)然后/trunk会被拷贝到/branches/1.0。

项目组继续并行工作,一个小组开始对分支进行严酷的测试,同时另一个小组在/trunk继续新的工作(如,准备2.0),如果一个bug在任何一个位置被发现,错误修正需要来回运送。然而这个过程有时候也会结束,例如分支已经为发布前的最终测试“停滞”了。

分支已经作了标签并且发布,当测试结束,/branches/1.0作为引用快照已经拷贝到/tags/1.0.0,这个标签被打包发布给客户。

分支多次维护。当继续在/trunk上为版本2.0工作,bug修正继续从/trunk运送到/branches/1.0,如果积累了足够的 bug修正,管理部门决定发布1.0.1版本:拷贝/branches/1.0到/tags/1.0.1,标签被打包发布。

一般建立最初的repository时,就建好这三个目录,把所有代码放入/trunk中,如:要将project1目录下的代码导入 repository,project1的结构就是:project1/branches,project1/tags,project1 /trunk,project1/trunk/food.c,project1/trunk/egg.pc……,然后将project1目录导入 repository,建立最初的资料库。然后export回project1,作为本地工作目录。

9.检验修改:

通过status命令可以检查工作拷贝的状态

通过diff命令可以检查更改的内容

Monday, May 3, 2010

星巴克的术语

Americano, 美式咖啡,两shots 的浓缩咖啡,用热水调治而成;

Breve, 拿铁咖啡的一种,用一半浓缩咖啡和一半热牛奶调制而成;

Cappuccino, 浓缩咖啡和泡沫牛奶调成,比拿铁的牛奶泡沫多;

Con Panna, 意大利语,意思是“加上搅打过得牛奶”;

Demitasse, 法语,半杯的意思,这里指用极小的杯子装浓缩咖啡;

Doppio, 意大利语,意思是双份。但只用在两shots的浓缩咖啡,比如你可以说 doppio espresso, double latte;

Dry, 多奶末,少奶;

Espresso, 浓缩咖啡;

Frappuccino blended beverage, 星巴克特制;

Gande, 第二大型号的杯子;

Half-caf,  1 shot 普通咖啡,1 shot 低咖啡因咖啡;

Latte, 拿铁,热牛奶加浓缩咖啡;

Macchiato, 意大利语,显著的。比如星巴克焦糖 Macchiato;

Misto, 意大利语,意为混合,是滴滤式咖啡和热牛奶的混合;

Mocha: 摩卡咖啡,用浓缩咖啡,热巧克力和热牛奶;

Quad: 4 shots 浓缩咖啡;

Ristretto: 浓缩咖啡中提取出的,是浓缩咖啡中比较甘甜的部分;

Skinny, 用脱脂牛奶调入咖啡;

Tall, 小尺寸的杯子;

Triple, 3 shots 浓咖啡;

Unleaded, 无咖啡因的咖啡;

Valencia, 橙子糖浆;

Venti, 最大的杯子;

Espresso:浓缩咖啡的种类。

Regular, 普通的浓缩咖啡

Decaf, 无咖啡因

Extra shots, 加强的浓缩咖啡

Half and caf 一半无咖啡因一半普通的 shot

Ristretto, 仅有甜味的提取物

糖浆或果汁的选择

Vanilla 香草 sugar-free vanilla 无糖香草 Caramel 焦糖 Toffee nut 太妃糖/坚果 hazelnut 榛子 sugar-free hazelnut 无糖榛子 raspberry 覆盆子 peppermint 薄荷 Valencia 橙子 cinnamon 肉桂

Dry or foamy 干性的

Whipped cream 搅大奶油

Light whip 搅拌

light syrup 糖浆

light foam 泡沫

Saturday, May 1, 2010

How to install Flash player on Fedora 12 64-bit

Although there are many posts on Internet to demo how to install flash player, I think it is convenient to copy the steps to my own blog and check when it is necessary. This method is posted by "leigh123linux", and thanks for your contribution and help!

su yum erase flash-plugin nspluginwrapper*  cd /etc/yum.repos.d/ curl -O http://www.dfm.uninsubria.it/compiz/fusion-testing/flashplayer.x86_64/flash.repo rpm --import http://www.dfm.uninsubria.it/compiz/fusion-testing/flashplayer.x86_64/RPM-GPG-KEY-leigh123linux yum install flash-plugin