在聊聊我用过的机械键盘里介绍了我在去年入手一把 HHKB Type-S。在 渐渐熟悉了 NeoVim 后也是越来越顺手。
在上个月还入手了一套山葵键帽来增加一下春天的气息。
然而在换好键帽不久就发现在电脑唤醒后,键盘蓝牙链接不上的问题。
之前 AWS 的工程师来公司介绍 AWS Q Developer(以前的 Code Wisper)。其突破对话框,可以直接在命令行执行各种指令的能力着实让人心动。
后面和朋友聊天时,朋友推测应该是 MCP 集成的比较好。于是在想有没有不用打开 Windsurf 就能调用 MCP 的客户端?(其实 Claude 就是,只是当时并不知道)
在 Windsurf 的一次更新后,发现多了个 MCP 服务选项。外加多次在猫鱼周刊上看到相关文章,便开始了解和关注 MCP。
我自己理解大模型和 MCP 类似 VSCode + 各种插件。MCP 可以让大模型通过通用协议调取不同资源。
利用 MCP 的能力可以让大模型跳出对话框,直接对系统进行操作。人就可以免去复制黏贴的步骤,直接下指令。
黄叔有一篇非常易懂的实践文章 10分钟搞定高德地图MCP!我用AI解决了约会地点选择难题 ,看完就能明白 MCP 在其中的作用。
原文地址: Node.js Now Supports TypeScript Natively: Everything You Need to Know 作者: Lizz Parody
原本发表于 2025 年 3 月 18 日。因为工作关系对 Node.js 支持 TypeScript 比较关注,就顺手记录一下自己关注的部分。
本文并非原文的直接翻译,仅挑选出了个人关注的部分。感兴趣的朋友可以去原文查看完整内容。
上周看了阿猫的使用 Cursor 进行 Code Review(简易版)后,大受启发。随即打开我的 Windsurf,看看能否也通过配置相关规则,挖掘一下潜力。
作为构建浏览器的人,我需要解析大量的 URL。一部分是为了验证它们,另一部分是为了规范或者获取 URL 中的某些部分。浏览器中的 URL API 可以让你做到这一点,但其体验并不理想。
new URL()
的 new
代表它可以被用作构造函数:调用它可以创建一个新的 URL 实例。但当你传入一个无法被解析的 URL 时,它就会抛错。因此,你需要编写错误处理的代码。
如果你不这么做,那得不到处理错误会中断你的 JS 代码。下面的代码看上去不错,但如果 urlstring
格式错误,它就会终止:
const urlstring = "this is not a URL";
const not_a_url = new URL(urlstring);
// Uncaught TypeError: URL constructor: "this is not a URL" is not a valid URL.
因此,你需要将它们放到 try/catch 中,用来捕获错误。
码农 10 年,用过近 10 把键盘。从有线到无线、全配列到 60% 配列都有。恰好翻到了一些键盘的照片,索性也来聊聊我用过的那些键盘。
键盘是需要磨合的,根据每个人的使用习惯、使用场景以及个体感受不同而不同,并没有一个固定的标准。尽管用过不少,我自认还是属于键盘小白范围,也没有玩过客制。本文也完全是个人主观感受。
第一把机械键盘,在日本工作时跑了半个秋叶原才找到的一把英语配列键盘。当时并不懂,只听说青轴声音清脆手感好,就入手了。
- 原文地址:https://betterprogramming.pub/typescript-with-go-rust-errors-no-try-catch-heresy-da0e43ce5f78
- 作者:Mateusz Piorowski
那么,让我们先从我的一些背景开始。我是一名十年左右经验的软件开发者。最初使用 PHP,后来转到了 JavaScript。
我开始在 5 年前使用 TypeScript,从那时起,我便再也没有回到过 JavaScript。在我使用 TS 的那一刻,我认为它是世界上最好的编程语言。每个人都喜欢它;每个人都会用它……它就是最好的,不是吗?是这样吗?真的是这样的吗?
- 原文地址:https://www.builder.io/blog/structured-clone
- 原文作者:STEVE SEWELL
你知道现在 JavaScript 有一种原生的深拷贝方法吗?
没错,就是 structuredClone
方法。该方法已内置于 JavaScript 运行时中。(译者注:Nodejs > 17)
const calendarEvent = {
title: "Builder.io Conf",
date: new Date(123),
attendees: ["Steve"],
};
// 😍
const copied = structuredClone(calendarEvent);
你是否注意到在上面的例子中,我们拷贝整个对象同时也拷贝了内嵌的数组甚至是 Date
对象。
AI 这个词很大,它能达到的高度也是目前难以望及的。我觉得作为普通人,想法和行动可以朴素一些:就是把手头的活,与 AI 结合好,一点点来。慢慢地,你会发现自己融入了这波技术洪流,并被它推至一个前所未有的世界。这件事确实让人兴奋。
上一篇文章聊了一下我对 AI 的感受与变化。这一篇就来分享一下我一个普通人在日常使用的 AI 工具以及一些提示词的小技巧。
注: 日常使用,完全主观,个人感受仅供参考。
一个 4 年没做前端的 “前” 前端开发,在 ChatGPT(3.5)的帮助下,只用了一个下午就用 Vue3 + Vuetify 完成了 3 个完整带交互的页面。
提交代码后最直观的感受是:前端要被代替了 。放在 4 年前,同样的需求在不熟悉 Vue3 的前提下至少需要 2 天左右的时间。如此巨大的变化,让我有点庆幸还好转去了后端。但,后端就不会被代替吗?
这是之前方位动画的衍生需求。先根据后端返回的数据排列内容,然后当用户点击某块内容后居中放大并根据具体的方位数据显示方位动画。
可以参考下面的效果。
这是最近遇到的一个有点意思的需求,需要根据后端返回的数据,在一块地图的具体的方位上显示对应位置标识(位置图钉)。不用十分精确,只要能表现出大致的方位即可。
类似下面的效果,有点像游戏里的地图标识。
在目前的工作中,Bitbucket 同时被我们用作代码仓库和私有 NPM 仓库。通过 git+ssh
指定 tag
来安装依赖,对于纯 JavaScript 的项目十分方便。
随着部分依赖开始使用 TypeScript,基于现有使用方式,需要对这部分依赖采取下面的一种方式进行管理。
dist
文件提交到主分支上。postinstall
中进行编译。当依赖被安装后,就会自动编译。但无论哪种方式,都会有一些瑕疵。
dist
提交到主分支上,在做 Code review 时会额外多出许多文件干扰,项目结构也不优雅。postinstall
的方式对于纯 JavaScript 的项目就需要额外安装 typescript
,同样不优雅。出于人力以及迁移仓库的成本考虑(我们有近 100 个依赖,且每个依赖有许多版本并且被不同的服务引用),对此只能通过改进 Git flow 来解决上述瑕疵。
工作中搜索和查阅的文档以英文居多,于是便想着也改造一下自己博客。支持多语言的同时,顺便也算是给新的一年开一个头。
这次改造的目标有两个: