使用 Github Action 更新用于 rpm 打包的 spec 文件

有一些软件包的上游本身就是使用 Github Action 发版的,每次 commit 都会触发 Github Action 去构建并分发新版本,使用构建时的时间日期作为版本号。针对这种包,手动更新费时费力,而规范的 specfile 应当是更新 %changelog 的,因此应当是使用 rpmdev-bumpspec 命令。只不过 rpmdev-bumpspec 需要在 rpm 系发行版或者装有 rpm 系列依赖包的发行版下执行,这不是随随便便一个 Linux 环境就能运行的。我找到了 netoarmando/rpmdev-bumpspec-action 这个 Github Action,它...

使用 Python 生成甘特图(Gantt Chart)

在写操作系统的作业的时候有几道题给出了几个进程的相关信息,要求我们画出几种简单调度的甘特图。操作系统的作业一直是电子版,上传 pdf 即可的。我觉得手画甘特图拍照嵌入 pdf 中不太优雅,过于掉价,因此就想直接生成甘特图嵌入。在谷歌搜寻了一番,我发现现在的甘特图生成网站都太现代化了,根本不是操作系统课上教的样子了。所幸我找到了 gao-keyong/matplotlib-gantt,虽然只有两个 star(没事,加上我就 3 stars 了),但确实能用,README 中的样例也是我期望的样子。项目中自带了一个 jupyter 的示例,算得上是非常简单易上手的了,依赖方面只要装好 matplo...

uniapp 中的图片预加载

最近在做微信小程序的时候遇到了图片资源过大无法正常打包的问题,没什么太好的方法,只能是使用图床托管这些图片资源。但部分图片的体积实在太大,即使是采用了境内 cdn 的图床,即使是采用 webp 对图片进行了压缩,部分图片都需要小几秒去把图片加载出来,这导致的用户体验就不是很好了,因此我们需要实现图片预加载的功能。在 uniapp 的官方文档中,我找到了 uni.preloadPage(OBJECT) 方法。很可惜,这个方法并不支持微信小程序,自然不能完成被预加载页面的图片资源预加载。经过搜索,在一篇奇奇怪怪的文章中提到:在UniApp中,图片预加载可以通过使用uni.getImageInfo方...

小记 - 尝试拼凑出 apt 仓库中的 deb 包下载地址

大概一周前,有一个来源不明的 Linux 微信,从包的结构来看是基于 qt 实现的图形化界面,deb 包中的 control 信息表明是腾讯团队官方出品的。今天听人说 UOS 的商店上架了最新的微信,便尝试从 UOS 的官方仓库提取下载链接,帮助 AUR Maintainer 获取到新的地址。在我的《deepin-elf-verify究竟是何物?》这篇文章中,我成功从 uos.deepin.cn 下载到了来自 UOS 中的软件包。可惜,当我采用同样的方法搜索 weixin 或者 wechat 字样时,没有得到任何结果。UOS 上的软件来源起码来自两个仓库,一个是与系统有关的软件,比如 Linu...

在 Linux 下使用 mitmproxy 抓取 HTTPS 流量

作为部分 AUR Package 的 maintainer,一直以来我都有在 Linux 下抓取 https 流量的需求,比如抓取应用内的更新检测时访问的 url 地址。之前一直没有空去研究,趁着最近课少,总算是完成了这个目标。在这里我使用的 mitmproxy,基于 python 和 webui 的一款开源简洁的流量代理软件,可以用于抓取 https 流量信息。安装 mitmproxy在 Arch Linux 下,官方 extra 源中已经打包好了这款软件,直接使用下面的命令即可完成安装。sudo pacman -S mitmproxy 尝试运行 mitmweb安装完成后,我们将会获得三个新...

如何使用 docker 部署 onemanager

部署方法如果你只是想找一个 OneManager-php 的 Docker 部署方法,直接看 https://github.com/zhullyb/OneManager-php-docker一直以来,我都是 OneManager-php 的忠实用户。这些年来,尽管有 alist 这种 UI 好看,多种网盘高度聚合的项目逐渐取代了 onemanager 的生态位,但 onemanager 支持文件分片上传、上传流量不经服务器的特点还是让我非常满意。前一阵子,glitch 暂停了针对项目自定义域名的支持,因此在我手贱地取消了项目原本绑定的域名后,迫切地需要寻找一个新的部署的平台,只不过 onema...

crontab 中简单的@语法糖

说来惭愧,其实我用了这么久的 Linux,一直没有学会编写 crontab 脚本。一行的开头写上五位莫名其妙的数字或星号,后面跟上需要执行的命令,看上去很 kiss,但我确实记不住,以至于我现在每次写 crontab 都是让 ChatGPT 来帮我写。不过我最近查阅 Linux 下设置开机自启脚本的方案的时候,意外地看到 crontab 中居然可以用 @reboot command 的方式去写,这让我意识到 crontab 也是有一些简单的语法糖的。在查阅了 crontab 的 manual 后,我发现一共有下面这么几种 @ 写法的语法糖。这是在全网大部分的 crontab 中文教程中是没有的...

备份 umami 数据库,并使用 TG Bot 保存 dump 文件

前一阵子看到点墨的博客「定时备份mysql/mariadb数据库并上传至tgbot」,我意识到个人站点的数据库 dump 使用 TG Bot 存放是一个非常合适的做法。个人站点的数据库体积本身就不大,TG Bot 又有官方提供的 api,非常适合自动化任务。我就寻思着给我的 umami 数据库也写个定时任务备份一下,也不至于之前做一次迁移数据全部爆炸的悲剧重演。我的 umami 是「使用 vercel+supabase 免费部署 umami」部署出来的,数据库在 supabase 上,因此我们先打开 supabase 的 dashboard,获取到数据库的 url。密码我自然是不记得了,不过好...

在 JavaScript 中,箭头函数中的 this 指针到底指向哪里?

这学期期末复习的时候,学校里负责上 JavaScript 的老师给我们提出了一个问题。下面这段代码中,a.u2() 在 ES Module 下执行会抛出 TypeError 的异常,在 CommonJS 下运行则会输出 undefined,而 B 这个类的 u2 函数则能够在对象实例化以后正常运行。const a = { x: 3, u1: function () { console.log(this.x) }, u2: () => { console.log(this.x) } } class b { x = 3 u1 = function () { console.log(this.x) ...

结合 Vue.js 与 php 完成的 web 期末大作业,讲讲前后端分离站点开发与部署中可能遇到的 CORS 跨域问题

在上一篇博客中,我讲到了 web 期末大作业的上云部署。整个项目是使用 Vue.js 作为前端,php 作为后端,mysql 作为数据库实现的。在使用 Vue.js 开发前端界面时,我选择了使用 vite 脚手架帮助开发,这意味着我的作品将使用前后端分离的架构实现。因此在开发部署过程中均遇到了跨域的问题,故写下这篇博客记录下解决方案。基于后端返回对应 http 响应头的解决方案开发阶段在我完成前后端的开发,并且经过 Apifox 的 mock 测试后,第一次在浏览器尝试前后端对接,遇到了 CORS Missing Allow Origin 的报错。vite 启动的 dev 开发服务器使用的域是...
145613