由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 请评价一下yinwang的这个工作
相关主题
哪位大牛简单说说compiler里的bootstrap是干啥用的?Javascript的Scope问题
所谓FP就是 递归+pattern matching?初学JavaScript,问一个小问题
Backbone 还是angular把Java和浏览器整合可以成为很大的热点
怎么从adsense的iframe里面知道网站的url? (转载)Web技术日报 2015-01-29 Facebook发布React Native
javascript才是未来发展的方向Web技术日报 2015-01-31 大型应用下的 AngularJS 性能
过去十年最成功的语言是JavaScript吧Web技术日报 2015年2月楼
python这种垃圾为什么会盛行??????Angular 2: Built on TypeScript
JavaScript现在很彪悍学做web现在学front-end好还是back-end好?
相关话题的讨论汇总
话题: javascript话题: 编译器话题: 名器话题: 换名话题: 代码
进入Programming版参与讨论
1 (共1页)
n******7
发帖数: 12463
1
说的似乎很nb,但是鉴于他吹nb的历史,不知道多大水
另外他一直吹的pysonar好像github还是挺流行的,这是他唯一拿得出来的东西吧
-----
这种思维方式最近的成功实例,是给 Shape Security 做的一个先进的 JavaScript 混
淆器(obfuscator)和对集群(cluster)管理系统的改进。不要小看了这个 JS 混淆
器,它的强度跟 uglify 之类的开源工具比,是天上地下的。它不但包含了 uglify 的
变量换名等基本功能,而且含有专门针对人类和编译器的复杂化,使得没有人能看出一
点线索这个程序到底要干什么,让最先进的 JS 编译器也无法把它简化,从而让人有可
以理解它的机会。
其实这个混淆器也是一种编译器,只不过它把 JavaScript 翻译成更加难读的形式。在
这个项目中,由于失之毫厘就可以差之千里,我采用了从 Chez Scheme 编译器学过来
的,非常严密的测试方法。对每一个编译器的步骤(pass),我都给它设计一些正好可
以测到这个步骤的输入代码(比如,具有函数定义的,for循环,try-catch的,等等)
。Pass 输出的代码,经过 JavaScript 解释器执行,把结果跟原来程序的执行结果对
比。每一个测试程序,经过每一个 pass,输出的中间结果都跟标准结果进行对比,如
果错了就表明那个 pass 有问题,出错的小程序会指出大概是哪一个部分出了问题。遵
循小巧,不冗余,不重复的原则,我总共只写了40多个非常小的 JavaScript 程序。由
于这些测试涵盖了 JavaScript 的所有构造而且几乎不重复,它们能够准确的定位到错
误的改动。最后,这个 JS 混淆器能够正确的转换像 AngularJS 那么大的项目,确保
语义的正确,让人完全无法读懂,而且能有效地防止被优化器(比如 Closure
Compiler)简化掉。
相比之下,过度鼓吹测试和可靠性的人,并没能制造出这么高质量的混淆器。其实在我
进入团队之前,里面的两三位高手已经做了一个混淆器,项目延续了好多个月。这片代
码一直没法用,因为它的换名部件总是会在某些情况下输出错误的代码。不是100%的正
确,这对于程序语言的转换器来说,是不可接受的。换名只是我的混淆器里的一个步骤
,它还包含大概十个类似的步骤,可以把代码进行各种转换。
在实现换名器的时候,队友们让我直接拿他们以前写的换名代码过来,把 bug 修好就
可以。然而看了代码之后,我发现这代码没法修,因为它采用了错误的思路,缝缝补补
也不可能达到100%的正确,而且明显效率低下,所以我决定自己重写一个。由于轻车熟
路,我只花了一下午的时间,不费吹灰之力,就完成了一个正确的换名器,它完全符合
JavaScript 的语义,各种奇葩的作用域规则,而且结构非常简单。说白了,这个换名
器也是一种解释器。对解释器的深刻理解,让我可以很容易的写出任何语言的换名器。
然后历史又再次重演了 ;) 队友们听说我花一下午重写了一个换名器,非常紧张,咋呼
地跟我说:“你知道我们的换名器是花了多少个月的时间做出来的吗?你知道我们写了
多少测试来保证它的正确性吗?你现在一下午做出来一个新的,你如何能保证它的正确
!” 然而事实是,他们花了这么多个月,耗费这么多人力(包括一个早年从 Cornell
编译器领域毕业的 PhD,曾在 Apple 做编译器工作的元老),写了这么多的测试,做
出来的换名器却仍然有 bug。当我把我的测试和几个大型一点的 open source 项目(
AngularJS, Backbone 等)放进他们的换名器之后,就发现有些地方出问题了。而所有
的测试和 open source 项目通过我的换名器,却得到完全正确的代码。
x****u
发帖数: 44466
2
王垠的工作介绍用模板生成就够了

