Year: 2026

同一网页引入两个不同版本jQuery引发的问题

昨天在前端工程遇到一个以前没有想到过的问题

在维护了十多年的主项目上,最近完成了把 Knockout.js 从用户侧前端子工程 acorn 完全移除的工作,原来的要么迁移成 React 实现,要么把自家运营运维侧的工作移到 staff 子工程。在 staff 子工程里目前还有 Knockout.js 的前端页面逻辑和组件,以及一些以前仿照 bootstrap 写的样式和 js 组件,以及基于 jQuery 的日期选择器 datepicker 和时间选择器 timepicker

但昨天发现某个页面一个封了 datepicker 的 input,通过 data-bind=”textInput” 跟 knockout.js 绑定有奇怪的行为。鼠标点选,input 输入框内文本改变,用 $(el).val() 取的值也正常,但 ko 绑定的值不变。如果直接在 input 框里输入,ko 绑定的值就能正常更新

直接 input 输入可以改变 ko 绑定值,说明 ko 绑定没出问题,鼠标点选后 ko 绑定值不变,说明监听机制哪里有问题。因为这一波迁移里把原来多个版本混用的 ko 统一到了 3.x,先查是不是 ko 跨版本有监听事件的变化,ko 官网没说,某 AI 说 ko 3.x 开始还是现代浏览器有啥啥啥事件不再绑定,但尝试手工验证, $(el).trigger("input")$(element).trigger("change") 这些明确说应该有效的,也不能让 ko.observable 的值更新

自己看业务代码和 datepicker 的代码(都是十年前自己写的),git 记录都显示没变啊,调试过程该有的事件都正常触发。把问题代码涉及的链路和表现丢给 Codex GPT-5.4 xhigh,一开始还说需要检查 ko 绑定机制和 vm 初始化顺序,但这些跟之前正常工作时都没变化。后面揪出来在 jinja2 模板层,渲染 HTML 时引入了两次不同版本的 jQuery,在 ko 绑定时用的第一版,后续 datepicker 初始化时关联到第二版,两边 $.event 不通?两套 jQuery 各自维护了自己的事件缓存和 handler 列表,所以 datepicker 库通过第二套 jQuery 发出的事件到不了 ko 在第一套 jQuery 上注册的 handler,而人肉改 input 里的内容走的浏览器原生 DOM 事件,ko 用的那一版 jQuery 有正常监听能生效。最终移除没必要多引入了一次的 jQuery 后,确保 Knockout.js 和 datepicker 使用的是同一版 jQuery 后恢复正常

前端这些诡异的大坑啊,以前为了弥补浏览器能力不足而需要 jQuery 去封装的各种基础能力,现代浏览器都原生支持(主要是选择器和事件触发监听),未来能走原生都走原生吧

断电长按电源键可解决绝大部分USB-C/雷电口设备问题

个人和公司都遇到过笔记本电脑或显示器或别的设备的 USB-C 或雷电口,不能充电、传输信号等问题,大部分情况下,断电后长按电源键做重置就可以解决绝大部分问题

  • 断电
    • 笔记本电脑需要拔外接电源,最好在 BIOS 里断掉内置电池供电,取下一切连在笔记本电脑上的外设,包括但不限于 U 盘、无线鼠标接收器、网线等
    • 显示器拔掉电源线,最好也把所有数据线也拔掉
  • 长按电源键
    • 笔记本电脑在 BIOS 断内置电池的情况下长按电源键不会开机,保持按下 10 秒以上,最好 15 秒或 20 秒。如果没有 BIOS 断内置电池的机型,大概率长按下会先开机,再自动关机,不管他一样按够时间
    • 显示器就是长按电源键,按够时间
  • 恢复
    • 笔记本电脑插外接电源适配器,正常开机就行
    • 显示器插好电源线和数据线,正常开机就行

原理:设备的 USB-C 控制器或雷电控制器进入了奇怪的工作状态,断电长按电源键是让其恢复默认状态,就是重置

优派VX2478-4K-HD使用12V5A电源可以消解绝大多数故障

公司在 2020 年开始分批采购了不少优派 VX2478-4K-HD 这款 23.6 英寸的 4K 显示器,官网在 https://www.viewsonic.com.cn/products/lcd/VX2478-4K-HD

从前两年开始,我们陆续有同事反馈这个显示器点亮后需要很久才能让电脑有显示信号传输过来,开机后也不会立即出现优派那三只彩色小鸟的 Logo,一度以为这么快就到使用寿命,后来在 https://www.v2ex.com/t/1068514 这里看到一个闲鱼大佬神奇的说法,这款机型的电路设计有问题,把原装的 19V 2.2A 的外置电源适配器换成 12V 5A 的就好

