解决 Vue DevTools 中的 Open in Editor 错误唤起 Notepad 的问题

其实从 切换主力编辑器到 Cursor 开始,我的 Vue DevTools 插件中的 Open in Editor 功能一直都有问题。当时始想着都切换到 Cursor 了,再用 VS Code 来打开组件就不太合适了。所以就按照推荐的使用 Shell Commands 命令执行 Install 'code' command 直接把 Cursor 注册进去,以为就搞定了就没有再去验证。
实际上并没有注册成功(也不知道是不是因为我的受控账户所以没办法直接操作环境变量)。直到后面某一天调试的时候,突然发现并没有和预期的一样使用 Cursor 打开,而是直接通过 Notepad 记事本打开了对应的 .vue 文件!
重新执行 Shell Command: Install 'code' command 也没有效果。那我想着注册不行的话,我先恢复成 VS Code 打开拖动到 Cursor 里面先用着等有时间了再解决。结果执行完 uninstall 之后使用 Open in Editor 功能还是使用的 Notepad 打开的组件文件,我就裂开了 🤯。

但是当时开发任务又紧张,可以看到我有很长一段时间都没有更新博客也能发现。但是最近有时间了,就可以着手解决这个问题。

阅读全文

FireFox 真的不支持自定义滚动条样式吗?

刷到一个帖子问 Firefox 是不支持网页的滚动条样式吗?,说有些网页会呈现自定义的滚动条,Chrome 和 Safari 打开是正常的,但是 Firefox 只会显示默认的样式。

我的映像里也是这样的,FF对于支持滚动条的样式自定义并不是特别好,有一些属性会有问题。
但是为了回复更有价值和佐证,我还是去 MDN 上面检索了一下相关的 CSS 样式属性,但是查询出来的是 FF 是支持的而且是很早期就支持了,反而是 webkit 内核的浏览器早期对于滚动条样式的支持有问题!

CSS_scroll-bars-caniuse

这就很奇怪了,难道是我记忆错误了?

阅读全文

关于八股文面试题

这篇分享的起因是昨天在V站刷到一篇帖子,如何用 3–5 个高效问题快速识别 Golang 开发者的技术素养? 里面提到了我对于八股文面试题的看法。

都要出来面试了,但八股文都不愿意花点时间背,态度很明显就是有问题的,被刷掉也很正常。

从前我也是很讨厌面试时遇到各种八股文面试题,会觉得很无聊和无趣。因为是纯靠背的东西,面试考这些就很蠢。
但是慢慢接触了更多开发者之后,甚至自己面试别人多了之后,就会发现这些看起来很呆板的八股文面试题,其实起到了好几种作用,比如说:

  • 筛选不做任何面试准备的面试者;
  • 给初级开发在前期建立知识库。
阅读全文

为什么空白的 inline-block 元素会创建高度,而空白的 inline 和 block 元素不会?

去年2月份的时候在思否刷到一个问题 👉 span的display为inline-block 和inline的时候对父级元素高度的影响?
当时就觉得很奇怪,以为是一些其他的CSS属性影响导致的,但是问题后面提到了参考链接里面具体说了原因,只不过OP没有很好的理解,我也没有很好的理解。
因为就算是IFC的问题,inline-blockinline 元素的表现应该是差不多的。但是实际情况并不是这样,只有 inline-block 是特殊的情况。

一年多的时光中有几次想捋清楚这个问题,但是又因为各种借口搁置了,今天终于逮起劲来准备解决掉这个疑惑。

以下是当时写的一个复现Demo,只会显示子元素是 inline-block.container 会有高度(显示红色)。而子元素的 inlineblock.container 并没有高度,所以不会显示(蓝色和绿色)。

不同display类型的预览图

很奇怪是不是?

阅读全文

【娱乐向】使用AI分析自己在社区中的用户画像

在V站看到了一个有趣的分享提取用户在V站的回帖来分析用户画像。觉得很有意思,就把油猴脚本安装下来跑了数据,让AI来分析一下自己,看看自己在社区的形象是怎么样的。
其实更早的时候有过一个 wordware-ai/twitter 的项目,用于分析用户在 Twitter 上面的发言。但是我的 Twitter 就几乎没有发贴过,所以完美错过了那次的狂欢。

一边在跑数据,一边就在看其他用户的回帖。但是在陆陆续续看了多个用户分享的自己的用户画像分析析之后,明显感觉到了严重的隐私焦虑

很明确的,用户在社区中活跃度越高,那么不可避免地暴露出来越多的隐私信息。

即便已经在各种回帖中模糊混淆了人物以及地区名词。虽然AI可以被误导,但大体上仍然可以分析出来很精准的用户画像。要是再结合一些其他的社交APP数据,我觉得很快可以精准的定位到现实中的某一个身上。

如果你对AI对于我在社区中的用户画像感兴趣,可以点击阅读全文查看。一共尝试了 DeepSeekKimiGPTGeminiGrok 5款AI产品。

阅读全文

No Coding Today 和 Vibe Coding

前些天在V站回复 远程工作中,如何避免 Burnout(过劳) 的时候提到了 Anthony Fu。突然发现了 AntFu 居然主持了一档播客节目 —— 尖不想寫扣 No Coding Today
就开始慢慢听这档播客,现在听到了他们在聊 Vibe Coding,突然就解开了我关于 Vibe Coding 的一些疑虑。

