简单、稳定、概念前卫且易看懂的JSON库——QJSON

2023-10-08
阅读 5 分钟
573
QJSON介绍QJSON 是 ZJSON的替代库。 ZJSON已经开发出来有一段时间了,也进行了一些应用,效果还不错,但现在存在些问题。字符串解析为json对象时,当初借鉴于json11,一直没时间去换成状态机模式没有进行大规模数据验证大量使用递归算法,没时间组织测试C++要求至少为 C++17 版本因此花了一个国庆假期,封装QT5:Core中的...
封面图

node.js基于 cmake-js 进行插件开发实战

2023-01-07
阅读 6 分钟
2.4k
以前工作在node.js环境下,做微服务产品; 三年前转回到C++环境,已经有一些代码积攒。我将以往基于node.js与C++的相关项目结合起来(C++代码以addon插件嵌入),实现了一个微服务快速(rest api service)开发框架。该框架以关系数据库为基础,现在支持(mysql、sqlite3、postgres),同时支持windows, linux, macos。本...

通用ORM的设计与实现

2022-09-20
阅读 6 分钟
5.9k
我们通用的ORM,基本模式都是想要脱离数据库的,几乎都在编程语言层面建立模型,由程序去与数据库打交道。虽然脱离了数据库的具体操作,但我们要建立各种模型文档,用代码去写表之间的关系等等操作,让初学者一时如坠云雾。我的想法是,将关系数据库拥有的完善设计工具之优势,来实现数据设计以提供结构信息,让json对象...

使用C++17手撸JSON库

2022-05-23
阅读 5 分钟
2.2k
从node.js转到c++,特别怀念在js中使用json那种畅快感。在c++中也使用过了些库,但提供的接口使用方式,总不是习惯,很烦锁,接口函数太多,不直观。参考了很多库,如:rapidjson, cJson, CJsonObject, drleq-cppjson, json11等,受cJson的数据结构启发很大,决定用C++手撸一个。最后因为数据存储需要不区分型别,又要能...

Python3编程实战Tetris机器人(ORM)

2021-07-05
阅读 3 分钟
1.7k
我们通用的ORM,基本模式都是想要脱离数据库的,几乎都在编程语言层面建立模型,由程序去与数据库打交道。虽然脱离了数据库的具体操作,但我们要建立各种模型文档,用代码去写表之间的关系等等操作,让初学者一时如坠云雾。我的做法是把逻辑加入到Python的字典中,程序将对象自动映射成为标准的SQL查询语句。只要我们理...

Python3编程实战Tetris机器人(数据库操作)

2021-07-02
阅读 5 分钟
1.9k
将用户手动玩和AI自动玩游戏的历史记录下来,存入数据库,供后面进行分析。为了不依赖某个特定的数据系统,设计了一个通用数据库操作接口,以方便在应用层面切换不同的数据库。

Python3编程实战Tetris机器人(游戏暂停)

2021-06-24
阅读 2 分钟
1.9k
游戏暂停功能比较简单,主要是控制gameRunningStatus变量的值与界面的控制统一起来,游戏暂停了,键盘的响应也要停止。另,gameRunningStatus变量的改变也不能直接操作,需生成一个暂停命令单元,送入队列中,由工作任务线程去处理。

Python3编程实战Tetris机器人(多线程问题)

2021-06-22
阅读 3 分钟
1.7k
首先想到的是加锁,游戏逻辑很简单,加锁应该很容易解决问题。但不管我粗粒度加,还是尽量细粒度加,最后都会死锁。最后进行打印,发现程序停在了tkinter.Canvas.move处,个人认为这是tkinter的bug。 此路不通,换个思路。开一个工作线程,来完成所有的操作,主线程与定时器操作,都只是往工作线程中提交任务。也就是只...

Python3编程实战Tetris机器人(game类)

2021-06-21
阅读 5 分钟
2.3k
游戏逻辑控制类,是界面与Tetris类之间的粘合者,接受界面的鼠标及键盘事件,操作Tetris类,实现游戏逻辑。单个方块的操作,在Tetris中已经实现,game类主要是实现消行算法、新方块的产生、游戏速度控制等。

