自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(135)
  • 资源 (1)
  • 收藏
  • 关注

原创 Camunda并行任务的处理

在工作流的编排中,有些时候会同时运行多个任务或子进程,默认的方式是串行运行,但是为了提高性能,我们会希望能并行运行。我也进行了一些测试,发现这个并行运行还不是这么简单的。举个例子,我们现在定义一个流程,这个流程很简单,就是调用一个Http接口。然后再定义另外一个流程,在这个流程里面引用刚才定义的子流程,然后运行这个子流程多次。我们希望实现的效果是这个子流程的运行能够并行。

2022-12-13 19:42:39 1363

原创 解读YOLO v7的代码(一)模型结构研究

YOLO v7在今年7月份推出,模型的性能和速度相比以往版本有了很大的提升。我也想好好研究一下YOLO v7模型,因此把官方的代码库下载下来进行研究,尝试更好的理解这个模型。

2022-12-11 10:06:21 2732

原创 配置Camunda工作流引擎集群

在生产环境中应用Camunda工作流,通常都需要配置多个工作流引擎实例,以满足负载分担,容灾备份等需求。这里我将用nacos+nginx,来实现多个工作流引擎的服务注册和负载分担。

2022-12-08 22:33:46 1785 3

原创 Python构建Web爬虫

最近想建设一个自己的个人网站,把现在CSDN上面的我的博客内容搬运过去,因此想用Python来做一个web爬虫,自动把我在CSDN上的博客文章下载下来并做一些格式转换,发布到我的个人网站上。这个web爬虫需要用到python的requests, beautifulsoup, selenium这几个库。

2022-12-02 07:56:47 629

原创 Camunda的数据库无法连接问题的解决

最近做的一个运营商的项目,用了Camunda的工作流引擎来进行任务的编排与执行,每隔15分钟会运行一个任务,获取大约800多个网元的过去一段时间的性能指标,并根据预先定义的规则表的指标判断规则,来识别网元是否有告警,每次任务运行时间都比较长,大概需要6到7分钟完成。除此之外,这个工作流引擎还有很多其他的任务会不定时的运行,整个引擎的负荷比较高。然后在最近一段时间内,频繁出现无法访问Camunda API的问题,报错信息是HTTP 500 Error,报错信息是message: "Could not open

2022-12-01 15:56:11 1042

原创 本地搭建K8S开发环境

有时候我们需要在本地搭建一个开发测试环境,这个环境可能会包括很多不同的软件组件,例如Kafka, PG, Redis之类的。利用Kubernetes我们可以很方便的搭建一个环境,并把这些需要的组件部署到环境上面去。这里我选择在本地安装minikube,然后快速地创建一个k8s集群。具体minikube的安装很简单,直接参考官网的介绍即可。

2022-11-22 10:12:47 2045

原创 构建一个WIFI室内定位系统

室内定位可以应用在很多场景,由于受到室内环境的限制,GPS信号无法有效的接收,这时可以利用室内的WIFI热点提供的信号强度来进行辅助定位。通常在室内都会有很多的WIFI热点,我们可以把室内的区域划分为多个网格,在每一个网格测量所接收到的WIFI热点的信号强度,根据这些信息来建立一个WIFI信号指纹库,以后我们就可以通过比对指纹库,来确定在室内的位置了。

2022-11-15 20:32:13 3852 6

原创 用Prometheus和Grafana监控Java Spring应用

最近要对一些业务流程进行端到端的监控,这些业务是由几个微服务构成,微服务都是Java Spring编写的,我们需要了解整个业务涉及的各个模块的流量统计,性能状况,例如总共有多少次业务请求调用,多少次成功或失败的回复,每个步骤的耗时是多少等等。因此我也研究了一下如何在Java Spring应用中输出统计指标,通过Prometheus来统一收集指标,并在Grafana中通过不同的报表来呈现这些信息。

2022-11-09 15:14:11 2181

原创 Spring cloud stream实现Kafka的消息收发

用Spring cloud stream可以很方便的实现对Kafka消息的收发,以下是我按照Spring官网的例子实现的一个Kafka的应用。这个例子是实现一个电信公司收集用户消费电信服务,并计算费用的场景。包括了三个应用程序。

2022-11-07 20:29:36 2126

原创 搭建一个自定义的工作流管理平台(四)

在之前的文章中,我们已经搭建了一个很完备的对camunda工作流进行管理的web应用。这一篇我们将继续完善这个平台的功能,引入对规则的管理。

2022-10-31 13:44:20 1034 1

原创 搭建一个自定义的工作流管理平台(三)

