记Windows的一个存在了十多年的bug
bug
Windows有一个bug,持续了十多年,从Windows Visita开始(2007年),一直存在,直到Windows11(2021年)才修复(其实也不叫修复,后面我再具体说),而Windows10还能重现这个bug,即便把系统更新到最新(2022年10月5日)。
这个bug用语言来描述就是:使用Windows Explorer(资源管理器)的树形结构初次展开目录时,滚动条会发生不正确的滚动,使得展开的节点贴近了窗口底部的位置,而不是处于我们期待的顶部位置。
有些难懂?我录了一个视频来说明这个bug:视频压缩包(博客园不能上次视频,所以做了个zip),本人基本没学过视频制作,弄得比较粗糙,请见谅。
Windows Vista
Windows Vista出来的时候,我就尝鲜安装了一个,基本上是马上就发现了这个问题,因为Windows XP及之前的所有的Windows操作系统都没这个问题。
为什么我能马上看出来?还不是因为我对资源管理器的使用习惯,我非常喜欢用目录树展开找到我想要的东西,这种习惯来源于我最早接触的Windows操作系统——Windows 95,要说现代Windows的操作模式是从哪来的,那一定是Windows 95,直到现在,Windows 95仍然是我心目中最具“跨越式”发展的操作系统,就是说它步子足够大,颠覆了过往的操作系统,让人耳目一新,开始菜单,底部任务栏,任务管理器,真正的多任务,这些如今我们无比熟悉的东西皆源于Windows 95,比尔盖茨也凭着这个操作系统的发布而登顶了世界首富。这是一些题外话。
我发现这个bug之后,就一直想办法要修复它,到处寻找解决方案,发现了这个问题的人当然不只是我,在MSDN上就有一个回复达到上千的bug反馈,是描述这个问题的,这个帖子的链接如今已经不可访问了,我记得非常清楚,大部分人表示这是个不可理喻的bug,不知道为啥会存在,非常低级,应该很快就能修复。而可气的是微软官方的答复居然说:这是个feature,并把这个问题close了,但大家的跟进仍然很激烈:
- “因为这个问题我已经失去了对微软的尊重了。”
- “我对微软早就没有尊重了,我已经打算更换Mac了。“
- “每次遇到这个问题,我真想把电脑扔下楼,然后去买台Mac。”
- “微软要是能把以前开发XP的老掉牙的从病床上拉起来并帮他们带好尿袋,我相信这问题会在3分钟内修复。”
帖子中好些微软的MVP在了解情况后非常明确地指出这是个bug! 它不可能是一个feature,因为它行为不一致,而feature即便是再差再糟糕的feature也必须满足行为的一致性,否则只能论作bug,它确实就是个不折不扣的bug。
这个问题对我困扰甚多,所以Vista我基本没怎么用,因为一个bug而放弃一个操作系统,听起来挺荒谬,但事实就是这样,对我而言,这基本上就是个硬伤,我不愿意改变我的习惯,而这个bug真是令我抓狂。
Windows 7
Windows Vista是微软的一个失败的操作系统,最主要的原因是其兼容性的问题,这些问题到了Windows7之后得到了很大程度上的改善,所以很多人都用过Windows7,而没有使用Windows Vista,他们都知道Windows Vista不好,但不好在哪里,他们都说不出来。而对我来说比兼容性更重要的是,这个该死的bug到底有没有修复?Windows7安装上去了之后,我满怀期待地打开了资源管理器按我习惯的操作点击了几下……我靠! 一点都没变! 我先是气愤,后转为失落。
不管怎么说,Windows7都会成为以后几年的主流操作系统了,我得习惯——唉! 我后来确实找到了一个程序,一定程度上能解决这个问题,这个软件的名字叫“Classic Shell”,它的网站目前还能访问:http://www.classicshell.net/,里面包含了一个小小的功能:fix folder scrolling,它的其它功能我如今全忘了,因为当时我只看中了它这个功能。看吧,放弃一件东西往往只因为其中的某个特点,反之,选择一件东西也是这样。Classic Shell这个软件并不能解决所有的问题,它仅仅作用于资源管理器程序中,而Windows的这个bug不只是在资源管理器中有,它在“打开文件”,“选择目录”等系统公共对话框中也存在,但能解决一部分是一部分吧。而作为Windows程序员的我还曾一度想自己修复这个问题,但研究下来无果。
Windows 8
又过了若干年,Windows 8发行了,这貌似是一个很大的改版,我又满怀期待地安装上去了,结果真是无语,这个bug一点不差地继承了下来。Windows 8的活动磁贴让人很有新鲜感,但随即新鲜感过后觉得其实也没啥营养,活动磁贴适合于平板,但桌面版的Windows强行弄这东西真的合适么?不过最奇葩的还是Windows 8的关机按钮,即便是我这样的老鸟,也费了老大劲才找到。Windows 8是个失败的操作系统,可能是因为步子有点大,和Windows 95的步子大不同,它不合理的地方太多。
Windows 8.1
微软很快意识到了Windows8的问题,所以不久后推出了Windows 8.1,Windows 8.1的UI上更加符合用户传统的操作习惯,但也真的只是小改进罢了。bug呢?——当然完美保留了下来。
而从Windows内部版本上来看,Windows Vista,Windows 7, Windows8,Windows 8.1是相差不大的东西,想知道Windows版本可以在命令行界面中敲“ver”查看,你会了解到:
* 6.0 - Windows Vista
* 6.1 - Windows 7
* 6.2 - Windows 8
* 6.3 - Windows 8.1
不过,从Windows 10开始就不是这样的版本显示了。
Windows 10
Windows10大概从2016年开始渐渐普及,一样的,我安装后的第一件事情就是看看这个bug修正了没有,嗯……还好我没太大的期待,果然还在! 这也说明了一个问题,这个资源管理器的代码应该是直接从之前版本的操作系统中拿过来用的,应该没改过什么。Windows10是一个比较成功的操作系统,发行后,微软多次对它进行了大幅度的迭代,如今的Windows 10跟初代的Windows 10已经差别很大,但对我而言,不修正这个bug都算不上成功。
Windows 11
这个bug最终的解决是在Windows 11上,它,终于消失了,但Windows 11和Windows 10在UI上的差别很大,对我而言这绝对是步子迈得太大扯到蛋的变化,Windows 95的革命性UI变化给人是惊艳的感受,因为进步实在太大,而Windows 11的这些“改进”都只停留在表面上,把开始菜单弄成居中,强行合并任务栏图标,这些除了强制用户改变自己习惯之外,我看没带来什么好处啊,操作更便利了?功能更强大了?更加符合人类直觉了?恐怕都没有吧,就是为了标新立异而已,我不反对一些新的尝试,但至少要给用户一个选项,如果新的方式不好用,能够退回旧的方式啊。但不管怎么说,在Windows 11的资源管理器中,它确实消失了,也许不是修复了,而是微软重构了资源管理器的代码,因为Windows 11的资源管理器跟Windows 10的有着很明显的差别,所以真相很可能就是:微软其实根本没去修正这个bug,只是把资源管理器重新写了一遍,正好没了这个bug罢了。
Windows11的操作方式和Windows10也有着很大的差别,最令人吐槽的便是它的右键菜单,相信是个程序员看了都想开骂——为何要我多点一下。所幸的是要调整回经典右键菜单并不难,而要想让传统的任务栏回归就有点难了,我尝试过许多个方法后,发现比较可靠的,且副作用比较小的,就是用一个叫“StartAllBack”这个软件,它的作用不仅仅是让经典任务栏回归,还能调整开始菜单,以及让资源管理器使用传统风格。
总结
写这篇文章,是为了一些纪念,也是为了总结一些道理:
1. 一个东西,不管其它方面有多好,一个缺点就可以让人很讨厌它
2. 没有充分的理由就不要试图去改变用户的习惯
3. 从根本上去改进产品,而不是停留在表面上
4. 一个产品没有令人厌烦的bug往往比有什么酷炫功能重要
5. 大公司……确实挺傲慢
记Windows的一个存在了十多年的bug的更多相关文章
- 使用MFC开发有十多年了,结合自身的体会,随便说几句(不能样样都依赖别人,C体系的人,绝对不怕人踢馆)
挺长时间了吧,这个帖子还没沉下去,使用MFC开发有十多年了,结合自身的体会,随便说几句:1.MFC是一个C++的基础类库,封装了绝大多数的API函数,主要是用来创建带UI的应用程序,服务端程序或着不带 ...
- 困扰多日的C#调用Haskell问题竟然是Windows的一个坑
最近一直被C#调用Haskell时的“尝试读取或写入受保护的内存”问题所困扰(详见C#调用haskell遭遇Attempted to read or write protected memory,C# ...
- 把 Nginx 创建为 Windows 的一个服务
译序:Nginx 不是为 Windows 而写.Nginx 是用在软件的工作环境中的.但软件开发环境一般都是 Windows,有时调试的需要也要装 Nginx,但 Nginx 并没给 Windows ...
- Vue折腾记 - (3)写一个不大靠谱的typeahead组件
Vue折腾记 - (3)写一个不大靠谱的typeahead组件 2017年07月20日 15:17:05 阅读数:691 前言 typeahead在网站中的应用很多..今天跟着我来写一个不大靠谱的ty ...
- Java中,一个存在了十几年的bug...
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- 记一次亲身踩过的hibernate的bug
记一次亲身踩过的hibernate的bug 在写实体类时,经常会对域增加校验,例如@NotNull表示哪个字段不能为空,昨天晚上调试代码,就遇到了问题, @Entity public class Ap ...
- 怎样才能提交一个让开发人员拍手叫好的bug单
怎样才能提交一个让开发人员拍手叫好的bug单 软件测试人员写得最多的文档就是测试用例和BUG,现在测试用例和BUG都没有标准的模板,每个公司使用的缺陷管理工具都有可能不一样,如果你换了一家公司就有可能 ...
- 面试题(造火箭必备技能):请举例一个最有成就感的性能bug
当前,绝大部分招聘都有性能要求或者把其作为加分项(会性能优先),哪怕你不是面试的性能,面试的时候可能会问性能,所以大家才会有"面试造火箭,进去拧螺丝"的共鸣.至于企业为什么重视性能 ...
- 定时器:为 Windows 实现一个连续更新,高精度的时间供应器
原著:Johan Nilsson 翻译:lxhui 原文出处:MSDN Magazine March 2004(Timers...) 原代码下载: HighResolutionTimer.exe (4 ...
随机推荐
- 对比学习下的跨模态语义对齐是最优的吗?---自适应稀疏化注意力对齐机制 IEEE Trans. MultiMedia
论文介绍:Unified Adaptive Relevance Distinguishable Attention Network for Image-Text Matching (统一的自适应相关性 ...
- 20220727-Java中方法重写override
目录 代码示例 注意事项 代码示例 public class OverrideExercise { public static void main(String[] args) { Person ja ...
- TensorFlow自定义训练函数
本文记录了在TensorFlow框架中自定义训练函数的模板并简述了使用自定义训练函数的优势与劣势. 首先需要说明的是,本文中所记录的训练函数模板参考自https://stackoverflow.com ...
- 如何记录分析你的炼丹流程—可视化神器Wandb使用笔记【1】
本节主要记录使用wandb记录训练曲线以及上传一些格式的数据将其展示在wandb中以便分析的方法,略过注册安装部分(可使用pip intall wandb安装,注册相关issue可上网搜索),文章着重 ...
- 不安装运行时运行.NET程序
好久没写文章了,有些同学问我公众号是不是废了?其实并没有.其实想写的东西很多很多,主要是最近公司比较忙,以及一些其他个人原因没有时间来更新文章.这几天抽空写了一点点东西,证明公众号还活着. 长久以来的 ...
- CC2530_ZigBee+华为云IOT:设计一套属于自己的冷链采集系统
摘要:以CC2530单片机为核心器件,设计一个冷链环境信息采集系统,利用传感器技术对冷藏仓内的环境参数进行采集,上传到华为云物联网云平台,然后通过手机端或移动端进行显示,便于分析,观察冷链环境信息. ...
- 5.26 NOI 模拟
\(T1\)石子与HH与HHの取 博弈是不可能会的 \(c_i\)相等,比较显然的\(Nim,\)直接前缀异或求一下 \(a_i=1,\)区间长度对\(2\)取模 结论\(:\)黑色石子严格大于白色个 ...
- python包合集-cffi
一.cffi cffi是连接Python与c的桥梁,可实现在Python中调用c文件.cffi为c语言的外部接口,在Python中使用该接口可以实现在Python中使用外部c文件的数据结构及函数. 二 ...
- Java四大引用详解:强引用、软引用、弱引用、虚引用
面试官考察Java引用会问到强引用.弱引用.软引用.虚引用,具体有什么区别?本篇单独来详解 @mikechen Java引用 从JDK 1.2版本开始,对象的引用被划分为4种级别,从而使程序能更加灵活 ...
- 高并发之网络IO模型
你好,我是坤哥 今天我们聊一下高并发下的网络 IO 模型 高并发即我们所说的 C10K(一个 server 服务 1w 个 client),C10M,写出高并发的程序相信是每个后端程序员的追求,高并发 ...