wrapper

Rust: Bindgen绑定CTP C++原生接口尝试

删除回忆录丶 提交于 2020-10-06 11:34:44
一、 环境准备: WSL2 + Bindgen + CTP C ++ 接口 for linux Bindgen : https : / / github . com / rust - lang / rust - bindgen CTP for linux 说明一下,我在windows环境下,同样的方法,一直报libclang没有找到,至今也没有解决,看了github bindgen issues上提的问题,类似的问题不少。试了不少方法,终于放弃,转WSL2. 二、构建wrapper.hpp 文件 wrapper.hpp是告诉bindgen,我这些都需要帮我翻译一下。东西在这呢。这个文件可以放在src目录下。 # include "../ctp_sdk/ThostFtdcMdApi.h" # include "../ctp_sdk/ThostFtdcTraderApi.h" # include "../ctp_sdk/ThostFtdcUserApiStruct.h" # include "../ctp_sdk/ThostFtdcUserApiDataType.h" 三、倒腾build.rs文件 build.rs文件,放在工程目录的根目录下,我这儿的工程名是“rust_new_test”,build.rs放在和Cargo.toml同一目录级下,并列就好。 use std :: env

Tomcat源码分析(2)-连接器Connector整体架构

泄露秘密 提交于 2020-10-06 03:09:18
在 上一篇 博文中,主要分析了tomcat的整体架构,通过上一篇的分析可以知道,tomcat主要有两部分组成,分别为连接器(Connector)和容器(Container)。本文介绍连接器(Connector)。 一、Connector的主要功能 连接器主要用于对外交流,它负责接收外部的请求,然后把请求转交给container进行处理。主要功能如下: 监听网络请求、接受字节流 根据应用层协议(HTTP or AJP)把接受到字节流转换成TomcatRequest 把TomcatReqeust转换成ServletRequest 调用容器Servlet,得到ServletResponse 把ServletRespone转换成TomcatResponse 把TomcatResponse转化成字节流,返回给浏览器 基于以上详细分析可知Connector的主要功能可以抽象为三点 网络监听 协议解析处理 协议屏蔽转换(tomcatRequest到servletReqeust转换,servletResponse到tomcatResponse的转换) 二、Connetor内部的组件 基于上述的分析,接下来具体看tomcat connector的代码组件,主要有三个 Endpoint-用于网络监听 Processor-用于协议解析处理 Adapter-用于转换

xilinx zcu106 vcu demo

生来就可爱ヽ(ⅴ<●) 提交于 2020-10-03 06:31:40
board:zcu106 tool: vivado 2019.2 vitis 2019.2 petalinux 2019.2 doc:PG252 UG1209 ref: http://www.zynqnotes.com/a-simple-vcu-design ref: https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/176783395/Zynq+UltraScale+MPSoC+VCU+TRD+2019.2 zcu106_hdmitx 想demo一个简单的例子,编解码SD卡上的数据,在PC上验证是否成功 逻辑设计: vivado 2019.2 新建工程(采用zcu106模板) 添加PS:ZYNQ UltraScale+ MPSoC (Run Block Automation),可以将zcu106默认的一些器件都自动配置好,这一步不要忘 添加VCU:ZYNQ UltraScale+ VCU (Run Block Automation) PG252 Ch12 Design Flow Steps (P149)可以大概参考一下,可是照着做好像不行。 VCU有6个AXI接口 S_AXI_LITE:APU主,VCU从,用于APU访问配置VCU寄存器 M_AXI_ENC0,M_AXI_ENC1,M_AXI_DEC0,M_AXI_DEC1

Python 函数和装饰器

帅比萌擦擦* 提交于 2020-10-02 23:49:21
函数的定义和调用 定义: def 关键词开头,空格之后接函数名称和圆括号(),最后还有一个英文冒号":"。 函数名:在Python中函数即变量,所以函数名也同样遵循变量的命名约束。数字字母下划线组成,不能以数字开头且应具有描述函数功能的作用。 括号:是必须加的,先别问为啥要有括号,总之加上括号就对了! 注释 :每一个函数都应该对功能和参数进行相应的说明,应该写在函数下面第一行。以增强代码的可读性。 调用 :就是函数名() 函数名加括号 !不加不执行 来个函数 >>> def bar(): ... print("hello function!\n") ... >>> bar # 不加括号给的是这个函数的地址, <function bar at 0x10da670d0> >>> bar() # 加了括号才会被执行 hello function! 我们现在想让一个函数完成两个数的加和操作,即我们自己来实现sum()这个内建函数的功能。 def mysum(a,b): sum = a+b result = mysum(1,2) print(result) 结果为:None 怎么样才能让他能像sum()一样呢? 现在的函数功能已经完美的实现了,但是没人知道这个函数已经把任务完成了! 怎么证明自己呢,函数要把执行的结果返回让大家看到! 在函数的最后加上 return关键字 def mysum

不会吧,你想学爬虫,却不懂它的原理?

送分小仙女□ 提交于 2020-10-02 20:46:55
在学习爬虫前,先了解一下基础知识,例如http原理,网页基础知识,爬虫基本原理等。 HTTP基本原理 一个网站的图标链接,它就是一个URL,也可以叫URI,但是我个人习惯于URL,而且在互联网中URL也是比较常见的。 超文本 我们在浏览器里看到的网页就是超文本解析而成的, 其网页源代码是一系列 HTML 代码, 里面包含了一系列标签,在网页里面的HTML就是可以被称之为超文本。例如我们在谷歌浏览器,打开开发者工具,看到的就是一些源码,这些源代码就是超文本。 HTTP和HTTPS HTTPS被称之为安全通道,也就是HTTP的一个安全升级。这个我们在自己也可以看到。 HTTP请求过程 我们在浏览器中输入一个 URL ,回车之后便会在浏览器中观察到页面内容 实际上,这个过程是浏览器向网站所在的服务器发送了一个请求,网站服务器接收到这个请求后进行处理和解析,然后返回对应的响应,接着传回给浏览器。 响应里包含了页面的源代码等内容,浏览器再对其进行解析便将网页呈现了出来。 新手学习,Python 教程/工具/方法/解疑+V:itz992 学会看懂网页的一些元素也是很重要的,比如一些请求头信息,响应头信息,这些都是我们在网络爬取过程必须要走过的路。 请求 1.请求方法 请求头 请求头,用来说明服务器要使用的附加信息,比较重要的信息有 Cookie 、 Referer 、 User-Agent 等

SWIG 3 中文手册——11. 类型映射

我们两清 提交于 2020-10-02 09:42:46
目录 11 类型映射 11.1 引言 11.1.1 类型转换 11.1.2 类型映射 11.1.3 模式匹配 11.1.4 复用类型映射 11.1.5 类型映射能干什么? 11.1.6 类型映射不能干什么? 11.1.7 与面向切面编程的相似之处 11.1.8 本章的剩余部分 11.2 类型映射详述 11.2.1 定义一个类型映射 11.2.2 类型映射作用范围 11.2.3 复制类型映射 11.2.4 删除类型映射 11.2.5 类型映射的位置 11.3 模式匹配规则 11.3.1 基本匹配规则 11.3.2 typedef 还原匹配 11.3.3 默认类型映射匹配规则 11.3.4 多参数类型映射 11.3.5 匹配规则对比 C++ 模板 11.3.6 调试类型映射模式匹配 11.4 代码生成规则 11.4.1 作用域 11.4.2 声明新的局部变量 11.4.3 特殊变量 11.4.4 特殊变量宏 11.4.4.1 $descriptor(type) 11.4.4.2 $typemap(method, typepattern) 11.4.5 特殊变量与类型映射属性 11.4.6 特殊变量联合特殊变量宏 11.5 通用类型映射方法 11.5.1 in 类型映射 11.5.2 typecheck 类型映射 11.5.3 out 类型映射 11.5.4 arginit 类型映射

Vue+高德地图巡航轨迹,实现轨迹回放加进度条,加减速

独自空忆成欢 提交于 2020-10-02 02:51:55
应公司业务要求,给轨迹回放加个滚动条,一开始我采用的是高德地图的折线绘制,但是如果要加上进度条并不太不合适,拖动滚动条,点位没有恢复的API,后来决定使用巡航轨迹,巡航轨迹支持更丰富的轨迹API,使用起来也更方便。 下面是做完的效果图: 使用的技术有:vue,高德地图1.4(amap),element-UI 下面的是部分源码: html部分 <template> <div id="demo"> <div id="test-map" /> <!--控制条--> <div class="map-control" v-show="isActual"> <!--播放暂停按钮--> <Icon v-if="!isPlay" class="play-icon" type="ios-play" @click="isPlay=true;navgControl('start')" /> <Icon v-else class="play-icon" type="ios-pause" @click="isPlay=false;navgControl('pause')"/> <!--已播放时间--> <span class="passed-time">{{passedTime}}</span> <!--进度条--> <el-slider v-model="sliderVal" :format

如何优雅地实现Python通用多线程/进程并行模块

夙愿已清 提交于 2020-09-30 04:52:13
当单线程性能不足时,我们通常会使用多线程/多进程去加速运行。而这些代码往往多得令人绝望,需要考虑: 如何创建线程执行的函数? 如何收集结果?若希望结果从子线程返回主线程,则还要使用队列 如何取消执行? 直接kill掉所有线程?信号如何传递? 是否需要线程池? 否则反复创建线程的成本过高了 不仅如此,若改为多进程或协程,代码还要继续修改。若多处使用并行,则这些代码还会重复很多遍,非常痛苦。 于是,我们考虑将并行的所有逻辑封装到一个模块之内,向外部提供像串行执行一样的编程体验,还能彻底解决上面所述的疑难问题。所有代码不足180行。 GitHub地址: https://github.com/ferventdesert/multi_yielder 使用时非常简洁: def xprint(x): time.sleep(1) # mock a long time task yield x*x i=0 for item in multi_yield(xrange(100)),xprint, process_mode,3: i+=1 print(item) if i>10: break 上面的代码会使用三个进程,并行地打印1-10的平方。当打印完10之后,进程自动回收释放。就像串行程序一样简单。 1. 先实现串行任务 我们通常会将任务分割为很多个子块,从而方便并行。因此可以将任务抽象为生成器

MybatisPlus

送分小仙女□ 提交于 2020-09-30 02:42:07
详情见 mybatis-plus官网 快速开始 引入依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.0</version> </dependency> 配置连接数据库,和mybatis一样 spring.datasource.username= spring.datasource.password= spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai 在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹 编写实体类 User.java 编写Mapper类 UserMapper.java public interface UserMapper extends BaseMapper<User> { } 测试 常用注解 @TableName

Java应届生面试必备考题(附答案)

蹲街弑〆低调 提交于 2020-09-30 00:15:32
点关注,不迷路;持续更新Java相关技术及资讯!!! 内容源于群友投稿!感谢支持! 前言 今年收到疫情的影响,导致很多的应届生都还没有找到工作的,那么对于Java应届生来说,又有那些是必须要要会的呢,那些又是必考的呢,今天带着大家一起来看一下!在这里整理了100个必备考题,因为篇幅有限只列举了部分出来,需要全部的大厂面试题的, 可以点击此处免费领取 ,还有优秀的简历模板哟 面向对象的特征有哪些方面? 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类称为父类(超累,基类);得到继承信息的类被称为子类(派生类)。继承让变换中的软件系统有了一定的延续性。同时继承也是封装程序中可变因素的重要手段。 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口。面向对象的本质就是将现实世界描绘成一系列的完全自治、封闭的对象。我们在类中编写的方法就是对实现细节的一种封装;我们编写一个类就是对数据和数据操作的封装。可以说,封装就是隐藏一起可以隐藏的东西,只向外界提供最简单的编程接口。 多态性:多态性是允许不同子类型对象对同一消息作出不同的响应。简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情