在这个页面的第85-87行定义了一个容器,用于放置这个工作流的图形。第111-137行定义了一个modal,modal里面包含一个datatable,用于显示某个进程的变量的详细信息。当在definitions页面点击某一个工作流ID的链接的时候,将跳转到这个页面,查看这个工作流的对应的进程。在前面的工作中,我们已经搭建好了工作流编辑和查看的页面,现在我们再增加一个功能,就是当启动一个工作流进程之后,查看进程的运行结果。

2022-10-29 11:34:15 292

原创 搭建一个自定义的工作流管理平台(二)

要查看已部署的工作流的定义,可以调用camunda的GET /process-definition接口,启动工作流需要调用POST /process-definition/{id}/start的接口,查看执行结果需要调用POST /history/variable-instance接口。datatable的每一行对应一个工作流定义的一个特定版本,用户可以对这个工作流定义进行启动,暂停,激活,删除等操作,也可点击这个工作流定义的ID来查看相关的已执行完的工作流进程的信息。

2022-10-28 20:07:24 977

原创 搭建一个自定义的工作流管理平台(一)

在这个html里面,可以看到引用了放置在本地的bootstrap的js, CSS,以及jquery,feather库的js文件。其实Camunda也提供了WEB的应用来管理工作流,但是如果自己有一些额外的需求,要进行一些自定义的功能,那么最好是自己开发一个WEB应用,通过调用Camunda引擎提供的API接口来实现对工作流的管理。工作流的引擎我采用的是业界流行的Camunda,这个引擎基于BPMN/DMN的标准来实现工作流,可以很方便的进行工作流的编排,实现低代码运行,以及业务逻辑编排等功能。

2022-10-23 21:49:02 1484

原创 快速搭建一个Web AR应用

制作AR的应用,也有很多的软件,例如Unity的AR foundation,其融合了谷歌的AR Core和苹果的AR kit,可以方便的制作跨平台的AR应用。要想获得好的AR的效果,对于手机的硬件也是有一定的要求的,因为手机需要进行校正,使得能准确的识别物体的表面,以更好的放置AR模型。图片越复杂,其包括的轮廓线条就越丰富,例如直线,转角,弧形等等,这样就能更准确的进行定位,另外图片包括的像素越多就越好,所以我们尽量不要对手机拍摄的图片进行缩小分辨率的操作。我这里基于图像追踪来搭建一个室内的AR应用。

2022-10-23 09:48:37 2989

原创 Camunda工作流平台与Keycloak的集成

Camunda是一个流行的工作流平台,其自带了基本的用户管理功能。Keycloak是业界主流的一个提供OAUTH等协议标准的一个用户验证与授权的平台。这里介绍如何把Camunda与Keycloak相集成,以实现通过Keycloak来统一管理用户的鉴权与授权,用户通过从Keycloak获取Token来调用Camunda的API。

2022-09-28 17:01:15 1649

原创 Springboot集成Camunda流程引擎

这种方式相比直接下载camunda引擎运行包的一个好处是,自己可以更方便的按照需求来配置引擎,另外不需要自己手动的做camunda数据库的建表等初始化工作。Camunda的流程引擎有几种运行方式,最简单的一种就是直接下载Camunda软件包来运行,其他方式就是和Java的框架集成,作为自己的一个应用程序来运行。这里面我是用到了postgres作为camunda后端的数据库。连接postgres数据库,按照application.properites的设置来新建一个数据库给camunda使用。

2022-09-22 11:17:07 1838

原创 内网穿透远程控制Windows主机

最近因为工作需要,要远程控制windows主机,基本的步骤和之前博客提到的都差不多,主要区别在于windows是没有类似autossh这个工具来建立一个稳定的反向代理。为此我采用的方法是在windows的wsl linux系统里面安装autossh。这里面Ubuntu-18.04代表WSL的linux系统的名称, 9998代表远程外网主机的端口,5900表示本地主机的VNC端口。之后我们其他设备要远程控制这个windows主机,只需要连接这个外网主机的地址加上5900端口即可。...

2022-08-18 10:10:23 717

原创 搭建Camunda工作流引擎的生产环境

Camunda是一个业界著名的工作流引擎平台,其7.0社区版可以提供免费的工作流平台。这里记录以下搭建一个生产环境的过程从以下网址下载最新的7.17版本, https://downloads.camunda.cloud/release/camunda-bpm/run/7.17/下载到本地目录中Demo环境是运行自带的H2数据库,生产环境建议连接到一个独立的数据库。这里我选择的是Postgres,创建一个名为camunda的数据库。获取Liquibase的镜像,docker pull liquibase/li

2022-06-12 21:36:42 1462

