自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

guxch的专栏

路漫漫其修远兮,吾将上下而求索

  • 博客(117)
  • 资源 (7)
  • 收藏
  • 关注

原创 opencv中的图像特征提取

本文主要描述了图像特征提取的几种常用方法,并说明了其在opencv中的应用。

2025-05-09 15:37:31 1146 2

原创 openssl中BIO的使用

本文主要介绍了BIO的结构和使用方法,并以示例方式给出了一种对BIO的封装,可为下一步与socket的相关操作结合,编写自定义的“加密/解密流”。

2025-05-09 15:36:40 904

原创 pyorch中tensor的理解与操作(二)

bmm大概是pytorch针对大量应用的batch个二维矩阵集(相当于3维矩阵)乘法的一种扩展,A,B的shape分别为为(b,l,m),(b,m,n),相乘后的shape为(b,l,n),这种乘法相当于首先把A拆成b个(l,m)矩阵,B拆成b个 (m,n)矩阵,A中第i个矩阵与B中对应的第i个矩阵相乘,然后再将b个结果矩阵合起来。关于多维矩阵的转置,例如第2,3维度转置,将第3维之后的维度看成一个整体,第2维之前的维度不用理会(指转置前后不会发生变化),那么就相当于二维矩阵(第2,3维度)的转置。

2025-05-08 19:54:43 944

原创 pyorch中tensor的理解与操作(一)

tensor 是PyTorch 中一个最基本的数据集合类型, 本文注意针对该结构类型,说明它的存储方式以及主要的操作方法。

2025-05-08 19:54:20 822

原创 OpenResty使用(二)

OpenResty的使用。

2022-07-08 09:17:10 1082

原创 OpenResty使用(一)

OpenResty的使用介绍。

2022-07-07 14:38:10 2626

原创 Lua与C C++的交互(三)

Lua与C/C++的交互:metatable的应用和回调函数种引用“全局”数据。

2022-01-24 15:29:48 804

原创 C++20新特性—span与bind_front

Std::spanspan<T>表示一段连续的内存,像数组一样,但它不拥有或管理这段内存,即它是“view”,大致上就是struct { T * ptr; size_t length; 一组获取内部元素的函数 },所以span具有三个特征:连续内存 轻量级 viewspan的三个特征决定了它主要应用场合包括:C风格的(T *,size_t length)的包装器,这样,对C风格“数组”的操作,可以用C++容器类操作的风格来代替; 类似于string_view对string的作

2021-02-19 09:45:54 2657

原创 C++20新特性—数学计算库

数学常数增加了<numbers>,其中定义了常用的数学常数,如e,log2e,sqrt2,sqrt3等。Bit操作新增了一些列bit的操作,如按位判断有几个0,几个1等,具体内容参加库函数说明,用法示意如下(std::bit_cast在gcc10.2中未被支持):...

2021-02-07 09:41:06 1031

原创 C++20新特性—格式化文本与串行化输出

text formatting这一部分是对格式化输出的扩展,并增加了std:format一系列函数,感觉与C#相当类似(穿越了?)。对某一类型,其占位符(替换符)的格式如下:{n:arg-id}其中n代表后面参数的index,终于可以占位符的顺序与参数顺序不同了,也可以重复输出某参数了,n也可以是一个名字,绑定后面的参数,以实现命名参数输出,arg-id的规则比较复杂,与原先的format string类似。以下是几个例子:位置对应输出:print("I'd rather be {1}

2021-02-07 09:39:44 1433

原创 C++20新特性—时间库

C++11中的时间库有三个基本概念:Duration:表示两个时刻的度量,如时、分、秒都是duration。duration内部是通过count和计量精度(period precision)来衡量duration,其中period precision表示成秒的倍率值(ratio)。 Time point:表达某一特定的时刻点,但实际上,绝对的时刻点是不存在的,因此time point也是由duration来表达的,它是机器上的clock相对于epoch的duration。 Clock:用time p

2021-02-05 10:52:48 1089

原创 C++20新特性—consteval与constinit

