今天补下之前在Post not found: 【CMake系列】(三)ExternalProject-实践 【CMake系列】 (三)ExternalProject-实践留下的坑:如何下载第三方依赖。
理清需求
由于大家的需求很可能是不一致的,这里选一个比较通用的需求:下载第三方依赖压缩包,于是我们就需要下载压缩包文件到本地,验证文件签名,然后解压到指定目录。
CMake 提供的命令
我们要用到主要有以下两个命令:
file
DOWNLOAD:下载文件
INSTALL:安装文件到目录
READ:读取文件内容
REMOVE:删除文件
REMOVE_RECURSE:递归删除文件
MAKE_DIRECTORY:创建目录
cmake_parse_arguments:解析传入的函数参数
execute_process:运行外部命令(这里需要注意的是,外部命令很有可能运行在不同的操作系统,因此,尽量使用 CMake 提供的命令,这样可以在各个平台都能运行。)
实现
接下来我们一步步把功能实现。
下载功能
123456789function(download_file url f ...
接着上次的Post not found: 【CMake系列】(一)入门 【CMake 系列】(一)入门继续讲。
这次,主要说说 CMake 的依赖管理。
依赖管理
当我们说 CMake 的依赖管理的时候,往往说的是 C/C++ 项目的依赖管理,但是这门古老的语言,到目前为止,还是没有一个官方大一统的依赖管理工具。
而回头看看它的后来者,Ruby 有 gem、Node.js 有 npm、 Golang 有 go mod、Rust 有 cargo。
你可能会提到 C++ 在 C++20 中,引入了 Module,只是目前 编译器的支持 还是不够,更别提那些著名 C++ 项目的支持了。假如之后能做到如现代语言一条命令安装完所有依赖就能直接使用的话,家祭无忘告乃翁。
那么,CMake 给我们提供了什么样的支持?可以这么说,支持 CMake 的项目,基本上都会提供一个类似于 xxx-config.cmake 或者 xxxConfig.cmake 的文件,它们的作用就是提供查找与引入到当前项目以供使用。
CMake find_package
先来看看它长什么样:
123456789find_pac ...
前言
今天这篇,可以算是接着上次的 Post not found: 【CMake系列】(二)第三方依赖管理 【CMake系列】(二)第三方依赖管理,因为今天说的是怎样成为第三方依赖。
当你开发库的时候,就需要考虑,其它人如何使用你的库。
就目前而言,目前有三种方式可以使用第三方库:
子文件夹(下载后编译、Git 克隆编译);
安装编译产物(各平台现有库,自己编译库下载配置);
导出编译目录;
下面分别来说说,该如何操作。
子文件夹
对使用者而言,这种方式是三者中最简单的,使用者能够将库作为子文件,成为当前项目的一部分,因此他能够直接使用子文件中,第三方库的任何现成的 CMake Target,方便、快捷。
不过,作为第三方库的开发者,有时候容易犯一个错误,那便是混淆了 CMAKE_SOURCE_DIR 与 CMAKE_PROJECT_DIR,以及 CMAKE_BINARY_DIR 与 CMAKE_BINARY_DIR,这几个变量的区别。
当使用者将你的库作为第三方库来使用的时候,CMAKE_SOURCE_DIR 以及 CMAKE_BINARY_DIR 就会变成使用者所在项目的变量了 ...
今天,来说说 CMake 中另外一个可能比较枯燥的环节:文档。
前言
说起文档,就不得不提文档的维护了,如果纯手写,难免会遇到代码与文档不一致的情况,理想的状态下,最好全部由解析代码后生成,再加上开发人员少量写的说明性文档即可。
至于我们今天要说的 C/C++ 的文档,主流的方案就是 Doxygen + Sphinx + Breathe,其它的工具相对显得小众了,可以去维基上看看 (实际上我也没有细看 :P)。
准备环境
安装 Doxygen:sudo apt install doxygen;
安装 Sphinx 与 Breathe: pip3 install Sphinx breathe,注意 目前 Sphinx 需要 Python3,这里也是用 pip3 安装的;
下面来依次介绍下它们三个。
Doxygen
Doxygen 算是 C/C++ 中最有名的,历史悠久(1997/10/26 发布了第一个版本),众多开源的 C/C++ 也是选择了它作为文档工具。
Doxygen 的原理很简单,就是给函数、变量声明等地方加上 comments,然后通过解析它们来生成对应的文档。
如下,就 ...
写 C/C++ 的同学都知道,项目稍大点,编译速度就开始拖后腿了,这对于我们来说是个又爱又恨的时候:急着改代码的时候,慢能消耗我们的耐心,能将我们逼疯,而我们想暂时休息会儿的时候,却可以借此去散步喝茶了。
另外,程序运行时的速度,又是另外一个关键的速度了,编译速度慢我们可以忍,但是运行速度慢可忍不了,就算我们忍得了,领导或者用户也是无法忍的。
话说回来,为了我们自己的开发效率,提升编译速度是无可非议的,今天我们就来说说,如何在 CMake 中优化编译以及以及程序本身。
编译速度优化
Ninja Generator
CMake 的默认 Generator 是 Unix Makefiles,也就是最常见的 make 命令,但是另一个 Generator Ninja 却是更好的选择,如果你没有用过,建议试试。
CCache
最简单,也是效果最好的,就是开启编译缓存,ccache 便是我们需要的工具。
它的原理也很简单,就是包装编译器,接收编译参数、文件,当检测到没有对应缓存的时候,调用编译器,将生成物缓存到文件中去,下次如果编译参数以及文件没有变化,就能够直接从缓存文件中提取,这样,就可以大 ...
今天我们来说说,CMake 测试。
不过,其实我们还是在说 C++ 的测试。
CMake 给我们提供了完善的测试支持,比如它有一个专门的模块 CTest。
CMake 原生测试支持
CMake 原生支持的测试很简单,只有两个函数:
12345enable_testing()add_test(NAME <name> COMMAND <command> [<arg>...] [CONFIGURATIONS <config>...] [WORKING_DIRECTORY <dir>] [COMMAND_EXPAND_LISTS])
这个用法,简单来说,就是你需要先实现一个可以接受输入参数的可执行程序,用 add_executable 就可以,不用管这个可执行程序的存放目录,CMake 会帮你自动填上。
1234567enable_testing()add_executable(test_example test.cpp)target_link_libraries(test_exampl ...
標籤頁
前往你的 Hexo 博客的根目錄
輸入 hexo new page tags
你會找到source/tags/index.md這個文件
修改這個文件:
記得添加 type: "tags"
12345---title: 標籤date: 2018-01-05 00:00:00type: "tags"---
分類頁
前往你的 Hexo 博客的根目錄
輸入 hexo new page categories
你會找到source/categories/index.md這個文件
修改這個文件:
記得添加 type: “categories”
12345---title: 分類date: 2018-01-05 00:00:00type: "categories"---
友情鏈接
為你的博客創建一個友情鏈接!
創建友情鏈接頁面
前往你的 Hexo 博客的根目錄
輸入 hexo new page link
你會找到source/link/index.md這個文件
修改這個文件:
記得添加 type: “link”
12345 ...
cloudflare_analytics
Utterances
Utterances是一个基于Github Issues的轻量级评论系统
安装
打开 utterances - GitHub App 点击 Install 进入安装页面。
在打开的页面中选择 Only select repositories,并在下拉框中选择自己的博客仓库(比如我就是 yjmm10/blog_comments,也可以安装到其他仓库),然后点击 Install。
配置
到此,就可以配置 cactus主题下的 Utterances配置,如下
123456utterances: enabled: true repo: yjmm10/blog_comments issue_term: title label: Comment theme: github-dark
baidu_analytics
百度统计和Google统计主要用于分析网站数据:流量、访客量等。
新增并获取
进入百度统计网址,在账户管理 - 网站列表新增网站
配置
123baidu_analytics: enabled: tru ...
PDF插件
安装
本地环境: npm install --save hexo-pdf
vercel环境:在项目 settings里 INSTALL COMMAND中增加 npm install --save hexo-pdf
用法
PDF
1{% pdf http://7xov2f.com1.z0.glb.clouddn.com/bash_freshman.pdf %}
或 _config.yml设置 post_asset_folder: true
1{% pdf bash_freshman.pdf %}
2. Google drive
1{% pdf https://drive.google.com/file/d/0B6qSwdwPxPRdTEliX0dhQ2JfUEU/preview %}
Slideshare
12Slideshare{% pdf http://www.slideshare.net/slideshow/embed_code/key/8Jl0hUt2OKUOOE %}
...
在线阅读
网盘下载:
链接: https://pan.baidu.com/s/1j4L0n_dz9SwCtsUz5DEkTQ 提取码: pj42
移除 .gitmodules
$ rm .gitmodules
加入 .gitmodules 到 stage
$ git add .gitmodules
修改 .git/config 删除如下内容123[submodule "vendor"]url = git://github.com/some-user/some-repo.git123
移除 submodule 在 Git
$ git rm --cached path/to/submodule
移除 submodule 在 .git
$ rm -rf .git/modules/submodule_name
提交修改
$ git commit -m "remove submodule"
移除 submodule 文件夹
$ rm -rf path/to/submodule
生成密钥
1234git config --global user.name "XXXXX"git config --global user.email "XXXXX@yeah.net"ssh-keygen -t rsa -C "XXXXX@yeah.net"
复制ras.pub内容
上面生成的id_rsa.pub默认在c:/user/xxx/.ssh/中,打开并复制
添加密钥
github-> setting -> SSH and GPG keys -> SSH Keys -> 粘贴id_rs.pub
测试
ssh -T git@github.com
拉取仓库
git clone git@github.com:XXXXX/demo.git
godbolt
支持多个编译环境(msvc, gcc, clang),支持多种语言,支持汇编指令查看
OnlineGDB
OnlineGDB 支持到 C++14 的所有版本,它具有代码高亮、智能提示、下载代码、自定义设置、错误提示等功能。更为重要的是,它还可以调试哦!
JDoodle
JDoodle 提供的编译器支持 C++17,并且具有代码高亮、创建项目、自定义设置、下载代码、错误提示等功能。这是一个非常基础的编译器,若要使用更高级的功能则需要登录。
它的主要缺点是缺少智能提示、而且编译和执行缓慢。
Codechef
Codechef 的编译器支持 C++14,并且具有代码高亮、智能提示、自定义设置、下载代码、错误提示等功能。
比较完美,就是执行速度略慢!
paiza
paiza 是一个全屏的在线 IDE,允许编辑、编译、执行和共享多个 C++ 文件。它具有代码高亮、智能提示、新建文件、自定义设置错误提示等功能。如果要使用像标星(表示喜欢)、GitHub(gist)集成这样的高级功能,则需要登录!
没什么大的缺点,就是不能下载代码!
Coding Ground
Coding ...
Windows
文件hash
1234# 支持MD2 MD4 MD5 SHA1 SHA256 SHA384 SHA512certutil -hashfile filename MD5certutil -hashfile filename SHA1certutil -hashfile filename SHA256
字符串
软件
Hash.exe
Linux
文件hash
12345678# 支持MD5、SHA1、SHA224、SHA256、SHA384、SHA512md5sum filenamesha1sum filenamesha224sum filenamesha256sum filenamesha384sum filenamesha512sum filename# 添加 >hash.txt可输出到文件
MacOS
文件hash
1234567# 支持md5 sha1 hmacmd5 sha256openssl md5 filenameopenssl sha1 filename#openssl md5 -hmac "key" filenameopenssl ...
已知环形区域的中心(如椭圆中心,圆心),求轮廓的起止角度
代码实现
在线测试:https://onlinegdb.com/gwszKcq59
Python版本
12345678910111213141516171819202122232425262728import osdef get_angle_range(angles,acc=10): """ 获取角度范围 """ angles += [i+360 for i in angles] angles = sorted(angles) # 初始化起始角度 res = [angles[0]] for i in range(len(angles)-1): if angles[i+1] - angles[i] >acc: res.append(angles[i]) res.append(angles[i+1]) assert len(res)==5 or ...
单轮廓的中轴线提取实现,常用于印章文字检测
算法的处理流程
第一步:距离变换
第二步:把距离变换的图像进行像素值的排列(排列返回像素的位置信息)
第三步:从小到大进行像素的查表操作
注释:这里为什么叫中轴线提取?因为提取的过程是绝对的按照对称来的,距离变换的结果就是前景到背景的距离,所以结果是绝对的集合中心。
代码
Python版本
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677import numpy as npimport scipy.ndimage as ndimgfrom numba import jitimport cv2from scipy.ndimage import label# check whether this pixcel can be removeddef check(n): a = [(n >> ...
随着行业的发展和技术的成熟,文字识别(OCR)目前已经应用到了多个行业中,比如物流行业快递包裹的分拣,金融行业的支票单据识别输入,交通领域中的车牌识别,以及日常生活中的卡证、票据识别等等。OCR(文字识别)技术是目前常用的一种AI能力。但一般OCR的识别结果是一种按行输出的半结构化输出。
今天给大家带来的分享是基于模板的文字识别结果结构化处理技术,我们主要讲的是文字处理结果的结构化。
文字识别行业现状
我们从一个财税案例的角度出发。大家在公司里肯定都做过报销,报销的时候我们都会有出租车票、定额发票等,我们需要将各种发票贴到纸上然后提交上去,由财务来做后面的事情。通常来说,他们其实做的都非常辛苦,要耗费大量的人力来进行人工录入。这样的话,不仅成本很高,而且耗时也很长,人工录入的话还有可能会出错。我们能不能够通过用文字识别的方式来解决这个问题呢?比如把这个流程变成这样,我们在中间加一层,不是人工录入,而是通过一个识别系统,首先我们把这些票据通过图像采集设备,例如高分辨率扫描、拍照这种方式转换成图像,然后通过文字识别技术把图像上的文字识别出来,再经过一个数据的结构化,最后输入到财务系统。这 ...
getconf LONG_BIT/getconf WORD_BIT
(32位的系统中int类型和long类型一般都是4字节,64位的系统中int类型还是4字节的,但是long已变成了8字节inux系统中可用"getconf WORD_BIT"和"getconf LONG_BIT"获得word和long的位数。64位系统中应该分别得到32和64。)
uname -a
如果有x86_64就是64位的,没有就是32位的
后面是X686或X86_64则内核是64位的,i686或i386则内核是32位的
ls / |grep lib
32位:lib
64位:lib/lib64
file /sbin/init/file /bin/cat
/sbin/init: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6. ...
注:当前页面的所有Xcode下载链接均为苹果官方下载链接 ,点击将直接转至苹果官网下载。
Version
Release
Build
Released
Requires
Swift
SDKs
Download¹
Release Notes¹
Xcode 14.0
Beta 3
14A5270f
6 Jul 2022
macOS 12.4+
* Swift 5.7 (5.7.0.120.1)
* macOS 13.0 (22A5295f)* iOS 16.0 (20A5312e)* watchOS 9.0 (20R5316e)* tvOS 16.0 (20J5328e)
Download
Release Notes
Xcode 14.0
Beta 2
14A5229c
22 Jun 2022
macOS 12.4+
* Swift 5.7 (5.7.0.113.202)
* macOS 13.0 (22A5286g)* iOS 16.0 (20A5303f)* watchOS 9.0 (20R5307f)* tvOS 16.0 (20J5319f)
Download
R ...
基本概念篇
如果要挑选安全行业热词,那么“零信任”是当仁不让的首选。数字化转型加速,网络复杂化、业务多样化、数据频繁流动,为应对新IT时代的网络安全挑战,零信任安全应运而生。无论是市场还是行业内,零信任都炙手可热。那么零信任是什么?零信任又有什么特别之处呢?
接下来,奇安信身份安全实验室将为您带来《零信任十问》,一问一答带您了解零信任安全。
Q1: 什么是零信任?
零信任架构提供一系列概念、理念、组件及其交互关系,以便消除针对信息系统和服务进行精准访问判定所存在的不确定性。零信任的本质是以身份为基石的动态访问控制。NIST《零信任架构》标准中给出的定义是:“零信任(Zero trust,ZT)提供了一系列概念和思想,旨在面对被视为受损的网络时,减少在信息系统和服务中执行准确的、按请求访问决策时的不确定性。零信任架构(ZTA)是利用一个企业网络安全计划,它利用零信任概念,包括组件关系、工作流规划和访问策略”。实现零信任架构可以用到多种技术,其中包括身份认证、身份管理、权限管理(权限管理就设计到从DAC、MAC、RBAC到ABAC等演化),还包括行为分析、信任评估等各种能力,是一套逻辑组 ...
什么是零信任
零信任的发展
传统场景中,企业的安全都是在以防火墙为边界的。但是,随着远程办公变得普遍,诸如VPN之类的技术在企业中应用的很普遍。这就使得企业的安全边界必须进行扩大以允许来自全球各地各种类型终端的访问(这取决于从哪里接入VPN)。
在2010年,Forrester在 Post not found: No-More-Chewy-Centers:Introducing-The-Zero-Trust-Model-Of-Information-Security 中提出了零信任的概念。经过迭代更新,最终形成了目前知名的Zero Trust eXtended框架, 简称 ZTX。
美国NIST在2020年发布的《NIST Special Publication——Zero Trust Architecture》以及一个关于零信任的项目US National Cybersecurity Center of Excellence。
业界普遍认为,零信任所倡导的改变是必要的。因为通过零信任,可以防止恶意用户在企业边界内部访问私有资源、防止数据泄露以及恶意操作。
零信任的概念
零信任系统是 ...
华为云零信任能力成熟度模型
Zero Trust Architecture(英文版)
Zero Trust Architecture(中文版)
网络安全先进技术与应用发展系列报告零信任技术(Zero Trust)(2020年)
来源:中国信息通信研究院、奇安信科技集团股份有限公司
零信任发展与评估洞察报告(2021年)
来源:零信任实验室和云计算开源产业联盟
数字化时代零信任安全蓝皮报告(2021年)
来源:中国信息通信研究院云计算与大数据研究所和腾讯云计算(北京)有限公司
零信任的发展及其在安全远程访问中的应用
来源:零信任的发展及其在安全远程访问中的应用
零信任接口应用白皮书(2021)
来源:零信任接口应用白皮书(2021)
零信任系统技术规范2021
来源:零信任系统技术规范2021
2021零信任落地案例集
...
e1e7ade2f34f8352e2dc608193ed98ab3ec9445c316c90f87df1a31962a3c795bd41f79d768c9ea1e128f86dd80a6aa3cd5a2e4eeb7e0b03aa79304ef652513b8244117f1bb308732409f74d9dece9d43663295f03f5b75f878438f7226d5024ae5739793f952a92022b7bf7337da8190c5c5270b737f204d5be42394dde95973342e2f9a31a7f73c0c3a67815b3a07bff3bca9abfc39e4941a390bfa05c4de9ac5b8c29465805f9b0c8db6ee2dd86fb618488a572562a49751bc600f169f68eec095cf07862af648487ea0e528ea781182432259669791e2423b4cf5aea9f8eaf750888e7007f8087ec17e026ef95b2cdcf8e3f259db7ff0 ...
目录
1 零信任背景
1.1 零信任发展历程
1.2 零信任VS传统方式
2 零信任架构
2.1 基本概念
2.1.1 核心思想
2.1.2 核心原则
2.2 零信任安全架构及组件
2.2.1 策略评估数据源
2.2.2 零信任关键技术(SIM)
2.3 信任算法
2.4 网络/环境组件
2.5 安全能力
3 部署场景/案例
3.1 零信任应用场景
3.2 企业产品情况
3.3 落地案例
3.3.1 奇安信某大型商业银行零信任远程访问
4 零信任安全趋势
参考文献
1 零信任背景
随着云计算、大数据、物联网、移动互联网技术不断发展,企业IT技术设施变得越来越多样化,业务系统访问需求越来越复杂,内部员工、供应商人员、外部合作伙伴等可以通过多种方式灵活接入系统,系统之间的互联互通也将被更多的终端访问,企业原有的 网络边界逐渐模糊。
同时,网络安全风险及威胁日益复杂,APT攻击、勒索软件、内部越权操作等新型网络攻击手段层出不穷,对企业造成了重大的业务损失,而传统的基于边界的网络安全防护手段已难以应对这些潜在的安全威胁。
零信任模型是解决上述问题的有效 ...
前言
继 Post not found: 2022-申请-Office-365-E5-订阅并永久续期-5T-不限速网盘教程 免费申请 Office E5 订阅并领取 5T OneDrive 容量后。
本文将详细介绍,如何用 Vercel 搭建高性能不限速的 OneDrive 在线网盘 ,市面上虽然有许多挂载 OneDrive 索引的项目,但很多都没有持续维护了。
闲逛发现 Spencerwooo 的 GitHub 在 2022年更新了 ,而且全新改版了,部署方式也变了;有大聪明就要问了,既然有官方教程,我为什么还要另写一篇呢,因为官方教程是纯英文的,而且有小伙伴看了官方教程还是部署失败。
于是就有了这篇更详细详细的中文教程。
项目地址:https://github.com/spencerwooo/onedrive-vercel-index
官方教程:https://onedrive-vercel-index.spencerwoo.com/docs/getting-started
本站站点:https://drive.mspace.cc/
演示环境
Windows 10
Google ...
前言
微软其实一直都对开发版免费提供正版office全家桶 ,申请一次开发者计划可以获得为期90天的免费 Office365 E5 订阅。而E5计划就包含了25个用于所有 Office 365 应用的许可证。还附带**5T的不限速OneDrive网盘容量。**本文将详细介绍如何申请E5订阅许可、获取5T容量的OneDrive ,以及永久续期教程。
抛弃盗版从此刻开始。
演示环境
Windows 10Google chromeClash 香港节点(建议全程开全局模式)
申请开发者账号
访问申请
申请地址:https://developer.microsoft.com/zh-cn/microsoft-365/dev-program
点击立即加入。
登录账号
登录需要申请成为开发者的微软账号,如果没有可以注册一个新的再登录。
注册开发者
根据指引填写各类资料后注册。
设置E5订阅
如果不需要自定义域名就直接选即时沙盒,反之选第二个。设置好自己需要的配置后验证号码即可**(请确认已经挂上了节点)**。
申请成功
至此,账户就已经拥有为期90天的E5订阅了,并一次性申请了25个用户许可 ...
软件安装
1. Anaconda/miniconda
Anaconda官网: anaconda
Miniconda官网: miniconda
Anaconda安装包: Anaconda3-2022.05-Windows-x86_64.exe
Miniconda安装包: Miniconda3-latest-Windows-x86_64.exe
2. Pycharm/VSCode
Pycharm官网:pycharm
VSCode官网:vscode
Pycharm安装包:pycharm-community-2022.1.1.exe
VSCode安装包:VSCodeUserSetup-x64-1.67.2.exe
3. 搭建环境
创建/删除虚拟环境
1234# 创建虚拟环境conda create -n env_demo python=3.8# 删除虚拟环境conda remove -n env_demo
激活/退出环境
1234# 激活环境conda activate env_demo# 退出环境conda deactivate env_demo
安装依赖
12345678910 ...