乔人尹 - 作品/创作
type: channel
link: https://underestimated.cn/category/works/
description: 热爱可抵漫长debug
items: 为什么我们都知道要早睡，却还是熬到了凌晨
items: 如何训练一个YOLO目标检测模型
items: 如何编写一个手机自动化脚本
items: 手机任务执行帮手-'机辅'

为什么我们都知道要早睡，却还是熬到了凌晨
type: item
date: 2026-06-03T04:12:00+00:00
description: 一、那个我们都太熟悉的夜晚时间已经是凌晨一点。你躺在床上，手机屏幕的光打在脸上。你很清楚自己明天要早起，很清楚现在该睡了。这条短视频看完就睡。这一局打完就睡。这一章看完就睡。然后又是一条。又是一局。又是一章。你不是不困。你只是舍不得结束这一天。白天属于工作，属于责任，属于各种不得不完成的事情。只有深夜的这一两个小时，好像才真正属于自己。心理学里有个词，叫做「报复性睡前拖延」（Revenge Bedtime Procrastination）。明明知道熬夜伤身，却依然舍不得睡，因为这是一天里仅剩的自由时间。可问题是，第二天醒来，你并不会觉得自己赚到了。你只会觉得累、觉得后悔、觉得新的一天又从亏欠开始。于是，一个很多人都经历过的循环开始了：flowchart LR A["白天被工作和责任占满"] --> B["深夜想夺回属于自己的时间"] B --> C["刷手机停不下来"] C --> D["越拖越晚才入睡"] D --> E["第二天疲惫和后悔"] E --> A后来我们发现：问题从来不是不知道早睡的重要性。而是在最关键的那个瞬间，没有任何东西帮我们停下来。这也是《早点睡觉》诞生的原因。二、晚睡的账，总会在别的地方扣回来很多人觉得熬夜的代价不过是第二天有点困。但实际上，睡眠更像是身体每天固定安排的一次维护窗口。当你不断压缩这个时间，身体不会立刻报警。它只会慢慢开始降级运行。你可能会发现：黑眼圈越来越明显皮肤状态越来越差白天更容易烦躁注意力难以集中运动恢复越来越慢明明休息了，却总觉得没精神这些变化往往不是某一次熬夜造成的。而是无数个“再刷五分钟”累积出来的结果。更重要的是，长期缺觉会让人一直处于一种低电量模式。你能完成工作，能正常生活。但总感觉差了一口气。机会来了不想抓。计划定了不想做。想学习、想运动、想改变，却总觉得提不起劲。很多时候，不是能力不够。只是太累了。而早睡带来的回报其实非常直接：更稳定的情绪更清醒的大脑更充沛的精力一个不再匆忙的早晨早睡给你的不只是健康。它给你的是重新掌控生活的感觉。三、问题不是不想睡，而是真的做不到如果早睡这么重要，为什么那么多人依然失败？因为早睡从来都不是一个知识问题。而是一个机制问题。没有明确的界限“今天早点睡”是一句没有执行力的话。早点到底是几点？当目标模糊的时候，大脑永远能找到继续拖延的理由。手机天然就是你的对手短视频、游戏、社交媒体。它们的目标都是让你多停留一分钟。只靠意志力，本来就很难赢。错过困意窗口明明11点已经困了。结果又刷了半小时手机。到了12点反而精神起来了。然后一路熬到两点。追求完美，反而容易放弃11点10分还没睡。于是心想：“反正已经失败了。”然后直接熬到凌晨两点。很多时候，坚持最大的敌人不是懒惰。而是完美主义。没有反馈，就没有改变如果我问你：过去七天里，你有几天是在计划时间内睡觉的？大多数人其实答不上来。因为没有记录。没有记录就没有反馈。没有反馈就很难形成习惯。四、《早点睡觉》是怎么来的《早点睡觉》的第一个用户，其实是我自己。很长一段时间里，我每天都会告诉自己：再看五分钟。结果回过神来，已经凌晨一点多。第二天顶着黑眼圈工作。晚上继续重复。后来我发现：我的问题从来不是不知道熬夜不好。而是在最关键的那个瞬间，没有任何东西帮我停下来。于是我开始思考：如果有一个 App，不负责监测睡眠，不负责分析睡眠。它只负责一件事：让你在该睡的时候，真的去睡。于是《早点睡觉》诞生了。五、它帮你完成最难的那一步市面上的睡眠 App 大多关注睡着之后发生的事情。而《早点睡觉》关注的是：睡着之前的那十分钟。flowchart LR P1["没有明确界限"] --> F1["承诺睡觉时间"] P2["容易破罐破摔"] --> F2["允许误差"] P3["手机停不下来"] --> F3["黑屏警告"] P4["错过困意窗口"] --> F4["关键时刻提醒"] P5["没有反馈"] --> F5["10秒复盘"]每天一个明确承诺不是“早点睡”。而是：今晚 11:00 睡。给自己留一点余地允许误差15分钟。或者30分钟。这样不会因为一次小失误直接放弃整晚。在最关键的时候踩下刹车晚上11点。你正在刷第47个短视频。突然屏幕变黑。上面只有一句提醒：继续刷下去，明天的你又会后悔。很多时候，人需要的只是这样一次打断。用10秒复盘代替自责第二天早晨。打开 App。记录昨晚真实睡觉时间。只需要10秒。然后你会看到：连续早睡天数本周成功率最近七天趋势当前精神能量当进步能够被看见，坚持就会变得容易。六、你的睡眠，只属于你自己我们认为，睡眠数据是非常私人的东西。因此《早点睡觉》从设计开始就坚持一个原则：无需注册。无需登录。所有数据都只保存在你的手机本地。不会上传服务器。不会用于分析。不会被出售。因为我们根本拿不到。你的睡眠…

