自定义博客皮肤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的专栏

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

  • 博客(93)
  • 资源 (7)

原创 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 125

翻译 Redis Streams介绍(二)

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

2020-07-09 08:41:54 85

翻译 Redis Streams介绍(一)

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

2020-07-08 09:10:57 106

原创 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 536

原创 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 465

原创 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 287

原创 Boost Beast要点解析(一)

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

2020-06-15 16:30:29 908

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

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

2018-11-30 15:04:45 632

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

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

2018-11-30 14:58:24 1260

原创 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 1267

原创 Boost Asio要点概述(二)

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

2018-10-29 10:05:57 1959 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 8279 3

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

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

2018-09-21 17:03:01 1762

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

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

2018-09-21 16:53:24 2031

原创 Boost中的协程—Boost.Coroutine2

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

2018-09-21 16:44:06 6594

翻译 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 412

翻译 Boost.Asio初步(二)

Network programmingEven though Boost.Asio can process any kind of data asynchronously, it is mainly used for network programming. This is because Boost.Asio supported network functions long before a...

2018-09-05 15:40:17 1146

翻译 Boost.Asio初步(一)

【注】本翻译来自https://theboostcpplibraries.com/boost.asio。boost.asio从v1.66起io_service变成了io_context,二者有一定差异,但基本应用相同。目  录IO服务和IO对象 可扩展性和多线程 网络编程 协程 与平台相关的IO对象This chapter introduces the library Boost...

2018-09-05 15:20:50 4508

原创 Tornado开发(六)— 扩展

