PhantomJS+CasperJS备份微博

备份微博通常调用新浪微博提供的API就可以了,但是我并不关注文本数据,更需要得到一条微博原原本本的显示内容,就像archive.org对网站进行备份一样,可以将微博截图快照下来。

对于网页快照,可以使用PhantomJS进行截图。PhantomJS是一个支持JavaScript API的无界面、运行于服务端的WebKit环境(Headless WebKit with JavaScript API),Headless这里的意思是渲染页面在后台完成。PhantomJS可以用来进行前端自动化测试、网络状况监控、网页渲染后自动截图等。但是微博快照和网页快照不同,微博快照在网页渲染后,只是截取页面上指定的区域(DOM),依赖于PhantomJS的CasperJS提供了更强大的函数封装、方法和语法糖,可以完成定义排序浏览器导航步骤、填充提交表单、点击跟踪链接、指定DOM元素区域截图等任务,当然也可以实现备份微博。

首先使用CasperJS模拟用户登陆微博过程,填写用户名密码并提交表单。

var casper = require("casper").create();
casper.start('http://www.weibo.com/login.php', function() {
    this.fill('div[class="W_login"]', {'loginname':'YOURUSERNAME'}, false);
    this.fill('div[class="W_login"]', {'password':'YOURPASSWORD'}, false);
    this.click('a[class="W_btn_d"]');
});

用CasperJS给页面上指定的区域(DOM)截图非常简单:调用captureSelector,给页面中’.WB_feed_type’选择器匹配的元素截图,输出的文件名为微博的mid号。

casper.thenOpen('http://weibo.com/u/UID',function() {
    mid=this.getElementAttribute(".WB_feed_type", "mid");
    this.captureSelector(mid+'.png',".WB_feed_type");
});

最后获得的微博截图效果如下,加入cron定时任务就能自动备份。现在个人微博首页只显示5条最新微博,可以每次将5条微博全部备份,同时设定合理的更新间隔时间,可以避免只备份最新微博但是在更新间隔时间里新增了多条微博的问题。类似的,稍加改动还可以应用于备份twitter豆瓣的timeline。

weibo_capture

编程语言的网络

最近在上Coursera的SNA社交网络分析,翻之前学生做的大作业压力好大,有做知识网络Network map of Knowledge and Art,有做俄罗斯选举的投票网络,还有类似的哲学的发展网络。按照哲学家网络的思路,我拿编程语言的网络来练个手,每种语言是一个节点,如果语言B受语言A的影响,则B向A连边,比如Java和Python都有受Smalltalk的OO影响,smalltalk又受Lisp,Logo影响。

数据获取
数据来自DBpedia语义数据库,简单的说,它收集的是维基百科的数据,然后经过一些处理得到结构化的语义web。互联网发明人蒂姆·伯纳斯-李曾在TED演讲”关联数据”,互联网最初的设计只是想把文档放在一起而已,但是现在互联网还是有巨大的可释放潜力,我们从网上得到的数据不是我们想要的数据。在DBpedia如果你去找John McCarthy,会包含了与John McCarthy相关的信息,它们被联系到了一起,比如他的导师、他所带出来的学生、出生年、出生地、获得的成就等,下一代搜索引擎比如Wolfram|Alpha就是这么工作的。
然后用SparQL,它将Web2.0和Semantic web两种新的web技术联系起来,你可以直接在web页写类似sql语句进行查询编程语言以及该编程语言收到那些语言的影响(要翻墙):

SELECT * WHERE {
?p a <http://dbpedia.org/ontology/ProgrammingLanguage>.
?p <http://dbpedia.org/property/influencedBy> ?influencedBy.
}

拿到数据初始化/归一化,导出为csv。

数据可视化
使用Gephi进行数据可视化,这是个开源的复杂网络分析软件,没教程也能上手。这里生成了552 nodes, 1011 edges的网络,平均路径长度3.126,Force Atlas Layout,使用HITS算法提炼枢纽节点,可见Lisp, Smalltalk, C, Java, Scheme, Pascal在语言发展中的地位,不过ALGOL和Fortran不是很大,估计是太古老太传说了,新语言出度没有传递给这两者。
颜色按Community分类:绿色是functional language和logic language,橙色是object-oriented,淡蓝色Javascript,Pascal和Ada,ALGOL在一起,Lisp和Scheme分家了,看看就好。

network

