2025-06-26 11:23:08
大赛报名活动已截止,现在进入了打分环节。 客户让我们自测一下系统是否有问题。😅 又是没有意义的工作内容,哎!
作为北半球最专业的手动测试小天才,我感觉还是有必要写一下测试流程的。 否则这么枯燥的事情,很容易就懈怠导致遗漏。
没想到还找到了两个 bug
好了,收工。去干点正事了。
我发现不用 VSCode VIM 插件,打字的速度快多了。输入中文的情况下,还是不要使用 VIM 插件为妙。各种 bug。
2025-06-25 20:52:34
Windows 11 下,在新的 SSD 上安装了 WSL2 之后,不知道什么原因,只要开了 WSL,大概率会遇到 CPU 暴涨至 60% 以上。
不开 WSL,CPU 则 10% 以下。
本来以为是 WSL2 中 MySQL 的锅,没想到,今天进入 Ubuntu Top 了一下,发现是 Node 造成的。
这个 Node 进程是用来编译 Ant Design Pro 的,把 Node 干掉就恢复正常了。
第一次遇到这个问题时,我只想感觉干掉这个进程。但是除了重启和注销,没有可行的办法。 在任务管理器里,是无法直接 kill 掉 VmmemWSL 进程的。
可以参考这个 github 的 issue:
https://github.com/microsoft/WSL/issues/9592
打开 PowerShell 执行:
taskkill /im wslservice.exe /f
世界就清净了。
2025-06-25 15:04:42
之前基于 SocketIO 实现了一个 Rasa 的自定义 Channel,参考 对话机器人 Rasa(三十二):新建一个基于 socket.io 的自定义 channel。
但是,实现的第一版有一个问题,就是当客户端连接时,默认会收到所有在线设备的消息。
从现象上看,应该是 socketio emit 时没有指定 room,导致所有在线的客户端都能收到消息。
参考 socketio 的文档,emit 时可以指定 to/room 参数来限制消息的接收者。
https://python-socketio.readthedocs.io/en/v4/api.html
async emit(event, data=None, to=None, room=None, skip_sid=None, namespace=None, callback=None, **kwargs)
Emit a custom event to one or more connected clients.
参数说明:
rasa 自带的 socketio 的实现,emit 时,指定了 room,所以只会收到指定房间的消息。
~/miniforge3/envs/rasa/lib/python3.9/site-packages/rasa/core/channels/socketio.py
原代码:
async def _send_message(self, socket_id: Text, response: Any) -> None:
"""Sends a message to the recipient using the bot event."""
await self.sio.emit(self.bot_message_evt, response, room=socket_id)
而我为了方便测试,把 room 参数去掉了。
但根本的问题在于,我的实现,没有将每个连接的用户加入到对应的房间。 也就是没有调用 enter_room 方法。
所以,只需要在 handle_message 方法中,加入以下代码即可:
await self.sio.enter_room(sid, data["sender"])
在 Socket.IO 服务器端,同一个 sid(客户端连接 ID)可以多次加入同一个房间(room),但实际效果等同于单次加入,不会产生重复成员关系
emit("session_confirm", data["session_id"], room=sid)
作用是:
当客户端通过 session_request 事件请求会话时,服务端会生成或确认一个 session_id,然后通过 session_confirm 事件把这个 session_id 发送回给当前连接的客户端(即 sid 对应的 socket 连接)。这样客户端就能拿到自己的 session_id,用于后续通信(如加入房间、消息同步等)。
流程:
这样可以保证每个连接都能拿到唯一的会话标识,实现消息的定向推送和隔离。
其实,把用户的输入,直接 emit 也是可以的。 这样就能实时看到对方的输入,而不需要等待从回复信息里解析输入。
docker compose logs -f --tail=100 rasa_core
具体错误信息:
await self.sio.enter_room(sid, data["sender"])
TypeError: object NoneType can't be used in 'await' expression
https://github.com/miguelgrinberg/python-socketio/issues/1256
应该是 socketio 这个库的版本不同,enter_room 在旧版本中是 async 的,但是在新版本中不是 async 的。
所以,文档里是对的。
因为低版本的,如果不加 await 不会报错,但是会导致并没有加入房间,于是收不到消息。 而高版本,加了 await 就会报错。
所以,在使用 await 之前,判断一下 enter_room 是否返回 None。
2025-06-23 16:03:26
我是一个不记录笔记,就无法正常工作的人 😓。
之前也尝试了各种记录的方案。例如:
每个方式,都坚持过一段时间。但是,我发现自从有了 github copilot pro 之后,笔记记录在项目中是最方便的。 基于无限使用的 gpt 4.1 模型,github copilot 可以实时理解我的需求,并且辅助我编写文档和笔记。 甚至可以节省我去 Google 搜索的时间。
同时,我发现记录在项目中也有更多的优势:
一天只搞一个项目。这样笔记就能更集中,思路更清晰。晚上回家也可以继续这个项目。
先这样试用一段时间,看看效果如何。
唯一不方便的是,如果 git 项目只有我一个人参与还好,如果多人的项目,在里面记录一些不沾边的笔记,就非常尴尬了 🥲
还是独立的 markdown git 仓库存储笔记比较方便,可以随意写,没有顾虑 😊
2025-06-23 15:20:21
在 VSCode 中使用 VIM 插件写代码时,经常会因为当前在中文输入法下,导致各种奇怪的现象。 例如,
非常之不爽,我一度想放弃 VIM 插件,甚至干脆不用中文 🥲,但是,这不现实,因为好多界面需要中文描述。
在 VIM 插件退出 Insert 模式时,自动切换回英文输入法。
VSCode VIIM 插件的官方文档里,恰好有相关的配置。参考:
https://github.com/VSCodeVim/Vim#input-method
Input Method: Disable input method when exiting Insert Mode.
im-select
,需要安装这个命令行工具。"vim.autoSwitchInputMethod.enable": true,
"vim.autoSwitchInputMethod.defaultIM": "1033",
"vim.autoSwitchInputMethod.obtainIMCmd": "D:\\apps\\im-select.exe",
"vim.autoSwitchInputMethod.switchIMCmd": "D:\\apps\\im-select.exe {im}"
注意,github 上 im-select 的下载地址在这里,项目 readme 里的链接 404。
https://github.com/daipeihust/im-select/issues/72
在 Windows 下,输入法的 ID 是一个数字。可以通过以下命令获取当前输入法的 ID:
> im-select.exe
1033
> im-select.exe
2052
图形化的配置界面,看不太懂。不如直接修改配置文件,更简单直观。
ctrl + shift + p 打开命令面板,输入 settings.json
,选择 User Settings,开配置文件。
实际就是一个 json 文件。
User Settings 跟 Workspace Settings 的区别是前者是全局配置,后者是当前工作区的配置。
会发现,只要按下 ESC 键退出 Insert 模式,输入法就会自动切换回英文输入法。 非常完美。
但是,目前还是有一些小瑕疵
2025-06-17 10:00:55
我发现 claude 3.7 AI 在生成 Android APP 项目代码时,完全不参考当前项目的开发语言。 例如,项目是 kotlin 的项目,AI 默认生成的代码居然是 Java ...
看来,必须在提示词上多下点功夫,避免绕弯路。
## 技术栈
- 编程语言:Kotlin / Java
- UI 框架:XML Layouts (Views) / Jetpack Compose
- 核心库/组件: (列出关键依赖,例如:ViewModel, LiveData/StateFlow, Room, Retrofit, Hilt/Dagger, Navigation Component, WorkManager, Coil/Glide 等)
对于我来说,使用下面的足够
## 技术栈
- 编程语言:Kotlin
- UI 框架:XML Layouts (Views)
我甚至找到了一个在线售卖 Android Dev 提示词模板的网站,这细分领域也是没谁了。
github copilot 里的 claude 3.7 写 Android 原生 kotlin,确实不太行。界面设计难看,bug 一堆,逻辑也不通。完全不如写网页的效果。也不知道是不是我的提示词问题。
昨天在 Android Studio 试了试豆包家的 Trae 插件,写出来的 toast 让人哭笑不得。直接一个
showToast(''xxx")
我只想说,are you ok?
可能提示词上,或者项目结构上还是得优化一下。
转念一想,也未必是坏事,如果 AI 写 Android 原生能力不太行,也许说明这个方向还有一点技术门槛,竞争没那么激烈吧。。。
恰好在 reddit 上看到一个帖子讨论
Claude 4 Sonnet is the best model for Android dev (per Kotlin-bench)
https://www.reddit.com/r/androiddev/comments/1kttvd4/claude_4_sonnet_is_the_best_model_for_android_dev/
issue 解决成功率,claude 4 比 3.7 搞了 10 个百分点。
不过,下面的评论也很扎心。
感觉问题的根源,还是网上 android 原生开发的代码太少了,我很多时候根据 Google Android 官方文档的教程,都找不到相关的示例代码,新的组件对应的资料极少,用的人都不多。导致 AI 的训练数据就少的可怜。那训练出来的模型能靠谱么?😮💨
早上有人推荐我用 React Native 代替 Android Kotlin 开发,也是个办法。。。但是,我嫌 RN 的包体积太大了,不环保。我也没有 iOS 多端支持的需求,况且我想搞搞桌面组件的开发,先用着 Kotlin 吧。