如何训练一个YOLO目标检测模型
type: item
date: 2025-12-31T00:00:00+00:00
description: 现在这个网站已经有了成品，请参考以下链接并试用 深度检测前言：一个生物多样性的梦作为一个 AI 架构师，我接到了一个很有意义的项目：开发一套生物多样性识别系统。目标很明确：识别各种鸟类（麻雀、喜鹊、白鹭、翠鸟...）识别各种鱼类（金鱼、鲤鱼、热带鱼...）识别各种小动物（松鼠、刺猬、兔子、蜥蜴...）应用场景包括：野外红外相机的自动物种识别水族馆/动物园的智能监控自然保护区的生态监测公民科学项目的物种记录技术选型自然是 YOLO——目标检测领域的当红炸子鸡，速度快、精度高、部署方便。然而，理想很丰满，现实很骨感。第一章：MacBook 的绝望——为什么我放弃了本地训练1.1 最初的尝试作为一个 MacBook Pro 用户（M4 Pro，18GB 内存），我天真地以为："Apple Silicon 不是很强吗？MPS 加速不是很快吗？训练个小模型应该没问题吧？"于是我开始了尝试：from ultralytics import YOLO # 加载预训练模型 model = YOLO('yolov8n.pt') # 开始训练 model.train( data='biodiversity.yaml', epochs=100, imgsz=640, batch=16, device='mps' # Apple Silicon GPU )然后...RuntimeError: MPS backend out of memory好吧，把 batch 改成 8：# 能跑了，但是... Epoch 1/100: 100%|██████████| 500/500 [15:32<00:00, 1.86s/it]一个 epoch 要 15 分钟，100 个 epoch 就是 25 小时！而且这还只是最小的 YOLOv8n，如果换成 YOLOv8m 或 YOLOv8l...1.2 MacBook 训练的残酷现实配置YOLOv8nYOLOv8sYOLOv8mMacBook M4 Pro 18GB勉强能跑OOM别想了每 epoch 时间~15min--100 epochs 总时间~25h--风扇噪音起飞--能否日常使用不能--问题总结：内存/显存不足：18GB 统一内存要同时跑系统和训练，捉襟见肘MPS 后端不成熟：经常遇到兼容性问题，某些操作不支持速度太慢：和 NVIDIA GPU 比，差距是数量级的影响日常使用：训练时电脑基本不能干别的事1.3 痛定思痛经过一番挣扎，我接受了现实：深度学习训练，还得是 NVIDIA GPU。MacBook 适合做推理、做轻量级实验，但大规模训练？还是交给专业的来吧。于是，我把目光投向了云 GPU 服务。第二章：AutoDL 初体验——云上炼丹的正确姿势2.1 为什么选择 AutoDL对比了几个云 GPU 服务：服务商优点缺点AutoDL便宜、简单、国内访问快高峰期可能没卡AWS/GCP稳定、配置灵活贵、需要信用卡、配置复杂阿里云/腾讯云大厂背书相对较贵Colab免费限时、断连、速度不稳定最终选择 AutoDL，原因：价格实惠：RTX 4090 大约 2-3 元/小时操作简单：网页端直接操作，支持 JupyterLab 和 SSH预装环境：有现成的 PyTorch 镜像，开箱即用数据传输快：国内服务器，上传下载速度有保障2.2 创建实例注册 AutoDL 账号（https://www.autodl.com）充值（支持支付宝，先充个 50-100 块试试）创建实例：GPU：RTX 4090（24GB 显存，性价比之王）镜像：PyTorch 2.0 + Python 3.10 + CUDA 11.8硬盘：系统盘默认，数据盘按需（我选了 50GB）2.3 环境配置SSH 连接到服务器后，配置训练环境：# 1. 确认 GPU 状态 nvidia-smi # 输出应该看到 RTX 4090，显存 24GB # +-----------------------------------------------------------------------------+ # | NVIDIA-SMI 525.xx.xx Driver Version: 525.xx.xx CUDA Version: 12.0 | # |-------------------------------+----------------------+----------------------+ # | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | # | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute …

如何编写一个手机自动化脚本
type: item
date: 2025-12-27T00:00:00+00:00
description: 前言：一个咸鱼玩家的觉醒事情是这样的。某天我下载了一款叫《咸鱼之王》的游戏。作为一个放置类游戏，它的核心玩法是——点点点。每日任务要点领奖励要点打副本要点抽卡要点合成要点……玩了一周后，我的手指已经开始抗议了。作为一个程序员，我陷入了深深的思考：我玩游戏，还是游戏玩我？于是，"猫吃鱼"项目诞生了——让脚本替我吃掉这条咸鱼。第一章：技术选型——为什么是 Auto.js1.1 安卓自动化方案对比方案优点缺点Auto.js无需 root，基于无障碍服务，JavaScript 语法官方版已下架，需要用开源版Tasker功能强大，生态丰富学习曲线陡峭，自动化能力有限ADB + Python灵活，可电脑控制需要连接电脑，不够便携按键精灵简单易用功能有限，很多要付费Root + 触摸模拟权限最高，啥都能干需要 root，有变砖风险最终选择 Auto.js（准确说是开源版 AutoX.js），原因：无需 root：基于安卓无障碍服务（Accessibility Service）JavaScript 语法：前端出身的我表示很亲切开源免费：AutoX.js 是社区维护的开源版本功能全面：控件操作、图色识别、悬浮窗、定时任务一应俱全1.2 环境搭建# 1. 下载 AutoX.js # GitHub: https://github.com/autox-community/AutoX # 下载 APK 安装到手机 # 2. 开启无障碍服务 # 设置 -> 无障碍 -> AutoX.js -> 开启 # 3. 开启悬浮窗权限 # 设置 -> 应用管理 -> AutoX.js -> 悬浮窗权限 # 4. 关闭电池优化（重要！） # 设置 -> 电池 -> AutoX.js -> 不优化 # 否则后台运行会被杀掉踩坑提醒：不同手机厂商的设置路径不一样，MIUI、ColorOS、EMUI 各有各的"特色"。有时候需要在"自启动管理"、"后台运行"等多个地方设置。第二章：无障碍服务——脚本的灵魂2.1 什么是无障碍服务无障碍服务（Accessibility Service）本来是安卓为视障人士设计的功能，可以：读取屏幕内容：获取当前界面所有控件的信息模拟用户操作：点击、滑动、输入文字监听系统事件：界面变化、通知到达等简单说，开启无障碍服务后，你的脚本就像一个"看得见屏幕的机器人"，可以知道屏幕上有什么，然后去操作它。2.2 控件 vs 坐标Auto.js 有两种主要的操作方式：方式一：基于控件（推荐） // 通过文字找到按钮并点击 click("领取奖励"); // 通过 id 找到控件 id("btn_claim").findOne().click(); // 通过描述找到控件 desc("关闭").findOne().click();方式二：基于坐标 // 直接点击屏幕坐标 click(540, 1200); // 滑动 swipe(500, 1500, 500, 500, 500);对比：特性控件操作坐标操作适配性好，不同分辨率通用差，换手机就废稳定性高，控件存在才操作低，可能点到别的地方速度稍慢，需要查找控件快，直接点适用场景原生应用、有控件信息的界面游戏画面、Canvas 渲染的界面《咸鱼之王》的尴尬在于——它是个混合应用，部分界面有控件信息，部分界面是纯游戏渲染，需要两种方式结合使用。2.3 布局分析——找到控件的"身份证"Auto.js 自带布局分析功能，可以查看当前界面的控件树： // 方法一：悬浮窗里点"布局分析" // 方法二：代码打印 auto.waitFor(); // 等待无障碍服务启动 let root = className("android.widget.FrameLayout").findOne(); log(root); // 打印控件树布局分析会显示每个控件的：text：显示的文字desc：描述（contentDescription）id：资源 IDclassName：控件类型bounds：位置和大小技巧：优先用 text 和 id，它们最稳定。第三章：项目架构——"猫吃鱼"的设计3.1 功能规划作为一个有追求的脚本，"猫吃鱼"要实现：猫吃鱼 ├── 日常任务 │ ├── 一键领取所有奖励 │ ├── 自动完成日常任务 │ └── 自动观看广告 ├── 战斗系统 │ ├── 自动挂机刷副本 │ ├── 自动打竞技场 │ └── 自动参与活动 ├── 资源管理 │ ├── 自动合成装备 │ ├── 自动强化英雄 │ └── 自动使用体力 └── 辅助功能 ├── 防检测（随机延迟） ├── 异常处理（弹窗、卡顿） └── 运行日志3.2 代码结构cat_eat_fish/ ├── main.js # 主入口 ├── confi…

手机任务执行帮手-'机辅'
type: item
date: 2023-03-25T02:23:00+00:00