参与一下 unocss 开发
Unocssunocss 是个强大的原子化 CSS 引擎,可以让你无需考虑样式的命名,按需生成样式 比如 1<div mt-5></div> 就会自动生成样式 1[mt-5=""]{margin-top:1.25rem;} 发现需求最近在做一个 Hexo 的主题,用到了 unocss 1234567891011import { defineConfig, presetUno, presetAttributify, presetIcons } from 'unocss'export default defineConfig({ presets: [presetUno(), presetAttributify(), presetIcons()], cli: { entry: { patterns: ['layout/**/*.ejs'], outFile:...
这个全平台远程桌面软件我必须安利!
我太激动了今天发现一个 全平台、远程桌面、免费开源、支持自建服务器 的软件!可以说是 Buff 都让它叠满了! 我这么激动的原因就是,没有对比就没有伤害,平时深受某几个远程桌面软件的迫害 工作中经常需要连接同网络下的 mac mini 进行打包等操作,时不时也会连接客户的电脑排查异常 那某几个软件不但画面糊!有时候能把 1 显示成 2 我就觉得离谱 而且我是连接本地设备,它还要去那破破烂烂的服务器绕一圈我就不是很理解,撒我像素是吧? 软件本体请记住,它叫:rustdesk 它有多良心,如果说全平台和提供免费中继服务器,是一个远程桌面软件最基本的条件,那么开源和支持自建服务器就实属是格局大开了 下载仅 19M 大小的可执行文件,打开后直接就可以远程,你甚至都不用安装。使用完整功能才需要安装 它真的,我哭死! 服务端官方有开源的服务端项目:rustdesk-server 还有 Docker 镜像:rustdesk/rustdesk-server 这次浅浅尝试了一下,在软路由 Docker 跑起来一个服务端,使用 NPS...
nestjs 联表查询
联表查询浅浅记录一下 nestjs 开发的联表查询 用户表和上传表,需求是获取用户列表时联表查询上传表的用户头像 1234567891011121314151617async findAll(page: number, limit: number) { const list = await this.userRepository .createQueryBuilder('user') .select([ 'user_id', 'name' ]) .leftJoin(Upload, 'upload', 'upload.upload_id = user.avatar') .addSelect(['upload.filename as avatar']) .offset(limit * (page - 1)) .limit(limit) ...
GitLab Runner 初体验
概念GitLab 在跑流水线时需要配置 runner,runner 就是一个计算服务,说白了就是个一台电脑 根据流水线的步骤执行编译、打包、部署等工作 创建 Runner首先在 GitLab 项目设置中创建 runner,拿到 token runner 服务这里我用的 Docker 在软路由上安装的,dockerhub 上下载最高的是 bitnami/gitlab-runner 但我实际使用中在输入 runner 名称时会出现权限问题导致没法使用,所以我用了 gitlab/gitlab-runner 创建 docker-compose.yml 12345678910version: '3.1'services: runner: image: gitlab/gitlab-runner:latest container_name: gitlab-runner restart: always privileged: true volumes: -...
Nodejs 发送短信程序避坑指南
前面的废话前阵子接了个有意思的活,需求根据模板批量发送短信,在强烈兴趣爱好的驱使下决定研究研究,顺便把钱赚了 找教程的时候发现非常少,视频资源都比较老,中英文短信混合发送没有一个教程提及,调通硬件又发现,nodejs 相关的资源就更少了 折腾了两周多,最开始买的板子只支持 2G,想着办 2G 卡结果营业厅说没法办,一通找最后又换成现在这个板子,还有发短信各种失败… 总之最后折腾出来这篇,分享一下踩的坑 硬件准备 封装好的 4G 模块 (A7680C) USB TO TTL (CH340G) 一般会附赠线 接线参考 测试用串口工具,或者使用 serialport 包写个简单的程序连接并发送指令 但注意甄别,我遇到有些工具不会按你的指令,会给你发一些乱七八糟的短信 发送英文短信 AT 测试命令 AT+CMGF=1 设置短信格式 AT+CMGS=13000000000 接收手机 以上都需要发送新行,也就是回车 > 出现箭头后写上短信内容,去掉发送新行并发送 切换到 16进制 新行发送 1A 有的教程说的最后发送 Ctrl + Z 其实说的就是...
Capacitor js 使用体验
前端现状众所周知,当下前端现状就是“打包 Android、打包 iOS、打包 Electron”。前端已死,大家都往端上靠 今天谈谈最近工作中用到的,入坑两个月的前端框架 Capacitor js Capacitor jsCapacitor js 是一个跨平台框架,可以打包基于前端的 Android、iOS、Electron 应用 这个框架的逻辑很简单,它可以通过 npx cap add android 等命令生成其他平台的项目模板,通过 npx cap sync 命令把打包好的前端代码移动到其他平台项目下。最后再用对应平台的 IDE 打包,比如 Android Studio、Xcode 插件插件的概念就是通讯工具。因为前端无法操作设备的很多功能,比如你想打开摄像头,就需要通过前端插件发送一个指令到平台端的插件,收到指令后执行对应的逻辑 官方提供的插件基本覆盖了设备常用功能,同时还有社区插件,再不济可以自己开发插件,官方也提供了很好的例子 起初插件是放在本地的,项目中引入走的 file: 协议,这导致新电脑拉取项目后必须先在每个插件目录下 install、build...
网络游戏防沉迷实名认证系统 1007 错误记录
前言最近在接 网络游戏防沉迷实名认证系统,它得要你跑通所有测试接口才给你用正式接口 所以我直接投降,用了个开源包,chinawilon/fcm_game 奈何是 composer 的,现学现卖终于跑起来了,但这才是刚开始 直奔主题遇到了个报错怎么调也调不通,接口返回报错内容 1{"errcode":1007,"errmsg":"SYS REQ EXPIRE ERROR"} 根据文档说明是:接口请求过期 最开始没仔细想,以为是参数问题,就把各种参数打印了个遍,发现没啥问题 后面仔细一想,过期 那不就是时间的问题吗 调试使用命令打印服务器日期 1date "+%Y-%m-%d %H:%M:%S" 发现果然罪魁祸首就是服务器日期慢了几分钟! 解决使用 ntp、ntpdate 让服务器自己去时间同步服务器同步时间 首先安装这两个软件 1yum -y install ntp ntpdate 设置同步服务器 1ntpdate...
搭建自己的在线 vscode
一张图 code-servercode-server 是一个在线版的 vscode,跟其他在线编辑器不同的是,它包含服务端,通过 WebSockets 与主机通讯,这使得你可以搭建后端环境来编译、运行你的程序 跟本地 vscode 基本一致,可以非常方便的进行项目演示、合作开发等 启动这里使用的是 Docker 部署 只需要下载 docker-compose.yaml,配置相应的环境变量,然后执行 docker-compose up -d 即可 持续集成参考 monlor/docker-code-server 做了持续集成 使用 Github Actions 根据 Dockerfile 进行构建、发布镜像,根据自己需要进行了以下配置 给 zsh 装了个可可爱爱的主题 安装了 nvm、nodejs、yarn、pnpm、vue-cli 等前端环境 安装了一些常用插件 自定义 vscode 用户配置 参考的项目里还带...
Bitwarden 登录失败问题记录
错误Bitwarden 是一个密码管理工具,服务端支持自己部署,所以用 Docker 搭了一个,稳定运行了一年多 直到几个月前,突然出现了问题,所有客户端(浏览器插件、手机 app)都不能登录了 不过服务端自带的 Web 界面还能用,再加上懒就一直没折腾,但确实也挺困扰的,总不能一直登 Web 界面获取密码 于是今天想着解决解决 原因像这种所有客户端同时报错的情况,理所应当就会想到肯定是服务端更新了什么 搜了一下问题,发现 贴吧 有讨论,果然官方早就发布过 《11月弃用通知》 解决像我这种怕麻烦的人,换浏览器插件版本这种解决方案我是直接放弃的,因为多台设备换一遍也是挺麻烦的 也是同篇帖子提到把镜像换成 vaultwarden/server,于是我选择按这个方案进行 首先肯定要把原来的密码全部导出,然后再 因为我是用了宝塔,所以直接打开 Docker 管理器,拉取镜像,创建容器 按以上配置,其中 WEBSOCKET_ENABLED=true 是 WebSocket 通知端口,不需要的可以不加,并且也不需要映射 3012...
Vue 自定义指令生成 placeholder
需求产生在使用表单时,表单的输入框、选择器会设置 placeholder 属性来进行提示 不设置感觉空荡荡的,但如果自己一条条的写又感觉非常麻烦 那我们为何不封装个指令,让它自己加呢 思路因为我用的是 element-plus,组件都有固定的样式、模板 比如 123<el-form-item label="姓名"> <el-input></el-input></el-form-item> 最后的代码就是 12345678<div class="el-form-item"> <label for="title" class="el-form-item__label">姓名</label> <div class="el-form-item__content"> <div class="el-input"> <input...