在此之前,我对于 Vibe Coding 的看法是:

Vibe Coding 只需要关注需求实现,而不是具体代码实现。所以大部分的使用者会是非开发专业的用户。
就好像我们使用AI去文生图一样,通过调整 Prompt 使得 AI 的产出实现 or 靠近自己期望目标,并不关注 AI 是怎么生成和具体的内部实现。

所以我一直觉得 Vibe Coding 的模式并不适合专业开发者,但非常适合快速 MVP 或者一次性工具类项目的场景。基本上只需要几句话就能在本地快速实现一个 Demo 去和客户 or 业务方确认需求,然后再在这个基础上去扩写功能。或者说像 JSON 数据处理和分析、图片 & PDF 的合并压缩这样的一次性工具类小项目,而且可以随意调整各种配置,来获得一个符合预期的内容产出。这些原本需要交给一个实习生花费很多时间去处理的。

阅读全文

Vue3 中创建 useHooks 遇到的一个 TS 泛型和 Reactive 响应式类型冲突的问题

TIP
不推荐使用 reactive() 的泛型参数,因为处理了深层次 ref 解包的返回值与泛型参数的类型不同。

这段时间总算是得空可以把早些时候快速开发时期挖的坑填一下了,所以准备着手改造一下前人遗留下来的 useTable 这个组合式函数。
期望可以在使用 useTable 的时候可以正确推导出来 tableDataqueryParams 对应的数据类型。

一开始的改造非常顺利,使用泛型可以正确的推导出来我需求的属性类型,直到我遇到了下面这两个TS告警:

Cannot assign type 'T[]' to type 'UnwrapRefSimple<T>[]'. ts(2322) 
不能将类型“T[]”分配给类型“UnwrapRefSimple<T>[]”。ts(2322)
Argument of type 'T' is not assignable to parameter of type 'UnwrapRefSimple<T>'.ts(2345)
类型“T”的参数不能赋给类型“UnwrapRefSimple<T>”的参数。ts(2345)

当然可以选择简单暴力的使用 as 来解决这个问题,但是我总觉得是不是有一些其他更好的方式来解决。

阅读全文

复制文件并且保持文件Git变更历史

直接复制并提交

几个月前在V站看到一个帖子。OP想要把文件复制出来一份,并且保留文件早前的变更历史。之前我还不理解为什么OP要这样做,直到最近我在改造一个公共 utils 文件时也突然冒出来了这个想法。所以也是想尝试一下看看。

阅读全文

一个关于 Date() 构造函数的误解

最近在业务中遇到一个使用 Day.js 创建 UTC 时间再转换时区的异常。纠正了长久以来一个自己对于 Date() 构造函数的误解。
展示一段示例代码,以便让大家来理解我的误解:

// 引入 dayjs 并扩展 utc
import dayjs from 'dayjs'
import utc from 'dayjs/plugin/utc'
dayjs.extend(utc)

// 示例时间文本
const demoTimeStr = '2025-08-20 00:00:00'
// 使用 dayjs 创建一个 UTC 模式的 dayjs 实例
const utcDayjsInst = dayjs.utc(demoTimeStr)
// 输出格式化后的时间文本
console.log('utcDayjsInst1.format:', utcDayjsInst.format('YYYY-MM-DD HH:mm:ss'))
// utcDayjsInst1.format: 2025-08-20 00:00:00

// 使用示例时间文本创建一个 Date 实例
const demoDateInst = new Date(demoTimeStr)
// 使用 Date 实例创建一个 UTC 模式的 dayjs 实例
const utcDayjsInst2 = dayjs.utc(demoDateInst)
// 输出格式化后的时间文本
console.log('utcDayjsInst2.format:', utcDayjsInst2.format('YYYY-MM-DD HH:mm:ss'))
// utcDayjsInst2.format: 2025-08-19 16:00:00

可以非常直接明显的看到两个UTC模式下输出的时间文本是不一样的。

当然在事后写回顾的时候真的觉得自己特别的蠢 😂,但确实在当时困扰了我一段时间。

阅读全文

记使用 VSCode 作为 Git 编辑器在 Rebase 时没有打开 GitLens Rebase Editor 的问题

设置默认Git编辑器 core.editorcommit message 编辑时) 和 序列编辑器 sequence.editor(比如 rebase 时)

git config --global core.editor "code --wait"
git config --global sequence.editor "code --wait"

GitLens Interactive Rebase Editor

长久以来,我一直都是用的 GitLens 来操作的 Git,特别是在 rebase 的时候,可视化的界面真的比原本的文本编辑好用太多。

最近因为 Github Copilot 高级请求限制的调整,计算了一下高级请求的用量,其实改版后的 Copilot 价格和 Cursor 已经持平。所以准备迁移到 Cursor 开发一段时间(Cursor 的辅助编程体验要好太多了)。

但由于太久没有调整过 VS Code 的配置项了,在同步配置项到 Cursor 之后发现 git rebase 时,没有按照预期打开 GitLens Interactive Rebase Editor 就是上边的动图中的交互编辑器。一直都是在 Cursor 里面以文本编辑的形式打开了 git-rebase-todo 的内容。

所以记录一下如何调整和启用。

阅读全文