All Posts

  • Published on
    ## 命令行方式1 -- 不依赖外部工具 查看当前生效的 scaling_driver ```shell cat /sys/devices/system/cpu/cpufreq/policy*/scaling_driver ``` 查看当前生效的 scaling_governor ```shell cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor ``` 查看可用的 scaling_governor ```shell cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor ``` 设置为高性能模式 ...
  • Published on
    之前有一用一个 Chrome 插件优化 Github UI 体验的,叫 [refined-github](https://github.com/refined-github/refined-github) 当然现在我已经没有使用了,主要是由于 Github UI 更新太快,有时候它追不太上。容易导致一些奇怪的 UI问题。 它有一个神奇的功能是, 你访问他人的 github profile, 或者, 鼠标悬浮在某人头像上时,它会显示出这个用户是在哪个时区,此时此刻他是几点。 后面我发现,它其实是通过 github restful api 去获取仓库的 commit log 信息, 然后找到最近的一条是作者本人提交的 commit, 通过 git 本身记录的原 commit log ...
  • Published on
    之前为了方便解密客户端日志,我基于 https://github.com/Tencent/mars/tree/master/mars/xlog/crypt/decode_log_file_c_impl 写了个简单的命令行工具 `xlog-decode`。 这个工具很简单, 就是支持递归地解密当前目录及其下所有的 xlog 文件 (由于是公司项目,因此 xlog 文件的后缀是统一且固定的)。 如 `foo/xxx.xlog` 会自动解密在同级目录下,变成 `foo/xxx.xlog.log` 最近一次编译还是几年前,这不有童鞋需要我给他编译一个 Mac (Intel CPU版) 版的(ps: 我是 Linux 用户),于是有了这个文章。 ...
  • Published on
    有这个文章是因为,曾经不小心看到了 Arch wiki 里有个神奇的页面, 里面介绍了"回"字的X种写法 然后我在 C+ glib2 这种写法上面翻车了: https://wiki.archlinux.org/title/Desktop_notifications#C 完全按 wiki 来的: Dependency: `glib2` Build with: ```shell gcc -o hello_world `pkg-config --cflags --libs gio-2.0` hello_world.c ``` ```c:hello_world.c #include <gio/gio.h> int main() { ...
  • Published on
    ## kernel modules 以 pve 8 (基于 debian 12) 为例,里面的 zfs 模块在 `/lib/modules/$(uname -r)/zfs/` 目录。 ```shell root@pve:~# ls -lh /lib/modules/$(uname -r)/zfs/ total 4.1M -rw-r--r-- 1 root root 569K Jun 17 13:58 icp.ko -rw-r--r-- 1 root root 241K Jun 17 13:58 spl.ko -rw-r--r-- 1 root root 29K Jun 17 13:58 zavl.ko ...
  • Published on
    ## 使用 GNOME 自定义快捷键无法调起 flameshot gui 这个解决办法主要来自 https://github.com/flatpak/xdg-desktop-portal/issues/1070#issuecomment-1762884545 注意, 这里比较奇怪的是,直接在 GNOME 自定义 key binding 里面的 command 写上 `/usr/bin/env QT_QPA_PLATFORM=wayland flameshot gui` 是不会工作的. 必须通过 shell 脚本执行。暂时不知道原因。 ```shell sudo tee /usr/local/bin/flameshot-gui-workaround > /dev/null <<'EOF' ...
  • Published on
    ## background recently I migrated my Blog from Hugo to [timlrx/tailwind-nextjs-starter-blog](https://github.com/timlrx/tailwind-nextjs-starter-blog) I deploy the blog via Netlify and serve it via Cloudflare proxy. ## how to see the problem open browser console, you'll see errros like this: ``` 4f0b14e9-f6a6045a21104f01.js:1 Uncaught Error: Minified React error #425; visit https://reactjs.org/docs/error-decoder.html?invariant=425 for the full message or use the non-minified dev environment for full errors and additional helpful warnings. ...
  • Published on
    [evernote-backup](https://github.com/vzhd1701/evernote-backup) > Quickly sync all your notes into the SQLite database for backup. > Export all backed up notes in *.enex format, as notebooks or single notes. ```shell pip install --user evernote-backup ``` ## Step 1. Database initialization By default, it will prompt you to enter your account credentials. You can provide them beforehand with `--user` and `--password` options. ...
  • Published on
    https://github.com/timlrx/tailwind-nextjs-starter-blog https://github.com/timlrx/pliny <TOCInline toc={props.toc} asDisclosure /> ## migration repo ```shell git checkout -b hugo git push origin hugo git branch -D main git checkout --orphan main rm -rf ./* rm -rf .forestry .gitignore .gitmodules cp -rav ~/repo/blog/nextjs-ttys3.dev/* . ...
  • Published on
    主要是想从 crx 文件安装一个[扩展](https://github.com/pt-plugins/PT-Plugin-Plus/wiki/install-from-crx) 因为一些原因, 这个扩展可能在 Chrome Web Store 上架的并不是最新版本, 所以只能从 crx 文件安装最新的版本. 但是当前 Chrome 版本已经不再允许直接从 crx 文件安装扩展了 (这里只讨论正常的安装, 不考虑打开开发者模式从文件load的情况). 不过 Chrome 官方也并没有封死路, 只是需要在策略里面添加一个白名单, 才能允许从 crx 文件安装扩展. wiki里面只介绍了 Windows 下载改注册表的方法. ...
  • Published on
    ## solution 其实是升级后 tailscale 提示我的. ```shell ❯ tailscale status # Health check: # - dns-manager: systemd-resolved and NetworkManager are wired together incorrectly; MagicDNS will probably not work. For more info, see https://tailscale.com/s/resolved-nm # - dns-os: setLinkDNS: Could not activate remote peer. ...
  • Published on
    CS9 (CentOS Stream 9) 发布也挺久了. 一直没有升级, 主要是官方一直没有发布升级指南. 这一点 CentOS 比较坑 (当然, RHEL用户是可以从RHEL8 升级 RHEL9的). reddit 上甚至有 RHEL 的员工回复: Q: How to upgrade from Stream 8 to Stream 9? A: > rbowen2000 1 yr. ago > Red Hat Employee > No. There is not currently a way to do an in-place upgrade between C8S and C9S, nor do we expect for there to be one. This is one of the questions that gets asked at each of our CentOS Dojo AMA sessions, and the answer is typically along the lines of "Red Hat Engineering isn't interested in this feature for RHEL, and so it won't be worked on for CentOS. However, if someone from the community works on it, that would be awesome." ...
  • Published on
    ## 缘由 其实是 O'Reilly Learning 终止了和 ACM 合作. 毕竟 499刀的会员, 几十美元买个 ACM 会员就能白得. O'Reilly 估计觉得这已经影响到它自己卖 O'Reilly Learning 会员了. 这无疑是 ACM 的损失, 也是我们这些羊毛党的损失. 没有了 免费 O'Reilly Learning 资料库的 ACM 会员对于我来说, 毫无用处. https://web.archive.org/web/20220702061717/https://learning.acm.org/e-learning/oreilly Use promo code ACM10022 to receive an introductory one-year subscription for $399 (plus VAT/Tax). ...
  • Published on
    今天检查邮箱发现 https://github.com/toml-rs/toml-rs/issues/392 这个 issue 有更新. 由于 `toml` 这个 crate 完成的时候, TOML 标准本身还没有达到 1.0.0 稳定版, 因此这个 crate 实际上只实现了 TOML 标准 0.5 版本的功能. 但是现在 TOML 标准已经到了 [1.0.0 版本](https://toml.io/en/v1.0.0), 而 `toml` 这个 crate 的维护者却一直没有更新. 由于有了这个 issue, 讨论何时更新到1.0版本. 这是一个 2020 年的 issue. 一直没啥动静, 值得高兴的时候, 昨天终于有变动了: ...
  • Published on
    老灯用的是 Nvidia 显卡闭源驱动. 显示器是 4K 的. 这操作基本上是每次装机后必备的, 这里记录下. ## Linux Console 字体太大了 默认情况下有个问题就是: console 下面的字体太大了. 字体太大了, 是因为 frame buffer 分辨率太低了, 最简单的做法就是把 console 字体调小一点. 纯 console 下的字体是点阵字体. 默认的字体有点丑, 装个 terminus 吧: ```shell paru -S terminus-font ``` 切到 console 看下效果: ```shell setfont ter-d14b ``` 我这里设置 14 号是因为默认的太大了, 14相对较小一些. 另外 12 的话点太明显了, 不够清晰. ...
  • Published on
    工作电脑是双屏, 自动切换到 Wayland 之后, GDM 就没消停过. 经常性的从锁屏界面切回来后 GNOME 桌面会话退出了, 然后登录进去所有用户进程都结束了, 就跟重启后首次登录一样. 看 gdm 的日志也没看出啥. 家里的电脑同样是 Arch, 并且同样是 Nvidia 显卡, 唯一的不同时, 家里的是一个屏. 但是基本上家里的电脑就很少有放一段时间后再登录桌面会话消失的情况. 今天无意中在这 https://ask.fedoraproject.org/t/external-monitor-with-wayland-and-two-gpus-notebok/20387/3 看到一个解决方案: "I read from other forum that the problem actually are with `GDM` (Gnome login screen). You could try to switch to `lightdm`." ...
  • Published on
    PlantUML 是最近才了解到的, 实际上这个东西存在已经很多年了. 之前有用过 mermaid, 但是 mermaid 的 flowchart 写起来很蛋疼. PlantUML 的 activity diagram 对多行文本和 note 支持更好, 同时不用写太多的箭头和 A, B, C 这种标记. mermaid 要支持多行文本, 当前只能用 `foo1<br/>foo2<br/>foo3` 的方式. 另一方面, A, B, C 这种标记, 当你突然想在中间插入一个的时候, 就会很蛋疼. ## 添加到 Hugo 模板 这里我并没有采用 Front Matter 参数的方式来确定是否加载 plantuml-encoder js 文件, 因此老灯觉得这样太麻烦. ...
  • Published on
    | 对比项 | Hugo | Zola | |-----------------|----------------------|--------------------------| | 实现语言 | Golang | Rust | | 主题数量 | 丰富 | 较少 | | 模板引擎 | Go Template | Tera | ...
  • Published on
    ## 缘由 自从老灯切到了 Wayland, 好像 epiphany 就基本上打不开了. 由于这个浏览器平常也不怎么用, 因此也就一直没管. 今天周末, 刚好抽空简单看下. ## 排查 先用 gdb 看看: ```shell ❯ gdb epiphany GNU gdb (GDB) 12.1 This GDB supports auto-downloading debuginfo from the following URLs: https://debuginfod.archlinux.org Enable debuginfod for this session? (y or [n]) y Debuginfod has been enabled. ...
  • Published on
    cobra 可能是 Golang 里面最好用的 cli 命令行类库了. 没有之一. 其它也有一些功能类似的, 但是做到像 cobra 这样功能强大又简单易用的, 着实不多. 但是长期以来, cobra 依赖重量级的 viper module, 这两个东西都是同一个作者开发的, 因此其实也可以理解. 老灯最近突然发现, 随着社区力量的参与, cobra 的 viper 依赖居然在 1.4.0 版本被移除了! 老灯不是唯一一个不喜欢 viper 这种全家桶依赖类型的包的. 甚至有人 fork 出一份专门移除了 viper 依赖: https://github.com/muesli/coral 这个作者专门在 readme 说明了缘由: ...
  • Published on
    serde 几乎是目前 Rust 生态中最常用的序列化与反序列化库了. ## Golang 实现 作为一个 Golang 程序员来说, 免不了要对比一下. Golang 官方库直接实现了 json 的序列化和反序列化. 对于序列化和反序列化, Go 都是用一个简单的接口`interface`表示: ```go // https://pkg.go.dev/encoding/json#Marshaler type Marshaler interface { MarshalJSON() ([]byte, error) } // https://pkg.go.dev/encoding/json#Unmarshaler type Unmarshaler interface { ...
  • Published on
    giscus: A comments system powered by [GitHub Discussions](https://docs.github.com/en/discussions) 老灯之前用的是 utteranc.es, 这个是基于 Github issue 功能实现的. giscus 是基于 discussion, 简单试用了一下, 最明显的区别回复的功能吧. 可以直接在某个评论下面回复. 第二就是支持reaction. ![](giscus-2022-07-25_00-35.png) 新建一个专门的仓库用来做评论用即可. 具体做法很简单: Choose the repository giscus will connect to. Make sure that: ...
  • Published on
    tree-sitter 的 highlights.scm 是 S 表达式, 最近安装了 intellij-scheme, 主要是看个高亮. 然后发现它天天 panic, 这个插件当前的发布者也是 fork 了前人的, 看样子也没什么人维护. 于是决定简单地处理一下, 至少能看个高亮吧. ## Dirty and quick fix up 关于 JDK 版本, 注意, https://plugins.jetbrains.com/docs/intellij/setting-up-environment.html#configuring-intellij-platform-sdk 有专门强调: * Set up a required Java SDK. See the *IntelliJ Build Configuration* section of [Check Out And Build Community Edition](https://upsource.jetbrains.com/idea-ce/file/idea-ce-4d741bc560dd19306d4624d7c8a88aea537f4e6f/README.md) for instructions about creating **1.8** (**11** when targeting 2020.3 or later) Java SDK. ...
  • Published on
    F36 当前已经 Beta, 不出意外, 4月份应该会正式发布. 由于发现磁盘还有一点空闲空间, 想来可以装一个 F36 玩玩. 主要是想体验它的[默认 btrfs 文件系统](https://fedoraproject.org/wiki/Changes/BtrfsByDefault). 从 [Fedora 33](https://fedoraproject.org/wiki/Releases/33 "Releases/33") 起, btrfs 就已经是Fedora Linux 桌面版本的默认文件系统, 但是老灯当时是从 Fedora 31 升级的, 由于F33之前都是默认 ext4, 因此, 即使升级到 F33, 也还是用的 ext4. ...
  • Published on
    ## 缘由 产生这篇文章的原因是, 最近老灯从 X11 切 Wayland 了, 而 SMPlayer 又不工作了. GNOME 官方的 Video 播放器也能凑合用. 但是老灯还是习惯 mpv 系列. 但是直接用 mpv 感觉还是不太习惯, 比如外挂字幕选择加载 mpv 貌似没有快捷键, 播放列表管理功能貌似也没有. 很快在 Github 上面找到一个神级脚本: https://github.com/darsain/uosc 还有一个堪称播放器级别的配置: https://github.com/thisisshihan/mpv-player-config-snad ## mpv 配置目录 首先, 老灯机器上面甚至没有一个 mpv 的配置. ...
  • Published on
    > 我能说我这么多年用 N 卡一直是在跑 X11 么? > > 今天终于能换 Wayland 了 OS: Arch Linux x86_64 Kernel: 5.17.1-arch1-1 Card: GeForce GTX 1060 Resolution: 3840x2160 DE: GNOME 42.0 WM: Mutter ## 背景 Wayland 的支持看上去已经较为完善了. 比如近期 Ubuntu 和 Fedora 都会在 4 月份发布的新版本中默认对于 Nvidia 510版本以上的驱动 使用 Wayland: [Ubuntu 22.04 LTS Will Default To Wayland With NVIDIA For v510+ Driver](https://www.phoronix.com/scan.php?page=news_item&px=Ubuntu-22.04-NV-Wayland-Default) ...
  • Published on
    自从我们迁移到 k8s, 我们观察到 k8s 集群里的 gitlab CI runner 在跑 golangci-lint 的时候比本机跑慢很多. 本机一般几十秒就能搞定的事情, 在跑 CI 的时候, 基本上都要花上几分钟甚至几十分钟. (依项目代码量而异) 当然, 由于 CI 都是自动跑的, 大部分时间我们基本上不会花时间去刻意观察 CI 的执行. 因此慢一点其实也不会影响什么. 这个周末正好趁疫情居家哪也去不了, 研究了一下怎么想办法将速度优化. 起初我以为是因为普通云盘的 IO 性能低下导致的问题, 因为我们的节点的 CPU 和 内核配置都还算不错, 不至于跑个 CI 都会因为这个影响到速度. 但是经过研究, 我发现其实大部分时间花在重复地一次又一次地加载go mod 和 重复地进行代码静态分析. ...
  • Published on
    > Telepresence 是一个开源工具,可让您在本地运行单个服务,同时将该服务连接到远程 Kubernetes 集群 https://www.telepresence.io/about/ ## 为什么需要 Telepresence k8s pod IP 由 CNI 分配, 通信是走 overlay 网络, 容器之间的通信都是基于cluser IP. cluser IP 并不像我们平常所用的 IP. 它只能在 k8s 集群内部使用. 虽然我们可以通过配置 overlay 网络的网段 跟 k8s node 的网段在一个大的子网段, 然后通过 vpn 把对应网段的流量路由到overlay 网络, 我们完全可以通过 ...
  • Published on
    ## 简单的代码, 问题不简单 今天有人发了段代码给我, 然后问输出结果是什么? 这段代码看上去非常简单, 但是确是很有迷惑性. ```go // a.go package main import ( "fmt" "time" ) var x int64 = 0 func storeFunc() { for i := 0; ; i++ { if i%2 == 0 { x = 2 } else { x = 1 } } } func main() { go storeFunc() for { fmt.Printf("x=%v\n", x) // x=0 time.Sleep(time.Millisecond * 10) ...
  • Published on
    ## 问题现象 1. 在Gnome Terminal 直接执行 `mpv filename.mp4` 报错: > mpv: symbol lookup error: mpv: undefined symbol: vkCreateWaylandSurfaceKHR 2. 使用 smplayer 打开同样的文件, 也是同样的报错. ## 解决办法 这个解决办法很简单. 但是我要说的是, 这个问题其实我花了很长时间才解决, 并且不是我自己想到的. 产生这个问题的时候, 一般是更新了某些软件之后. 当时我想, 这个是视频相关的, 可能跟显卡驱动相关. 但是后面发现, 即使重启系统, 或者重新编译mpv, 这个问题还是不能解决. 但是有时候重启系统后又能成功打开文件. ...
  • Published on
    [kitty](https://github.com/kovidgoyal/kitty) 是一个 GPU based terminal, 这类terminal 并不少, 比如老灯目前在用的 Alacritty. kitty 可以说是, 老灯无意中安装上的, 今天本来想卸载它的, 结果把玩了一下, 发现这玩意设计上和性能上都不错.并且[文档齐全](https://sw.kovidgoyal.net/kitty/), 开发活跃. **Alacritty** 出生就自带 Rust 光环, 当前 star 数量约 37.8K. **kitty** 当前 star 数量才接近 13.9K. 当然, 这个 star 数量并不能说明什么, 因为 Rust 拥有众多的 Rustaceans (老灯也是铁杆 Rustacean) , 以 Rust 光环, 加上 "***the fastest terminal emulator"*** 的营销口号, 获取 star 数量确实不在话下. ...
  • Published on
    2022-03-04 update: gdm 用户最好不要启用 motd. 否则在登录界面会卡很久才进去. 有办法可以禁用这一行为, see https://bbs.archlinux.org/viewtopic.php?pid=1684018#p1684018 moving the following line: ```shell session optional pam_motd.so motd=/etc/motd ``` from `/etc/pam.d/system-login` to `/etc/pam.d/sshd`. The result is that the motd is no longer displayed in gdm, but it's still displayed when logging in through ssh. ...
  • Published on
    其实从 0.10.x 开始就觉得 delta 老慢了, 但是一直没怀疑到是 delta 自身的bug. 有一天, 正好在 github 上面看到有人提 [issue](https://github.com/dandavison/delta/issues/824), 说当系统进程较多时, delta 扫描所有进程, 这里花了大量时间导致变慢. 然后作者很快发布了一个新版本 [0.11.2](https://github.com/dandavison/delta/releases/tag/0.11.2) , 说这个问题解决了扫进程时慢的问题. 但是我到手一测试, 发现依然可以肉眼感受到这个"慢". ## flamegraph 分析: 定位问题 ...
  • Published on
    ## 提问的故事 -- 废话哥 vs 高效哥 起因我折腾的时候, 升级了 `zero-to-production` 这个仓库的 `tracing-bunyan-formatter` 版本, 它[当前依赖](https://github.com/LukeMathWalker/zero-to-production/blob/42d4f6a024fda2e7bc277679a595e3edfa2cb6c9/src/telemetry.rs#L18)的是 0.2 版的 `tracing-bunyan-formatter` 和 `tracing-subscriber` : ```toml tracing-subscriber = { version = "0.2.12", features = ["registry", "env-filter"] } ...
  • Published on
    ## the problem lua 版本: `Lua 5.4.3 Copyright (C) 1994-2021 Lua.org, PUC-Rio` 相关 issue [HTTP calls do not work with lua 5.4.3 #331](https://github.com/diegonehab/luasocket/issues/331) 报错: ``` socket/http.lua:54: bad argument #1 to 'receive' (string expected, got light userdata) ``` ## the solution 有人已经提交一个 PR 了: https://github.com/diegonehab/luasocket/pull/334 ...
  • Published on
    ```shell  ~/.ssh ❯ paru -Ss openssh | rg install core/openssh 8.8p1-1 [0B 5.90MiB] [Installed] ``` 如果你最近升级到了 openssh 8.8-p1 版, 你会发现连接某些之前连接得好好的服务器突然无法连接: > Unable to negotiate with x.x.x.x port 2222: no matching host key type found. Their offer: ssh-rsa 解决办法 ```shell ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa user@myhost -p 2222 ...
  • Published on
    ## 缘由 caddy 其实并不是一个新项目, 虽然早在 caddy 1.x 版本的时候老灯就关注这个项目了, 但是,老灯其实最近才开始去了解它和尝试使用它. 为什么之前一直没用 caddy 呢? 一是当时 nginx 还是非常坚挺, 可以说在 nginx + php-fpm 这一搭配方面, 基本上无敌手. 二是, 当时我试用过 Caddyfile 后,发现它太简洁了,简洁到我以配置 nginx 的思维, 完全无法适应配置 Caddyfile. 没错, 我当时觉得 , 配置 nginx 比 Caddyfile 简单多了 (因为 nginx 配置已经熟练多年). 从提交记录看, https://github.com/caddyserver/caddy/blob/v1/LICENSE.txt 最早可以追溯到2015年. ...
  • Published on
    插入数据时自增id出错了 ```sql INSERT INTO `xxxx` (`id`, `name`, `url`, `info`) VALUES (NULL, 'blahblahblah', '/xxxx', ''); ``` ``` #1467 - Failed to read auto-increment value from storage engine ``` 看看表的自增id现在是多少: ```SHOW CREATE TABLE xxxx` ```sql CREATE TABLE `xxxx` ( `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(128) NOT NULL DEFAULT '', ...
  • Published on
    当然, 本来是不会有这篇文章的. 写这篇文章的原因, 非常复杂. 公司将团队沟通工具切换成了飞书 -> 飞书没有 Linux 客户端 但是有 网页版 -> 我下载了网上一个叫 electron-lark 的网页版飞书客户端 然后发现使用有些问题(跑个一天或几天不关, 会把桌面窗口的 title 全搞没了, 具体发生了什么我也没细看, 不开这个app就没事, 如果开了出现问题 alt + f2 然后按 r 重启 GNOME SHELL 也能恢复正常. 我尝试去修复这个问题, 比如关闭 electronjs 的硬件加速. 但是问题一直没有得到解决 -> 我不得已自己开发了一个叫 lark-gtk 的同样是基于网页版飞书的客户端, webview 的主要实现基于 webkitgtk -> ...
  • Published on
    Leasing routable IP addresses with Podman containers 图 "Relic" by BFS Man is licensed under CC BY 2.0 > Old Southern Pacific RR caboose sitting beside US 90 just east of Luling, TX. This was near another old railway car converted into a roadside diner, which had gone out of business. The 'FOR LEASE' sign is actually for the diner, but I suppose the caboose comes with it. ...
  • Published on
    简单方法当然指的是点两下鼠标完事的。 方法当然是自来 [官方文档](https://support.microsoft.com/en-us/windows/add-an-app-to-run-automatically-at-startup-in-windows-10-150da165-dcd9-7230-517b-cf3c295d89dd) 1. Select the **Start**  button and scroll to find the app you want to run at startup. 2. Right-click the app, select **More**, and then select **Open file location**. This opens the location where the shortcut to the app is saved. If there isn't an option for **Open file location**, it means the app can't run at startup. ...
  • Published on
    在 WebView2 出来之前,如果想要基于 webivew 技术开发桌面应用,在 Mac OSX 上面可以用 [webkit](https://webkit.org/), 在 Linux 上面可以用 GTK 版的 [webkitgtk](https://webkitgtk.org/), 但是在 Windows 上面只能用 [MSHTML](https://en.wikipedia.org/wiki/Trident_(software)), 这个 MSHTML 使用起来各种不兼容。 现在,随着 m$ 的 edge 浏览器拥抱 Chromium 内核,`WebView2` 的出现,使得情况得到很大的改善。 ...
  • Published on
    6 月 22 日 gtk-rs [官方博客](https://gtk-rs.org/blog/2021/06/22/new-release.html)就发文了 距离上次发布已经过去很长时间了,正如您所猜测的,在这段时间内发生了很多事情。让我们从最重要的开始: gtk-rs 现在为 GTK4 库提供绑定! 它们都可以在 gtk4-rs 仓库中找到。 甚至还写了一本介绍书来教用户如何使用 gtk4-rs。你可以在[这里](https://gtk-rs.org/gtk4-rs/stable/latest/book/)阅读它。接下来几天将发布有关 GTK4 的更详细的博客文章。 ## 新网站和新logo 我们利用这个机会彻底重新设计了网站并制作了一个logo。既然你已经来了,不要犹豫,去看看吧! ...
  • Published on
    2021年4月份新发布的 [Fedora Workstation 34](https://fedoramagazine.org/whats-new-fedora-34-workstation/) 率先引入 GNOME 40. Arch 也紧随其后发布了 GNOME 40 相关 package . Ubuntu 21.04 之前传言是会有 GNOME 40, 但是最后临阵退缩了。不过 Ubuntu 相关的开发人员弄了一个 ppa 可以安装测试 (https://www.debugpoint.com/2021/04/gnome-40-ubuntu-21-04/)。 老灯使用 [GNOME 40](https://forty.gnome.org/) 已经有一段时间了。大部分必备的 extension 都已经升级支持 GNOME 40 了。如果有少量几个必须的不兼容 40 ,但是原作者又没更新怎么办? 只能自己动手了。 ...
  • Published on
    其实我用这个标签,主要是给分享到 twitter 的时候能够让 twitter 自动抓取时生成的 card 带有缩略图。 bookmarklet 也一并分享一下吧: ```javascript javascript:(function(){var D=640,A=480,C=screen.height,B=screen.width,H=Math.round((B/2)-(D/2)),G=0,F=document,url,text; if(C>A){G=Math.round((C/2)-(A/2))}; url=encodeURIComponent(window.location); text=encodeURIComponent(window.getSelection?window.getSelection().toString():(document.selection?document.selection.createRange().text:'')); if(text==''){ window.alert('Please, select text on the page first');}else{ window.open('http://twitter.com/share?url='+url+'&text='+text,'','left='+H+',top='+G+',width='+D+',height='+A+',personalbar=0,toolbar=0,scrollbars=1,resizable=1');}}()); ...
  • Published on
    刚从 Rust.cc 日报看到的。欢呼ing! ## Crate.io Mirror `~/.cargo/config`: ```toml [source.crates-io] replace-with = 'rsproxy' [source.rsproxy] registry = "https://rsproxy.cn/crates.io-index" ``` Rustup Mirror `~/.zshrc` or `~/.bashrc`: ```shell export RUSTUP_DIST_SERVER="https://rsproxy.cn" export RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup" ...
  • Published on
    `paru` 和 `yay` 一样,是一个 aur helper. 最近用 paru 安装一个叫 `ipt_ndpi` 的包,里面包含了 iptables 扩展和内核模块。 当前内核是从 5.12.10 升级到 5.12.11 的: ```shell ❯ uname -a Linux wudeng 5.12.11-arch1-1 #1 SMP PREEMPT Wed, 16 Jun 2021 15:25:28 +0000 x86_64 GNU/Linux ❯ paru -V paru v1.7.2 +git - libalpm v13.0.0 ``` 尝试重新安装: ```shell 🔴 1 ❯ paru -S ipt_ndpi ...
  • Published on
    ## 功能介绍 对于主题的 params 配置,之前版本的 Hugo 只支持浅合并(shallow merge),举例来说: 假设主题有一个配置 ```toml [params] [params.colours] blue="#337DFF" green="#68FF33" red="#FF3358" ``` 如果是之前版本的 Hugo, 你要调整其中一个配置,比如 `red` 的颜色,你需要 copy 整个 `colours` 配置,然后把 `red` 修改成你想要的值。 现在你可以在站点配置里这样简单地进行覆盖: ```toml [params] [params.colours] red="#fc0f03" ``` ## 默认合并策略 ...
  • Published on
    关于限制代码最大列宽: 限制在 80 个字符合适吗? 我的观点是: 都 TM 2021 年了, 80个锤子,直接来个 150 或 160 还差不多。 Linus 的观点貌似跟我一样哈? > In case of the Linux kernel, that’s of course **Linus Torvalds**, who has recently shaken up the community with a mailing list response declaring an overly common, often even unwritten rule of code formatting as essentially obsolete: the 80-character line limitation. Considering the notoriety of his rants and crudeness, his response, which was initiated by a line break change in the submitted patch, seems downright diplomatic this time. ...
  • Published on
    如果你不想看过程,那就直接跳到最后看一句话总结吧。 ## megacheck `megacheck` 其实是一个 `deprecated` linter, 不过只是被原作者deprecated, 目前 golangci-lint 并没有 deprecated 它。原因主要是向后兼容性 (see https://github.com/golangci/golangci-lint/issues/357 )。 这可能是最令人费解的一个linter了,为什么呢?我这里简单总结一下: megacheck 是 https://github.com/dominikh/go-tools 早期代码里的一个linter, 它包含了3个linter: gosimple staticcheck unused ...
  • Published on
    ## 1. imgproxy/imgproxy (golang, 4.6K star) [imgproxy](https://github.com/imgproxy/imgproxy) 目前有 4.6K star https://github.com/imgproxy/imgproxy > Fast and secure standalone server for resizing and converting remote images > > imgproxy 是一个快速安全的独立服务器,用于调整远程图像的大小和转换远程图像。 imgproxy 的主要原则是简单,速度和安全性。 > > imgproxy 只做一件事 —— 调整远程图像的大小 —— 而且做得很好。 当您需要动态调整多个图像的大小以使其与您的应用程序设计匹配时,它非常有用,而无需准备大量缓存的调整大小的图像或每次设计更改时都重新执行。 ...
  • Published on
    ----------------------------------------- ## 格式转换 toml to yaml: https://www.convertsimple.com/convert-toml-to-yaml/ yaml to toml: https://www.convertsimple.com/convert-yaml-to-toml/ json to toml: https://www.convertsimple.com/convert-json-to-toml/ json to yaml: https://transform.tools/json-to-yaml https://transform.tools/json-schema-to-protobuf ...
  • Published on
    首先,看下效果,就是下面这样(RSS 订阅用户可能看不到效果,请点击查看原文): ``` {{< mermaid >}} sequenceDiagram participant Alice participant Bob Alice->>John: Hello John, how are you? loop Healthcheck John->John: Fight against hypochondria end Note right of John: Rational thoughts prevail... John-->Alice: Great! ...
  • Published on
    之前一直用的是 Hugo 默认的 permalink 配置. 如 `content/post/linux/commandlinefu/how-to-start-tmux-as-systemd-user-service/index.md` 将会生成 `/post/linux/commandlinefu/how-to-start-tmux-as-systemd-user-service/` 的 URL path. 最近我越来越发现这样的链接过度复杂了,干脆直接调整成 `/post/:filename/` 。 于是 `/post/linux/commandlinefu/how-to-start-tmux-as-systemd-user-service/` 变成了 `/post/how-to-start-tmux-as-systemd-user-service/` 。 ...
  • Published on
    集成 Algolia 后,最简单无脑的更新索引方式就是每次构建后由 Netlify 触发 webhook 通知 Algolia 自动抓取。 这也就是 Algolia Crawler for Netlify 干的活。 但是老灯使用一段时间后发现存在一些问题: 1. 每发一篇博客,甚至可能是只改动了一个字就要触发全量索引 (git push 触发了 Netlify CI CD -> webhook -> Algolia Crawler 干活 -> 抓取全站 URL 并索引)。一是浪费资源,二是低低效(速度慢)。 2. 很多不需要索引的页面也被索引进去了,比如 tags 和 categories 的分页列表页面。我博客总共才70篇文章不到,索引后的页面居然有300多! ...
  • Published on
    最近升级到了 pacman 6.0 版本。主要的新功能是支持多线程下载了。 如果是从旧版本升级的,那么其实配置需要自己手动合并。简单来说就是添加一行 ```ini ParallelDownloads = 5 ``` 即可。 虽然将下载器配置成aria2 或 curl (新版本的curl 有多线程下载功能 -Z ) 也能实现多线程下载,但是终究还是不如官方直接支持香。 贴下我的完整配置 `/etc/pacman.conf` : ```ini # # /etc/pacman.conf # # See the pacman.conf(5) manpage for option and repository directives ...
  • Published on
    最近换了系统, git commit 在gpg签名的时候出错了: > gpg: signing failed: Inappropriate ioctl for device 原因是 gpg 在当前终端无法弹出密码输入页面。 解决办法: ```shell export GPG_TTY=$(tty) ``` 重新执行,发现会弹出一个密码输入界面。 参考: https://www.jianshu.com/p/2ed292ae2365 但是老灯觉得这不是解决办法,因为在此之前,我从来没遇到过这个问题。产生这个问题是有原因的。 于是再去看了一下Arch的文档,果然,有说明“Invalid IPC response and Inappropriate ioctl for device” 这个问题。虽然报错语句不一样,但是其实是一个问题。 ...
  • Published on
    ## paru 是什么? 根据 [paru 作者在 reddit 的描述](https://www.reddit.com/r/archlinux/comments/jjn1c1/paru_v100_and_stepping_away_from_yay/) > paru v1.0.0 and stepping away from yay > > Last week I announced my new AUR helper paru. > > Since then a lot of testing has gone in and a lot of bugs fixed by me and help from contributors. ...
  • Published on
    通常情况下,Arch 下的包不像 RHEL 系那样有单独的静态库 (RHEL系命名风格一般是 `libXXX-static`),但并不是说Arch下面的包都没有静态库,这个得看情况。比如 /lib/libresolv.a, /lib/librt.a 属于 GNU libc (`glibc`包), /lib/libstdc++.a 属于 `gcc` 包。 以 `libgit2` 包为例,ArchLinux 源里是没有提供静态库的。相对的, Ubuntu 有提供静态库的 package, 甚至连 ArlpineLinux [也有提供](https://pkgs.alpinelinux.org/package/edge/community/x86_64/libgit2-static)。 Fedora 下的 libgit2 好像没有静态lib。Ubuntu 是直接放在[ libgit2-dev 包里](https://packages.ubuntu.com/focal/amd64/libgit2-dev/filelist) (/usr/lib/x86_64-linux-gnu/libgit2.a) ...
  • Published on
    ## The Issue 如果不是用到了一个叫 [peek](https://github.com/phw/peek) 的录屏软件,我可能没听过这个叫 vala 的语言,GNOME 搞出来的东西。 老灯日常用的 [geary](https://gitlab.gnome.org/GNOME/geary) 邮件客户端和 [peek](https://github.com/phw/peek) 都是这个语言编写的。 老灯发现neovim 官方的 vala lang server 配置无法适用于 peek 这个项目。已经提交了 PR ( https://github.com/neovim/nvim-lspconfig/pull/789 ), 不过这个合并效率真是低,都两周了,还没动静,没给close 也没给merge. ...
  • Published on
    本文主要按 neovim lsp 来讲的,但是其中关于 lang server 的很多东西,其实是通用的。简单在此记录,备忘。 ## common lsp config 一般除了跳转定义,老灯还启用了 `completion` 自动完成以及 `lsp-status` 用于状态显示。 这里定义了一个公用的 `mix_attach` 用于lsp `on_attach` 事件 ```lua local lsp_status = require('lsp-status') lsp_status.register_progress() lsp_status.config({ indicator_errors = "❌", ...
  • Published on
    ## 缘由 起因还是在ArchLinux下交叉编译 [](https://github.com/ttys3/git-cz)[git-cz](https://github.com/ttys3/git-cz) OSX 二进制失败。 这个问题老灯折腾了很久,搞得几乎都要放弃了。 因为在 Linux 下交叉编译 darwin 平台的教程并不太多,能找到的资料也不尽是相同或相似的问题。 但老灯之前在 Fedora 33 及 Ubuntu 21.04 beta 下都能成功编译,因此,这个周末正好有时间 ,还是坚持分析了一下原因。 ## 问题描述 git-cz 依赖 libgit2 的 rust 绑定库 ( https://github.com/rust-lang/git2-rs ),C 绑定部分代码是里面的子包 libgit2-sys ( https://crates.io/crates/libgit2-sys ) , 因此最后链接阶段,在交叉编译时,肯定是要链接 libgit2 的静态库的(交叉编译时一般都是静态链接,如果动态链接会很麻烦。 比如golang也是,且 golang 在交叉编译时甚至是直接默认关闭 cgo 的) ...
  • Published on
    tmux 启动一下能有多慢?答案是,挺快的。 那为什么要有这种需求? 原因是布局恢复。 老灯目前使用的是一个tpm插件,名叫 `tmux-resurrect`, prefix + ctrl + r 即可自动恢复所有panel. 但是有个小问题,panel比较多,比如有10多个的情况下,启动tmux还是会小闪一下的,整个过程肉眼可见, 会造成操作上的停顿。比如你打开 Gnome terminal 马上就能执行命令了,但是你刚开机启动tmux,你得等几秒才能操作,就因为这个panel恢复。 怎么样加快这个过程?答案当然是,用户登录的时候就马上运行tmux呗。 这个比较简单,直接看 ArchLinux 的 wiki 整个 systemd unit 文件就好了。 ...
  • Published on
    Window: X11 DE: GNOME3 OS: ArchLinux 为什么会有这种需求? 当然是 vim 用户才有这种需求。 ## setxkbmap大法 ```shell setxkbmap -option caps:swapescape ``` **To make this work at startup**, you can put it in `~/.profile` as this will only run after the interactive login. ## **gnome-tweak大法** 对于GNOME用户来说,最简单省事的方法当然是使用 **gnome-tweak** ![](gnome-tweak-tool-switch-caps-esc-2021-03-31_03-13.png) ...
  • Published on
    今天回到家已经很晚了,一到家发现 NAS 是关机的, PC 按电源也没反应。 然后 发现 山特 mt 1000 pro UPS 灯是灭的。 几经折腾还是不能开机,没有一个灯亮的。查了一下狗东订单,这款 mt1000 pro大概是2018年12月入的。 点击申请售后,提示已经过保。但是商品页面写着3年保修(但是狗东保修那里没填写任何东西),24小时客服热线啊(大晚上估计没客服,也不抱什么希望了)。 手里还有个 山特 tg500,结果一试,发现也点不亮了。这下好了,俩 UPS 全挂。 当初买这款mt1000 pro,主要是看重它支持通过 rs232 串口来查询状态和控制断电自启选项。用 Golang 自己写了个程序,可以实现市电断了之后 NAS 自动关机 (网上找的文档,协议和功能都非常简单)。 ...
  • Published on
    一般来说,加密主要用于消息的传递,并且传递的消息只有持有私钥的那个人能解密。 因此, 像 RSA 这种非对称密钥加密算法的常用场景是: 对于加密,公钥加密,私钥解密。 为什么不是 私钥加密,公钥解密呢? 因为使用场景是假定 公钥 都可以获取到,因而公钥解密这种操作也就与明文无异了。 有没有私钥加密的常用场景呢?当然是有,比如常见的签名操作。 明文消息 -> 进行 hash -> 对 hash 后的结果进行私钥加密, 这个加密后的结果就是签名了。 对签名进行验证实际上就是用公钥解密,然后把解密后的hash与原始消息的hash进行对比。 客户端:明文消息 -> 进行 hash -> 对签名使用公钥进行解密,并对比 hash 结果。 ...
  • Published on
    最近发现打开某些行数“超级多”的古老 go 代码时,自动完成 和 保存 的时候都很卡,卡到什么程度呢? 完全无法正常使用的程度。 ## 保存文件时 CPU 100% 先说下 文件保存 的时候的卡顿问题吧。 这个问题经过排查主要是 Ale 插件引起的。 ``` let g:ale_fixers = { \ '*': ['remove_trailing_lines', 'trim_whitespace'], \ 'go': ['gofmt', 'goimports'], \} let g:ale_fix_on_save = 1 ``` 这个配置会使 ale 在 go 文件保存的时候自动执行 gofmt 和 goimports fixer ...
  • Published on
    我是在知乎上偶然看到这么个瓜。 rfc 投票地址: https://wiki.php.net/rfc/fibers 内部讨论记录: https://externals.io/message/113430 在 rfc 投票地址 地址上老灯看到有 46 票通过, 13票反对。 我们去 https://wiki.php.net/rfc/fibers 看看这 13 票反对的都是哪些人。 [parallel的作者](https://github.com/krakjoe/parallel) krakjoe 反对是可以理解的,人家直言希望自己的扩展被合并成内核,而不是 Fiber. 至于rasmus (Rasmus Lerdorf,PHP 创始人) 吧,我觉得现在版本的 PHP 开发应该跟他没什么关系了,他说啥都行,高兴就好。 ...
  • Published on
    > vim 要支持复制到系统剪切板,首先要确保系统安装了 xclip 之类的剪切板工具。 主要的使用场景是复制一些错误信息。 要复制 `:message` 的输出, 解决办法就是将输出重定向剪切板。 the clipboard register (`@+`) or primary register (`@*`) 比如: ```shell :redir @+ :3message :redir END ``` See `:help :redir`, `:help :message` 当然,每次都敲这么多命令也是挺麻烦的,直接定义一个名为 `CpMsg` command 好了: ```shell command! -bang CpMsg redir @+ | 99message | redir END ...
  • Published on
    新装的 Arch , 发现 `/etc/sysctl.d/01-sysrq.conf` 里设置的 `kernel.sysrq = 1` 没有生效。 检测 `/proc/sys/kernel/sysrq` 的值发现是 `16` 先检查下 systemd 相关服务是否正常运行了, 结果是完全正常: ```shell ❯ systemctl status systemd-sysctl.service ● systemd-sysctl.service - Apply Kernel Variables Loaded: loaded (/usr/lib/systemd/system/systemd-sysctl.service; static) ...
  • Published on
    飞书原名叫 Lark. 有Mac, Windows 和 Web 版。 不过打开很多 Tab 的浏览器里找 飞书 的 Tab, 确实不太方便。于 Github 找到一个 用 Electron 包了一下 飞书 Web 的客户端。 使用 electron builder 构建 AppImage / ArchLinux .pkg.tar.xz / rpm / deb 包等还是非常方便, electron builder 实际上采用的是一个基于 ruby 的打包工具,叫 fpm 不得不说Electron的工具还是蛮完善的。 ![](electron-builder.png) 有两个小问题: 1. 隐藏到托盘后没法显示了。 ...
  • Published on
    底层存储引擎基于 LevelDB 或 RocksDB 的 Key-Value DB 挺多的,比如 [SSDB](https://github.com/ideawu/ssdb) , 360开源的 [Pika](https://github.com/Qihoo360/pika) 以及腾讯开源的 [Tendis](https://github.com/Tencent/Tendis) 但是基于 RocksDB 的 关系型数据库,老灯最近才了解到, 原来 FaceBook 搞的 MySQL MyRocks 引擎已经存在好多年了。简单地浏览了一下文档,InnoDB 算是在写入和读取方面都比较好,而 MyRocks 引擎 主要是写入性能强劲,对于读取来说相对弱一些。 先 mark 一下吧。 ...
  • Published on
    先 mark 记录一下。 > log_bin_compress——这个配置决定了是否可以压缩二进制日志。这个增强功能是 MariaDB 独有的,因此 MySQL 不支持。 https://www.infoq.cn/article/mariadb-vs-mysql binlog压缩 为了减小binlog的存储开销。在TenDB中,基于ZLIB算法实现了binlog压缩的功能。该功能可以在运行中开启和关闭,并且适用于statement,row,mixed格式。 压缩 开启Binlog压缩: \`\``shell set global log_bin_compress=ON \`\`` Binlog压缩阈值: \`\``shell ...
  • Published on
    ## 环境介绍 Server OS: CentOS 8.2 x64 MariaDB: 10.5.x (主 、从均运行在 Docker / Podman 容器里) 操作目标: 配置一台全新的从库 假设主库IP是 **dbserver1** 从库IP是 **dbserver2** 使用 MariaBackup 做全量或增量同步,更加方便。 ## 安装MariaBackup 首先我们需要在 **主 / 从** 服务器上分别安装 MariaBackup. 这里比较简单,参考[官方文档](https://mariadb.com/kb/en/mariabackup-overview/#installing-with-a-package-manager)就好了。 ...
  • Published on
    正如 Apple-Music-Electron repo 上简介里说的: > 适用于Windows,Linux和macOS的非官方Apple Music应用程序,而无需安装iTunes或通过浏览器使用极其臃肿的Web应用程序。 这也是老灯在 Linux 下要这么一个 app 的原因。对于老灯来说,浏览器在大部分情况下都是用来浏览文档,调试代码。里面夹杂着一个在线音乐播放网站可不好找,特别是tab非常多的情况下。因此,有一个独立的 app 就非常重要的。哪怕只是拿 Electron 框架包裹一下 https://beta.music.apple.com/ , 老灯也觉得这类 app 非常有意义。Life changed. ...
  • Published on
    ## The good 1. [DeltaRPM](https://fedoraproject.org/wiki/Features/Presto) 是个好东西,可以节省更新的流量和本地cache的package空间 [Fedora Linux](https://en.wikipedia.org/wiki/Fedora_Linux "Fedora Linux") has supported binary delta updates by default using the [yum](https://en.wikipedia.org/wiki/Yellowdog_Updater,_Modified "Yellowdog Updater, Modified") presto plugin since June 2009. This is based on [RPM Package Manager](https://en.wikipedia.org/wiki/RPM_Package_Manager "RPM Package Manager")'s deltarpm system (2004), which was in turn based on bsdiff.\[[1]](https://en.wikipedia.org/wiki/Delta_update#cite_note-1)  ...
  • Published on
    最近编译了最新版的Git, 发现init repo的时候会提示配置全局默认branch (这事儿都是由black lives matter运动搞起的)。好吧,既然能少打一个字符,就改成 `main` 吧。 ## 切换 Git 分支为 main ```shell git checkout master git branch -m main # 删除本地分支 git branch -d master # 删除远程分支 git push origin --delete master # (并不是真正想push, 只是隐式地将远程分支设置为了跟踪main) git push origin -u main ``` ## Github 配置 ...
  • Published on
    ## 起因 为什么用的是Ubuntu? 老灯你不是喜欢ArchLinux的么? 没错,这个Ubuntu只是老灯在工作环境使用的, 主要是团队要求。与大家保持一致。 当前我的neovim还是用的[Vim Plug](https://github.com/junegunn/vim-plug)这个插件管理器(已经在着手准备迁移到init.lua + packer.nvim 了)。 在更新neovim 插件时(`:PlugUpdate` ) 遇到了以下错误: ```shell x vim-startify: fatal: unable to access 'https://github.com/mhinz/vim-startify.git/': gnutls_handshake() failed: The TLS connection was non-properly terminated. ...
  • Published on
    这个消息其实很早Google就放出了。 早在1月25号左右,Fedora打包的Chromium就已经移除了账号同步功能。 [Fedora's Chromium maintainer suggests switching to Firefox as Google yanks features in favour of Chrome](https://www.theregister.com/2021/01/25/use_firefox_fedora_chromium_maintainer/) > 'They're not closing a security hole, they're just requiring that everyone use Chrome' ...
  • Published on
    ## 更新 2021-06-30 更新: 项目名称现在更改为 [vaultwarden](https://github.com/dani-garcia/vaultwarden) 了, 详情见 https://github.com/dani-garcia/vaultwarden/discussions/1642 ## 缘由 1password太贵, 关键是这类软件好像以前还有数据泄露事例。 在此之前老灯用的是[Firefox Lockwise](https://www.mozilla.org/en-US/firefox/lockwise/) , 只能说基本上够用吧。管理密码功能在Firefox上操作。其实就是Firefox本身的功能。 Lockwise app 只是协助在手机端给你自动填充密码。 ...
  • Published on
    ## 为什么需要 Netlify CMS Netlify CMS 主要是解决了,随时随地打开浏览器写markdown博客的问题,同时它自动处理了图片上传等问题。 简单来说: > Netlify CMS = web 版的 markdown 文件管理器 + 自动图片上传并插入markdown代码 + 在web浏览器写markdown并自动推送到git仓库构建 .... 编辑器可以在富文本(所见即所得)和 Markdown 方式之间切换。 Markdown模式没有语法高亮显示,编辑起来略不方便。同时,切到 Markdown编辑模式后,编辑器的那些按钮都变灰不可用了。 Netlify CMS 只是附加功能,你完全可以在本地直接打开 NeoVim 或者 Emacs 写博客,然后用 Git push 发布文章。 ...
  • Published on
    **Portainer** 是一个比较流行的Docker web ui, Docker 官方只针对Windows/Mac 有GUI支持,对于Linux则靠民间的UI了。 事实上,**Portainer** 应该是仅存的少数 功能较完善且开发活跃的第三方 Docker UI之一. 另一个WEB UI 是RedHat 家的 cockpit (准确来说,应该叫Redhat赞助的, 不过老灯感觉区别不大), 除了管理docker容器,cockpit还支持 podman和虚拟机管理,磁盘管理等其它功能,因此它是一个dashboard, 而不是单纯的容器管理UI. 关于对podman的支持,Github早有讨论, 见 https://github.com/portainer/portainer/issues/2991 ...
  • Published on
    这个问题其实 docker 和 podman 都存在。 当前版本的 docker 采用 iptables 动态创建和销毁规则, 而 podman 则通过[CNI](https://github.com/containernetworking/cni) 插件配置, 可以使用 firewalld 作为backend. 由于容器的特性-- 随时创建,随时销毁。 这二者添加的 iptables 规则自然也都是动态的。这里有个问题是,如果一些其它服务执行了 flush 操作把iptables 规则清空了,则bridge网络的容器端口转发就会失效, 因为我们通过 `-p` 来映射端口,实际上是在 iptables 的 nat 表里创建了转发规则。 ...
  • Published on
    > this article first post on 2021-01-25 > updated on 2023-08-28 起因主要是想给我fork自convco的[git-cz](https://github.com/ttys3/git-cz) 项目 release 那里增加一个Mac二进制文件方便使用Mac的人下载。 这是一个方便使用约定式提交记录的git工具. ![git-cz-screen-record.gif ](git-cz-screen-record.gif) ## Environment ``` OS: Fedora 38 (Workstation Edition) x86_64 CPU: Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz x86_64 ...
  • Published on
    ## 如何检测24bit颜色支持 以前一直没怎么注意这个问题,直到这次我自己基于base16框架做了一个Jetbrains Gruvbox soft black 配色的 port ,发现同一个代码,在Gnome Terminal 和 tmux 下显示效果差异很大。 GNOME Terminal下显示正常: ![gnome-terminal-vim-256-color-test-ok.png](gnome-terminal-vim-256-color-test-ok.png) tmux 下显示的颜色不对: ![tmux-vim-no-256.png](tmux-vim-no-256.png) 于是我突然想起来,256 color 的支持问题. ...
  • Published on
    ## 前提 简单描述下自动切换的行为: > nvim记住最近一次插入模式时的输入法(可能是英文,也可能是中文) > esc回到正常模式时,插件自动将系统输入法切换到英文状态 > 重新回到插入模式时, nvim自动切回上次插入模式时的输入法. 环境: ibus + ibus-rime + neovim 当前我的rime配置是有自带ascii mode的,也就是配置了输入中文时简单地按下`shift`就会切换到英文输入模式。 然而这个ascii mode 外部是无法感知的,也就是只有rime 自己知道,ibus是不知道的。 之前用fcitx 是没有这个问题的,fcitx-remote 配合vim插件[fcitx.vim](https://github.com/lilydjwg/fcitx.vim)可以非常方便地进行切换。 ...
  • Published on
    其实我安装 lua5.1 只是为了方便兼容 neovim 和 luajit, 这两货目前都只支持lua 5.1 其实根本原因还是在于 luajit 多年没更新(如果我没记错,现在已经2021年了,luajit最后一次发版还是2017年?),没有兼容最新版本的lua 5.4 。 而 neovim 实际是因为依赖luajit 才导致依赖 lua 5.1的,也是没办法了. ## 初战翻车 环境说明: 操作系统是 Fedora 33, 默认的 `lua`包是 lua 5.4版本的, `luarocks` 也是从包管理器dnf直接安装的. `luarocks install --local fzy` 失败: > Error: Failed finding Lua header files. You may need to install them or configure `LUA_INCDIR`. ...
  • Published on
    上次写了[《如何从 grub2 启动 Fedora32 Live CD iso》](/post/linux/fedora/how-to-boot-fedora32-live-cd-iso-from-grub2) , 这次顺便把 `Ubuntu` 的也补一下吧。 公司开发环境为了大家统一,全部采用的 Ubuntu. 这年头也很少随身带U盘了,因此,只靠硬盘, 自己能求自己,还是能在关键时候有用的。 ## 下载live cd iso并校验 ```bash curl -LZO https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/groovy/ubuntu-20.10-desktop-amd64.iso ...
  • Published on
    开发机上跑着Charles, 同时本机又有程序想通过Charles来抓包, 需要tls证书被信任才行(依赖的库强制校验证书). 所以才有这个需求。 此方法通用,适用于安装任何root ca. ## root ca installation 较新版本的 Charles 现在默认会同时生成 `charles-proxy-ssl-proxying-certificate.cer`, `charles-proxy-ssl-proxying-certificate.pem` 和 `keystore` 3个文件 ```bash cd ~/.charles/ca sudo trust anchor --store ./charles-proxy-ssl-proxying-certificate.pem ...
  • Published on
    ## 问题 百度网盘推出Linux客户端已经有一段时间了。 期间,在Fedora32时我就已经给他们提过一个启动即crash的问题,后面一直也没修复. ![baidu-netdisk-crash-2020-11-12_19-15.png](baidu-netdisk-crash-2020-11-12_19-15.png) 这都 Fedora 33了,我又提了一次,而且还把gdb的backtrace发给了他们,显示已经处理。 实际上几个月过去了都没见动静。只能自己动手,丰衣足食了。 ## 解决 老灯注意到, 百度网盘链接的库都是比较老的,因此那个客户端在Ubuntu 18.04 上面肯定是可以正常运行。 那个 rpm 包压根不是对标最新的Fedora的,而是给那些基于RHEL的同样使用rpm包管理的古董国产操作系统使用的。 ...
  • Published on
    Fedora 33 中的 DNS resolver 已经由 `nss-dns` 默认切换成了 [systemd-resolved](https://www.freedesktop.org/software/systemd/man/systemd-resolved.service.html) 简单来说,这意味着 `systemd-resolved` 将作为daemon程序运行。所有想要将域名转换为网络地址的程序都将与之通信。 这取代了当前默认的查找机制--每个程序单独与远程服务器交谈,并且没有共享缓存。 如有必要, `systemd-resolved` 将查询远程DNS服务器。 `systemd-resolved` 是一个“stub resolver” - 它本身不会解析任何域名(通过从根DNS开始并按标签一路径往下查询),而是将查询转发到远程DNS服务器。 ...
  • Published on
    Fedora 33 在 10月27号准时发布。 官方公告见这儿: https://fedoramagazine.org/announcing-fedora-33/ 从官方公告的HTML meta `article:published_time` 可看到, 文章发布时间为 `2020-10-27T14:00:14+00:00`, 也就是 CST 2020-10-27 22:00 左右。 老灯现在写文章的时候为 `Thu Oct 29 01:03:39 AM CST 2020`, 因此距离 Fedora 33正式发布已经整整一天多时间了。 ## 如何从F32升级到F33 步骤基本上是一样的,参考我之前的文章 《[Fedora 31 升级到 Fedora 32](/post/linux/fedora/fedora31-upgrade-to-fedora32/)》 ...
  • Published on
    适用场景: > 已经提交了N个commit才发现用的配置(`user.name` 和 `user.email`)错了,比如要用个人邮箱的,用成了公司邮箱。 > 基于隐私考虑,我们需要把公司邮箱和昵称替换掉。 主要是用到[git-filter-repo](https://github.com/newren/git-filter-repo)的**CALLBACKS**功能 参考文档 https://htmlpreview.github.io/?https://github.com/newren/git-filter-repo/blob/docs/html/git-filter-repo.html#CALLBACKS ...
  • Published on
    [Neovim](https://neovim.io/) 这个项目大概开始于2014年,主要目的是打造现代化的Vim. 不考虑vi和旧版本系统的兼容性。不同于Vim,官方有基于GTK的gvim, Neovim 只有 [第三方的GUI](https://github.com/neovim/neovim/wiki/Related-projects#gui). 老灯肯定是会先Golang或Rust版的。 https://github.com/Kethku/neovide 有1.5K star, clone 下来编译一把。然后发现报错了。 ```bash Compiling skia-bindings v0.27.3 ...
  • Published on
    ## 使用场景 个人电脑里同时有公司的项目的源码和自己的开源项目的源码,而一般在公司使用的`name`和`email`配置跟家用的都是区分开的。 如何实现,在进入公司项目的目录提交git commit时让Git自动使用公司邮箱和名称,而在进入其它目录时则保持家用的配置呢? 答案就是:Git Conditional Includes ## 使用Conditional Includes 老灯的需求比较简单,只有home和work两种情况。因此,配置如下: `~/repo/go/work` 目录是公司项目的根目录,下面会有多层子目录。 除此之外,其它repo都默认是老灯自己的个人项目。 `~/.gitconfig` 作为配置的入口,根据条件引入其它配置: ...
  • Published on
    ## 1. Linux 下 HiDPI 问题 OS: Fedora 32 (Workstation Edition) GNOME 版本:3.36.3 Charles Proxy 版本: v4.5.6 通常在 GNOME3 下我们会将 Display 的 Scale 调成 `200%` (当前还不支持非整数倍数设置) 来解决4K分辨率问题,如下图: ![](gnome3-display-scale-2020-07-20-23-57-26.png) Charles官方也宣称它已经支持HiDPI了,但是实际使用却发现没有自动识别HiDPI,为什么呢? 我们看看`/usr/bin/charles` 这个启动脚本: ```bash ...
  • Published on
    en title: Git Splitting a Subfolder Out Into a New Repository ## 需求 某个历史悠久的“大”Git仓库(很大很大。。。)要拆分成很多小仓库。 至于为什么会有这种“大”仓库的存在,表问我。。。 it's about project history ## 为什么要这样做? - 查bug的时候不再需要同时切换新旧两个仓库交叉查看历史commit记录 - 可以保留被拆分目录下文件的完整提交记录,方便他人阅读代码和理解代码 ## 这样做会不会增加迁移的负担? 不会,绝对不会。一条命令即可搞定 (git filter-repo xxxxx)。 ## 准备工作 `git-filter-repo` 现在是Git官方推荐的工具(git自带的`filter-branch`已经不被推荐使用了,速度慢又不好用)。 ...
  • Published on
    > You will NOT fucked up by alpine if you do not use alpine > > alpine没有docker鼓吹得那么美好 > > 少20M体积对你来说真的很重要? en: Do Not Use Alpine as Container Base Image in Production Environment 本文写作日期为**2020年3月26日** ## 关于server的选择 虽然说容器与host机的Linux发行版关系不大。 但是,抛开容器不说,现在,我们来做一个假设,假设我们没有使用容器,使用裸机跑Linux server, 会选择使用哪个发行版? 没错,怎么选都轮不到Alpine吧。 ...
  • Published on
    ## Moby vs Docker CE Fedora 32 都发布好久了,然而 Docker 官方迟迟没有发布适用于 Fedora 32 的 Docker CE rpm包。 当然,肯定不只老灯一个人在关注这个问题, 这不, docker官方repo里有人提issue了: [Please provide repo for docker-ce on Fedora 32 #955](https://github.com/docker/for-linux/issues/955) 然后 Fedora 官方博客写了一篇名叫《[如何在Fedora 32上安装Docker](https://fedoramagazine.org/docker-and-fedora-32/)》的教程, ...
  • Published on
    ------------------------------------------------------------------------------------- # 老灯常用镜像源 ## Linux 镜像源 - 清华大学开源软件镜像站 https://mirrors.tuna.tsinghua.edu.cn/ - 中国科学技术大学开源软件镜像 https://mirrors.ustc.edu.cn/ - 上海交通大学 Linux 用户组 镜像源服务 https://mirrors.sjtug.sjtu.edu.cn/ > tuna 和 ustc 的源比较全面, 而 sjtug 的源相对来说比较少,比如 RHEL 系常用的 `epel` 和 `rpmfusion` 都没有。 ...
  • Published on
    20240325: Fedora 40 `/etc/grub.d/40_custom` ```shell #!/usr/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. menuentry "Fedora Workstation 40 Live" { ...
  • Published on
    添加 Live CD 启动项,主要用于系统挂了之后,我们还可以通过它来rescue ## 下载live cd 从清华源下载比较快 ```bash curl -LZO https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/32/Workstation/x86_64/iso/Fedora-Workstation-Live-x86_64-32-1.6.iso curl -LO https://mirrors.tuna.tsinghua.edu.cn/fedora/releases/32/Workstation/x86_64/iso/Fedora-Workstation-32-1.6-x86_64-CHECKSUM ...
  • Published on
    ## 缘由及发行版的选择 先说一下结果吧: 由于工作需要,我将一台工作PC台式机安装成了 Ubuntu 20.04。 如果想直接看fucked up部分,请直从右则的TOC接跳到 `#fucked-up` 作为一个长期在Linux 桌面环境下工作的人,肯定是用新不用旧。新版本出来了,当然是上新版本。没点追求的话,人活着跟咸鱼有什么区别? 当然,老灯主要在用的还是Fedora. 选择哪个发行版也不是盲目选的,是根据个人需求的。 1. 肯定是选主流发行版,看重官方支持和更新维护。 2. Gnome 3 环境是优秀的,并且我已长期习惯这个环境了,因此 DE 必须是 Gnome 3 3. 由于需要**原生**的Docker或Podman环境,因此只能是Linux系,BSD或其它系不考虑(包括苹果) ...
  • Published on
    关于`defer` Golang 官方博客专门发文[介绍过三条规则](https://blog.golang.org/defer-panic-and-recover): > 1. defer语句被求值时,被defer调用的函数参数即时求值 A deferred function's arguments are evaluated when the defer statement is evaluated. `Defer statements`的[Spec](https://golang.org/ref/spec#Defer_statements)中有这么一句描述: > Each time a "defer" statement executes, the function value and parameters to the call are evaluated as usual and saved anew but the actual function is not invoked. ...
  • Published on
    有人看过我的博客后觉得主题的配色有些过于闪亮。 而`terminal`这个主题里,我选取的还是唯一不那么“闪”的`orange`颜色。于是我按自己的想法,调整了一下默认`orange`方案的配色。 现在博客应该看起来舒服一些了。 原版配色: ![hugo-terminal-theme-orig-color.png](hugo-terminal-theme-orig-color.png) 同时,顶部加上了一个小banner背景图, 毕竟一个博客没有一张图片,也略显单调。 刚好前面了解到一个免费图片素材网站(无需版权,免费商用), 搜索了下[黑白主题](https://pixabay.com/photos/search/black%20and%20white/?orientation=horizontal) ...
  • Published on
    English title: Does qBittorrent Directory Watch Support NTFS? [qBittorrent](https://github.com/qbittorrent/qBittorrent) 是一个基于[rb_libtorrent库](https://github.com/arvidn/libtorrent) 的跨平台高性能BT客户端。 这个`libtorrent` 有一个前缀`rb_`的原因是,有一个叫做[RTorrent](https://github.com/rakshasa/rtorrent)的软件已经占用了`libtorrent`这个名字。 而在qB和Deluge里面,通常大家所说的`libtorrent` ,全名是`libtorrent-rasterbar`, 也就是 RHEL包名里的`rb_libtorrent` ...
  • Published on
    ## 缘由 Valine.js隐私泄露问题, 老灯完全是无意中发现的。老灯最近在研究一些serverless的东西,然后发现Valine.js挺多人用的。 于是也申请了一个LeanCloud国际版的id, 获取了密钥,然后开始在本地测试Valine.js Valine.js评论系统,只需要嵌入几行js就完成了整个配置,并且API请求是直接走的LeanCloud服务器,不是像staticman那样需要有API中转。 可以说,整个体验过程非常顺畅。就功能性方面来说,Valine.js几乎是满分。 毕竟老灯之前也没怎么用serverless的东西,因此,主要目的,是学习一下serverless的这个思路,我觉得挺好的。 ...
  • Published on
    English title: Python How to Generate Stubs for Binary Module ## stubs是什么 stubs主要是给IDE自动提示和语法检测使用的,比如[JetBrains PyCharm](https://www.jetbrains.com/pycharm/). stubs有个规范的名称,叫`PEP 561 Typing Stubs` https://www.python.org/dev/peps/pep-0561/#type-checker-module-resolution-order > 3. Stub packages - these packages SHOULD supersede any installed inline package. They can be found at `foopkg-stubs` for package `foopkg`. ...
  • Published on
    文章未完,待继续更新 en title: Install Fedora 31 on MacBook Pro Late 2013 > 本文写于2020年春节假期,当时由于在家想玩podman容器,而mac下并没有原生的docker或podman,因此给mbp加装第二系统: Fedora > 所以本文是Mac + Fedora 双系统。 > 由于当时Fedora 32尚未正式发布,因此文章的图片素材显示的是Fedora 31, 但是实际上Fedora 32的安装过程是一样的。 > 现在Fedora 32已经发布了,因此,可请自行把文章中的 31 替换成 32便可直接安装`Fedora 32`. > 如果你完全按文章操作安装的F31, 如果要从F31升级到F32的,可参考[Fedora 31 升级到 Fedora 32](https://ttys3.net/post/linux/fedora/fedora31-upgrade-to-fedora32/)一文升级 ...
  • Published on
    ## cgit简介 cgit - A hyperfast web frontend for git repositories written in C. [cgit](https://git.zx2c4.com/cgit/about/)没有多余的功能,它就是一个简洁的Git WEB UI. * basic repository browsing (logs, diffs, trees...) * caching of generated HTML * cloneable URLs (implements dumb HTTP transport) * commit feeds (atom format) * discovery of Git repositories ...
  • Published on
    此方法来自[Hugo官方文档](https://gohugo.io/tools/search/) 中的 [hugofastsearch](https://gist.github.com/cmod/5410eae147e4318164258742dd053993) > A usability and speed update to “Github Gist for Fuse.js integration” — global, keyboard-optimized search. 没错,这个方案,是[Github Gist for Fuse.js integration](https://gist.github.com/eddiewebb/735feb48f50f0ddd65ae5606a1cb41ae) 的改进版。 ...
  • Published on
    ## 解决办法 环境: `qt5-qtbase-devel` `5.13.2` @ Fedora 32 Workstation Edition `qt5-qtbase-devel` `5.11.1` @ CentOS Linux release 8.1.1911 首先检查`CONFIG`是不是包含`console`, 如果没有则加上 `CONFIG += console` 检查`$HOME/.config/QtProject/qtlogging.ini`文件(如果没有则创建)是否包含以下内容: ```ini [Rules] *.debug=true qt.*.debug=false ``` 重新运行Qt程序,就可以看到qDebug的输出了。 ...
  • Published on
    私有仓库发布跟public仓库稍有不同。增加了两步。这里记录一下。 ## 1. 登录Netlify生成deploy key 登录Netlify, 点击进入要设置的站点,然后点击`Site settings`按钮, 然后点击`Build & deploy`, 在`Continuous Deployment`下面,往下拖页面到`Deploy key`, 这里默认是没有key的,点击 `Generate public deploy key`生成一个deploy(发布)公钥。然后你会看到一个文本框,里面有rsa public key. 先复制完整的key内容到系统剪切板。 ![](netlify-gen-deploy-key-2020-06-01-19-59-23.png) ...
  • Published on
    系统版本: `Fedora 32` Firefox版本: `76.0.1 (64-bit)` 我偶然发现一个页面bug。Chromium下是显示正常的: ![](option-background-color-chromium.jpg) 而Firefox下是这样的: ![](option-background-color-firefox-linux.jpg) 这个HTML代码看上去是没问题的: ```html <option style="background-color: black" value="Black">Black</option> <option style="background-color: sienna" value="Sienna">Sienna</option> ...
  • Published on
    系统版本: Fedora 32 GNOME版本: 3.36.2 ## 问题分析 很久之前买了个天猫精灵X1蓝牙音响,周末偶尔也会用台式机连一下看看电影啥的。 但是GNOME bluetooth 有个问题就是,第一次可以配对成功并连接上,下次开机重启后它就不会自动连接了。并且就算你想手动点击连接,也非常大的概率无法成功,大部分情况下,你尝试点击那个连接的开关它会马上切换到未连接的状态,如图示: ![gnome-bluetooth-can-not-reconnect](gnome-bluetooth-can-not-reconnect-2020-05-20-19-46.gif) 当然,如果有耐心的话,多点击几次,还是有可能成功的。比如像我这样点了14下才成功: ...
  • Published on
    ## 需求 经常会有这么一种情况,一个文件修改了很多次代码,才发现 -- 咦?忘记commit了。 而且往往这些修改可能它们本来应该属于不同的提交。 怎么办?总不可能将就一下,直接把一些乱七八糟的修改放在一个commit里吧? 这个时候git add的`-p, --patch`参数就派上大用场了。 ## 介绍 > `-p, --patch` Interactively choose hunks of patch between the index and the work tree and add them to the index. > This gives the user a chance to review the difference before adding modified contents to the index. ...
  • Published on
    ## 热身运动 如果你没有设置一些惯用alias, 比如`ci`之类的,自行将`ci`替换成 `commit`。 像命令中用到的`lg1`别名,请直接跳到文章最后取配置。 为了方便理解,老灯会创建一个简单的Git仓库,用如下命令可完成: ```bash # 新建一个演练仓库 mkdir gittest cd gittest # 随便添加一个文件 touch hello.txt git add hello.txt git ci -m 'add hello.txt' # 再随便添加一个文件 touch world.txt git add world.txt git ci -m 'add world.txt' # 现在的提交是这样的 ...
  • Published on
    ## 0. AWS S3介绍 Amazon S3 Endpoints可以在这里查看 https://docs.aws.amazon.com/general/latest/gr/s3.html S3 在大部分地区都有节点,但是也不是所有节点都有。 S3是对象存储,默认情况下是不能用来做静态网站的,但是可以通过启用website config来达到目的。 这里要注意的是,[Website endpoint](https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html) 和普通的REST API访问时,其使用的endpoint是不同的。 ...
  • Published on
    今天开始新建了一个叫 commandlinefu 的子目录(或者叫分类), 专门分享命令行相关的东西。 ## 5秒钟版本 这次要跟大家分享的是一个叫`bat` https://github.com/sharkdp/bat 的命令工具。 这个工具主要采用[Rust](https://www.rust-lang.org/)编写, 它可以说是Linux里`cat`的克隆和增强版。 安装方法 https://github.com/sharkdp/bat#installation ```bash #Fedora sudo dnf install bat # Windows # Windows没有 choco的可以直接去 https://github.com/sharkdp/bat/releases 下载 bat-*-x86_64-pc-windows-msvc.zip ...
  • Published on
    Lychee 是个很小巧的相册程序,采用PHP [Laravel](https://laravel.com/)框架编写的。 由于用的pdo, 因此可以很方便的支持sqlite 和 mysql 等。 ![](lychee-photo-viewer.jpg) 老灯用过很多相册程序,包括古董级的ImageVue(后面改名叫X3 photo gallery了),Synology的`Photo Station`和 QNAP的`Photo Station`, 这些都挺好用的,但是都不免费。 老灯很早之前就做过[Lychee的docker镜像](https://hub.docker.com/r/80x86/lychee),主要是作为一个docker化的app给小钢炮系统使用, ...
  • Published on
    ## 准备工作 1. 安装好最新版本的vscode(这个自动不用说),但是我这里要强调一下的是,vscode插件用vscode自己来写,能省很多事情,虽然你也可以用WebStorm之类的来写 2. 安装好基本的工具,Git和Node.js(包含我们需要的npm) 3. 安装[Yeoman](http://yeoman.io/)和[VS Code Extension Generator](https://www.npmjs.com/package/generator-code) ```bash npm install -g yo generator-code ``` Yeoman号称“现代webapps脚手架工具”,使用它可以非常方便地生成各种项目的代码,而不是每个字节都要你从0撸起。 ...
  • Published on
    ## 前言 此前老灯介绍过最麻烦的Hugo站点部署方法,很多人可能光看配置文件就头疼了, 这次老灯借着给NanoDM站点迁移的机会,顺便介绍一下最简单的Hugo部署方法。 ## 为什么迁移 NanoDM当前的站点是基于Hugo静态站点生成器构建的。 ### 仓库为什么迁移到github NanoDM的站点源码此前一直托管在我的bitbucket私人仓库,这次做的另一个改变是:迁移到github 新的仓库地址为: https://github.com/ttys3/nanodm.net (欢迎fork, 欢迎贡献文章或编写FAQ) 迁移到github之后,可以方便大家一起维护NanoDM的文档。毕竟单靠我一人之力,精力非常有限。 ...
  • Published on
    老灯一个10多年的ArchLinux用户, 这么多年啊, 一直用Arch滚啊滚啊,借用一下某电商的广告台词就是: > Arch滚动一时爽,一直滚动一直爽。 > > 一时升级一时爽,一直升级一直爽!! 滚动升级是爽了,但是天天滚,对于升级这种事也就没有什么”激情“了。甚至都升级升得想吐了。有时候一天能更新好几次。 这不,老灯前面更换到Fedora, 终于等来了这次的”大版本“升级体验了。心情居然还有点小激动。 毕竟下次再升级还得期待半年呢(Fedora固定6个月发布一个大版本)。这真是: > Fedora升级一时爽, 半年升级等半年。 ## Fedora 32 更新了啥 Fedora 32 原定于2020年4月21日发布的,由于bug问题推迟发布了一周。 ...
  • Published on
    How to Install Zsh and Antibody(or Oh My Zsh) on Windows 10 without Windows Subsystem for Linux 老灯之前在公众号文章分享过[《打造windows终端神器——MSYS2 MinGW64 与 Cmder 集成记【2020-03-03更新】》](https://mp.weixin.qq.com/s?__biz=MzU4NzcwMjk1Nw==&mid=2247483967&idx=1&sn=01457006553d3d3ce81dd8aec166ceb3&chksm=fde6b5fdca913ceb80e13e62d6438583edf14e3f29f88c9ef00da0c85a2d13311f035415b1b0&token=2111349202&lang=zh_CN#rd) ...
  • Published on
    这篇主要讲一下这个博客是怎么部署的 ``` {{< music "32272267" >}} ``` ## hugo 主题选取 主题选取这个其实在[前篇](/blog/new-blog-new-domain)已经说过了 这里说下这个主题的特点吧: 1. 5色可选。5种双色主题 (orange is default, red, blue, green, pink)可以直接在配置文件里修改。 2. [Fira Code](https://github.com/tonsky/FiraCode)作为默认等宽字体 3. 响应式设计,各种分辨率浏览效果都不错 4. 采用 [PrismJS](https://prismjs.com/) 实现客户端代码高亮 ...
  • Published on
    ## 回顾博客折腾之路 博客圈子里熟悉无灯的童鞋可能知道, 老灯早期玩了相当长一段时间的 **WordPress**. 后面又折腾过Habari(已经阵亡) 和 typecho, 后面换成了自己基于Kohana(2016年停止更新)写的博客系统,再后来又换成了自己基于Yii2框架写的博客系统. 可能是嫌弃自己写的博客系统体验太差了吧,正好给了借口可以不写博客了. 因此博客从刚开始的日更周更,变成月更,渐渐地变成了季更,年更,最后变成了长期不更了. 博客域名刚开始是`ihacklog.com`(停止续费,丢弃), 后面切换成`80x86.io`(停止续费,丢弃),而现在的域名是`ttys3.net`,原因很简单,不同时间,折腾的东西不同,喜好也会产生变化,因此域名命名上也会变化。 ...
  • Published on
    # The Time Machine by H. G. Wells _Title_: The Time Machine _Author_: H. G. Wells _Subject_: Science Fiction _Language_: English _Source_: [Project Gutenberg](https://www.gutenberg.org/ebooks/35) ## Introduction The Time Traveller (for so it will be convenient to speak of him) was expounding a recondite matter to us. His pale grey eyes shone and ...