2025-11
wless
本月主要关注client的resize和output的frame事件之间的关系,相关参考内容有:
- https://github.com/DreamMaoMao/mangowc/issues/293
- https://github.com/swaywm/sway/blob/055be4ec35eec4eaaf066a18ccbf5132ebed0694/sway/desktop/output.c#L374
- https://github.com/swaywm/sway/pull/2072
- https://wayland.app/protocols/xdg-shell#xdg_surface:request:ack_configure
问题的矛盾在于窗口的大小和窗口的位置改变不同步,如果我想让窗口进入全屏:
- WM立即将窗口的左上顶点移动对齐到左上角
- WM请求窗口改变大小,此时窗口占据了1/4屏幕(举例)
- 窗口响应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二进制文件上,对输出进行解析吧!
- 扫描所有refs,存储到数据库
- 从refs中的一个开始,遍历commit到存在时停止
- 重新于root索引commits
- 基于git-log拿到changed-path,文件修改存数据库
- 重复2直到完成所有
- 从上到下构建祖先跳表,存另一个表
想了两周要不要每个仓库分一个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)后,火狐界面异常大。 在论坛上有很多反馈:
- Firefox火狐浏览器界面异常变大原因-论坛-深度科技
- V25和火狐浏览器有点冲突-论坛-深度科技
- deepin 25 火狐浏览器莫名的分辨率变大-论坛-深度科技
- 火狐浏览器firefox高分屏设置无效-论坛-深度科技
- 火狐浏览器问题-论坛-深度科技
- Firefox 窗体整体缩放变大问题-论坛-深度科技
- 火狐浏览器缩放-论坛-深度科技
- 火狐 mozilla 中文版标题栏宽大-论坛-深度科技
- 火狐浏览器分辨率问题。-论坛-深度科技
- 火狐浏览器缩放过大在浏览器中禁用注销后自动复原-论坛-深度科技
- 火狐浏览器的显示比例有问题-论坛-深度科技
- 火狐浏览器界面放大-论坛-深度科技
- 火狐的界面变得好大,怎么办-论坛-深度科技 2022-08-12
从症状上看,缩放不正常时,打开 about:config 配置页面,layout.css.devPixelsPerPx
的默认值 -1 被修改为了当前系统缩放值,如果恢复默认就缩放表现正常。
重启火狐,这个值又被改了,所以肯定是系统干的。 在GitHub搜索发现是dde-daemon仓库的逻辑。关掉相关服务,一切正常:
systemctl --user stop org.dde.session.Daemon1.service
从代码看,dde-daemon扫描用户的 .mozilla/firefox/*/prefs.js 文件并设置上述项,
删掉这块的逻辑就好了,测试下来确是如此。
这部分的代码是从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
- https://bbs.deepin.org/post/293046
- https://bbs.deepin.org/post/292279
- https://bbs.deepin.org/post/292101
- https://bbs.deepin.org/post/292006
- https://bbs.deepin.org/post/293722
论坛有用户说开机重启后音量很小,我自己使用两个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
- https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/92432
- https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/92719
- https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/92722
- https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/92723
- https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/92730
- https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/92781
- https://gitlab.alpinelinux.org/alpine/alpine-conf/-/merge_requests/272
- https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/93058
- https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/93070
- https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/93494
- https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/93543
- https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/93739
- https://gitlab.alpinelinux.org/alpine/aports/-/merge_requests/93741
双十一购入的电子产品是32G的U盘,在Windows里成功装上了「Linux To Go」
- 下载官网的ISO镜像,标准版就行,虚拟机里网络一般都很好
- 创建vbox虚拟机并挂载盘片,默认512M内存,不需要本地硬盘
- 虚拟机以USB3.0格式挂载U盘设备,
lsblk应该能看到设备是/dev/sdX - 设置环境变量
USE_EFI=1SWAP_SIZE=0并执行setup-alpine
虚拟机一般不开启UEFI所以需要手动指定一下脚本中的EFI不然实体机不识别。 SWAP对U盘要比较高,关掉提高寿命。其他的优化方法暂未发现后续再看。
misc
alsa-lib
alsa居然合并了,上周本来想关掉这个PR来着。 原本的逻辑是先判断大小,再进行线性缩放,可能因为整数除法掉出最开始的判断范围, 所以我改成了先计算最后判断。
snd_tlv_convert_to_dB: Fix mute handling forMINMAX_MUTEtype by qaqland · Pull Request #478 · alsa-project/alsa-lib
alsa-utils
代码盯着看总是有收获,不小心发现errno返回时丢了个负号
alsactl: fix error handling in
check_control_cdev()by qaqland · Pull Request #310 · alsa-project/alsa-utils
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
slog
https://github.com/qaqland/slog
slog是一个C语言适用的结构化日志输出库,基本完工正在修bug写测试补文档阶段。
在推进的过程中收到了XJJ和C语言中文群群友的大力帮助、无私指导, 以后应该能把聊天记录下来,出本小册子《C语言系统编程技巧》。
donations
一开始希望去OpenBSD,但是只有paypal捐款途径,我的国区账号不支持,所以换了家