需求来源 我们的wifi经常没网(不知道新办公区状态如何),所以需要经常手动断开wifi再连接,此工具可以实现快捷键切换wifi开关,省去甩鼠标的麻烦~ 1、打开Mac电脑上的『自动操作』 2、双击『快速操作』 3、拖拽『运行Shell脚本』到右侧 4、修改选项『工作流程收到』为『没有输入』,下方脚本填写 if [[ `networksetup -getairportpower en0` == *On ]] then networksetup -setairportpower en0 off else networksetup -setairportpower en0 on fi 或者一键关 + 开 networksetup -setairportpower en0 off networksetup -setairportpower en0 on 5、command + s保存,填写自定义名称 6、打开偏好设置-键盘-服务-快捷键-通用中可以看到 7、点击设置快捷键(比如command + option + k),退出就可以全局使用了,按一次是断开wifi,按第二次是连接wifi 亲测可用,再也不用甩鼠标开关wifi了~

阅读全文

Yapi部署安装与启动

需求来源 领导有天开会说,我们要MockServer。 原本有人用flask写过一套金融系统的测试桩服务,本来我是兴致勃勃地想要用go重写一遍的,但是小伙伴们觉得Odin的后端就是flask,接着写就很好··· 虽然我相当不喜欢flask,因为它糟糕的异步处理能力、不咋地的稳定性和对go的向往,但是为了快速实现目标,我就准备开始搞了。 然而,我发现了YAPI 官方Gayhub 说搞就搞咯 MongoDB for Docker 最好不要给mongodb加auth,会有比较恶心的错误导致装不上 docker stop mongo && docker rm mongo && docker run -itd --name mongo -p 27017:27017 -v /home/yapi/mongodb/data/db:/data/db mongo 构建node镜像 node太高了会报错 FROM node:12.14 MAINTAINER CooperHsu RUN rm /etc/localtime # 设置时区 RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # RUN npm install pm2 -g RUN yarn global add pm2 RUN npm install -g yapi-cli --registry https://registry.npm.taobao.org 创建node容器 docker run -itd --name yapi -p 59090:9090 -p 53000:53000 yapi 配置项目 docker inspect mongo 获取mongo的内网地址: “IPAddress”: “172.

阅读全文

使用pm2管理Golang程序

需求背景 由于公司IM切换成飞书,我发现了飞书机器人比较好玩,加上业务测试团队有自定义定时推送群组消息的需求,所以就写了个简单的golang定时任务; 本想直接在docker中裸奔,但是想起曾经用过的Supervisord,所以最开始选用的就是Supervisord,可是那个生成配置文件的过程实在是太恶心了,所以灵光乍现想到了pm2 众所周知,pm2需要node环境,所以下面就是准备docker的步骤了。 Dockerfile FROM node MAINTAINER CooperHsu RUN rm /etc/localtime # 设置时区 RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # RUN npm install pm2 -g RUN yarn global add pm2 RUN mkdir /tiklark COPY . /tiklark WORKDIR /tiklark CMD ["pm2-runtime","start","tiklark.yaml", "--watch"] # RUN pm2 start tiklark.yaml --watch 为什么用yarn 因为比npm快了不止一倍,谁用谁知道~ 为什么用pm2-runtime 如果不这么运行的话,容器会在刚启动的时候就挂掉噢! 参考链接: 官方文档 stackflow

阅读全文

JS开发工具函数

JS开发工具函数 转自github /** * @param { string } value */ export const isNoWord = value => /^[^A-Za-z]*$/g.test(value); 验证中文和数字 /** * @param { string } value */ export const isCHNAndEN = value => /^((?:[\u3400-\u4DB5\u4E00-\u9FEA\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29]|[\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879][\uDC00-\uDFFF]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0])|(\d))+$/g.test(value); 验证邮政编码(中国) /** * @param { string } value */ export const isPostcode = value => /^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/g.test(value); 验证微信号,6至20位,以字母开头,字母,数字,减号,下划线 /** * @param { string } value */ export const isWeChatNum = value => /^[a-zA-Z][-_a-zA-Z0-9]{5,19}$/g.test(value); 验证16进制颜色 /** * @param { string } value */ export const isColor16 = value => /^#?

