PostgreSQL 跨版本迁移数据的方法(无第三方工具)

前言 这是我个人一直在用的操作方法,用于 PostgreSQL 跨版本迁移数据。它并不一定是最高效的,但效率也不错,且不需要额外的工具。这个方法并不是为升级准备的,不能完全应用于所有场景。 本文将告诉你怎么做。这是一篇新手向教程。过程十分简单! 一般步骤 PostgreSQL 官方有一个叫...

DevOps

正确删除 go install 的程序避免被 mise 还原

前言 我个人习惯使用 mise/asdf 等版本管理工具来管理开发工具的版本,包括 Golang。最近我注意到通过 go install 命令安装的程序无法彻底删除(被删除的程序会在不经意间被还原),十分诡异。经过一番调查,我发现原因跟 mise 有直接关系。 本文将告诉你们在使用版本管理器的情...

工具

免认证/匿名远程传输文件(Wormhole 的使用方法)

前言 文件传输是一个很基础且被广泛应用的需求,传统工具都不太适合给陌生人或匿名传输文件,因为它们都要求身份认证。向服务器传输文件,我们需要 SSH 登录信息。向普通用户传输文件,我们得是对方的 IM 好友,而且通常有大小限制。 如果有一种文件传输模式,像某些...

工具

将 PikPak 资源挂载到文件管理器,无需高级会员体验比官方 WebDAV 更完整的支持

前言 这是本博客第二篇关于 PikPak 的文章,本文的主角仍然是 PikPak 和 Rclone。在这篇文章中,介绍了命令行操作 PikPak 资源的方法。本文继续扩展 Rclone 的用法,利用 Rclone 启用 PikPak 的完整 WebDAV 支持。无需会员,完全免费,且比官方支持更加强大。 这是一篇新手向教程。过程十分简单! 官方...

工具

p5.js 实现各种视觉错觉(长期更新)

前言 视觉错觉是由视觉系统引起的“幻觉”,其特征是视觉感知似乎与现实不同。经常上网的朋友,或多或少应该都见过一些展示视觉错觉的帖子或视频,本文将用 p5.js 实现一些经典的视觉错觉。 是的,你没有听错。这个页面上的所有错觉动画或图形都是即时渲染出来的,而...

技术, 编程, 科普

部署 SSH 蜜罐一周后

前言 一周前,我出于好奇部署了一个 SSH 蜜罐,用于收集侵入者的行为。本文将分享这次实验的数据和经验,让更多人切身体会到安全的重要性。我个人对这次统计比较惊讶,因为被连接的密度还是相当夸张的。 何为蜜罐 蜜罐是一类吸引攻击者“尝试”的程序,它们通常模拟...

工具, 实验

修正 Hugo 文章的最后修改时间(恢复文件 mtime)

前言 Hugo 文章的修改时间生成有多种方案,有的无法自动化设置,有的方案又依赖 Git 信息。如果你这二者都不满足,本文将会告诉你如何在通用的 CI 环境中基于文件修改时间(mtime)来生成正确的文章修改时间。 以下内容基于这个 hugo.toml 设置片段: [frontmatter] lastmod = [':fileModTime'] 恢复文件修改时...

技术

让 Void Linux 成为基础镜像的新选择(附 Elixir 镜像制作教程)

前言 Void Linux 是一个忍不住想关注的发行版,它既可以较为精小,又可以相对膨胀。它同时维护 glibc 和 musl 两个不同 C 库的版本,又发布有内置 BusyBox 和 GNU Coreutils 两个不同工具集的版本。 将 glibc/BusyBox 版本作为基础容器是非常合适的,我已将其用作 Elixir 应用的基础,且效果不错。它比 Debian 更小巧,软件包...

技术, Linux

分离式 CI/CD 系统搭建 WebDAV 工件仓库

前言 现在的 GitHub Actions 以及曾经流行的很多 CI/CD 工具,一般用户会默认将 CI 和 CD 放在一条管道(或称为流水线)中,故没有构建产物(即 Artifacts:工件)的存储和管理问题。 一旦我们自己的 CI/CD 系统是各自独立的,就不得不面对工件的托管。它类似 NPM/Docker Hub,但以二进制...

DevOps

在 NixOS 中使用 asdf/mise 管理 Erlang 的多个版本

