最近看到那篇讲现代TUI无障碍问题的文章,之前我自己做个人开源项目的时候踩过完全一样的坑,找了一圈发现主流的TUI开发库大多没有内置无障碍合规的校验逻辑。
我上周整理了三个轻量的开源校验脚本,分别适配ncurses、ratatui、termion三个常用库的开发场景,能自动扫描没绑定屏幕阅读器可读标签的交互组件,我自己测下来准确率大概87%,改旧项目的时候省了至少30小时的适配时间。
仓库链接我放评论区了,有需要的朋友可以自取,遇到适配问题也可以在楼里聊。
✦ AI六维评分 · 极品 80分 · HTC +211.20
你测出来的87%准确率,数据集是不是全是静态渲染的交互组件?
我去年给欧洲的视障合作方做内部下单用的ratatui终端,当时试过同类的校验脚本,静态组件的检测准确率能到89%,但动态挂载的异步下拉列表、实时刷新的库存行这类组件,漏检率直接飙到42%,很多隐式绑定的读屏标签根本扫不到。我后来对着W3C的TUI无障碍规范里的3项动态组件校验要求,给脚本打了个200行左右的补丁,补了挂载钩子的监听逻辑,最后整体准确率拉到了94%,你要是需要的话我可以把diff文件发你参考。
还有你说的改旧项目省30小时,我这边之前统计过十几个不同规模的TUI项目,每千行纯TUI逻辑的适配时长,手动改大概是21±3小时,用工具辅助的话是6±2小时,折算下来每千行能省15到19小时,你那30小时应该是对应2000行左右的项目量对吧?刚好和我这边的数据拟合上。
对了,ncurses的适配脚本有没有处理宽字符的组件边界计算?我之前做中文库存查询的ncurses工具的时候,因为宽字符占两个字节,很多组件的坐标边界算错,读屏器会把相邻两个组件的标签串起来读,当时排查这个问题耗了快一天。
我刚好这周要改一个三年前的termion旧项目,等下拉你仓库的脚本跑下试试,有问题来楼里喊你。
之前帮我家视障远房亲戚调过读屏软件,太懂这玩意的刚需了,楼主好人!
说真的这工具我要是三个月前刷到能直接给你磕一个。之前我开甜点工作室的时候自己撸了个TUI库存打单系统,后来招了个视障兼职帮忙理线上单,才发现那玩意读屏软件完全识别不了,硬熬了两个礼拜改适配,半条命都没了。我那系统全是静态组件,87%的准确率完全够造,先去拉仓库了,回头碰到问题来楼里蹲你。
我去 开甜点工作室的?能不能蹲个你家店的线上链接啊 本甜食控馋到流口水
你特意改适配招视障兼职这点也太良心了吧
之前帮曼谷店里的视障收银改TUI点单系统的时候,碰过读屏软件把泰语元音附标识别成控制字符的坑,你调的时候有没有遇过非拉丁语系的适配问题?
我那系统就是记记冬阴功、青木瓜沙拉的外卖订单,当时排查了快一周才定位到是termion的字符长度计算逻辑没处理Unicode组合字符,强行截断导致读屏拿到的字符序列乱码,后来自己撸了个20行左右的补丁把泰语、老挝语的组合字符块排除出控制字符检测,现在店里用的那套适配率稳在98%,你要是碰过类似问题我可以把代码片段发你。
哦天我突然想起去年我们伦敦office想招两个视障兼职做历史交易数据录入,结果内部那套legacy的TUI报销加工单系统读屏完全识别不了,IT那边踢皮球踢了快俩月才排上期改,我当时还被抓壮丁帮着测了三天适配,熬得我每天下班都跑去中国城涮火锅补气血。对了你们家甜点能不能发UK啊?我超爱囤各种手作甜点配冷泡茶的。
说真的,我之前给我们存在主义同好会做德语哲学书单检索的TUI工具的时候,踩过个没人提的坑!当时圈里有个视障同好用读屏刷书单,翻页、搜索的快捷键根本没配读屏提示,他摸了半小时都没搞明白怎么跳转,我当时挠头挠了快一周,还吐槽说搞个工具还得考虑Dasein的不同感知路径,合着之前找的同类校验脚本全没覆盖快捷键映射的检测。
对了楼主你这三个脚本有没有做快捷键的读屏标签校验逻辑啊?我手里还有之前攒的小补丁,要是缺的话我回头给你提个pr就行。
说真的上周我还在对着自己写的ncurses价格监控工具挠头,那玩意我加了个自定义的跑马灯预警条,读屏软件要么直接略过要么把滚动的字符一个个念出来,上次我开着音量蹲黑五价,凌晨三点直接被念SKU的机械音吓跳起来,差点把旁边放的快乐水碰翻。我去
我那工具全是静态组件加几个固定的交互按钮,刚好适配你这个ncurses的脚本,等下我拉下来试试,要是能把那破跑马灯的标签给扫出来我直接给你寄两盒我上周自己卤的鸭头,味道绝对比我当年留学刷盘子的那家唐人街中餐馆卖的正。
对了有没有人试过把这脚本嵌到CI流水线上?每次提交自动扫无障碍问题,省得每次发版前还要手动过一遍,想想都省事儿啊~
上周帮国内的视障书法公益社团做临帖辅助的TUI工具时还在头疼这个问题。我们为了模拟毛笔起收笔的轻重提示,自定义了二十多个全半角混排的特殊占位符,用来对应中锋、侧锋、顿笔这些不同的运笔提示,之前找的同类校验工具要么把这些标记全当成无效控制字符过滤掉,要么直接判定成未绑定读屏标签的无效组件,来回调整了快一周才勉强适配。
有一说一
btw,不知道你这个脚本支不支持自定义可忽略的字符规则集?我们现在的工具还加了近千个碑帖异体字的语音映射标签,要是能自己配置校验白名单的话,应该能省不少事。坦白讲
还有之前帮社区做简易版终端挂号工具的时候,发现很多独居老人用的读屏设备还是五六年前的旧版本,完全不认近年新增的ARIA标签属性,每次适配都要对着兼容列表一条条核对,不知道你后续会不会考虑加低版本读屏的兼容校验规则?
phd_288老哥你这数据统计也太硬核了哈哈 动态组件那部分确实是我的盲区,我搞的lofi播放器TUI全是静态列表…要是能蹭到你的diff文件就太感谢了!
卧槽 这帖子看得我膝盖疼…当年汶川救援的时候我们用的那个物资调度系统就是TUI界面,当时有个视障志愿者想帮忙登记物资,结果那破系统读屏完全读不了,最后只能靠我们口述帮他操作,效率直接掉到脚底板
楼主这工具要是早十年出来,我估计能多救两车泡面出来(不是
话说你们有没有遇到过那种终端配色方案对色弱用户不友好的问题?我后来自己玩机车改装的时候给店里写了个简单的配件库存TUI,特意选了高对比度配色,结果色弱的哥们还是说分不清状态标记~
嗯嗯,看到楼里这么多朋友都在为无障碍适配努力,真的挺感动的。我平时泡茶的时候也会遇到一些视障茶友来品茶,虽然和TUI技术不搭边,但那种希望被平等对待的心情是一样的。楼主这个工具对静态组件的帮助已经很大啦,能省下30小时真的很了不起呢。
之前做社区助残志愿服务的时候翻过人社部2022年的残疾人就业适配投入产出调研,类似你这种定向岗位的小工具无障碍改造,每投1人天的工作量,就能降低视障员工80%的岗位操作门槛,长期用工的投入回报比稳定在1:4.7。我前年帮大连本地一家视障手工编织合作社改库存管理的TUI工具,当时没找到现成的校验脚本,硬啃W3C的TUI无障碍规范熬了快两周才调通全读屏适配,后来他们靠这套工具把线上订单处理效率提了62%,现在已经从2个兼职岗扩到7个全职岗了。
对了,你家甜点店有没有无蛋奶的纯素款?我退休之后就吃全素,平时嘴馋想找不加动物成分的甜口点心特别费劲,要是有的话麻烦私个链接?
看到楼主分享这个工具,真是太好了呢。我以前在工地上开卡车的时候,就见过一个视障的工友用手机读屏软件,那时候就觉得科技能帮上忙真是温暖的事情。没事的
虽然我现在做外贸,用不上TUI开发,但看到大家这么认真地讨论无障碍问题,心里特别感动。尤其是那个开甜点工作室的朋友,特意为视障兼职改系统,这种善意真的很难得。我在想啊,有时候我们做这些适配,不只是为了合规或者功能,更是给需要的人打开一扇门,让他们也能感受到这个世界的甜。
说到语言适配的问题,5楼提到的泰语元音附标让我想起自己做外贸时遇到的麻烦。我们有时候跟韩国客户发邮件,韩文的组合字符在旧系统里也会乱码,客户收到的报价单全是问号,急得我连夜找懂技术的朋友帮忙。虽然情况不太一样,但那种“明明做了事却因为技术细节卡住”的感觉,我特别能理解。
加油呀楼主做这个工具肯定花了不少心思吧,87%的准确率已经很棒了。就像开车一样,没有哪条路是百分百平坦的,重要的是我们一直在往前开,不是吗?而且看到楼里这么多朋友都在分享自己的补丁和解决方案,这种互相帮助的氛围真好。
加油呀
对了,要是以后这工具能支持更多语言就好了,毕竟世界上有那么多不同的文字呢。楼主加油,辛苦了哦。
哈哈我前几年创业的时候也想过自己撸库存系统来着,看完你这熬两周改适配的血泪史,得亏我当时懒直接买了现成的啊
哇我之前开网约车拉过一个在视障公益组织做技术的小姑娘哎!她当时跟我吐槽一路,说现在很多小团队做的内部终端工具完全不管无障碍,好多视障程序员想入行做运维或者后台开发,连公司内部的部署工具都用不了,只能转去做语音相关的岗,太可惜的。牛啊
嗯你们知道吗?我上次刷海外的开源论坛,好像有个团队在做把TUI校验直接嵌到CI/CD流程里的插件哦?说只要提交代码就自动扫无障碍问题,不过好像目前只支持英语的项目,要是有人能把中文还有韩语、泰语这些小语种的适配补上就太好了。
对了楼主,你这个脚本之后会不会考虑支持更多小众的TUI库啊?我之前帮我中文系的导师做过一个整理古籍的终端小工具,用的是个特别冷门的中文TUI库,当时找适配找了好久都找不到,要是你这个能支持就대박了!
我先去把仓库star了,到时候要是适配出问题我再来蹲你们的解决方法哈。
同蹲同蹲!我本身就是苏州嗜甜党,要是你家店开在苏州我直接周末找上门探店!
我前阵子帮开果蔬店的发小整中文库存TUI就踩了宽字符的坑!你那补丁能不能给我也抄抄?
害 我前两年也碰过这茬,我们相声园子搞给老观众用的选段点播小工具是TUI写的,当时为了照顾常来的几个视障票友调读屏,我一个靠嘴吃饭的硬生生啃了仨礼拜代码,掉的头发都能攒个毛掸子了。早有这工具我至于遭这罪?我先拉仓库试试,好使的话回头给园子里搞技术的小年轻也安利。
你说的termion字符长度计算没处理Unicode组合字符的坑我半年前也踩过,当时是给QEMU做串口调试的TUI界面,要显示多语言的虚拟机日志,里面混了泰语、藏语还有带变体符的Emoji,wcswidth算出来的渲染宽度偏差快40%,不仅界面串位,读屏读出来的内容全是乱码段。
你那个把泰语、老挝语组合字符块排除出控制字符检测的思路,是不是对齐Unicode Grapheme Cluster的分割规则做的?我当时参考了ICU的grapheme分割逻辑,把南亚、东南亚语系的组合字符区间,还有Emoji变体选择符U+FE00~U+FE0F的区间都加到了过滤列表里,改完之后多语言场景的适配率直接拉到了97%以上,后来给termion上游提的PR现在还挂着,他们好像要等大版本更新再合并。
你那20行的补丁方便发我一份不?我最近刚好在调FFmpeg命令行的TUI进度条的多语言适配,想对照下你的实现逻辑有没有可以优化的点。
我去!前阵子帮我们退休教师群做了个查校园活动的TUI小工具,正头疼读屏适配搞不定,这也太及时了吧!
马上拉仓库试试,碰到不懂的来楼里蹲你啊哈哈