consteval可用在立即函数(immediate function),立即函数实际上是编译时运行的函数,也就是它的参数在编译时是“确定的”(常量),它的结果也是常量。constexpr可用于编译或运行时函数,它的结果是常量。它们区别如下例,特别注意的是注释掉的那行。using namespace std;consteval int compileconst(int n) { return n+1;}constexpr int runcompileconst(int n) { return n

2021-02-04 13:35:13 4432

原创 C++20新特性—三路比较符<=>

集合(set,map等)算法通常会涉及元素比大小,因此两个元素(类型)的比较操作就显得额外重要。两个类型之间的共有六种比较符(<,<=,>,>=,==,!=),如果需要完整的表达,就要写六个函数,如果需要与可转换类型比较,这项工作显得比较繁琐,因此这也是C++引入<=>的基本初衷。【如果认为用一个比较符,例如”<”就可以推导出另外几个,其实这只适用于一些场景,这也是C++引入新的比较操作符的另一个原因。】<=>称为3-way comparison o

2021-01-29 13:46:33 4290 2

原创 C++20新特性—range(二)

6.viewview是一种range,它具有固定的拷贝、移动和赋值时间,正如名称所示,view是“视图”(引用),它本身不保存数据,因而可以保证复制等操作的等时间性。view一个重要的特征是“lazy evaluation”,即它在被定义的时候,仅将各种参数准备好,并没有运算,只有需要结果的时候,它才开始进行运算,得到结果。这个特性与数据库中的视图概念是一致的。下面的示例说明了“lazy evaluation”的特性。 std::vector<int> ints{0,1,2,

2021-01-28 15:44:43 2143

原创 C++20新特性—range(一)

“Ranges”的意思是一组元素的集合,既然是集合,最基本的操作就是对其中元素的枚举(iterate),按照一个集合是否可读写以及如何进行枚举,集合可分为以下几类(以concept形式体现)

2021-01-28 14:02:20 5675

原创 C++20新特性—coroutine协程(二)

下面一个示例说明co_await 的用法。template<class T>struct generator{ struct promise_type { std::suspend_never initial_suspend() const noexcept { std::cout<<"initial_suspend"<<std::endl; return {}; } std::suspend_never final_suspend()

2020-12-24 09:34:23 1573 1

原创 C++20新特性—coroutine协程(一)

所谓“协程”,简单点说就是一个函数可以中止运行,待“条件成熟”后,再次在断点的地方重新运行,即能以“进入-暂停-继续-暂停…”这样的方式运行函数,因此讨论协程,需要关心下面几个问题:在运行点暂停,然后再运行—暂停点的记录 暂停时的运行环境,恢复运行时,应首先恢复当时的环境—运行环境的记录 因协程状态是变化的,因此需要有办法查询协程当前的运行状态,包括返回值、异常等—协程状态的记录异步操作是 “慢”资源与“快”资源协调编程方面的一个“老”问题,协程的目标就是试图以“同步的形式”编写出异步操作的效果。

2020-12-23 14:56:44 2702

原创 C++异步操作中的future/promise

std::future、std::promise是在C++11中出现的类,定义在<future>中,在C++20以前,异步操作主要依靠它们以及其它一些类、函数等来完成。C++20中引入了coroutine,从语言层面而不仅是实现方法层面实现异步操作,但coroutine中也涉及到std::future等对象,因此需要先理解一下这些C++11就出现的类,下一篇再介绍C++20的coroutine。std::futurestd::future可以保存某一操作(函数)的结果,因而也可以用来在不

2020-12-21 10:32:51 775

原创 C++20新特性—线程支持库

C++20线程库增加的内容主要包括两方面:jthread及相关的stop_token等;用于线程同步的semaphore、latch等。一、joinable和stoppable的jthread1. jthreadstd::jthread也在<thread>中定义,基本与std::thread相同,不同在于:在析构时,自动join到主线程,此时写法上比单纯用sth::thread简洁些 可以在线程外终止此线程的执行,jthread内部有一个std::stop_source对象,而

2020-12-08 14:32:38 1464

原创 C++20新特性—模板类型约束(concept)

模板编程中,类型是一种输入参数,对某一具体模板类,多数情况下,并不是所有的类型都适合,类型必须符合某种要求,模板类型约束就是在编译期,用于限制模板参数。其实在C++11的type_traits中,就有很多类似于is_const、is_base_of、enable_if、conditional这样的类型判断,类型选择,类型操作等函数,它们在编译期施加到类型参数上,起到了类型限制等作用。C#中,早就引入where关键字,来进行泛型约束。这里C++中也为此引入两个关键字requires和concept,将类型

2020-12-08 09:31:33 7504 1

原创 C++20新特性—module

模块概念是现代编程语言的一大特征,目的是将大型程序分割成合适的部分(包括复用),再通过相关规则组合起来。C/C++一直采用.h文件的方式,将函数/类型声明与它们的实现分开,这种方式大致上有三个问题:重复、循环包含问题(虽然ifndef等可以解决此问题,但并不方便)。 函数声明与实现分开,函数类型说明一般需要写两遍,修改时不方便。 模板的引入,使得大量代码只能在.h中编写,整个程序的编译速度变慢(尤其存在大量模板类的场景)。在这方面,C#,java中模块定义、引入机制要简洁、方便得多。Modules

2020-12-07 15:54:11 1411

原创 C++20新特性—概述

ISO / IEC 14882:2020(即C++20标准)标准草案在2020年9月获得了全票通过,年底能正式发布。对C++20,多数的评论是它具有可与C++11相比较的重大变化。下图是Rainer Grimm博文中给出的C++20的主要变化。其实,一门编程语言的变化大致上是应该分两个层面,一个是语言层面,即增加了语言新特性;二是库层面,其实就是各种“语法糖”等,它们是在语言层面的基础上扩展、实现出来的,使用起来更“接地气”。cppreference 网站也给出了C++20的主要变化(htt

2020-12-07 10:31:25 5706

原创 Libuv应用(二)

三、TCP/UDPLibuv最常用的应用是TCP和UDP通信。它们是libuv的主要功能,但有很多文章都描述了,本文就不涉及了。四、人工通知事件一般情况下,一个线程运行一个事件循环,线程阻塞,等待事件的发生,如果我们想“干预”一下这个事件循环,例如,停止它,向某个socket通道发点信息等,就需要人工“制造”一个消息触发一次,此时就需要用到uv_async_t。由于事件循环的线程处于阻塞状况,所以发消息的函数应该在另一个线程。下面是一个示例。int test_async(){ int

2020-11-04 09:20:52 1186

原创 Libuv应用(一)

笔者写过libevent及boost.asio的有关介绍,另一个网络库libuv也得到广泛应用,似乎应该把libuv的介绍补上,因此就有了本文,本文仅是对libuv的一个大概描述,细节应该参考其官方文档(http://docs.libuv.org/en/v1.x/api.html),这也是本文的主要参考依据。本文涉及libuv对应的版本为1.39.0,例子的运行环境为windows10。一、libuv各种结构表1 各种核心结构 用于消息循环的各种核心结构,libuv的主要功能就从这些结构.

2020-11-03 08:58:50 1028

原创 Redis Stream使用要点

本文的适用于Redis6.0。一、流信息条目id流(stream)中信息条目的ID必须是单调增的,为此,redis采用时间戳+自增id这种方式来保证,并且这两个数都是64bit,不会有溢出问题,最后一点,redis在增加信息条目时会检查当前id与上一条目的id,自动纠正错误的情况,一定要保证后面的id比前面大。一个流中信息条目的ID必须是单调增的,这是流的基础,所以本文首先强调一下。几个特殊的ID:-,+:最小和最大可能出现的Id,也就是“0-1”和“最大整数-最大整数(64位)”$

2020-07-10 16:56:35 2025

翻译 Redis Streams介绍(二)

从永久故障中恢复 上面的例子允许我们向加入到同一使用者组的成员发送信息,处理各自的消息子集,并从故障中恢复,继续读取曾经发送过来的、被挂起的消息。但是,在现实情况,使用者可能发生永久故障而不再恢复,那么对不知何故不再恢复的使用者,那些挂起的信息怎么办呢? 在这种情况下,Redis提供了一个方法,用以回收特定用户的挂起信息,改变它们的所有权,将它们分配给另一个不同的用户。这个特性的目标非常明确,使用者必须能检查挂起的信息列表,并可以用一个特别的命令来获取这些特定信息的所有权...

2020-07-09 08:41:54 498

翻译 Redis Streams介绍(一)

(原文发布于https://redis.io/topics/streams-intro,对应redis6.04,本文已完成大半,忽然发现网上已有翻译文章,但还是按自己的理解完成文章的翻译。原文较长,原想将英文也附上,好对照,但确实太长了,终省去。) “流”是Redis5.0引入的新的数据类型,它的模型来自于日志数据,以一种更加抽象的方式,但日志的基本特征没有变化:通常像一个以只增加方式打开的文件。Redis流基本上就是一个只添加方式的数据结构。至少在概念上,作为一种在内存里展现的抽象的数据...

2020-07-08 09:10:57 671

原创 Boost Beast要点解析(四)

四、Beast中的network 由于http、websocket仅涉及tcp,因此在beast范围内,也仅涉及tcp协议,Beast的网络操作基于Asio,但Beast的一个目标似乎是做一个完整的系统(猜测),因此beast将涉及到的网络数据操作都“重写”的一遍(一些是简单包装,一些是扩展),例如Asio空间被重新命名为net,对std:bind也扩展为bind_handler和bind_front_handler。 beast设计了两套stream,一是用于http的...

2020-06-18 09:16:58 5004

原创 Boost Beast要点解析(三)

三、Beast中的http request和response 在beast文档中,专门解释了是如何构思http request和response类的。Request和response的定义如下:template<bool isRequest, class Fields, class Body>class message:public header<isRequest, Fields>,boost::empty_value<typename Body::...

2020-06-17 08:38:36 3622

原创 Boost Beast要点解析(二)

5.static_bufferstatic_buffer的定义如下:template< std::size_t N>class static_buffer : public static_buffer_base static_buffer可认为是max_size在编译时就已确定,因此内存大小固定,不会发生重新分配。基类static_buffer_base引用外部分配的内存,定义了一系列操作,static_buffer则分配了一段内存,其操作方法与基类基本一致(多了b...

2020-06-16 09:14:18 2791

原创 Boost Beast要点解析(一)

【注】本文不是关于beast的全面描述,只涉及一些要点,主要资料来源于beast官方文档和实现代码。本文对应boost 的版本为1.73。一、Beast中的Buffer

2020-06-15 16:30:29 9867

原创 C++17标准库新增类/函数(二)

 std::apply,std::invokestd:apply定义在&lt;tuple&gt;中,因而apply(f,t)的意思就是f(t),其中f是一个可调用的函数,t是一个tuple,pair,array之类的可以调用std::get和std::tuple_size的参数集合类。#include &lt;iostream&gt;#include &lt;tuple&gt;#in...

2018-11-30 15:04:45 2485

原创 C++17标准库新增类/函数(一)

std::FilesystemC++17中的filesystem库基本上与Boost.Filesystem相同。C语言库中有许多对文件的操作,但一直没有对目录及文件属性的操作。C++17中终于加入,主要包括以下内容:对文件系统的操作:path类,空间信息对目录的操作:创建,删除,属性,遍历目录的iterator等对文件整体的操作:删除,拷贝,属性,类型判断等。这些操作,是对以前...

2018-11-30 14:58:24 2223

原创 Boost Asio要点概述(三)

五、流式操作许多IO对数据的操作是按流式来进行的,为此Asio提供了流式操作,如上面的streambuf。对最典型的是TCP流,提供了ip::tcp::iostream。下例是一个简单的示例。void iostreamclient(int argc , char* argv[]){ boost::asio::ip::tcp::iostream stream; stream.expi...

2018-10-29 17:23:21 3233

原创 Boost Asio要点概述(二)

三、多任务执行复杂一些的应用,往往存在多个事件任务执行,此时既有可任意顺序执行的场景,也有按指定顺序执行的场景,前者可采用将任务放到多个线程执行,后者要用到”strand”概念。1.多线程支持Boost中io_context是支持多线程的,其内部有一个队列来分配待运行的句柄函数,对服务器端程序来说,这减轻了我们采用多线程同时执行任务的难度,虽然我们不能控制任务在多个线程进行分配的策略。...

2018-10-29 10:05:57 3395 2

原创 Boost Asio要点概述(一)

【注】本文不是boost asio的完整应用讲述,而是仅对其中要点的讲解,主要参考了Boost Asio 1.68的官方文档(https://www.boost.org/doc/libs/1_68_0/doc/html/boost_asio/overview.html),代码的测试环境为ubuntu 18.04,asio的编译及安装不在本文的范围之内。一、基本工作流程下图来自boost a...

2018-10-29 10:01:30 18901 3

原创 Boost中的协程—Boost.Asio中的stackful协程

Boost.asio中stackful协程是由Boost::Asio::spawn开启的,文档说,spawn是协程的一种高层次的封装,spawn由许多版本,多用以下定义:template&lt; typename Function&gt;void spawn( const boost::asio::io_context::strand &amp; s, Functi...

2018-09-21 17:03:01 3269

原创 Boost中的协程—Boost.Asio中的coroutine类

Boost.Asio中有两处涉及协程,本文介绍其中的coroutine类。Boost.Asio中的stackless协程是由coroutine类和一些宏来实现的。coroutine类非常简单,包括四个函数,一个int类型变量,用来保存当前函数的运行状态,与之配合使用的宏中,因采用switch来实现,所以可以根据这个整型变量的值实现跳转。Boost.Asio定义了一些宏,构成所谓的“伪关键字...

2018-09-21 16:53:24 4655

原创 Boost中的协程—Boost.Coroutine2

尽管可以有不同的翻译,coroutine本文被叫作协程。概念Coroutine是相对于routine(过程)而提出的,它与一般的父程序调用子程序的routine不同之处在于,它允许挂起一个程序执行点,过后再从挂起的地方继续运行,是一种更高级的程序运行顺序控制。为保证程序挂起再恢复,协程有其自己的栈和控制块,记录挂起时的状态。协程有如下特点:同其他数据类型一样,协程也是第一类(fir...

2018-09-21 16:44:06 15084 2

翻译 Boost.Asio初步(三)

Platform-specific I/O ObjectsSo far, all of the examples in this chapter have been platform independent. I/O objects such as boost::asio::steady_timer and boost::asio::ip::tcp::socket are supported ...

2018-09-05 15:59:48 967

Windows下的flex和bison

Windows下的flex和bison,用于编程辅助

2013-09-16

apache2.4 php5.4手工安装包.zip

apache2.4和php5.4的手工安装包(包括其依赖包),全部从官网下载,x64,Debian等操作系统适用,可供手工离线安装,mysql5.6的包太大了,不能上传,不过其官网提供deb包,直接下载安装即可。

2013-05-14

一个firefox OS App的例子

一个最简单的firefox OS App的例子,详细内容请参见作者博文。

2013-03-08

gcc编译动态和静态链接库

转载的gcc编译方法,开发时老是忘记,作为资源吧,省得找了。

2013-02-10

Windows平台的包含源代码的libevent(可编译)

将网上的libevent源代码的引用关系修改了一下,使所有的.h .c文件位于一个目录,可以采用代码级包含到项目中,也可以供分析libevent运行机制之用。 注:未包含项目文件,只适合于windows,自行创建vc项目后,包含所有文件(arc4random.c除外)。

2013-01-08

IronPyhton 2.7.1 帮助手册

IronPyhton 2.7.1 帮助文档

2011-09-01

C#小型图形绘制库源代码

c#开发的一个小型图形绘制库,详见本人文章《Silverlight学习-创建一个信息系统中趋势曲线图库(二)》

2011-07-23

空空如也

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

TA关注的人

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