Python3编程实战Tetris机器人(移动与旋转)

2021-06-20
阅读 3 分钟
2.2k
我们Block类中,对blog的移动使用的是tkinter.move函数,该函数提供的是相对距离方式,我们需要计算出位移差。该方法相当于把相对距离移动方式,变成了方块的绝对定位函数,所有移动操作都使用这个函数。

Python3编程实战Tetris机器人(Tetris类)

2021-06-19
阅读 3 分钟
2.3k
组合Block类,实现俄罗斯方块的绘制及移动、旋转等所有操作。这是Tetris游戏的业务核心,第一步先实现手动玩的需求,以后AI自动玩时,还会改造这个类。在所有的逻辑里面,特别注意旋转(rotate)操作,后面解决的不少的bug被证明都是由于rotate操作考虑不全面所引起的。

Python3编程实战Tetris机器人(block类)

2021-06-09
阅读 2 分钟
1.9k
在屏幕上绘制小方块,以及方块的移动与清除。根据tkinter库的函数特点,选择canvas.create_rectangle进行方块绘制,canvas.move移动方块,canvas.delete清除方块。画布操作函数只使用了上述三个。

Python3编程实战Tetris机器人(界面设计)

2021-06-08
阅读 3 分钟
2k
本项目注重算法实现,为了安装简单且具有强跨平台性,所以选择python内置的tkinter。这个界面库是有些问题,比如后面发现其与线程锁配合有问题,会莫名死掉。项目中的lockbug分支,我已经把问题定位了,进行了一系列的日志输出,有兴趣的同学可以去研究一下具体问题。这个问题可以避开,本项目使用的界面特性很少,我的...

Python3编程实战Tetris机器人(项目结构)

2021-06-04
阅读 3 分钟
2.1k
系列文章入口《Python3编程实战Tetris机器人》项目结构项目的结构如下,以目录形式的模块包来组织代码,同时支持以目录或包来执行,两种方式具有统一入口。 {代码...} 实现细节我们的程序位于tetris目录(包)中,可以作为一个文件夹来执行: {代码...} 也可以作为一个包(Package)来执行: {代码...} __init__.py若要 ...

Python3编程实战Tetris机器人(序)

2021-06-04
阅读 1 分钟
3.1k
本系列文章,使用Python3一步步记录Tetris游戏的编写全过程,游戏功能包括手动游戏、游戏回放(数据库操作)、自动游戏(AI机器人)、强化学习、优化AI机器人。已经完成C++版本,Qt5之QGraphicsItem编写Tetris俄罗斯方块游戏。

QT5写Tetris之AI机器人玩游戏

2021-05-22
阅读 4 分钟
3.4k
使用Qt5.12.9的QGraphicsItem来实现俄罗斯方块,使用简单的评估函数,实现AI机器人玩俄罗斯方块游戏。这是AI机器人的第一步,这个算法很简单,但很有效,大多数情况能消5百层以上,最近的为数不多的测试中,最高纪录已经消了超过2500层。在这个基础上,可以方便的积累原始数据,我希望能抽取模式,进行模式识别及至机器...

QT5写Tetris之使用Sqlite3实现游戏回放

2021-05-22
阅读 6 分钟
2.3k
使用Qt5.12.9的QGraphicsItem来实现俄罗斯方块,使用Sqlit3存储数据来进行游戏的回放,既然已经使用QT,就尽量用其组件,重写了原来的JSON封装及数据库操作接口实现。

Qt5之QGraphicsItem编写Tetris俄罗斯方块游戏

2021-05-06
阅读 6 分钟
4.3k
使用Qt5.12.9的QGraphicsItem来实现俄罗斯方块,现在是C++版本,下来还会有python版本,以及方便的接口,来接入算法,由机器人玩俄罗斯方块。

QFtp源码学习及目录下载

2021-02-06
阅读 4 分钟
2.8k
需要在QT5中进行FTP文件下载,并需要支持整目录下载,经过对比选择,最后决定使用Qt4中的QFtp来完成我们的需求。因此决定学习源码,看清结构,做到能真正解决所要面对的问题。

QT5编译使用QFtp