节点大小按Degree设置,标出了一些有代表性的语言 比如R,Logo, Prolog, COBOL
network

如果把C语言和他的邻居受C语言影响和影响C语言的节点筛选出来,C的入度有54是所有节点里最大的,庞大的C家族一目了然:
红色表示出度,C的前身是B,原型是ALGOL 60,受Fortran和PL/I影响用= operator来表示赋值,而非ALGOL的:= operator。
蓝色入度表示C影响了C++, Python, Perl, JavaScript等语言,大部分都借鉴了C的语法。
network

Python,胶水语言,借鉴了Perl, C++, Lisp, Java, Haskell, C, ALGOL, Dylan, Icon等等等等
network

Haskell出度14是最大的,除了Lisp, Scheme, ML/Standard ML好多不认识的语言,冷艳高贵orz
network

我把Lisp, C++, Smalltalk, Java, R, javascript也做了图,放在了豆瓣相册

最后感觉编程语言网络好看有余营养不足:没有时间信息,层次也没有树状清晰。不过可以像豆瓣代码大爆炸一样按时间添加节点效果会很赞。除了分析枢纽Hub节点和平均路径长度应该还有可以挖掘的地方。

O’Reilly动物丛书颜色分析

在上次O’Reilly情人节福利文章里提到O’Reilly动物丛书颜色和内容的联系,于是拿到了360本O’Reilly丛书的旧数据,使用Python+networkx+matplotlib进行分析:

按颜色关键词排序
对书名进行分词作为关键词,统计频次排序。这里篇幅限制列出了出现大于1次的keywords列表,很明显动物丛书颜色是有主题的,比如最新的Data Science Kit都是红色封面。

