Posts by Category

Scala

简单代码克隆检测(经验性分析初版)

less than 1 minute read

Published:

这周主要按照上次开会的内容作了两个实验,第一个是统计20个github上star最多的scala项目中高阶函数的使用情况,第二个是借助github api 查看高阶函数所在文件的创建和修改的人时候固定。

简单克隆代码检测(Scala函数式编程初探)

2 minute read

Published:

函数式编程又称泛函编程的一种编程泛型,他将计算机运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。函数编程语言最重要的基础是lambda演算。

简单代码克隆检测(四)(提取二进制数据)

less than 1 minute read

Published:

按照Michele等人的论文,加下来应该提取的特征是流程图和二进制特征,但是由于流程图提取的过程中出现很多问题,所以今天我先把二进制代码特征提取看了下。

简单代码克隆检测(三)(精简数据)

less than 1 minute read

Published:

今天主要是解决昨天的问题,第二个特征提取的clone对过多,导致很多较短的方法也被误认为是clone对,今天做的实验室将方法的长度进行了限制,

简单代码克隆检测二(AST node)

less than 1 minute read

Published:

今天主要将论文中所说第二个特征 AST 节点类型提取出来,然后输入到模型中进行了验证

简单代码克隆检测一(AST leaf)

1 minute read

Published:

今天主要将昨天得到的数据,放到之前看到的模型中跑了一下,看了一下效果,简单叙述一下实验。

  • 实验思路:
    • 将提取的Scala叶子节点的特征作为文本数据,输入到AutoenCODE中 :AutoenCODE is a Deep Learning infrastructure that allows to encode source code fragments into vector representations, which can be used to learn similarities. https://github.com/micheletufano/AutoenCODE 基本上所有的代码这个网站已经提供了,所以只要将代码clone到本地,配置一下环境就可以开始我们的实验。具体的AutoenCODE的原理,我会在以后的博客中详细的解释,本篇博客主要讲如何使用这个框架。
  • 实验步骤:
    • 按照AutoenCODE给的教程,第一步是将我们整理的数据转化成词向量,这里他使用的工具是word2vec,这里注意一下,他的这个word2vec需要build但是windows系统不支持这个build,所以我将转化词向量的这部分的工作转移到了centos服务器上进行,最终得到了测试样本的所有的词向量的数据。
    • 接下来就将这个词向量输入到Recursive Autoencoder(论文中提及是一个斯坦福的情感分析器)中去,最终得到五个结果文件(这里提及一点,训练时间实在是太长了,源代码是使用matlab写的。27000条数据整整跑了一个小时,而且CUP满负荷运行,可能是我的电脑配置低,之后需要优化)。分别是:
      • data.mat contains the input data including the corpus, vocabulary (a 1-by-Vcell array), and We (the m-by-Vword embedding matrix where m is the size of the word vectors). So columns of We correspond to word embeddings.
      • corpus.dist.matrix.mat contains the distance matrix saved as matlab file. The values in the distance matrix are doubles that represent the Euclidean distance between two sentences. In particular, the cell (i,j) contains the Euclidean distance between the i-th sentence (i.e., i-th line in corpus.src) and the j-th sentence in the corpus.
      • corpus.dist.matrix.csv contains the distance matrix saved as .csv file.
      • corpus.sentence_codes.mat contain the embeddings for each sentence in the corpus. The sentence_codes object contains the representations for sentences, and the pairwise Euclidean distance between these representations are used to measure similarity.
      • detector.mat contains opttheta (the trained clone detector), hparams, and options.

AST树提取进展

less than 1 minute read

Published:

今天主要把昨天没有做完的工作进行了扩展,由提取单一文件的叶子节点扩展到提取到整个项目的叶子节点,然后将类级别的数据修改成方法级别的数据

  • 实验步骤:
    • 按照昨天写的代码,只需要加一个循环遍历文件的函数就可以了 图片描述然后第一个问题出现了,scala meta 这个工具还不是很成熟,对于部分文件在parse的时候会抛出异常 图片描述 在网上查了好久,网上也有许多人遇到这个问题,但是scala meta并没有提供解决的办法。经过不懈的努力,最终在评论区找到了解决方法,这个bug主要是s"xxxxxxx"后面直接换行引起的(黑人问号),只要在\n后面加一个空格就可以了(黑人问号)。 图片描述 所以我就对我们输入的数据进行了预处理,所有包含字符串s"xxxxx"的行的\n都进行了变换。 图片描述
    • 第二个问题,嵌套函数的问题,因为我们测试的数据是在方法级别上的进行抽取,所以就会出现嵌套函数的问题,具体的嵌套函数的示例如下图所示: 图片描述 在这里的问题主要是将子函数抽取出来作为一条数据还是将子函数作为一条像if语句那样的句子作为父函数的一部分,经过跟几位老师讨论,我们决定采用第一种方式,原因是第一子函数的粒度小,第二就是在函数的功能上面还是子函数为主,对于第四种类型的代码克隆的判断来说更加有利。所以我利用栈的思想将子函数剥离出来:图片描述
      最终的结果是: 图片描述 其中13是父函数,12是子函数。
  • 最终结果:
    • 成功提取spark代码里面的27042条样本,明天开始进行测试算法效果,并且再读一遍论文,整理一下文档 图片描述 加油!!!! 还要好好学一下英语和线代和算法!!!

AST

less than 1 minute read

Published:

Scala AST 叶子节点提取

  • 背景:
    • 前几天由于考试没有来得及整理基础知识,今天在这里先整理一下这两天做的Scala叶子节点的值提取
    • Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala 运行在Java虚拟机上,并兼容现有的Java程序。Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库。(百度百科)
  • 实验步骤:
    • 使用的工具:
      • scala meta : https://scalameta.org/
      • Intellij Idea: https://www.jetbrains.com/idea/
    • 借助的参考资料:
      • scala meta的示例程序
      • 浏览器 构造 scala AST 树:https://astexplorer.net/#/gist/22cf8a3fcb2155c087ae94b4d194c1b6/d10c646ecfae4c69c919408aa3aaefb2deda2df7
    • 实验带代码: 查看 scala meta 源程序可以发现 ,该工具里面有一个Tree的类,该类有children 属性和parent属性:图片描述 所以可以根据这个类来进行遍历得到我们需要的叶子节点的数据,在这里我采用visitor的方式来进行遍历。主要的遍历的对象有以下几个: 图片描述 分别代表Scala中的各个语法,这里在做的时候出现了几个问题。一个是Term.param和Type.param 需要“精准的查找”,不能像其他的Term.Name,Term.Annonate那样,可以通过Term来进行查找:标题 也就是说其他的Term里面的属性可以通过遍历Term然后再进行查找,但是这个Term.param必须在第一次遍历的时候就指出来,难道Term.param不属于Term?很奇怪。以后再查一查。
    • 代码的逻辑并不难,下面就开始打印叶子节点,通过观察浏览器AST解析器https://astexplorer.net/#/gist/22cf8a3fcb2155c087ae94b4d194c1b6/d10c646ecfae4c69c919408aa3aaefb2deda2df7 发现:叶子节点主要在以下几个地方打印: 图片描述基本数据类型
      图片描述Term.Name处图片描述Type.Name 处 还有一个是Name处
  • 实验的最终结果:
    • 图片描述Scala 源代码
    • 图片描述 提取的叶子节点
    • 图片描述 源代码
    • 图片描述 提取的叶子节点
  • 总结:实验结果还未仔细观察,具体的细节有待改进,还有就是上次说的将string值改成等基本数据的转化还未加入。

学科复习

数据结构复习

1 minute read

Published:

由于临近夏令营,所以将之前的知识整理一下,好面试和笔试。本文是根据《数据结构–使用c++语言描述(第二版)》来进行复习的。

英语

雅思训练错题整理

1 minute read

Published:

611