【在 n******7 的大作中提到】
: 说的似乎很nb,但是鉴于他吹nb的历史,不知道多大水
: 另外他一直吹的pysonar好像github还是挺流行的,这是他唯一拿得出来的东西吧
: -----
: 这种思维方式最近的成功实例,是给 Shape Security 做的一个先进的 JavaScript 混
: 淆器(obfuscator)和对集群(cluster)管理系统的改进。不要小看了这个 JS 混淆
: 器,它的强度跟 uglify 之类的开源工具比,是天上地下的。它不但包含了 uglify 的
: 变量换名等基本功能,而且含有专门针对人类和编译器的复杂化,使得没有人能看出一
: 点线索这个程序到底要干什么,让最先进的 JS 编译器也无法把它简化,从而让人有可
: 以理解它的机会。
: 其实这个混淆器也是一种编译器,只不过它把 JavaScript 翻译成更加难读的形式。在

d***a
发帖数: 13752
3
他做了一个JavaScript的类似于简化型parser的工具, 分析现有JavaScript的程序,再
输出混乱化但运行等价的程序。这个parser的实现比一个完整的JavaScript的parser要
简单,系统也没有执行的部分,所以实现快,运行效率也高。但也因为如此,输出的程
序和原程序有一定的可能性,运行不等价,这就出了bug。他写的工具比现有的工具出
bug的可能性小。
王垠这家伙是个不错的工匠。但计算机这行,并不认为一个好的工匠就牛。大家公认的
牛人,要么象图灵那样在理论上比别人牛一大截,或者在研究中开创一个全新的领域;
要么象Jobs, Gates, Larry Page那样搞出不得了的产品。象王垠这个水平的工匠,重
点大学科班出身里一抓一大把,他虽然不错,也不稀奇。但他自认这样的就是牛人,和
大家对牛人的认知不一样。
g****t
发帖数: 31659
4
He is an excellent Blogger.

【在 d***a 的大作中提到】
: 他做了一个JavaScript的类似于简化型parser的工具, 分析现有JavaScript的程序,再
: 输出混乱化但运行等价的程序。这个parser的实现比一个完整的JavaScript的parser要
: 简单,系统也没有执行的部分,所以实现快,运行效率也高。但也因为如此,输出的程
: 序和原程序有一定的可能性,运行不等价,这就出了bug。他写的工具比现有的工具出
: bug的可能性小。
: 王垠这家伙是个不错的工匠。但计算机这行,并不认为一个好的工匠就牛。大家公认的
: 牛人,要么象图灵那样在理论上比别人牛一大截,或者在研究中开创一个全新的领域;
: 要么象Jobs, Gates, Larry Page那样搞出不得了的产品。象王垠这个水平的工匠,重
: 点大学科班出身里一抓一大把,他虽然不错,也不稀奇。但他自认这样的就是牛人,和
: 大家对牛人的认知不一样。

n******7
发帖数: 12463
5
我大致知道他做了个啥
问题是他claim了三点:
1. 这个东西比uglify功能更全:
“不要小看了这个 JS 混淆器,它的强度跟 uglify 之类的开源工具比,是天上地下的
。它不但包含了 uglify 的变量换名等基本功能,而且含有专门针对人类和编译器的复
杂化,使得没有人能看出一点线索这个程序到底要干什么,让最先进的 JS 编译器也无
法把它简化,从而让人有可以理解它的机会。”
我看了一下UglifyJS 和 UglifyJS2 都是5K+ star的nb项目。他做的要是比这个功能更
多,我看可以一战成名,也不用老提pysonar了
2.bug free:
“我不知道他们怎么好意思说出这样的话来,因为事实是,他们花了这么多个月,耗费
这么多人力,写了这么多的测试,做出来的换名器却仍然有 bug,没法用。当我把我写
的测试和几个大点的 open source 项目(AngularJS, Backbone 等)放进他们的换名
器之后,就发现有些地方出问题了,而所有的测试和 open source 项目通过我的换名
器,却得到完全正确的代码。另外经过性能测试,我的换名器速度要快四倍的样子。”
3. 关键是这一切,只用了一个下午:
“由于轻车熟路,我只花了一下午的时间,就完成了一个正确的换名器,它完全符合
JavaScript 的语义,各种奇葩的作用域规则,而且结构非常简单。说白了,这个换名
器也是一种解释器。对解释器的深刻理解,让我可以很容易的写出任何语言的换名器。”
我觉得他这样牛的,每个月只用花半天在github找个牛逼项目,再花半天写代码秒杀它
,就不愁名利双收了。剩下的29天可以用来找艺术生女朋友。

