2023 年度总结
今年是感觉到了累的一年,更多的是精神压力。依然 间歇性踌躇满志,持续性混吃等死。 工作工作上更得心应手了,感觉现代程序猿到了后期就是手握一堆开源库,要什么功能找哪个库 换了工作,当前技术栈以 capacitor 为主,一个跨平台框架,用前端技术开发 Android、iOS 应用,也可以通过 electron 打包桌面应用 除了前端也搞一搞 nodejs 之类的,简单写写 iOS 相关的,于是变成了这样 加班略多,也学到不少新鲜东西 生活出现了严重拖延,感觉有种死循环。明知道不能睡太晚,但还是不太想睡,放下手机睡觉吧睡不着,至少得半小时一个小时才能睡着,于是就一两点了 但即使是这样感觉自己的时间还是很少,很多想做的、得做的一直排着队 以前工作之余还做做自己的项目,现在回家直接摆烂,边看 “一口气看完 XXX”...
Safari 浏览器踩坑记录
音频加载近期做了个小游戏,需要用到 mp3 文件,为了不让用户等待做了预加载,实现方式就是 123const audio = new Audio()audio.src = '音频地址'audio.load() 这样再监听 canplay 事件,即可拿到是否加载完成,加载多个并做了进度条 但后来朋友反馈发现,iPhone 手机进度一直是 0%,原因有两个 iOS 加载音频非 WIFI 下不能预加载,需要用户同意 也就是 audio.load() 需要在一个用户操作事件中,比如 onClick 本想着这就解决了,在同一个点击事件里先加载,做了个异步,等待加载完成后继续执行播放,结果又不对了 播放前不能有 await 也就是调用 audio.play() 之前不能有 await,需要先执行加载,再进行播放 于是最后做了设备类型判断,如果是 iOS 设备,就需要先点击加载音频,加载完后才会出现开始按钮 滚动回弹近期工作中遇到了这个问题,Safari...
Fedora Docker 自动关闭的问题
事件回放之前在做 Homelab 的时候用到了 Fedora 这个系统,做显卡直通后,在系统中单独跑一个 Jellyfin 可以开启硬件解码 但后面发现 Jellyfin 时不时就打不开了,最开始没发现什么问题,也找到了一个简易解决方案,就是执行以下 docker ps 就启动了 之后感觉是系统休眠问题,于是就搜了一下 Fedora 怎么关闭自动休眠,但没搜到命令 关闭自动休眠昨天仔细找了找,发现了关闭自动休眠的命令,Fedora 也可以用 1sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target 记录一下 添加自动重启之前加了个音乐服务,使用频率大幅增加 然后发现即使是不进入休眠,过几天也会莫名其妙挂,甚至 SSH 也连不上,所以设置了自动重启 打开计划任务 crontab -e,根据自己需要添加启动时间,我这里设置每天 5 点重启 10 5 * * * reboot 添加 NAS 挂载重试2024-04-20 更新 最近发现 NAS 有一次没挂上,用的是...
Nodejs 对接 TSCLIB
开始最近工作中有这么个课题。曾几何时我基于 electron 做了个打印功能,按照官网文档的描述,原理其实是 electron 启动一个渲染进程,加载一个网页,并且调用 electron 给的打印函数实现打印 这种方式其实就是打印网页,但后面发现推到 Windows 打印队列中的数据比较大,有 300 到 500 KB,相比友商足足大了 100 倍! 于是又被派来研究一下友商的解决方案,友商的解决方案也很容易猜到,其实就是推送了打印指令,而不是整个网页的渲染物 虽说容易猜到,但实际调研过程还是困难重重,但这篇文章就不展开说了,直奔主题 TSCLIBTSCLIB 是个打印机函数库,它提供了一些基础的打印封装,并提供了推送二进制数据的方法 根据 官方文档 描述,你可以调用 TSCLIB.dll 中封装的函数来实现打印 这就引出第二个问题,nodejs 如何调用 dll 调用 DLL使用 ffi-napi 和 ref-napi 这两个开源库,能做到 nodejs 调用 dll 中的方法 首先将你用到的函数,函数名、返回值类型、参数类型一一声明 12345678910import...
Hexo 主题开发 hexo-theme-imba97 —— 第零篇
使命近一年中我了解到数字游民这个概念,就深受吸引,想逐步达成这一目标 不管以后找远程工作还是全职开源开发转商业化,都需要一个完善的开源项目 加上一直想自己动手做一个自己博客的主题,于是就有了这个项目 地基模板的开发是在 Hexo 默认模板的基础上,最开始没有直接写页面,而是丰富开发工具,会让开发变得更简单 TypeScript第一个就是 TypeScript,这让项目有更好的规范性,代码写起来也不容易出问题 Rollup主题开发在代码层面分为 Hexo 运行时执行的代码和实际博客页面中的代码 在开发或打包时,先使用 tsc 将 ts 编译为 js,再通过 rollup 根据不同目录转成相应格式的代码 比如 Hexo 运行时识别的 cjs,浏览器执行的 iife UnoCSSUnoCSS 是个原子化 CSS 引擎,可以根据关键词生成具体的样式 这样就不用为 class 起名发愁了,并且按需生成,不会有大量重复样式 功能除了自带的图片预览,目前还加了 Pjax、nprogress、smooth-scrollbar 开发层面有自动引入 js 库并支持权重,比如要在其他库之前引入...
参与一下 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 其实说的就是...