EMQX MQTT服务器:使用Docker Compose快速部署及Nginx反向代理配置
docker-compose.yml 1234567891011121314151617version: "3"services: mqtt: image: emqx/emqx:4.2.14 container_name: mqtt restart: always ports: - "1883:1883" - "8083:8083" volumes: - /etc/timezone:/etc/timezone - /etc/localtime:/etc/localtime environment: - EMQX_LOADED_PLUGINS="emqx_recon,emqx_retainer,emqx_management,emqx_auth_username" - EMQX_ALLOW_ANONYMOUS=false -...
Vue.js 动态文本中实现可点击链接 | Interactive Links in Vue Dynamic Text
业务中有一块是通知中心,其中的通知文本中有的文字是可以点击跳转到其他页面的。但是又不想使用富文本渲染。遂采用以下实现方式 v-html 渲染 a 标签标识可跳转链接 dataset 设置参数 12345678910111213141516171819202122232425262728293031<template> <div> <div v-html="text" @click="click"></div> </div></template><script>export default { name: "About", data() { return { text: `你好,这是<a data-name='Preview' data-id='123'...
Node.js 日期循环库:使用 date-recur 实现周期性任务调度
因为在业务中周期性的任务,用到的该 node 库,记录一下备忘。业务需求是创建周期性的任务。比如每天,每隔几天,每周的周几,每月的几号,每年几月几号,以这些描述生成一系列的日期。 效果按天循环 按周循环 按月循环 按年循环 介绍 date-recur创建一个循环日期并查询它以查看它是否落在特定日期。使用方法详见npm date-recur 这里举几个例子12345678910const r = recur(start, end); //限定开始和结束日期// r.setDailyInterval(1); // 每天// r.setDailyInterval(2); //每两天// r.setDaysOfWeek(1)//每周一// r.setDaysOfWeek([1, 2]); //每周一周二// r.setWeeklyInterval(2).setDaysOfWeek(1); //每隔一周周一// r.setWeeklyInterval(3).setDaysOfWeek([1, 3]); //每三周周一周三// r.setDaysOfMonth(1); //每月一号//...
Flask 图片处理:构建高性能实时缩略图服务
因为网页上图片太大,现在要生成缩略图返回。使用 python 的 Pillow 库处理图片缩略图并返回。 以下是 flask 程序,调用方法 GET /images/<path>?resize=<width>*<height> 实现功能: 根据参数返回不同大小的缩略图,目前只支持 jpg 图片处理 使用的正则匹配路由,支持在 images 下的多级路径 不产生中间图片,全部在内存中处理。 注意:内部调用的是 thumbnail 方法。返回的图片并不是严格安装 resize 的参数进行返回。图片不会有拉伸效果。具体查看 Pillow 文档。 app.py12345678910111213141516171819202122232425262728293031323334353637from io import BytesIOfrom PIL import Imagefrom flask import Flask, request, send_filefrom werkzeug.routing import...
NPS内网穿透:SSH远程连接与Web访问实践方案
安装 NPS NPS 是提供服务的一个程序,需要安装在有外网 IP 的服务器上。https://github.com/ehang-io/nps/releases 点击查看安装教程 123sudo ./nps installsudo chmod +x npssudo nps start 编辑配置文件 1vim /etc/nps/conf/nps.conf 运行成功后打开 nps 后台管理界面登录创建一个客户端,填个名字,其他默认,点击创建。点击加号+,展开可以看到一个客户端命令,复制。 安装 NPC NPC 客户端,安装在需要被穿透的内网环境下https://github.com/ehang-io/nps/releases 客户端下载下来进入到下载的目录,把复制的客户端命令粘贴运行即可。 docker-compose 运行docker-compose.yml 123456789101112version: "3"services: eapinpc: image: ${NPC_IMAGE} container_name:...
vue 可编辑 div 组件
contenteditable属性可以指定元素内容是否可编辑。 vue 中使用这一属性后,编辑内容却不支持 v-model.不能使用一下方法绑定 1<div contenteditable v-model="value"></div> 提取成组件后可以使用 v-model 123456789101112131415161718192021222324252627282930313233343536373839<template> <p class="editable" ref="editable" contenteditable :placeholder="placeholder" v-on="listeners"></p></template><script>export default { props: { value: { type:...
Cesium 3DTileset渲染优化:屏幕空间误差参数详解
maximumScreenSpaceError用于驱动细节细化级别的最大屏幕空间错误。默认是 16效果如下修改为 4 后该参数越小显示效果越好。
Shadowsocks服务器搭建与客户端配置教程
Shadowsocks123wget --no-check-certificate -O shadowsocks-all.sh https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-all.shchmod +x shadowsocks-all.shsudo ./shadowsocks-all.sh 2>&1 | tee shadowsocks-all.log 最后一步输完,你应该会看到下图中内容 ── 是要你选择需要安装的 Shadowsocks 版本。这里选择 4) shadowsocks-libev 选择完成后会让你输入密码,默认为一个随机密码,你可以回车选择默认,或者自定义一个密码后回车 密码设置完成后会让你输入一个端口号,默认随机一个,你也可以自定义一个端口号后回车生成 端口号设置完成后,选择一个加密方式,我一般采用 chacha20...
threejs 世界坐标系转其他对象本地坐标系方法
threejs 世界坐标系转其他对象本地坐标系方法12345678const v=new Vector3()// 世界坐标系下的坐标//obj 待转的对象const _m1 = new Matrix4()const position = v.clone()obj.updateWorldMatrix(true,false)_m1.copy(e.matrixWorld).invert()position.applyMatrix4(_m1)// position为相对与obj的本地坐标系的坐标
Three.js高效实现点与圆柱体碰撞检测的数学原理与实践
threejs 检测点是否在圆柱体内 在 threejs 文档里没有找到相关方法 检测思路: 把全局坐标系下的点坐标转为圆柱体的相对坐标 判断点坐标(x,z)是否在(0,0)为中心圆柱的半径为半径的圆内 判断点坐标的 y 的绝对值是否大于圆柱高度的一半 1234567891011121314//v:待检测点//obj:圆柱const position = v.clone();obj.updateWorldMatrix(true, false);const _m1 = new Matrix4();_m1.copy(e.matrixWorld).invert();position.applyMatrix4(_m1);// console.log(position)const parameters = obj.geometry.parameters;// console.log('待检测圆柱', parameters)const v2Center = new Vector2(position.x, position.z).distanceTo(new...