【在 d***a 的大作中提到】
: 他做了一个JavaScript的类似于简化型parser的工具, 分析现有JavaScript的程序,再
: 输出混乱化但运行等价的程序。这个parser的实现比一个完整的JavaScript的parser要
: 简单,系统也没有执行的部分,所以实现快,运行效率也高。但也因为如此,输出的程
: 序和原程序有一定的可能性,运行不等价,这就出了bug。他写的工具比现有的工具出
: bug的可能性小。
: 王垠这家伙是个不错的工匠。但计算机这行,并不认为一个好的工匠就牛。大家公认的
: 牛人,要么象图灵那样在理论上比别人牛一大截,或者在研究中开创一个全新的领域;
: 要么象Jobs, Gates, Larry Page那样搞出不得了的产品。象王垠这个水平的工匠,重
: 点大学科班出身里一抓一大把,他虽然不错,也不稀奇。但他自认这样的就是牛人,和
: 大家对牛人的认知不一样。

n******7
发帖数: 12463
6
另外我在想
他这些牛逼的blog用中文写,是怕被他所说的猪队友看到,跟他较真吧
我记得他这个blog昨天还强调了一个猪队友还是美国top university的phd,专门做
compiler的,今天找不到那句话了,哈哈
他真的适合回国吹nb,比在blog上号召捐款要靠谱
w***g
发帖数: 5958
7
从技术角度讲他写得很好. 我也是很少写测试的. 只要group足够小, 怎么样都可以.
很多人都可以一下午写出个什么东西, 但是没有人能够一星期五个下午天天都出东西.
不出东西的时候就要做别事情来磨洋工. 比如扯皮, 写测试啥的.

【在 n******7 的大作中提到】
: 另外我在想
: 他这些牛逼的blog用中文写,是怕被他所说的猪队友看到,跟他较真吧
: 我记得他这个blog昨天还强调了一个猪队友还是美国top university的phd,专门做
: compiler的,今天找不到那句话了,哈哈
: 他真的适合回国吹nb,比在blog上号召捐款要靠谱

n****l
发帖数: 1739
8
具体他的工作如何不知道,但王垠关于测试本身这个话题说的没错。TDD不可能适用于
所有的项目。 test early, test often有时就是浪费时间。
c*****e
发帖数: 3226
9
you are not paid to write testing code. 这是 extreme programming 作者的原话

【在 n****l 的大作中提到】
: 具体他的工作如何不知道,但王垠关于测试本身这个话题说的没错。TDD不可能适用于
: 所有的项目。 test early, test often有时就是浪费时间。

n****l
发帖数: 1739
10
不太理解这些 methodology guru. 就像Jamie Zawinski说的: you are here to ship
the products. 他说一些名校CS毕业的,懂OOP, C++, deisgn pattern,
multithreaded programming, 牛B哄哄。 but they failed to ship a good working
browser.

【在 c*****e 的大作中提到】
: you are not paid to write testing code. 这是 extreme programming 作者的原话
相关主题
过去十年最成功的语言是JavaScript吧Javascript的Scope问题
python这种垃圾为什么会盛行??????初学JavaScript,问一个小问题
JavaScript现在很彪悍把Java和浏览器整合可以成为很大的热点
进入Programming版参与讨论
W**********U
发帖数: 132
11
搭车问一个转换器/编译器的问题:有没有一种转换器/编译器将一个任意给定的.exe文
件自动转换成另外一个功能相同,但是结构非常不同(比如堆栈,heap非常不同)的.
exe 程序?
有这种开源的工具吗?
谢谢。

【在 n******7 的大作中提到】
: 另外我在想
: 他这些牛逼的blog用中文写,是怕被他所说的猪队友看到,跟他较真吧
: 我记得他这个blog昨天还强调了一个猪队友还是美国top university的phd,专门做
: compiler的,今天找不到那句话了,哈哈
: 他真的适合回国吹nb,比在blog上号召捐款要靠谱

