自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lusing的专栏

Android爱好者,C++爱好者,汇编爱好者,数学爱好者

  • 博客(286)
  • 收藏
  • 关注

原创 符号执行(1) - 自动生成覆盖率用例之利器

符号执行(1) - 自动生成覆盖率用例之利器对于安全性要求比较高的软件,为了防止出现安全漏洞,我们不得不花大量时间写更多的测试用例来提升覆盖率。尤其是高可靠性软件需要的修正条件判定覆盖MC/DC(Modified Condition/Decision Coverage),更是要多花不少心思。全靠手工写,工作量太大,而且重复性工作不少。靠模糊测试命中的话效率又比较低。那么,有没有什么办法可以将这些机械的工作做得自动化一点,机器能够帮我们设计一些测试用例呢?符号执行就是一种可用的利器。什么是符号执行为

2020-10-14 20:39:51 1758

原创 操作系统形式化验证实践教程(12) - 经典命题逻辑与公式查错方法

操作系统形式化验证实践教程(12) - 经典命题逻辑与公式查错方法第10节我们介绍了直觉一阶逻辑,它是不接受排中律的逻辑。在编程体感上,直觉一阶逻辑IFOL库,不支持auto,不支持sledgehammer,不能使用try0与try,基本上可以使用的就是simp或者手动推理。经典命题逻辑我们使用经典一阶逻辑库FOL,它是继承自IFOL的。经典一阶逻辑库FOL现在我们换成经典一阶逻辑的FOL库,现在可以使用auto了,我们看个例子:theory fol2 imports FOLbeginle

2020-09-01 21:15:12 670 4

原创 操作系统形式化验证实践教程(11) - 结构化证明语言Isar

操作系统形式化验证实践教程(11) - 结构化证明语言Isar结构化证明语言Isar基本语法apply方法和by方法虽然可以完成功能,但是看起来更像是命令式语言。使用Isar语言,还可以写得更加形式化一点。Isar的格式看起来像这样:proof assume "公式1" from “公式1" have "公式2" by 方法 ... from "公式n" show "结论" by 方法qed虽然换了种写法,但是其实核心内容并没有变。直接proof指定方法最简单的写法,就是把

2020-08-31 20:21:07 613

原创 操作系统形式化验证实践教程(10) - 一阶直觉逻辑

操作系统形式化验证实践教程(10) - 一阶直觉逻辑前面我们用了九讲的篇幅把seL4验证操作系统的地图给大家迅速过了一遍,基础好的同学已经可以基于前面的知识开始自己的工作了。对于只学过离散数学,而没学过专门数理逻辑的同学,我们稍微补充一点相关的知识。我们在Isabelle中使用的一阶逻辑主要是直觉主义的一阶逻辑,当然我们也支持经典逻辑。直觉主义逻辑直觉主义逻辑intuitionistic logic的主要特点是不接受排中律,即要么命题为真或者为假。也就是说,经典一阶逻辑的定理:“P ∨ ¬P”,

2020-08-25 22:12:45 752

原创 操作系统形式化验证实践教程(9) - 规范与证明概述

操作系统形式化验证实践教程(9) - 规范与证明概述规范与证明的主线前面铺垫了这么多,下面我们看一下seL4形式化验证的大图:seL4的证明部分主要分为两大部分:规范部分,对应spec目录;证明部分,对应proof目录。规范分为4种:设计规范:就是从上节所见的haskell代码转换成的,可以运行的对操作系统的建模规范,对应目标ExecSpec抽象规范:是基于硬件规范和设计规范的抽象,对应目标ASpeccapDL规范:capDL是用于运行时建模的语言,用于系统初始化等动态过程的建模,对应目标

2020-08-20 18:00:57 931

原创 操作系统形式化验证实践教程(8) - 用Haskell做系统建模

操作系统形式化验证实践教程(8) - 用Haskell做系统建模到上节为止,我们验证的虽然已经是C语言源代码了,但是跟操作系统的关系还基本没有。从这一节开始,我们开始进入操作系统的部分。操作系统涉及到硬件,也涉及到整体的功能的设计。这部分在seL4中是使用Haskell语言实现的。作为本系列教程的配套,我们有《Haskell快餐教程》,请没有haskell语言基础的同学先移步学习第一节,然后我们回来看Haskell代码。另外说一句,我们也有《Standard ML快餐教程》来介绍Standard ML

2020-08-17 18:37:21 940 1

原创 Haskell快餐教程(1) - 初见