阅读全文

Vue Iframe Jenkins

vue页面内嵌iframe vue代码 <template> <div> <iframe id="tpd" src="https://Jenkins.com/" frameborder="0" width="100%" height="100%" style="position:absolute;" /> </div> </template> <script> export default { data() { return { } }, mounted() { /** * iframe-宽高自适应显示 */ function changeMobsfIframe() { const tpd = document.getElementById('tpd') const deviceWidth = document.body.clientWidth const deviceHeight = document.body.clientHeight tpd.style.width = (Number(deviceWidth) - 100) + 'px' // 数字是页面布局宽度差值 tpd.style.height = (Number(deviceHeight) - 100) + 'px' // 数字是页面布局高度差 } changeMobsfIframe() window.onresize = function() { changeMobsfIframe() } } } </script> <style> </style> jenkins需要设置一下 jenkins:XFrame Filter Plugin 进入http://10.

阅读全文

Redis Docker Config

Redis-Docker-Ubuntu启动容器命令 docker run -d --name redis1 -p 16379:6379 -v /Users/${yourname}/xcredis/docker_data:/data 44d36d2c2374 --appendonly yes --appendfsync everysec 注意挂载目录,冒号前面是宿主机,后面是docker内部 设置密码 --requirepass "mypassword" 挂载外部配置和数据安装 1.创建目录和配置文件redis.conf mkdir /docker mkdir /docker/redis mkdir /docker/redis/conf mkdir /docker/redis/data 创建redis.conf配置文件 touch /docker/redis/conf/redis.conf redis.conf文件内容自行添加: 切记注释掉:#daemonize yes 否则无法启动容器 重要话说三遍:注释掉#daemonize yes,注释掉#daemonize yes,注释掉#daemonize yes 2.创建启动容器,加载配置文件并持久化数据 docker run -d --privileged=true -p 6379:6379 -v /docker/redis/conf/redis.conf:/etc/redis/redis.conf -v /docker/redis/data:/data --name redistest2 redis:4.0 redis-server /etc/redis/redis.conf --appendonly yes 参数说明: --privileged=true:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限 -v /docker/redis/conf/redis.conf:/etc/redis/redis.conf:映射配置文件 -v /docker/redis/data:/data:映射数据目录 redis-server /etc/redis/redis.conf:指定配置文件启动redis-server进程 --appendonly yes:开启数据持久化

阅读全文

Vue Global Reload

vue-admin-element的全局按钮添加 有天业务测试来找我,说希望在列表页加一个刷新按钮-。- 其实这个页面的各个生命周期钩子里都加了刷新操作的回调函数,除此之外,table-row中的全部button也绑定了相同的方法—为的就是希望实时刷新结果(恨不能挂个websocket上去) 所以我很诧异,为啥还要单独添加一个独立于各种区块的按钮呢?她说就觉得方便··· 众所周知,我是一个爱惜页面整洁性的人,所以我准备加一个全局刷新按钮,就在odin后台的顶部! 同时也因为这个项目的侧边栏渲染是基于比如oom模块: src/router/modules/oom.js中的 import Layout from '@/layout' const oomRouter = { path: '/oom', component: Layout, redirect: '/oom/index', name: 'oom自动化分析', // hidden: true, meta: { title: 'oom自动化分析', icon: 'tree-table', roles: ['admin'] // affix: true }, children: [ { path: 'index', component: () => import('@/views/oom/index'), name: 'oom-index', // hidden: true, meta: { title: '管理首页', icon: 'guide', noCache: true } }, { path: 'list', component: () => import('@/views/oom/list'), name: 'oom-list', // hidden: true, meta: { title: '任务列表', icon: 'nested', noCache: true } } ] } export default oomRouter 所以我明显需要在Layout中添加元素和方法,而进去发现它是以组件的方式使用Navbar的,所以在Navbar.

阅读全文

作者的图片

CooperHsu

苦逼热力测绘院

测试经理*全栈测开*打杂

望京甘道夫