d***a
发帖数: 13752
12
他"claim"了三点。大家不知道别的当事人是如何说的。就算他做到了又如何?这就象
一个拿A-的学生做出了一道题,而拿B/C的学生觉得那题很难,那学生就觉得自己很牛
了。
“不要小看了这个 JS 混淆器,它的强度跟 uglify 之类的开源工具比,是天上地下的
。它不但包含了 uglify 的变量换名等基本功能,而且含有专门针对人类和编译器的复
杂化,使得没有人能看出一点线索这个程序到底要干什么,让最先进的 JS 编译器也无
法把它简化”
这听起来非常不靠谱,除非王垠在理论上证明了这一点。黑客难道是吃素的?
"我采用了从 Chez Scheme 编译器学过来的,非常严密的测试方法。对每一个编译器的
步骤(pass),我都给它设计一些正好可以测到这个步骤的输入代码(比如,具有函数
定义的,for循环,try-catch的,等等)。Pass 输出的代码,经过 JavaScript 解释
器执行,把结果跟原来程序的执行结果对比。"
这一段听起来靠谱,王垠是用了比较规范,有针对性的测试方法。
“由于轻车熟路,我只花了一下午的时间,不费吹灰之力,就完成了一个正确的换名器
,它完全符合JavaScript 的语义,各种奇葩的作用域规则,而且结构非常简单。说白
了,这个换名器也是一种解释器。对解释器的深刻理解,让我可以很容易的写出任何语
言的换名器。”
这一段有点吹了。如果他真的那有有信心,那前面他为什么要用“非常严密的测试方法
”?
“相比之下,过度鼓吹测试和可靠性的人,并没能制造出这么高质量的混淆器。”
是的,有些精巧的软件,必须要有清晰的程序结构和精致可靠的算法。测试只是起辅助
作用。特别是操作系统,编译器,并行系统(not exclusive),有很多做法必须要证
明不出错才能用,不能说测上一万遍没看到错就认为对了。王垠说的一点都没有错。但
是,对科班出身的人来说,如果读书的时候上课听讲了,这不是常识吗?
似乎王垠总是和水平比他低的人工作,因此就感觉良好,这一点其实是问题。有一种可
能性,也许他从来没有一个公司的核心部门或核心小组工作过。我自己也在大公司做过
一段时间,公司里的技术牛人有非常牛的,难道王垠就从未见过。

【在 n******7 的大作中提到】
: 我大致知道他做了个啥
: 问题是他claim了三点:
: 1. 这个东西比uglify功能更全:
: “不要小看了这个 JS 混淆器,它的强度跟 uglify 之类的开源工具比,是天上地下的
: 。它不但包含了 uglify 的变量换名等基本功能,而且含有专门针对人类和编译器的复
: 杂化,使得没有人能看出一点线索这个程序到底要干什么,让最先进的 JS 编译器也无
: 法把它简化,从而让人有可以理解它的机会。”
: 我看了一下UglifyJS 和 UglifyJS2 都是5K+ star的nb项目。他做的要是比这个功能更
: 多,我看可以一战成名,也不用老提pysonar了
: 2.bug free:

w****e
发帖数: 1883
13
把JavaScript 换成瓶子,解释器换成自行车,这篇文章就可以原封不动地送给老邱发
表了。
n******7
发帖数: 12463
14
OK,我大概确认他是哪一类人了
这样既可以解释为啥他真心觉得自己NB,也可以解释为啥他还没真的成就
编程的物质门槛这么低,即使情商奇差,有能力的人也应该能在github之类的地方成名