介绍 NixOS 是一个特殊的 Linux 发行版,它不遵循 FHS 以至于你通常不能运行来自第三方的存在动态链接的二进制文件。对于这类预编译的软件,你可以手动修补所有的二进制可执行文件和动态链接库。或者以更加标准可靠的做法:将它们制作成一个个常规的 Nix 包。 除此之外,还有一...

技术, Linux

把 Hugo 博客封装到 Docker 镜像中

前言 对于 Hugo 生成的静态网站而言,通常是不必使用容器化技术部署的。但如果你想让所有用户保持配置的一致性,尽可能把所有优化都无缝推给用户,那么 Docker 化部署也会是一个不错的选择。 本文将向你演示怎么做!这是一篇新手向教程。过程十分简单! 更合理的配置 在进入...

前端

关于 Android Chrome 126 版本开始中文字体变细

前言 最近(准确的说是大半个月前)Android 版 Chrome 的字体显示出了异常,默认字重变得很细。这个问题自 126 开始的某个版本出现,至今(包括 Canary 版)问题仍然存在。 遗憾的是目前没有完美的解决方案,本文将和大家具体讨论一下这个问题。 出现 我是 BUG 敏感型用户,在...

讨论

解决 ARM64 设备编译 OpenWrt 失败

前言 在 ARM64 设备(如苹果的 M1/M2 电脑、路由器)上编译 OpenWrt 会遇到一些问题,例如 Golang 的 C-bootstrap 不被支持。这时候我们要用外部安装的 Go 作为 bootstrap 参与构建。这不算错误,属于和 x86 编译环境的细微区别。 本文将告诉你具体应该怎么做。这是一篇新手向教程。过程十分简单! 错误 当我们在 ARM64...

技术

使用远程节点构建多架构 Docker 镜像(按架构类型分发构建任务)

前言 使用 Docker 默认的 buildx 设置构建多架构镜像时,往往非常的慢。这是因为 Docker 在背后创建 QEMU 虚拟机来执行构建,一旦模拟差异大的硬件架构性能就会非常差。对于有条件的用户,其实是可以将构建任务分发给不同架构的远程服务器,并且原生就支持。 本文会告诉你怎么做!这是...

工具

使用 Phoenix 框架开发原生 WebSocket 服务

前言 在 Phoenix 框架中,一般使用 Channel 实现和前端的双工通信,它基于 WebSocket 并支持长轮询作为后备模式。Channels 的设计已经非常好了,但偶尔情况下我们仍需要原生的 WebSocket 后端,例如为某个现成的前端/客户端产品做适配。 本文将告诉你如何用 Phoenix 做原生 WebSocket 开发。这是一篇新手...

技术, 编程

关于我未即时开源而被老外言语攻击这件事(给中国人丢人了)

前言 开源社区里,有一个词叫做 “toxicity”,字面意思是“有毒性”。一般是指的那些对他人发表恶意的、无建设性负面言论的人。这些言论常见于某些用户对开源项目维护者的攻击,也有反过来的情况即开源项目维护者对新人极为不友善、不包容。 前者比较多...

社会现象, 开源

修复手机 Chrome 前进/后退触发 beforeunload 事件带来的问题(往返缓存的弊端)

前言 最近我给博客实现加载进度条动画时,注意到手机 Chrome 的一个很诡异的现象。当用户后退或前进时,会触发上一个页面的 beforeunload 事件。也就是说我从 A 页面进入 B 页面时,A 页面的 beforeunload 事件会正常触发一次,因为即将离开 A 页面。但当我从 B 页面后退时,上一次的 A 页面的 beforeunload 事...

前端

使用 Incus 取代 LXD(Incus 的安装、设置和使用方法)

前言 Incus 是一个新的容器(LXC)/虚拟机管理器,它的目标是取代 LXD。由于 LXD 实际上已成为 Canonical 公司(Ubuntu 的开发公司)完全掌控的项目,LXC 创始人分叉出了 Incus,并将其纳入为 LXC 社区的一部分。现在的 Incus 的可用性已经很高了,无论对于个人还是企...

工具

Vim/Neovim 的基本配置

前言 这是一篇历来被不计其数的人写烂了的话题,即分享自己的 Vim 配置。我曾经也是 Vim 的忠实用户,后来全身心转到 VS Code。所以复杂的配置我不再需要了,最近特意抽空整理出一份最精简的配置。 配置 这份配置的基本思想是在 Vim 和 Noevim 上都可用,启动尽量快,不用插件...

