美国的国家公园概览 美国国家公园被认为是美国最宝贵的历史遗产中的一个,它作为美国人的公共财产得到管理,并为让后代享用而得到保护维修。美国利用国家公园保护国家的自然、文化和历史遗产,并让全世界通过这个视窗了解美国的壮丽风貌、自然和历史财富以及国家的荣辱忧欢...
在Docker中使用TensorFlow(GPU版+Ubuntu 20.04) 在此前的文章中,我们介绍了如何在Ubuntu 20.04中安装Docker。本文将介绍如何在其中使用TensorFlow(GPU)版。安装完成Docker并检查安装正确后,如果需要Docker容器中有GPU支持,需要再安装NVIDIA-Docker
在Ubuntu 20.04中配置GPU环境:安装CUDA 11等 此前的文章介绍了在在Ubuntu 18.04中配置GPU环境的具体步骤。最近换新电脑,重新安装了新版的Ubuntu 20.04,于是需要重新配置环境。我根据之前的步骤来做,大致是符合的。但有一些变化也是在所难免的。这篇文章将记录这些操作的步骤
在Ubuntu 20.04上安装Python虚拟环境 使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题;抑或是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难。为此,需对不同的工程使用不同的虚拟环境来保持开发环境以及宿主环境的整洁
SIFT特征描述与检测的Matlab实现 尺度不变特征变换(SIFT)特征对旋转、尺度缩放、亮度变化等保持不变性,是非常稳定的局部特征。SIFT的主要思路是:首先构造图像的尺度空间表示,然后在尺度空间中搜索图像的极值点,由极值点再建立特征描述向量,最后用特征描述向量进行相似度匹配。本文将通过MATLAB代码来演示SIFT特征描述算法的原理
SURF特征描述与检测的Matlab实现 SIFT特征描述算子在生成特征矢量时使用的是高斯图像,而SURF特征描述算子在生成特征矢量时用到的则是积分图。这样做的目的是为了充分利用特征点检测时形成的中间结果,也就是积分图,从而避免在特征矢量生成时对图像进行重复计算。本文将通过MATLAB代码来演示SURF特征描述算法的原理
操作系统中的信号与异常:sigsetjmp和siglongjmp【2】 在信号处理程序中经常调用longjmp函数以返回到程序的主流程中,而不是从该处理程序返回。如果用longjmp跳出信号处理程序,那么,对此进程的信号屏蔽字会发生什么呢?(setjmp和longjmp保存和恢复信号屏蔽字,还是不保存和恢复,不同的实现各有不同)这也就是调用longjmp的一个问题
操作系统中的信号与异常:sigsetjmp和siglongjmp【1】 在计算机科学中,信号是Unix或类Unix以及其他POSIX兼容的操作系统中进程间通讯的一种有限制的方式。它是一种(事件发生时对进程的)异步通知机制,用来提醒进程一个事件已经发生(有时也称为软件中断,或者异常)
深入详解Linux进程间通信之共享内存(Shared Memory)+信号量同步【2】 在Linux下的多个进程间的通信机制叫做IPC(Inter-Process Communication),它是多个进程之间相互沟通的一种方法。专栏前面的文章中演示过使用shared memory进行IPC的方法。本文将更进一步探讨Linux进程间通过共享内容进行通信的方法,包括如何使用Anonymous shared memory,以及如何使用信号量来进行同步等。Shared memory是最快的一种IPC机制
深入详解Linux进程间通信之共享内存(Shared Memory)【1】 在Linux下的多个进程间的通信机制叫做IPC(Inter-Process Communication),它是多个进程之间相互沟通的一种方法。专栏前面的文章中演示过使用pipe、shared memory、unix domain socket进行IPC的方法。彼时,关于共享内存的例子比较简单,仅仅是父子进程间通过system V IPC通信的过程。本文将更进一步探讨Linux进程间通过共享内容进行通信的方法,并演示基于POSIX的共享内存实例
软件漏洞检测(Bug Finding):Clang Static Analyzer(进阶与实战) The Clang Static Analyzeris a source code analysis tool that finds bugs in C, C++, and Objective-C programs. CSA是Clang项目的一部分,而且完全开源。注意这里的静态分析,表示并不需要运行程序,CSA is built on Clang based on symbolic execution technique
在Ubuntu中编译LLVM、clang(以便支持z3的使用) LLVM是一个自由软件项目,它是一种编译器基础设施,以C++写成。其发端源于2000年伊利诺伊大学厄巴纳-香槟分校(UIUC)的Vikram Adve教授与其第一个博士生Chris Lattner的研究。LLVM的命名最早源自于底层虚拟机(Low Level Virtual Machine)的首字母缩写,但现在这个项目的范围早已大大超越其最初的意思。当前,LLVM已经发展成为被用于开发从编译器前端到后端的一套模块及可重用的编译器及工具链技术的集合
如何在Ubuntu中升级或者安装cmake CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。如何在Ubuntu中升级或者安装cmake呢?Using the Snap package manager is the quickest and easiest way to install the latest version of CMake on Ubuntu
在Ubuntu上编译z3:报错与处理 Z3 is a high performance SMT solver developed by Microsoft Research. 通过提供API的方式,它支持多种计算机语言。LLVM中的Clang Static Analyzer(CSA)是在Clang编译器基础上构建的软件源代码分析工具,它可以被用来进行bug finding。CSA中默认使用的constraint solver具有一定的局限性,但可以选择Z3作为CSA中的SMT solver,这样可以扩展CSA的代码分析能力
在Ubuntu中安装CodeChecker、Node、NVM:过程与排雷 CodeChecker is a static analysis infrastructure built on the LLVM/Clang Static Analyzer toolchain。本文介绍在Ubuntu上安装它的基本流程,尤其解决过程中可能会遇到的一些问题和麻烦。本文还介绍了如何安装Node.js、npm、NVM等问题。包括一些错误提示的处理方式,例如npm :Depends: node-gyp (>= 0.10.9) but it is not going to be install
Linux多线程编程与同步实例(基于条件变量) 线程(thread)是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务
Linux进程间通信实例(pipe、shared memory、socket) 在Linux下的多个进程间的通信机制叫做IPC(Inter-Process Communication),它是多个进程之间相互沟通的一种方法。Linux中提供有多种进程间通信的方法:管道(Pipes)、FIFO(或称named pipes)、消息队列、Unix-domain Socket、共享内存(Shared memory)、本文基于实例来演示其中的若干种通信机制
SAT、SMT、Z3和符号执行(2) 符号执行(symbolic execution)是一种计算机科学领域的程序分析技术,通过采用抽象的符号代替精确值作为程序输入变量,得出每个路径抽象的输出结果。 这一技术在软件测试中有很重要的应用,能够有效地发现程序中的漏洞。本文将通过几个例子来演示一下symbolic execution(或者SMT solver)在软件分析领域的应用
深入理解Seq2seq模型(Sequence2sequence) 机器翻译(Machine Translation)是NLP领域中一个重点研究的话题。随着深度学习或者神经网络的发展,现在神经机器翻译(Neuralmachine translation)已经成为机器翻译领域中最流行的方法。要了解神经机器翻译,Sequence2sequence模型(简称Seq2seq)是第一步
逆向工具angr的快捷教程(3):CTF解题实例 angr是一个基于Python开发的二进制程序分析(Binary analysis)框架,可以用于开展动态符号执行(Symbolic Execution)和多种静态分析。事实上,Symbolic Execution也正是angr的一个代表性功能