• Category Archives: Programming

computer

版本控制SCM

我对版本控制要晕了,今天才知道Mercurial(Hg)和Bazaar,加上CVS,SVN,Git,Clearcase,他們都算SCM(Software Configuration Mangement软件版本控制管理)工具。
在線託管有GitHub,Google Code,Bitbucket,SourceForge,GitCafe;
客戶端更多啦,海龜客戶端TortoiseSVN,TortoiseHg(烏龜Hg),TortoiseGit(烏龜Git)真有個性,GitHub更是說明有個 吉祥物 真的很重要!- -b 其实只有這句才是重點,下面好無聊估計都知道就當wiki吧。

什么是SCM
在软件工程中,从项目开始到完成发布,中间一定有很多不同的版本,如何track和control这些版本,如何让开发人员并行的工作,如何把大家的代码merge到一起? 于是产生了以版本控制(version control)为核心的SCM(Software Configuration Mangement软件版本控制管理)。历史上SCM也有不同的解释,software configuration management来自于IBM Rational Software,还有software change and configuration management,source configuration management等。

如何进行版本控制
我觉得可以把SCM看成是时光机器,版本控制让你像神(其实也有权限管理)一样管理任何时间点的世界。版本控制流程的基本循环是这样的:
1. 从他人处获取最新的文件树(回到某个时间节点的世界)
2. 对这个版本的树进行一系列修改(改变了那个世界,是原来某时间节点的平行世界)
3. 发布并使其他人可以获得这些修改(确定那个平行世界的存在,其他人也可以来到这个平行世界)

第一个动作,也就是获取一份本地的文件树,称为checkout。我们获取和发布所有修改的地方叫版本库repository,而检出得到的目录则被称为工作目录、工作树。用版本库中的最新文件更新工作拷贝的动作就叫update。有时候这还会涉及到merge,也就是组合不同用户对同一个文件作出的修改。diff命令使我们能够查看树或文件在两个版本之间的变化,它最常见的用途是检查你的工作目录中的本地(未发布的)修改。修改的发布是通过commit命令完成的,它会将工作目录的改变保存到版本库中去。

一个经典的不能回避的问题是,多人修改同版本的同一文件如何处理?
早在操作系统设计中,人们就遇到了类似问题:多进程如何安全地访问访问公共资源或一段代码(临界区)? 因为操作系统必须安全和稳定的特点,多进程得互斥访问临界区,即当一个进程已经访问临界区时,其他进程全部挂起,等待那个进程离开临界区后才能再选一个访问。
类似的,多人协作时,让某人已经checkout一个文件,其他人就不能再checkout,得等他checkin后才能再修改。这样的做法比较悲观,所以可以被称为悲观访问、悲观锁。与之对应的就有乐观锁,因为人还是要比机器聪明,即使最悲观情况有两人默契地修改了同版本的同一文件同一行代码,最后仍可以确定哪个修改是更好的,所以乐观访问就不会有只能同版本同一文件只能一个人修改的不爽了。

TO BE CONTINUED...Mercurial,Git,Clearcase的JQ

图灵百年

今天是图灵诞辰100年的纪念日。阿兰·图灵拥有传奇的一生:

1936年,还在剑桥国王学院就读的阿兰·图灵发表重要论文《论可计算数及其在判定问题上的应用》(On Computable Numbers, with an Application to the Entscheidungsproblem),否定了希尔伯特判定问题,通俗来说,即我们不能用一个算法来判定一台给定的图灵机是否会停机,所以停机问题是一个无法判定的数学问题,并提出algorithms和computing machines两个核心概念。图灵也因为这论文被推荐到了普林斯顿大学同样研究希尔伯特判定问题的Church教授门下做博士生。博士期间图灵办公室对面就是冯•诺伊曼教授。在1930年代,世界上最了不起的计算机科学系无疑是普林斯顿大学数学系,因为丘奇的λ演算成为我们使用的程序设计语言的原型;图灵的机器成为由约翰·冯·诺伊曼在普林斯顿大学高级研究院研制出来的计算机的原型,其中的程序只是作为数据存放在这台计算机的存储器中。冯·诺伊曼提出了计算机的经典结构。他们共同奠定了计算机科学不可埋没的基础。

博士毕业后回到英国不久二战爆发,图灵投入破解德国密码的工作中,他用他的数学天赋拯救了数以万计的生命。

1950年他发表论文《计算机器与智能》( Computing Machinery and Intelligence),提出了图灵测试和人工智能,即如果第三者无法辨别人类与人工智能机器反应的差别,则可以论断该机器具备人工智能。到现在,还没有一台计算机能通过图灵测试。

然而图灵对于计算机界的贡献却因为他的英年早逝戛然而止,由于当时英国的法律认为同性恋属于违法行为,迫使图灵接收针对同性恋倾向的“治疗”。1954年,艾伦·图灵因食用浸过氰化物溶液的苹果死亡。直到2009年,英国首相布朗才向这位计算机之父和二战英雄做了官方道歉:“我们很抱歉。你本该被更好对待。(We are sorry. You deserved so much better.)”