实践的确如此,我司已经有超过 70% 的这款显示器通过更换电源重获新生,淘宝上买的广东汕头发货十几块钱的「台达12V5A电源,接口55*25」都能用

使用 Advanced Font Settings 在 Chrome 系浏览器中正确显示中日韩字体

众所周知浏览器在某些场所会错误判断当前文字隶属的语言,然后会调用不同的语言对应的字体来显示,比如中日韩(CJK)共享的大量汉字,在不同的语言里显示字体不一样就会看着很别扭,对,就是 Twitter,现在叫 x.com 的上面,经常看到犬牙交错别扭的显示

哪怕在浏览器里修改了字体,但只对操作系统默认语言生效,并不对所有语言都有效,还是可能会回落到其他语言的默认字体上,所以需要 Advanced Font Settings 这个插件来解决显示不一致的问题

CJK 地区比较推荐使用 Noto 系列的字体,可在 GitHub 上 noto-cjk 这个仓库免费下载使用,虽然有下载说明,但我个人体验下来还是有一些奇怪,只下载通用文件可能是不够的,需要下载区域或语言特定的字体,所以我装完后一共有十个字体

  • Noto Sans
    • Noto Sans JP
    • Noto Sans KR
    • Noto Sans SC
    • Noto Sans TC
  • Noto Serif
    • Noto Serif JP
    • Noto Serif KR
    • Noto Serif SC
    • Noto Serif TC

在 Advanced Font Settings 里对默认语言选 Noto Sans / Noto Serif 不带后缀的这个,特别是浏览器和系统语言是英文的情况。其他几个语言必须要选带后缀的字体才能正确显示,对应关系分别为

  • 韩语 Korean: Hangul – KR
  • 日语 Japanese: Japanese – JP
  • 简体中文 Simplified Chinese: Simplified Han – SC
  • 繁体中文 Traditional Chinese: Traditional Han – TC

设置好后可以访问 https://yewen.us/font_test.html 来确认是否都正常渲染

记一次 VPS 全挂加数据恢复

最近 CloudCone 这个 VPS 供应商出了一次大锅,所有机器全挂加数据全丢,截止到本文发布时还没好,参考他们截止到发文时的故障说明 https://status.cloudcone.com/incidents/346624

用来使用各种 AI 工具的梯子没了找别的就是,但个人网站和一些数据都还在上面,还好很久之前配置了一个小脚本自动备份到 Dropbox,看了下网站数据基本都在,最近的 MySQL 备份好像挂了,但期间也没写几篇 blog,而且 RSS 输出的可以通过 Feedly 找回,人肉再补发一下好了

长滩游 part0

又一份十年前的草稿,直接发吧,看简要记录也有了,多年过去也没必要扩写,这个系列也不会有更多 part

加入美登后维持每年一次出境游的惯例,2015-2016 是在 2016 年春节后去了菲律宾的长滩岛。当时有简单记录一下给第二波的人做引导 https://www.yewen.us/blog/2016/03/tips-for-boracay/,为了给自己一个纪念,也为了顺带宣传下公司福利,好好记一下

本来看预定的时间快到莫莫预产期,今年出境游就算了,还是安心在家呆着吧,家喵表示你跟家里人都说下免得自己怨念,结果喵妈倒是很鼓励的说让他出去玩啊,你离预产期还有好一段呢,怕什么怕,于是变成了喵把自己坑掉,狗出去了快一周

一开始定地点还纠结了好久,因为公司业务特点没法大家一起走,必须分两拨,这样每一次人不会太多,找旅行社定制行程就有点贵,加上预算和办签证的时间限制,日本台湾啥的也去不成,最后定了长滩岛,一开始笨狗只想到了美帝哪里有个长滩,一查才发现原来是菲律宾的一个旅游海岛。公司通过途牛还是哪里找的自由行,说是自由行,其实从杭州出发一直到酒店入住,全程都有导游陪同。国内段一个,负责出入境到那边下飞机出机场,不过后面也会一直跟到酒店;在菲律宾时一个,出了机场在菲律宾境内就听他的。回程类推

