2025-11

wless

本月主要关注client的resize和output的frame事件之间的关系,相关参考内容有:

问题的矛盾在于窗口的大小和窗口的位置改变不同步,如果我想让窗口进入全屏:

  1. WM立即将窗口的左上顶点移动对齐到左上角
  2. WM请求窗口改变大小,此时窗口占据了1/4屏幕(举例)
  3. 窗口响应WM,变为全屏,此时窗口全面覆盖

窗口的位置是WM没有延迟随意操作的,而窗口的大小需要客户端自己去响应,两者几乎不会在同一帧完成。 在这个时间裂缝里,窗口从1/4到全屏不可避免的闪了一次。 还没想好怎么处理,可能需要卡住显示器,或者等窗口响应的pre-commit里再去改变位置。

12月应该没时间看,可能又要等到明年了。

bushi

nom似乎可以对stream进行解析,之前可能没注意到? 研究了一番放弃了这个灵车的想法!(见后)

从i5换到了n5105,耗时差不多是两倍:

git-log--stat 5m16s

git log --oneline --stat > /dev/null

git-fast-export 3m45s

git fast-export --no-data --fake-missing-tagger --signed-tags=strip --all > /dev/null

据研究packfile包含的压缩信息确实可用(好像废话,不然git是怎么把20G压缩到600M的)

git verfy-pack -v .git/objects/pack/pack-*.idx

但是没有稳定性保证,压缩的基准与提交顺序有关系但不保证, 高概率出现ABCD等多个tree都基于同一个base差值压缩的情况。 因此当前决定还是不做这个了, 我们还是愉快的攀附在git二进制文件上,对输出进行解析吧!

  1. 扫描所有refs,存储到数据库
  2. 从refs中的一个开始,遍历commit到存在时停止
  3. 重新于root索引commits
  4. 基于git-log拿到changed-path,文件修改存数据库
  5. 重复2直到完成所有
  6. 从上到下构建祖先跳表,存另一个表

想了两周要不要每个仓库分一个SQLite数据库

  • 更方便管理(主要原因)
  • 可能剩下一个复合主键的空间(但是sha256sum对主键来说还是太长了)

但是缺少能够管理256-2048个独立SQLite数据库的现有库(对CGI来说这不是问题), 所以还是保持现状吧。

记录下体积大小的对比,所以不压缩真顶不住。

$ du -sh loose-aports/
28.7G   loose-aports/

$ du -sh aports/
790.1M  aports/

重新设计了bushi的架构:

  • 把之前头疼的配置问题拆到第一部分(之前网络端口设置和仓库设置混在一起感觉别扭)
  • 为了避免插入中String -> CString -> SQLite的多次复制问题,索引更新部分换C了
  • 网站托管部分还是上Rust的Tokio生态,此时SQLite只读,所以可以大幅度开启连接池加速

bushi-hook(-)

collect git repositories' path and rediect them to next program's stdin

cron, sleep or triggered by something else

copy bushi.db and send signal to bushi-web, it will refresh connection

bushi-index(C)

$ bushi-index [-vh] [-c] [-t stage.db] repo ...
$ bushi-index [-vh] [-c] [-t stage.db] -

-c  cleanup unused repositories
-t  target sqlite database
-   read from stdin

repo    GIT_DIR

read path from stdin and update index in stage.db

bushi-web(Rust)

$ bushi-web [-vh] [--index bushi.db] [--host HOST] [--port PORT]

open bushi.db with read only option, host web

firefox & dde

火狐在dde上一直有缩放问题,主要症状是系统设置缩放(非1)后,火狐界面异常大。 在论坛上有很多反馈:

从症状上看,缩放不正常时,打开 about:config 配置页面,layout.css.devPixelsPerPx 的默认值 -1 被修改为了当前系统缩放值,如果恢复默认就缩放表现正常。

重启火狐,这个值又被改了,所以肯定是系统干的。 在GitHub搜索发现是dde-daemon仓库的逻辑。关掉相关服务,一切正常:

systemctl --user stop org.dde.session.Daemon1.service