Haskell快餐教程(1) - 初见Haskell是一门由委员会发明的纯函数式语言。最早的标准制定于1990年,后来在1998年有较大的修订。最新的标准是2010年推出的,具体内容可以在这里看到:https://www.haskell.org/onlinereport/haskell2010/编译器我们可以使用ghc: https://www.haskell.org/ghc/ghc本身是个编译器,但是也提供了一个交互式的环境ghci. 我们后面的操作都以ghci为例。数据类型Haskell是门静

2020-08-15 18:24:00 590

原创 操作系统形式化验证实践教程(7) - C代码的自动验证

操作系统形式化验证实践教程(7) - C代码的自动验证上一节教程不知道大家看晕了没有,其实虽然细节很多还没有讲清楚,但是从结构上大家可以看到,其实是很模式化的工作。那么能不能让这个模式化的工作自动化起来,也能降低一点入门的学习门槛?这时就该AutoCorres工具出马了。AutoCorres既然回到人间,不用再看着一排的simp, vcg之类的,咱们的难度又回到第一讲加减法的时代。先实现一个C语言实现加法的函数:unsigned int plus(unsigned int a, unsigned

2020-08-11 20:00:35 998

原创 操作系统形式化验证实践教程(6) - 解析C源代码

操作系统形式化验证实践教程(6) - 解析C源代码从这一讲我们跨出了Isabelle/HOL的领域,开始进入操作系统的领域。目前的操作系统主要是由C语言和汇编语言写成的,所以我们的第一步先从解析C语言代码开始。构造C解析器我们需要一个能够解析C源代码,并且能在HOL操作C源代码的工具。seL4为我们提供了c-parser.我们首先进入l4v/tools/c-parser目录,接着构造c-parser-deps:make c-parser-deps依赖构建好之后,我们就构建c-parser,并

2020-08-11 15:48:06 1246 5

原创 操作系统形式化验证实践教程(5) - 搭建seL4环境

操作系统形式化验证实践教程(5) - 搭建seL4环境尽管我们有太多的基础知识都还没有讲,我们还是要快速进入到验证操作系统的世界中。先知道有什么用,然后再学习,可能是一种比较高效的方法。搭建seL4验证环境关于seL4有多牛,我们就不多介绍了,等我们了解了足够多的细节,回头再看,可能有更加鲜活的印象。基本上,seL4是第一个被完整形式化验证的有商用的操作系统。架构图我们也后面再讲,先搞工程化,搭环境。下载源代码验证seL4需要三部分, seL4源代码,l4v检验脚本代码,以及isabelle。

2020-08-07 14:12:03 1896 1

原创 操作系统形式化验证实践教程(4) - 工具环境

操作系统形式化验证实践教程(4) - 工具环境如前面我们所了解的,Isabelle/HOL是套相当复杂的系统,它的底层基于Standard ML语言,它自己使用HOL和Isar语言,它可以生成ocaml,haskell和scala的代码,它有要使用到很多的自动定理证明工具。除了相当强大的IDE环境,Isabelle也提供了命令行工具和大量的配置。Isabelle环境可以通过isabelle getenv -a命令获取Isabelle的详细配置信息:我们分类列举一些常见的配置项,通过这些大家可以理解

2020-08-06 13:54:28 1516

原创 操作系统形式化验证实践教程(3) - 自动证明工具

操作系统形式化验证实践教程(3) - 自动证明工具归纳推理的推广在第一节,我们学习了自然性的归纳法推理。大家都学过数学归纳法,对此应该或清晰或模糊有个概念。其实,大家打破思维限制,归纳推理其实可以应用在更广阔的领域。比如,我们想一想,基于第二节所讲的列表,有哪些定理可以通过归纳法证明?我们举个例子,大家有没有想到,如何证明:将一个列表反转两次,所得的列表与原列表是相等的?我们来试着用之前的apply(induction)和apply(auto)的方法证明一下:lemma "rev (rev x

2020-08-05 15:14:26 1201

原创 操作系统形式化验证实践教程(2) - HOL列表与集合

操作系统形式化验证实践教程(2) - HOL列表与集合在进入相对比较烧脑的证明过程之前,我们先熟悉下HOL语言中处理列表和集合数据结构的部分。这部分各种函数式语言其实是大同小异的,学习成本比较低。列表类型HOL的列表类型与别的语言比较像,也是使用[]来表示。类型只要相同就可以,比如我们以整数类型列表为例:value "[uminus int(1),int(0),int(1)]"值和类型如下:"[- 1, 0, 1]" :: "int list"[]是Nil,是空列表。除了用[int

2020-08-04 18:09:27 913

原创 操作系统形式化验证实践教程(1) - 证明第一个定理

操作系统形式化验证实践教程(1) - 证明第一个定理形式化方法分为三个主要部分:系统建模(System Modeling)、形式规约(Formal Specification)和形式化验证(Formal Verification)。其中系统建模用形式化的模型来描述系统及其行为模式。建模完成后,需要用形式规约来精确描述建模出来的需求。有了规约,如何检验是否符合规约呢?这就需要形式化验证方法。形式化验证方法主要分为两类:一类是以穷尽搜索为基础的模型检测,另一类是以逻辑推理为基础的演绎逻辑。相对于前者,后者

2020-08-04 11:46:46 5100 6

原创 Standard ML快餐教程(1) - 初识

Standard ML快餐教程(1) - 初识好久没写快餐教程了,下面开始一个新的系列,关于函数式编程语言的系列。打算写三种语言:Standard ML,ocaml和Haskell。这几门语言都不是新贵了,其中Standard ML的知名度可能最低。因为ML系列的影响力,其实我们已经从新的语言如rust等中学到过这些老语言的很多知识了。现在我们可能只要将它们还原回去就好。运行环境Standard ML,顾名思义,是ML语言的一种标准规范,主要的版本有SML 90和SML 97。标准的实现就有很多种

2020-07-30 20:08:29 1560 2

原创 自动patch推荐:从良好调试习惯到科学哲学

自动patch推荐:从良好调试习惯到科学哲学解bug可能是开发人员最经常做也最烦的一件事情,能够自动解bug一直是程序员的梦想。随着深度学习技术红利的爆发,基于大数据统计机器学习来自动解bug的期盼就更加水涨船高了。别象小兄弟的PRECFIX最近更是在这个本来就热门的方向上又浇了一瓢油。身边的小兄弟们还有测试的兄弟们也对这个方向很着迷。各种机缘巧合之下,我也被卷到了这个方向上来。调试之殇这...

2020-04-10 10:27:48 336

原创 opengrok的鉴权插件开发指南

opengrok的鉴权插件开发指南opengrok是被广泛应用的源代码浏览系统。对于开源代码,不需要考虑鉴权的问题,但是对于需要进行权限控制的代码,我们就需要做一些鉴权操作。opengrok专门为我们提供了插件机制来进行鉴权等操作。最简单的鉴权例子opengrok提供了IAuthorizationPlugin做为鉴权的入口。IAuthorizationPlugin包含load, unloa...

2020-03-26 10:38:31 859

原创 Python使用阿里云镜像

Python使用阿里云镜像临时使用pip install -i https://mirrors.aliyun.com/pypi/simple/ 包名以后都使用阿里云的源pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/...

2020-02-22 01:26:48 32517 2

原创 opengrok搭建快餐教程2020

opengrok搭建快餐教程2020安装tomcat看这个中文版教程的大概在国内,大家下载就找个镜像会快一些,比如清华的镜像:https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat下载tar.gz包解压之后,运行startup.sh,就可以在8080端口看到运行的tomcat的页面,俗称大猫页:编译universal-ctags首先下载源...

2020-01-14 15:35:19 1749

原创 代码补全快餐教程(4) - 训练语言模型

代码补全快餐教程(4) - 训练语言模型一个强大的语言模型可以是其他任务的良好基础。预训练的模型就为我们提供了一个强大的语言模型基础,在些基础上,我们进行微调,就可以实现满足特殊需求的模型。我们先做实操,然后再讲解相关理论。代码数据准备严格来讲,进行代码数据准备需要做代码的排重,后面讲到相关论文时我们会讲到。现在我们就用个最简单的办法,将代码先拼接在一起。我们写个小脚本,将transf...

2020-01-06 20:24:59 1200 1

原创 vscode插件快餐教程(10) - 设置

vscode插件快餐教程(10) - 设置在插件中,根据用户的环境和个性化的不同,需要增加一些配置项。读写配置项可以通过vscode.workspace.getConfiguration()方法来获取所有的设置项。let config: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration();设置项可以分类...

2020-01-04 18:24:39 2371

原创 代码补全快餐教程(3) - 分词

代码补全快餐教程(3) - 分词上一讲我们介绍了预训练模型的输入和输出。下面我们从最初始的从输入文本到token的转换说起。分词器的基类是PreTrainedTokenizer。分词器的创建分词器可以通过预训练好的模型中加载,这是最简单的一种方式。就像我们在前两节中使用的一样:tokenizer = GPT2Tokenizer.from_pretrained('gpt2')也可以通...

2019-12-10 17:47:14 1758 1

原创 代码补全快餐教程(2) - 预训练模型的加载和使用

代码补全快餐教程(2) - 预训练模型的加载和使用上一节我们用30多行代码建立了一个强大的补全模型,让大家对于transformers库有了个感性的认识。下面我们开始补课,更深入到了解下发生在幕后的故事。加载预训练好的语言模型gpt2之所以强大的原因是在于它是在超过40GB的文本上进行训练的大型语言模型。通过这个大型的预训练语言模型,我们可以做一些fine-tuning针对编程语言进行优化...

2019-12-09 22:36:59 1955 1

原创 四季感冒片中药成分

四季感冒片中药成分桔梗药理作用:祛痰【功用主治】开宣肺气,祛痰排脓。治外感咳嗽,咽喉肿痛,肺痈吐脓,胸满胁痛,痢疾腹痛。紫苏叶解热抗菌【功用主治】发表,散寒,理气,和营。治感冒风寒,恶寒发热,咳嗽,气喘,胸腹胀满,胎动不安。并能解鱼蟹毒。陈皮消胀止呕祛痰止嗽荆芥【功用主治】发表,祛风,理血;炒炭止血。治感冒发热,头痛,咽喉肿痛,中风口噤,吐血,衄血,便血;崩...

2019-11-14 20:24:06 734

原创 vscode插件快餐教程(9) - LSP补全与本地补全

vscode插件快餐教程(9) - LSP补全与本地补全我们接续第5讲未介绍完的LSP的onCompletion补全的部分。TextDocumentPositionParams在第5讲,我们曾经介绍过LSP处理onCompletion的例子,我们再复习一下:connection.onCompletion( (_textDocumentPosition: TextDocumentPosit...

2019-11-13 18:24:52 2510

原创 TS2300: Duplicate identifier问题的解决

TS2300: Duplicate identifier问题的解决Typescript编译时遇到d.ts中的定义冲突:tsc -p ./../../../../../Users/lusin/AppData/Roaming/npm/node_modules/typescript/lib/lib.es2015.iterable.d.ts:41:6 - error TS2300: Duplicat...

2019-11-01 11:57:27 20079 4

原创 Python全栈快餐教程(1) - 用Flask处理HTTP请求

Python全栈快餐教程(1) - 用Flask处理HTTP请求初识FlaskFlask是最流行的Python web框架之一。我们来写个最小的web应用,只有一个路由先跑进来玩玩吧。from flask import Flask# 定义flask app对象app = Flask(__name__)# 处理路由@app.route('/')def index(): ...

2019-10-31 17:53:02 324

原创 代码补全快餐教程(1) - 30行代码见证奇迹

代码补全快餐教程(1) - 30行代码见证奇迹下面是我用30多行代码,包含了很多空行和注释的代码写成的代码补全模型。我们先看看效果吧。补全效果案例先来看个比较普通的(Python, Keras)已知:y_train = keras.utils.to_categorical(y_train, num_classes)\ny_test = keras.`补全之后是这样的:```pytho...

2019-10-27 18:02:07 821

原创 from torch._C import * ImportError: DLL load failed的一些原因

from torch._C import * ImportError: DLL load failed的一些原因没有安装最新的CUDA版本PyTorch升级版本的时候,请注意下是否CUDA版本也升级了。比如1.2的时候用的是CUDA 10.0,但是1.3的时候已经要求是CUDA 10.1了。如果没有安装CDUA 10.1,就会出现上面的错误。python script目录没有放到path中...

2019-10-24 19:25:36 700

原创 PyTorch快餐教程2019 (2) - Multi-Head Attention

PyTorch快餐教程2019 (2) - Multi-Head Attention上一节我们为了让一个完整的语言模型跑起来,可能给大家带来的学习负担过重了。没关系,我们这一节开始来还上节没讲清楚的债。还记得我们上节提到的两个Attention吗?上节我们给大家一个印象,现在我们正式开始介绍其原理。Scaled Dot-Product Attention首先说Scaled Dot-Pr...

2019-10-22 19:39:05 17958 7

原创 PyTorch快餐教程2019 (1) - 从Transformer说起

PyTorch快餐教程2019 (1) - 从Transformer说起深度学习已经从热门技能向必备技能方向发展。然而,技术发展的道路并不是直线上升的,并不是说掌握了全连接网络、卷积网络和循环神经网络就可以暂时休息了。至少如果想做自然语言处理的话并非如此。2017年,Google Brain的Ashish Vaswani等人发表了《Attention is all you need》的论文,提...

2019-10-21 16:27:39 2818 3

原创 Javascript类型推断(4) - 隐藏层的更新

Javascript类型推断(4) - enhance_data解析熟悉了整个流程之后,我们可以关注更多的细节。前面讲训练过程时,没有讲enhance_data的细节。这一部分的主要功能是更新隐藏层。它的调用点在:def train(): train_reader = create_reader(files['train']['file'], is_training=True) step...

2019-10-10 17:30:56 301

原创 强化学习快餐教程(3) - 一条命令搞定atari游戏

强化学习快餐教程(3) - 一条命令搞定atari游戏通过上节的例子,我们试验出来,就算是像cartpole这样让一个杆子不倒这样的小模型,都不是特别容易搞定的。那么像太空入侵者这么复杂的问题,建模都建不出来,算法该怎么写?别急,我们从强化学习的基础来讲起,学习马尔可夫决策过程,了解贝尔曼方程、最优值函数、最优策略及其求解。然后学习动态规划法、蒙特卡洛法、时间差分法、值函数近似法、策略梯度法...

2019-10-04 01:49:49 1372

原创 强化学习快餐教程(2) - atari游戏

强化学习快餐教程(2) - atari游戏不知道看了上节的内容,大家有没有找到让杆不倒的好算法。现在我们晋阶一下,向世界上第一种大规模的游戏机atari前进。太空入侵者可以通过pip install atari_py来安装atari游戏。下面我们以SpaceInvaders-v0为例看下Atari游戏的环境的特点。图形版在太空入侵者中,支持的输入有6种,一个是什么也不做,一个是...

2019-10-02 23:28:46 2073

原创 强化学习快餐教程(1) - gym环境搭建

强化学习快餐教程(1) - gym环境搭建欲练强化学习神功,首先得找一个可以操练的场地。两大巨头OpenAI和Google DeepMind都不约而同的以游戏做为平台,比如OpenAI的长处是DOTA2,而DeepMind是AlphaGo下围棋。下面我们就从OpenAI为我们提供的gym为入口,开始强化学习之旅。OpenAI gym平台安装安装方法很简单,gym是python的一个包,通...

2019-10-02 02:33:25 1078

原创 CNTK中GPU信息的获取

CNTK中GPU信息的获取device接口CNTK提供了device接口,可以访问gpu的几个基本参数。获取所有的设备首先可以通过cntk.device.all_devices方法来获取当前的设备>>> C.device.all_devices()(GPU[0] GeForce GTX 960M, CPU)获取GPU知道了系统里有多少设备了之后,就可以通过设备号...

2019-09-27 17:59:20 450

原创 Javascript类型推断(3) - 算法模型解析

Javascript类型推断(3) - 算法模型解析构建训练模型上一节我们介绍了生成训练集,测试集,验证集的方法,以及生成词表的方法。这5个文件构成了训练的基本素材:files = { 'train': { 'file': 'data/train.ctf', 'location': 0 }, 'valid': { 'file': 'data/valid.ctf', 'location'...

2019-09-24 17:30:13 308

原创 Javascript类型推断(2) - 开始训练吧

Javascript类型推断(2)准备训练数据下面我们将上一节获取的类型数据信息进行预处理,转化为可以训练的数据。代码在GetTypes.js中,会创建三个相关目录:let root = "data/Repos-cleaned";let outputDirGold = "data/outputs-gold/";let outputDirAll = "data/outputs-all/"...

2019-09-23 19:38:52 585 1

原创 Javascript类型推断(1) - 获取token和类型

Javascript类型推断(1) - 获取token和类型js类型推断的三种思路第一种思路是用传统的编译类的方法,推断是没啥好办法,但是可以用来验证。第二种思路是利用对象的属性或方法的调用来推断,JSNice就是这样做的。第三种思路比较先进,充分利用到越来越流行的Typescript,通过学习Typescript生成的javascript进行监督学习。这种思路是Vincent J. He...

2019-09-20 22:10:29 807

原创 代码补全漫谈(2) - Miltos Allamanis

代码补全漫谈(2) - Miltos Allamanis上一回我们从火到爆表的TabNine说起,介绍了OoV问题引发的论战。在进入细节之前,我们再八卦程序语言处理领域的一个重要研究者,微软研究院的Miltos Allamanis。Allamanis的博士论文就是以《Learning Natural Coding Conventions》为题,是这个领域的专业研究人员。上次我们介绍的重要su...

2019-09-16 20:52:06 1251 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除