【在 d***a 的大作中提到】
: 他"claim"了三点。大家不知道别的当事人是如何说的。就算他做到了又如何?这就象
: 一个拿A-的学生做出了一道题,而拿B/C的学生觉得那题很难,那学生就觉得自己很牛
: 了。
: “不要小看了这个 JS 混淆器,它的强度跟 uglify 之类的开源工具比,是天上地下的
: 。它不但包含了 uglify 的变量换名等基本功能,而且含有专门针对人类和编译器的复
: 杂化,使得没有人能看出一点线索这个程序到底要干什么,让最先进的 JS 编译器也无
: 法把它简化”
: 这听起来非常不靠谱,除非王垠在理论上证明了这一点。黑客难道是吃素的?
: "我采用了从 Chez Scheme 编译器学过来的,非常严密的测试方法。对每一个编译器的
: 步骤(pass),我都给它设计一些正好可以测到这个步骤的输入代码(比如,具有函数

n******7
发帖数: 12463
15
还真是像
全美国就我可以做到
哈哈

【在 w****e 的大作中提到】
: 把JavaScript 换成瓶子,解释器换成自行车,这篇文章就可以原封不动地送给老邱发
: 表了。

e*******o
发帖数: 4654
16
王是比一般人强些 毕竟研究过compiler
不过牛的程度还仅限于得自己写blog给别人解释
我最近看过一段话将两种聪明人
intellectual secure vs insecure
王的悲剧自已 insecure

【在 n******7 的大作中提到】
: 还真是像
: 全美国就我可以做到
: 哈哈

n**u
发帖数: 6997
17
要是牛,就不会沦落到去川大读本科。
就算高考发挥失常也不至于去这种档次的学校。。。
不过嘴炮他到了一流的水平了。。
也快40了。。还整天发这些东西,也真为难他了
还以为自己25岁呢。。。
R*********4
发帖数: 293
18

王是比一般人强些 毕竟研究过compiler
技术比王好的人应该很多,毕竟世界这么大,没有他们这种人应该很无聊。
昨天我也觉得见到了类似的一个,比较不错,,一个教web secure的教授, 公司五年
聘请她,她从
没去过公司,因为她从不买车,从不用信用卡,从不买保险,就通过网络开会,( ̄▽
 ̄)",编任何东西,第一件事就是扔掉所有framework。。。。。。。她弄个框架,程
序员往里面填。。。

【在 e*******o 的大作中提到】
: 王是比一般人强些 毕竟研究过compiler
: 不过牛的程度还仅限于得自己写blog给别人解释
: 我最近看过一段话将两种聪明人
: intellectual secure vs insecure
: 王的悲剧自已 insecure

D****y
发帖数: 2207
19
我不认为一个把compiler等同于parser的人是研究过Compiler的

王是比一般人强些 毕竟研究过compiler

【在 e*******o 的大作中提到】
: 王是比一般人强些 毕竟研究过compiler
: 不过牛的程度还仅限于得自己写blog给别人解释
: 我最近看过一段话将两种聪明人
: intellectual secure vs insecure
: 王的悲剧自已 insecure

x****u
发帖数: 44466
20
王垠对编译器优化方面的知识几乎为零

【在 D****y 的大作中提到】
: 我不认为一个把compiler等同于parser的人是研究过Compiler的
:
: 王是比一般人强些 毕竟研究过compiler

相关主题
Web技术日报 2015-01-29 Facebook发布React NativeAngular 2: Built on TypeScript
Web技术日报 2015-01-31 大型应用下的 AngularJS 性能学做web现在学front-end好还是back-end好?
Web技术日报 2015年2月楼学习JavaScript的好书?
进入Programming版参与讨论
w***g
发帖数: 5958
21
他是做pl的,正常。搞编译器优化那些人,没有pl知识也很常见,比如Rob Pike.

【在 x****u 的大作中提到】
: 王垠对编译器优化方面的知识几乎为零
H**r
发帖数: 10015
22
王垠专门发文章说过parser不是核心的东西
另外他是PL不是Compiler

【在 D****y 的大作中提到】
: 我不认为一个把compiler等同于parser的人是研究过Compiler的
:
: 王是比一般人强些 毕竟研究过compiler

H**r
发帖数: 10015
23
TDD最大的危害是让管理层认为测试了就能保证质量,而有些脑子不好的程序员也认为
保证代码质量的关键是测试, TDD是神药

【在 n****l 的大作中提到】
: 具体他的工作如何不知道,但王垠关于测试本身这个话题说的没错。TDD不可能适用于
: 所有的项目。 test early, test often有时就是浪费时间。

o******1
发帖数: 275
24
听起来王同学是流行的民科斗士, 频道没有根team对上
x****u
发帖数: 44466
25
他对pl的理解也仅限于课本部分作业题啊

【在 w***g 的大作中提到】
: 他是做pl的,正常。搞编译器优化那些人,没有pl知识也很常见,比如Rob Pike.
w********m
发帖数: 1137
26
说的都对。
TDD就是搞政治斗争的工具。
这年头说真话的人不多了。
1 (共1页)
进入Programming版参与讨论
相关主题
学做web现在学front-end好还是back-end好?javascript才是未来发展的方向
学习JavaScript的好书?过去十年最成功的语言是JavaScript吧
typescript会取代javascript吗?python这种垃圾为什么会盛行??????
IT是一个从业人员素质越来越差的领域JavaScript现在很彪悍
哪位大牛简单说说compiler里的bootstrap是干啥用的?Javascript的Scope问题
所谓FP就是 递归+pattern matching?初学JavaScript,问一个小问题
Backbone 还是angular把Java和浏览器整合可以成为很大的热点
怎么从adsense的iframe里面知道网站的url? (转载)Web技术日报 2015-01-29 Facebook发布React Native
相关话题的讨论汇总
话题: javascript话题: 编译器话题: 名器话题: 换名话题: 代码