Hi there 👋

I’m not ready.

Linux Desktop GPU

最近在 Linux 桌面上分别尝试了 AMD 和 NVIDIA 的独立显卡(使用的都是 Wayland 协议),踩了一些坑,分享出来。 AMD 对于 AMD 显卡,安装一路顺畅,跟着 Arch Wiki 安装完系统,装个桌面就能用了。进入桌面后跟笔记本的核显使用体验一致,并且后续使用并无异常,比睡眠后唤醒,无黑屏问题等。 如果只是想安静地作为桌面显示用的显卡,AMD 表现很完美。但要是想玩一些模型,比如 Whisper 和 Llama 2,那坑就来了。 既然想玩模型,那多少是知道 AMD 显卡在炼丹领域是比不上 NVIDIA 的。但具体相差多远呢?PyTorch 有 ROCm 的选项支持 AMD 显卡,但模型就不一定能运行了。 实际测试下来,能跑的模型也有,比如: ChatGLM Stable Diffusion web UI ChatGLM 直接启动会报错,显卡不是最新的。根据 WenJieLife 的提示,设置环境变量解决:export HSA_OVERRIDE_GFX_VERSION=10.3.0 HCC_AMDGPU_TARGET=gfx1030。但如果使用量化模型,就不行了。Stable Diffusion web UI 同样需要进行一些配置,但有现成的教程可参考: A卡ROCm运行Stable Diffusion AI画图 Stable Diffusion 使用 AMD ROCm 显卡加速 后续尝试 Llama 2 模型,跑不动,WhisperX 需要 NVIDIA 显卡。 NVIDIA 安装时建议按照 NVIDIA - ArchWiki 中的步骤进行。...

2023-09-02 · 1 分钟 · 134 字

一个睡眠提醒小工具

之前有段时间太累,但一到晚上又很精神,思绪也比较活跃,很容易就把时间抛到脑后了。第二天是周末还好,可以睡晚点。但如果是工作日,很容易睡眠不足。经历了几次身体不适之后,决定写个脚本,提醒自己睡觉。 晚上通常都是使用电脑,且系统是 Linux,很容易想到使用定时器来做这件事。粗暴一点的做法是直接用定时器在特定时间进行提醒,但缺点也很明显,如果系统锁屏了但未休眠,那么定时任务依旧会在安排的时间点执行。最终决定写个脚本配合定时器一起运行。 首先要解决的是如何判断当前系统的锁屏状态。当前的系统桌面是 Gnome + Wayland,往这个方向搜索得到的结果不是很清晰,有些方法是过时的。最终测试下来,使用 dbus-send 的方式最靠谱。使用以下命令可判断系统是否锁屏: # If it is locked, boolean true will be print dbus-send --session --print-reply --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.GetActive | grep 'boolean true' 然后就是确定提醒的时间点了。不同时间点,提醒的内容的应该有区别。这个比较简单,获取当前系统时间,跟设置的时间点进行比较即可。通知工具使用 notify-send,很方便。 只是简单地通知的话,感觉可能没啥效果,于是想到加上强制休眠的时间点,最后做成了 systemd 的定时器,放在这里:bedtime-reminder。 实际使用了一段时间,效果挺好的,但基本上是卡点睡觉。等适应后,可以把时间调早一点。但通知的作用不大,最后靠的是强制休眠。果然还是 deadline 最有效。

2023-04-09 · 1 分钟 · 37 字

在终端中使用 OCR

最近比较常用到 OCR 的功能,主要用的是 tesseract,再搭配终端访问剪贴板内容和一些其他工具,整体体验很流畅。 首先需要安装 tesseract,Arch 下可一条命令解决:sudo pacman -S tesseract tesseract-data-chi_sim tesseract-data-eng,后两个是语言数据,chi_sim 和 eng 分别对应简体中文和英文。然后搭配 xclip 或 wl-paste 就可以食用了: # tesseract usage: `tesseract FILE OUTPUTBASE [...]` # If FILE is stdin or - then the standard input is used. # If OUTPUTBASE is stdout or - then the standard output is used. xclip -selection clipboard -t image/png -o|tesseract stdin stdout -l chi_sim+eng # on Wayland, you can yuse wl-paste: wl-paste -t image/png|tesseract -l chi_sim stdin stdout 为什么需要指定 MIME 类型?Linux 下剪贴板有多种类型(selection),主要包括 PRIMARY、CLIPBOARD 和 SECONDARY,常用的是 PRIMARY 和 CLIPBOARD。...

2023-03-12 · 2 分钟 · 229 字

关于 Vim 自动切换输入法

最近在折腾 Vim 配置,花了不少时间优化,可以说是差生文具多了。主要是把包管理器从 Packer 换成了 lazy.nvim,然后从 LazyVim 中抄了一些配置,顺便把目录组织结构换成 LazyVim 那样的方式进行组织。 然后前段时间又在推上看到关于 Vim 编辑器下中英文切换的讨论。想要实现的效果是 Vim 在离开 INSERT 模式时,切换输入法到英文状态,当再次进入 INSERT 模式时,又自动切换回去。 im-select 是比较多人推荐的工具,用于在命令行中切换输入法。该项目介绍的用法适用于 VSCodeVim,对于纯 Vim 没有提及。 Vim 可以在不同事件发生时自动执行预先设置的命令,自动切换输入法应该也是类似。找到一个插件 vim-barbaric,看了下里面的源码,思路也是如此。于是往自己的 Vim 配置中加了以下几行代码: -- Auto switch input method local myim = vim.fn.system('ibus engine') local function switch_eng() myim = vim.fn.system('ibus engine') -- print("switch to eng from: " .. myim) os.execute("ibus engine xkb:us::eng") end local function restore_normal_im() -- print("restore to: " .. myim) os.execute("ibus engine " ....

2023-03-05 · 1 分钟 · 121 字

Common Lisp 项目的代码结构

相比于 Python 项目简单清晰的目录结构,Common Lisp 的项目结构要复杂不少,尤其是大型项目。但当你知道每个文件/目录的作用时,会发现这目录结构也不复杂。 以 Postmodern 项目为例,看看实际项目是怎样组织代码的。 该项目目录结构如下: ├── cl-postgres/... ├── cl-postgres.asd ├── postmodern/ │ ├── connect.lisp │ ├── ... │ ├── package.lisp │ └── tests │ ├── ... │ ├── test-package.lisp │ └── tests.lisp ├── postmodern.asd ├── simple-date/... ├── simple-date.asd ├── s-sql/... ├── s-sql.asd └── ... 这里省略了部分目录和文件,但不影响我们解读该目录结构。可以点击链接了解完整的目录结构。 首先看最外层的文件,这里列出的都是以 .asd 为后缀的文件,这些文件描述了源代码间的依赖关系,使它们能按正确的顺序进行编译和加载。而这依靠的便是 ASDF 自动编译系统。 ASDF,全称 Another System Definition Facility,该构建系统指定了 Common Lisp 程序中各系统的组成及控制各组件能按正确的顺序进行编译、加载和测试等等。 ASDF, or Another System Definition Facility, is a build system: a tool for specifying how systems of Common Lisp software are made up of components (sub-systems and files), and how to operate on these components in the right order so that they can be compiled, loaded, tested, etc....

2020-06-07 · 1 分钟 · 191 字