工具

Nginx 代理配置批量管理(Nginx Proxy Manager)

前言 Nginx Proxy Manager 是一个可视化的 Nginx 代理配置的管理器,通过它可以避免手动编辑一个个 conf 文件的麻烦,还支持自动签发 SSL/TLS 证书。 本文将告诉你怎么部署和使用。这是一篇新手向教程。过程十分简单! 提前说明 我不建议将这个工具用于企业的生产环境,因为它的设计不够好,并且...

工具

自建照片/视频管理方案(Immich 的部署和使用)

前言 Immich 是一个开源的照片/视频管理方案,它的功能和用途类似于 Google 相册或 iCloud 照片。任何个人都可以利用 Immich 搭建自己私有的云同步相册,并支持多端/多人使用。 本文将告诉你怎么部署。这是一篇新手向教程。过程十分简单! 效果 过程 建议使用内网的路由器/软路由或 NAS 等...

工具

无障碍访问 Docker Hub 的各种方法(自建 registry、Cloudflare 加速、Nginx 反代、代理 Docker 网络)

前言 最近 Docker Hub 被屏蔽,各大镜像站关闭,想必很多人都遇到了无法拉取镜像的问题。本文将告诉你们继续使用 Docker Hub 的各种方法,助你解决开发/部署中面临的麻烦。 此教程不包含翻墙有关的细节,仅从技术角度解决 Docker 使用问题。 自建 registry Docker 官方提供了 registry 镜像,这是最标准的搭...

工具

创意编程 p5.js 快速入门

前言 假设你是一个天文爱好者,是否有想过用代码来模拟行星运动?假设你是一位设计师,是否有想过用代码来创作艺术作品?假设你是一名教师,是否有想过用代码呈现教学内容? p5.js 可以帮助你实现这些想法,让创意通过代码变为现实。 概述 前言内容是我个人对“创意编...

编程

Steam 在 NixOS 上的中文显示问题总算被修复了

前言 长久以来 Steam 在 NixOS 上存在中文字体显示问题,挺让人恼火的。好消息是最近这个问题被修复了,感谢 #312268 这个 pr 的作者。 原因 根据 Steam 官方仓库此 issue 中的回复描述,Steam 运行在一种类似 Flatpak 的容器环境中,且使用自己的 libfontconfig。这会导致以下问题:...

Linux

修复 LXD 默认的 images 远程的访问故障

前言 最近又出大事了。LXC 社区禁止了 LXD 对 images.linuxcontainers.org 的访问。这导致 LXD 用户无法再创建或刷新非 Ubuntu 容器。 本文将告诉你修复方法,以及这中间发生了什么。 LXD 和 LXC 阅读本文前有必要搞清楚这二者的关系。LXD 是 Ubuntu 开发的建立在 LXC 之上的管理程序,用户通过 LXD 提供的一套操作服...

技术, Linux

Elixir 1.17 的类型系统

前言 差不多在一年半以前,Elixir 的作者 José Valim 计划给 Elixir 引入类型系统,我已经期待了很久。随着最近 Elixir 1.17 的第一个 RC 版本发布,终于可以初步窥探其效果了。 本文将参考官方的资料并用实际代码,尝试解读引入类型系统后的一些变化。 现状 目前社区主要使用 Dialyzer...

技术, 编程

使用 Rclone 操作 PikPak 资源(命令行下载 PikPak 文件)

前言 Rclone 是一个管理云存储文件的命令行工具,它的支持极为广泛,包括面向开发者的云储存技术、面向用户的各种网盘。数量高达 70 多种。PikPak 是一个网盘兼云下载器。它们二者可以结合使用,让下载更为便捷。 本文将告诉你怎么做。这是一篇新手向教程。过程十...

工具

无服务器搭建直连语音服务(Mumble 的部署和使用)

前言 如果你经常在 Linux 上玩游戏,可能会因为缺乏国内的语音工具支持而烦恼。或者你有其它理由需要一个私有的语音平台。实际上我们完全可以零成本搭建自己的语音服务,甚至不需要购买云服务器。 本文将告诉你怎么做。这是一篇新手向教程。过程十分简单! 条件 搭建仍...

技术

把 Typed、Live2d、Mermaid、p5、Pixi 等等好玩的都集成到 Hugo 中吧!