section 1

  • 1.a keep-fit studio : 一个健身室 , 没听出来,听到了前面的 Fresham Sports Center,这个说的是另外一个Club所以第一题没听出来。
  • 2.swimming ,听力关键词 and,then
  • 3.yoga classes:瑜伽
  • 4.a salad bar:一间沙拉吧,关键词at the moment,没听出来
  • 9.assessment:评估、估算 关键词well,等价替换:an assessment with an instruction = instuction's assessment
  • 月份:
    • January February March April May June July August September October November December
  • 星期:
  • Monday Tuesday Wednesday Thursday Friday Saturday Sunday

    section 2

  • 11.关键词then 等价替换:with its own access = give separate entrance
  • 12.等价替换:reopen = temporarily closed :暂时关闭
  • 13.等价替换:fewer seats = reduced in number
  • 14.等价替换:twice as many = doubled in number
  • 15.等价替换:new lifts = replaced 新的电梯那就说明原来的电梯被换掉了
  • 16.等价替换:two large rooms = increased in size
  • 18.关键词so
  • 19.关键词in fact now
  • 20.关键词but now

    section 3

  • 21.对话中的reading已经被排除了,writing主人公已经做完了,根据排除法就可以选出attend a class 等价替换:sit in on a teaching room = attend a class:坐在教室
  • 22.in advance:提前,注意写完整,一个短语
  • 23.nursery:儿童室,育婴室,单词不认识,没听出来
  • 24.annual fee:年费,关键词but
  • 25.ask him or her里面的him her 指代前面说的tutor,一般这样的题很那听出来,连读your tutor
  • 26.laptops printers:注意复数,关键词:and hire
  • 29.marketing:营销、促销,注意单词拼写,关键词:and
  • 30.individual:个人,关键词:and

    section 4

  • 32.metal leather:金属和皮革:等价转换metal and leather goods = goods made of metal and leather
  • 33.restrictions:限制,注意复数,关键词:and,等价替换:fewer = lack of
  • 34.ships:船,这道题在于理解,船的建造加速了世界间的贸易,好多词都被替换掉了,constructed = builded:建造
  • 35.England,这道题的答案出现在所有关键词的前面,很难听对
  • 36.build 关键词:so and
  • 37.poverty:贫困贫穷,富的人搬走了,只有那个极度贫穷的人还在这个地方,关键词:and
  • 38-40.单词unsympathetic landlord:没有同情心的房东,heating problems:取热问题

    711

计算机网络

论文阅读笔记

《Programmers do not favor lambda expressions for concurrent object-oriented code》阅读笔记

less than 1 minute read

Published:

原文链接: https://link.springer.com/content/pdf/10.1007%2Fs10664-018-9622-9.pdf
作者:MSebastian Nielebock,Robert Heumüller,Frank Ortmeier 文章来源: Empir Software Eng 2018 简介: 本文针对lambda expression,提出了concurrent applicationslambda expression可能存在一定联系,并通过一系列实验和实验数据的分析验证了自己的观点。

《Automatic Generation of Text Descriptive Comments for Code Blocks》阅读笔记

less than 1 minute read

Published:

原文链接:https://www.aaai.org/ocs/index.php/AAAI/AAAI18/paper/view/16492/16072
作者:Yuding Liang, Kenny Q. Zhu
简介:本文提出了一个新的框架来自动生成源代码块的描述性注释。提出了一个新的递归神经网络-Code-RNN。通过Code-RNN从源码中提取特征并嵌入向量中。当此向量输入到新的递归神经网络Code-GRU时,生成准确率较高的代码注释。

《DeepLearning Similarities from Different Representations of SourceCode》阅读笔记

1 minute read

Published:

原文链接: http://www.cs.wm.edu/~mtufano/publications/C9.pdf
作者:Michele Tufano,Cody Watson,Gabriele Bavota,Massimiliano Di Penta,Martin White,Denys Poshyvanyk
文章来源: MSR 2018
简介: 本文针对代码克隆检测,提出了基于Deep Learning自动学习代码相似性的方法,在混合四个representation的代码克隆检测中取得了较好的结果。

研究概况

雅思

高阶函数

高阶函数初探(五)

less than 1 minute read

Published:

这周主要根据上次讨论的内容统计数据和作图,但是在统计数据的过程中发现了不少问题,因此对实验又重新进行了更新,提高数据的准确度。

高阶函数初探(四)

less than 1 minute read

Published:

这周主要将上周讨论的方法实现了,并将十个项目进行了详细的统计,得到了第一版的数据,从数据中我们或许能看到一点东西。

高阶函数初探(三)

less than 1 minute read

Published:

本周主要继续之前设计的实验,本打算在一个星期内做完所有实验,结果发现里面有很多问题。

高阶函数初探(二)

less than 1 minute read

Published:

本周由于雅思笔试,口试延误了很长时间,所以实验做的比较晚。这周主要完成了对scala的一个项目项目的详细统计,统计结果包括高阶函数声明数,高阶函数调用数,以及这两者有什么关系;scala文档对高阶函数的定义;统计泛化功能高阶函数;最后自己总结了一点高阶函数的特点。