美国计算机协会从1966年开始设立图灵奖,它是计算机界最负盛名、最崇高的一个奖项,被称为“计算机界的诺贝尔奖”。拿到图灵奖的都是大神orz...John McCarthy, Dijkstra, Donald E. Knuth, Edgar F. Codd, Ken Thompson & Dennis M. Ritchie, Niklaus Wirth, Alan Kay, RSA好基友等等orzorz

最后推荐两篇文章:
Google资深副总裁兼首席因特网专家、TCP/IP之父、2004年图灵奖得主Vint Cerf在BBC上发表的文章:
Alan Turing: why the tech world's hero should be a household name
果壳网上已有译文:为什么每个人都该知道阿兰·图灵

在豆瓣看到玑衡写的面对面的办公室——纪念艾伦•图灵百年诞辰 1912.6.23-2012.6.23

CSDN中箭 传说中的社工库

今天是码农中箭改密码日,ms是中午爆出来有黑客在网上公开了CSDN网站用户数据库(2009年4月数据),包括600余万个明文的注册邮箱帐号和密码。很神奇的是我不知从哪里看到了caoz在12月16日就写了的 谈谈近期的安全事件

他在微薄说:“这个库很早就在黑客群体里有传了,社工库里的重要资源呢,今年参加过4399内部安全培训的都听我提到过,前几天写近期安全事件文档的时候没好意思点名说出来,看来是今天才有人公开出来。”

所以其实安全问题一直都在,之前很多人都没有重视,我也是第一次听说"爆库","社工库"。下面整理了些caoz文章里的信息:

按照 tombkeeper 教主所说,国内有点影响力的网站,2/3都被爆过库,传闻人人网和开心网也是被破的七七八八了,待证实。但是爆库不等于密码泄露,爆库+不正确的加密方式才是密码泄露!!!

防爆库是安全架构里非常重要的一点,还要做最坏的打算:别人拿到会怎样。密码明文存储的(没加密),那就是今天的csdn密码泄露;可逆加密的,只要黑客用点心,也是死路;不可逆的,比如HASH算法生产md5,有一个碰撞库的概念,现有的破解都是将常用字符计算HASH值后反向比较。例如密码123456,假设MD5值为1ab9744e58acee3ed8f03508cbf82bf5,那么数据库中查到MD5值即知道了密码。通过社会工程学的应用,大量常用密码已可直接破解。虽然2004年山东大学王晓云提出有关快速查找“碰撞对”的算法,震惊了世界,但是逆向md5目前仍然是不现实的事情。具体可以参考cnBeta的 浅谈HASH算法与CSDN密码泄漏事件 启蒙一下。

在爆库泛滥和密码破解率很高的情况下,社工库扫描就很流行了,简单说,你在若干网站用了同样的账号和密码,其中一个被爆库,密码被泄露,你的账号和密码就进入了社工库,这个库现在很庞大,有数亿条记录。比如今天csdn明文密码泄露,有经验的黑客会利用社工库数据扫描批量著名网站,就可以造成使用同样密码的支付宝被盗或是微博盗号,这就是社工库的威力所在!
防止社工库扫描,目前除了验证码,并无太好手段,但是BT验证码(不BT的验证码是很容易破解的)又是一个“伤害用户体验"的行为,这就无奈了,所以最好自己有方面的意识才是王道。

PS: 根据大牛,著名黑客Eric S. Raymond 的《Hacker 文化简史》,其实hacker黑客是Real Programmer。
“有一群人大声嚷嚷着自己是黑客,但他们不是。他们(主要是正值青春的少年)是一些蓄意破坏计算机和电话系统的人。真正的黑客把这些人叫做骇客cracker,并不屑与之为伍。多数真正的黑客认为骇客们又懒又不负责任,还没什么大本事。专门以破坏别人安全为目的的行为并不能使你成为一名黑客,正如用铁丝偷开走汽车并不能使你成为一个汽车工程师。不幸的是,很多记者和作家往往错把骇客当成黑客;这种做法一直使真正的黑客感到恼火。根本的区别是:黑客搞建设,骇客搞破坏。”

Censorship与SOPA提案

什么是SOPA

今天才了解到前阵子在美国闹得沸沸扬扬的“Stop the Censorship”中的SOPA是指Stop Online Piracy Act,《终止在线盗版》,它基于PROTECT IP Act ,IP指的是intellectual property 知识产权。
类似SOPA这样的提案在美国称之为一个Bill,它于2011年10月26日由参议院提交,并在11月的16日举行了首次听证。这部法案所标榜的使命是最终赋予司法机构和版权所有者更大的优势去和网络盗版做战斗。