PMS 301C
微软系列
[(‘.net’, 12), (‘windows’, 10), (‘visual’, 7), (‘basic’, 6), (‘c#’, 6), (‘2000’, 5), (‘essentials’, 4), (‘excel’, 3), (‘win32’, 3), (‘services’, 3), (‘writing’, 2), (‘framework’, 2), (‘server’, 2), (‘security’, 2), (‘access’, 2), (‘macros’, 2), (‘active’, 2), (‘language’, 2), (‘vb.net’, 2), (‘system’, 2), (‘word’, 2),(‘asp.net’, 2), (‘administration’, 2), (‘transact-sql’, 2),(‘applications’, 2)]
PMS 3272C
Web相关
[(‘web’, 12), (‘xml’, 7), (‘mx’, 5), (‘javascript’, 4), (‘apache’, 4), (‘php’, 4), (‘essentials’, 3), (‘flash’, 3), (‘xslt’, 3), (‘html’, 3), (‘actionscript’, 3), (‘services’, 3), (‘practical’, 2), (‘cd’, 2), (‘privacy’, 2), (‘perl’, 2), (‘bookshelf’, 2), (‘http’, 2), (‘applications’, 2)]
PMS 313C
神兽Perl
[(‘perl’, 25), (‘best’, 3), (‘journal’, 3), (‘perl/tk’, 3), (‘regular’, 2), (‘graphics’, 2)]
PMS 165C
Oracle系列
[(‘oracle’, 31), (‘pl/sql’, 7), (‘sql’, 3), (‘tuning’, 2), (‘sql*plus’, 2), (‘performance’, 2), (‘database’, 2), (‘essential’, 2), (‘dbas’, 2)]
PMS 2607C
Java相关
[(‘java’, 33), (‘enterprise’, 7), (‘javaserver’, 3), (‘javabeans’, 3), (‘best’,3), (‘applications’, 3), (‘practices’, 3), (‘xml’, 2), (‘web’, 2), (‘jdbc’, 2),(‘data’, 2), (‘struts’, 2), (‘weblogic’, 2), (‘vol.’, 2), (‘servlet’, 2), (‘pages’, 2), (‘database’, 2), (‘jakarta’, 2), (‘workbook’, 2)]
PMS 246C
语言+工具
[(‘python’, 6), (‘c’, 6), (‘c++’, 5), (‘mysql’, 3), (‘shell’, 3), (‘awk’, 3), (‘gnu’, 3), (‘practical’, 3), (‘vi’, 2), (‘unix’, 2), (‘sed’, 2), (’emacs’, 2), (‘uml’, 2), (‘editor’, 2), (‘sql’, 2), (‘using’, 2), (’embedded’, 2), (‘cvs’, 2),(‘software’, 2)]
PMS 2725C
Mac OS X
[(‘mac’, 7), (‘x’, 7), (‘os’, 7), (‘unix’, 4), (‘cocoa’, 3), (‘geeks’, 2), (‘panther’, 2)]
PMS Reflex Blue
网络通信
[(‘networks’, 4), (‘using’, 4), (‘cisco’, 4), (‘network’, 3), (‘internet’, 3), (‘sendmail’, 3), (‘system’, 3), (‘administration’, 3), (‘samba’, 2), (‘essential’, 2), (‘routers’, 2), (‘802.11’, 2), (‘dns’, 2), (‘lists’, 2), (‘wireless’, 2),(‘protocols’, 2)]

orelly

按书名关系可视化

按颜色聚类就没有意义了,所以就按书名建图:如果两本书书名有相同的关键词则连边。把无信息量水词pocket, reference,cookbook, programming, guide, definitive, learning, designing, managing, mastering, building加入stopwords,剩下书名包含的信息量更有限了,每个节点的度不大。

作图用了Fruchterman-Reingold force-directed algorithm,同其他书关系比较多的书将绘制的比较靠近中心,而关系较少的会在相对靠外的位置。可以看出橙色和紫色封面的书有比较好的聚类,因为橙色关键字是Oracle紫色关键字是Java,青色的有Perl系列的,右下粉色的是Python系列。

orelly-with-labels

PS1: 不是统计专业的,也不知道还有什么信息可以挖掘,计算closeness, betweenness, Hub节点在这里ms没有实际意义,再去解下最大团Maximum Clique啥的。
PS2: 要是能找到更全更新的O’Reilly动物丛书数据就好啦!

O’Reilly情人节福利

oreilly

今年情人节O’Reilly给程序猿们也带来了福利:所有粉红色的电子书半价。FOREVER ALONE!

说到O’Reilly出品的动物丛书,程序猿无人不知。这系列书最显著的特点就是封面上手绘的动物,所以也有动物世界/饲养员指南的别名。考据癖有专门一篇文章解疑了为什么O’Reilly用动物形象做书籍封面,原文可见Origin of Species: A History of O’Reilly Animals

设计者Edie Freedman姐姐在设计动物丛书的第一本书时(上图中间),她接触到UNIX、vi、sed&awk、lex、yacc这些不知所云的词,让她觉得这些词都像来自于当时正流行的游戏“龙与地下城”,于是她心目中UNIX程序员的形象就是一个龙与地下城的玩家。Edie在19世纪的木版画中找到了灵感,画中诡异的动物刚好和那些高深的UNIX术语是绝配。还有一件更严肃的事情,出版动物丛书让Edie更加注意到生态问题。很多封面动物已经濒临灭绝,而在版画绘制的时期,这些动物还是大量存活的。O’Reilly也希望他们使用这些动物做封面能够引起人们对动物保护的关注。

关于O’Reilly动物丛书颜色和内容有没有联系,应该是有,不过没有查到具体说明和相似的问题,不过有所有O’Reilly丛书数据,可以根据颜色然后分析关键词,就先在这挖个坑。FOREVER ALONE!

Unix隐藏文件的由来

今天在豆瓣上看到的文章,原文来自Rob Pike 8月发表在google plus上关于Unix dot files实现的教训,才知道Unix以.开头的文件被作为隐藏文件是个不经意的结果:

在当年Unix的文件系统在设计过程中,加入了.(当前路径)和..(上层路径)来方便路径定位。但是在输入ls的时候,.和..却错误地被显示,所以Ken或Dennis加入了用汇编写的判断,用C写出来就是:

if (name[0] == '.') continue;

其实正确的写法本应是:

if (strcmp(name, ".") == 0 || strcmp(name, "..") == 0) continue;

于是被简写的代码无心插柳:出现了隐藏文件(dot file)的思路。其实Unix就是个各种bug不好用的系统,但是后来各种bug习惯了,就成了约定俗成的feature。就好像博主是个好人,但是好人卡拿多了习惯了,最后就forever alone了<-解释给猪肉肉听!

Rob Pike吐槽这是个捷径的教训,他认为应该是文件来发挥这个作用,而不是以文件的命名方式决定。

For those who object that dot files serve a purpose, I don’t dispute that but counter that it’s the files that serve the purpose, not the convention for their names.

前半句没看懂,被自己蠢哭>3<类似于DOS and MS Windows系统?附个资料~Hidden file and hidden directory

版本控制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