原创 Javascript提交multipart/form-data的数据

最近在写一个前端的应用,需要调用后端的一个API HTTP POST接口,这个接口是接收multipart/form-data的,也就是会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来表名文件类型;content-disposition,用来说明字段的一些信息;由于有boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。以下是

2022-06-11 22:19:47 2720

原创 搭建一个BPMN建模的Web服务

在上一篇博客中我介绍了如何用Camunda来做工作流的编排,其中用到了Camunda提供的Modeler软件来进行工作流的建模。这个软件是基于bpmn.io的开源软件基础上开发的,是一个桌面版的软件。如果我们需要以Web服务的方式来提供,那么我们也可以基于bpmn.io来做自己的一些定制开发,具体可以查看bpmn.io · GitHub下面我将搭建一个Web版本的工作流建模服务,并且实现汉化。新建一个文件夹,运行以下命令新建一个webpack.config.js文件,内容如下:编写程序,加载BP

2022-06-06 12:23:28 731 1

原创 Camunda工作流平台的使用

工作流可以实现业务流程的自动化,用户可以自己定义工作流程,通过流程来把常用的任务组织起来,而无需在程序中固化流程。这也符合当今微服务,低代码开发的趋势。Camunda是目前主流的一个工作流平台,遵循业界的标准(BPMN, DMN...),国内的很多低代码工作流平台也是基于Camunda来做进一步的定制开发的。Camunda目前有7和8两个版本,其中最新的8版本是采用SAAS的方式来提供服务,也可以基于Kubernets来部署在云上。但是8版本虽然可以免费使用和更改,但是如果用于商业用途是受限制的。7版本分为

2022-06-03 13:14:45 5847

原创 SSL连接的抓包分析

在上一篇博客中,我用JAVA编写了一个服务器和客户端程序,实现SSL的双向认证和连接。下面我们可以对整个连接的过程进行抓包分析,更好的理解整个连接的过程,也方便做故障排查。首先安装wireshark,这是一个很方便的抓包分析工具。启动wireshark, 选择要抓包的网络接口。因为我是在本地运行服务器和客户端程序,因此这里选择loopback接口。之后,我们需要配置一下SSL的端口,因为服务器是设置了9999这个端口来进行连接,这不是默认的SSL端口(443),因此需要在wireshark中配置一下,不

2022-05-25 12:53:33 2319

原创 SSL连接的JAVA实现

SSL的双向认证的流程如下图:从以上流程可见,要完成双向认证,服务器端和客户端都需要验证对方的证书,然后再进行加密的协商。这里基于JAVA来实现一个服务器端和客户端的程序,可以实现双向认证。首先需要准备服务器和客户端的相关证书:1. 创建自签名的根密钥openssl genrsa -out rootkey.pem 20482. 生成根证书openssl req -x509 -new -key rootkey.pem -out root.crt -subj="/C=CN/ST=GD

2022-05-25 10:37:54 2619

原创 Jason Web Encryption (JWE)的解密

在Web应用的鉴权和授权当中,经常都会碰到JWT, JWE形式的Token。JWT可以很方便的在jwt.io之类的网站中解码,查看token的信息。但是对于JWE,因为Token保存的信息是加密后的,不能直接解码,需要进行解密。以下是如何用Python进行解密的方法。首先我们需要安装一个库,pip install jwcryptoJWE是由5部分组成,每个部分之间以.号分隔。第一部分是没有加密的,只是进行了BASE64的编码,我们解码之后可以看到这个JWE的加密方式。例如我拿到的JWE的第一部分是e

2022-05-19 18:13:50 2541

原创 基于Tensorflow实现一个Transformer翻译器

Transformer是谷歌在2017年的一篇论文"Attention is all you need"提出的一个seq2seq的模型架构,其创造性的提出了自注意力的思想,可以很好的表达序列中各个单词之间的相互注意力关系。这个模型在NLP领域取得了巨大的成功。此外这个模型架构在最近几年也在CV领域取得了令人瞩目的进展,在图像识别,目标检测等方面都达到或超过CNN模型的性能。因此Transformer可以说是人工智能领域最近最值得关注和学习的一个架构。目前有网上已经有很多文章详细解读了Transformer的

2022-04-27 22:25:29 6663 9

原创 在K8S上部署Web与数据库应用

数据库的搭建,选择Postgresql 11.15版本下载镜像docker pull postgres:11.15-alpine3.15在主机上设置一个PG的数据目录mkdir ~/pg_data运行PG镜像测试docker run --name my_postgres -v /home/roy/data/pg_volume:/var/lib/postgresql/data -e POSTGRES_PASSWORD=roy2000 -p 5555:5432 -d postgres