出发那天按国内导游的指示说晚上十点要集合,其实是大约十点半才开始值机安检,我们第一波走的太谨慎,到机场太早然后干等了很久,而且我们很失误没有带点 UNO 啥的消遣,在机场傻等了很久。在机场碰到一个伦敦小哥,很热情跟周围各种人搭讪,笨狗本来只是顺便帮忙替他和周边的国人翻译了一段,后面无聊也跟他瞎扯了好一会,也挺有意思的,那哥们做运动服饰生意,过来杭州周边拜访供应商,前面去过深圳广州上海,到杭州吐槽地方都太远了,住处出来要坐好久车,去拜访的供应商估计都在诸暨义乌这些地方,来回是够折腾,然后那几天刚好杭州冷的要死,小哥一身单衣在雨天逛的西湖,想想都哆嗦,在机场碰到是他要去清迈了,刚好我们去年也去过清迈,又有共同话题,小哥一直表示那边要暖和且便宜舒服很多,杭州真的是冻死了,跟他解释杭州在中国一般是被认为是南方,被他吐槽特么冷成这样你告诉我这是南方?作为 IT 男,很关心了下对方在大陆怎么解决通讯问题,看起来是买了张类似神州行的不记名卡用,那个小哥主要用的 What’s App,居然没有被墙,想加我们但是我们好像没一个人装了这货

这种相对便宜的行程必然是红眼航班,半夜的飞机凌晨到。来回说是旅行社包机,其实就是各种渠道凑的散团最后会由两三个导游带着,同行的其他人多半素质堪忧,比如各种大声喧哗、飞机上各种来回乱跑,这次还遇到在你前后脱鞋睡觉熏死你的奇葩。因为大陆和菲律宾的关系紧张,个人签证似乎很难办,团签也是另外的纸条,不会在护照上留下任何菲律宾的出入境痕迹,出行前护照什么的一开始都在国内导游身上,等他办好登机牌后才发护照和登机牌给我们,所以还必须得跟着导游走才行。关于这种又想赚游客钱但是又要维持国体的事情,大家后面也欢乐的吐槽了好久,似乎越南也是类似的?南海周边国家都这样么?

新同事 Luffy 在前公司离职前刚好赶上他们也是去长滩岛旅游,他们回来的飞机就是我们走的飞机,按他们的时刻表应该是晚点了挺久,但按我们出发的时刻表似乎没晚点,他们返程时正是杭州最冷的时候,估计下飞机后冻的够呛。去的航班是亚航旗下某个菲律宾小廉航的 A319 执飞,全机经济舱,路上发了份很难吃的饭,一小瓶封口像哇哈哈钙奶的矿泉水,跟熊吐槽为啥要这么发水,给个普通瓶装的没喝完下飞机还能继续喝,难道瓶盖成本这么高?

凌晨四五点到达卡里波国际机场,下飞机的时候天已经蒙蒙亮,一出机舱潮热扑面而来,过关出机场我们这个散团被一辆当地大巴接上,后面到酒店的行程就是在当地导游的指挥下前进。去长滩岛有两个机场,一个是我们去的这个距离还有大几十公里外的卡里波,好处是国际机场可以直飞,坏处是从机场到上岛的码头要坐快两个小时大巴,另一个离上岛码头很近,但是机场小只能菲律宾国内飞过去要转机,不过看更近的那个机场似乎在扩建,不知道会不会以后也能直飞过去

当地的导游看起来应该是东南亚的华裔,或者闽南语地区过去的人,中文说的一股港台腔,在大巴上忽悠我们不要在当地随便报旅游项目,会有人身危险什么什么的,他们那边有更合规合理的项目怎样怎样,我们大家都没理他。菲律宾比索在国内只能换到 1000 面额的大钞,菲律宾又有一个很奇葩的出入境外汇现金限额,出行前我们每人拿了 1w 的比索和 200 美金,一路还想如果要零钱买水或付小费怎么办。当地导游在大巴上很体贴的跟我们说他可以提供换汇服务,人民币兑比索 6.50(中间价一般在 7 以上),不过如果有比索没花完,回程时还可以找他按这个汇率换回人民币,我们都没换返程时也没见人真的跟他大额换回,估计也就是个说头。另外当地导游允许每人从他那换 1000 的零钱,给的大概是 500/200/100/502/205 这样的。从卡里波去上岛的码头半路经过一个小服务区,大概也就国内一个加油站的规模,下车找当地导游换零钱,买水再破开,目测当地饮品价格跟国内差不多,类似的旅游点或宰客区更贵。关于各种游记上提到路上搬行李的小费,导游表示他都统一给了,回程时每人给他 100 整就好,每次 20,来回上下岛共四次,酒店搬行李一次