从代码看,dde-daemon扫描用户的 .mozilla/firefox/*/prefs.js 文件并设置上述项, 删掉这块的逻辑就好了,测试下来确是如此。

https://github.com/linuxdeepin/dde-daemon/pull/952

这部分的代码是从startdde搬过来的,而在startdde项目当年的提交是在2017年:

xsettings: Add dpi supported for firefox · linuxdeepin/startdde@2636914

https://github.com/linuxdeepin/startdde/commit/263691490fb4e1ce36859b606361c1b718bfef30

回到论坛,用户有提出一个规避方案,设置browser.display.os-zoom-behavior的值为0。 这个选项的作用是设置火狐如何响应操作系统的缩放,在2022年7月26日发布的103版本中新增

Bug 1773633 - Allow configuring OS zoom behavior. r=tnikkel · mozilla-firefox/firefox@c7106fc

https://github.com/mozilla-firefox/firefox/commit/c7106fcb8111c4139094f444b78c5ed1632883ec

到这里就一目了然了,2022年103版本开始,火狐新增了一个默认开启的随系统缩放选项, 而我们的系统在2017年添加了手动修改缩放的逻辑,与此处的随系统缩放叠加,造成了界面异常大。 删掉2017年的缩放逻辑就好了。

deepin & sound after startup it quiet

论坛有用户说开机重启后音量很小,我自己使用两个sink都没复现。 目前希望用户多给一点日志,包括关机前后的音量:

pactl get-sink-volume @DEFAULT_SINK@
pactl list sinks

有点怀疑是WirePlumber的音量保存与DDE内部的逻辑冲突,因为他们的音量计算方法不同, 我们系统上的立方音量改为了1.8

import math

# percent to dB volume
20 * math.log10(X ** 3)

# dB to percent volume
(10 ** (-Y / 20)) ** (1/3)

更新:发现了另外一个会导致音量变小的bug,是我们自己补丁中的MONO算法问题, 猜测关系很大,等这个问题修复再测。

alpine

双十一购入的电子产品是32G的U盘,在Windows里成功装上了「Linux To Go」

  1. 下载官网的ISO镜像,标准版就行,虚拟机里网络一般都很好
  2. 创建vbox虚拟机并挂载盘片,默认512M内存,不需要本地硬盘
  3. 虚拟机以USB3.0格式挂载U盘设备,lsblk应该能看到设备是/dev/sdX
  4. 设置环境变量 USE_EFI=1 SWAP_SIZE=0 并执行 setup-alpine

虚拟机一般不开启UEFI所以需要手动指定一下脚本中的EFI不然实体机不识别。 SWAP对U盘要比较高,关掉提高寿命。其他的优化方法暂未发现后续再看。

misc

alsa-lib

alsa居然合并了,上周本来想关掉这个PR来着。 原本的逻辑是先判断大小,再进行线性缩放,可能因为整数除法掉出最开始的判断范围, 所以我改成了先计算最后判断。

snd_tlv_convert_to_dB: Fix mute handling for MINMAX_MUTE type by qaqland · Pull Request #478 · alsa-project/alsa-lib

https://github.com/alsa-project/alsa-lib/pull/478

alsa-utils

代码盯着看总是有收获,不小心发现errno返回时丢了个负号

alsactl: fix error handling in check_control_cdev() by qaqland · Pull Request #310 · alsa-project/alsa-utils

https://github.com/alsa-project/alsa-utils/pull/310

WirePlumber

wpctl: add bash completions (!762) · Merge requests · PipeWire / wireplumber · GitLab

https://gitlab.freedesktop.org/pipewire/wireplumber/-/merge_requests/762

其实发现PipeWire本体也没有,但是那边命令太多了,就只做了这里。

language

突然想到有没有什么嵌入式的解释型语言可以同时满足以下几点

  • 与C交互良好
  • 不带JIT也速度快
  • 语法简洁现代

aosc dde port

A: 我觉得这个事情既然不是一锤子买卖,就真得有人持续做

B: 是的,所以现阶段只能drop,不然搞个人临时处理两天意义也不大,不能持续搞的话对大家来讲都是个负面的

后续如果有人做aosc的port,也许能从这里再捡回来

deepin Desktop Environment: drop, orphaned by MingcongBai · Pull Request #13548 · AOSC-Dev/aosc-os-abbs

https://github.com/AOSC-Dev/aosc-os-abbs/pull/13548

slog

https://github.com/qaqland/slog

slog是一个C语言适用的结构化日志输出库,基本完工正在修bug写测试补文档阶段。

在推进的过程中收到了XJJ和C语言中文群群友的大力帮助、无私指导, 以后应该能把聊天记录下来,出本小册子《C语言系统编程技巧》。

donations

一开始希望去OpenBSD,但是只有paypal捐款途径,我的国区账号不支持,所以换了家

NetBSD