修技术之道,日三省吾身 | App Dev & Freelance Thinker & Hacker Growth | 这里是 @道轲(Dorck) 的个人博客,与你一起探寻世界。
访问网站很多工具的起点都不宏大,往往只是为了去掉一段反复出现、但没有创造性的劳动。 juejin-skill 也是这样长出来的。我平时习惯在本地写 Markdown,配图和草稿都按项目目录管理。文章完成后,再回到掘金编辑器里补分类、挑标签、上传图片、创建草稿,偶尔做一次问题不大,但只要写作频率稍微稳定一点,这条链路就会迅速变成额外负担。更麻烦的是,文章一旦修改,还得回到网页端重新同步一遍,本地明明已经有完整原稿,却还要重复操作。 把这件事拆开以后,真正需要被自动化的部分其实非常集中: 登录态最好能复用,而不是每次重新处理登录流程。 分类、标签和热榜信息应该可以直接查询,最好还能给出合理推荐。 本地 Markdown 应该能够直接转换成平台草…
阅读全文为个人博客补一套自动化发文能力,看似只是“少敲几次 front matter”,真正落地时却会迅速演变成一个工程问题:如何适配现有博客结构、如何控制发布风险、如何让脚本保持确定性、又如何让不同 AI 编程环境复用同一套能力。本文就围绕这几个问题,复盘 blog-post skill 的完整实现过程。 这次实现的目标其实很明确:在当前 Jekyll 博客仓库中,新增一个可以被 Codex 和 Claude Code 共用的发文 skill,让它支持创建文章、切换公开状态、补齐 front matter、按需执行 git add / commit / push,并尽可能贴合现有博客的目录结构与写作习惯。 1. 为什么不是继续手写文章模板…
阅读全文在 Android 手写、批注与白板类应用中,决定体验上限的通常不是单一的绘制 API,而是整条输入与渲染链路的协同效率。过去,开发者往往需要自行处理 MotionEvent 采样、预测点插值、压感映射、误触回滚以及低延迟渲染。近两年,Google 逐步将这套能力沉淀为可复用的官方组件:底层由 androidx.graphics:graphics-core 提供低延迟渲染基础设施,上层由 androidx.ink:ink-* 提供笔迹建模、笔刷系统与几何操作能力;同时,Jetpack Compose 文档也补充了高级触控笔输入的工程化处理方式。 本文基于截至 2026-05-24 的官方资料,对 Android 手写技术栈的最新状态…
阅读全文
04本文是两年前输出的文章,可能与现在的成熟方案存在部分细节上“代沟”,请诸位选择性阅读,适当参考即可。 一、需求背景 现在有很多 APP 支持从浏览器或其他地方唤起自家应用,并跳转至特定页面去提高用户黏性。在提高运营手段的背景下,应用也需要迫切提高自身的曝光入口以及活动场景。如果用户可以通过点击短信中的一个活动链接能够直接跳转到目标 APP 的特定页面,那么带来的好处也是不言而喻的。 二、方案调研 iOS 系统提供的 universial link 来帮助应用实现这个功能,而至于 Android 可能就比较繁琐了,Android 6.0 之后开始才提供了 App Links 来帮助开发者从外部唤起自家应用,但是 6.0 之前一般只能通…
阅读全文
05上一篇文章我们对 Android 系统启动过程做了一定了解,本文将继续分析 Launcher 进程的启动流程。 本文基于 Android 13 最新代码来进行源码分析。 Launcher 进程启动 上文中,我们最终谈到了 system_server 进程的创建过程,并且该进程主要负责: 创建系统服务管理器——SystemServiceManager 启动各种服务(AMS、PMS等) 开启 Looper 循环,等待其他线程发送消息并处理 我们看一下 AMS 服务创建及配置这块实现: frameworks/base/services/java/com/android/server/SystemServer.java 1 2 3 4 5…
阅读全文概述 生产者-消费者模型是 Java 并发编程中比较常见的加锁应用场景之一,以下是维基百科的对于该名词的定义: 生产者消费者问题(Producer-consumer problem),也称有限缓冲问题(Bounded-buffer problem),是一个多进程同步问题的经典案例。该问题描述了共享固定大小缓冲区的两个进程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。 问题分析 结合上图及定义我们可以提取出该模型具有以下特点:…
阅读全文
07Android 手机从长按开机到应用的启动阶段都经历了些什么呢?Android 启动过程涉及一系列操作,首先是启动 ROM,接着是引导加载程序、内核启动、init、Zygote 和 SystemServer 创建等过程。整个过程涉及到虚拟机的启动、Binder 线程池的创建以及各项系统服务启动等过程。熟悉 APP 启动过程还可以帮助我们打破性能优化瓶颈,助力于启动性能的提升。下面是启动过程涉及到的关键进程和服务: 本文基于 Android 13 最新代码来分析 Android 系统及应用启动过程。 Init 进程启动 init 进程在 Android 系统中扮演着非常重要的角色,它不仅仅是系统的第一个用户进程(pid 为 1),还负…
阅读全文
08AOSP,即 Android Open Source Project,对于 Android 开发者来说再熟悉不过的项目,本文将着重介绍如何在 MacOS Monterey 环境上下载完整的 AOSP 源码。 Git & Python 1. Git 安装和配置 在安装了 Homebrew 的情况下,安装 git 我们只需要执行如下命令: 1 brew install git 接着初始化一下 Git 的全局配置信息: 1 2 git config --global user.name "User Name" git config --global user.email "your@example.com" 2. 配置 pytho…
阅读全文
09这是一个关于如何效率编程的系列专题,未来将会涉及诸如工具、脚本、插件、开源框架等各方面,只要能够帮助我们提升开发效率。 在日常当中,熟练地运用各种快捷键能够极大地提升我们的开发和工作效率。当看到其他同学通过快捷键两三下操作就帮你定位了问题代码并修改完毕,你是否也曾露出羡慕之色。正所谓磨刀不误砍柴工,快捷键也像宝刀一样,长时间弃而不用就会生锈,长此以往我们就会失去这一强大的臂助。 以下常用快捷键指令皆基于 MAC 系统。 基础文本操作 其实很多文本类工具都提供了通用的快捷键,比如文本选择、光标快速移动等等,毋以善小而不为,不要小看这些小小的效率提升,聚沙成塔,长久以后就会凝聚成我们自身强大工作流的一部分。 光标移动 光标移动到行头/尾…
阅读全文
10我们都知道,Android 中线程创建过程需要追溯到 Native 层面,最终是委托给一个 Linux 标准线程 pthread 来执行的,所以 Android 中线程状态本质上是 Native 线程的一种映射。Android 中运行的线程可以分为两种:一种是 attach 到虚拟机的,即虚拟机线程;另一种是没有 attach 到虚拟机的。今天我们就分别从源码层面来看看 Android 系统中 Java 和 Native 层线程的创建过程。 以下分析基于 Android 13 最新源码。 Java 线程创建过程 首先,我们需要知道的是:当我们通过 new 关键字创建一个 Thread 时其实并没有真正创建一个线程,只有调用 star…
阅读全文