出发前在万能的淘宝预定了个一日浮潜跳岛行程,准备了手机卡和充值卡。感觉菲律宾的移动运营商在游客友好度上完全不考虑,非得是一个裸 SIM 卡然后充值,继而发短信选不同的流量或通话套餐,但是为啥不直接弄个一周预充值的套餐,大家不用思考,价格也差不多。我们用的是 Globe 这家运营商,下飞机后在大巴上插卡充值选套餐,发现淘宝卖家说可以多个套餐叠加的其实并没有,最后只用了 supersurf200 这个 200 比索 5 天无限流量的套餐,反正在那边也不会打电话发短信,有信号的地方互相微信视频联系,没信号的地方电话短信也没用

到达长滩码头时惊呼海怎么可以这么清,真的是水晶一般透亮,直接能看到海底

再转乘小货车改装的双条车到酒店,吃饭,回屋睡觉,隔音差,出门只能靠酒店的班车,下午出门沿海滩瞎逛下,买椰子喝水,在菜场的 smoke 吃饭,咸,在 Dmall 买大桶水带回

迪士尼游记

在博客草稿箱里待了快十年,整理整理发出来吧

2016 年 9 月倒数第二个周末前的周三至周五,错开中秋节和国庆节,美登去上海迪士尼的纯玩团建

Day1

中午从杭州公司集合出发,大巴到迪士尼换乘区,外围酒店办入住

打车去迪士尼,在迪士尼小镇看夜场的狮子王音乐剧。开场那个神棍山魈是个外国大妈扮演的,咕哝了半天最后半嘲讽问台下「听懂了么?」,过程中感觉还是有看过三部狮子王电影的背景知识会更好,有很多细节和剧情能更好连接上。中间似乎还遇上了技术故障停了一会。开场前和结束后在迪士尼小镇的商店逛了下,这里还有一个乐高旗舰店,在当时国内乐高还没大规模开线下店时还是很值得逛一下的

Day2

早上从外围酒店地铁过去,在入口排队,全程绝大部分时间跟熊一起,也没有刻意排单人队伍(那时候上海迪士尼可能还没有特别有单人队伍?)

进园后速度冲到了飞跃地平线,基本上是第一拨刷掉,没有太多故事情节,跟多年后去北京环球影城的哈利波特禁忌之恋比,就是第一次体验类似游戏的新奇感

排了比较久小矮人矿车,是一个比较儿童向的过山车,如果不是带小朋友,或者是对过山车类又菜又爱玩,建议优先级放低。同比北京环球影城就是哈利波特那个鹰马飞行

正常耗时排到了创极速光轮,意犹未尽回去二刷,熊前面其实跟朋友来过一次,感觉他并不是太想刷这个,有点舍命陪君子 XD

错过了加勒比的演出,本来说这块区域要大修我们去的时候是最近一两年能刷到的最后机会,后来好像也再没去过迪士尼了

玩过太空区、独木舟以及雷鸣山旁边的探险,排队太久都不太划算。去冰雪奇缘的欢唱会,大部分观众其实是不会唱的,自己当时好像也就会一两句 Let it go 和 Do you wanna build a snowman,交互起来就有些尬了

园区里吃的太贵,而且等吃的都很耗时

花车游行比预想的无聊一点(快十年后再回顾这句话,迪士尼的花车游行相比较环球影城的,已经要好很多了,至少很多角色都是知道背景故事的……

很神奇的意外偶遇到了离当时快十年前在百度实习时的同事,看起来是度厂的某个团队也来团建

看过晚上的烟火后,卡着闭园时间坐地铁撤

Day3

早上继续地铁过去,入口处感觉就不太妙,遇上大批团队游客,入园就排长队

进去后刷雷鸣山漂流,耗了快一个上午排队,体验好感度被拉低超多

中午出去迪士尼小镇吃饭,没去排网红火鸡腿,据说口味也不咋滴(快十年后在环球影城吃到过火鸡腿,hmmm,果然不好吃,好吃的话中国人不会放弃加进日常菜单的

下午在城堡前的最佳位置看演出,结束后意外地很快刷到了旋转木马,算是回到小朋友心态,到迪士尼这样的童话王国总要打卡一下城堡和旋转木马吧

因为下午要求集中回杭州,导致 d3 的有效游玩时间其实并不长……

经验

本次三天游,第一天下午才到上海,园外看演出,第二天刷满一天,第三天因为下午回程,实际玩的就半天且还是前半日

从后来去北京环球影城的经历看,如果自己去,第一天下午晚上半日票,晚上住园区酒店,第二天提前进园刷满一天的安排会更好点,期间该钞能力走快通的就走快通,或者利用晚上闭园前和早上提前进的时段去刷平时排队要很久的项目