2022-03-24 16:25:20 2960

原创 Kubeadm建立私有集群

自己搭建了一个K8S的集群,用kubeadm。参照官网安装完成之后,要先运行以下命令禁止swap分区sudo swapoff -asudo free -m然后运行kubeadm init启动,这里会遇到无法拉取k8s.gcr.io的镜像的问题,我的解决办法是用阿里云来拉取镜像,具体可以见我以前的博客,利用阿里云来加速Kubeflow的安装_gzroy的博客-CSDN博客之后就可以运行命令来启动集群了,这里我指定了版本,因为我之前拉取的镜像都是这个版本的:sudo kubeadm ini

2022-03-12 22:47:56 1006

原创 强化学习的A3C算法应用(训练Atari游戏)

A3C算法的全称是Asynchronous Advantage Actor-Critic,异步优势执行者/评论者算法。这个算法和优势执行者/评论者算法的区别在于,在执行过程中不是每一步都更新参数,而是在回合结束后用整个轨迹进行更新。因此可以让多个Worker来进行轨迹的搜集和参数更新。每个执行者的更新都是异步的。这个算法与优势执行者/评论者算法相比,优点在于可以大大提高执行效率,因为对于策略更新算法来说,最耗时间的是在轨迹的搜集部分。算法的步骤如下:输入:环境输出:最优策略的估计参数:优化器

2022-01-28 17:00:10 7546

原创 基于TF-Agent的回合策略梯度算法模型训练Atari游戏

在上一篇博客中,我用Tensorflow的Agent库的DQN模型来对Atari的PONG游戏进行训练,效果很好。这次我打算测试一下回合策略梯度模型,看是否也能取得相同的效果。关于回合策略梯度算法的介绍,可以见我之前的另一篇博客强化学习笔记(5)-回合策略梯度算法_gzroy的博客-CSDN博客在TF-Agent里面,有一个ReinforceAgent,实现了回合策略梯度算法。这个Agent需要构建一个Actor Network,通过输入环境的观察,得到动作的分布值,对这个分布值进行Softmax计算就

2022-01-07 09:55:15 3106

原创 用强化学习来玩Atari游戏(基于Tensorflow的深度Q学习模型)

在之前的博客中,我用TF-Agents实现了一个深度Q学习模型,并且对小车上山这个环境进行了训练。那么更进一步,我们可以看看能否用深度Q学习解决一些更复杂的问题,例如我们是否能训练一个模型,可以玩Atari的游戏,并取得比人类更好的成绩。在2015年,DeepMind发表的论文...

2022-01-04 07:45:36 5580 1

原创 Kaggle Titanic Disaster Competetion

好久之前在Kaggle上面写的一个notebook, 关于如何用数据科学的方法来对泰坦尼克号数据集进行分析和预测生还者的,有兴趣的朋友可以参考一下Roy's Titanic Notebook | Kaggle

2021-12-27 10:57:52 684

原创 用Tensorflow Agents实现强化学习DQN

在我之前的博客中强化学习笔记(4)-深度Q学习_gzroy的博客-CSDN博客,实现了用Tensorflow keras搭建DQN模型,解决小车上山问题。在代码里面,需要自己实现经验回放,采样等过程,比较繁琐。Tensorflow里面有一个agents库,实现了很多强化学习的算法和工具。我尝试用agents来实现一个DQN模型来解决小车上山问题。Tensorflow网上的DQN教程是解决CartPole问题的,如果直接照搬这个代码来解决小车上山问题,则会发现模型无法收敛。经过一番研究,我发现原来是在ag

2021-12-26 22:15:55 2859 3

原创 强化学习笔记(6)-执行者/评论者方法

以下为阅读《强化学习:原理与python实现》这本书第八章的学习笔记。本章介绍带自益的策略梯度算法,这类算法将策略梯度和自益结合起来:一方面,用一个含参函数近似价值函数,利用这个近似值来估计回报值;另一方面,利用估计得到的回报值估计策略梯度,进而更新策略参数。这两方面常常被称为评论者(critic)和执行者(actor)。所以带自益的策略梯度算法称为执行者/评论者算法。执行者/评论者算法用含参函数表示偏好,用其softmax运算的结果来近似最优策略。在更新参数时,也是根据策略梯度定理,取为梯度方向迭

2021-12-12 10:56:52 866

原创 强化学习笔记(5)-回合策略梯度算法