前言 Hugo 是一个静态的网站生成器,但是它在内容的灵活性上有很大的发挥空间。本文将向你展示 Hugo 的网站(本博客)如何显示更为复杂的内容。 我并没有在 Markdown 中直接插入 HTML 去实现这些,而是将它们封装成了 Markup 的 hooks、shortcodes 和 partials。当前...

技术, 前端

有状态后台任务并发库 Honeycomb 介绍

前言 Honeycomb 是一个 Elixir 库,它设计用于批量执行需要保留结果的异步或后台任务。它的核心功能是异步/后台执行和并发控制。在此前我使用一个功能类似的名为 honeydew 的库,但它已缺乏维护,为了移除对它的依赖我开发了 honeycomb 以取代它。 Honeycomb 并不一定会具有 Honeydew 的完整功能,因为我会优先...

技术, 编程

使用 mise 替代 asdf 管理开发工具的版本

前言 一直以来我都使用 asdf 管理开发环境各工具链的版本,它可以让每一个项目都允许拥有自己的一套版本,不会因为依赖全局性的东西导致额外的负担(例如系统中的工具版本变更导致和项目不兼容)。 在最近我接触到 mise,并最终决定用它取代 asdf。倒不是因为...

工具

解决华硕 X670e 系列主板在 Linux 上的断网故障

前言 如果你是华硕的 X670/X670E 系列主板和 I225-V 网卡,可能会发现无法在 Linux 上长时间正常工作,因为目前这个搭配有一个难以解决的硬件故障。具体表现为系统可能随时断网,短则十几分钟长则数十小时,除了重启之外对恢复网络是毫无办法。 本文将告诉你这类故障的可能原因,以及...

硬件, Linux

基于 Vite 和 TypeScript 改造 Phoenix 框架的前后端架构

前言 Phoenix 在早期(1.16 之前)还算一个务实的框架,它生成传统的前后端架构的项目模板。使用 Webpack 构建完全独立的前端部分。自 LiveView 发明以后,这个框架逐步偏离主流,直至移除了前端的整个 Node 技术栈。 现在 Phoenix 的前端部分基于 esbuild 和 Tailwind,推崇 LiveView 的新型渲染模型...

技术, 编程

简单测试 Erlang/OTP 27 新增的 json 模块

前言 前不久 Erlang 出现了一个新的提案(EEP-68),该提案旨在将 JSON 的编码/解码功能引入到 Erlang/OTP 中。随着最近 27.0-rc2 版本的发布,新增的名为 json 的模块已经可用了。 本文不是严格全面的基准测试,只是十分简单的性能比较。只起到基本的传播作用。 测试环境 硬件/系统 在 32 核...

技术, 编程

博客已用 Hugo 重建

此前 本博客于 2023 年底使用的 Jekyll + Chirpy 搭建,这是一套经典的博客方案。Jekyll 的用户社区很大,有非常多的主题可供选择,托管于 GitHub Pages 完全免费。 但在一开始我就在关于页面说过,我会自己实现博客系统,目前的只是临时方案。在过渡期间,我也考虑过继续使用 Jek...

本博客

使用 NanoPi R5S 和西数紫盘 WD43PURZ 组建简易 NAS

前言 大概是刚接触 OpenWrt 的那会儿,我已开始搭建并依赖内网文件共享。并且长久以来我都坚持使用路由器(或软路由)加 U 盘的组合,且一直够用。 当然在最早期是不够用的,因为那时候路由器的性能不足,SMB 这种加密传输的协议速度极低。但随着后来硬件的发展,路由...

硬件

Elixir 与 Rust 协作开发

前言 本文介绍的是我所使用的两门重要编程语言 Elixir 和 Rust,尤其是 Elixir 作为我个人的主力开发语言已有好几年时间。在前期我始终将它们独立使用,各自解决不同的问题。直到后来,我才开始尝试在 Elixir 中集成 Rust,在优化性能的同时共享 Rust 的丰富生态。 自此不可收拾...

技术, 编程

重拾博客

怀念 真的很久没有写过博客了。 当我还是个学生的时候,我已尝试自行开发博客系统。工作以来又用感兴趣的技术重写,如此往复了两到三次吧。直到最后,我不再在意个人博客,但仍然在别的平台分享自己的文字。 实际上在此博客的前期,我仍然没有太多兴趣。 理由 重拾...

本博客