在听证会召开之前,这则提案一直在很低调的进行,直到AOL、eBay,Facebook,Google,LinkedIn,Mozilla,Twitter,Yahoo,Zynga等互联网巨头在纽约时报上联合声明“We stand together to protect innovation”反对SOPA,反对审查,反对集中式监管,并指SOPA提案与国会提出的数字千年法案(DMCA)背道而驰,才被美国互联网主流用户所关注,并得到了病毒式的传播。

不少民间团体纷纷站出来,有的网站快速的制作了很多介绍SOPA是什么、SOPA会带来什么后果等科普内容,向普通市民宣传网络审查可能带来的坏处;有的制作了视频 PROTECT IP Act Breaks The Internet;有的联名收集群众的签名;有的收集了众多互联网名人们对SOPA提案的看法,这其中包括互联网之父、目前在Google任职的Vint Cerf:“我们的政府在保护版权这个方向已经开始越界了。”
在Mozilla, EFF, Creativecommons, PublicKnowledge, BoingBoing等机构和团体的共同倡议下,campaign网站很快架了起来,并且他们还鼓励网友通过facebook, twitter等进行串联,甚至是在自己的网站上贴上“Stop Censorship”的标签,以示支持。

SOPA与DMCA区别

与现行的《数字千禧年版权法》(The Digital Millennium Copyright Act,后简称“DMCA”)相比,新法案的最大变化在于改变了对于识别出的盗版侵权案例的处理:

DMCA 强调由版权拥有者负责识别侵权内容,在他们向内容发布平台拥有者举报后,平台拥有者可以要求内容上传方将侵权内容撤下,如果内容上传方不撤,版权拥有者可以直接起诉内容上传方;

而在两项新法案中,版权拥有者在识别侵权内容后,可直接要求搜索引擎、互联网广告平台、互联网支付平台屏蔽内容发布平台所有内容,甚至可以要求互联网服务供应商(ISP)直接停止对该平台提供服务。所有司法程序可以在直接端掉内容平台后再进行。

为什么会和Censorship有关

《保护知识产权法》(PROTECT IP Act)和《阻止网络盗版法》(Stop Online Piracy Act),出台的目的为减少盗版电影及音乐的交易,将赋予版权所有方和执法官员两大权力:

1. 切断相关盗版网站链接的权力:法律上美国政府可以以含有盗版链接为名,强制互联网服务商停止对某个网站的解析。换而言之美国政府可以对网站内容(无论内容是来自自身,机器人爬虫或网民发布)进行审核。迫于压力,网站们将不得不进行自我过滤。

2. 要求搜索引擎、支付工具等阻止对这些盗版渠道的访问通道的权力:如果任何盗版网站经查证在美国有用于提供资金帮助的账户或在线账户Paypal,则这些账户将被冻结或取消。

SOPA的未来

据说11月的16日的首次听证本次听证会中有5位都支持SOPA——他们分别来自版权登记局、美国电影协会(MPAA)、Pfizer(一家医药企业)、MasterCard(根据Techdirt的介绍,之所以没选择Visa,是因为Visa反对SOPA提案)、以及AFL-CIO(美国工会),而唯一的一位反提案者则来自Google。

下个月SOPA提案将继续在众议院进行表决。双方博弈的过程中,互联网一方只是反对没有用,还要拿出更好的在线盗版问题解决方案,最后双方才有可能达成妥协。

Happy birthday Vim!

據版本帝考古帝說,Vim是在1991年11月2日發佈了第一个版本。原來Vim和Linux差不多大,也20歲勒~~撒花

Vim後於Linux,所以一開始兩者沒什麼關係。最初Vim最初是为Amiga平台开发的Vi编辑器克隆。Vi克隆出现于80年代末和90年代初,主要原因是Vi的许可证不能自由分发,而克隆则因为采用了没有限制的许可证而得到广泛使用。早期的两个著名克隆是Stevie和Elvis。Vim作者Bram Moolenaar对Amiga平台上的Vi克隆不甚满意,他开始在Stevie基础上开发新的文本编辑器,也就是Vim。Vim意思是Vi IMitation, 後來才改成vi的加強版Vi IMproved.

Vim的前身Vi,它的作者Bill Joy也是傳奇的大Boss...前任Sun的首席科学家,在Berkeley时主持开发了最早版本的BSD,还是sh的作者。传说!他想看看自己能不能写个操作系统,就在三天里写了个自己的Unix, 也就是BSD的前身。另一个传说是,1980年初的时候,DARPA让BBN在Berkley Unix里加上BBN开发的TCP/IP代码。但当时还是研究生的Bill Joy怒了,拒绝把BBNTCP/IP加入BSD,因为他觉得BBN的TCP/IP写得不好。于是Bill Joy自己出手,很快就写出了高性能的伯克利版TCP/IP。
三天里写了個BSD的前身...太打擊人了吧!!!...操作系統拜您了orzorz

close