记录一下在阅读《强化学习:原理与python实现》这本书的学习笔记。在之前学习到的强度学习方法中,每次更新价值函数只更新某个状态动作对的价值估计。但是有些情况下状态动作对的数量非常大,不可能对所有的状态动作对逐一更新。函数近似方法用参数化的模型来近似整个状态价值函数,并在每次学习时更新整个函数,这样,对于没有被访问过的状态动作对的价值估计也能得到更新。函数近似方法采用一个参数为w的函数q(s,a:w)来近似动作价值。...

2021-12-05 10:50:46 1926

原创 强化学习笔记(4)-深度Q学习

记录一下在阅读《强化学习:原理与python实现》这本书的学习笔记。在之前学习到的强度学习方法中,每次更新价值函数只更新某个状态动作对的价值估计。但是有些情况下状态动作对的数量非常大,不可能对所有的状态动作对逐一更新。函数近似方法用参数化的模型来近似整个状态价值函数,并在每次学习时更新整个函数,这样,对于没有被访问过的状态动作对的价值估计也能得到更新。函数近似方法采用一个参数为w的函数q(s,a:w)来近似动作价值。...

2021-11-23 16:18:16 2538 2

原创 X.509证书的使用

总结一下如何使用X.509证书来保护我们的设备的数据传输。证书的签发以下是证书签发的流程,为了更好的演示,我们需要分别创建两个根证书,并且用每个根证书来颁发一个客户端证书。这两个根证书分别为root_1.crt以及root_2.crt,对应的两个客户端证书分别为client_1.crt以及client_2.crtopenssl genrsa -out rootkey.pem 2048 生成根证书的密匙 openssl req -x509 -new -key rootkey.pem -out

2021-09-26 16:07:27 1037

原创 以太坊智能合约与预言机实现机密数据的传送

假设我们有一个场景是需要在智能合约里面保存一个密码,当用户调用合约存入一定数量的以太币,合约将把密码告知用户。这个场景很简单,但是实现起来却不太容易,因为智能合约的代码对所有人都是透明的,因此很容易就可以查看代码获取到密码。要解决这个问题,我们可以引入预言机(Oracle)。在区块链中,智能合约是无法直接与外部系统交互的,例如经典的一个智能合约的应用,两个用户打赌球赛结果,并约定按照球赛结果来支付金额。这个场景里面,智能合约如何获知外部的球赛结果呢?这时就需要一个预言机作为中介,把球赛的结果写入到区块链中,

2021-09-21 19:41:10 921 2

原创 以太坊私有网络的设置与体验

记录一下搭建一个以太坊私有网络环境的过程,方便以后的开发我这里采用的是Geth客户端,在geth.ethereum.org网站上有详细的文档介绍,这里主要是按照官网的教程来操作。安装我是Ubuntu的环境,执行以下命令来安装sudo add-apt-repository -y ppa:ethereum/ethereumsudo apt-get updatesudo apt-get install ethereum设置私有网络首先需要设置一个network id以便和其他以太坊网

2021-09-09 15:21:38 422

原创 强化学习笔记(3)-时序差分更新算法

时序差分更新算法和回合更新算法一样都是利用经验数据进行学习,其区别在于时序差分更新不必等到回合结束,可以用现有的价值估计值来更新。因此时序差分更新既可用于回合制任务,也可用于连续性任务。同策时序差分更新从给定策略的情况下动作价值函数的定义出发,我们可以得到:单步时序差分只需要采样一步,用来估计回报样本的值,这里表示有偏回报样本,与回合更新中由奖励计算得到的无偏回报样本相区别。基于以上分析,我们可以定义单步时序差分目标为:这里的U的上标(q)表示是对动作价值定义的,下标t:t+1表

2021-09-06 17:05:01 781

原创 强化学习笔记(2)-异策回合更新算法

在前一篇博客中,我总结了强化学习的同策回合更新的方法,并用这种方法来学习21点游戏的最优策略。这里我将总结一下我学习到的异策回合更新的方法。同策学习和异策学习的区别在于,同策是边决策边学习,学习者同时也是决策者。异策则是根据之前的历史来学习,学习者和决策者可以不同。以围棋AI为例,如果边对弈边学习,这就是同策学习。如果通过阅读人类的历史对弈记录来学习,那么就是异策学习。在异策学习中,历史记录中用到的策略和我们要学习的策略是不同的,所以称为异策学习。我们将要学习的策略称为目标策略,用来生成历史记录的另

2021-08-29 12:51:12 616

工作流-web-camunda-演示

工作流-web-camunda-演示

2022-10-26

工作流建模的前端演示介绍,基于bpmn.io

工作流建模的前端演示介绍,基于bpmn.io

2022-06-06

空空如也

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

TA关注的人

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