微信显示markdown文件内容
需求需要后台上传文件,然后在小程序展示文件内容。
实现方案,文档使用Markdown,通过Golang,读取文档内容,转换为html格式。
然后再通过Api接口传给微信端。微信通过rich-text组件,显示html格式的文件内容。
Markdown转html使用github.com/russross/blackfriday/v2转换为html
123456789101112131415import ( "fmt" "github.com/russross/blackfriday/v2" "html/template" "io/ioutil")func main() { f, err := ioutil.ReadFile("./README.md") if err != nil { fmt.Println(err.Error()) } content := template.HTML(blackfriday.Run(f)) fmt.Println(con ...
mqtt安装使用及客户端测试
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的”轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。
MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
https://www.runoob.com/w3cnote/mqtt-intro.html
Deploy使用docker部署
docker_run.sh
12345678docker stop mqttdocker rm mqttdocker run --name=mqtt -d \ --privileged \ -p 1883:1883 -p 9001:9001 \ -v $PWD/data:/mosquitto/data \ -v $PWD/logs:/mosquitto/log \ ec ...
Elastic提示错误no Elasticsearch node available
问题golang 使用 github.com/olivere/elastic 包进行连接 远程 es 或者docker搭建的es时(只要golang所在主机与es所在主机不同),报错信息如下
no active connection found: no Elasticsearch node available
原因如果您elastic不禁用嗅探功能,则Golang客户端将在后台运行进程,该进程/_nodes每15分钟轮询一次API(上面的URL)并维护正常节点列表。如果没有健康的节点,则以该错误结束。
您的集群配置有私有IP时,也会发生这种情况(注意:我们在OP上进行了调试,我们调试了问题)(因此在/_nodesAPI输出中,您看到的是私有IP,而不是公共IP)。
具有嗅探功能的客户端开始轮询,获取节点列表并尝试连接到专用IP,但由于该节点无响应(甚至无法在客户端所在的网络中解决)而收到HTTP错误。因此,它标志着它已经死了并发展到另一个。
当群集中没有其他节点时,它将报告no active connection found: no Elasticsearch n ...
docker限制内存及cpu占用
默认情况下容器使用的资源是不受限制的。也就是可以使用主机内核调度器所允许的最大资源。
但是在容器的使用过程中,经常需要对容器可以使用的主机资源进行限制
为什么限制为什么要限制容器对内存的使用?
限制容器不能过多的使用主机的内存是非常重要的。对于 linux 主机来说,一旦内核检测到没有足够的内存可以分配,就会扔出 OOME(Out Of Memmory Exception),并开始杀死一些进程用于释放内存空间。糟糕的是任何进程都可能成为内核猎杀的对象,包括 docker daemon 和其它一些重要的程序。
针对这个问题,docker 尝试通过调整 docker daemon 的 OOM 优先级来进行缓解。内核在选择要杀死的进程时会对所有的进程打分,直接杀死得分最高的进程,接着是下一个。当 docker daemon 的 OOM 优先级被降低后(注意容器进程的 OOM 优先级并没有被调整),docker daemon 进程的得分不仅会低于容器进程的得分,还会低于其它一些进程的得分。这样 docker daemon 进程就安全多了。
下面的脚本直观的看一下当前系统中所有进程的得分情况
...
goland配置GOROOT错误
错误信息今天升级了golang的版本,配置goland的GOROOT提示错误
The selected directory is not a valid home for Go Sdk
解决办法查询资料,发现。低版本的goland还需要配置GOROOT,但是在配置go1.17以上的时候就一直报这个错误
The selected directory is not a valid home for Go Sdk
找到go的安装路径,我的是/usr/local/go
编辑src/runtime/internal/sys/zversion.go
增加 相对于的版本号
1const TheVersion = `go1.17.7`
重启后就能够配置了。
参考文档The selected directory is not a valid home for Go Sdk
kafka集群部署
准备
kafka集群 3台服务器
Zookeeper集群 3台服务器
ZooKeeper简介ZooKeeper是一个开源的分布式应用程序协调服务,是Google的Chubby一个开源的实现。ZooKeeper为分布式应用提供一致性服务,提供的功能包括:分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)、分布式锁(Distributed Lock)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。
ZooKeeper本身可以以单机模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。
Kafka部署Kafka节点配置123456789#创建并进入下载目录mkdir /home/downloadscd /home/downloads#下载安装包wget http://mirrors.tuna.tsinghua.edu.cn/apa ...
Kibana 创建索引forbidden
今天使用Kibana查询索引,发现无法查询到最新日志。同时创建索引时,提示forbidden。
初步怀疑是服务没有成功写入日志,测试发现该项排除
后排查发现Elasticsearch状态为yellow,但解决该问题后,任然无法创建。
后发现kibana自动将index变成了只读状态,最终解决了该问题
磁盘超85%发现kibana索引创建失败,首先查询了集群状态
1curl -XGET 'http://localhost:9200/_cluster/health?pretty=true'
发现状态为yellow,排查,发现是磁盘已经超过85%
解决方案删除部分索引,检查磁盘,已经低于85%,但任然是yellow状态,
Index状态unsigned1234# 分片状态查看curl -XGET 'http://localhost:9200/_cat/shards?v'# 查看unsigned 的原因curl -XGET 'http://localhost:9200//_cluster/allocation/explain'
...
Redis集群迁移
公司使用自己搭建的redis集群。考虑到易于维护、成本等因素,考虑将redis迁移到阿里云。总结redis使用经验
查询原redis内存用量12345678集群信息cluster info集群节点cluster nodes查看内存等info
使用脚本查询, 源码
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192#!/bin/bashREDIS_CLI=${REDIS_CLI:-redis-cli}REDIS_IP=${REDIS_IP:-127.0.0.1}REDIS_PORT=${REDIS_PORT:-6379}function usage(){ echo "Usage: `basename $0` ...
相机标定
最近公司标定程序出现了一些问题,为了排查。学习了相机标定的原理。查询相关资料,分享如下:
原文 计算机视觉基础——相机标定
在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。
进行摄像机标定的目的:求出相机的内、外参数,以及畸变参数。
标定相机后通常是想做两件事:一个是由于每个镜头的畸变程度各不相同,通过相机标定可以校正这种镜头畸变矫正畸变,生成矫正后的图像;另一个是根据获得的图像重构三维场景。
1.1 浅谈标定首先谈谈相机为什么需要标定?任何理论物理模型都是在特定假设上对真实事物的近似,然而在实际应用中存在误差,普通相机的成像模型也不例外(透视投影)。实际中,普通相机成像误差的主要来源有两部分,第一是sensor制造产生的误差,比如sensor成像单元不是正方形,sensor歪斜;第二是镜头制造和安装产生的误差,镜头一般存在非线性的径向畸变;镜头与相机sensor安装不平行,还会产生切向畸变。
1.2透视投影模型普通相机的成像模型一采用小孔成像,初中的物理知识告诉我们,没 ...
gitlab-ci持续集成
持续集成(Continuous Integration, CI)的基本概念概述在传统软件的开发中,代码的集成工作通常是在所有人都将工作完成后在项目即将结束进行时,而这往往会花费大量的时间和精力。而持续集成是一种将集成阶段放在软件开发阶段的做法,以便更加有规律地构建,测试和集成代码。
“持续集成并不能消除 Bug,而是让它们非常容易发现和改正。”
持续集成可以在开发人员提交了新代码后,立刻进行构建、单元测试。从而我们可以根据测试结果以确定新的代码或者环境配置与原来的以及其他开发人员的代码或者环境配置能否正确地集成在一起。
持续交付 & 持续部署#
持续交付(Continuous Delivery):频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。
持续部署(Continuous Deployment):是持续交付的下一步,指的是代码评审以后,自动部署到生产环境。
GitLab 持续集成起步.gitlab-ci.yml.gtilab-ci.yml文件存放与项目于仓库的根目录,用以来定义 GitLab CI/CD 中的 Pi ...