5. 多进程部署多进程部署也有两种方式:一是利用tornado自带的启动多个进程的方式,二是利用Nignx在前面做负载均衡的方式。tornado自带方式测试代码如下:class LongHandler(tornado.web.RequestHandler): def get(self): stime=time.strftime('%Y-%m-%d %H:%M:%S',time.localti...

2018-07-03 09:15:10 604

原创 Tornado开发(五)— 扩展

4. 协程异步/多线程处理以协程方式(Coroutine)进行异步处理,是Tornado推荐的方式。Coroutine不采用回调函数方式,而用yield来挂起和恢复运行(现在又有新关键字了,说明python的Coroutine还没有稳定下来),协程编程风格看起来像同步,但又没有线程的切换,因此效率要高一些。在Tornado中,现在有两种方式实现协程:一是函数前加@tornado.gen.corou...

2018-07-02 09:22:59 789 1

原创 Tornado开发(四)— 扩展

2.  页面的Session检查Web应用中,各页面实际上是没有关系的,但为了给用户“完整”的感觉,需要用一个Session对象将用户访问的各页面“串”起来,同时,某些信息比较敏感,不希望被“窃听”或“修改”,因此,在每一页被访问时,通常的的做法是首先检查Session对象,以确定访问者的身份。有许多种方法可以实现上面的逻辑,例如,数据可缓存在浏览器或服务器中,对敏感数据采用特别的加密解密方式等。...

2018-06-26 10:41:29 540

原创 Tornado开发(三)— 网页模板 及扩展

6. 多语言支持(Internationalization)作为一款web开发框架,国际化是必不可少的,虽然只做国内网站时没啥用。如果需要做一个多语言支持的网页,首先要准备多语言翻译文件,tornado支持两种格式的翻译文件:po/csv,csv更简洁些,下面以此为例来说明。csv文件的格式为(三列):字符串,翻译,”plural”/“singular”,最后一列表明此翻译为单数时用还是复数时用,...

2018-06-26 10:35:28 846

原创 Tornado开发(二)— 网页模板

四. 网页模板最终呈现给用户的html页面,一般是由静态信息与动态信息合成的,静态信息与用户等应用环境无关,动态信息则与用户、场景相关,多是从数据库中取得数据后加工得到的。在tornado中,保存在服务器端的包含动态信息的文件叫模板(template),模板文件被request handler载入并处理,即替换其中的动态信息,变成符合要求的html文档发给客户。Tornado 会把模板文件编译成原...

2018-06-26 10:10:41 1758

原创 Tornado开发(一)—— 概述及构成

一.概述Tornado是用python写的异步web架构库,几行代码就可以写出httpsever和WebSocket server,它是采用python构建 web服务的几种流行的架构之一。关于Tornado与Django的区别,网文很多,不再描述,笔者选择Tornado而不是Django的主要原因同样是Django包揽太多,灵活度小,而Tornado比较适合中小性网站(不是从性能上讲),这是笔者...

2018-06-13 16:48:31 2305

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

四.交互示例1.  C/C++代码中调用Lua脚本int test_lua1(){ int ret=0; lua_State* pLuaEnv; pLuaEnv = luaL_newstate(); if (pLuaEnv == nullptr) { ret=-20; return ret; } ret = luaL_loadstring(pLuaEnv, "functi...

2018-05-18 15:29:57 373

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

一.概述Lua是1993年由巴西里约热内卢天主教大学一个研究组开发的编程语言,算来是一种“中年”语言了,Lua用标准C语言编写并开源,其设计目的是为了嵌入应用程序中,因此Lua有几个特点:轻量级,Lua 是一种轻量小巧的脚本语言简洁,自动内存管理;只提供了一种通用类型的表(table)过程与函数式编程,不直接支持面向对象编程最后一点, Lua提供了非常易于使用的扩展接口和机制:由宿主语言(通常是C...

2018-05-18 14:36:04 307

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

六.在C/C++环境中调用python代码在这种情况下,C/C++代码是主程序,按复杂度,分几个例子说明。1.最简单情况,无参数传递int run_simple_py(){ char const *script="def hello():\n\tprint(\"hello world!\")\nhello()"; int res; Py_Initialize(); res=PyR...

2018-05-16 10:21:23 1701

原创 python与C C++的交互(二)

五.在python环境中调用C/C++代码前面是两点基础,这节说明在python环境中调用C/C++代码。大致有两种方式:1.       将c/c++代码编译成(操作系统)标准的动态库,在python中“引用”后调用2.       将c/c++代码写成python扩展库,就如同python的内置的标准库一样,正常引用后调用第一种方式比较简单,下面是一个简单示例。C/C++代码(文件名为mm.c...

2018-05-16 10:13:45 2535

原创 python与C C++的交互(一)

一.概述Python是目前“大火“的编程语言,一种作为“胶水”的脚本语言,能得到如此的应用,确实有它独到之处。C/C++是一种“性能”编程语言,较为古老且经典,因与unix,linux,windows这些底层操作系统相关,而得到广泛应用。Python从一开始就支持C语言的“嵌入”,这是python为弥补性能不足的一种措施,其实python的库就是用C编写的。两种不同编程语言的应用之间的数据传递,可...

2018-05-16 10:05:35 4363

原创 IEEE1888-物联网领域的绿色节能标准(七)

十、1888.4智能家居控制2013年4月9日,1888.4绿色智能家居与居住控制网络协议(Green Smart Home and Residential Quarter Control Network Protocol)的起草正式启动,由广州视声电子科技有限公司担任主席单位,成员有广州智能家居技术标准促进中心、北京天地互连信息技术有限公司、广州星海传媒有限公司等,1888.4瞄准的是智能家

2016-04-21 16:55:59 1489 2

原创 IEEE1888-物联网领域的绿色节能标准(六)

九、    1888.3安全性1.    背景与简介IEEE1888.3标准于2013年通过颁布,全称为:IEEE Standard for Ubiquitous Green Community Control Network: Security。一个网络系统,数据安全在系统中的作用,就不再赘述了。计算机系统安全其实涉及面很广,1888.3主要涉及数据传输安全,也就是身份认证、数据的加

2016-04-19 10:28:38 1080

原创 IEEE1888-物联网领域的绿色节能标准(五)

八、1888.2聚合异构网及可扩展性1.    背景与简介IEEE1888.2标准于2014年通过颁布,全称为:IEEE Standard for Ubiquitous Green Community Control Network: Heterogeneous Networks Convergence and Scalability。1888和1888.1都是讨论同种网络的事情,但实际上

2016-04-14 14:45:45 1186

原创 IEEE1888-物联网领域的绿色节能标准(四)

【从这一节起分几节介绍1888下的子标准】七、1888.1管理与控制1.    背景与简介IEEE1888.1标准于2013年通过颁布,全称为:IEEE Standard for Ubiquitous Green Community Control Network:Control and Management。前面已介绍过,1888网络基本属于“自治”型,没有管理中心,各组件之间是

2016-04-11 14:27:47 1678

原创 IEEE1888-物联网领域的绿色节能标准(三)

四.现实中1888协议的实现        在1888标准通过后不久,日本东京大学即提交了自己的实现(见http://133.11.168.39/dist/),笔者不懂日文,不太明白上面的意思,但大致看出来,东京大学的相关应用工作一直在继续,并且做得不错,版本一直在升,应用场景也在扩大。文字不太懂,程序倒可以看看,以下是编号为201310的1888示意包(大概是2013年10月版)的特点:

2016-03-17 11:31:35 1417

原创 IEEE1888-物联网领域的绿色节能标准(二)

(笔者参与了标准的编制,文章系原创,转载请标明来源)三、1888介绍本节都是讲述IEEE1888-2011标准的,其它子标准都是在其基础上的扩展,关于子标准的情况,将在下面各节中介绍,本节不涉及。在介绍标准之前,先说说标准中point的概念,在1888标准中,point可以是任何可以度量的、随时间变化的物理量,并不限于现场设备中传感器、动作器中的物理量,也可以指诸如CPU占用率

2014-03-06 21:40:28 4477

原创 IEEE1888-物联网领域的绿色节能标准(一)

一、 概述IEEE1888是首个由中国发起的物联网领域的标准,是中国通过国际合作,在编写中占主导地位,并使之成为全球标准的代表。IEEE1888,更准确地说是一个工作组,由我国企业担当主席单位,由这个工作组编制标准草案,交由IEEE会员讨论通过,通过的标准就成为IEEE1888标准,IEEE1888标准,不是一个,而是一个标准族,目前,已经经IEEE立项的标准包括5个:1.      IE

2014-02-18 17:03:48 3340 2

翻译 HDFS架构(Apache Hadoop 2.1.1-beta)

(Apache Hadoop 2.1.1-beta,摘自http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html)HDFS Architecture  HDFS架构Introduction 引言The Hadoop Distributed File System

2014-01-16 15:35:17 3325

翻译 HDFS 用户手册(Apache Hadoop 2.1.1-beta)

(Apache Hadoop 2.1.1-beta,摘自http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsUserGuide.html)目的概述先决条件Web接口Shell命令DFS管理命令备用NameNodeCheckpoint节点Backup节点引入检查点

2014-01-13 10:14:22 4751

原创 hadoop2.0介绍(二)

(接上文)2. YARN(MapReduce NextGen/MRv2)这三个名字都在说明一个东西,改进的mapreduce。(注:有些文章中,将YARN与MapReduce分开,认为YARN是MapReduce的基础/支撑,具体的分布式计算的实现依然是MapReduce,这样理解也可以,本文是将它们合在一起介绍。)Mapreduce包含三方面的内容:终端用户使用的API及使用

2013-11-26 10:04:58 6282

原创 hadoop2.0介绍(一)

一、概述现在大数据很“热”,hadoop系列(也称为The Hadoop Project Ecosystem)东西随着也很“热”,不过hadoop也确实有此“资本”,hadoop起源于google的产品,本身就是为海量数据量身定做的。Hadoop大致在2005-2006年成形,经过几年的发展,估计明年能出2.0正式版。2.0版与1.0版有比较大的区别(开源产品的硬伤:随意性比较大),具体来说,

2013-11-26 10:04:14 12712 1

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

空空如也

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