Nodejs 对接 TSCLIB
开始最近工作中有这么个课题。曾几何时我基于 electron 做了个打印功能,按照官网文档的描述,原理其实是 electron 启动一个渲染进程,加载一个网页,并且调用 electron 给的打印函数实现打印 这种方式其实就是打印网页,但后面发现推到 Windows 打印队列中的数据比较大,有 300 到 500 KB,相比友商足足大了 100 倍! 于是又被派来研究一下友商的解决方案,友商的解决方案也很容易猜到,其实就是推送了打印指令,而不是整个网页的渲染物 虽说容易猜到,但实际调研过程还是困难重重,但这篇文章就不展开说了,直奔主题 TSCLIBTSCLIB 是个打印机函数库,它提供了一些基础的打印封装,并提供了推送二进制数据的方法 根据 官方文档 描述,你可以调用 TSCLIB.dll 中封装的函数来实现打印 这就引出第二个问题,nodejs 如何调用 dll 调用 DLL使用 ffi-napi 和 ref-napi 这两个开源库,能做到 nodejs 调用 dll 中的方法 首先将你用到的函数,函数名、返回值类型、参数类型一一声明 12345678910import ffi fr ...
Hexo 主题开发 hexo-theme-imba97 —— 第零篇
使命近一年中我了解到数字游民这个概念,就深受吸引,想逐步达成这一目标 不管以后找远程工作还是全职开源开发转商业化,都需要一个完善的开源项目 加上一直想自己动手做一个自己博客的主题,于是就有了这个项目 地基模板的开发是在 Hexo 默认模板的基础上,最开始没有直接写页面,而是丰富开发工具,会让开发变得更简单 TypeScript第一个就是 TypeScript,这让项目有更好的规范性,代码写起来也不容易出问题 Rollup主题开发在代码层面分为 Hexo 运行时执行的代码和实际博客页面中的代码 在开发或打包时,先使用 tsc 将 ts 编译为 js,再通过 rollup 根据不同目录转成相应格式的代码 比如 Hexo 运行时识别的 cjs,浏览器执行的 iife UnoCSSUnoCSS 是个原子化 CSS 引擎,可以根据关键词生成具体的样式 这样就不用为 class 起名发愁了,并且按需生成,不会有大量重复样式 功能除了自带的图片预览,目前还加了 Pjax、nprogress、smooth-scrollbar 开发层面有自动引入 js 库并支持权重,比如要在其他库之前引入 jque ...
参与一下 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: 'source/css/style.c ...
这个全平台远程桌面软件我必须安利!
我太激动了今天发现一个 全平台、远程桌面、免费开源、支持自建服务器 的软件!可以说是 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) .getR ...
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: - /home/runner/ ...
Nodejs 发送短信程序避坑指南
前面的废话前阵子接了个有意思的活,需求根据模板批量发送短信,在强烈兴趣爱好的驱使下决定研究研究,顺便把钱赚了 找教程的时候发现非常少,视频资源都比较老,中英文短信混合发送没有一个教程提及,调通硬件又发现,nodejs 相关的资源就更少了 折腾了两周多,最开始买的板子只支持 2G,想着办 2G 卡结果营业厅说没法办,一通找最后又换成现在这个板子,还有发短信各种失败… 总之最后折腾出来这篇,分享一下踩的坑 硬件准备 封装好的 4G 模块 (A7680C) USB TO TTL (CH340G) 一般会附赠线 接线参考 测试用串口工具,或者使用 serialport 包写个简单的程序连接并发送指令 但注意甄别,我遇到有些工具不会按你的指令,会给你发一些乱七八糟的短信 发送英文短信 AT 测试命令 AT+CMGF=1 设置短信格式 AT+CMGS=13000000000 接收手机 以上都需要发送新行,也就是回车 > 出现箭头后写上短信内容,去掉发送新行并发送 切换到 16进制 新行发送 1A 有的教程说的最后发送 Ctrl + Z 其实说的就是 1A 接收成功 ...
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 一遍才能在项目 i ...
网络游戏防沉迷实名认证系统 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 time.windows.com 它输出的内容会告诉你慢 ...
搭建自己的在线 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 用户配置 参考的项目里还带 NPS,正好需要就也保留了 有持续集成就方便多了,配置环境、安装软件、更改配置等只需要改一下相关的文件或者写写脚本、命令提交即可 后言奈何现在不太会写 ...