2021-02-02
阅读 3 分钟
4.8k
使用 QNetworkAccessManager 可以实现 Ftp 的上传/下载功能,但它没有提供例如list、cd、remove、mkdir、rmdir、rename 等功能。这种情况下,我们可以使用QFtp,需要下载源码、编译并处理一些坑。

Qt 插件编程实践

2021-01-28
阅读 4 分钟
3.8k
最近在用Qt做项目,在网上找插件编写的资料,没有完整的代码,要下载的资源都被传到需要积分的网站上了,感觉很不爽。因此把插件示例项目编写完整,并在github上开了一个qtDemo项目,写了这篇文章。作为一个拖砖项目,望大家在学习同时,不要忘记了分享的精神。这个项目我会把学习Qt的代码不断更新上来,若有同道者,请p...

sqlit3 数据库操作的实现与解析

2020-06-28
阅读 8 分钟
3k
选择官方c接口,实现Idb通用接口。具体的数据库操作,主要由两个函数ExecQuerySql和ExecNoneQuerySql来封装,底层的操作,主要使用sqlite3_prepare_v2来实现。

封装rapidjson用于数据库及网络数据传输

2020-06-28
阅读 5 分钟
2.9k
我要完成以json为数据媒介,来操作数据库和网络传输。查资料,发现rapidjson是比较流行的json库,并且速度快。但以我的使用方式,用起来非常麻烦,而且我的目的是数据交换。rapidjson非常普通看起来应该是值传输的操作,其实都是内存移动。这虽然能达到高效率的目的,但一不小心就会出错,而且写出来看着非常丑陋,所以...

c++关系数据库访问通用接口设计(JSON-ORM c++版)

2020-06-26
阅读 4 分钟
3.7k
重操C++旧业,习惯通常的数据库操作方式,因此抽时间,把JSON-ORM封装了一个C++版,现支持sqlit3与mysql,postgres已经做好了准备。

Graphql实战系列(下)

2019-04-12
阅读 7 分钟
6.6k
在《Graphql实战系列(上)》中我们已经完成技术选型,并将graphql桥接到凝胶gels项目中,并动手写了schema,并可以通过 [链接]:5000/graphql 查看效果。这一节,我们根据数据库表来自动生成基本的查询与更新schema,并能方便的扩展schema,实现我们想要的业务逻辑。

Graphql实战系列(上)

2019-04-11
阅读 5 分钟
4.5k
graphql越来越流行,一直想把我的凝胶项目除了支持restful api外,也能同时支持graphql。由于该项目的特点是结合关系数据库的优点,尽量少写重复或雷同的代码。对于rest api,在做完数据库设计后,百分之六十到八十的接口就已经完成了,但还需要配置上api文档。而基于数据库表自动实现graphql,感觉还是有难度的,但若能...

leetcode-019-删除链表倒数第N个结点(Remove Nth Node From End of List)

2019-01-08
阅读 2 分钟
2.9k
Given a linked list, remove the n-th node from the end of list and return its head.给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

typescript 3.2 新编译选项strictBindCallApply

2019-01-02
阅读 2 分钟
3.8k
几天前还是正常编译、正常运行的项目,突然出错,应该是环境变了。经查找,发现全局typescript已经升级到了最新版本,3.2.2,而项目中的版本是3.0.3。 将全局版本换回3.0.3,编译通过,问题找到。

简单易用的leetcode开发测试工具(npm)

2018-12-12
阅读 4 分钟
3k
最近在用es6解leetcode,当问题比较复杂时,有可能修正了新的错误,却影响了前面的流程。要用通用的测试工具,却又有杀鸡用牛刀的感觉,所以就写了个简单易用的leetcode开发测试工具,分享与大家。

一种巧妙的对象映射关系设计--JSON-ORM

2018-11-23
阅读 4 分钟
6.6k
我们通用的ORM,基本模式都是想要脱离数据库的,几乎都在编程语言层面建立模型,由程序去与数据库打交道。虽然脱离了数据库的具体操作,但我们要建立各种模型文档,用代码去写表之间的关系等等操作,让初学者一时如坠云雾。我的想法是,将关系数据库拥有的完善设计工具之优势与微服务结合起来,数据设计提供结构信息;前...